From 592f7c3e3412dd61776a9f55de1a8ebb6fd393db Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Sun, 8 May 2016 17:31:44 +0300 Subject: [PATCH 001/483] updated readme --- README.md | 2 ++ views/index.hbs | 3 +++ 2 files changed, 5 insertions(+) diff --git a/README.md b/README.md index 033a0555..71a169be 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ ![](http://mailtrain.org/mailtrain.png) +> **NB!** I'm running an IndieGoGo campaign to help fund developing first class automation support into Mailtrain. See all details here: [https://igg.me/at/mailtrain/8720095](https://igg.me/at/mailtrain/8720095) + ## Features Mailtrain supports subscriber list management, list segmentation, custom fields, email templates, large CSV list import files, etc. diff --git a/views/index.hbs b/views/index.hbs index cc1cb776..7dce4ce6 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -1,3 +1,6 @@ + +
NB! I'm running an IndieGoGo campaign to help fund developing first class automation support into Mailtrain. See all details here: https://igg.me/at/mailtrain/8720095
+
From a9d6c1a6662f781efb701ec62761dd56c340c268 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Fri, 13 May 2016 11:45:18 +0300 Subject: [PATCH 002/483] Added CLA file --- ICLA.md | 66 ++++++++++++++++++++++++++++++++++++++++++++ LICENSE | 2 +- config/default.toml | 1 + package.json | 2 +- setup/mailtrain.conf | 2 +- views/layout.hbs | 2 +- 6 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 ICLA.md diff --git a/ICLA.md b/ICLA.md new file mode 100644 index 00000000..f20f3bcb --- /dev/null +++ b/ICLA.md @@ -0,0 +1,66 @@ +###Kreata Individual Contributor License Agreement + +Thank you for your interest in contributing to open source software projects (“Projects”) made available by Kreata OÜ or its affiliates (“Kreata”). This Individual Contributor License Agreement (“Agreement”) sets out the terms governing any source code, object code, bug fixes, configuration changes, tools, specifications, documentation, data, materials, feedback, information or other works of authorship that you submit or have submitted, in any form and in any manner, to Kreata in respect of any of the Projects (collectively “Contributions”). If you have any questions respecting this Agreement, please contact andris@kreata.ee. + + +You agree that the following terms apply to all of your past, present and future Contributions. Except for the licenses granted in this Agreement, you retain all of your right, title and interest in and to your Contributions. + + +**Copyright License.** You hereby grant, and agree to grant, to Kreata a non-exclusive, perpetual, irrevocable, worldwide, fully-paid, royalty-free, transferable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, and distribute your Contributions and such derivative works, with the right to sublicense the foregoing rights through multiple tiers of sublicensees. + + +**Patent License.** You hereby grant, and agree to grant, to Kreata a non-exclusive, perpetual, irrevocable, +worldwide, fully-paid, royalty-free, transferable patent license to make, have made, use, offer to sell, sell, +import, and otherwise transfer your Contributions, where such license applies only to those patent claims +licensable by you that are necessarily infringed by your Contributions alone or by combination of your +Contributions with the Project to which such Contributions were submitted, with the right to sublicense the +foregoing rights through multiple tiers of sublicensees. + + +**Moral Rights.** To the fullest extent permitted under applicable law, you hereby waive, and agree not to +assert, all of your “moral rights” in or relating to your Contributions for the benefit of Kreata, its assigns, and +their respective direct and indirect sublicensees. + + +**Third Party Content/Rights.** If your Contribution includes or is based on any source code, object code, bug +fixes, configuration changes, tools, specifications, documentation, data, materials, feedback, information or +other works of authorship that were not authored by you (“Third Party Content”) or if you are aware of any +third party intellectual property or proprietary rights associated with your Contribution (“Third Party Rights”), +then you agree to include with the submission of your Contribution full details respecting such Third Party +Content and Third Party Rights, including, without limitation, identification of which aspects of your +Contribution contain Third Party Content or are associated with Third Party Rights, the owner/author of the +Third Party Content and Third Party Rights, where you obtained the Third Party Content, and any applicable +third party license terms or restrictions respecting the Third Party Content and Third Party Rights. For greater +certainty, the foregoing obligations respecting the identification of Third Party Content and Third Party Rights +do not apply to any portion of a Project that is incorporated into your Contribution to that same Project. + + +**Representations.** You represent that, other than the Third Party Content and Third Party Rights identified by +you in accordance with this Agreement, you are the sole author of your Contributions and are legally entitled +to grant the foregoing licenses and waivers in respect of your Contributions. If your Contributions were +created in the course of your employment with your past or present employer(s), you represent that such +employer(s) has authorized you to make your Contributions on behalf of such employer(s) or such employer +(s) has waived all of their right, title or interest in or to your Contributions. + + +**Disclaimer.** To the fullest extent permitted under applicable law, your Contributions are provided on an "asis" +basis, without any warranties or conditions, express or implied, including, without limitation, any implied +warranties or conditions of non-infringement, merchantability or fitness for a particular purpose. You are not +required to provide support for your Contributions, except to the extent you desire to provide support. + + +**No Obligation.** You acknowledge that Kreata is under no obligation to use or incorporate your Contributions +into any of the Projects. The decision to use or incorporate your Contributions into any of the Projects will be +made at the sole discretion of Kreata or its authorized delegates. + + +**Disputes.** This Agreement shall be governed by and construed in accordance with the laws of the State of +New York, United States of America, without giving effect to its principles or rules regarding conflicts of laws, +other than such principles directing application of New York law. The parties hereby submit to venue in, and +jurisdiction of the courts located in New York, New York for purposes relating to this Agreement. In the event +that any of the provisions of this Agreement shall be held by a court or other tribunal of competent jurisdiction +to be unenforceable, the remaining portions hereof shall remain in full force and effect. + + +**Assignment.** You agree that Kreata may assign this Agreement, and all of its rights, obligations and licenses +hereunder. diff --git a/LICENSE b/LICENSE index ded1b7be..4da1c27e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,5 @@ Mailtrain, self hosted email newsletter app -Copyright (C) 2016 Andris Reinman +Copyright (C) 2016 Kreata OÜ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/config/default.toml b/config/default.toml index 64af43c9..223b9e11 100644 --- a/config/default.toml +++ b/config/default.toml @@ -31,6 +31,7 @@ host="localhost" user="mailtrain" password="mailtrain" database="mailtrain" +port=3306 # some installations, eg. MAMP can use a different port (8889) charset="utf8mb4" timezone="local" diff --git a/package.json b/package.json index 015a2694..5fbdf7dd 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "bcrypt-nodejs": "0.0.3", "body-parser": "^1.15.1", "bounce-handler": "^7.3.2-fork.0", - "compression": "^1.6.1", + "compression": "^1.6.2", "config": "^1.20.1", "connect-flash": "^0.1.1", "connect-redis": "^3.0.2", diff --git a/setup/mailtrain.conf b/setup/mailtrain.conf index 0d00ff57..127ff4d9 100644 --- a/setup/mailtrain.conf +++ b/setup/mailtrain.conf @@ -1,7 +1,7 @@ # upstart script for example server description "Mailtrain server" -author "Andris Reinman " +author "Andris Reinman " start on runlevel [2345] stop on runlevel [!2345] diff --git a/views/layout.hbs b/views/layout.hbs index efa08841..da657e20 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -131,7 +131,7 @@ From 0d038f8a069c1e3d67d77ea97af0320cbd59ecb0 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Fri, 13 May 2016 15:32:29 +0300 Subject: [PATCH 003/483] list clicked subscribers --- lib/models/campaigns.js | 90 ++++++++++++++++++++++- lib/models/fields.js | 2 +- lib/tools.js | 2 +- meta.json | 2 +- package.json | 2 +- routes/campaigns.js | 137 ++++++++++++++++++++++++++++++++++- services/sender.js | 2 +- setup/sql/mailtrain.sql | 14 ++-- setup/sql/upgrade-00010.sql | 17 +++++ views/campaigns/clicked.hbs | 83 +++++++++++++++++++++ views/campaigns/edit-rss.hbs | 46 ++++++++++++ views/campaigns/edit.hbs | 47 ++++++------ views/campaigns/view.hbs | 61 +++++++++------- 13 files changed, 439 insertions(+), 66 deletions(-) create mode 100644 setup/sql/upgrade-00010.sql create mode 100644 views/campaigns/clicked.hbs diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index 52e80c4d..465218c5 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -127,6 +127,74 @@ module.exports.filter = (request, parent, callback) => { } }; +module.exports.filterClickedSubscribers = (campaign, linkId, request, columns, callback) => { + + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + let query = 'SELECT COUNT(`subscription__' + campaign.list + '`.`id`) AS total FROM `subscription__' + campaign.list + '` JOIN `campaign_tracker__' + campaign.id + '` ON `campaign_tracker__' + campaign.id + '`.`list`=? AND `campaign_tracker__' + campaign.id + '`.`subscriber`=`subscription__' + campaign.list + '`.`id` AND `campaign_tracker__' + campaign.id + '`.`link`=?'; + let values = [campaign.list, linkId]; + + connection.query(query, values, (err, total) => { + if (err) { + connection.release(); + return callback(err); + } + total = total && total[0] && total[0].total || 0; + + let ordering = []; + + if (request.order && request.order.length) { + + request.order.forEach(order => { + let orderField = columns[Number(order.column)]; + let orderDirection = (order.dir || '').toString().toLowerCase() === 'desc' ? 'DESC' : 'ASC'; + if (orderField) { + ordering.push('`' + orderField + '` ' + orderDirection); + } + }); + } + + if (!ordering.length) { + ordering.push('`email` ASC'); + } + + let args = [Number(request.length) || 50, Number(request.start) || 0]; + + if (request.search && request.search.value) { + query = 'SELECT SQL_CALC_FOUND_ROWS * FROM `subscription__' + campaign.list + '` JOIN `campaign_tracker__' + campaign.id + '` ON `campaign_tracker__' + campaign.id + '`.`list`=? AND `campaign_tracker__' + campaign.id + '`.`subscriber`=`subscription__' + campaign.list + '`.`id` AND `campaign_tracker__' + campaign.id + '`.`link`=? WHERE email LIKE ? OR first_name LIKE ? OR last_name LIKE ? ORDER BY ' + ordering.join(', ') + ' LIMIT ? OFFSET ?'; + + let searchVal = '%' + request.search.value.replace(/\\/g, '\\\\').replace(/([%_])/g, '\\$1') + '%'; + args = values.concat([searchVal, searchVal, searchVal]).concat(args); + } else { + query = 'SELECT SQL_CALC_FOUND_ROWS * FROM `subscription__' + campaign.list + '` JOIN `campaign_tracker__' + campaign.id + '` ON `campaign_tracker__' + campaign.id + '`.`list`=? AND `campaign_tracker__' + campaign.id + '`.`subscriber`=`subscription__' + campaign.list + '`.`id` AND `campaign_tracker__' + campaign.id + '`.`link`=? ORDER BY ' + ordering.join(', ') + ' LIMIT ? OFFSET ?'; + args = values.concat(args); + } + + connection.query(query, args, (err, rows) => { + if (err) { + connection.release(); + return callback(err); + } + connection.query('SELECT FOUND_ROWS() AS total', (err, filteredTotal) => { + connection.release(); + if (err) { + return callback(err); + } + + let subscriptions = rows.map(row => tools.convertKeys(row)); + + filteredTotal = filteredTotal && filteredTotal[0] && filteredTotal[0].total || 0; + return callback(null, subscriptions, total, filteredTotal); + }); + }); + }); + }); + +}; + module.exports.getByCid = (cid, callback) => { cid = (cid || '').toString().trim(); if (!cid) { @@ -226,8 +294,14 @@ module.exports.get = (id, withSegment, callback) => { }); }; -module.exports.getLinks = (id, callback) => { +module.exports.getLinks = (id, linkId, callback) => { + if (!callback && typeof linkId === 'function') { + callback = linkId; + linkId = false; + } + id = Number(id) || 0; + linkId = Number(linkId) || 0; if (id < 1) { return callback(new Error('Missing Campaign ID')); @@ -238,8 +312,18 @@ module.exports.getLinks = (id, callback) => { return callback(err); } - let query = 'SELECT `id`, `url`, `clicks` FROM links WHERE `campaign`=? LIMIT 1000'; - connection.query(query, [id], (err, rows) => { + let query; + let values; + + if (!linkId) { + query = 'SELECT `id`, `url`, `clicks` FROM links WHERE `campaign`=? LIMIT 1000'; + values = [id]; + } else { + query = 'SELECT `id`, `url`, `clicks` FROM links WHERE `id`=? AND `campaign`=? LIMIT 1'; + values = [linkId, id]; + } + + connection.query(query, values, (err, rows) => { connection.release(); if (err) { return callback(err); diff --git a/lib/models/fields.js b/lib/models/fields.js index ebe92c5d..87ad301c 100644 --- a/lib/models/fields.js +++ b/lib/models/fields.js @@ -429,7 +429,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { }; }).filter(subField => subField) }; - item.value = item.options.filter(subField => showAll || subField.visible && subField.value).map(subField => subField.name).join(', '); + item.value = item.options.filter(subField => (showAll || subField.visible) && subField.value).map(subField => subField.name).join(', '); item.mergeValue = item.value || field.defaultValue; row.push(item); break; diff --git a/lib/tools.js b/lib/tools.js index c194c440..baa6609c 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -178,7 +178,7 @@ function formatMessage(serviceUrl, campaign, list, subscription, message, filter return message.replace(/\[([a-z0-9_]+)(?:\/([^\]]+))?\]/ig, (match, identifier, fallback) => { identifier = identifier.toUpperCase(); let value = (getValue(identifier) || fallback || '').trim(); - return value ? filter(value) : match; + return value ? filter(value) : ''; }); } diff --git a/meta.json b/meta.json index 0aa4b5e3..bab3b5df 100644 --- a/meta.json +++ b/meta.json @@ -1,3 +1,3 @@ { - "schemaVersion": 9 + "schemaVersion": 10 } diff --git a/package.json b/package.json index 5fbdf7dd..d68608f4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mailtrain", "private": true, - "version": "1.7.0", + "version": "1.8.0", "description": "Self hosted email newsletter app", "main": "index.js", "scripts": { diff --git a/routes/campaigns.js b/routes/campaigns.js index ed5819a2..56748d7e 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -3,6 +3,7 @@ let express = require('express'); let router = new express.Router(); let lists = require('../lib/models/lists'); +let fields = require('../lib/models/fields'); let templates = require('../lib/models/templates'); let campaigns = require('../lib/models/campaigns'); let settings = require('../lib/models/settings'); @@ -157,7 +158,56 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { view = 'campaigns/edit'; } - res.render(view, campaign); + lists.get(campaign.list, (err, list) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/'); + } + if (!list) { + req.flash('danger', 'Selected list does not exist'); + res.render(view, campaign); + return; + } + + fields.list(list.id, (err, fieldList) => { + if (err && !fieldList) { + fieldList = []; + } + + let mergeTags = [ + // indent + { + key: 'LINK_UNSUBSCRIBE', + value: 'URL that points to the preferences page of the subscriber' + }, { + key: 'LINK_PREFERENCES', + value: 'URL that points to the unsubscribe page' + }, { + key: 'LINK_BROWSER', + value: 'URL to preview the message in a browser' + }, { + key: 'FIRST_NAME', + value: 'First name' + }, { + key: 'LAST_NAME', + value: 'Last name' + }, { + key: 'FULL_NAME', + value: 'Full name (first and last name combined)' + } + ]; + + fieldList.forEach(field => { + mergeTags.push({ + key: field.key, + value: field.name + }); + }); + + campaign.mergeTags = mergeTags; + res.render(view, campaign); + }); + }); }); }); }); @@ -268,6 +318,9 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { campaign.isScheduled = campaign.scheduled && campaign.scheduled > new Date(); + // show only messages that weren't bounced as delivered + campaign.delivered = campaign.delivered - campaign.bounced; + campaign.openRate = campaign.delivered ? Math.round((campaign.opened / campaign.delivered) * 100) : 0; campaign.clicksRate = campaign.delivered ? Math.round((campaign.clicks / campaign.delivered) * 100) : 0; @@ -286,7 +339,8 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { } return link; }); - campaign.showOverview = true; + campaign.showOverview = !req.query.tab || req.query.tab==='overview'; + campaign.showLinks = req.query.tab==='links'; res.render('campaigns/view', campaign); }); @@ -294,6 +348,85 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { }); }); +router.get('/clicked/:id/:linkId', passport.csrfProtection, (req, res) => { + campaigns.get(req.params.id, true, (err, campaign) => { + if (err || !campaign) { + req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + return res.redirect('/campaigns'); + } + + lists.get(campaign.list, (err, list) => { + if (err || !campaign) { + req.flash('danger', err && err.message || err); + return res.redirect('/campaigns'); + } + + campaign.csrfToken = req.csrfToken(); + campaign.list = list; + + // show only messages that weren't bounced as delivered + campaign.delivered = campaign.delivered - campaign.bounced; + + campaigns.getLinks(campaign.id, req.params.linkId, (err, links) => { + if (err) { + // ignore + } + let index = 0; + campaign.link = (links || []).map(link => { + link.index = ++index; + link.totalPercentage = campaign.delivered ? Math.round(((link.clicks / campaign.delivered) * 100) * 1000) / 1000 : 0; + link.relPercentage = campaign.clicks ? Math.round(((link.clicks / campaign.clicks) * 100) * 1000) / 1000 : 0; + link.short = link.url.replace(/^https?:\/\/(www.)?/i, ''); + if (link.short > 63) { + link.short = link.short.substr(0, 60) + '…'; + } + return link; + }).shift(); + campaign.showOverview = true; + res.render('campaigns/clicked', campaign); + }); + + }); + }); +}); + +router.post('/clicked/ajax/:id/:linkId', (req, res) => { + let linkId = Number(req.params.linkId) || 0; + + campaigns.get(req.params.id, true, (err, campaign) => { + if (err || !campaign) { + return res.json({ + error: err && err.message || err || 'Campaign not found', + data: [] + }); + } + + let columns = ['#', 'email', 'first_name', 'last_name', 'campaign_tracker__' + campaign.id + '`.`created', 'count']; + campaigns.filterClickedSubscribers(campaign, linkId, req.body, columns, (err, data, total, filteredTotal) => { + if (err) { + return res.json({ + error: err.message || err, + data: [] + }); + } + + res.json({ + draw: req.body.draw, + recordsTotal: total, + recordsFiltered: filteredTotal, + data: data.map((row, i) => [ + (Number(req.body.start) || 0) + 1 + i, + htmlescape(row.email || ''), + htmlescape(row.firstName || ''), + htmlescape(row.lastName || ''), + '' + row.created.toISOString() + '', + row.count + ]) + }); + }); + }); +}); + router.post('/delete', passport.parseForm, passport.csrfProtection, (req, res) => { campaigns.delete(req.body.id, (err, deleted) => { if (err) { diff --git a/services/sender.js b/services/sender.js index 49c773c5..c934ce34 100644 --- a/services/sender.js +++ b/services/sender.js @@ -151,7 +151,7 @@ function formatMessage(message, callback) { if (field.options) { field.options.forEach(subField => { if (subField.mergeTag) { - message.subscription.mergeTags[subField.mergeTag] = subField.mergeValue || ''; + message.subscription.mergeTags[subField.mergeTag] = subField.value && subField.mergeValue || ''; } }); } diff --git a/setup/sql/mailtrain.sql b/setup/sql/mailtrain.sql index 39922c3d..fe1adaa0 100644 --- a/setup/sql/mailtrain.sql +++ b/setup/sql/mailtrain.sql @@ -23,7 +23,9 @@ CREATE TABLE `campaign_tracker` ( `ip` varchar(100) CHARACTER SET ascii DEFAULT NULL, `country` varchar(2) CHARACTER SET ascii DEFAULT NULL, `count` int(11) unsigned NOT NULL DEFAULT '1', - PRIMARY KEY (`list`,`subscriber`,`link`) + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`list`,`subscriber`,`link`), + KEY `created_index` (`created`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `campaigns` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, @@ -181,7 +183,7 @@ CREATE TABLE `settings` ( `value` text NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key` (`key`) -) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8mb4; INSERT INTO `settings` (`id`, `key`, `value`) VALUES (1,'smtp_hostname','localhost'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (2,'smtp_port','465'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (3,'smtp_encryption','TLS'); @@ -198,7 +200,7 @@ INSERT INTO `settings` (`id`, `key`, `value`) VALUES (13,'default_from','My Awes INSERT INTO `settings` (`id`, `key`, `value`) VALUES (14,'default_address','admin@example.com'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (15,'default_subject','Test message'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (16,'default_homepage','http://localhost:3000/'); -INSERT INTO `settings` (`id`, `key`, `value`) VALUES (17,'db_schema_version','8'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (17,'db_schema_version','10'); CREATE TABLE `subscription` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL, @@ -242,6 +244,7 @@ CREATE TABLE `users` ( `username` varchar(255) NOT NULL DEFAULT '', `password` varchar(255) NOT NULL DEFAULT '', `email` varchar(255) CHARACTER SET utf8 DEFAULT NULL, + `access_token` varchar(40) DEFAULT NULL, `reset_token` varchar(255) CHARACTER SET ascii DEFAULT NULL, `reset_expire` timestamp NULL DEFAULT NULL, `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP, @@ -249,9 +252,10 @@ CREATE TABLE `users` ( UNIQUE KEY `email` (`email`), KEY `username` (`username`(191)), KEY `reset` (`reset_token`), - KEY `check_reset` (`username`(191),`reset_token`,`reset_expire`) + KEY `check_reset` (`username`(191),`reset_token`,`reset_expire`), + KEY `token_index` (`access_token`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; -INSERT INTO `users` (`id`, `username`, `password`, `email`, `reset_token`, `reset_expire`, `created`) VALUES (1,'admin','$2a$10$mzKU71G62evnGB2PvQA4k..Wf9jASk.c7a8zRMHh6qQVjYJ2r/g/K','admin@example.com',NULL,NULL,NOW()); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `access_token`, `reset_token`, `reset_expire`, `created`) VALUES (1,'admin','$2a$10$mzKU71G62evnGB2PvQA4k..Wf9jASk.c7a8zRMHh6qQVjYJ2r/g/K','admin@example.com',NULL,NULL,NULL,NOW()); SET UNIQUE_CHECKS=1; SET FOREIGN_KEY_CHECKS=1; diff --git a/setup/sql/upgrade-00010.sql b/setup/sql/upgrade-00010.sql new file mode 100644 index 00000000..51f67d89 --- /dev/null +++ b/setup/sql/upgrade-00010.sql @@ -0,0 +1,17 @@ +# Header section +# Define incrementing schema version number +SET @schema_version = '10'; + +-- {{#each tables.campaign_tracker}} + + # Adds new column 'created' to campaign tracker table + # Indicates when a subscriber first clicked a link or opened the message + ALTER TABLE `{{this}}` ADD COLUMN `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `count`; + CREATE INDEX created_index ON `{{this}}` (`created`); + +-- {{/each}} + +# Footer section +LOCK TABLES `settings` WRITE; +INSERT INTO `settings` (`key`, `value`) VALUES('db_schema_version', @schema_version) ON DUPLICATE KEY UPDATE `value`=@schema_version; +UNLOCK TABLES; diff --git a/views/campaigns/clicked.hbs b/views/campaigns/clicked.hbs new file mode 100644 index 00000000..f0c91725 --- /dev/null +++ b/views/campaigns/clicked.hbs @@ -0,0 +1,83 @@ + + +

{{name}} Link info View campaign

+ +
+ +{{#if description}} +
{{{description}}}
+{{/if}} + +
+ + + + + + + + + + + + + + + +
+ URL + + Clicks + + % of clicks + + % of messages +
+ {{link.short}} + + {{link.clicks}} + + {{link.relPercentage}} + + {{link.totalPercentage}} +
+ +

Subscribers that clicked on {{link.short}}

+
+ +
+ + + + + + + + + + + +
+ # + + Address + + First Name + + Last Name + + First click + + Click count +
+
+ +
diff --git a/views/campaigns/edit-rss.hbs b/views/campaigns/edit-rss.hbs index 4f57aac9..9a5d0ec5 100644 --- a/views/campaigns/edit-rss.hbs +++ b/views/campaigns/edit-rss.hbs @@ -71,6 +71,52 @@
+
+
+ +
+

+ Merge tags are tags that are replaced before sending out the message. The format of the merge tag is the following: [TAG_NAME] or [TAG_NAME/fallback] where fallback is an optional text value + used when TAG_NAME is empty. +

+ + + + + + + + + + + + + + + {{#each mergeTags}} + + + + + {{/each}} + +
+ Merge tag + + Description +
+ [RSS_ENTRY] + + content from an RSS entry +
+ [{{key}}] + + {{value}} +
+
+
+
+
diff --git a/views/campaigns/edit.hbs b/views/campaigns/edit.hbs index 863cea32..21f2bc56 100644 --- a/views/campaigns/edit.hbs +++ b/views/campaigns/edit.hbs @@ -129,29 +129,30 @@ text value used when TAG_NAME is empty.

-
    -
  • - [FIRST_NAME] – first name of the subscriber -
  • -
  • - [LAST_NAME] – last name of the subscriber -
  • -
  • - [FULL_NAME] – first and last names of the subscriber joined -
  • -
  • - [LINK_UNSUBSCRIBE] – URL that points to the preferences page of the subscriber -
  • -
  • - [LINK_PREFERENCES] – URL that points to the unsubscribe page -
  • -
  • - [LINK_BROWSER] – URL to preview the message in a browser -
  • -
-

- In addition to that any custom field can have its own merge tag. -

+ + + + + + + + + {{#each mergeTags}} + + + + + {{/each}} + +
+ Merge tag + + Description +
+ [{{key}}] + + {{value}} +
diff --git a/views/campaigns/view.hbs b/views/campaigns/view.hbs index d02c92b5..bec02b86 100644 --- a/views/campaigns/view.hbs +++ b/views/campaigns/view.hbs @@ -294,6 +294,9 @@ {{short}} +
+ +
{{clicks}} @@ -339,32 +342,34 @@ {{/if}} - {{#if isRss}} -
-
- If a new entry is found from campaign feed a new subcampaign is created of that entry and it will be listed here -
- - - - - - - - - -
- # - - Name - - Description - - Status - - Created - -   -
+
+ +{{#if isRss}} +
+
+ If a new entry is found from campaign feed a new subcampaign is created of that entry and it will be listed here
- {{/if}} + + + + + + + + + +
+ # + + Name + + Description + + Status + + Created + +   +
+
+{{/if}} From 54ff4169d92fdce1f5d9b031b459a303cac55b6c Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Fri, 13 May 2016 15:46:39 +0300 Subject: [PATCH 004/483] fixed click tracking --- lib/models/campaigns.js | 1 - routes/campaigns.js | 6 +++--- views/campaigns/clicked.hbs | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index 465218c5..4386080f 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -128,7 +128,6 @@ module.exports.filter = (request, parent, callback) => { }; module.exports.filterClickedSubscribers = (campaign, linkId, request, columns, callback) => { - db.getConnection((err, connection) => { if (err) { return callback(err); diff --git a/routes/campaigns.js b/routes/campaigns.js index 56748d7e..da50f5aa 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -339,8 +339,8 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { } return link; }); - campaign.showOverview = !req.query.tab || req.query.tab==='overview'; - campaign.showLinks = req.query.tab==='links'; + campaign.showOverview = !req.query.tab || req.query.tab === 'overview'; + campaign.showLinks = req.query.tab === 'links'; res.render('campaigns/view', campaign); }); @@ -419,7 +419,7 @@ router.post('/clicked/ajax/:id/:linkId', (req, res) => { htmlescape(row.email || ''), htmlescape(row.firstName || ''), htmlescape(row.lastName || ''), - '' + row.created.toISOString() + '', + row.created && row.created.toISOString ? '' + row.created.toISOString() + '' : 'N/A', row.count ]) }); diff --git a/views/campaigns/clicked.hbs b/views/campaigns/clicked.hbs index f0c91725..284dd951 100644 --- a/views/campaigns/clicked.hbs +++ b/views/campaigns/clicked.hbs @@ -54,7 +54,7 @@
- +
- + @@ -50,34 +50,37 @@
From 4461b6d612ec0c91dc089bbf747a922c217b7365 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Fri, 13 May 2016 15:57:16 +0300 Subject: [PATCH 005/483] Updated clicks view --- routes/campaigns.js | 3 +- views/campaigns/clicked.hbs | 63 +++++++++++++++++++------------------ 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/routes/campaigns.js b/routes/campaigns.js index da50f5aa..bd9f66c8 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -420,7 +420,8 @@ router.post('/clicked/ajax/:id/:linkId', (req, res) => { htmlescape(row.firstName || ''), htmlescape(row.lastName || ''), row.created && row.created.toISOString ? '' + row.created.toISOString() + '' : 'N/A', - row.count + row.count, + 'Edit' ]) }); }); diff --git a/views/campaigns/clicked.hbs b/views/campaigns/clicked.hbs index 284dd951..6a5c4590 100644 --- a/views/campaigns/clicked.hbs +++ b/views/campaigns/clicked.hbs @@ -33,7 +33,7 @@
{{link.short}}
-

Subscribers that clicked on {{link.short}}

-
- -
- - - - - - - - - - - -
- # - - Address - - First Name - - Last Name - - First click - - Click count -
+
+ +
Subscribers who clicked on this link:
+
+
+ + + + + + + + + + + + +
+ # + + Address + + First Name + + Last Name + + First click + + Click count +
+
+
-
From 7d51ed02f0600b8555647d8a505d4724fc56d7f3 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Fri, 13 May 2016 15:59:37 +0300 Subject: [PATCH 006/483] u --- CHANGELOG.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 3388268f..2de87ea2 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ # Changelog +## 1.8.0 2016-05-13 + + * Show details about subscribers who clicked on a specific link + ## 1.7.0 2016-05-11 * Updated API, added new option **REQUIRE_CONFIRMATION** for subscriptions to send confirmation email before subscribing From d933f07eac95c42b5c67b443a20dff28bf5d9ab9 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Fri, 13 May 2016 20:08:42 +0300 Subject: [PATCH 007/483] v1.8.1 --- CHANGELOG.txt | 4 ++++ lib/models/subscriptions.js | 18 ++++++++++++++++++ package.json | 2 +- routes/api.js | 5 +++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 2de87ea2..76705895 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ # Changelog +## 1.8.1 2016-05-13 + + * Fixed an issue in API + ## 1.8.0 2016-05-13 * Show details about subscribers who clicked on a specific link diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 33917450..3666be24 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -345,6 +345,24 @@ module.exports.insert = (listId, meta, subscription, callback) => { statusDirection = !existing ? (meta.status === 1 ? '+' : '-') : (existing.status === 1 ? '-' : '+'); } + if (!keys.length) { + // nothing to update + return connection.commit(err => { + if (err) { + return connection.rollback(() => { + connection.release(); + return callback(err); + }); + } + connection.release(); + return callback(null, { + entryId, + cid: meta.cid, + inserted: !existing + }); + }); + } + if (!existing) { // insert as new keys = insertKeys.concat(keys); diff --git a/package.json b/package.json index d68608f4..ead450a7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mailtrain", "private": true, - "version": "1.8.0", + "version": "1.8.1", "description": "Self hosted email newsletter app", "main": "index.js", "scripts": { diff --git a/routes/api.js b/routes/api.js index 4685af4e..804ef93f 100644 --- a/routes/api.js +++ b/routes/api.js @@ -6,6 +6,7 @@ let fields = require('../lib/models/fields'); let subscriptions = require('../lib/models/subscriptions'); let tools = require('../lib/tools'); let express = require('express'); +let log = require('npmlog'); let router = new express.Router(); router.all('/*', (req, res, next) => { @@ -44,6 +45,7 @@ router.post('/subscribe/:listId', (req, res) => { }); lists.getByCid(req.params.listId, (err, list) => { if (err) { + log.error('API', err); res.status(500); return res.json({ error: err.message || err, @@ -66,6 +68,7 @@ router.post('/subscribe/:listId', (req, res) => { } tools.validateEmail(input.EMAIL, false, err => { if (err) { + log.error('API', err); res.status(400); return res.json({ error: err.message || err, @@ -121,6 +124,7 @@ router.post('/subscribe/:listId', (req, res) => { if (/^(yes|true|1)$/i.test(input.REQUIRE_CONFIRMATION)) { subscriptions.addConfirmation(list, input.EMAIL, subscription, (err, cid) => { if (err) { + log.error('API', err); res.status(500); return res.json({ error: err.message || err, @@ -137,6 +141,7 @@ router.post('/subscribe/:listId', (req, res) => { } else { subscriptions.insert(list.id, meta, subscription, (err, response) => { if (err) { + log.error('API', err); res.status(500); return res.json({ error: err.message || err, From b626ea9c5e462dd34291cf8a8edc1d2bf473989e Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Fri, 13 May 2016 20:33:06 +0300 Subject: [PATCH 008/483] Allow open ended ranges for segments --- lib/models/segments.js | 30 ++++++++++++++++++++---------- views/lists/segments/rule-edit.hbs | 4 ++-- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/lib/models/segments.js b/lib/models/segments.js index 63025fb8..9454ed72 100644 --- a/lib/models/segments.js +++ b/lib/models/segments.js @@ -548,10 +548,14 @@ module.exports.getQuery = (id, callback) => { break; case 'number': if (rule.value.range) { - query.push('`' + rule.columnType.column + '` >= ?'); - query.push('`' + rule.columnType.column + '` < ?'); - values.push(rule.value.start); - values.push(rule.value.end); + if (rule.value.start) { + query.push('`' + rule.columnType.column + '` >= ?'); + values.push(rule.value.start); + } + if (rule.value.end) { + query.push('`' + rule.columnType.column + '` < ?'); + values.push(rule.value.end); + } } else { query.push('`' + rule.columnType.column + '` = ?'); values.push(rule.value.value); @@ -559,10 +563,12 @@ module.exports.getQuery = (id, callback) => { break; case 'birthday': if (rule.value.range) { + let start = rule.value.start || '01-01'; + let end = rule.value.end || '12-31'; query.push('`' + rule.columnType.column + '` >= ?'); + values.push(getDate('2000-' + start)); query.push('`' + rule.columnType.column + '` < ?'); - values.push(getDate('2000-' + rule.value.start)); - values.push(getDate('2000-' + rule.value.end, true)); + values.push(getDate('2000-' + end, true)); } else { query.push('`' + rule.columnType.column + '` >= ?'); query.push('`' + rule.columnType.column + '` < ?'); @@ -572,10 +578,14 @@ module.exports.getQuery = (id, callback) => { break; case 'date': if (rule.value.range) { - query.push('`' + rule.columnType.column + '` >= ?'); - query.push('`' + rule.columnType.column + '` < ?'); - values.push(getDate(rule.value.start)); - values.push(getDate(rule.value.end, true)); + if (rule.value.start) { + query.push('`' + rule.columnType.column + '` >= ?'); + values.push(getDate(rule.value.start)); + } + if (rule.value.end) { + query.push('`' + rule.columnType.column + '` < ?'); + values.push(getDate(rule.value.end, true)); + } } else { query.push('`' + rule.columnType.column + '` >= ?'); query.push('`' + rule.columnType.column + '` < ?'); diff --git a/views/lists/segments/rule-edit.hbs b/views/lists/segments/rule-edit.hbs index 260c131d..e0c2c4ce 100644 --- a/views/lists/segments/rule-edit.hbs +++ b/views/lists/segments/rule-edit.hbs @@ -135,7 +135,7 @@
@@ -150,7 +150,7 @@
From 5b20ff2242480229832c28a4cea59b84b71e4e62 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Fri, 13 May 2016 21:08:44 +0300 Subject: [PATCH 009/483] v1.8.2 --- CHANGELOG.txt | 4 +++ package.json | 2 +- routes/campaigns.js | 68 +++++++++++++++++++++++++++---------- views/campaigns/clicked.hbs | 41 +++++++++++++++------- views/campaigns/opened.hbs | 54 +++++++++++++++++++++++++++++ views/campaigns/view.hbs | 7 ++-- 6 files changed, 142 insertions(+), 34 deletions(-) create mode 100644 views/campaigns/opened.hbs diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 76705895..37fb552d 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ # Changelog +## 1.8.2 2016-05-13 + + * Added missing views for subscribers who clicked on any link and subscribers who opened the message + ## 1.8.1 2016-05-13 * Fixed an issue in API diff --git a/package.json b/package.json index ead450a7..12a73c72 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mailtrain", "private": true, - "version": "1.8.1", + "version": "1.8.2", "description": "Self hosted email newsletter app", "main": "index.js", "scripts": { diff --git a/routes/campaigns.js b/routes/campaigns.js index bd9f66c8..48c37967 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -348,6 +348,31 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { }); }); +router.get('/opened/:id', passport.csrfProtection, (req, res) => { + campaigns.get(req.params.id, true, (err, campaign) => { + if (err || !campaign) { + req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + return res.redirect('/campaigns'); + } + + lists.get(campaign.list, (err, list) => { + if (err || !campaign) { + req.flash('danger', err && err.message || err); + return res.redirect('/campaigns'); + } + + campaign.csrfToken = req.csrfToken(); + campaign.list = list; + + // show only messages that weren't bounced as delivered + campaign.delivered = campaign.delivered - campaign.bounced; + campaign.clicksRate = campaign.delivered ? Math.round((campaign.clicks / campaign.delivered) * 100) : 0; + + res.render('campaigns/opened', campaign); + }); + }); +}); + router.get('/clicked/:id/:linkId', passport.csrfProtection, (req, res) => { campaigns.get(req.params.id, true, (err, campaign) => { if (err || !campaign) { @@ -366,26 +391,33 @@ router.get('/clicked/:id/:linkId', passport.csrfProtection, (req, res) => { // show only messages that weren't bounced as delivered campaign.delivered = campaign.delivered - campaign.bounced; + campaign.clicksRate = campaign.delivered ? Math.round((campaign.clicks / campaign.delivered) * 100) : 0; - campaigns.getLinks(campaign.id, req.params.linkId, (err, links) => { - if (err) { - // ignore - } - let index = 0; - campaign.link = (links || []).map(link => { - link.index = ++index; - link.totalPercentage = campaign.delivered ? Math.round(((link.clicks / campaign.delivered) * 100) * 1000) / 1000 : 0; - link.relPercentage = campaign.clicks ? Math.round(((link.clicks / campaign.clicks) * 100) * 1000) / 1000 : 0; - link.short = link.url.replace(/^https?:\/\/(www.)?/i, ''); - if (link.short > 63) { - link.short = link.short.substr(0, 60) + '…'; - } - return link; - }).shift(); - campaign.showOverview = true; + if (req.params.linkId === 'all') { + campaign.aggregated = true; + campaign.link = { + id: 0 + }; res.render('campaigns/clicked', campaign); - }); - + } else { + campaigns.getLinks(campaign.id, req.params.linkId, (err, links) => { + if (err) { + // ignore + } + let index = 0; + campaign.link = (links || []).map(link => { + link.index = ++index; + link.totalPercentage = campaign.delivered ? Math.round(((link.clicks / campaign.delivered) * 100) * 1000) / 1000 : 0; + link.relPercentage = campaign.clicks ? Math.round(((link.clicks / campaign.clicks) * 100) * 1000) / 1000 : 0; + link.short = link.url.replace(/^https?:\/\/(www.)?/i, ''); + if (link.short > 63) { + link.short = link.short.substr(0, 60) + '…'; + } + return link; + }).shift(); + res.render('campaigns/clicked', campaign); + }); + } }); }); }); diff --git a/views/campaigns/clicked.hbs b/views/campaigns/clicked.hbs index 6a5c4590..bb20f755 100644 --- a/views/campaigns/clicked.hbs +++ b/views/campaigns/clicked.hbs @@ -34,25 +34,40 @@ - - {{link.short}} - - - {{link.clicks}} - - - {{link.relPercentage}} - - - {{link.totalPercentage}} - + {{#if aggregated}} + + Aggregated clicks + + + {{clicks}} + + + – + + + CTR {{clicksRate}}% + + {{else}} + + {{link.short}} + + + {{link.clicks}} + + + {{link.relPercentage}} + + + {{link.totalPercentage}} + + {{/if}}
-
Subscribers who clicked on this link:
+
{{#if aggregated}}Subscribers who clicked on a link:{{else}}Subscribers who clicked on this link:{{/if}}
diff --git a/views/campaigns/opened.hbs b/views/campaigns/opened.hbs new file mode 100644 index 00000000..9e59be96 --- /dev/null +++ b/views/campaigns/opened.hbs @@ -0,0 +1,54 @@ + + +

{{name}} Opened info View campaign

+ +
+ +{{#if description}} +
{{{description}}}
+{{/if}} + +
+ +
+ +
Subscribers who opened this message:
+
+
+
+ + + + + + + + + + + +
+ # + + Address + + First Name + + Last Name + + First open + + Opened count +
+
+
+
+ diff --git a/views/campaigns/view.hbs b/views/campaigns/view.hbs index bec02b86..88252046 100644 --- a/views/campaigns/view.hbs +++ b/views/campaigns/view.hbs @@ -100,7 +100,7 @@
Unsubscribed
{{unsubscribed}}
-
Opened
+
Opened
@@ -109,7 +109,7 @@
-
Clicked
+
Clicked
@@ -322,6 +322,9 @@ Aggregated clicks +
+ +
{{clicks}} From 97803b74ed76a282ed293a81fe60c4cb332a2f61 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Fri, 13 May 2016 22:51:40 +0300 Subject: [PATCH 010/483] updated clicks/opened stats links --- views/campaigns/view.hbs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/views/campaigns/view.hbs b/views/campaigns/view.hbs index 88252046..33b3f662 100644 --- a/views/campaigns/view.hbs +++ b/views/campaigns/view.hbs @@ -100,7 +100,7 @@
Unsubscribed
{{unsubscribed}}
-
Opened
+
Opened
@@ -109,7 +109,7 @@
-
Clicked
+
Clicked
@@ -295,7 +295,7 @@
- +
{{clicks}} @@ -323,7 +323,7 @@
- +
{{clicks}} From 408f021c366d791267577f7191a7d943a8b329b5 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Sat, 14 May 2016 12:49:42 +0300 Subject: [PATCH 011/483] Added views for bounced/unsubscribed/complained etc. --- lib/models/campaigns.js | 68 ++++++++++++++++++++++++ meta.json | 2 +- routes/campaigns.js | 91 +++++++++++++++++++++++++++++++- setup/sql/upgrade-00011.sql | 15 ++++++ views/campaigns/bounced.hbs | 54 +++++++++++++++++++ views/campaigns/complained.hbs | 54 +++++++++++++++++++ views/campaigns/delivered.hbs | 54 +++++++++++++++++++ views/campaigns/unsubscribed.hbs | 54 +++++++++++++++++++ views/campaigns/view.hbs | 74 +++++++++++++++++--------- 9 files changed, 437 insertions(+), 29 deletions(-) create mode 100644 setup/sql/upgrade-00011.sql create mode 100644 views/campaigns/bounced.hbs create mode 100644 views/campaigns/complained.hbs create mode 100644 views/campaigns/delivered.hbs create mode 100644 views/campaigns/unsubscribed.hbs diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index 4386080f..34816e73 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -194,6 +194,74 @@ module.exports.filterClickedSubscribers = (campaign, linkId, request, columns, c }; +module.exports.filterStatusSubscribers = (campaign, status, request, columns, callback) => { + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + status = Number(status) || 0; + let query = 'SELECT COUNT(`subscription__' + campaign.list + '`.`id`) AS total FROM `subscription__' + campaign.list + '` JOIN `campaign__' + campaign.id + '` ON `campaign__' + campaign.id + '`.`list`=? AND `campaign__' + campaign.id + '`.`segment`=? AND `campaign__' + campaign.id + '`.`subscription`=`subscription__' + campaign.list + '`.`id` WHERE `campaign__' + campaign.id + '`.`status`=?'; + let values = [campaign.list, campaign.segment, status]; + + connection.query(query, values, (err, total) => { + if (err) { + connection.release(); + return callback(err); + } + total = total && total[0] && total[0].total || 0; + + let ordering = []; + + if (request.order && request.order.length) { + + request.order.forEach(order => { + let orderField = columns[Number(order.column)]; + let orderDirection = (order.dir || '').toString().toLowerCase() === 'desc' ? 'DESC' : 'ASC'; + if (orderField) { + ordering.push('`' + orderField + '` ' + orderDirection); + } + }); + } + + if (!ordering.length) { + ordering.push('`email` ASC'); + } + + let args = [Number(request.length) || 50, Number(request.start) || 0]; + + if (request.search && request.search.value) { + query = 'SELECT SQL_CALC_FOUND_ROWS * FROM `subscription__' + campaign.list + '` JOIN `campaign__' + campaign.id + '` ON `campaign__' + campaign.id + '`.`list`=? AND `campaign__' + campaign.id + '`.`segment`=? AND `campaign__' + campaign.id + '`.`subscription`=`subscription__' + campaign.list + '`.`id` WHERE `campaign__' + campaign.id + '`.`status`=? AND (email LIKE ? OR first_name LIKE ? OR last_name LIKE ?) ORDER BY ' + ordering.join(', ') + ' LIMIT ? OFFSET ?'; + + let searchVal = '%' + request.search.value.replace(/\\/g, '\\\\').replace(/([%_])/g, '\\$1') + '%'; + args = values.concat([searchVal, searchVal, searchVal]).concat(args); + } else { + query = 'SELECT SQL_CALC_FOUND_ROWS * FROM `subscription__' + campaign.list + '` JOIN `campaign__' + campaign.id + '` ON `campaign__' + campaign.id + '`.`list`=? AND `campaign__' + campaign.id + '`.`segment`=? AND `campaign__' + campaign.id + '`.`subscription`=`subscription__' + campaign.list + '`.`id` WHERE `campaign__' + campaign.id + '`.`status`=? ORDER BY ' + ordering.join(', ') + ' LIMIT ? OFFSET ?'; + args = values.concat(args); + } + + connection.query(query, args, (err, rows) => { + if (err) { + connection.release(); + return callback(err); + } + connection.query('SELECT FOUND_ROWS() AS total', (err, filteredTotal) => { + connection.release(); + if (err) { + return callback(err); + } + + let subscriptions = rows.map(row => tools.convertKeys(row)); + + filteredTotal = filteredTotal && filteredTotal[0] && filteredTotal[0].total || 0; + return callback(null, subscriptions, total, filteredTotal); + }); + }); + }); + }); + +}; + module.exports.getByCid = (cid, callback) => { cid = (cid || '').toString().trim(); if (!cid) { diff --git a/meta.json b/meta.json index bab3b5df..365ba1cb 100644 --- a/meta.json +++ b/meta.json @@ -1,3 +1,3 @@ { - "schemaVersion": 10 + "schemaVersion": 11 } diff --git a/routes/campaigns.js b/routes/campaigns.js index 48c37967..2ede36d9 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -321,8 +321,11 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { // show only messages that weren't bounced as delivered campaign.delivered = campaign.delivered - campaign.bounced; - campaign.openRate = campaign.delivered ? Math.round((campaign.opened / campaign.delivered) * 100) : 0; - campaign.clicksRate = campaign.delivered ? Math.round((campaign.clicks / campaign.delivered) * 100) : 0; + campaign.openRate = campaign.delivered ? Math.round((campaign.opened / campaign.delivered) * 10000)/100 : 0; + campaign.clicksRate = campaign.delivered ? Math.round((campaign.clicks / campaign.delivered) * 10000)/100 : 0; + campaign.bounceRate = campaign.delivered ? Math.round((campaign.bounced / campaign.delivered) * 10000)/100 : 0; + campaign.complaintRate = campaign.delivered ? Math.round((campaign.complained / campaign.delivered) * 10000)/100 : 0; + campaign.unsubscribeRate = campaign.delivered ? Math.round((campaign.unsubscribed / campaign.delivered) * 10000)/100 : 0; campaigns.getLinks(campaign.id, (err, links) => { if (err) { @@ -373,6 +376,52 @@ router.get('/opened/:id', passport.csrfProtection, (req, res) => { }); }); +router.get('/status/:id/:status', passport.csrfProtection, (req, res) => { + let id = Number(req.params.id) || 0; + let status; + switch (req.params.status) { + case 'delivered': + status = 1; + break; + case 'unsubscribed': + status = 2; + break; + case 'bounced': + status = 3; + break; + case 'complained': + status = 4; + break; + default: + req.flash('danger', 'Unknown status selector'); + return res.redirect('/campaigns'); + } + + campaigns.get(id, true, (err, campaign) => { + if (err || !campaign) { + req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + return res.redirect('/campaigns'); + } + + lists.get(campaign.list, (err, list) => { + if (err || !campaign) { + req.flash('danger', err && err.message || err); + return res.redirect('/campaigns'); + } + + campaign.csrfToken = req.csrfToken(); + campaign.list = list; + + // show only messages that weren't bounced as delivered + campaign.delivered = campaign.delivered - campaign.bounced; + campaign.clicksRate = campaign.delivered ? Math.round((campaign.clicks / campaign.delivered) * 100) : 0; + campaign.status = status; + + res.render('campaigns/' + req.params.status, campaign); + }); + }); +}); + router.get('/clicked/:id/:linkId', passport.csrfProtection, (req, res) => { campaigns.get(req.params.id, true, (err, campaign) => { if (err || !campaign) { @@ -460,6 +509,44 @@ router.post('/clicked/ajax/:id/:linkId', (req, res) => { }); }); +router.post('/status/ajax/:id/:status', (req, res) => { + let status = Number(req.params.status) || 0; + + campaigns.get(req.params.id, true, (err, campaign) => { + if (err || !campaign) { + return res.json({ + error: err && err.message || err || 'Campaign not found', + data: [] + }); + } + + let columns = ['#', 'email', 'first_name', 'last_name', 'campaign__' + campaign.id + '`.`updated']; + campaigns.filterStatusSubscribers(campaign, status, req.body, columns, (err, data, total, filteredTotal) => { + if (err) { + return res.json({ + error: err.message || err, + data: [] + }); + } + + res.json({ + draw: req.body.draw, + recordsTotal: total, + recordsFiltered: filteredTotal, + data: data.map((row, i) => [ + (Number(req.body.start) || 0) + 1 + i, + htmlescape(row.email || ''), + htmlescape(row.firstName || ''), + htmlescape(row.lastName || ''), + htmlescape(row.response || ''), + row.updated && row.created.toISOString ? '' + row.updated.toISOString() + '' : 'N/A', + 'Edit' + ]) + }); + }); + }); +}); + router.post('/delete', passport.parseForm, passport.csrfProtection, (req, res) => { campaigns.delete(req.body.id, (err, deleted) => { if (err) { diff --git a/setup/sql/upgrade-00011.sql b/setup/sql/upgrade-00011.sql new file mode 100644 index 00000000..59f14fef --- /dev/null +++ b/setup/sql/upgrade-00011.sql @@ -0,0 +1,15 @@ +# Header section +# Define incrementing schema version number +SET @schema_version = '11'; + +-- {{#each tables.campaign}} + + # Adds new index for 'status' on campaign messages table + CREATE INDEX status_index ON `{{this}}` (`status`); + +-- {{/each}} + +# Footer section +LOCK TABLES `settings` WRITE; +INSERT INTO `settings` (`key`, `value`) VALUES('db_schema_version', @schema_version) ON DUPLICATE KEY UPDATE `value`=@schema_version; +UNLOCK TABLES; diff --git a/views/campaigns/bounced.hbs b/views/campaigns/bounced.hbs new file mode 100644 index 00000000..c35cc3a0 --- /dev/null +++ b/views/campaigns/bounced.hbs @@ -0,0 +1,54 @@ + + +

{{name}} Bounced info View campaign

+ +
+ +{{#if description}} +
{{{description}}}
+{{/if}} + +
+ +
+ +
Subscribers who bounced and were unsubscribed:
+
+
+ + + + + + + + + + + + +
+ # + + Address + + First Name + + Last Name + + SMTP response + + Bounced +
+
+
+
+
diff --git a/views/campaigns/complained.hbs b/views/campaigns/complained.hbs new file mode 100644 index 00000000..77f1b41a --- /dev/null +++ b/views/campaigns/complained.hbs @@ -0,0 +1,54 @@ + + +

{{name}} Complained info View campaign

+ +
+ +{{#if description}} +
{{{description}}}
+{{/if}} + +
+ +
+ +
Subscribers who complained and were unsubscribed:
+
+
+ + + + + + + + + + + + +
+ # + + Address + + First Name + + Last Name + + SMTP response + + Complained +
+
+
+
+
diff --git a/views/campaigns/delivered.hbs b/views/campaigns/delivered.hbs new file mode 100644 index 00000000..fec89f6d --- /dev/null +++ b/views/campaigns/delivered.hbs @@ -0,0 +1,54 @@ + + +

{{name}} Delivered info View campaign

+ +
+ +{{#if description}} +
{{{description}}}
+{{/if}} + +
+ +
+ +
Subscribers who received the message:
+
+
+ + + + + + + + + + + + +
+ # + + Address + + First Name + + Last Name + + SMTP response + + Delivered +
+
+
+
+
diff --git a/views/campaigns/unsubscribed.hbs b/views/campaigns/unsubscribed.hbs new file mode 100644 index 00000000..c6440dfa --- /dev/null +++ b/views/campaigns/unsubscribed.hbs @@ -0,0 +1,54 @@ + + +

{{name}} Unsubscribed info View campaign

+ +
+ +{{#if description}} +
{{{description}}}
+{{/if}} + +
+ +
+ +
Subscribers who unsubscribed:
+
+
+ + + + + + + + + + + + +
+ # + + Address + + First Name + + Last Name + + SMTP response + + Unsubscribed +
+
+
+
+
diff --git a/views/campaigns/view.hbs b/views/campaigns/view.hbs index 33b3f662..cbe84648 100644 --- a/views/campaigns/view.hbs +++ b/views/campaigns/view.hbs @@ -88,37 +88,59 @@ {{#if isNormal}} {{#unless isIdling}} -
Delivered
+
Delivered
{{delivered}}
-
Bounced
-
{{bounced}}
+ +
+
-
Complaints
-
{{complained}}
+
Bounced
+
+
+
+ {{bounced}} ({{bounceRate}}%) +
+
+
-
Unsubscribed
-
{{unsubscribed}}
+
Complaints
+
+
+
+ {{complained}} ({{complaintRate}}%) +
+
+
-
Opened
-
-
-
- {{openRate}}% -
-
-
+
Unsubscribed
+
+
+
+ {{unsubscribed}} ({{unsubscribeRate}}%) +
+
+
-
Clicked
-
-
-
- {{clicksRate}}% -
-
-
+
Opened
+
+
+
+ {{opened}} ({{openRate}}%) +
+
+
- {{/unless}} +
Clicked
+
+
+
+ {{clicks}} ({{clicksRate}}%) +
+
+
+ + {{/unless}} {{/if}}
@@ -295,7 +317,7 @@
- +
{{clicks}} @@ -323,7 +345,7 @@
- +
{{clicks}} From ab91eaf441b5604e8d3d83a7e47df9b6f7bc560f Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Sun, 15 May 2016 12:26:30 +0300 Subject: [PATCH 012/483] updated theme --- views/index.hbs | 24 ++++++++---------------- views/layout.hbs | 10 +++++++--- views/lists/lists.hbs | 10 +++++----- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/views/index.hbs b/views/index.hbs index 7dce4ce6..ce8f3dd9 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -1,23 +1,15 @@ - -
NB! I'm running an IndieGoGo campaign to help fund developing first class automation support into Mailtrain. See all details here: https://igg.me/at/mailtrain/8720095
-
-
- Subscribe to our newsletter (newsletter is handled by Mailtrain itself) + -
-
-
-
-
-

Support Mailtrain development

-

- Donate to author -

-

If you want to support with Bitcoins, then my wallet address is 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM

-
diff --git a/views/layout.hbs b/views/layout.hbs index da657e20..3eff00a4 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -14,7 +14,7 @@ {{#if title}} | {{title}}{{/if}} - + @@ -28,7 +28,7 @@ -
+
+
+
+ +
+
+
+
From a229f80e22fc34134a3ce7470ea94dd03118da44 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Wed, 1 Jun 2016 16:36:24 +0300 Subject: [PATCH 023/483] Added support for relative date ranges in segments --- app.js | 1 - config/default.toml | 1 + index.js | 1 - lib/models/segments.js | 43 +++++++++++++++--- lib/models/users.js | 4 +- public/css/mailtrain.css | 14 ++++++ routes/campaigns.js | 2 +- views/campaigns/view.hbs | 2 +- views/layout.hbs | 1 + views/lists/segments/rule-configure.hbs | 55 ++++++++++++++++++++++- views/lists/segments/rule-edit.hbs | 59 +++++++++++++++++++++++-- 11 files changed, 169 insertions(+), 14 deletions(-) create mode 100644 public/css/mailtrain.css diff --git a/app.js b/app.js index 92050075..22eba2fb 100644 --- a/app.js +++ b/app.js @@ -212,5 +212,4 @@ app.use((err, req, res, next) => { }); }); - module.exports = app; diff --git a/config/default.toml b/config/default.toml index 181bcc32..816a07ca 100644 --- a/config/default.toml +++ b/config/default.toml @@ -41,6 +41,7 @@ enabled=false host="localhost" port=6379 db=5 +# password="" [verp] enabled=false diff --git a/index.js b/index.js index 78de9a72..4b0fde8a 100644 --- a/index.js +++ b/index.js @@ -32,7 +32,6 @@ app.set('port', port); let server = http.createServer(app); - // Check if database needs upgrading before starting the server dbcheck(err => { if (err) { diff --git a/lib/models/segments.js b/lib/models/segments.js index 8fdb2f5d..8efd9b55 100644 --- a/lib/models/segments.js +++ b/lib/models/segments.js @@ -140,7 +140,9 @@ module.exports.get = (id, callback) => { case 'number': case 'date': case 'birthday': - if (rule.value.range) { + if (rule.value.relativeRange) { + rule.formatted = (rule.value.start ? rule.value.start + ' days ' + (rule.value.startDirection ? 'after' : 'before') + ' today' : 'today') + ' … ' + (rule.value.end ? rule.value.end + ' days ' + (rule.value.endDirection ? 'after' : 'before') + ' today' : 'today'); + } else if (rule.value.range) { rule.formatted = (rule.value.start || '') + ' … ' + (rule.value.end || ''); } else { rule.formatted = rule.value.value || ''; @@ -294,7 +296,15 @@ module.exports.createRule = (segmentId, rule, callback) => { case 'date': case 'birthday': case 'number': - if (rule.range) { + if (column.type === 'date' && rule.range === 'relative') { + value = { + relativeRange: true, + start: Number(rule.startRelative) || 0, + startDirection: Number(rule.startDirection) ? 1 : 0, + end: Number(rule.endRelative) || 0, + endDirection: Number(rule.endDirection) ? 1 : 0 + }; + } else if (rule.range === 'yes') { value = { range: true, start: rule.start, @@ -389,7 +399,9 @@ module.exports.getRule = (id, callback) => { case 'number': case 'date': case 'birthday': - if (rule.value.range) { + if (rule.value.relativeRange) { + rule.formatted = (rule.value.start ? rule.value.start + ' days ' + (rule.value.startDirection ? 'after' : 'before') + ' today' : 'today') + ' … ' + (rule.value.end ? rule.value.end + ' days ' + (rule.value.endDirection ? 'after' : 'before') + ' today' : 'today'); + } else if (rule.value.range) { rule.formatted = (rule.value.start || '') + ' … ' + (rule.value.end || ''); } else { rule.formatted = rule.value.value || ''; @@ -445,7 +457,15 @@ module.exports.updateRule = (id, rule, callback) => { case 'date': case 'birthday': case 'number': - if (rule.range) { + if (column.type === 'date' && rule.range === 'relative') { + value = { + relativeRange: true, + start: Number(rule.startRelative) || 0, + startDirection: Number(rule.startDirection) ? 1 : 0, + end: Number(rule.endRelative) || 0, + endDirection: Number(rule.endDirection) ? 1 : 0 + }; + } else if (rule.range === 'yes') { value = { range: true, start: rule.start, @@ -527,6 +547,11 @@ module.exports.getQuery = (id, prefix, callback) => { let query = []; let values = []; + let getRelativeDate = (days, direction) => { + let date = new Date(Date.now() + (direction ? 1 : -1) * days * 24 * 3600 * 1000); + return date.toISOString().substr(0, 10); + }; + let getDate = (value, nextDay) => { let parts = value.trim().split(/\D/); let year = Number(parts.shift()) || 0; @@ -579,7 +604,15 @@ module.exports.getQuery = (id, prefix, callback) => { } break; case 'date': - if (rule.value.range) { + if (rule.value.relativeRange) { + // start + query.push(prefix + '`' + rule.columnType.column + '` >= ?'); + values.push(getDate(getRelativeDate(rule.value.start, rule.value.startDirection))); + + // end + query.push(prefix + '`' + rule.columnType.column + '` < ?'); + values.push(getDate(getRelativeDate(rule.value.end, rule.value.endDirection), true)); + } else if (rule.value.range) { if (rule.value.start) { query.push(prefix + '`' + rule.columnType.column + '` >= ?'); values.push(getDate(rule.value.start)); diff --git a/lib/models/users.js b/lib/models/users.js index c178659b..62f8c10e 100644 --- a/lib/models/users.js +++ b/lib/models/users.js @@ -87,8 +87,10 @@ module.exports.authenticate = (username, password, callback) => { if (!result) { return callback(null, false); } + + let user = tools.convertKeys(rows[0]); return callback(null, { - id: rows[0].id, + id: user.id, username }); }); diff --git a/public/css/mailtrain.css b/public/css/mailtrain.css new file mode 100644 index 00000000..79e94191 --- /dev/null +++ b/public/css/mailtrain.css @@ -0,0 +1,14 @@ +.glyphicon.spinning { + animation: spin 1s infinite linear; + -webkit-animation: spin2 1s infinite linear; +} + +@keyframes spin { + from { transform: scale(1) rotate(0deg); } + to { transform: scale(1) rotate(360deg); } +} + +@-webkit-keyframes spin2 { + from { -webkit-transform: rotate(0deg); } + to { -webkit-transform: rotate(360deg); } +} diff --git a/routes/campaigns.js b/routes/campaigns.js index e93e24dd..e23b897c 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -263,7 +263,7 @@ router.post('/ajax', (req, res) => { if (data.scheduled && data.scheduled > new Date()) { return 'Scheduled'; } - return 'Sending'; + return ' Sending…'; case 3: return 'Finished'; case 4: diff --git a/views/campaigns/view.hbs b/views/campaigns/view.hbs index 21ddb5cd..58e3c470 100644 --- a/views/campaigns/view.hbs +++ b/views/campaigns/view.hbs @@ -229,7 +229,7 @@
-

Sending…

+

Sending…

{{/if}} {{/if}} diff --git a/views/layout.hbs b/views/layout.hbs index 3eff00a4..57f22c7c 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -19,6 +19,7 @@ + {{#if useEditor}} diff --git a/views/lists/segments/rule-configure.hbs b/views/lists/segments/rule-configure.hbs index 5c89cf33..d0659bbe 100644 --- a/views/lists/segments/rule-configure.hbs +++ b/views/lists/segments/rule-configure.hbs @@ -81,7 +81,7 @@
@@ -123,6 +123,59 @@ + +
+
+ +
+
+ +
+
+
+
+

From

+
+
+
+ +
+ days + +
+
+
+
+

to

+
+
+
+ +
+ days + +
+
+
+
+
+
{{/if}} {{#if columnTypeBirthday}} diff --git a/views/lists/segments/rule-edit.hbs b/views/lists/segments/rule-edit.hbs index e0c2c4ce..cd17e794 100644 --- a/views/lists/segments/rule-edit.hbs +++ b/views/lists/segments/rule-edit.hbs @@ -86,7 +86,7 @@
@@ -114,7 +114,7 @@
- +
@@ -122,7 +122,60 @@
- + +
+
+ + + + +
+
+ +
+
+ +
+
+
+
+

From

+
+
+
+ +
+ days + +
+
+
+
+

to

+
+
+
+ +
+ days + +
From 38633930426b716e4ad558e142fea9f36d5e3d65 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Wed, 1 Jun 2016 17:23:43 +0300 Subject: [PATCH 024/483] Update install.sh --- setup/install.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/setup/install.sh b/setup/install.sh index 2486228f..32268337 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -12,7 +12,6 @@ curl -sL https://deb.nodesource.com/setup_6.x | bash - apt-get -q -y install mysql-server pwgen redis-server nodejs git ufw apt-get clean -HOSTNAME=$(curl -s http://169.254.169.254/metadata/v1/hostname) MYSQL_PASSWORD=`pwgen -1` # Setup MySQL user for Mailtrain From 612c9ca02ed690c0471a985b6bb8dea0b3370f73 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Wed, 1 Jun 2016 17:26:31 +0300 Subject: [PATCH 025/483] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 94bbb2b4..9414c8f0 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,12 @@ Subscribe to Mailtrain Newsletter [here](http://mailtrain.org/subscription/EysIv You can download and run [install.sh](setup/install.sh) in your blank Ubuntu 14.04 VPS to set up Mailtrain and all required dependencies (including MySQL). +If you like living on the edge and feel adventurous you can run the installation script directly from your command line as root: + +``` +curl https://raw.githubusercontent.com/andris9/mailtrain/master/setup/install.sh | sudo bash +``` + If you are using DigitalOcean then you can copy the contents of the [installation script](setup/install.sh) to the User Data textarea field when creating a new VPS (select Ubuntu 14.04 as the droplet Distribution image). After your droplet is created it should already have Mailtrain up and running. Navigate to http://droplet-hostname-or-ip/ and authenticate as `admin`:`test`. Do not forget to update your account information and set up SMTP settings. ### Manual (any OS that supports Node.js) From d8c96aad7444b252bf644113c06f40a862b02490 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 2 Jun 2016 12:16:08 +0300 Subject: [PATCH 026/483] Update install.sh --- setup/install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/setup/install.sh b/setup/install.sh index 32268337..b40b98cb 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -27,9 +27,9 @@ ufw allow 25/tcp ufw --force enable # Fetch Mailtrain files -cd /opt -git clone git://github.com/andris9/mailtrain.git -cd mailtrain +mkdir -p /opt/mailtrain +cd /opt/mailtrain +git clone git://github.com/andris9/mailtrain.git . # Set up upstart service script cp setup/mailtrain.conf /etc/init From f1b47589e6e73be7f8287c71d46d246e48dda2e2 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 2 Jun 2016 12:52:14 +0300 Subject: [PATCH 027/483] updated init script --- setup/install.sh | 12 +++++++++--- setup/mailtrain.service | 13 +++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 setup/mailtrain.service diff --git a/setup/install.sh b/setup/install.sh index b40b98cb..6635bebb 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -31,9 +31,6 @@ mkdir -p /opt/mailtrain cd /opt/mailtrain git clone git://github.com/andris9/mailtrain.git . -# Set up upstart service script -cp setup/mailtrain.conf /etc/init - # Add new user for the daemon to run as useradd mailtrain || true @@ -71,6 +68,15 @@ cat < /etc/logrotate.d/mailtrain } EOM +if [ -d "/usr/lib/systemd" ]; then + # Set up systemd service script + cp setup/mailtrain.service /etc/systemd/system/ + systemctl enable mailtrain.service +else + # Set up upstart service script + cp setup/mailtrain.conf /etc/init/ +fi + # Start the service service mailtrain start diff --git a/setup/mailtrain.service b/setup/mailtrain.service new file mode 100644 index 00000000..d233e74c --- /dev/null +++ b/setup/mailtrain.service @@ -0,0 +1,13 @@ +Description=Mailtrain server +Requires=After=mysql.service + +[Service] +Environment="NODE_ENV=production" +WorkingDirectory=/opt/mailtrain +ExecStart=/usr/bin/node index.js >> /var/log/mailtrain.log 2>&1 +Type=simple +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target From 37f70bc49940fd92063cc3f5b3441d91909b52ee Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 2 Jun 2016 13:05:44 +0300 Subject: [PATCH 028/483] Updated mysql init --- setup/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/install.sh b/setup/install.sh index 6635bebb..889e36b8 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -16,7 +16,7 @@ MYSQL_PASSWORD=`pwgen -1` # Setup MySQL user for Mailtrain mysql -u root -e "CREATE USER 'mailtrain'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';" -mysql -u root -e "GRANT ALL PRIVILEGES ON mailtrain.* TO 'mailtrain'@'%' WITH GRANT OPTION;" +mysql -u root -e "GRANT ALL PRIVILEGES ON mailtrain.* TO 'mailtrain'@'localhost';" mysql -u mailtrain --password="$MYSQL_PASSWORD" -e "CREATE database mailtrain;" # Enable firewall, allow connections to SSH, HTTP, HTTPS and SMTP From 2f8f7c56f27f121e2b5ff48b80c35b6d66a935e2 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 2 Jun 2016 13:25:49 +0300 Subject: [PATCH 029/483] updated install script --- setup/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/install.sh b/setup/install.sh index 889e36b8..62b3f379 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -68,7 +68,7 @@ cat < /etc/logrotate.d/mailtrain } EOM -if [ -d "/usr/lib/systemd" ]; then +if [ -d "/run/systemd/system" ]; then # Set up systemd service script cp setup/mailtrain.service /etc/systemd/system/ systemctl enable mailtrain.service From 54b1d665de47a132646bb3838062e3938ba06b8b Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 2 Jun 2016 13:50:10 +0300 Subject: [PATCH 030/483] updated readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9414c8f0..e3533c00 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,9 @@ Subscribe to Mailtrain Newsletter [here](http://mailtrain.org/subscription/EysIv ## Installation -### Automatic install (Ubuntu 14.04) +### Automatic install (Ubuntu) -You can download and run [install.sh](setup/install.sh) in your blank Ubuntu 14.04 VPS to set up +You can download and run [install.sh](setup/install.sh) in your blank Ubuntu VPS to set up Mailtrain and all required dependencies (including MySQL). If you like living on the edge and feel adventurous you can run the installation script directly from your command line as root: From d3693111bccbcdc0fe7da1dffa01b73ceea07118 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 2 Jun 2016 15:08:04 +0300 Subject: [PATCH 031/483] Update README.md --- README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e3533c00..2fec6cfd 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Subscribe to Mailtrain Newsletter [here](http://mailtrain.org/subscription/EysIv ### Automatic install (Ubuntu) You can download and run [install.sh](setup/install.sh) in your blank Ubuntu VPS to set up -Mailtrain and all required dependencies (including MySQL). +Mailtrain and all required dependencies (including MySQL). The installation script assumes a somewhat blank server, so if this is a machine you are already using for something else, you might want to skip the automatic install and proceed manually. If you like living on the edge and feel adventurous you can run the installation script directly from your command line as root: @@ -38,6 +38,16 @@ If you like living on the edge and feel adventurous you can run the installation curl https://raw.githubusercontent.com/andris9/mailtrain/master/setup/install.sh | sudo bash ``` +Install script installs and sets up the following: + + * **Node.js** (version 6.x) + * **MySQL** (platform default) + * **Mailtrain** (from the master branch) on port 80 + * **UFW** firewall that blocks everything besides ports 22, 25, 80, 443 + * **Redis** server for session cache + * **logrotate** to rotate Mailtrain log files + * **upstart** or **systemd** init script to automatically start and manage Mailtrain process + If you are using DigitalOcean then you can copy the contents of the [installation script](setup/install.sh) to the User Data textarea field when creating a new VPS (select Ubuntu 14.04 as the droplet Distribution image). After your droplet is created it should already have Mailtrain up and running. Navigate to http://droplet-hostname-or-ip/ and authenticate as `admin`:`test`. Do not forget to update your account information and set up SMTP settings. ### Manual (any OS that supports Node.js) From e216c909f554fe477cda65f40667c91cf9750601 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 2 Jun 2016 15:08:32 +0300 Subject: [PATCH 032/483] Update install.sh --- setup/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/install.sh b/setup/install.sh index 62b3f379..2566ace5 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -48,7 +48,7 @@ password="$MYSQL_PASSWORD" [redis] enabled=true [verp] -enabled=true +enabled=false EOT # Install required node packages From e51f8689c605440bcaddf5216eb08cf8b38ce811 Mon Sep 17 00:00:00 2001 From: Wes Bos Date: Thu, 2 Jun 2016 09:37:23 -0400 Subject: [PATCH 033/483] Added node for MAMP users Struggled with this for about 45 minutes and it seems its something that trips up most MAMP users when they run mysql outside of the mamp PHP environment. Not sure if this is too much info for the config file, so feel free to not accept this :) --- config/default.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/default.toml b/config/default.toml index 816a07ca..dfee7128 100644 --- a/config/default.toml +++ b/config/default.toml @@ -31,7 +31,7 @@ host="localhost" user="mailtrain" password="mailtrain" database="mailtrain" -port=3306 # some installations, eg. MAMP can use a different port (8889) +port=3306 # some installations, eg. MAMP can use a different port (8889). MAMP users should turn on "Allow network access to MySQL" charset="utf8mb4" timezone="local" From 6eed682d9366cd85641ff8715925088f2bf8e408 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Mon, 6 Jun 2016 17:40:59 +0300 Subject: [PATCH 034/483] u --- routes/archive.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/archive.js b/routes/archive.js index c1f19275..54e099b4 100644 --- a/routes/archive.js +++ b/routes/archive.js @@ -58,13 +58,13 @@ router.get('/:campaign/:list/:subscription', (req, res, next) => { req.flash('danger', err.message || err); return res.redirect('/'); } - +/* if (!mail && !req.user) { err = new Error('Not Found'); err.status = 404; return next(err); } - +*/ let renderAndShow = (html, renderTags) => { // rewrite links to count clicks From e2ae925b9721b15f43992fefbc5b5cb8ad4a0a20 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Wed, 8 Jun 2016 11:16:32 +0300 Subject: [PATCH 035/483] Show 404 error for unresolved tracking urls --- lib/models/links.js | 2 +- routes/links.js | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/models/links.js b/lib/models/links.js index 7beeecd3..1c2a0384 100644 --- a/lib/models/links.js +++ b/lib/models/links.js @@ -18,7 +18,7 @@ module.exports.resolve = (campaignCid, linkCid, callback) => { return callback(err); } if (!campaign) { - return callback('Campaign not found'); + return callback(null, false); } db.getConnection((err, connection) => { if (err) { diff --git a/routes/links.js b/routes/links.js index fdbe867a..09feba89 100644 --- a/routes/links.js +++ b/routes/links.js @@ -36,6 +36,18 @@ router.get('/:campaign/:list/:subscription/:link', (req, res, next) => { req.flash('danger', err.message || err); return res.redirect('/'); } + if (!linkId || !url) { + log.error('Redirect', 'Unresolved URL: <%s>', req.url); + res.status(404); + return res.render('archive/view', { + layout: 'archive/layout', + message: 'Oops, we couldn\'t find a link for the URL you clicked', + campaign: { + subject: 'Error 404' + } + }); + + } links.countClick(req.ip, req.params.campaign, req.params.list, req.params.subscription, linkId, (err, status) => { if (err) { log.error('Redirect', err.stack || err); From f7617ec06e4c94258c0830cc5b81f46ea48a8e12 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Wed, 8 Jun 2016 20:39:05 +0300 Subject: [PATCH 036/483] unserialize html encoding in redirect urls --- lib/models/links.js | 5 ++++- package.json | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/models/links.js b/lib/models/links.js index 1c2a0384..aefe51a5 100644 --- a/lib/models/links.js +++ b/lib/models/links.js @@ -11,6 +11,7 @@ let lists = require('./lists'); let log = require('npmlog'); let urllib = require('url'); +let he = require('he'); module.exports.resolve = (campaignCid, linkCid, callback) => { campaigns.getByCid(campaignCid, (err, campaign) => { @@ -295,7 +296,9 @@ module.exports.updateLinks = (campaign, list, subscription, serviceUrl, message, return replaceUrls(); } - module.exports.add(urlItem.value, campaign.id, (err, linkId, cid) => { + module.exports.add(he.decode(urlItem.value, { + isAttributeValue: true + }), campaign.id, (err, linkId, cid) => { if (err) { log.error('Link', err.stack); return storeNext(); diff --git a/package.json b/package.json index 9c7a20d9..8f64f98c 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "geoip-ultralight": "^0.1.3", "handlebars": "^4.0.5", "hbs": "^4.0.0", + "he": "^1.1.0", "html-to-text": "^2.1.0", "humanize": "0.0.9", "is-url": "^1.2.1", From 06aea61827c1bd788181778dc6960a932face95a Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 9 Jun 2016 09:53:38 +0300 Subject: [PATCH 037/483] Do not delete url pointers from database when resetting campaign --- lib/models/campaigns.js | 18 +++++------------- lib/models/links.js | 29 ++++++++++++----------------- package.json | 10 +++++----- routes/links.js | 36 +++++++++++++++++++----------------- 4 files changed, 41 insertions(+), 52 deletions(-) diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index 7fc92066..b794385a 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -728,27 +728,19 @@ module.exports.delete = (id, callback) => { } connection.query('DELETE FROM campaigns WHERE id=? LIMIT 1', [id], (err, result) => { + connection.release(); if (err) { - connection.release(); return callback(err); } let affected = result && result.affectedRows || 0; - - connection.query('DELETE FROM links WHERE campaign=?', [id], err => { - connection.release(); + removeCampaignTables(id, err => { if (err) { return callback(err); } - removeCampaignTables(id, err => { - if (err) { - return callback(err); - } - - caches.cache.delete('sender queue'); - return callback(null, affected); - }); + caches.cache.delete('sender queue'); + return callback(null, affected); }); }); }); @@ -841,7 +833,7 @@ module.exports.reset = (id, callback) => { } caches.cache.delete('sender queue'); - connection.query('DELETE FROM links WHERE campaign=?', [id], err => { + connection.query('UPDATE links SET `clicks`=0 WHERE campaign=?', [id], err => { if (err) { connection.release(); return callback(err); diff --git a/lib/models/links.js b/lib/models/links.js index aefe51a5..64b2790c 100644 --- a/lib/models/links.js +++ b/lib/models/links.js @@ -13,31 +13,23 @@ let log = require('npmlog'); let urllib = require('url'); let he = require('he'); -module.exports.resolve = (campaignCid, linkCid, callback) => { - campaigns.getByCid(campaignCid, (err, campaign) => { +module.exports.resolve = (linkCid, callback) => { + db.getConnection((err, connection) => { if (err) { return callback(err); } - if (!campaign) { - return callback(null, false); - } - db.getConnection((err, connection) => { + let query = 'SELECT id, url FROM links WHERE `cid`=? LIMIT 1'; + connection.query(query, [linkCid], (err, rows) => { + connection.release(); if (err) { return callback(err); } - let query = 'SELECT id, url FROM links WHERE `campaign`=? AND `cid`=? LIMIT 1'; - connection.query(query, [campaign.id, linkCid], (err, rows) => { - connection.release(); - if (err) { - return callback(err); - } - if (rows && rows.length) { - return callback(null, rows[0].id, rows[0].url); - } + if (rows && rows.length) { + return callback(null, rows[0].id, rows[0].url); + } - return callback(null, false); - }); + return callback(null, false); }); }); }; @@ -47,6 +39,9 @@ module.exports.countClick = (remoteIp, campaignCid, listCid, subscriptionCid, li if (err) { return callback(err); } + if(!data){ + return callback(null, false); + } db.getConnection((err, connection) => { if (err) { return callback(err); diff --git a/package.json b/package.json index 8f64f98c..2b527b5c 100644 --- a/package.json +++ b/package.json @@ -33,12 +33,12 @@ "body-parser": "^1.15.1", "bounce-handler": "^7.3.2-fork.0", "compression": "^1.6.2", - "config": "^1.20.4", + "config": "^1.21.0", "connect-flash": "^0.1.1", "connect-redis": "^3.0.2", "cookie-parser": "^1.4.3", "csurf": "^1.9.0", - "csv-parse": "^1.1.0", + "csv-parse": "^1.1.1", "escape-html": "^1.0.3", "express": "^4.13.4", "express-session": "^1.13.0", @@ -57,11 +57,11 @@ "moment-timezone": "^0.5.4", "morgan": "^1.7.0", "multer": "^1.1.0", - "mysql": "^2.10.2", + "mysql": "^2.11.1", "nodemailer": "^2.4.2", "nodemailer-openpgp": "^1.0.2", - "npmlog": "^2.0.4", - "openpgp": "^2.3.0", + "npmlog": "^3.0.0", + "openpgp": "^2.3.2", "passport": "^0.3.2", "passport-local": "^1.0.0", "request": "^2.72.0", diff --git a/routes/links.js b/routes/links.js index 09feba89..b675c131 100644 --- a/routes/links.js +++ b/routes/links.js @@ -30,23 +30,27 @@ router.get('/:campaign/:list/:subscription', (req, res) => { res.end(trackImg); }); -router.get('/:campaign/:list/:subscription/:link', (req, res, next) => { - links.resolve(req.params.campaign, req.params.link, (err, linkId, url) => { +router.get('/:campaign/:list/:subscription/:link', (req, res) => { + + let notFound = () => { + res.status(404); + return res.render('archive/view', { + layout: 'archive/layout', + message: 'Oops, we couldn\'t find a link for the URL you clicked', + campaign: { + subject: 'Error 404' + } + }); + }; + + links.resolve(req.params.link, (err, linkId, url) => { if (err) { req.flash('danger', err.message || err); return res.redirect('/'); } if (!linkId || !url) { log.error('Redirect', 'Unresolved URL: <%s>', req.url); - res.status(404); - return res.render('archive/view', { - layout: 'archive/layout', - message: 'Oops, we couldn\'t find a link for the URL you clicked', - campaign: { - subject: 'Error 404' - } - }); - + return notFound(); } links.countClick(req.ip, req.params.campaign, req.params.list, req.params.subscription, linkId, (err, status) => { if (err) { @@ -70,9 +74,8 @@ router.get('/:campaign/:list/:subscription/:link', (req, res, next) => { } if (!list) { - err = new Error('Not Found'); - err.status = 404; - return next(err); + log.error('Redirect', 'Could not resolve list for merge tags: <%s>', req.url); + return notFound(); } settings.get('serviceUrl', (err, serviceUrl) => { @@ -88,9 +91,8 @@ router.get('/:campaign/:list/:subscription/:link', (req, res, next) => { } if (!subscription) { - err = new Error('Not Found'); - err.status = 404; - return next(err); + log.error('Redirect', 'Could not resolve subscription for merge tags: <%s>', req.url); + return notFound(); } url = tools.formatMessage(serviceUrl, { From d9bc72d759c991b2139c3d7514c69e5bde08eb66 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Fri, 10 Jun 2016 11:23:56 +0300 Subject: [PATCH 038/483] removed campaign link --- views/index.hbs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/views/index.hbs b/views/index.hbs index ce8f3dd9..2a24189c 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -1,11 +1,11 @@
From b16209f23e530f3408610ffebe2c420bf5bdea74 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Fri, 3 Jun 2016 13:15:33 +0300 Subject: [PATCH 039/483] Added initial support for trigger based automation --- .gitignore | 3 +- README.md | 2 - app.js | 4 +- config/default.toml | 4 +- index.js | 37 +-- lib/models/campaigns.js | 70 +++-- lib/models/links.js | 34 ++- lib/models/triggers.js | 369 +++++++++++++++++++++++++++ lib/tools.js | 9 +- meta.json | 2 +- package.json | 16 +- public/mailtrain-header.png | Bin 0 -> 5772 bytes routes/archive.js | 4 +- routes/campaigns.js | 246 +++++++++++------- routes/links.js | 30 ++- routes/lists.js | 26 +- routes/settings.js | 87 +++---- routes/triggers.js | 235 +++++++++++++++++ services/sender.js | 57 ++++- services/triggers.js | 112 ++++++++ setup/mailtrain.conf | 2 +- setup/sql/mailtrain.sql | 29 ++- setup/sql/upgrade-00015.sql | 59 +++++ views/campaigns/campaigns.hbs | 5 +- views/campaigns/create-triggered.hbs | 110 ++++++++ views/campaigns/edit-triggered.hbs | 196 ++++++++++++++ views/campaigns/view.hbs | 50 ++-- views/index.hbs | 8 +- views/layout.hbs | 9 +- views/lists/view.hbs | 1 + views/settings.hbs | 8 + views/templates/create.hbs | 9 + views/triggers/create-select.hbs | 33 +++ views/triggers/create.hbs | 162 ++++++++++++ views/triggers/edit.hbs | 177 +++++++++++++ views/triggers/triggers.hbs | 83 ++++++ 36 files changed, 2025 insertions(+), 263 deletions(-) create mode 100644 lib/models/triggers.js create mode 100644 public/mailtrain-header.png create mode 100644 routes/triggers.js create mode 100644 services/triggers.js create mode 100644 setup/sql/upgrade-00015.sql create mode 100644 views/campaigns/create-triggered.hbs create mode 100644 views/campaigns/edit-triggered.hbs create mode 100644 views/triggers/create-select.hbs create mode 100644 views/triggers/create.hbs create mode 100644 views/triggers/edit.hbs create mode 100644 views/triggers/triggers.hbs diff --git a/.gitignore b/.gitignore index 8b8d217b..c9f7cd07 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules npm-debug.log .DS_Store -development.toml +config/development.* +config/production.* dump.rdb diff --git a/README.md b/README.md index 2fec6cfd..88e31ecd 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,6 @@ ![](http://mailtrain.org/mailtrain.png) -> **NB!** I'm running an IndieGoGo campaign to help fund developing first class automation support into Mailtrain. See all details here: [https://igg.me/at/mailtrain/8720095](https://igg.me/at/mailtrain/8720095) - ## Features Mailtrain supports subscriber list management, list segmentation, custom fields, email templates, large CSV list import files, etc. diff --git a/app.js b/app.js index 22eba2fb..062a2532 100644 --- a/app.js +++ b/app.js @@ -27,6 +27,7 @@ let campaigns = require('./routes/campaigns'); let links = require('./routes/links'); let fields = require('./routes/fields'); let segments = require('./routes/segments'); +let triggers = require('./routes/triggers'); let webhooks = require('./routes/webhooks'); let subscription = require('./routes/subscription'); let archive = require('./routes/archive'); @@ -150,7 +151,7 @@ app.use((req, res, next) => { res.locals.menu = menu; tools.updateMenu(res); - settingsModel.list(['ua_code'], (err, configItems) => { + settingsModel.list(['ua_code', 'shoutout'], (err, configItems) => { if (err) { return next(err); } @@ -170,6 +171,7 @@ app.use('/settings', settings); app.use('/links', links); app.use('/fields', fields); app.use('/segments', segments); +app.use('/triggers', triggers); app.use('/webhooks', webhooks); app.use('/subscription', subscription); app.use('/archive', archive); diff --git a/config/default.toml b/config/default.toml index dfee7128..e3a1187b 100644 --- a/config/default.toml +++ b/config/default.toml @@ -25,13 +25,15 @@ log="dev" proxy=true # maximum POST body size postsize="2MB" +# Uncomment to set uploads folder location for temporary data. Defaults to os.tmpdir() +#tmpdir=/tmp [mysql] host="localhost" user="mailtrain" password="mailtrain" database="mailtrain" -port=3306 # some installations, eg. MAMP can use a different port (8889). MAMP users should turn on "Allow network access to MySQL" +port=3306 # some installations, eg. MAMP can use a different port (8889). MAMP users should turn on "Allow network access to MySQL" charset="utf8mb4" timezone="local" diff --git a/index.js b/index.js index 4b0fde8a..38432fef 100644 --- a/index.js +++ b/index.js @@ -9,6 +9,7 @@ let log = require('npmlog'); let app = require('./app'); let http = require('http'); let sender = require('./services/sender'); +let triggers = require('./services/triggers'); let importer = require('./services/importer'); let verpServer = require('./services/verp-server'); let testServer = require('./services/test-server'); @@ -75,25 +76,27 @@ server.on('listening', () => { verpServer(() => { tzupdate(() => { importer(() => { - sender(() => { - feedcheck(() => { - log.info('Service', 'All services started'); - if (config.group) { - try { - process.setgid(config.group); - log.info('Service', 'Changed group to "%s" (%s)', config.group, process.getgid()); - } catch (E) { - log.info('Service', 'Failed to change group to "%s" (%s)', config.group, E.message); + triggers(() => { + sender(() => { + feedcheck(() => { + log.info('Service', 'All services started'); + if (config.group) { + try { + process.setgid(config.group); + log.info('Service', 'Changed group to "%s" (%s)', config.group, process.getgid()); + } catch (E) { + log.info('Service', 'Failed to change group to "%s" (%s)', config.group, E.message); + } } - } - if (config.user) { - try { - process.setuid(config.user); - log.info('Service', 'Changed user to "%s" (%s)', config.user, process.getuid()); - } catch (E) { - log.info('Service', 'Failed to change user to "%s" (%s)', config.user, E.message); + if (config.user) { + try { + process.setuid(config.user); + log.info('Service', 'Changed user to "%s" (%s)', config.user, process.getuid()); + } catch (E) { + log.info('Service', 'Failed to change user to "%s" (%s)', config.user, E.message); + } } - } + }); }); }); }); diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index 7fc92066..3cc7b8c2 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -21,7 +21,7 @@ module.exports.list = (start, limit, callback) => { return callback(err); } - connection.query('SELECT SQL_CALC_FOUND_ROWS * FROM campaigns ORDER BY name LIMIT ? OFFSET ?', [limit, start], (err, rows) => { + connection.query('SELECT SQL_CALC_FOUND_ROWS * FROM campaigns ORDER BY scheduled DESC LIMIT ? OFFSET ?', [limit, start], (err, rows) => { if (err) { connection.release(); return callback(err); @@ -122,8 +122,8 @@ module.exports.filter = (request, parent, callback) => { processQuery({ // only find normal and RSS parent campaigns at this point - where: '`type` IN (?,?)', - values: [1, 2] + where: '`type` IN (?,?,?)', + values: [1, 2, 4] }); } }; @@ -428,6 +428,9 @@ module.exports.create = (campaign, opts, callback) => { } switch ((campaign.type || '').toString().trim().toLowerCase()) { + case 'triggered': + campaign.type = 4; + break; case 'rss': campaign.type = 2; break; @@ -453,13 +456,26 @@ module.exports.create = (campaign, opts, callback) => { return callback(new Error('RSS URL must be set and needs to be a valid URL')); } - lists.get(campaign.list, (err, list) => { + let getList = (listId, callback) => { + if (campaign.type === 4) { + return callback(null, false); + } + + lists.get(listId, (err, list) => { + if (err) { + return callback(err); + } + if (!list) { + return callback(new Error('Selected list not found')); + } + return callback(null, list); + }); + }; + + getList(campaign.list, err => { if (err) { return callback(err); } - if (!list) { - return callback(new Error('Selected list not found')); - } let keys = ['name', 'type']; let values = [name, campaign.type]; @@ -474,6 +490,11 @@ module.exports.create = (campaign, opts, callback) => { values.push(2, opts.parent); } + if (campaign.type === 4) { + keys.push('status'); + values.push(6); // active + } + let create = next => { Object.keys(campaign).forEach(key => { let value = typeof campaign[key] === 'number' ? campaign[key] : (campaign[key] || '').toString().trim(); @@ -623,13 +644,22 @@ module.exports.update = (id, updates, callback) => { campaign.segment = 0; } - lists.get(campaign.list, (err, list) => { + let getList = (listId, callback) => { + lists.get(listId, (err, list) => { + if (err) { + return callback(err); + } + if (!list) { + return callback(new Error('Selected list not found')); + } + return callback(null, list); + }); + }; + + getList(campaign.list, err => { if (err) { return callback(err); } - if (!list) { - return callback(new Error('Selected list not found')); - } let keys = ['name']; let values = [name]; @@ -728,27 +758,19 @@ module.exports.delete = (id, callback) => { } connection.query('DELETE FROM campaigns WHERE id=? LIMIT 1', [id], (err, result) => { + connection.release(); if (err) { - connection.release(); return callback(err); } let affected = result && result.affectedRows || 0; - - connection.query('DELETE FROM links WHERE campaign=?', [id], err => { - connection.release(); + removeCampaignTables(id, err => { if (err) { return callback(err); } - removeCampaignTables(id, err => { - if (err) { - return callback(err); - } - - caches.cache.delete('sender queue'); - return callback(null, affected); - }); + caches.cache.delete('sender queue'); + return callback(null, affected); }); }); }); @@ -841,7 +863,7 @@ module.exports.reset = (id, callback) => { } caches.cache.delete('sender queue'); - connection.query('DELETE FROM links WHERE campaign=?', [id], err => { + connection.query('UPDATE links SET `clicks`=0 WHERE campaign=?', [id], err => { if (err) { connection.release(); return callback(err); diff --git a/lib/models/links.js b/lib/models/links.js index 7beeecd3..64b2790c 100644 --- a/lib/models/links.js +++ b/lib/models/links.js @@ -11,32 +11,25 @@ let lists = require('./lists'); let log = require('npmlog'); let urllib = require('url'); +let he = require('he'); -module.exports.resolve = (campaignCid, linkCid, callback) => { - campaigns.getByCid(campaignCid, (err, campaign) => { +module.exports.resolve = (linkCid, callback) => { + db.getConnection((err, connection) => { if (err) { return callback(err); } - if (!campaign) { - return callback('Campaign not found'); - } - db.getConnection((err, connection) => { + let query = 'SELECT id, url FROM links WHERE `cid`=? LIMIT 1'; + connection.query(query, [linkCid], (err, rows) => { + connection.release(); if (err) { return callback(err); } - let query = 'SELECT id, url FROM links WHERE `campaign`=? AND `cid`=? LIMIT 1'; - connection.query(query, [campaign.id, linkCid], (err, rows) => { - connection.release(); - if (err) { - return callback(err); - } - if (rows && rows.length) { - return callback(null, rows[0].id, rows[0].url); - } + if (rows && rows.length) { + return callback(null, rows[0].id, rows[0].url); + } - return callback(null, false); - }); + return callback(null, false); }); }); }; @@ -46,6 +39,9 @@ module.exports.countClick = (remoteIp, campaignCid, listCid, subscriptionCid, li if (err) { return callback(err); } + if(!data){ + return callback(null, false); + } db.getConnection((err, connection) => { if (err) { return callback(err); @@ -295,7 +291,9 @@ module.exports.updateLinks = (campaign, list, subscription, serviceUrl, message, return replaceUrls(); } - module.exports.add(urlItem.value, campaign.id, (err, linkId, cid) => { + module.exports.add(he.decode(urlItem.value, { + isAttributeValue: true + }), campaign.id, (err, linkId, cid) => { if (err) { log.error('Link', err.stack); return storeNext(); diff --git a/lib/models/triggers.js b/lib/models/triggers.js new file mode 100644 index 00000000..63ade1e5 --- /dev/null +++ b/lib/models/triggers.js @@ -0,0 +1,369 @@ +'use strict'; + +let tools = require('../tools'); +let db = require('../db'); +let lists = require('./lists'); +let util = require('util'); + +module.exports.defaultColumns = [{ + column: 'created', + name: 'Sign up date', + type: 'date' +}, { + column: 'latest_open', + name: 'Latest open', + type: 'date' +}, { + column: 'latest_click', + name: 'Latest click', + type: 'date' +}]; + +module.exports.defaultCampaignEvents = [{ + option: 'delivered', + name: 'Delivered' +}, { + option: 'opened', + name: 'Has Opened' +}, { + option: 'clicked', + name: 'Has Clicked' +}, { + option: 'not_opened', + name: 'Not Opened' +}, { + option: 'not_clicked', + name: 'Not Clicked' +}]; + +let defaultColumnMap = {}; +let defaultEventMap = {}; +module.exports.defaultColumns.forEach(col => defaultColumnMap[col.column] = col.name); +module.exports.defaultCampaignEvents.forEach(evt => defaultEventMap[evt.option] = evt.name); + +module.exports.list = callback => { + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + let tableFields = [ + '`triggers`.`id` AS `id`', + '`triggers`.`name` AS `name`', + '`triggers`.`description` AS `description`', + '`triggers`.`enabled` AS `enabled`', + '`triggers`.`list` AS `list`', + '`lists`.`name` AS `list_name`', + '`source`.`id` AS `source_campaign`', + '`source`.`name` AS `source_campaign_name`', + '`dest`.`id` AS `dest_campaign`', + '`dest`.`name` AS `dest_campaign_name`', + '`custom_fields`.`id` AS `column_id`', + '`triggers`.`column` AS `column`', + '`custom_fields`.`name` AS `column_name`', + '`triggers`.`rule` AS `rule`', + '`triggers`.`seconds` AS `seconds`', + '`triggers`.`created` AS `created`' + ]; + + let query = 'SELECT ' + tableFields.join(', ') + ' FROM `triggers` LEFT JOIN `campaigns` `source` ON `source`.`id`=`triggers`.`source_campaign` LEFT JOIN `campaigns` `dest` ON `dest`.`id`=`triggers`.`dest_campaign` LEFT JOIN `lists` ON `lists`.`id`=`triggers`.`list` LEFT JOIN `custom_fields` ON `custom_fields`.`list` = `triggers`.`list` AND `custom_fields`.`column`=`triggers`.`column` ORDER BY `triggers`.`name`'; + connection.query(query, (err, rows) => { + connection.release(); + if (err) { + return callback(err); + } + + let triggers = (rows || []).map(tools.convertKeys).map(row => { + if (row.rule === 'subscription' && row.column && !row.columnName) { + row.columnName = defaultColumnMap[row.column]; + } + + let days = Math.round(row.seconds / (24 * 3600)); + row.formatted = util.format('%s days after %s', days, row.rule === 'subscription' ? row.columnName : (util.format('%s %s', defaultEventMap[row.column], row.sourceCampaign, row.sourceCampaignName))); + + return row; + }); + return callback(null, triggers); + }); + }); +}; + +module.exports.getQuery = (id, callback) => { + module.exports.get(id, (err, trigger) => { + if (err) { + return callback(err); + } + + let limit = 300; + let treshold = 3600 * 24; // time..NOW..time+24h + + let intervalQuery = (column, seconds, treshold) => column + ' <= NOW() - INTERVAL ' + seconds + ' SECOND AND ' + column + ' >= NOW() - INTERVAL ' + (treshold + seconds) + ' SECOND'; + + let query = false; + switch (trigger.rule) { + case 'subscription': + query = 'SELECT id FROM `subscription__' + trigger.list + '` subscription WHERE ' + intervalQuery('`' + trigger.column + '`', trigger.seconds, treshold) + ' AND id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; + break; + case 'campaign': + switch (trigger.column) { + case 'delivered': + query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription WHERE campaign.status=1 AND ' + intervalQuery('`campaign`.`created`', trigger.seconds, treshold) + ' AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; + break; + case 'not_clicked': + query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__' + trigger.sourceCampaign + '` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=0 WHERE campaign.status=1 AND ' + intervalQuery('`campaign`.`created`', trigger.seconds, treshold) + ' AND tracker.created IS NULL AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; + break; + case 'not_opened': + query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__' + trigger.sourceCampaign + '` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=-1 WHERE campaign.status=1 AND ' + intervalQuery('`campaign`.`created`', trigger.seconds, treshold) + ' AND tracker.created IS NULL AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; + break; + case 'clicked': + query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__' + trigger.sourceCampaign + '` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=0 WHERE campaign.status=1 AND ' + intervalQuery('`tracker`.`created`', trigger.seconds, treshold) + ' AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; + break; + case 'opened': + query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__' + trigger.sourceCampaign + '` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=-1 WHERE campaign.status=1 AND ' + intervalQuery('`tracker`.`created`', trigger.seconds, treshold) + ' AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; + break; + } + break; + } + callback(null, query); + }); +}; + +module.exports.get = (id, callback) => { + id = Number(id) || 0; + + if (id < 1) { + return callback(new Error('Missing Trigger ID')); + } + + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + connection.query('SELECT * FROM triggers WHERE id=?', [id], (err, rows) => { + connection.release(); + if (err) { + return callback(err); + } + + if (!rows || !rows.length) { + return callback(null, false); + } + + let trigger = tools.convertKeys(rows[0]); + return callback(null, trigger); + }); + }); +}; + +module.exports.create = (trigger, callback) => { + + trigger = tools.convertKeys(trigger); + let name = (trigger.name || '').toString().trim(); + let description = (trigger.description || '').toString().trim(); + let listId = Number(trigger.list) || 0; + let seconds = (Number(trigger.days) || 0) * 24 * 3600; + let rule = (trigger.rule || '').toString().toLowerCase().trim(); + let destCampaign = Number(trigger.destCampaign) || 0; + let sourceCampaign = null; + let column; + + if (!listId) { + return callback(new Error('Missing or invalid list ID')); + } + + if (seconds < 0) { + return callback(new Error('Days in the past are not allowed')); + } + + if (!rule || ['campaign', 'subscription'].indexOf(rule) < 0) { + return callback(new Error('Missing or invalid trigger rule')); + } + + switch (rule) { + case 'subscription': + column = (trigger.column || '').toString().toLowerCase().trim(); + if (!column) { + return callback(new Error('Invalid subscription configuration')); + } + break; + case 'campaign': + column = (trigger.campaignOption || '').toString().toLowerCase().trim(); + sourceCampaign = Number(trigger.sourceCampaign) || 0; + if (!column || !sourceCampaign) { + return callback(new Error('Invalid campaign configuration')); + } + if (sourceCampaign === destCampaign) { + return callback(new Error('A campaing can not be a target for itself')); + } + break; + default: + return callback(new Error('Missing or invalid trigger rule')); + } + + lists.get(listId, (err, list) => { + if (err) { + return callback(err); + } + if (!list) { + return callback(new Error('Missing or invalid list ID')); + } + + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + let keys = ['name', 'description', 'list', 'source_campaign', 'rule', 'column', 'seconds', 'dest_campaign', 'last_check']; + let values = [name, description, list.id, sourceCampaign, rule, column, seconds, destCampaign]; + + let query = 'INSERT INTO `triggers` (`' + keys.join('`, `') + '`) VALUES (' + values.map(() => '?').join(', ') + ', NOW())'; + + connection.query(query, values, (err, result) => { + connection.release(); + if (err) { + return callback(err); + } + + let id = result && result.insertId; + if (!id) { + return callback(new Error('Could not store trigger row')); + } + + createTriggerTable(id, err => { + if (err) { + return callback(err); + } + return callback(null, id); + }); + }); + }); + }); +}; + +module.exports.update = (id, trigger, callback) => { + id = Number(id) || 0; + if (id < 1) { + return callback(new Error('Missing or invalid Trigger ID')); + } + + trigger = tools.convertKeys(trigger); + let name = (trigger.name || '').toString().trim(); + let description = (trigger.description || '').toString().trim(); + let enabled = trigger.enabled ? 1 : 0; + let seconds = (Number(trigger.days) || 0) * 24 * 3600; + let rule = (trigger.rule || '').toString().toLowerCase().trim(); + let destCampaign = Number(trigger.destCampaign) || 0; + let sourceCampaign = null; + let column; + + if (seconds < 0) { + return callback(new Error('Days in the past are not allowed')); + } + + if (!rule || ['campaign', 'subscription'].indexOf(rule) < 0) { + return callback(new Error('Missing or invalid trigger rule')); + } + + switch (rule) { + case 'subscription': + column = (trigger.column || '').toString().toLowerCase().trim(); + if (!column) { + return callback(new Error('Invalid subscription configuration')); + } + break; + case 'campaign': + column = (trigger.campaignOption || '').toString().toLowerCase().trim(); + sourceCampaign = Number(trigger.sourceCampaign) || 0; + if (!column || !sourceCampaign) { + return callback(new Error('Invalid campaign configuration')); + } + if (sourceCampaign === destCampaign) { + return callback(new Error('A campaing can not be a target for itself')); + } + break; + default: + return callback(new Error('Missing or invalid trigger rule')); + } + + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + let keys = ['name', 'description', 'enabled', 'source_campaign', 'rule', 'column', 'seconds', 'dest_campaign']; + let values = [name, description, enabled, sourceCampaign, rule, column, seconds, destCampaign]; + + let query = 'UPDATE `triggers` SET ' + keys.map(key => '`' + key + '`=?').join(', ') + ' WHERE `id`=? LIMIT 1'; + + connection.query(query, values.concat(id), (err, result) => { + connection.release(); + if (err) { + return callback(err); + } + + return callback(null, result && result.affectedRows); + }); + }); +}; + +module.exports.delete = (id, callback) => { + id = Number(id) || 0; + + if (id < 1) { + return callback(new Error('Missing Trigger ID')); + } + + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + connection.query('DELETE FROM triggers WHERE id=? LIMIT 1', [id], (err, result) => { + if (err) { + connection.release(); + return callback(err); + } + + let affected = result && result.affectedRows || 0; + removeTriggerTable(id, err => { + if (err) { + return callback(err); + } + return callback(null, affected); + }); + }); + }); +}; + +function createTriggerTable(id, callback) { + let query = 'CREATE TABLE `trigger__' + id + '` LIKE `trigger`'; + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + connection.query(query, err => { + connection.release(); + if (err) { + return callback(err); + } + return callback(null, true); + }); + }); +} + +function removeTriggerTable(id, callback) { + let query = 'DROP TABLE IF EXISTS `trigger__' + id + '`'; + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + connection.query(query, err => { + connection.release(); + if (err) { + return callback(err); + } + return callback(null, true); + }); + }); +} diff --git a/lib/tools.js b/lib/tools.js index baa6609c..bc43ad8c 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -116,6 +116,10 @@ function updateMenu(res) { title: 'Campaigns', url: '/campaigns', key: 'campaigns' + }, { + title: 'Automation', + url: '/triggers', + key: 'triggers' }); } @@ -155,7 +159,10 @@ function getMessageLinks(serviceUrl, campaign, list, subscription) { return { LINK_UNSUBSCRIBE: urllib.resolve(serviceUrl, '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid + '?auto=yes&c=' + campaign.cid), LINK_PREFERENCES: urllib.resolve(serviceUrl, '/subscription/' + list.cid + '/manage/' + subscription.cid), - LINK_BROWSER: urllib.resolve(serviceUrl, '/archive/' + campaign.cid + '/' + list.cid + '/' + subscription.cid) + LINK_BROWSER: urllib.resolve(serviceUrl, '/archive/' + campaign.cid + '/' + list.cid + '/' + subscription.cid), + CAMPAIGN_ID: campaign.cid, + LIST_ID: list.cid, + SUBSCRIPTION_ID: subscription.cid }; } diff --git a/meta.json b/meta.json index bf813870..574f4279 100644 --- a/meta.json +++ b/meta.json @@ -1,3 +1,3 @@ { - "schemaVersion": 14 + "schemaVersion": 15 } diff --git a/package.json b/package.json index 9c7a20d9..59e61d5e 100644 --- a/package.json +++ b/package.json @@ -33,34 +33,36 @@ "body-parser": "^1.15.1", "bounce-handler": "^7.3.2-fork.0", "compression": "^1.6.2", - "config": "^1.20.4", + "config": "^1.21.0", "connect-flash": "^0.1.1", - "connect-redis": "^3.0.2", + "connect-redis": "^3.1.0", "cookie-parser": "^1.4.3", "csurf": "^1.9.0", - "csv-parse": "^1.1.0", + "csv-parse": "^1.1.1", "escape-html": "^1.0.3", - "express": "^4.13.4", + "express": "^4.14.0", "express-session": "^1.13.0", "faker": "^3.1.0", "feedparser": "^1.1.4", "geoip-ultralight": "^0.1.3", "handlebars": "^4.0.5", "hbs": "^4.0.0", + "he": "^1.1.0", "html-to-text": "^2.1.0", "humanize": "0.0.9", "is-url": "^1.2.1", "isemail": "^2.1.2", "jsdom": "^9.2.1", "juice": "^2.0.0", + "mkdirp": "^0.5.1", "moment-timezone": "^0.5.4", "morgan": "^1.7.0", "multer": "^1.1.0", - "mysql": "^2.10.2", + "mysql": "^2.11.1", "nodemailer": "^2.4.2", "nodemailer-openpgp": "^1.0.2", - "npmlog": "^2.0.4", - "openpgp": "^2.3.0", + "npmlog": "^3.1.2", + "openpgp": "^2.3.2", "passport": "^0.3.2", "passport-local": "^1.0.0", "request": "^2.72.0", diff --git a/public/mailtrain-header.png b/public/mailtrain-header.png new file mode 100644 index 0000000000000000000000000000000000000000..ede02ff824ae93f29fced2cdaf05ca89697b70a8 GIT binary patch literal 5772 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 literal 0 HcmV?d00001 diff --git a/routes/archive.js b/routes/archive.js index c1f19275..54e099b4 100644 --- a/routes/archive.js +++ b/routes/archive.js @@ -58,13 +58,13 @@ router.get('/:campaign/:list/:subscription', (req, res, next) => { req.flash('danger', err.message || err); return res.redirect('/'); } - +/* if (!mail && !req.user) { err = new Error('Not Found'); err.status = 404; return next(err); } - +*/ let renderAndShow = (html, renderTags) => { // rewrite links to count clicks diff --git a/routes/campaigns.js b/routes/campaigns.js index e23b897c..1a2585d9 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -90,6 +90,9 @@ router.get('/create', passport.csrfProtection, (req, res) => { case 'rss': view = 'campaigns/create-rss'; break; + case 'triggered': + view = 'campaigns/create-triggered'; + break; default: view = 'campaigns/create'; } @@ -151,6 +154,9 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { let view; switch (campaign.type) { + case 4: //triggered + view = 'campaigns/edit-triggered'; + break; case 2: //rss view = 'campaigns/edit-rss'; break; @@ -159,55 +165,72 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { view = 'campaigns/edit'; } - lists.get(campaign.list, (err, list) => { + let getList = (listId, callback) => { + lists.get(listId, (err, list) => { + if (err) { + return callback(err); + } + if (!list) { + return callback(new Error('Selected list not found')); + } + + fields.list(list.id, (err, fieldList) => { + if (err && !fieldList) { + fieldList = []; + } + + let mergeTags = [ + // keep indentation + { + key: 'LINK_UNSUBSCRIBE', + value: 'URL that points to the preferences page of the subscriber' + }, { + key: 'LINK_PREFERENCES', + value: 'URL that points to the unsubscribe page' + }, { + key: 'LINK_BROWSER', + value: 'URL to preview the message in a browser' + }, { + key: 'FIRST_NAME', + value: 'First name' + }, { + key: 'LAST_NAME', + value: 'Last name' + }, { + key: 'FULL_NAME', + value: 'Full name (first and last name combined)' + }, { + key: 'SUBSCRIPTION_ID', + value: 'Unique ID that identifies the recipient' + }, { + key: 'LIST_ID', + value: 'Unique ID that identifies the list used for this campaign' + }, { + key: 'CAMPAIGN_ID', + value: 'Unique ID that identifies current campaign' + } + ]; + + fieldList.forEach(field => { + mergeTags.push({ + key: field.key, + value: field.name + }); + }); + + return callback(null, list, mergeTags); + }); + }); + }; + + getList(campaign.list, (err, list, mergeTags) => { if (err) { req.flash('danger', err.message || err); return res.redirect('/'); } - if (!list) { - req.flash('danger', 'Selected list does not exist'); - res.render(view, campaign); - return; - } - fields.list(list.id, (err, fieldList) => { - if (err && !fieldList) { - fieldList = []; - } - - let mergeTags = [ - // indent - { - key: 'LINK_UNSUBSCRIBE', - value: 'URL that points to the preferences page of the subscriber' - }, { - key: 'LINK_PREFERENCES', - value: 'URL that points to the unsubscribe page' - }, { - key: 'LINK_BROWSER', - value: 'URL to preview the message in a browser' - }, { - key: 'FIRST_NAME', - value: 'First name' - }, { - key: 'LAST_NAME', - value: 'Last name' - }, { - key: 'FULL_NAME', - value: 'Full name (first and last name combined)' - } - ]; - - fieldList.forEach(field => { - mergeTags.push({ - key: field.key, - value: field.name - }); - }); - - campaign.mergeTags = mergeTags; - res.render(view, campaign); - }); + campaign.mergeTags = mergeTags; + res.render(view, campaign); }); }); }); @@ -298,61 +321,74 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { return res.redirect('/campaigns'); } - lists.get(campaign.list, (err, list) => { - if (err || !campaign) { + let getList = (listId, callback) => { + lists.get(listId, (err, list) => { + if (err) { + return callback(err); + } + if (!list) { + return callback(new Error('Selected list not found')); + } + subscriptions.listTestUsers(listId, (err, testUsers) => { + if (err || !testUsers) { + testUsers = []; + } + return callback(null, list, testUsers); + }); + }); + }; + + getList(campaign.list, (err, list, testUsers) => { + if (err) { req.flash('danger', err && err.message || err); return res.redirect('/campaigns'); } campaign.csrfToken = req.csrfToken(); + campaign.list = list; + campaign.testUsers = testUsers; - subscriptions.listTestUsers(list.id, (err, testUsers) => { - if (err || !testUsers) { - testUsers = []; + campaign.isIdling = campaign.status === 1; + campaign.isSending = campaign.status === 2; + campaign.isFinished = campaign.status === 3; + campaign.isPaused = campaign.status === 4; + campaign.isInactive = campaign.status === 5; + campaign.isActive = campaign.status === 6; + + campaign.isNormal = campaign.type === 1 || campaign.type === 3; + campaign.isRss = campaign.type === 2; + campaign.isTriggered = campaign.type === 4; + + campaign.isScheduled = campaign.scheduled && campaign.scheduled > new Date(); + + // show only messages that weren't bounced as delivered + campaign.delivered = campaign.delivered - campaign.bounced; + + campaign.openRate = campaign.delivered ? Math.round((campaign.opened / campaign.delivered) * 10000) / 100 : 0; + campaign.clicksRate = campaign.delivered ? Math.round((campaign.clicks / campaign.delivered) * 10000) / 100 : 0; + campaign.bounceRate = campaign.delivered ? Math.round((campaign.bounced / campaign.delivered) * 10000) / 100 : 0; + campaign.complaintRate = campaign.delivered ? Math.round((campaign.complained / campaign.delivered) * 10000) / 100 : 0; + campaign.unsubscribeRate = campaign.delivered ? Math.round((campaign.unsubscribed / campaign.delivered) * 10000) / 100 : 0; + + campaigns.getLinks(campaign.id, (err, links) => { + if (err) { + // ignore } - - campaign.testUsers = testUsers; - campaign.isIdling = campaign.status === 1; - campaign.isSending = campaign.status === 2; - campaign.isFinished = campaign.status === 3; - campaign.isPaused = campaign.status === 4; - campaign.isInactive = campaign.status === 5; - campaign.isActive = campaign.status === 6; - - campaign.isNormal = campaign.type === 1 || campaign.type === 3; - campaign.isRss = campaign.type === 2; - - campaign.isScheduled = campaign.scheduled && campaign.scheduled > new Date(); - - // show only messages that weren't bounced as delivered - campaign.delivered = campaign.delivered - campaign.bounced; - - campaign.openRate = campaign.delivered ? Math.round((campaign.opened / campaign.delivered) * 10000) / 100 : 0; - campaign.clicksRate = campaign.delivered ? Math.round((campaign.clicks / campaign.delivered) * 10000) / 100 : 0; - campaign.bounceRate = campaign.delivered ? Math.round((campaign.bounced / campaign.delivered) * 10000) / 100 : 0; - campaign.complaintRate = campaign.delivered ? Math.round((campaign.complained / campaign.delivered) * 10000) / 100 : 0; - campaign.unsubscribeRate = campaign.delivered ? Math.round((campaign.unsubscribed / campaign.delivered) * 10000) / 100 : 0; - - campaigns.getLinks(campaign.id, (err, links) => { - if (err) { - // ignore + let index = 0; + campaign.links = (links || []).map(link => { + link.index = ++index; + link.totalPercentage = campaign.delivered ? Math.round(((link.clicks / campaign.delivered) * 100) * 1000) / 1000 : 0; + link.relPercentage = campaign.clicks ? Math.round(((link.clicks / campaign.clicks) * 100) * 1000) / 1000 : 0; + link.short = link.url.replace(/^https?:\/\/(www.)?/i, ''); + if (link.short > 63) { + link.short = link.short.substr(0, 60) + '…'; } - let index = 0; - campaign.links = (links || []).map(link => { - link.index = ++index; - link.totalPercentage = campaign.delivered ? Math.round(((link.clicks / campaign.delivered) * 100) * 1000) / 1000 : 0; - link.relPercentage = campaign.clicks ? Math.round(((link.clicks / campaign.clicks) * 100) * 1000) / 1000 : 0; - link.short = link.url.replace(/^https?:\/\/(www.)?/i, ''); - if (link.short > 63) { - link.short = link.short.substr(0, 60) + '…'; - } - return link; - }); - campaign.showOverview = !req.query.tab || req.query.tab === 'overview'; - campaign.showLinks = req.query.tab === 'links'; - res.render('campaigns/view', campaign); + return link; }); + campaign.showOverview = !req.query.tab || req.query.tab === 'overview'; + campaign.showLinks = req.query.tab === 'links'; + res.render('campaigns/view', campaign); }); }); }); @@ -423,8 +459,20 @@ router.get('/status/:id/:status', passport.csrfProtection, (req, res) => { return res.redirect('/campaigns'); } - lists.get(campaign.list, (err, list) => { - if (err || !campaign) { + let getList = (listId, callback) => { + lists.get(listId, (err, list) => { + if (err) { + return callback(err); + } + if (!list) { + return callback(new Error('Selected list not found')); + } + return callback(null, list); + }); + }; + + getList(campaign.list, (err, list) => { + if (err) { req.flash('danger', err && err.message || err); return res.redirect('/campaigns'); } @@ -449,8 +497,20 @@ router.get('/clicked/:id/:linkId', passport.csrfProtection, (req, res) => { return res.redirect('/campaigns'); } - lists.get(campaign.list, (err, list) => { - if (err || !campaign) { + let getList = (listId, callback) => { + lists.get(listId, (err, list) => { + if (err) { + return callback(err); + } + if (!list) { + return callback(new Error('Selected list not found')); + } + return callback(null, list); + }); + }; + + getList(campaign.list, (err, list) => { + if (err) { req.flash('danger', err && err.message || err); return res.redirect('/campaigns'); } diff --git a/routes/links.js b/routes/links.js index fdbe867a..b675c131 100644 --- a/routes/links.js +++ b/routes/links.js @@ -30,12 +30,28 @@ router.get('/:campaign/:list/:subscription', (req, res) => { res.end(trackImg); }); -router.get('/:campaign/:list/:subscription/:link', (req, res, next) => { - links.resolve(req.params.campaign, req.params.link, (err, linkId, url) => { +router.get('/:campaign/:list/:subscription/:link', (req, res) => { + + let notFound = () => { + res.status(404); + return res.render('archive/view', { + layout: 'archive/layout', + message: 'Oops, we couldn\'t find a link for the URL you clicked', + campaign: { + subject: 'Error 404' + } + }); + }; + + links.resolve(req.params.link, (err, linkId, url) => { if (err) { req.flash('danger', err.message || err); return res.redirect('/'); } + if (!linkId || !url) { + log.error('Redirect', 'Unresolved URL: <%s>', req.url); + return notFound(); + } links.countClick(req.ip, req.params.campaign, req.params.list, req.params.subscription, linkId, (err, status) => { if (err) { log.error('Redirect', err.stack || err); @@ -58,9 +74,8 @@ router.get('/:campaign/:list/:subscription/:link', (req, res, next) => { } if (!list) { - err = new Error('Not Found'); - err.status = 404; - return next(err); + log.error('Redirect', 'Could not resolve list for merge tags: <%s>', req.url); + return notFound(); } settings.get('serviceUrl', (err, serviceUrl) => { @@ -76,9 +91,8 @@ router.get('/:campaign/:list/:subscription/:link', (req, res, next) => { } if (!subscription) { - err = new Error('Not Found'); - err.status = 404; - return next(err); + log.error('Redirect', 'Could not resolve subscription for merge tags: <%s>', req.url); + return notFound(); } url = tools.formatMessage(serviceUrl, { diff --git a/routes/lists.js b/routes/lists.js index ccf1bed1..33bf3925 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -1,5 +1,6 @@ 'use strict'; +let config = require('config'); let openpgp = require('openpgp'); let passport = require('../lib/passport'); let express = require('express'); @@ -13,9 +14,30 @@ let htmlescape = require('escape-html'); let multer = require('multer'); let os = require('os'); let humanize = require('humanize'); -let uploads = multer({ - dest: os.tmpdir() +let mkdirp = require('mkdirp'); +let pathlib = require('path'); +let log = require('npmlog'); + +let uploadStorage = multer.diskStorage({ + destination: (req, file, callback) => { + log.verbose('tmpdir', os.tmpdir()); + let tmp = config.www.tmpdir || os.tmpdir(); + let dir = pathlib.join(tmp, 'mailtrain'); + mkdirp(dir, err => { + if (err) { + log.error('Upload', err); + log.verbose('Upload', 'Storing upload to <%s>', tmp); + return callback(null, tmp); + } + log.verbose('Upload', 'Storing upload to <%s>', dir); + callback(null, dir); + }); + } }); +let uploads = multer({ + storage: uploadStorage +}); + let csvparse = require('csv-parse'); let fs = require('fs'); let moment = require('moment-timezone'); diff --git a/routes/settings.js b/routes/settings.js index 4785f6d0..993fc96a 100644 --- a/routes/settings.js +++ b/routes/settings.js @@ -11,7 +11,7 @@ let url = require('url'); let settings = require('../lib/models/settings'); -let allowedKeys = ['service_url', 'smtp_hostname', 'smtp_port', 'smtp_encryption', 'smtp_disable_auth', 'smtp_user', 'smtp_pass', 'admin_email', 'smtp_log', 'smtp_max_connections', 'smtp_max_messages', 'smtp_self_signed', 'default_from', 'default_address', 'default_subject', 'default_homepage', 'default_postaddress', 'default_sender', 'verp_hostname', 'verp_use', 'disable_wysiwyg', 'pgp_private_key', 'pgp_passphrase', 'ua_code']; +let allowedKeys = ['service_url', 'smtp_hostname', 'smtp_port', 'smtp_encryption', 'smtp_disable_auth', 'smtp_user', 'smtp_pass', 'admin_email', 'smtp_log', 'smtp_max_connections', 'smtp_max_messages', 'smtp_self_signed', 'default_from', 'default_address', 'default_subject', 'default_homepage', 'default_postaddress', 'default_sender', 'verp_hostname', 'verp_use', 'disable_wysiwyg', 'pgp_private_key', 'pgp_passphrase', 'ua_code', 'shoutout']; router.all('/*', (req, res, next) => { if (!req.user) { @@ -57,58 +57,51 @@ router.post('/update', passport.parseForm, passport.csrfProtection, (req, res) = let data = tools.convertKeys(req.body); - tools.validateEmail(data.adminEmail, false, err => { - if (err) { - req.flash('danger', err && err.message || err); + let keys = []; + let values = []; + + Object.keys(data).forEach(key => { + let value = data[key].trim(); + key = tools.toDbKey(key); + // ensure trailing slash for service home page + if (key === 'service_url' && value && !/\/$/.test(value)) { + value = value + '/'; + } + if (allowedKeys.indexOf(key) >= 0) { + keys.push(key); + values.push(value); + } + }); + + // checkboxs are not included in value listing if left unchecked + ['smtp_log', 'smtp_self_signed', 'smtp_disable_auth', 'verp_use', 'disable_wysiwyg'].forEach(key => { + if (keys.indexOf(key) < 0) { + keys.push(key); + values.push(''); + } + }); + + let i = 0; + let storeSettings = () => { + if (i >= keys.length) { + mailer.update(); + req.flash('success', 'Settings updated'); return res.redirect('/settings'); } + let key = keys[i]; + let value = values[i]; + i++; - let keys = []; - let values = []; - - Object.keys(data).forEach(key => { - let value = data[key].trim(); - key = tools.toDbKey(key); - // ensure trailing slash for service home page - if (key === 'service_url' && value && !/\/$/.test(value)) { - value = value + '/'; - } - if (allowedKeys.indexOf(key) >= 0) { - keys.push(key); - values.push(value); - } - }); - - // checkboxs are not included in value listing if left unchecked - ['smtp_log', 'smtp_self_signed', 'smtp_disable_auth', 'verp_use', 'disable_wysiwyg'].forEach(key => { - if (keys.indexOf(key) < 0) { - keys.push(key); - values.push(''); - } - }); - - let i = 0; - let storeSettings = () => { - if (i >= keys.length) { - mailer.update(); - req.flash('success', 'Settings updated'); + settings.set(key, value, err => { + if (err) { + req.flash('danger', err && err.message || err); return res.redirect('/settings'); } - let key = keys[i]; - let value = values[i]; - i++; + storeSettings(); + }); + }; - settings.set(key, value, err => { - if (err) { - req.flash('danger', err && err.message || err); - return res.redirect('/settings'); - } - storeSettings(); - }); - }; - - storeSettings(); - }); + storeSettings(); }); router.post('/smtp-verify', passport.parseForm, passport.csrfProtection, (req, res) => { diff --git a/routes/triggers.js b/routes/triggers.js new file mode 100644 index 00000000..d4525147 --- /dev/null +++ b/routes/triggers.js @@ -0,0 +1,235 @@ +'use strict'; + +let express = require('express'); +let router = new express.Router(); +let triggers = require('../lib/models/triggers'); +let campaigns = require('../lib/models/campaigns'); +let lists = require('../lib/models/lists'); +let fields = require('../lib/models/fields'); +let striptags = require('striptags'); +let passport = require('../lib/passport'); +let tools = require('../lib/tools'); + +router.all('/*', (req, res, next) => { + if (!req.user) { + req.flash('danger', 'Need to be logged in to access restricted content'); + return res.redirect('/users/login?next=' + encodeURIComponent(req.originalUrl)); + } + res.setSelectedMenu('triggers'); + next(); +}); + +router.get('/', (req, res) => { + triggers.list((err, rows) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/'); + } + + res.render('triggers/triggers', { + rows: rows.map((row, i) => { + row.index = i + 1; + row.description = striptags(row.description); + return row; + }) + }); + }); +}); + + +router.get('/create-select', passport.csrfProtection, (req, res, next) => { + let data = tools.convertKeys(req.query, { + skip: ['layout'] + }); + + data.csrfToken = req.csrfToken(); + + lists.quicklist((err, listItems) => { + if (err) { + return next(err); + } + data.listItems = listItems; + + res.render('triggers/create-select', data); + }); +}); + +router.post('/create-select', passport.parseForm, passport.csrfProtection, (req, res) => { + if (!req.body.list) { + req.flash('danger', 'Could not find selected list'); + return res.redirect('/triggers/create-select'); + } + res.redirect('/triggers/' + encodeURIComponent(req.body.list) + '/create'); +}); + + +router.get('/:listId/create', passport.csrfProtection, (req, res, next) => { + let data = tools.convertKeys(req.query, { + skip: ['layout'] + }); + + data.csrfToken = req.csrfToken(); + data.days = Math.max(Number(data.days) || 1, 1); + + lists.get(req.params.listId, (err, list) => { + if (err || !list) { + req.flash('danger', err && err.message || err || 'Could not find selected list'); + return res.redirect('/triggers/create-select'); + } + fields.list(list.id, (err, fieldList) => { + if (err && !fieldList) { + fieldList = []; + } + + data.columns = triggers.defaultColumns.concat(fieldList.filter(field => fields.genericTypes[field.type] === 'date')).map(field => ({ + column: field.column, + name: field.name, + selected: data.column === field.column + })); + + campaigns.list(0, 300, (err, campaignList) => { + if (err) { + return next(err); + } + + data.sourceCampaigns = (campaignList || []).filter(campaign => campaign.list === list.id).map(campaign => ({ + id: campaign.id, + name: campaign.name, + selected: Number(data.sourceCampaign) === campaign.id + })); + + data.destCampaigns = (campaignList || []).filter(campaign => campaign.list === list.id && campaign.type === 4).map(campaign => ({ + id: campaign.id, + name: campaign.name, + selected: Number(data.destCampaign) === campaign.id + })); + + data.list = list; + data.isSubscription = data.rule === 'subscription' || !data.rule; + data.isCampaign = data.rule === 'campaign'; + + data.campaignOptions = triggers.defaultCampaignEvents.map(evt => ({ + option: evt.option, + name: evt.name, + selected: Number(data.sourceCampaign) === evt.option + })); + + data.isSend = true; + + res.render('triggers/create', data); + }); + }); + }); +}); + +router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) => { + triggers.create(req.body, (err, id) => { + if (err || !id) { + req.flash('danger', err && err.message || err || 'Could not create trigger'); + if (req.body.list) { + return res.redirect('/triggers/' + encodeURIComponent(req.body.list) + '/create?' + tools.queryParams(req.body)); + } else { + return res.redirect('/triggers'); + } + } + req.flash('success', 'Trigger “' + req.body.name + '” created'); + res.redirect('/triggers'); + }); +}); + +router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { + triggers.get(req.params.id, (err, trigger) => { + if (err || !trigger) { + req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + return res.redirect('/campaigns'); + } + trigger.csrfToken = req.csrfToken(); + trigger.days = Math.round(trigger.seconds / (24 * 3600)); + + lists.get(trigger.list, (err, list) => { + if (err || !list) { + req.flash('danger', err && err.message || err || 'Could not find selected list'); + return res.redirect('/triggers'); + } + fields.list(list.id, (err, fieldList) => { + if (err && !fieldList) { + fieldList = []; + } + + campaigns.list(0, 300, (err, campaignList) => { + if (err) { + return next(err); + } + + trigger.sourceCampaigns = (campaignList || []).filter(campaign => campaign.list === list.id).map(campaign => ({ + id: campaign.id, + name: campaign.name, + selected: Number(trigger.sourceCampaign) === campaign.id + })); + + trigger.destCampaigns = (campaignList || []).filter(campaign => campaign.list === list.id && campaign.type === 4).map(campaign => ({ + id: campaign.id, + name: campaign.name, + selected: Number(trigger.destCampaign) === campaign.id + })); + + trigger.list = list; + trigger.isSubscription = trigger.rule === 'subscription' || !trigger.rule; + trigger.isCampaign = trigger.rule === 'campaign'; + + trigger.columns = triggers.defaultColumns.concat(fieldList.filter(field => fields.genericTypes[field.type] === 'date')).map(field => ({ + column: field.column, + name: field.name, + selected: trigger.isSubscription && trigger.column === field.column + })); + + trigger.campaignOptions = triggers.defaultCampaignEvents.map(evt => ({ + option: evt.option, + name: evt.name, + selected: trigger.isCampaign && trigger.column === evt.option + })); + + if (trigger.rule !== 'subscription') { + trigger.column = null; + } + + trigger.isSend = true; + + res.render('triggers/edit', trigger); + }); + }); + }); + }); +}); + +router.post('/edit', passport.parseForm, passport.csrfProtection, (req, res) => { + triggers.update(req.body.id, req.body, (err, updated) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/triggers/edit/' + encodeURIComponent(req.body.id)); + } else if (updated) { + req.flash('success', 'Trigger settings updated'); + } else { + req.flash('info', 'Trigger settings not updated'); + } + + return res.redirect('/triggers'); + }); +}); + +router.post('/delete', passport.parseForm, passport.csrfProtection, (req, res) => { + triggers.delete(req.body.id, (err, deleted) => { + if (err) { + req.flash('danger', err && err.message || err); + } else if (deleted) { + req.flash('success', 'Trigger deleted'); + } else { + req.flash('info', 'Could not delete specified trigger'); + } + + return res.redirect('/triggers'); + }); +}); + + +module.exports = router; diff --git a/services/sender.js b/services/sender.js index 204f24a8..09c9ffab 100644 --- a/services/sender.js +++ b/services/sender.js @@ -46,6 +46,61 @@ function findUnsent(callback) { }); }; + // get next subscriber from trigger queue + let checkQueued = () => { + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + connection.query('SELECT * FROM `queued` ORDER BY `created` ASC LIMIT 1', (err, rows) => { + if (err) { + connection.release(); + return callback(err); + } + if (!rows || !rows.length) { + connection.release(); + return callback(null, false); + } + + let queued = tools.convertKeys(rows[0]); + + // delete queued element + connection.query('DELETE FROM `queued` WHERE `campaign`=? AND `list`=? AND `subscriber`=? LIMIT 1', [queued.campaign, queued.list, queued.subscriber], err => { + if (err) { + connection.release(); + return callback(err); + } + + // get campaign + connection.query('SELECT `id`, `list`, `segment` FROM `campaigns` WHERE `id`=? LIMIT 1', [queued.campaign], (err, rows) => { + if (err) { + connection.release(); + return callback(err); + } + if (!rows || !rows.length) { + connection.release(); + return callback(null, false); + } + + let campaign = tools.convertKeys(rows[0]); + + // get subscription + connection.query('SELECT * FROM `subscription__' + queued.list + '` WHERE `id`=? AND `status`=1 LIMIT 1', [queued.subscriber], (err, rows) => { + connection.release(); + if (err) { + return callback(err); + } + if (!rows || !rows.length) { + return callback(null, false); + } + return returnUnsent(rows[0], campaign); + }); + }); + }); + }); + }); + }; + if (caches.cache.has('sender queue')) { let cached = caches.shift('sender queue'); return returnUnsent(cached.row, cached.campaign); @@ -64,7 +119,7 @@ function findUnsent(callback) { return callback(err); } if (!rows || !rows.length) { - return callback(null, false); + return checkQueued(); } let campaign = tools.convertKeys(rows[0]); diff --git a/services/triggers.js b/services/triggers.js new file mode 100644 index 00000000..81d93331 --- /dev/null +++ b/services/triggers.js @@ -0,0 +1,112 @@ +'use strict'; + +let log = require('npmlog'); +let db = require('../lib/db'); +let tools = require('../lib/tools'); +let triggers = require('../lib/models/triggers'); + +function triggerLoop() { + checkTrigger((err, triggerId) => { + if (err) { + log.error('Triggers', err); + } + if (triggerId) { + return setImmediate(triggerLoop); + } else { + return setTimeout(triggerLoop, 15 * 1000); + } + }); +} + +function checkTrigger(callback) { + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + let query = 'SELECT * FROM `triggers` WHERE `enabled`=1 AND `last_check`<=NOW()-INTERVAL 1 MINUTE ORDER BY `last_check` ASC LIMIT 1'; + connection.query(query, (err, rows) => { + if (err) { + connection.release(); + return callback(err); + } + if (!rows || !rows.length) { + connection.release(); + return callback(null, false); + } + let trigger = tools.convertKeys(rows[0]); + let query = 'UPDATE `triggers` SET `last_check`=NOW() WHERE id=? LIMIT 1'; + connection.query(query, [trigger.id], err => { + connection.release(); + if (err) { + return callback(err); + } + + triggers.getQuery(trigger.id, (err, query) => { + if (err) { + return callback(err); + } + if (!query) { + return callback(new Error('Unknown trigger type ' + trigger.id)); + } + trigger.query = query; + fireTrigger(trigger, callback); + }); + }); + }); + }); +} + +function fireTrigger(trigger, callback) { + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + connection.query(trigger.query, (err, rows) => { + if (err) { + connection.release(); + return callback(err); + } + + if (!rows || !rows.length) { + return callback(null, trigger.id); + } + + let pos = 0; + let insertNext = () => { + if (pos >= rows.length) { + return callback(null, trigger.id); + } + let subscriber = rows[pos++].id; + + let query = 'INSERT INTO `trigger__' + trigger.id + '` (`list`, `subscription`) VALUES (?,?)'; + let values = [trigger.list, subscriber]; + + connection.query(query, values, (err, result) => { + if (err && err.code !== 'ER_DUP_ENTRY') { + connection.release(); + return callback(err); + } + if (!result.affectedRows) { + return setImmediate(insertNext); + } + log.verbose('Triggers', 'Triggered %s (%s) for subscriber %s', trigger.name, trigger.id, subscriber); + let query = 'INSERT INTO `queued` (`campaign`, `list`, `subscriber`, `source`) VALUES (?,?,?,?)'; + let values = [trigger.destCampaign, trigger.list, subscriber, 'trigger ' + trigger.id]; + connection.query(query, values, err => { + if (err && err.code !== 'ER_DUP_ENTRY') { + connection.release(); + return callback(err); + } + return setImmediate(insertNext); + }); + }); + }; + insertNext(); + }); + }); +} + +module.exports = callback => { + triggerLoop(); + setImmediate(callback); +}; diff --git a/setup/mailtrain.conf b/setup/mailtrain.conf index 127ff4d9..2dff9463 100644 --- a/setup/mailtrain.conf +++ b/setup/mailtrain.conf @@ -13,5 +13,5 @@ respawn limit 10 0 script cd /opt/mailtrain - exec npm start >> /var/log/mailtrain.log 2>&1 + exec node index.js >> /var/log/mailtrain.log 2>&1 end script diff --git a/setup/sql/mailtrain.sql b/setup/sql/mailtrain.sql index 09135093..a912ba3d 100644 --- a/setup/sql/mailtrain.sql +++ b/setup/sql/mailtrain.sql @@ -185,7 +185,7 @@ CREATE TABLE `settings` ( `value` text NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key` (`key`) -) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4; INSERT INTO `settings` (`id`, `key`, `value`) VALUES (1,'smtp_hostname','localhost'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (2,'smtp_port','465'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (3,'smtp_encryption','TLS'); @@ -202,7 +202,7 @@ INSERT INTO `settings` (`id`, `key`, `value`) VALUES (13,'default_from','My Awes INSERT INTO `settings` (`id`, `key`, `value`) VALUES (14,'default_address','admin@example.com'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (15,'default_subject','Test message'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (16,'default_homepage','http://localhost:3000/'); -INSERT INTO `settings` (`id`, `key`, `value`) VALUES (17,'db_schema_version','14'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (17,'db_schema_version','15'); CREATE TABLE `subscription` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL, @@ -238,6 +238,31 @@ CREATE TABLE `templates` ( PRIMARY KEY (`id`), KEY `name` (`name`(191)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE `trigger` ( + `list` int(11) unsigned NOT NULL, + `subscription` int(11) unsigned NOT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`list`,`subscription`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `triggers` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL DEFAULT '', + `description` text, + `list` int(11) unsigned NOT NULL, + `source_campaign` int(11) unsigned DEFAULT NULL, + `rule` varchar(255) CHARACTER SET ascii NOT NULL DEFAULT 'column', + `column` varchar(255) CHARACTER SET ascii DEFAULT NULL, + `seconds` int(11) NOT NULL DEFAULT '0', + `dest_campaign` int(11) unsigned DEFAULT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `name` (`name`(191)), + KEY `source_campaign` (`source_campaign`), + KEY `dest_campaign` (`dest_campaign`), + KEY `list` (`list`), + KEY `column` (`column`), + CONSTRAINT `triggers_ibfk_1` FOREIGN KEY (`list`) REFERENCES `lists` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `tzoffset` ( `tz` varchar(100) NOT NULL DEFAULT '', `offset` int(11) NOT NULL DEFAULT '0', diff --git a/setup/sql/upgrade-00015.sql b/setup/sql/upgrade-00015.sql new file mode 100644 index 00000000..7c912033 --- /dev/null +++ b/setup/sql/upgrade-00015.sql @@ -0,0 +1,59 @@ +# Header section +# Define incrementing schema version number +SET @schema_version = '15'; + +# table for trigger definitions +CREATE TABLE `triggers` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL DEFAULT '', + `description` text, + `enabled` tinyint(4) unsigned NOT NULL DEFAULT '1', + `list` int(11) unsigned NOT NULL, + `source_campaign` int(11) unsigned DEFAULT NULL, + `rule` varchar(255) CHARACTER SET ascii NOT NULL DEFAULT 'column', + `column` varchar(255) CHARACTER SET ascii DEFAULT NULL, + `seconds` int(11) NOT NULL DEFAULT '0', + `dest_campaign` int(11) unsigned DEFAULT NULL, + `last_check` timestamp NULL DEFAULT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `name` (`name`(191)), + KEY `source_campaign` (`source_campaign`), + KEY `dest_campaign` (`dest_campaign`), + KEY `list` (`list`), + KEY `column` (`column`), + KEY `active` (`enabled`), + KEY `last_check` (`last_check`), + CONSTRAINT `triggers_ibfk_1` FOREIGN KEY (`list`) REFERENCES `lists` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +# base table for triggered matches +CREATE TABLE `trigger` ( + `list` int(11) unsigned NOT NULL, + `subscription` int(11) unsigned NOT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`list`,`subscription`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +# table for yet queued messages ready to be sent +CREATE TABLE `queued` ( + `campaign` int(11) unsigned NOT NULL, + `list` int(11) unsigned NOT NULL, + `subscriber` int(11) unsigned NOT NULL, + `source` varchar(255) DEFAULT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`campaign`,`list`,`subscriber`), + KEY `created` (`created`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- {{#each tables.subscription}} + # Adds indexes for triggers + CREATE INDEX latest_open ON `{{this}}` (`latest_open`); + CREATE INDEX latest_click ON `{{this}}` (`latest_click`); + CREATE INDEX created ON `{{this}}` (`created`); +-- {{/each}} + +# Footer section +LOCK TABLES `settings` WRITE; +INSERT INTO `settings` (`key`, `value`) VALUES('db_schema_version', @schema_version) ON DUPLICATE KEY UPDATE `value`=@schema_version; +UNLOCK TABLES; diff --git a/views/campaigns/campaigns.hbs b/views/campaigns/campaigns.hbs index d2a70731..1828e4e1 100644 --- a/views/campaigns/campaigns.hbs +++ b/views/campaigns/campaigns.hbs @@ -9,8 +9,9 @@ Create Campaign
diff --git a/views/campaigns/create-triggered.hbs b/views/campaigns/create-triggered.hbs new file mode 100644 index 00000000..04eec68a --- /dev/null +++ b/views/campaigns/create-triggered.hbs @@ -0,0 +1,110 @@ + + +

Create Triggered Campaign

+ +
+ +
+ + + +
+ +
+ +
+
+ +
+ +
+ + HTML is allowed +
+
+ +
+ +
+ +
+
+ +
+ +
+ +

+ Select a template: +

+
+ + Selecting a template creates a campaign specific copy from it +
+

+ Or alternatively use an URL as the message content source: +

+
+ + If a message is sent then this URL will be POSTed to using Merge Tags as POST body. Use this if you want to generate the HTML message yourself +
+ +
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+
diff --git a/views/campaigns/edit-triggered.hbs b/views/campaigns/edit-triggered.hbs new file mode 100644 index 00000000..4e9b5d83 --- /dev/null +++ b/views/campaigns/edit-triggered.hbs @@ -0,0 +1,196 @@ + + +

Edit Triggered Campaign View campaign

+ +
+ +
+ + +
+ +
+ + + + +
+ + + + +
+
+ +

+ +
+ + General Settings + + +
+ +
+ +
+
+ +
+ +
+ + HTML is allowed +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ +

+ +
+ + Template Settings + + + {{#if sourceUrl}} +
+ +
+ + If a message is sent then this URL will be POSTed to using Merge Tags as POST body. Use this if you want to generate the HTML message yourself +
+
+ {{else}} + + +
+
+ +
+

+ Merge tags are tags that are replaced before sending out the message. The format of the merge tag is the following: [TAG_NAME] or [TAG_NAME/fallback] where fallback is an optional + text value used when TAG_NAME is empty. +

+ + + + + + + + + + {{#each mergeTags}} + + + + + {{/each}} + +
+ Merge tag + + Description +
+ [{{key}}] + + {{value}} +
+
+
+
+ +
+ +
+ {{#if disableWysiwyg}} +
{{html}}
+ + {{else}} + + {{/if}} +
+
+ +
+ +
+ +
+
+ + {{/if}} +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
diff --git a/views/campaigns/view.hbs b/views/campaigns/view.hbs index 58e3c470..1dfdae54 100644 --- a/views/campaigns/view.hbs +++ b/views/campaigns/view.hbs @@ -33,27 +33,25 @@

-
List
-
- {{#if segment}} - - {{list.name}}: {{segment.name}} - - {{else}} - - {{list.name}} - - {{/if}} -
+ {{#if list}} +
List
+
+ {{#if segment}} + {{list.name}}: {{segment.name}} + {{else}} + {{list.name}} + {{/if}} +
-
List subscribers
-
- {{#if segment}} - {{segment.subscribers}} - {{else}} - {{list.subscribers}} - {{/if}} -
+
List subscribers
+
+ {{#if segment}} + {{segment.subscribers}} + {{else}} + {{list.subscribers}} + {{/if}} +
+ {{/if}} {{#if isRss}}
Feed URL
@@ -85,7 +83,7 @@
{{subject}}
{{/if}} - {{#if isNormal}} + {{#unless isRss}}
Preview campaign as
@@ -166,7 +164,7 @@
{{/unless}} - {{/if}} + {{/unless}}
{{#if isNormal}} @@ -313,6 +311,14 @@
{{/if}} + {{#if isTriggered}} +
+
+ This is a triggered campaign. Messages are only sent to subscribers that hit some trigger that invokes this campaign +
+
+ {{/if}} +
{{#if links}} + {{/unless}} {{/if}} From 3bb22d733a8d4504c99e43d4c36126fb2738bd00 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 8 Sep 2016 14:54:38 +0300 Subject: [PATCH 087/483] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7ef4a422..87066ac6 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ curl https://raw.githubusercontent.com/andris9/mailtrain/master/setup/install.sh Install script installs and sets up the following: * **Node.js** (version 6.x) - * **MySQL** (platform default) + * **MariaDB** (the default version from apt-get) * **Mailtrain** (from the master branch) on port 80 * **UFW** firewall that blocks everything besides ports 22, 25, 80, 443 * **[ZoneMTA](https://github.com/zone-eu/zone-mta)** to queue and deliver messages (**NB!** using ZoneMTA assumes that outgoing port 25 is open which might not be the case on some hosts like on the Google Cloud) From fdf84f32ae00102cb5a030785aafe02aa5c5620a Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 8 Sep 2016 14:56:03 +0300 Subject: [PATCH 088/483] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 87066ac6..d89d5457 100644 --- a/README.md +++ b/README.md @@ -163,6 +163,7 @@ Mailtrain uses webhooks integration to detect bounces and spam complaints. Curre * **SparkPost** – use `http://domain/webhooks/sparkpost` as the webhook URL for bounces and complaints ([instructions](https://github.com/andris9/mailtrain/wiki/Setting-up-Webhooks-for-SparkPost)) * **SendGrid** – use `http://domain/webhooks/sendgrid` as the webhook URL for bounces and complaints ([instructions](https://github.com/andris9/mailtrain/wiki/Setting-up-Webhooks-for-SendGrid)) * **Mailgun** – use `http://domain/webhooks/mailgun` as the webhook URL for bounces and complaints ([instructions](https://github.com/andris9/mailtrain/wiki/Setting-up-Webhooks-for-Mailgun)) + * **ZoneMTA** – use `http://domain/webhooks/zone-mta` as the webhook URL for bounces. If you install Mailtrain with the included installation script then this route gets set up automatically during the installation process Additionally Mailtrain (v1.1+) is able to use VERP-based bounce handling. This would require to have a compatible SMTP relay (the services mentioned above strip out or block VERP addresses in the SMTP envelope) and you also need to set up special MX DNS name that points to your Mailtrain installation server. From d651cca039de962321645e906ad47a1587d90f4d Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 8 Sep 2016 15:31:38 +0300 Subject: [PATCH 089/483] Updated installation script --- lib/mailer.js | 5 +++++ routes/settings.js | 2 +- routes/webhooks.js | 41 +++++++++++++++++++++++++++++++++++++ setup/install.sh | 9 +++++++++ views/settings.hbs | 50 ++++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 104 insertions(+), 3 deletions(-) diff --git a/lib/mailer.js b/lib/mailer.js index 2310662c..6c568d1b 100644 --- a/lib/mailer.js +++ b/lib/mailer.js @@ -41,6 +41,11 @@ module.exports.sendMail = (mail, template, callback) => { }); } + if (!mail.headers) { + mail.headers = {}; + } + mail.headers['X-Sending-Zone'] = 'transactional'; + getTemplate(template.html, (err, htmlRenderer) => { if (err) { return callback(err); diff --git a/routes/settings.js b/routes/settings.js index 8826d3a0..72e63546 100644 --- a/routes/settings.js +++ b/routes/settings.js @@ -13,7 +13,7 @@ let upload = multer(); let settings = require('../lib/models/settings'); -let allowedKeys = ['service_url', 'smtp_hostname', 'smtp_port', 'smtp_encryption', 'smtp_disable_auth', 'smtp_user', 'smtp_pass', 'admin_email', 'smtp_log', 'smtp_max_connections', 'smtp_max_messages', 'smtp_self_signed', 'default_from', 'default_address', 'default_subject', 'default_homepage', 'default_postaddress', 'default_sender', 'verp_hostname', 'verp_use', 'disable_wysiwyg', 'pgp_private_key', 'pgp_passphrase', 'ua_code', 'shoutout', 'disable_confirmations', 'smtp_throttling']; +let allowedKeys = ['service_url', 'smtp_hostname', 'smtp_port', 'smtp_encryption', 'smtp_disable_auth', 'smtp_user', 'smtp_pass', 'admin_email', 'smtp_log', 'smtp_max_connections', 'smtp_max_messages', 'smtp_self_signed', 'default_from', 'default_address', 'default_subject', 'default_homepage', 'default_postaddress', 'default_sender', 'verp_hostname', 'verp_use', 'disable_wysiwyg', 'pgp_private_key', 'pgp_passphrase', 'ua_code', 'shoutout', 'disable_confirmations', 'smtp_throttling', 'dkim_api_key', 'dkim_private_key', 'dkim_selector', 'dkim_domain']; router.all('/*', (req, res, next) => { if (!req.user) { diff --git a/routes/webhooks.js b/routes/webhooks.js index 7a0b7c7b..5f9e3e0a 100644 --- a/routes/webhooks.js +++ b/routes/webhooks.js @@ -4,6 +4,7 @@ let express = require('express'); let router = new express.Router(); let request = require('request'); let campaigns = require('../lib/models/campaigns'); +let settings = require('../lib/models/settings'); let log = require('npmlog'); let multer = require('multer'); let uploads = multer(); @@ -286,4 +287,44 @@ router.post('/zone-mta', (req, res, next) => { }); }); +router.post('/zone-mta/sender-config', (req, res) => { + if (!req.query.api_token) { + return res.json({ + error: 'api_token value not set' + }); + } + settings.list(['dkim_api_key', 'dkim_private_key', 'dkim_selector', 'dkim_domain'], (err, configItems) => { + if (err) { + return res.json({ + error: err.message + }); + } + + if (configItems.dkimApiKey !== req.query.api_token) { + return res.json({ + error: 'invalid api_token value' + }); + } + + configItems.dkimSelector = (configItems.dkimSelector || '').trim(); + configItems.dkimPrivateKey = (configItems.dkimPrivateKey || '').trim(); + + if (!configItems.dkimSelector || !configItems.dkimPrivateKey) { + // empty response + return res.json({}); + } + + let from = (req.body.from || '').trim(); + let domain = from.split('@').pop().toLowerCase().trim(); + + res.json({ + keys: { + domainName: configItems.dkimDomain || domain, + keySelector: configItems.dkimSelector, + privateKey: configItems.dkimPrivateKey + } + }); + }); +}); + module.exports = router; diff --git a/setup/install.sh b/setup/install.sh index 01d37efb..a33a3899 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -26,6 +26,7 @@ fi HOSTNAME="${HOSTNAME:-`hostname`}" MYSQL_PASSWORD=`pwgen -1` +DKIM_API_KEY=`pwgen -1` # Setup MySQL user for Mailtrain mysql -u root -e "CREATE USER 'mailtrain'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';" @@ -57,6 +58,7 @@ INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('smtp_encryption','NONE') INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('smtp_port','587') ON DUPLICATE KEY UPDATE \`value\`='587'; INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('default_homepage','http://$HOSTNAME/') ON DUPLICATE KEY UPDATE \`value\`='http://$HOSTNAME/'; INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('service_url','http://$HOSTNAME/') ON DUPLICATE KEY UPDATE \`value\`='http://$HOSTNAME/'; +INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('dkim_api_key','http://$DKIM_API_KEY/') ON DUPLICATE KEY UPDATE \`value\`='http://$DKIM_API_KEY/'; EOT # Add new user for the mailtrain daemon to run as @@ -131,6 +133,13 @@ cat >> config/production.json <
- +
@@ -312,7 +312,53 @@
- This value is optional. if you do not provide a private key GPG encrypted messages are sent without signing. + This value is optional. If you do not provide a private key GPG encrypted messages are sent without signing. +
+ + + + +
+ + DKIM Signing by ZoneMTA + + +

+ If you are using ZoneMTA then Mailtrain can provide a DKIM key for signing all outgoing messages. Other services usually provide their own means to DKIM sign your messages +

+

+ Do not use sensitive keys here. The private key is not encrypted in the database. +

+ +
+ +
+ + Secret value known to ZoneMTA for requesting DKIM key information. If this value was generated by the Mailtrain installation script then you can keep it as it is +
+
+ +
+ +
+ + Leave blank to use the sender email address domain +
+
+ +
+ +
+ + Signing is disabled without a valid selector value +
+
+ +
+ +
+ + This value is optional. If you do not provide a private key then messages are not signed.
From 46c1117767ae101f7c6d16b7b23efedbcdeb0d9c Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 8 Sep 2016 15:49:35 +0300 Subject: [PATCH 090/483] fixed prod script --- setup/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/install.sh b/setup/install.sh index a33a3899..8ff876a0 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -134,7 +134,7 @@ cat >> config/production.json < Date: Thu, 8 Sep 2016 15:55:37 +0300 Subject: [PATCH 091/483] updated install script --- setup/install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/setup/install.sh b/setup/install.sh index 8ff876a0..5654c848 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -25,8 +25,8 @@ if [ ! -z "$PUBLIC_IP" ]; then fi HOSTNAME="${HOSTNAME:-`hostname`}" -MYSQL_PASSWORD=`pwgen -1` -DKIM_API_KEY=`pwgen -1` +MYSQL_PASSWORD=`pwgen 12 -1` +DKIM_API_KEY=`pwgen 12 -1` # Setup MySQL user for Mailtrain mysql -u root -e "CREATE USER 'mailtrain'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';" @@ -58,7 +58,7 @@ INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('smtp_encryption','NONE') INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('smtp_port','587') ON DUPLICATE KEY UPDATE \`value\`='587'; INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('default_homepage','http://$HOSTNAME/') ON DUPLICATE KEY UPDATE \`value\`='http://$HOSTNAME/'; INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('service_url','http://$HOSTNAME/') ON DUPLICATE KEY UPDATE \`value\`='http://$HOSTNAME/'; -INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('dkim_api_key','http://$DKIM_API_KEY/') ON DUPLICATE KEY UPDATE \`value\`='http://$DKIM_API_KEY/'; +INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('dkim_api_key','http://$DKIM_API_KEY/') ON DUPLICATE KEY UPDATE \`value\`='$DKIM_API_KEY'; EOT # Add new user for the mailtrain daemon to run as From b27cc5d2623b6e8822259e9e1671976ab0de64cd Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 8 Sep 2016 15:59:17 +0300 Subject: [PATCH 092/483] updated install script --- setup/install.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/setup/install.sh b/setup/install.sh index 5654c848..c28f31ec 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -27,6 +27,7 @@ HOSTNAME="${HOSTNAME:-`hostname`}" MYSQL_PASSWORD=`pwgen 12 -1` DKIM_API_KEY=`pwgen 12 -1` +SMTP_PASS=`pwgen 12 -1` # Setup MySQL user for Mailtrain mysql -u root -e "CREATE USER 'mailtrain'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';" @@ -53,7 +54,9 @@ mysql -u mailtrain -p"$MYSQL_PASSWORD" mailtrain <> config/production.json < Date: Thu, 8 Sep 2016 16:16:04 +0300 Subject: [PATCH 093/483] updated install script --- setup/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/install.sh b/setup/install.sh index c28f31ec..bf13ff99 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -61,7 +61,7 @@ INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('smtp_encryption','NONE') INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('smtp_port','587') ON DUPLICATE KEY UPDATE \`value\`='587'; INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('default_homepage','http://$HOSTNAME/') ON DUPLICATE KEY UPDATE \`value\`='http://$HOSTNAME/'; INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('service_url','http://$HOSTNAME/') ON DUPLICATE KEY UPDATE \`value\`='http://$HOSTNAME/'; -INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('dkim_api_key','http://$DKIM_API_KEY/') ON DUPLICATE KEY UPDATE \`value\`='$DKIM_API_KEY'; +INSERT INTO \`settings\` (\`key\`, \`value\`) VALUES ('dkim_api_key','$DKIM_API_KEY') ON DUPLICATE KEY UPDATE \`value\`='$DKIM_API_KEY'; EOT # Add new user for the mailtrain daemon to run as From dcc22e55b9cbcd9231b52784014bded5ca1ab41c Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 8 Sep 2016 16:32:39 +0300 Subject: [PATCH 094/483] fixed dkim handling --- routes/webhooks.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/routes/webhooks.js b/routes/webhooks.js index 5f9e3e0a..64083d4a 100644 --- a/routes/webhooks.js +++ b/routes/webhooks.js @@ -318,10 +318,12 @@ router.post('/zone-mta/sender-config', (req, res) => { let domain = from.split('@').pop().toLowerCase().trim(); res.json({ - keys: { - domainName: configItems.dkimDomain || domain, - keySelector: configItems.dkimSelector, - privateKey: configItems.dkimPrivateKey + dkim: { + keys: { + domainName: configItems.dkimDomain || domain, + keySelector: configItems.dkimSelector, + privateKey: configItems.dkimPrivateKey + } } }); }); From f0e772933e830ea23ea5238b529256ce0f2e0b6f Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 8 Sep 2016 16:35:36 +0300 Subject: [PATCH 095/483] Updated README about DKIM --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d89d5457..7483a0a2 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ If you are using the bundled ZoneMTA then you need to add your Mailtrain host to ##### 4. Set up DKIM -If you are using the bundled ZoneMTA then you can provide a DKIM key to sign all outgoing messages. If you have a DKIM key set for domain "example.com" with selector "mailtrain", then store the private key to folder /opt/zone-mta/keys as "example.com.mailtrain.pem" (thats sending hostname + "." + seclector + ".pem"). Everything should work without the DKIM signatures but setting it up correctly improves the deliverability a lot. +If you are using the bundled ZoneMTA then you can provide a DKIM key to sign all outgoing messages. You can provide the DKIM private key in Mailtrain Settings page. This key is only used by ZoneMTA, so if you are using some other provider then you check your providers' documentation to see how to set up DKIM. In case of ZoneMTA you only need to open Mailtrain Settings page, scroll to DKIM config section and fill the fields for DKIM selector and DKIM private key. Everything should work without the DKIM signatures but setting it up correctly improves the deliverability a lot. ##### 5. Set up VERP From 78083c33fd52fef451b8b072b3d64f2162de119c Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 8 Sep 2016 17:49:01 +0300 Subject: [PATCH 096/483] Require JavaScript to be turned on for subsciption confirmations --- lib/models/subscriptions.js | 3 +++ routes/subscription.js | 8 ++++++++ views/subscription/subscribe.hbs | 7 +++++++ 3 files changed, 18 insertions(+) diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 959be77a..3a3503fe 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -214,6 +214,9 @@ module.exports.addConfirmation = (list, email, optInIp, data, callback) => { } setImmediate(() => { + if (data._skip) { + return; + } mailer.sendMail({ from: { diff --git a/routes/subscription.js b/routes/subscription.js index 5158212a..6ee399c1 100644 --- a/routes/subscription.js +++ b/routes/subscription.js @@ -216,6 +216,11 @@ router.post('/:cid/subscribe', passport.parseForm, passport.csrfProtection, (req return res.redirect('/subscription/' + encodeURIComponent(req.params.cid) + '?' + tools.queryParams(req.body)); } + let subTime = Number(req.body.sub) || 0; + let subTest = !!(subTime > Date.now() - 3600 * 1000 && subTime < Date.now() + 3600 * 1000); + let addressTest = !req.body.address; + let testsPass = subTest && addressTest; + lists.getByCid(req.params.cid, (err, list) => { if (!err && !list) { err = new Error('Selected list not found'); @@ -232,6 +237,9 @@ router.post('/:cid/subscribe', passport.parseForm, passport.csrfProtection, (req data[key] = (req.body[key] || '').toString().trim(); } }); + data._address = req.body.address; + data._sub = req.body.sub; + data._skip = !testsPass; data = tools.convertKeys(data); subscriptions.addConfirmation(list, email, req.ip, data, (err, confirmCid) => { diff --git a/views/subscription/subscribe.hbs b/views/subscription/subscribe.hbs index 6cc7eeb2..18f66d61 100644 --- a/views/subscription/subscribe.hbs +++ b/views/subscription/subscribe.hbs @@ -10,6 +10,9 @@ + + +
@@ -121,3 +124,7 @@
+ + From 7171c236bd20b9c3d906a25320d0a3dd5ec76107 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 8 Sep 2016 17:50:25 +0300 Subject: [PATCH 097/483] Require JavaScript to be turned on for subsciption confirmations --- routes/subscription.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/routes/subscription.js b/routes/subscription.js index 6ee399c1..41524cd3 100644 --- a/routes/subscription.js +++ b/routes/subscription.js @@ -237,10 +237,12 @@ router.post('/:cid/subscribe', passport.parseForm, passport.csrfProtection, (req data[key] = (req.body[key] || '').toString().trim(); } }); + + data = tools.convertKeys(data); + data._address = req.body.address; data._sub = req.body.sub; data._skip = !testsPass; - data = tools.convertKeys(data); subscriptions.addConfirmation(list, email, req.ip, data, (err, confirmCid) => { if (!err && !confirmCid) { From 83ac907f2436109107f89fff34ae6d60082fd294 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 8 Sep 2016 17:51:39 +0300 Subject: [PATCH 098/483] Require JavaScript to be turned on for subsciption confirmations --- lib/models/subscriptions.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 3a3503fe..fa5448e5 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -215,6 +215,7 @@ module.exports.addConfirmation = (list, email, optInIp, data, callback) => { setImmediate(() => { if (data._skip) { + log.error('Subscription', 'Confirmation message for %s marked to be skipped (%s)', email, JSON.stringify(data)); return; } From e1ace459cfbe3fe7ba80321148a3e487ff12bb67 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 8 Sep 2016 20:43:02 +0300 Subject: [PATCH 099/483] Require subscribers to have JavaScript turned on --- lib/models/subscriptions.js | 2 +- package.json | 14 +++++++------- routes/subscription.js | 8 ++++++-- views/subscription/confirm-notice.hbs | 8 ++++++++ views/subscription/subscribe.hbs | 13 ++++++++++++- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index fa5448e5..17f20d76 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -215,7 +215,7 @@ module.exports.addConfirmation = (list, email, optInIp, data, callback) => { setImmediate(() => { if (data._skip) { - log.error('Subscription', 'Confirmation message for %s marked to be skipped (%s)', email, JSON.stringify(data)); + log.info('Subscription', 'Confirmation message for %s marked to be skipped (%s)', email, JSON.stringify(data)); return; } diff --git a/package.json b/package.json index f99325fa..4862b97c 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "dependencies": { "bcrypt-nodejs": "0.0.3", "body-parser": "^1.15.2", - "bounce-handler": "^7.3.2-fork.1", + "bounce-handler": "^7.3.2-fork.2", "compression": "^1.6.2", "config": "^1.21.0", "connect-flash": "^0.1.1", @@ -41,7 +41,7 @@ "csv-parse": "^1.1.7", "escape-html": "^1.0.3", "express": "^4.14.0", - "express-session": "^1.14.0", + "express-session": "^1.14.1", "faker": "^3.1.0", "feedparser": "^1.1.4", "geoip-ultralight": "^0.1.4", @@ -52,15 +52,15 @@ "humanize": "0.0.9", "is-url": "^1.2.2", "isemail": "^2.2.1", - "jsdom": "^9.4.2", - "juice": "^2.0.0", - "libmime": "^2.0.3", + "jsdom": "^9.5.0", + "juice": "^3.0.0", + "libmime": "^2.1.0", "mkdirp": "^0.5.1", "moment-timezone": "^0.5.5", "morgan": "^1.7.0", "multer": "^1.2.0", "mysql": "^2.11.1", - "nodemailer": "^2.5.0", + "nodemailer": "^2.6.0", "nodemailer-openpgp": "^1.0.2", "npmlog": "^4.0.0", "openpgp": "^2.3.3", @@ -70,7 +70,7 @@ "serve-favicon": "^2.3.0", "shortid": "^2.2.6", "slugify": "^1.0.2", - "smtp-server": "^1.14.1", + "smtp-server": "^1.14.2", "striptags": "^2.1.1", "toml": "^2.3.0" } diff --git a/routes/subscription.js b/routes/subscription.js index 41524cd3..27d50878 100644 --- a/routes/subscription.js +++ b/routes/subscription.js @@ -216,10 +216,14 @@ router.post('/:cid/subscribe', passport.parseForm, passport.csrfProtection, (req return res.redirect('/subscription/' + encodeURIComponent(req.params.cid) + '?' + tools.queryParams(req.body)); } + // Check if the subscriber seems legit. This is a really simple check, the only requirement is that + // the subsciber has JavaScript turned on and thats it. If Mailtrain gets more targeted then this + // simple check should be replaced with an actual captcha let subTime = Number(req.body.sub) || 0; - let subTest = !!(subTime > Date.now() - 3600 * 1000 && subTime < Date.now() + 3600 * 1000); + // allow clock skew 24h in the past and 24h to the future + let subTimeTest = !!(subTime > Date.now() - 24 * 3600 * 1000 && subTime < Date.now() + 24 * 3600 * 1000); let addressTest = !req.body.address; - let testsPass = subTest && addressTest; + let testsPass = subTimeTest && addressTest; lists.getByCid(req.params.cid, (err, list) => { if (!err && !list) { diff --git a/views/subscription/confirm-notice.hbs b/views/subscription/confirm-notice.hbs index 8ef06ea6..06d4cb17 100644 --- a/views/subscription/confirm-notice.hbs +++ b/views/subscription/confirm-notice.hbs @@ -1,3 +1,11 @@ + + +

Almost finished.

We need to confirm your email address. To complete the subscription process, please click the link in the email we just sent you.

diff --git a/views/subscription/subscribe.hbs b/views/subscription/subscribe.hbs index 18f66d61..fc782eae 100644 --- a/views/subscription/subscribe.hbs +++ b/views/subscription/subscribe.hbs @@ -5,6 +5,14 @@ {{/if}} + + +
@@ -120,9 +128,12 @@ {{/each}} -
+ + diff --git a/views/partials/html-preview.hbs b/views/partials/html-preview.hbs new file mode 100644 index 00000000..938f2be4 --- /dev/null +++ b/views/partials/html-preview.hbs @@ -0,0 +1,14 @@ +
+
+ +
+
320x480px
+ +
+
+
diff --git a/views/partials/plaintext.hbs b/views/partials/plaintext.hbs new file mode 100644 index 00000000..ebb2fdb5 --- /dev/null +++ b/views/partials/plaintext.hbs @@ -0,0 +1,6 @@ +
+ +
+ +
+
diff --git a/views/partials/summernote.hbs b/views/partials/summernote.hbs new file mode 100644 index 00000000..317a6507 --- /dev/null +++ b/views/partials/summernote.hbs @@ -0,0 +1,6 @@ +
+ +
+ +
+
diff --git a/views/templates/create.hbs b/views/templates/create.hbs index bff536f5..71f567b7 100644 --- a/views/templates/create.hbs +++ b/views/templates/create.hbs @@ -19,72 +19,21 @@
-
- -
- -

- Merge tags are tags that are replaced before sending out the message. The format of the merge tag is the following: [TAG_NAME] or [TAG_NAME/fallback] where fallback is an optional text value used - when TAG_NAME is empty. -

- -
    -
  • - [EMAIL] – email address of the subscriber -
  • -
  • - [FIRST_NAME] – first name of the subscriber -
  • -
  • - [LAST_NAME] – last name of the subscriber -
  • -
  • - [FULL_NAME] – first and last names of the subscriber joined -
  • -
  • - [LINK_UNSUBSCRIBE] – URL that points to the preferences page of the subscriber -
  • -
  • - [LINK_PREFERENCES] – URL that points to the unsubscribe page -
  • -
  • - [LINK_BROWSER] – URL to preview the message in a browser -
  • -
  • - [SUBSCRIPTION_ID] – Unique ID that identifies the recipient -
  • -
  • - [LIST_ID] – Unique ID that identifies the list used for this campaign -
  • -
  • - [CAMPAIGN_ID] – Unique ID that identifies current campaign -
  • -
-

- In addition to that any custom field can have its own merge tag. -

-
+ +
+
-
- -
- - {{#if disableWysiwyg}} -
{{html}}
- - {{else}} - - {{/if}} - -
-
- -
- -
- +
+
+ +
@@ -102,5 +51,42 @@
- + +
+ {{#each editors}} + {{#if templates}} +
+ +
+ +
+
+ {{/if}} + {{/each}} + +
+ + +
+ +
+ + +
+
+ + diff --git a/views/templates/edit.hbs b/views/templates/edit.hbs index 86b8ce37..019ee274 100644 --- a/views/templates/edit.hbs +++ b/views/templates/edit.hbs @@ -72,24 +72,13 @@
-
- -
- {{#if disableWysiwyg}} -
{{html}}
- - {{else}} - - {{/if}} -
-
+ {{> plaintext}} -
- -
- -
-
+ {{#if disableWysiwyg}} + {{> codeeditor}} + {{else}} + {{> (lookup . 'editorName') }} + {{/if}}
From fa9a3de863e0ecc3f114834082acc9e77f58cdc4 Mon Sep 17 00:00:00 2001 From: witzig Date: Thu, 2 Mar 2017 21:53:07 +0100 Subject: [PATCH 152/483] Update editor-bridge.hbs --- views/partials/editor-bridge.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/partials/editor-bridge.hbs b/views/partials/editor-bridge.hbs index dd343879..3d65659f 100644 --- a/views/partials/editor-bridge.hbs +++ b/views/partials/editor-bridge.hbs @@ -46,7 +46,7 @@ .attr('src', '/{{editorName}}/editor?id={{id}}&type=' + type) .on('load', function() { editorWindow = $editorFrame[0].contentWindow; - editorWindow.bridge || (editorWindow.bridge = {}); + editorWindow.bridge = editorWindow.bridge || {}; editorWindow.bridge.exit = function() { closeEditor(); } From 9f191bd7da8e53112a74940f66f681f6ea541c6a Mon Sep 17 00:00:00 2001 From: witzig Date: Thu, 2 Mar 2017 22:49:28 +0100 Subject: [PATCH 153/483] Update archive.js Ups. --- routes/archive.js | 1 + 1 file changed, 1 insertion(+) diff --git a/routes/archive.js b/routes/archive.js index 758cf5c0..a4356462 100644 --- a/routes/archive.js +++ b/routes/archive.js @@ -62,6 +62,7 @@ router.get('/:campaign/:list/:subscription', passport.csrfProtection, (req, res, } let renderHtml = (html, renderTags) => { + campaign.editorName = campaign.editorName || 'summernote'; let sfx = ''; if (campaign.editorName !== 'summernote' && campaign.editorName !== 'codeeditor') { sfx = '-raw'; From ba8bd1212335cb9bd7ba094beb7b5400f35cae6c Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Sat, 4 Mar 2017 18:15:16 +0200 Subject: [PATCH 154/483] initial translations support --- Gruntfile.js | 16 ++++- README.md | 42 +++++++++++++ app.js | 23 +++++++ config/default.toml | 3 + languages/et.mo | Bin 0 -> 2531 bytes languages/et.po | 106 +++++++++++++++++++++++++++++++ languages/mailtrain.pot | 100 +++++++++++++++++++++++++++++ lib/mailer.js | 2 +- lib/translate.js | 35 +++++++++++ package.json | 32 ++++++---- routes/index.js | 3 +- routes/settings.js | 38 +++++------ setup/sql/mailtrain.sql | 10 ++- setup/sql/upgrade-00021.sql | 4 +- tasks/jsxgettext.js | 122 ++++++++++++++++++++++++++++++++++++ test/frontmail-test.js | 6 +- views/index.hbs | 2 +- views/layout.hbs | 2 +- 18 files changed, 503 insertions(+), 43 deletions(-) create mode 100644 languages/et.mo create mode 100644 languages/et.po create mode 100644 languages/mailtrain.pot create mode 100644 lib/translate.js create mode 100644 tasks/jsxgettext.js diff --git a/Gruntfile.js b/Gruntfile.js index 3dde0d9e..6ac983cc 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -10,13 +10,27 @@ module.exports = function (grunt) { nodeunit: { all: ['test/**/*-test.js'] + }, + + jsxgettext: { + test: { + files: [{ + src: ['views/**/*.hbs', 'lib/**/*.js', 'routes/**/*.js', 'services/**/*.js', 'app.js', 'index.js', '!ignored'], + output: 'mailtrain.pot', + 'output-dir': './languages/' + }], + options: { + keyword: ['translate', '_'] + } + } } }); // Load the plugin(s) grunt.loadNpmTasks('grunt-eslint'); grunt.loadNpmTasks('grunt-contrib-nodeunit'); + grunt.task.loadTasks('tasks'); // Tasks - grunt.registerTask('default', ['eslint', 'nodeunit']); + grunt.registerTask('default', ['eslint', 'nodeunit', 'jsxgettext']); }; diff --git a/README.md b/README.md index 5dcf4a30..c6fee354 100644 --- a/README.md +++ b/README.md @@ -178,6 +178,48 @@ node setup/fakedata.js > somefile.csv This command generates a CSV file with 100 000 subscriber accounts +## Translations + +Mailtrain is currently not translated but it supports translations. To add translations you first need to add translation support for the translatable strings + +### Translating JavaScript files + +To translate JavaScript strings you need to make sure that you have loaded the translating function `_` from *'./lib/translate.js'*. If you want to use variables in strings then you also need the *'util'* module. + +```javascript +const _ = require('./path/to/lib/translate')._; +const util = require('util'); // optional +``` + +All you need to do to translate strings is to enclose these in the `_()` function + +```javascript +let str1 = _('This string will be translated'); +let str2 = util.format( _('My name is "%s"'), 'Mailtrain'); +``` + +### Translating Handlebars files + +Enclose translatable strings to `{{#translate}}` tags + +```handlebars +

+ Mailtrain – {{#translate}}the best newsletter app{{/translate}} +

+``` + +### Managing translations + +Translations are loaded from Gettext MO files. In order to generate such files you need a Gettext translations editor. [POEdit](https://poedit.net/) is a great choice. + +To update the translation catalog ([mailtrain.pot](,/languages/mailtrain.pot)) run `grunt` from command line. This fetches all translatable strings from JavaScript and Handlebars files and merges these into the translation catalog + +To add a new language use this catalog file as source. Once you want to update your translation file from the updated catalog, then select "Catalogue" -> "Update from POT file..." in POEdit and select mailtrain.pot. This would merge all new translations from the POT file to your PO file. + +If you have saved the PO file in [./languages](./langauges) then POEdit should auto generate required MO file whenever you hit save for the PO file. + +Once you have a correct MO file in the languages folder, then edit Mailtrain config and set "language" option to your language name. If the value is "et" then Mailtrain loads translations from ./languages/et.mo + ## License * Versions 1.22.0 and up **GPL-V3.0** diff --git a/app.js b/app.js index 36525f50..52b94b1c 100644 --- a/app.js +++ b/app.js @@ -3,6 +3,9 @@ let config = require('config'); let log = require('npmlog'); +let translate = require('./lib/translate'); +let util = require('util'); + let express = require('express'); let bodyParser = require('body-parser'); let path = require('path'); @@ -93,6 +96,21 @@ hbs.registerHelper('flash_messages', function () { // eslint-disable-line prefer ); }); +// {{#translate}}abc{{/translate}} +hbs.registerHelper('translate', function (context, options) { // eslint-disable-line prefer-arrow-callback + if (typeof options === 'undefined' && context) { + options = context; + context = false; + } + + let result = translate._(options.fn(this)); // eslint-disable-line no-invalid-this + + if (Array.isArray(context)) { + result = util.format(result, ...context); + } + return new hbs.handlebars.SafeString(result); +}); + app.use(compression()); app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); @@ -118,6 +136,11 @@ app.use(session({ })); app.use(flash()); +app.use((req, res, next) => { + req._ = str => translate._(str); + next(); +}); + app.use(bodyParser.urlencoded({ extended: true, limit: config.www.postsize diff --git a/config/default.toml b/config/default.toml index aee1c248..c547295e 100644 --- a/config/default.toml +++ b/config/default.toml @@ -27,6 +27,9 @@ editors=[ ["codeeditor", "Code Editor"] ] +# Default language to use +language="en" + # If you start out as a root user (eg. if you want to use ports lower than 1000) # then you can downgrade the user once all services are up and running #user="nobody" diff --git a/languages/et.mo b/languages/et.mo new file mode 100644 index 0000000000000000000000000000000000000000..69f724059f00b75f61725972a28ba2d2589b7e1d GIT binary patch literal 2531 zcmb7EJ8xV?6rO~H!14~SB7jb!1O?%{>^ccCYgxi14zgm$R=f#NP|WU~-5u|}cdq7P zXAu=3DkKVoXb=U8#4m7X(cG2>2~i?Zra-_y;5)MqI}|~TH2dw$ojH&1J9BUnxuYd{g4`2yA^^g$H1HS;C0)7vC z5%?qUB=FbC{ypG4*2j+t(F864`TRDJfS*s+KLDS`x&l59`~`Rd_&bo}yazlBJaJrz zHN-dvT*P|xun=zn_kb6He*!-Qp2cPM^9is6{0_+Xk31s8dEl$SXMr0)=A;W`UOob{ zy>EaG;LpHUfJYx4^Klx;`P~3=ymEpT_!!oo0?z@z1TtTHK!h6yLW_gXv5n~frIAZe z6>UBTM7nV>2Rxp@dCKMAa1^59&Ux2G@>vJlI`4^-iGS9)y<>PelcbdI_M z)g4lB$`&$LB#V?v>D;cdY5m`K3gbz3yQ=hj6IXVWC3UA%UGHeCy?nFXUfUvXsH4~- z3|uiqfv@b)svhr6Jr0cX2Of>}_Z{{+S1Fm`>vSasI5NRfPg}Jsvkb1i*G1pWQK}sN zjZ-RNg|ws6nvU#bBkE+PJLE8~>XbNmtGY_>DC%3K*Z}3qIoVg#vnHP;^gmBidjOZY z?hiZ-WLc_$cEK}sCz->^pGmLc2qK9;#yRQ))_2; zYTcWNR~M_rj?9qM@_SpkDO_*iu=KxD;?+#RvoUlTl))wr#3F;)(iAC9F?}sMbIzT?w{aCvC{qaw;uZ*; zmSJ3gT@hSB$&8RlhDwBmp0Q&kF1~r`0begIT#m0{{*u_VW*c{t)ik+{s3A^^YBv@0 zn5?_LPLp>+-z9B>?ahsLas}+MgvnKe)uQ=E^K#O-kTfn*bD`B}yxy2^G;lDvsdhA5 zd*Hb>>3q^=-7@Kog^M*=^aH9kX)Bo@TDM5~+WPAH%0ZOPdZUIn$T}o#DBdEk?)W## z3@R+*?Mn;omu|JMB?|}V*jG>4WTohu6h+#ig^u>M_mg)OL>mXOX;i8`HR}uY=6r24 z3sz>yHDhzvqN0pTw=};<HCd)< zC|&S!TNY>ov@Ow*tTCBBxa&MAOe(fdsvlgPuFnEAxg;Mll~?=KzSSr$nJSG)e6^>F>Mnvsy?H|4 zi)~U*N)8jFL$6ZvAOh8RG(QnS9- zM0bx3X{XxrXy4+t?n_0P?(4F;TitbmKj^p}n~9#aqZEIc$xW?{_BbY$j z8^|G2prN+gfl2ha6q}HM3?z}{G$)PrG`^!eL6QN=2ofon;R8V|=gMb#h$Xkd*qAg| z8h0iQd5Tmb%xx4RUr`e#LP)h^#}J&X9LB1ewkeiRx@mX9iIhUX3AP}v$D*E9r=D&= h7cCA6$%=Y8bPDweO=GtP58SQ(`xJLA=7`X?{sC;F0ek=e literal 0 HcmV?d00001 diff --git a/languages/et.po b/languages/et.po new file mode 100644 index 00000000..5a82f24d --- /dev/null +++ b/languages/et.po @@ -0,0 +1,106 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-03-04 18:00+0200\n" +"PO-Revision-Date: 2017-03-04 18:00+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: et\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.12\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: views/index.hbs:1 +msgid "Official Mailtrain Partners" +msgstr "Ametlikud Mailtraini partnerid" + +#: views/layout.hbs:1 routes/index.js:11 +msgid "Self hosted email newsletter app" +msgstr "Enda majutatud e-posti uudiskirjade rakendus" + +#: routes/settings.js:23 +msgid "Need to be logged in to access restricted content" +msgstr "Pead olema sisse logitud, et näha peidetud sisu" + +#: routes/settings.js:39 +msgid "Use TLS" +msgstr "Kasuta TLSi" + +#: routes/settings.js:40 +msgid "usually selected for port 465" +msgstr "tavaliselt valitakse, kui port on 465" + +#: routes/settings.js:44 +msgid "Use STARTTLS" +msgstr "Kasuta STARTTLSi" + +#: routes/settings.js:45 +msgid "usually selected for port 587 and 25" +msgstr "tavaliselt valitakse, kui port on 587 või 25" + +#: routes/settings.js:49 +msgid "Do not use encryption" +msgstr "Ära kasuta ühenduse krüpteerimist" + +#: routes/settings.js:115 +msgid "Settings updated" +msgstr "Seaded uuendatud" + +#: routes/settings.js:173 +msgid "Invalid mail transport type" +msgstr "Viga maili transpordi tüüp" + +#: routes/settings.js:184 +msgid "Invalid Access Key" +msgstr "Vigae ligipääsuvõti" + +#: routes/settings.js:187 +msgid "Invalid AWS credentials" +msgstr "VIgased AWS võtmed" + +#: routes/settings.js:190 +msgid "Connection refused, check hostname and port." +msgstr "Ühendusest keelduti, kontrolli domeeninime ja porti" + +#: routes/settings.js:195 +msgid "" +"Did not receive greeting message from server. This might happen when " +"connecting to a TLS port without using TLS." +msgstr "" +"Ei saanud serverilt vastust, see juhtub tavaliselt kui ühendus TLS " +"serverisse ilma TLS kasutamata" + +#: routes/settings.js:197 +msgid "Did not receive greeting message from server." +msgstr "Ei saanud serverilt vastust" + +#: routes/settings.js:200 +msgid "" +"Connection timed out. Check your firewall settings, destination port is " +"probably blocked." +msgstr "" +"Ühendus aegus. Kontrolli oma tulemüüri seadeid, tõenäoliselt on serveir port " +"blokeeritud" + +#: routes/settings.js:205 +msgid "Authentication not accepted, server expects STARTTLS to be used." +msgstr "Autentimist ei lubatud, server nõuab STARTTLS kasutamist" + +#: routes/settings.js:207 +msgid "Authentication failed, check username and password." +msgstr "Autentimine ebaõnnestus, kontrolli kasutajanime ja parooli" + +#: routes/settings.js:217 +msgid "Failed Mailer verification." +msgstr "E-posti seadistuse kontroll ebaõnnestus" + +#: routes/settings.js:217 +msgid "Server responded with: \"%s\"" +msgstr "Server vastas \"%s\"" + +#: routes/settings.js:221 +msgid "Mailer settings verified, ready to send some mail!" +msgstr "E-posti seaded on kontrollitud, võid hakata kirju saatma" diff --git a/languages/mailtrain.pot b/languages/mailtrain.pot new file mode 100644 index 00000000..9d882c15 --- /dev/null +++ b/languages/mailtrain.pot @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Language-Team: LANGUAGE \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2017-03-04 16:00+0000\n" + +#: views/index.hbs:1 +msgid "Official Mailtrain Partners" +msgstr "" + +#: views/layout.hbs:1 +#: routes/index.js:11 +msgid "Self hosted email newsletter app" +msgstr "" + +#: routes/settings.js:23 +msgid "Need to be logged in to access restricted content" +msgstr "" + +#: routes/settings.js:39 +msgid "Use TLS" +msgstr "" + +#: routes/settings.js:40 +msgid "usually selected for port 465" +msgstr "" + +#: routes/settings.js:44 +msgid "Use STARTTLS" +msgstr "" + +#: routes/settings.js:45 +msgid "usually selected for port 587 and 25" +msgstr "" + +#: routes/settings.js:49 +msgid "Do not use encryption" +msgstr "" + +#: routes/settings.js:115 +msgid "Settings updated" +msgstr "" + +#: routes/settings.js:173 +msgid "Invalid mail transport type" +msgstr "" + +#: routes/settings.js:184 +msgid "Invalid Access Key" +msgstr "" + +#: routes/settings.js:187 +msgid "Invalid AWS credentials" +msgstr "" + +#: routes/settings.js:190 +msgid "Connection refused, check hostname and port." +msgstr "" + +#: routes/settings.js:195 +msgid "" +"Did not receive greeting message from server. This might happen when " +"connecting to a TLS port without using TLS." +msgstr "" + +#: routes/settings.js:197 +msgid "Did not receive greeting message from server." +msgstr "" + +#: routes/settings.js:200 +msgid "" +"Connection timed out. Check your firewall settings, destination port is " +"probably blocked." +msgstr "" + +#: routes/settings.js:205 +msgid "Authentication not accepted, server expects STARTTLS to be used." +msgstr "" + +#: routes/settings.js:207 +msgid "Authentication failed, check username and password." +msgstr "" + +#: routes/settings.js:217 +msgid "Failed Mailer verification." +msgstr "" + +#: routes/settings.js:217 +msgid "Server responded with: \"%s\"" +msgstr "" + +#: routes/settings.js:221 +msgid "Mailer settings verified, ready to send some mail!" +msgstr "" \ No newline at end of file diff --git a/lib/mailer.js b/lib/mailer.js index 1a8e24ae..9f0f695b 100644 --- a/lib/mailer.js +++ b/lib/mailer.js @@ -148,7 +148,7 @@ function createMailer(callback) { let level = args.shift(); args.shift(); args.unshift('Mail'); - log[level].apply(log, args); + log[level](...args); }; if (configItems.mailTransport === 'smtp' || !configItems.mailTransport) { diff --git a/lib/translate.js b/lib/translate.js new file mode 100644 index 00000000..c6f44995 --- /dev/null +++ b/lib/translate.js @@ -0,0 +1,35 @@ +'use strict'; + +const config = require('config'); + +const Gettext = require('node-gettext'); +const gt = new Gettext(); +const fs = require('fs'); +const path = require('path'); +const log = require('npmlog'); +const gettextParser = require('gettext-parser'); + +const language = config.language || 'en'; + +[].concat(config.language || []).forEach(lang => { + let data; + let file = path.join(__dirname, '..', 'languages', lang + '.mo'); + try { + data = gettextParser.mo.parse(fs.readFileSync(file)); + } catch (E) { + // ignore + } + if (data) { + gt.addTranslations(lang, lang, data); + gt.setTextDomain(lang); + gt.setLocale(lang); + log.info('LANG', 'Loaded language file for %s', lang); + } +}); + +module.exports._ = str => { + if (typeof str !== 'string') { + str = String(str); + } + return gt.dgettext(language, str); +}; diff --git a/package.json b/package.json index 48740848..5ca1eca7 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,10 @@ "sqlinit": "node setup/sql/init.js", "sqldump": "node setup/sql/dump.js | sed -e '/^\\/\\*.*\\*\\/;$/d' -e 's/.[0-9]\\{4\\}-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]./NOW()/g' > setup/sql/mailtrain.sql", "sqldrop": "node setup/sql/drop.js", - "sqlgen": "npm run sqldrop && DB_FROM_START=Y npm run sqlinit && npm run sqldump" + "sqlgen": "npm run sqldrop && DB_FROM_START=Y npm run sqlinit && npm run sqldump", + "langs:hbs": "jsxgettext -L handlebars -k translate -o langs/hbs.pot views/layout.hbs views/index.hbs", + "langs:js": "jsxgettext -o languages/js.pot routes/index.js", + "langs": "npm run langs:hbs && npm run langs:js" }, "repository": { "type": "git", @@ -23,15 +26,17 @@ "node": ">=5.0.0" }, "devDependencies": { + "gettext-parser": "^1.2.2", "grunt": "^1.0.1", "grunt-cli": "^1.2.0", "grunt-contrib-nodeunit": "^1.0.0", - "grunt-eslint": "^19.0.0" + "grunt-eslint": "^19.0.0", + "jsxgettext-andris": "^0.9.0-patch.1" }, "dependencies": { - "aws-sdk": "^2.15.0", + "aws-sdk": "^2.22.0", "bcrypt-nodejs": "0.0.3", - "body-parser": "^1.16.1", + "body-parser": "^1.17.0", "bounce-handler": "^7.3.2-fork.2", "compression": "^1.6.2", "config": "^1.25.1", @@ -42,15 +47,15 @@ "csv-generate": "^1.0.0", "csv-parse": "^1.2.0", "escape-html": "^1.0.3", - "express": "^4.14.1", + "express": "^4.15.0", "express-session": "^1.15.1", - "faker": "^3.1.0", + "faker": "^4.1.0", "feedparser": "^2.1.0", - "geoip-ultralight": "^0.1.4", + "geoip-ultralight": "^0.1.5", "handlebars": "^4.0.6", "hbs": "^4.0.1", "he": "^1.1.1", - "html-to-text": "^3.1.0", + "html-to-text": "^3.2.0", "humanize": "0.0.9", "is-url": "^1.2.2", "isemail": "^2.2.1", @@ -63,20 +68,21 @@ "morgan": "^1.8.1", "multer": "^1.3.0", "mysql": "^2.13.0", - "nodemailer": "^3.1.3", + "nodemailer": "^3.1.4", "nodemailer-openpgp": "^1.0.2", "npmlog": "^4.0.2", - "openpgp": "^2.3.7", + "openpgp": "^2.3.8", "passport": "^0.3.2", "passport-local": "^1.0.0", "redfour": "^1.0.0", "redis": "^2.6.5", - "request": "^2.79.0", - "serve-favicon": "^2.3.2", + "request": "^2.80.0", + "serve-favicon": "^2.4.1", "shortid": "^2.2.6", "slugify": "^1.1.0", "smtp-server": "^2.0.2", "striptags": "^3.0.1", - "toml": "^2.3.1" + "toml": "^2.3.2", + "node-gettext": "^2.0.0-rc.0" } } diff --git a/routes/index.js b/routes/index.js index 61b78dd2..bf995165 100644 --- a/routes/index.js +++ b/routes/index.js @@ -2,12 +2,13 @@ let express = require('express'); let router = new express.Router(); +let _ = require('../lib/translate')._; /* GET home page. */ router.get('/', (req, res) => { res.render('index', { indexPage: true, - title: 'Self hosted email newsletter app' + title: _('Self hosted email newsletter app') }); }); diff --git a/routes/settings.js b/routes/settings.js index 5dab5aa9..6ac92446 100644 --- a/routes/settings.js +++ b/routes/settings.js @@ -11,6 +11,8 @@ let url = require('url'); let multer = require('multer'); let upload = multer(); let aws = require('aws-sdk'); +let util = require('util'); +let _ = require('../lib/translate')._; let settings = require('../lib/models/settings'); @@ -18,7 +20,7 @@ let allowedKeys = ['service_url', 'smtp_hostname', 'smtp_port', 'smtp_encryption router.all('/*', (req, res, next) => { if (!req.user) { - req.flash('danger', 'Need to be logged in to access restricted content'); + req.flash('danger', _('Need to be logged in to access restricted content')); return res.redirect('/users/login?next=' + encodeURIComponent(req.originalUrl)); } res.setSelectedMenu('/settings'); @@ -34,17 +36,17 @@ router.get('/', passport.csrfProtection, (req, res, next) => { configItems.smtpEncryption = [{ checked: configItems.smtpEncryption === 'TLS' || !configItems.smtpEncryption, key: 'TLS', - value: 'Use TLS', - description: 'usually selected for port 465' + value: _('Use TLS'), + description: _('usually selected for port 465') }, { checked: configItems.smtpEncryption === 'STARTTLS', key: 'STARTTLS', - value: 'Use STARTTLS', - description: 'usually selected for port 587 and 25' + value: _('Use STARTTLS'), + description: _('usually selected for port 587 and 25') }, { checked: configItems.smtpEncryption === 'NONE', key: 'NONE', - value: 'Do not use encryption' + value: _('Do not use encryption') }]; configItems.sesRegion = [{ @@ -110,7 +112,7 @@ router.post('/update', passport.parseForm, passport.csrfProtection, (req, res) = reload: true }); }); - req.flash('success', 'Settings updated'); + req.flash('success', _('Settings updated')); return res.redirect('/settings'); } let key = keys[i]; @@ -168,7 +170,7 @@ router.post('/smtp-verify', upload.array(), passport.parseForm, passport.csrfPro }; } else { return res.json({ - error: 'Invalid mail transport type' + error: _('Invalid mail transport type') }); } @@ -179,30 +181,30 @@ router.post('/smtp-verify', upload.array(), passport.parseForm, passport.csrfPro let message = ''; switch (err.code) { case 'InvalidClientTokenId': - message = 'Invalid Access Key'; + message = _('Invalid Access Key'); break; case 'SignatureDoesNotMatch': - message = 'Invalid AWS credentials'; + message = _('Invalid AWS credentials'); break; case 'ECONNREFUSED': - message = 'Connection refused, check hostname and port.'; + message = _('Connection refused, check hostname and port.'); break; case 'ETIMEDOUT': if ((err.message || '').indexOf('Greeting never received') === 0) { if (data.smtpEncryption !== 'TLS') { - message = 'Did not receive greeting message from server. This might happen when connecting to a TLS port without using TLS.'; + message = _('Did not receive greeting message from server. This might happen when connecting to a TLS port without using TLS.'); } else { - message = 'Did not receive greeting message from server.'; + message = _('Did not receive greeting message from server.'); } } else { - message = 'Connection timed out. Check your firewall settings, destination port is probably blocked.'; + message = _('Connection timed out. Check your firewall settings, destination port is probably blocked.'); } break; case 'EAUTH': if (/\b5\.7\.0\b/.test(err.message) && data.smtpEncryption !== 'STARTTLS') { - message = 'Authentication not accepted, server expects STARTTLS to be used.'; + message = _('Authentication not accepted, server expects STARTTLS to be used.'); } else { - message = 'Authentication failed, check username and password.'; + message = _('Authentication failed, check username and password.'); } break; @@ -212,11 +214,11 @@ router.post('/smtp-verify', upload.array(), passport.parseForm, passport.csrfPro } res.json({ - error: (message || 'Failed Mailer verification.') + (err.response ? ' Server responded with: "' + err.response + '"' : '') + error: (message || _('Failed Mailer verification.')) + (err.response ? ' ' + util.format(_('Server responded with: "%s"'), err.response) : '') }); } else { res.json({ - message: 'Mailer settings verified, ready to send some mail!' + message: _('Mailer settings verified, ready to send some mail!') }); } }); diff --git a/setup/sql/mailtrain.sql b/setup/sql/mailtrain.sql index 70364321..5408c5e2 100644 --- a/setup/sql/mailtrain.sql +++ b/setup/sql/mailtrain.sql @@ -52,6 +52,8 @@ CREATE TABLE `campaigns` ( `segment` int(11) unsigned DEFAULT NULL, `template` int(11) unsigned NOT NULL, `source_url` varchar(255) CHARACTER SET ascii DEFAULT NULL, + `editor_name` varchar(50) DEFAULT '', + `editor_data` longtext, `last_check` timestamp NULL DEFAULT NULL, `check_status` varchar(255) DEFAULT NULL, `from` varchar(255) DEFAULT '', @@ -201,7 +203,7 @@ CREATE TABLE `segments` ( `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `list` (`list`), - KEY `name` (`name`(191)), + KEY `name` (`name`), CONSTRAINT `segments_ibfk_1` FOREIGN KEY (`list`) REFERENCES `lists` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `settings` ( @@ -210,7 +212,7 @@ CREATE TABLE `settings` ( `value` text NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key` (`key`) -) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4; INSERT INTO `settings` (`id`, `key`, `value`) VALUES (1,'smtp_hostname','smtp-pulse.com'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (2,'smtp_port','465'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (3,'smtp_encryption','TLS'); @@ -227,7 +229,7 @@ INSERT INTO `settings` (`id`, `key`, `value`) VALUES (13,'default_from','My Awes INSERT INTO `settings` (`id`, `key`, `value`) VALUES (14,'default_address','admin@example.com'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (15,'default_subject','Test message'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (16,'default_homepage','http://localhost:3000/'); -INSERT INTO `settings` (`id`, `key`, `value`) VALUES (17,'db_schema_version','20'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (17,'db_schema_version','21'); CREATE TABLE `subscription` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL, @@ -260,6 +262,8 @@ CREATE TABLE `templates` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL DEFAULT '', `description` text, + `editor_name` varchar(50) DEFAULT '', + `editor_data` longtext, `html` longtext, `text` longtext, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, diff --git a/setup/sql/upgrade-00021.sql b/setup/sql/upgrade-00021.sql index ca3a85ec..e3c54a48 100644 --- a/setup/sql/upgrade-00021.sql +++ b/setup/sql/upgrade-00021.sql @@ -4,11 +4,11 @@ SET @schema_version = '21'; # Add fields editor_name, editor_data to templates ALTER TABLE `templates` ADD COLUMN `editor_name` varchar(50) DEFAULT '' AFTER `description`; -ALTER TABLE `templates` ADD COLUMN `editor_data` longtext DEFAULT '' AFTER `editor_name`; +ALTER TABLE `templates` ADD COLUMN `editor_data` longtext AFTER `editor_name`; # Add fields editor_name, editor_data to campaigns ALTER TABLE `campaigns` ADD COLUMN `editor_name` varchar(50) DEFAULT '' AFTER `source_url`; -ALTER TABLE `campaigns` ADD COLUMN `editor_data` longtext DEFAULT '' AFTER `editor_name`; +ALTER TABLE `campaigns` ADD COLUMN `editor_data` longtext AFTER `editor_name`; # Footer section LOCK TABLES `settings` WRITE; diff --git a/tasks/jsxgettext.js b/tasks/jsxgettext.js new file mode 100644 index 00000000..996f2c0f --- /dev/null +++ b/tasks/jsxgettext.js @@ -0,0 +1,122 @@ +/* +Original from https://raw.githubusercontent.com/Mindflash/grunt-jsxgettext/master/lib/index.js +License: ISC +*/ + +/* eslint-disable */ + +'use strict'; +let _ = require('lodash'); +let path = require('path'); +let util = require('util'); +let jsxgettext = require('jsxgettext-andris'); +let fs = require('fs'); +let async = require('async'); + +/* + options: { + files: ['file-path','file-path'], + + jsxgettext options + } + */ +let task = function (grunt, options, cb) { + var generators = { + '.ejs': jsxgettext.generateFromEJS, + '.hbs': jsxgettext.generateFromHandlebars, + '.jade': jsxgettext.generateFromJade, + '.swig': jsxgettext.generateFromSwig + }; + + // dynamically update generators mapping + if (options.generators) { + if (!Array.isArray(options.generators)) { + options.generators = [options.generators]; + } + + options.generators.forEach(elem => { + // elem.generator can be either a string or a generator method (i.e. own generator or import from jsxgettext) + if (typeof elem.generator === 'string' || elem.generator instanceof String) { + // elem.generator can be an extension, which is used to remap predefined generators to different extensions + // or elem.generator is the name of an generator method implemented in jsxgettext + if (elem.generator.match(/^\..*/)) { + generators[elem.ext] = generators[elem.generator]; + } else { + generators[elem.ext] = jsxgettext[elem.generator]; + } + } else { + generators[elem.ext] = elem.generator; + } + }); + } + + var files = {}; + var dest = options.dest; + + if (!fs.existsSync(path.dirname(dest))) + return cb(util.format("Destination directory %s does not exist.", dest)); + + options.files.filter(file => grunt.file.exists(file)).forEach(file => { + var ext = path.extname(file); + var content = grunt.file.read(file, { + encoding: 'utf-8' + }); + + // pre-process non js files for use by jsxgettext.generate + if (ext !== '.js') { + var args = {}; + args[file] = content; + files = _.assign(files, generators[ext](args, options).shift()); + return; + } + + files[file] = content; + }); + + if (_.isEmpty(files)) + return cb("No valid input files found, received: " + util.inspect(options.files, { + depth: null + })); + + cb(null, jsxgettext.generate(files, options)); +}; + +function unary(fn) { + if (fn.length === 1) return fn; + return function (args) { + return fn.call(this, args); + }; +} + +module.exports = function (grunt) { + grunt.registerMultiTask('jsxgettext', 'A Grunt task to run jsxgettext against files to extract strings into a POT file.', function () { + var self = this; + var done = self.async(); + + async.forEach(self.files, function (fileSet, eCb) { + var dest; + if (typeof fileSet.dest !== 'undefined' && fileSet.dest) { + dest = fileSet.dest; + } else { + dest = path.join(fileSet['output-dir'] || '', fileSet.output); + } + + var options = _.defaults(self.options(), { + files: fileSet.src, + dest: dest, + 'output-dir': fileSet['output-dir'], + output: fileSet['output'] + }); + task(grunt, options, function (err, res) { + + if (err) return eCb(err); + + grunt.file.write(dest, res); + eCb(); + }); + }, err => { + if (err) grunt.fatal(err); + done(); + }); + + }); +}; diff --git a/test/frontmail-test.js b/test/frontmail-test.js index e7e08d29..54221359 100644 --- a/test/frontmail-test.js +++ b/test/frontmail-test.js @@ -4,7 +4,9 @@ let nodemailer = require('nodemailer'); // This is a dummy test to ensure that nodeunit would not fail on 0 assertions module.exports['Load nodemailer'] = function (test) { - let transport = nodemailer.createTransport(); - test.ok(transport._getVersionString()); + let transport = nodemailer.createTransport({ + streamTransport: true + }); + test.ok(transport); test.done(); }; diff --git a/views/index.hbs b/views/index.hbs index 97dcb74b..6c67c28f 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -1,6 +1,6 @@
-

Official Mailtrain Partners

+

{{#translate}}Official Mailtrain Partners{{/translate}}

diff --git a/views/layout.hbs b/views/layout.hbs index 214892eb..91b4b9a5 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -6,7 +6,7 @@ - + From 3232d01b39a9134867af94bcde2dca4a920bf7e3 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Sat, 4 Mar 2017 18:20:32 +0200 Subject: [PATCH 155/483] updated readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c6fee354..9a7da569 100644 --- a/README.md +++ b/README.md @@ -220,6 +220,8 @@ If you have saved the PO file in [./languages](./langauges) then POEdit should a Once you have a correct MO file in the languages folder, then edit Mailtrain config and set "language" option to your language name. If the value is "et" then Mailtrain loads translations from ./languages/et.mo +> **NB!** For now translation settings are global, so if you have set a translation in config then this applies to all users. An user can't select another translation than the default even if there is a translation file. This is because current Mailtrain code does not provide request context to functions and the functions generating strings do not know which language to use. + ## License * Versions 1.22.0 and up **GPL-V3.0** From f5ee05c55e146b72233c7f0dfd346637c10ed867 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Sat, 4 Mar 2017 18:21:41 +0200 Subject: [PATCH 156/483] updated readme --- README.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 9a7da569..f27b067c 100644 --- a/README.md +++ b/README.md @@ -210,15 +210,11 @@ Enclose translatable strings to `{{#translate}}` tags ### Managing translations -Translations are loaded from Gettext MO files. In order to generate such files you need a Gettext translations editor. [POEdit](https://poedit.net/) is a great choice. - -To update the translation catalog ([mailtrain.pot](,/languages/mailtrain.pot)) run `grunt` from command line. This fetches all translatable strings from JavaScript and Handlebars files and merges these into the translation catalog - -To add a new language use this catalog file as source. Once you want to update your translation file from the updated catalog, then select "Catalogue" -> "Update from POT file..." in POEdit and select mailtrain.pot. This would merge all new translations from the POT file to your PO file. - -If you have saved the PO file in [./languages](./langauges) then POEdit should auto generate required MO file whenever you hit save for the PO file. - -Once you have a correct MO file in the languages folder, then edit Mailtrain config and set "language" option to your language name. If the value is "et" then Mailtrain loads translations from ./languages/et.mo +* Translations are loaded from Gettext MO files. In order to generate such files you need a Gettext translations editor. [POEdit](https://poedit.net/) is a great choice. +* To update the translation catalog ([mailtrain.pot](,/languages/mailtrain.pot)) run `grunt` from command line. This fetches all translatable strings from JavaScript and Handlebars files and merges these into the translation catalog +* To add a new language use this catalog file as source. Once you want to update your translation file from the updated catalog, then select "Catalogue" -> "Update from POT file..." in POEdit and select mailtrain.pot. This would merge all new translations from the POT file to your PO file. + *If you have saved the PO file in [./languages](./langauges) then POEdit should auto generate required MO file whenever you hit save for the PO file. +* Once you have a correct MO file in the languages folder, then edit Mailtrain config and set ["language" option](https://github.com/andris9/mailtrain/blob/ba8bd1212335cb9bd7ba094beb7b5400f35cae6c/config/default.toml#L30-L31) to your language name. If the value is "et" then Mailtrain loads translations from ./languages/et.mo > **NB!** For now translation settings are global, so if you have set a translation in config then this applies to all users. An user can't select another translation than the default even if there is a translation file. This is because current Mailtrain code does not provide request context to functions and the functions generating strings do not know which language to use. From ae297e4af63b8fb78c2f2ad6ec52ca208caac3d3 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Sat, 4 Mar 2017 18:22:47 +0200 Subject: [PATCH 157/483] updated readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f27b067c..77c29807 100644 --- a/README.md +++ b/README.md @@ -211,9 +211,9 @@ Enclose translatable strings to `{{#translate}}` tags ### Managing translations * Translations are loaded from Gettext MO files. In order to generate such files you need a Gettext translations editor. [POEdit](https://poedit.net/) is a great choice. -* To update the translation catalog ([mailtrain.pot](,/languages/mailtrain.pot)) run `grunt` from command line. This fetches all translatable strings from JavaScript and Handlebars files and merges these into the translation catalog +* To update the translation catalog ([mailtrain.pot](./languages/mailtrain.pot)) run `grunt` from command line. This fetches all translatable strings from JavaScript and Handlebars files and merges these into the translation catalog * To add a new language use this catalog file as source. Once you want to update your translation file from the updated catalog, then select "Catalogue" -> "Update from POT file..." in POEdit and select mailtrain.pot. This would merge all new translations from the POT file to your PO file. - *If you have saved the PO file in [./languages](./langauges) then POEdit should auto generate required MO file whenever you hit save for the PO file. + *If you have saved the PO file in [./languages](./languages) then POEdit should auto generate required MO file whenever you hit save for the PO file. * Once you have a correct MO file in the languages folder, then edit Mailtrain config and set ["language" option](https://github.com/andris9/mailtrain/blob/ba8bd1212335cb9bd7ba094beb7b5400f35cae6c/config/default.toml#L30-L31) to your language name. If the value is "et" then Mailtrain loads translations from ./languages/et.mo > **NB!** For now translation settings are global, so if you have set a translation in config then this applies to all users. An user can't select another translation than the default even if there is a translation file. This is because current Mailtrain code does not provide request context to functions and the functions generating strings do not know which language to use. From 633463108e4ecd39d28c0e2ee5dfbfac567af238 Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 4 Mar 2017 18:37:41 +0100 Subject: [PATCH 158/483] Merge tag reference abstraction/partial MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Perhaps helpers.js would be a more suitable place for getDefaultMergeTags() and getListMergeTags() … ? --- lib/tools.js | 72 +++++++++++++++++++++++ routes/campaigns.js | 81 +++++--------------------- routes/templates.js | 21 +++++-- views/campaigns/edit-rss.hbs | 46 +-------------- views/campaigns/edit-triggered.hbs | 38 +----------- views/campaigns/edit.hbs | 38 +----------- views/partials/merge-tag-reference.hbs | 43 ++++++++++++++ views/templates/edit.hbs | 48 +-------------- 8 files changed, 149 insertions(+), 238 deletions(-) create mode 100644 views/partials/merge-tag-reference.hbs diff --git a/lib/tools.js b/lib/tools.js index 41c8b782..b1aecb72 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -20,6 +20,8 @@ module.exports = { formatMessage, getMessageLinks, prepareHtml, + getDefaultMergeTags, + getListMergeTags, workers: new Set() }; @@ -222,3 +224,73 @@ function prepareHtml(html, callback) { return callback(null, juice(preparedHtml)); }); } + +function getDefaultMergeTags(callback) { + // Using a callback for the sake of future-proofness + callback(null, [ + { + key: 'LINK_UNSUBSCRIBE', + value: 'URL that points to the unsubscribe page' + }, { + key: 'LINK_PREFERENCES', + value: 'URL that points to the preferences page of the subscriber' + }, { + key: 'LINK_BROWSER', + value: 'URL to preview the message in a browser' + }, { + key: 'EMAIL', + value: 'Email address' + }, { + key: 'FIRST_NAME', + value: 'First name' + }, { + key: 'LAST_NAME', + value: 'Last name' + }, { + key: 'FULL_NAME', + value: 'Full name (first and last name combined)' + }, { + key: 'SUBSCRIPTION_ID', + value: 'Unique ID that identifies the recipient' + }, { + key: 'LIST_ID', + value: 'Unique ID that identifies the list used for this campaign' + }, { + key: 'CAMPAIGN_ID', + value: 'Unique ID that identifies current campaign' + } + ]); +} + +function getListMergeTags(listId, callback) { + let lists = require('./models/lists'); + let fields = require('./models/fields'); + + lists.get(listId, (err, list) => { + if (err) { + return callback(err); + } + if (!list) { + list = { + id: listId + }; + } + + fields.list(list.id, (err, fieldList) => { + if (err && !fieldList) { + fieldList = []; + } + + let mergeTags = []; + + fieldList.forEach(field => { + mergeTags.push({ + key: field.key, + value: field.name + }); + }); + + return callback(null, mergeTags); + }); + }); +} diff --git a/routes/campaigns.js b/routes/campaigns.js index e5d715a9..4a653cf6 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -184,76 +184,25 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { view = 'campaigns/edit'; } - let getList = (listId, callback) => { - lists.get(listId, (err, list) => { - if (err) { - return callback(err); - } - if (!list) { - list = { - id: listId - }; - } - - fields.list(list.id, (err, fieldList) => { - if (err && !fieldList) { - fieldList = []; - } - - let mergeTags = [ - // keep indentation - { - key: 'LINK_UNSUBSCRIBE', - value: 'URL that points to the preferences page of the subscriber' - }, { - key: 'LINK_PREFERENCES', - value: 'URL that points to the unsubscribe page' - }, { - key: 'LINK_BROWSER', - value: 'URL to preview the message in a browser' - }, { - key: 'EMAIL', - value: 'Email address' - }, { - key: 'FIRST_NAME', - value: 'First name' - }, { - key: 'LAST_NAME', - value: 'Last name' - }, { - key: 'FULL_NAME', - value: 'Full name (first and last name combined)' - }, { - key: 'SUBSCRIPTION_ID', - value: 'Unique ID that identifies the recipient' - }, { - key: 'LIST_ID', - value: 'Unique ID that identifies the list used for this campaign' - }, { - key: 'CAMPAIGN_ID', - value: 'Unique ID that identifies current campaign' - } - ]; - - fieldList.forEach(field => { - mergeTags.push({ - key: field.key, - value: field.name - }); - }); - - return callback(null, list, mergeTags); - }); - }); - }; - - getList(campaign.list, (err, list, mergeTags) => { + tools.getDefaultMergeTags((err, defaultMergeTags) => { if (err) { req.flash('danger', err.message || err); return res.redirect('/'); } - campaign.mergeTags = mergeTags; - res.render(view, campaign); + + tools.getListMergeTags(campaign.list, (err, listMergeTags) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/'); + } + + campaign.mergeTags = defaultMergeTags.concat(listMergeTags); + campaign.type === 2 && campaign.mergeTags.push({ + key: 'RSS_ENTRY', + value: 'content from an RSS entry' + }); + res.render(view, campaign); + }); }); }); }); diff --git a/routes/templates.js b/routes/templates.js index 576d446a..778f4cb4 100644 --- a/routes/templates.js +++ b/routes/templates.js @@ -111,12 +111,21 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { if (err) { return next(err); } - template.csrfToken = req.csrfToken(); - template.useEditor = true; - template.editorName = template.editorName || 'summernote'; - template.editorConfig = config[template.editorName]; - template.disableWysiwyg = configItems.disableWysiwyg; - res.render('templates/edit', template); + + tools.getDefaultMergeTags((err, defaultMergeTags) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/templates'); + } + + template.mergeTags = defaultMergeTags; + template.csrfToken = req.csrfToken(); + template.useEditor = true; + template.editorName = template.editorName || 'summernote'; + template.editorConfig = config[template.editorName]; + template.disableWysiwyg = configItems.disableWysiwyg; + res.render('templates/edit', template); + }); }); }); }); diff --git a/views/campaigns/edit-rss.hbs b/views/campaigns/edit-rss.hbs index 466fb021..c8efcc2b 100644 --- a/views/campaigns/edit-rss.hbs +++ b/views/campaigns/edit-rss.hbs @@ -71,51 +71,7 @@
-
-
- -
-

- Merge tags are tags that are replaced before sending out the message. The format of the merge tag is the following: [TAG_NAME] or [TAG_NAME/fallback] where fallback is an optional text value - used when TAG_NAME is empty. -

- - - - - - - - - - - - - - - {{#each mergeTags}} - - - - - {{/each}} - -
- Merge tag - - Description -
- [RSS_ENTRY] - - content from an RSS entry -
- [{{key}}] - - {{value}} -
-
-
-
+ {{> merge_tag_reference}}
diff --git a/views/campaigns/edit-triggered.hbs b/views/campaigns/edit-triggered.hbs index b4e575db..3cdeec96 100644 --- a/views/campaigns/edit-triggered.hbs +++ b/views/campaigns/edit-triggered.hbs @@ -129,43 +129,7 @@
{{else}} - -
-
- -
-

- Merge tags are tags that are replaced before sending out the message. The format of the merge tag is the following: [TAG_NAME] or [TAG_NAME/fallback] where fallback is an optional - text value used when TAG_NAME is empty. -

- - - - - - - - - - {{#each mergeTags}} - - - - - {{/each}} - -
- Merge tag - - Description -
- [{{key}}] - - {{value}} -
-
-
-
+ {{> merge_tag_reference}} {{> plaintext}} diff --git a/views/campaigns/edit.hbs b/views/campaigns/edit.hbs index b4df6a0d..3b747608 100644 --- a/views/campaigns/edit.hbs +++ b/views/campaigns/edit.hbs @@ -145,43 +145,7 @@
{{else}} - -
-
- -
-

- Merge tags are tags that are replaced before sending out the message. The format of the merge tag is the following: [TAG_NAME] or [TAG_NAME/fallback] where fallback is an optional - text value used when TAG_NAME is empty. -

- - - - - - - - - - {{#each mergeTags}} - - - - - {{/each}} - -
- Merge tag - - Description -
- [{{key}}] - - {{value}} -
-
-
-
+ {{> merge_tag_reference}} {{> plaintext}} diff --git a/views/partials/merge-tag-reference.hbs b/views/partials/merge-tag-reference.hbs new file mode 100644 index 00000000..392d12c4 --- /dev/null +++ b/views/partials/merge-tag-reference.hbs @@ -0,0 +1,43 @@ +{{#if mergeTags}} +
+
+ +
+

+ Merge tags are tags that are replaced before sending out the message. The format of the merge tag is the following: [TAG_NAME] or [TAG_NAME/fallback] where fallback is an optional text value + used when TAG_NAME is empty. +

+ + + + + + + + + + {{#each mergeTags}} + + + + + {{/each}} + +
+ Merge tag + + Description +
+ [{{key}}] + + {{value}} +
+ + {{#if mergeTagReferenceFooterText}} +

{{mergeTagReferenceFooterText}}

+ {{/if}} + +
+
+
+{{/if}} diff --git a/views/templates/edit.hbs b/views/templates/edit.hbs index 019ee274..ad4677a8 100644 --- a/views/templates/edit.hbs +++ b/views/templates/edit.hbs @@ -24,53 +24,7 @@
-
-
- -
-

- Merge tags are tags that are replaced before sending out the message. The format of the merge tag is the following: [TAG_NAME] or [TAG_NAME/fallback] where fallback is an optional text value used - when TAG_NAME is empty. -

- -
    -
  • - [EMAIL] – email address of the subscriber -
  • -
  • - [FIRST_NAME] – first name of the subscriber -
  • -
  • - [LAST_NAME] – last name of the subscriber -
  • -
  • - [FULL_NAME] – first and last names of the subscriber joined -
  • -
  • - [LINK_UNSUBSCRIBE] – URL that points to the preferences page of the subscriber -
  • -
  • - [LINK_PREFERENCES] – URL that points to the unsubscribe page -
  • -
  • - [LINK_BROWSER] – URL to preview the message in a browser -
  • -
  • - [SUBSCRIPTION_ID] – Unique ID that identifies the recipient -
  • -
  • - [LIST_ID] – Unique ID that identifies the list used for this campaign -
  • -
  • - [CAMPAIGN_ID] – Unique ID that identifies current campaign -
  • -
-

- In addition to that any custom field can have its own merge tag. -

-
-
-
+ {{> merge_tag_reference mergeTagReferenceFooterText='In addition to that any custom field can have its own merge tag.'}} {{> plaintext}} From bd6ba90ecadc934a1eef5ba497d57a57a44112b3 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Sat, 4 Mar 2017 22:02:46 +0200 Subject: [PATCH 159/483] Added 'created' column for subscribers lists table --- routes/campaigns.js | 1 - routes/lists.js | 4 ++-- views/lists/view.hbs | 5 ++++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/routes/campaigns.js b/routes/campaigns.js index 4a653cf6..6636d7e2 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -4,7 +4,6 @@ let config = require('config'); let express = require('express'); let router = new express.Router(); let lists = require('../lib/models/lists'); -let fields = require('../lib/models/fields'); let templates = require('../lib/models/templates'); let campaigns = require('../lib/models/campaigns'); let subscriptions = require('../lib/models/subscriptions'); diff --git a/routes/lists.js b/routes/lists.js index 898f7e0d..8fd54dd6 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -151,7 +151,7 @@ router.post('/ajax/:id', (req, res) => { fieldList = []; } - let columns = ['#', 'email', 'first_name', 'last_name'].concat(fieldList.filter(field => field.visible).map(field => field.column)).concat('status'); + let columns = ['#', 'email', 'first_name', 'last_name'].concat(fieldList.filter(field => field.visible).map(field => field.column)).concat(['status', 'created']); subscriptions.filter(list.id, req.body, columns, req.query.segment, (err, data, total, filteredTotal) => { if (err) { @@ -217,7 +217,7 @@ router.post('/ajax/:id', (req, res) => { } else { return htmlescape(cRow.value || ''); } - })).concat(statuses[row.status]).concat('Edit')) + })).concat(statuses[row.status]).concat(row.created && row.created.toISOString ? '' + row.created.toISOString() + '' : 'N/A').concat('Edit')) }); }); }); diff --git a/views/lists/view.hbs b/views/lists/view.hbs index 5a9b01be..10daf756 100644 --- a/views/lists/view.hbs +++ b/views/lists/view.hbs @@ -72,7 +72,7 @@

- +
+ From 8fdb2840c4cdaaacd1c57777782e0aa19c593b83 Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 4 Mar 2017 21:50:44 +0100 Subject: [PATCH 160/483] Moved Merge Tag Helpers to helpers.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … to satisfy ESLint top-level module scope. --- lib/helpers.js | 76 +++++++++++++++++++++++++++++++++++++++++++++ lib/tools.js | 72 ------------------------------------------ routes/campaigns.js | 5 +-- routes/templates.js | 3 +- 4 files changed, 81 insertions(+), 75 deletions(-) create mode 100644 lib/helpers.js diff --git a/lib/helpers.js b/lib/helpers.js new file mode 100644 index 00000000..a9d5bbdb --- /dev/null +++ b/lib/helpers.js @@ -0,0 +1,76 @@ +'use strict'; + +let lists = require('./models/lists'); +let fields = require('./models/fields'); + +module.exports = { + getDefaultMergeTags, + getListMergeTags, +}; + +function getDefaultMergeTags(callback) { + // Using a callback for the sake of future-proofness + callback(null, [ + { + key: 'LINK_UNSUBSCRIBE', + value: 'URL that points to the unsubscribe page' + }, { + key: 'LINK_PREFERENCES', + value: 'URL that points to the preferences page of the subscriber' + }, { + key: 'LINK_BROWSER', + value: 'URL to preview the message in a browser' + }, { + key: 'EMAIL', + value: 'Email address' + }, { + key: 'FIRST_NAME', + value: 'First name' + }, { + key: 'LAST_NAME', + value: 'Last name' + }, { + key: 'FULL_NAME', + value: 'Full name (first and last name combined)' + }, { + key: 'SUBSCRIPTION_ID', + value: 'Unique ID that identifies the recipient' + }, { + key: 'LIST_ID', + value: 'Unique ID that identifies the list used for this campaign' + }, { + key: 'CAMPAIGN_ID', + value: 'Unique ID that identifies current campaign' + } + ]); +} + +function getListMergeTags(listId, callback) { + lists.get(listId, (err, list) => { + if (err) { + return callback(err); + } + if (!list) { + list = { + id: listId + }; + } + + fields.list(list.id, (err, fieldList) => { + if (err && !fieldList) { + fieldList = []; + } + + let mergeTags = []; + + fieldList.forEach(field => { + mergeTags.push({ + key: field.key, + value: field.name + }); + }); + + return callback(null, mergeTags); + }); + }); +} diff --git a/lib/tools.js b/lib/tools.js index b1aecb72..41c8b782 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -20,8 +20,6 @@ module.exports = { formatMessage, getMessageLinks, prepareHtml, - getDefaultMergeTags, - getListMergeTags, workers: new Set() }; @@ -224,73 +222,3 @@ function prepareHtml(html, callback) { return callback(null, juice(preparedHtml)); }); } - -function getDefaultMergeTags(callback) { - // Using a callback for the sake of future-proofness - callback(null, [ - { - key: 'LINK_UNSUBSCRIBE', - value: 'URL that points to the unsubscribe page' - }, { - key: 'LINK_PREFERENCES', - value: 'URL that points to the preferences page of the subscriber' - }, { - key: 'LINK_BROWSER', - value: 'URL to preview the message in a browser' - }, { - key: 'EMAIL', - value: 'Email address' - }, { - key: 'FIRST_NAME', - value: 'First name' - }, { - key: 'LAST_NAME', - value: 'Last name' - }, { - key: 'FULL_NAME', - value: 'Full name (first and last name combined)' - }, { - key: 'SUBSCRIPTION_ID', - value: 'Unique ID that identifies the recipient' - }, { - key: 'LIST_ID', - value: 'Unique ID that identifies the list used for this campaign' - }, { - key: 'CAMPAIGN_ID', - value: 'Unique ID that identifies current campaign' - } - ]); -} - -function getListMergeTags(listId, callback) { - let lists = require('./models/lists'); - let fields = require('./models/fields'); - - lists.get(listId, (err, list) => { - if (err) { - return callback(err); - } - if (!list) { - list = { - id: listId - }; - } - - fields.list(list.id, (err, fieldList) => { - if (err && !fieldList) { - fieldList = []; - } - - let mergeTags = []; - - fieldList.forEach(field => { - mergeTags.push({ - key: field.key, - value: field.name - }); - }); - - return callback(null, mergeTags); - }); - }); -} diff --git a/routes/campaigns.js b/routes/campaigns.js index 4a653cf6..bfd86121 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -10,6 +10,7 @@ let campaigns = require('../lib/models/campaigns'); let subscriptions = require('../lib/models/subscriptions'); let settings = require('../lib/models/settings'); let tools = require('../lib/tools'); +let helpers = require('../lib/helpers'); let striptags = require('striptags'); let passport = require('../lib/passport'); let htmlescape = require('escape-html'); @@ -184,13 +185,13 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { view = 'campaigns/edit'; } - tools.getDefaultMergeTags((err, defaultMergeTags) => { + helpers.getDefaultMergeTags((err, defaultMergeTags) => { if (err) { req.flash('danger', err.message || err); return res.redirect('/'); } - tools.getListMergeTags(campaign.list, (err, listMergeTags) => { + helpers.getListMergeTags(campaign.list, (err, listMergeTags) => { if (err) { req.flash('danger', err.message || err); return res.redirect('/'); diff --git a/routes/templates.js b/routes/templates.js index 778f4cb4..12cb1ec1 100644 --- a/routes/templates.js +++ b/routes/templates.js @@ -6,6 +6,7 @@ let router = new express.Router(); let templates = require('../lib/models/templates'); let settings = require('../lib/models/settings'); let tools = require('../lib/tools'); +let helpers = require('../lib/helpers'); let striptags = require('striptags'); let passport = require('../lib/passport'); let mailer = require('../lib/mailer'); @@ -112,7 +113,7 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { return next(err); } - tools.getDefaultMergeTags((err, defaultMergeTags) => { + helpers.getDefaultMergeTags((err, defaultMergeTags) => { if (err) { req.flash('danger', err.message || err); return res.redirect('/templates'); From 28c08cf847f3b6f1f4cf68f82d4ec99a878ed68d Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 4 Mar 2017 22:04:13 +0100 Subject: [PATCH 161/483] Update helpers.js --- lib/helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/helpers.js b/lib/helpers.js index a9d5bbdb..521d46a0 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -5,7 +5,7 @@ let fields = require('./models/fields'); module.exports = { getDefaultMergeTags, - getListMergeTags, + getListMergeTags }; function getDefaultMergeTags(callback) { From 4c2f3a548c5d838aea778a4107f108a0b8e32c83 Mon Sep 17 00:00:00 2001 From: witzig Date: Sun, 5 Mar 2017 01:54:09 +0100 Subject: [PATCH 162/483] Temporary fix for #148 --- views/campaigns/edit-rss.hbs | 4 ++-- views/campaigns/edit-triggered.hbs | 6 +++--- views/campaigns/edit.hbs | 6 +++--- views/templates/edit.hbs | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/views/campaigns/edit-rss.hbs b/views/campaigns/edit-rss.hbs index c8efcc2b..ed26d7ac 100644 --- a/views/campaigns/edit-rss.hbs +++ b/views/campaigns/edit-rss.hbs @@ -82,9 +82,9 @@ {{#if disableWysiwyg}} - {{> codeeditor}} +{{> codeeditor}} {{else}} - {{> summernote}} +{{> summernote}} {{/if}}
diff --git a/views/campaigns/edit-triggered.hbs b/views/campaigns/edit-triggered.hbs index 3cdeec96..db2e8723 100644 --- a/views/campaigns/edit-triggered.hbs +++ b/views/campaigns/edit-triggered.hbs @@ -131,12 +131,12 @@ {{> merge_tag_reference}} - {{> plaintext}} +{{> plaintext}} {{#if disableWysiwyg}} - {{> codeeditor}} +{{> codeeditor}} {{else}} - {{> (lookup . 'editorName') }} +{{> (lookup . 'editorName') }} {{/if}} {{/if}} diff --git a/views/campaigns/edit.hbs b/views/campaigns/edit.hbs index 3b747608..6ed828d9 100644 --- a/views/campaigns/edit.hbs +++ b/views/campaigns/edit.hbs @@ -147,12 +147,12 @@ {{> merge_tag_reference}} - {{> plaintext}} +{{> plaintext}} {{#if disableWysiwyg}} - {{> codeeditor}} +{{> codeeditor}} {{else}} - {{> (lookup . 'editorName') }} +{{> (lookup . 'editorName') }} {{/if}} {{/if}} diff --git a/views/templates/edit.hbs b/views/templates/edit.hbs index ad4677a8..a8eda9fe 100644 --- a/views/templates/edit.hbs +++ b/views/templates/edit.hbs @@ -26,12 +26,12 @@ {{> merge_tag_reference mergeTagReferenceFooterText='In addition to that any custom field can have its own merge tag.'}} - {{> plaintext}} +{{> plaintext}} {{#if disableWysiwyg}} - {{> codeeditor}} +{{> codeeditor}} {{else}} - {{> (lookup . 'editorName') }} +{{> (lookup . 'editorName') }} {{/if}}
From 89f480d5f8c8a929926a619eda6b12f8614ccb12 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Mon, 6 Mar 2017 10:48:08 +0200 Subject: [PATCH 163/483] fixed dependencies --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5ca1eca7..79d65700 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,6 @@ "node": ">=5.0.0" }, "devDependencies": { - "gettext-parser": "^1.2.2", "grunt": "^1.0.1", "grunt-cli": "^1.2.0", "grunt-contrib-nodeunit": "^1.0.0", @@ -52,6 +51,7 @@ "faker": "^4.1.0", "feedparser": "^2.1.0", "geoip-ultralight": "^0.1.5", + "gettext-parser": "^1.2.2", "handlebars": "^4.0.6", "hbs": "^4.0.1", "he": "^1.1.1", From a164a7fb40e018b6f2a027b8966b57dd68c210c4 Mon Sep 17 00:00:00 2001 From: witzig Date: Mon, 6 Mar 2017 14:39:43 +0100 Subject: [PATCH 164/483] Moved tracking scripts to partial and made tools.formatMessage() less greedy The change in tools.formatMessage() prevents stripping CSS like a[data-foo] and arrays in JS. Thus only replacing mergeTag it knows about. --- lib/tools.js | 2 +- routes/archive.js | 32 +++++++++++++++++------------ views/archive/layout.hbs | 20 ++---------------- views/layout.hbs | 18 +--------------- views/partials/tracking-scripts.hbs | 18 ++++++++++++++++ 5 files changed, 41 insertions(+), 49 deletions(-) create mode 100644 views/partials/tracking-scripts.hbs diff --git a/lib/tools.js b/lib/tools.js index 41c8b782..05f1244b 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -186,7 +186,7 @@ function formatMessage(serviceUrl, campaign, list, subscription, message, filter return message.replace(/\[([a-z0-9_]+)(?:\/([^\]]+))?\]/ig, (match, identifier, fallback) => { identifier = identifier.toUpperCase(); let value = (getValue(identifier) || fallback || '').trim(); - return value ? filter(value) : ''; + return value ? filter(value) : match; }); } diff --git a/routes/archive.js b/routes/archive.js index a4356462..221cce0e 100644 --- a/routes/archive.js +++ b/routes/archive.js @@ -62,20 +62,26 @@ router.get('/:campaign/:list/:subscription', passport.csrfProtection, (req, res, } let renderHtml = (html, renderTags) => { - campaign.editorName = campaign.editorName || 'summernote'; - let sfx = ''; - if (campaign.editorName !== 'summernote' && campaign.editorName !== 'codeeditor') { - sfx = '-raw'; + let render = (view, layout) => { + res.render(view, { + layout, + message: renderTags ? tools.formatMessage(serviceUrl, campaign, list, subscription, html) : html, + campaign, + list, + subscription, + attachments, + csrfToken: req.csrfToken() + }); + }; + + if (campaign.editorName && campaign.editorName !== 'summernote' && campaign.editorName !== 'codeeditor') { + res.render('partials/tracking-scripts', { layout: 'archive/layout-raw' }, (err, scripts) => { + html = scripts ? html.replace(/<\/body\b/i, match => scripts + match) : html; + render('archive/view-raw', 'archive/layout-raw'); + }); + } else { + render('archive/view', 'archive/layout'); } - res.render('archive/view' + sfx, { - layout: 'archive/layout' + sfx, - message: renderTags ? tools.formatMessage(serviceUrl, campaign, list, subscription, html) : html, - campaign, - list, - subscription, - attachments, - csrfToken: req.csrfToken() - }); }; let renderAndShow = (html, renderTags) => { diff --git a/views/archive/layout.hbs b/views/archive/layout.hbs index bc9e27a9..98a3e25c 100644 --- a/views/archive/layout.hbs +++ b/views/archive/layout.hbs @@ -41,24 +41,8 @@ - {{#if uaCode}} - - {{/if}} + {{> tracking_scripts}} + diff --git a/views/layout.hbs b/views/layout.hbs index 91b4b9a5..6a0fecc7 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -153,24 +153,8 @@ {{/if}} - {{#if uaCode}} - - {{/if}} diff --git a/views/partials/tracking-scripts.hbs b/views/partials/tracking-scripts.hbs new file mode 100644 index 00000000..72e045d2 --- /dev/null +++ b/views/partials/tracking-scripts.hbs @@ -0,0 +1,18 @@ +{{#if uaCode}} + +{{/if}} From d25565b6f867c6adfef4e01056a5ed4c9113dc58 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Tue, 7 Mar 2017 16:30:56 +0200 Subject: [PATCH 165/483] Updated translation support --- .eslintrc | 3 + .eslintrc.js | 70 - README.md | 10 +- app.js | 12 +- languages/et.mo | Bin 2531 -> 3279 bytes languages/et.po | 2841 +++++- languages/mailtrain.pot | 3918 +++++++- lib/fakelang.js | 26 + lib/feed.js | 4 +- lib/helpers.js | 21 +- lib/mailer.js | 19 +- lib/models/campaigns.js | 25 +- lib/models/fields.js | 54 +- lib/models/links.js | 7 +- lib/models/lists.js | 13 +- lib/models/segments.js | 75 +- lib/models/subscriptions.js | 48 +- lib/models/templates.js | 11 +- lib/models/triggers.js | 51 +- lib/models/users.js | 27 +- lib/passport.js | 10 +- lib/tools.js | 20 +- lib/translate.js | 6 + package.json | 11 +- routes/archive.js | 14 +- routes/campaigns.js | 110 +- routes/fields.js | 21 +- routes/links.js | 3 +- routes/lists.js | 108 +- routes/segments.js | 61 +- routes/subscription.js | 48 +- routes/templates.js | 33 +- routes/triggers.js | 30 +- routes/users.js | 23 +- services/feedcheck.js | 10 +- services/importer.js | 3 +- services/sender.js | 8 +- services/triggers.js | 4 +- views/archive/layout.hbs | 2 +- views/campaigns/bounced.hbs | 20 +- views/campaigns/campaigns.hbs | 22 +- views/campaigns/clicked.hbs | 30 +- views/campaigns/complained.hbs | 20 +- views/campaigns/create-rss.hbs | 40 +- views/campaigns/create-triggered.hbs | 48 +- views/campaigns/create.hbs | 54 +- views/campaigns/delivered.hbs | 20 +- views/campaigns/edit-rss.hbs | 46 +- views/campaigns/edit-triggered.hbs | 52 +- views/campaigns/edit.hbs | 68 +- views/campaigns/opened.hbs | 20 +- views/campaigns/unsubscribed.hbs | 20 +- views/campaigns/upload-attachment.hbs | 12 +- views/campaigns/view.hbs | 132 +- views/emails/confirm-html.hbs | 8519 ++++++++++++++++- views/emails/confirm-text.hbs | 8 +- views/emails/password-reset-html.hbs | 8515 ++++++++++++++++- views/emails/password-reset-text.hbs | 8 +- views/emails/rss-html.hbs | 6 +- views/emails/stationery-html.hbs | 10 +- views/emails/stationery-text.hbs | 10 +- views/emails/subscription-confirmed-html.hbs | 8530 +++++++++++++++++- views/emails/subscription-confirmed-text.hbs | 14 +- views/emails/unsubscribe-confirmed-html.hbs | 8516 ++++++++++++++++- views/emails/unsubscribe-confirmed-text.hbs | 10 +- views/index.hbs | 47 +- views/layout.hbs | 24 +- views/lists/create.hbs | 18 +- views/lists/edit.hbs | 24 +- views/lists/fields/create.hbs | 68 +- views/lists/fields/edit.hbs | 76 +- views/lists/fields/fields.hbs | 24 +- views/lists/lists.hbs | 18 +- views/lists/segments/create.hbs | 24 +- views/lists/segments/edit.hbs | 26 +- views/lists/segments/rule-configure.hbs | 66 +- views/lists/segments/rule-create.hbs | 16 +- views/lists/segments/rule-edit.hbs | 76 +- views/lists/segments/segments.hbs | 16 +- views/lists/segments/view.hbs | 24 +- views/lists/subscription/add.hbs | 34 +- views/lists/subscription/edit.hbs | 34 +- views/lists/subscription/import-failed.hbs | 14 +- views/lists/subscription/import-preview.hbs | 22 +- views/lists/subscription/import.hbs | 20 +- views/lists/view.hbs | 64 +- views/partials/codeeditor.hbs | 2 +- views/partials/html-preview.hbs | 2 +- views/partials/merge-tag-reference.hbs | 9 +- views/partials/plaintext.hbs | 2 +- views/partials/summernote.hbs | 2 +- views/settings.hbs | 197 +- views/subscription/confirm-notice.hbs | 8 +- views/subscription/layout.hbs | 2 +- views/subscription/manage-address.hbs | 12 +- views/subscription/manage.hbs | 20 +- views/subscription/subscribe.hbs | 19 +- views/subscription/subscribed.hbs | 18 +- views/subscription/unsubscribe-notice.hbs | 6 +- views/subscription/unsubscribe.hbs | 8 +- views/subscription/updated-notice.hbs | 9 +- views/templates/create.hbs | 26 +- views/templates/edit.hbs | 22 +- views/templates/templates.hbs | 14 +- views/triggers/create-select.hbs | 16 +- views/triggers/create.hbs | 54 +- views/triggers/edit.hbs | 58 +- views/triggers/triggered.hbs | 18 +- views/triggers/triggers.hbs | 28 +- views/users/account.hbs | 36 +- views/users/api.hbs | 100 +- views/users/forgot.hbs | 22 +- views/users/login.hbs | 22 +- views/users/reset.hbs | 20 +- 114 files changed, 42095 insertions(+), 1902 deletions(-) create mode 100644 .eslintrc delete mode 100644 .eslintrc.js create mode 100644 lib/fakelang.js diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..91926fcd --- /dev/null +++ b/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "nodemailer" +} diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 04f79c0e..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,70 +0,0 @@ -'use strict'; - -module.exports = { - rules: { - indent: [2, 4, { - SwitchCase: 1 - }], - quotes: [2, 'single'], - 'linebreak-style': [2, 'unix'], - semi: [2, 'always'], - strict: [2, 'global'], - eqeqeq: 2, - 'dot-notation': 2, - curly: 2, - 'no-fallthrough': 2, - 'quote-props': [2, 'as-needed'], - 'no-unused-expressions': [2, { - allowShortCircuit: true - }], - 'no-unused-vars': 2, - 'no-undefined': 2, - 'handle-callback-err': 2, - 'no-new': 2, - 'new-cap': 2, - 'no-eval': 2, - 'no-invalid-this': 2, - radix: [2, 'always'], - 'no-use-before-define': [2, 'nofunc'], - 'callback-return': [2, ['callback', 'cb', 'done']], - 'comma-dangle': [2, 'never'], - 'comma-style': [2, 'last'], - 'no-regex-spaces': 2, - 'no-empty': 2, - 'no-duplicate-case': 2, - 'no-empty-character-class': 2, - 'no-redeclare': [2, { - builtinGlobals: true - }], - 'block-scoped-var': 2, - 'no-sequences': 2, - 'no-throw-literal': 2, - 'no-useless-call': 2, - 'no-useless-concat': 2, - 'no-void': 2, - yoda: 2, - 'no-undef': 2, - 'global-require': 2, - 'no-var': 2, - 'no-bitwise': 2, - 'no-lonely-if': 2, - 'no-mixed-spaces-and-tabs': 2, - 'arrow-body-style': [2, 'as-needed'], - 'arrow-parens': [2, 'as-needed'], - 'prefer-arrow-callback': 2, - 'object-shorthand': 2, - 'prefer-spread': 2 - }, - env: { - es6: true, - node: true - }, - extends: 'eslint:recommended', - globals: { - it: true, - describe: true, - beforeEach: true, - afterEach: true - }, - fix: true -}; diff --git a/README.md b/README.md index 77c29807..43eeddd4 100644 --- a/README.md +++ b/README.md @@ -180,7 +180,15 @@ This command generates a CSV file with 100 000 subscriber accounts ## Translations -Mailtrain is currently not translated but it supports translations. To add translations you first need to add translation support for the translatable strings +Mailtrain is currently not translated but it supports translations. To add translations you first need to add translation support for the translatable strings. To test if strings are translatable or not, use a fake language with code "zz" + +```toml +language="zz" +``` + +This would modify all input strings. If a string is not modified then it does not support translations. + +![](https://cldup.com/qXxAbaq2F1.png) ### Translating JavaScript files diff --git a/app.js b/app.js index 52b94b1c..51a4a915 100644 --- a/app.js +++ b/app.js @@ -3,7 +3,7 @@ let config = require('config'); let log = require('npmlog'); -let translate = require('./lib/translate'); +let _ = require('./lib/translate')._; let util = require('util'); let express = require('express'); @@ -96,14 +96,14 @@ hbs.registerHelper('flash_messages', function () { // eslint-disable-line prefer ); }); -// {{#translate}}abc{{/translate}} +// {{#translate}}abc{{/translate}} hbs.registerHelper('translate', function (context, options) { // eslint-disable-line prefer-arrow-callback if (typeof options === 'undefined' && context) { options = context; context = false; } - let result = translate._(options.fn(this)); // eslint-disable-line no-invalid-this + let result = _(options.fn(this)); // eslint-disable-line no-invalid-this if (Array.isArray(context)) { result = util.format(result, ...context); @@ -137,7 +137,7 @@ app.use(session({ app.use(flash()); app.use((req, res, next) => { - req._ = str => translate._(str); + req._ = str => _(str); next(); }); @@ -166,7 +166,7 @@ app.use((req, res, next) => { }; let menu = [{ - title: 'Home', + title: _('Home'), url: '/', selected: true }]; @@ -208,7 +208,7 @@ app.use('/api', api); // catch 404 and forward to error handler app.use((req, res, next) => { - let err = new Error('Not Found'); + let err = new Error(_('Not Found')); err.status = 404; next(err); }); diff --git a/languages/et.mo b/languages/et.mo index 69f724059f00b75f61725972a28ba2d2589b7e1d..c1600e2295f63f2b0ffd6f51f62a23581ad42ba5 100644 GIT binary patch delta 1295 zcmYk)O-v+36bJAEhJ{ga6;wbz@<`Z-FcQAR>}ZUUh^(+kLO5{Hq-MI9DY~X>=&Bxr z9LAV<*km#8cDQ)b$Wbp66BD^j_N0mNuzFfG*~=#Cbx$7rznKxOO!aTNyFT7~)%OQ} z9IpS`pE(g|W9XyknGPYIhkrtDpL7bb2yemH;2oHQm%4=5g^Tb7cnquXJNPurWrP@k zuftjRF2qk9RC$Ycy7JoL7?LGK1UQG82aTV^tCHNV92i}Do*dn4R zz_;Nf{2ETdU*MZiJkr{54Ze@tEjR$bhn(PVZ6Cr>>@WHrZEZLW=WriDlt!FDj`*v# zKR_=1ACN0Hg!DMmnYOP$yb{;p1l)yJ;1T2_`W*79^4dI(TYVT81TJu_&4%M^eg}NR zQDcrk;uj4?;snKI^e54|l+U7bX59MFIXG@yb{z9X<6s|0=kEijCZ76tD3_Jn5MR#z z>iDUnzG`DSNR;#1Mvi2`CZ2p*J2Kk&994~yPEpZDUKV{`tl5eZ*Y@bpCKRip(lr&d z#;c0dh6;yN!9*FV964R7nnMbdQC^Yuv$Ts@@7d@%PX$FTDY)WNtP5B{w^j_A?}|nj zLoC|dc2CC@$-yC@DC7WZDn0L7Ngs55nBBCVR&5dmsm_dzY_(!tu@O(AZC*dtRi2!F zlnKUnl|xXir`W%u$lL#NO&?@#_Pj*%FXoq))1&SQ{=b}`TR8io`^(PydgC1FB+jdn zB&V!X4j7}Fb<%iPYkcD+HO|W_3NViL8>evzwNQqn3}WS+HhJ*|uBz0$4U!3|YbVdLDCRC5P~X#wS@(vB>R rZ%LCx?ZqV73U7_~NYPnaODSt7-jZd+jyuiA#gjSa|5YjdIJ@%?3yT)8 delta 590 zcmXxgyDvj=6u|M*a(mHwwDpXl6%|88TLzDXU05szLp20VM5G2HX@Xct48Mp(kg!;o z#A;w95s4Uum>LoM2fpWOPjc?({_f-a&hI=neFSr_fzo{;>d6rKK(>(UE-u6m_Tn!N zW7I7Y!&#g}gWdRrOW0f@Qir?PjAz(@HyFT|!t*>PMRH=5iX?c^kNU#`hH<;FKF1o? zcj&`swDBFa(L8pbZHbK1WDJK`uX;oV@EZH@8>g^?pLL%NoMwMH;YJI%%0#-b6N5O8 zI+Zl)WY$m%9$*}wuod0q{}YLzo^TAc;Z(t8^s?T>DDI(7>>6F{?*z>`p&x3IVlY)_ zoJ`9pT8kXm37vvQCFv(QxKPt+x(X{u4Lyubu9~E0k&%_`+{|KjKAp;59l38^CTNYA zjFmBOR>(AZ(&o^!WA}v<{e$tiiP@3j{ndnh;WqabJ;v|dGMC;q^XXkQr@nS`>`VRu DlQ%(| diff --git a/languages/et.po b/languages/et.po index 5a82f24d..1d31910b 100644 --- a/languages/et.po +++ b/languages/et.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-03-04 18:00+0200\n" -"PO-Revision-Date: 2017-03-04 18:00+0200\n" +"POT-Creation-Date: 2017-03-07 15:46+0200\n" +"PO-Revision-Date: 2017-03-07 16:02+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: et\n" @@ -13,18 +13,2687 @@ msgstr "" "X-Generator: Poedit 1.8.12\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: views/archive/layout.hbs:1 views/layout.hbs:1 +#: views/subscription/layout.hbs:1 routes/index.js:11 +msgid "Self hosted email newsletter app" +msgstr "Enda majutatud e-posti uudiskirjade rakendus" + +#: views/campaigns/bounced.hbs:1 views/campaigns/campaigns.hbs:1 +#: views/campaigns/clicked.hbs:1 views/campaigns/complained.hbs:1 +#: views/campaigns/create-rss.hbs:1 views/campaigns/create-triggered.hbs:1 +#: views/campaigns/create.hbs:1 views/campaigns/delivered.hbs:1 +#: views/campaigns/edit-rss.hbs:1 views/campaigns/edit-triggered.hbs:1 +#: views/campaigns/edit.hbs:1 views/campaigns/opened.hbs:1 +#: views/campaigns/unsubscribed.hbs:1 views/campaigns/upload-attachment.hbs:1 +#: views/campaigns/view.hbs:1 views/lists/create.hbs:1 views/lists/edit.hbs:1 +#: views/lists/fields/create.hbs:1 views/lists/fields/edit.hbs:1 +#: views/lists/fields/fields.hbs:1 views/lists/lists.hbs:1 +#: views/lists/segments/create.hbs:1 views/lists/segments/edit.hbs:1 +#: views/lists/segments/rule-configure.hbs:1 +#: views/lists/segments/rule-create.hbs:1 views/lists/segments/rule-edit.hbs:1 +#: views/lists/segments/segments.hbs:1 views/lists/segments/view.hbs:1 +#: views/lists/subscription/add.hbs:1 views/lists/subscription/edit.hbs:1 +#: views/lists/subscription/import-failed.hbs:1 +#: views/lists/subscription/import-preview.hbs:1 +#: views/lists/subscription/import.hbs:1 views/lists/view.hbs:1 +#: views/settings.hbs:1 views/templates/create.hbs:1 views/templates/edit.hbs:1 +#: views/templates/templates.hbs:1 views/triggers/create-select.hbs:1 +#: views/triggers/create.hbs:1 views/triggers/edit.hbs:1 +#: views/triggers/triggered.hbs:1 views/triggers/triggers.hbs:1 +#: views/users/account.hbs:1 views/users/api.hbs:1 views/users/forgot.hbs:1 +#: views/users/login.hbs:1 views/users/reset.hbs:1 app.js:169 +msgid "Home" +msgstr "Esileht" + +#: views/campaigns/bounced.hbs:2 views/campaigns/campaigns.hbs:2 +#: views/campaigns/campaigns.hbs:7 views/campaigns/clicked.hbs:2 +#: views/campaigns/complained.hbs:2 views/campaigns/create-rss.hbs:2 +#: views/campaigns/create-triggered.hbs:2 views/campaigns/create.hbs:2 +#: views/campaigns/delivered.hbs:2 views/campaigns/edit-rss.hbs:2 +#: views/campaigns/edit-triggered.hbs:2 views/campaigns/edit.hbs:2 +#: views/campaigns/opened.hbs:2 views/campaigns/unsubscribed.hbs:2 +#: views/campaigns/upload-attachment.hbs:2 views/campaigns/view.hbs:2 +#: lib/tools.js:119 routes/campaigns.js:35 +msgid "Campaigns" +msgstr "" + +#: views/campaigns/bounced.hbs:3 views/campaigns/bounced.hbs:4 +msgid "Bounced info" +msgstr "" + +#: views/campaigns/bounced.hbs:5 views/campaigns/clicked.hbs:5 +#: views/campaigns/complained.hbs:5 views/campaigns/delivered.hbs:5 +#: views/campaigns/edit-rss.hbs:5 views/campaigns/edit-triggered.hbs:5 +#: views/campaigns/edit.hbs:5 views/campaigns/opened.hbs:5 +#: views/campaigns/unsubscribed.hbs:5 views/campaigns/upload-attachment.hbs:6 +msgid "View campaign" +msgstr "" + +#: views/campaigns/bounced.hbs:6 +msgid "Subscribers who bounced and were unsubscribed:" +msgstr "" + +#: views/campaigns/bounced.hbs:7 views/campaigns/clicked.hbs:13 +#: views/campaigns/complained.hbs:7 views/campaigns/delivered.hbs:7 +#: views/campaigns/opened.hbs:7 views/campaigns/unsubscribed.hbs:7 +#: views/lists/subscription/import-failed.hbs:9 +msgid "Address" +msgstr "" + +#: views/campaigns/bounced.hbs:8 views/campaigns/clicked.hbs:14 +#: views/campaigns/complained.hbs:8 views/campaigns/delivered.hbs:8 +#: views/campaigns/opened.hbs:8 views/campaigns/unsubscribed.hbs:8 +#: views/lists/subscription/add.hbs:6 views/lists/subscription/edit.hbs:7 +#: views/lists/subscription/import-preview.hbs:7 +#: views/subscription/manage.hbs:4 views/subscription/subscribe.hbs:4 +msgid "First Name" +msgstr "" + +#: views/campaigns/bounced.hbs:9 views/campaigns/clicked.hbs:15 +#: views/campaigns/complained.hbs:9 views/campaigns/delivered.hbs:9 +#: views/campaigns/opened.hbs:9 views/campaigns/unsubscribed.hbs:9 +#: views/lists/subscription/add.hbs:7 views/lists/subscription/edit.hbs:8 +#: views/lists/subscription/import-preview.hbs:8 +#: views/subscription/manage.hbs:5 views/subscription/subscribe.hbs:5 +msgid "Last Name" +msgstr "" + +#: views/campaigns/bounced.hbs:10 views/campaigns/complained.hbs:10 +#: views/campaigns/delivered.hbs:10 views/campaigns/unsubscribed.hbs:10 +msgid "SMTP response" +msgstr "" + +#: views/campaigns/bounced.hbs:11 +msgid "Bounce time" +msgstr "" + +#: views/campaigns/campaigns.hbs:3 views/campaigns/create-triggered.hbs:24 +#: views/campaigns/create.hbs:3 views/campaigns/create.hbs:4 +#: views/campaigns/create.hbs:27 +msgid "Create Campaign" +msgstr "" + +#: views/campaigns/campaigns.hbs:4 +msgid "Regular Campaign" +msgstr "" + +#: views/campaigns/campaigns.hbs:5 +msgid "RSS Campaign" +msgstr "" + +#: views/campaigns/campaigns.hbs:6 +msgid "Triggered Campaign" +msgstr "" + +#: views/campaigns/campaigns.hbs:8 views/campaigns/create-rss.hbs:6 +#: views/campaigns/create-triggered.hbs:5 views/campaigns/create.hbs:5 +#: views/campaigns/edit-rss.hbs:8 views/campaigns/edit-triggered.hbs:9 +#: views/campaigns/edit.hbs:10 views/campaigns/view.hbs:71 +#: views/lists/create.hbs:5 views/lists/edit.hbs:6 +#: views/lists/fields/fields.hbs:6 views/lists/lists.hbs:5 +#: views/lists/segments/segments.hbs:6 views/templates/templates.hbs:5 +msgid "Name" +msgstr "" + +#: views/campaigns/campaigns.hbs:9 views/campaigns/create-rss.hbs:8 +#: views/campaigns/create-triggered.hbs:7 views/campaigns/create.hbs:7 +#: views/campaigns/edit-rss.hbs:10 views/campaigns/edit-triggered.hbs:11 +#: views/campaigns/edit.hbs:12 views/campaigns/view.hbs:72 +#: views/lists/create.hbs:7 views/lists/edit.hbs:10 views/lists/lists.hbs:8 +#: views/partials/merge-tag-reference.hbs:4 views/templates/create.hbs:9 +#: views/templates/edit.hbs:8 views/templates/templates.hbs:6 +msgid "Description" +msgstr "" + +#: views/campaigns/campaigns.hbs:10 views/campaigns/view.hbs:73 +msgid "Status" +msgstr "" + +#: views/campaigns/campaigns.hbs:11 views/campaigns/view.hbs:74 +msgid "Created" +msgstr "" + +#: views/campaigns/clicked.hbs:3 views/campaigns/clicked.hbs:4 +msgid "Link info" +msgstr "" + +#: views/campaigns/clicked.hbs:6 views/campaigns/view.hbs:61 +msgid "URL" +msgstr "" + +#: views/campaigns/clicked.hbs:7 views/campaigns/view.hbs:62 +msgid "Clicks" +msgstr "" + +#: views/campaigns/clicked.hbs:8 views/campaigns/view.hbs:63 +msgid "% of clicks" +msgstr "" + +#: views/campaigns/clicked.hbs:9 views/campaigns/view.hbs:64 +msgid "% of messages" +msgstr "" + +#: views/campaigns/clicked.hbs:10 views/campaigns/view.hbs:67 +msgid "Aggregated clicks" +msgstr "" + +#: views/campaigns/clicked.hbs:11 +msgid "Subscribers who clicked on a link:" +msgstr "" + +#: views/campaigns/clicked.hbs:12 +msgid "Subscribers who clicked on this link:" +msgstr "" + +#: views/campaigns/clicked.hbs:16 +msgid "First click time" +msgstr "" + +#: views/campaigns/clicked.hbs:17 +msgid "Click count" +msgstr "" + +#: views/campaigns/complained.hbs:3 views/campaigns/complained.hbs:4 +msgid "Complained info" +msgstr "" + +#: views/campaigns/complained.hbs:6 +msgid "Subscribers who complained and were unsubscribed:" +msgstr "" + +#: views/campaigns/complained.hbs:11 +msgid "Complain time" +msgstr "" + +#: views/campaigns/create-rss.hbs:3 views/campaigns/create-rss.hbs:4 +#: views/campaigns/create-rss.hbs:20 +msgid "Create RSS Campaign" +msgstr "" + +#: views/campaigns/create-rss.hbs:5 views/campaigns/edit-rss.hbs:6 +msgid "" +"RSS campaign sets up a tracker against selected RSS feed address. Whenever a " +"new entry is found from this feed it is sent to selected list as an email " +"message." +msgstr "" + +#: views/campaigns/create-rss.hbs:7 views/campaigns/create-triggered.hbs:6 +#: views/campaigns/create.hbs:6 views/campaigns/edit-rss.hbs:9 +#: views/campaigns/edit-triggered.hbs:10 views/campaigns/edit.hbs:11 +msgid "Campaign Name" +msgstr "" + +#: views/campaigns/create-rss.hbs:9 views/campaigns/create-triggered.hbs:8 +#: views/campaigns/create.hbs:8 views/campaigns/edit-rss.hbs:11 +#: views/campaigns/edit-triggered.hbs:12 views/campaigns/edit.hbs:13 +#: views/lists/create.hbs:8 views/lists/edit.hbs:11 +#: views/templates/create.hbs:11 views/templates/edit.hbs:10 +msgid "HTML is allowed" +msgstr "" + +#: views/campaigns/create-rss.hbs:10 views/campaigns/create-triggered.hbs:9 +#: views/campaigns/create.hbs:9 views/campaigns/edit-rss.hbs:12 +#: views/campaigns/edit-triggered.hbs:13 views/campaigns/edit.hbs:14 +#: views/campaigns/view.hbs:6 +msgid "List" +msgstr "" + +#: views/campaigns/create-rss.hbs:11 views/campaigns/create-triggered.hbs:10 +#: views/campaigns/create-triggered.hbs:13 views/campaigns/create.hbs:10 +#: views/campaigns/create.hbs:14 views/campaigns/edit-rss.hbs:13 +#: views/campaigns/edit-triggered.hbs:14 views/campaigns/edit.hbs:15 +#: views/lists/fields/create.hbs:27 views/lists/fields/edit.hbs:28 +#: views/lists/segments/create.hbs:9 views/lists/segments/edit.hbs:10 +#: views/lists/segments/rule-create.hbs:7 views/lists/subscription/add.hbs:10 +#: views/lists/subscription/add.hbs:12 views/lists/subscription/edit.hbs:11 +#: views/lists/subscription/import-preview.hbs:5 +#: views/subscription/manage.hbs:10 views/subscription/subscribe.hbs:10 +#: views/templates/create.hbs:8 +msgid "Select" +msgstr "" + +#: views/campaigns/create-rss.hbs:12 views/campaigns/create-triggered.hbs:11 +#: views/campaigns/create.hbs:11 views/campaigns/edit-rss.hbs:14 +#: views/campaigns/edit-triggered.hbs:15 views/campaigns/edit.hbs:16 +msgid "subscribers" +msgstr "" + +#: views/campaigns/create-rss.hbs:13 views/campaigns/edit-rss.hbs:15 +msgid "RSS Feed Url" +msgstr "" + +#: views/campaigns/create-rss.hbs:14 views/campaigns/edit-rss.hbs:16 +msgid "" +"New entries from this RSS URL are sent out to list subscribers as email " +"messages" +msgstr "" + +#: views/campaigns/create-rss.hbs:15 views/campaigns/create-triggered.hbs:17 +#: views/campaigns/create.hbs:18 views/campaigns/edit-rss.hbs:18 +#: views/campaigns/edit-triggered.hbs:16 views/campaigns/edit.hbs:17 +#: views/campaigns/view.hbs:12 +msgid "Email \"from name\"" +msgstr "" + +#: views/campaigns/create-rss.hbs:16 views/campaigns/create-triggered.hbs:18 +#: views/campaigns/create.hbs:19 views/campaigns/edit-rss.hbs:19 +#: views/campaigns/edit.hbs:18 views/settings.hbs:23 +msgid "This is the name your emails will come from" +msgstr "" + +#: views/campaigns/create-rss.hbs:17 views/campaigns/create-triggered.hbs:19 +#: views/campaigns/create.hbs:20 views/campaigns/edit-rss.hbs:20 +#: views/campaigns/edit-triggered.hbs:18 views/campaigns/edit.hbs:19 +#: views/campaigns/view.hbs:13 +msgid "Email \"from\" address" +msgstr "" + +#: views/campaigns/create-rss.hbs:18 views/campaigns/create-triggered.hbs:20 +#: views/campaigns/edit-rss.hbs:21 views/campaigns/edit-triggered.hbs:19 +#: views/settings.hbs:25 +msgid "This is the address people will send replies to" +msgstr "" + +#: views/campaigns/create-rss.hbs:19 views/campaigns/create-triggered.hbs:23 +#: views/campaigns/create.hbs:26 views/campaigns/edit-rss.hbs:22 +#: views/campaigns/edit-triggered.hbs:22 views/campaigns/edit.hbs:25 +msgid "Disable clicked/opened tracking" +msgstr "" + +#: views/campaigns/create-triggered.hbs:3 +#: views/campaigns/create-triggered.hbs:4 +msgid "Create Triggered Campaign" +msgstr "" + +#: views/campaigns/create-triggered.hbs:12 views/campaigns/create.hbs:12 +#: views/campaigns/edit-triggered.hbs:7 views/campaigns/edit.hbs:7 +#: views/lists/fields/create.hbs:31 views/lists/fields/edit.hbs:33 +#: views/templates/create.hbs:13 +msgid "Template" +msgstr "" + +#: views/campaigns/create-triggered.hbs:14 views/campaigns/create.hbs:15 +msgid "Selecting a template creates a campaign specific copy from it" +msgstr "" + +#: views/campaigns/create-triggered.hbs:15 views/campaigns/create.hbs:16 +msgid "Or alternatively use an URL as the message content source:" +msgstr "" + +#: views/campaigns/create-triggered.hbs:16 views/campaigns/create.hbs:17 +#: views/campaigns/edit-triggered.hbs:25 views/campaigns/edit.hbs:28 +msgid "" +"If a message is sent then this URL will be POSTed to using Merge Tags as " +"POST body. Use this if you want to generate the HTML message yourself" +msgstr "" + +#: views/campaigns/create-triggered.hbs:21 views/campaigns/create.hbs:24 +#: views/campaigns/edit-triggered.hbs:20 views/campaigns/edit.hbs:23 +#: views/campaigns/view.hbs:15 +msgid "Email \"subject line\"" +msgstr "" + +#: views/campaigns/create-triggered.hbs:22 views/campaigns/create.hbs:25 +#: views/campaigns/edit-triggered.hbs:21 views/campaigns/edit.hbs:24 +#: views/settings.hbs:27 +msgid "Keep it relevant and non-spammy" +msgstr "" + +#: views/campaigns/create.hbs:13 +msgid "Select a template:" +msgstr "" + +#: views/campaigns/create.hbs:21 views/campaigns/edit.hbs:20 +msgid "" +"This is the address people will send replies to unless reply-to address is " +"set" +msgstr "" + +#: views/campaigns/create.hbs:22 views/campaigns/edit.hbs:21 +#: views/campaigns/view.hbs:14 +msgid "Email \"reply-to\" address" +msgstr "" + +#: views/campaigns/create.hbs:23 views/campaigns/edit.hbs:22 +msgid "If set, this is the address people will send replies to" +msgstr "" + +#: views/campaigns/delivered.hbs:3 views/campaigns/delivered.hbs:4 +msgid "Delivered info" +msgstr "" + +#: views/campaigns/delivered.hbs:6 +msgid "Subscribers who received the message and did not bounce/unsubscribe:" +msgstr "" + +#: views/campaigns/delivered.hbs:11 +msgid "Delivery time" +msgstr "" + +#: views/campaigns/edit-rss.hbs:3 views/campaigns/edit-rss.hbs:4 +msgid "Edit RSS Campaign" +msgstr "" + +#: views/campaigns/edit-rss.hbs:7 views/campaigns/edit-triggered.hbs:8 +#: views/campaigns/edit.hbs:9 views/settings.hbs:4 +msgid "General Settings" +msgstr "" + +#: views/campaigns/edit-rss.hbs:17 +msgid "" +"Use special merge tag [RSS_ENTRY] to mark the position for the " +"RSS post content. Additionally you can use any valid merge tag as well." +msgstr "" + +#: views/campaigns/edit-rss.hbs:23 views/campaigns/edit-triggered.hbs:26 +#: views/campaigns/edit.hbs:34 +msgid "Delete Campaign" +msgstr "" + +#: views/campaigns/edit-rss.hbs:24 views/campaigns/edit-triggered.hbs:27 +#: views/campaigns/edit.hbs:35 views/lists/edit.hbs:13 +#: views/lists/fields/edit.hbs:39 views/lists/segments/edit.hbs:14 +#: views/lists/segments/rule-edit.hbs:38 views/lists/subscription/edit.hbs:17 +#: views/settings.hbs:99 views/templates/edit.hbs:12 +msgid "Update" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:3 views/campaigns/edit-triggered.hbs:4 +msgid "Edit Triggered Campaign" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:6 views/campaigns/edit.hbs:6 +msgid "General" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:17 +msgid "his is the name your emails will come from" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:23 views/campaigns/edit.hbs:26 +msgid "Template Settings" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:24 views/campaigns/edit.hbs:27 +msgid "Template URL" +msgstr "" + +#: views/campaigns/edit.hbs:3 views/campaigns/edit.hbs:4 +#: views/campaigns/upload-attachment.hbs:3 +#: views/campaigns/upload-attachment.hbs:5 views/campaigns/view.hbs:3 +msgid "Edit Campaign" +msgstr "" + +#: views/campaigns/edit.hbs:8 views/campaigns/edit.hbs:29 +msgid "Attachments" +msgstr "" + +#: views/campaigns/edit.hbs:30 +msgid "File" +msgstr "" + +#: views/campaigns/edit.hbs:31 +msgid "Size" +msgstr "" + +#: views/campaigns/edit.hbs:32 views/campaigns/view.hbs:66 +#: views/lists/fields/fields.hbs:12 +msgid "No data available in table" +msgstr "" + +#: views/campaigns/edit.hbs:33 views/campaigns/upload-attachment.hbs:4 +msgid "Add Attachment" +msgstr "" + +#: views/campaigns/opened.hbs:3 views/campaigns/opened.hbs:4 +msgid "Opened info" +msgstr "" + +#: views/campaigns/opened.hbs:6 +msgid "Subscribers who opened this message:" +msgstr "" + +#: views/campaigns/opened.hbs:10 +msgid "First open" +msgstr "" + +#: views/campaigns/opened.hbs:11 +msgid "Opened count" +msgstr "" + +#: views/campaigns/unsubscribed.hbs:3 views/campaigns/unsubscribed.hbs:4 +msgid "Unsubscribed info" +msgstr "" + +#: views/campaigns/unsubscribed.hbs:6 +msgid "Subscribers who unsubscribed:" +msgstr "" + +#: views/campaigns/unsubscribed.hbs:11 views/campaigns/view.hbs:26 +#: views/lists/subscription/import.hbs:10 routes/lists.js:171 +msgid "Unsubscribed" +msgstr "" + +#: views/campaigns/upload-attachment.hbs:7 +msgid "Upload" +msgstr "" + +#: views/campaigns/view.hbs:4 +msgid "Overview" +msgstr "" + +#: views/campaigns/view.hbs:5 +msgid "Links" +msgstr "" + +#: views/campaigns/view.hbs:7 +msgid "Feed URL" +msgstr "" + +#: views/campaigns/view.hbs:8 +msgid "Last check" +msgstr "" + +#: views/campaigns/view.hbs:9 +msgid "Not yet checked" +msgstr "" + +#: views/campaigns/view.hbs:10 +msgid "activate campaign to start checking feed for new messages" +msgstr "" + +#: views/campaigns/view.hbs:11 +msgid "RSS status" +msgstr "" + +#: views/campaigns/view.hbs:16 +msgid "Preview campaign as" +msgstr "" + +#: views/campaigns/view.hbs:17 +msgid "Add new test user" +msgstr "" + +#: views/campaigns/view.hbs:18 +msgid "No test users yet, create one here" +msgstr "" + +#: views/campaigns/view.hbs:19 +msgid "Go" +msgstr "" + +#: views/campaigns/view.hbs:20 lib/models/triggers.js:25 +msgid "Delivered" +msgstr "" + +#: views/campaigns/view.hbs:21 +msgid "List subscribers who received this message" +msgstr "" + +#: views/campaigns/view.hbs:22 routes/lists.js:171 +msgid "Bounced" +msgstr "" + +#: views/campaigns/view.hbs:23 +msgid "List subscribers who bounced" +msgstr "" + +#: views/campaigns/view.hbs:24 +msgid "Complaints" +msgstr "" + +#: views/campaigns/view.hbs:25 +msgid "List subscribers who complained for this message" +msgstr "" + +#: views/campaigns/view.hbs:27 +msgid "List subscribers who unsubscribed after this message" +msgstr "" + +#: views/campaigns/view.hbs:28 +msgid "Opened" +msgstr "" + +#: views/campaigns/view.hbs:29 +msgid "List subscribers who opened this message" +msgstr "" + +#: views/campaigns/view.hbs:30 +msgid "Clicked" +msgstr "" + +#: views/campaigns/view.hbs:31 views/campaigns/view.hbs:68 +msgid "List subscribers who clicked on a link" +msgstr "" + +#: views/campaigns/view.hbs:32 +msgid "" +"Are you sure? This action would start sending messages to the selected list" +msgstr "" + +#: views/campaigns/view.hbs:33 +msgid "Delay sending" +msgstr "" + +#: views/campaigns/view.hbs:34 +msgid "hours" +msgstr "" + +#: views/campaigns/view.hbs:35 +msgid "minutes" +msgstr "" + +#: views/campaigns/view.hbs:36 +msgid "Send to subscribers:" +msgstr "" + +#: views/campaigns/view.hbs:37 +msgid "Are you sure? This action would reset scheduling" +msgstr "" + +#: views/campaigns/view.hbs:38 +msgid "Cancel" +msgstr "" + +#: views/campaigns/view.hbs:39 +msgid "Sending scheduled" +msgstr "" + +#: views/campaigns/view.hbs:40 views/campaigns/view.hbs:52 +msgid "Pause" +msgstr "" + +#: views/campaigns/view.hbs:41 routes/campaigns.js:264 +msgid "Sending" +msgstr "" + +#: views/campaigns/view.hbs:42 views/campaigns/view.hbs:46 +msgid "" +"Are you sure? This action would resume sending messages to the selected list" +msgstr "" + +#: views/campaigns/view.hbs:43 views/campaigns/view.hbs:47 +msgid "Are you sure? This action would reset all stats about current progress" +msgstr "" + +#: views/campaigns/view.hbs:44 +msgid "Resume" +msgstr "" + +#: views/campaigns/view.hbs:45 views/campaigns/view.hbs:49 +msgid "Reset" +msgstr "" + +#: views/campaigns/view.hbs:48 +msgid "Continue" +msgstr "" + +#: views/campaigns/view.hbs:50 +msgid "" +"All messages sent! Hit \"Continue\" if you you want to send this campaign to " +"new subscribers" +msgstr "" + +#: views/campaigns/view.hbs:51 +msgid "" +"Are you sure? This action would pause sending new entries in RSS feed as " +"email messages to the selected list" +msgstr "" + +#: views/campaigns/view.hbs:53 views/campaigns/view.hbs:57 +msgid "Campaign status:" +msgstr "" + +#: views/campaigns/view.hbs:54 +msgid "ACTIVE" +msgstr "" + +#: views/campaigns/view.hbs:55 +msgid "" +"Are you sure? This action would start sending new entries in RSS feed as " +"email messages to the selected list" +msgstr "" + +#: views/campaigns/view.hbs:56 +msgid "Activate" +msgstr "" + +#: views/campaigns/view.hbs:58 +msgid "INACTIVE" +msgstr "" + +#: views/campaigns/view.hbs:59 +msgid "" +"This is a triggered campaign. Messages are only sent to subscribers that hit " +"some trigger that invokes this campaign" +msgstr "" + +#: views/campaigns/view.hbs:60 +msgid "see more" +msgstr "" + +#: views/campaigns/view.hbs:65 +msgid "List subscribers who clicked this link" +msgstr "" + +#: views/campaigns/view.hbs:69 +msgid "" +"Clicks are counted as unique subscribers that clicked on a specific link or " +"on any link (in aggregated view)" +msgstr "" + +#: views/campaigns/view.hbs:70 +msgid "" +"If a new entry is found from campaign feed a new subcampaign is created of " +"that entry and it will be listed here" +msgstr "" + +#: views/emails/confirm-html.hbs:1 views/emails/confirm-html.hbs:2 +#: views/emails/confirm-text.hbs:1 +msgid "Please Confirm Subscription" +msgstr "Palun kinnita oma liitumissoov" + +#: views/emails/confirm-html.hbs:3 views/emails/confirm-text.hbs:2 +msgid "Yes, subscribe me to this list" +msgstr "Jah, soovin liituda selle listiga" + +#: views/emails/confirm-html.hbs:4 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"subscribed if you don't click the confirmation link above." +msgstr "" +"Kui said selle kirja kogemata, siis lihtsalt kustuta see. Sind ei lisata " +"listi, kui sa ei kliki allolevale kinnituslingile" + +#: views/emails/confirm-html.hbs:5 views/emails/confirm-text.hbs:4 +#: views/emails/subscription-confirmed-html.hbs:7 +#: views/emails/subscription-confirmed-text.hbs:7 +#: views/emails/unsubscribe-confirmed-html.hbs:5 +#: views/emails/unsubscribe-confirmed-text.hbs:5 +msgid "For questions about this list, please contact:" +msgstr "Küsimustega seoses selle listiga võta ühendust järgmisel aadressil:" + +#: views/emails/confirm-text.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"subscribed unless you click the confirmation link above." +msgstr "" + +#: views/emails/password-reset-html.hbs:1 +#: views/emails/password-reset-html.hbs:2 +#: views/emails/password-reset-text.hbs:1 +msgid "Change your password" +msgstr "" + +#: views/emails/password-reset-html.hbs:3 +#: views/emails/password-reset-text.hbs:2 +msgid "We have received a password change request for your Mailtrain account:" +msgstr "" + +#: views/emails/password-reset-html.hbs:4 +#: views/emails/password-reset-text.hbs:3 +msgid "Reset password" +msgstr "" + +#: views/emails/password-reset-html.hbs:5 +#: views/emails/password-reset-text.hbs:4 +msgid "" +"If you did not ask to change your password, then you can ignore this email " +"and your password will not be changed." +msgstr "" + +#: views/emails/rss-html.hbs:1 views/emails/stationery-html.hbs:3 +#: views/emails/stationery-text.hbs:3 +msgid "Preferences" +msgstr "" + +#: views/emails/rss-html.hbs:2 views/emails/stationery-html.hbs:4 +#: views/emails/stationery-text.hbs:4 views/lists/subscription/edit.hbs:15 +#: views/subscription/manage.hbs:12 views/subscription/unsubscribe.hbs:1 +#: views/subscription/unsubscribe.hbs:4 routes/lists.js:253 +msgid "Unsubscribe" +msgstr "" + +#: views/emails/rss-html.hbs:3 views/emails/stationery-html.hbs:5 +#: views/emails/stationery-text.hbs:5 +msgid "View this email in your browser" +msgstr "" + +#: views/emails/stationery-html.hbs:1 views/emails/stationery-text.hbs:1 +msgid "Hey [FIRST_NAME/Customer]," +msgstr "" + +#: views/emails/stationery-html.hbs:2 views/emails/stationery-text.hbs:2 +msgid "Cheers," +msgstr "" + +#: views/emails/subscription-confirmed-html.hbs:1 +#: views/emails/subscription-confirmed-text.hbs:1 +#: views/subscription/subscribed.hbs:1 +msgid "Subscription Confirmed" +msgstr "" + +#: views/emails/subscription-confirmed-html.hbs:2 +#: views/emails/subscription-confirmed-text.hbs:2 +#: views/subscription/subscribed.hbs:2 +msgid "Your subscription to our list has been confirmed." +msgstr "" + +#: views/emails/subscription-confirmed-html.hbs:3 +#: views/emails/subscription-confirmed-text.hbs:3 +msgid "If you want to modify your subscription then you can:" +msgstr "" + +#: views/emails/subscription-confirmed-html.hbs:4 +#: views/emails/subscription-confirmed-text.hbs:4 +#: views/subscription/subscribed.hbs:6 +msgid "manage your preferences" +msgstr "" + +#: views/emails/subscription-confirmed-html.hbs:5 +#: views/emails/subscription-confirmed-text.hbs:5 +#: views/subscription/subscribed.hbs:5 +msgid "or" +msgstr "" + +#: views/emails/subscription-confirmed-html.hbs:6 +#: views/emails/subscription-confirmed-text.hbs:6 +msgid "unsubscribe here" +msgstr "" + +#: views/emails/unsubscribe-confirmed-html.hbs:1 +#: views/emails/unsubscribe-confirmed-text.hbs:1 +msgid "You are now unsubscribed" +msgstr "" + +#: views/emails/unsubscribe-confirmed-html.hbs:2 +#: views/emails/unsubscribe-confirmed-text.hbs:2 +msgid "We have removed your email address from our list." +msgstr "" + +#: views/emails/unsubscribe-confirmed-html.hbs:3 +#: views/emails/unsubscribe-confirmed-text.hbs:3 +msgid "If you unsubscribed by mistake, you can re-subscribe at:" +msgstr "" + +#: views/emails/unsubscribe-confirmed-html.hbs:4 +#: views/emails/unsubscribe-confirmed-text.hbs:4 +#: views/lists/subscription/add.hbs:16 routes/lists.js:253 +msgid "Subscribe" +msgstr "" + #: views/index.hbs:1 msgid "Official Mailtrain Partners" msgstr "Ametlikud Mailtraini partnerid" -#: views/layout.hbs:1 routes/index.js:11 -msgid "Self hosted email newsletter app" -msgstr "Enda majutatud e-posti uudiskirjade rakendus" +#: views/lists/create.hbs:2 views/lists/edit.hbs:2 +#: views/lists/fields/create.hbs:2 views/lists/fields/edit.hbs:2 +#: views/lists/fields/fields.hbs:2 views/lists/lists.hbs:2 +#: views/lists/lists.hbs:4 views/lists/segments/create.hbs:2 +#: views/lists/segments/edit.hbs:2 views/lists/segments/rule-configure.hbs:2 +#: views/lists/segments/rule-create.hbs:2 views/lists/segments/rule-edit.hbs:2 +#: views/lists/segments/segments.hbs:2 views/lists/segments/view.hbs:2 +#: views/lists/subscription/add.hbs:2 views/lists/subscription/edit.hbs:2 +#: views/lists/subscription/import-failed.hbs:2 +#: views/lists/subscription/import-preview.hbs:2 +#: views/lists/subscription/import.hbs:2 views/lists/view.hbs:2 +#: lib/tools.js:111 +msgid "Lists" +msgstr "" -#: routes/settings.js:23 +#: views/lists/create.hbs:3 views/lists/create.hbs:4 views/lists/create.hbs:9 +#: views/lists/lists.hbs:3 +msgid "Create List" +msgstr "" + +#: views/lists/create.hbs:6 views/lists/edit.hbs:7 +msgid "List Name" +msgstr "" + +#: views/lists/edit.hbs:3 views/lists/edit.hbs:4 +msgid "Edit List" +msgstr "" + +#: views/lists/edit.hbs:5 +msgid "View List" +msgstr "" + +#: views/lists/edit.hbs:8 +msgid "List ID" +msgstr "" + +#: views/lists/edit.hbs:9 +msgid "This is the list ID displayed to the subscribers" +msgstr "" + +#: views/lists/edit.hbs:12 +msgid "Delete List" +msgstr "" + +#: views/lists/fields/create.hbs:3 views/lists/fields/edit.hbs:3 +#: views/lists/fields/fields.hbs:3 views/lists/fields/fields.hbs:5 +msgid "Custom Fields" +msgstr "" + +#: views/lists/fields/create.hbs:4 +msgid "Create Field" +msgstr "" + +#: views/lists/fields/create.hbs:5 views/lists/fields/fields.hbs:4 +msgid "Create Custom Field" +msgstr "" + +#: views/lists/fields/create.hbs:6 views/lists/fields/create.hbs:7 +#: views/lists/fields/edit.hbs:7 views/lists/fields/edit.hbs:8 +msgid "Field Name" +msgstr "" + +#: views/lists/fields/create.hbs:8 views/lists/fields/edit.hbs:9 +msgid "Field Type" +msgstr "" + +#: views/lists/fields/create.hbs:9 views/lists/fields/edit.hbs:10 +#: lib/models/fields.js:17 +msgid "Text" +msgstr "" + +#: views/lists/fields/create.hbs:10 views/lists/fields/edit.hbs:11 +#: lib/models/fields.js:21 +msgid "Number" +msgstr "" + +#: views/lists/fields/create.hbs:11 views/lists/fields/edit.hbs:12 +#: lib/models/fields.js:18 +msgid "Website" +msgstr "" + +#: views/lists/fields/create.hbs:12 views/lists/fields/edit.hbs:13 +#: lib/models/fields.js:20 +msgid "GPG Public Key" +msgstr "" + +#: views/lists/fields/create.hbs:13 views/lists/fields/edit.hbs:14 +#: lib/models/fields.js:19 +msgid "Multi-line text" +msgstr "" + +#: views/lists/fields/create.hbs:14 views/lists/fields/edit.hbs:15 +msgid "JSON" +msgstr "" + +#: views/lists/fields/create.hbs:15 views/lists/fields/edit.hbs:16 +msgid "Date" +msgstr "" + +#: views/lists/fields/create.hbs:16 views/lists/fields/edit.hbs:17 +msgid "Date (MM/DD/YYYY)" +msgstr "" + +#: views/lists/fields/create.hbs:17 views/lists/fields/edit.hbs:18 +#: lib/models/fields.js:26 +msgid "Date (DD/MM/YYYY)" +msgstr "" + +#: views/lists/fields/create.hbs:18 views/lists/fields/edit.hbs:19 +msgid "Birthday" +msgstr "" + +#: views/lists/fields/create.hbs:19 views/lists/fields/edit.hbs:20 +#: lib/models/fields.js:27 +msgid "Birthday (MM/DD)" +msgstr "" + +#: views/lists/fields/create.hbs:20 views/lists/fields/edit.hbs:21 +#: lib/models/fields.js:28 +msgid "Birthday (DD/MM)" +msgstr "" + +#: views/lists/fields/create.hbs:21 views/lists/fields/edit.hbs:22 +msgid "Grouped" +msgstr "" + +#: views/lists/fields/create.hbs:22 views/lists/fields/edit.hbs:23 +msgid "Drop Downs" +msgstr "" + +#: views/lists/fields/create.hbs:23 views/lists/fields/edit.hbs:24 +#: lib/models/fields.js:22 +msgid "Radio Buttons" +msgstr "" + +#: views/lists/fields/create.hbs:24 views/lists/fields/edit.hbs:25 +#: lib/models/fields.js:23 +msgid "Checkboxes" +msgstr "" + +#: views/lists/fields/create.hbs:25 views/lists/fields/edit.hbs:26 +msgid "Option for a group value" +msgstr "" + +#: views/lists/fields/create.hbs:26 views/lists/fields/edit.hbs:27 +msgid "Group" +msgstr "" + +#: views/lists/fields/create.hbs:28 views/lists/fields/edit.hbs:29 +msgid "Required for group options" +msgstr "" + +#: views/lists/fields/create.hbs:29 views/lists/fields/create.hbs:30 +#: views/lists/fields/edit.hbs:35 views/lists/fields/edit.hbs:36 +#: views/lists/fields/fields.hbs:9 +msgid "Default merge tag value" +msgstr "" + +#: views/lists/fields/create.hbs:32 views/lists/fields/edit.hbs:34 +msgid "" +"For group elements like checkboxes you can control the appearance of the " +"merge tag with an optional template. The template uses handlebars syntax and " +"you can find all values from {{values}} array, for example " +"{{#each values}} {{this}} {{/each}}. If template is not defined " +"then multiple values are joined with commas. You can also use this template " +"to render JSON values (if the JSON is an array then the array is exposed as " +"values, otherwise you can access the JSON keys directly)." +msgstr "" + +#: views/lists/fields/create.hbs:33 views/lists/fields/edit.hbs:37 +msgid "Visible" +msgstr "" + +#: views/lists/fields/create.hbs:34 +msgid "Add Field" +msgstr "" + +#: views/lists/fields/edit.hbs:4 +msgid "Edit Field" +msgstr "" + +#: views/lists/fields/edit.hbs:5 +msgid "Edit Custom Field" +msgstr "" + +#: views/lists/fields/edit.hbs:6 +msgid "Back to fields" +msgstr "" + +#: views/lists/fields/edit.hbs:30 views/lists/fields/fields.hbs:8 +#: views/partials/merge-tag-reference.hbs:3 +msgid "Merge tag" +msgstr "" + +#: views/lists/fields/edit.hbs:31 +msgid "Merge Tag" +msgstr "" + +#: views/lists/fields/edit.hbs:32 +msgid "Put this tag in your content:" +msgstr "" + +#: views/lists/fields/edit.hbs:38 +msgid "Delete Field" +msgstr "" + +#: views/lists/fields/fields.hbs:7 +msgid "Type" +msgstr "" + +#: views/lists/fields/fields.hbs:10 views/lists/fields/fields.hbs:11 +#: views/lists/lists.hbs:9 views/lists/segments/segments.hbs:8 +#: views/lists/segments/view.hbs:12 views/templates/templates.hbs:7 +#: routes/campaigns.js:287 routes/campaigns.js:576 routes/campaigns.js:626 +#: routes/lists.js:222 routes/triggers.js:297 +msgid "Edit" +msgstr "" + +#: views/lists/lists.hbs:6 +msgid "ID" +msgstr "" + +#: views/lists/lists.hbs:7 +msgid "Subscribers" +msgstr "" + +#: views/lists/segments/create.hbs:3 views/lists/segments/edit.hbs:3 +#: views/lists/segments/rule-configure.hbs:3 +#: views/lists/segments/rule-create.hbs:3 views/lists/segments/rule-edit.hbs:3 +#: views/lists/segments/segments.hbs:3 views/lists/segments/segments.hbs:5 +#: views/lists/segments/view.hbs:3 +msgid "Segments" +msgstr "" + +#: views/lists/segments/create.hbs:4 views/lists/segments/create.hbs:5 +#: views/lists/segments/rule-configure.hbs:4 +#: views/lists/segments/rule-create.hbs:4 views/lists/segments/rule-edit.hbs:4 +#: views/lists/segments/segments.hbs:4 +msgid "Create Segment" +msgstr "" + +#: views/lists/segments/create.hbs:6 views/lists/segments/create.hbs:7 +#: views/lists/segments/edit.hbs:7 views/lists/segments/edit.hbs:8 +msgid "Segment Name" +msgstr "" + +#: views/lists/segments/create.hbs:8 views/lists/segments/edit.hbs:9 +msgid "Rule match" +msgstr "" + +#: views/lists/segments/create.hbs:10 views/lists/segments/edit.hbs:11 +msgid "All rules must match" +msgstr "" + +#: views/lists/segments/create.hbs:11 views/lists/segments/edit.hbs:12 +msgid "Any rule can match" +msgstr "" + +#: views/lists/segments/create.hbs:12 +msgid "Add Segment" +msgstr "" + +#: views/lists/segments/edit.hbs:4 views/lists/segments/edit.hbs:5 +#: views/lists/segments/view.hbs:6 +msgid "Edit Segment" +msgstr "" + +#: views/lists/segments/edit.hbs:6 +msgid "Back to segments" +msgstr "" + +#: views/lists/segments/edit.hbs:13 +msgid "Delete Segment" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:5 +#: views/lists/segments/rule-create.hbs:5 views/lists/segments/rule-edit.hbs:5 +#: views/lists/segments/view.hbs:4 +msgid "Create Rule" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:6 +#: views/lists/segments/rule-create.hbs:6 views/lists/segments/rule-edit.hbs:6 +#: views/lists/segments/view.hbs:10 +msgid "Rule" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:7 +#: views/lists/segments/rule-configure.hbs:8 +#: views/lists/segments/rule-configure.hbs:10 +#: views/lists/segments/rule-configure.hbs:13 +#: views/lists/segments/rule-configure.hbs:25 +#: views/lists/segments/rule-configure.hbs:30 +#: views/lists/segments/rule-edit.hbs:7 views/lists/segments/rule-edit.hbs:8 +#: views/lists/segments/rule-edit.hbs:10 views/lists/segments/rule-edit.hbs:15 +#: views/lists/segments/rule-edit.hbs:29 views/lists/segments/rule-edit.hbs:34 +#: views/lists/segments/view.hbs:11 +msgid "Value" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:9 +#: views/lists/segments/rule-edit.hbs:9 +msgid "" +"Use % for wildcard character, e.g. \"%test\" to match all values that end " +"with \"test\"" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:11 +#: views/lists/segments/rule-configure.hbs:14 +#: views/lists/segments/rule-configure.hbs:26 +#: views/lists/segments/rule-edit.hbs:11 views/lists/segments/rule-edit.hbs:16 +#: views/lists/segments/rule-edit.hbs:30 +msgid "Use exact match" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:12 +#: views/lists/segments/rule-configure.hbs:15 +#: views/lists/segments/rule-configure.hbs:27 +#: views/lists/segments/rule-edit.hbs:12 views/lists/segments/rule-edit.hbs:17 +#: views/lists/segments/rule-edit.hbs:31 +msgid "Use range match" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:16 +#: views/lists/segments/rule-edit.hbs:20 +msgid "Use relative range match" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:17 +#: views/lists/segments/rule-configure.hbs:28 +#: views/lists/segments/rule-edit.hbs:13 views/lists/segments/rule-edit.hbs:18 +#: views/lists/segments/rule-edit.hbs:21 views/lists/segments/rule-edit.hbs:32 +msgid "From" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:18 +#: views/lists/segments/rule-configure.hbs:22 +#: views/lists/segments/rule-edit.hbs:22 views/lists/segments/rule-edit.hbs:26 +msgid "days" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:19 +#: views/lists/segments/rule-configure.hbs:23 +#: views/lists/segments/rule-edit.hbs:23 views/lists/segments/rule-edit.hbs:27 +msgid "before today" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:20 +#: views/lists/segments/rule-configure.hbs:24 +#: views/lists/segments/rule-edit.hbs:24 views/lists/segments/rule-edit.hbs:28 +msgid "after today" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:21 +#: views/lists/segments/rule-configure.hbs:29 +#: views/lists/segments/rule-edit.hbs:14 views/lists/segments/rule-edit.hbs:19 +#: views/lists/segments/rule-edit.hbs:25 views/lists/segments/rule-edit.hbs:33 +msgid "to" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:31 +#: views/lists/segments/rule-edit.hbs:35 lib/models/segments.js:156 +#: lib/models/segments.js:418 +msgid "Selected" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:32 +#: views/lists/segments/rule-edit.hbs:36 lib/models/segments.js:156 +#: lib/models/segments.js:418 +msgid "Not selected" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:33 +msgid "Add Rule" +msgstr "" + +#: views/lists/segments/rule-create.hbs:8 +#: views/lists/subscription/import.hbs:12 +msgid "Next" +msgstr "" + +#: views/lists/segments/rule-edit.hbs:37 +msgid "Delete Rule" +msgstr "" + +#: views/lists/segments/segments.hbs:7 +msgid "Match" +msgstr "" + +#: views/lists/segments/view.hbs:5 +msgid "Segment" +msgstr "" + +#: views/lists/segments/view.hbs:7 +msgid "Match rules" +msgstr "" + +#: views/lists/segments/view.hbs:8 +msgid "Matching subscribers" +msgstr "" + +#: views/lists/segments/view.hbs:9 +msgid "show" +msgstr "" + +#: views/lists/subscription/add.hbs:3 views/lists/subscription/add.hbs:4 +msgid "Add subscriber" +msgstr "" + +#: views/lists/subscription/add.hbs:5 views/subscription/manage.hbs:2 +#: views/subscription/subscribe.hbs:3 +msgid "Email Address" +msgstr "" + +#: views/lists/subscription/add.hbs:8 views/lists/subscription/edit.hbs:9 +#: views/settings.hbs:82 views/settings.hbs:97 views/subscription/manage.hbs:7 +#: views/subscription/subscribe.hbs:7 +msgid "Begins with" +msgstr "" + +#: views/lists/subscription/add.hbs:9 views/lists/subscription/edit.hbs:10 +msgid "" +"Insert a GPG public key that will be used to encrypt messages sent this " +"subscriber" +msgstr "" + +#: views/lists/subscription/add.hbs:11 views/lists/subscription/edit.hbs:12 +#: views/lists/subscription/import-preview.hbs:9 +msgid "Timezone" +msgstr "" + +#: views/lists/subscription/add.hbs:13 views/lists/subscription/edit.hbs:13 +msgid "Test user?" +msgstr "" + +#: views/lists/subscription/add.hbs:14 views/lists/subscription/edit.hbs:14 +msgid "" +"If checked then this subscription can be used for previewing campaign " +"messages" +msgstr "" + +#: views/lists/subscription/add.hbs:15 +msgid "" +"This person will not receive a confirmation email so make sure that you have " +"permission to email them." +msgstr "" + +#: views/lists/subscription/edit.hbs:3 views/lists/subscription/edit.hbs:4 +msgid "Edit subscriber" +msgstr "" + +#: views/lists/subscription/edit.hbs:5 +#: views/lists/subscription/import-failed.hbs:5 +msgid "Back to list" +msgstr "" + +#: views/lists/subscription/edit.hbs:6 +#: views/lists/subscription/import-preview.hbs:6 +#: views/subscription/unsubscribe.hbs:3 lib/helpers.js:26 +#: lib/models/segments.js:11 +msgid "Email address" +msgstr "" + +#: views/lists/subscription/edit.hbs:16 +msgid "Delete Subscription" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:3 +msgid "Import status" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:4 +msgid "Failed addresses" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:6 +msgid "see here" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:10 +msgid "Fail reason" +msgstr "" + +#: views/lists/subscription/import-preview.hbs:3 +#: views/lists/subscription/import-preview.hbs:4 +#: views/lists/subscription/import.hbs:3 views/lists/subscription/import.hbs:4 +msgid "Import subscribers" +msgstr "" + +#: views/lists/subscription/import-preview.hbs:10 +msgid "Example" +msgstr "" + +#: views/lists/subscription/import-preview.hbs:11 +msgid "Start import" +msgstr "" + +#: views/lists/subscription/import.hbs:5 +msgid "CSV File" +msgstr "" + +#: views/lists/subscription/import.hbs:6 +msgid "CSV delimiter" +msgstr "" + +#: views/lists/subscription/import.hbs:7 +msgid "Categorize the imported subscribers as" +msgstr "" + +#: views/lists/subscription/import.hbs:8 routes/lists.js:171 +msgid "Subscribed" +msgstr "" + +#: views/lists/subscription/import.hbs:9 +msgid "Regular subscriber addresses" +msgstr "" + +#: views/lists/subscription/import.hbs:11 +msgid "Suppressed emails that will be unsubscribed from your list" +msgstr "" + +#: views/partials/codeeditor.hbs:1 views/partials/summernote.hbs:1 +msgid "Template content (HTML)" +msgstr "" + +#: views/partials/html-preview.hbs:1 +msgid "Toggle HTML preview" +msgstr "" + +#: views/partials/merge-tag-reference.hbs:1 +msgid "Merge tag reference" +msgstr "" + +#: views/partials/merge-tag-reference.hbs:2 +msgid "" +"Merge tags are tags that are replaced before sending out the message. The " +"format of the merge tag is the following: [TAG_NAME] or " +"[TAG_NAME/fallback] where fallback is an optional " +"text value used when TAG_NAME is empty." +msgstr "" + +#: views/partials/plaintext.hbs:1 +msgid "Template content (plaintext)" +msgstr "" + +#: views/settings.hbs:2 views/settings.hbs:3 +msgid "Settings" +msgstr "" + +#: views/settings.hbs:5 +msgid "Service Address (URL)" +msgstr "" + +#: views/settings.hbs:6 +msgid "Enter the URL this service can be reached from" +msgstr "" + +#: views/settings.hbs:7 +msgid "Admin Email" +msgstr "" + +#: views/settings.hbs:8 +msgid "" +"Enter the email address that will be used as \"from\" for system messages" +msgstr "" + +#: views/settings.hbs:9 +msgid "Disable WYSIWYG editor" +msgstr "" + +#: views/settings.hbs:10 +msgid "If checked then message editor displays HTML code without the preview" +msgstr "" + +#: views/settings.hbs:11 +msgid "Disable subscription confirmation messages" +msgstr "" + +#: views/settings.hbs:12 +msgid "" +"If checked then do not send a confirmation message that states the " +"subscriber is now subscribed or unsubscribed. This does not disable double " +"opt-in messages." +msgstr "" + +#: views/settings.hbs:13 +msgid "Tracking ID" +msgstr "" + +#: views/settings.hbs:14 +msgid "Enter Google Analytics tracking code" +msgstr "" + +#: views/settings.hbs:15 +msgid "Frontpage shout out" +msgstr "" + +#: views/settings.hbs:16 +msgid "HTML code shown in the front page header section" +msgstr "" + +#: views/settings.hbs:17 +msgid "Campaign defaults" +msgstr "" + +#: views/settings.hbs:18 +msgid "Sender name" +msgstr "" + +#: views/settings.hbs:19 +msgid "Sender name, eg. My Awesome Company Ltd." +msgstr "" + +#: views/settings.hbs:20 +msgid "Default address" +msgstr "" + +#: views/settings.hbs:21 +msgid "" +"Contact address to provide, eg. 1234 Main Street, Anywhere, MA 01234, USA" +msgstr "" + +#: views/settings.hbs:22 +msgid "Default \"from name\"" +msgstr "" + +#: views/settings.hbs:24 +msgid "Default \"from\" email" +msgstr "" + +#: views/settings.hbs:26 +msgid "Default \"subject line\"" +msgstr "" + +#: views/settings.hbs:28 +msgid "Default homepage (URL)" +msgstr "" + +#: views/settings.hbs:29 +msgid "URL to redirect the subscribed users to, eg. http://example.com/" +msgstr "" + +#: views/settings.hbs:30 +msgid "Mailer Settings" +msgstr "" + +#: views/settings.hbs:31 +msgid "These settings are required to send out e-mail messages" +msgstr "" + +#: views/settings.hbs:32 +msgid "SMTP" +msgstr "" + +#: views/settings.hbs:33 +msgid "AWS SES" +msgstr "" + +#: views/settings.hbs:34 +msgid "Use SMTP for sending mail" +msgstr "" + +#: views/settings.hbs:35 +msgid "Hostname" +msgstr "" + +#: views/settings.hbs:36 +msgid "Port" +msgstr "" + +#: views/settings.hbs:37 +msgid "Port, eg. 465. Autodetected if left blank" +msgstr "" + +#: views/settings.hbs:38 +msgid "Encryption" +msgstr "" + +#: views/settings.hbs:39 +msgid "Disable SMTP authentication" +msgstr "" + +#: views/settings.hbs:40 +msgid "Username" +msgstr "" + +#: views/settings.hbs:41 +msgid "Username, eg. myaccount@example.com" +msgstr "" + +#: views/settings.hbs:42 views/settings.hbs:43 +msgid "Password" +msgstr "" + +#: views/settings.hbs:44 +msgid "Use SES API for sending mail" +msgstr "" + +#: views/settings.hbs:45 +msgid "Access Key" +msgstr "" + +#: views/settings.hbs:46 +msgid "AWS Access Key Id" +msgstr "" + +#: views/settings.hbs:47 +msgid "Secret Key" +msgstr "" + +#: views/settings.hbs:48 +msgid "AWS Secret Access Key" +msgstr "" + +#: views/settings.hbs:49 +msgid "Region" +msgstr "" + +#: views/settings.hbs:50 +msgid "Checking" +msgstr "" + +#: views/settings.hbs:51 +msgid "Check Mailer config" +msgstr "" + +#: views/settings.hbs:52 +msgid "Don't have an SMTP account yet? Create a free SendPulse account" +msgstr "" + +#: views/settings.hbs:53 +msgid "here" +msgstr "" + +#: views/settings.hbs:54 +msgid "Advanced Mailer settings" +msgstr "" + +#: views/settings.hbs:55 +msgid "Log SMTP transactions" +msgstr "" + +#: views/settings.hbs:56 +msgid "Allow self-signed certificates" +msgstr "" + +#: views/settings.hbs:57 +msgid "Max connections" +msgstr "" + +#: views/settings.hbs:58 +msgid "The count of max connections, eg. 10" +msgstr "" + +#: views/settings.hbs:59 +msgid "" +"The count of maximum simultaneous connections to make against the SMTP " +"server (defaults to 5). This limit is per sending process." +msgstr "" + +#: views/settings.hbs:60 +msgid "Max messages" +msgstr "" + +#: views/settings.hbs:61 +msgid "The count of max messages, eg. 100" +msgstr "" + +#: views/settings.hbs:62 +msgid "" +"he number of messages to send through a single connection before the " +"connection is closed and reopened (defaults to 100)" +msgstr "" + +#: views/settings.hbs:63 +msgid "Throttling" +msgstr "" + +#: views/settings.hbs:64 +msgid "Messages per hour eg. 1000" +msgstr "" + +#: views/settings.hbs:65 +msgid "" +"Maximum number of messages to send in an hour. Leave empty or zero for no " +"throttling. If your provider uses a different speed limit (messages/minute " +"or messages/second) then convert this limit into messages/hour (1m/s => " +"3600m/h). This limit is per sending process." +msgstr "" + +#: views/settings.hbs:66 +msgid "VERP bounce handling" +msgstr "" + +#: views/settings.hbs:67 +msgid "" +"Mailtrain is able to use VERP based routing to detect bounces. In this case " +"the message is sent to the recipient using a custom VERP address as the " +"return path of the message. If the message is not accepted a bounce email is " +"sent to this special VERP address and thus a bounce is detected." +msgstr "" + +#: views/settings.hbs:68 +msgid "" +"To get VERP working you need to set up a DNS MX record that points to your " +"Mailtrain hostname. You must also ensure that Mailtrain VERP interface is " +"available from port 25 of your server (port 25 usually requires root user " +"privileges). This way if anyone tries to send email to someuser@verp-" +"hostname then the email should end up to this server." +msgstr "" + +#: views/settings.hbs:69 +msgid "" +"VERP usually only works if you are using your own SMTP server. Regular relay " +"services (SES, SparkPost, Gmail etc.) tend to remove the VERP address from " +"the message." +msgstr "" + +#: views/settings.hbs:70 +msgid "Use VERP to catch bounces" +msgstr "" + +#: views/settings.hbs:71 +msgid "Server hostname" +msgstr "" + +#: views/settings.hbs:72 +msgid "The VERP server hostname, eg. bounces.example.com" +msgstr "" + +#: views/settings.hbs:73 +msgid "" +"VERP bounce handling server hostname. This hostname is used in the SMTP " +"envelope FROM address and the MX DNS records should point to this server" +msgstr "" + +#: views/settings.hbs:74 +msgid "" +"VERP bounce handling server is not enabled. Modify your server configuration " +"file and restart server to enable it" +msgstr "" + +#: views/settings.hbs:75 +msgid "GPG Signing" +msgstr "" + +#: views/settings.hbs:76 +msgid "" +"Only messages that are encrypted can be signed. Subsribers who have not set " +"up a GPG public key in their profile receive normal email messages. Users " +"with GPG key set receive encrypted messages and if you have signing key also " +"set, the messages are signed with this key." +msgstr "" + +#: views/settings.hbs:77 +msgid "" +"Do not use sensitive keys here. The private key and passphrase are not " +"encrypted in the database." +msgstr "" + +#: views/settings.hbs:78 +msgid "Private Key Passphrase" +msgstr "" + +#: views/settings.hbs:79 +msgid "Passphrase for the key if set" +msgstr "" + +#: views/settings.hbs:80 +msgid "Only fill this if your private key is encrypted with a passphrase" +msgstr "" + +#: views/settings.hbs:81 +msgid "GPG Private Key" +msgstr "" + +#: views/settings.hbs:83 +msgid "" +"This value is optional. If you do not provide a private key GPG encrypted " +"messages are sent without signing." +msgstr "" + +#: views/settings.hbs:84 +msgid "DKIM Signing by ZoneMTA" +msgstr "" + +#: views/settings.hbs:85 +msgid "" +"If you are using ZoneMTA then Mailtrain can provide a DKIM key for signing " +"all outgoing messages. Other services usually provide their own means to " +"DKIM sign your messages" +msgstr "" + +#: views/settings.hbs:86 +msgid "" +"Do not use sensitive keys here. The private key is not encrypted in the " +"database." +msgstr "" + +#: views/settings.hbs:87 +msgid "ZoneMTA DKIM API Key" +msgstr "" + +#: views/settings.hbs:88 +msgid "Some secret value" +msgstr "" + +#: views/settings.hbs:89 +msgid "" +"Secret value known to ZoneMTA for requesting DKIM key information. If this " +"value was generated by the Mailtrain installation script then you can keep " +"it as it is" +msgstr "" + +#: views/settings.hbs:90 +msgid "DKIM domain" +msgstr "" + +#: views/settings.hbs:91 +msgid "Domain name for the DKIM key" +msgstr "" + +#: views/settings.hbs:92 +msgid "Leave blank to use the sender email address domain" +msgstr "" + +#: views/settings.hbs:93 views/settings.hbs:94 +msgid "DKIM key selector" +msgstr "" + +#: views/settings.hbs:95 +msgid "Signing is disabled without a valid selector value" +msgstr "" + +#: views/settings.hbs:96 +msgid "DKIM Private Key" +msgstr "" + +#: views/settings.hbs:98 +msgid "" +"This value is optional. If you do not provide a private key then messages " +"are not signed." +msgstr "" + +#: views/subscription/confirm-notice.hbs:1 views/subscription/subscribe.hbs:1 +msgid "Warning!" +msgstr "" + +#: views/subscription/confirm-notice.hbs:2 +msgid "If JavaScript was not enabled then no confirmation message was sent" +msgstr "" + +#: views/subscription/confirm-notice.hbs:3 +msgid "Almost finished." +msgstr "" + +#: views/subscription/confirm-notice.hbs:4 +msgid "" +"We need to confirm your email address. To complete the subscription process, " +"please click the link in the email we just sent you." +msgstr "" + +#: views/subscription/confirm-notice.hbs:5 +#: views/subscription/unsubscribe-notice.hbs:3 +#: views/subscription/updated-notice.hbs:3 +msgid "return to our website" +msgstr "" + +#: views/subscription/manage-address.hbs:1 +msgid "Update your Email Address" +msgstr "" + +#: views/subscription/manage-address.hbs:2 +msgid "Existing Email Address" +msgstr "" + +#: views/subscription/manage-address.hbs:3 +msgid "New Email Address" +msgstr "" + +#: views/subscription/manage-address.hbs:4 +msgid "Your new email address" +msgstr "" + +#: views/subscription/manage-address.hbs:5 +msgid "" +"You will receive a confirmation request to your new email address that you " +"need to accept before your email is actually changed" +msgstr "" + +#: views/subscription/manage-address.hbs:6 +msgid "Update Email Address" +msgstr "" + +#: views/subscription/manage.hbs:1 +msgid "Update your preferences" +msgstr "" + +#: views/subscription/manage.hbs:3 +msgid "want to change it?" +msgstr "" + +#: views/subscription/manage.hbs:6 views/subscription/subscribe.hbs:6 +msgid "Download signature verification key" +msgstr "" + +#: views/subscription/manage.hbs:8 views/subscription/subscribe.hbs:8 +msgid "" +"Insert your GPG public key here to encrypt messages sent to your address" +msgstr "" + +#: views/subscription/manage.hbs:9 views/subscription/subscribe.hbs:9 +msgid "optional" +msgstr "" + +#: views/subscription/manage.hbs:11 +msgid "Update Profile" +msgstr "" + +#: views/subscription/subscribe.hbs:2 +msgid "JavaScript must be enabled in order for the subscription form to work" +msgstr "" + +#: views/subscription/subscribe.hbs:11 +msgid "Subscribe to list" +msgstr "" + +#: views/subscription/subscribed.hbs:3 +msgid "Thank you for subscribing!" +msgstr "" + +#: views/subscription/subscribed.hbs:4 +msgid "continue to our website" +msgstr "" + +#: views/subscription/unsubscribe-notice.hbs:1 +msgid "Unsubscribe Successful" +msgstr "" + +#: views/subscription/unsubscribe-notice.hbs:2 +msgid "You have been removed from:" +msgstr "" + +#: views/subscription/unsubscribe.hbs:2 +msgid "Enter your email address to unsubscribe from:" +msgstr "" + +#: views/subscription/updated-notice.hbs:1 +msgid "Profile Updated" +msgstr "" + +#: views/subscription/updated-notice.hbs:2 +msgid "Your profile information has been updated." +msgstr "" + +#: views/templates/create.hbs:2 views/templates/edit.hbs:2 +#: views/templates/templates.hbs:2 views/templates/templates.hbs:4 +#: lib/tools.js:115 +msgid "Templates" +msgstr "" + +#: views/templates/create.hbs:3 views/templates/create.hbs:4 +#: views/templates/create.hbs:12 views/templates/templates.hbs:3 +msgid "Create Template" +msgstr "" + +#: views/templates/create.hbs:5 views/templates/edit.hbs:6 +msgid "Template name" +msgstr "" + +#: views/templates/create.hbs:6 views/templates/edit.hbs:7 +msgid "Name for this template, eg. Newsletter" +msgstr "" + +#: views/templates/create.hbs:7 +msgid "HTML Editor" +msgstr "" + +#: views/templates/create.hbs:10 views/templates/edit.hbs:9 +msgid "Optional comments about this template" +msgstr "" + +#: views/templates/edit.hbs:3 views/templates/edit.hbs:4 +msgid "Edit Template" +msgstr "" + +#: views/templates/edit.hbs:5 +msgid "Back to templates" +msgstr "" + +#: views/templates/edit.hbs:11 +msgid "Delete Template" +msgstr "" + +#: lib/feed.js:31 +msgid "Bad status code %s" +msgstr "" + +#: lib/helpers.js:17 +msgid "URL that points to the unsubscribe page" +msgstr "" + +#: lib/helpers.js:20 +msgid "URL that points to the preferences page of the subscriber" +msgstr "" + +#: lib/helpers.js:23 +msgid "URL to preview the message in a browser" +msgstr "" + +#: lib/helpers.js:29 lib/models/segments.js:31 +msgid "First name" +msgstr "" + +#: lib/helpers.js:32 lib/models/segments.js:35 +msgid "Last name" +msgstr "" + +#: lib/helpers.js:35 +msgid "Full name (first and last name combined)" +msgstr "" + +#: lib/helpers.js:38 +msgid "Unique ID that identifies the recipient" +msgstr "" + +#: lib/helpers.js:41 +msgid "Unique ID that identifies the list used for this campaign" +msgstr "" + +#: lib/helpers.js:44 +msgid "Unique ID that identifies current campaign" +msgstr "" + +#: lib/mailer.js:215 +msgid "Invalid mail transport" +msgstr "Vigane maili transport" + +#: lib/models/campaigns.js:271 lib/models/campaigns.js:298 +#: lib/models/campaigns.js:371 lib/models/campaigns.js:494 +#: lib/models/campaigns.js:752 lib/models/campaigns.js:881 +msgid "Missing Campaign ID" +msgstr "" + +#: lib/models/campaigns.js:407 +msgid "Emtpy or too large attahcment" +msgstr "" + +#: lib/models/campaigns.js:573 lib/models/campaigns.js:761 +msgid "Campaign Name must be set" +msgstr "" + +#: lib/models/campaigns.js:577 +msgid "RSS URL must be set and needs to be a valid URL" +msgstr "" + +#: lib/models/campaigns.js:730 +msgid "Selected template not found" +msgstr "" + +#: lib/models/campaigns.js:1082 +msgid "Invalid or missing message ID" +msgstr "" + +#: lib/models/fields.js:24 +msgid "Drop Down" +msgstr "" + +#: lib/models/fields.js:25 +msgid "Date (MM/DD/YYY)" +msgstr "" + +#: lib/models/fields.js:29 +msgid "JSON value for custom rendering" +msgstr "" + +#: lib/models/fields.js:30 +msgid "Option" +msgstr "" + +#: lib/models/fields.js:53 lib/models/fields.js:98 lib/models/fields.js:123 +#: lib/models/lists.js:81 lib/models/lists.js:175 lib/models/lists.js:212 +#: lib/models/segments.js:43 lib/models/segments.js:176 +#: lib/models/subscriptions.js:88 lib/models/subscriptions.js:640 +#: lib/models/subscriptions.js:703 lib/models/subscriptions.js:889 +#: lib/models/subscriptions.js:992 lib/models/subscriptions.js:1046 +#: lib/models/subscriptions.js:1109 lib/models/subscriptions.js:1152 +msgid "Missing List ID" +msgstr "" + +#: lib/models/fields.js:129 +msgid "Option field requires a group to be selected" +msgstr "" + +#: lib/models/fields.js:149 lib/models/fields.js:199 +msgid "Missing Field ID" +msgstr "" + +#: lib/models/fields.js:153 lib/models/segments.js:185 +#: lib/models/segments.js:225 +msgid "Field Name must be set" +msgstr "" + +#: lib/models/fields.js:216 +msgid "Custom field not found" +msgstr "" + +#: lib/models/fields.js:289 +msgid "Unknown column type %s" +msgstr "" + +#: lib/models/fields.js:293 +msgid "Missing column name" +msgstr "" + +#: lib/models/fields.js:297 +msgid "Missing list ID" +msgstr "" + +#: lib/models/fields.js:305 +msgid "Provided List ID not found" +msgstr "" + +#: lib/models/links.js:328 routes/campaigns.js:541 routes/campaigns.js:590 +#: services/sender.js:304 +msgid "Campaign not found" +msgstr "" + +#: lib/models/links.js:336 routes/lists.js:146 services/sender.js:311 +msgid "List not found" +msgstr "" + +#: lib/models/links.js:344 +msgid "Subscription not found" +msgstr "" + +#: lib/models/lists.js:117 lib/models/lists.js:179 +msgid "List Name must be set" +msgstr "" + +#: lib/models/lists.js:241 +msgid "Missing List CID" +msgstr "" + +#: lib/models/segments.js:15 +msgid "Signup country" +msgstr "" + +#: lib/models/segments.js:19 lib/models/triggers.js:11 +msgid "Sign up date" +msgstr "" + +#: lib/models/segments.js:23 lib/models/triggers.js:15 +msgid "Latest open" +msgstr "" + +#: lib/models/segments.js:27 lib/models/triggers.js:19 +msgid "Latest click" +msgstr "" + +#: lib/models/segments.js:69 lib/models/segments.js:216 +#: lib/models/segments.js:256 lib/models/segments.js:278 +msgid "Missing Segment ID" +msgstr "" + +#: lib/models/segments.js:85 lib/models/segments.js:549 +#: lib/models/segments.js:658 +msgid "Segment not found" +msgstr "" + +#: lib/models/segments.js:146 lib/models/segments.js:147 +#: lib/models/segments.js:408 lib/models/segments.js:409 +msgid "%s days after today" +msgstr "" + +#: lib/models/segments.js:146 lib/models/segments.js:147 +#: lib/models/segments.js:408 lib/models/segments.js:409 +msgid "%s days before today" +msgstr "" + +#: lib/models/segments.js:148 lib/models/segments.js:410 +msgid "today" +msgstr "" + +#: lib/models/segments.js:189 lib/models/segments.js:229 +msgid "Invalid segment rule type" +msgstr "" + +#: lib/models/segments.js:289 lib/models/segments.js:454 routes/segments.js:266 +#: routes/segments.js:300 routes/segments.js:370 routes/segments.js:381 +msgid "Selected segment not found" +msgstr "" + +#: lib/models/segments.js:294 lib/models/segments.js:459 routes/segments.js:272 +#: routes/segments.js:306 routes/segments.js:387 +msgid "Invalid rule type" +msgstr "" + +#: lib/models/segments.js:358 lib/models/segments.js:434 +#: lib/models/segments.js:524 +msgid "Missing Rule ID" +msgstr "" + +#: lib/models/segments.js:374 +msgid "Specified rule not found" +msgstr "" + +#: lib/models/segments.js:385 +msgid "Specified segment not found" +msgstr "" + +#: lib/models/segments.js:445 +msgid "Selected rule not found" +msgstr "" + +#: lib/models/subscriptions.js:233 +msgid "%s: Please Confirm Subscription" +msgstr "" + +#: lib/models/subscriptions.js:324 +msgid "Could not save subscription" +msgstr "" + +#: lib/models/subscriptions.js:507 lib/models/subscriptions.js:537 +msgid "Missing Subbscription ID" +msgstr "" + +#: lib/models/subscriptions.js:565 +msgid "Missing Subbscription email address" +msgstr "" + +#: lib/models/subscriptions.js:644 lib/models/subscriptions.js:893 +#: lib/models/subscriptions.js:1156 +msgid "Missing subscription ID" +msgstr "" + +#: lib/models/subscriptions.js:707 +msgid "Missing email address" +msgstr "" + +#: lib/models/subscriptions.js:996 lib/models/subscriptions.js:1050 +#: lib/models/subscriptions.js:1086 +msgid "Missing Import ID" +msgstr "" + +#: lib/models/subscriptions.js:1178 +msgid "Unknown subscription ID" +msgstr "" + +#: lib/models/subscriptions.js:1183 +msgid "Nothing seems to be changed" +msgstr "" + +#: lib/models/subscriptions.js:1197 +msgid "This address is already registered by someone else" +msgstr "" + +#: lib/models/templates.js:51 lib/models/templates.js:122 +#: lib/models/templates.js:163 +msgid "Missing Template ID" +msgstr "" + +#: lib/models/templates.js:80 lib/models/templates.js:126 +msgid "Template Name must be set" +msgstr "" + +#: lib/models/triggers.js:28 +msgid "Has Opened" +msgstr "" + +#: lib/models/triggers.js:31 +msgid "Has Clicked" +msgstr "" + +#: lib/models/triggers.js:34 +msgid "Not Opened" +msgstr "" + +#: lib/models/triggers.js:37 +msgid "Not Clicked" +msgstr "" + +#: lib/models/triggers.js:174 lib/models/triggers.js:211 +msgid "Missing or invalid list ID" +msgstr "" + +#: lib/models/triggers.js:178 lib/models/triggers.js:263 +msgid "Days in the past are not allowed" +msgstr "" + +#: lib/models/triggers.js:182 lib/models/triggers.js:203 +#: lib/models/triggers.js:267 lib/models/triggers.js:288 +msgid "Missing or invalid trigger rule" +msgstr "" + +#: lib/models/triggers.js:189 lib/models/triggers.js:274 +msgid "Invalid subscription configuration" +msgstr "" + +#: lib/models/triggers.js:196 lib/models/triggers.js:281 +msgid "Invalid campaign configuration" +msgstr "" + +#: lib/models/triggers.js:199 lib/models/triggers.js:284 +msgid "A campaing can not be a target for itself" +msgstr "" + +#: lib/models/triggers.js:232 +msgid "Could not store trigger row" +msgstr "" + +#: lib/models/triggers.js:249 +msgid "Missing or invalid Trigger ID" +msgstr "" + +#: lib/models/triggers.js:316 +msgid "Missing Trigger ID" +msgstr "" + +#: lib/models/users.js:103 +msgid "Could not store user row" +msgstr "" + +#: lib/models/users.js:173 +msgid "Email Address must be set" +msgstr "" + +#: lib/models/users.js:184 +msgid "Failed to check user data" +msgstr "" + +#: lib/models/users.js:195 +msgid "" +"Can't change email as another user with the same email address already exists" +msgstr "" + +#: lib/models/users.js:212 +msgid "Incorrect current password" +msgstr "" + +#: lib/models/users.js:216 +msgid "New password not set" +msgstr "" + +#: lib/models/users.js:220 +msgid "Passwords do not match" +msgstr "" + +#: lib/models/users.js:258 +msgid "User ID not set" +msgstr "" + +#: lib/models/users.js:286 +msgid "Username must be set" +msgstr "" + +#: lib/models/users.js:323 +msgid "Mailer password change request" +msgstr "" + +#: lib/models/users.js:347 lib/models/users.js:367 +msgid "Missing username or reset token" +msgstr "" + +#: lib/models/users.js:371 +msgid "Invalid new password" +msgstr "" + +#: lib/passport.js:38 +msgid "%s logged out" +msgstr "" + +#: lib/passport.js:51 +msgid "Failed to authenticate user" +msgstr "" + +#: lib/passport.js:67 +msgid "Logged in as %s" +msgstr "" + +#: lib/passport.js:125 +msgid "Incorrect username or password" +msgstr "" + +#: lib/tools.js:123 +msgid "Automation" +msgstr "" + +#: lib/tools.js:133 +msgid "Blocked email address \"%s\"" +msgstr "" + +#: lib/tools.js:142 +msgid "Invalid email address \"%s\"." +msgstr "" + +#: lib/tools.js:145 +msgid "MX record not found for domain" +msgstr "" + +#: lib/tools.js:148 +msgid "Address domain not found" +msgstr "" + +#: lib/tools.js:151 +msgid "Address domain name is required" +msgstr "" + +#: routes/archive.js:31 routes/archive.js:43 routes/archive.js:55 app.js:211 +msgid "Not Found" +msgstr "Lehekülge ei leitud :(" + +#: routes/archive.js:110 services/sender.js:447 +msgid "Received status code %s from %s" +msgstr "" + +#: routes/archive.js:134 routes/campaigns.js:131 routes/campaigns.js:295 +#: routes/campaigns.js:390 routes/campaigns.js:435 routes/campaigns.js:475 +#: routes/campaigns.js:739 routes/campaigns.js:762 routes/campaigns.js:781 +#: routes/campaigns.js:803 routes/triggers.js:146 +msgid "Could not find campaign with specified ID" +msgstr "" + +#: routes/archive.js:142 routes/campaigns.js:789 +msgid "Attachment not found" +msgstr "" + +#: routes/campaigns.js:26 routes/fields.js:13 routes/lists.js:49 +#: routes/segments.js:13 routes/settings.js:23 routes/templates.js:17 +#: routes/triggers.js:18 routes/users.js:75 routes/users.js:120 msgid "Need to be logged in to access restricted content" msgstr "Pead olema sisse logitud, et näha peidetud sisu" +#: routes/campaigns.js:117 +msgid "Could not create campaign" +msgstr "" + +#: routes/campaigns.js:120 +msgid "Campaign “%s” created" +msgstr "" + +#: routes/campaigns.js:204 +msgid "content from an RSS entry" +msgstr "" + +#: routes/campaigns.js:220 +msgid "Campaign settings updated" +msgstr "" + +#: routes/campaigns.js:222 +msgid "Campaign settings not updated" +msgstr "" + +#: routes/campaigns.js:238 routes/campaigns.js:639 +msgid "Campaign deleted" +msgstr "" + +#: routes/campaigns.js:240 routes/campaigns.js:641 +msgid "Could not delete specified campaign" +msgstr "" + +#: routes/campaigns.js:259 +msgid "Idling" +msgstr "" + +#: routes/campaigns.js:262 +msgid "Scheduled" +msgstr "" + +#: routes/campaigns.js:266 routes/lists.js:265 +msgid "Finished" +msgstr "" + +#: routes/campaigns.js:268 +msgid "Paused" +msgstr "" + +#: routes/campaigns.js:270 +msgid "Inactive" +msgstr "" + +#: routes/campaigns.js:272 +msgid "Active" +msgstr "" + +#: routes/campaigns.js:274 +msgid "Other" +msgstr "" + +#: routes/campaigns.js:429 +msgid "Unknown status selector" +msgstr "" + +#: routes/campaigns.js:657 +msgid "Scheduled sending" +msgstr "" + +#: routes/campaigns.js:659 +msgid "Could not schedule sending" +msgstr "" + +#: routes/campaigns.js:671 +msgid "Sending resumed" +msgstr "" + +#: routes/campaigns.js:673 +msgid "Could not resume sending" +msgstr "" + +#: routes/campaigns.js:685 +msgid "Sending reset" +msgstr "" + +#: routes/campaigns.js:687 +msgid "Could not reset sending" +msgstr "" + +#: routes/campaigns.js:699 routes/campaigns.js:727 +msgid "Sending paused" +msgstr "" + +#: routes/campaigns.js:701 routes/campaigns.js:729 +msgid "Could not pause sending" +msgstr "" + +#: routes/campaigns.js:713 +msgid "Sending activated" +msgstr "" + +#: routes/campaigns.js:715 +msgid "Could not activate sending" +msgstr "" + +#: routes/campaigns.js:750 +msgid "Attachment uploaded" +msgstr "" + +#: routes/campaigns.js:752 +msgid "Could not store attachment" +msgstr "" + +#: routes/campaigns.js:769 +msgid "Attachment deleted" +msgstr "" + +#: routes/campaigns.js:771 +msgid "Could not delete attachment" +msgstr "" + +#: routes/fields.js:28 routes/fields.js:64 routes/fields.js:118 +#: routes/segments.js:28 routes/segments.js:59 routes/segments.js:102 +#: routes/segments.js:151 routes/segments.js:223 routes/segments.js:255 +#: routes/segments.js:289 routes/segments.js:336 routes/segments.js:359 +msgid "Selected list ID not found" +msgstr "" + +#: routes/fields.js:102 +msgid "Could not create custom field" +msgstr "" + +#: routes/fields.js:129 +msgid "Selected field not found" +msgstr "" + +#: routes/fields.js:165 +msgid "Field settings updated" +msgstr "" + +#: routes/fields.js:167 +msgid "Field settings not updated" +msgstr "" + +#: routes/fields.js:183 +msgid "Custom field deleted" +msgstr "" + +#: routes/fields.js:185 +msgid "Could not delete specified field" +msgstr "" + +#: routes/links.js:40 +msgid "Oops, we couldn't find a link for the URL you clicked" +msgstr "" + +#: routes/lists.js:90 +msgid "Could not create list" +msgstr "" + +#: routes/lists.js:93 +msgid "List created" +msgstr "" + +#: routes/lists.js:101 routes/lists.js:236 routes/lists.js:301 +#: routes/lists.js:340 routes/lists.js:409 routes/lists.js:434 +#: routes/lists.js:479 routes/lists.js:501 routes/lists.js:530 +#: routes/lists.js:609 routes/lists.js:666 routes/lists.js:693 +msgid "Could not find list with specified ID" +msgstr "" + +#: routes/lists.js:115 +msgid "List settings updated" +msgstr "" + +#: routes/lists.js:117 +msgid "List settings not updated" +msgstr "" + +#: routes/lists.js:133 +msgid "List deleted" +msgstr "" + +#: routes/lists.js:135 +msgid "Could not delete specified list" +msgstr "" + +#: routes/lists.js:171 +msgid "Unknown" +msgstr "" + +#: routes/lists.js:171 +msgid "Complained" +msgstr "" + +#: routes/lists.js:202 +msgid "Invalid key" +msgstr "" + +#: routes/lists.js:204 +msgid "Expired key" +msgstr "" + +#: routes/lists.js:206 +msgid "Revoked key" +msgstr "" + +#: routes/lists.js:256 +msgid "Initializing" +msgstr "" + +#: routes/lists.js:259 +msgid "Initialized" +msgstr "" + +#: routes/lists.js:262 +msgid "Importing" +msgstr "" + +#: routes/lists.js:268 +msgid "Errored" +msgstr "" + +#: routes/lists.js:346 routes/lists.js:415 routes/lists.js:440 +msgid "Could not find subscriber with specified ID" +msgstr "" + +#: routes/lists.js:392 +msgid "Could not add subscription" +msgstr "" + +#: routes/lists.js:397 +msgid "%s was successfully added to your list" +msgstr "" + +#: routes/lists.js:399 +msgid "%s was not added to your list" +msgstr "" + +#: routes/lists.js:421 +msgid "Could not unsubscribe user" +msgstr "" + +#: routes/lists.js:424 +msgid "%s was successfully unsubscribed from your list" +msgstr "" + +#: routes/lists.js:444 +msgid "%s was successfully removed from your list" +msgstr "" + +#: routes/lists.js:456 +msgid "Another subscriber with email address %s already exists" +msgstr "" + +#: routes/lists.js:463 +msgid "Subscription settings updated" +msgstr "" + +#: routes/lists.js:465 +msgid "Subscription settings not updated" +msgstr "" + +#: routes/lists.js:507 routes/lists.js:615 routes/lists.js:651 +#: routes/lists.js:679 routes/lists.js:699 +msgid "Could not find import data with specified ID" +msgstr "" + +#: routes/lists.js:538 +msgid "Could not process CSV" +msgstr "" + +#: routes/lists.js:547 +msgid "Could not create importer" +msgstr "" + +#: routes/lists.js:598 +msgid "Empty file" +msgstr "" + +#: routes/lists.js:655 +msgid "Import started" +msgstr "" + +#: routes/lists.js:683 +msgid "Import restarted" +msgstr "" + +#: routes/segments.js:86 +msgid "Could not create segment" +msgstr "" + +#: routes/segments.js:89 +msgid "Segment created" +msgstr "" + +#: routes/segments.js:113 +msgid "Selected segment ID not found" +msgstr "" + +#: routes/segments.js:188 +msgid "Segment settings updated" +msgstr "" + +#: routes/segments.js:190 +msgid "Segment settings not updated" +msgstr "" + +#: routes/segments.js:206 +msgid "Segment deleted" +msgstr "" + +#: routes/segments.js:208 +msgid "Could not delete specified segment" +msgstr "" + +#: routes/segments.js:342 +msgid "Could not create rule" +msgstr "" + +#: routes/segments.js:345 +msgid "Rule created" +msgstr "" + +#: routes/segments.js:410 +msgid "Rule settings updated" +msgstr "" + +#: routes/segments.js:412 +msgid "Rule settings not updated" +msgstr "" + +#: routes/segments.js:428 +msgid "Rule deleted" +msgstr "" + +#: routes/segments.js:430 +msgid "Could not delete specified rule" +msgstr "" + #: routes/settings.js:39 msgid "Use TLS" msgstr "Kasuta TLSi" @@ -104,3 +2773,163 @@ msgstr "Server vastas \"%s\"" #: routes/settings.js:221 msgid "Mailer settings verified, ready to send some mail!" msgstr "E-posti seaded on kontrollitud, võid hakata kirju saatma" + +#: routes/subscription.js:22 +msgid "Selected subscription not found" +msgstr "" + +#: routes/subscription.js:32 routes/subscription.js:103 +#: routes/subscription.js:141 routes/subscription.js:166 +#: routes/subscription.js:191 routes/subscription.js:232 +#: routes/subscription.js:270 routes/subscription.js:317 +#: routes/subscription.js:339 routes/subscription.js:368 +#: routes/subscription.js:392 routes/subscription.js:424 +msgid "Selected list not found" +msgstr "" + +#: routes/subscription.js:78 routes/subscription.js:472 +msgid "%s: Subscription Confirmed" +msgstr "" + +#: routes/subscription.js:217 +msgid "Email address not set" +msgstr "" + +#: routes/subscription.js:255 +msgid "Could not store confirmation data" +msgstr "" + +#: routes/subscription.js:284 routes/subscription.js:349 +#: routes/subscription.js:402 +msgid "Subscription not found from this list" +msgstr "" + +#: routes/subscription.js:383 +msgid "Email address updated, check your mailbox for verification instructions" +msgstr "" + +#: routes/subscription.js:499 routes/subscription.js:515 +msgid "Public key is not set" +msgstr "" + +#: routes/templates.js:98 +msgid "Could not create template" +msgstr "" + +#: routes/templates.js:101 +msgid "Template created" +msgstr "" + +#: routes/templates.js:109 +msgid "Could not find template with specified ID" +msgstr "" + +#: routes/templates.js:140 +msgid "Template settings updated" +msgstr "" + +#: routes/templates.js:142 +msgid "Template settings not updated" +msgstr "" + +#: routes/templates.js:158 +msgid "Template deleted" +msgstr "" + +#: routes/templates.js:160 +msgid "Could not delete specified template" +msgstr "" + +#: routes/triggers.js:62 routes/triggers.js:79 routes/triggers.js:154 +msgid "Could not find selected list" +msgstr "" + +#: routes/triggers.js:131 +msgid "Could not create trigger" +msgstr "" + +#: routes/triggers.js:138 +msgid "Trigger “%s” created" +msgstr "" + +#: routes/triggers.js:214 +msgid "Trigger settings updated" +msgstr "" + +#: routes/triggers.js:216 +msgid "Trigger settings not updated" +msgstr "" + +#: routes/triggers.js:228 +msgid "Trigger deleted" +msgstr "" + +#: routes/triggers.js:230 +msgid "Could not delete specified trigger" +msgstr "" + +#: routes/triggers.js:242 +msgid "Could not find trigger with specified ID" +msgstr "" + +#: routes/triggers.js:255 +msgid "Trigger not found" +msgstr "" + +#: routes/users.js:32 +msgid "" +"An email with password reset instructions has been sent to your email " +"address, if it exists on our system." +msgstr "" + +#: routes/users.js:46 routes/users.js:64 +msgid "Unknown or expired reset token" +msgstr "" + +#: routes/users.js:66 +msgid "Your password has been changed successfully" +msgstr "" + +#: routes/users.js:87 +msgid "User data not found" +msgstr "" + +#: routes/users.js:110 +msgid "Access token updated" +msgstr "" + +#: routes/users.js:112 +msgid "Access token not updated" +msgstr "" + +#: routes/users.js:139 +msgid "Account information updated" +msgstr "" + +#: routes/users.js:141 +msgid "Account information not updated" +msgstr "" + +#: services/feedcheck.js:51 +msgid "Feed error: %s" +msgstr "" + +#: services/feedcheck.js:54 +msgid "Found %s new campaign messages from feed" +msgstr "" + +#: services/feedcheck.js:56 +msgid "Found nothing new from the feed" +msgstr "" + +#: services/feedcheck.js:143 +msgid "RSS entry %s" +msgstr "" + +#: services/importer.js:243 +msgid "Could not access import file" +msgstr "" + +#: services/triggers.js:51 +msgid "Unknown trigger type %s" +msgstr "" diff --git a/languages/mailtrain.pot b/languages/mailtrain.pot index 9d882c15..696c0573 100644 --- a/languages/mailtrain.pot +++ b/languages/mailtrain.pot @@ -8,21 +8,3759 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2017-03-04 16:00+0000\n" +"POT-Creation-Date: 2017-03-07 14:28+0000\n" + +#: views/archive/layout.hbs:1 +#: views/layout.hbs:1 +#: views/subscription/layout.hbs:1 +#: routes/index.js:11 +msgid "Self hosted email newsletter app" +msgstr "" + +#: views/campaigns/bounced.hbs:1 +#: views/campaigns/campaigns.hbs:1 +#: views/campaigns/clicked.hbs:1 +#: views/campaigns/complained.hbs:1 +#: views/campaigns/create-rss.hbs:1 +#: views/campaigns/create-triggered.hbs:1 +#: views/campaigns/create.hbs:1 +#: views/campaigns/delivered.hbs:1 +#: views/campaigns/edit-rss.hbs:1 +#: views/campaigns/edit-triggered.hbs:1 +#: views/campaigns/edit.hbs:1 +#: views/campaigns/opened.hbs:1 +#: views/campaigns/unsubscribed.hbs:1 +#: views/campaigns/upload-attachment.hbs:1 +#: views/campaigns/view.hbs:1 +#: views/lists/create.hbs:1 +#: views/lists/edit.hbs:1 +#: views/lists/fields/create.hbs:1 +#: views/lists/fields/edit.hbs:1 +#: views/lists/fields/fields.hbs:1 +#: views/lists/lists.hbs:1 +#: views/lists/segments/create.hbs:1 +#: views/lists/segments/edit.hbs:1 +#: views/lists/segments/rule-configure.hbs:1 +#: views/lists/segments/rule-create.hbs:1 +#: views/lists/segments/rule-edit.hbs:1 +#: views/lists/segments/segments.hbs:1 +#: views/lists/segments/view.hbs:1 +#: views/lists/subscription/add.hbs:1 +#: views/lists/subscription/edit.hbs:1 +#: views/lists/subscription/import-failed.hbs:1 +#: views/lists/subscription/import-preview.hbs:1 +#: views/lists/subscription/import.hbs:1 +#: views/lists/view.hbs:1 +#: views/settings.hbs:1 +#: views/templates/create.hbs:1 +#: views/templates/edit.hbs:1 +#: views/templates/templates.hbs:1 +#: views/triggers/create-select.hbs:1 +#: views/triggers/create.hbs:1 +#: views/triggers/edit.hbs:1 +#: views/triggers/triggered.hbs:1 +#: views/triggers/triggers.hbs:1 +#: views/users/account.hbs:1 +#: views/users/api.hbs:1 +#: views/users/forgot.hbs:1 +#: views/users/login.hbs:1 +#: views/users/reset.hbs:1 +#: app.js:169 +msgid "Home" +msgstr "" + +#: views/campaigns/bounced.hbs:2 +#: views/campaigns/campaigns.hbs:2 +#: views/campaigns/campaigns.hbs:7 +#: views/campaigns/clicked.hbs:2 +#: views/campaigns/complained.hbs:2 +#: views/campaigns/create-rss.hbs:2 +#: views/campaigns/create-triggered.hbs:2 +#: views/campaigns/create.hbs:2 +#: views/campaigns/delivered.hbs:2 +#: views/campaigns/edit-rss.hbs:2 +#: views/campaigns/edit-triggered.hbs:2 +#: views/campaigns/edit.hbs:2 +#: views/campaigns/opened.hbs:2 +#: views/campaigns/unsubscribed.hbs:2 +#: views/campaigns/upload-attachment.hbs:2 +#: views/campaigns/view.hbs:2 +#: lib/tools.js:119 +#: routes/campaigns.js:35 +msgid "Campaigns" +msgstr "" + +#: views/campaigns/bounced.hbs:3 +#: views/campaigns/bounced.hbs:4 +msgid "Bounced info" +msgstr "" + +#: views/campaigns/bounced.hbs:5 +#: views/campaigns/clicked.hbs:5 +#: views/campaigns/complained.hbs:5 +#: views/campaigns/delivered.hbs:5 +#: views/campaigns/edit-rss.hbs:5 +#: views/campaigns/edit-triggered.hbs:5 +#: views/campaigns/edit.hbs:5 +#: views/campaigns/opened.hbs:5 +#: views/campaigns/unsubscribed.hbs:5 +#: views/campaigns/upload-attachment.hbs:6 +msgid "View campaign" +msgstr "" + +#: views/campaigns/bounced.hbs:6 +msgid "Subscribers who bounced and were unsubscribed:" +msgstr "" + +#: views/campaigns/bounced.hbs:7 +#: views/campaigns/clicked.hbs:13 +#: views/campaigns/complained.hbs:7 +#: views/campaigns/delivered.hbs:7 +#: views/campaigns/opened.hbs:7 +#: views/campaigns/unsubscribed.hbs:7 +#: views/lists/subscription/import-failed.hbs:9 +#: views/lists/view.hbs:18 +#: views/triggers/triggered.hbs:6 +msgid "Address" +msgstr "" + +#: views/campaigns/bounced.hbs:8 +#: views/campaigns/clicked.hbs:14 +#: views/campaigns/complained.hbs:8 +#: views/campaigns/delivered.hbs:8 +#: views/campaigns/opened.hbs:8 +#: views/campaigns/unsubscribed.hbs:8 +#: views/lists/subscription/add.hbs:6 +#: views/lists/subscription/edit.hbs:7 +#: views/lists/subscription/import-preview.hbs:7 +#: views/lists/view.hbs:19 +#: views/subscription/manage.hbs:4 +#: views/subscription/subscribe.hbs:4 +#: views/triggers/triggered.hbs:7 +msgid "First Name" +msgstr "" + +#: views/campaigns/bounced.hbs:9 +#: views/campaigns/clicked.hbs:15 +#: views/campaigns/complained.hbs:9 +#: views/campaigns/delivered.hbs:9 +#: views/campaigns/opened.hbs:9 +#: views/campaigns/unsubscribed.hbs:9 +#: views/lists/subscription/add.hbs:7 +#: views/lists/subscription/edit.hbs:8 +#: views/lists/subscription/import-preview.hbs:8 +#: views/lists/view.hbs:20 +#: views/subscription/manage.hbs:5 +#: views/subscription/subscribe.hbs:5 +#: views/triggers/triggered.hbs:8 +msgid "Last Name" +msgstr "" + +#: views/campaigns/bounced.hbs:10 +#: views/campaigns/complained.hbs:10 +#: views/campaigns/delivered.hbs:10 +#: views/campaigns/unsubscribed.hbs:10 +msgid "SMTP response" +msgstr "" + +#: views/campaigns/bounced.hbs:11 +msgid "Bounce time" +msgstr "" + +#: views/campaigns/campaigns.hbs:3 +#: views/campaigns/create-triggered.hbs:24 +#: views/campaigns/create.hbs:3 +#: views/campaigns/create.hbs:4 +#: views/campaigns/create.hbs:27 +msgid "Create Campaign" +msgstr "" + +#: views/campaigns/campaigns.hbs:4 +msgid "Regular Campaign" +msgstr "" + +#: views/campaigns/campaigns.hbs:5 +msgid "RSS Campaign" +msgstr "" + +#: views/campaigns/campaigns.hbs:6 +msgid "Triggered Campaign" +msgstr "" + +#: views/campaigns/campaigns.hbs:8 +#: views/campaigns/create-rss.hbs:6 +#: views/campaigns/create-triggered.hbs:5 +#: views/campaigns/create.hbs:5 +#: views/campaigns/edit-rss.hbs:8 +#: views/campaigns/edit-triggered.hbs:9 +#: views/campaigns/edit.hbs:10 +#: views/campaigns/view.hbs:71 +#: views/lists/create.hbs:5 +#: views/lists/edit.hbs:6 +#: views/lists/fields/fields.hbs:6 +#: views/lists/lists.hbs:5 +#: views/lists/segments/segments.hbs:6 +#: views/templates/templates.hbs:5 +#: views/triggers/triggers.hbs:5 +msgid "Name" +msgstr "" + +#: views/campaigns/campaigns.hbs:9 +#: views/campaigns/create-rss.hbs:8 +#: views/campaigns/create-triggered.hbs:7 +#: views/campaigns/create.hbs:7 +#: views/campaigns/edit-rss.hbs:10 +#: views/campaigns/edit-triggered.hbs:11 +#: views/campaigns/edit.hbs:12 +#: views/campaigns/view.hbs:72 +#: views/lists/create.hbs:7 +#: views/lists/edit.hbs:10 +#: views/lists/lists.hbs:8 +#: views/partials/merge-tag-reference.hbs:4 +#: views/templates/create.hbs:9 +#: views/templates/edit.hbs:8 +#: views/templates/templates.hbs:6 +#: views/triggers/create.hbs:7 +#: views/triggers/edit.hbs:8 +#: views/triggers/triggers.hbs:7 +msgid "Description" +msgstr "" + +#: views/campaigns/campaigns.hbs:10 +#: views/campaigns/view.hbs:73 +#: views/lists/view.hbs:21 +#: views/lists/view.hbs:29 +#: views/triggers/triggers.hbs:6 +msgid "Status" +msgstr "" + +#: views/campaigns/campaigns.hbs:11 +#: views/campaigns/view.hbs:74 +#: views/lists/view.hbs:22 +#: views/lists/view.hbs:23 +msgid "Created" +msgstr "" + +#: views/campaigns/clicked.hbs:3 +#: views/campaigns/clicked.hbs:4 +msgid "Link info" +msgstr "" + +#: views/campaigns/clicked.hbs:6 +#: views/campaigns/view.hbs:61 +msgid "URL" +msgstr "" + +#: views/campaigns/clicked.hbs:7 +#: views/campaigns/view.hbs:62 +msgid "Clicks" +msgstr "" + +#: views/campaigns/clicked.hbs:8 +#: views/campaigns/view.hbs:63 +msgid "% of clicks" +msgstr "" + +#: views/campaigns/clicked.hbs:9 +#: views/campaigns/view.hbs:64 +msgid "% of messages" +msgstr "" + +#: views/campaigns/clicked.hbs:10 +#: views/campaigns/view.hbs:67 +msgid "Aggregated clicks" +msgstr "" + +#: views/campaigns/clicked.hbs:11 +msgid "Subscribers who clicked on a link:" +msgstr "" + +#: views/campaigns/clicked.hbs:12 +msgid "Subscribers who clicked on this link:" +msgstr "" + +#: views/campaigns/clicked.hbs:16 +msgid "First click time" +msgstr "" + +#: views/campaigns/clicked.hbs:17 +msgid "Click count" +msgstr "" + +#: views/campaigns/complained.hbs:3 +#: views/campaigns/complained.hbs:4 +msgid "Complained info" +msgstr "" + +#: views/campaigns/complained.hbs:6 +msgid "Subscribers who complained and were unsubscribed:" +msgstr "" + +#: views/campaigns/complained.hbs:11 +msgid "Complain time" +msgstr "" + +#: views/campaigns/create-rss.hbs:3 +#: views/campaigns/create-rss.hbs:4 +#: views/campaigns/create-rss.hbs:20 +msgid "Create RSS Campaign" +msgstr "" + +#: views/campaigns/create-rss.hbs:5 +#: views/campaigns/edit-rss.hbs:6 +msgid "" +"RSS campaign sets up a tracker against selected RSS feed address. Whenever " +"a new entry is found from this feed it is sent to selected list as an email " +"message." +msgstr "" + +#: views/campaigns/create-rss.hbs:7 +#: views/campaigns/create-triggered.hbs:6 +#: views/campaigns/create.hbs:6 +#: views/campaigns/edit-rss.hbs:9 +#: views/campaigns/edit-triggered.hbs:10 +#: views/campaigns/edit.hbs:11 +msgid "Campaign Name" +msgstr "" + +#: views/campaigns/create-rss.hbs:9 +#: views/campaigns/create-triggered.hbs:8 +#: views/campaigns/create.hbs:8 +#: views/campaigns/edit-rss.hbs:11 +#: views/campaigns/edit-triggered.hbs:12 +#: views/campaigns/edit.hbs:13 +#: views/lists/create.hbs:8 +#: views/lists/edit.hbs:11 +#: views/templates/create.hbs:11 +#: views/templates/edit.hbs:10 +#: views/triggers/create.hbs:9 +#: views/triggers/edit.hbs:10 +msgid "HTML is allowed" +msgstr "" + +#: views/campaigns/create-rss.hbs:10 +#: views/campaigns/create-triggered.hbs:9 +#: views/campaigns/create.hbs:9 +#: views/campaigns/edit-rss.hbs:12 +#: views/campaigns/edit-triggered.hbs:13 +#: views/campaigns/edit.hbs:14 +#: views/campaigns/view.hbs:6 +#: views/triggers/create-select.hbs:6 +#: views/triggers/create.hbs:10 +#: views/triggers/edit.hbs:12 +#: views/triggers/triggers.hbs:8 +msgid "List" +msgstr "" + +#: views/campaigns/create-rss.hbs:11 +#: views/campaigns/create-triggered.hbs:10 +#: views/campaigns/create-triggered.hbs:13 +#: views/campaigns/create.hbs:10 +#: views/campaigns/create.hbs:14 +#: views/campaigns/edit-rss.hbs:13 +#: views/campaigns/edit-triggered.hbs:14 +#: views/campaigns/edit.hbs:15 +#: views/lists/fields/create.hbs:27 +#: views/lists/fields/edit.hbs:28 +#: views/lists/segments/create.hbs:9 +#: views/lists/segments/edit.hbs:10 +#: views/lists/segments/rule-create.hbs:7 +#: views/lists/subscription/add.hbs:10 +#: views/lists/subscription/add.hbs:12 +#: views/lists/subscription/edit.hbs:11 +#: views/lists/subscription/import-preview.hbs:5 +#: views/subscription/manage.hbs:10 +#: views/subscription/subscribe.hbs:10 +#: views/templates/create.hbs:8 +#: views/triggers/create-select.hbs:7 +#: views/triggers/create.hbs:17 +#: views/triggers/create.hbs:20 +#: views/triggers/create.hbs:22 +#: views/triggers/create.hbs:26 +#: views/triggers/edit.hbs:19 +#: views/triggers/edit.hbs:22 +#: views/triggers/edit.hbs:24 +#: views/triggers/edit.hbs:28 +msgid "Select" +msgstr "" + +#: views/campaigns/create-rss.hbs:12 +#: views/campaigns/create-triggered.hbs:11 +#: views/campaigns/create.hbs:11 +#: views/campaigns/edit-rss.hbs:14 +#: views/campaigns/edit-triggered.hbs:15 +#: views/campaigns/edit.hbs:16 +#: views/triggers/create-select.hbs:8 +#: views/triggers/create.hbs:11 +#: views/triggers/edit.hbs:13 +msgid "subscribers" +msgstr "" + +#: views/campaigns/create-rss.hbs:13 +#: views/campaigns/edit-rss.hbs:15 +msgid "RSS Feed Url" +msgstr "" + +#: views/campaigns/create-rss.hbs:14 +#: views/campaigns/edit-rss.hbs:16 +msgid "" +"New entries from this RSS URL are sent out to list subscribers as email " +"messages" +msgstr "" + +#: views/campaigns/create-rss.hbs:15 +#: views/campaigns/create-triggered.hbs:17 +#: views/campaigns/create.hbs:18 +#: views/campaigns/edit-rss.hbs:18 +#: views/campaigns/edit-triggered.hbs:16 +#: views/campaigns/edit.hbs:17 +#: views/campaigns/view.hbs:12 +msgid "Email \"from name\"" +msgstr "" + +#: views/campaigns/create-rss.hbs:16 +#: views/campaigns/create-triggered.hbs:18 +#: views/campaigns/create.hbs:19 +#: views/campaigns/edit-rss.hbs:19 +#: views/campaigns/edit.hbs:18 +#: views/settings.hbs:23 +msgid "This is the name your emails will come from" +msgstr "" + +#: views/campaigns/create-rss.hbs:17 +#: views/campaigns/create-triggered.hbs:19 +#: views/campaigns/create.hbs:20 +#: views/campaigns/edit-rss.hbs:20 +#: views/campaigns/edit-triggered.hbs:18 +#: views/campaigns/edit.hbs:19 +#: views/campaigns/view.hbs:13 +msgid "Email \"from\" address" +msgstr "" + +#: views/campaigns/create-rss.hbs:18 +#: views/campaigns/create-triggered.hbs:20 +#: views/campaigns/edit-rss.hbs:21 +#: views/campaigns/edit-triggered.hbs:19 +#: views/settings.hbs:25 +msgid "This is the address people will send replies to" +msgstr "" + +#: views/campaigns/create-rss.hbs:19 +#: views/campaigns/create-triggered.hbs:23 +#: views/campaigns/create.hbs:26 +#: views/campaigns/edit-rss.hbs:22 +#: views/campaigns/edit-triggered.hbs:22 +#: views/campaigns/edit.hbs:25 +msgid "Disable clicked/opened tracking" +msgstr "" + +#: views/campaigns/create-triggered.hbs:3 +#: views/campaigns/create-triggered.hbs:4 +msgid "Create Triggered Campaign" +msgstr "" + +#: views/campaigns/create-triggered.hbs:12 +#: views/campaigns/create.hbs:12 +#: views/campaigns/edit-triggered.hbs:7 +#: views/campaigns/edit.hbs:7 +#: views/lists/fields/create.hbs:31 +#: views/lists/fields/edit.hbs:33 +#: views/templates/create.hbs:13 +msgid "Template" +msgstr "" + +#: views/campaigns/create-triggered.hbs:14 +#: views/campaigns/create.hbs:15 +msgid "Selecting a template creates a campaign specific copy from it" +msgstr "" + +#: views/campaigns/create-triggered.hbs:15 +#: views/campaigns/create.hbs:16 +msgid "Or alternatively use an URL as the message content source:" +msgstr "" + +#: views/campaigns/create-triggered.hbs:16 +#: views/campaigns/create.hbs:17 +#: views/campaigns/edit-triggered.hbs:25 +#: views/campaigns/edit.hbs:28 +msgid "" +"If a message is sent then this URL will be POSTed to using Merge Tags as " +"POST body. Use this if you want to generate the HTML message yourself" +msgstr "" + +#: views/campaigns/create-triggered.hbs:21 +#: views/campaigns/create.hbs:24 +#: views/campaigns/edit-triggered.hbs:20 +#: views/campaigns/edit.hbs:23 +#: views/campaigns/view.hbs:15 +msgid "Email \"subject line\"" +msgstr "" + +#: views/campaigns/create-triggered.hbs:22 +#: views/campaigns/create.hbs:25 +#: views/campaigns/edit-triggered.hbs:21 +#: views/campaigns/edit.hbs:24 +#: views/settings.hbs:27 +msgid "Keep it relevant and non-spammy" +msgstr "" + +#: views/campaigns/create.hbs:13 +msgid "Select a template:" +msgstr "" + +#: views/campaigns/create.hbs:21 +#: views/campaigns/edit.hbs:20 +msgid "" +"This is the address people will send replies to unless reply-to address is " +"set" +msgstr "" + +#: views/campaigns/create.hbs:22 +#: views/campaigns/edit.hbs:21 +#: views/campaigns/view.hbs:14 +msgid "Email \"reply-to\" address" +msgstr "" + +#: views/campaigns/create.hbs:23 +#: views/campaigns/edit.hbs:22 +msgid "If set, this is the address people will send replies to" +msgstr "" + +#: views/campaigns/delivered.hbs:3 +#: views/campaigns/delivered.hbs:4 +msgid "Delivered info" +msgstr "" + +#: views/campaigns/delivered.hbs:6 +msgid "Subscribers who received the message and did not bounce/unsubscribe:" +msgstr "" + +#: views/campaigns/delivered.hbs:11 +msgid "Delivery time" +msgstr "" + +#: views/campaigns/edit-rss.hbs:3 +#: views/campaigns/edit-rss.hbs:4 +msgid "Edit RSS Campaign" +msgstr "" + +#: views/campaigns/edit-rss.hbs:7 +#: views/campaigns/edit-triggered.hbs:8 +#: views/campaigns/edit.hbs:9 +#: views/settings.hbs:4 +#: views/users/account.hbs:6 +msgid "General Settings" +msgstr "" + +#: views/campaigns/edit-rss.hbs:17 +msgid "" +"Use special merge tag [RSS_ENTRY] to mark the position for the RSS post " +"content. Additionally you can use any valid merge tag as well." +msgstr "" + +#: views/campaigns/edit-rss.hbs:23 +#: views/campaigns/edit-triggered.hbs:26 +#: views/campaigns/edit.hbs:34 +msgid "Delete Campaign" +msgstr "" + +#: views/campaigns/edit-rss.hbs:24 +#: views/campaigns/edit-triggered.hbs:27 +#: views/campaigns/edit.hbs:35 +#: views/lists/edit.hbs:13 +#: views/lists/fields/edit.hbs:39 +#: views/lists/segments/edit.hbs:14 +#: views/lists/segments/rule-edit.hbs:38 +#: views/lists/subscription/edit.hbs:17 +#: views/settings.hbs:99 +#: views/templates/edit.hbs:12 +#: views/triggers/edit.hbs:30 +#: views/users/account.hbs:18 +msgid "Update" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:3 +#: views/campaigns/edit-triggered.hbs:4 +msgid "Edit Triggered Campaign" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:6 +#: views/campaigns/edit.hbs:6 +msgid "General" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:17 +msgid "his is the name your emails will come from" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:23 +#: views/campaigns/edit.hbs:26 +msgid "Template Settings" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:24 +#: views/campaigns/edit.hbs:27 +msgid "Template URL" +msgstr "" + +#: views/campaigns/edit.hbs:3 +#: views/campaigns/edit.hbs:4 +#: views/campaigns/upload-attachment.hbs:3 +#: views/campaigns/upload-attachment.hbs:5 +#: views/campaigns/view.hbs:3 +msgid "Edit Campaign" +msgstr "" + +#: views/campaigns/edit.hbs:8 +#: views/campaigns/edit.hbs:29 +msgid "Attachments" +msgstr "" + +#: views/campaigns/edit.hbs:30 +msgid "File" +msgstr "" + +#: views/campaigns/edit.hbs:31 +msgid "Size" +msgstr "" + +#: views/campaigns/edit.hbs:32 +#: views/campaigns/view.hbs:66 +#: views/lists/fields/fields.hbs:12 +#: views/lists/view.hbs:32 +msgid "No data available in table" +msgstr "" + +#: views/campaigns/edit.hbs:33 +#: views/campaigns/upload-attachment.hbs:4 +msgid "Add Attachment" +msgstr "" + +#: views/campaigns/opened.hbs:3 +#: views/campaigns/opened.hbs:4 +msgid "Opened info" +msgstr "" + +#: views/campaigns/opened.hbs:6 +msgid "Subscribers who opened this message:" +msgstr "" + +#: views/campaigns/opened.hbs:10 +msgid "First open" +msgstr "" + +#: views/campaigns/opened.hbs:11 +msgid "Opened count" +msgstr "" + +#: views/campaigns/unsubscribed.hbs:3 +#: views/campaigns/unsubscribed.hbs:4 +msgid "Unsubscribed info" +msgstr "" + +#: views/campaigns/unsubscribed.hbs:6 +msgid "Subscribers who unsubscribed:" +msgstr "" + +#: views/campaigns/unsubscribed.hbs:11 +#: views/campaigns/view.hbs:26 +#: views/lists/subscription/import.hbs:10 +#: routes/lists.js:171 +msgid "Unsubscribed" +msgstr "" + +#: views/campaigns/upload-attachment.hbs:7 +msgid "Upload" +msgstr "" + +#: views/campaigns/view.hbs:4 +msgid "Overview" +msgstr "" + +#: views/campaigns/view.hbs:5 +msgid "Links" +msgstr "" + +#: views/campaigns/view.hbs:7 +msgid "Feed URL" +msgstr "" + +#: views/campaigns/view.hbs:8 +msgid "Last check" +msgstr "" + +#: views/campaigns/view.hbs:9 +msgid "Not yet checked" +msgstr "" + +#: views/campaigns/view.hbs:10 +msgid "activate campaign to start checking feed for new messages" +msgstr "" + +#: views/campaigns/view.hbs:11 +msgid "RSS status" +msgstr "" + +#: views/campaigns/view.hbs:16 +msgid "Preview campaign as" +msgstr "" + +#: views/campaigns/view.hbs:17 +msgid "Add new test user" +msgstr "" + +#: views/campaigns/view.hbs:18 +msgid "No test users yet, create one here" +msgstr "" + +#: views/campaigns/view.hbs:19 +msgid "Go" +msgstr "" + +#: views/campaigns/view.hbs:20 +#: lib/models/triggers.js:25 +msgid "Delivered" +msgstr "" + +#: views/campaigns/view.hbs:21 +msgid "List subscribers who received this message" +msgstr "" + +#: views/campaigns/view.hbs:22 +#: routes/lists.js:171 +msgid "Bounced" +msgstr "" + +#: views/campaigns/view.hbs:23 +msgid "List subscribers who bounced" +msgstr "" + +#: views/campaigns/view.hbs:24 +msgid "Complaints" +msgstr "" + +#: views/campaigns/view.hbs:25 +msgid "List subscribers who complained for this message" +msgstr "" + +#: views/campaigns/view.hbs:27 +msgid "List subscribers who unsubscribed after this message" +msgstr "" + +#: views/campaigns/view.hbs:28 +msgid "Opened" +msgstr "" + +#: views/campaigns/view.hbs:29 +msgid "List subscribers who opened this message" +msgstr "" + +#: views/campaigns/view.hbs:30 +msgid "Clicked" +msgstr "" + +#: views/campaigns/view.hbs:31 +#: views/campaigns/view.hbs:68 +msgid "List subscribers who clicked on a link" +msgstr "" + +#: views/campaigns/view.hbs:32 +msgid "Are you sure? This action would start sending messages to the selected list" +msgstr "" + +#: views/campaigns/view.hbs:33 +msgid "Delay sending" +msgstr "" + +#: views/campaigns/view.hbs:34 +msgid "hours" +msgstr "" + +#: views/campaigns/view.hbs:35 +msgid "minutes" +msgstr "" + +#: views/campaigns/view.hbs:36 +msgid "Send to subscribers:" +msgstr "" + +#: views/campaigns/view.hbs:37 +msgid "Are you sure? This action would reset scheduling" +msgstr "" + +#: views/campaigns/view.hbs:38 +msgid "Cancel" +msgstr "" + +#: views/campaigns/view.hbs:39 +msgid "Sending scheduled" +msgstr "" + +#: views/campaigns/view.hbs:40 +#: views/campaigns/view.hbs:52 +msgid "Pause" +msgstr "" + +#: views/campaigns/view.hbs:41 +#: routes/campaigns.js:264 +msgid "Sending" +msgstr "" + +#: views/campaigns/view.hbs:42 +#: views/campaigns/view.hbs:46 +msgid "Are you sure? This action would resume sending messages to the selected list" +msgstr "" + +#: views/campaigns/view.hbs:43 +#: views/campaigns/view.hbs:47 +msgid "Are you sure? This action would reset all stats about current progress" +msgstr "" + +#: views/campaigns/view.hbs:44 +msgid "Resume" +msgstr "" + +#: views/campaigns/view.hbs:45 +#: views/campaigns/view.hbs:49 +msgid "Reset" +msgstr "" + +#: views/campaigns/view.hbs:48 +msgid "Continue" +msgstr "" + +#: views/campaigns/view.hbs:50 +msgid "" +"All messages sent! Hit \"Continue\" if you you want to send this campaign " +"to new subscribers" +msgstr "" + +#: views/campaigns/view.hbs:51 +msgid "" +"Are you sure? This action would pause sending new entries in RSS feed as " +"email messages to the selected list" +msgstr "" + +#: views/campaigns/view.hbs:53 +#: views/campaigns/view.hbs:57 +msgid "Campaign status:" +msgstr "" + +#: views/campaigns/view.hbs:54 +msgid "ACTIVE" +msgstr "" + +#: views/campaigns/view.hbs:55 +msgid "" +"Are you sure? This action would start sending new entries in RSS feed as " +"email messages to the selected list" +msgstr "" + +#: views/campaigns/view.hbs:56 +msgid "Activate" +msgstr "" + +#: views/campaigns/view.hbs:58 +msgid "INACTIVE" +msgstr "" + +#: views/campaigns/view.hbs:59 +msgid "" +"This is a triggered campaign. Messages are only sent to subscribers that " +"hit some trigger that invokes this campaign" +msgstr "" + +#: views/campaigns/view.hbs:60 +msgid "see more" +msgstr "" + +#: views/campaigns/view.hbs:65 +msgid "List subscribers who clicked this link" +msgstr "" + +#: views/campaigns/view.hbs:69 +msgid "" +"Clicks are counted as unique subscribers that clicked on a specific link or " +"on any link (in aggregated view)" +msgstr "" + +#: views/campaigns/view.hbs:70 +msgid "" +"If a new entry is found from campaign feed a new subcampaign is created of " +"that entry and it will be listed here" +msgstr "" + +#: views/emails/confirm-html.hbs:1 +#: views/emails/confirm-html.hbs:2 +#: views/emails/confirm-text.hbs:1 +msgid "Please Confirm Subscription" +msgstr "" + +#: views/emails/confirm-html.hbs:3 +#: views/emails/confirm-text.hbs:2 +msgid "Yes, subscribe me to this list" +msgstr "" + +#: views/emails/confirm-html.hbs:4 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"subscribed if you don't click the confirmation link above." +msgstr "" + +#: views/emails/confirm-html.hbs:5 +#: views/emails/confirm-text.hbs:4 +#: views/emails/subscription-confirmed-html.hbs:7 +#: views/emails/subscription-confirmed-text.hbs:7 +#: views/emails/unsubscribe-confirmed-html.hbs:5 +#: views/emails/unsubscribe-confirmed-text.hbs:5 +msgid "For questions about this list, please contact:" +msgstr "" + +#: views/emails/confirm-text.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"subscribed unless you click the confirmation link above." +msgstr "" + +#: views/emails/password-reset-html.hbs:1 +#: views/emails/password-reset-html.hbs:2 +#: views/emails/password-reset-text.hbs:1 +msgid "Change your password" +msgstr "" + +#: views/emails/password-reset-html.hbs:3 +#: views/emails/password-reset-text.hbs:2 +msgid "We have received a password change request for your Mailtrain account:" +msgstr "" + +#: views/emails/password-reset-html.hbs:4 +#: views/emails/password-reset-text.hbs:3 +msgid "Reset password" +msgstr "" + +#: views/emails/password-reset-html.hbs:5 +#: views/emails/password-reset-text.hbs:4 +msgid "" +"If you did not ask to change your password, then you can ignore this email " +"and your password will not be changed." +msgstr "" + +#: views/emails/rss-html.hbs:1 +#: views/emails/stationery-html.hbs:3 +#: views/emails/stationery-text.hbs:3 +msgid "Preferences" +msgstr "" + +#: views/emails/rss-html.hbs:2 +#: views/emails/stationery-html.hbs:4 +#: views/emails/stationery-text.hbs:4 +#: views/lists/subscription/edit.hbs:15 +#: views/subscription/manage.hbs:12 +#: views/subscription/unsubscribe.hbs:1 +#: views/subscription/unsubscribe.hbs:4 +#: routes/lists.js:253 +msgid "Unsubscribe" +msgstr "" + +#: views/emails/rss-html.hbs:3 +#: views/emails/stationery-html.hbs:5 +#: views/emails/stationery-text.hbs:5 +msgid "View this email in your browser" +msgstr "" + +#: views/emails/stationery-html.hbs:1 +#: views/emails/stationery-text.hbs:1 +msgid "Hey [FIRST_NAME/Customer]," +msgstr "" + +#: views/emails/stationery-html.hbs:2 +#: views/emails/stationery-text.hbs:2 +msgid "Cheers," +msgstr "" + +#: views/emails/subscription-confirmed-html.hbs:1 +#: views/emails/subscription-confirmed-text.hbs:1 +#: views/subscription/subscribed.hbs:1 +msgid "Subscription Confirmed" +msgstr "" + +#: views/emails/subscription-confirmed-html.hbs:2 +#: views/emails/subscription-confirmed-text.hbs:2 +#: views/subscription/subscribed.hbs:2 +msgid "Your subscription to our list has been confirmed." +msgstr "" + +#: views/emails/subscription-confirmed-html.hbs:3 +#: views/emails/subscription-confirmed-text.hbs:3 +msgid "If you want to modify your subscription then you can:" +msgstr "" + +#: views/emails/subscription-confirmed-html.hbs:4 +#: views/emails/subscription-confirmed-text.hbs:4 +#: views/subscription/subscribed.hbs:6 +msgid "manage your preferences" +msgstr "" + +#: views/emails/subscription-confirmed-html.hbs:5 +#: views/emails/subscription-confirmed-text.hbs:5 +#: views/subscription/subscribed.hbs:5 +#: views/users/login.hbs:10 +msgid "or" +msgstr "" + +#: views/emails/subscription-confirmed-html.hbs:6 +#: views/emails/subscription-confirmed-text.hbs:6 +msgid "unsubscribe here" +msgstr "" + +#: views/emails/unsubscribe-confirmed-html.hbs:1 +#: views/emails/unsubscribe-confirmed-text.hbs:1 +msgid "You are now unsubscribed" +msgstr "" + +#: views/emails/unsubscribe-confirmed-html.hbs:2 +#: views/emails/unsubscribe-confirmed-text.hbs:2 +msgid "We have removed your email address from our list." +msgstr "" + +#: views/emails/unsubscribe-confirmed-html.hbs:3 +#: views/emails/unsubscribe-confirmed-text.hbs:3 +msgid "If you unsubscribed by mistake, you can re-subscribe at:" +msgstr "" + +#: views/emails/unsubscribe-confirmed-html.hbs:4 +#: views/emails/unsubscribe-confirmed-text.hbs:4 +#: views/lists/subscription/add.hbs:16 +#: routes/lists.js:253 +msgid "Subscribe" +msgstr "" #: views/index.hbs:1 msgid "Official Mailtrain Partners" msgstr "" -#: views/layout.hbs:1 -#: routes/index.js:11 -msgid "Self hosted email newsletter app" +#: views/index.hbs:2 +msgid "Free, open source mail server solution" msgstr "" +#: views/index.hbs:3 +msgid "A reliable SMTP server, easy integration, and 12,000 messages a month free" +msgstr "" + +#: views/index.hbs:4 +msgid "List management" +msgstr "" + +#: views/index.hbs:5 +msgid "" +"Mailtrain allows you to easily manage even very large lists. Million " +"subscribers? Not a problem. You can add subscribers manually, through the " +"API or import from a CSV file. All lists come with support for custom " +"fields and merge tags as well." +msgstr "" + +#: views/index.hbs:6 +msgid "Custom fields" +msgstr "" + +#: views/index.hbs:7 +msgid "" +"Text fields, numbers, drop downs or checkboxes, Mailtrain has them all. " +"Every custom field can be included in the generated newsletters through " +"merge tags." +msgstr "" + +#: views/index.hbs:8 +msgid "List segmentation" +msgstr "" + +#: views/index.hbs:9 +msgid "" +"Send messages only to list subscribers that match predefined segmentation " +"rules. No need to create separate lists with small differences." +msgstr "" + +#: views/index.hbs:10 +msgid "Donate to author" +msgstr "" + +#: views/index.hbs:11 +msgid "" +"If you really like Mailtrain or your business benefits from it financially " +"then I would really appreciate a small donation to keep the Mailtrain " +"development engines running. You can either use Bitcoin or PayPal for " +"donations. My Bitcoin wallet is " +"15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM" +msgstr "" + +#: views/index.hbs:12 +msgid "or donate using PayPal" +msgstr "" + +#: views/index.hbs:13 +msgid "RSS Campaigns" +msgstr "" + +#: views/index.hbs:14 +msgid "" +"Setup Mailtrain to track RSS feeds and if a new entry is detected in a feed " +"then Mailtrain auto-generates a new campaign using entry data as message " +"contents and sends it to selected subscribers." +msgstr "" + +#: views/index.hbs:15 +msgid "GPG Encryption" +msgstr "" + +#: views/index.hbs:16 +msgid "" +"If a list has a custom field for a GPG Public Key set then subscribers can " +"upload their GPG public key to receive encrypted messages from the list." +msgstr "" + +#: views/index.hbs:17 +msgid "Click stats" +msgstr "" + +#: views/index.hbs:18 +msgid "" +"After a campaign is sent, check individual click statistics for every link " +"included in the message." +msgstr "" + +#: views/index.hbs:19 +msgid "Open source" +msgstr "" + +#: views/index.hbs:20 +msgid "Mailtrain is available under GPLv3 license and completely open source." +msgstr "" + +#: views/index.hbs:21 +msgid "Send via any provider" +msgstr "" + +#: views/index.hbs:22 +msgid "" +"Mailtrain recommends SendPulse even though you can use any provider that supports SMTP " +"protocol to send out your newsletters. Bounce and complaints handling via " +"webhooks is supported for SES, SparkPost, SendGrid and Mailgun, also for " +"Postfix and ZoneMTA." +msgstr "" + +#: views/index.hbs:23 +msgid "Trigger based automation" +msgstr "" + +#: views/index.hbs:24 +msgid "" +"Define automation triggers to send specific messages when a user activates " +"the trigger." +msgstr "" + +#: views/layout.hbs:2 +msgid "Toggle navigation" +msgstr "" + +#: views/layout.hbs:3 +msgid "Wiki" +msgstr "" + +#: views/layout.hbs:4 +msgid "Blog" +msgstr "" + +#: views/layout.hbs:5 +#: views/users/account.hbs:2 +#: views/users/account.hbs:3 +msgid "Account" +msgstr "" + +#: views/layout.hbs:6 +#: views/settings.hbs:2 +#: views/settings.hbs:3 +msgid "Settings" +msgstr "" + +#: views/layout.hbs:7 +#: views/users/api.hbs:2 +#: views/users/api.hbs:3 +msgid "API" +msgstr "" + +#: views/layout.hbs:8 +msgid "Log out" +msgstr "" + +#: views/layout.hbs:9 +#: views/users/forgot.hbs:2 +#: views/users/login.hbs:2 +#: views/users/login.hbs:3 +#: views/users/login.hbs:9 +#: views/users/reset.hbs:2 +msgid "Sign in" +msgstr "" + +#: views/layout.hbs:10 +msgid "Self hosted newsletter app built on top of Nodemailer" +msgstr "" + +#: views/layout.hbs:11 +#: views/layout.hbs:13 +msgid "Source on GitHub" +msgstr "" + +#: views/layout.hbs:12 +msgid "Subscribe to our newsletter" +msgstr "" + +#: views/lists/create.hbs:2 +#: views/lists/edit.hbs:2 +#: views/lists/fields/create.hbs:2 +#: views/lists/fields/edit.hbs:2 +#: views/lists/fields/fields.hbs:2 +#: views/lists/lists.hbs:2 +#: views/lists/lists.hbs:4 +#: views/lists/segments/create.hbs:2 +#: views/lists/segments/edit.hbs:2 +#: views/lists/segments/rule-configure.hbs:2 +#: views/lists/segments/rule-create.hbs:2 +#: views/lists/segments/rule-edit.hbs:2 +#: views/lists/segments/segments.hbs:2 +#: views/lists/segments/view.hbs:2 +#: views/lists/subscription/add.hbs:2 +#: views/lists/subscription/edit.hbs:2 +#: views/lists/subscription/import-failed.hbs:2 +#: views/lists/subscription/import-preview.hbs:2 +#: views/lists/subscription/import.hbs:2 +#: views/lists/view.hbs:2 +#: lib/tools.js:111 +msgid "Lists" +msgstr "" + +#: views/lists/create.hbs:3 +#: views/lists/create.hbs:4 +#: views/lists/create.hbs:9 +#: views/lists/lists.hbs:3 +msgid "Create List" +msgstr "" + +#: views/lists/create.hbs:6 +#: views/lists/edit.hbs:7 +msgid "List Name" +msgstr "" + +#: views/lists/edit.hbs:3 +#: views/lists/edit.hbs:4 +#: views/lists/view.hbs:7 +msgid "Edit List" +msgstr "" + +#: views/lists/edit.hbs:5 +msgid "View List" +msgstr "" + +#: views/lists/edit.hbs:8 +msgid "List ID" +msgstr "" + +#: views/lists/edit.hbs:9 +msgid "This is the list ID displayed to the subscribers" +msgstr "" + +#: views/lists/edit.hbs:12 +msgid "Delete List" +msgstr "" + +#: views/lists/fields/create.hbs:3 +#: views/lists/fields/edit.hbs:3 +#: views/lists/fields/fields.hbs:3 +#: views/lists/fields/fields.hbs:5 +#: views/lists/view.hbs:5 +msgid "Custom Fields" +msgstr "" + +#: views/lists/fields/create.hbs:4 +msgid "Create Field" +msgstr "" + +#: views/lists/fields/create.hbs:5 +#: views/lists/fields/fields.hbs:4 +msgid "Create Custom Field" +msgstr "" + +#: views/lists/fields/create.hbs:6 +#: views/lists/fields/create.hbs:7 +#: views/lists/fields/edit.hbs:7 +#: views/lists/fields/edit.hbs:8 +msgid "Field Name" +msgstr "" + +#: views/lists/fields/create.hbs:8 +#: views/lists/fields/edit.hbs:9 +msgid "Field Type" +msgstr "" + +#: views/lists/fields/create.hbs:9 +#: views/lists/fields/edit.hbs:10 +#: lib/models/fields.js:17 +msgid "Text" +msgstr "" + +#: views/lists/fields/create.hbs:10 +#: views/lists/fields/edit.hbs:11 +#: lib/models/fields.js:21 +msgid "Number" +msgstr "" + +#: views/lists/fields/create.hbs:11 +#: views/lists/fields/edit.hbs:12 +#: lib/models/fields.js:18 +msgid "Website" +msgstr "" + +#: views/lists/fields/create.hbs:12 +#: views/lists/fields/edit.hbs:13 +#: lib/models/fields.js:20 +msgid "GPG Public Key" +msgstr "" + +#: views/lists/fields/create.hbs:13 +#: views/lists/fields/edit.hbs:14 +#: lib/models/fields.js:19 +msgid "Multi-line text" +msgstr "" + +#: views/lists/fields/create.hbs:14 +#: views/lists/fields/edit.hbs:15 +msgid "JSON" +msgstr "" + +#: views/lists/fields/create.hbs:15 +#: views/lists/fields/edit.hbs:16 +msgid "Date" +msgstr "" + +#: views/lists/fields/create.hbs:16 +#: views/lists/fields/edit.hbs:17 +msgid "Date (MM/DD/YYYY)" +msgstr "" + +#: views/lists/fields/create.hbs:17 +#: views/lists/fields/edit.hbs:18 +#: lib/models/fields.js:26 +msgid "Date (DD/MM/YYYY)" +msgstr "" + +#: views/lists/fields/create.hbs:18 +#: views/lists/fields/edit.hbs:19 +msgid "Birthday" +msgstr "" + +#: views/lists/fields/create.hbs:19 +#: views/lists/fields/edit.hbs:20 +#: lib/models/fields.js:27 +msgid "Birthday (MM/DD)" +msgstr "" + +#: views/lists/fields/create.hbs:20 +#: views/lists/fields/edit.hbs:21 +#: lib/models/fields.js:28 +msgid "Birthday (DD/MM)" +msgstr "" + +#: views/lists/fields/create.hbs:21 +#: views/lists/fields/edit.hbs:22 +msgid "Grouped" +msgstr "" + +#: views/lists/fields/create.hbs:22 +#: views/lists/fields/edit.hbs:23 +msgid "Drop Downs" +msgstr "" + +#: views/lists/fields/create.hbs:23 +#: views/lists/fields/edit.hbs:24 +#: lib/models/fields.js:22 +msgid "Radio Buttons" +msgstr "" + +#: views/lists/fields/create.hbs:24 +#: views/lists/fields/edit.hbs:25 +#: lib/models/fields.js:23 +msgid "Checkboxes" +msgstr "" + +#: views/lists/fields/create.hbs:25 +#: views/lists/fields/edit.hbs:26 +msgid "Option for a group value" +msgstr "" + +#: views/lists/fields/create.hbs:26 +#: views/lists/fields/edit.hbs:27 +msgid "Group" +msgstr "" + +#: views/lists/fields/create.hbs:28 +#: views/lists/fields/edit.hbs:29 +msgid "Required for group options" +msgstr "" + +#: views/lists/fields/create.hbs:29 +#: views/lists/fields/create.hbs:30 +#: views/lists/fields/edit.hbs:35 +#: views/lists/fields/edit.hbs:36 +#: views/lists/fields/fields.hbs:9 +msgid "Default merge tag value" +msgstr "" + +#: views/lists/fields/create.hbs:32 +#: views/lists/fields/edit.hbs:34 +msgid "" +"For group elements like checkboxes you can control the appearance of the " +"merge tag with an optional template. The template uses handlebars syntax " +"and you can find all values from {{values}} array, for example " +"{{#each values}} {{this}} {{/each}}. If template is not " +"defined then multiple values are joined with commas. You can also use this " +"template to render JSON values (if the JSON is an array then the array is " +"exposed as values, otherwise you can access the JSON keys " +"directly)." +msgstr "" + +#: views/lists/fields/create.hbs:33 +#: views/lists/fields/edit.hbs:37 +msgid "Visible" +msgstr "" + +#: views/lists/fields/create.hbs:34 +msgid "Add Field" +msgstr "" + +#: views/lists/fields/edit.hbs:4 +msgid "Edit Field" +msgstr "" + +#: views/lists/fields/edit.hbs:5 +msgid "Edit Custom Field" +msgstr "" + +#: views/lists/fields/edit.hbs:6 +msgid "Back to fields" +msgstr "" + +#: views/lists/fields/edit.hbs:30 +#: views/lists/fields/fields.hbs:8 +#: views/partials/merge-tag-reference.hbs:3 +msgid "Merge tag" +msgstr "" + +#: views/lists/fields/edit.hbs:31 +msgid "Merge Tag" +msgstr "" + +#: views/lists/fields/edit.hbs:32 +msgid "Put this tag in your content:" +msgstr "" + +#: views/lists/fields/edit.hbs:38 +msgid "Delete Field" +msgstr "" + +#: views/lists/fields/fields.hbs:7 +#: views/lists/view.hbs:25 +msgid "Type" +msgstr "" + +#: views/lists/fields/fields.hbs:10 +#: views/lists/fields/fields.hbs:11 +#: views/lists/lists.hbs:9 +#: views/lists/segments/segments.hbs:8 +#: views/lists/segments/view.hbs:12 +#: views/templates/templates.hbs:7 +#: views/triggers/triggers.hbs:14 +#: routes/campaigns.js:287 +#: routes/campaigns.js:576 +#: routes/campaigns.js:626 +#: routes/lists.js:222 +#: routes/triggers.js:297 +msgid "Edit" +msgstr "" + +#: views/lists/lists.hbs:6 +msgid "ID" +msgstr "" + +#: views/lists/lists.hbs:7 +msgid "Subscribers" +msgstr "" + +#: views/lists/segments/create.hbs:3 +#: views/lists/segments/edit.hbs:3 +#: views/lists/segments/rule-configure.hbs:3 +#: views/lists/segments/rule-create.hbs:3 +#: views/lists/segments/rule-edit.hbs:3 +#: views/lists/segments/segments.hbs:3 +#: views/lists/segments/segments.hbs:5 +#: views/lists/segments/view.hbs:3 +#: views/lists/view.hbs:6 +#: views/lists/view.hbs:13 +msgid "Segments" +msgstr "" + +#: views/lists/segments/create.hbs:4 +#: views/lists/segments/create.hbs:5 +#: views/lists/segments/rule-configure.hbs:4 +#: views/lists/segments/rule-create.hbs:4 +#: views/lists/segments/rule-edit.hbs:4 +#: views/lists/segments/segments.hbs:4 +msgid "Create Segment" +msgstr "" + +#: views/lists/segments/create.hbs:6 +#: views/lists/segments/create.hbs:7 +#: views/lists/segments/edit.hbs:7 +#: views/lists/segments/edit.hbs:8 +msgid "Segment Name" +msgstr "" + +#: views/lists/segments/create.hbs:8 +#: views/lists/segments/edit.hbs:9 +msgid "Rule match" +msgstr "" + +#: views/lists/segments/create.hbs:10 +#: views/lists/segments/edit.hbs:11 +msgid "All rules must match" +msgstr "" + +#: views/lists/segments/create.hbs:11 +#: views/lists/segments/edit.hbs:12 +msgid "Any rule can match" +msgstr "" + +#: views/lists/segments/create.hbs:12 +msgid "Add Segment" +msgstr "" + +#: views/lists/segments/edit.hbs:4 +#: views/lists/segments/edit.hbs:5 +#: views/lists/segments/view.hbs:6 +#: views/lists/view.hbs:11 +msgid "Edit Segment" +msgstr "" + +#: views/lists/segments/edit.hbs:6 +msgid "Back to segments" +msgstr "" + +#: views/lists/segments/edit.hbs:13 +msgid "Delete Segment" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:5 +#: views/lists/segments/rule-create.hbs:5 +#: views/lists/segments/rule-edit.hbs:5 +#: views/lists/segments/view.hbs:4 +msgid "Create Rule" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:6 +#: views/lists/segments/rule-create.hbs:6 +#: views/lists/segments/rule-edit.hbs:6 +#: views/lists/segments/view.hbs:10 +msgid "Rule" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:7 +#: views/lists/segments/rule-configure.hbs:8 +#: views/lists/segments/rule-configure.hbs:10 +#: views/lists/segments/rule-configure.hbs:13 +#: views/lists/segments/rule-configure.hbs:25 +#: views/lists/segments/rule-configure.hbs:30 +#: views/lists/segments/rule-edit.hbs:7 +#: views/lists/segments/rule-edit.hbs:8 +#: views/lists/segments/rule-edit.hbs:10 +#: views/lists/segments/rule-edit.hbs:15 +#: views/lists/segments/rule-edit.hbs:29 +#: views/lists/segments/rule-edit.hbs:34 +#: views/lists/segments/view.hbs:11 +msgid "Value" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:9 +#: views/lists/segments/rule-edit.hbs:9 +msgid "" +"Use % for wildcard character, e.g. \"%test\" to match all values that end " +"with \"test\"" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:11 +#: views/lists/segments/rule-configure.hbs:14 +#: views/lists/segments/rule-configure.hbs:26 +#: views/lists/segments/rule-edit.hbs:11 +#: views/lists/segments/rule-edit.hbs:16 +#: views/lists/segments/rule-edit.hbs:30 +msgid "Use exact match" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:12 +#: views/lists/segments/rule-configure.hbs:15 +#: views/lists/segments/rule-configure.hbs:27 +#: views/lists/segments/rule-edit.hbs:12 +#: views/lists/segments/rule-edit.hbs:17 +#: views/lists/segments/rule-edit.hbs:31 +msgid "Use range match" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:16 +#: views/lists/segments/rule-edit.hbs:20 +msgid "Use relative range match" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:17 +#: views/lists/segments/rule-configure.hbs:28 +#: views/lists/segments/rule-edit.hbs:13 +#: views/lists/segments/rule-edit.hbs:18 +#: views/lists/segments/rule-edit.hbs:21 +#: views/lists/segments/rule-edit.hbs:32 +msgid "From" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:18 +#: views/lists/segments/rule-configure.hbs:22 +#: views/lists/segments/rule-edit.hbs:22 +#: views/lists/segments/rule-edit.hbs:26 +msgid "days" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:19 +#: views/lists/segments/rule-configure.hbs:23 +#: views/lists/segments/rule-edit.hbs:23 +#: views/lists/segments/rule-edit.hbs:27 +msgid "before today" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:20 +#: views/lists/segments/rule-configure.hbs:24 +#: views/lists/segments/rule-edit.hbs:24 +#: views/lists/segments/rule-edit.hbs:28 +msgid "after today" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:21 +#: views/lists/segments/rule-configure.hbs:29 +#: views/lists/segments/rule-edit.hbs:14 +#: views/lists/segments/rule-edit.hbs:19 +#: views/lists/segments/rule-edit.hbs:25 +#: views/lists/segments/rule-edit.hbs:33 +msgid "to" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:31 +#: views/lists/segments/rule-edit.hbs:35 +#: lib/models/segments.js:156 +#: lib/models/segments.js:418 +msgid "Selected" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:32 +#: views/lists/segments/rule-edit.hbs:36 +#: lib/models/segments.js:156 +#: lib/models/segments.js:418 +msgid "Not selected" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:33 +msgid "Add Rule" +msgstr "" + +#: views/lists/segments/rule-create.hbs:8 +#: views/lists/subscription/import.hbs:12 +#: views/triggers/create-select.hbs:9 +msgid "Next" +msgstr "" + +#: views/lists/segments/rule-edit.hbs:37 +msgid "Delete Rule" +msgstr "" + +#: views/lists/segments/segments.hbs:7 +msgid "Match" +msgstr "" + +#: views/lists/segments/view.hbs:5 +#: views/lists/view.hbs:12 +msgid "Segment" +msgstr "" + +#: views/lists/segments/view.hbs:7 +msgid "Match rules" +msgstr "" + +#: views/lists/segments/view.hbs:8 +msgid "Matching subscribers" +msgstr "" + +#: views/lists/segments/view.hbs:9 +msgid "show" +msgstr "" + +#: views/lists/subscription/add.hbs:3 +#: views/lists/subscription/add.hbs:4 +msgid "Add subscriber" +msgstr "" + +#: views/lists/subscription/add.hbs:5 +#: views/subscription/manage.hbs:2 +#: views/subscription/subscribe.hbs:3 +#: views/users/account.hbs:7 +msgid "Email Address" +msgstr "" + +#: views/lists/subscription/add.hbs:8 +#: views/lists/subscription/edit.hbs:9 +#: views/settings.hbs:82 +#: views/settings.hbs:97 +#: views/subscription/manage.hbs:7 +#: views/subscription/subscribe.hbs:7 +msgid "Begins with" +msgstr "" + +#: views/lists/subscription/add.hbs:9 +#: views/lists/subscription/edit.hbs:10 +msgid "" +"Insert a GPG public key that will be used to encrypt messages sent this " +"subscriber" +msgstr "" + +#: views/lists/subscription/add.hbs:11 +#: views/lists/subscription/edit.hbs:12 +#: views/lists/subscription/import-preview.hbs:9 +msgid "Timezone" +msgstr "" + +#: views/lists/subscription/add.hbs:13 +#: views/lists/subscription/edit.hbs:13 +msgid "Test user?" +msgstr "" + +#: views/lists/subscription/add.hbs:14 +#: views/lists/subscription/edit.hbs:14 +msgid "" +"If checked then this subscription can be used for previewing campaign " +"messages" +msgstr "" + +#: views/lists/subscription/add.hbs:15 +msgid "" +"This person will not receive a confirmation email so make sure that you " +"have permission to email them." +msgstr "" + +#: views/lists/subscription/edit.hbs:3 +#: views/lists/subscription/edit.hbs:4 +msgid "Edit subscriber" +msgstr "" + +#: views/lists/subscription/edit.hbs:5 +#: views/lists/subscription/import-failed.hbs:5 +msgid "Back to list" +msgstr "" + +#: views/lists/subscription/edit.hbs:6 +#: views/lists/subscription/import-preview.hbs:6 +#: views/subscription/unsubscribe.hbs:3 +#: lib/helpers.js:26 +#: lib/models/segments.js:11 +msgid "Email address" +msgstr "" + +#: views/lists/subscription/edit.hbs:16 +msgid "Delete Subscription" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:3 +msgid "Import status" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:4 +msgid "Failed addresses" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:6 +msgid "see here" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:10 +msgid "Fail reason" +msgstr "" + +#: views/lists/subscription/import-preview.hbs:3 +#: views/lists/subscription/import-preview.hbs:4 +#: views/lists/subscription/import.hbs:3 +#: views/lists/subscription/import.hbs:4 +msgid "Import subscribers" +msgstr "" + +#: views/lists/subscription/import-preview.hbs:10 +#: views/users/api.hbs:27 +#: views/users/api.hbs:35 +#: views/users/api.hbs:43 +#: views/users/api.hbs:55 +msgid "Example" +msgstr "" + +#: views/lists/subscription/import-preview.hbs:11 +msgid "Start import" +msgstr "" + +#: views/lists/subscription/import.hbs:5 +msgid "CSV File" +msgstr "" + +#: views/lists/subscription/import.hbs:6 +msgid "CSV delimiter" +msgstr "" + +#: views/lists/subscription/import.hbs:7 +msgid "Categorize the imported subscribers as" +msgstr "" + +#: views/lists/subscription/import.hbs:8 +#: routes/lists.js:171 +msgid "Subscribed" +msgstr "" + +#: views/lists/subscription/import.hbs:9 +msgid "Regular subscriber addresses" +msgstr "" + +#: views/lists/subscription/import.hbs:11 +msgid "Suppressed emails that will be unsubscribed from your list" +msgstr "" + +#: views/lists/view.hbs:3 +msgid "Subscription Form" +msgstr "" + +#: views/lists/view.hbs:4 +msgid "List Actions" +msgstr "" + +#: views/lists/view.hbs:8 +#: views/triggers/create-select.hbs:3 +#: views/triggers/create-select.hbs:4 +#: views/triggers/create.hbs:3 +#: views/triggers/create.hbs:4 +#: views/triggers/create.hbs:27 +#: views/triggers/triggers.hbs:3 +msgid "Create Trigger" +msgstr "" + +#: views/lists/view.hbs:9 +msgid "Add Subscriber" +msgstr "" + +#: views/lists/view.hbs:10 +msgid "Import Subscribers" +msgstr "" + +#: views/lists/view.hbs:14 +msgid "Create New Segment" +msgstr "" + +#: views/lists/view.hbs:15 +msgid "Filter" +msgstr "" + +#: views/lists/view.hbs:16 +msgid "Subscriptions" +msgstr "" + +#: views/lists/view.hbs:17 +msgid "Imports" +msgstr "" + +#: views/lists/view.hbs:24 +#: routes/campaigns.js:266 +#: routes/lists.js:265 +msgid "Finished" +msgstr "" + +#: views/lists/view.hbs:26 +msgid "Added" +msgstr "" + +#: views/lists/view.hbs:27 +msgid "Updated" +msgstr "" + +#: views/lists/view.hbs:28 +msgid "Failed" +msgstr "" + +#: views/lists/view.hbs:30 +msgid "Are you sure? This action should only be called to resolve stalled imports" +msgstr "" + +#: views/lists/view.hbs:31 +msgid "Restart" +msgstr "" + +#: views/partials/codeeditor.hbs:1 +#: views/partials/summernote.hbs:1 +msgid "Template content (HTML)" +msgstr "" + +#: views/partials/html-preview.hbs:1 +msgid "Toggle HTML preview" +msgstr "" + +#: views/partials/merge-tag-reference.hbs:1 +msgid "Merge tag reference" +msgstr "" + +#: views/partials/merge-tag-reference.hbs:2 +msgid "" +"Merge tags are tags that are replaced before sending out the message. The " +"format of the merge tag is the following: [TAG_NAME] or " +"[TAG_NAME/fallback] where fallback is an optional " +"text value used when TAG_NAME is empty." +msgstr "" + +#: views/partials/plaintext.hbs:1 +msgid "Template content (plaintext)" +msgstr "" + +#: views/settings.hbs:5 +msgid "Service Address (URL)" +msgstr "" + +#: views/settings.hbs:6 +msgid "Enter the URL this service can be reached from" +msgstr "" + +#: views/settings.hbs:7 +msgid "Admin Email" +msgstr "" + +#: views/settings.hbs:8 +msgid "Enter the email address that will be used as \"from\" for system messages" +msgstr "" + +#: views/settings.hbs:9 +msgid "Disable WYSIWYG editor" +msgstr "" + +#: views/settings.hbs:10 +msgid "If checked then message editor displays HTML code without the preview" +msgstr "" + +#: views/settings.hbs:11 +msgid "Disable subscription confirmation messages" +msgstr "" + +#: views/settings.hbs:12 +msgid "" +"If checked then do not send a confirmation message that states the " +"subscriber is now subscribed or unsubscribed. This does not disable double " +"opt-in messages." +msgstr "" + +#: views/settings.hbs:13 +msgid "Tracking ID" +msgstr "" + +#: views/settings.hbs:14 +msgid "Enter Google Analytics tracking code" +msgstr "" + +#: views/settings.hbs:15 +msgid "Frontpage shout out" +msgstr "" + +#: views/settings.hbs:16 +msgid "HTML code shown in the front page header section" +msgstr "" + +#: views/settings.hbs:17 +msgid "Campaign defaults" +msgstr "" + +#: views/settings.hbs:18 +msgid "Sender name" +msgstr "" + +#: views/settings.hbs:19 +msgid "Sender name, eg. My Awesome Company Ltd." +msgstr "" + +#: views/settings.hbs:20 +msgid "Default address" +msgstr "" + +#: views/settings.hbs:21 +msgid "Contact address to provide, eg. 1234 Main Street, Anywhere, MA 01234, USA" +msgstr "" + +#: views/settings.hbs:22 +msgid "Default \"from name\"" +msgstr "" + +#: views/settings.hbs:24 +msgid "Default \"from\" email" +msgstr "" + +#: views/settings.hbs:26 +msgid "Default \"subject line\"" +msgstr "" + +#: views/settings.hbs:28 +msgid "Default homepage (URL)" +msgstr "" + +#: views/settings.hbs:29 +msgid "URL to redirect the subscribed users to, eg. http://example.com/" +msgstr "" + +#: views/settings.hbs:30 +msgid "Mailer Settings" +msgstr "" + +#: views/settings.hbs:31 +msgid "These settings are required to send out e-mail messages" +msgstr "" + +#: views/settings.hbs:32 +msgid "SMTP" +msgstr "" + +#: views/settings.hbs:33 +msgid "AWS SES" +msgstr "" + +#: views/settings.hbs:34 +msgid "Use SMTP for sending mail" +msgstr "" + +#: views/settings.hbs:35 +msgid "Hostname" +msgstr "" + +#: views/settings.hbs:36 +msgid "Port" +msgstr "" + +#: views/settings.hbs:37 +msgid "Port, eg. 465. Autodetected if left blank" +msgstr "" + +#: views/settings.hbs:38 +msgid "Encryption" +msgstr "" + +#: views/settings.hbs:39 +msgid "Disable SMTP authentication" +msgstr "" + +#: views/settings.hbs:40 +#: views/users/forgot.hbs:9 +#: views/users/login.hbs:4 +#: views/users/login.hbs:5 +msgid "Username" +msgstr "" + +#: views/settings.hbs:41 +msgid "Username, eg. myaccount@example.com" +msgstr "" + +#: views/settings.hbs:42 +#: views/settings.hbs:43 +#: views/users/login.hbs:6 +#: views/users/login.hbs:7 +msgid "Password" +msgstr "" + +#: views/settings.hbs:44 +msgid "Use SES API for sending mail" +msgstr "" + +#: views/settings.hbs:45 +msgid "Access Key" +msgstr "" + +#: views/settings.hbs:46 +msgid "AWS Access Key Id" +msgstr "" + +#: views/settings.hbs:47 +msgid "Secret Key" +msgstr "" + +#: views/settings.hbs:48 +msgid "AWS Secret Access Key" +msgstr "" + +#: views/settings.hbs:49 +msgid "Region" +msgstr "" + +#: views/settings.hbs:50 +msgid "Checking" +msgstr "" + +#: views/settings.hbs:51 +msgid "Check Mailer config" +msgstr "" + +#: views/settings.hbs:52 +msgid "Don't have an SMTP account yet? Create a free SendPulse account" +msgstr "" + +#: views/settings.hbs:53 +msgid "here" +msgstr "" + +#: views/settings.hbs:54 +msgid "Advanced Mailer settings" +msgstr "" + +#: views/settings.hbs:55 +msgid "Log SMTP transactions" +msgstr "" + +#: views/settings.hbs:56 +msgid "Allow self-signed certificates" +msgstr "" + +#: views/settings.hbs:57 +msgid "Max connections" +msgstr "" + +#: views/settings.hbs:58 +msgid "The count of max connections, eg. 10" +msgstr "" + +#: views/settings.hbs:59 +msgid "" +"The count of maximum simultaneous connections to make against the SMTP " +"server (defaults to 5). This limit is per sending process." +msgstr "" + +#: views/settings.hbs:60 +msgid "Max messages" +msgstr "" + +#: views/settings.hbs:61 +msgid "The count of max messages, eg. 100" +msgstr "" + +#: views/settings.hbs:62 +msgid "" +"he number of messages to send through a single connection before the " +"connection is closed and reopened (defaults to 100)" +msgstr "" + +#: views/settings.hbs:63 +msgid "Throttling" +msgstr "" + +#: views/settings.hbs:64 +msgid "Messages per hour eg. 1000" +msgstr "" + +#: views/settings.hbs:65 +msgid "" +"Maximum number of messages to send in an hour. Leave empty or zero for no " +"throttling. If your provider uses a different speed limit (messages/minute " +"or messages/second) then convert this limit into messages/hour (1m/s => " +"3600m/h). This limit is per sending process." +msgstr "" + +#: views/settings.hbs:66 +msgid "VERP bounce handling" +msgstr "" + +#: views/settings.hbs:67 +msgid "" +"Mailtrain is able to use VERP based routing to detect bounces. In this case " +"the message is sent to the recipient using a custom VERP address as the " +"return path of the message. If the message is not accepted a bounce email " +"is sent to this special VERP address and thus a bounce is detected." +msgstr "" + +#: views/settings.hbs:68 +msgid "" +"To get VERP working you need to set up a DNS MX record that points to your " +"Mailtrain hostname. You must also ensure that Mailtrain VERP interface is " +"available from port 25 of your server (port 25 usually requires root user " +"privileges). This way if anyone tries to send email to " +"someuser@verp-hostname then the email should end up to this server." +msgstr "" + +#: views/settings.hbs:69 +msgid "" +"VERP usually only works if you are using your own SMTP server. Regular " +"relay services (SES, SparkPost, Gmail etc.) tend to remove the VERP address " +"from the message." +msgstr "" + +#: views/settings.hbs:70 +msgid "Use VERP to catch bounces" +msgstr "" + +#: views/settings.hbs:71 +msgid "Server hostname" +msgstr "" + +#: views/settings.hbs:72 +msgid "The VERP server hostname, eg. bounces.example.com" +msgstr "" + +#: views/settings.hbs:73 +msgid "" +"VERP bounce handling server hostname. This hostname is used in the SMTP " +"envelope FROM address and the MX DNS records should point to this server" +msgstr "" + +#: views/settings.hbs:74 +msgid "" +"VERP bounce handling server is not enabled. Modify your server " +"configuration file and restart server to enable it" +msgstr "" + +#: views/settings.hbs:75 +msgid "GPG Signing" +msgstr "" + +#: views/settings.hbs:76 +msgid "" +"Only messages that are encrypted can be signed. Subsribers who have not set " +"up a GPG public key in their profile receive normal email messages. Users " +"with GPG key set receive encrypted messages and if you have signing key " +"also set, the messages are signed with this key." +msgstr "" + +#: views/settings.hbs:77 +msgid "" +"Do not use sensitive keys here. The private key and passphrase are not " +"encrypted in the database." +msgstr "" + +#: views/settings.hbs:78 +msgid "Private Key Passphrase" +msgstr "" + +#: views/settings.hbs:79 +msgid "Passphrase for the key if set" +msgstr "" + +#: views/settings.hbs:80 +msgid "Only fill this if your private key is encrypted with a passphrase" +msgstr "" + +#: views/settings.hbs:81 +msgid "GPG Private Key" +msgstr "" + +#: views/settings.hbs:83 +msgid "" +"This value is optional. If you do not provide a private key GPG encrypted " +"messages are sent without signing." +msgstr "" + +#: views/settings.hbs:84 +msgid "DKIM Signing by ZoneMTA" +msgstr "" + +#: views/settings.hbs:85 +msgid "" +"If you are using ZoneMTA then Mailtrain can provide a DKIM key for signing " +"all outgoing messages. Other services usually provide their own means to " +"DKIM sign your messages" +msgstr "" + +#: views/settings.hbs:86 +msgid "" +"Do not use sensitive keys here. The private key is not encrypted in the " +"database." +msgstr "" + +#: views/settings.hbs:87 +msgid "ZoneMTA DKIM API Key" +msgstr "" + +#: views/settings.hbs:88 +msgid "Some secret value" +msgstr "" + +#: views/settings.hbs:89 +msgid "" +"Secret value known to ZoneMTA for requesting DKIM key information. If this " +"value was generated by the Mailtrain installation script then you can keep " +"it as it is" +msgstr "" + +#: views/settings.hbs:90 +msgid "DKIM domain" +msgstr "" + +#: views/settings.hbs:91 +msgid "Domain name for the DKIM key" +msgstr "" + +#: views/settings.hbs:92 +msgid "Leave blank to use the sender email address domain" +msgstr "" + +#: views/settings.hbs:93 +#: views/settings.hbs:94 +msgid "DKIM key selector" +msgstr "" + +#: views/settings.hbs:95 +msgid "Signing is disabled without a valid selector value" +msgstr "" + +#: views/settings.hbs:96 +msgid "DKIM Private Key" +msgstr "" + +#: views/settings.hbs:98 +msgid "" +"This value is optional. If you do not provide a private key then messages " +"are not signed." +msgstr "" + +#: views/subscription/confirm-notice.hbs:1 +#: views/subscription/subscribe.hbs:1 +msgid "Warning!" +msgstr "" + +#: views/subscription/confirm-notice.hbs:2 +msgid "If JavaScript was not enabled then no confirmation message was sent" +msgstr "" + +#: views/subscription/confirm-notice.hbs:3 +msgid "Almost finished." +msgstr "" + +#: views/subscription/confirm-notice.hbs:4 +msgid "" +"We need to confirm your email address. To complete the subscription " +"process, please click the link in the email we just sent you." +msgstr "" + +#: views/subscription/confirm-notice.hbs:5 +#: views/subscription/unsubscribe-notice.hbs:3 +#: views/subscription/updated-notice.hbs:3 +msgid "return to our website" +msgstr "" + +#: views/subscription/manage-address.hbs:1 +msgid "Update your Email Address" +msgstr "" + +#: views/subscription/manage-address.hbs:2 +msgid "Existing Email Address" +msgstr "" + +#: views/subscription/manage-address.hbs:3 +msgid "New Email Address" +msgstr "" + +#: views/subscription/manage-address.hbs:4 +msgid "Your new email address" +msgstr "" + +#: views/subscription/manage-address.hbs:5 +msgid "" +"You will receive a confirmation request to your new email address that you " +"need to accept before your email is actually changed" +msgstr "" + +#: views/subscription/manage-address.hbs:6 +msgid "Update Email Address" +msgstr "" + +#: views/subscription/manage.hbs:1 +msgid "Update your preferences" +msgstr "" + +#: views/subscription/manage.hbs:3 +msgid "want to change it?" +msgstr "" + +#: views/subscription/manage.hbs:6 +#: views/subscription/subscribe.hbs:6 +msgid "Download signature verification key" +msgstr "" + +#: views/subscription/manage.hbs:8 +#: views/subscription/subscribe.hbs:8 +msgid "Insert your GPG public key here to encrypt messages sent to your address" +msgstr "" + +#: views/subscription/manage.hbs:9 +#: views/subscription/subscribe.hbs:9 +msgid "optional" +msgstr "" + +#: views/subscription/manage.hbs:11 +msgid "Update Profile" +msgstr "" + +#: views/subscription/subscribe.hbs:2 +msgid "JavaScript must be enabled in order for the subscription form to work" +msgstr "" + +#: views/subscription/subscribe.hbs:11 +msgid "Subscribe to list" +msgstr "" + +#: views/subscription/subscribed.hbs:3 +msgid "Thank you for subscribing!" +msgstr "" + +#: views/subscription/subscribed.hbs:4 +msgid "continue to our website" +msgstr "" + +#: views/subscription/unsubscribe-notice.hbs:1 +msgid "Unsubscribe Successful" +msgstr "" + +#: views/subscription/unsubscribe-notice.hbs:2 +msgid "You have been removed from:" +msgstr "" + +#: views/subscription/unsubscribe.hbs:2 +msgid "Enter your email address to unsubscribe from:" +msgstr "" + +#: views/subscription/updated-notice.hbs:1 +msgid "Profile Updated" +msgstr "" + +#: views/subscription/updated-notice.hbs:2 +msgid "Your profile information has been updated." +msgstr "" + +#: views/templates/create.hbs:2 +#: views/templates/edit.hbs:2 +#: views/templates/templates.hbs:2 +#: views/templates/templates.hbs:4 +#: lib/tools.js:115 +msgid "Templates" +msgstr "" + +#: views/templates/create.hbs:3 +#: views/templates/create.hbs:4 +#: views/templates/create.hbs:12 +#: views/templates/templates.hbs:3 +msgid "Create Template" +msgstr "" + +#: views/templates/create.hbs:5 +#: views/templates/edit.hbs:6 +msgid "Template name" +msgstr "" + +#: views/templates/create.hbs:6 +#: views/templates/edit.hbs:7 +msgid "Name for this template, eg. Newsletter" +msgstr "" + +#: views/templates/create.hbs:7 +msgid "HTML Editor" +msgstr "" + +#: views/templates/create.hbs:10 +#: views/templates/edit.hbs:9 +msgid "Optional comments about this template" +msgstr "" + +#: views/templates/edit.hbs:3 +#: views/templates/edit.hbs:4 +msgid "Edit Template" +msgstr "" + +#: views/templates/edit.hbs:5 +msgid "Back to templates" +msgstr "" + +#: views/templates/edit.hbs:11 +msgid "Delete Template" +msgstr "" + +#: views/triggers/create-select.hbs:2 +#: views/triggers/create.hbs:2 +#: views/triggers/edit.hbs:2 +#: views/triggers/triggered.hbs:2 +#: views/triggers/triggers.hbs:2 +#: views/triggers/triggers.hbs:4 +msgid "Automation Triggers" +msgstr "" + +#: views/triggers/create-select.hbs:5 +msgid "Select a list for the trigger" +msgstr "" + +#: views/triggers/create.hbs:5 +#: views/triggers/edit.hbs:6 +msgid "Trigger name" +msgstr "" + +#: views/triggers/create.hbs:6 +#: views/triggers/edit.hbs:7 +msgid "Name for this trigger, eg. Inactive subscribers" +msgstr "" + +#: views/triggers/create.hbs:8 +#: views/triggers/edit.hbs:9 +msgid "Optional comments about this trigger" +msgstr "" + +#: views/triggers/create.hbs:12 +#: views/triggers/edit.hbs:14 +msgid "Trigger rule" +msgstr "" + +#: views/triggers/create.hbs:13 +#: views/triggers/edit.hbs:15 +msgid "Trigger fires" +msgstr "" + +#: views/triggers/create.hbs:14 +#: views/triggers/edit.hbs:16 +msgid "days after:" +msgstr "" + +#: views/triggers/create.hbs:15 +#: views/triggers/edit.hbs:17 +msgid "Subscription" +msgstr "" + +#: views/triggers/create.hbs:16 +#: views/triggers/create.hbs:21 +#: views/triggers/edit.hbs:18 +#: views/triggers/edit.hbs:23 +msgid "Event" +msgstr "" + +#: views/triggers/create.hbs:18 +#: views/triggers/create.hbs:19 +#: views/triggers/create.hbs:25 +#: views/triggers/edit.hbs:20 +#: views/triggers/edit.hbs:21 +#: views/triggers/edit.hbs:27 +msgid "Campaign" +msgstr "" + +#: views/triggers/create.hbs:23 +#: views/triggers/edit.hbs:25 +msgid "Trigger action" +msgstr "" + +#: views/triggers/create.hbs:24 +#: views/triggers/edit.hbs:26 +msgid "Send campaign" +msgstr "" + +#: views/triggers/edit.hbs:3 +#: views/triggers/edit.hbs:4 +msgid "Edit Trigger" +msgstr "" + +#: views/triggers/edit.hbs:5 +msgid "Back to triggers" +msgstr "" + +#: views/triggers/edit.hbs:11 +msgid "Trigger is enabled" +msgstr "" + +#: views/triggers/edit.hbs:29 +msgid "Delete Trigger" +msgstr "" + +#: views/triggers/triggered.hbs:3 +msgid "Triggered" +msgstr "" + +#: views/triggers/triggered.hbs:4 +msgid "Triggered subscribers" +msgstr "" + +#: views/triggers/triggered.hbs:5 +msgid "Subscribers who caused this trigger to fire" +msgstr "" + +#: views/triggers/triggered.hbs:9 +msgid "Triggered time" +msgstr "" + +#: views/triggers/triggers.hbs:9 +msgid "Trigger" +msgstr "" + +#: views/triggers/triggers.hbs:10 +msgid "Target Campaign" +msgstr "" + +#: views/triggers/triggers.hbs:11 +msgid "Triggered count" +msgstr "" + +#: views/triggers/triggers.hbs:12 +msgid "Enabled" +msgstr "" + +#: views/triggers/triggers.hbs:13 +msgid "Disabled" +msgstr "" + +#: views/users/account.hbs:4 +msgid "This account is managed through LDAP." +msgstr "" + +#: views/users/account.hbs:5 +msgid "Associated Email Address" +msgstr "" + +#: views/users/account.hbs:8 +msgid "Your e-mail address" +msgstr "" + +#: views/users/account.hbs:9 +msgid "This address is used for account recovery in case you loose your password" +msgstr "" + +#: views/users/account.hbs:10 +msgid "Password change" +msgstr "" + +#: views/users/account.hbs:11 +msgid "" +"You only need to fill out this form if you want to change your current " +"password" +msgstr "" + +#: views/users/account.hbs:12 +#: views/users/account.hbs:13 +msgid "Current Password" +msgstr "" + +#: views/users/account.hbs:14 +#: views/users/account.hbs:15 +#: views/users/reset.hbs:6 +#: views/users/reset.hbs:7 +msgid "New Password" +msgstr "" + +#: views/users/account.hbs:16 +msgid "Confirm Password" +msgstr "" + +#: views/users/account.hbs:17 +#: views/users/reset.hbs:8 +msgid "Confirm New Password" +msgstr "" + +#: views/users/api.hbs:4 +msgid "Are you sure? Resetting would invalidate the currently existing token." +msgstr "" + +#: views/users/api.hbs:5 +msgid "Are you sure?" +msgstr "" + +#: views/users/api.hbs:6 +msgid "Reset Access Token" +msgstr "" + +#: views/users/api.hbs:7 +msgid "Generate Access Token" +msgstr "" + +#: views/users/api.hbs:8 +msgid "Personal access token:" +msgstr "" + +#: views/users/api.hbs:9 +msgid "Access token not yet generated" +msgstr "" + +#: views/users/api.hbs:10 +msgid "Notes about the API" +msgstr "" + +#: views/users/api.hbs:11 +msgid "" +"API response is a JSON structure with error and " +"data properties. If the response error has a " +"value set then the request failed." +msgstr "" + +#: views/users/api.hbs:12 +msgid "" +"You need to define proper Content-Type when making a request. " +"You can either use application/x-www-form-urlencoded for " +"normal form data or application/json for a JSON payload. Using " +"multipart/form-data is not supported." +msgstr "" + +#: views/users/api.hbs:13 +msgid "Add subscription" +msgstr "" + +#: views/users/api.hbs:14 +msgid "" +"This API call either inserts a new subscription or updates existing. Fields " +"not included are left as is, so if you update only LAST_NAME value, then " +"FIRST_NAME is kept untouched for an existing subscription." +msgstr "" + +#: views/users/api.hbs:15 +#: views/users/api.hbs:17 +#: views/users/api.hbs:30 +#: views/users/api.hbs:32 +#: views/users/api.hbs:38 +#: views/users/api.hbs:40 +#: views/users/api.hbs:46 +#: views/users/api.hbs:48 +msgid "arguments" +msgstr "" + +#: views/users/api.hbs:16 +#: views/users/api.hbs:31 +#: views/users/api.hbs:39 +#: views/users/api.hbs:47 +msgid "your personal access token" +msgstr "" + +#: views/users/api.hbs:18 +#: views/users/api.hbs:33 +#: views/users/api.hbs:41 +msgid "subscriber's email address" +msgstr "" + +#: views/users/api.hbs:19 +#: views/users/api.hbs:34 +#: views/users/api.hbs:42 +#: views/users/api.hbs:50 +msgid "required" +msgstr "" + +#: views/users/api.hbs:20 +msgid "subscriber's first name" +msgstr "" + +#: views/users/api.hbs:21 +msgid "subscriber's last name" +msgstr "" + +#: views/users/api.hbs:22 +msgid "" +"subscriber's timezone (eg. \"Europe/Tallinn\", \"PST\" or \"UTC\"). If not " +"set defaults to \"UTC\"" +msgstr "" + +#: views/users/api.hbs:23 +msgid "" +"custom field value. Use yes/no for option group values (checkboxes, radios, " +"drop downs)" +msgstr "" + +#: views/users/api.hbs:24 +msgid "Additional POST arguments" +msgstr "" + +#: views/users/api.hbs:25 +msgid "" +"set to \"yes\" if you want to make sure the email is marked as subscribed " +"even if it was previously marked as unsubscribed. If the email was already " +"unsubscribed/blocked then subscription status is not changed" +msgstr "" + +#: views/users/api.hbs:26 +msgid "" +"set to \"yes\" if you want to send confirmation email to the subscriber " +"before actually marking as subscribed" +msgstr "" + +#: views/users/api.hbs:28 +msgid "Remove subscription" +msgstr "" + +#: views/users/api.hbs:29 +msgid "This API call marks a subscription as unsubscribed" +msgstr "" + +#: views/users/api.hbs:36 +msgid "Delete subscription" +msgstr "" + +#: views/users/api.hbs:37 +msgid "This API call deletes a subscription" +msgstr "" + +#: views/users/api.hbs:44 +msgid "Add new custom field" +msgstr "" + +#: views/users/api.hbs:45 +msgid "This API call creates a new custom field for a list." +msgstr "" + +#: views/users/api.hbs:49 +msgid "field name" +msgstr "" + +#: views/users/api.hbs:51 +msgid "one of the following types:" +msgstr "" + +#: views/users/api.hbs:52 +msgid "If the type is 'option' then you also need to specify the parent element ID" +msgstr "" + +#: views/users/api.hbs:53 +msgid "" +"Template for the group element. If not set, then values of the elements are " +"joined with commas" +msgstr "" + +#: views/users/api.hbs:54 +msgid "" +"if not visible then the subscriber can not view or modify this value at the " +"profile page" +msgstr "" + +#: views/users/forgot.hbs:3 +#: views/users/reset.hbs:3 +msgid "Password Reset" +msgstr "" + +#: views/users/forgot.hbs:4 +msgid "Reset your password?" +msgstr "" + +#: views/users/forgot.hbs:5 +msgid "Accounts are managed through LDAP." +msgstr "" + +#: views/users/forgot.hbs:6 +#: views/users/reset.hbs:10 +msgid "Reset Password" +msgstr "" + +#: views/users/forgot.hbs:7 +msgid "" +"Please provide the username or email address that you used when you signed " +"up for your Mailtrain account." +msgstr "" + +#: views/users/forgot.hbs:8 +msgid "We will send you an email that will allow you to reset your password." +msgstr "" + +#: views/users/forgot.hbs:10 +msgid "Username or email address" +msgstr "" + +#: views/users/forgot.hbs:11 +msgid "Send verification email" +msgstr "" + +#: views/users/login.hbs:8 +msgid "Remember me" +msgstr "" + +#: views/users/login.hbs:11 +#: views/users/login.hbs:12 +msgid "Forgot password?" +msgstr "" + +#: views/users/reset.hbs:4 +msgid "Choose your new password" +msgstr "" + +#: views/users/reset.hbs:5 +msgid "Please enter a new password." +msgstr "" + +#: lib/feed.js:31 +msgid "Bad status code %s" +msgstr "" + +#: lib/helpers.js:17 +msgid "URL that points to the unsubscribe page" +msgstr "" + +#: lib/helpers.js:20 +msgid "URL that points to the preferences page of the subscriber" +msgstr "" + +#: lib/helpers.js:23 +msgid "URL to preview the message in a browser" +msgstr "" + +#: lib/helpers.js:29 +#: lib/models/segments.js:31 +msgid "First name" +msgstr "" + +#: lib/helpers.js:32 +#: lib/models/segments.js:35 +msgid "Last name" +msgstr "" + +#: lib/helpers.js:35 +msgid "Full name (first and last name combined)" +msgstr "" + +#: lib/helpers.js:38 +msgid "Unique ID that identifies the recipient" +msgstr "" + +#: lib/helpers.js:41 +msgid "Unique ID that identifies the list used for this campaign" +msgstr "" + +#: lib/helpers.js:44 +msgid "Unique ID that identifies current campaign" +msgstr "" + +#: lib/mailer.js:215 +msgid "Invalid mail transport" +msgstr "" + +#: lib/models/campaigns.js:271 +#: lib/models/campaigns.js:298 +#: lib/models/campaigns.js:371 +#: lib/models/campaigns.js:494 +#: lib/models/campaigns.js:752 +#: lib/models/campaigns.js:881 +msgid "Missing Campaign ID" +msgstr "" + +#: lib/models/campaigns.js:407 +msgid "Emtpy or too large attahcment" +msgstr "" + +#: lib/models/campaigns.js:573 +#: lib/models/campaigns.js:761 +msgid "Campaign Name must be set" +msgstr "" + +#: lib/models/campaigns.js:577 +msgid "RSS URL must be set and needs to be a valid URL" +msgstr "" + +#: lib/models/campaigns.js:730 +msgid "Selected template not found" +msgstr "" + +#: lib/models/campaigns.js:1082 +msgid "Invalid or missing message ID" +msgstr "" + +#: lib/models/fields.js:24 +msgid "Drop Down" +msgstr "" + +#: lib/models/fields.js:25 +msgid "Date (MM/DD/YYY)" +msgstr "" + +#: lib/models/fields.js:29 +msgid "JSON value for custom rendering" +msgstr "" + +#: lib/models/fields.js:30 +msgid "Option" +msgstr "" + +#: lib/models/fields.js:53 +#: lib/models/fields.js:98 +#: lib/models/fields.js:123 +#: lib/models/lists.js:81 +#: lib/models/lists.js:175 +#: lib/models/lists.js:212 +#: lib/models/segments.js:43 +#: lib/models/segments.js:176 +#: lib/models/subscriptions.js:88 +#: lib/models/subscriptions.js:640 +#: lib/models/subscriptions.js:703 +#: lib/models/subscriptions.js:889 +#: lib/models/subscriptions.js:992 +#: lib/models/subscriptions.js:1046 +#: lib/models/subscriptions.js:1109 +#: lib/models/subscriptions.js:1152 +msgid "Missing List ID" +msgstr "" + +#: lib/models/fields.js:129 +msgid "Option field requires a group to be selected" +msgstr "" + +#: lib/models/fields.js:149 +#: lib/models/fields.js:199 +msgid "Missing Field ID" +msgstr "" + +#: lib/models/fields.js:153 +#: lib/models/segments.js:185 +#: lib/models/segments.js:225 +msgid "Field Name must be set" +msgstr "" + +#: lib/models/fields.js:216 +msgid "Custom field not found" +msgstr "" + +#: lib/models/fields.js:289 +msgid "Unknown column type %s" +msgstr "" + +#: lib/models/fields.js:293 +msgid "Missing column name" +msgstr "" + +#: lib/models/fields.js:297 +msgid "Missing list ID" +msgstr "" + +#: lib/models/fields.js:305 +msgid "Provided List ID not found" +msgstr "" + +#: lib/models/links.js:328 +#: routes/campaigns.js:541 +#: routes/campaigns.js:590 +#: services/sender.js:304 +msgid "Campaign not found" +msgstr "" + +#: lib/models/links.js:336 +#: routes/lists.js:146 +#: services/sender.js:311 +msgid "List not found" +msgstr "" + +#: lib/models/links.js:344 +msgid "Subscription not found" +msgstr "" + +#: lib/models/lists.js:117 +#: lib/models/lists.js:179 +msgid "List Name must be set" +msgstr "" + +#: lib/models/lists.js:241 +msgid "Missing List CID" +msgstr "" + +#: lib/models/segments.js:15 +msgid "Signup country" +msgstr "" + +#: lib/models/segments.js:19 +#: lib/models/triggers.js:11 +msgid "Sign up date" +msgstr "" + +#: lib/models/segments.js:23 +#: lib/models/triggers.js:15 +msgid "Latest open" +msgstr "" + +#: lib/models/segments.js:27 +#: lib/models/triggers.js:19 +msgid "Latest click" +msgstr "" + +#: lib/models/segments.js:69 +#: lib/models/segments.js:216 +#: lib/models/segments.js:256 +#: lib/models/segments.js:278 +msgid "Missing Segment ID" +msgstr "" + +#: lib/models/segments.js:85 +#: lib/models/segments.js:549 +#: lib/models/segments.js:658 +msgid "Segment not found" +msgstr "" + +#: lib/models/segments.js:146 +#: lib/models/segments.js:147 +#: lib/models/segments.js:408 +#: lib/models/segments.js:409 +msgid "%s days after today" +msgstr "" + +#: lib/models/segments.js:146 +#: lib/models/segments.js:147 +#: lib/models/segments.js:408 +#: lib/models/segments.js:409 +msgid "%s days before today" +msgstr "" + +#: lib/models/segments.js:148 +#: lib/models/segments.js:410 +msgid "today" +msgstr "" + +#: lib/models/segments.js:189 +#: lib/models/segments.js:229 +msgid "Invalid segment rule type" +msgstr "" + +#: lib/models/segments.js:289 +#: lib/models/segments.js:454 +#: routes/segments.js:266 +#: routes/segments.js:300 +#: routes/segments.js:370 +#: routes/segments.js:381 +msgid "Selected segment not found" +msgstr "" + +#: lib/models/segments.js:294 +#: lib/models/segments.js:459 +#: routes/segments.js:272 +#: routes/segments.js:306 +#: routes/segments.js:387 +msgid "Invalid rule type" +msgstr "" + +#: lib/models/segments.js:358 +#: lib/models/segments.js:434 +#: lib/models/segments.js:524 +msgid "Missing Rule ID" +msgstr "" + +#: lib/models/segments.js:374 +msgid "Specified rule not found" +msgstr "" + +#: lib/models/segments.js:385 +msgid "Specified segment not found" +msgstr "" + +#: lib/models/segments.js:445 +msgid "Selected rule not found" +msgstr "" + +#: lib/models/subscriptions.js:233 +msgid "%s: Please Confirm Subscription" +msgstr "" + +#: lib/models/subscriptions.js:324 +msgid "Could not save subscription" +msgstr "" + +#: lib/models/subscriptions.js:507 +#: lib/models/subscriptions.js:537 +msgid "Missing Subbscription ID" +msgstr "" + +#: lib/models/subscriptions.js:565 +msgid "Missing Subbscription email address" +msgstr "" + +#: lib/models/subscriptions.js:644 +#: lib/models/subscriptions.js:893 +#: lib/models/subscriptions.js:1156 +msgid "Missing subscription ID" +msgstr "" + +#: lib/models/subscriptions.js:707 +msgid "Missing email address" +msgstr "" + +#: lib/models/subscriptions.js:996 +#: lib/models/subscriptions.js:1050 +#: lib/models/subscriptions.js:1086 +msgid "Missing Import ID" +msgstr "" + +#: lib/models/subscriptions.js:1178 +msgid "Unknown subscription ID" +msgstr "" + +#: lib/models/subscriptions.js:1183 +msgid "Nothing seems to be changed" +msgstr "" + +#: lib/models/subscriptions.js:1197 +msgid "This address is already registered by someone else" +msgstr "" + +#: lib/models/templates.js:51 +#: lib/models/templates.js:122 +#: lib/models/templates.js:163 +msgid "Missing Template ID" +msgstr "" + +#: lib/models/templates.js:80 +#: lib/models/templates.js:126 +msgid "Template Name must be set" +msgstr "" + +#: lib/models/triggers.js:28 +msgid "Has Opened" +msgstr "" + +#: lib/models/triggers.js:31 +msgid "Has Clicked" +msgstr "" + +#: lib/models/triggers.js:34 +msgid "Not Opened" +msgstr "" + +#: lib/models/triggers.js:37 +msgid "Not Clicked" +msgstr "" + +#: lib/models/triggers.js:174 +#: lib/models/triggers.js:211 +msgid "Missing or invalid list ID" +msgstr "" + +#: lib/models/triggers.js:178 +#: lib/models/triggers.js:263 +msgid "Days in the past are not allowed" +msgstr "" + +#: lib/models/triggers.js:182 +#: lib/models/triggers.js:203 +#: lib/models/triggers.js:267 +#: lib/models/triggers.js:288 +msgid "Missing or invalid trigger rule" +msgstr "" + +#: lib/models/triggers.js:189 +#: lib/models/triggers.js:274 +msgid "Invalid subscription configuration" +msgstr "" + +#: lib/models/triggers.js:196 +#: lib/models/triggers.js:281 +msgid "Invalid campaign configuration" +msgstr "" + +#: lib/models/triggers.js:199 +#: lib/models/triggers.js:284 +msgid "A campaing can not be a target for itself" +msgstr "" + +#: lib/models/triggers.js:232 +msgid "Could not store trigger row" +msgstr "" + +#: lib/models/triggers.js:249 +msgid "Missing or invalid Trigger ID" +msgstr "" + +#: lib/models/triggers.js:316 +msgid "Missing Trigger ID" +msgstr "" + +#: lib/models/users.js:103 +msgid "Could not store user row" +msgstr "" + +#: lib/models/users.js:173 +msgid "Email Address must be set" +msgstr "" + +#: lib/models/users.js:184 +msgid "Failed to check user data" +msgstr "" + +#: lib/models/users.js:195 +msgid "" +"Can't change email as another user with the same email address already " +"exists" +msgstr "" + +#: lib/models/users.js:212 +msgid "Incorrect current password" +msgstr "" + +#: lib/models/users.js:216 +msgid "New password not set" +msgstr "" + +#: lib/models/users.js:220 +msgid "Passwords do not match" +msgstr "" + +#: lib/models/users.js:258 +msgid "User ID not set" +msgstr "" + +#: lib/models/users.js:286 +msgid "Username must be set" +msgstr "" + +#: lib/models/users.js:323 +msgid "Mailer password change request" +msgstr "" + +#: lib/models/users.js:347 +#: lib/models/users.js:367 +msgid "Missing username or reset token" +msgstr "" + +#: lib/models/users.js:371 +msgid "Invalid new password" +msgstr "" + +#: lib/passport.js:38 +msgid "%s logged out" +msgstr "" + +#: lib/passport.js:51 +msgid "Failed to authenticate user" +msgstr "" + +#: lib/passport.js:67 +msgid "Logged in as %s" +msgstr "" + +#: lib/passport.js:125 +msgid "Incorrect username or password" +msgstr "" + +#: lib/tools.js:123 +msgid "Automation" +msgstr "" + +#: lib/tools.js:133 +msgid "Blocked email address \"%s\"" +msgstr "" + +#: lib/tools.js:142 +msgid "Invalid email address \"%s\"." +msgstr "" + +#: lib/tools.js:145 +msgid "MX record not found for domain" +msgstr "" + +#: lib/tools.js:148 +msgid "Address domain not found" +msgstr "" + +#: lib/tools.js:151 +msgid "Address domain name is required" +msgstr "" + +#: routes/archive.js:31 +#: routes/archive.js:43 +#: routes/archive.js:55 +#: app.js:211 +msgid "Not Found" +msgstr "" + +#: routes/archive.js:110 +#: services/sender.js:447 +msgid "Received status code %s from %s" +msgstr "" + +#: routes/archive.js:134 +#: routes/campaigns.js:131 +#: routes/campaigns.js:295 +#: routes/campaigns.js:390 +#: routes/campaigns.js:435 +#: routes/campaigns.js:475 +#: routes/campaigns.js:739 +#: routes/campaigns.js:762 +#: routes/campaigns.js:781 +#: routes/campaigns.js:803 +#: routes/triggers.js:146 +msgid "Could not find campaign with specified ID" +msgstr "" + +#: routes/archive.js:142 +#: routes/campaigns.js:789 +msgid "Attachment not found" +msgstr "" + +#: routes/campaigns.js:26 +#: routes/fields.js:13 +#: routes/lists.js:49 +#: routes/segments.js:13 #: routes/settings.js:23 +#: routes/templates.js:17 +#: routes/triggers.js:18 +#: routes/users.js:75 +#: routes/users.js:120 msgid "Need to be logged in to access restricted content" msgstr "" +#: routes/campaigns.js:117 +msgid "Could not create campaign" +msgstr "" + +#: routes/campaigns.js:120 +msgid "Campaign “%s” created" +msgstr "" + +#: routes/campaigns.js:204 +msgid "content from an RSS entry" +msgstr "" + +#: routes/campaigns.js:220 +msgid "Campaign settings updated" +msgstr "" + +#: routes/campaigns.js:222 +msgid "Campaign settings not updated" +msgstr "" + +#: routes/campaigns.js:238 +#: routes/campaigns.js:639 +msgid "Campaign deleted" +msgstr "" + +#: routes/campaigns.js:240 +#: routes/campaigns.js:641 +msgid "Could not delete specified campaign" +msgstr "" + +#: routes/campaigns.js:259 +msgid "Idling" +msgstr "" + +#: routes/campaigns.js:262 +msgid "Scheduled" +msgstr "" + +#: routes/campaigns.js:268 +msgid "Paused" +msgstr "" + +#: routes/campaigns.js:270 +msgid "Inactive" +msgstr "" + +#: routes/campaigns.js:272 +msgid "Active" +msgstr "" + +#: routes/campaigns.js:274 +msgid "Other" +msgstr "" + +#: routes/campaigns.js:429 +msgid "Unknown status selector" +msgstr "" + +#: routes/campaigns.js:657 +msgid "Scheduled sending" +msgstr "" + +#: routes/campaigns.js:659 +msgid "Could not schedule sending" +msgstr "" + +#: routes/campaigns.js:671 +msgid "Sending resumed" +msgstr "" + +#: routes/campaigns.js:673 +msgid "Could not resume sending" +msgstr "" + +#: routes/campaigns.js:685 +msgid "Sending reset" +msgstr "" + +#: routes/campaigns.js:687 +msgid "Could not reset sending" +msgstr "" + +#: routes/campaigns.js:699 +#: routes/campaigns.js:727 +msgid "Sending paused" +msgstr "" + +#: routes/campaigns.js:701 +#: routes/campaigns.js:729 +msgid "Could not pause sending" +msgstr "" + +#: routes/campaigns.js:713 +msgid "Sending activated" +msgstr "" + +#: routes/campaigns.js:715 +msgid "Could not activate sending" +msgstr "" + +#: routes/campaigns.js:750 +msgid "Attachment uploaded" +msgstr "" + +#: routes/campaigns.js:752 +msgid "Could not store attachment" +msgstr "" + +#: routes/campaigns.js:769 +msgid "Attachment deleted" +msgstr "" + +#: routes/campaigns.js:771 +msgid "Could not delete attachment" +msgstr "" + +#: routes/fields.js:28 +#: routes/fields.js:64 +#: routes/fields.js:118 +#: routes/segments.js:28 +#: routes/segments.js:59 +#: routes/segments.js:102 +#: routes/segments.js:151 +#: routes/segments.js:223 +#: routes/segments.js:255 +#: routes/segments.js:289 +#: routes/segments.js:336 +#: routes/segments.js:359 +msgid "Selected list ID not found" +msgstr "" + +#: routes/fields.js:102 +msgid "Could not create custom field" +msgstr "" + +#: routes/fields.js:129 +msgid "Selected field not found" +msgstr "" + +#: routes/fields.js:165 +msgid "Field settings updated" +msgstr "" + +#: routes/fields.js:167 +msgid "Field settings not updated" +msgstr "" + +#: routes/fields.js:183 +msgid "Custom field deleted" +msgstr "" + +#: routes/fields.js:185 +msgid "Could not delete specified field" +msgstr "" + +#: routes/links.js:40 +msgid "Oops, we couldn't find a link for the URL you clicked" +msgstr "" + +#: routes/lists.js:90 +msgid "Could not create list" +msgstr "" + +#: routes/lists.js:93 +msgid "List created" +msgstr "" + +#: routes/lists.js:101 +#: routes/lists.js:236 +#: routes/lists.js:301 +#: routes/lists.js:340 +#: routes/lists.js:409 +#: routes/lists.js:434 +#: routes/lists.js:479 +#: routes/lists.js:501 +#: routes/lists.js:530 +#: routes/lists.js:609 +#: routes/lists.js:666 +#: routes/lists.js:693 +msgid "Could not find list with specified ID" +msgstr "" + +#: routes/lists.js:115 +msgid "List settings updated" +msgstr "" + +#: routes/lists.js:117 +msgid "List settings not updated" +msgstr "" + +#: routes/lists.js:133 +msgid "List deleted" +msgstr "" + +#: routes/lists.js:135 +msgid "Could not delete specified list" +msgstr "" + +#: routes/lists.js:171 +msgid "Unknown" +msgstr "" + +#: routes/lists.js:171 +msgid "Complained" +msgstr "" + +#: routes/lists.js:202 +msgid "Invalid key" +msgstr "" + +#: routes/lists.js:204 +msgid "Expired key" +msgstr "" + +#: routes/lists.js:206 +msgid "Revoked key" +msgstr "" + +#: routes/lists.js:256 +msgid "Initializing" +msgstr "" + +#: routes/lists.js:259 +msgid "Initialized" +msgstr "" + +#: routes/lists.js:262 +msgid "Importing" +msgstr "" + +#: routes/lists.js:268 +msgid "Errored" +msgstr "" + +#: routes/lists.js:346 +#: routes/lists.js:415 +#: routes/lists.js:440 +msgid "Could not find subscriber with specified ID" +msgstr "" + +#: routes/lists.js:392 +msgid "Could not add subscription" +msgstr "" + +#: routes/lists.js:397 +msgid "%s was successfully added to your list" +msgstr "" + +#: routes/lists.js:399 +msgid "%s was not added to your list" +msgstr "" + +#: routes/lists.js:421 +msgid "Could not unsubscribe user" +msgstr "" + +#: routes/lists.js:424 +msgid "%s was successfully unsubscribed from your list" +msgstr "" + +#: routes/lists.js:444 +msgid "%s was successfully removed from your list" +msgstr "" + +#: routes/lists.js:456 +msgid "Another subscriber with email address %s already exists" +msgstr "" + +#: routes/lists.js:463 +msgid "Subscription settings updated" +msgstr "" + +#: routes/lists.js:465 +msgid "Subscription settings not updated" +msgstr "" + +#: routes/lists.js:507 +#: routes/lists.js:615 +#: routes/lists.js:651 +#: routes/lists.js:679 +#: routes/lists.js:699 +msgid "Could not find import data with specified ID" +msgstr "" + +#: routes/lists.js:538 +msgid "Could not process CSV" +msgstr "" + +#: routes/lists.js:547 +msgid "Could not create importer" +msgstr "" + +#: routes/lists.js:598 +msgid "Empty file" +msgstr "" + +#: routes/lists.js:655 +msgid "Import started" +msgstr "" + +#: routes/lists.js:683 +msgid "Import restarted" +msgstr "" + +#: routes/segments.js:86 +msgid "Could not create segment" +msgstr "" + +#: routes/segments.js:89 +msgid "Segment created" +msgstr "" + +#: routes/segments.js:113 +msgid "Selected segment ID not found" +msgstr "" + +#: routes/segments.js:188 +msgid "Segment settings updated" +msgstr "" + +#: routes/segments.js:190 +msgid "Segment settings not updated" +msgstr "" + +#: routes/segments.js:206 +msgid "Segment deleted" +msgstr "" + +#: routes/segments.js:208 +msgid "Could not delete specified segment" +msgstr "" + +#: routes/segments.js:342 +msgid "Could not create rule" +msgstr "" + +#: routes/segments.js:345 +msgid "Rule created" +msgstr "" + +#: routes/segments.js:410 +msgid "Rule settings updated" +msgstr "" + +#: routes/segments.js:412 +msgid "Rule settings not updated" +msgstr "" + +#: routes/segments.js:428 +msgid "Rule deleted" +msgstr "" + +#: routes/segments.js:430 +msgid "Could not delete specified rule" +msgstr "" + #: routes/settings.js:39 msgid "Use TLS" msgstr "" @@ -97,4 +3835,176 @@ msgstr "" #: routes/settings.js:221 msgid "Mailer settings verified, ready to send some mail!" +msgstr "" + +#: routes/subscription.js:22 +msgid "Selected subscription not found" +msgstr "" + +#: routes/subscription.js:32 +#: routes/subscription.js:103 +#: routes/subscription.js:141 +#: routes/subscription.js:166 +#: routes/subscription.js:191 +#: routes/subscription.js:232 +#: routes/subscription.js:270 +#: routes/subscription.js:317 +#: routes/subscription.js:339 +#: routes/subscription.js:368 +#: routes/subscription.js:392 +#: routes/subscription.js:424 +msgid "Selected list not found" +msgstr "" + +#: routes/subscription.js:78 +#: routes/subscription.js:472 +msgid "%s: Subscription Confirmed" +msgstr "" + +#: routes/subscription.js:217 +msgid "Email address not set" +msgstr "" + +#: routes/subscription.js:255 +msgid "Could not store confirmation data" +msgstr "" + +#: routes/subscription.js:284 +#: routes/subscription.js:349 +#: routes/subscription.js:402 +msgid "Subscription not found from this list" +msgstr "" + +#: routes/subscription.js:383 +msgid "Email address updated, check your mailbox for verification instructions" +msgstr "" + +#: routes/subscription.js:499 +#: routes/subscription.js:515 +msgid "Public key is not set" +msgstr "" + +#: routes/templates.js:98 +msgid "Could not create template" +msgstr "" + +#: routes/templates.js:101 +msgid "Template created" +msgstr "" + +#: routes/templates.js:109 +msgid "Could not find template with specified ID" +msgstr "" + +#: routes/templates.js:140 +msgid "Template settings updated" +msgstr "" + +#: routes/templates.js:142 +msgid "Template settings not updated" +msgstr "" + +#: routes/templates.js:158 +msgid "Template deleted" +msgstr "" + +#: routes/templates.js:160 +msgid "Could not delete specified template" +msgstr "" + +#: routes/triggers.js:62 +#: routes/triggers.js:79 +#: routes/triggers.js:154 +msgid "Could not find selected list" +msgstr "" + +#: routes/triggers.js:131 +msgid "Could not create trigger" +msgstr "" + +#: routes/triggers.js:138 +msgid "Trigger “%s” created" +msgstr "" + +#: routes/triggers.js:214 +msgid "Trigger settings updated" +msgstr "" + +#: routes/triggers.js:216 +msgid "Trigger settings not updated" +msgstr "" + +#: routes/triggers.js:228 +msgid "Trigger deleted" +msgstr "" + +#: routes/triggers.js:230 +msgid "Could not delete specified trigger" +msgstr "" + +#: routes/triggers.js:242 +msgid "Could not find trigger with specified ID" +msgstr "" + +#: routes/triggers.js:255 +msgid "Trigger not found" +msgstr "" + +#: routes/users.js:32 +msgid "" +"An email with password reset instructions has been sent to your email " +"address, if it exists on our system." +msgstr "" + +#: routes/users.js:46 +#: routes/users.js:64 +msgid "Unknown or expired reset token" +msgstr "" + +#: routes/users.js:66 +msgid "Your password has been changed successfully" +msgstr "" + +#: routes/users.js:87 +msgid "User data not found" +msgstr "" + +#: routes/users.js:110 +msgid "Access token updated" +msgstr "" + +#: routes/users.js:112 +msgid "Access token not updated" +msgstr "" + +#: routes/users.js:139 +msgid "Account information updated" +msgstr "" + +#: routes/users.js:141 +msgid "Account information not updated" +msgstr "" + +#: services/feedcheck.js:51 +msgid "Feed error: %s" +msgstr "" + +#: services/feedcheck.js:54 +msgid "Found %s new campaign messages from feed" +msgstr "" + +#: services/feedcheck.js:56 +msgid "Found nothing new from the feed" +msgstr "" + +#: services/feedcheck.js:143 +msgid "RSS entry %s" +msgstr "" + +#: services/importer.js:243 +msgid "Could not access import file" +msgstr "" + +#: services/triggers.js:51 +msgid "Unknown trigger type %s" msgstr "" \ No newline at end of file diff --git a/lib/fakelang.js b/lib/fakelang.js new file mode 100644 index 00000000..7a6027a1 --- /dev/null +++ b/lib/fakelang.js @@ -0,0 +1,26 @@ +'use strict'; + +/* lloyd|2012|http://wtfpl.org */ + +/* eslint-disable */ + +module.exports = str => { + let from = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_=+\\|`~[{]};:'\",<.>/?"; + let to = "ɐqɔpǝɟƃɥıɾʞʅɯuodbɹsʇnʌʍxʎz∀ԐↃᗡƎℲ⅁HIſӼ⅂WNOԀÒᴚS⊥∩ɅMX⅄Z0123456789¡@#$%ᵥ⅋⁎()-_=+\\|,~[{]};:,„´<.>/¿"; + + return str.replace(/(\{\{[^\}]+\}\}|%s)/g, '\x00\x04$1\x00').split('\x00').map(c => { + if (c.charAt(0) === '\x04') { + return c; + } + let r = ''; + for (let i = 0, len = c.length; i < len; i++) { + let pos = from.indexOf(c.charAt(i)); + if (pos < 0) { + r += c.charAt(i); + } else { + r += to.charAt(pos); + } + } + return r; + }).join('\x00').replace(/[\x00\x04]/g, ''); +} diff --git a/lib/feed.js b/lib/feed.js index fbbe1a57..6758f798 100644 --- a/lib/feed.js +++ b/lib/feed.js @@ -2,6 +2,8 @@ let FeedParser = require('feedparser'); let request = require('request'); +let _ = require('./translate')._; +let util = require('util'); module.exports.fetch = (url, callback) => { let req = request(url); @@ -26,7 +28,7 @@ module.exports.fetch = (url, callback) => { } if (res.statusCode !== 200) { - return req.emit('error', new Error('Bad status code')); + return req.emit('error', new Error(util.format(_('Bad status code %s'), res.statusCode))); } req.pipe(feedparser); diff --git a/lib/helpers.js b/lib/helpers.js index 521d46a0..f2cd7429 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -2,6 +2,7 @@ let lists = require('./models/lists'); let fields = require('./models/fields'); +let _ = require('./translate')._; module.exports = { getDefaultMergeTags, @@ -13,34 +14,34 @@ function getDefaultMergeTags(callback) { callback(null, [ { key: 'LINK_UNSUBSCRIBE', - value: 'URL that points to the unsubscribe page' + value: _('URL that points to the unsubscribe page') }, { key: 'LINK_PREFERENCES', - value: 'URL that points to the preferences page of the subscriber' + value: _('URL that points to the preferences page of the subscriber') }, { key: 'LINK_BROWSER', - value: 'URL to preview the message in a browser' + value: _('URL to preview the message in a browser') }, { key: 'EMAIL', - value: 'Email address' + value: _('Email address') }, { key: 'FIRST_NAME', - value: 'First name' + value: _('First name') }, { key: 'LAST_NAME', - value: 'Last name' + value: _('Last name') }, { key: 'FULL_NAME', - value: 'Full name (first and last name combined)' + value: _('Full name (first and last name combined)') }, { key: 'SUBSCRIPTION_ID', - value: 'Unique ID that identifies the recipient' + value: _('Unique ID that identifies the recipient') }, { key: 'LIST_ID', - value: 'Unique ID that identifies the list used for this campaign' + value: _('Unique ID that identifies the list used for this campaign') }, { key: 'CAMPAIGN_ID', - value: 'Unique ID that identifies current campaign' + value: _('Unique ID that identifies current campaign') } ]); } diff --git a/lib/mailer.js b/lib/mailer.js index 9f0f695b..83f55e5a 100644 --- a/lib/mailer.js +++ b/lib/mailer.js @@ -14,6 +14,23 @@ let templates = new Map(); let htmlToText = require('html-to-text'); let aws = require('aws-sdk'); +let _ = require('./translate')._; +let util = require('util'); + +Handlebars.registerHelper('translate', function (context, options) { // eslint-disable-line prefer-arrow-callback + if (typeof options === 'undefined' && context) { + options = context; + context = false; + } + + let result = _(options.fn(this)); // eslint-disable-line no-invalid-this + + if (Array.isArray(context)) { + result = util.format(result, ...context); + } + return new Handlebars.SafeString(result); +}); + module.exports.transport = false; module.exports.update = () => { @@ -195,7 +212,7 @@ function createMailer(callback) { } }; } else { - return callback(new Error('Invalid mail transport')); + return callback(new Error(_('Invalid mail transport'))); } module.exports.transport = nodemailer.createTransport(transportOptions, config.nodemailer); diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index 8d2a31ce..b71d1bbf 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -12,6 +12,7 @@ let feed = require('../feed'); let log = require('npmlog'); let mailer = require('../mailer'); let humanize = require('humanize'); +let _ = require('../translate')._; let allowedKeys = ['description', 'from', 'address', 'reply_to', 'subject', 'editor_name', 'editor_data', 'template', 'source_url', 'list', 'segment', 'html', 'text', 'tracking_disabled']; @@ -267,7 +268,7 @@ module.exports.filterStatusSubscribers = (campaign, status, request, columns, ca module.exports.getByCid = (cid, callback) => { cid = (cid || '').toString().trim(); if (!cid) { - return callback(new Error('Missing Campaign ID')); + return callback(new Error(_('Missing Campaign ID'))); } db.getConnection((err, connection) => { if (err) { @@ -294,7 +295,7 @@ module.exports.get = (id, withSegment, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing Campaign ID')); + return callback(new Error(_('Missing Campaign ID'))); } db.getConnection((err, connection) => { @@ -367,7 +368,7 @@ module.exports.getAttachments = (campaign, callback) => { campaign = Number(campaign) || 0; if (campaign < 1) { - return callback(new Error('Missing Campaign ID')); + return callback(new Error(_('Missing Campaign ID'))); } db.getConnection((err, connection) => { @@ -403,7 +404,7 @@ module.exports.addAttachment = (id, attachment, callback) => { let size = attachment.content ? attachment.content.length : 0; if (!size) { - return callback(new Error('Emtpy or too large attahcment')); + return callback(new Error(_('Emtpy or too large attahcment'))); } db.getConnection((err, connection) => { if (err) { @@ -490,7 +491,7 @@ module.exports.getLinks = (id, linkId, callback) => { linkId = Number(linkId) || 0; if (id < 1) { - return callback(new Error('Missing Campaign ID')); + return callback(new Error(_('Missing Campaign ID'))); } db.getConnection((err, connection) => { @@ -569,11 +570,11 @@ module.exports.create = (campaign, opts, callback) => { campaign.template = Number(campaign.template) || 0; if (!name) { - return callback(new Error('Campaign Name must be set')); + return callback(new Error(_('Campaign Name must be set'))); } if (campaign.type === 2 && (!campaign.sourceUrl || !isUrl(campaign.sourceUrl))) { - return callback(new Error('RSS URL must be set and needs to be a valid URL')); + return callback(new Error(_('RSS URL must be set and needs to be a valid URL'))); } let getList = (listId, callback) => { @@ -726,7 +727,7 @@ module.exports.create = (campaign, opts, callback) => { return callback(err); } if (!template) { - return callback(new Error('Selected template not found')); + return callback(new Error(_('Selected template not found'))); } campaign.editorName = template.editorName; @@ -748,7 +749,7 @@ module.exports.update = (id, updates, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing Campaign ID')); + return callback(new Error(_('Missing Campaign ID'))); } let campaign = tools.convertKeys(updates); @@ -757,7 +758,7 @@ module.exports.update = (id, updates, callback) => { campaign.trackingDisabled = campaign.trackingDisabled ? 1 : 0; if (!name) { - return callback(new Error('Campaign Name must be set')); + return callback(new Error(_('Campaign Name must be set'))); } if (/^\d+:\d+$/.test(campaign.list)) { @@ -877,7 +878,7 @@ module.exports.delete = (id, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing Campaign ID')); + return callback(new Error(_('Missing Campaign ID'))); } db.getConnection((err, connection) => { @@ -1078,7 +1079,7 @@ module.exports.getMail = (campaignId, listId, subscriptionId, callback) => { subscriptionId = Number(subscriptionId) || 0; if (campaignId < 1 || listId < 1 || subscriptionId < 1) { - return callback(new Error('Invalid or missing message ID')); + return callback(new Error(_('Invalid or missing message ID'))); } db.getConnection((err, connection) => { diff --git a/lib/models/fields.js b/lib/models/fields.js index 6bbf368d..44396a7e 100644 --- a/lib/models/fields.js +++ b/lib/models/fields.js @@ -6,26 +6,28 @@ let slugify = require('slugify'); let lists = require('./lists'); let shortid = require('shortid'); let Handlebars = require('handlebars'); +let _ = require('../translate')._; +let util = require('util'); let allowedKeys = ['name', 'key', 'default_value', 'group', 'group_template', 'visible']; let allowedTypes; module.exports.grouped = ['radio', 'checkbox', 'dropdown']; module.exports.types = { - text: 'Text', - website: 'Website', - longtext: 'Multi-line text', - gpg: 'GPG Public Key', - number: 'Number', - radio: 'Radio Buttons', - checkbox: 'Checkboxes', - dropdown: 'Drop Down', - 'date-us': 'Date (MM/DD/YYY)', - 'date-eur': 'Date (DD/MM/YYYY)', - 'birthday-us': 'Birthday (MM/DD)', - 'birthday-eur': 'Birthday (DD/MM)', - json: 'JSON value for custom rendering', - option: 'Option' + text: _('Text'), + website: _('Website'), + longtext: _('Multi-line text'), + gpg: _('GPG Public Key'), + number: _('Number'), + radio: _('Radio Buttons'), + checkbox: _('Checkboxes'), + dropdown: _('Drop Down'), + 'date-us': _('Date (MM/DD/YYY)'), + 'date-eur': _('Date (DD/MM/YYYY)'), + 'birthday-us': _('Birthday (MM/DD)'), + 'birthday-eur': _('Birthday (DD/MM)'), + json: _('JSON value for custom rendering'), + option: _('Option') }; module.exports.allowedTypes = allowedTypes = Object.keys(module.exports.types); @@ -48,7 +50,7 @@ module.exports.list = (listId, callback) => { listId = Number(listId) || 0; if (listId < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } db.getConnection((err, connection) => { @@ -93,7 +95,7 @@ module.exports.get = (id, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } db.getConnection((err, connection) => { @@ -118,13 +120,13 @@ module.exports.create = (listId, field, callback) => { listId = Number(listId) || 0; if (listId < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } field = tools.convertKeys(field); if (field.type === 'option' && !field.group) { - return callback(new Error('Option field requires a group to be selected')); + return callback(new Error(_('Option field requires a group to be selected'))); } if (field.type !== 'option') { @@ -144,11 +146,11 @@ module.exports.update = (id, updates, callback) => { updates = tools.convertKeys(updates); if (id < 1) { - return callback(new Error('Missing Field ID')); + return callback(new Error(_('Missing Field ID'))); } if (!(updates.name || '').toString().trim()) { - return callback(new Error('Field Name must be set')); + return callback(new Error(_('Field Name must be set'))); } if (updates.key) { @@ -194,7 +196,7 @@ module.exports.delete = (fieldId, callback) => { fieldId = Number(fieldId) || 0; if (fieldId < 1) { - return callback(new Error('Missing Field ID')); + return callback(new Error(_('Missing Field ID'))); } db.getConnection((err, connection) => { @@ -211,7 +213,7 @@ module.exports.delete = (fieldId, callback) => { if (!rows || !rows.length) { connection.release(); - return callback(new Error('Custom field not found')); + return callback(new Error(_('Custom field not found'))); } let field = tools.convertKeys(rows[0]); @@ -284,15 +286,15 @@ function addCustomField(listId, name, defaultValue, type, group, groupTemplate, let key = slugify('merge ' + name, '_').toUpperCase(); if (allowedTypes.indexOf(type) < 0) { - return callback(new Error('Unknown column type ' + type)); + return callback(new Error(util.format(_('Unknown column type %s'), type))); } if (!name) { - return callback(new Error('Missing column name')); + return callback(new Error(_('Missing column name'))); } if (listId <= 0) { - return callback(new Error('Missing list ID')); + return callback(new Error(_('Missing list ID'))); } lists.get(listId, (err, list) => { @@ -300,7 +302,7 @@ function addCustomField(listId, name, defaultValue, type, group, groupTemplate, return callback(err); } if (!list) { - return callback('Provided List ID not found'); + return callback(_('Provided List ID not found')); } db.getConnection((err, connection) => { diff --git a/lib/models/links.js b/lib/models/links.js index 2d6209b6..6c5a0bae 100644 --- a/lib/models/links.js +++ b/lib/models/links.js @@ -3,6 +3,7 @@ let db = require('../db'); let shortid = require('shortid'); let util = require('util'); +let _ = require('../translate')._; let geoip = require('geoip-ultralight'); let campaigns = require('./campaigns'); @@ -324,7 +325,7 @@ function getSubscriptionData(campaignCid, listCid, subscriptionCid, callback) { return callback(err); } if (!campaign) { - return callback(new Error('Campaign not found')); + return callback(new Error(_('Campaign not found'))); } lists.getByCid(listCid, (err, list) => { @@ -332,7 +333,7 @@ function getSubscriptionData(campaignCid, listCid, subscriptionCid, callback) { return callback(err); } if (!list) { - return callback(new Error('Campaign not found')); + return callback(new Error(_('List not found'))); } subscriptions.get(list.id, subscriptionCid, (err, subscription) => { @@ -340,7 +341,7 @@ function getSubscriptionData(campaignCid, listCid, subscriptionCid, callback) { return callback(err); } if (!subscription) { - return callback(new Error('Subscription not found')); + return callback(new Error(_('Subscription not found'))); } return callback(null, { diff --git a/lib/models/lists.js b/lib/models/lists.js index c464b702..4d58952c 100644 --- a/lib/models/lists.js +++ b/lib/models/lists.js @@ -4,6 +4,7 @@ let db = require('../db'); let tools = require('../tools'); let shortid = require('shortid'); let segments = require('./segments'); +let _ = require('../translate')._; let allowedKeys = ['description']; @@ -77,7 +78,7 @@ module.exports.get = (id, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } db.getConnection((err, connection) => { @@ -113,7 +114,7 @@ module.exports.create = (list, callback) => { let name = (data.name || '').toString().trim(); if (!data) { - return callback(new Error('List Name must be set')); + return callback(new Error(_('List Name must be set'))); } let keys = ['name']; @@ -171,11 +172,11 @@ module.exports.update = (id, updates, callback) => { let values = [name]; if (id < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } if (!name) { - return callback(new Error('List Name must be set')); + return callback(new Error(_('List Name must be set'))); } Object.keys(updates).forEach(key => { @@ -208,7 +209,7 @@ module.exports.delete = (id, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } db.getConnection((err, connection) => { @@ -237,7 +238,7 @@ module.exports.delete = (id, callback) => { function resolveCid(cid, callback) { cid = (cid || '').toString().trim(); if (!cid) { - return callback(new Error('Missing List CID')); + return callback(new Error(_('Missing List CID'))); } db.getConnection((err, connection) => { diff --git a/lib/models/segments.js b/lib/models/segments.js index b0629a34..47a3afbc 100644 --- a/lib/models/segments.js +++ b/lib/models/segments.js @@ -3,34 +3,36 @@ let tools = require('../tools'); let db = require('../db'); let fields = require('./fields'); +let util = require('util'); +let _ = require('../translate')._; module.exports.defaultColumns = [{ column: 'email', - name: 'Email address', + name: _('Email address'), type: 'string' }, { column: 'opt_in_country', - name: 'Signup country', + name: _('Signup country'), type: 'string' }, { column: 'created', - name: 'Sign up date', + name: _('Sign up date'), type: 'date' }, { column: 'latest_open', - name: 'Latest open', + name: _('Latest open'), type: 'date' }, { column: 'latest_click', - name: 'Latest click', + name: _('Latest click'), type: 'date' }, { column: 'first_name', - name: 'First name', + name: _('First name'), type: 'string' }, { column: 'last_name', - name: 'Last name', + name: _('Last name'), type: 'string' }]; @@ -38,7 +40,7 @@ module.exports.list = (listId, callback) => { listId = Number(listId) || 0; if (listId < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } @@ -64,7 +66,7 @@ module.exports.get = (id, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing Segment ID')); + return callback(new Error(_('Missing Segment ID'))); } db.getConnection((err, connection) => { @@ -80,7 +82,7 @@ module.exports.get = (id, callback) => { } if (!rows || !rows.length) { connection.release(); - return callback(new Error('Segment not found')); + return callback(new Error(_('Segment not found'))); } let segment = tools.convertKeys(rows[0]); @@ -141,7 +143,9 @@ module.exports.get = (id, callback) => { case 'date': case 'birthday': if (rule.value.relativeRange) { - rule.formatted = (rule.value.start ? rule.value.start + ' days ' + (rule.value.startDirection ? 'after' : 'before') + ' today' : 'today') + ' … ' + (rule.value.end ? rule.value.end + ' days ' + (rule.value.endDirection ? 'after' : 'before') + ' today' : 'today'); + let startString = rule.value.startDirection ? util.format(_('%s days after today'), rule.value.start) : util.format(_('%s days before today'), rule.value.start); + let endString = rule.value.endDirection ? util.format(_('%s days after today'), rule.value.end) : util.format(_('%s days before today'), rule.value.end); + rule.formatted = (rule.value.start ? startString : _('today')) + ' … ' + (rule.value.end ? endString : _('today')); } else if (rule.value.range) { rule.formatted = (rule.value.start || '') + ' … ' + (rule.value.end || ''); } else { @@ -149,7 +153,7 @@ module.exports.get = (id, callback) => { } break; case 'boolean': - rule.formatted = rule.value.value ? 'Selected' : 'Not selected'; + rule.formatted = rule.value.value ? _('Selected') : _('Not selected'); break; default: rule.formatted = rule.value.value || ''; @@ -169,7 +173,7 @@ module.exports.create = (listId, segment, callback) => { listId = Number(listId) || 0; if (listId < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } segment = tools.convertKeys(segment); @@ -178,11 +182,11 @@ module.exports.create = (listId, segment, callback) => { segment.type = Number(segment.type) || 0; if (!segment.name) { - return callback(new Error('Field Name must be set')); + return callback(new Error(_('Field Name must be set'))); } if (segment.type <= 0) { - return callback(new Error('Invalid segment rule type')); + return callback(new Error(_('Invalid segment rule type'))); } let keys = ['list', 'name', 'type']; @@ -209,7 +213,7 @@ module.exports.update = (id, updates, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing Segment ID')); + return callback(new Error(_('Missing Segment ID'))); } let segment = tools.convertKeys(updates); @@ -218,11 +222,11 @@ module.exports.update = (id, updates, callback) => { segment.type = Number(segment.type) || 0; if (!segment.name) { - return callback(new Error('Field Name must be set')); + return callback(new Error(_('Field Name must be set'))); } if (segment.type <= 0) { - return callback(new Error('Invalid segment rule type')); + return callback(new Error(_('Invalid segment rule type'))); } let keys = ['name', 'type']; @@ -249,7 +253,7 @@ module.exports.delete = (id, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing Segment ID')); + return callback(new Error(_('Missing Segment ID'))); } db.getConnection((err, connection) => { @@ -271,7 +275,7 @@ module.exports.createRule = (segmentId, rule, callback) => { segmentId = Number(segmentId) || 0; if (segmentId < 1) { - return callback(new Error('Missing Segment ID')); + return callback(new Error(_('Missing Segment ID'))); } rule = tools.convertKeys(rule); @@ -282,12 +286,12 @@ module.exports.createRule = (segmentId, rule, callback) => { } if (!segment) { - return callback(new Error('Selected segment not found')); + return callback(new Error(_('Selected segment not found'))); } let column = segment.columns.filter(column => column.column === rule.column).pop(); if (!column) { - return callback(new Error('Invalid rule type')); + return callback(new Error(_('Invalid rule type'))); } let value; @@ -351,7 +355,7 @@ module.exports.getRule = (id, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing Rule ID')); + return callback(new Error(_('Missing Rule ID'))); } db.getConnection((err, connection) => { @@ -367,7 +371,7 @@ module.exports.getRule = (id, callback) => { } if (!rows || !rows.length) { - return callback(new Error('Specified rule not found')); + return callback(new Error(_('Specified rule not found'))); } let rule = tools.convertKeys(rows[0]); @@ -378,7 +382,7 @@ module.exports.getRule = (id, callback) => { } if (!segment) { - return callback(new Error('Specified segment not found')); + return callback(new Error(_('Specified segment not found'))); } if (rule.value) { @@ -400,7 +404,10 @@ module.exports.getRule = (id, callback) => { case 'date': case 'birthday': if (rule.value.relativeRange) { - rule.formatted = (rule.value.start ? rule.value.start + ' days ' + (rule.value.startDirection ? 'after' : 'before') + ' today' : 'today') + ' … ' + (rule.value.end ? rule.value.end + ' days ' + (rule.value.endDirection ? 'after' : 'before') + ' today' : 'today'); + + let startString = rule.value.startDirection ? util.format(_('%s days after today'), rule.value.start) : util.format(_('%s days before today'), rule.value.start); + let endString = rule.value.endDirection ? util.format(_('%s days after today'), rule.value.end) : util.format(_('%s days before today'), rule.value.end); + rule.formatted = (rule.value.start ? startString : _('today')) + ' … ' + (rule.value.end ? endString : _('today')); } else if (rule.value.range) { rule.formatted = (rule.value.start || '') + ' … ' + (rule.value.end || ''); } else { @@ -408,7 +415,7 @@ module.exports.getRule = (id, callback) => { } break; case 'boolean': - rule.formatted = rule.value.value ? 'Selected' : 'Not selected'; + rule.formatted = rule.value.value ? _('Selected') : _('Not selected'); break; default: rule.formatted = rule.value.value || ''; @@ -424,7 +431,7 @@ module.exports.updateRule = (id, rule, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing Rule ID')); + return callback(new Error(_('Missing Rule ID'))); } rule = tools.convertKeys(rule); @@ -435,7 +442,7 @@ module.exports.updateRule = (id, rule, callback) => { } if (!existingRule) { - return callback(new Error('Selected rule not found')); + return callback(new Error(_('Selected rule not found'))); } module.exports.get(existingRule.segment, (err, segment) => { @@ -444,12 +451,12 @@ module.exports.updateRule = (id, rule, callback) => { } if (!segment) { - return callback(new Error('Selected segment not found')); + return callback(new Error(_('Selected segment not found'))); } let column = segment.columns.filter(column => column.column === existingRule.column).pop(); if (!column) { - return callback(new Error('Invalid rule type')); + return callback(new Error(_('Invalid rule type'))); } let value; @@ -514,7 +521,7 @@ module.exports.deleteRule = (id, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing Rule ID')); + return callback(new Error(_('Missing Rule ID'))); } db.getConnection((err, connection) => { @@ -539,7 +546,7 @@ module.exports.getQuery = (id, prefix, callback) => { } if (!segment) { - return callback(new Error('Segment not found')); + return callback(new Error(_('Segment not found'))); } prefix = prefix ? prefix + '.' : ''; @@ -648,7 +655,7 @@ module.exports.subscribers = (id, onlySubscribed, callback) => { return callback(err); } if (!segment) { - return callback(new Error('Segment not found')); + return callback(new Error(_('Segment not found'))); } module.exports.getQuery(id, false, (err, queryData) => { if (err) { diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index ca50b6db..941a2e02 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -10,6 +10,8 @@ let settings = require('./settings'); let mailer = require('../mailer'); let urllib = require('url'); let log = require('npmlog'); +let _ = require('../translate')._; +let util = require('util'); module.exports.list = (listId, start, limit, callback) => { listId = Number(listId) || 0; @@ -83,7 +85,7 @@ module.exports.filter = (listId, request, columns, segmentId, callback) => { segmentId = Number(segmentId) || 0; if (!listId) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } let processQuery = queryData => { @@ -228,7 +230,7 @@ module.exports.addConfirmation = (list, email, optInIp, data, callback) => { name: [].concat(data.firstName || []).concat(data.lastName || []).join(' '), address: email }, - subject: list.name + ': Please Confirm Subscription', + subject: util.format(_('%s: Please Confirm Subscription'),list.name), encryptionKeys }, { html: 'emails/confirm-html.hbs', @@ -319,7 +321,7 @@ module.exports.subscribe = (cid, optInIp, callback) => { } if (!result.entryId) { - return callback(new Error('Could not save subscription')); + return callback(new Error(_('Could not save subscription'))); } db.getConnection((err, connection) => { @@ -502,7 +504,7 @@ module.exports.get = (listId, cid, callback) => { cid = (cid || '').toString().trim(); if (!cid) { - return callback(new Error('Missing Subbscription ID')); + return callback(new Error(_('Missing Subbscription ID'))); } db.getConnection((err, connection) => { @@ -532,7 +534,7 @@ module.exports.getById = (listId, id, callback) => { id = Number(id) || 0; if (!id) { - return callback(new Error('Missing Subbscription ID')); + return callback(new Error(_('Missing Subbscription ID'))); } db.getConnection((err, connection) => { @@ -560,7 +562,7 @@ module.exports.getById = (listId, id, callback) => { module.exports.getByEmail = (listId, email, callback) => { if (!email) { - return callback(new Error('Missing Subbscription email address')); + return callback(new Error(_('Missing Subbscription email address'))); } db.getConnection((err, connection) => { @@ -635,11 +637,11 @@ module.exports.update = (listId, cid, updates, allowEmail, callback) => { let values = []; if (listId < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } if (!cid) { - return callback(new Error('Missing subscription ID')); + return callback(new Error(_('Missing subscription ID'))); } fields.list(listId, (err, fieldList) => { @@ -698,11 +700,11 @@ module.exports.unsubscribe = (listId, email, campaignId, callback) => { campaignId = (campaignId || '').toString().trim() || false; if (listId < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } if (!email) { - return callback(new Error('Missing email address')); + return callback(new Error(_('Missing email address'))); } db.getConnection((err, connection) => { @@ -884,11 +886,11 @@ module.exports.delete = (listId, cid, callback) => { cid = (cid || '').toString().trim(); if (listId < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } if (!cid) { - return callback(new Error('Missing subscription ID')); + return callback(new Error(_('Missing subscription ID'))); } db.getConnection((err, connection) => { @@ -987,11 +989,11 @@ module.exports.updateImport = (listId, importId, data, callback) => { importId = Number(importId) || 0; if (listId < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } if (importId < 1) { - return callback(new Error('Missing Import ID')); + return callback(new Error(_('Missing Import ID'))); } let keys = []; @@ -1041,11 +1043,11 @@ module.exports.getImport = (listId, importId, callback) => { importId = Number(importId) || 0; if (listId < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } if (importId < 1) { - return callback(new Error('Missing Import ID')); + return callback(new Error(_('Missing Import ID'))); } db.getConnection((err, connection) => { @@ -1081,7 +1083,7 @@ module.exports.getFailedImports = (importId, callback) => { importId = Number(importId) || 0; if (importId < 1) { - return callback(new Error('Missing Import ID')); + return callback(new Error(_('Missing Import ID'))); } db.getConnection((err, connection) => { @@ -1104,7 +1106,7 @@ module.exports.listImports = (listId, callback) => { listId = Number(listId) || 0; if (listId < 1) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } db.getConnection((err, connection) => { @@ -1147,11 +1149,11 @@ module.exports.updateAddress = (list, cid, updates, optInIp, callback) => { let emailNew = (updates.emailNew || '').toString().trim(); if (!list || !list.id) { - return callback(new Error('Missing List ID')); + return callback(new Error(_('Missing List ID'))); } if (!cid) { - return callback(new Error('Missing subscription ID')); + return callback(new Error(_('Missing subscription ID'))); } tools.validateEmail(emailNew, false, err => { @@ -1173,12 +1175,12 @@ module.exports.updateAddress = (list, cid, updates, optInIp, callback) => { } if (!rows || !rows.length) { connection.release(); - return callback(new Error('Unknown subscription ID')); + return callback(new Error(_('Unknown subscription ID'))); } if (rows[0].email === emailNew) { connection.release(); - return callback(new Error('Nothing seems to be changed')); + return callback(new Error(_('Nothing seems to be changed'))); } let old = rows[0]; @@ -1192,7 +1194,7 @@ module.exports.updateAddress = (list, cid, updates, optInIp, callback) => { } if (rows && rows[0] && rows[0].id) { - return callback(new Error('This address is already registered by someone else')); + return callback(new Error(_('This address is already registered by someone else'))); } module.exports.addConfirmation(list, emailNew, optInIp, { diff --git a/lib/models/templates.js b/lib/models/templates.js index 6df4c6ad..0753a87f 100644 --- a/lib/models/templates.js +++ b/lib/models/templates.js @@ -2,6 +2,7 @@ let db = require('../db'); let tools = require('../tools'); +let _ = require('../translate')._; let allowedKeys = ['description', 'editor_name', 'editor_data', 'html', 'text']; @@ -47,7 +48,7 @@ module.exports.get = (id, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing Template ID')); + return callback(new Error(_('Missing Template ID'))); } db.getConnection((err, connection) => { @@ -76,7 +77,7 @@ module.exports.create = (template, callback) => { let data = tools.convertKeys(template); if (!(data.name || '').toString().trim()) { - return callback(new Error('Template Name must be set')); + return callback(new Error(_('Template Name must be set'))); } let name = (template.name || '').toString().trim(); @@ -118,11 +119,11 @@ module.exports.update = (id, updates, callback) => { let data = tools.convertKeys(updates); if (id < 1) { - return callback(new Error('Missing Template ID')); + return callback(new Error(_('Missing Template ID'))); } if (!(data.name || '').toString().trim()) { - return callback(new Error('Template Name must be set')); + return callback(new Error(_('Template Name must be set'))); } let name = (updates.name || '').toString().trim(); @@ -159,7 +160,7 @@ module.exports.delete = (id, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing Template ID')); + return callback(new Error(_('Missing Template ID'))); } db.getConnection((err, connection) => { diff --git a/lib/models/triggers.js b/lib/models/triggers.js index 479eef8d..cd682cda 100644 --- a/lib/models/triggers.js +++ b/lib/models/triggers.js @@ -4,36 +4,37 @@ let tools = require('../tools'); let db = require('../db'); let lists = require('./lists'); let util = require('util'); +let _ = require('../translate')._; module.exports.defaultColumns = [{ column: 'created', - name: 'Sign up date', + name: _('Sign up date'), type: 'date' }, { column: 'latest_open', - name: 'Latest open', + name: _('Latest open'), type: 'date' }, { column: 'latest_click', - name: 'Latest click', + name: _('Latest click'), type: 'date' }]; module.exports.defaultCampaignEvents = [{ option: 'delivered', - name: 'Delivered' + name: _('Delivered') }, { option: 'opened', - name: 'Has Opened' + name: _('Has Opened') }, { option: 'clicked', - name: 'Has Clicked' + name: _('Has Clicked') }, { option: 'not_opened', - name: 'Not Opened' + name: _('Not Opened') }, { option: 'not_clicked', - name: 'Not Clicked' + name: _('Not Clicked') }]; let defaultColumnMap = {}; @@ -170,36 +171,36 @@ module.exports.create = (trigger, callback) => { let column; if (!listId) { - return callback(new Error('Missing or invalid list ID')); + return callback(new Error(_('Missing or invalid list ID'))); } if (seconds < 0) { - return callback(new Error('Days in the past are not allowed')); + return callback(new Error(_('Days in the past are not allowed'))); } if (!rule || ['campaign', 'subscription'].indexOf(rule) < 0) { - return callback(new Error('Missing or invalid trigger rule')); + return callback(new Error(_('Missing or invalid trigger rule'))); } switch (rule) { case 'subscription': column = (trigger.column || '').toString().toLowerCase().trim(); if (!column) { - return callback(new Error('Invalid subscription configuration')); + return callback(new Error(_('Invalid subscription configuration'))); } break; case 'campaign': column = (trigger.campaignOption || '').toString().toLowerCase().trim(); sourceCampaign = Number(trigger.sourceCampaign) || 0; if (!column || !sourceCampaign) { - return callback(new Error('Invalid campaign configuration')); + return callback(new Error(_('Invalid campaign configuration'))); } if (sourceCampaign === destCampaign) { - return callback(new Error('A campaing can not be a target for itself')); + return callback(new Error(_('A campaing can not be a target for itself'))); } break; default: - return callback(new Error('Missing or invalid trigger rule')); + return callback(new Error(_('Missing or invalid trigger rule'))); } lists.get(listId, (err, list) => { @@ -207,7 +208,7 @@ module.exports.create = (trigger, callback) => { return callback(err); } if (!list) { - return callback(new Error('Missing or invalid list ID')); + return callback(new Error(_('Missing or invalid list ID'))); } db.getConnection((err, connection) => { @@ -228,7 +229,7 @@ module.exports.create = (trigger, callback) => { let id = result && result.insertId; if (!id) { - return callback(new Error('Could not store trigger row')); + return callback(new Error(_('Could not store trigger row'))); } createTriggerTable(id, err => { @@ -245,7 +246,7 @@ module.exports.create = (trigger, callback) => { module.exports.update = (id, trigger, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing or invalid Trigger ID')); + return callback(new Error(_('Missing or invalid Trigger ID'))); } trigger = tools.convertKeys(trigger); @@ -259,32 +260,32 @@ module.exports.update = (id, trigger, callback) => { let column; if (seconds < 0) { - return callback(new Error('Days in the past are not allowed')); + return callback(new Error(_('Days in the past are not allowed'))); } if (!rule || ['campaign', 'subscription'].indexOf(rule) < 0) { - return callback(new Error('Missing or invalid trigger rule')); + return callback(new Error(_('Missing or invalid trigger rule'))); } switch (rule) { case 'subscription': column = (trigger.column || '').toString().toLowerCase().trim(); if (!column) { - return callback(new Error('Invalid subscription configuration')); + return callback(new Error(_('Invalid subscription configuration'))); } break; case 'campaign': column = (trigger.campaignOption || '').toString().toLowerCase().trim(); sourceCampaign = Number(trigger.sourceCampaign) || 0; if (!column || !sourceCampaign) { - return callback(new Error('Invalid campaign configuration')); + return callback(new Error(_('Invalid campaign configuration'))); } if (sourceCampaign === destCampaign) { - return callback(new Error('A campaing can not be a target for itself')); + return callback(new Error(_('A campaing can not be a target for itself'))); } break; default: - return callback(new Error('Missing or invalid trigger rule')); + return callback(new Error(_('Missing or invalid trigger rule'))); } db.getConnection((err, connection) => { @@ -312,7 +313,7 @@ module.exports.delete = (id, callback) => { id = Number(id) || 0; if (id < 1) { - return callback(new Error('Missing Trigger ID')); + return callback(new Error(_('Missing Trigger ID'))); } db.getConnection((err, connection) => { diff --git a/lib/models/users.js b/lib/models/users.js index 10e92784..b5be0fca 100644 --- a/lib/models/users.js +++ b/lib/models/users.js @@ -9,6 +9,7 @@ let mailer = require('../mailer'); let settings = require('./settings'); let crypto = require('crypto'); let urllib = require('url'); +let _ = require('../translate')._; /** * Fetches user by ID value @@ -99,7 +100,7 @@ module.exports.add = (username, password, email, callback) => { let id = result && result.insertId; if (!id) { - return callback(new Error('Could not store user row')); + return callback(new Error(_('Could not store user row'))); } return callback(null, id); @@ -169,7 +170,7 @@ module.exports.authenticate = (username, password, callback) => { module.exports.update = (id, updates, callback) => { if (!updates.email) { - return callback(new Error('Email Address must be set')); + return callback(new Error(_('Email Address must be set'))); } let update = (connection, callback) => { @@ -180,7 +181,7 @@ module.exports.update = (id, updates, callback) => { } if (!rows.length) { - return callback('Failed to check user data'); + return callback(_('Failed to check user data')); } let keys = ['email']; @@ -191,7 +192,7 @@ module.exports.update = (id, updates, callback) => { connection.query('UPDATE users SET ' + keys.map(key => key + '=?').join(', ') + ' WHERE id=? LIMIT 1', values, (err, result) => { if (err) { if (err.code === 'ER_DUP_ENTRY') { - err = new Error('Can\'t change email as another user with the same email address already exists'); + err = new Error(_('Can\'t change email as another user with the same email address already exists')); } return callback(err); } @@ -208,15 +209,15 @@ module.exports.update = (id, updates, callback) => { return callback(err); } if (!result) { - return callback('Incorrect current password'); + return callback(_('Incorrect current password')); } if (!updates.password) { - return callback(new Error('New password not set')); + return callback(new Error(_('New password not set'))); } if (updates.password !== updates.password2) { - return callback(new Error('Passwords do not match')); + return callback(new Error(_('Passwords do not match'))); } bcrypt.hash(updates.password, null, null, (err, hash) => { @@ -254,7 +255,7 @@ module.exports.resetToken = (id, callback) => { id = Number(id) || 0; if (!id) { - return callback(new Error('User ID not set')); + return callback(new Error(_('User ID not set'))); } db.getConnection((err, connection) => { @@ -282,7 +283,7 @@ module.exports.sendReset = (username, callback) => { username = (username || '').toString().trim(); if (!username) { - return callback(new Error('Username must be set')); + return callback(new Error(_('Username must be set'))); } db.getConnection((err, connection) => { @@ -319,7 +320,7 @@ module.exports.sendReset = (username, callback) => { to: { address: rows[0].email }, - subject: 'Mailer password change request' + subject: _('Mailer password change request') }, { html: 'emails/password-reset-html.hbs', text: 'emails/password-reset-text.hbs', @@ -343,7 +344,7 @@ module.exports.sendReset = (username, callback) => { module.exports.checkResetToken = (username, resetToken, callback) => { if (!username || !resetToken) { - return callback(new Error('Missing username or reset token')); + return callback(new Error(_('Missing username or reset token'))); } db.getConnection((err, connection) => { if (err) { @@ -363,11 +364,11 @@ module.exports.resetPassword = (data, callback) => { let updates = tools.convertKeys(data); if (!updates.username || !updates.resetToken) { - return callback(new Error('Missing username or reset token')); + return callback(new Error(_('Missing username or reset token'))); } if (!updates.password || !updates.password2 || updates.password !== updates.password2) { - return callback(new Error('Invalid new password')); + return callback(new Error(_('Invalid new password'))); } bcrypt.hash(updates.password, null, null, (err, hash) => { diff --git a/lib/passport.js b/lib/passport.js index 0e69d628..15f069db 100644 --- a/lib/passport.js +++ b/lib/passport.js @@ -2,6 +2,8 @@ let config = require('config'); let log = require('npmlog'); +let _ = require('./translate')._; +let util = require('util'); let passport = require('passport'); let LocalStrategy = require('passport-local').Strategy; @@ -33,7 +35,7 @@ module.exports.setup = app => { module.exports.logout = (req, res) => { if (req.user) { - req.flash('info', req.user.username + ' logged out'); + req.flash('info', util.format(_('%s logged out'), req.user.username)); req.logout(); } res.redirect('/'); @@ -46,7 +48,7 @@ module.exports.login = (req, res, next) => { return next(err); } if (!user) { - req.flash('danger', info && info.message || 'Failed to authenticate user'); + req.flash('danger', info && info.message || _('Failed to authenticate user')); return res.redirect('/users/login' + (req.body.next ? '?next=' + encodeURIComponent(req.body.next) : '')); } req.logIn(user, err => { @@ -62,7 +64,7 @@ module.exports.login = (req, res, next) => { req.session.cookie.expires = false; } - req.flash('success', 'Logged in as ' + user.username); + req.flash('success', util.format(_('Logged in as %s'), user.username)); return res.redirect(req.body.next || '/'); }); })(req, res, next); @@ -120,7 +122,7 @@ if (config.ldap.enabled && LdapStrategy) { if (!user) { return done(null, false, { - message: 'Incorrect username or password' + message: _('Incorrect username or password') }); } diff --git a/lib/tools.js b/lib/tools.js index 41c8b782..5a7988bd 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -6,6 +6,8 @@ let Isemail = require('isemail'); let urllib = require('url'); let juice = require('juice'); let jsdom = require('jsdom'); +let _ = require('./translate')._; +let util = require('util'); let blockedUsers = ['abuse', 'admin', 'billing', 'compliance', 'devnull', 'dns', 'ftp', 'hostmaster', 'inoc', 'ispfeedback', 'ispsupport', 'listrequest', 'list', 'maildaemon', 'noc', 'noreply', 'noreply', 'null', 'phish', 'phishing', 'postmaster', 'privacy', 'registrar', 'root', 'security', 'spam', 'support', 'sysadmin', 'tech', 'undisclosedrecipients', 'unsubscribe', 'usenet', 'uucp', 'webmaster', 'www']; @@ -106,19 +108,19 @@ function updateMenu(res) { } res.locals.menu.push({ - title: 'Lists', + title: _('Lists'), url: '/lists', key: 'lists' }, { - title: 'Templates', + title: _('Templates'), url: '/templates', key: 'templates' }, { - title: 'Campaigns', + title: _('Campaigns'), url: '/campaigns', key: 'campaigns' }, { - title: 'Automation', + title: _('Automation'), url: '/triggers', key: 'triggers' }); @@ -128,7 +130,7 @@ function validateEmail(address, checkBlocked, callback) { let user = (address || '').toString().split('@').shift().toLowerCase().replace(/[^a-z0-9]/g, ''); if (checkBlocked && blockedUsers.indexOf(user) >= 0) { - return callback(new Error('Blocked email address "' + address + '"')); + return callback(new Error(util.format(_('Blocked email address "%s"'), address))); } Isemail.validate(address, { @@ -137,16 +139,16 @@ function validateEmail(address, checkBlocked, callback) { }, result => { if (result !== 0) { - let message = 'Invalid email address "' + address + '"'; + let message = util.format(_('Invalid email address "%s".'), address); switch (result) { case 5: - message += '. MX record not found for domain'; + message += ' ' + _('MX record not found for domain'); break; case 6: - message += '. Address domain not found'; + message += ' ' + _('Address domain not found'); break; case 12: - message += '. Address domain name is required'; + message += ' ' + _('Address domain name is required'); break; } return callback(new Error(message)); diff --git a/lib/translate.js b/lib/translate.js index c6f44995..9abd9a6f 100644 --- a/lib/translate.js +++ b/lib/translate.js @@ -8,6 +8,7 @@ const fs = require('fs'); const path = require('path'); const log = require('npmlog'); const gettextParser = require('gettext-parser'); +const fakelang = require('./fakelang'); const language = config.language || 'en'; @@ -31,5 +32,10 @@ module.exports._ = str => { if (typeof str !== 'string') { str = String(str); } + + if (language === 'zz') { + return fakelang(str); + } + return gt.dgettext(language, str); }; diff --git a/package.json b/package.json index 79d65700..c4b8d02b 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "node": ">=5.0.0" }, "devDependencies": { + "eslint-config-nodemailer": "^1.0.0", "grunt": "^1.0.1", "grunt-cli": "^1.2.0", "grunt-contrib-nodeunit": "^1.0.0", @@ -33,9 +34,9 @@ "jsxgettext-andris": "^0.9.0-patch.1" }, "dependencies": { - "aws-sdk": "^2.22.0", + "aws-sdk": "^2.23.0", "bcrypt-nodejs": "0.0.3", - "body-parser": "^1.17.0", + "body-parser": "^1.17.1", "bounce-handler": "^7.3.2-fork.2", "compression": "^1.6.2", "config": "^1.25.1", @@ -46,7 +47,7 @@ "csv-generate": "^1.0.0", "csv-parse": "^1.2.0", "escape-html": "^1.0.3", - "express": "^4.15.0", + "express": "^4.15.2", "express-session": "^1.15.1", "faker": "^4.1.0", "feedparser": "^2.1.0", @@ -71,14 +72,14 @@ "nodemailer": "^3.1.4", "nodemailer-openpgp": "^1.0.2", "npmlog": "^4.0.2", - "openpgp": "^2.3.8", + "openpgp": "^2.4.0", "passport": "^0.3.2", "passport-local": "^1.0.0", "redfour": "^1.0.0", "redis": "^2.6.5", "request": "^2.80.0", "serve-favicon": "^2.4.1", - "shortid": "^2.2.6", + "shortid": "^2.2.8", "slugify": "^1.1.0", "smtp-server": "^2.0.2", "striptags": "^3.0.1", diff --git a/routes/archive.js b/routes/archive.js index a4356462..c0c0245b 100644 --- a/routes/archive.js +++ b/routes/archive.js @@ -11,6 +11,8 @@ let request = require('request'); let router = new express.Router(); let passport = require('../lib/passport'); let marked = require('marked'); +let _ = require('../lib/translate')._; +let util = require('util'); router.get('/:campaign/:list/:subscription', passport.csrfProtection, (req, res, next) => { settings.get('serviceUrl', (err, serviceUrl) => { @@ -26,7 +28,7 @@ router.get('/:campaign/:list/:subscription', passport.csrfProtection, (req, res, } if (!campaign) { - err = new Error('Not Found'); + err = new Error(_('Not Found')); err.status = 404; return next(err); } @@ -38,7 +40,7 @@ router.get('/:campaign/:list/:subscription', passport.csrfProtection, (req, res, } if (!list) { - err = new Error('Not Found'); + err = new Error(_('Not Found')); err.status = 404; return next(err); } @@ -50,7 +52,7 @@ router.get('/:campaign/:list/:subscription', passport.csrfProtection, (req, res, } if (!subscription) { - err = new Error('Not Found'); + err = new Error(_('Not Found')); err.status = 404; return next(err); } @@ -105,7 +107,7 @@ router.get('/:campaign/:list/:subscription', passport.csrfProtection, (req, res, return next(err); } if (httpResponse.statusCode !== 200) { - return next(new Error('Received status code ' + httpResponse.statusCode + ' from ' + campaign.sourceUrl)); + return next(new Error(util.format(_('Received status code %s from %s'), httpResponse.statusCode, campaign.sourceUrl))); } renderAndShow(body && body.toString(), false); }); @@ -129,7 +131,7 @@ router.post('/attachment/download', passport.parseForm, passport.csrfProtection, let url = '/archive/' + encodeURIComponent(req.body.campaign || '') + '/' + encodeURIComponent(req.body.list || '') + '/' + encodeURIComponent(req.body.subscription || ''); campaigns.getByCid(req.body.campaign, (err, campaign) => { if (err || !campaign) { - req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find campaign with specified ID')); return res.redirect(url); } campaigns.getAttachment(campaign.id, Number(req.body.attachment), (err, attachment) => { @@ -137,7 +139,7 @@ router.post('/attachment/download', passport.parseForm, passport.csrfProtection, req.flash('danger', err && err.message || err); return res.redirect(url); } else if (!attachment) { - req.flash('warning', 'Attachment not found'); + req.flash('warning', _('Attachment not found')); return res.redirect(url); } diff --git a/routes/campaigns.js b/routes/campaigns.js index ed6ae632..4ee1958a 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -14,6 +14,8 @@ let striptags = require('striptags'); let passport = require('../lib/passport'); let htmlescape = require('escape-html'); let multer = require('multer'); +let _ = require('../lib/translate')._; +let util = require('util'); let uploadStorage = multer.memoryStorage(); let uploads = multer({ storage: uploadStorage @@ -21,7 +23,7 @@ let uploads = multer({ router.all('/*', (req, res, next) => { if (!req.user) { - req.flash('danger', 'Need to be logged in to access restricted content'); + req.flash('danger', _('Need to be logged in to access restricted content')); return res.redirect('/users/login?next=' + encodeURIComponent(req.originalUrl)); } res.setSelectedMenu('campaigns'); @@ -30,7 +32,7 @@ router.all('/*', (req, res, next) => { router.get('/', (req, res) => { res.render('campaigns/campaigns', { - title: 'Campaigns' + title: _('Campaigns') }); }); @@ -112,13 +114,13 @@ router.get('/create', passport.csrfProtection, (req, res) => { router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) => { campaigns.create(req.body, false, (err, id) => { if (err || !id) { - req.flash('danger', err && err.message || err || 'Could not create campaign'); + req.flash('danger', err && err.message || err || _('Could not create campaign')); return res.redirect('/campaigns/create?' + tools.queryParams(req.body)); } - req.flash('success', 'Campaign “' + req.body.name + '” created'); - res.redirect((req.body.type === 'rss') - ? '/campaigns/edit/' + id - : '/campaigns/edit/' + id + '?tab=template' + req.flash('success', util.format(_('Campaign “%s” created'), req.body.name)); + res.redirect((req.body.type === 'rss') ? + '/campaigns/edit/' + id : + '/campaigns/edit/' + id + '?tab=template' ); }); }); @@ -126,7 +128,7 @@ router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) = router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { campaigns.get(req.params.id, false, (err, campaign) => { if (err || !campaign) { - req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find campaign with specified ID')); return res.redirect('/campaigns'); } @@ -199,7 +201,7 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { campaign.mergeTags = defaultMergeTags.concat(listMergeTags); campaign.type === 2 && campaign.mergeTags.push({ key: 'RSS_ENTRY', - value: 'content from an RSS entry' + value: _('content from an RSS entry') }); res.render(view, campaign); }); @@ -215,9 +217,9 @@ router.post('/edit', passport.parseForm, passport.csrfProtection, (req, res) => if (err) { req.flash('danger', err.message || err); } else if (updated) { - req.flash('success', 'Campaign settings updated'); + req.flash('success', _('Campaign settings updated')); } else { - req.flash('info', 'Campaign settings not updated'); + req.flash('info', _('Campaign settings not updated')); } if (req.body.id) { @@ -233,9 +235,9 @@ router.post('/delete', passport.parseForm, passport.csrfProtection, (req, res) = if (err) { req.flash('danger', err && err.message || err); } else if (deleted) { - req.flash('success', 'Campaign deleted'); + req.flash('success', _('Campaign deleted')); } else { - req.flash('info', 'Could not delete specified campaign'); + req.flash('info', _('Could not delete specified campaign')); } return res.redirect('/campaigns'); @@ -254,22 +256,22 @@ router.post('/ajax', (req, res) => { let getStatusText = data => { switch (data.status) { case 1: - return 'Idling'; + return _('Idling'); case 2: if (data.scheduled && data.scheduled > new Date()) { - return 'Scheduled'; + return _('Scheduled'); } - return ' Sending…'; + return ' ' + _('Sending') + '…'; case 3: - return 'Finished'; + return _('Finished'); case 4: - return 'Paused'; + return _('Paused'); case 5: - return 'Inactive'; + return _('Inactive'); case 6: - return 'Active'; + return _('Active'); } - return 'Other'; + return _('Other'); }; res.json({ @@ -282,7 +284,7 @@ router.post('/ajax', (req, res) => { htmlescape(striptags(row.description) || ''), getStatusText(row), '' + row.created.toISOString() + '' - ].concat('Edit')) + ].concat('' + _('Edit') + '')) }); }); }); @@ -290,7 +292,7 @@ router.post('/ajax', (req, res) => { router.get('/view/:id', passport.csrfProtection, (req, res) => { campaigns.get(req.params.id, true, (err, campaign) => { if (err || !campaign) { - req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find campaign with specified ID')); return res.redirect('/campaigns'); } @@ -385,7 +387,7 @@ router.post('/preview/:id', passport.parseForm, passport.csrfProtection, (req, r router.get('/opened/:id', passport.csrfProtection, (req, res) => { campaigns.get(req.params.id, true, (err, campaign) => { if (err || !campaign) { - req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find campaign with specified ID')); return res.redirect('/campaigns'); } @@ -424,13 +426,13 @@ router.get('/status/:id/:status', passport.csrfProtection, (req, res) => { status = 4; break; default: - req.flash('danger', 'Unknown status selector'); + req.flash('danger', _('Unknown status selector')); return res.redirect('/campaigns'); } campaigns.get(id, true, (err, campaign) => { if (err || !campaign) { - req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find campaign with specified ID')); return res.redirect('/campaigns'); } @@ -470,7 +472,7 @@ router.get('/status/:id/:status', passport.csrfProtection, (req, res) => { router.get('/clicked/:id/:linkId', passport.csrfProtection, (req, res) => { campaigns.get(req.params.id, true, (err, campaign) => { if (err || !campaign) { - req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find campaign with specified ID')); return res.redirect('/campaigns'); } @@ -536,7 +538,7 @@ router.post('/clicked/ajax/:id/:linkId', (req, res) => { campaigns.get(req.params.id, true, (err, campaign) => { if (err || !campaign) { return res.json({ - error: err && err.message || err || 'Campaign not found', + error: err && err.message || err || _('Campaign not found'), data: [] }); } @@ -571,7 +573,7 @@ router.post('/clicked/ajax/:id/:linkId', (req, res) => { htmlescape(row.lastName || ''), row.created && row.created.toISOString ? '' + row.created.toISOString() + '' : 'N/A', row.count, - 'Edit' + '' + _('Edit') + '' ]) }); }); @@ -585,7 +587,7 @@ router.post('/status/ajax/:id/:status', (req, res) => { campaigns.get(req.params.id, true, (err, campaign) => { if (err || !campaign) { return res.json({ - error: err && err.message || err || 'Campaign not found', + error: err && err.message || err || _('Campaign not found'), data: [] }); } @@ -621,7 +623,7 @@ router.post('/status/ajax/:id/:status', (req, res) => { htmlescape(row.lastName || ''), htmlescape(row.response || ''), row.updated && row.created.toISOString ? '' + row.updated.toISOString() + '' : 'N/A', - 'Edit' + '' + _('Edit') + '' ]) }); }); @@ -634,9 +636,9 @@ router.post('/delete', passport.parseForm, passport.csrfProtection, (req, res) = if (err) { req.flash('danger', err && err.message || err); } else if (deleted) { - req.flash('success', 'Campaign deleted'); + req.flash('success', _('Campaign deleted')); } else { - req.flash('info', 'Could not delete specified campaign'); + req.flash('info', _('Could not delete specified campaign')); } return res.redirect('/campaigns'); @@ -652,9 +654,9 @@ router.post('/send', passport.parseForm, passport.csrfProtection, (req, res) => if (err) { req.flash('danger', err && err.message || err); } else if (scheduled) { - req.flash('success', 'Scheduled sending'); + req.flash('success', _('Scheduled sending')); } else { - req.flash('info', 'Could not schedule sending'); + req.flash('info', _('Could not schedule sending')); } return res.redirect('/campaigns/view/' + encodeURIComponent(req.body.id)); @@ -666,9 +668,9 @@ router.post('/resume', passport.parseForm, passport.csrfProtection, (req, res) = if (err) { req.flash('danger', err && err.message || err); } else if (scheduled) { - req.flash('success', 'Sending resumed'); + req.flash('success', _('Sending resumed')); } else { - req.flash('info', 'Could not resume sending'); + req.flash('info', _('Could not resume sending')); } return res.redirect('/campaigns/view/' + encodeURIComponent(req.body.id)); @@ -680,9 +682,9 @@ router.post('/reset', passport.parseForm, passport.csrfProtection, (req, res) => if (err) { req.flash('danger', err && err.message || err); } else if (reset) { - req.flash('success', 'Sending reset'); + req.flash('success', _('Sending reset')); } else { - req.flash('info', 'Could not reset sending'); + req.flash('info', _('Could not reset sending')); } return res.redirect('/campaigns/view/' + encodeURIComponent(req.body.id)); @@ -694,9 +696,9 @@ router.post('/pause', passport.parseForm, passport.csrfProtection, (req, res) => if (err) { req.flash('danger', err && err.message || err); } else if (reset) { - req.flash('success', 'Sending paused'); + req.flash('success', _('Sending paused')); } else { - req.flash('info', 'Could not pause sending'); + req.flash('info', _('Could not pause sending')); } return res.redirect('/campaigns/view/' + encodeURIComponent(req.body.id)); @@ -708,9 +710,9 @@ router.post('/activate', passport.parseForm, passport.csrfProtection, (req, res) if (err) { req.flash('danger', err && err.message || err); } else if (reset) { - req.flash('success', 'Sending activated'); + req.flash('success', _('Sending activated')); } else { - req.flash('info', 'Could not activate sending'); + req.flash('info', _('Could not activate sending')); } return res.redirect('/campaigns/view/' + encodeURIComponent(req.body.id)); @@ -722,9 +724,9 @@ router.post('/inactivate', passport.parseForm, passport.csrfProtection, (req, re if (err) { req.flash('danger', err && err.message || err); } else if (reset) { - req.flash('success', 'Sending paused'); + req.flash('success', _('Sending paused')); } else { - req.flash('info', 'Could not pause sending'); + req.flash('info', _('Could not pause sending')); } return res.redirect('/campaigns/view/' + encodeURIComponent(req.body.id)); @@ -734,7 +736,7 @@ router.post('/inactivate', passport.parseForm, passport.csrfProtection, (req, re router.post('/attachment', uploads.single('attachment'), passport.parseForm, passport.csrfProtection, (req, res) => { campaigns.get(req.body.id, false, (err, campaign) => { if (err || !campaign) { - req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find campaign with specified ID')); return res.redirect('/campaigns'); } campaigns.addAttachment(campaign.id, { @@ -745,9 +747,9 @@ router.post('/attachment', uploads.single('attachment'), passport.parseForm, pas if (err) { req.flash('danger', err && err.message || err); } else if (attachmentId) { - req.flash('success', 'Attachment uploaded'); + req.flash('success', _('Attachment uploaded')); } else { - req.flash('info', 'Could not store attachment'); + req.flash('info', _('Could not store attachment')); } return res.redirect('/campaigns/edit/' + campaign.id + '?tab=attachments'); }); @@ -757,16 +759,16 @@ router.post('/attachment', uploads.single('attachment'), passport.parseForm, pas router.post('/attachment/delete', passport.parseForm, passport.csrfProtection, (req, res) => { campaigns.get(req.body.id, false, (err, campaign) => { if (err || !campaign) { - req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find campaign with specified ID')); return res.redirect('/campaigns'); } campaigns.deleteAttachment(campaign.id, Number(req.body.attachment), (err, deleted) => { if (err) { req.flash('danger', err && err.message || err); } else if (deleted) { - req.flash('success', 'Attachment deleted'); + req.flash('success', _('Attachment deleted')); } else { - req.flash('info', 'Could not delete attachment'); + req.flash('info', _('Could not delete attachment')); } return res.redirect('/campaigns/edit/' + campaign.id + '?tab=attachments'); }); @@ -776,7 +778,7 @@ router.post('/attachment/delete', passport.parseForm, passport.csrfProtection, ( router.post('/attachment/download', passport.parseForm, passport.csrfProtection, (req, res) => { campaigns.get(req.body.id, false, (err, campaign) => { if (err || !campaign) { - req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find campaign with specified ID')); return res.redirect('/campaigns'); } campaigns.getAttachment(campaign.id, Number(req.body.attachment), (err, attachment) => { @@ -784,7 +786,7 @@ router.post('/attachment/download', passport.parseForm, passport.csrfProtection, req.flash('danger', err && err.message || err); return res.redirect('/campaigns/edit/' + campaign.id + '?tab=attachments'); } else if (!attachment) { - req.flash('warning', 'Attachment not found'); + req.flash('warning', _('Attachment not found')); return res.redirect('/campaigns/edit/' + campaign.id + '?tab=attachments'); } @@ -798,7 +800,7 @@ router.post('/attachment/download', passport.parseForm, passport.csrfProtection, router.get('/attachment/:campaign', passport.csrfProtection, (req, res) => { campaigns.get(req.params.campaign, false, (err, campaign) => { if (err || !campaign) { - req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find campaign with specified ID')); return res.redirect('/campaigns'); } campaign.csrfToken = req.csrfToken(); diff --git a/routes/fields.js b/routes/fields.js index 593e4380..2ce557da 100644 --- a/routes/fields.js +++ b/routes/fields.js @@ -6,10 +6,11 @@ let lists = require('../lib/models/lists'); let fields = require('../lib/models/fields'); let tools = require('../lib/tools'); let passport = require('../lib/passport'); +let _ = require('../lib/translate')._; router.all('/*', (req, res, next) => { if (!req.user) { - req.flash('danger', 'Need to be logged in to access restricted content'); + req.flash('danger', _('Need to be logged in to access restricted content')); return res.redirect('/users/login?next=' + encodeURIComponent(req.originalUrl)); } res.setSelectedMenu('lists'); @@ -24,7 +25,7 @@ router.get('/:list', (req, res) => { } if (!list) { - req.flash('danger', 'Selected list ID not found'); + req.flash('danger', _('Selected list ID not found')); return res.redirect('/'); } @@ -60,7 +61,7 @@ router.get('/:list/create', passport.csrfProtection, (req, res) => { } if (!list) { - req.flash('danger', 'Selected list ID not found'); + req.flash('danger', _('Selected list ID not found')); return res.redirect('/'); } @@ -98,7 +99,7 @@ router.get('/:list/create', passport.csrfProtection, (req, res) => { router.post('/:list/create', passport.parseForm, passport.csrfProtection, (req, res) => { fields.create(req.params.list, req.body, (err, id) => { if (err || !id) { - req.flash('danger', err && err.message || err || 'Could not create custom field'); + req.flash('danger', err && err.message || err || _('Could not create custom field')); return res.redirect('/fields/' + encodeURIComponent(req.params.list) + '/create?' + tools.queryParams(req.body)); } req.flash('success', 'Custom field created'); @@ -114,7 +115,7 @@ router.get('/:list/edit/:field', passport.csrfProtection, (req, res) => { } if (!list) { - req.flash('danger', 'Selected list ID not found'); + req.flash('danger', _('Selected list ID not found')); return res.redirect('/'); } @@ -125,7 +126,7 @@ router.get('/:list/edit/:field', passport.csrfProtection, (req, res) => { } if (!field) { - req.flash('danger', 'Selected field not found'); + req.flash('danger', _('Selected field not found')); return res.redirect('/fields/' + encodeURIComponent(req.params.list)); } @@ -161,9 +162,9 @@ router.post('/:list/edit', passport.parseForm, passport.csrfProtection, (req, re if (err) { req.flash('danger', err.message || err); } else if (updated) { - req.flash('success', 'Field settings updated'); + req.flash('success', _('Field settings updated')); } else { - req.flash('info', 'Field settings not updated'); + req.flash('info', _('Field settings not updated')); } if (req.body.id) { @@ -179,9 +180,9 @@ router.post('/:list/delete', passport.parseForm, passport.csrfProtection, (req, if (err) { req.flash('danger', err && err.message || err); } else if (deleted) { - req.flash('success', 'Custom field deleted'); + req.flash('success', _('Custom field deleted')); } else { - req.flash('info', 'Could not delete specified field'); + req.flash('info', _('Could not delete specified field')); } return res.redirect('/fields/' + encodeURIComponent(req.params.list)); diff --git a/routes/links.js b/routes/links.js index b675c131..5da3ef43 100644 --- a/routes/links.js +++ b/routes/links.js @@ -5,6 +5,7 @@ let settings = require('../lib/models/settings'); let lists = require('../lib/models/lists'); let subscriptions = require('../lib/models/subscriptions'); let tools = require('../lib/tools'); +let _ = require('../lib/translate')._; let log = require('npmlog'); let express = require('express'); @@ -36,7 +37,7 @@ router.get('/:campaign/:list/:subscription/:link', (req, res) => { res.status(404); return res.render('archive/view', { layout: 'archive/layout', - message: 'Oops, we couldn\'t find a link for the URL you clicked', + message: _('Oops, we couldn\'t find a link for the URL you clicked'), campaign: { subject: 'Error 404' } diff --git a/routes/lists.js b/routes/lists.js index 8fd54dd6..91e39123 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -17,6 +17,8 @@ let humanize = require('humanize'); let mkdirp = require('mkdirp'); let pathlib = require('path'); let log = require('npmlog'); +let _ = require('../lib/translate')._; +let util = require('util'); let uploadStorage = multer.diskStorage({ destination: (req, file, callback) => { @@ -44,7 +46,7 @@ let moment = require('moment-timezone'); router.all('/*', (req, res, next) => { if (!req.user) { - req.flash('danger', 'Need to be logged in to access restricted content'); + req.flash('danger', _('Need to be logged in to access restricted content')); return res.redirect('/users/login?next=' + encodeURIComponent(req.originalUrl)); } res.setSelectedMenu('lists'); @@ -85,10 +87,10 @@ router.get('/create', passport.csrfProtection, (req, res) => { router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) => { lists.create(req.body, (err, id) => { if (err || !id) { - req.flash('danger', err && err.message || err || 'Could not create list'); + req.flash('danger', err && err.message || err || _('Could not create list')); return res.redirect('/lists/create?' + tools.queryParams(req.body)); } - req.flash('success', 'List created'); + req.flash('success', _('List created')); res.redirect('/lists/view/' + id); }); }); @@ -96,7 +98,7 @@ router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) = router.get('/edit/:id', passport.csrfProtection, (req, res) => { lists.get(req.params.id, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find list with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } list.csrfToken = req.csrfToken(); @@ -110,9 +112,9 @@ router.post('/edit', passport.parseForm, passport.csrfProtection, (req, res) => if (err) { req.flash('danger', err.message || err); } else if (updated) { - req.flash('success', 'List settings updated'); + req.flash('success', _('List settings updated')); } else { - req.flash('info', 'List settings not updated'); + req.flash('info', _('List settings not updated')); } if (req.body.id) { @@ -128,9 +130,9 @@ router.post('/delete', passport.parseForm, passport.csrfProtection, (req, res) = if (err) { req.flash('danger', err && err.message || err); } else if (deleted) { - req.flash('success', 'List deleted'); + req.flash('success', _('List deleted')); } else { - req.flash('info', 'Could not delete specified list'); + req.flash('info', _('Could not delete specified list')); } return res.redirect('/lists'); @@ -141,7 +143,7 @@ router.post('/ajax/:id', (req, res) => { lists.get(req.params.id, (err, list) => { if (err || !list) { return res.json({ - error: err && err.message || err || 'List not found', + error: err && err.message || err || _('List not found'), data: [] }); } @@ -166,7 +168,7 @@ router.post('/ajax/:id', (req, res) => { row.customFields = fields.getRow(fieldList, row); }); - let statuses = ['Unknown', 'Subscribed', 'Unsubscribed', 'Bounced', 'Complained']; + let statuses = [_('Unknown'), _('Subscribed'), _('Unsubscribed'), _('Bounced'), _('Complained')]; res.json({ draw: req.body.draw, @@ -197,11 +199,11 @@ router.post('/ajax/:id', (req, res) => { let key = keys[i]; switch (key.verifyPrimaryKey()) { case 0: - return 'Invalid key'; + return _('Invalid key'); case 1: - return 'Expired key'; + return _('Expired key'); case 2: - return 'Revoked key'; + return _('Revoked key'); } } @@ -217,7 +219,7 @@ router.post('/ajax/:id', (req, res) => { } else { return htmlescape(cRow.value || ''); } - })).concat(statuses[row.status]).concat(row.created && row.created.toISOString ? '' + row.created.toISOString() + '' : 'N/A').concat('Edit')) + })).concat(statuses[row.status]).concat(row.created && row.created.toISOString ? '' + row.created.toISOString() + '' : 'N/A').concat('' + _('Edit') + '')) }); }); }); @@ -231,7 +233,7 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { lists.get(req.params.id, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find list with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } @@ -248,22 +250,22 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { list.imports = imports.map((entry, i) => { entry.index = i + 1; - entry.importType = entry.type === 1 ? 'Subscribe' : 'Unsubscribe'; + entry.importType = entry.type === 1 ? _('Subscribe') : _('Unsubscribe'); switch (entry.status) { case 0: - entry.importStatus = 'Initializing'; + entry.importStatus = _('Initializing'); break; case 1: - entry.importStatus = 'Initialized'; + entry.importStatus = _('Initialized'); break; case 2: - entry.importStatus = 'Importing...'; + entry.importStatus = _('Importing') + '…'; break; case 3: - entry.importStatus = 'Finished'; + entry.importStatus = _('Finished'); break; default: - entry.importStatus = 'Errored' + (entry.error ? ' (' + entry.error + ')' : ''); + entry.importStatus = _('Errored') + (entry.error ? ' (' + entry.error + ')' : ''); entry.error = true; } entry.created = entry.created && entry.created.toISOString(); @@ -296,7 +298,7 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { router.get('/subscription/:id/add', passport.csrfProtection, (req, res) => { lists.get(req.params.id, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find list with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } @@ -335,13 +337,13 @@ router.get('/subscription/:id/add', passport.csrfProtection, (req, res) => { router.get('/subscription/:id/edit/:cid', passport.csrfProtection, (req, res) => { lists.get(req.params.id, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find list with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } subscriptions.get(list.id, req.params.cid, (err, subscription) => { if (err || !subscription) { - req.flash('danger', err && err.message || err || 'Could not find subscriber with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find subscriber with specified ID')); return res.redirect('/lists/view/' + req.params.id); } @@ -387,14 +389,14 @@ router.get('/subscription/:id/edit/:cid', passport.csrfProtection, (req, res) => router.post('/subscription/add', passport.parseForm, passport.csrfProtection, (req, res) => { subscriptions.insert(req.body.list, false, req.body, (err, response) => { if (err) { - req.flash('danger', err && err.message || err || 'Could not add subscription'); + req.flash('danger', err && err.message || err || _('Could not add subscription')); return res.redirect('/lists/subscription/' + encodeURIComponent(req.body.list) + '/add?' + tools.queryParams(req.body)); } if (response.entryId) { - req.flash('success', req.body.email + ' was successfully added to your list'); + req.flash('success', util.format(_('%s was successfully added to your list'), req.body.email)); } else { - req.flash('warning', req.body.email + ' was not added to your list'); + req.flash('warning', util.format(_('%s was not added to your list'), req.body.email)); } res.redirect('/lists/subscription/' + encodeURIComponent(req.body.list) + '/add'); @@ -404,22 +406,22 @@ router.post('/subscription/add', passport.parseForm, passport.csrfProtection, (r router.post('/subscription/unsubscribe', passport.parseForm, passport.csrfProtection, (req, res) => { lists.get(req.body.list, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find list with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } subscriptions.get(list.id, req.body.cid, (err, subscription) => { if (err || !subscription) { - req.flash('danger', err && err.message || err || 'Could not find subscriber with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find subscriber with specified ID')); return res.redirect('/lists/view/' + list.id); } subscriptions.unsubscribe(list.id, subscription.email, false, err => { if (err) { - req.flash('danger', err && err.message || err || 'Could not unsubscribe user'); + req.flash('danger', err && err.message || err || _('Could not unsubscribe user')); return res.redirect('/lists/subscription/' + list.id + '/edit/' + subscription.cid); } - req.flash('success', subscription.email + ' was successfully unsubscribed from your list'); + req.flash('success', util.format(_('%s was successfully unsubscribed from your list'), subscription.email)); res.redirect('/lists/view/' + list.id); }); }); @@ -429,17 +431,17 @@ router.post('/subscription/unsubscribe', passport.parseForm, passport.csrfProtec router.post('/subscription/delete', passport.parseForm, passport.csrfProtection, (req, res) => { lists.get(req.body.list, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find list with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } subscriptions.delete(list.id, req.body.cid, (err, email) => { if (err || !email) { - req.flash('danger', err && err.message || err || 'Could not find subscriber with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find subscriber with specified ID')); return res.redirect('/lists/view/' + list.id); } - req.flash('success', email + ' was successfully removed from your list'); + req.flash('success', util.format(_('%s was successfully removed from your list'), email)); res.redirect('/lists/view/' + list.id); }); }); @@ -451,16 +453,16 @@ router.post('/subscription/edit', passport.parseForm, passport.csrfProtection, ( if (err) { if (err.code === 'ER_DUP_ENTRY') { - req.flash('danger', 'Another subscriber with email address ' + req.body.email + ' already exists'); + req.flash('danger', util.format(_('Another subscriber with email address %s already exists'), req.body.email)); return res.redirect('/lists/subscription/' + encodeURIComponent(req.body.list) + '/edit/' + req.body.cid); } else { req.flash('danger', err.message || err); } } else if (updated) { - req.flash('success', 'Subscription settings updated'); + req.flash('success', _('Subscription settings updated')); } else { - req.flash('info', 'Subscription settings not updated'); + req.flash('info', _('Subscription settings not updated')); } if (req.body.list) { @@ -474,7 +476,7 @@ router.post('/subscription/edit', passport.parseForm, passport.csrfProtection, ( router.get('/subscription/:id/import', passport.csrfProtection, (req, res) => { lists.get(req.params.id, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find list with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } @@ -496,13 +498,13 @@ router.get('/subscription/:id/import', passport.csrfProtection, (req, res) => { router.get('/subscription/:id/import/:importId', passport.csrfProtection, (req, res) => { lists.get(req.params.id, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find list with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } subscriptions.getImport(req.params.id, req.params.importId, (err, data) => { if (err || !data) { - req.flash('danger', err && err.message || err || 'Could not find import data with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find import data with specified ID')); return res.redirect('/lists'); } @@ -525,7 +527,7 @@ router.get('/subscription/:id/import/:importId', passport.csrfProtection, (req, router.post('/subscription/import', uploads.single('listimport'), passport.parseForm, passport.csrfProtection, (req, res) => { lists.get(req.body.list, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find list with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } @@ -533,7 +535,7 @@ router.post('/subscription/import', uploads.single('listimport'), passport.parse getPreview(req.file.path, req.file.size, delimiter, (err, rows) => { if (err) { - req.flash('danger', err && err.message || err || 'Could not process CSV'); + req.flash('danger', err && err.message || err || _('Could not process CSV')); return res.redirect('/lists'); } else { @@ -542,7 +544,7 @@ router.post('/subscription/import', uploads.single('listimport'), passport.parse example: rows[1] || [] }, (err, importId) => { if (err) { - req.flash('danger', err && err.message || err || 'Could not create importer'); + req.flash('danger', err && err.message || err || _('Could not create importer')); return res.redirect('/lists'); } @@ -593,7 +595,7 @@ function getPreview(path, size, delimiter, callback) { // just ignore }); if (!data || !data.length) { - return callback(null, new Error('Empty file')); + return callback(null, new Error(_('Empty file'))); } callback(err, data); }); @@ -604,13 +606,13 @@ function getPreview(path, size, delimiter, callback) { router.post('/subscription/import-confirm', passport.parseForm, passport.csrfProtection, (req, res) => { lists.get(req.body.list, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find list with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } subscriptions.getImport(list.id, req.body.import, (err, data) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find import data with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find import data with specified ID')); return res.redirect('/lists'); } @@ -646,11 +648,11 @@ router.post('/subscription/import-confirm', passport.parseForm, passport.csrfPro mapping: JSON.stringify(data.mapping) }, (err, importer) => { if (err || !importer) { - req.flash('danger', err && err.message || err || 'Could not find import data with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find import data with specified ID')); return res.redirect('/lists'); } - req.flash('success', 'Import started'); + req.flash('success', _('Import started')); res.redirect('/lists/view/' + list.id + '?tab=imports'); }); }); @@ -661,7 +663,7 @@ router.post('/subscription/import-confirm', passport.parseForm, passport.csrfPro router.post('/subscription/import-restart', passport.parseForm, passport.csrfProtection, (req, res) => { lists.get(req.body.list, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find list with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } @@ -674,11 +676,11 @@ router.post('/subscription/import-restart', passport.parseForm, passport.csrfPro failed: 0 }, (err, importer) => { if (err || !importer) { - req.flash('danger', err && err.message || err || 'Could not find import data with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find import data with specified ID')); return res.redirect('/lists'); } - req.flash('success', 'Import restarted'); + req.flash('success', _('Import restarted')); res.redirect('/lists/view/' + list.id + '?tab=imports'); }); }); @@ -688,13 +690,13 @@ router.get('/subscription/:id/import/:importId/failed', (req, res) => { let start = 0; lists.get(req.params.id, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find list with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } subscriptions.getImport(req.params.id, req.params.importId, (err, data) => { if (err || !data) { - req.flash('danger', err && err.message || err || 'Could not find import data with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find import data with specified ID')); return res.redirect('/lists'); } subscriptions.getFailedImports(req.params.importId, (err, rows) => { diff --git a/routes/segments.js b/routes/segments.js index c71a585f..92759598 100644 --- a/routes/segments.js +++ b/routes/segments.js @@ -6,10 +6,11 @@ let passport = require('../lib/passport'); let lists = require('../lib/models/lists'); let segments = require('../lib/models/segments'); let tools = require('../lib/tools'); +let _ = require('../lib/translate')._; router.all('/*', (req, res, next) => { if (!req.user) { - req.flash('danger', 'Need to be logged in to access restricted content'); + req.flash('danger', _('Need to be logged in to access restricted content')); return res.redirect('/users/login?next=' + encodeURIComponent(req.originalUrl)); } res.setSelectedMenu('lists'); @@ -24,7 +25,7 @@ router.get('/:list', (req, res) => { } if (!list) { - req.flash('danger', 'Selected list ID not found'); + req.flash('danger', _('Selected list ID not found')); return res.redirect('/'); } @@ -55,7 +56,7 @@ router.get('/:list/create', passport.csrfProtection, (req, res) => { } if (!list) { - req.flash('danger', 'Selected list ID not found'); + req.flash('danger', _('Selected list ID not found')); return res.redirect('/'); } @@ -82,10 +83,10 @@ router.get('/:list/create', passport.csrfProtection, (req, res) => { router.post('/:list/create', passport.parseForm, passport.csrfProtection, (req, res) => { segments.create(req.params.list, req.body, (err, id) => { if (err || !id) { - req.flash('danger', err && err.message || err || 'Could not create segment'); + req.flash('danger', err && err.message || err || _('Could not create segment')); return res.redirect('/segments/' + encodeURIComponent(req.params.list) + '/create?' + tools.queryParams(req.body)); } - req.flash('success', 'Segment created'); + req.flash('success', _('Segment created')); res.redirect('/segments/' + encodeURIComponent(req.params.list) + '/view/' + id); }); }); @@ -98,7 +99,7 @@ router.get('/:list/view/:id', (req, res) => { } if (!list) { - req.flash('danger', 'Selected list ID not found'); + req.flash('danger', _('Selected list ID not found')); return res.redirect('/'); } @@ -109,7 +110,7 @@ router.get('/:list/view/:id', (req, res) => { } if (!segment) { - req.flash('danger', 'Selected segment ID not found'); + req.flash('danger', _('Selected segment ID not found')); return res.redirect('/'); } @@ -147,7 +148,7 @@ router.get('/:list/edit/:segment', passport.csrfProtection, (req, res) => { } if (!list) { - req.flash('danger', 'Selected list ID not found'); + req.flash('danger', _('Selected list ID not found')); return res.redirect('/'); } @@ -184,9 +185,9 @@ router.post('/:list/edit', passport.parseForm, passport.csrfProtection, (req, re if (err) { req.flash('danger', err.message || err); } else if (updated) { - req.flash('success', 'Segment settings updated'); + req.flash('success', _('Segment settings updated')); } else { - req.flash('info', 'Segment settings not updated'); + req.flash('info', _('Segment settings not updated')); } if (req.body.id) { @@ -202,9 +203,9 @@ router.post('/:list/delete', passport.parseForm, passport.csrfProtection, (req, if (err) { req.flash('danger', err && err.message || err); } else if (deleted) { - req.flash('success', 'Segment deleted'); + req.flash('success', _('Segment deleted')); } else { - req.flash('info', 'Could not delete specified segment'); + req.flash('info', _('Could not delete specified segment')); } return res.redirect('/segments/' + encodeURIComponent(req.params.list)); @@ -219,7 +220,7 @@ router.get('/:list/rules/:segment/create', passport.csrfProtection, (req, res) = } if (!list) { - req.flash('danger', 'Selected list ID not found'); + req.flash('danger', _('Selected list ID not found')); return res.redirect('/'); } @@ -251,7 +252,7 @@ router.post('/:list/rules/:segment/next', passport.parseForm, passport.csrfProte } if (!list) { - req.flash('danger', 'Selected list ID not found'); + req.flash('danger', _('Selected list ID not found')); return res.redirect('/'); } @@ -262,13 +263,13 @@ router.post('/:list/rules/:segment/next', passport.parseForm, passport.csrfProte } if (!segment) { - req.flash('danger', 'Selected segment not found'); + req.flash('danger', _('Selected segment not found')); return res.redirect('/segments/' + encodeURIComponent(req.params.list)); } let column = segment.columns.filter(column => column.column === req.body.column).pop(); if (!column) { - req.flash('danger', 'Invalid rule type'); + req.flash('danger', _('Invalid rule type')); return res.redirect('/segments/' + encodeURIComponent(req.params.list) + '/rules/' + segment.id + '/create?' + tools.queryParams(req.body)); } @@ -285,7 +286,7 @@ router.get('/:list/rules/:segment/configure', passport.csrfProtection, (req, res } if (!list) { - req.flash('danger', 'Selected list ID not found'); + req.flash('danger', _('Selected list ID not found')); return res.redirect('/'); } @@ -296,13 +297,13 @@ router.get('/:list/rules/:segment/configure', passport.csrfProtection, (req, res } if (!segment) { - req.flash('danger', 'Selected segment not found'); + req.flash('danger', _('Selected segment not found')); return res.redirect('/segments/' + encodeURIComponent(req.params.list)); } let column = segment.columns.filter(column => column.column === req.query.column).pop(); if (!column) { - req.flash('danger', 'Invalid rule type'); + req.flash('danger', _('Invalid rule type')); return res.redirect('/segments/' + encodeURIComponent(req.params.list) + '/rules/' + segment.id + '/create?' + tools.queryParams(req.body)); } @@ -332,16 +333,16 @@ router.post('/:list/rules/:segment/create', passport.parseForm, passport.csrfPro } if (!list) { - req.flash('danger', 'Selected list ID not found'); + req.flash('danger', _('Selected list ID not found')); return res.redirect('/'); } segments.createRule(req.params.segment, req.body, (err, id) => { if (err || !id) { - req.flash('danger', err && err.message || err || 'Could not create rule'); + req.flash('danger', err && err.message || err || _('Could not create rule')); return res.redirect('/segments/' + encodeURIComponent(req.params.list) + '/rules/' + encodeURIComponent(req.params.segment) + '/configure?' + tools.queryParams(req.body)); } - req.flash('success', 'Rule created'); + req.flash('success', _('Rule created')); res.redirect('/segments/' + encodeURIComponent(req.params.list) + '/view/' + encodeURIComponent(req.params.segment)); }); }); @@ -355,7 +356,7 @@ router.get('/:list/rules/:segment/edit/:rule', passport.csrfProtection, (req, re } if (!list) { - req.flash('danger', 'Selected list ID not found'); + req.flash('danger', _('Selected list ID not found')); return res.redirect('/'); } @@ -366,7 +367,7 @@ router.get('/:list/rules/:segment/edit/:rule', passport.csrfProtection, (req, re } if (!segment) { - req.flash('danger', 'Selected segment not found'); + req.flash('danger', _('Selected segment not found')); return res.redirect('/segments/' + encodeURIComponent(req.params.list)); } @@ -377,13 +378,13 @@ router.get('/:list/rules/:segment/edit/:rule', passport.csrfProtection, (req, re } if (!segment) { - req.flash('danger', 'Selected segment not found'); + req.flash('danger', _('Selected segment not found')); return res.redirect('/segments/' + encodeURIComponent(req.params.list)); } let column = segment.columns.filter(column => column.column === rule.column).pop(); if (!column) { - req.flash('danger', 'Invalid rule type'); + req.flash('danger', _('Invalid rule type')); return res.redirect('/segments/' + encodeURIComponent(req.params.list) + '/view/' + segment.id); } @@ -406,9 +407,9 @@ router.post('/:list/rules/:segment/edit', passport.parseForm, passport.csrfProte if (err) { req.flash('danger', err.message || err); } else if (updated) { - req.flash('success', 'Rule settings updated'); + req.flash('success', _('Rule settings updated')); } else { - req.flash('info', 'Rule settings not updated'); + req.flash('info', _('Rule settings not updated')); } if (req.params.segment) { @@ -424,9 +425,9 @@ router.post('/:list/rules/:segment/delete', passport.parseForm, passport.csrfPro if (err) { req.flash('danger', err && err.message || err); } else if (deleted) { - req.flash('success', 'Rule deleted'); + req.flash('success', _('Rule deleted')); } else { - req.flash('info', 'Could not delete specified rule'); + req.flash('info', _('Could not delete specified rule')); } return res.redirect('/segments/' + encodeURIComponent(req.params.list) + '/view/' + encodeURIComponent(req.params.segment)); diff --git a/routes/subscription.js b/routes/subscription.js index c88582df..a552a3a6 100644 --- a/routes/subscription.js +++ b/routes/subscription.js @@ -13,11 +13,13 @@ let fields = require('../lib/models/fields'); let subscriptions = require('../lib/models/subscriptions'); let settings = require('../lib/models/settings'); let openpgp = require('openpgp'); +let _ = require('../lib/translate')._; +let util = require('util'); router.get('/subscribe/:cid', (req, res, next) => { subscriptions.subscribe(req.params.cid, req.ip, (err, subscription) => { if (!err && !subscription) { - err = new Error('Selected subscription not found'); + err = new Error(_('Selected subscription not found')); err.status = 404; } @@ -27,7 +29,7 @@ router.get('/subscribe/:cid', (req, res, next) => { lists.get(subscription.list, (err, list) => { if (!err && !list) { - err = new Error('Selected list not found'); + err = new Error(_('Selected list not found')); err.status = 404; } @@ -73,7 +75,7 @@ router.get('/subscribe/:cid', (req, res, next) => { name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), address: subscription.email }, - subject: list.name + ': Subscription Confirmed', + subject: util.format(_('%s: Subscription Confirmed'), list.name), encryptionKeys }, { html: 'emails/subscription-confirmed-html.hbs', @@ -98,7 +100,7 @@ router.get('/subscribe/:cid', (req, res, next) => { router.get('/:cid', passport.csrfProtection, (req, res, next) => { lists.getByCid(req.params.cid, (err, list) => { if (!err && !list) { - err = new Error('Selected list not found'); + err = new Error(_('Selected list not found')); err.status = 404; } @@ -136,7 +138,7 @@ router.get('/:cid', passport.csrfProtection, (req, res, next) => { router.get('/:cid/confirm-notice', (req, res, next) => { lists.getByCid(req.params.cid, (err, list) => { if (!err && !list) { - err = new Error('Selected list not found'); + err = new Error(_('Selected list not found')); err.status = 404; } @@ -161,7 +163,7 @@ router.get('/:cid/confirm-notice', (req, res, next) => { router.get('/:cid/updated-notice', (req, res, next) => { lists.getByCid(req.params.cid, (err, list) => { if (!err && !list) { - err = new Error('Selected list not found'); + err = new Error(_('Selected list not found')); err.status = 404; } @@ -186,7 +188,7 @@ router.get('/:cid/updated-notice', (req, res, next) => { router.get('/:cid/unsubscribe-notice', (req, res, next) => { lists.getByCid(req.params.cid, (err, list) => { if (!err && !list) { - err = new Error('Selected list not found'); + err = new Error(_('Selected list not found')); err.status = 404; } @@ -212,7 +214,7 @@ router.post('/:cid/subscribe', passport.parseForm, passport.csrfProtection, (req let email = (req.body.email || '').toString().trim(); if (!email) { - req.flash('danger', 'Email address not set'); + req.flash('danger', _('Email address not set')); return res.redirect('/subscription/' + encodeURIComponent(req.params.cid) + '?' + tools.queryParams(req.body)); } @@ -227,7 +229,7 @@ router.post('/:cid/subscribe', passport.parseForm, passport.csrfProtection, (req lists.getByCid(req.params.cid, (err, list) => { if (!err && !list) { - err = new Error('Selected list not found'); + err = new Error(_('Selected list not found')); err.status = 404; } @@ -250,7 +252,7 @@ router.post('/:cid/subscribe', passport.parseForm, passport.csrfProtection, (req subscriptions.addConfirmation(list, email, req.ip, data, (err, confirmCid) => { if (!err && !confirmCid) { - err = new Error('Could not store confirmation data'); + err = new Error(_('Could not store confirmation data')); } if (err) { req.flash('danger', err.message || err); @@ -265,7 +267,7 @@ router.post('/:cid/subscribe', passport.parseForm, passport.csrfProtection, (req router.get('/:lcid/manage/:ucid', passport.csrfProtection, (req, res, next) => { lists.getByCid(req.params.lcid, (err, list) => { if (!err && !list) { - err = new Error('Selected list not found'); + err = new Error(_('Selected list not found')); err.status = 404; } @@ -279,7 +281,7 @@ router.get('/:lcid/manage/:ucid', passport.csrfProtection, (req, res, next) => { } subscriptions.get(list.id, req.params.ucid, (err, subscription) => { if (!err && !subscription) { - err = new Error('Subscription not found from this list'); + err = new Error(_('Subscription not found from this list')); err.status = 404; } @@ -312,7 +314,7 @@ router.get('/:lcid/manage/:ucid', passport.csrfProtection, (req, res, next) => { router.post('/:lcid/manage', passport.parseForm, passport.csrfProtection, (req, res, next) => { lists.getByCid(req.params.lcid, (err, list) => { if (!err && !list) { - err = new Error('Selected list not found'); + err = new Error(_('Selected list not found')); err.status = 404; } @@ -334,7 +336,7 @@ router.post('/:lcid/manage', passport.parseForm, passport.csrfProtection, (req, router.get('/:lcid/manage-address/:ucid', passport.csrfProtection, (req, res, next) => { lists.getByCid(req.params.lcid, (err, list) => { if (!err && !list) { - err = new Error('Selected list not found'); + err = new Error(_('Selected list not found')); err.status = 404; } @@ -344,7 +346,7 @@ router.get('/:lcid/manage-address/:ucid', passport.csrfProtection, (req, res, ne subscriptions.get(list.id, req.params.ucid, (err, subscription) => { if (!err && !subscription) { - err = new Error('Subscription not found from this list'); + err = new Error(_('Subscription not found from this list')); err.status = 404; } @@ -363,7 +365,7 @@ router.get('/:lcid/manage-address/:ucid', passport.csrfProtection, (req, res, ne router.post('/:lcid/manage-address', passport.parseForm, passport.csrfProtection, (req, res, next) => { lists.getByCid(req.params.lcid, (err, list) => { if (!err && !list) { - err = new Error('Selected list not found'); + err = new Error(_('Selected list not found')); err.status = 404; } @@ -378,7 +380,7 @@ router.post('/:lcid/manage-address', passport.parseForm, passport.csrfProtection return res.redirect('/subscription/' + encodeURIComponent(req.params.lcid) + '/manage-address/' + encodeURIComponent(req.body.cid) + '?' + tools.queryParams(req.body)); } - req.flash('info', 'Email address updated, check your mailbox for verification instructions'); + req.flash('info', _('Email address updated, check your mailbox for verification instructions')); res.redirect('/subscription/' + req.params.lcid + '/manage/' + req.body.cid); }); }); @@ -387,7 +389,7 @@ router.post('/:lcid/manage-address', passport.parseForm, passport.csrfProtection router.get('/:lcid/unsubscribe/:ucid', passport.csrfProtection, (req, res, next) => { lists.getByCid(req.params.lcid, (err, list) => { if (!err && !list) { - err = new Error('Selected list not found'); + err = new Error(_('Selected list not found')); err.status = 404; } @@ -397,7 +399,7 @@ router.get('/:lcid/unsubscribe/:ucid', passport.csrfProtection, (req, res, next) subscriptions.get(list.id, req.params.ucid, (err, subscription) => { if (!err && !subscription) { - err = new Error('Subscription not found from this list'); + err = new Error(_('Subscription not found from this list')); err.status = 404; } @@ -419,7 +421,7 @@ router.get('/:lcid/unsubscribe/:ucid', passport.csrfProtection, (req, res, next) router.post('/:lcid/unsubscribe', passport.parseForm, passport.csrfProtection, (req, res, next) => { lists.getByCid(req.params.lcid, (err, list) => { if (!err && !list) { - err = new Error('Selected list not found'); + err = new Error(_('Selected list not found')); err.status = 404; } @@ -467,7 +469,7 @@ router.post('/:lcid/unsubscribe', passport.parseForm, passport.csrfProtection, ( name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), address: subscription.email }, - subject: list.name + ': Subscription Confirmed', + subject: util.format(_('%s: Subscription Confirmed'), list.name), encryptionKeys }, { html: 'emails/unsubscribe-confirmed-html.hbs', @@ -494,7 +496,7 @@ router.post('/publickey', passport.parseForm, passport.csrfProtection, (req, res return next(err); } if (!configItems.pgpPrivateKey) { - err = new Error('Public key is not set'); + err = new Error(_('Public key is not set')); err.status = 404; return next(err); } @@ -510,7 +512,7 @@ router.post('/publickey', passport.parseForm, passport.csrfProtection, (req, res } if (!privKey) { - err = new Error('Public key is not set'); + err = new Error(_('Public key is not set')); err.status = 404; return next(err); } diff --git a/routes/templates.js b/routes/templates.js index 12cb1ec1..4b08ea86 100644 --- a/routes/templates.js +++ b/routes/templates.js @@ -10,10 +10,11 @@ let helpers = require('../lib/helpers'); let striptags = require('striptags'); let passport = require('../lib/passport'); let mailer = require('../lib/mailer'); +let _ = require('../lib/translate')._; router.all('/*', (req, res, next) => { if (!req.user) { - req.flash('danger', 'Need to be logged in to access restricted content'); + req.flash('danger', _('Need to be logged in to access restricted content')); return res.redirect('/users/login?next=' + encodeURIComponent(req.originalUrl)); } res.setSelectedMenu('templates'); @@ -68,19 +69,19 @@ router.get('/create', passport.csrfProtection, (req, res, next) => { data.text = data.text || rendererText(configItems); data.disableWysiwyg = configItems.disableWysiwyg; - data.editors = config.editors || [['summernote', 'Summernote']]; + data.editors = config.editors || [ + ['summernote', 'Summernote'] + ]; data.editors = data.editors.map(ed => { let editor = { name: ed[0], - label: ed[1], + label: ed[1] }; if (config[editor.name] && config[editor.name].templates) { - editor.templates = config[editor.name].templates.map(tmpl => { - return { - name: tmpl[0], - label: tmpl[1], - } - }); + editor.templates = config[editor.name].templates.map(tmpl => ({ + name: tmpl[0], + label: tmpl[1] + })); } return editor; }); @@ -94,10 +95,10 @@ router.get('/create', passport.csrfProtection, (req, res, next) => { router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) => { templates.create(req.body, (err, id) => { if (err || !id) { - req.flash('danger', err && err.message || err || 'Could not create template'); + req.flash('danger', err && err.message || err || _('Could not create template')); return res.redirect('/templates/create?' + tools.queryParams(req.body)); } - req.flash('success', 'Template created'); + req.flash('success', _('Template created')); res.redirect('/templates/edit/' + id); }); }); @@ -105,7 +106,7 @@ router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) = router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { templates.get(req.params.id, (err, template) => { if (err || !template) { - req.flash('danger', err && err.message || err || 'Could not find template with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find template with specified ID')); return res.redirect('/templates'); } settings.list(['disableWysiwyg'], (err, configItems) => { @@ -136,9 +137,9 @@ router.post('/edit', passport.parseForm, passport.csrfProtection, (req, res) => if (err) { req.flash('danger', err.message || err); } else if (updated) { - req.flash('success', 'Template settings updated'); + req.flash('success', _('Template settings updated')); } else { - req.flash('info', 'Template settings not updated'); + req.flash('info', _('Template settings not updated')); } if (req.body.id) { @@ -154,9 +155,9 @@ router.post('/delete', passport.parseForm, passport.csrfProtection, (req, res) = if (err) { req.flash('danger', err && err.message || err); } else if (deleted) { - req.flash('success', 'Template deleted'); + req.flash('success', _('Template deleted')); } else { - req.flash('info', 'Could not delete specified template'); + req.flash('info', _('Could not delete specified template')); } return res.redirect('/templates'); diff --git a/routes/triggers.js b/routes/triggers.js index c83099f7..32b25fa5 100644 --- a/routes/triggers.js +++ b/routes/triggers.js @@ -10,10 +10,12 @@ let striptags = require('striptags'); let passport = require('../lib/passport'); let tools = require('../lib/tools'); let htmlescape = require('escape-html'); +let _ = require('../lib/translate')._; +let util = require('util'); router.all('/*', (req, res, next) => { if (!req.user) { - req.flash('danger', 'Need to be logged in to access restricted content'); + req.flash('danger', _('Need to be logged in to access restricted content')); return res.redirect('/users/login?next=' + encodeURIComponent(req.originalUrl)); } res.setSelectedMenu('triggers'); @@ -57,7 +59,7 @@ router.get('/create-select', passport.csrfProtection, (req, res, next) => { router.post('/create-select', passport.parseForm, passport.csrfProtection, (req, res) => { if (!req.body.list) { - req.flash('danger', 'Could not find selected list'); + req.flash('danger', _('Could not find selected list')); return res.redirect('/triggers/create-select'); } res.redirect('/triggers/' + encodeURIComponent(req.body.list) + '/create'); @@ -74,7 +76,7 @@ router.get('/:listId/create', passport.csrfProtection, (req, res, next) => { lists.get(req.params.listId, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find selected list'); + req.flash('danger', err && err.message || err || _('Could not find selected list')); return res.redirect('/triggers/create-select'); } fields.list(list.id, (err, fieldList) => { @@ -126,14 +128,14 @@ router.get('/:listId/create', passport.csrfProtection, (req, res, next) => { router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) => { triggers.create(req.body, (err, id) => { if (err || !id) { - req.flash('danger', err && err.message || err || 'Could not create trigger'); + req.flash('danger', err && err.message || err || _('Could not create trigger')); if (req.body.list) { return res.redirect('/triggers/' + encodeURIComponent(req.body.list) + '/create?' + tools.queryParams(req.body)); } else { return res.redirect('/triggers'); } } - req.flash('success', 'Trigger “' + req.body.name + '” created'); + req.flash('success', util.format(_('Trigger “%s” created'), req.body.name)); res.redirect('/triggers'); }); }); @@ -141,7 +143,7 @@ router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) = router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { triggers.get(req.params.id, (err, trigger) => { if (err || !trigger) { - req.flash('danger', err && err.message || err || 'Could not find campaign with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find campaign with specified ID')); return res.redirect('/campaigns'); } trigger.csrfToken = req.csrfToken(); @@ -149,7 +151,7 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { lists.get(trigger.list, (err, list) => { if (err || !list) { - req.flash('danger', err && err.message || err || 'Could not find selected list'); + req.flash('danger', err && err.message || err || _('Could not find selected list')); return res.redirect('/triggers'); } fields.list(list.id, (err, fieldList) => { @@ -209,9 +211,9 @@ router.post('/edit', passport.parseForm, passport.csrfProtection, (req, res) => req.flash('danger', err.message || err); return res.redirect('/triggers/edit/' + encodeURIComponent(req.body.id)); } else if (updated) { - req.flash('success', 'Trigger settings updated'); + req.flash('success', _('Trigger settings updated')); } else { - req.flash('info', 'Trigger settings not updated'); + req.flash('info', _('Trigger settings not updated')); } return res.redirect('/triggers'); @@ -223,9 +225,9 @@ router.post('/delete', passport.parseForm, passport.csrfProtection, (req, res) = if (err) { req.flash('danger', err && err.message || err); } else if (deleted) { - req.flash('success', 'Trigger deleted'); + req.flash('success', _('Trigger deleted')); } else { - req.flash('info', 'Could not delete specified trigger'); + req.flash('info', _('Could not delete specified trigger')); } return res.redirect('/triggers'); @@ -237,7 +239,7 @@ router.get('/status/:id', passport.csrfProtection, (req, res) => { triggers.get(id, (err, trigger) => { if (err || !trigger) { - req.flash('danger', err && err.message || err || 'Could not find trigger with specified ID'); + req.flash('danger', err && err.message || err || _('Could not find trigger with specified ID')); return res.redirect('/triggers'); } @@ -250,7 +252,7 @@ router.post('/status/ajax/:id', (req, res) => { triggers.get(req.params.id, (err, trigger) => { if (err || !trigger) { return res.json({ - error: err && err.message || err || 'Trigger not found', + error: err && err.message || err || _('Trigger not found'), data: [] }); } @@ -292,7 +294,7 @@ router.post('/status/ajax/:id', (req, res) => { htmlescape(row.firstName || ''), htmlescape(row.lastName || ''), '' + row.created.toISOString() + '', - 'Edit' + '' + _('Edit') + '' ]) }); }); diff --git a/routes/users.js b/routes/users.js index 9ec2aaa1..ce6cfc2b 100644 --- a/routes/users.js +++ b/routes/users.js @@ -6,6 +6,7 @@ let router = new express.Router(); let users = require('../lib/models/users'); let fields = require('../lib/models/fields'); let settings = require('../lib/models/settings'); +let _ = require('../lib/translate')._; router.get('/logout', (req, res) => passport.logout(req, res)); @@ -28,7 +29,7 @@ router.post('/forgot', passport.parseForm, passport.csrfProtection, (req, res) = req.flash('danger', err.message || err); return res.redirect('/users/forgot'); } else { - req.flash('success', 'An email with password reset instructions has been sent to your email address, if it exists on our system.'); + req.flash('success', _('An email with password reset instructions has been sent to your email address, if it exists on our system.')); } return res.redirect('/users/login'); }); @@ -42,7 +43,7 @@ router.get('/reset', passport.csrfProtection, (req, res) => { } if (!status) { - req.flash('danger', 'Unknown or expired reset token'); + req.flash('danger', _('Unknown or expired reset token')); return res.redirect('/users/login'); } @@ -60,9 +61,9 @@ router.post('/reset', passport.parseForm, passport.csrfProtection, (req, res) => req.flash('danger', err.message || err); return res.redirect('/users/reset?username=' + encodeURIComponent(req.body.username) + '&token=' + encodeURIComponent(req.body['reset-token'])); } else if (!status) { - req.flash('danger', 'Unknown or expired reset token'); + req.flash('danger', _('Unknown or expired reset token')); } else { - req.flash('success', 'Your password has been changed successfully'); + req.flash('success', _('Your password has been changed successfully')); } return res.redirect('/users/login'); @@ -71,7 +72,7 @@ router.post('/reset', passport.parseForm, passport.csrfProtection, (req, res) => router.all('/api', (req, res, next) => { if (!req.user) { - req.flash('danger', 'Need to be logged in to access restricted content'); + req.flash('danger', _('Need to be logged in to access restricted content')); return res.redirect('/users/login?next=' + encodeURIComponent(req.originalUrl)); } next(); @@ -83,7 +84,7 @@ router.get('/api', passport.csrfProtection, (req, res, next) => { return next(err); } if (!user) { - return next(new Error('User data not found')); + return next(new Error(_('User data not found'))); } settings.list(['serviceUrl'], (err, configItems) => { if (err) { @@ -106,9 +107,9 @@ router.post('/api/reset-token', passport.parseForm, passport.csrfProtection, (re if (err) { req.flash('danger', err.message || err); } else if (success) { - req.flash('success', 'Access token updated'); + req.flash('success', _('Access token updated')); } else { - req.flash('info', 'Access token not updated'); + req.flash('info', _('Access token not updated')); } return res.redirect('/users/api'); }); @@ -116,7 +117,7 @@ router.post('/api/reset-token', passport.parseForm, passport.csrfProtection, (re router.all('/account', (req, res, next) => { if (!req.user) { - req.flash('danger', 'Need to be logged in to access restricted content'); + req.flash('danger', _('Need to be logged in to access restricted content')); return res.redirect('/users/login?next=' + encodeURIComponent(req.originalUrl)); } next(); @@ -135,9 +136,9 @@ router.post('/account', passport.parseForm, passport.csrfProtection, (req, res) if (err) { req.flash('danger', err.message || err); } else if (success) { - req.flash('success', 'Account information updated'); + req.flash('success', _('Account information updated')); } else { - req.flash('info', 'Account information not updated'); + req.flash('info', _('Account information not updated')); } return res.redirect('/users/account'); }); diff --git a/services/feedcheck.js b/services/feedcheck.js index 9222efb4..3c506154 100644 --- a/services/feedcheck.js +++ b/services/feedcheck.js @@ -6,6 +6,8 @@ let db = require('../lib/db'); let tools = require('../lib/tools'); let feed = require('../lib/feed'); let campaigns = require('../lib/models/campaigns'); +let _ = require('../lib/translate')._; +let util = require('util'); const feed_timeout = 15 * 1000; const rss_timeout = 1 * 1000; @@ -46,12 +48,12 @@ function feedLoop() { let message; if (err) { log.error('Feed', err); - message = 'Feed error: ' + err.message; + message = util.format(_('Feed error: %s'), err.message); } else if (result) { log.verbose('Feed', 'Added %s new campaigns for %s', result, parent.id); - message = 'Found ' + result + ' new campaign messages from feed'; + message = util.format(_('Found %s new campaign messages from feed'), result); } else { - message = 'Found nothing new from the feed'; + message = _('Found nothing new from the feed'); } return updateRssInfo(parent.id, false, message, () => { setTimeout(feedLoop, rss_timeout); @@ -138,7 +140,7 @@ function checkEntries(parent, entries, callback) { let campaign = { type: 'entry', - name: entry.title || 'RSS entry ' + (entry.guid.substr(0, 67)), + name: entry.title || util.format(_('RSS entry %s'), entry.guid.substr(0, 67)), from: parent.from, address: parent.address, subject: entry.title || parent.subject, diff --git a/services/importer.js b/services/importer.js index 00e56d89..ee2ef5ed 100644 --- a/services/importer.js +++ b/services/importer.js @@ -4,6 +4,7 @@ let log = require('npmlog'); let db = require('../lib/db'); let tools = require('../lib/tools'); +let _ = require('../lib/translate')._; let fields = require('../lib/models/fields'); let subscriptions = require('../lib/models/subscriptions'); @@ -239,7 +240,7 @@ let importLoop = () => { let failed = null; if (err) { if (err.code === 'ENOENT') { - failed = 'Could not access import file'; + failed = _('Could not access import file'); } else { failed = err.message || err; } diff --git a/services/sender.js b/services/sender.js index a48338c3..2429aaa4 100644 --- a/services/sender.js +++ b/services/sender.js @@ -16,6 +16,8 @@ let url = require('url'); let htmlToText = require('html-to-text'); let request = require('request'); let libmime = require('libmime'); +let _ = require('../lib/translate')._; +let util = require('util'); let attachmentCache = new Map(); let attachmentCacheSize = 0; @@ -299,14 +301,14 @@ function formatMessage(message, callback) { return callback(err); } if (!campaign) { - return callback(new Error('Campaign not found')); + return callback(new Error(_('Campaign not found'))); } lists.get(message.listId, (err, list) => { if (err) { return callback(err); } if (!list) { - return callback(new Error('List not found')); + return callback(new Error(_('List not found'))); } settings.list(['serviceUrl', 'verpUse', 'verpHostname'], (err, configItems) => { @@ -442,7 +444,7 @@ function formatMessage(message, callback) { return callback(err); } if (httpResponse.statusCode !== 200) { - return callback(new Error('Received status code ' + httpResponse.statusCode + ' from ' + campaign.sourceUrl)); + return callback(new Error(util.format(_('Received status code %s from %s'), httpResponse.statusCode, campaign.sourceUrl))); } renderAndSend(body && body.toString(), '', false); }); diff --git a/services/triggers.js b/services/triggers.js index 511ea8fa..d223c573 100644 --- a/services/triggers.js +++ b/services/triggers.js @@ -4,6 +4,8 @@ let log = require('npmlog'); let db = require('../lib/db'); let tools = require('../lib/tools'); let triggers = require('../lib/models/triggers'); +let _ = require('../lib/translate')._; +let util = require('util'); function triggerLoop() { checkTrigger((err, triggerId) => { @@ -46,7 +48,7 @@ function checkTrigger(callback) { return callback(err); } if (!query) { - return callback(new Error('Unknown trigger type ' + trigger.id)); + return callback(new Error(util.format(_('Unknown trigger type %s'), trigger.id))); } trigger.query = query; fireTrigger(trigger, callback); diff --git a/views/archive/layout.hbs b/views/archive/layout.hbs index bc9e27a9..88cafbf4 100644 --- a/views/archive/layout.hbs +++ b/views/archive/layout.hbs @@ -6,7 +6,7 @@ - + diff --git a/views/campaigns/bounced.hbs b/views/campaigns/bounced.hbs index c35cc3a0..1844d0cd 100644 --- a/views/campaigns/bounced.hbs +++ b/views/campaigns/bounced.hbs @@ -1,14 +1,14 @@ -

{{name}} Bounced info View campaign

+

{{name}} {{#translate}}Bounced info{{/translate}} {{#translate}}View campaign{{/translate}}


@@ -20,7 +20,7 @@
-
Subscribers who bounced and were unsubscribed:
+
{{#translate}}Subscribers who bounced and were unsubscribed:{{/translate}}
@@ -95,6 +95,9 @@ Status + Created +
@@ -30,19 +30,19 @@ # diff --git a/views/campaigns/campaigns.hbs b/views/campaigns/campaigns.hbs index 1828e4e1..9ac302ea 100644 --- a/views/campaigns/campaigns.hbs +++ b/views/campaigns/campaigns.hbs @@ -1,22 +1,22 @@ -

Campaigns

+

{{#translate}}Campaigns{{/translate}}


@@ -27,16 +27,16 @@ # "}return i+="
- Address + {{#translate}}Address{{/translate}} - First Name + {{#translate}}First Name{{/translate}} - Last Name + {{#translate}}Last Name{{/translate}} - SMTP response + {{#translate}}SMTP response{{/translate}} - Bounced + {{#translate}}Bounce time{{/translate}}
- Name + {{#translate}}Name{{/translate}} - Description + {{#translate}}Description{{/translate}} - Status + {{#translate}}Status{{/translate}} - Created + {{#translate}}Created{{/translate}}   diff --git a/views/campaigns/clicked.hbs b/views/campaigns/clicked.hbs index bb20f755..9f71d470 100644 --- a/views/campaigns/clicked.hbs +++ b/views/campaigns/clicked.hbs @@ -1,14 +1,14 @@ -

{{name}} Link info View campaign

+

{{name}} {{#translate}}Link info{{/translate}} {{#translate}}View campaign{{/translate}}


@@ -20,23 +20,23 @@ {{#if aggregated}} r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"
- URL + {{#translate}}URL{{/translate}} - Clicks + {{#translate}}Clicks{{/translate}} - % of clicks + {{#translate}}% of clicks{{/translate}} - % of messages + {{#translate}}% of messages{{/translate}}
- Aggregated clicks + {{#translate}}Aggregated clicks{{/translate}} {{clicks}} @@ -67,7 +67,7 @@
-
{{#if aggregated}}Subscribers who clicked on a link:{{else}}Subscribers who clicked on this link:{{/if}}
+
{{#if aggregated}}{{#translate}}Subscribers who clicked on a link:{{/translate}}{{else}}{{#translate}}Subscribers who clicked on this link:{{/translate}}{{/if}}
@@ -77,19 +77,19 @@ # diff --git a/views/campaigns/complained.hbs b/views/campaigns/complained.hbs index 77f1b41a..cce19b37 100644 --- a/views/campaigns/complained.hbs +++ b/views/campaigns/complained.hbs @@ -1,14 +1,14 @@ -

{{name}} Complained info View campaign

+

{{name}} {{#translate}}Complained info{{/translate}} {{#translate}}View campaign{{/translate}}


@@ -20,7 +20,7 @@
-
Subscribers who complained and were unsubscribed:
+
{{#translate}}Subscribers who complained and were unsubscribed:{{/translate}}
- Address + {{#translate}}Address{{/translate}} - First Name + {{#translate}}First Name{{/translate}} - Last Name + {{#translate}}Last Name{{/translate}} - First click + {{#translate}}First click time{{/translate}} - Click count + {{#translate}}Click count{{/translate}}
@@ -30,19 +30,19 @@ # diff --git a/views/campaigns/create-rss.hbs b/views/campaigns/create-rss.hbs index 1dbb715d..131a4a5d 100644 --- a/views/campaigns/create-rss.hbs +++ b/views/campaigns/create-rss.hbs @@ -1,16 +1,16 @@ -

Create RSS Campaign

+

{{#translate}}Create RSS Campaign{{/translate}}


- RSS campaign sets up a tracker against selected RSS feed address. Whenever a new entry is found from this feed it is sent to selected list as an email message. + {{#translate}}RSS campaign sets up a tracker against selected RSS feed address. Whenever a new entry is found from this feed it is sent to selected list as an email message.{{/translate}}
@@ -19,28 +19,28 @@
- +
- +
- +
- HTML is allowed + {{#translate}}HTML is allowed{{/translate}}
- +
- New entries from this RSS URL are sent out to list subscribers as email messages + {{#translate}}New entries from this RSS URL are sent out to list subscribers as email messages{{/translate}}

- +
- +
- +
- +
@@ -93,7 +93,7 @@
- +
diff --git a/views/campaigns/create-triggered.hbs b/views/campaigns/create-triggered.hbs index e982d875..ab4a7088 100644 --- a/views/campaigns/create-triggered.hbs +++ b/views/campaigns/create-triggered.hbs @@ -1,10 +1,10 @@ -

Create Triggered Campaign

+

{{#translate}}Create Triggered Campaign{{/translate}}


@@ -13,28 +13,28 @@
- +
- +
- +
- HTML is allowed + {{#translate}}HTML is allowed{{/translate}}
- +
- + {{#each templateItems}} {{/each}} - Selecting a template creates a campaign specific copy from it + {{#translate}}Selecting a template creates a campaign specific copy from it{{/translate}}

- Or alternatively use an URL as the message content source: + {{#translate}}Or alternatively use an URL as the message content source:{{/translate}}

- If a message is sent then this URL will be POSTed to using Merge Tags as POST body. Use this if you want to generate the HTML message yourself + {{#translate}}If a message is sent then this URL will be POSTed to using Merge Tags as POST body. Use this if you want to generate the HTML message yourself{{/translate}}
@@ -83,28 +83,28 @@
- +
- +
- +
- +
- +
- +
@@ -113,7 +113,7 @@
- +
diff --git a/views/campaigns/create.hbs b/views/campaigns/create.hbs index e2853260..b5869898 100644 --- a/views/campaigns/create.hbs +++ b/views/campaigns/create.hbs @@ -1,10 +1,10 @@ -

Create Campaign

+

{{#translate}}Create Campaign{{/translate}}


@@ -13,28 +13,28 @@
- +
- +
- +
- HTML is allowed + {{#translate}}HTML is allowed{{/translate}}
- +
- + {{#each templateItems}} {{/each}} - Selecting a template creates a campaign specific copy from it + {{#translate}}Selecting a template creates a campaign specific copy from it{{/translate}}

- Or alternatively use an URL as the message content source: + {{#translate}}Or alternatively use an URL as the message content source:{{/translate}}

- If a message is sent then this URL will be POSTed to using Merge Tags as POST body. Use this if you want to generate the HTML message yourself + {{#translate}}If a message is sent then this URL will be POSTed to using Merge Tags as POST body. Use this if you want to generate the HTML message yourself{{/translate}}
@@ -83,34 +83,34 @@
- +
- +
- +
- +
- +
- +
- +
- +
@@ -119,7 +119,7 @@
- +
diff --git a/views/campaigns/delivered.hbs b/views/campaigns/delivered.hbs index 89bc8194..7d933d2c 100644 --- a/views/campaigns/delivered.hbs +++ b/views/campaigns/delivered.hbs @@ -1,14 +1,14 @@ -

{{name}} Delivered info View campaign

+

{{name}} {{#translate}}Delivered info{{/translate}} {{#translate}}View campaign{{/translate}}


@@ -20,7 +20,7 @@
-
Subscribers who received the message and did not bounce/unsubscribe:
+
{{#translate}}Subscribers who received the message and did not bounce/unsubscribe:{{/translate}}
- Address + {{#translate}}Address{{/translate}} - First Name + {{#translate}}First Name{{/translate}} - Last Name + {{#translate}}Last Name{{/translate}} - SMTP response + {{#translate}}SMTP response{{/translate}} - Complained + {{#translate}}Complain time{{/translate}}
@@ -30,19 +30,19 @@ # diff --git a/views/campaigns/edit-rss.hbs b/views/campaigns/edit-rss.hbs index c8efcc2b..03c96d4e 100644 --- a/views/campaigns/edit-rss.hbs +++ b/views/campaigns/edit-rss.hbs @@ -1,20 +1,20 @@ -

Edit RSS Campaign View campaign

+

{{#translate}}Edit RSS Campaign{{/translate}} {{#translate}}View campaign{{/translate}}


- RSS campaign sets up a tracker against selected RSS feed address. Whenever a new entry is found from this feed it is sent to selected list as an email message. + {{#translate}}RSS campaign sets up a tracker against selected RSS feed address. Whenever a new entry is found from this feed it is sent to selected list as an email message.{{/translate}}
@@ -29,32 +29,32 @@
- General Settings + {{#translate}}General Settings{{/translate}}
- +
- +
- +
- HTML is allowed + {{#translate}}HTML is allowed{{/translate}}
- +
- New entries from this RSS URL are sent out to list subscribers as email messages + {{#translate}}New entries from this RSS URL are sent out to list subscribers as email messages{{/translate}}
@@ -89,29 +89,29 @@
- Use special merge tag [RSS_ENTRY] to mark the position for the RSS post content. Additionally you can use any valid merge tag as well. + {{#translate}}Use special merge tag [RSS_ENTRY] to mark the position for the RSS post content. Additionally you can use any valid merge tag as well.{{/translate}}

- +
- +
- +
- +
@@ -123,9 +123,9 @@
- +
- +
diff --git a/views/campaigns/edit-triggered.hbs b/views/campaigns/edit-triggered.hbs index 3cdeec96..d709c177 100644 --- a/views/campaigns/edit-triggered.hbs +++ b/views/campaigns/edit-triggered.hbs @@ -1,14 +1,14 @@ -

Edit Triggered Campaign View campaign

+

{{#translate}}Edit Triggered Campaign{{/translate}} {{#translate}}View campaign{{/translate}}


@@ -26,8 +26,8 @@
@@ -37,32 +37,32 @@
- General Settings + {{#translate}}General Settings{{/translate}}
- +
- +
- +
- HTML is allowed + {{#translate}}HTML is allowed{{/translate}}
- +
+
- +
- +
- +
- +
@@ -116,15 +116,15 @@
- Template Settings + {{#translate}}Template Settings{{/translate}} {{#if sourceUrl}}
- +
- If a message is sent then this URL will be POSTed to using Merge Tags as POST body. Use this if you want to generate the HTML message yourself + {{#translate}}If a message is sent then this URL will be POSTed to using Merge Tags as POST body. Use this if you want to generate the HTML message yourself{{/translate}}
{{else}} @@ -150,9 +150,9 @@
- +
- +
diff --git a/views/campaigns/edit.hbs b/views/campaigns/edit.hbs index 3b747608..53dac119 100644 --- a/views/campaigns/edit.hbs +++ b/views/campaigns/edit.hbs @@ -1,14 +1,14 @@ -

Edit Campaign View campaign

+

{{#translate}}Edit Campaign{{/translate}} {{#translate}}View campaign{{/translate}}


@@ -37,9 +37,9 @@
@@ -49,32 +49,32 @@
- General Settings + {{#translate}}General Settings{{/translate}}
- +
- +
- +
- HTML is allowed + {{#translate}}HTML is allowed{{/translate}}
- +
+
- +
- +
- +
- +
- +
- +
@@ -132,15 +132,15 @@
- Template Settings + {{#translate}}Template Settings{{/translate}} {{#if sourceUrl}}
- +
- If a message is sent then this URL will be POSTed to using Merge Tags as POST body. Use this if you want to generate the HTML message yourself + {{#translate}}If a message is sent then this URL will be POSTed to using Merge Tags as POST body. Use this if you want to generate the HTML message yourself{{/translate}}
{{else}} @@ -166,7 +166,7 @@
- Attachments + {{#translate}}Attachments{{/translate}}
@@ -176,10 +176,10 @@ #
{{/if}} @@ -214,7 +214,7 @@
- Address + {{#translate}}Address{{/translate}} - First Name + {{#translate}}First Name{{/translate}} - Last Name + {{#translate}}Last Name{{/translate}} - SMTP response + {{#translate}}SMTP response{{/translate}} - Delivered + {{#translate}}Delivery time{{/translate}}
- File + {{#translate}}File{{/translate}} - Size + {{#translate}}Size{{/translate}}   @@ -206,7 +206,7 @@ {{else}}
- No data available in table + {{#translate}}No data available in table{{/translate}}
@@ -226,9 +226,9 @@
- +
- +
diff --git a/views/campaigns/opened.hbs b/views/campaigns/opened.hbs index 9e59be96..20665d53 100644 --- a/views/campaigns/opened.hbs +++ b/views/campaigns/opened.hbs @@ -1,14 +1,14 @@ -

{{name}} Opened info View campaign

+

{{name}} {{#translate}}Opened info{{/translate}} {{#translate}}View campaign{{/translate}}


@@ -20,7 +20,7 @@
-
Subscribers who opened this message:
+
{{#translate}}Subscribers who opened this message:{{/translate}}
@@ -30,19 +30,19 @@ # diff --git a/views/campaigns/unsubscribed.hbs b/views/campaigns/unsubscribed.hbs index c6440dfa..3b5aa226 100644 --- a/views/campaigns/unsubscribed.hbs +++ b/views/campaigns/unsubscribed.hbs @@ -1,14 +1,14 @@ -

{{name}} Unsubscribed info View campaign

+

{{name}} {{#translate}}Unsubscribed info{{/translate}} {{#translate}}View campaign{{/translate}}


@@ -20,7 +20,7 @@
-
Subscribers who unsubscribed:
+
{{#translate}}Subscribers who unsubscribed:{{/translate}}
- Address + {{#translate}}Address{{/translate}} - First Name + {{#translate}}First Name{{/translate}} - Last Name + {{#translate}}Last Name{{/translate}} - First open + {{#translate}}First open{{/translate}} - Opened count + {{#translate}}Opened count{{/translate}}
@@ -30,19 +30,19 @@ # diff --git a/views/campaigns/upload-attachment.hbs b/views/campaigns/upload-attachment.hbs index b535e3c1..d15066f6 100644 --- a/views/campaigns/upload-attachment.hbs +++ b/views/campaigns/upload-attachment.hbs @@ -1,15 +1,15 @@ -

Edit Campaign View campaign

+

{{#translate}}Edit Campaign{{/translate}} {{#translate}}View campaign{{/translate}}


@@ -25,7 +25,7 @@
- +
diff --git a/views/campaigns/view.hbs b/views/campaigns/view.hbs index bd4a7bd6..fe52ce39 100644 --- a/views/campaigns/view.hbs +++ b/views/campaigns/view.hbs @@ -1,6 +1,6 @@

{{name}}

@@ -21,9 +21,9 @@ @@ -34,7 +34,7 @@
{{#if list}} -
List
+
{{#translate}}List{{/translate}}
{{#if segment}} {{list.name}}: {{segment.name}} @@ -54,43 +54,43 @@ {{/if}} {{#if isRss}} -
Feed URL
+
{{#translate}}Feed URL{{/translate}}
{{sourceUrl}}
-
Last check
+
{{#translate}}Last check{{/translate}}
{{#if lastCheck}}{{lastCheck}}{{else}} - Not yet checked{{/if}} - {{#unless isActive}}(activate campaign to start checking feed for new messages){{/unless}} + {{#translate}}Not yet checked{{/translate}}{{/if}} + {{#unless isActive}}({{#translate}}activate campaign to start checking feed for new messages{{/translate}}){{/unless}}
{{#if checkStatus}} -
RSS status
+
{{#translate}}RSS status{{/translate}}
{{checkStatus}}
{{/if}} {{/if}} {{#if from}} -
Email "from name"
+
{{#translate}}Email "from name"{{/translate}}
{{from}}
{{/if}} {{#if address}} -
Email "from" address
+
{{#translate}}Email "from" address{{/translate}}
{{address}}
{{/if}} {{#if replyTo}} -
Email "reply-to" address
+
{{#translate}}Email "reply-to" address{{/translate}}
{{replyTo}}
{{/if}} {{#if subject}} -
Email "subject line"
+
{{#translate}}Email "subject line"{{/translate}}
{{subject}}
{{/if}} {{#unless isRss}} -
Preview campaign as
+
{{#translate}}Preview campaign as{{/translate}}
@@ -104,26 +104,26 @@ {{/each}} {{#if testUsers}} - + {{else}} - + {{/if}} - +
{{#unless isIdling}} -
Delivered
+
{{#translate}}Delivered{{/translate}}
{{delivered}}

-
Bounced
+
{{#translate}}Bounced{{/translate}}
@@ -132,7 +132,7 @@
-
Complaints
+
{{#translate}}Complaints{{/translate}}
@@ -141,7 +141,7 @@
-
Unsubscribed
+
{{#translate}}Unsubscribed{{/translate}}
@@ -152,7 +152,7 @@ {{#unless trackingDisabled}} -
Opened
+
{{#translate}}Opened{{/translate}}
@@ -161,7 +161,7 @@
-
Clicked
+
{{#translate}}Clicked{{/translate}}
@@ -180,34 +180,34 @@
{{#if isIdling}} -
+
-

Delay sending

+

{{#translate}}Delay sending{{/translate}}

-
hours
+
{{#translate}}hours{{/translate}}
-
minutes
+
{{#translate}}minutes{{/translate}}
- + {{/if}} {{/if}} @@ -216,45 +216,45 @@
{{#if isScheduled}}
-
+ -
-

Sending scheduled {{scheduled}}

+

{{#translate}}Sending scheduled{{/translate}} {{scheduled}}

{{else}}
-
-

Sending…

+

{{#translate}}Sending{{/translate}}…

{{/if}} {{/if}} {{#if isPaused}}
-
+ -
+ - -

Sending paused

@@ -262,24 +262,24 @@ {{#if isFinished}}
-
+ -
+ - -
-

All messages sent! Hit "Continue" if you you want to send this campaign to new subscribers

+

{{#translate}}All messages sent! Hit "Continue" if you you want to send this campaign to new subscribers{{/translate}}

{{/if}}
@@ -292,28 +292,28 @@
{{#if isActive}}
-
+ -
- Campaign status: ACTIVE + {{#translate}}Campaign status:{{/translate}} {{#translate}}ACTIVE{{/translate}} {{else}}
-
+ -
- Campaign status: INACTIVE + {{#translate}}Campaign status:{{/translate}} {{#translate}}INACTIVE{{/translate}} {{/if}}
@@ -322,7 +322,7 @@ {{#if isTriggered}}
- This is a triggered campaign. Messages are only sent to subscribers that hit some trigger that invokes this campaign + {{#translate}}This is a triggered campaign. Messages are only sent to subscribers that hit some trigger that invokes this campaign{{/translate}} ({{#translate}}see more{{/translate}})
{{/if}} @@ -341,16 +341,16 @@ #
@@ -365,7 +365,7 @@ @@ -380,7 +380,7 @@ {{else}} {{/if}} @@ -389,11 +389,11 @@ @@ -408,7 +408,7 @@
- Address + {{#translate}}Address{{/translate}} - First Name + {{#translate}}First Name{{/translate}} - Last Name + {{#translate}}Last Name{{/translate}} - SMTP response + {{#translate}}SMTP response{{/translate}} - Unsubscribed + {{#translate}}Unsubscribed{{/translate}}
- URL + {{#translate}}URL{{/translate}} - Clicks + {{#translate}}Clicks{{/translate}} - % of clicks + {{#translate}}% of clicks{{/translate}} - % of messages + {{#translate}}% of messages{{/translate}}
- +
{{clicks}}
- No data available in table + {{#translate}}No data available in table{{/translate}}
- Aggregated clicks + {{#translate}}Aggregated clicks{{/translate}}
- +
{{clicks}}

- Clicks are counted as unique subscribers that clicked on a specific link or on any link (in aggregated view) + {{#translate}}Clicks are counted as unique subscribers that clicked on a specific link or on any link (in aggregated view){{/translate}}

@@ -421,7 +421,7 @@ {{#if isRss}}
- If a new entry is found from campaign feed a new subcampaign is created of that entry and it will be listed here + {{#translate}}If a new entry is found from campaign feed a new subcampaign is created of that entry and it will be listed here{{/translate}}
@@ -429,16 +429,16 @@ # @@ -77,7 +77,7 @@ {{/each}} @@ -86,7 +86,7 @@ {{#unless rows}} {{/unless}} diff --git a/views/lists/lists.hbs b/views/lists/lists.hbs index 52000689..94b1e897 100644 --- a/views/lists/lists.hbs +++ b/views/lists/lists.hbs @@ -1,13 +1,13 @@ -

Lists

+

{{#translate}}Lists{{/translate}}


@@ -18,16 +18,16 @@ # diff --git a/views/lists/segments/create.hbs b/views/lists/segments/create.hbs index aa49d171..764f96c5 100644 --- a/views/lists/segments/create.hbs +++ b/views/lists/segments/create.hbs @@ -1,38 +1,38 @@ -

{{list.name}} Create Segment

+

{{list.name}} {{#translate}}Create Segment{{/translate}}


- +
- +
- +
- +
diff --git a/views/lists/segments/edit.hbs b/views/lists/segments/edit.hbs index aec7c55f..a7572002 100644 --- a/views/lists/segments/edit.hbs +++ b/views/lists/segments/edit.hbs @@ -1,12 +1,12 @@ -

{{list.name}} Edit Segment Back to segments

+

{{list.name}} {{#translate}}Edit Segment{{/translate}} {{#translate}}Back to segments{{/translate}}


@@ -20,19 +20,19 @@
- +
- +
- +
@@ -40,9 +40,9 @@
- +
- +
diff --git a/views/lists/segments/rule-configure.hbs b/views/lists/segments/rule-configure.hbs index d0659bbe..0d37b1c0 100644 --- a/views/lists/segments/rule-configure.hbs +++ b/views/lists/segments/rule-configure.hbs @@ -1,13 +1,13 @@ -

{{list.name}} Create Rule

+

{{list.name}} {{#translate}}Create Rule{{/translate}}


@@ -16,7 +16,7 @@
- +

{{column.name}}

@@ -24,20 +24,20 @@ {{#if columnTypeString}}
- +
- - Use % for wildcard character, e.g. "%test" to match all values that end with "test" + + {{#translate}}Use % for wildcard character, e.g. "%test" to match all values that end with "test"{{/translate}}
{{/if}} {{#if columnTypeNumber}}
- +
@@ -50,7 +50,7 @@
@@ -78,10 +78,10 @@ {{#if columnTypeDate}}
- +
@@ -96,7 +96,7 @@
@@ -127,7 +127,7 @@
@@ -136,38 +136,38 @@
-

From

+

{{#translate}}From{{/translate}}

- days + {{#translate}}days{{/translate}}
-

to

+

{{#translate}}to{{/translate}}

- days + {{#translate}}days{{/translate}}
@@ -180,10 +180,10 @@ {{#if columnTypeBirthday}}
- +
@@ -198,7 +198,7 @@
@@ -207,7 +207,7 @@
-

From

+

{{#translate}}From{{/translate}}

@@ -215,7 +215,7 @@
-

to

+

{{#translate}}to{{/translate}}

@@ -229,16 +229,16 @@ {{#if columnTypeBoolean}}
- +
@@ -248,7 +248,7 @@
- +
diff --git a/views/lists/segments/rule-create.hbs b/views/lists/segments/rule-create.hbs index 31f9f5f1..6d08cc1e 100644 --- a/views/lists/segments/rule-create.hbs +++ b/views/lists/segments/rule-create.hbs @@ -1,13 +1,13 @@ -

{{list.name}} Create Rule

+

{{list.name}} {{#translate}}Create Rule{{/translate}}


@@ -15,10 +15,10 @@
- +
- +

{{column.name}}

@@ -29,20 +29,20 @@ {{#if columnTypeString}}
- +
- - Use % for wildcard character, e.g. "%test" to match all values that end with "test" + + {{#translate}}Use % for wildcard character, e.g. "%test" to match all values that end with "test"{{/translate}}
{{/if}} {{#if columnTypeNumber}}
- +
@@ -55,7 +55,7 @@
@@ -64,13 +64,13 @@
-

From

+

{{#translate}}From{{/translate}}

-

to

+

{{#translate}}to{{/translate}}

@@ -83,10 +83,10 @@ {{#if columnTypeDate}}
- +
@@ -101,7 +101,7 @@
@@ -110,7 +110,7 @@
-

From

+

{{#translate}}From{{/translate}}

@@ -118,7 +118,7 @@
-

to

+

{{#translate}}to{{/translate}}

@@ -132,7 +132,7 @@
@@ -141,38 +141,38 @@
-

From

+

{{#translate}}From{{/translate}}

- days + {{#translate}}days{{/translate}}
-

to

+

{{#translate}}to{{/translate}}

- days + {{#translate}}days{{/translate}}
@@ -185,10 +185,10 @@ {{#if columnTypeBirthday}}
- +
@@ -203,7 +203,7 @@
@@ -212,7 +212,7 @@
-

From

+

{{#translate}}From{{/translate}}

@@ -220,7 +220,7 @@
-

To

+

{{#translate}}to{{/translate}}

@@ -234,16 +234,16 @@ {{#if columnTypeBoolean}}
- +
@@ -254,9 +254,9 @@
- +
- +
diff --git a/views/lists/segments/segments.hbs b/views/lists/segments/segments.hbs index 14c9f31d..d32582a9 100644 --- a/views/lists/segments/segments.hbs +++ b/views/lists/segments/segments.hbs @@ -1,15 +1,15 @@ -

{{list.name}} Segments

+

{{list.name}} {{#translate}}Segments{{/translate}}


@@ -20,10 +20,10 @@ #
diff --git a/views/lists/segments/view.hbs b/views/lists/segments/view.hbs index cb7b10b1..d456f945 100644 --- a/views/lists/segments/view.hbs +++ b/views/lists/segments/view.hbs @@ -1,26 +1,26 @@ -

{{list.name}} Segment {{name}}

+

{{list.name}} {{#translate}}Segment{{/translate}} {{name}}


- Match rules: {{type}} -
Matching subscribers: {{subscribers}} ( - show) + {{#translate}}Match rules{{/translate}}: {{type}} +
{{#translate}}Matching subscribers{{/translate}}: {{subscribers}} ( + {{#translate}}show{{/translate}})
@@ -32,10 +32,10 @@ # diff --git a/views/lists/subscription/add.hbs b/views/lists/subscription/add.hbs index 59acd202..82a72157 100644 --- a/views/lists/subscription/add.hbs +++ b/views/lists/subscription/add.hbs @@ -1,11 +1,13 @@ -

{{list.name}} Add subscriber

+

{{list.name}} {{#translate}}Add subscriber{{/translate}}


@@ -14,21 +16,21 @@
- +
- +
- +
@@ -59,8 +61,8 @@ {{/if}} {{#if typeGpg}} - - Insert a GPG public key that will be used to encrypt messages sent this subscriber + + {{#translate}}Insert a GPG public key that will be used to encrypt messages sent this subscriber{{/translate}} {{/if}} {{#if typeDateUs}} @@ -90,7 +92,7 @@ {{#if typeDropdown}} {{#each timezones}} @@ -139,8 +141,8 @@
@@ -151,10 +153,10 @@

- This person will not receive a confirmation email so make sure that you have permission to email them. + {{#translate}}This person will not receive a confirmation email so make sure that you have permission to email them.{{/translate}}

- +
diff --git a/views/lists/subscription/edit.hbs b/views/lists/subscription/edit.hbs index 9821089e..72227d5c 100644 --- a/views/lists/subscription/edit.hbs +++ b/views/lists/subscription/edit.hbs @@ -1,11 +1,13 @@ -

{{list.name}} Edit subscriber Back to list

+

{{list.name}} {{#translate}}Edit subscriber{{/translate}} {{#translate}}Back to list{{/translate}}


@@ -27,21 +29,21 @@
- +
- +
- +
@@ -72,8 +74,8 @@ {{/if}} {{#if typeGpg}} - - Insert a GPG public key that will be used to encrypt messages sent this subscriber + + {{#translate}}Insert a GPG public key that will be used to encrypt messages sent this subscriber{{/translate}} {{/if}} {{#if typeDateUs}} @@ -103,7 +105,7 @@ {{#if typeDropdown}}
diff --git a/views/lists/subscription/import-failed.hbs b/views/lists/subscription/import-failed.hbs index 54157cf8..36ecdc6c 100644 --- a/views/lists/subscription/import-failed.hbs +++ b/views/lists/subscription/import-failed.hbs @@ -1,16 +1,16 @@ -

{{list.name}} Failed addresses Back to list

+

{{list.name}} {{#translate}}Failed addresses{{/translate}} {{#translate}}Back to list{{/translate}}


- Role-based addresses like postmaster@example.com are blocked when importing. Subscribers with role-based email addresses can join your list using the subscription form. + {{#translate}}Role-based addresses like postmaster@example.com are blocked when importing. Subscribers with role-based email addresses can join your list using the subscription form{{#translate}} ({{#translate}}see here{{/translate}}).
@@ -20,10 +20,10 @@ #
{{#if rows}} diff --git a/views/lists/subscription/import-preview.hbs b/views/lists/subscription/import-preview.hbs index 2ffb33f0..97e19145 100644 --- a/views/lists/subscription/import-preview.hbs +++ b/views/lists/subscription/import-preview.hbs @@ -1,11 +1,11 @@ -

{{list.name}} Import subscribers

+

{{list.name}} {{#translate}}Import subscribers{{/translate}}


@@ -20,11 +20,11 @@
- Example: "{{lookup ../mapping.example @index}}" + {{#translate}}Example{{/translate}}: "{{lookup ../mapping.example @index}}"
@@ -49,7 +49,7 @@
- +
diff --git a/views/lists/subscription/import.hbs b/views/lists/subscription/import.hbs index dc073347..b2bfe460 100644 --- a/views/lists/subscription/import.hbs +++ b/views/lists/subscription/import.hbs @@ -1,11 +1,11 @@ -

{{list.name}} Import subscribers

+

{{list.name}} {{#translate}}Import subscribers{{/translate}}


@@ -14,30 +14,30 @@
- +
- +
- +
@@ -47,7 +47,7 @@
- +
diff --git a/views/lists/view.hbs b/views/lists/view.hbs index 10daf756..40f39a9d 100644 --- a/views/lists/view.hbs +++ b/views/lists/view.hbs @@ -1,25 +1,25 @@ @@ -35,35 +35,35 @@
{{#if useSegment}} {{/if}}
- +
- +
@@ -79,13 +79,13 @@ #
{{#each customFields}} {{/each}} @@ -117,25 +117,25 @@ # @@ -193,7 +193,7 @@ {{else}} {{/if}} diff --git a/views/partials/codeeditor.hbs b/views/partials/codeeditor.hbs index 68bd951e..046a382e 100644 --- a/views/partials/codeeditor.hbs +++ b/views/partials/codeeditor.hbs @@ -1,5 +1,5 @@
- +
{{html}}
diff --git a/views/partials/html-preview.hbs b/views/partials/html-preview.hbs index 938f2be4..e9c825fe 100644 --- a/views/partials/html-preview.hbs +++ b/views/partials/html-preview.hbs @@ -1,6 +1,6 @@
- +
320x480px
mosaico
Oppps... !!
'),templateSystem.addTemplate("toolbox",'
Block __name__
Add
By clicking on message parts you will select a block and content options, if any, will show here
By clicking on message parts you will select a block and style options, if available, will show here
X
Gallery:
Click or drag files here
No images uploaded, yet
# recent gallery #
# load gally #
Loading gallery...
The gallery is empty
# remote gallery #
X
Content:
  BlockDefs:  
    Output  Export  Import  
X
')}); + +},{"../src/js/bindings/choose-template.js":30}],21:[function(require,module,exports){ +// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 +// +// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! +// +// Originally from narwhal.js (http://narwhaljs.org) +// Copyright (c) 2009 Thomas Robinson <280north.com> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the 'Software'), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// when used in node, this will actually load the util module we depend on +// versus loading the builtin util module as happens otherwise +// this is a bug in node module loading as far as I am concerned +var util = require('util/'); + +var pSlice = Array.prototype.slice; +var hasOwn = Object.prototype.hasOwnProperty; + +// 1. The assert module provides functions that throw +// AssertionError's when particular conditions are not met. The +// assert module must conform to the following interface. + +var assert = module.exports = ok; + +// 2. The AssertionError is defined in assert. +// new assert.AssertionError({ message: message, +// actual: actual, +// expected: expected }) + +assert.AssertionError = function AssertionError(options) { + this.name = 'AssertionError'; + this.actual = options.actual; + this.expected = options.expected; + this.operator = options.operator; + if (options.message) { + this.message = options.message; + this.generatedMessage = false; + } else { + this.message = getMessage(this); + this.generatedMessage = true; + } + var stackStartFunction = options.stackStartFunction || fail; + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, stackStartFunction); + } + else { + // non v8 browsers so we can have a stacktrace + var err = new Error(); + if (err.stack) { + var out = err.stack; + + // try to strip useless frames + var fn_name = stackStartFunction.name; + var idx = out.indexOf('\n' + fn_name); + if (idx >= 0) { + // once we have located the function frame + // we need to strip out everything before it (and its line) + var next_line = out.indexOf('\n', idx + 1); + out = out.substring(next_line + 1); + } + + this.stack = out; + } + } +}; + +// assert.AssertionError instanceof Error +util.inherits(assert.AssertionError, Error); + +function replacer(key, value) { + if (util.isUndefined(value)) { + return '' + value; + } + if (util.isNumber(value) && !isFinite(value)) { + return value.toString(); + } + if (util.isFunction(value) || util.isRegExp(value)) { + return value.toString(); + } + return value; +} + +function truncate(s, n) { + if (util.isString(s)) { + return s.length < n ? s : s.slice(0, n); + } else { + return s; + } +} + +function getMessage(self) { + return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + + self.operator + ' ' + + truncate(JSON.stringify(self.expected, replacer), 128); +} + +// At present only the three keys mentioned above are used and +// understood by the spec. Implementations or sub modules can pass +// other keys to the AssertionError's constructor - they will be +// ignored. + +// 3. All of the following functions must throw an AssertionError +// when a corresponding condition is not met, with a message that +// may be undefined if not provided. All assertion methods provide +// both the actual and expected values to the assertion error for +// display purposes. + +function fail(actual, expected, message, operator, stackStartFunction) { + throw new assert.AssertionError({ + message: message, + actual: actual, + expected: expected, + operator: operator, + stackStartFunction: stackStartFunction + }); +} + +// EXTENSION! allows for well behaved errors defined elsewhere. +assert.fail = fail; + +// 4. Pure assertion tests whether a value is truthy, as determined +// by !!guard. +// assert.ok(guard, message_opt); +// This statement is equivalent to assert.equal(true, !!guard, +// message_opt);. To test strictly for the value true, use +// assert.strictEqual(true, guard, message_opt);. + +function ok(value, message) { + if (!value) fail(value, true, message, '==', assert.ok); +} +assert.ok = ok; + +// 5. The equality assertion tests shallow, coercive equality with +// ==. +// assert.equal(actual, expected, message_opt); + +assert.equal = function equal(actual, expected, message) { + if (actual != expected) fail(actual, expected, message, '==', assert.equal); +}; + +// 6. The non-equality assertion tests for whether two objects are not equal +// with != assert.notEqual(actual, expected, message_opt); + +assert.notEqual = function notEqual(actual, expected, message) { + if (actual == expected) { + fail(actual, expected, message, '!=', assert.notEqual); + } +}; + +// 7. The equivalence assertion tests a deep equality relation. +// assert.deepEqual(actual, expected, message_opt); + +assert.deepEqual = function deepEqual(actual, expected, message) { + if (!_deepEqual(actual, expected)) { + fail(actual, expected, message, 'deepEqual', assert.deepEqual); + } +}; + +function _deepEqual(actual, expected) { + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + + } else if (util.isBuffer(actual) && util.isBuffer(expected)) { + if (actual.length != expected.length) return false; + + for (var i = 0; i < actual.length; i++) { + if (actual[i] !== expected[i]) return false; + } + + return true; + + // 7.2. If the expected value is a Date object, the actual value is + // equivalent if it is also a Date object that refers to the same time. + } else if (util.isDate(actual) && util.isDate(expected)) { + return actual.getTime() === expected.getTime(); + + // 7.3 If the expected value is a RegExp object, the actual value is + // equivalent if it is also a RegExp object with the same source and + // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). + } else if (util.isRegExp(actual) && util.isRegExp(expected)) { + return actual.source === expected.source && + actual.global === expected.global && + actual.multiline === expected.multiline && + actual.lastIndex === expected.lastIndex && + actual.ignoreCase === expected.ignoreCase; + + // 7.4. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if (!util.isObject(actual) && !util.isObject(expected)) { + return actual == expected; + + // 7.5 For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else { + return objEquiv(actual, expected); + } +} + +function isArguments(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; +} + +function objEquiv(a, b) { + if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) + return false; + // an identical 'prototype' property. + if (a.prototype !== b.prototype) return false; + // if one is a primitive, the other must be same + if (util.isPrimitive(a) || util.isPrimitive(b)) { + return a === b; + } + var aIsArgs = isArguments(a), + bIsArgs = isArguments(b); + if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) + return false; + if (aIsArgs) { + a = pSlice.call(a); + b = pSlice.call(b); + return _deepEqual(a, b); + } + var ka = objectKeys(a), + kb = objectKeys(b), + key, i; + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length != kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] != kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!_deepEqual(a[key], b[key])) return false; + } + return true; +} + +// 8. The non-equivalence assertion tests for any deep inequality. +// assert.notDeepEqual(actual, expected, message_opt); + +assert.notDeepEqual = function notDeepEqual(actual, expected, message) { + if (_deepEqual(actual, expected)) { + fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); + } +}; + +// 9. The strict equality assertion tests strict equality, as determined by ===. +// assert.strictEqual(actual, expected, message_opt); + +assert.strictEqual = function strictEqual(actual, expected, message) { + if (actual !== expected) { + fail(actual, expected, message, '===', assert.strictEqual); + } +}; + +// 10. The strict non-equality assertion tests for strict inequality, as +// determined by !==. assert.notStrictEqual(actual, expected, message_opt); + +assert.notStrictEqual = function notStrictEqual(actual, expected, message) { + if (actual === expected) { + fail(actual, expected, message, '!==', assert.notStrictEqual); + } +}; + +function expectedException(actual, expected) { + if (!actual || !expected) { + return false; + } + + if (Object.prototype.toString.call(expected) == '[object RegExp]') { + return expected.test(actual); + } else if (actual instanceof expected) { + return true; + } else if (expected.call({}, actual) === true) { + return true; + } + + return false; +} + +function _throws(shouldThrow, block, expected, message) { + var actual; + + if (util.isString(expected)) { + message = expected; + expected = null; + } + + try { + block(); + } catch (e) { + actual = e; + } + + message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + + (message ? ' ' + message : '.'); + + if (shouldThrow && !actual) { + fail(actual, expected, 'Missing expected exception' + message); + } + + if (!shouldThrow && expectedException(actual, expected)) { + fail(actual, expected, 'Got unwanted exception' + message); + } + + if ((shouldThrow && actual && expected && + !expectedException(actual, expected)) || (!shouldThrow && actual)) { + throw actual; + } +} + +// 11. Expected to throw an error: +// assert.throws(block, Error_opt, message_opt); + +assert.throws = function(block, /*optional*/error, /*optional*/message) { + _throws.apply(this, [true].concat(pSlice.call(arguments))); +}; + +// EXTENSION! This is annoying to write outside this module. +assert.doesNotThrow = function(block, /*optional*/message) { + _throws.apply(this, [false].concat(pSlice.call(arguments))); +}; + +assert.ifError = function(err) { if (err) {throw err;}}; + +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + if (hasOwn.call(obj, key)) keys.push(key); + } + return keys; +}; + +},{"util/":26}],22:[function(require,module,exports){ +exports.endianness = function () { return 'LE' }; + +exports.hostname = function () { + if (typeof location !== 'undefined') { + return location.hostname + } + else return ''; +}; + +exports.loadavg = function () { return [] }; + +exports.uptime = function () { return 0 }; + +exports.freemem = function () { + return Number.MAX_VALUE; +}; + +exports.totalmem = function () { + return Number.MAX_VALUE; +}; + +exports.cpus = function () { return [] }; + +exports.type = function () { return 'Browser' }; + +exports.release = function () { + if (typeof navigator !== 'undefined') { + return navigator.appVersion; + } + return ''; +}; + +exports.networkInterfaces += exports.getNetworkInterfaces += function () { return {} }; + +exports.arch = function () { return 'javascript' }; + +exports.platform = function () { return 'browser' }; + +exports.tmpdir = exports.tmpDir = function () { + return '/tmp'; +}; + +exports.EOL = '\n'; + +},{}],23:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],24:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],25:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],26:[function(require,module,exports){ +(function (process,global){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./support/isBuffer'); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./support/isBuffer":25,"_process":23,"inherits":24}],27:[function(require,module,exports){ +(function (global){ +"use strict";function _canonicalize(e){var t=global.document.createElement("div");return t.innerHTML="",t.firstChild.href=e,t.innerHTML=t.innerHTML,t.firstChild.href}var templateLoader=require("./template-loader.js"),console=require("./../../bower_components/console-browserify/index.js"),ko=(typeof window !== "undefined" ? window['ko'] : typeof global !== "undefined" ? global['ko'] : null),$=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null);require("./ko-bindings.js");var performanceAwareCaller=require("./timed-call.js").timedCall,addUndoStackExtensionMaker=require("./undomanager/undomain.js"),colorPlugin=require("./ext/color.js"),inlinerPlugin=require("./ext/inliner.js"),localStorageLoader=require("./ext/localstorage.js");if("undefined"==typeof ko)throw"Cannot find knockout.js library!";if("undefined"==typeof $)throw"Cannot find jquery library!";var applyBindingOptions=function(e,t){t.bindingHandlers.wysiwygSrc.convertedUrl=function(t,o,a,i){var l=e.imgProcessorBackend?e.imgProcessorBackend:"./upload",d=l.match(/^(https?:\/\/[^\/]*\/).*$/),r=t.match(/^(https?:\/\/[^\/]*\/).*$/);if(null===d||null!==r&&d[1]==r[1]){var s=-1==l.indexOf("?")?"?":"&";return l+s+"src="+encodeURIComponent(t)+"&method="+encodeURIComponent(o)+"¶ms="+encodeURIComponent(a+","+i)}return console.log("Cannot apply backend image resizing to non-local resources ",t,o,a,i,d,r),t+"?method="+o+"&width="+a+(null!==i?"&height="+i:"")},t.bindingHandlers.wysiwygSrc.placeholderUrl=function(t,o){return e.imgProcessorBackend+"?method="+"placeholder"+"¶ms="+t+encodeURIComponent(",")+o},e&&e.tinymceConfig&&(t.bindingHandlers.wysiwyg.standardOptions=e.tinymceConfig),e&&e.tinymceConfigFull&&(t.bindingHandlers.wysiwyg.fullOptions=e.tinymceConfigFull)},start=function(e,t,o,a,i){templateLoader.fixPageEvents();var l=function(t){var o={messages:{unknownError:t.t("Unknown error"),uploadedBytes:t.t("Uploaded bytes exceed file size"),maxNumberOfFiles:t.t("Maximum number of files exceeded"),acceptFileTypes:t.t("File type not allowed"),maxFileSize:t.t("File is too large"),minFileSize:t.t("File is too small"),post_max_size:t.t("The uploaded file exceeds the post_max_size directive in php.ini"),max_file_size:t.t("File is too big"),min_file_size:t.t("File is too small"),accept_file_types:t.t("Filetype not allowed"),max_number_of_files:t.t("Maximum number of files exceeded"),max_width:t.t("Image exceeds maximum width"),min_width:t.t("Image requires a minimum width"),max_height:t.t("Image exceeds maximum height"),min_height:t.t("Image requires a minimum height"),abort:t.t("File upload aborted"),image_resize:t.t("Failed to resize image"),generic:t.t("Unexpected upload error")}};e&&e.fileuploadConfig&&(o=$.extend(!0,o,e.fileuploadConfig)),ko.bindingHandlers.fileupload.extendOptions=o},d=function(t){e&&e.strings&&(t.t=function(o,a){var i=e.strings[o];return"undefined"==typeof i&&(console.warn("Missing translation string for",o,": using default string"),i=o),t.tt(i,a)})},r=[d,addUndoStackExtensionMaker(performanceAwareCaller),colorPlugin,inlinerPlugin];if("undefined"!=typeof i)for(var s=0;s").appendTo(global.document.body),"undefined"==typeof t&&"undefined"!=typeof o&&(t=o.template),templateLoader.load(performanceAwareCaller,t,o,a,r,n)},initFromLocalStorage=function(e,t,o){try{var a=localStorageLoader(t,e.emailProcessorBackend),i="undefined"!=typeof o?o:[];i.push(a.extension);var l=_canonicalize(a.metadata.template);start(e,l,a.metadata,a.model,i)}catch(d){console.error("TODO not found ",t,d)}},init=function(e,t){var o=global.location.hash?global.location.href.split("#")[1]:void 0;if(e&&(e.template||e.data))if(e.data){var a=JSON.parse(e.data);start(e,void 0,a.metadata,a.content,t)}else start(e,e.template,void 0,void 0,t);else if(o&&7==o.length)initFromLocalStorage(e,o,t);else{if(!o)return!1;start(e,_canonicalize(o),void 0,void 0,t)}return!0};module.exports={isCompatible:templateLoader.isCompatible,init:init,start:start}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./../../bower_components/console-browserify/index.js":1,"./ext/color.js":59,"./ext/inliner.js":60,"./ext/localstorage.js":61,"./ko-bindings.js":62,"./template-loader.js":63,"./timed-call.js":64,"./undomanager/undomain.js":65}],28:[function(require,module,exports){ +(function (global){ +"use strict";var ko=(typeof window !== "undefined" ? window['ko'] : typeof global !== "undefined" ? global['ko'] : null),console=require("./../../../bower_components/console-browserify/index.js"),addScriptTemplate=function(e,t,o){var a=e.createElement("script");return a.setAttribute("type","text/html"),a.setAttribute("id",t),a.text=o,e.body.appendChild(a),a};ko.bindingHandlers.bindIframe={tpl:'\r\n\r\n\r\n\r\n
\r\n\r\n',init:function(e,t){function o(o){try{var a=e.contentDocument;a.open(),a.write(ko.bindingHandlers.bindIframe.tpl),a.close();try{var i=a.body;if(i){for(var n=e.contentWindow.parent.document.getElementsByTagName("script"),l=0;l0?o(e):o(10)}}),e.currentPage=ko.computed({read:i,write:function(t){t>e.pageCount()?i(e.pageCount()):0>=t?i(1):i(t)}}),e.pageCount=ko.computed(function(){return Math.ceil(e().length/e.pageSize())||1}),e.currentPageData=ko.computed(function(){var t=o(),n=i(),a=t*(n-1),r=t*n;return e().slice(a,r)}),e.moveFirst=function(){e.currentPage(1)},e.movePrevious=function(){e.currentPage(e.currentPage()-1)},e.moveNext=function(){e.currentPage(e.currentPage()+1)},e.moveLast=function(){e.currentPage(e.pageCount())},e}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],36:[function(require,module,exports){ +(function (global){ +"use strict";var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),ko=(typeof window !== "undefined" ? window['ko'] : typeof global !== "undefined" ? global['ko'] : null),sortable=(typeof window !== "undefined" ? window['jQuery']['ui']['sortable'] : typeof global !== "undefined" ? global['jQuery']['ui']['sortable'] : null),draggable=(typeof window !== "undefined" ? window['jQuery']['ui']['draggable'] : typeof global !== "undefined" ? global['jQuery']['ui']['draggable'] : null),console=require("./../../../bower_components/console-browserify/index.js");if(require("./../../../bower_components/knockout-sortable/build/knockout-sortable.min.js"),"undefined"==typeof sortable)throw"Cannot find jquery-ui sortable widget dependency!";if("undefined"==typeof draggable)throw"Cannot find jquery-ui sortable widget dependency!";var isDraggingHelper=function(e,t){e()?t.type==e()+"stop"&&e(!1):("dragstart"==t.type||"sortstart"==t.type)&&e(t.type.substring(0,4))},makeExtendedValueAccessor=function(e){return function(){var t=e();ko.utils.peekObservable(t),ko.utils.unwrapObservable(t),"undefined"==t.options&&(t.options={});var o=t.options.start;t.options.start=function(e,i){return"undefined"!=typeof t.dragging&&ko.isWritableObservable(t.dragging)&&isDraggingHelper(t.dragging,e),"undefined"!=typeof t.dropContainer&&(t.scrollInterval=global.setInterval(function(){var e=$(t.dropContainer).scrollTop();$(t.dropContainer).scrollTop(e+t.adding)},20)),"undefined"!=typeof o?o(e,i):void 0};var i=t.options.stop;t.options.stop=function(e,o){return"undefined"!=typeof t.dragging&&ko.isWritableObservable(t.dragging)&&isDraggingHelper(t.dragging,e),"undefined"!=typeof t.dropContainer&&global.clearInterval(t.scrollInterval),"undefined"!=typeof i?i(e,o):void 0};var n=t.options.drag;return t.options.drag=function(e,o){if("undefined"!=typeof t.dropContainer){var i=e.pageY-$(t.dropContainer).offset().top,a=i-$(t.dropContainer).height();t.adding=-20>i?-20:0>i?-10:10>i?-5:a>20?20:a>0?10:a>-10?5:0}return"undefined"!=typeof n?n(e,o):void 0},t}};ko.bindingHandlers.extsortable={init:function(e,t,o,i,n){return ko.bindingHandlers.sortable.init(e,makeExtendedValueAccessor(t),o,i,n)},update:function(e,t,o,i,n){return ko.bindingHandlers.sortable.update(e,makeExtendedValueAccessor(t),o,i,n)}},ko.bindingHandlers.extdraggable={init:function(e,t,o,i,n){return ko.bindingHandlers.draggable.init(e,makeExtendedValueAccessor(t),o,i,n)},update:function(e,t,o,i,n){return ko.bindingHandlers.draggable.update(e,makeExtendedValueAccessor(t),o,i,n)}}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./../../../bower_components/console-browserify/index.js":1,"./../../../bower_components/knockout-sortable/build/knockout-sortable.min.js":8}],37:[function(require,module,exports){ +(function (global){ +"use strict";var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),ko=(typeof window !== "undefined" ? window['ko'] : typeof global !== "undefined" ? global['ko'] : null),console=require("./../../../bower_components/console-browserify/index.js");ko.bindingHandlers.preloader={init:function(e,t){var o=t();if("undefined"==typeof o.preloaded){o.preloaded=ko.observable("");var a=function(e){if(e!=o.preloaded())if(""!==e){var t=new Image;t.onload=function(){o.preloaded(e)},t.onerror=function(){o.preloaded(e)},t.src=e}else o.preloaded(e)};o.subscribe(a),a(o())}}},ko.bindingHandlers.advattr={init:function(e,t){var o=ko.utils.unwrapObservable(t()||{});ko.utils.objectForEach(o,function(t,o){var a=e.getAttribute(t);if(ko.isWriteableObservable(o)){var i=o();i!=a&&(o(a),null!==i&&console.log("AdvAttr found a value different from the default",t,i,a))}})},update:function(e,t){var o=ko.utils.unwrapObservable(t())||{};ko.utils.objectForEach(o,function(t,o){o=ko.utils.unwrapObservable(o);var a=o===!1||null===o||void 0===o;a?e.removeAttribute(t):e.setAttribute(t,o.toString())})}},ko.bindingHandlers.advstyle={init:function(e,t){var o=ko.utils.unwrapObservable(t()||{});ko.utils.objectForEach(o,function(t,o){var a;if(t.match(/Px$/)?(t=t.substr(0,t.length-2),a=e.style[t],a.match(/px$/)?a=a.replace(/px$/,""):console.log("AdvStyle binding found an unexpected default value",t,a,e)):a=e.style[t],ko.isWriteableObservable(o)){var i=o();i!=a&&(o(a),null!==i&&console.log("AdvStyle found a value different from the default",t,i,a))}})},update:function(e,t){var o=ko.utils.unwrapObservable(t()||{});ko.utils.objectForEach(o,function(t,o){o=ko.utils.unwrapObservable(o),(null===o||"undefined"==typeof o||o===!1)&&(o=""),t.match(/Px$/)&&(t=t.substr(0,t.length-2),o+="px"),e.style[t]=o})}},ko.bindingHandlers.domlog={init:function(e){console.log("initialized",e),ko.utils.domNodeDisposal.addDisposeCallback(e,function(){console.log("disposed",e)})}},ko.bindingHandlers.fudroppable={init:function(e,t){var o=t()||{},a={},i=function(e,t,o,a,i,n){e[t]?global.clearTimeout(e[t]):("undefined"!=typeof a&&o.classList.add(a),ko.isWriteableObservable(i)&&!i()&&i(!0));var l=function(){e[t]=null,"undefined"!=typeof a&&o.classList.remove(a),ko.isWriteableObservable(i)&&i()&&i(!1)};"dragleave"==n.type?l():e[t]=global.setTimeout(l,500)};(o.active||o.activeClass)&&ko.utils.registerEventHandler(global,"dragover",i.bind(void 0,a,"activeTimeout",e,o.activeClass,o.active)),o.hoverClass&&ko.utils.registerEventHandler(e,"dragover dragenter dragleave",i.bind(void 0,a,"hoverTimeout",e,o.hoverClass,void 0))}},ko.bindingHandlers.fileupload={extendOptions:{},remoteFilePreprocessor:function(e){return e},init:function(e){ko.utils.domNodeDisposal.addDisposeCallback(e,function(){$(e).fileupload("destroy")}),global.webkitURL?$(e).attr("title"," "):$(e).attr("title","")},update:function(e,t){var o=t()||{},a=$(e),i=a.parents(".uploadzone"),n=o.data;o.data=void 0;var l=o.canvasPreview;ko.utils.extend(o,{url:"/upload/",dataType:"json",dropZone:i.find(".mo-uploadzone")[0],autoUpload:!0,acceptFileTypes:/(\.|\/)(gif|jpe?g|png)$/i,maxFileSize:1048576,disableImageResize:/Android(?!.*Chrome)|Opera/.test(global.navigator.userAgent),previewMaxWidth:200,previewMaxHeight:200,previewCrop:!1,replaceFileInput:!1,messages:{unknownError:"Unknown error",uploadedBytes:"Uploaded bytes exceed file size",maxNumberOfFiles:"Maximum number of files exceeded",acceptFileTypes:"File type not allowed",maxFileSize:"File is too large",minFileSize:"File is too small",post_max_size:"The uploaded file exceeds the post_max_size directive in php.ini",max_file_size:"File is too big",min_file_size:"File is too small",accept_file_types:"Filetype not allowed",max_number_of_files:"Maximum number of files exceeded",max_width:"Image exceeds maximum width",min_width:"Image requires a minimum width",max_height:"Image exceeds maximum height",min_height:"Image requires a minimum height",abort:"File upload aborted",image_resize:"Failed to resize image",generic:"Unexpected upload error"}}),ko.utils.extend(o,ko.bindingHandlers.fileupload.extendOptions);var r=0,d="",s=function(){0===--r&&(n&&n(d),d="",l&&(i.find("img").show(),i.find("canvas").remove()),i.removeClass("uploading"),i.find(".progress-bar").css("width",0))},c=function(e){if("object"==typeof o.messages&&null!==o.messages){var t=e.match(/^([^ ]+)(.*)$/);if(t&&"undefined"!=typeof o.messages[t[1]])return o.messages[t[1]]+t[2]}return e};a.fileupload(o);for(var u=["fileuploadadd","fileuploadprocessalways","fileuploadprogressall","fileuploaddone","fileuploadfail"],p=function(e,t){if("fileuploadadd"==e.type&&r++,"fileuploadfail"==e.type&&(console.log("fileuploadfail",e,t),o.onerror&&(""===t.errorThrown&&"error"==t.textStatus?o.onerror(c("generic")):o.onerror(c("generic ("+t.errorThrown+")"))),s()),"fileuploaddone"==e.type)if("undefined"!=typeof t.result.files[0].url){if(o.onfile)for(var a=0;a=0;b--){var f=u[b];a.on(f,p)}$.support.fileInput||a.prop("disabled",!0).parent().addClass("disabled")}}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./../../../bower_components/console-browserify/index.js":1}],38:[function(require,module,exports){ +(function (global){ +"use strict";var ko=(typeof window !== "undefined" ? window['ko'] : typeof global !== "undefined" ? global['ko'] : null),console=require("./../../../bower_components/console-browserify/index.js");ko.bindingHandlers.ifSubs={cloneNodes:function(e,t){for(var o=0,i=e.length,n=[];i>o;o++){var a=e[o].cloneNode(!0);n.push(t?ko.cleanNode(a):a)}return n},init:function(e,t,o,i,n){var a,r,l=t();return"undefined"==typeof l.data.subsCount&&ko.extenders.subscriptionsCount(l.data),ko.computed(function(){var o,i,d,s=ko.utils.unwrapObservable(t().data.subsCount),c=!r;d=-("undefined"!=typeof t().gutter?t().gutter:1),o=s+(a?d:0)>=ko.utils.unwrapObservable(l.threshold),"undefined"!=typeof t().not&&t().not&&(o=!o),i=c||o!==a,i&&(c&&ko.computedContext.getDependenciesCount()&&(r=ko.bindingHandlers.ifSubs.cloneNodes(ko.virtualElements.childNodes(e),!0)),o?(c||ko.virtualElements.setDomNodeChildren(e,ko.bindingHandlers.ifSubs.cloneNodes(r)),ko.applyBindingsToDescendants(n,e)):ko.virtualElements.emptyNode(e),a=o)},null,{disposeWhenNodeIsRemoved:e}),{controlsDescendantBindings:!0}}},ko.virtualElements.allowedBindings.ifSubs=!0;var beforeSubscriptionProp,afterSubscriptionProp;if("function"==typeof ko.subscription&&"undefined"!=typeof ko.isWritableObservable)beforeSubscriptionProp="beforeSubscriptionAdd",afterSubscriptionProp="afterSubscriptionRemove";else if("3.2.0"==ko.version)beforeSubscriptionProp="va",afterSubscriptionProp="nb";else if("3.3.0"==ko.version)beforeSubscriptionProp="ja",afterSubscriptionProp="ua";else if("3.4.0"==ko.version)beforeSubscriptionProp="sa",afterSubscriptionProp="Ia";else{if("3.4.1"!=ko.version)throw"Unsupported minimized Knockout version "+ko.version+" (supported DEBUG or minimized 3.2.0 ... 3.4.1)";beforeSubscriptionProp="sa",afterSubscriptionProp="Ia"}ko.extenders.subscriptionsCount=function(e,t,o){if("undefined"==typeof e.subsCount){e.subsCount=ko.observable(e.getSubscriptionsCount()).extend({notify:"always"});var i=e[beforeSubscriptionProp],n=e[afterSubscriptionProp];e[beforeSubscriptionProp]=function(n){i&&i.call(e,n);var a=e.getSubscriptionsCount()+1;("undefined"==typeof t||a==t||"undefined"==typeof o||a==o)&&e.subsCount(a)},e[afterSubscriptionProp]=function(i){n&&n.call(e,i);var a=e.getSubscriptionsCount();("undefined"==typeof t||a==t||"undefined"==typeof o||a==o)&&e.subsCount(a)}}else console.log("already applied subscriptionCount to observable");return null}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./../../../bower_components/console-browserify/index.js":1}],39:[function(require,module,exports){ +(function (global){ +"use strict";var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),spinner=(typeof window !== "undefined" ? window['jQuery']['ui']['spinner'] : typeof global !== "undefined" ? global['jQuery']['ui']['spinner'] : null),console=require("./../../../bower_components/console-browserify/index.js");if("undefined"==typeof spinner)throw"Cannot find jquery-ui spinner widget dependency!";$.widget("ui.spinner",spinner,{_adjustValue:function(e){this._super(e);var t=this.options;return e=parseFloat(e.toFixed(this._precision())),null!==t.max&&e>t.max?t.max:null!==t.min&&ei&&s>c+u||(r>u?(i>c&&_scrollIntoView(e,!0,n,i-c),p>s&&_scrollIntoView(e,!1,n,s-p)):(i>c&&s>p&&_scrollIntoView(e,!1,n,s-p),c>i&&p>s&&_scrollIntoView(e,!0,n,i-c)))}}catch(f){console.log("TODO exception scrolling into view",f)}}},ko.virtualElements.allowedBindings.scrollIntoView=!0; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./../../../bower_components/console-browserify/index.js":1}],44:[function(require,module,exports){ +(function (global){ +"use strict";function createStringTemplateEngine(e){var t=e.makeTemplateSource;return e.makeTemplateSource=function(e){return"undefined"!=typeof templates[e]?new ko.templateSources.stringTemplate(e,templates[e]):t(e)},e}function pushTemplate(e,t){templates[e]=t}function removeTemplate(e){"undefined"!=typeof templates[e]?templates[e]=void 0:origTemplateSystem.removeTemplate(e)}function init(){ko.setTemplateEngine(createStringTemplateEngine(new ko.nativeTemplateEngine))}function getTemplateContent(e){return"undefined"!=typeof templates[e]?templates[e]:origTemplateSystem.getTemplateContent(e)}var ko=(typeof window !== "undefined" ? window['ko'] : typeof global !== "undefined" ? global['ko'] : null),origTemplateSystem=require("./script-template.js"),templates={};ko.templateSources.stringTemplate=function(e,t){this.templateName=e,this.template=t,this._data={}},ko.utils.extend(ko.templateSources.stringTemplate.prototype,{data:function(e,t){return 1===arguments.length?this._data[e]:(this._data[e]=t,void 0)},text:function(e){return 0===arguments.length?this.template:(this.template=e,void 0)}}),module.exports={init:init,addTemplate:pushTemplate,removeTemplate:removeTemplate,getTemplateContent:getTemplateContent}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./script-template.js":41}],45:[function(require,module,exports){ +(function (global){ +"use strict";var ko=(typeof window !== "undefined" ? window['ko'] : typeof global !== "undefined" ? global['ko'] : null),$=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),kojqui=(typeof window !== "undefined" ? window['kojqui'] : typeof global !== "undefined" ? global['kojqui'] : null),console=require("./../../../bower_components/console-browserify/index.js"),extendValueAccessor=function(e,t){return function(){return ko.utils.extend(t,e()),t}},options={show:{delay:500},track:!0,items:'[title][title!=""][title!=" "]'};ko.bindingHandlers.tooltips={init:function(e,t,o,i,n){return"undefined"!=typeof $.fn.tooltip&&"undefined"!=typeof ko.bindingHandlers.tooltip?ko.bindingHandlers.tooltip.init(e,extendValueAccessor(t,options),o,i,n):void 0},update:function(e,t,o,i,n){return"undefined"!=typeof $.fn.tooltip&&"undefined"!=typeof ko.bindingHandlers.tooltip?ko.bindingHandlers.tooltip.update(e,extendValueAccessor(t,options),o,i,n):void 0}}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./../../../bower_components/console-browserify/index.js":1}],46:[function(require,module,exports){ +(function (global){ +"use strict";var ko=(typeof window !== "undefined" ? window['ko'] : typeof global !== "undefined" ? global['ko'] : null),console=require("./../../../bower_components/console-browserify/index.js");ko.bindingHandlers.validatedValue={init:function(e,t,o){var i=t;if("undefined"!=typeof e.pattern){var n=new RegExp("^(?:"+e.pattern+")$"),a=ko.computed({read:function(){var o=ko.utils.unwrapObservable(t()),i=null===o||""===o||n.test(o);return i?e.classList.remove("invalid"):e.classList.add("invalid"),o},write:ko.isWriteableObservable(t())&&function(o){ko.selectExtensions.writeValue(e,o);var i=ko.selectExtensions.readValue(e);t()(i)},disposeWhenNodeIsRemoved:e});i=function(){return a}}ko.bindingHandlers.value.init(e,i,o)}},ko.expressionRewriting._twoWayBindings.validatedValue=!0; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./../../../bower_components/console-browserify/index.js":1}],47:[function(require,module,exports){ +(function (global){ +"use strict";var ko=(typeof window !== "undefined" ? window['ko'] : typeof global !== "undefined" ? global['ko'] : null),console=require("./../../../bower_components/console-browserify/index.js");ko.bindingHandlers.uniqueId={currentIndex:0,init:function(e,t){var o=ko.utils.unwrapObservable(t())||{};if(""===o.id()){var a,i,n;n="ko_"+("undefined"!=typeof o.type?ko.utils.unwrapObservable(o.type):"block");do a=n+"_"+ ++ko.bindingHandlers.uniqueId.currentIndex,i=global.document.getElementById(a);while(i);o.id(a)}}},ko.virtualElements.allowedBindings.uniqueId=!0,ko.bindingHandlers.virtualAttr={update:function(e,t){8!==e.nodeType&&ko.bindingHandlers.attr.update(e,t)}},ko.virtualElements.allowedBindings.virtualAttr=!0,ko.bindingHandlers.virtualAttrStyle={update:function(e,t,o,a,i){if(8!==e.nodeType){var n="undefined"==typeof i.templateMode||"wysiwyg"!=i.templateMode,l=["style"];n&&l.push("replacedstyle");for(var r=ko.utils.unwrapObservable(t()),d=0;dn;n++)i.parentNode.insertBefore(a[n],i)}}else ko.bindingHandlers.html.update(e,t);return{controlsDescendantBindings:!0}}},ko.virtualElements.allowedBindings.virtualHtml=!0; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./../../../bower_components/console-browserify/index.js":1}],48:[function(require,module,exports){ +(function (global){ +"use strict";var tinymce=(typeof window !== "undefined" ? window['tinymce'] : typeof global !== "undefined" ? global['tinymce'] : null),$=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),ko=(typeof window !== "undefined" ? window['ko'] : typeof global !== "undefined" ? global['ko'] : null),console=require("./../../../bower_components/console-browserify/index.js");require("./eventable.js"),ko.bindingHandlers.wysiwygOrHtml={init:function(e,t,o,i,a){var n="undefined"==typeof a.templateMode||"wysiwyg"!=a.templateMode;return n?ko.bindingHandlers.virtualHtml.init():ko.bindingHandlers.wysiwyg.init(e,t,o,i,a)},update:function(e,t,o,i,a){var n="undefined"==typeof a.templateMode||"wysiwyg"!=a.templateMode;return n?ko.bindingHandlers.virtualHtml.update(e,t,o,i,a):void 0}},ko.virtualElements.allowedBindings.wysiwygOrHtml=!0,ko.bindingHandlers.wysiwygHref={init:function(e,t,o,i,a){if(8!==e.nodeType){t();var n="undefined"==typeof a.templateMode||"wysiwyg"!=a.templateMode;if(n)e.setAttribute("target","_new");else{var l=o();"undefined"!=typeof l.wysiwygOrHtml?e.setAttribute("href","javascript:void(0)"):(e.removeAttribute("href"),e.setAttribute("disabledhref","#"))}}},update:function(e,t,o,i,a){if(8!==e.nodeType){var n="undefined"==typeof a.templateMode||"wysiwyg"!=a.templateMode,l=ko.utils.unwrapObservable(t());n&&(l===!1||null===l||void 0===l?e.removeAttribute("href"):e.setAttribute("href",l.toString()))}}},ko.virtualElements.allowedBindings.wysiwygHref=!0,ko.bindingHandlers.wysiwygSrc={convertedUrl:function(e,t,o,i){var a=e+"?method="+t+"&width="+o+(null!==i?"&height="+i:"");return console.log("basic converterUrl",a),a},placeholderUrl:function(e,t,o){},update:function(e,t){var o=ko.utils.unwrapObservable(t()),i=ko.utils.unwrapObservable(o.src),a=ko.utils.unwrapObservable(o.placeholder),n=ko.utils.unwrapObservable(o.width),l=ko.utils.unwrapObservable(o.height);if(i===!1||null===i||void 0===i||""===i)"object"==typeof a&&null!==a?e.setAttribute("src",ko.bindingHandlers.wysiwygSrc.placeholderUrl(a.width,a.height,a.text)):e.removeAttribute("src");else{var r=ko.utils.unwrapObservable(o.method);r||(r=n>0&&l>0?"cover":"resize");var d=ko.bindingHandlers.wysiwygSrc.convertedUrl(i.toString(),r,n,l);e.setAttribute("src",d)}"undefined"!=typeof n&&null!==n?e.setAttribute("width",n):e.removeAttribute("width"),"undefined"!=typeof l&&null!==l?e.setAttribute("height",l):e.removeAttribute("height")}},ko.bindingHandlers.wysiwygId={init:function(e,t,o,i,a){var n="undefined"==typeof a.templateMode||"wysiwyg"!=a.templateMode;n||e.setAttribute("id",ko.utils.unwrapObservable(t()))},update:function(e,t,o,i,a){var n="undefined"==typeof a.templateMode||"wysiwyg"!=a.templateMode;n||e.setAttribute("id",ko.utils.unwrapObservable(t()))}},ko.virtualElements.allowedBindings.wysiwygId=!0,ko.bindingHandlers.wysiwygClick={init:function(e,t,o,i,a){var n="undefined"==typeof a.templateMode||"wysiwyg"!=a.templateMode;n||ko.bindingHandlers.click.init(e,t,o,i,a)}},ko.virtualElements.allowedBindings.wysiwygClick=!0,ko.bindingHandlers.wysiwygCss={update:function(e,t,o,i,a){var n="undefined"==typeof a.templateMode||"wysiwyg"!=a.templateMode;n||ko.bindingHandlers.css.update(e,t,o,i,a)}},ko.virtualElements.allowedBindings.wysiwygCss=!0,ko.bindingHandlers.wysiwygImg={makeTemplateValueAccessor:function(e,t){return function(){var o="undefined"!=typeof t.templateMode&&"wysiwyg"==t.templateMode,i=e(),a=ko.utils.peekObservable(i);return ko.utils.unwrapObservable(i),{name:o?a._editTemplate:a._template,templateEngine:ko.nativeTemplateEngine.instance}}},init:function(e,t,o,i,a){return ko.bindingHandlers.template.init(e,ko.bindingHandlers.wysiwygImg.makeTemplateValueAccessor(t,a))},update:function(e,t,o,i,a){return a=a.extend(t()),ko.bindingHandlers.template.update(e,ko.bindingHandlers.wysiwygImg.makeTemplateValueAccessor(t,a),o,i,a)}},ko.virtualElements.allowedBindings.wysiwygImg=!0,ko.bindingHandlers.wysiwyg={currentIndex:0,standardOptions:{},fullOptions:{toolbar1:"bold italic forecolor backcolor hr styleselect removeformat | link unlink | pastetext code",plugins:["link hr paste lists textcolor code"]},init:function(e,t){ko.bindingHandlers.focusable.init(e),ko.utils.domNodeDisposal.addDisposeCallback(e,function(){tinymce.remove("#"+e.getAttribute("id"))});var o=t();if(!ko.isObservable(o))throw"Wysiwyg binding called with non observable";if(8===e.nodeType)throw"Wysiwyg binding called on virtual node, ignoring...."+e.innerHTML;var i=e.getAttribute("id");i||(i="wysiwyg_"+ ++ko.bindingHandlers.wysiwyg.currentIndex,e.setAttribute("id",i));var a,n="DIV"==e.tagName||"TD"==e.tagName,l=!1,r=!1,d={selector:"#"+i,inline:!0,hidden_input:!1,plugins:["paste"],toolbar1:"bold italic",toolbar2:"",preview_styles:!1,paste_as_text:!0,language:"en",schema:"html5",extended_valid_elements:"strong/b,em/i,*[*]",menubar:!1,skin:"gray-flat",setup:function(e){e.on("change redo undo",function(){l||(r=!0,o(e.getContent({format:"raw"})),r=!1)}),e.on("focus",function(){e.nodeChanged(),e.getElement().click()}),e.on("BeforeSetContent",function(e){e.initial&&(e.format="raw")}),a=e}};return ko.utils.extend(d,ko.bindingHandlers.wysiwyg.standardOptions),n&&ko.utils.extend(d,ko.bindingHandlers.wysiwyg.fullOptions),global.setTimeout(function(){tinymce.init(d)}),ko.computed(function(){var o=ko.utils.unwrapObservable(t());if(!r){try{l=!0,"undefined"!=typeof a?a.setContent(o,{format:"raw"}):ko.utils.setHtml(e,o)}catch(i){console.log("TODO exception setting content to editable element",typeof a,i)}l=!1}},null,{disposeWhenNodeIsRemoved:e}),{controlsDescendantBindings:!0}}}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./../../../bower_components/console-browserify/index.js":1,"./eventable.js":34}],49:[function(require,module,exports){ +"use strict";var console=require("./../../../bower_components/console-browserify/index.js"),checkModel=function(e,t,o,n,i){var a,r,l,s=0;if("undefined"==typeof i&&(i=!1),"undefined"!=typeof t&&"function"==typeof t.splice)for(a={},r=0;r0)if(o[d].length>0){var u=0;for(r=0;r=e[d].length){console.log("WARN cannot find ",l,o[d][r].type," block in reference"),s=Math.max(s,2);break}s=Math.max(s,checkModel(e[d][u],void 0,o[d][r],l+"["+r+"."+o[d][r].type+"]"))}}else for(r=0;r=0;n--)if("property"==e[n].type&&e[n].name==t)return _declarationValueUrlPrefixer(e[n].value,o);return null},_propToCamelCase=function(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})},_declarationValueUrlPrefixer=function(e,t){if(e.match(/url\(.*\)/)){var o=e.replace(/(url\()([^\)]*)(\))/g,function(e,o,n,i){var r=n.trim(),a=n.trim().charAt(0);"'"==a||'"'==a?r=r.substr(1,r.length-2):a="";var l=t(r);return null!==l?o+a+l+a+i:e});return o}return e},elaborateDeclarations=function(e,t,o,n,i,r,a){var l="object"==typeof r&&null!==r?r:{},s=null,d=0;if("undefined"==typeof t){var u=cssParse("#{\n"+e+"}",{comments:!0,position:!0});t=u.stylesheet.rules[0].declarations,d=1}for(var c=t.length-1;c>=0;c--)if("property"==t[c].type)if(a===!0&&"display"==t[c].name&&"none"==t[c].value)null===s&&(s=e),s=converterUtils.removeStyle(s,t[c].position.start,t[c].position.end,d,0,0,"");else{var f=t[c].name.match(/^-ko-(bind-|attr-)?([a-z0-9-]*?)(-if|-ifnot)?$/);if(null!==f){null===s&&"undefined"!=typeof e&&(s=e);var p,b,m,g="attr-"==f[1],h="bind-"==f[1],v=f[2],y="-if"==f[3]||"-ifnot"==f[3];if(y){p=t[c].name.substr(0,t[c].name.length-f[3].length);var k=_declarationValueLookup(t,p,o);if(null===k)throw"Unable to find declaration "+p+" for "+t[c].name}else{if((g||h)&&"undefined"==typeof i&&"undefined"!=typeof e)throw"Attributes and bind declarations are only allowed in inline styles!";var w,_=!0;if(g?(m=domutils.getAttribute(i,v),_=!1,w="virtualAttr"):h?(w=null,"text"==v?"undefined"!=typeof i?m=domutils.getInnerText(i):_=!1:"html"==v?"undefined"!=typeof i?m=domutils.getInnerHtml(i):_=!1:_=!1):(_="undefined"!=typeof e,_&&(m=_declarationValueLookup(t,v,o)),w="virtualStyle"),_&&null===m)throw console.error("Cannot find default value for",t[c].name,t),"Cannot find default value for "+t[c].name+": "+t[c].value+" in "+i+" ("+typeof e+"/"+v+")";var x=m,O=_propToCamelCase(v);try{b=converterUtils.expressionBinding(t[c].value,n,x)}catch(S){throw console.error("Model ensure path failed",S.stack,"name",t[c].name,"value",t[c].value,"default",m,"element",i),S}null!==w&&"undefined"==typeof l[w]&&(l[w]={}),"virtualAttr"==w&&"href"==O&&(w=null,O="wysiwygHref","undefined"!=typeof i&&null!==i&&domutils.removeAttribute(i,"href"));var C=_declarationValueLookup(t,t[c].name+"-if",o),$=!1;if(null===C)C=_declarationValueLookup(t,t[c].name+"-ifnot",o),$=!0;else if(null!==_declarationValueLookup(t,t[c].name+"-ifnot",o))throw"Unexpected error: cannot use both -if and -ifnot property conditions";if(null!==C)try{var T=converterUtils.conditionBinding(C,n);b=($?"!":"")+"("+T+") ? "+b+" : null"}catch(S){throw console.error("Unable to deal with -ko style binding condition",C,t[c].name),S}null!==w?l[w][O]=b:l[O]=b}if(null!==s)try{if("undefined"!=typeof i&&null!==i)s=converterUtils.removeStyle(s,t[c].position.start,t[c].position.end,d,0,0,"");else{var A="";y||(A=v+": "+m+""),s=converterUtils.removeStyle(s,t[c].position.start,t[c].position.end,d,0,0,A)}}catch(S){throw console.warn("Remove style failed",S,"name",t[c]),S}}else{var E=_declarationValueUrlPrefixer(t[c].value,o);if(E!=t[c].value&&(null===s&&"undefined"!=typeof e&&(s=e),null!==s))try{s=converterUtils.removeStyle(s,t[c].position.start,t[c].position.end,d,0,0,t[c].name+": "+E)}catch(S){throw console.log("Remove style failed replacing url",S,"name",t[c]),S}var M=_propToCamelCase(t[c].name),j="virtualAttrStyle",D="undefined"!=typeof l.virtualStyle?l.virtualStyle[M]:void 0,P=" ";"undefined"==typeof l[j]&&(l[j]="''",P=""),"undefined"!=typeof D?(l[j]="'"+t[c].name+": '+("+D+")+';"+P+"'+"+l[j],delete l.virtualStyle[M]):l[j]="'"+t[c].name+": "+converterUtils.addSlashes(E)+";"+P+"'+"+l[j]}}if("undefined"!=typeof i&&null!==i){for(var H in l.virtualStyle)if(l.virtualStyle.hasOwnProperty(H))throw console.log("Unexpected virtualStyle binding after conversion to virtualAttr.style",H,l.virtualStyle[H],e),"Unexpected virtualStyle binding after conversion to virtualAttr.style for "+H;delete l.virtualStyle;var B=domutils.getAttribute(i,"data-bind"),q=(null!==B?B+", ":"")+_bindingSerializer(l);domutils.setAttribute(i,"data-bind",q)}if("undefined"==typeof e){var I=!1;for(var R in l.virtualStyle)if(l.virtualStyle.hasOwnProperty(R)){I=!0;break}if(I){if("undefined"!=typeof l.virtualAttrStyle){var U=l.virtualAttrStyle;delete l.virtualAttrStyle,l.virtualAttrStyle=U}}else delete l.virtualStyle;return _bindingSerializer(l)}return s},_bindingSerializer=function(e){var t=[];for(var o in e)e.hasOwnProperty(o)&&("object"==typeof e[o]?t.push(o+": "+"{ "+_bindingSerializer(e[o])+" }"):t.push(o+": "+e[o]));return t.reverse().join(", ")};module.exports=elaborateDeclarations; + +},{"./../../../bower_components/console-browserify/index.js":1,"./../../../bower_components/mensch/lib/parser.js":15,"./domutils.js":51,"./utils.js":57}],51:[function(require,module,exports){ +(function (global){ +"use strict";function _extend(e,t){if(t)for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o]);return e}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),objExtend=function(e,t){return"function"==typeof $.extend?$.extend(!0,e,t):_extend(e,JSON.parse(JSON.stringify(t)))},getAttribute=function(e,t){var o=$(e).attr(t);return"undefined"==typeof o&&(o=null),o},setAttribute=function(e,t,o){$(e).attr(t,o)},removeAttribute=function(e,t){$(e).removeAttr(t)},getInnerText=function(e){return $(e).text()},getInnerHtml=function(e){return $(e).html()},getLowerTagName=function(e){return""===e.tagName&&"string"==typeof e.name?e.name.toLowerCase():""!==e.tagName?e.tagName.toLowerCase():$(e).prop("tagName").toLowerCase()},setContent=function(e,t){$(e).html(t)},replaceHtml=function(e,t){$(e).replaceWith(t)},removeElements=function(e,t){t&&"undefined"!=typeof e.detach&&e.detach(),e.remove()};module.exports={getAttribute:getAttribute,setAttribute:setAttribute,removeAttribute:removeAttribute,getInnerText:getInnerText,getInnerHtml:getInnerHtml,getLowerTagName:getLowerTagName,setContent:setContent,replaceHtml:replaceHtml,removeElements:removeElements,objExtend:objExtend}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],52:[function(require,module,exports){ +"use strict";var console=require("./../../../bower_components/console-browserify/index.js"),elaborateDeclarations=require("./declarations.js"),utils=require("./utils.js"),modelDef=require("./model.js"),_getOptionsObject=function(e){for(var t=e.split("|"),o={},n=0;n1?i[1]:i[0]}return o},_filterProps=function(e,t,o){var n=[];for(var i in e)if(!i.match(/^customStyle$/)&&!i.match(/^_/)&&e.hasOwnProperty(i)){var a=null!==e[i]&&"undefined"!=typeof e[i]._category&&"style"==e[i]._category;if("id"==i||"type"==i||i.match(/Blocks$/));else if("styler"==t)(a||o>0)&&n.push(i);else if("edit"==t){var r=null!==e[i]&&"undefined"!=typeof e[i]._category&&"content"==e[i]._category&&("undefined"==typeof e[i]._context||"block"!=e[i]._context);r&&n.push(i)}else"undefined"==typeof t&&n.push(i)}return n},_propInput=function(e,t,o,n,i){var a,r="";if(null!==e&&"undefined"!=typeof e._widget&&(a=e._widget),"undefined"==typeof a)throw"Unknown data type for "+t;var l="focusable: true";if("edit"==n&&(l+=", event: { focus: function(ui, event) { $($element).click(); } } "),r+='"},_getGlobalStyleProp=function(e,t,o,n){var i;return("object"!=typeof t||null===t||"undefined"!=typeof t._widget)&&"undefined"!=typeof o&&"undefined"!=typeof n&&n.length>0&&"object"==typeof e&&"undefined"!=typeof e[n]&&(i=e[n]),i},_propEditor=function(e,t,o,n,i,a,r,l,s,d,u,c,p,f,b){if("undefined"==typeof s&&(s=0),"undefined"!=typeof r&&"object"==typeof n&&null!==n&&"undefined"==typeof n._usecount)return console.log("TODO EDITOR ignoring",a,"property because it is not used by the template","prop:",r,"type:",l,"level:",s,e._templateName),"";var m,g="undefined"!=typeof c?r+"._defaultComputed":r,h="",v=g,y=1,k=1;if("object"==typeof n&&null!==n&&"undefined"==typeof n._widget||"undefined"==typeof c&&(y+=1),"undefined"==typeof c&&"undefined"!=typeof d&&(k+=d),"undefined"!=typeof r&&p&&(h+=""),"undefined"==typeof r||null!==n&&"undefined"!=typeof n._name||console.log("TODO WARN Missing label for property ",r),"undefined"==typeof r&&null!==n&&"undefined"==typeof n._name&&console.log("TODO WARN Missing label for object ",n.type),"object"==typeof n&&null!==n&&"undefined"==typeof n._widget){var w=_filterProps(n,l,s),x="styler"==l&&null!==n&&"undefined"!=typeof n.customStyle&&"undefined"!=typeof c,_="",$="";"undefined"!=typeof r&&"edit"==l&&(_=", click: function(obj, evt) { $root.selectItem("+r+", $data); return false }, clickBubble: false, css: { selecteditem: $root.isSelectedItem("+r+") }, scrollIntoView: $root.isSelectedItem("+r+"), ",$+=" selectable"),x&&($+=" supportsCustomStyles"),h+='
';var S=null!==n&&"undefined"!=typeof n._name?n._name:"undefined"!=typeof r?"["+r+"]":"";if(x){var C="Stile";"undefined"!=typeof i&&null!==i&&"undefined"!=typeof i._name?C=i._name:console.log("TODO missing label for theme section ",r,null!==n?n.type:"-"),S="Block"}else S=""+S+"";if(m=null!==n&&"undefined"!=typeof n._help?' title="'+utils.addSlashes(n._help)+"\" data-bind=\"attr: { title: $root.ut('template', '"+utils.addSlashes(n._help)+"') }\"":"",h+="'+S+"","edit"==l&&"undefined"!=typeof n._blockDescription&&(h+="
"+n._blockDescription+"
"),x&&(h+='",h+=""),"undefined"!=typeof r&&(h+="",1==s&&"undefined"!=typeof r&&"undefined"!=typeof n._previewBindings&&"undefined"!=typeof e)){"undefined"!=typeof f&&(h+='
'),"undefined"!=typeof b&&(h+='
');var O=elaborateDeclarations(void 0,n._previewBindings,o,e.bind(this,a+"."));h+='
'}var T;0===s&&"undefined"!=typeof n._previewBindings&&(T=elaborateDeclarations(void 0,n._previewBindings,o,e.bind(this,a.length>0?a+".":"")));var E,A,D,M,H=h.length;for(E=0;E0?a+"."+w[E]:w[E],("object"!=typeof n[w[E]]||null===n[w[E]]||"undefined"!=typeof n[w[E]]._widget)&&(M=void 0,0===s&&"theme"==w[E]?h+=_propEditor(e,t,o,n[w[E]],D,A,w[E],l,0,d,void 0,void 0,p,f):(M=_getGlobalStyleProp(u,n[w[E]],w[E],A),h+=_propEditor(e,t,o,n[w[E]],D,A,w[E],l,s+1,d,u,M,p,f,T)));for(E=0;E0?a+"."+w[E]:w[E],"object"==typeof n[w[E]]&&null!==n[w[E]]&&"undefined"==typeof n[w[E]]._widget&&(M=void 0,0===s&&"theme"==w[E]?h+=_propEditor(e,t,o,n[w[E]],D,A,w[E],l,0,d,void 0,void 0,p,f):(M=_getGlobalStyleProp(u,n[w[E]],w[E],A),h+=_propEditor(e,t,o,n[w[E]],D,A,w[E],l,s+1,d,u,M,p,f,T)));var q=h.length-H;if(0===q){if("object"==typeof n&&null!==n&&"template"==n._context)return"";h+='
Selected element has no editable properties
'}"undefined"!=typeof r&&(h+=""),h+="
"}else{var B=!0;if("undefined"==typeof u&&(B=!1),null===n||"object"!=typeof n||"undefined"!=typeof n._widget){var j=[];"undefined"!=typeof c&&j.push("css: { notnull: "+r+"() !== null }"),m=null!==n&&"undefined"!=typeof n._help?' title="'+utils.addSlashes(n._help)+"\" data-bind=\"attr: { title: $root.ut('template', '"+utils.addSlashes(n._help)+"') }\"":"",m.length>0&&j.push("tooltips: {}");var I=j.length>0?'data-bind="'+utils.addSlashes(j.join())+'"':"";h+='
";var P=null!==n&&"undefined"!=typeof n._name?n._name:"undefined"!=typeof r?"["+r+"]":"";P=""+P+"",h+="'+P+"",h+='
',h+=_propInput(n,r,g,l,t),h+="
","undefined"!=typeof c&&(h+='
',h+=_propInput(n,r,c,l,t),h+="
",B&&(h+='
")),h+="
"}else h+=null===n||"object"!=typeof n?'
[A|'+r+"|"+typeof n+"]
":'
[B|'+r+"|"+typeof n+"]
"}return"undefined"!=typeof r&&p&&(h+="",h+="",h+='('+r+")",h+=""),h},createBlockEditor=function(e,t,o,n,i,a,r,l,s,d,u,c){"undefined"==typeof u&&(u=!0);var p,f=modelDef.getDef(e,a),b=modelDef.getDef(e,i);"undefined"!=typeof b._previewBindings&&"thaeme"!=a&&"styler"==r&&(p=elaborateDeclarations(void 0,b._previewBindings,n,modelDef.getBindValue.bind(void 0,e,o,i,i,"")));var m,g="undefined"!=typeof d&&d?e[a]._globalStyles:void 0,h="undefined"!=typeof d&&d?e[a]._globalStyle:void 0;if("undefined"!=typeof h){var v=modelDef.getDef(e,"theme");m=v[h.replace(/^(\$theme|_theme_)\./,"")]}var y=modelDef.getBindValue.bind(void 0,e,o,i,a);y._templateName=a;var k='
';k+='
'+f.type+"
";var w=_propEditor(y,t,n,f,m,"",void 0,r,c,s,g,h,u,p);w.length>0&&(k+=w),k+="
",l(k,a,r)},createBlockEditors=function(e,t,o,n,i,a,r,l){createBlockEditor(e,t,o,n,i,a,"edit",r,l),createBlockEditor(e,t,o,n,i,a,"styler",r,l,!0)},generateEditors=function(e,t,o,n,i){var a,r=e._defs,l=e.templateName,s=e._blocks,d=[];for(a=0;a0&&l.push(r[s]);t[o]=l}else"string"==typeof t[o]||"boolean"==typeof t[o]?t[o]=n:"object"==typeof t[o]&&null!==t[o]&&"undefined"!=typeof t[o]._widget?("object"==typeof n&&null!==n&&console.log("objectvalue",o,t[o]._widget,n),t[o]=n):console.log("setting",typeof t[o],t[o],o,n);else{var d=o.substr(0,i);_valueSet(e,t[d],o.substr(i+1),n)}},_modelCreateOrUpdateBlockDef=function(e,t,o,n){if("undefined"!=typeof e[t]&&e[t]._initialized&&!e[t]._writeable)throw console.log("_modelCreateOrUpdateBlockDef",e,t,o,n),"Trying to alter non writeable model: "+t+" / "+o;if("undefined"==typeof e[t]&&(e[t]={_writeable:!0},"undefined"==typeof n&&(n={}),"undefined"==typeof n.category&&"undefined"==typeof e[t]._category&&(n.category=t.match(/(^t|.T)heme$/)||t.match(/(^s|.S)tyle$/)||t.match(/(^c|.C)olor$/)||t.match(/(^r|.R)adius$/)?"style":"content")),"undefined"!=typeof n){if("undefined"!=typeof n.name&&(e[t]._name=n.name),"undefined"!=typeof n.themeOverride&&(e[t]._themeOverride=n.themeOverride),"undefined"!=typeof n.globalStyle){e[t]._globalStyle=n.globalStyle;var i=n.globalStyle.replace(/^(\$theme|_theme_)\./,""),r=i.indexOf("."),a=-1!=r?i.substr(0,r):i;_modelCreateOrUpdateBlockDef(e,"theme",a),("undefined"==typeof e[t]._themeOverride||e[t]._themeOverride)&&_modelCreateOrUpdateBlockDef(e,t,"customStyle=false")}"undefined"!=typeof n.contextName&&(e[t]._context=n.contextName,"block"==n.contextName&&"undefined"==typeof e[t]._globalStyle&&(e[t]._globalStyle="_theme_.bodyTheme",_modelCreateOrUpdateBlockDef(e,"theme","bodyTheme"),("undefined"==typeof e[t]._themeOverride||e[t]._themeOverride)&&_modelCreateOrUpdateBlockDef(e,t,"customStyle=false"))),"undefined"!=typeof n.extend&&(e[t].type=n.extend)}for(var l in n)n.hasOwnProperty(l)&&"undefined"!=typeof n[l]&&-1==["name","extend","contextName","globalStyle","themeOverride"].indexOf(l)&&(e[t]["_"+l]=n[l]);"undefined"!=typeof o&&o.length>0&&(e[t]._props="undefined"!=typeof e[t]._props&&e[t]._props.length>0?e[t]._props+" "+o:o)},_removePrefix=function(e){var t=e.match(/^[^A-Z]+([A-Z])(.*)$/);return null!==t?t[1].toLowerCase()+t[2]:null},_generateModelFromDef=function(e,t){var o={};for(var n in e)if(!n.match(/^_.*/)&&e.hasOwnProperty(n)){var i=e[n];if("object"==typeof i&&null!==i&&"undefined"!=typeof i._complex&&i._complex)o[n]=_generateModelFromDef(i,t);else if("type"==n)o[n]=i;else{if("object"!=typeof i)throw console.error("Unexpected model def",n,i,e),"Unexpected model def ["+n+"]="+i;o[n]=null}}if("undefined"!=typeof e._defaultValues){var r=e._defaultValues;for(var a in r)r.hasOwnProperty(a)&&_valueSet(t,o,a,r[a])}return o},_generateModel=function(e,t){var o=_getModelDef(e,t,!1,!0);return _generateModelFromDef(o,e)},_getDef=function(e,t){return _getModelDef(e,t,!1,!0)},_getModelDef=function(e,t,o,n){if("undefined"==typeof e[t]){if(-1!=t.indexOf(" "))return null;var i=_removePrefix(t);return null!==i?_getModelDef(e,i,o,n):null}var r=e[t];if("object"!=typeof r)throw"Block definition must be an object: found "+r+" for "+t;if("undefined"==typeof r._initialized){if("undefined"==typeof r.type&&(r.type=-1==t.indexOf(" ")?t:t.substr(t.indexOf(" ")+1)),r.type!=t&&"undefined"==typeof r._widget){var a=_getModelDef(e,r.type,!0),l=objExtend(a,r);r=l,e[t]=r}else"undefined"==typeof r._widget&&"undefined"==typeof r._props&&"undefined"==typeof r._complex;r._writeable=!0,r._initialized=!0}if("undefined"!=typeof r._props){var s=r._props;if(s=s.split(" "),s.length>0&&"undefined"==typeof r._writeable)throw console.error("Altering a non writable object ",t,s,r),"Altering a non writable object: "+t+" def: "+s;"undefined"==typeof r._processedDefs&&(r._processedDefs={}),"undefined"==typeof r._globalStyles&&(r._globalStyles={}),"undefined"==typeof r._defaultValues&&(r._defaultValues={});for(var d=0;d((?:(?!--)[\s\S])*?)/g,function(e,t,o){var n="";n+=o.replace(/<([A-Za-z:]+)/g,"/g,"").replace(/\/>/g,"/>"),n+="";var i='';return i+=$("
").append($(n)).html().replace(/^/,"").replace(/$/,""),i+=""})}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),console=require("./../../../bower_components/console-browserify/index.js"),converterUtils=require("./utils.js"),elaborateDeclarations=require("./declarations.js"),processStylesheetRules=require("./stylesheet.js"),modelDef=require("./model.js"),domutils=require("./domutils.js"),wrapElementWithCondition=function(e,t,o){var n=domutils.getAttribute(t,e);try{var i=converterUtils.conditionBinding(n,o);$(t).before(""),$(t).after(""),domutils.removeAttribute(t,e)}catch(r){throw console.warn("Model ensure path failed in if/variant",t,n,e),r}},replacedAttributes=function(e,t){domutils.setAttribute(e,t,domutils.getAttribute(e,"replaced"+t))},processStyle=function(e,t,o,n){var i,r=domutils.getAttribute(e,"replacedstyle"),a=null;n&&(i={uniqueId:"$data",attr:{id:"id"}});var l=null!==domutils.getAttribute(e,"data-ko-display");a=elaborateDeclarations(r,void 0,t,o,e,i,l),null===a?a=r:domutils.removeAttribute(e,"replacedstyle"),null!==a&&(a.trim().length>0?domutils.setAttribute(e,"style",a):domutils.removeAttribute(e,"style"))},_fixRelativePath=function(e,t,o,n){var i=domutils.getAttribute(n,e),r=t(i);null!==r&&domutils.setAttribute(n,e,r)},processBlock=function(e,t,o,n,i,r,a,l,s,d){try{var u;if("block"==r)u=domutils.getAttribute(e,"data-ko-block"),domutils.removeAttribute(e,"data-ko-block");else{if("template"!=r)throw"Unexpected context name while processing block: "+r;u=a}$("[data-ko-remove]",e).remove();for(var c=$("[data-ko-block]",e).replaceWith(""),f=["href","src","data-ko-placeholder-src","background"],p=0;p0&&(b+=" "),b+=domutils.getAttribute(t,"data-ko-properties"),domutils.removeAttribute(t,"data-ko-properties")}),modelDef.createOrUpdateBlockDef(t,u,b,{contextName:r});var g=modelDef.ensurePathAndGetBindValue.bind(void 0,t,o,a,u,"");"block"==r&&g("id",""),$("style",e).each(function(e,n){var r=domutils.getInnerHtml(n),l=modelDef.createOrUpdateBlockDef.bind(void 0,t),s=modelDef.ensurePathAndGetBindValue.bind(void 0,t,o,a),c=processStylesheetRules(r,void 0,s,l,o,i,a,u);if(c!=r)if(""!==c.trim()){var f=d(c);domutils.setAttribute(n,"data-bind","template: { name: '"+f+"' }"),domutils.setContent(n,"")}else domutils.removeElements($(n))}),processStyle(e,i,g,s);for(var h=["data-ko-display","data-ko-editable","data-ko-wrap","href"],v=0;v0){var u=s.substr(0,s.lastIndexOf("."));a=g(u)}else a=g(s);if(l="wysiwygClick: function(obj, evt) { $root.selectItem("+a+", $data); return false }, clickBubble: false, wysiwygCss: { selecteditem: $root.isSelectedItem("+a+") }, scrollIntoView: $root.isSelectedItem("+a+")","img"!=domutils.getLowerTagName(t)){n=domutils.getInnerHtml(t);var c=g(s,n,!0,"wysiwyg");if(o="",domutils.getAttribute(t,"id")||(o+="wysiwygId: id()+'_"+s.replace(".","_")+"', "),"undefined"!=typeof l&&(o+=l+", "),o+="wysiwygOrHtml: "+c,"td"==domutils.getLowerTagName(t)){var f=$('
')[0];domutils.setAttribute(f,"data-bind",o);var p=domutils.getInnerHtml($("
").append(f));domutils.setContent(t,p)}else i=domutils.getAttribute(t,"data-bind"),r=(null!==i?i+", ":"")+o,domutils.setAttribute(t,"data-bind",r),domutils.setContent(t,"");domutils.removeAttribute(t,"data-ko-editable")}else{var m=domutils.getAttribute(t,"width");if(""===m&&(m=null),null===m)throw console.error("ERROR: data-ko-editable images must declare a WIDTH attribute!",t),"ERROR: data-ko-editable images must declare a WIDTH attribute!";var b=domutils.getAttribute(t,"height");""===b&&(b=null);var h=domutils.getAttribute(t,"align");i=domutils.getAttribute(t,"data-bind");var v=i&&i.match(/virtualAttr: {[^}]* height: ([^,}]*)[,}]/);v&&(b=v[1]);var y=i&&i.match(/virtualAttr: {[^}]* width: ([^,}]*)[,}]/);y&&(m=y[1]);var k;n=domutils.getAttribute(t,"data-ko-placeholder-src");var w="";n?w=domutils.getAttribute(t,"src"):n=domutils.getAttribute(t,"src");var x;m&&b?x=m+"+'x'+"+b:b?m||(x="'h'+"+b+"+''"):x="'w'+"+m+"+''";var _,C=b||domutils.getAttribute(t,"data-ko-placeholder-height"),S=m||domutils.getAttribute(t,"data-ko-placeholder-width");if(domutils.removeAttribute(t,"src"),domutils.removeAttribute(t,"data-ko-editable"),domutils.removeAttribute(t,"data-ko-placeholder-height"),domutils.removeAttribute(t,"data-ko-placeholder-width"),domutils.removeAttribute(t,"data-ko-placeholder-src"),n&&(_="{ width: "+S+", height: "+C+", text: "+x+"}"),!S||!C)throw console.error("IMG data-ko-editable must declare width and height attributes, or their placeholder counterparts data-ko-placeholder-width/data-ko-placeholder-height",t),"ERROR: IMG data-ko-editable MUST declare width and height attributes, or their placeholder counterparts data-ko-placeholder-width/data-ko-placeholder-height";var O=g(s,w,!1,"wysiwyg");o="wysiwygSrc: { width: "+m+", height: "+b+", src: "+O+", placeholder: "+_+" }",r=(null!==i?i+", ":"")+o,domutils.setAttribute(t,"data-bind",r);var T=d(t),A="{ width: "+m;"left"==h?A+=", float: 'left'":"right"==h?A+=", float: 'right'":"center"==h?console.log("non so cosa fa align=center su una img e quindi non so come simularne l'editing"):"top"==h?A+=", verticalAlign: 'top'":"middle"==h?A+=", verticalAlign: 'middle'":"bottom"==h&&(A+=", verticalAlign: 'bottom'"),A+="}",$(t).before(""),$(t).after("")}}),$("[href]",e).each(function(e,t){var o=domutils.getAttribute(t,"href"),n="wysiwygHref: '"+converterUtils.addSlashes(o)+"'",i=domutils.getAttribute(t,"data-bind"),r=(null!==i?i+", ":"")+n;domutils.setAttribute(t,"data-bind",r)}),$("replacedblock",e).each(function(e,r){var s=c[e],f=processBlock(s,t,o,n,i,"block",u,l,!0,d),p=modelDef.ensurePathAndGetBindValue(t,o,a,u,"",f);$(r).before(""),$(r).after(""),$(r).remove()}),$($("[data-ko-wrap]",e).get().reverse(),e).each(function(e,t){var o=domutils.getAttribute(t,"data-ko-wrap");if("undefined"==typeof o||""===o||"true"===o)throw"Unsupported empty value for data-ko-wrap: use false value if you want to always remove the tag";var n,i,r=converterUtils.conditionBinding(o,g),a=domutils.getAttribute(t,"data-bind");if(""!==a&&null!==a&&a.match(/(block|wysiwygOrHtml):/)){var l=""+domutils.getInnerHtml(t)+"";n=d(l),domutils.removeAttribute(t,"data-ko-wrap"),i=d(t),domutils.replaceHtml(t,"")}else n=d(domutils.getInnerHtml(t)),domutils.removeAttribute(t,"data-ko-wrap"),domutils.setContent(t,""),i=d(t),domutils.replaceHtml(t,"")}),d(e,u,"show"),n(a,u,r,l),u}catch(k){throw console.error("Exception while parsing the template",k,e),k}},translateTemplate=function(e,t,o,n){var i={},r=conditional_replace(t.replace(/(<[^>]+\s)(style|http-equiv)(="[^"]*"[^>]*>)/gi,function(e,t,o,n){return t+"replaced"+o+n})),a=$(r),l=a[0],s=[],d=function(e,t,o,n){s.push({root:e,block:t,context:o,container:n})},u=function(e,t,o){if("undefined"==typeof i.themes&&(i.themes={}),"undefined"==typeof i.themes[e]&&(i.themes[e]={}),"undefined"==typeof i.themes[e][t]||null===i.themes[e][t])i.themes[e][t]=o;else if("undefined"!=typeof o&&null!==o){var n=i.themes[e][t];n!=o&&console.log("Error setting a new default for property "+t+" in theme "+e+". old:"+n+" new:"+o+"!")}},c=$("[data-ko-container]",a),f={};c.each(function(e,t){var o=domutils.getAttribute(t,"data-ko-container")+"Blocks";domutils.removeAttribute(t,"data-ko-container"),domutils.setAttribute(t,"data-bind","block: "+o);var n=$("> [data-ko-block]",t);domutils.removeElements(n,!0),f[o]=n}),modelDef.createOrUpdateBlockDef(i,"id"),modelDef.createOrUpdateBlockDef(i,"bodyTheme"),modelDef.createOrUpdateBlockDef(i,"blocks","blocks[]"),modelDef.createOrUpdateBlockDef(i,"text"),processBlock(l,i,u,d,o,"template",e,void 0,!1,n);var p=function(t,r,a){processBlock(a,i,u,d,o,"block",e,t,!0,n)};for(var m in f)if(f.hasOwnProperty(m)){var b=f[m],g=m;modelDef.ensurePathAndGetBindValue(i,u,e,e,"",g+".blocks","[]"),b.each(p.bind(void 0,g))}var h={_defs:i,templateName:e,_blocks:s};return"undefined"!=typeof i[e]._version&&(h.version=i[e]._version),h};module.exports=translateTemplate; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./../../../bower_components/console-browserify/index.js":1,"./declarations.js":50,"./domutils.js":51,"./model.js":54,"./stylesheet.js":56,"./utils.js":57}],56:[function(require,module,exports){ +"use strict";var cssParse=require("./../../../bower_components/mensch/lib/parser.js"),console=require("./../../../bower_components/console-browserify/index.js"),converterUtils=require("./utils.js"),elaborateDeclarations=require("./declarations.js"),_processStyleSheetRules_processBlockDef=function(e,t){for(var o,n,i,r=0;r=0;f--){if("supports"==t[f].type&&"-ko-blockdefs"==t[f].name)_processStyleSheetRules_processBlockDef(n,t[f].rules),s=converterUtils.removeStyle(s,t[f].position.start,d,0,0,0,"");else if("media"==t[f].type||"supports"==t[f].type)s=processStylesheetRules(s,t[f].rules,o,n,i,r,a,l);else if("comment"==t[f].type);else if("rule"==t[f].type){for(var p=t[f].selectors,b="",m=null,g=0;g0&&(b+=", ");var h=p[g].match(/\[data-ko-block=([^ ]*)\]/);if(null!==h){if(null!==m&&m!=h[1])throw"Found multiple block-match attribute selectors: cannot translate it ("+m+" vs "+h[1]+")";m=h[1]}b+=""+p[g]}if(m){var v="",y="",k=d,w=" ";t[f].declarations.length>0&&(t[f].declarations[0].position.start.line!=t[f].position.end.line&&(w="\n"+new Array(t[f].position.start.col).join(" ")),k=t[f].declarations[t[f].declarations.length-1].position.end),null===k?s+=w+y:s=k==d?converterUtils.removeStyle(s,k,d,0,0,0,w+y):converterUtils.removeStyle(s,k,d,0,0,0,w+"}"+w+y),b=v+w+b.replace(new RegExp("\\[data-ko-block="+m+"\\]","g"),""+m+""),n(m,"",{contextName:"block"})}var _=m?m:l;c=o.bind(this,_,"");var x=elaborateDeclarations(s,t[f].declarations,r,c);null!==x&&(s=x),s=converterUtils.removeStyle(s,t[f].position.start,t[f].position.end,0,0,0,b)}else console.log("Unknown rule type",t[f].type,"while parsing ');\n }\n }\n\n function handleRule(rule) {\n var sel = rule[0];\n var style = rule[1];\n var selector = new utils.Selector(sel);\n var parsedSelector = selector.parsed();\n var pseudoElementType = getPseudoElementType(parsedSelector);\n\n // skip rule if the selector has any pseudos which are ignored\n for (var i = 0; i < parsedSelector.length; ++i) {\n var subSel = parsedSelector[i];\n if (subSel.pseudos) {\n for (var j = 0; j < subSel.pseudos.length; ++j) {\n var subSelPseudo = subSel.pseudos[j];\n if (juiceClient.ignoredPseudos.indexOf(subSelPseudo.name) >= 0) {\n return;\n }\n }\n }\n }\n\n if (pseudoElementType) {\n var last = parsedSelector[parsedSelector.length - 1];\n var pseudos = last.pseudos;\n last.pseudos = filterElementPseudos(last.pseudos);\n sel = parsedSelector.toString();\n last.pseudos = pseudos;\n }\n\n var els;\n try {\n els = $(sel);\n } catch (err) {\n // skip invalid selector\n return;\n }\n\n els.each(function() {\n var el = this;\n\n if (el.name && juiceClient.nonVisualElements.indexOf(el.name.toUpperCase()) >= 0) {\n return;\n }\n\n if (pseudoElementType) {\n var pseudoElPropName = 'pseudo' + pseudoElementType;\n var pseudoEl = el[pseudoElPropName];\n if (!pseudoEl) {\n pseudoEl = el[pseudoElPropName] = $('').get(0);\n pseudoEl.pseudoElementType = pseudoElementType;\n pseudoEl.pseudoElementParent = el;\n el[pseudoElPropName] = pseudoEl;\n }\n el = pseudoEl;\n }\n\n if (!el.styleProps) {\n el.styleProps = {};\n\n // if the element has inline styles, fake selector with topmost specificity\n if ($(el).attr(styleAttributeName)) {\n var cssText = '* { ' + $(el).attr(styleAttributeName) + ' } ';\n addProps(utils.parseCSS(cssText)[0][1], new utils.Selector('").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this)); +return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s],this.document[0]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i],this.document[0]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tbody"===s?t._createTrPlaceholder(t.currentItem.find("tr").eq(0),e("
",t.document[0]).appendTo(n)):"tr"===s?t._createTrPlaceholder(t.currentItem,n):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_createTrPlaceholder:function(t,i){var s=this;t.children().each(function(){e("",s.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.leftthis.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.spinner",{version:"1.11.4",defaultElement:"",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""+""+""+""+""},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.4",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||t.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels; +this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("
").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o},h=function(e,t){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.done(function(e,t,n){setTimeout(function(){o.html(e),s._trigger("load",i,r),h(n,t)},1)}).fail(function(e,t){setTimeout(function(){h(e,t)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.4",options:{content:function(){var t=e(this).attr("title")||"";return e("").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("
").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(t,s),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){n._delay(function(){e.data("ui-tooltip-open")&&(t&&(t.type=a),this._open(t,e,i))})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,o.is(":hidden")||o.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr("id").find("[id]").removeAttr("id")):h=s,e("
").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger("open",t,{tooltip:o})}},_registerCloseHandlers:function(t,i){var s={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),t&&"mouseover"!==t.type||(s.mouseleave="close"),t&&"focusin"!==t.type||(s.focusout="close"),this._on(!0,i,s)},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);return a?(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(t){var i=e("
").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("
").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}})}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/jquery.fileupload-image.js b/public/mosaico/dist/vendor/jquery.fileupload-image.js new file mode 100644 index 00000000..439bda1b --- /dev/null +++ b/public/mosaico/dist/vendor/jquery.fileupload-image.js @@ -0,0 +1,324 @@ +/* + * jQuery File Upload Image Preview & Resize Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2013, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, require, window, Blob */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + 'load-image', + 'load-image-meta', + 'load-image-exif', + 'canvas-to-blob', + './jquery.fileupload-process' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory( + require('jquery'), + require('blueimp-load-image/js/load-image'), + require('blueimp-load-image/js/load-image-meta'), + require('blueimp-load-image/js/load-image-exif'), + require('blueimp-canvas-to-blob'), + require('./jquery.fileupload-process') + ); + } else { + // Browser globals: + factory( + window.jQuery, + window.loadImage + ); + } +}(function ($, loadImage) { + 'use strict'; + + // Prepend to the default processQueue: + $.blueimp.fileupload.prototype.options.processQueue.unshift( + { + action: 'loadImageMetaData', + disableImageHead: '@', + disableExif: '@', + disableExifThumbnail: '@', + disableExifSub: '@', + disableExifGps: '@', + disabled: '@disableImageMetaDataLoad' + }, + { + action: 'loadImage', + // Use the action as prefix for the "@" options: + prefix: true, + fileTypes: '@', + maxFileSize: '@', + noRevoke: '@', + disabled: '@disableImageLoad' + }, + { + action: 'resizeImage', + // Use "image" as prefix for the "@" options: + prefix: 'image', + maxWidth: '@', + maxHeight: '@', + minWidth: '@', + minHeight: '@', + crop: '@', + orientation: '@', + forceResize: '@', + disabled: '@disableImageResize' + }, + { + action: 'saveImage', + quality: '@imageQuality', + type: '@imageType', + disabled: '@disableImageResize' + }, + { + action: 'saveImageMetaData', + disabled: '@disableImageMetaDataSave' + }, + { + action: 'resizeImage', + // Use "preview" as prefix for the "@" options: + prefix: 'preview', + maxWidth: '@', + maxHeight: '@', + minWidth: '@', + minHeight: '@', + crop: '@', + orientation: '@', + thumbnail: '@', + canvas: '@', + disabled: '@disableImagePreview' + }, + { + action: 'setImage', + name: '@imagePreviewName', + disabled: '@disableImagePreview' + }, + { + action: 'deleteImageReferences', + disabled: '@disableImageReferencesDeletion' + } + ); + + // The File Upload Resize plugin extends the fileupload widget + // with image resize functionality: + $.widget('blueimp.fileupload', $.blueimp.fileupload, { + + options: { + // The regular expression for the types of images to load: + // matched against the file type: + loadImageFileTypes: /^image\/(gif|jpeg|png|svg\+xml)$/, + // The maximum file size of images to load: + loadImageMaxFileSize: 10000000, // 10MB + // The maximum width of resized images: + imageMaxWidth: 1920, + // The maximum height of resized images: + imageMaxHeight: 1080, + // Defines the image orientation (1-8) or takes the orientation + // value from Exif data if set to true: + imageOrientation: false, + // Define if resized images should be cropped or only scaled: + imageCrop: false, + // Disable the resize image functionality by default: + disableImageResize: true, + // The maximum width of the preview images: + previewMaxWidth: 80, + // The maximum height of the preview images: + previewMaxHeight: 80, + // Defines the preview orientation (1-8) or takes the orientation + // value from Exif data if set to true: + previewOrientation: true, + // Create the preview using the Exif data thumbnail: + previewThumbnail: true, + // Define if preview images should be cropped or only scaled: + previewCrop: false, + // Define if preview images should be resized as canvas elements: + previewCanvas: true + }, + + processActions: { + + // Loads the image given via data.files and data.index + // as img element, if the browser supports the File API. + // Accepts the options fileTypes (regular expression) + // and maxFileSize (integer) to limit the files to load: + loadImage: function (data, options) { + if (options.disabled) { + return data; + } + var that = this, + file = data.files[data.index], + dfd = $.Deferred(); + if (($.type(options.maxFileSize) === 'number' && + file.size > options.maxFileSize) || + (options.fileTypes && + !options.fileTypes.test(file.type)) || + !loadImage( + file, + function (img) { + if (img.src) { + data.img = img; + } + dfd.resolveWith(that, [data]); + }, + options + )) { + return data; + } + return dfd.promise(); + }, + + // Resizes the image given as data.canvas or data.img + // and updates data.canvas or data.img with the resized image. + // Also stores the resized image as preview property. + // Accepts the options maxWidth, maxHeight, minWidth, + // minHeight, canvas and crop: + resizeImage: function (data, options) { + if (options.disabled || !(data.canvas || data.img)) { + return data; + } + options = $.extend({canvas: true}, options); + var that = this, + dfd = $.Deferred(), + img = (options.canvas && data.canvas) || data.img, + resolve = function (newImg) { + if (newImg && (newImg.width !== img.width || + newImg.height !== img.height || + options.forceResize)) { + data[newImg.getContext ? 'canvas' : 'img'] = newImg; + } + data.preview = newImg; + dfd.resolveWith(that, [data]); + }, + thumbnail; + if (data.exif) { + if (options.orientation === true) { + options.orientation = data.exif.get('Orientation'); + } + if (options.thumbnail) { + thumbnail = data.exif.get('Thumbnail'); + if (thumbnail) { + loadImage(thumbnail, resolve, options); + return dfd.promise(); + } + } + // Prevent orienting the same image twice: + if (data.orientation) { + delete options.orientation; + } else { + data.orientation = options.orientation; + } + } + if (img) { + resolve(loadImage.scale(img, options)); + return dfd.promise(); + } + return data; + }, + + // Saves the processed image given as data.canvas + // inplace at data.index of data.files: + saveImage: function (data, options) { + if (!data.canvas || options.disabled) { + return data; + } + var that = this, + file = data.files[data.index], + dfd = $.Deferred(); + if (data.canvas.toBlob) { + data.canvas.toBlob( + function (blob) { + if (!blob.name) { + if (file.type === blob.type) { + blob.name = file.name; + } else if (file.name) { + blob.name = file.name.replace( + /\.\w+$/, + '.' + blob.type.substr(6) + ); + } + } + // Don't restore invalid meta data: + if (file.type !== blob.type) { + delete data.imageHead; + } + // Store the created blob at the position + // of the original file in the files list: + data.files[data.index] = blob; + dfd.resolveWith(that, [data]); + }, + options.type || file.type, + options.quality + ); + } else { + return data; + } + return dfd.promise(); + }, + + loadImageMetaData: function (data, options) { + if (options.disabled) { + return data; + } + var that = this, + dfd = $.Deferred(); + loadImage.parseMetaData(data.files[data.index], function (result) { + $.extend(data, result); + dfd.resolveWith(that, [data]); + }, options); + return dfd.promise(); + }, + + saveImageMetaData: function (data, options) { + if (!(data.imageHead && data.canvas && + data.canvas.toBlob && !options.disabled)) { + return data; + } + var file = data.files[data.index], + blob = new Blob([ + data.imageHead, + // Resized images always have a head size of 20 bytes, + // including the JPEG marker and a minimal JFIF header: + this._blobSlice.call(file, 20) + ], {type: file.type}); + blob.name = file.name; + data.files[data.index] = blob; + return data; + }, + + // Sets the resized version of the image as a property of the + // file object, must be called after "saveImage": + setImage: function (data, options) { + if (data.preview && !options.disabled) { + data.files[data.index][options.name || 'preview'] = data.preview; + } + return data; + }, + + deleteImageReferences: function (data, options) { + if (!options.disabled) { + delete data.img; + delete data.canvas; + delete data.preview; + delete data.imageHead; + } + return data; + } + + } + + }); + +})); diff --git a/public/mosaico/dist/vendor/jquery.fileupload-process.js b/public/mosaico/dist/vendor/jquery.fileupload-process.js new file mode 100644 index 00000000..ba09945c --- /dev/null +++ b/public/mosaico/dist/vendor/jquery.fileupload-process.js @@ -0,0 +1,175 @@ +/* + * jQuery File Upload Processing Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2012, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, require, window */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + './jquery.fileupload' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory(require('jquery')); + } else { + // Browser globals: + factory( + window.jQuery + ); + } +}(function ($) { + 'use strict'; + + var originalAdd = $.blueimp.fileupload.prototype.options.add; + + // The File Upload Processing plugin extends the fileupload widget + // with file processing functionality: + $.widget('blueimp.fileupload', $.blueimp.fileupload, { + + options: { + // The list of processing actions: + processQueue: [ + /* + { + action: 'log', + type: 'debug' + } + */ + ], + add: function (e, data) { + var $this = $(this); + data.process(function () { + return $this.fileupload('process', data); + }); + originalAdd.call(this, e, data); + } + }, + + processActions: { + /* + log: function (data, options) { + console[options.type]( + 'Processing "' + data.files[data.index].name + '"' + ); + } + */ + }, + + _processFile: function (data, originalData) { + var that = this, + dfd = $.Deferred().resolveWith(that, [data]), + chain = dfd.promise(); + this._trigger('process', null, data); + $.each(data.processQueue, function (i, settings) { + var func = function (data) { + if (originalData.errorThrown) { + return $.Deferred() + .rejectWith(that, [originalData]).promise(); + } + return that.processActions[settings.action].call( + that, + data, + settings + ); + }; + chain = chain.then(func, settings.always && func); + }); + chain + .done(function () { + that._trigger('processdone', null, data); + that._trigger('processalways', null, data); + }) + .fail(function () { + that._trigger('processfail', null, data); + that._trigger('processalways', null, data); + }); + return chain; + }, + + // Replaces the settings of each processQueue item that + // are strings starting with an "@", using the remaining + // substring as key for the option map, + // e.g. "@autoUpload" is replaced with options.autoUpload: + _transformProcessQueue: function (options) { + var processQueue = []; + $.each(options.processQueue, function () { + var settings = {}, + action = this.action, + prefix = this.prefix === true ? action : this.prefix; + $.each(this, function (key, value) { + if ($.type(value) === 'string' && + value.charAt(0) === '@') { + settings[key] = options[ + value.slice(1) || (prefix ? prefix + + key.charAt(0).toUpperCase() + key.slice(1) : key) + ]; + } else { + settings[key] = value; + } + + }); + processQueue.push(settings); + }); + options.processQueue = processQueue; + }, + + // Returns the number of files currently in the processsing queue: + processing: function () { + return this._processing; + }, + + // Processes the files given as files property of the data parameter, + // returns a Promise object that allows to bind callbacks: + process: function (data) { + var that = this, + options = $.extend({}, this.options, data); + if (options.processQueue && options.processQueue.length) { + this._transformProcessQueue(options); + if (this._processing === 0) { + this._trigger('processstart'); + } + $.each(data.files, function (index) { + var opts = index ? $.extend({}, options) : options, + func = function () { + if (data.errorThrown) { + return $.Deferred() + .rejectWith(that, [data]).promise(); + } + return that._processFile(opts, data); + }; + opts.index = index; + that._processing += 1; + that._processingQueue = that._processingQueue.then(func, func) + .always(function () { + that._processing -= 1; + if (that._processing === 0) { + that._trigger('processstop'); + } + }); + }); + } + return this._processingQueue; + }, + + _create: function () { + this._super(); + this._processing = 0; + this._processingQueue = $.Deferred().resolveWith(this) + .promise(); + } + + }); + +})); diff --git a/public/mosaico/dist/vendor/jquery.fileupload-validate.js b/public/mosaico/dist/vendor/jquery.fileupload-validate.js new file mode 100644 index 00000000..312256d5 --- /dev/null +++ b/public/mosaico/dist/vendor/jquery.fileupload-validate.js @@ -0,0 +1,122 @@ +/* + * jQuery File Upload Validation Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2013, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +/* global define, require, window */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + './jquery.fileupload-process' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory(require('jquery')); + } else { + // Browser globals: + factory( + window.jQuery + ); + } +}(function ($) { + 'use strict'; + + // Append to the default processQueue: + $.blueimp.fileupload.prototype.options.processQueue.push( + { + action: 'validate', + // Always trigger this action, + // even if the previous action was rejected: + always: true, + // Options taken from the global options map: + acceptFileTypes: '@', + maxFileSize: '@', + minFileSize: '@', + maxNumberOfFiles: '@', + disabled: '@disableValidation' + } + ); + + // The File Upload Validation plugin extends the fileupload widget + // with file validation functionality: + $.widget('blueimp.fileupload', $.blueimp.fileupload, { + + options: { + /* + // The regular expression for allowed file types, matches + // against either file type or file name: + acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, + // The maximum allowed file size in bytes: + maxFileSize: 10000000, // 10 MB + // The minimum allowed file size in bytes: + minFileSize: undefined, // No minimal file size + // The limit of files to be uploaded: + maxNumberOfFiles: 10, + */ + + // Function returning the current number of files, + // has to be overriden for maxNumberOfFiles validation: + getNumberOfFiles: $.noop, + + // Error and info messages: + messages: { + maxNumberOfFiles: 'Maximum number of files exceeded', + acceptFileTypes: 'File type not allowed', + maxFileSize: 'File is too large', + minFileSize: 'File is too small' + } + }, + + processActions: { + + validate: function (data, options) { + if (options.disabled) { + return data; + } + var dfd = $.Deferred(), + settings = this.options, + file = data.files[data.index], + fileSize; + if (options.minFileSize || options.maxFileSize) { + fileSize = file.size; + } + if ($.type(options.maxNumberOfFiles) === 'number' && + (settings.getNumberOfFiles() || 0) + data.files.length > + options.maxNumberOfFiles) { + file.error = settings.i18n('maxNumberOfFiles'); + } else if (options.acceptFileTypes && + !(options.acceptFileTypes.test(file.type) || + options.acceptFileTypes.test(file.name))) { + file.error = settings.i18n('acceptFileTypes'); + } else if (fileSize > options.maxFileSize) { + file.error = settings.i18n('maxFileSize'); + } else if ($.type(fileSize) === 'number' && + fileSize < options.minFileSize) { + file.error = settings.i18n('minFileSize'); + } else { + delete file.error; + } + if (file.error || data.files.error) { + data.files.error = true; + dfd.rejectWith(this, [data]); + } else { + dfd.resolveWith(this, [data]); + } + return dfd.promise(); + } + + } + + }); + +})); diff --git a/public/mosaico/dist/vendor/jquery.fileupload.js b/public/mosaico/dist/vendor/jquery.fileupload.js new file mode 100644 index 00000000..4d41f1e9 --- /dev/null +++ b/public/mosaico/dist/vendor/jquery.fileupload.js @@ -0,0 +1,1482 @@ +/* + * jQuery File Upload Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2010, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +/* jshint nomen:false */ +/* global define, require, window, document, location, Blob, FormData */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define([ + 'jquery', + 'jquery-ui/widget' + ], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory( + require('jquery'), + require('./vendor/jquery.ui.widget') + ); + } else { + // Browser globals: + factory(window.jQuery); + } +}(function ($) { + 'use strict'; + + // Detect file input support, based on + // http://viljamis.com/blog/2012/file-upload-support-on-mobile/ + $.support.fileInput = !(new RegExp( + // Handle devices which give false positives for the feature detection: + '(Android (1\\.[0156]|2\\.[01]))' + + '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' + + '|(w(eb)?OSBrowser)|(webOS)' + + '|(Kindle/(1\\.0|2\\.[05]|3\\.0))' + ).test(window.navigator.userAgent) || + // Feature detection for all other devices: + $('').prop('disabled')); + + // The FileReader API is not actually used, but works as feature detection, + // as some Safari versions (5?) support XHR file uploads via the FormData API, + // but not non-multipart XHR file uploads. + // window.XMLHttpRequestUpload is not available on IE10, so we check for + // window.ProgressEvent instead to detect XHR2 file upload capability: + $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader); + $.support.xhrFormDataFileUpload = !!window.FormData; + + // Detect support for Blob slicing (required for chunked uploads): + $.support.blobSlice = window.Blob && (Blob.prototype.slice || + Blob.prototype.webkitSlice || Blob.prototype.mozSlice); + + // Helper function to create drag handlers for dragover/dragenter/dragleave: + function getDragHandler(type) { + var isDragOver = type === 'dragover'; + return function (e) { + e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; + var dataTransfer = e.dataTransfer; + if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 && + this._trigger( + type, + $.Event(type, {delegatedEvent: e}) + ) !== false) { + e.preventDefault(); + if (isDragOver) { + dataTransfer.dropEffect = 'copy'; + } + } + }; + } + + // The fileupload widget listens for change events on file input fields defined + // via fileInput setting and paste or drop events of the given dropZone. + // In addition to the default jQuery Widget methods, the fileupload widget + // exposes the "add" and "send" methods, to add or directly send files using + // the fileupload API. + // By default, files added via file input selection, paste, drag & drop or + // "add" method are uploaded immediately, but it is possible to override + // the "add" callback option to queue file uploads. + $.widget('blueimp.fileupload', { + + options: { + // The drop target element(s), by the default the complete document. + // Set to null to disable drag & drop support: + dropZone: $(document), + // The paste target element(s), by the default undefined. + // Set to a DOM node or jQuery object to enable file pasting: + pasteZone: undefined, + // The file input field(s), that are listened to for change events. + // If undefined, it is set to the file input fields inside + // of the widget element on plugin initialization. + // Set to null to disable the change listener. + fileInput: undefined, + // By default, the file input field is replaced with a clone after + // each input field change event. This is required for iframe transport + // queues and allows change events to be fired for the same file + // selection, but can be disabled by setting the following option to false: + replaceFileInput: true, + // The parameter name for the file form data (the request argument name). + // If undefined or empty, the name property of the file input field is + // used, or "files[]" if the file input name property is also empty, + // can be a string or an array of strings: + paramName: undefined, + // By default, each file of a selection is uploaded using an individual + // request for XHR type uploads. Set to false to upload file + // selections in one request each: + singleFileUploads: true, + // To limit the number of files uploaded with one XHR request, + // set the following option to an integer greater than 0: + limitMultiFileUploads: undefined, + // The following option limits the number of files uploaded with one + // XHR request to keep the request size under or equal to the defined + // limit in bytes: + limitMultiFileUploadSize: undefined, + // Multipart file uploads add a number of bytes to each uploaded file, + // therefore the following option adds an overhead for each file used + // in the limitMultiFileUploadSize configuration: + limitMultiFileUploadSizeOverhead: 512, + // Set the following option to true to issue all file upload requests + // in a sequential order: + sequentialUploads: false, + // To limit the number of concurrent uploads, + // set the following option to an integer greater than 0: + limitConcurrentUploads: undefined, + // Set the following option to true to force iframe transport uploads: + forceIframeTransport: false, + // Set the following option to the location of a redirect url on the + // origin server, for cross-domain iframe transport uploads: + redirect: undefined, + // The parameter name for the redirect url, sent as part of the form + // data and set to 'redirect' if this option is empty: + redirectParamName: undefined, + // Set the following option to the location of a postMessage window, + // to enable postMessage transport uploads: + postMessage: undefined, + // By default, XHR file uploads are sent as multipart/form-data. + // The iframe transport is always using multipart/form-data. + // Set to false to enable non-multipart XHR uploads: + multipart: true, + // To upload large files in smaller chunks, set the following option + // to a preferred maximum chunk size. If set to 0, null or undefined, + // or the browser does not support the required Blob API, files will + // be uploaded as a whole. + maxChunkSize: undefined, + // When a non-multipart upload or a chunked multipart upload has been + // aborted, this option can be used to resume the upload by setting + // it to the size of the already uploaded bytes. This option is most + // useful when modifying the options object inside of the "add" or + // "send" callbacks, as the options are cloned for each file upload. + uploadedBytes: undefined, + // By default, failed (abort or error) file uploads are removed from the + // global progress calculation. Set the following option to false to + // prevent recalculating the global progress data: + recalculateProgress: true, + // Interval in milliseconds to calculate and trigger progress events: + progressInterval: 100, + // Interval in milliseconds to calculate progress bitrate: + bitrateInterval: 500, + // By default, uploads are started automatically when adding files: + autoUpload: true, + + // Error and info messages: + messages: { + uploadedBytes: 'Uploaded bytes exceed file size' + }, + + // Translation function, gets the message key to be translated + // and an object with context specific data as arguments: + i18n: function (message, context) { + message = this.messages[message] || message.toString(); + if (context) { + $.each(context, function (key, value) { + message = message.replace('{' + key + '}', value); + }); + } + return message; + }, + + // Additional form data to be sent along with the file uploads can be set + // using this option, which accepts an array of objects with name and + // value properties, a function returning such an array, a FormData + // object (for XHR file uploads), or a simple object. + // The form of the first fileInput is given as parameter to the function: + formData: function (form) { + return form.serializeArray(); + }, + + // The add callback is invoked as soon as files are added to the fileupload + // widget (via file input selection, drag & drop, paste or add API call). + // If the singleFileUploads option is enabled, this callback will be + // called once for each file in the selection for XHR file uploads, else + // once for each file selection. + // + // The upload starts when the submit method is invoked on the data parameter. + // The data object contains a files property holding the added files + // and allows you to override plugin options as well as define ajax settings. + // + // Listeners for this callback can also be bound the following way: + // .bind('fileuploadadd', func); + // + // data.submit() returns a Promise object and allows to attach additional + // handlers using jQuery's Deferred callbacks: + // data.submit().done(func).fail(func).always(func); + add: function (e, data) { + if (e.isDefaultPrevented()) { + return false; + } + if (data.autoUpload || (data.autoUpload !== false && + $(this).fileupload('option', 'autoUpload'))) { + data.process().done(function () { + data.submit(); + }); + } + }, + + // Other callbacks: + + // Callback for the submit event of each file upload: + // submit: function (e, data) {}, // .bind('fileuploadsubmit', func); + + // Callback for the start of each file upload request: + // send: function (e, data) {}, // .bind('fileuploadsend', func); + + // Callback for successful uploads: + // done: function (e, data) {}, // .bind('fileuploaddone', func); + + // Callback for failed (abort or error) uploads: + // fail: function (e, data) {}, // .bind('fileuploadfail', func); + + // Callback for completed (success, abort or error) requests: + // always: function (e, data) {}, // .bind('fileuploadalways', func); + + // Callback for upload progress events: + // progress: function (e, data) {}, // .bind('fileuploadprogress', func); + + // Callback for global upload progress events: + // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func); + + // Callback for uploads start, equivalent to the global ajaxStart event: + // start: function (e) {}, // .bind('fileuploadstart', func); + + // Callback for uploads stop, equivalent to the global ajaxStop event: + // stop: function (e) {}, // .bind('fileuploadstop', func); + + // Callback for change events of the fileInput(s): + // change: function (e, data) {}, // .bind('fileuploadchange', func); + + // Callback for paste events to the pasteZone(s): + // paste: function (e, data) {}, // .bind('fileuploadpaste', func); + + // Callback for drop events of the dropZone(s): + // drop: function (e, data) {}, // .bind('fileuploaddrop', func); + + // Callback for dragover events of the dropZone(s): + // dragover: function (e) {}, // .bind('fileuploaddragover', func); + + // Callback for the start of each chunk upload request: + // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func); + + // Callback for successful chunk uploads: + // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func); + + // Callback for failed (abort or error) chunk uploads: + // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func); + + // Callback for completed (success, abort or error) chunk upload requests: + // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func); + + // The plugin options are used as settings object for the ajax calls. + // The following are jQuery ajax settings required for the file uploads: + processData: false, + contentType: false, + cache: false, + timeout: 0 + }, + + // A list of options that require reinitializing event listeners and/or + // special initialization code: + _specialOptions: [ + 'fileInput', + 'dropZone', + 'pasteZone', + 'multipart', + 'forceIframeTransport' + ], + + _blobSlice: $.support.blobSlice && function () { + var slice = this.slice || this.webkitSlice || this.mozSlice; + return slice.apply(this, arguments); + }, + + _BitrateTimer: function () { + this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime()); + this.loaded = 0; + this.bitrate = 0; + this.getBitrate = function (now, loaded, interval) { + var timeDiff = now - this.timestamp; + if (!this.bitrate || !interval || timeDiff > interval) { + this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8; + this.loaded = loaded; + this.timestamp = now; + } + return this.bitrate; + }; + }, + + _isXHRUpload: function (options) { + return !options.forceIframeTransport && + ((!options.multipart && $.support.xhrFileUpload) || + $.support.xhrFormDataFileUpload); + }, + + _getFormData: function (options) { + var formData; + if ($.type(options.formData) === 'function') { + return options.formData(options.form); + } + if ($.isArray(options.formData)) { + return options.formData; + } + if ($.type(options.formData) === 'object') { + formData = []; + $.each(options.formData, function (name, value) { + formData.push({name: name, value: value}); + }); + return formData; + } + return []; + }, + + _getTotal: function (files) { + var total = 0; + $.each(files, function (index, file) { + total += file.size || 1; + }); + return total; + }, + + _initProgressObject: function (obj) { + var progress = { + loaded: 0, + total: 0, + bitrate: 0 + }; + if (obj._progress) { + $.extend(obj._progress, progress); + } else { + obj._progress = progress; + } + }, + + _initResponseObject: function (obj) { + var prop; + if (obj._response) { + for (prop in obj._response) { + if (obj._response.hasOwnProperty(prop)) { + delete obj._response[prop]; + } + } + } else { + obj._response = {}; + } + }, + + _onProgress: function (e, data) { + if (e.lengthComputable) { + var now = ((Date.now) ? Date.now() : (new Date()).getTime()), + loaded; + if (data._time && data.progressInterval && + (now - data._time < data.progressInterval) && + e.loaded !== e.total) { + return; + } + data._time = now; + loaded = Math.floor( + e.loaded / e.total * (data.chunkSize || data._progress.total) + ) + (data.uploadedBytes || 0); + // Add the difference from the previously loaded state + // to the global loaded counter: + this._progress.loaded += (loaded - data._progress.loaded); + this._progress.bitrate = this._bitrateTimer.getBitrate( + now, + this._progress.loaded, + data.bitrateInterval + ); + data._progress.loaded = data.loaded = loaded; + data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate( + now, + loaded, + data.bitrateInterval + ); + // Trigger a custom progress event with a total data property set + // to the file size(s) of the current upload and a loaded data + // property calculated accordingly: + this._trigger( + 'progress', + $.Event('progress', {delegatedEvent: e}), + data + ); + // Trigger a global progress event for all current file uploads, + // including ajax calls queued for sequential file uploads: + this._trigger( + 'progressall', + $.Event('progressall', {delegatedEvent: e}), + this._progress + ); + } + }, + + _initProgressListener: function (options) { + var that = this, + xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr(); + // Accesss to the native XHR object is required to add event listeners + // for the upload progress event: + if (xhr.upload) { + $(xhr.upload).bind('progress', function (e) { + var oe = e.originalEvent; + // Make sure the progress event properties get copied over: + e.lengthComputable = oe.lengthComputable; + e.loaded = oe.loaded; + e.total = oe.total; + that._onProgress(e, options); + }); + options.xhr = function () { + return xhr; + }; + } + }, + + _isInstanceOf: function (type, obj) { + // Cross-frame instanceof check + return Object.prototype.toString.call(obj) === '[object ' + type + ']'; + }, + + _initXHRData: function (options) { + var that = this, + formData, + file = options.files[0], + // Ignore non-multipart setting if not supported: + multipart = options.multipart || !$.support.xhrFileUpload, + paramName = $.type(options.paramName) === 'array' ? + options.paramName[0] : options.paramName; + options.headers = $.extend({}, options.headers); + if (options.contentRange) { + options.headers['Content-Range'] = options.contentRange; + } + if (!multipart || options.blob || !this._isInstanceOf('File', file)) { + options.headers['Content-Disposition'] = 'attachment; filename="' + + encodeURI(file.name) + '"'; + } + if (!multipart) { + options.contentType = file.type || 'application/octet-stream'; + options.data = options.blob || file; + } else if ($.support.xhrFormDataFileUpload) { + if (options.postMessage) { + // window.postMessage does not allow sending FormData + // objects, so we just add the File/Blob objects to + // the formData array and let the postMessage window + // create the FormData object out of this array: + formData = this._getFormData(options); + if (options.blob) { + formData.push({ + name: paramName, + value: options.blob + }); + } else { + $.each(options.files, function (index, file) { + formData.push({ + name: ($.type(options.paramName) === 'array' && + options.paramName[index]) || paramName, + value: file + }); + }); + } + } else { + if (that._isInstanceOf('FormData', options.formData)) { + formData = options.formData; + } else { + formData = new FormData(); + $.each(this._getFormData(options), function (index, field) { + formData.append(field.name, field.value); + }); + } + if (options.blob) { + formData.append(paramName, options.blob, file.name); + } else { + $.each(options.files, function (index, file) { + // This check allows the tests to run with + // dummy objects: + if (that._isInstanceOf('File', file) || + that._isInstanceOf('Blob', file)) { + formData.append( + ($.type(options.paramName) === 'array' && + options.paramName[index]) || paramName, + file, + file.uploadName || file.name + ); + } + }); + } + } + options.data = formData; + } + // Blob reference is not needed anymore, free memory: + options.blob = null; + }, + + _initIframeSettings: function (options) { + var targetHost = $('').prop('href', options.url).prop('host'); + // Setting the dataType to iframe enables the iframe transport: + options.dataType = 'iframe ' + (options.dataType || ''); + // The iframe transport accepts a serialized array as form data: + options.formData = this._getFormData(options); + // Add redirect url to form data on cross-domain uploads: + if (options.redirect && targetHost && targetHost !== location.host) { + options.formData.push({ + name: options.redirectParamName || 'redirect', + value: options.redirect + }); + } + }, + + _initDataSettings: function (options) { + if (this._isXHRUpload(options)) { + if (!this._chunkedUpload(options, true)) { + if (!options.data) { + this._initXHRData(options); + } + this._initProgressListener(options); + } + if (options.postMessage) { + // Setting the dataType to postmessage enables the + // postMessage transport: + options.dataType = 'postmessage ' + (options.dataType || ''); + } + } else { + this._initIframeSettings(options); + } + }, + + _getParamName: function (options) { + var fileInput = $(options.fileInput), + paramName = options.paramName; + if (!paramName) { + paramName = []; + fileInput.each(function () { + var input = $(this), + name = input.prop('name') || 'files[]', + i = (input.prop('files') || [1]).length; + while (i) { + paramName.push(name); + i -= 1; + } + }); + if (!paramName.length) { + paramName = [fileInput.prop('name') || 'files[]']; + } + } else if (!$.isArray(paramName)) { + paramName = [paramName]; + } + return paramName; + }, + + _initFormSettings: function (options) { + // Retrieve missing options from the input field and the + // associated form, if available: + if (!options.form || !options.form.length) { + options.form = $(options.fileInput.prop('form')); + // If the given file input doesn't have an associated form, + // use the default widget file input's form: + if (!options.form.length) { + options.form = $(this.options.fileInput.prop('form')); + } + } + options.paramName = this._getParamName(options); + if (!options.url) { + options.url = options.form.prop('action') || location.href; + } + // The HTTP request method must be "POST" or "PUT": + options.type = (options.type || + ($.type(options.form.prop('method')) === 'string' && + options.form.prop('method')) || '' + ).toUpperCase(); + if (options.type !== 'POST' && options.type !== 'PUT' && + options.type !== 'PATCH') { + options.type = 'POST'; + } + if (!options.formAcceptCharset) { + options.formAcceptCharset = options.form.attr('accept-charset'); + } + }, + + _getAJAXSettings: function (data) { + var options = $.extend({}, this.options, data); + this._initFormSettings(options); + this._initDataSettings(options); + return options; + }, + + // jQuery 1.6 doesn't provide .state(), + // while jQuery 1.8+ removed .isRejected() and .isResolved(): + _getDeferredState: function (deferred) { + if (deferred.state) { + return deferred.state(); + } + if (deferred.isResolved()) { + return 'resolved'; + } + if (deferred.isRejected()) { + return 'rejected'; + } + return 'pending'; + }, + + // Maps jqXHR callbacks to the equivalent + // methods of the given Promise object: + _enhancePromise: function (promise) { + promise.success = promise.done; + promise.error = promise.fail; + promise.complete = promise.always; + return promise; + }, + + // Creates and returns a Promise object enhanced with + // the jqXHR methods abort, success, error and complete: + _getXHRPromise: function (resolveOrReject, context, args) { + var dfd = $.Deferred(), + promise = dfd.promise(); + context = context || this.options.context || promise; + if (resolveOrReject === true) { + dfd.resolveWith(context, args); + } else if (resolveOrReject === false) { + dfd.rejectWith(context, args); + } + promise.abort = dfd.promise; + return this._enhancePromise(promise); + }, + + // Adds convenience methods to the data callback argument: + _addConvenienceMethods: function (e, data) { + var that = this, + getPromise = function (args) { + return $.Deferred().resolveWith(that, args).promise(); + }; + data.process = function (resolveFunc, rejectFunc) { + if (resolveFunc || rejectFunc) { + data._processQueue = this._processQueue = + (this._processQueue || getPromise([this])).then( + function () { + if (data.errorThrown) { + return $.Deferred() + .rejectWith(that, [data]).promise(); + } + return getPromise(arguments); + } + ).then(resolveFunc, rejectFunc); + } + return this._processQueue || getPromise([this]); + }; + data.submit = function () { + if (this.state() !== 'pending') { + data.jqXHR = this.jqXHR = + (that._trigger( + 'submit', + $.Event('submit', {delegatedEvent: e}), + this + ) !== false) && that._onSend(e, this); + } + return this.jqXHR || that._getXHRPromise(); + }; + data.abort = function () { + if (this.jqXHR) { + return this.jqXHR.abort(); + } + this.errorThrown = 'abort'; + that._trigger('fail', null, this); + return that._getXHRPromise(false); + }; + data.state = function () { + if (this.jqXHR) { + return that._getDeferredState(this.jqXHR); + } + if (this._processQueue) { + return that._getDeferredState(this._processQueue); + } + }; + data.processing = function () { + return !this.jqXHR && this._processQueue && that + ._getDeferredState(this._processQueue) === 'pending'; + }; + data.progress = function () { + return this._progress; + }; + data.response = function () { + return this._response; + }; + }, + + // Parses the Range header from the server response + // and returns the uploaded bytes: + _getUploadedBytes: function (jqXHR) { + var range = jqXHR.getResponseHeader('Range'), + parts = range && range.split('-'), + upperBytesPos = parts && parts.length > 1 && + parseInt(parts[1], 10); + return upperBytesPos && upperBytesPos + 1; + }, + + // Uploads a file in multiple, sequential requests + // by splitting the file up in multiple blob chunks. + // If the second parameter is true, only tests if the file + // should be uploaded in chunks, but does not invoke any + // upload requests: + _chunkedUpload: function (options, testOnly) { + options.uploadedBytes = options.uploadedBytes || 0; + var that = this, + file = options.files[0], + fs = file.size, + ub = options.uploadedBytes, + mcs = options.maxChunkSize || fs, + slice = this._blobSlice, + dfd = $.Deferred(), + promise = dfd.promise(), + jqXHR, + upload; + if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) || + options.data) { + return false; + } + if (testOnly) { + return true; + } + if (ub >= fs) { + file.error = options.i18n('uploadedBytes'); + return this._getXHRPromise( + false, + options.context, + [null, 'error', file.error] + ); + } + // The chunk upload method: + upload = function () { + // Clone the options object for each chunk upload: + var o = $.extend({}, options), + currentLoaded = o._progress.loaded; + o.blob = slice.call( + file, + ub, + ub + mcs, + file.type + ); + // Store the current chunk size, as the blob itself + // will be dereferenced after data processing: + o.chunkSize = o.blob.size; + // Expose the chunk bytes position range: + o.contentRange = 'bytes ' + ub + '-' + + (ub + o.chunkSize - 1) + '/' + fs; + // Process the upload data (the blob and potential form data): + that._initXHRData(o); + // Add progress listeners for this chunk upload: + that._initProgressListener(o); + jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) || + that._getXHRPromise(false, o.context)) + .done(function (result, textStatus, jqXHR) { + ub = that._getUploadedBytes(jqXHR) || + (ub + o.chunkSize); + // Create a progress event if no final progress event + // with loaded equaling total has been triggered + // for this chunk: + if (currentLoaded + o.chunkSize - o._progress.loaded) { + that._onProgress($.Event('progress', { + lengthComputable: true, + loaded: ub - o.uploadedBytes, + total: ub - o.uploadedBytes + }), o); + } + options.uploadedBytes = o.uploadedBytes = ub; + o.result = result; + o.textStatus = textStatus; + o.jqXHR = jqXHR; + that._trigger('chunkdone', null, o); + that._trigger('chunkalways', null, o); + if (ub < fs) { + // File upload not yet complete, + // continue with the next chunk: + upload(); + } else { + dfd.resolveWith( + o.context, + [result, textStatus, jqXHR] + ); + } + }) + .fail(function (jqXHR, textStatus, errorThrown) { + o.jqXHR = jqXHR; + o.textStatus = textStatus; + o.errorThrown = errorThrown; + that._trigger('chunkfail', null, o); + that._trigger('chunkalways', null, o); + dfd.rejectWith( + o.context, + [jqXHR, textStatus, errorThrown] + ); + }); + }; + this._enhancePromise(promise); + promise.abort = function () { + return jqXHR.abort(); + }; + upload(); + return promise; + }, + + _beforeSend: function (e, data) { + if (this._active === 0) { + // the start callback is triggered when an upload starts + // and no other uploads are currently running, + // equivalent to the global ajaxStart event: + this._trigger('start'); + // Set timer for global bitrate progress calculation: + this._bitrateTimer = new this._BitrateTimer(); + // Reset the global progress values: + this._progress.loaded = this._progress.total = 0; + this._progress.bitrate = 0; + } + // Make sure the container objects for the .response() and + // .progress() methods on the data object are available + // and reset to their initial state: + this._initResponseObject(data); + this._initProgressObject(data); + data._progress.loaded = data.loaded = data.uploadedBytes || 0; + data._progress.total = data.total = this._getTotal(data.files) || 1; + data._progress.bitrate = data.bitrate = 0; + this._active += 1; + // Initialize the global progress values: + this._progress.loaded += data.loaded; + this._progress.total += data.total; + }, + + _onDone: function (result, textStatus, jqXHR, options) { + var total = options._progress.total, + response = options._response; + if (options._progress.loaded < total) { + // Create a progress event if no final progress event + // with loaded equaling total has been triggered: + this._onProgress($.Event('progress', { + lengthComputable: true, + loaded: total, + total: total + }), options); + } + response.result = options.result = result; + response.textStatus = options.textStatus = textStatus; + response.jqXHR = options.jqXHR = jqXHR; + this._trigger('done', null, options); + }, + + _onFail: function (jqXHR, textStatus, errorThrown, options) { + var response = options._response; + if (options.recalculateProgress) { + // Remove the failed (error or abort) file upload from + // the global progress calculation: + this._progress.loaded -= options._progress.loaded; + this._progress.total -= options._progress.total; + } + response.jqXHR = options.jqXHR = jqXHR; + response.textStatus = options.textStatus = textStatus; + response.errorThrown = options.errorThrown = errorThrown; + this._trigger('fail', null, options); + }, + + _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) { + // jqXHRorResult, textStatus and jqXHRorError are added to the + // options object via done and fail callbacks + this._trigger('always', null, options); + }, + + _onSend: function (e, data) { + if (!data.submit) { + this._addConvenienceMethods(e, data); + } + var that = this, + jqXHR, + aborted, + slot, + pipe, + options = that._getAJAXSettings(data), + send = function () { + that._sending += 1; + // Set timer for bitrate progress calculation: + options._bitrateTimer = new that._BitrateTimer(); + jqXHR = jqXHR || ( + ((aborted || that._trigger( + 'send', + $.Event('send', {delegatedEvent: e}), + options + ) === false) && + that._getXHRPromise(false, options.context, aborted)) || + that._chunkedUpload(options) || $.ajax(options) + ).done(function (result, textStatus, jqXHR) { + that._onDone(result, textStatus, jqXHR, options); + }).fail(function (jqXHR, textStatus, errorThrown) { + that._onFail(jqXHR, textStatus, errorThrown, options); + }).always(function (jqXHRorResult, textStatus, jqXHRorError) { + that._onAlways( + jqXHRorResult, + textStatus, + jqXHRorError, + options + ); + that._sending -= 1; + that._active -= 1; + if (options.limitConcurrentUploads && + options.limitConcurrentUploads > that._sending) { + // Start the next queued upload, + // that has not been aborted: + var nextSlot = that._slots.shift(); + while (nextSlot) { + if (that._getDeferredState(nextSlot) === 'pending') { + nextSlot.resolve(); + break; + } + nextSlot = that._slots.shift(); + } + } + if (that._active === 0) { + // The stop callback is triggered when all uploads have + // been completed, equivalent to the global ajaxStop event: + that._trigger('stop'); + } + }); + return jqXHR; + }; + this._beforeSend(e, options); + if (this.options.sequentialUploads || + (this.options.limitConcurrentUploads && + this.options.limitConcurrentUploads <= this._sending)) { + if (this.options.limitConcurrentUploads > 1) { + slot = $.Deferred(); + this._slots.push(slot); + pipe = slot.then(send); + } else { + this._sequence = this._sequence.then(send, send); + pipe = this._sequence; + } + // Return the piped Promise object, enhanced with an abort method, + // which is delegated to the jqXHR object of the current upload, + // and jqXHR callbacks mapped to the equivalent Promise methods: + pipe.abort = function () { + aborted = [undefined, 'abort', 'abort']; + if (!jqXHR) { + if (slot) { + slot.rejectWith(options.context, aborted); + } + return send(); + } + return jqXHR.abort(); + }; + return this._enhancePromise(pipe); + } + return send(); + }, + + _onAdd: function (e, data) { + var that = this, + result = true, + options = $.extend({}, this.options, data), + files = data.files, + filesLength = files.length, + limit = options.limitMultiFileUploads, + limitSize = options.limitMultiFileUploadSize, + overhead = options.limitMultiFileUploadSizeOverhead, + batchSize = 0, + paramName = this._getParamName(options), + paramNameSet, + paramNameSlice, + fileSet, + i, + j = 0; + if (!filesLength) { + return false; + } + if (limitSize && files[0].size === undefined) { + limitSize = undefined; + } + if (!(options.singleFileUploads || limit || limitSize) || + !this._isXHRUpload(options)) { + fileSet = [files]; + paramNameSet = [paramName]; + } else if (!(options.singleFileUploads || limitSize) && limit) { + fileSet = []; + paramNameSet = []; + for (i = 0; i < filesLength; i += limit) { + fileSet.push(files.slice(i, i + limit)); + paramNameSlice = paramName.slice(i, i + limit); + if (!paramNameSlice.length) { + paramNameSlice = paramName; + } + paramNameSet.push(paramNameSlice); + } + } else if (!options.singleFileUploads && limitSize) { + fileSet = []; + paramNameSet = []; + for (i = 0; i < filesLength; i = i + 1) { + batchSize += files[i].size + overhead; + if (i + 1 === filesLength || + ((batchSize + files[i + 1].size + overhead) > limitSize) || + (limit && i + 1 - j >= limit)) { + fileSet.push(files.slice(j, i + 1)); + paramNameSlice = paramName.slice(j, i + 1); + if (!paramNameSlice.length) { + paramNameSlice = paramName; + } + paramNameSet.push(paramNameSlice); + j = i + 1; + batchSize = 0; + } + } + } else { + paramNameSet = paramName; + } + data.originalFiles = files; + $.each(fileSet || files, function (index, element) { + var newData = $.extend({}, data); + newData.files = fileSet ? element : [element]; + newData.paramName = paramNameSet[index]; + that._initResponseObject(newData); + that._initProgressObject(newData); + that._addConvenienceMethods(e, newData); + result = that._trigger( + 'add', + $.Event('add', {delegatedEvent: e}), + newData + ); + return result; + }); + return result; + }, + + _replaceFileInput: function (data) { + var input = data.fileInput, + inputClone = input.clone(true), + restoreFocus = input.is(document.activeElement); + // Add a reference for the new cloned file input to the data argument: + data.fileInputClone = inputClone; + $('
').append(inputClone)[0].reset(); + // Detaching allows to insert the fileInput on another form + // without loosing the file input value: + input.after(inputClone).detach(); + // If the fileInput had focus before it was detached, + // restore focus to the inputClone. + if (restoreFocus) { + inputClone.focus(); + } + // Avoid memory leaks with the detached file input: + $.cleanData(input.unbind('remove')); + // Replace the original file input element in the fileInput + // elements set with the clone, which has been copied including + // event handlers: + this.options.fileInput = this.options.fileInput.map(function (i, el) { + if (el === input[0]) { + return inputClone[0]; + } + return el; + }); + // If the widget has been initialized on the file input itself, + // override this.element with the file input clone: + if (input[0] === this.element[0]) { + this.element = inputClone; + } + }, + + _handleFileTreeEntry: function (entry, path) { + var that = this, + dfd = $.Deferred(), + entries = [], + dirReader, + errorHandler = function (e) { + if (e && !e.entry) { + e.entry = entry; + } + // Since $.when returns immediately if one + // Deferred is rejected, we use resolve instead. + // This allows valid files and invalid items + // to be returned together in one set: + dfd.resolve([e]); + }, + successHandler = function (entries) { + that._handleFileTreeEntries( + entries, + path + entry.name + '/' + ).done(function (files) { + dfd.resolve(files); + }).fail(errorHandler); + }, + readEntries = function () { + dirReader.readEntries(function (results) { + if (!results.length) { + successHandler(entries); + } else { + entries = entries.concat(results); + readEntries(); + } + }, errorHandler); + }; + path = path || ''; + if (entry.isFile) { + if (entry._file) { + // Workaround for Chrome bug #149735 + entry._file.relativePath = path; + dfd.resolve(entry._file); + } else { + entry.file(function (file) { + file.relativePath = path; + dfd.resolve(file); + }, errorHandler); + } + } else if (entry.isDirectory) { + dirReader = entry.createReader(); + readEntries(); + } else { + // Return an empy list for file system items + // other than files or directories: + dfd.resolve([]); + } + return dfd.promise(); + }, + + _handleFileTreeEntries: function (entries, path) { + var that = this; + return $.when.apply( + $, + $.map(entries, function (entry) { + return that._handleFileTreeEntry(entry, path); + }) + ).then(function () { + return Array.prototype.concat.apply( + [], + arguments + ); + }); + }, + + _getDroppedFiles: function (dataTransfer) { + dataTransfer = dataTransfer || {}; + var items = dataTransfer.items; + if (items && items.length && (items[0].webkitGetAsEntry || + items[0].getAsEntry)) { + return this._handleFileTreeEntries( + $.map(items, function (item) { + var entry; + if (item.webkitGetAsEntry) { + entry = item.webkitGetAsEntry(); + if (entry) { + // Workaround for Chrome bug #149735: + entry._file = item.getAsFile(); + } + return entry; + } + return item.getAsEntry(); + }) + ); + } + return $.Deferred().resolve( + $.makeArray(dataTransfer.files) + ).promise(); + }, + + _getSingleFileInputFiles: function (fileInput) { + fileInput = $(fileInput); + var entries = fileInput.prop('webkitEntries') || + fileInput.prop('entries'), + files, + value; + if (entries && entries.length) { + return this._handleFileTreeEntries(entries); + } + files = $.makeArray(fileInput.prop('files')); + if (!files.length) { + value = fileInput.prop('value'); + if (!value) { + return $.Deferred().resolve([]).promise(); + } + // If the files property is not available, the browser does not + // support the File API and we add a pseudo File object with + // the input value as name with path information removed: + files = [{name: value.replace(/^.*\\/, '')}]; + } else if (files[0].name === undefined && files[0].fileName) { + // File normalization for Safari 4 and Firefox 3: + $.each(files, function (index, file) { + file.name = file.fileName; + file.size = file.fileSize; + }); + } + return $.Deferred().resolve(files).promise(); + }, + + _getFileInputFiles: function (fileInput) { + if (!(fileInput instanceof $) || fileInput.length === 1) { + return this._getSingleFileInputFiles(fileInput); + } + return $.when.apply( + $, + $.map(fileInput, this._getSingleFileInputFiles) + ).then(function () { + return Array.prototype.concat.apply( + [], + arguments + ); + }); + }, + + _onChange: function (e) { + var that = this, + data = { + fileInput: $(e.target), + form: $(e.target.form) + }; + this._getFileInputFiles(data.fileInput).always(function (files) { + data.files = files; + if (that.options.replaceFileInput) { + that._replaceFileInput(data); + } + if (that._trigger( + 'change', + $.Event('change', {delegatedEvent: e}), + data + ) !== false) { + that._onAdd(e, data); + } + }); + }, + + _onPaste: function (e) { + var items = e.originalEvent && e.originalEvent.clipboardData && + e.originalEvent.clipboardData.items, + data = {files: []}; + if (items && items.length) { + $.each(items, function (index, item) { + var file = item.getAsFile && item.getAsFile(); + if (file) { + data.files.push(file); + } + }); + if (this._trigger( + 'paste', + $.Event('paste', {delegatedEvent: e}), + data + ) !== false) { + this._onAdd(e, data); + } + } + }, + + _onDrop: function (e) { + e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; + var that = this, + dataTransfer = e.dataTransfer, + data = {}; + if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { + e.preventDefault(); + this._getDroppedFiles(dataTransfer).always(function (files) { + data.files = files; + if (that._trigger( + 'drop', + $.Event('drop', {delegatedEvent: e}), + data + ) !== false) { + that._onAdd(e, data); + } + }); + } + }, + + _onDragOver: getDragHandler('dragover'), + + _onDragEnter: getDragHandler('dragenter'), + + _onDragLeave: getDragHandler('dragleave'), + + _initEventHandlers: function () { + if (this._isXHRUpload(this.options)) { + this._on(this.options.dropZone, { + dragover: this._onDragOver, + drop: this._onDrop, + // event.preventDefault() on dragenter is required for IE10+: + dragenter: this._onDragEnter, + // dragleave is not required, but added for completeness: + dragleave: this._onDragLeave + }); + this._on(this.options.pasteZone, { + paste: this._onPaste + }); + } + if ($.support.fileInput) { + this._on(this.options.fileInput, { + change: this._onChange + }); + } + }, + + _destroyEventHandlers: function () { + this._off(this.options.dropZone, 'dragenter dragleave dragover drop'); + this._off(this.options.pasteZone, 'paste'); + this._off(this.options.fileInput, 'change'); + }, + + _destroy: function () { + this._destroyEventHandlers(); + }, + + _setOption: function (key, value) { + var reinit = $.inArray(key, this._specialOptions) !== -1; + if (reinit) { + this._destroyEventHandlers(); + } + this._super(key, value); + if (reinit) { + this._initSpecialOptions(); + this._initEventHandlers(); + } + }, + + _initSpecialOptions: function () { + var options = this.options; + if (options.fileInput === undefined) { + options.fileInput = this.element.is('input[type="file"]') ? + this.element : this.element.find('input[type="file"]'); + } else if (!(options.fileInput instanceof $)) { + options.fileInput = $(options.fileInput); + } + if (!(options.dropZone instanceof $)) { + options.dropZone = $(options.dropZone); + } + if (!(options.pasteZone instanceof $)) { + options.pasteZone = $(options.pasteZone); + } + }, + + _getRegExp: function (str) { + var parts = str.split('/'), + modifiers = parts.pop(); + parts.shift(); + return new RegExp(parts.join('/'), modifiers); + }, + + _isRegExpOption: function (key, value) { + return key !== 'url' && $.type(value) === 'string' && + /^\/.*\/[igm]{0,3}$/.test(value); + }, + + _initDataAttributes: function () { + var that = this, + options = this.options, + data = this.element.data(); + // Initialize options set via HTML5 data-attributes: + $.each( + this.element[0].attributes, + function (index, attr) { + var key = attr.name.toLowerCase(), + value; + if (/^data-/.test(key)) { + // Convert hyphen-ated key to camelCase: + key = key.slice(5).replace(/-[a-z]/g, function (str) { + return str.charAt(1).toUpperCase(); + }); + value = data[key]; + if (that._isRegExpOption(key, value)) { + value = that._getRegExp(value); + } + options[key] = value; + } + } + ); + }, + + _create: function () { + this._initDataAttributes(); + this._initSpecialOptions(); + this._slots = []; + this._sequence = this._getXHRPromise(true); + this._sending = this._active = 0; + this._initProgressObject(this); + this._initEventHandlers(); + }, + + // This method is exposed to the widget API and allows to query + // the number of active uploads: + active: function () { + return this._active; + }, + + // This method is exposed to the widget API and allows to query + // the widget upload progress. + // It returns an object with loaded, total and bitrate properties + // for the running uploads: + progress: function () { + return this._progress; + }, + + // This method is exposed to the widget API and allows adding files + // using the fileupload API. The data parameter accepts an object which + // must have a files property and can contain additional options: + // .fileupload('add', {files: filesList}); + add: function (data) { + var that = this; + if (!data || this.options.disabled) { + return; + } + if (data.fileInput && !data.files) { + this._getFileInputFiles(data.fileInput).always(function (files) { + data.files = files; + that._onAdd(null, data); + }); + } else { + data.files = $.makeArray(data.files); + this._onAdd(null, data); + } + }, + + // This method is exposed to the widget API and allows sending files + // using the fileupload API. The data parameter accepts an object which + // must have a files or fileInput property and can contain additional options: + // .fileupload('send', {files: filesList}); + // The method returns a Promise object for the file upload call. + send: function (data) { + if (data && !this.options.disabled) { + if (data.fileInput && !data.files) { + var that = this, + dfd = $.Deferred(), + promise = dfd.promise(), + jqXHR, + aborted; + promise.abort = function () { + aborted = true; + if (jqXHR) { + return jqXHR.abort(); + } + dfd.reject(null, 'abort', 'abort'); + return promise; + }; + this._getFileInputFiles(data.fileInput).always( + function (files) { + if (aborted) { + return; + } + if (!files.length) { + dfd.reject(); + return; + } + data.files = files; + jqXHR = that._onSend(null, data); + jqXHR.then( + function (result, textStatus, jqXHR) { + dfd.resolve(result, textStatus, jqXHR); + }, + function (jqXHR, textStatus, errorThrown) { + dfd.reject(jqXHR, textStatus, errorThrown); + } + ); + } + ); + return this._enhancePromise(promise); + } + data.files = $.makeArray(data.files); + if (data.files.length) { + return this._onSend(null, data); + } + } + return this._getXHRPromise(false, data && data.context); + } + + }); + +})); diff --git a/public/mosaico/dist/vendor/jquery.iframe-transport.js b/public/mosaico/dist/vendor/jquery.iframe-transport.js new file mode 100644 index 00000000..b7922e61 --- /dev/null +++ b/public/mosaico/dist/vendor/jquery.iframe-transport.js @@ -0,0 +1,217 @@ +/* + * jQuery Iframe Transport Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +/* global define, require, window, document */ + +;(function (factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS: + factory(require('jquery')); + } else { + // Browser globals: + factory(window.jQuery); + } +}(function ($) { + 'use strict'; + + // Helper variable to create unique names for the transport iframes: + var counter = 0; + + // The iframe transport accepts four additional options: + // options.fileInput: a jQuery collection of file input fields + // options.paramName: the parameter name for the file form data, + // overrides the name property of the file input field(s), + // can be a string or an array of strings. + // options.formData: an array of objects with name and value properties, + // equivalent to the return data of .serializeArray(), e.g.: + // [{name: 'a', value: 1}, {name: 'b', value: 2}] + // options.initialIframeSrc: the URL of the initial iframe src, + // by default set to "javascript:false;" + $.ajaxTransport('iframe', function (options) { + if (options.async) { + // javascript:false as initial iframe src + // prevents warning popups on HTTPS in IE6: + /*jshint scripturl: true */ + var initialIframeSrc = options.initialIframeSrc || 'javascript:false;', + /*jshint scripturl: false */ + form, + iframe, + addParamChar; + return { + send: function (_, completeCallback) { + form = $('
'); + form.attr('accept-charset', options.formAcceptCharset); + addParamChar = /\?/.test(options.url) ? '&' : '?'; + // XDomainRequest only supports GET and POST: + if (options.type === 'DELETE') { + options.url = options.url + addParamChar + '_method=DELETE'; + options.type = 'POST'; + } else if (options.type === 'PUT') { + options.url = options.url + addParamChar + '_method=PUT'; + options.type = 'POST'; + } else if (options.type === 'PATCH') { + options.url = options.url + addParamChar + '_method=PATCH'; + options.type = 'POST'; + } + // IE versions below IE8 cannot set the name property of + // elements that have already been added to the DOM, + // so we set the name along with the iframe HTML markup: + counter += 1; + iframe = $( + '' + ).bind('load', function () { + var fileInputClones, + paramNames = $.isArray(options.paramName) ? + options.paramName : [options.paramName]; + iframe + .unbind('load') + .bind('load', function () { + var response; + // Wrap in a try/catch block to catch exceptions thrown + // when trying to access cross-domain iframe contents: + try { + response = iframe.contents(); + // Google Chrome and Firefox do not throw an + // exception when calling iframe.contents() on + // cross-domain requests, so we unify the response: + if (!response.length || !response[0].firstChild) { + throw new Error(); + } + } catch (e) { + response = undefined; + } + // The complete callback returns the + // iframe content document as response object: + completeCallback( + 200, + 'success', + {'iframe': response} + ); + // Fix for IE endless progress bar activity bug + // (happens on form submits to iframe targets): + $('') + .appendTo(form); + window.setTimeout(function () { + // Removing the form in a setTimeout call + // allows Chrome's developer tools to display + // the response result + form.remove(); + }, 0); + }); + form + .prop('target', iframe.prop('name')) + .prop('action', options.url) + .prop('method', options.type); + if (options.formData) { + $.each(options.formData, function (index, field) { + $('') + .prop('name', field.name) + .val(field.value) + .appendTo(form); + }); + } + if (options.fileInput && options.fileInput.length && + options.type === 'POST') { + fileInputClones = options.fileInput.clone(); + // Insert a clone for each file input field: + options.fileInput.after(function (index) { + return fileInputClones[index]; + }); + if (options.paramName) { + options.fileInput.each(function (index) { + $(this).prop( + 'name', + paramNames[index] || options.paramName + ); + }); + } + // Appending the file input fields to the hidden form + // removes them from their original location: + form + .append(options.fileInput) + .prop('enctype', 'multipart/form-data') + // enctype must be set as encoding for IE: + .prop('encoding', 'multipart/form-data'); + // Remove the HTML5 form attribute from the input(s): + options.fileInput.removeAttr('form'); + } + form.submit(); + // Insert the file input fields at their original location + // by replacing the clones with the originals: + if (fileInputClones && fileInputClones.length) { + options.fileInput.each(function (index, input) { + var clone = $(fileInputClones[index]); + // Restore the original name and form properties: + $(input) + .prop('name', clone.prop('name')) + .attr('form', clone.attr('form')); + clone.replaceWith(input); + }); + } + }); + form.append(iframe).appendTo(document.body); + }, + abort: function () { + if (iframe) { + // javascript:false as iframe src aborts the request + // and prevents warning popups on HTTPS in IE6. + // concat is used to avoid the "Script URL" JSLint error: + iframe + .unbind('load') + .prop('src', initialIframeSrc); + } + if (form) { + form.remove(); + } + } + }; + } + }); + + // The iframe transport returns the iframe content document as response. + // The following adds converters from iframe to text, json, html, xml + // and script. + // Please note that the Content-Type for JSON responses has to be text/plain + // or text/html, if the browser doesn't include application/json in the + // Accept header, else IE will show a download dialog. + // The Content-Type for XML responses on the other hand has to be always + // application/xml or text/xml, so IE properly parses the XML response. + // See also + // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation + $.ajaxSetup({ + converters: { + 'iframe text': function (iframe) { + return iframe && $(iframe[0].body).text(); + }, + 'iframe json': function (iframe) { + return iframe && $.parseJSON($(iframe[0].body).text()); + }, + 'iframe html': function (iframe) { + return iframe && $(iframe[0].body).html(); + }, + 'iframe xml': function (iframe) { + var xmlDoc = iframe && iframe[0]; + return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc : + $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) || + $(xmlDoc.body).html()); + }, + 'iframe script': function (iframe) { + return iframe && $.globalEval($(iframe[0].body).text()); + } + } + }); + +})); diff --git a/public/mosaico/dist/vendor/jquery.min.js b/public/mosaico/dist/vendor/jquery.min.js new file mode 100644 index 00000000..e8364758 --- /dev/null +++ b/public/mosaico/dist/vendor/jquery.min.js @@ -0,0 +1,5 @@ +/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; +}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
- Name + {{#translate}}Name{{/translate}} - Description + {{#translate}}Description{{/translate}} - Status + {{#translate}}Status{{/translate}} - Created + {{#translate}}Created{{/translate}}   diff --git a/views/emails/confirm-html.hbs b/views/emails/confirm-html.hbs index 2e9cb0cd..e958a62c 100644 --- a/views/emails/confirm-html.hbs +++ b/views/emails/confirm-html.hbs @@ -3,118 +3,8473 @@ - {{title}}: Please Confirm Subscription + {{title}}: {{#translate}}Please Confirm Subscription{{/translate}} + .jumbotron { + text-align: center; + border-bottom: 1px solid #e5e5e5; + } + + .jumbotron .btn { + padding: 14px 24px; + font-size: 21px; + } + /* Supporting marketing content */ + + .marketing { + margin: 40px 0; + } + + .marketing p+h4 { + margin-top: 28px; + } + /* Responsive: Portrait tablets and up */ + + @media screen and (min-width: 768px) { + /* Remove the padding we set earlier */ + .header, + .marketing, + .footer { + padding-right: 0; + padding-left: 0; + } + /* Space out the masthead */ + .header { + margin-bottom: 30px; + } + /* Remove the bottom border on the jumbotron for visual effect */ + .jumbotron { + border-bottom: 0; + } + } + +

{{title}}

-

Please Confirm Subscription

+

+ {{#translate}}Please Confirm Subscription{{/translate}} +

-

Yes, subscribe me to this list

+

{{#translate}}Yes, subscribe me to this list{{/translate}}

-

If you received this email by mistake, simply delete it. You won't be subscribed if you don't click the confirmation link above.

+

+ {{#translate}}If you received this email by mistake, simply delete it. You won't be subscribed if you don't click the confirmation link above.{{/translate}} +

-

For questions about this list, please contact: +

+ {{#translate}}For questions about this list, please contact:{{/translate}}
{{contactAddress}}

diff --git a/views/emails/confirm-text.hbs b/views/emails/confirm-text.hbs index 74a4e69d..75b5a70a 100644 --- a/views/emails/confirm-text.hbs +++ b/views/emails/confirm-text.hbs @@ -1,10 +1,10 @@ {{{title}}} -Please Confirm Subscription +{{#translate}}Please Confirm Subscription{{/translate}} =========================== -Yes, subscribe me to this list: {{{confirmUrl}}} +{{#translate}}Yes, subscribe me to this list{{/translate}}: {{{confirmUrl}}} -If you received this email by mistake, simply delete it. You won't be subscribed unless you click the confirmation link above. +{{#translate}}If you received this email by mistake, simply delete it. You won't be subscribed unless you click the confirmation link above.{{/translate}} -For questions about this list, please contact: +{{#translate}}For questions about this list, please contact:{{/translate}} {{{contactAddress}}} diff --git a/views/emails/password-reset-html.hbs b/views/emails/password-reset-html.hbs index cadbcc21..8ff7e6c5 100644 --- a/views/emails/password-reset-html.hbs +++ b/views/emails/password-reset-html.hbs @@ -3,115 +3,8466 @@ - Change your password + {{#translate}}Change your password{{/translate}} + .jumbotron { + text-align: center; + border-bottom: 1px solid #e5e5e5; + } + + .jumbotron .btn { + padding: 14px 24px; + font-size: 21px; + } + /* Supporting marketing content */ + + .marketing { + margin: 40px 0; + } + + .marketing p+h4 { + margin-top: 28px; + } + /* Responsive: Portrait tablets and up */ + + @media screen and (min-width: 768px) { + /* Remove the padding we set earlier */ + .header, + .marketing, + .footer { + padding-right: 0; + padding-left: 0; + } + /* Space out the masthead */ + .header { + margin-bottom: 30px; + } + /* Remove the bottom border on the jumbotron for visual effect */ + .jumbotron { + border-bottom: 0; + } + } + +
-

Change your password

-

We have received a password change request for your Mailtrain account {{username}}.

+

{{#translate}}Change your password{{/translate}}

+

{{#translate}}We have received a password change request for your Mailtrain account:{{/translate}} {{username}}.

-

Reset password

+

{{#translate}}Reset password{{/translate}}

-

If you did not ask to change your password, then you can ignore this email and your password will not be changed.

+

{{#translate}}If you did not ask to change your password, then you can ignore this email and your password will not be changed.{{/translate}}

+ diff --git a/views/emails/password-reset-text.hbs b/views/emails/password-reset-text.hbs index 40b49e9c..1fcbbab1 100644 --- a/views/emails/password-reset-text.hbs +++ b/views/emails/password-reset-text.hbs @@ -1,9 +1,9 @@ {{{title}}} -Change your password +{{#translate}}Change your password{{/translate}} ==================== -We have received a password change request for your Mailtrain account ({{{username}}}). +{{#translate}}We have received a password change request for your Mailtrain account:{{/translate}} ({{{username}}}). -Reset password: {{{confirmUrl}}} +{{#translate}}Reset password{{/translate}}: {{{confirmUrl}}} -If you did not ask to change your password, then you can ignore this email and your password will not be changed. +{{#translate}}If you did not ask to change your password, then you can ignore this email and your password will not be changed.{{/translate}} diff --git a/views/emails/rss-html.hbs b/views/emails/rss-html.hbs index d4101c64..fcb22634 100644 --- a/views/emails/rss-html.hbs +++ b/views/emails/rss-html.hbs @@ -12,11 +12,11 @@

- Preferences + {{#translate}}Preferences{{/translate}}   |   - Unsubscribe + {{#translate}}Unsubscribe{{/translate}}   |   - View this email in your browser + {{#translate}}View this email in your browser{{/translate}}

diff --git a/views/emails/stationery-html.hbs b/views/emails/stationery-html.hbs index 21a3e987..e2cba5d2 100644 --- a/views/emails/stationery-html.hbs +++ b/views/emails/stationery-html.hbs @@ -7,24 +7,24 @@ -

Hey [FIRST_NAME/Customer],

+

{{#translate}}Hey [FIRST_NAME/Customer],{{/translate}}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed varius, leo a ullamcorper feugiat, ante purus sodales justo, a faucibus libero lacus a est.

Sed varius, leo a ullamcorper feugiat, ante purus sodales justo, a faucibus libero lacus a est. Aenean at mollis ipsum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed varius, leo a ullamcorper feugiat, ante purus sodales justo, a faucibus libero lacus a est.

-

Cheers, +

{{#translate}}Cheers,{{/translate}}
{{defaultSender}}

{{defaultPostaddress}}
- Preferences + {{#translate}}Preferences{{/translate}}   |   - Unsubscribe + {{#translate}}Unsubscribe{{/translate}}   |   - View this email in your browser + {{#translate}}View this email in your browser{{/translate}}

diff --git a/views/emails/stationery-text.hbs b/views/emails/stationery-text.hbs index 6bb25f11..8eb796a8 100644 --- a/views/emails/stationery-text.hbs +++ b/views/emails/stationery-text.hbs @@ -1,14 +1,14 @@ -Hey [FIRST_NAME/Customer], +{{#translate}}Hey [FIRST_NAME/Customer],{{/translate}} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed varius, leo a ullamcorper feugiat, ante purus sodales justo, a faucibus libero lacus a est. Sed varius, leo a ullamcorper feugiat, ante purus sodales justo, a faucibus libero lacus a est. Aenean at mollis ipsum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed varius, leo a ullamcorper feugiat, ante purus sodales justo, a faucibus libero lacus a est. -Cheers, +{{#translate}}Cheers,{{/translate}} {{defaultSender}} {{defaultPostaddress}} -Preferences: [LINK_PREFERENCES] -Unsubscribe: [LINK_UNSUBSCRIBE] -View this email in your browser: [LINK_BROWSER] +{{#translate}}Preferences{{/translate}}: [LINK_PREFERENCES] +{{#translate}}Unsubscribe{{/translate}}: [LINK_UNSUBSCRIBE] +{{#translate}}View this email in your browser{{/translate}}: [LINK_BROWSER] diff --git a/views/emails/subscription-confirmed-html.hbs b/views/emails/subscription-confirmed-html.hbs index 9496d6a0..e35f05fe 100644 --- a/views/emails/subscription-confirmed-html.hbs +++ b/views/emails/subscription-confirmed-html.hbs @@ -3,124 +3,8474 @@ - {{title}}: Subscription Confirmed + {{title}}: {{#translate}}Subscription Confirmed{{/translate}} + .jumbotron { + text-align: center; + border-bottom: 1px solid #e5e5e5; + } + + .jumbotron .btn { + padding: 14px 24px; + font-size: 21px; + } + /* Supporting marketing content */ + + .marketing { + margin: 40px 0; + } + + .marketing p+h4 { + margin-top: 28px; + } + /* Responsive: Portrait tablets and up */ + + @media screen and (min-width: 768px) { + /* Remove the padding we set earlier */ + .header, + .marketing, + .footer { + padding-right: 0; + padding-left: 0; + } + /* Space out the masthead */ + .header { + margin-bottom: 30px; + } + /* Remove the bottom border on the jumbotron for visual effect */ + .jumbotron { + border-bottom: 0; + } + } + +
-

{{title}}

-

Your subscription to our list has been confirmed.

+

{{title}}

+

{{#translate}}Your subscription to our list has been confirmed.{{/translate}}

-

- If you want to modify your subscription then you can: -

+

+ {{#translate}}If you want to modify your subscription then you can:{{/translate}} +

-

- manage your preferences - or - unsubscribe here -

+

+ {{#translate}}manage your preferences{{/translate}} + {{#translate}}or{{/translate}} + {{#translate}}unsubscribe here{{/translate}} +

-

For questions about this list, please contact: -
{{contactAddress}}

+

{{#translate}}For questions about this list, please contact:{{/translate}} +
{{contactAddress}}

diff --git a/views/emails/subscription-confirmed-text.hbs b/views/emails/subscription-confirmed-text.hbs index 07d4e614..bc500178 100644 --- a/views/emails/subscription-confirmed-text.hbs +++ b/views/emails/subscription-confirmed-text.hbs @@ -1,16 +1,16 @@ {{{title}}} -Subscription Confirmed +{{#translate}}Subscription Confirmed{{/translate}} ====================== -Your subscription to our list has been confirmed. +{{#translate}}Your subscription to our list has been confirmed.{{/translate}} -If you want to modify your subscription then you can: +{{#translate}}If you want to modify your subscription then you can:{{/translate}} -manage your preferences: {{preferencesUrl}} +{{#translate}}manage your preferences{{/translate}}: {{preferencesUrl}} -- or - +- {{#translate}}or{{/translate}} - -unsubscribe here: {{unsubscribeUrl}} +{{#translate}}unsubscribe here{{/translate}}: {{unsubscribeUrl}} -For questions about this list, please contact: +{{#translate}}For questions about this list, please contact:{{/translate}} {{{contactAddress}}} diff --git a/views/emails/unsubscribe-confirmed-html.hbs b/views/emails/unsubscribe-confirmed-html.hbs index 2554a993..7e446fb9 100644 --- a/views/emails/unsubscribe-confirmed-html.hbs +++ b/views/emails/unsubscribe-confirmed-html.hbs @@ -3,119 +3,8471 @@ - {{title}}: You are now unsubscribed + {{title}}: + {{#translate}}You are now unsubscribed{{/translate}} + + .jumbotron { + text-align: center; + border-bottom: 1px solid #e5e5e5; + } + + .jumbotron .btn { + padding: 14px 24px; + font-size: 21px; + } + /* Supporting marketing content */ + + .marketing { + margin: 40px 0; + } + + .marketing p+h4 { + margin-top: 28px; + } + /* Responsive: Portrait tablets and up */ + + @media screen and (min-width: 768px) { + /* Remove the padding we set earlier */ + .header, + .marketing, + .footer { + padding-right: 0; + padding-left: 0; + } + /* Space out the masthead */ + .header { + margin-bottom: 30px; + } + /* Remove the bottom border on the jumbotron for visual effect */ + .jumbotron { + border-bottom: 0; + } + } + +

{{title}}

-

We have removed your email address from our list.

+

{{#translate}}We have removed your email address from our list.{{/translate}}

- If you unsubscribed by mistake, you can re-subscribe at: + {{#translate}}If you unsubscribed by mistake, you can re-subscribe at:{{/translate}}

-

Subscribe

+

{{#translate}}Subscribe{{/translate}}

-

For questions about this list, please contact: +

{{#translate}}For questions about this list, please contact:{{/translate}}
{{contactAddress}}

diff --git a/views/emails/unsubscribe-confirmed-text.hbs b/views/emails/unsubscribe-confirmed-text.hbs index 5186f8e4..14214ed6 100644 --- a/views/emails/unsubscribe-confirmed-text.hbs +++ b/views/emails/unsubscribe-confirmed-text.hbs @@ -1,12 +1,12 @@ {{{title}}} -You are now unsubscribed +{{#translate}}You are now unsubscribed{{/translate}} ======================== -We have removed your email address from our list. +{{#translate}}We have removed your email address from our list.{{/translate}} -If you unsubscribed by mistake, you can re-subscribe at: +{{#translate}}If you unsubscribed by mistake, you can re-subscribe at:{{/translate}} -Subscribe: {{subscribeUrl}} +{{#translate}}Subscribe{{/translate}}: {{subscribeUrl}} -For questions about this list, please contact: +{{#translate}}For questions about this list, please contact:{{/translate}} {{{contactAddress}}} diff --git a/views/index.hbs b/views/index.hbs index 6c67c28f..f4902329 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -8,7 +8,7 @@
-

iRedMail

Free, open source mail server solution +

iRedMail

{{#translate}}Free, open source mail server solution{{/translate}}
@@ -22,7 +22,7 @@
-

SendPulse

A reliable SMTP server, easy integration, and 12,000 messages a month free +

SendPulse

{{#translate}}A reliable SMTP server, easy integration, and 12,000 messages a month free{{/translate}}
@@ -31,17 +31,17 @@
-

List management

-

Mailtrain allows you to easily manage even very large lists. Million subscribers? Not a problem. You can add subscribers manually, through the API or import from a CSV file. All lists come with support for custom fields and merge tags as well.

+

{{#translate}}List management{{/translate}}

+

{{#translate}}Mailtrain allows you to easily manage even very large lists. Million subscribers? Not a problem. You can add subscribers manually, through the API or import from a CSV file. All lists come with support for custom fields and merge tags as well.{{/translate}}

-

Custom fields

-

Text fields, numbers, drop downs or checkboxes, Mailtrain has them all. Every custom field can be included in the generated newsletters through merge tags.

+

{{#translate}}Custom fields{{/translate}}

+

{{#translate}}Text fields, numbers, drop downs or checkboxes, Mailtrain has them all. Every custom field can be included in the generated newsletters through merge tags.{{/translate}}

-

List segmentation

-

Send messages only to list subscribers that match predefined segmentation rules. No need to create separate lists with small differences.

+

{{#translate}}List segmentation{{/translate}}

+

{{#translate}}Send messages only to list subscribers that match predefined segmentation rules. No need to create separate lists with small differences.{{/translate}}

@@ -49,11 +49,11 @@
-

Donate to author

-

If you really like Mailtrain or your business benefits from it financially then I would really appreciate a small donation to keep the Mailtrain development engines running. You can either use Bitcoin or PayPal for donations. My Bitcoin wallet is 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM

+

{{#translate}}Donate to author{{/translate}}

+

{{#translate}}If you really like Mailtrain or your business benefits from it financially then I would really appreciate a small donation to keep the Mailtrain development engines running. You can either use Bitcoin or PayPal for donations. My Bitcoin wallet is 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM{{/translate}}

- or donate using PayPal + {{#translate}}or donate using PayPal{{/translate}}

@@ -63,32 +63,31 @@
-

RSS Campaigns

-

Setup Mailtrain to track RSS feeds and if a new entry is detected in a feed then Mailtrain auto-generates a new campaign using entry data as message contents and sends it to - selected subscribers.

+

{{#translate}}RSS Campaigns{{/translate}}

+

{{#translate}}Setup Mailtrain to track RSS feeds and if a new entry is detected in a feed then Mailtrain auto-generates a new campaign using entry data as message contents and sends it to selected subscribers.{{/translate}}

-

GPG Encryption

-

If a list has a custom field for a GPG Public Key set then subscribers can upload their GPG public key to receive encrypted messages from the list.

+

{{#translate}}GPG Encryption{{/translate}}

+

{{#translate}}If a list has a custom field for a GPG Public Key set then subscribers can upload their GPG public key to receive encrypted messages from the list.{{/translate}}

-

Click stats

-

After a campaign is sent, check individual click statistics for every link included in the message.

+

{{#translate}}Click stats{{/translate}}

+

{{#translate}}After a campaign is sent, check individual click statistics for every link included in the message.{{/translate}}

-

Open source

-

Mailtrain is available under MIT license and completely open source.

+

{{#translate}}Open source{{/translate}}

+

{{#translate}}Mailtrain is available under GPLv3 license and completely open source.{{/translate}}

-

Send via any provider

-

Mailtrain recommends SendPulse even though you can use any provider that supports SMTP protocol to send out your newsletters. Bounce and complaints handling via webhooks is supported for SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA.

+

{{#translate}}Send via any provider{{/translate}}

+

{{#translate}}Mailtrain recommends SendPulse even though you can use any provider that supports SMTP protocol to send out your newsletters. Bounce and complaints handling via webhooks is supported for SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA.{{/translate}}

-

Trigger based automation

-

Define automation triggers to send specific messages when a user activates the trigger.

+

{{#translate}}Trigger based automation{{/translate}}

+

{{#translate}}Define automation triggers to send specific messages when a user activates the trigger.{{/translate}}

diff --git a/views/layout.hbs b/views/layout.hbs index 91b4b9a5..f2f1b724 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -34,7 +34,7 @@

-

Self hosted newsletter app built on top of Nodemailer

+

{{#translate}}Self hosted newsletter app built on top of Nodemailer{{/translate}}

- Source on GitHub + {{#translate}}Source on GitHub{{/translate}} - Subscribe to our newsletter + {{#translate}}Subscribe to our newsletter{{/translate}}

@@ -134,7 +134,7 @@ diff --git a/views/lists/create.hbs b/views/lists/create.hbs index c3422350..1ec01821 100644 --- a/views/lists/create.hbs +++ b/views/lists/create.hbs @@ -1,26 +1,26 @@ -

Create List

+

{{#translate}}Create List{{/translate}}


- +
- +
- +
- HTML is allowed + {{#translate}}HTML is allowed{{/translate}}
@@ -28,7 +28,7 @@
- +
diff --git a/views/lists/edit.hbs b/views/lists/edit.hbs index 760afcdd..ade92785 100644 --- a/views/lists/edit.hbs +++ b/views/lists/edit.hbs @@ -1,11 +1,11 @@ -

Edit List View List

+

{{#translate}}Edit List{{/translate}} {{#translate}}View List{{/translate}}


@@ -18,23 +18,23 @@
- +
- +
- +
- This is the list ID displayed to the subscribers + {{#translate}}This is the list ID displayed to the subscribers{{/translate}}
- +
- HTML is allowed + {{#translate}}HTML is allowed{{/translate}}
@@ -43,9 +43,9 @@
- +
- +
diff --git a/views/lists/fields/create.hbs b/views/lists/fields/create.hbs index 04e58aa6..dddeab85 100644 --- a/views/lists/fields/create.hbs +++ b/views/lists/fields/create.hbs @@ -1,77 +1,77 @@ -

{{list.name}} Create Custom Field

+

{{list.name}} {{#translate}}Create Custom Field{{/translate}}


- +
- +
- +
- +
- Required for group options + {{#translate}}Required for group options{{/translate}}
- +
- +
- +
- For group elements like checkboxes you can control the appearance of the merge tag with an optional template. The template uses handlebars syntax and you can find all values from \{{values}} array, for example \{{#each values}} \{{this}} \{{/each}}. If template is not defined then multiple values are joined with commas. You can also use this template to render JSON values (if the JSON is an array then the array is exposed as values, otherwise you can access the JSON keys directly). + {{#translate}}For group elements like checkboxes you can control the appearance of the merge tag with an optional template. The template uses handlebars syntax and you can find all values from \{{values}} array, for example \{{#each values}} \{{this}} \{{/each}}. If template is not defined then multiple values are joined with commas. You can also use this template to render JSON values (if the JSON is an array then the array is exposed as values, otherwise you can access the JSON keys directly).{{/translate}}
@@ -79,7 +79,7 @@
@@ -87,7 +87,7 @@
- +
diff --git a/views/lists/fields/edit.hbs b/views/lists/fields/edit.hbs index 33509a99..c59b3484 100644 --- a/views/lists/fields/edit.hbs +++ b/views/lists/fields/edit.hbs @@ -1,12 +1,12 @@ -

{{list.name}} Edit Custom Field Back to fields

+

{{list.name}} {{#translate}}Edit Custom Field{{/translate}} {{#translate}}Back to fields{{/translate}}


@@ -20,36 +20,36 @@
- +
- +
- +
@@ -57,43 +57,43 @@ {{#if groups}}
- +
- Required for group options + {{#translate}}Required for group options{{/translate}}
{{/if}}
- +
- - Put this tag in your content: [{{#if field.key}}{{field.key}}{{else}}TAG_VALUE{{/if}}] + + {{#translate}}Put this tag in your content:{{/translate}} [{{#if field.key}}{{field.key}}{{else}}TAG_VALUE{{/if}}]
{{#if field.isGroup}}
- +
- For group elements like checkboxes you can control the appearance of the merge tag with an optional template. The template uses handlebars syntax and you can find all values from \{{values}} array, for example \{{#each values}} \{{this}} \{{/each}}. If template is not defined then multiple values are joined with commas. You can also use this template to render JSON values (if the JSON is an array then the array is exposed as values, otherwise you can access the JSON keys directly). + {{#translate}}For group elements like checkboxes you can control the appearance of the merge tag with an optional template. The template uses handlebars syntax and you can find all values from \{{values}} array, for example \{{#each values}} \{{this}} \{{/each}}. If template is not defined then multiple values are joined with commas. You can also use this template to render JSON values (if the JSON is an array then the array is exposed as values, otherwise you can access the JSON keys directly).{{/translate}}
{{else}}
- +
- +
{{/if}} @@ -102,7 +102,7 @@
@@ -111,9 +111,9 @@
- +
- +
diff --git a/views/lists/fields/fields.hbs b/views/lists/fields/fields.hbs index 532c17a2..b7826a7c 100644 --- a/views/lists/fields/fields.hbs +++ b/views/lists/fields/fields.hbs @@ -1,15 +1,15 @@ -

{{list.name}} Custom Fields

+

{{list.name}} {{#translate}}Custom Fields{{/translate}}


@@ -20,16 +20,16 @@ #
- Name + {{#translate}}Name{{/translate}} - Type + {{#translate}}Type{{/translate}} - Merge tag + {{#translate}}Merge tag{{/translate}} - Default merge tag value + {{#translate}}Default merge tag value{{/translate}}   @@ -56,7 +56,7 @@ - Edit + {{#translate}}Edit{{/translate}}
- Edit + {{#translate}}Edit{{/translate}}
- No data available in table + {{#translate}}No data available in table{{/translate}}
- Name + {{#translate}}Name{{/translate}} - ID + {{#translate}}ID{{/translate}} - Subscribers + {{#translate}}Subscribers{{/translate}} - Description + {{#translate}}Description{{/translate}}   @@ -59,7 +59,7 @@ - Edit + {{#translate}}Edit{{/translate}}
- Name + {{#translate}}Name{{/translate}} - Match + {{#translate}}Match{{/translate}}   @@ -46,7 +46,7 @@ - Edit + {{#translate}}Edit{{/translate}}
- Rule + {{#translate}}Rule{{/translate}} - Value + {{#translate}}Value{{/translate}}   @@ -57,7 +57,7 @@ - Edit + {{#translate}}Edit{{/translate}}
- Address + {{#translate}}Address{{/translate}} - Fail reason + {{#translate}}Fail reason{{/translate}}
- Address + {{#translate}}Address{{/translate}} - First Name + {{#translate}}First Name{{/translate}} - Last Name + {{#translate}}Last Name{{/translate}} @@ -93,10 +93,10 @@ - Status + {{#translate}}Status{{/translate}} - Created + {{#translate}}Created{{/translate}}
- Created + {{#translate}}Created{{/translate}} - Finished + {{#translate}}Finished{{/translate}} - Type + {{#translate}}Type{{/translate}} - Added + {{#translate}}Added{{/translate}} - Updated + {{#translate}}Updated{{/translate}} - Failed + {{#translate}}Failed{{/translate}} - Status + {{#translate}}Status{{/translate}} @@ -181,11 +181,11 @@ {{/if}} -
+ - +
- No data available in table + {{#translate}}No data available in table{{/translate}}
 
a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/
"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("'; + } else if (data.source1mime == "application/x-shockwave-flash") { + html += ''; + + if (data.poster) { + html += ''; + } + + html += ''; + } else if (data.source1mime.indexOf('audio') != -1) { + if (editor.settings.audio_template_callback) { + html = editor.settings.audio_template_callback(data); + } else { + html += ( + '' + ); + } + } else if (data.type == "script") { + html += ''; + } else { + if (editor.settings.video_template_callback) { + html = editor.settings.video_template_callback(data); + } else { + html = ( + '' + ); + } + } + } + + return html; + } + + function htmlToData(html) { + var data = {}; + + new tinymce.html.SaxParser({ + validate: false, + allow_conditional_comments: true, + special: 'script,noscript', + start: function(name, attrs) { + if (!data.source1 && name == "param") { + data.source1 = attrs.map.movie; + } + + if (name == "iframe" || name == "object" || name == "embed" || name == "video" || name == "audio") { + if (!data.type) { + data.type = name; + } + + data = tinymce.extend(attrs.map, data); + } + + if (name == "script") { + var videoScript = getVideoScriptMatch(attrs.map.src); + if (!videoScript) { + return; + } + + data = { + type: "script", + source1: attrs.map.src, + width: videoScript.width, + height: videoScript.height + }; + } + + if (name == "source") { + if (!data.source1) { + data.source1 = attrs.map.src; + } else if (!data.source2) { + data.source2 = attrs.map.src; + } + } + + if (name == "img" && !data.poster) { + data.poster = attrs.map.src; + } + } + }).parse(html); + + data.source1 = data.source1 || data.src || data.data; + data.source2 = data.source2 || ''; + data.poster = data.poster || ''; + + return data; + } + + function getData(element) { + if (element.getAttribute('data-mce-object')) { + return htmlToData(editor.serializer.serialize(element, {selection: true})); + } + + return {}; + } + + function sanitize(html) { + if (editor.settings.media_filter_html === false) { + return html; + } + + var writer = new tinymce.html.Writer(), blocked; + + new tinymce.html.SaxParser({ + validate: false, + allow_conditional_comments: false, + special: 'script,noscript', + + comment: function(text) { + writer.comment(text); + }, + + cdata: function(text) { + writer.cdata(text); + }, + + text: function(text, raw) { + writer.text(text, raw); + }, + + start: function(name, attrs, empty) { + blocked = true; + + if (name == 'script' || name == 'noscript') { + return; + } + + for (var i = 0; i < attrs.length; i++) { + if (attrs[i].name.indexOf('on') === 0) { + return; + } + + if (attrs[i].name == 'style') { + attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name); + } + } + + writer.start(name, attrs, empty); + blocked = false; + }, + + end: function(name) { + if (blocked) { + return; + } + + writer.end(name); + } + }, new tinymce.html.Schema({})).parse(html); + + return writer.getContent(); + } + + function updateHtml(html, data, updateAll) { + var writer = new tinymce.html.Writer(); + var sourceCount = 0, hasImage; + + function setAttributes(attrs, updatedAttrs) { + var name, i, value, attr; + + for (name in updatedAttrs) { + value = "" + updatedAttrs[name]; + + if (attrs.map[name]) { + i = attrs.length; + while (i--) { + attr = attrs[i]; + + if (attr.name == name) { + if (value) { + attrs.map[name] = value; + attr.value = value; + } else { + delete attrs.map[name]; + attrs.splice(i, 1); + } + } + } + } else if (value) { + attrs.push({ + name: name, + value: value + }); + + attrs.map[name] = value; + } + } + } + + new tinymce.html.SaxParser({ + validate: false, + allow_conditional_comments: true, + special: 'script,noscript', + + comment: function(text) { + writer.comment(text); + }, + + cdata: function(text) { + writer.cdata(text); + }, + + text: function(text, raw) { + writer.text(text, raw); + }, + + start: function(name, attrs, empty) { + switch (name) { + case "video": + case "object": + case "embed": + case "img": + case "iframe": + setAttributes(attrs, { + width: data.width, + height: data.height + }); + break; + } + + if (updateAll) { + switch (name) { + case "video": + setAttributes(attrs, { + poster: data.poster, + src: "" + }); + + if (data.source2) { + setAttributes(attrs, { + src: "" + }); + } + break; + + case "iframe": + setAttributes(attrs, { + src: data.source1 + }); + break; + + case "source": + sourceCount++; + + if (sourceCount <= 2) { + setAttributes(attrs, { + src: data["source" + sourceCount], + type: data["source" + sourceCount + "mime"] + }); + + if (!data["source" + sourceCount]) { + return; + } + } + break; + + case "img": + if (!data.poster) { + return; + } + + hasImage = true; + break; + } + } + + writer.start(name, attrs, empty); + }, + + end: function(name) { + if (name == "video" && updateAll) { + for (var index = 1; index <= 2; index++) { + if (data["source" + index]) { + var attrs = []; + attrs.map = {}; + + if (sourceCount < index) { + setAttributes(attrs, { + src: data["source" + index], + type: data["source" + index + "mime"] + }); + + writer.start("source", attrs, true); + } + } + } + } + + if (data.poster && name == "object" && updateAll && !hasImage) { + var imgAttrs = []; + imgAttrs.map = {}; + + setAttributes(imgAttrs, { + src: data.poster, + width: data.width, + height: data.height + }); + + writer.start("img", imgAttrs, true); + } + + writer.end(name); + } + }, new tinymce.html.Schema({})).parse(html); + + return writer.getContent(); + } + + editor.on('ResolveName', function(e) { + var name; + + if (e.target.nodeType == 1 && (name = e.target.getAttribute("data-mce-object"))) { + e.name = name; + } + }); + + function retainAttributesAndInnerHtml(sourceNode, targetNode) { + var attrName, attrValue, attribs, ai, innerHtml; + + // Prefix all attributes except width, height and style since we + // will add these to the placeholder + attribs = sourceNode.attributes; + ai = attribs.length; + while (ai--) { + attrName = attribs[ai].name; + attrValue = attribs[ai].value; + + if (attrName !== "width" && attrName !== "height" && attrName !== "style") { + if (attrName == "data" || attrName == "src") { + attrValue = editor.convertURL(attrValue, attrName); + } + + targetNode.attr('data-mce-p-' + attrName, attrValue); + } + } + + // Place the inner HTML contents inside an escaped attribute + // This enables us to copy/paste the fake object + innerHtml = sourceNode.firstChild && sourceNode.firstChild.value; + if (innerHtml) { + targetNode.attr("data-mce-html", escape(innerHtml)); + targetNode.firstChild = null; + } + } + + function createPlaceholderNode(node) { + var placeHolder, name = node.name; + + placeHolder = new tinymce.html.Node('img', 1); + placeHolder.shortEnded = true; + + retainAttributesAndInnerHtml(node, placeHolder); + + placeHolder.attr({ + width: node.attr('width') || "300", + height: node.attr('height') || (name == "audio" ? "30" : "150"), + style: node.attr('style'), + src: tinymce.Env.transparentSrc, + "data-mce-object": name, + "class": "mce-object mce-object-" + name + }); + + return placeHolder; + } + + function createPreviewNode(node) { + var previewWrapper, previewNode, shimNode, name = node.name; + + previewWrapper = new tinymce.html.Node('span', 1); + previewWrapper.attr({ + contentEditable: 'false', + style: node.attr('style'), + "data-mce-object": name, + "class": "mce-preview-object mce-object-" + name + }); + + retainAttributesAndInnerHtml(node, previewWrapper); + + previewNode = new tinymce.html.Node(name, 1); + previewNode.attr({ + src: node.attr('src'), + allowfullscreen: node.attr('allowfullscreen'), + width: node.attr('width') || "300", + height: node.attr('height') || (name == "audio" ? "30" : "150"), + frameborder: '0' + }); + + shimNode = new tinymce.html.Node('span', 1); + shimNode.attr('class', 'mce-shim'); + + previewWrapper.append(previewNode); + previewWrapper.append(shimNode); + + return previewWrapper; + } + + editor.on('preInit', function() { + // Make sure that any messy HTML is retained inside these + var specialElements = editor.schema.getSpecialElements(); + tinymce.each('video audio iframe object'.split(' '), function(name) { + specialElements[name] = new RegExp('<\/' + name + '[^>]*>', 'gi'); + }); + + // Allow elements + //editor.schema.addValidElements('object[id|style|width|height|classid|codebase|*],embed[id|style|width|height|type|src|*],video[*],audio[*]'); + + // Set allowFullscreen attribs as boolean + var boolAttrs = editor.schema.getBoolAttrs(); + tinymce.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function(name) { + boolAttrs[name] = {}; + }); + + // Converts iframe, video etc into placeholder images + editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', function(nodes) { + var i = nodes.length, node, placeHolder, videoScript; + + while (i--) { + node = nodes[i]; + if (!node.parent) { + continue; + } + + if (node.parent.attr('data-mce-object')) { + continue; + } + + if (node.name == 'script') { + videoScript = getVideoScriptMatch(node.attr('src')); + if (!videoScript) { + continue; + } + } + + if (videoScript) { + if (videoScript.width) { + node.attr('width', videoScript.width.toString()); + } + + if (videoScript.height) { + node.attr('height', videoScript.height.toString()); + } + } + + if (node.name == 'iframe' && editor.settings.media_live_embeds !== false && tinymce.Env.ceFalse) { + placeHolder = createPreviewNode(node); + } else { + placeHolder = createPlaceholderNode(node); + } + + node.replace(placeHolder); + } + }); + + // Replaces placeholder images with real elements for video, object, iframe etc + editor.serializer.addAttributeFilter('data-mce-object', function(nodes, name) { + var i = nodes.length, node, realElm, ai, attribs, innerHtml, innerNode, realElmName, className; + + while (i--) { + node = nodes[i]; + if (!node.parent) { + continue; + } + + realElmName = node.attr(name); + realElm = new tinymce.html.Node(realElmName, 1); + + // Add width/height to everything but audio + if (realElmName != "audio" && realElmName != "script") { + className = node.attr('class'); + if (className && className.indexOf('mce-preview-object') !== -1) { + realElm.attr({ + width: node.firstChild.attr('width'), + height: node.firstChild.attr('height') + }); + } else { + realElm.attr({ + width: node.attr('width'), + height: node.attr('height') + }); + } + } + + realElm.attr({ + style: node.attr('style') + }); + + // Unprefix all placeholder attributes + attribs = node.attributes; + ai = attribs.length; + while (ai--) { + var attrName = attribs[ai].name; + + if (attrName.indexOf('data-mce-p-') === 0) { + realElm.attr(attrName.substr(11), attribs[ai].value); + } + } + + if (realElmName == "script") { + realElm.attr('type', 'text/javascript'); + } + + // Inject innerhtml + innerHtml = node.attr('data-mce-html'); + if (innerHtml) { + innerNode = new tinymce.html.Node('#text', 3); + innerNode.raw = true; + innerNode.value = sanitize(unescape(innerHtml)); + realElm.append(innerNode); + } + + node.replace(realElm); + } + }); + }); + + editor.on('click keyup', function() { + var selectedNode = editor.selection.getNode(); + + if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) { + if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) { + selectedNode.setAttribute('data-mce-selected', '2'); + } + } + }); + + editor.on('ObjectSelected', function(e) { + var objectType = e.target.getAttribute('data-mce-object'); + + if (objectType == "audio" || objectType == "script") { + e.preventDefault(); + } + }); + + editor.on('objectResized', function(e) { + var target = e.target, html; + + if (target.getAttribute('data-mce-object')) { + html = target.getAttribute('data-mce-html'); + if (html) { + html = unescape(html); + target.setAttribute('data-mce-html', escape( + updateHtml(html, { + width: e.width, + height: e.height + }) + )); + } + } + }); + + editor.addButton('media', { + tooltip: 'Insert/edit video', + onclick: showDialog, + stateSelector: ['img[data-mce-object]', 'span[data-mce-object]'] + }); + + editor.addMenuItem('media', { + icon: 'media', + text: 'Insert/edit video', + onclick: showDialog, + context: 'insert', + prependToContext: true + }); + + editor.on('setContent', function() { + // TODO: This shouldn't be needed there should be a way to mark bogus + // elements so they are never removed except external save + editor.$('span.mce-preview-object').each(function(index, elm) { + var $elm = editor.$(elm); + + if ($elm.find('span.mce-shim', elm).length === 0) { + $elm.append(''); + } + }); + }); + + editor.addCommand('mceMedia', showDialog); + + this.showDialog = showDialog; +}); diff --git a/public/mosaico/dist/vendor/plugins/media/plugin.min.js b/public/mosaico/dist/vendor/plugins/media/plugin.min.js new file mode 100644 index 00000000..dd92d65f --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/media/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("media",function(e,t){function n(e){return e=e.toLowerCase(),e.indexOf(".mp3")!=-1?"audio/mpeg":e.indexOf(".wav")!=-1?"audio/wav":e.indexOf(".mp4")!=-1?"video/mp4":e.indexOf(".webm")!=-1?"video/webm":e.indexOf(".ogg")!=-1?"video/ogg":e.indexOf(".swf")!=-1?"application/x-shockwave-flash":""}function r(t){var n=e.settings.media_scripts;if(n)for(var r=0;r=0;i--)t[r]==n[i]&&n.splice(i,1);e.selection.select(n[0]),e.nodeChanged()}})}function o(){var t=e.selection.getNode();if(t.getAttribute("data-mce-object"))return e.selection.getContent()}function a(i){var o="";if(!i.source1&&(tinymce.extend(i,s(i.embed)),!i.source1))return"";if(i.source2||(i.source2=""),i.poster||(i.poster=""),i.source1=e.convertURL(i.source1,"source"),i.source2=e.convertURL(i.source2,"source"),i.source1mime=n(i.source1),i.source2mime=n(i.source2),i.poster=e.convertURL(i.poster,"poster"),i.flashPlayerUrl=e.convertURL(t+"/moxieplayer.swf","movie"),tinymce.each(p,function(e){var t,n,r;if(t=e.regex.exec(i.source1)){for(r=e.url,n=0;t[n];n++)r=r.replace("$"+n,function(){return t[n]});i.source1=r,i.type=e.type,i.allowFullscreen=e.allowFullscreen,i.width=i.width||e.w,i.height=i.height||e.h}}),i.embed)o=u(i.embed,i,!0);else{var a=r(i.source1);if(a&&(i.type="script",i.width=a.width,i.height=a.height),i.width=i.width||300,i.height=i.height||150,tinymce.each(i,function(t,n){i[n]=e.dom.encode(t)}),"iframe"==i.type){var l=i.allowFullscreen?' allowFullscreen="1"':"";o+='"}else"application/x-shockwave-flash"==i.source1mime?(o+='',i.poster&&(o+=''),o+=""):i.source1mime.indexOf("audio")!=-1?e.settings.audio_template_callback?o=e.settings.audio_template_callback(i):o+='":"script"==i.type?o+='':o=e.settings.video_template_callback?e.settings.video_template_callback(i):'"}return o}function s(e){var t={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,n){if(t.source1||"param"!=e||(t.source1=n.map.movie),"iframe"!=e&&"object"!=e&&"embed"!=e&&"video"!=e&&"audio"!=e||(t.type||(t.type=e),t=tinymce.extend(n.map,t)),"script"==e){var i=r(n.map.src);if(!i)return;t={type:"script",source1:n.map.src,width:i.width,height:i.height}}"source"==e&&(t.source1?t.source2||(t.source2=n.map.src):t.source1=n.map.src),"img"!=e||t.poster||(t.poster=n.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function l(t){return t.getAttribute("data-mce-object")?s(e.serializer.serialize(t,{selection:!0})):{}}function c(t){if(e.settings.media_filter_html===!1)return t;var n,r=new tinymce.html.Writer;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!1,special:"script,noscript",comment:function(e){r.comment(e)},cdata:function(e){r.cdata(e)},text:function(e,t){r.text(e,t)},start:function(t,i,o){if(n=!0,"script"!=t&&"noscript"!=t){for(var a=0;a]*>","gi")});var n=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){n[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(t){for(var n,i,o,a=t.length;a--;)n=t[a],n.parent&&(n.parent.attr("data-mce-object")||("script"!=n.name||(o=r(n.attr("src"))))&&(o&&(o.width&&n.attr("width",o.width.toString()),o.height&&n.attr("height",o.height.toString())),i="iframe"==n.name&&e.settings.media_live_embeds!==!1&&tinymce.Env.ceFalse?h(n):f(n),n.replace(i)))}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var n,r,i,o,a,s,l,u,d=e.length;d--;)if(n=e[d],n.parent){for(l=n.attr(t),r=new tinymce.html.Node(l,1),"audio"!=l&&"script"!=l&&(u=n.attr("class"),u&&u.indexOf("mce-preview-object")!==-1?r.attr({width:n.firstChild.attr("width"),height:n.firstChild.attr("height")}):r.attr({width:n.attr("width"),height:n.attr("height")})),r.attr({style:n.attr("style")}),o=n.attributes,i=o.length;i--;){var f=o[i].name;0===f.indexOf("data-mce-p-")&&r.attr(f.substr(11),o[i].value)}"script"==l&&r.attr("type","text/javascript"),a=n.attr("data-mce-html"),a&&(s=new tinymce.html.Node("#text",3),s.raw=!0,s.value=c(unescape(a)),r.append(s)),n.replace(r)}})}),e.on("click keyup",function(){var t=e.selection.getNode();t&&e.dom.hasClass(t,"mce-preview-object")&&e.dom.getAttrib(t,"data-mce-selected")&&t.setAttribute("data-mce-selected","2")}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");"audio"!=t&&"script"!=t||e.preventDefault()}),e.on("objectResized",function(e){var t,n=e.target;n.getAttribute("data-mce-object")&&(t=n.getAttribute("data-mce-html"),t&&(t=unescape(t),n.setAttribute("data-mce-html",escape(u(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:i,stateSelector:["img[data-mce-object]","span[data-mce-object]"]}),e.addMenuItem("media",{icon:"media",text:"Insert/edit video",onclick:i,context:"insert",prependToContext:!0}),e.on("setContent",function(){e.$("span.mce-preview-object").each(function(t,n){var r=e.$(n);0===r.find("span.mce-shim",n).length&&r.append('')})}),e.addCommand("mceMedia",i),this.showDialog=i}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/nonbreaking/plugin.js b/public/mosaico/dist/vendor/plugins/nonbreaking/plugin.js new file mode 100644 index 00000000..cb6b1f04 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/nonbreaking/plugin.js @@ -0,0 +1,53 @@ +/** + * plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('nonbreaking', function(editor) { + var setting = editor.getParam('nonbreaking_force_tab'); + + editor.addCommand('mceNonBreaking', function() { + editor.insertContent( + (editor.plugins.visualchars && editor.plugins.visualchars.state) ? + ' ' : ' ' + ); + + editor.dom.setAttrib(editor.dom.select('span.mce-nbsp'), 'data-mce-bogus', '1'); + }); + + editor.addButton('nonbreaking', { + title: 'Nonbreaking space', + cmd: 'mceNonBreaking' + }); + + editor.addMenuItem('nonbreaking', { + text: 'Nonbreaking space', + cmd: 'mceNonBreaking', + context: 'insert' + }); + + if (setting) { + var spaces = +setting > 1 ? +setting : 3; // defaults to 3 spaces if setting is true (or 1) + + editor.on('keydown', function(e) { + if (e.keyCode == 9) { + + if (e.shiftKey) { + return; + } + + e.preventDefault(); + for (var i = 0; i < spaces; i++) { + editor.execCommand('mceNonBreaking'); + } + } + }); + } +}); diff --git a/public/mosaico/dist/vendor/plugins/nonbreaking/plugin.min.js b/public/mosaico/dist/vendor/plugins/nonbreaking/plugin.min.js new file mode 100644 index 00000000..cae1aca4 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/nonbreaking/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("nonbreaking",function(e){var t=e.getParam("nonbreaking_force_tab");if(e.addCommand("mceNonBreaking",function(){e.insertContent(e.plugins.visualchars&&e.plugins.visualchars.state?' ':" "),e.dom.setAttrib(e.dom.select("span.mce-nbsp"),"data-mce-bogus","1")}),e.addButton("nonbreaking",{title:"Nonbreaking space",cmd:"mceNonBreaking"}),e.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),t){var n=+t>1?+t:3;e.on("keydown",function(t){if(9==t.keyCode){if(t.shiftKey)return;t.preventDefault();for(var r=0;r 0 && content.charAt(index - 1) == '"') { + return match; + } + + return ( + '' + + editor.dom.encode(typeof args[1] === "string" ? args[1] : args[0]) + '' + ); + } + + // Don't replace the variables when raw is used for example on undo/redo + if (e.format == "raw") { + return; + } + + while (i--) { + content = content.replace(nonEditableRegExps[i], replaceMatchWithSpan); + } + + e.content = content; + } + + editClass = " " + tinymce.trim(editor.getParam("noneditable_editable_class", "mceEditable")) + " "; + nonEditClass = " " + tinymce.trim(editor.getParam("noneditable_noneditable_class", "mceNonEditable")) + " "; + + var hasEditClass = hasClass(editClass); + var hasNonEditClass = hasClass(nonEditClass); + + nonEditableRegExps = editor.getParam("noneditable_regexp"); + if (nonEditableRegExps && !nonEditableRegExps.length) { + nonEditableRegExps = [nonEditableRegExps]; + } + + editor.on('PreInit', function() { + if (nonEditableRegExps) { + editor.on('BeforeSetContent', convertRegExpsToNonEditable); + } + + editor.parser.addAttributeFilter('class', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + + if (hasEditClass(node)) { + node.attr(contentEditableAttrName, "true"); + } else if (hasNonEditClass(node)) { + node.attr(contentEditableAttrName, "false"); + } + } + }); + + editor.serializer.addAttributeFilter(contentEditableAttrName, function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + if (!hasEditClass(node) && !hasNonEditClass(node)) { + continue; + } + + if (nonEditableRegExps && node.attr('data-mce-content')) { + node.name = "#text"; + node.type = 3; + node.raw = true; + node.value = node.attr('data-mce-content'); + } else { + node.attr(contentEditableAttrName, null); + } + } + }); + }); +}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/noneditable/plugin.min.js b/public/mosaico/dist/vendor/plugins/noneditable/plugin.min.js new file mode 100644 index 00000000..fd7374bc --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/noneditable/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("noneditable",function(e){function t(e){return function(t){return(" "+t.attr("class")+" ").indexOf(e)!==-1}}function n(t){function n(t){var n=arguments,r=n[n.length-2];return r>0&&'"'==a.charAt(r-1)?t:''+e.dom.encode("string"==typeof n[1]?n[1]:n[0])+""}var r=o.length,a=t.content,s=tinymce.trim(i);if("raw"!=t.format){for(;r--;)a=a.replace(o[r],n);t.content=a}}var r,i,o,a="contenteditable";r=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",i=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";var s=t(r),l=t(i);o=e.getParam("noneditable_regexp"),o&&!o.length&&(o=[o]),e.on("PreInit",function(){o&&e.on("BeforeSetContent",n),e.parser.addAttributeFilter("class",function(e){for(var t,n=e.length;n--;)t=e[n],s(t)?t.attr(a,"true"):l(t)&&t.attr(a,"false")}),e.serializer.addAttributeFilter(a,function(e){for(var t,n=e.length;n--;)t=e[n],(s(t)||l(t))&&(o&&t.attr("data-mce-content")?(t.name="#text",t.type=3,t.raw=!0,t.value=t.attr("data-mce-content")):t.attr(a,null))})})}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/pagebreak/plugin.js b/public/mosaico/dist/vendor/plugins/pagebreak/plugin.js new file mode 100644 index 00000000..d42d09bb --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/pagebreak/plugin.js @@ -0,0 +1,88 @@ +/** + * plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('pagebreak', function(editor) { + var pageBreakClass = 'mce-pagebreak', separatorHtml = editor.getParam('pagebreak_separator', ''); + + var pageBreakSeparatorRegExp = new RegExp(separatorHtml.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) { + return '\\' + a; + }), 'gi'); + + var pageBreakPlaceHolderHtml = ''; + + // Register commands + editor.addCommand('mcePageBreak', function() { + if (editor.settings.pagebreak_split_block) { + editor.insertContent('

' + pageBreakPlaceHolderHtml + '

'); + } else { + editor.insertContent(pageBreakPlaceHolderHtml); + } + }); + + // Register buttons + editor.addButton('pagebreak', { + title: 'Page break', + cmd: 'mcePageBreak' + }); + + editor.addMenuItem('pagebreak', { + text: 'Page break', + icon: 'pagebreak', + cmd: 'mcePageBreak', + context: 'insert' + }); + + editor.on('ResolveName', function(e) { + if (e.target.nodeName == 'IMG' && editor.dom.hasClass(e.target, pageBreakClass)) { + e.name = 'pagebreak'; + } + }); + + editor.on('click', function(e) { + e = e.target; + + if (e.nodeName === 'IMG' && editor.dom.hasClass(e, pageBreakClass)) { + editor.selection.select(e); + } + }); + + editor.on('BeforeSetContent', function(e) { + e.content = e.content.replace(pageBreakSeparatorRegExp, pageBreakPlaceHolderHtml); + }); + + editor.on('PreInit', function() { + editor.serializer.addNodeFilter('img', function(nodes) { + var i = nodes.length, node, className; + + while (i--) { + node = nodes[i]; + className = node.attr('class'); + if (className && className.indexOf('mce-pagebreak') !== -1) { + // Replace parent block node if pagebreak_split_block is enabled + var parentNode = node.parent; + if (editor.schema.getBlockElements()[parentNode.name] && editor.settings.pagebreak_split_block) { + parentNode.type = 3; + parentNode.value = separatorHtml; + parentNode.raw = true; + node.remove(); + continue; + } + + node.type = 3; + node.value = separatorHtml; + node.raw = true; + } + } + }); + }); +}); diff --git a/public/mosaico/dist/vendor/plugins/pagebreak/plugin.min.js b/public/mosaico/dist/vendor/plugins/pagebreak/plugin.min.js new file mode 100644 index 00000000..78fea042 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/pagebreak/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("pagebreak",function(e){var t="mce-pagebreak",n=e.getParam("pagebreak_separator",""),r=new RegExp(n.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),i='';e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent("

"+i+"

"):e.insertContent(i)}),e.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),e.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),e.on("ResolveName",function(n){"IMG"==n.target.nodeName&&e.dom.hasClass(n.target,t)&&(n.name="pagebreak")}),e.on("click",function(n){n=n.target,"IMG"===n.nodeName&&e.dom.hasClass(n,t)&&e.selection.select(n)}),e.on("BeforeSetContent",function(e){e.content=e.content.replace(r,i)}),e.on("PreInit",function(){e.serializer.addNodeFilter("img",function(t){for(var r,i,o=t.length;o--;)if(r=t[o],i=r.attr("class"),i&&i.indexOf("mce-pagebreak")!==-1){var a=r.parent;if(e.schema.getBlockElements()[a.name]&&e.settings.pagebreak_split_block){a.type=3,a.value=n,a.raw=!0,r.remove();continue}r.type=3,r.value=n,r.raw=!0}})})}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/paste/plugin.js b/public/mosaico/dist/vendor/plugins/paste/plugin.js new file mode 100644 index 00000000..7d2a71e5 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/paste/plugin.js @@ -0,0 +1,1844 @@ +/** + * Compiled inline version. (Library mode) + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports, undefined) { + "use strict"; + + var modules = {}; + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + } + + function defined(id) { + return !!modules[id]; + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function expose(ids) { + var i, target, id, fragments, privateModules; + + for (i = 0; i < ids.length; i++) { + target = exports; + id = ids[i]; + fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + + // Expose private modules for unit tests + if (exports.AMDLC_TESTS) { + privateModules = exports.privateModules || {}; + + for (id in modules) { + privateModules[id] = modules[id]; + } + + for (i = 0; i < ids.length; i++) { + delete privateModules[ids[i]]; + } + + exports.privateModules = privateModules; + } + } + +// Included from: js/tinymce/plugins/paste/classes/Utils.js + +/** + * Utils.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contails various utility functions for the paste plugin. + * + * @class tinymce.pasteplugin.Utils + */ +define("tinymce/pasteplugin/Utils", [ + "tinymce/util/Tools", + "tinymce/html/DomParser", + "tinymce/html/Schema" +], function(Tools, DomParser, Schema) { + function filter(content, items) { + Tools.each(items, function(v) { + if (v.constructor == RegExp) { + content = content.replace(v, ''); + } else { + content = content.replace(v[0], v[1]); + } + }); + + return content; + } + + /** + * Gets the innerText of the specified element. It will handle edge cases + * and works better than textContent on Gecko. + * + * @param {String} html HTML string to get text from. + * @return {String} String of text with line feeds. + */ + function innerText(html) { + var schema = new Schema(), domParser = new DomParser({}, schema), text = ''; + var shortEndedElements = schema.getShortEndedElements(); + var ignoreElements = Tools.makeMap('script noscript style textarea video audio iframe object', ' '); + var blockElements = schema.getBlockElements(); + + function walk(node) { + var name = node.name, currentNode = node; + + if (name === 'br') { + text += '\n'; + return; + } + + // img/input/hr + if (shortEndedElements[name]) { + text += ' '; + } + + // Ingore script, video contents + if (ignoreElements[name]) { + text += ' '; + return; + } + + if (node.type == 3) { + text += node.value; + } + + // Walk all children + if (!node.shortEnded) { + if ((node = node.firstChild)) { + do { + walk(node); + } while ((node = node.next)); + } + } + + // Add \n or \n\n for blocks or P + if (blockElements[name] && currentNode.next) { + text += '\n'; + + if (name == 'p') { + text += '\n'; + } + } + } + + html = filter(html, [ + //g // Conditional comments + ]); + + walk(domParser.parse(html)); + + return text; + } + + /** + * Trims the specified HTML by removing all WebKit fragments, all elements wrapping the body trailing BR elements etc. + * + * @param {String} html Html string to trim contents on. + * @return {String} Html contents that got trimmed. + */ + function trimHtml(html) { + function trimSpaces(all, s1, s2) { + // WebKit   meant to preserve multiple spaces but instead inserted around all inline tags, + // including the spans with inline styles created on paste + if (!s1 && !s2) { + return ' '; + } + + return '\u00a0'; + } + + html = filter(html, [ + /^[\s\S]*]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g, // Remove anything but the contents within the BODY element + /|/g, // Inner fragments (tables from excel on mac) + [/( ?)\u00a0<\/span>( ?)/g, trimSpaces], + /
/g, + /
$/i // Trailing BR elements + ]); + + return html; + } + + // TODO: Should be in some global class + function createIdGenerator(prefix) { + var count = 0; + + return function() { + return prefix + (count++); + }; + } + + return { + filter: filter, + innerText: innerText, + trimHtml: trimHtml, + createIdGenerator: createIdGenerator + }; +}); + +// Included from: js/tinymce/plugins/paste/classes/SmartPaste.js + +/** + * SmartPaste.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Tries to be smart depending on what the user pastes if it looks like an url + * it will make a link out of the current selection. If it's an image url that looks + * like an image it will check if it's an image and insert it as an image. + * + * @class tinymce.pasteplugin.SmartPaste + * @private + */ +define("tinymce/pasteplugin/SmartPaste", [ + "tinymce/util/Tools" +], function (Tools) { + var isAbsoluteUrl = function (url) { + return /^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(url); + }; + + var isImageUrl = function (url) { + return isAbsoluteUrl(url) && /.(gif|jpe?g|png)$/.test(url); + }; + + var createImage = function (editor, url, pasteHtml) { + editor.undoManager.extra(function () { + pasteHtml(editor, url); + }, function () { + editor.insertContent(''); + }); + + return true; + }; + + var createLink = function (editor, url, pasteHtml) { + editor.undoManager.extra(function () { + pasteHtml(editor, url); + }, function () { + editor.execCommand('mceInsertLink', false, url); + }); + + return true; + }; + + var linkSelection = function (editor, html, pasteHtml) { + return editor.selection.isCollapsed() === false && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtml) : false; + }; + + var insertImage = function (editor, html, pasteHtml) { + return isImageUrl(html) ? createImage(editor, html, pasteHtml) : false; + }; + + var pasteHtml = function (editor, html) { + editor.insertContent(html, { + merge: editor.settings.paste_merge_formats !== false, + paste: true + }); + + return true; + }; + + var smartInsertContent = function (editor, html) { + Tools.each([ + linkSelection, + insertImage, + pasteHtml + ], function (action) { + return action(editor, html, pasteHtml) !== true; + }); + }; + + var insertContent = function (editor, html) { + if (editor.settings.smart_paste === false) { + pasteHtml(editor, html); + } else { + smartInsertContent(editor, html); + } + }; + + return { + isImageUrl: isImageUrl, + isAbsoluteUrl: isAbsoluteUrl, + insertContent: insertContent + }; +}); + +// Included from: js/tinymce/plugins/paste/classes/Clipboard.js + +/** + * Clipboard.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains logic for getting HTML contents out of the clipboard. + * + * We need to make a lot of ugly hacks to get the contents out of the clipboard since + * the W3C Clipboard API is broken in all browsers that have it: Gecko/WebKit/Blink. + * We might rewrite this the way those API:s stabilize. Browsers doesn't handle pasting + * from applications like Word the same way as it does when pasting into a contentEditable area + * so we need to do lots of extra work to try to get to this clipboard data. + * + * Current implementation steps: + * 1. On keydown with paste keys Ctrl+V or Shift+Insert create + * a paste bin element and move focus to that element. + * 2. Wait for the browser to fire a "paste" event and get the contents out of the paste bin. + * 3. Check if the paste was successful if true, process the HTML. + * (4). If the paste was unsuccessful use IE execCommand, Clipboard API, document.dataTransfer old WebKit API etc. + * + * @class tinymce.pasteplugin.Clipboard + * @private + */ +define("tinymce/pasteplugin/Clipboard", [ + "tinymce/Env", + "tinymce/dom/RangeUtils", + "tinymce/util/VK", + "tinymce/pasteplugin/Utils", + "tinymce/pasteplugin/SmartPaste", + "tinymce/util/Delay" +], function(Env, RangeUtils, VK, Utils, SmartPaste, Delay) { + return function(editor) { + var self = this, pasteBinElm, lastRng, keyboardPasteTimeStamp = 0, draggingInternally = false; + var pasteBinDefaultContent = '%MCEPASTEBIN%', keyboardPastePlainTextState; + var mceInternalUrlPrefix = 'data:text/mce-internal,'; + var uniqueId = Utils.createIdGenerator("mceclip"); + + /** + * Pastes the specified HTML. This means that the HTML is filtered and then + * inserted at the current selection in the editor. It will also fire paste events + * for custom user filtering. + * + * @param {String} html HTML code to paste into the current selection. + */ + function pasteHtml(html) { + var args, dom = editor.dom; + + args = editor.fire('BeforePastePreProcess', {content: html}); // Internal event used by Quirks + args = editor.fire('PastePreProcess', args); + html = args.content; + + if (!args.isDefaultPrevented()) { + // User has bound PastePostProcess events then we need to pass it through a DOM node + // This is not ideal but we don't want to let the browser mess up the HTML for example + // some browsers add   to P tags etc + if (editor.hasEventListeners('PastePostProcess') && !args.isDefaultPrevented()) { + // We need to attach the element to the DOM so Sizzle selectors work on the contents + var tempBody = dom.add(editor.getBody(), 'div', {style: 'display:none'}, html); + args = editor.fire('PastePostProcess', {node: tempBody}); + dom.remove(tempBody); + html = args.node.innerHTML; + } + + if (!args.isDefaultPrevented()) { + SmartPaste.insertContent(editor, html); + } + } + } + + /** + * Pastes the specified text. This means that the plain text is processed + * and converted into BR and P elements. It will fire paste events for custom filtering. + * + * @param {String} text Text to paste as the current selection location. + */ + function pasteText(text) { + text = editor.dom.encode(text).replace(/\r\n/g, '\n'); + + var startBlock = editor.dom.getParent(editor.selection.getStart(), editor.dom.isBlock); + + // Create start block html for example

+ var forcedRootBlockName = editor.settings.forced_root_block; + var forcedRootBlockStartHtml; + if (forcedRootBlockName) { + forcedRootBlockStartHtml = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs); + forcedRootBlockStartHtml = forcedRootBlockStartHtml.substr(0, forcedRootBlockStartHtml.length - 3) + '>'; + } + + if ((startBlock && /^(PRE|DIV)$/.test(startBlock.nodeName)) || !forcedRootBlockName) { + text = Utils.filter(text, [ + [/\n/g, "
"] + ]); + } else { + text = Utils.filter(text, [ + [/\n\n/g, "

" + forcedRootBlockStartHtml], + [/^(.*<\/p>)(

)$/, forcedRootBlockStartHtml + '$1'], + [/\n/g, "
"] + ]); + + if (text.indexOf('

') != -1) { + text = forcedRootBlockStartHtml + text; + } + } + + pasteHtml(text); + } + + /** + * Creates a paste bin element as close as possible to the current caret location and places the focus inside that element + * so that when the real paste event occurs the contents gets inserted into this element + * instead of the current editor selection element. + */ + function createPasteBin() { + var dom = editor.dom, body = editor.getBody(); + var viewport = editor.dom.getViewPort(editor.getWin()), scrollTop = viewport.y, top = 20; + var scrollContainer; + + lastRng = editor.selection.getRng(); + + if (editor.inline) { + scrollContainer = editor.selection.getScrollContainer(); + + // Can't always rely on scrollTop returning a useful value. + // It returns 0 if the browser doesn't support scrollTop for the element or is non-scrollable + if (scrollContainer && scrollContainer.scrollTop > 0) { + scrollTop = scrollContainer.scrollTop; + } + } + + /** + * Returns the rect of the current caret if the caret is in an empty block before a + * BR we insert a temporary invisible character that we get the rect this way we always get a proper rect. + * + * TODO: This might be useful in core. + */ + function getCaretRect(rng) { + var rects, textNode, node, container = rng.startContainer; + + rects = rng.getClientRects(); + if (rects.length) { + return rects[0]; + } + + if (!rng.collapsed || container.nodeType != 1) { + return; + } + + node = container.childNodes[lastRng.startOffset]; + + // Skip empty whitespace nodes + while (node && node.nodeType == 3 && !node.data.length) { + node = node.nextSibling; + } + + if (!node) { + return; + } + + // Check if the location is |
+ // TODO: Might need to expand this to say |

+ if (node.tagName == 'BR') { + textNode = dom.doc.createTextNode('\uFEFF'); + node.parentNode.insertBefore(textNode, node); + + rng = dom.createRng(); + rng.setStartBefore(textNode); + rng.setEndAfter(textNode); + + rects = rng.getClientRects(); + dom.remove(textNode); + } + + if (rects.length) { + return rects[0]; + } + } + + // Calculate top cordinate this is needed to avoid scrolling to top of document + // We want the paste bin to be as close to the caret as possible to avoid scrolling + if (lastRng.getClientRects) { + var rect = getCaretRect(lastRng); + + if (rect) { + // Client rects gets us closes to the actual + // caret location in for example a wrapped paragraph block + top = scrollTop + (rect.top - dom.getPos(body).y); + } else { + top = scrollTop; + + // Check if we can find a closer location by checking the range element + var container = lastRng.startContainer; + if (container) { + if (container.nodeType == 3 && container.parentNode != body) { + container = container.parentNode; + } + + if (container.nodeType == 1) { + top = dom.getPos(container, scrollContainer || body).y; + } + } + } + } + + // Create a pastebin + pasteBinElm = dom.add(editor.getBody(), 'div', { + id: "mcepastebin", + contentEditable: true, + "data-mce-bogus": "all", + style: 'position: absolute; top: ' + top + 'px;' + + 'width: 10px; height: 10px; overflow: hidden; opacity: 0' + }, pasteBinDefaultContent); + + // Move paste bin out of sight since the controlSelection rect gets displayed otherwise on IE and Gecko + if (Env.ie || Env.gecko) { + dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) == 'rtl' ? 0xFFFF : -0xFFFF); + } + + // Prevent focus events from bubbeling fixed FocusManager issues + dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function(e) { + e.stopPropagation(); + }); + + pasteBinElm.focus(); + editor.selection.select(pasteBinElm, true); + } + + /** + * Removes the paste bin if it exists. + */ + function removePasteBin() { + if (pasteBinElm) { + var pasteBinClone; + + // WebKit/Blink might clone the div so + // lets make sure we remove all clones + // TODO: Man o man is this ugly. WebKit is the new IE! Remove this if they ever fix it! + while ((pasteBinClone = editor.dom.get('mcepastebin'))) { + editor.dom.remove(pasteBinClone); + editor.dom.unbind(pasteBinClone); + } + + if (lastRng) { + editor.selection.setRng(lastRng); + } + } + + pasteBinElm = lastRng = null; + } + + /** + * Returns the contents of the paste bin as a HTML string. + * + * @return {String} Get the contents of the paste bin. + */ + function getPasteBinHtml() { + var html = '', pasteBinClones, i, clone, cloneHtml; + + // Since WebKit/Chrome might clone the paste bin when pasting + // for example: we need to check if any of them contains some useful html. + // TODO: Man o man is this ugly. WebKit is the new IE! Remove this if they ever fix it! + pasteBinClones = editor.dom.select('div[id=mcepastebin]'); + for (i = 0; i < pasteBinClones.length; i++) { + clone = pasteBinClones[i]; + + // Pasting plain text produces pastebins in pastebinds makes sence right!? + if (clone.firstChild && clone.firstChild.id == 'mcepastebin') { + clone = clone.firstChild; + } + + cloneHtml = clone.innerHTML; + if (html != pasteBinDefaultContent) { + html += cloneHtml; + } + } + + return html; + } + + /** + * Gets various content types out of a datatransfer object. + * + * @param {DataTransfer} dataTransfer Event fired on paste. + * @return {Object} Object with mime types and data for those mime types. + */ + function getDataTransferItems(dataTransfer) { + var items = {}; + + if (dataTransfer) { + // Use old WebKit/IE API + if (dataTransfer.getData) { + var legacyText = dataTransfer.getData('Text'); + if (legacyText && legacyText.length > 0) { + if (legacyText.indexOf(mceInternalUrlPrefix) == -1) { + items['text/plain'] = legacyText; + } + } + } + + if (dataTransfer.types) { + for (var i = 0; i < dataTransfer.types.length; i++) { + var contentType = dataTransfer.types[i]; + items[contentType] = dataTransfer.getData(contentType); + } + } + } + + return items; + } + + /** + * Gets various content types out of the Clipboard API. It will also get the + * plain text using older IE and WebKit API:s. + * + * @param {ClipboardEvent} clipboardEvent Event fired on paste. + * @return {Object} Object with mime types and data for those mime types. + */ + function getClipboardContent(clipboardEvent) { + return getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer); + } + + function hasHtmlOrText(content) { + return hasContentType(content, 'text/html') || hasContentType(content, 'text/plain'); + } + + function getBase64FromUri(uri) { + var idx; + + idx = uri.indexOf(','); + if (idx !== -1) { + return uri.substr(idx + 1); + } + + return null; + } + + function isValidDataUriImage(settings, imgElm) { + return settings.images_dataimg_filter ? settings.images_dataimg_filter(imgElm) : true; + } + + function pasteImage(rng, reader, blob) { + if (rng) { + editor.selection.setRng(rng); + rng = null; + } + + var dataUri = reader.result; + var base64 = getBase64FromUri(dataUri); + + var img = new Image(); + img.src = dataUri; + + // TODO: Move the bulk of the cache logic to EditorUpload + if (isValidDataUriImage(editor.settings, img)) { + var blobCache = editor.editorUpload.blobCache; + var blobInfo, existingBlobInfo; + + existingBlobInfo = blobCache.findFirst(function(cachedBlobInfo) { + return cachedBlobInfo.base64() === base64; + }); + + if (!existingBlobInfo) { + blobInfo = blobCache.create(uniqueId(), blob, base64); + blobCache.add(blobInfo); + } else { + blobInfo = existingBlobInfo; + } + + pasteHtml(''); + } else { + pasteHtml(''); + } + } + + /** + * Checks if the clipboard contains image data if it does it will take that data + * and convert it into a data url image and paste that image at the caret location. + * + * @param {ClipboardEvent} e Paste/drop event object. + * @param {DOMRange} rng Rng object to move selection to. + * @return {Boolean} true/false if the image data was found or not. + */ + function pasteImageData(e, rng) { + var dataTransfer = e.clipboardData || e.dataTransfer; + + function processItems(items) { + var i, item, reader, hadImage = false; + + if (items) { + for (i = 0; i < items.length; i++) { + item = items[i]; + + if (/^image\/(jpeg|png|gif|bmp)$/.test(item.type)) { + var blob = item.getAsFile ? item.getAsFile() : item; + + reader = new FileReader(); + reader.onload = pasteImage.bind(null, rng, reader, blob); + reader.readAsDataURL(blob); + + e.preventDefault(); + hadImage = true; + } + } + } + + return hadImage; + } + + if (editor.settings.paste_data_images && dataTransfer) { + return processItems(dataTransfer.items) || processItems(dataTransfer.files); + } + } + + /** + * Chrome on Android doesn't support proper clipboard access so we have no choice but to allow the browser default behavior. + * + * @param {Event} e Paste event object to check if it contains any data. + * @return {Boolean} true/false if the clipboard is empty or not. + */ + function isBrokenAndroidClipboardEvent(e) { + var clipboardData = e.clipboardData; + + return navigator.userAgent.indexOf('Android') != -1 && clipboardData && clipboardData.items && clipboardData.items.length === 0; + } + + function getCaretRangeFromEvent(e) { + return RangeUtils.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc()); + } + + function hasContentType(clipboardContent, mimeType) { + return mimeType in clipboardContent && clipboardContent[mimeType].length > 0; + } + + function isKeyboardPasteEvent(e) { + return (VK.metaKeyPressed(e) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45); + } + + function registerEventHandlers() { + editor.on('keydown', function(e) { + function removePasteBinOnKeyUp(e) { + // Ctrl+V or Shift+Insert + if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) { + removePasteBin(); + } + } + + // Ctrl+V or Shift+Insert + if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) { + keyboardPastePlainTextState = e.shiftKey && e.keyCode == 86; + + // Edge case on Safari on Mac where it doesn't handle Cmd+Shift+V correctly + // it fires the keydown but no paste or keyup so we are left with a paste bin + if (keyboardPastePlainTextState && Env.webkit && navigator.userAgent.indexOf('Version/') != -1) { + return; + } + + // Prevent undoManager keydown handler from making an undo level with the pastebin in it + e.stopImmediatePropagation(); + + keyboardPasteTimeStamp = new Date().getTime(); + + // IE doesn't support Ctrl+Shift+V and it doesn't even produce a paste event + // so lets fake a paste event and let IE use the execCommand/dataTransfer methods + if (Env.ie && keyboardPastePlainTextState) { + e.preventDefault(); + editor.fire('paste', {ieFake: true}); + return; + } + + removePasteBin(); + createPasteBin(); + + // Remove pastebin if we get a keyup and no paste event + // For example pasting a file in IE 11 will not produce a paste event + editor.once('keyup', removePasteBinOnKeyUp); + editor.once('paste', function() { + editor.off('keyup', removePasteBinOnKeyUp); + }); + } + }); + + function insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode) { + var content; + + // Grab HTML from Clipboard API or paste bin as a fallback + if (hasContentType(clipboardContent, 'text/html')) { + content = clipboardContent['text/html']; + } else { + content = getPasteBinHtml(); + + // If paste bin is empty try using plain text mode + // since that is better than nothing right + if (content == pasteBinDefaultContent) { + plainTextMode = true; + } + } + + content = Utils.trimHtml(content); + + // WebKit has a nice bug where it clones the paste bin if you paste from for example notepad + // so we need to force plain text mode in this case + if (pasteBinElm && pasteBinElm.firstChild && pasteBinElm.firstChild.id === 'mcepastebin') { + plainTextMode = true; + } + + removePasteBin(); + + // If we got nothing from clipboard API and pastebin then we could try the last resort: plain/text + if (!content.length) { + plainTextMode = true; + } + + // Grab plain text from Clipboard API or convert existing HTML to plain text + if (plainTextMode) { + // Use plain text contents from Clipboard API unless the HTML contains paragraphs then + // we should convert the HTML to plain text since works better when pasting HTML/Word contents as plain text + if (hasContentType(clipboardContent, 'text/plain') && content.indexOf('

') == -1) { + content = clipboardContent['text/plain']; + } else { + content = Utils.innerText(content); + } + } + + // If the content is the paste bin default HTML then it was + // impossible to get the cliboard data out. + if (content == pasteBinDefaultContent) { + if (!isKeyBoardPaste) { + editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.'); + } + + return; + } + + if (plainTextMode) { + pasteText(content); + } else { + pasteHtml(content); + } + } + + var getLastRng = function() { + return lastRng || editor.selection.getRng(); + }; + + editor.on('paste', function(e) { + // Getting content from the Clipboard can take some time + var clipboardTimer = new Date().getTime(); + var clipboardContent = getClipboardContent(e); + var clipboardDelay = new Date().getTime() - clipboardTimer; + + var isKeyBoardPaste = (new Date().getTime() - keyboardPasteTimeStamp - clipboardDelay) < 1000; + var plainTextMode = self.pasteFormat == "text" || keyboardPastePlainTextState; + + keyboardPastePlainTextState = false; + + if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) { + removePasteBin(); + return; + } + + if (!hasHtmlOrText(clipboardContent) && pasteImageData(e, getLastRng())) { + removePasteBin(); + return; + } + + // Not a keyboard paste prevent default paste and try to grab the clipboard contents using different APIs + if (!isKeyBoardPaste) { + e.preventDefault(); + } + + // Try IE only method if paste isn't a keyboard paste + if (Env.ie && (!isKeyBoardPaste || e.ieFake)) { + createPasteBin(); + + editor.dom.bind(pasteBinElm, 'paste', function(e) { + e.stopPropagation(); + }); + + editor.getDoc().execCommand('Paste', false, null); + clipboardContent["text/html"] = getPasteBinHtml(); + } + + // If clipboard API has HTML then use that directly + if (hasContentType(clipboardContent, 'text/html')) { + e.preventDefault(); + insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode); + } else { + Delay.setEditorTimeout(editor, function() { + insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode); + }, 0); + } + }); + + editor.on('dragstart dragend', function(e) { + draggingInternally = e.type == 'dragstart'; + }); + + function isPlainTextFileUrl(content) { + return content['text/plain'].indexOf('file://') === 0; + } + + editor.on('drop', function(e) { + var dropContent, rng; + + rng = getCaretRangeFromEvent(e); + + if (e.isDefaultPrevented() || draggingInternally) { + return; + } + + dropContent = getDataTransferItems(e.dataTransfer); + + if ((!hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && pasteImageData(e, rng)) { + return; + } + + if (rng && editor.settings.paste_filter_drop !== false) { + var content = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain']; + + if (content) { + e.preventDefault(); + + // FF 45 doesn't paint a caret when dragging in text in due to focus call by execCommand + Delay.setEditorTimeout(editor, function() { + editor.undoManager.transact(function() { + if (dropContent['mce-internal']) { + editor.execCommand('Delete'); + } + + editor.selection.setRng(rng); + + content = Utils.trimHtml(content); + + if (!dropContent['text/html']) { + pasteText(content); + } else { + pasteHtml(content); + } + }); + }); + } + } + }); + + editor.on('dragover dragend', function(e) { + if (editor.settings.paste_data_images) { + e.preventDefault(); + } + }); + } + + self.pasteHtml = pasteHtml; + self.pasteText = pasteText; + self.pasteImageData = pasteImageData; + + editor.on('preInit', function() { + registerEventHandlers(); + + // Remove all data images from paste for example from Gecko + // except internal images like video elements + editor.parser.addNodeFilter('img', function(nodes, name, args) { + function isPasteInsert(args) { + return args.data && args.data.paste === true; + } + + function remove(node) { + if (!node.attr('data-mce-object') && src !== Env.transparentSrc) { + node.remove(); + } + } + + function isWebKitFakeUrl(src) { + return src.indexOf("webkit-fake-url") === 0; + } + + function isDataUri(src) { + return src.indexOf("data:") === 0; + } + + if (!editor.settings.paste_data_images && isPasteInsert(args)) { + var i = nodes.length; + + while (i--) { + var src = nodes[i].attributes.map.src; + + if (!src) { + continue; + } + + // Safari on Mac produces webkit-fake-url see: https://bugs.webkit.org/show_bug.cgi?id=49141 + if (isWebKitFakeUrl(src)) { + remove(nodes[i]); + } else if (!editor.settings.allow_html_data_urls && isDataUri(src)) { + remove(nodes[i]); + } + } + } + }); + }); + }; +}); + +// Included from: js/tinymce/plugins/paste/classes/WordFilter.js + +/** + * WordFilter.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class parses word HTML into proper TinyMCE markup. + * + * @class tinymce.pasteplugin.WordFilter + * @private + */ +define("tinymce/pasteplugin/WordFilter", [ + "tinymce/util/Tools", + "tinymce/html/DomParser", + "tinymce/html/Schema", + "tinymce/html/Serializer", + "tinymce/html/Node", + "tinymce/pasteplugin/Utils" +], function(Tools, DomParser, Schema, Serializer, Node, Utils) { + /** + * Checks if the specified content is from any of the following sources: MS Word/Office 365/Google docs. + */ + function isWordContent(content) { + return ( + (/]+id="?docs-internal-[^>]*>/gi, ''); + content = content.replace(/
/gi, ''); + + retainStyleProperties = settings.paste_retain_style_properties; + if (retainStyleProperties) { + validStyles = Tools.makeMap(retainStyleProperties.split(/[, ]/)); + } + + /** + * Converts fake bullet and numbered lists to real semantic OL/UL. + * + * @param {tinymce.html.Node} node Root node to convert children of. + */ + function convertFakeListsToProperLists(node) { + var currentListNode, prevListNode, lastLevel = 1; + + function getText(node) { + var txt = ''; + + if (node.type === 3) { + return node.value; + } + + if ((node = node.firstChild)) { + do { + txt += getText(node); + } while ((node = node.next)); + } + + return txt; + } + + function trimListStart(node, regExp) { + if (node.type === 3) { + if (regExp.test(node.value)) { + node.value = node.value.replace(regExp, ''); + return false; + } + } + + if ((node = node.firstChild)) { + do { + if (!trimListStart(node, regExp)) { + return false; + } + } while ((node = node.next)); + } + + return true; + } + + function removeIgnoredNodes(node) { + if (node._listIgnore) { + node.remove(); + return; + } + + if ((node = node.firstChild)) { + do { + removeIgnoredNodes(node); + } while ((node = node.next)); + } + } + + function convertParagraphToLi(paragraphNode, listName, start) { + var level = paragraphNode._listLevel || lastLevel; + + // Handle list nesting + if (level != lastLevel) { + if (level < lastLevel) { + // Move to parent list + if (currentListNode) { + currentListNode = currentListNode.parent.parent; + } + } else { + // Create new list + prevListNode = currentListNode; + currentListNode = null; + } + } + + if (!currentListNode || currentListNode.name != listName) { + prevListNode = prevListNode || currentListNode; + currentListNode = new Node(listName, 1); + + if (start > 1) { + currentListNode.attr('start', '' + start); + } + + paragraphNode.wrap(currentListNode); + } else { + currentListNode.append(paragraphNode); + } + + paragraphNode.name = 'li'; + + // Append list to previous list if it exists + if (level > lastLevel && prevListNode) { + prevListNode.lastChild.append(currentListNode); + } + + lastLevel = level; + + // Remove start of list item "1. " or "· " etc + removeIgnoredNodes(paragraphNode); + trimListStart(paragraphNode, /^\u00a0+/); + trimListStart(paragraphNode, /^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/); + trimListStart(paragraphNode, /^\u00a0+/); + } + + // Build a list of all root level elements before we start + // altering them in the loop below. + var elements = [], child = node.firstChild; + while (typeof child !== 'undefined' && child !== null) { + elements.push(child); + + child = child.walk(); + if (child !== null) { + while (typeof child !== 'undefined' && child.parent !== node) { + child = child.walk(); + } + } + } + + for (var i = 0; i < elements.length; i++) { + node = elements[i]; + + if (node.name == 'p' && node.firstChild) { + // Find first text node in paragraph + var nodeText = getText(node); + + // Detect unordered lists look for bullets + if (isBulletList(nodeText)) { + convertParagraphToLi(node, 'ul'); + continue; + } + + // Detect ordered lists 1., a. or ixv. + if (isNumericList(nodeText)) { + // Parse OL start number + var matches = /([0-9]+)\./.exec(nodeText); + var start = 1; + if (matches) { + start = parseInt(matches[1], 10); + } + + convertParagraphToLi(node, 'ol', start); + continue; + } + + // Convert paragraphs marked as lists but doesn't look like anything + if (node._listLevel) { + convertParagraphToLi(node, 'ul', 1); + continue; + } + + currentListNode = null; + } else { + // If the root level element isn't a p tag which can be + // processed by convertParagraphToLi, it interrupts the + // lists, causing a new list to start instead of having + // elements from the next list inserted above this tag. + prevListNode = currentListNode; + currentListNode = null; + } + } + } + + function filterStyles(node, styleValue) { + var outputStyles = {}, matches, styles = editor.dom.parseStyle(styleValue); + + Tools.each(styles, function(value, name) { + // Convert various MS styles to W3C styles + switch (name) { + case 'mso-list': + // Parse out list indent level for lists + matches = /\w+ \w+([0-9]+)/i.exec(styleValue); + if (matches) { + node._listLevel = parseInt(matches[1], 10); + } + + // Remove these nodes o + // Since the span gets removed we mark the text node and the span + if (/Ignore/i.test(value) && node.firstChild) { + node._listIgnore = true; + node.firstChild._listIgnore = true; + } + + break; + + case "horiz-align": + name = "text-align"; + break; + + case "vert-align": + name = "vertical-align"; + break; + + case "font-color": + case "mso-foreground": + name = "color"; + break; + + case "mso-background": + case "mso-highlight": + name = "background"; + break; + + case "font-weight": + case "font-style": + if (value != "normal") { + outputStyles[name] = value; + } + return; + + case "mso-element": + // Remove track changes code + if (/^(comment|comment-list)$/i.test(value)) { + node.remove(); + return; + } + + break; + } + + if (name.indexOf('mso-comment') === 0) { + node.remove(); + return; + } + + // Never allow mso- prefixed names + if (name.indexOf('mso-') === 0) { + return; + } + + // Output only valid styles + if (retainStyleProperties == "all" || (validStyles && validStyles[name])) { + outputStyles[name] = value; + } + }); + + // Convert bold style to "b" element + if (/(bold)/i.test(outputStyles["font-weight"])) { + delete outputStyles["font-weight"]; + node.wrap(new Node("b", 1)); + } + + // Convert italic style to "i" element + if (/(italic)/i.test(outputStyles["font-style"])) { + delete outputStyles["font-style"]; + node.wrap(new Node("i", 1)); + } + + // Serialize the styles and see if there is something left to keep + outputStyles = editor.dom.serializeStyle(outputStyles, node.name); + if (outputStyles) { + return outputStyles; + } + + return null; + } + + if (settings.paste_enable_default_filters === false) { + return; + } + + // Detect is the contents is Word junk HTML + if (isWordContent(e.content)) { + e.wordContent = true; // Mark it for other processors + + // Remove basic Word junk + content = Utils.filter(content, [ + // Word comments like conditional comments etc + //gi, + + // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, + // MS Office namespaced tags, and a few other tags + /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi, + + // Convert into for line-though + [/<(\/?)s>/gi, "<$1strike>"], + + // Replace nsbp entites to char since it's easier to handle + [/ /gi, "\u00a0"], + + // Convert ___ to string of alternating + // breaking/non-breaking spaces of same length + [/([\s\u00a0]*)<\/span>/gi, + function(str, spaces) { + return (spaces.length > 0) ? + spaces.replace(/./, " ").slice(Math.floor(spaces.length / 2)).split("").join("\u00a0") : ""; + } + ] + ]); + + var validElements = settings.paste_word_valid_elements; + if (!validElements) { + validElements = ( + '-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' + + '-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,' + + 'td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody' + ); + } + + // Setup strict schema + var schema = new Schema({ + valid_elements: validElements, + valid_children: '-li[p]' + }); + + // Add style/class attribute to all element rules since the user might have removed them from + // paste_word_valid_elements config option and we need to check them for properties + Tools.each(schema.elements, function(rule) { + /*eslint dot-notation:0*/ + if (!rule.attributes["class"]) { + rule.attributes["class"] = {}; + rule.attributesOrder.push("class"); + } + + if (!rule.attributes.style) { + rule.attributes.style = {}; + rule.attributesOrder.push("style"); + } + }); + + // Parse HTML into DOM structure + var domParser = new DomParser({}, schema); + + // Filter styles to remove "mso" specific styles and convert some of them + domParser.addAttributeFilter('style', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + node.attr('style', filterStyles(node, node.attr('style'))); + + // Remove pointess spans + if (node.name == 'span' && node.parent && !node.attributes.length) { + node.unwrap(); + } + } + }); + + // Check the class attribute for comments or del items and remove those + domParser.addAttributeFilter('class', function(nodes) { + var i = nodes.length, node, className; + + while (i--) { + node = nodes[i]; + + className = node.attr('class'); + if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) { + node.remove(); + } + + node.attr('class', null); + } + }); + + // Remove all del elements since we don't want the track changes code in the editor + domParser.addNodeFilter('del', function(nodes) { + var i = nodes.length; + + while (i--) { + nodes[i].remove(); + } + }); + + // Keep some of the links and anchors + domParser.addNodeFilter('a', function(nodes) { + var i = nodes.length, node, href, name; + + while (i--) { + node = nodes[i]; + href = node.attr('href'); + name = node.attr('name'); + + if (href && href.indexOf('#_msocom_') != -1) { + node.remove(); + continue; + } + + if (href && href.indexOf('file://') === 0) { + href = href.split('#')[1]; + if (href) { + href = '#' + href; + } + } + + if (!href && !name) { + node.unwrap(); + } else { + // Remove all named anchors that aren't specific to TOC, Footnotes or Endnotes + if (name && !/^_?(?:toc|edn|ftn)/i.test(name)) { + node.unwrap(); + continue; + } + + node.attr({ + href: href, + name: name + }); + } + } + }); + + // Parse into DOM structure + var rootNode = domParser.parse(content); + + // Process DOM + if (settings.paste_convert_word_fake_lists !== false) { + convertFakeListsToProperLists(rootNode); + } + + // Serialize DOM back to HTML + e.content = new Serializer({ + validate: settings.validate + }, schema).serialize(rootNode); + } + }); + } + + WordFilter.isWordContent = isWordContent; + + return WordFilter; +}); + +// Included from: js/tinymce/plugins/paste/classes/Quirks.js + +/** + * Quirks.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains various fixes for browsers. These issues can not be feature + * detected since we have no direct control over the clipboard. However we might be able + * to remove some of these fixes once the browsers gets updated/fixed. + * + * @class tinymce.pasteplugin.Quirks + * @private + */ +define("tinymce/pasteplugin/Quirks", [ + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/pasteplugin/WordFilter", + "tinymce/pasteplugin/Utils" +], function(Env, Tools, WordFilter, Utils) { + "use strict"; + + return function(editor) { + function addPreProcessFilter(filterFunc) { + editor.on('BeforePastePreProcess', function(e) { + e.content = filterFunc(e.content); + }); + } + + /** + * Removes BR elements after block elements. IE9 has a nasty bug where it puts a BR element after each + * block element when pasting from word. This removes those elements. + * + * This: + *

a


b

+ * + * Becomes: + *

a

b

+ */ + function removeExplorerBrElementsAfterBlocks(html) { + // Only filter word specific content + if (!WordFilter.isWordContent(html)) { + return html; + } + + // Produce block regexp based on the block elements in schema + var blockElements = []; + + Tools.each(editor.schema.getBlockElements(), function(block, blockName) { + blockElements.push(blockName); + }); + + var explorerBlocksRegExp = new RegExp( + '(?:
 [\\s\\r\\n]+|
)*(<\\/?(' + blockElements.join('|') + ')[^>]*>)(?:
 [\\s\\r\\n]+|
)*', + 'g' + ); + + // Remove BR:s from: X
+ html = Utils.filter(html, [ + [explorerBlocksRegExp, '$1'] + ]); + + // IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break + html = Utils.filter(html, [ + [/

/g, '

'], // Replace multiple BR elements with uppercase BR to keep them intact + [/
/g, ' '], // Replace single br elements with space since they are word wrap BR:s + [/

/g, '
'] // Replace back the double brs but into a single BR + ]); + + return html; + } + + /** + * WebKit has a nasty bug where the all computed styles gets added to style attributes when copy/pasting contents. + * This fix solves that by simply removing the whole style attribute. + * + * The paste_webkit_styles option can be set to specify what to keep: + * paste_webkit_styles: "none" // Keep no styles + * paste_webkit_styles: "all", // Keep all of them + * paste_webkit_styles: "font-weight color" // Keep specific ones + * + * @param {String} content Content that needs to be processed. + * @return {String} Processed contents. + */ + function removeWebKitStyles(content) { + // Passthrough all styles from Word and let the WordFilter handle that junk + if (WordFilter.isWordContent(content)) { + return content; + } + + // Filter away styles that isn't matching the target node + var webKitStyles = editor.settings.paste_webkit_styles; + + if (editor.settings.paste_remove_styles_if_webkit === false || webKitStyles == "all") { + return content; + } + + if (webKitStyles) { + webKitStyles = webKitStyles.split(/[, ]/); + } + + // Keep specific styles that doesn't match the current node computed style + if (webKitStyles) { + var dom = editor.dom, node = editor.selection.getNode(); + + content = content.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, function(all, before, value, after) { + var inputStyles = dom.parseStyle(value, 'span'), outputStyles = {}; + + if (webKitStyles === "none") { + return before + after; + } + + for (var i = 0; i < webKitStyles.length; i++) { + var inputValue = inputStyles[webKitStyles[i]], currentValue = dom.getStyle(node, webKitStyles[i], true); + + if (/color/.test(webKitStyles[i])) { + inputValue = dom.toHex(inputValue); + currentValue = dom.toHex(currentValue); + } + + if (currentValue != inputValue) { + outputStyles[webKitStyles[i]] = inputValue; + } + } + + outputStyles = dom.serializeStyle(outputStyles, 'span'); + if (outputStyles) { + return before + ' style="' + outputStyles + '"' + after; + } + + return before + after; + }); + } else { + // Remove all external styles + content = content.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, '$1$3'); + } + + // Keep internal styles + content = content.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi, function(all, before, value, after) { + return before + ' style="' + value + '"' + after; + }); + + return content; + } + + // Sniff browsers and apply fixes since we can't feature detect + if (Env.webkit) { + addPreProcessFilter(removeWebKitStyles); + } + + if (Env.ie) { + addPreProcessFilter(removeExplorerBrElementsAfterBlocks); + } + }; +}); + +// Included from: js/tinymce/plugins/paste/classes/Plugin.js + +/** + * Plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains the tinymce plugin logic for the paste plugin. + * + * @class tinymce.pasteplugin.Plugin + * @private + */ +define("tinymce/pasteplugin/Plugin", [ + "tinymce/PluginManager", + "tinymce/pasteplugin/Clipboard", + "tinymce/pasteplugin/WordFilter", + "tinymce/pasteplugin/Quirks" +], function(PluginManager, Clipboard, WordFilter, Quirks) { + var userIsInformed; + + PluginManager.add('paste', function(editor) { + var self = this, clipboard, settings = editor.settings; + + function isUserInformedAboutPlainText() { + return userIsInformed || editor.settings.paste_plaintext_inform === false; + } + + function togglePlainTextPaste() { + if (clipboard.pasteFormat == "text") { + this.active(false); + clipboard.pasteFormat = "html"; + editor.fire('PastePlainTextToggle', {state: false}); + } else { + clipboard.pasteFormat = "text"; + this.active(true); + + if (!isUserInformedAboutPlainText()) { + var message = editor.translate('Paste is now in plain text mode. Contents will now ' + + 'be pasted as plain text until you toggle this option off.'); + + editor.notificationManager.open({ + text: message, + type: 'info' + }); + + userIsInformed = true; + editor.fire('PastePlainTextToggle', {state: true}); + } + } + + editor.focus(); + } + + // draw back if power version is requested and registered + if (/(^|[ ,])powerpaste([, ]|$)/.test(settings.plugins) && PluginManager.get('powerpaste')) { + /*eslint no-console:0 */ + if (typeof console !== "undefined" && console.log) { + console.log("PowerPaste is incompatible with Paste plugin! Remove 'paste' from the 'plugins' option."); + } + return; + } + + self.clipboard = clipboard = new Clipboard(editor); + self.quirks = new Quirks(editor); + self.wordFilter = new WordFilter(editor); + + if (editor.settings.paste_as_text) { + self.clipboard.pasteFormat = "text"; + } + + if (settings.paste_preprocess) { + editor.on('PastePreProcess', function(e) { + settings.paste_preprocess.call(self, self, e); + }); + } + + if (settings.paste_postprocess) { + editor.on('PastePostProcess', function(e) { + settings.paste_postprocess.call(self, self, e); + }); + } + + editor.addCommand('mceInsertClipboardContent', function(ui, value) { + if (value.content) { + self.clipboard.pasteHtml(value.content); + } + + if (value.text) { + self.clipboard.pasteText(value.text); + } + }); + + // Block all drag/drop events + if (editor.settings.paste_block_drop) { + editor.on('dragend dragover draggesture dragdrop drop drag', function(e) { + e.preventDefault(); + e.stopPropagation(); + }); + } + + // Prevent users from dropping data images on Gecko + if (!editor.settings.paste_data_images) { + editor.on('drop', function(e) { + var dataTransfer = e.dataTransfer; + + if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) { + e.preventDefault(); + } + }); + } + + editor.addButton('pastetext', { + icon: 'pastetext', + tooltip: 'Paste as text', + onclick: togglePlainTextPaste, + active: self.clipboard.pasteFormat == "text" + }); + + editor.addMenuItem('pastetext', { + text: 'Paste as text', + selectable: true, + active: clipboard.pasteFormat, + onclick: togglePlainTextPaste + }); + }); +}); + +expose(["tinymce/pasteplugin/Utils"]); +})(this); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/paste/plugin.min.js b/public/mosaico/dist/vendor/plugins/paste/plugin.min.js new file mode 100644 index 00000000..f57084d9 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/paste/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],o=0;o/g]),o(s.parse(i)),l}function o(e){function t(e,t,n){return t||n?"\xa0":" "}return e=r(e,[/^[\s\S]*]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/|/g,[/( ?)\u00a0<\/span>( ?)/g,t],/
/g,/
$/i])}function a(e){var t=0;return function(){return e+t++}}return{filter:r,innerText:i,trimHtml:o,createIdGenerator:a}}),r("tinymce/pasteplugin/SmartPaste",["tinymce/util/Tools"],function(e){var t=function(e){return/^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(e)},n=function(e){return t(e)&&/.(gif|jpe?g|png)$/.test(e)},r=function(e,t,n){return e.undoManager.extra(function(){n(e,t)},function(){e.insertContent('')}),!0},i=function(e,t,n){return e.undoManager.extra(function(){n(e,t)},function(){e.execCommand("mceInsertLink",!1,t)}),!0},o=function(e,n,r){return!(e.selection.isCollapsed()!==!1||!t(n))&&i(e,n,r)},a=function(e,t,i){return!!n(t)&&r(e,t,i)},s=function(e,t){return e.insertContent(t,{merge:e.settings.paste_merge_formats!==!1,paste:!0}),!0},l=function(t,n){e.each([o,a,s],function(e){return e(t,n,s)!==!0})},c=function(e,t){e.settings.smart_paste===!1?s(e,t):l(e,t)};return{isImageUrl:n,isAbsoluteUrl:t,insertContent:c}}),r("tinymce/pasteplugin/Clipboard",["tinymce/Env","tinymce/dom/RangeUtils","tinymce/util/VK","tinymce/pasteplugin/Utils","tinymce/pasteplugin/SmartPaste","tinymce/util/Delay"],function(e,t,n,r,i,o){return function(a){function s(e){var t,n=a.dom;if(t=a.fire("BeforePastePreProcess",{content:e}),t=a.fire("PastePreProcess",t),e=t.content,!t.isDefaultPrevented()){if(a.hasEventListeners("PastePostProcess")&&!t.isDefaultPrevented()){var r=n.add(a.getBody(),"div",{style:"display:none"},e);t=a.fire("PastePostProcess",{node:r}),n.remove(r),e=t.node.innerHTML}t.isDefaultPrevented()||i.insertContent(a,e)}}function l(e){e=a.dom.encode(e).replace(/\r\n/g,"\n");var t,n=a.dom.getParent(a.selection.getStart(),a.dom.isBlock),i=a.settings.forced_root_block;i&&(t=a.dom.createHTML(i,a.settings.forced_root_block_attrs),t=t.substr(0,t.length-3)+">"),n&&/^(PRE|DIV)$/.test(n.nodeName)||!i?e=r.filter(e,[[/\n/g,"
"]]):(e=r.filter(e,[[/\n\n/g,"

"+t],[/^(.*<\/p>)(

)$/,t+"$1"],[/\n/g,"
"]]),e.indexOf("

")!=-1&&(e=t+e)),s(e)}function c(){function t(e){var t,n,i,o=e.startContainer;if(t=e.getClientRects(),t.length)return t[0];if(e.collapsed&&1==o.nodeType){for(i=o.childNodes[_.startOffset];i&&3==i.nodeType&&!i.data.length;)i=i.nextSibling;if(i)return"BR"==i.tagName&&(n=r.doc.createTextNode("\ufeff"),i.parentNode.insertBefore(n,i),e=r.createRng(),e.setStartBefore(n),e.setEndAfter(n),t=e.getClientRects(),r.remove(n)),t.length?t[0]:void 0}}var n,r=a.dom,i=a.getBody(),o=a.dom.getViewPort(a.getWin()),s=o.y,l=20;if(_=a.selection.getRng(),a.inline&&(n=a.selection.getScrollContainer(),n&&n.scrollTop>0&&(s=n.scrollTop)),_.getClientRects){var c=t(_);if(c)l=s+(c.top-r.getPos(i).y);else{l=s;var u=_.startContainer;u&&(3==u.nodeType&&u.parentNode!=i&&(u=u.parentNode),1==u.nodeType&&(l=r.getPos(u,n||i).y))}}E=r.add(a.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+l+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},A),(e.ie||e.gecko)&&r.setStyle(E,"left","rtl"==r.getStyle(i,"direction",!0)?65535:-65535),r.bind(E,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),E.focus(),a.selection.select(E,!0)}function u(){if(E){for(var e;e=a.dom.get("mcepastebin");)a.dom.remove(e),a.dom.unbind(e);_&&a.selection.setRng(_)}E=_=null}function d(){var e,t,n,r,i="";for(e=a.dom.select("div[id=mcepastebin]"),t=0;t0&&n.indexOf(B)==-1&&(t["text/plain"]=n)}if(e.types)for(var r=0;r')}else s('')}function y(e,t){function n(n){var r,i,o,a=!1;if(n)for(r=0;r0}function w(e){return n.metaKeyPressed(e)&&86==e.keyCode||e.shiftKey&&45==e.keyCode}function N(){function t(e,t,n){var i;return x(e,"text/html")?i=e["text/html"]:(i=d(),i==A&&(n=!0)),i=r.trimHtml(i),E&&E.firstChild&&"mcepastebin"===E.firstChild.id&&(n=!0),u(),i.length||(n=!0),n&&(i=x(e,"text/plain")&&i.indexOf("

")==-1?e["text/plain"]:r.innerText(i)),i==A?void(t||a.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.")):void(n?l(i):s(i))}function n(e){return 0===e["text/plain"].indexOf("file://")}a.on("keydown",function(t){function n(e){w(e)&&!e.isDefaultPrevented()&&u()}if(w(t)&&!t.isDefaultPrevented()){if(S=t.shiftKey&&86==t.keyCode,S&&e.webkit&&navigator.userAgent.indexOf("Version/")!=-1)return;if(t.stopImmediatePropagation(),T=(new Date).getTime(),e.ie&&S)return t.preventDefault(),void a.fire("paste",{ieFake:!0});u(),c(),a.once("keyup",n),a.once("paste",function(){a.off("keyup",n)})}});var i=function(){return _||a.selection.getRng()};a.on("paste",function(n){var r=(new Date).getTime(),s=h(n),l=(new Date).getTime()-r,f=(new Date).getTime()-T-l<1e3,m="text"==k.pasteFormat||S;return S=!1,n.isDefaultPrevented()||b(n)?void u():!p(s)&&y(n,i())?void u():(f||n.preventDefault(),!e.ie||f&&!n.ieFake||(c(),a.dom.bind(E,"paste",function(e){e.stopPropagation()}),a.getDoc().execCommand("Paste",!1,null),s["text/html"]=d()),void(x(s,"text/html")?(n.preventDefault(),t(s,f,m)):o.setEditorTimeout(a,function(){t(s,f,m)},0)))}),a.on("dragstart dragend",function(e){R="dragstart"==e.type}),a.on("drop",function(e){var t,i;if(i=C(e),!e.isDefaultPrevented()&&!R&&(t=f(e.dataTransfer),(p(t)&&!n(t)||!y(e,i))&&i&&a.settings.paste_filter_drop!==!1)){var c=t["mce-internal"]||t["text/html"]||t["text/plain"];c&&(e.preventDefault(),o.setEditorTimeout(a,function(){a.undoManager.transact(function(){t["mce-internal"]&&a.execCommand("Delete"),a.selection.setRng(i),c=r.trimHtml(c),t["text/html"]?s(c):l(c)})}))}}),a.on("dragover dragend",function(e){a.settings.paste_data_images&&e.preventDefault()})}var E,_,S,k=this,T=0,R=!1,A="%MCEPASTEBIN%",B="data:text/mce-internal,",D=r.createIdGenerator("mceclip");k.pasteHtml=s,k.pasteText=l,k.pasteImageData=y,a.on("preInit",function(){N(),a.parser.addNodeFilter("img",function(t,n,r){function i(e){return e.data&&e.data.paste===!0}function o(t){t.attr("data-mce-object")||u===e.transparentSrc||t.remove()}function s(e){return 0===e.indexOf("webkit-fake-url")}function l(e){return 0===e.indexOf("data:")}if(!a.settings.paste_data_images&&i(r))for(var c=t.length;c--;){var u=t[c].attributes.map.src;u&&(s(u)?o(t[c]):!a.settings.allow_html_data_urls&&l(u)&&o(t[c]))}})})}}),r("tinymce/pasteplugin/WordFilter",["tinymce/util/Tools","tinymce/html/DomParser","tinymce/html/Schema","tinymce/html/Serializer","tinymce/html/Node","tinymce/pasteplugin/Utils"],function(e,t,n,r,i,o){function a(e){return/1&&a.attr("start",""+o),e.wrap(a)),e.name="li",s>u&&c&&c.lastChild.append(a),u=s,r(e),n(e,/^\u00a0+/),n(e,/^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/),n(e,/^\u00a0+/)}for(var a,c,u=1,d=[],f=e.firstChild;"undefined"!=typeof f&&null!==f;)if(d.push(f),f=f.walk(),null!==f)for(;"undefined"!=typeof f&&f.parent!==e;)f=f.walk();for(var h=0;h]+id="?docs-internal-[^>]*>/gi,""),g=g.replace(/
/gi,""),p=u.paste_retain_style_properties,p&&(m=e.makeMap(p.split(/[, ]/))),u.paste_enable_default_filters!==!1&&a(d.content)){d.wordContent=!0,g=o.filter(g,[//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\xa0"],[/([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var v=u.paste_word_valid_elements;v||(v="-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody");var y=new n({valid_elements:v,valid_children:"-li[p]"});e.each(y.elements,function(e){e.attributes.class||(e.attributes.class={},e.attributesOrder.push("class")),e.attributes.style||(e.attributes.style={},e.attributesOrder.push("style"))});var b=new t({},y);b.addAttributeFilter("style",function(e){for(var t,n=e.length;n--;)t=e[n],t.attr("style",h(t,t.attr("style"))),"span"==t.name&&t.parent&&!t.attributes.length&&t.unwrap()}),b.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)t=e[r],n=t.attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(n)&&t.remove(),t.attr("class",null)}),b.addNodeFilter("del",function(e){for(var t=e.length;t--;)e[t].remove()}),b.addNodeFilter("a",function(e){for(var t,n,r,i=e.length;i--;)if(t=e[i],n=t.attr("href"),r=t.attr("name"),n&&n.indexOf("#_msocom_")!=-1)t.remove();else if(n&&0===n.indexOf("file://")&&(n=n.split("#")[1],n&&(n="#"+n)),n||r){if(r&&!/^_?(?:toc|edn|ftn)/i.test(r)){t.unwrap();continue}t.attr({href:n,name:r})}else t.unwrap()});var C=b.parse(g);u.paste_convert_word_fake_lists!==!1&&f(C),d.content=new r({validate:u.validate},y).serialize(C)}})}return c.isWordContent=a,c}),r("tinymce/pasteplugin/Quirks",["tinymce/Env","tinymce/util/Tools","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Utils"],function(e,t,n,r){return function(i){function o(e){i.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function a(e){if(!n.isWordContent(e))return e;var o=[];t.each(i.schema.getBlockElements(),function(e,t){o.push(t)});var a=new RegExp("(?:
 [\\s\\r\\n]+|
)*(<\\/?("+o.join("|")+")[^>]*>)(?:
 [\\s\\r\\n]+|
)*","g");return e=r.filter(e,[[a,"$1"]]),e=r.filter(e,[[/

/g,"

"],[/
/g," "],[/

/g,"
"]])}function s(e){if(n.isWordContent(e))return e;var t=i.settings.paste_webkit_styles;if(i.settings.paste_remove_styles_if_webkit===!1||"all"==t)return e;if(t&&(t=t.split(/[, ]/)),t){var r=i.dom,o=i.selection.getNode();e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(e,n,i,a){var s=r.parseStyle(i,"span"),l={};if("none"===t)return n+a;for(var c=0;c]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return e=e.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(e,t,n,r){return t+' style="'+n+'"'+r})}e.webkit&&o(s),e.ie&&o(a)}}),r("tinymce/pasteplugin/Plugin",["tinymce/PluginManager","tinymce/pasteplugin/Clipboard","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Quirks"],function(e,t,n,r){var i;e.add("paste",function(o){function a(){return i||o.settings.paste_plaintext_inform===!1}function s(){if("text"==l.pasteFormat)this.active(!1),l.pasteFormat="html",o.fire("PastePlainTextToggle",{state:!1});else if(l.pasteFormat="text",this.active(!0),!a()){var e=o.translate("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.");o.notificationManager.open({text:e,type:"info"}),i=!0,o.fire("PastePlainTextToggle",{state:!0})}o.focus()}var l,c=this,u=o.settings;return/(^|[ ,])powerpaste([, ]|$)/.test(u.plugins)&&e.get("powerpaste")?void("undefined"!=typeof console&&console.log&&console.log("PowerPaste is incompatible with Paste plugin! Remove 'paste' from the 'plugins' option.")):(c.clipboard=l=new t(o),c.quirks=new r(o),c.wordFilter=new n(o),o.settings.paste_as_text&&(c.clipboard.pasteFormat="text"),u.paste_preprocess&&o.on("PastePreProcess",function(e){u.paste_preprocess.call(c,c,e)}),u.paste_postprocess&&o.on("PastePostProcess",function(e){u.paste_postprocess.call(c,c,e)}),o.addCommand("mceInsertClipboardContent",function(e,t){t.content&&c.clipboard.pasteHtml(t.content),t.text&&c.clipboard.pasteText(t.text)}),o.settings.paste_block_drop&&o.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),o.settings.paste_data_images||o.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),o.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:s,active:"text"==c.clipboard.pasteFormat}),void o.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:l.pasteFormat,onclick:s}))})}),o(["tinymce/pasteplugin/Utils"])}(this); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/preview/plugin.js b/public/mosaico/dist/vendor/plugins/preview/plugin.js new file mode 100644 index 00000000..59046334 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/preview/plugin.js @@ -0,0 +1,101 @@ +/** + * plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('preview', function(editor) { + var settings = editor.settings, sandbox = !tinymce.Env.ie; + + editor.addCommand('mcePreview', function() { + editor.windowManager.open({ + title: 'Preview', + width: parseInt(editor.getParam("plugin_preview_width", "650"), 10), + height: parseInt(editor.getParam("plugin_preview_height", "500"), 10), + html: '', + buttons: { + text: 'Close', + onclick: function() { + this.parent().parent().close(); + } + }, + onPostRender: function() { + var previewHtml, headHtml = ''; + + headHtml += ''; + + tinymce.each(editor.contentCSS, function(url) { + headHtml += ''; + }); + + var bodyId = settings.body_id || 'tinymce'; + if (bodyId.indexOf('=') != -1) { + bodyId = editor.getParam('body_id', '', 'hash'); + bodyId = bodyId[editor.id] || bodyId; + } + + var bodyClass = settings.body_class || ''; + if (bodyClass.indexOf('=') != -1) { + bodyClass = editor.getParam('body_class', '', 'hash'); + bodyClass = bodyClass[editor.id] || ''; + } + + var preventClicksOnLinksScript = ( + ' ' + ); + + var dirAttr = editor.settings.directionality ? ' dir="' + editor.settings.directionality + '"' : ''; + + previewHtml = ( + '' + + '' + + '' + + headHtml + + '' + + '' + + editor.getContent() + + preventClicksOnLinksScript + + '' + + '' + ); + + if (!sandbox) { + // IE 6-11 doesn't support data uris on iframes + // so I guess they will have to be less secure since we can't sandbox on those + // TODO: Use sandbox if future versions of IE supports iframes with data: uris. + var doc = this.getEl('body').firstChild.contentWindow.document; + doc.open(); + doc.write(previewHtml); + doc.close(); + } else { + this.getEl('body').firstChild.src = 'data:text/html;charset=utf-8,' + encodeURIComponent(previewHtml); + } + } + }); + }); + + editor.addButton('preview', { + title: 'Preview', + cmd: 'mcePreview' + }); + + editor.addMenuItem('preview', { + text: 'Preview', + cmd: 'mcePreview', + context: 'view' + }); +}); diff --git a/public/mosaico/dist/vendor/plugins/preview/plugin.min.js b/public/mosaico/dist/vendor/plugins/preview/plugin.min.js new file mode 100644 index 00000000..e02103b4 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/preview/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("preview",function(e){var t=e.settings,n=!tinymce.Env.ie;e.addCommand("mcePreview",function(){e.windowManager.open({title:"Preview",width:parseInt(e.getParam("plugin_preview_width","650"),10),height:parseInt(e.getParam("plugin_preview_height","500"),10),html:'",buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var r,i="";i+='',tinymce.each(e.contentCSS,function(t){i+=''});var o=t.body_id||"tinymce";o.indexOf("=")!=-1&&(o=e.getParam("body_id","","hash"),o=o[e.id]||o);var a=t.body_class||"";a.indexOf("=")!=-1&&(a=e.getParam("body_class","","hash"),a=a[e.id]||"");var s=' ',l=e.settings.directionality?' dir="'+e.settings.directionality+'"':"";if(r=""+i+'"+e.getContent()+s+"",n)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(r);else{var c=this.getEl("body").firstChild.contentWindow.document;c.open(),c.write(r),c.close()}}})}),e.addButton("preview",{title:"Preview",cmd:"mcePreview"}),e.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/print/plugin.js b/public/mosaico/dist/vendor/plugins/print/plugin.js new file mode 100644 index 00000000..023db0b4 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/print/plugin.js @@ -0,0 +1,32 @@ +/** + * plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('print', function(editor) { + editor.addCommand('mcePrint', function() { + editor.getWin().print(); + }); + + editor.addButton('print', { + title: 'Print', + cmd: 'mcePrint' + }); + + editor.addShortcut('Meta+P', '', 'mcePrint'); + + editor.addMenuItem('print', { + text: 'Print', + cmd: 'mcePrint', + icon: 'print', + shortcut: 'Meta+P', + context: 'file' + }); +}); diff --git a/public/mosaico/dist/vendor/plugins/print/plugin.min.js b/public/mosaico/dist/vendor/plugins/print/plugin.min.js new file mode 100644 index 00000000..9f58535b --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/print/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("print",function(e){e.addCommand("mcePrint",function(){e.getWin().print()}),e.addButton("print",{title:"Print",cmd:"mcePrint"}),e.addShortcut("Meta+P","","mcePrint"),e.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Meta+P",context:"file"})}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/save/plugin.js b/public/mosaico/dist/vendor/plugins/save/plugin.js new file mode 100644 index 00000000..f36f8959 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/save/plugin.js @@ -0,0 +1,98 @@ +/** + * plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('save', function(editor) { + function save() { + var formObj; + + formObj = tinymce.DOM.getParent(editor.id, 'form'); + + if (editor.getParam("save_enablewhendirty", true) && !editor.isDirty()) { + return; + } + + tinymce.triggerSave(); + + // Use callback instead + if (editor.getParam("save_onsavecallback")) { + editor.execCallback('save_onsavecallback', editor); + editor.nodeChanged(); + return; + } + + if (formObj) { + editor.setDirty(false); + + if (!formObj.onsubmit || formObj.onsubmit()) { + if (typeof formObj.submit == "function") { + formObj.submit(); + } else { + displayErrorMessage(editor.translate("Error: Form submit field collision.")); + } + } + + editor.nodeChanged(); + } else { + displayErrorMessage(editor.translate("Error: No form element found.")); + } + } + + function displayErrorMessage(message) { + editor.notificationManager.open({ + text: message, + type: 'error' + }); + } + + function cancel() { + var h = tinymce.trim(editor.startContent); + + // Use callback instead + if (editor.getParam("save_oncancelcallback")) { + editor.execCallback('save_oncancelcallback', editor); + return; + } + + editor.setContent(h); + editor.undoManager.clear(); + editor.nodeChanged(); + } + + function stateToggle() { + var self = this; + + editor.on('nodeChange dirty', function() { + self.disabled(editor.getParam("save_enablewhendirty", true) && !editor.isDirty()); + }); + } + + editor.addCommand('mceSave', save); + editor.addCommand('mceCancel', cancel); + + editor.addButton('save', { + icon: 'save', + text: 'Save', + cmd: 'mceSave', + disabled: true, + onPostRender: stateToggle + }); + + editor.addButton('cancel', { + text: 'Cancel', + icon: false, + cmd: 'mceCancel', + disabled: true, + onPostRender: stateToggle + }); + + editor.addShortcut('Meta+S', '', 'mceSave'); +}); diff --git a/public/mosaico/dist/vendor/plugins/save/plugin.min.js b/public/mosaico/dist/vendor/plugins/save/plugin.min.js new file mode 100644 index 00000000..7893bbc2 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/save/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("save",function(e){function t(){var t;if(t=tinymce.DOM.getParent(e.id,"form"),!e.getParam("save_enablewhendirty",!0)||e.isDirty())return tinymce.triggerSave(),e.getParam("save_onsavecallback")?(e.execCallback("save_onsavecallback",e),void e.nodeChanged()):void(t?(e.setDirty(!1),t.onsubmit&&!t.onsubmit()||("function"==typeof t.submit?t.submit():n(e.translate("Error: Form submit field collision."))),e.nodeChanged()):n(e.translate("Error: No form element found.")))}function n(t){e.notificationManager.open({text:t,type:"error"})}function r(){var t=tinymce.trim(e.startContent);return e.getParam("save_oncancelcallback")?void e.execCallback("save_oncancelcallback",e):(e.setContent(t),e.undoManager.clear(),void e.nodeChanged())}function i(){var t=this;e.on("nodeChange dirty",function(){t.disabled(e.getParam("save_enablewhendirty",!0)&&!e.isDirty())})}e.addCommand("mceSave",t),e.addCommand("mceCancel",r),e.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:i}),e.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:i}),e.addShortcut("Meta+S","","mceSave")}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/searchreplace/plugin.js b/public/mosaico/dist/vendor/plugins/searchreplace/plugin.js new file mode 100644 index 00000000..72e8d8d2 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/searchreplace/plugin.js @@ -0,0 +1,609 @@ +/** + * plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint smarttabs:true, undef:true, unused:true, latedef:true, curly:true, bitwise:true */ +/*eslint no-labels:0, no-constant-condition: 0 */ +/*global tinymce:true */ + +(function() { + function isContentEditableFalse(node) { + return node && node.nodeType == 1 && node.contentEditable === "false"; + } + + // Based on work developed by: James Padolsey http://james.padolsey.com + // released under UNLICENSE that is compatible with LGPL + // TODO: Handle contentEditable edgecase: + //

texttexttexttexttext

+ function findAndReplaceDOMText(regex, node, replacementNode, captureGroup, schema) { + var m, matches = [], text, count = 0, doc; + var blockElementsMap, hiddenTextElementsMap, shortEndedElementsMap; + + doc = node.ownerDocument; + blockElementsMap = schema.getBlockElements(); // H1-H6, P, TD etc + hiddenTextElementsMap = schema.getWhiteSpaceElements(); // TEXTAREA, PRE, STYLE, SCRIPT + shortEndedElementsMap = schema.getShortEndedElements(); // BR, IMG, INPUT + + function getMatchIndexes(m, captureGroup) { + captureGroup = captureGroup || 0; + + if (!m[0]) { + throw 'findAndReplaceDOMText cannot handle zero-length matches'; + } + + var index = m.index; + + if (captureGroup > 0) { + var cg = m[captureGroup]; + + if (!cg) { + throw 'Invalid capture group'; + } + + index += m[0].indexOf(cg); + m[0] = cg; + } + + return [index, index + m[0].length, [m[0]]]; + } + + function getText(node) { + var txt; + + if (node.nodeType === 3) { + return node.data; + } + + if (hiddenTextElementsMap[node.nodeName] && !blockElementsMap[node.nodeName]) { + return ''; + } + + txt = ''; + + if (isContentEditableFalse(node)) { + return '\n'; + } + + if (blockElementsMap[node.nodeName] || shortEndedElementsMap[node.nodeName]) { + txt += '\n'; + } + + if ((node = node.firstChild)) { + do { + txt += getText(node); + } while ((node = node.nextSibling)); + } + + return txt; + } + + function stepThroughMatches(node, matches, replaceFn) { + var startNode, endNode, startNodeIndex, + endNodeIndex, innerNodes = [], atIndex = 0, curNode = node, + matchLocation = matches.shift(), matchIndex = 0; + + out: while (true) { + if (blockElementsMap[curNode.nodeName] || shortEndedElementsMap[curNode.nodeName] || isContentEditableFalse(curNode)) { + atIndex++; + } + + if (curNode.nodeType === 3) { + if (!endNode && curNode.length + atIndex >= matchLocation[1]) { + // We've found the ending + endNode = curNode; + endNodeIndex = matchLocation[1] - atIndex; + } else if (startNode) { + // Intersecting node + innerNodes.push(curNode); + } + + if (!startNode && curNode.length + atIndex > matchLocation[0]) { + // We've found the match start + startNode = curNode; + startNodeIndex = matchLocation[0] - atIndex; + } + + atIndex += curNode.length; + } + + if (startNode && endNode) { + curNode = replaceFn({ + startNode: startNode, + startNodeIndex: startNodeIndex, + endNode: endNode, + endNodeIndex: endNodeIndex, + innerNodes: innerNodes, + match: matchLocation[2], + matchIndex: matchIndex + }); + + // replaceFn has to return the node that replaced the endNode + // and then we step back so we can continue from the end of the + // match: + atIndex -= (endNode.length - endNodeIndex); + startNode = null; + endNode = null; + innerNodes = []; + matchLocation = matches.shift(); + matchIndex++; + + if (!matchLocation) { + break; // no more matches + } + } else if ((!hiddenTextElementsMap[curNode.nodeName] || blockElementsMap[curNode.nodeName]) && curNode.firstChild) { + if (!isContentEditableFalse(curNode)) { + // Move down + curNode = curNode.firstChild; + continue; + } + } else if (curNode.nextSibling) { + // Move forward: + curNode = curNode.nextSibling; + continue; + } + + // Move forward or up: + while (true) { + if (curNode.nextSibling) { + curNode = curNode.nextSibling; + break; + } else if (curNode.parentNode !== node) { + curNode = curNode.parentNode; + } else { + break out; + } + } + } + } + + /** + * Generates the actual replaceFn which splits up text nodes + * and inserts the replacement element. + */ + function genReplacer(nodeName) { + var makeReplacementNode; + + if (typeof nodeName != 'function') { + var stencilNode = nodeName.nodeType ? nodeName : doc.createElement(nodeName); + + makeReplacementNode = function(fill, matchIndex) { + var clone = stencilNode.cloneNode(false); + + clone.setAttribute('data-mce-index', matchIndex); + + if (fill) { + clone.appendChild(doc.createTextNode(fill)); + } + + return clone; + }; + } else { + makeReplacementNode = nodeName; + } + + return function(range) { + var before, after, parentNode, startNode = range.startNode, + endNode = range.endNode, matchIndex = range.matchIndex; + + if (startNode === endNode) { + var node = startNode; + + parentNode = node.parentNode; + if (range.startNodeIndex > 0) { + // Add `before` text node (before the match) + before = doc.createTextNode(node.data.substring(0, range.startNodeIndex)); + parentNode.insertBefore(before, node); + } + + // Create the replacement node: + var el = makeReplacementNode(range.match[0], matchIndex); + parentNode.insertBefore(el, node); + if (range.endNodeIndex < node.length) { + // Add `after` text node (after the match) + after = doc.createTextNode(node.data.substring(range.endNodeIndex)); + parentNode.insertBefore(after, node); + } + + node.parentNode.removeChild(node); + + return el; + } + + // Replace startNode -> [innerNodes...] -> endNode (in that order) + before = doc.createTextNode(startNode.data.substring(0, range.startNodeIndex)); + after = doc.createTextNode(endNode.data.substring(range.endNodeIndex)); + var elA = makeReplacementNode(startNode.data.substring(range.startNodeIndex), matchIndex); + var innerEls = []; + + for (var i = 0, l = range.innerNodes.length; i < l; ++i) { + var innerNode = range.innerNodes[i]; + var innerEl = makeReplacementNode(innerNode.data, matchIndex); + innerNode.parentNode.replaceChild(innerEl, innerNode); + innerEls.push(innerEl); + } + + var elB = makeReplacementNode(endNode.data.substring(0, range.endNodeIndex), matchIndex); + + parentNode = startNode.parentNode; + parentNode.insertBefore(before, startNode); + parentNode.insertBefore(elA, startNode); + parentNode.removeChild(startNode); + + parentNode = endNode.parentNode; + parentNode.insertBefore(elB, endNode); + parentNode.insertBefore(after, endNode); + parentNode.removeChild(endNode); + + return elB; + }; + } + + text = getText(node); + if (!text) { + return; + } + + if (regex.global) { + while ((m = regex.exec(text))) { + matches.push(getMatchIndexes(m, captureGroup)); + } + } else { + m = text.match(regex); + matches.push(getMatchIndexes(m, captureGroup)); + } + + if (matches.length) { + count = matches.length; + stepThroughMatches(node, matches, genReplacer(replacementNode)); + } + + return count; + } + + function Plugin(editor) { + var self = this, currentIndex = -1; + + function showDialog() { + var last = {}, selectedText; + + selectedText = tinymce.trim(editor.selection.getContent({format: 'text'})); + + function updateButtonStates() { + win.statusbar.find('#next').disabled(!findSpansByIndex(currentIndex + 1).length); + win.statusbar.find('#prev').disabled(!findSpansByIndex(currentIndex - 1).length); + } + + function notFoundAlert() { + editor.windowManager.alert('Could not find the specified string.', function() { + win.find('#find')[0].focus(); + }); + } + + var win = editor.windowManager.open({ + layout: "flex", + pack: "center", + align: "center", + onClose: function() { + editor.focus(); + self.done(); + }, + onSubmit: function(e) { + var count, caseState, text, wholeWord; + + e.preventDefault(); + + caseState = win.find('#case').checked(); + wholeWord = win.find('#words').checked(); + + text = win.find('#find').value(); + if (!text.length) { + self.done(false); + win.statusbar.items().slice(1).disabled(true); + return; + } + + if (last.text == text && last.caseState == caseState && last.wholeWord == wholeWord) { + if (findSpansByIndex(currentIndex + 1).length === 0) { + notFoundAlert(); + return; + } + + self.next(); + updateButtonStates(); + return; + } + + count = self.find(text, caseState, wholeWord); + if (!count) { + notFoundAlert(); + } + + win.statusbar.items().slice(1).disabled(count === 0); + updateButtonStates(); + + last = { + text: text, + caseState: caseState, + wholeWord: wholeWord + }; + }, + buttons: [ + {text: "Find", subtype: 'primary', onclick: function() { + win.submit(); + }}, + {text: "Replace", disabled: true, onclick: function() { + if (!self.replace(win.find('#replace').value())) { + win.statusbar.items().slice(1).disabled(true); + currentIndex = -1; + last = {}; + } + }}, + {text: "Replace all", disabled: true, onclick: function() { + self.replace(win.find('#replace').value(), true, true); + win.statusbar.items().slice(1).disabled(true); + last = {}; + }}, + {type: "spacer", flex: 1}, + {text: "Prev", name: 'prev', disabled: true, onclick: function() { + self.prev(); + updateButtonStates(); + }}, + {text: "Next", name: 'next', disabled: true, onclick: function() { + self.next(); + updateButtonStates(); + }} + ], + title: "Find and replace", + items: { + type: "form", + padding: 20, + labelGap: 30, + spacing: 10, + items: [ + {type: 'textbox', name: 'find', size: 40, label: 'Find', value: selectedText}, + {type: 'textbox', name: 'replace', size: 40, label: 'Replace with'}, + {type: 'checkbox', name: 'case', text: 'Match case', label: ' '}, + {type: 'checkbox', name: 'words', text: 'Whole words', label: ' '} + ] + } + }); + } + + self.init = function(ed) { + ed.addMenuItem('searchreplace', { + text: 'Find and replace', + shortcut: 'Meta+F', + onclick: showDialog, + separator: 'before', + context: 'edit' + }); + + ed.addButton('searchreplace', { + tooltip: 'Find and replace', + shortcut: 'Meta+F', + onclick: showDialog + }); + + ed.addCommand("SearchReplace", showDialog); + ed.shortcuts.add('Meta+F', '', showDialog); + }; + + function getElmIndex(elm) { + var value = elm.getAttribute('data-mce-index'); + + if (typeof value == "number") { + return "" + value; + } + + return value; + } + + function markAllMatches(regex) { + var node, marker; + + marker = editor.dom.create('span', { + "data-mce-bogus": 1 + }); + + marker.className = 'mce-match-marker'; // IE 7 adds class="mce-match-marker" and class=mce-match-marker + node = editor.getBody(); + + self.done(false); + + return findAndReplaceDOMText(regex, node, marker, false, editor.schema); + } + + function unwrap(node) { + var parentNode = node.parentNode; + + if (node.firstChild) { + parentNode.insertBefore(node.firstChild, node); + } + + node.parentNode.removeChild(node); + } + + function findSpansByIndex(index) { + var nodes, spans = []; + + nodes = tinymce.toArray(editor.getBody().getElementsByTagName('span')); + if (nodes.length) { + for (var i = 0; i < nodes.length; i++) { + var nodeIndex = getElmIndex(nodes[i]); + + if (nodeIndex === null || !nodeIndex.length) { + continue; + } + + if (nodeIndex === index.toString()) { + spans.push(nodes[i]); + } + } + } + + return spans; + } + + function moveSelection(forward) { + var testIndex = currentIndex, dom = editor.dom; + + forward = forward !== false; + + if (forward) { + testIndex++; + } else { + testIndex--; + } + + dom.removeClass(findSpansByIndex(currentIndex), 'mce-match-marker-selected'); + + var spans = findSpansByIndex(testIndex); + if (spans.length) { + dom.addClass(findSpansByIndex(testIndex), 'mce-match-marker-selected'); + editor.selection.scrollIntoView(spans[0]); + return testIndex; + } + + return -1; + } + + function removeNode(node) { + var dom = editor.dom, parent = node.parentNode; + + dom.remove(node); + + if (dom.isEmpty(parent)) { + dom.remove(parent); + } + } + + self.find = function(text, matchCase, wholeWord) { + text = text.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + text = wholeWord ? '\\b' + text + '\\b' : text; + + var count = markAllMatches(new RegExp(text, matchCase ? 'g' : 'gi')); + + if (count) { + currentIndex = -1; + currentIndex = moveSelection(true); + } + + return count; + }; + + self.next = function() { + var index = moveSelection(true); + + if (index !== -1) { + currentIndex = index; + } + }; + + self.prev = function() { + var index = moveSelection(false); + + if (index !== -1) { + currentIndex = index; + } + }; + + function isMatchSpan(node) { + var matchIndex = getElmIndex(node); + + return matchIndex !== null && matchIndex.length > 0; + } + + self.replace = function(text, forward, all) { + var i, nodes, node, matchIndex, currentMatchIndex, nextIndex = currentIndex, hasMore; + + forward = forward !== false; + + node = editor.getBody(); + nodes = tinymce.grep(tinymce.toArray(node.getElementsByTagName('span')), isMatchSpan); + for (i = 0; i < nodes.length; i++) { + var nodeIndex = getElmIndex(nodes[i]); + + matchIndex = currentMatchIndex = parseInt(nodeIndex, 10); + if (all || matchIndex === currentIndex) { + if (text.length) { + nodes[i].firstChild.nodeValue = text; + unwrap(nodes[i]); + } else { + removeNode(nodes[i]); + } + + while (nodes[++i]) { + matchIndex = parseInt(getElmIndex(nodes[i]), 10); + + if (matchIndex === currentMatchIndex) { + removeNode(nodes[i]); + } else { + i--; + break; + } + } + + if (forward) { + nextIndex--; + } + } else if (currentMatchIndex > currentIndex) { + nodes[i].setAttribute('data-mce-index', currentMatchIndex - 1); + } + } + + editor.undoManager.add(); + currentIndex = nextIndex; + + if (forward) { + hasMore = findSpansByIndex(nextIndex + 1).length > 0; + self.next(); + } else { + hasMore = findSpansByIndex(nextIndex - 1).length > 0; + self.prev(); + } + + return !all && hasMore; + }; + + self.done = function(keepEditorSelection) { + var i, nodes, startContainer, endContainer; + + nodes = tinymce.toArray(editor.getBody().getElementsByTagName('span')); + for (i = 0; i < nodes.length; i++) { + var nodeIndex = getElmIndex(nodes[i]); + + if (nodeIndex !== null && nodeIndex.length) { + if (nodeIndex === currentIndex.toString()) { + if (!startContainer) { + startContainer = nodes[i].firstChild; + } + + endContainer = nodes[i].firstChild; + } + + unwrap(nodes[i]); + } + } + + if (startContainer && endContainer) { + var rng = editor.dom.createRng(); + rng.setStart(startContainer, 0); + rng.setEnd(endContainer, endContainer.data.length); + + if (keepEditorSelection !== false) { + editor.selection.setRng(rng); + } + + return rng; + } + }; + } + + tinymce.PluginManager.add('searchreplace', Plugin); +})(); diff --git a/public/mosaico/dist/vendor/plugins/searchreplace/plugin.min.js b/public/mosaico/dist/vendor/plugins/searchreplace/plugin.min.js new file mode 100644 index 00000000..05ef03e3 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/searchreplace/plugin.min.js @@ -0,0 +1 @@ +!function(){function e(e){return e&&1==e.nodeType&&"false"===e.contentEditable}function t(t,n,r,i,o){function a(e,t){if(t=t||0,!e[0])throw"findAndReplaceDOMText cannot handle zero-length matches";var n=e.index;if(t>0){var r=e[t];if(!r)throw"Invalid capture group";n+=e[0].indexOf(r),e[0]=r}return[n,n+e[0].length,[e[0]]]}function s(t){var n;if(3===t.nodeType)return t.data;if(p[t.nodeName]&&!h[t.nodeName])return"";if(n="",e(t))return"\n";if((h[t.nodeName]||m[t.nodeName])&&(n+="\n"),t=t.firstChild)do n+=s(t);while(t=t.nextSibling);return n}function l(t,n,r){var i,o,a,s,l=[],c=0,u=t,d=n.shift(),f=0;e:for(;;){if((h[u.nodeName]||m[u.nodeName]||e(u))&&c++,3===u.nodeType&&(!o&&u.length+c>=d[1]?(o=u,s=d[1]-c):i&&l.push(u),!i&&u.length+c>d[0]&&(i=u,a=d[0]-c),c+=u.length),i&&o){if(u=r({startNode:i,startNodeIndex:a,endNode:o,endNodeIndex:s,innerNodes:l,match:d[2],matchIndex:f}),c-=o.length-s,i=null,o=null,l=[],d=n.shift(),f++,!d)break}else if(p[u.nodeName]&&!h[u.nodeName]||!u.firstChild){if(u.nextSibling){u=u.nextSibling;continue}}else if(!e(u)){u=u.firstChild;continue}for(;;){if(u.nextSibling){u=u.nextSibling;break}if(u.parentNode===t)break e;u=u.parentNode}}}function c(e){var t;if("function"!=typeof e){var n=e.nodeType?e:f.createElement(e);t=function(e,t){var r=n.cloneNode(!1);return r.setAttribute("data-mce-index",t),e&&r.appendChild(f.createTextNode(e)),r}}else t=e;return function(e){var n,r,i,o=e.startNode,a=e.endNode,s=e.matchIndex;if(o===a){var l=o;i=l.parentNode,e.startNodeIndex>0&&(n=f.createTextNode(l.data.substring(0,e.startNodeIndex)),i.insertBefore(n,l));var c=t(e.match[0],s);return i.insertBefore(c,l),e.endNodeIndex0}var u=this,d=-1;u.init=function(e){e.addMenuItem("searchreplace",{text:"Find and replace",shortcut:"Meta+F",onclick:n,separator:"before",context:"edit"}),e.addButton("searchreplace",{tooltip:"Find and replace",shortcut:"Meta+F",onclick:n}),e.addCommand("SearchReplace",n),e.shortcuts.add("Meta+F","",n)},u.find=function(e,t,n){e=e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),e=n?"\\b"+e+"\\b":e;var r=i(new RegExp(e,t?"g":"gi"));return r&&(d=-1,d=s(!0)),r},u.next=function(){var e=s(!0);e!==-1&&(d=e)},u.prev=function(){var e=s(!1);e!==-1&&(d=e)},u.replace=function(t,n,i){var s,f,h,p,m,g,v=d;for(n=n!==!1,h=e.getBody(),f=tinymce.grep(tinymce.toArray(h.getElementsByTagName("span")),c),s=0;sd&&f[s].setAttribute("data-mce-index",m-1)}return e.undoManager.add(),d=v,n?(g=a(v+1).length>0,u.next()):(g=a(v-1).length>0,u.prev()),!i&&g},u.done=function(t){var n,i,a,s;for(i=tinymce.toArray(e.getBody().getElementsByTagName("span")),n=0;ntexttexttexttexttext

+ return function(node, editor) { + var m, matches = [], text, dom = editor.dom; + var blockElementsMap, hiddenTextElementsMap, shortEndedElementsMap; + + blockElementsMap = editor.schema.getBlockElements(); // H1-H6, P, TD etc + hiddenTextElementsMap = editor.schema.getWhiteSpaceElements(); // TEXTAREA, PRE, STYLE, SCRIPT + shortEndedElementsMap = editor.schema.getShortEndedElements(); // BR, IMG, INPUT + + function createMatch(m, data) { + if (!m[0]) { + throw 'findAndReplaceDOMText cannot handle zero-length matches'; + } + + return { + start: m.index, + end: m.index + m[0].length, + text: m[0], + data: data + }; + } + + function getText(node) { + var txt; + + if (node.nodeType === 3) { + return node.data; + } + + if (hiddenTextElementsMap[node.nodeName] && !blockElementsMap[node.nodeName]) { + return ''; + } + + if (isContentEditableFalse(node)) { + return '\n'; + } + + txt = ''; + + if (blockElementsMap[node.nodeName] || shortEndedElementsMap[node.nodeName]) { + txt += '\n'; + } + + if ((node = node.firstChild)) { + do { + txt += getText(node); + } while ((node = node.nextSibling)); + } + + return txt; + } + + function stepThroughMatches(node, matches, replaceFn) { + var startNode, endNode, startNodeIndex, + endNodeIndex, innerNodes = [], atIndex = 0, curNode = node, + matchLocation, matchIndex = 0; + + matches = matches.slice(0); + matches.sort(function(a, b) { + return a.start - b.start; + }); + + matchLocation = matches.shift(); + + out: while (true) { + if (blockElementsMap[curNode.nodeName] || shortEndedElementsMap[curNode.nodeName] || isContentEditableFalse(curNode)) { + atIndex++; + } + + if (curNode.nodeType === 3) { + if (!endNode && curNode.length + atIndex >= matchLocation.end) { + // We've found the ending + endNode = curNode; + endNodeIndex = matchLocation.end - atIndex; + } else if (startNode) { + // Intersecting node + innerNodes.push(curNode); + } + + if (!startNode && curNode.length + atIndex > matchLocation.start) { + // We've found the match start + startNode = curNode; + startNodeIndex = matchLocation.start - atIndex; + } + + atIndex += curNode.length; + } + + if (startNode && endNode) { + curNode = replaceFn({ + startNode: startNode, + startNodeIndex: startNodeIndex, + endNode: endNode, + endNodeIndex: endNodeIndex, + innerNodes: innerNodes, + match: matchLocation.text, + matchIndex: matchIndex + }); + + // replaceFn has to return the node that replaced the endNode + // and then we step back so we can continue from the end of the + // match: + atIndex -= (endNode.length - endNodeIndex); + startNode = null; + endNode = null; + innerNodes = []; + matchLocation = matches.shift(); + matchIndex++; + + if (!matchLocation) { + break; // no more matches + } + } else if ((!hiddenTextElementsMap[curNode.nodeName] || blockElementsMap[curNode.nodeName]) && curNode.firstChild) { + if (!isContentEditableFalse(curNode)) { + // Move down + curNode = curNode.firstChild; + continue; + } + } else if (curNode.nextSibling) { + // Move forward: + curNode = curNode.nextSibling; + continue; + } + + // Move forward or up: + while (true) { + if (curNode.nextSibling) { + curNode = curNode.nextSibling; + break; + } else if (curNode.parentNode !== node) { + curNode = curNode.parentNode; + } else { + break out; + } + } + } + } + + /** + * Generates the actual replaceFn which splits up text nodes + * and inserts the replacement element. + */ + function genReplacer(callback) { + function makeReplacementNode(fill, matchIndex) { + var match = matches[matchIndex]; + + if (!match.stencil) { + match.stencil = callback(match); + } + + var clone = match.stencil.cloneNode(false); + clone.setAttribute('data-mce-index', matchIndex); + + if (fill) { + clone.appendChild(dom.doc.createTextNode(fill)); + } + + return clone; + } + + return function(range) { + var before, after, parentNode, startNode = range.startNode, + endNode = range.endNode, matchIndex = range.matchIndex, + doc = dom.doc; + + if (startNode === endNode) { + var node = startNode; + + parentNode = node.parentNode; + if (range.startNodeIndex > 0) { + // Add "before" text node (before the match) + before = doc.createTextNode(node.data.substring(0, range.startNodeIndex)); + parentNode.insertBefore(before, node); + } + + // Create the replacement node: + var el = makeReplacementNode(range.match, matchIndex); + parentNode.insertBefore(el, node); + if (range.endNodeIndex < node.length) { + // Add "after" text node (after the match) + after = doc.createTextNode(node.data.substring(range.endNodeIndex)); + parentNode.insertBefore(after, node); + } + + node.parentNode.removeChild(node); + + return el; + } + + // Replace startNode -> [innerNodes...] -> endNode (in that order) + before = doc.createTextNode(startNode.data.substring(0, range.startNodeIndex)); + after = doc.createTextNode(endNode.data.substring(range.endNodeIndex)); + var elA = makeReplacementNode(startNode.data.substring(range.startNodeIndex), matchIndex); + var innerEls = []; + + for (var i = 0, l = range.innerNodes.length; i < l; ++i) { + var innerNode = range.innerNodes[i]; + var innerEl = makeReplacementNode(innerNode.data, matchIndex); + innerNode.parentNode.replaceChild(innerEl, innerNode); + innerEls.push(innerEl); + } + + var elB = makeReplacementNode(endNode.data.substring(0, range.endNodeIndex), matchIndex); + + parentNode = startNode.parentNode; + parentNode.insertBefore(before, startNode); + parentNode.insertBefore(elA, startNode); + parentNode.removeChild(startNode); + + parentNode = endNode.parentNode; + parentNode.insertBefore(elB, endNode); + parentNode.insertBefore(after, endNode); + parentNode.removeChild(endNode); + + return elB; + }; + } + + function unwrapElement(element) { + var parentNode = element.parentNode; + parentNode.insertBefore(element.firstChild, element); + element.parentNode.removeChild(element); + } + + function getWrappersByIndex(index) { + var elements = node.getElementsByTagName('*'), wrappers = []; + + index = typeof index == "number" ? "" + index : null; + + for (var i = 0; i < elements.length; i++) { + var element = elements[i], dataIndex = element.getAttribute('data-mce-index'); + + if (dataIndex !== null && dataIndex.length) { + if (dataIndex === index || index === null) { + wrappers.push(element); + } + } + } + + return wrappers; + } + + /** + * Returns the index of a specific match object or -1 if it isn't found. + * + * @param {Match} match Text match object. + * @return {Number} Index of match or -1 if it isn't found. + */ + function indexOf(match) { + var i = matches.length; + while (i--) { + if (matches[i] === match) { + return i; + } + } + + return -1; + } + + /** + * Filters the matches. If the callback returns true it stays if not it gets removed. + * + * @param {Function} callback Callback to execute for each match. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function filter(callback) { + var filteredMatches = []; + + each(function(match, i) { + if (callback(match, i)) { + filteredMatches.push(match); + } + }); + + matches = filteredMatches; + + /*jshint validthis:true*/ + return this; + } + + /** + * Executes the specified callback for each match. + * + * @param {Function} callback Callback to execute for each match. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function each(callback) { + for (var i = 0, l = matches.length; i < l; i++) { + if (callback(matches[i], i) === false) { + break; + } + } + + /*jshint validthis:true*/ + return this; + } + + /** + * Wraps the current matches with nodes created by the specified callback. + * Multiple clones of these matches might occur on matches that are on multiple nodex. + * + * @param {Function} callback Callback to execute in order to create elements for matches. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function wrap(callback) { + if (matches.length) { + stepThroughMatches(node, matches, genReplacer(callback)); + } + + /*jshint validthis:true*/ + return this; + } + + /** + * Finds the specified regexp and adds them to the matches collection. + * + * @param {RegExp} regex Global regexp to search the current node by. + * @param {Object} [data] Optional custom data element for the match. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function find(regex, data) { + if (text && regex.global) { + while ((m = regex.exec(text))) { + matches.push(createMatch(m, data)); + } + } + + return this; + } + + /** + * Unwraps the specified match object or all matches if unspecified. + * + * @param {Object} [match] Optional match object. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function unwrap(match) { + var i, elements = getWrappersByIndex(match ? indexOf(match) : null); + + i = elements.length; + while (i--) { + unwrapElement(elements[i]); + } + + return this; + } + + /** + * Returns a match object by the specified DOM element. + * + * @param {DOMElement} element Element to return match object for. + * @return {Object} Match object for the specified element. + */ + function matchFromElement(element) { + return matches[element.getAttribute('data-mce-index')]; + } + + /** + * Returns a DOM element from the specified match element. This will be the first element if it's split + * on multiple nodes. + * + * @param {Object} match Match element to get first element of. + * @return {DOMElement} DOM element for the specified match object. + */ + function elementFromMatch(match) { + return getWrappersByIndex(indexOf(match))[0]; + } + + /** + * Adds match the specified range for example a grammar line. + * + * @param {Number} start Start offset. + * @param {Number} length Length of the text. + * @param {Object} data Custom data object for match. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function add(start, length, data) { + matches.push({ + start: start, + end: start + length, + text: text.substr(start, length), + data: data + }); + + return this; + } + + /** + * Returns a DOM range for the specified match. + * + * @param {Object} match Match object to get range for. + * @return {DOMRange} DOM Range for the specified match. + */ + function rangeFromMatch(match) { + var wrappers = getWrappersByIndex(indexOf(match)); + + var rng = editor.dom.createRng(); + rng.setStartBefore(wrappers[0]); + rng.setEndAfter(wrappers[wrappers.length - 1]); + + return rng; + } + + /** + * Replaces the specified match with the specified text. + * + * @param {Object} match Match object to replace. + * @param {String} text Text to replace the match with. + * @return {DOMRange} DOM range produced after the replace. + */ + function replace(match, text) { + var rng = rangeFromMatch(match); + + rng.deleteContents(); + + if (text.length > 0) { + rng.insertNode(editor.dom.doc.createTextNode(text)); + } + + return rng; + } + + /** + * Resets the DomTextMatcher instance. This will remove any wrapped nodes and remove any matches. + * + * @return {[type]} [description] + */ + function reset() { + matches.splice(0, matches.length); + unwrap(); + + return this; + } + + text = getText(node); + + return { + text: text, + matches: matches, + each: each, + filter: filter, + reset: reset, + matchFromElement: matchFromElement, + elementFromMatch: elementFromMatch, + find: find, + add: add, + wrap: wrap, + unwrap: unwrap, + replace: replace, + rangeFromMatch: rangeFromMatch, + indexOf: indexOf + }; + }; +}); + +// Included from: js/tinymce/plugins/spellchecker/classes/Plugin.js + +/** + * Plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint camelcase:false */ + +/** + * This class contains all core logic for the spellchecker plugin. + * + * @class tinymce.spellcheckerplugin.Plugin + * @private + */ +define("tinymce/spellcheckerplugin/Plugin", [ + "tinymce/spellcheckerplugin/DomTextMatcher", + "tinymce/PluginManager", + "tinymce/util/Tools", + "tinymce/ui/Menu", + "tinymce/dom/DOMUtils", + "tinymce/util/XHR", + "tinymce/util/URI", + "tinymce/util/JSON" +], function(DomTextMatcher, PluginManager, Tools, Menu, DOMUtils, XHR, URI, JSON) { + PluginManager.add('spellchecker', function(editor, url) { + var languageMenuItems, self = this, lastSuggestions, started, suggestionsMenu, settings = editor.settings; + var hasDictionarySupport; + + function getTextMatcher() { + if (!self.textMatcher) { + self.textMatcher = new DomTextMatcher(editor.getBody(), editor); + } + + return self.textMatcher; + } + + function buildMenuItems(listName, languageValues) { + var items = []; + + Tools.each(languageValues, function(languageValue) { + items.push({ + selectable: true, + text: languageValue.name, + data: languageValue.value + }); + }); + + return items; + } + + // draw back if power version is requested and registered + if (/(^|[ ,])tinymcespellchecker([, ]|$)/.test(settings.plugins) && PluginManager.get('tinymcespellchecker')) { + /*eslint no-console:0 */ + if (typeof console !== "undefined" && console.log) { + console.log( + "Spell Checker Pro is incompatible with Spell Checker plugin! " + + "Remove 'spellchecker' from the 'plugins' option." + ); + } + return; + } + + var languagesString = settings.spellchecker_languages || + 'English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,' + + 'German=de,Italian=it,Polish=pl,Portuguese=pt_BR,' + + 'Spanish=es,Swedish=sv'; + + languageMenuItems = buildMenuItems('Language', + Tools.map(languagesString.split(','), function(langPair) { + langPair = langPair.split('='); + + return { + name: langPair[0], + value: langPair[1] + }; + }) + ); + + function isEmpty(obj) { + /*jshint unused:false*/ + /*eslint no-unused-vars:0 */ + for (var name in obj) { + return false; + } + + return true; + } + + function showSuggestions(word, spans) { + var items = [], suggestions = lastSuggestions[word]; + + Tools.each(suggestions, function(suggestion) { + items.push({ + text: suggestion, + onclick: function() { + editor.insertContent(editor.dom.encode(suggestion)); + editor.dom.remove(spans); + checkIfFinished(); + } + }); + }); + + items.push({text: '-'}); + + if (hasDictionarySupport) { + items.push({text: 'Add to Dictionary', onclick: function() { + addToDictionary(word, spans); + }}); + } + + items.push.apply(items, [ + {text: 'Ignore', onclick: function() { + ignoreWord(word, spans); + }}, + + {text: 'Ignore all', onclick: function() { + ignoreWord(word, spans, true); + }} + ]); + + // Render menu + suggestionsMenu = new Menu({ + items: items, + context: 'contextmenu', + onautohide: function(e) { + if (e.target.className.indexOf('spellchecker') != -1) { + e.preventDefault(); + } + }, + onhide: function() { + suggestionsMenu.remove(); + suggestionsMenu = null; + } + }); + + suggestionsMenu.renderTo(document.body); + + // Position menu + var pos = DOMUtils.DOM.getPos(editor.getContentAreaContainer()); + var targetPos = editor.dom.getPos(spans[0]); + var root = editor.dom.getRoot(); + + // Adjust targetPos for scrolling in the editor + if (root.nodeName == 'BODY') { + targetPos.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft; + targetPos.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop; + } else { + targetPos.x -= root.scrollLeft; + targetPos.y -= root.scrollTop; + } + + pos.x += targetPos.x; + pos.y += targetPos.y; + + suggestionsMenu.moveTo(pos.x, pos.y + spans[0].offsetHeight); + } + + function getWordCharPattern() { + // Regexp for finding word specific characters this will split words by + // spaces, quotes, copy right characters etc. It's escaped with unicode characters + // to make it easier to output scripts on servers using different encodings + // so if you add any characters outside the 128 byte range make sure to escape it + return editor.getParam('spellchecker_wordchar_pattern') || new RegExp("[^" + + "\\s!\"#$%&()*+,-./:;<=>?@[\\]^_{|}`" + + "\u00a7\u00a9\u00ab\u00ae\u00b1\u00b6\u00b7\u00b8\u00bb" + + "\u00bc\u00bd\u00be\u00bf\u00d7\u00f7\u00a4\u201d\u201c\u201e\u00a0\u2002\u2003\u2009" + + "]+", "g"); + } + + function defaultSpellcheckCallback(method, text, doneCallback, errorCallback) { + var data = {method: method, lang: settings.spellchecker_language}, postData = ''; + + data[method == "addToDictionary" ? "word" : "text"] = text; + + Tools.each(data, function(value, key) { + if (postData) { + postData += '&'; + } + + postData += key + '=' + encodeURIComponent(value); + }); + + XHR.send({ + url: new URI(url).toAbsolute(settings.spellchecker_rpc_url), + type: "post", + content_type: 'application/x-www-form-urlencoded', + data: postData, + success: function(result) { + result = JSON.parse(result); + + if (!result) { + var message = editor.translate("Server response wasn't proper JSON."); + errorCallback(message); + } else if (result.error) { + errorCallback(result.error); + } else { + doneCallback(result); + } + }, + error: function() { + var message = editor.translate("The spelling service was not found: (") + + settings.spellchecker_rpc_url + + editor.translate(")"); + errorCallback(message); + } + }); + } + + function sendRpcCall(name, data, successCallback, errorCallback) { + var spellCheckCallback = settings.spellchecker_callback || defaultSpellcheckCallback; + spellCheckCallback.call(self, name, data, successCallback, errorCallback); + } + + function spellcheck() { + if (finish()) { + return; + } + + function errorCallback(message) { + editor.notificationManager.open({text: message, type: 'error'}); + editor.setProgressState(false); + finish(); + } + + editor.setProgressState(true); + sendRpcCall("spellcheck", getTextMatcher().text, markErrors, errorCallback); + editor.focus(); + } + + function checkIfFinished() { + if (!editor.dom.select('span.mce-spellchecker-word').length) { + finish(); + } + } + + function addToDictionary(word, spans) { + editor.setProgressState(true); + + sendRpcCall("addToDictionary", word, function() { + editor.setProgressState(false); + editor.dom.remove(spans, true); + checkIfFinished(); + }, function(message) { + editor.notificationManager.open({text: message, type: 'error'}); + editor.setProgressState(false); + }); + } + + function ignoreWord(word, spans, all) { + editor.selection.collapse(); + + if (all) { + Tools.each(editor.dom.select('span.mce-spellchecker-word'), function(span) { + if (span.getAttribute('data-mce-word') == word) { + editor.dom.remove(span, true); + } + }); + } else { + editor.dom.remove(spans, true); + } + + checkIfFinished(); + } + + function finish() { + getTextMatcher().reset(); + self.textMatcher = null; + + if (started) { + started = false; + editor.fire('SpellcheckEnd'); + return true; + } + } + + function getElmIndex(elm) { + var value = elm.getAttribute('data-mce-index'); + + if (typeof value == "number") { + return "" + value; + } + + return value; + } + + function findSpansByIndex(index) { + var nodes, spans = []; + + nodes = Tools.toArray(editor.getBody().getElementsByTagName('span')); + if (nodes.length) { + for (var i = 0; i < nodes.length; i++) { + var nodeIndex = getElmIndex(nodes[i]); + + if (nodeIndex === null || !nodeIndex.length) { + continue; + } + + if (nodeIndex === index.toString()) { + spans.push(nodes[i]); + } + } + } + + return spans; + } + + editor.on('click', function(e) { + var target = e.target; + + if (target.className == "mce-spellchecker-word") { + e.preventDefault(); + + var spans = findSpansByIndex(getElmIndex(target)); + + if (spans.length > 0) { + var rng = editor.dom.createRng(); + rng.setStartBefore(spans[0]); + rng.setEndAfter(spans[spans.length - 1]); + editor.selection.setRng(rng); + showSuggestions(target.getAttribute('data-mce-word'), spans); + } + } + }); + + editor.addMenuItem('spellchecker', { + text: 'Spellcheck', + context: 'tools', + onclick: spellcheck, + selectable: true, + onPostRender: function() { + var self = this; + + self.active(started); + + editor.on('SpellcheckStart SpellcheckEnd', function() { + self.active(started); + }); + } + }); + + function updateSelection(e) { + var selectedLanguage = settings.spellchecker_language; + + e.control.items().each(function(ctrl) { + ctrl.active(ctrl.settings.data === selectedLanguage); + }); + } + + /** + * Find the specified words and marks them. It will also show suggestions for those words. + * + * @example + * editor.plugins.spellchecker.markErrors({ + * dictionary: true, + * words: { + * "word1": ["suggestion 1", "Suggestion 2"] + * } + * }); + * @param {Object} data Data object containing the words with suggestions. + */ + function markErrors(data) { + var suggestions; + + if (data.words) { + hasDictionarySupport = !!data.dictionary; + suggestions = data.words; + } else { + // Fallback to old format + suggestions = data; + } + + editor.setProgressState(false); + + if (isEmpty(suggestions)) { + var message = editor.translate('No misspellings found.'); + editor.notificationManager.open({text: message, type: 'info'}); + started = false; + return; + } + + lastSuggestions = suggestions; + + getTextMatcher().find(getWordCharPattern()).filter(function(match) { + return !!suggestions[match.text]; + }).wrap(function(match) { + return editor.dom.create('span', { + "class": 'mce-spellchecker-word', + "data-mce-bogus": 1, + "data-mce-word": match.text + }); + }); + + started = true; + editor.fire('SpellcheckStart'); + } + + var buttonArgs = { + tooltip: 'Spellcheck', + onclick: spellcheck, + onPostRender: function() { + var self = this; + + editor.on('SpellcheckStart SpellcheckEnd', function() { + self.active(started); + }); + } + }; + + if (languageMenuItems.length > 1) { + buttonArgs.type = 'splitbutton'; + buttonArgs.menu = languageMenuItems; + buttonArgs.onshow = updateSelection; + buttonArgs.onselect = function(e) { + settings.spellchecker_language = e.control.settings.data; + }; + } + + editor.addButton('spellchecker', buttonArgs); + editor.addCommand('mceSpellCheck', spellcheck); + + editor.on('remove', function() { + if (suggestionsMenu) { + suggestionsMenu.remove(); + suggestionsMenu = null; + } + }); + + editor.on('change', checkIfFinished); + + this.getTextMatcher = getTextMatcher; + this.getWordCharPattern = getWordCharPattern; + this.markErrors = markErrors; + this.getLanguage = function() { + return settings.spellchecker_language; + }; + + // Set default spellchecker language if it's not specified + settings.spellchecker_language = settings.spellchecker_language || settings.language || 'en'; + }); +}); + +expose(["tinymce/spellcheckerplugin/DomTextMatcher"]); +})(this); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/spellchecker/plugin.min.js b/public/mosaico/dist/vendor/plugins/spellchecker/plugin.min.js new file mode 100644 index 00000000..e2f12d5f --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/spellchecker/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],o=0;o=l.end?(o=d,s=l.end-u):i&&c.push(d),!i&&d.length+u>l.start&&(i=d,a=l.start-u),u+=d.length),i&&o){if(d=r({startNode:i,startNodeIndex:a,endNode:o,endNodeIndex:s,innerNodes:c,match:l.text,matchIndex:f}),u-=o.length-s,i=null,o=null,c=[],l=n.shift(),f++,!l)break}else if(E[d.nodeName]&&!N[d.nodeName]||!d.firstChild){if(d.nextSibling){d=d.nextSibling;continue}}else if(!e(d)){d=d.firstChild;continue}for(;;){if(d.nextSibling){d=d.nextSibling;break}if(d.parentNode===t)break e;d=d.parentNode}}}function a(e){function t(t,n){var r=S[n];r.stencil||(r.stencil=e(r));var i=r.stencil.cloneNode(!1);return i.setAttribute("data-mce-index",n),t&&i.appendChild(k.doc.createTextNode(t)),i}return function(e){var n,r,i,o=e.startNode,a=e.endNode,s=e.matchIndex,l=k.doc;if(o===a){var c=o;i=c.parentNode,e.startNodeIndex>0&&(n=l.createTextNode(c.data.substring(0,e.startNodeIndex)),i.insertBefore(n,c));var u=t(e.match,s);return i.insertBefore(u,c),e.endNodeIndex0&&r.insertNode(n.dom.doc.createTextNode(t)),r}function C(){return S.splice(0,S.length),p(),this}var x,w,N,E,_,S=[],k=n.dom;return N=n.schema.getBlockElements(),E=n.schema.getWhiteSpaceElements(),_=n.schema.getShortEndedElements(),w=i(t),{text:w,matches:S,each:d,filter:u,reset:C,matchFromElement:m,elementFromMatch:g,find:h,add:v,wrap:f,unwrap:p,replace:b,rangeFromMatch:y,indexOf:c}}}),r("tinymce/spellcheckerplugin/Plugin",["tinymce/spellcheckerplugin/DomTextMatcher","tinymce/PluginManager","tinymce/util/Tools","tinymce/ui/Menu","tinymce/dom/DOMUtils","tinymce/util/XHR","tinymce/util/URI","tinymce/util/JSON"],function(e,t,n,r,i,o,a,s){t.add("spellchecker",function(l,c){function u(){return B.textMatcher||(B.textMatcher=new e(l.getBody(),l)),B.textMatcher}function d(e,t){var r=[];return n.each(t,function(e){r.push({selectable:!0,text:e.name,data:e.value})}),r}function f(e){for(var t in e)return!1;return!0}function h(e,t){var o=[],a=k[e];n.each(a,function(e){o.push({text:e,onclick:function(){l.insertContent(l.dom.encode(e)),l.dom.remove(t),y()}})}),o.push({text:"-"}),A&&o.push({text:"Add to Dictionary",onclick:function(){b(e,t)}}),o.push.apply(o,[{text:"Ignore",onclick:function(){C(e,t)}},{text:"Ignore all",onclick:function(){C(e,t,!0)}}]),R=new r({items:o,context:"contextmenu",onautohide:function(e){e.target.className.indexOf("spellchecker")!=-1&&e.preventDefault()},onhide:function(){R.remove(),R=null}}),R.renderTo(document.body);var s=i.DOM.getPos(l.getContentAreaContainer()),c=l.dom.getPos(t[0]),u=l.dom.getRoot();"BODY"==u.nodeName?(c.x-=u.ownerDocument.documentElement.scrollLeft||u.scrollLeft,c.y-=u.ownerDocument.documentElement.scrollTop||u.scrollTop):(c.x-=u.scrollLeft,c.y-=u.scrollTop),s.x+=c.x,s.y+=c.y,R.moveTo(s.x,s.y+t[0].offsetHeight)}function p(){return l.getParam("spellchecker_wordchar_pattern")||new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e\xa0\u2002\u2003\u2009]+',"g")}function m(e,t,r,i){var u={method:e,lang:D.spellchecker_language},d="";u["addToDictionary"==e?"word":"text"]=t,n.each(u,function(e,t){d&&(d+="&"),d+=t+"="+encodeURIComponent(e)}),o.send({url:new a(c).toAbsolute(D.spellchecker_rpc_url),type:"post",content_type:"application/x-www-form-urlencoded",data:d,success:function(e){if(e=s.parse(e))e.error?i(e.error):r(e);else{var t=l.translate("Server response wasn't proper JSON.");i(t)}},error:function(){var e=l.translate("The spelling service was not found: (")+D.spellchecker_rpc_url+l.translate(")");i(e)}})}function g(e,t,n,r){var i=D.spellchecker_callback||m;i.call(B,e,t,n,r)}function v(){function e(e){l.notificationManager.open({text:e,type:"error"}),l.setProgressState(!1),x()}x()||(l.setProgressState(!0),g("spellcheck",u().text,_,e),l.focus())}function y(){l.dom.select("span.mce-spellchecker-word").length||x()}function b(e,t){l.setProgressState(!0),g("addToDictionary",e,function(){l.setProgressState(!1),l.dom.remove(t,!0),y()},function(e){l.notificationManager.open({text:e,type:"error"}),l.setProgressState(!1)})}function C(e,t,r){l.selection.collapse(),r?n.each(l.dom.select("span.mce-spellchecker-word"),function(t){t.getAttribute("data-mce-word")==e&&l.dom.remove(t,!0)}):l.dom.remove(t,!0),y()}function x(){if(u().reset(),B.textMatcher=null,T)return T=!1,l.fire("SpellcheckEnd"),!0}function w(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t}function N(e){var t,r=[];if(t=n.toArray(l.getBody().getElementsByTagName("span")),t.length)for(var i=0;i0){var r=l.dom.createRng();r.setStartBefore(n[0]),r.setEndAfter(n[n.length-1]),l.selection.setRng(r),h(t.getAttribute("data-mce-word"),n)}}}),l.addMenuItem("spellchecker",{text:"Spellcheck",context:"tools",onclick:v,selectable:!0,onPostRender:function(){var e=this;e.active(T),l.on("SpellcheckStart SpellcheckEnd",function(){e.active(T)})}});var M={tooltip:"Spellcheck",onclick:v,onPostRender:function(){var e=this;l.on("SpellcheckStart SpellcheckEnd",function(){e.active(T)})}};S.length>1&&(M.type="splitbutton",M.menu=S,M.onshow=E,M.onselect=function(e){D.spellchecker_language=e.control.settings.data}),l.addButton("spellchecker",M),l.addCommand("mceSpellCheck",v),l.on("remove",function(){R&&(R.remove(),R=null)}),l.on("change",y),this.getTextMatcher=u,this.getWordCharPattern=p,this.markErrors=_,this.getLanguage=function(){return D.spellchecker_language},D.spellchecker_language=D.spellchecker_language||D.language||"en"})}),o(["tinymce/spellcheckerplugin/DomTextMatcher"])}(this); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/tabfocus/plugin.js b/public/mosaico/dist/vendor/plugins/tabfocus/plugin.js new file mode 100644 index 00000000..35bc9f58 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/tabfocus/plugin.js @@ -0,0 +1,120 @@ +/** + * plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('tabfocus', function(editor) { + var DOM = tinymce.DOM, each = tinymce.each, explode = tinymce.explode; + + function tabCancel(e) { + if (e.keyCode === 9 && !e.ctrlKey && !e.altKey && !e.metaKey) { + e.preventDefault(); + } + } + + function tabHandler(e) { + var x, el, v, i; + + if (e.keyCode !== 9 || e.ctrlKey || e.altKey || e.metaKey || e.isDefaultPrevented()) { + return; + } + + function find(direction) { + el = DOM.select(':input:enabled,*[tabindex]:not(iframe)'); + + function canSelectRecursive(e) { + return e.nodeName === "BODY" || (e.type != 'hidden' && + e.style.display != "none" && + e.style.visibility != "hidden" && canSelectRecursive(e.parentNode)); + } + + function canSelect(el) { + return /INPUT|TEXTAREA|BUTTON/.test(el.tagName) && tinymce.get(e.id) && el.tabIndex != -1 && canSelectRecursive(el); + } + + each(el, function(e, i) { + if (e.id == editor.id) { + x = i; + return false; + } + }); + if (direction > 0) { + for (i = x + 1; i < el.length; i++) { + if (canSelect(el[i])) { + return el[i]; + } + } + } else { + for (i = x - 1; i >= 0; i--) { + if (canSelect(el[i])) { + return el[i]; + } + } + } + + return null; + } + + v = explode(editor.getParam('tab_focus', editor.getParam('tabfocus_elements', ':prev,:next'))); + + if (v.length == 1) { + v[1] = v[0]; + v[0] = ':prev'; + } + + // Find element to focus + if (e.shiftKey) { + if (v[0] == ':prev') { + el = find(-1); + } else { + el = DOM.get(v[0]); + } + } else { + if (v[1] == ':next') { + el = find(1); + } else { + el = DOM.get(v[1]); + } + } + + if (el) { + var focusEditor = tinymce.get(el.id || el.name); + + if (el.id && focusEditor) { + focusEditor.focus(); + } else { + tinymce.util.Delay.setTimeout(function() { + if (!tinymce.Env.webkit) { + window.focus(); + } + + el.focus(); + }, 10); + } + + e.preventDefault(); + } + } + + editor.on('init', function() { + if (editor.inline) { + // Remove default tabIndex in inline mode + tinymce.DOM.setAttrib(editor.getBody(), 'tabIndex', null); + } + + editor.on('keyup', tabCancel); + + if (tinymce.Env.gecko) { + editor.on('keypress keydown', tabHandler); + } else { + editor.on('keydown', tabHandler); + } + }); +}); diff --git a/public/mosaico/dist/vendor/plugins/tabfocus/plugin.min.js b/public/mosaico/dist/vendor/plugins/tabfocus/plugin.min.js new file mode 100644 index 00000000..d310d0b8 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/tabfocus/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("tabfocus",function(e){function t(e){9!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}function n(t){function n(n){function o(e){return"BODY"===e.nodeName||"hidden"!=e.type&&"none"!=e.style.display&&"hidden"!=e.style.visibility&&o(e.parentNode)}function l(e){return/INPUT|TEXTAREA|BUTTON/.test(e.tagName)&&tinymce.get(t.id)&&e.tabIndex!=-1&&o(e)}if(s=r.select(":input:enabled,*[tabindex]:not(iframe)"),i(s,function(t,n){if(t.id==e.id)return a=n,!1}),n>0){for(c=a+1;c=0;c--)if(l(s[c]))return s[c];return null}var a,s,l,c;if(!(9!==t.keyCode||t.ctrlKey||t.altKey||t.metaKey||t.isDefaultPrevented())&&(l=o(e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))),1==l.length&&(l[1]=l[0],l[0]=":prev"),s=t.shiftKey?":prev"==l[0]?n(-1):r.get(l[0]):":next"==l[1]?n(1):r.get(l[1]))){var u=tinymce.get(s.id||s.name);s.id&&u?u.focus():tinymce.util.Delay.setTimeout(function(){tinymce.Env.webkit||window.focus(),s.focus()},10),t.preventDefault()}}var r=tinymce.DOM,i=tinymce.each,o=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null),e.on("keyup",t),tinymce.Env.gecko?e.on("keypress keydown",n):e.on("keydown",n)})}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/table/plugin.js b/public/mosaico/dist/vendor/plugins/table/plugin.js new file mode 100644 index 00000000..d1bdf147 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/table/plugin.js @@ -0,0 +1,4400 @@ +/** + * Compiled inline version. (Library mode) + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports, undefined) { + "use strict"; + + var modules = {}; + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + } + + function defined(id) { + return !!modules[id]; + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function expose(ids) { + var i, target, id, fragments, privateModules; + + for (i = 0; i < ids.length; i++) { + target = exports; + id = ids[i]; + fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + + // Expose private modules for unit tests + if (exports.AMDLC_TESTS) { + privateModules = exports.privateModules || {}; + + for (id in modules) { + privateModules[id] = modules[id]; + } + + for (i = 0; i < ids.length; i++) { + delete privateModules[ids[i]]; + } + + exports.privateModules = privateModules; + } + } + +// Included from: js/tinymce/plugins/table/classes/Utils.js + +/** + * Utils.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Various utility functions. + * + * @class tinymce.tableplugin.Utils + * @private + */ +define("tinymce/tableplugin/Utils", [ + "tinymce/Env" +], function(Env) { + var setSpanVal = function (name) { + return function (td, val) { + if (td) { + val = parseInt(val, 10); + + if (val === 1 || val === 0) { + td.removeAttribute(name, 1); + } else { + td.setAttribute(name, val, 1); + } + } + }; + }; + + var getSpanVal = function (name) { + return function (td) { + return parseInt(td.getAttribute(name) || 1, 10); + }; + }; + + function paddCell(cell) { + if (!Env.ie || Env.ie > 9) { + if (!cell.hasChildNodes()) { + cell.innerHTML = '
'; + } + } + } + + return { + setColSpan: setSpanVal('colSpan'), + setRowSpan: setSpanVal('rowspan'), + getColSpan: getSpanVal('colSpan'), + getRowSpan: getSpanVal('rowSpan'), + setSpanVal: function (td, name, value) { + setSpanVal(name)(td, value); + }, + getSpanVal: function (td, name) { + return getSpanVal(name)(td); + }, + paddCell: paddCell + }; +}); + +// Included from: js/tinymce/plugins/table/classes/SplitCols.js + +/** + * SplitCols.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Contains logic for handling splitting of merged rows. + * + * @class tinymce.tableplugin.SplitCols + * @private + */ +define("tinymce/tableplugin/SplitCols", [ + "tinymce/util/Tools", + "tinymce/tableplugin/Utils" +], function(Tools, Utils) { + var getCellAt = function (grid, x, y) { + return grid[y] ? grid[y][x] : null; + }; + + var getCellElmAt = function (grid, x, y) { + var cell = getCellAt(grid, x, y); + return cell ? cell.elm : null; + }; + + var countHoles = function (grid, x, y, delta) { + var y2, cell, count = 0, elm = getCellElmAt(grid, x, y); + + for (y2 = y; delta > 0 ? y2 < grid.length : y2 >= 0; y2 += delta) { + cell = getCellAt(grid, x, y2); + if (elm !== cell.elm) { + break; + } + + count++; + } + + return count; + }; + + var findRealElm = function (grid, x, y) { + var cell, row = grid[y]; + + for (var x2 = x; x2 < row.length; x2++) { + cell = row[x2]; + if (cell.real) { + return cell.elm; + } + } + + return null; + }; + + var getRowSplitInfo = function (grid, y) { + var cell, result = [], row = grid[y]; + + for (var x = 0; x < row.length; x++) { + cell = row[x]; + result.push({ + elm: cell.elm, + above: countHoles(grid, x, y, -1) - 1, + below: countHoles(grid, x, y, 1) - 1 + }); + + x += Utils.getColSpan(cell.elm) - 1; + } + + return result; + }; + + var createCell = function (info, rowSpan) { + var doc = info.elm.ownerDocument; + var newCell = doc.createElement('td'); + + Utils.setColSpan(newCell, Utils.getColSpan(info.elm)); + Utils.setRowSpan(newCell, rowSpan); + Utils.paddCell(newCell); + + return newCell; + }; + + var insertOrAppendCell = function (grid, newCell, x, y) { + var realCellElm = findRealElm(grid, x + 1, y); + + if (!realCellElm) { + realCellElm = findRealElm(grid, 0, y); + realCellElm.parentNode.appendChild(newCell); + } else { + realCellElm.parentNode.insertBefore(newCell, realCellElm); + } + }; + + var splitAbove = function (grid, info, x, y) { + if (info.above !== 0) { + Utils.setRowSpan(info.elm, info.above); + var cell = createCell(info, info.below + 1); + insertOrAppendCell(grid, cell, x, y); + return cell; + } + + return null; + }; + + var splitBelow = function (grid, info, x, y) { + if (info.below !== 0) { + Utils.setRowSpan(info.elm, info.above + 1); + var cell = createCell(info, info.below); + insertOrAppendCell(grid, cell, x, y + 1); + return cell; + } + + return null; + }; + + var splitAt = function (grid, x, y, before) { + var rowInfos = getRowSplitInfo(grid, y); + var rowElm = getCellElmAt(grid, x, y).parentNode; + var cells = []; + + Tools.each(rowInfos, function (info, x) { + var cell = before ? splitAbove(grid, info, x, y) : splitBelow(grid, info, x, y); + if (cell !== null) { + cells.push(cells); + } + }); + + return { + cells: cells, + row: rowElm + }; + }; + + return { + splitAt: splitAt + }; +}); + +// Included from: js/tinymce/plugins/table/classes/TableGrid.js + +/** + * TableGrid.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a grid out of a table element. This + * makes it a whole lot easier to handle complex tables with + * col/row spans. + * + * @class tinymce.tableplugin.TableGrid + * @private + */ +define("tinymce/tableplugin/TableGrid", [ + "tinymce/util/Tools", + "tinymce/Env", + "tinymce/tableplugin/Utils", + "tinymce/tableplugin/SplitCols" +], function(Tools, Env, Utils, SplitCols) { + var each = Tools.each, getSpanVal = Utils.getSpanVal, setSpanVal = Utils.setSpanVal; + + return function(editor, table, selectedCell) { + var grid, gridWidth, startPos, endPos, selection = editor.selection, dom = selection.dom; + + function removeCellSelection() { + editor.$('td[data-mce-selected],th[data-mce-selected]').removeAttr('data-mce-selected'); + } + + function isEditorBody(node) { + return node === editor.getBody(); + } + + function getChildrenByName(node, names) { + if (!node) { + return []; + } + + names = Tools.map(names.split(','), function(name) { + return name.toLowerCase(); + }); + + return Tools.grep(node.childNodes, function(node) { + return Tools.inArray(names, node.nodeName.toLowerCase()) !== -1; + }); + } + + function buildGrid() { + var startY = 0; + + grid = []; + gridWidth = 0; + + each(['thead', 'tbody', 'tfoot'], function(part) { + var partElm = getChildrenByName(table, part)[0]; + var rows = getChildrenByName(partElm, 'tr'); + + each(rows, function(tr, y) { + y += startY; + + each(getChildrenByName(tr, 'td,th'), function(td, x) { + var x2, y2, rowspan, colspan; + + // Skip over existing cells produced by rowspan + if (grid[y]) { + while (grid[y][x]) { + x++; + } + } + + // Get col/rowspan from cell + rowspan = getSpanVal(td, 'rowspan'); + colspan = getSpanVal(td, 'colspan'); + + // Fill out rowspan/colspan right and down + for (y2 = y; y2 < y + rowspan; y2++) { + if (!grid[y2]) { + grid[y2] = []; + } + + for (x2 = x; x2 < x + colspan; x2++) { + grid[y2][x2] = { + part: part, + real: y2 == y && x2 == x, + elm: td, + rowspan: rowspan, + colspan: colspan + }; + } + } + + gridWidth = Math.max(gridWidth, x + 1); + }); + }); + + startY += rows.length; + }); + } + + function fireNewRow(node) { + editor.fire('newrow', { + node: node + }); + + return node; + } + + function fireNewCell(node) { + editor.fire('newcell', { + node: node + }); + + return node; + } + + function cloneNode(node, children) { + node = node.cloneNode(children); + node.removeAttribute('id'); + + return node; + } + + function getCell(x, y) { + var row; + + row = grid[y]; + if (row) { + return row[x]; + } + } + + function getRow(grid, y) { + return grid[y] ? grid[y] : null; + } + + function getColumn(grid, x) { + var out = []; + + for (var y = 0; y < grid.length; y++) { + out.push(getCell(x, y)); + } + + return out; + } + + function isCellSelected(cell) { + return cell && (!!dom.getAttrib(cell.elm, 'data-mce-selected') || cell == selectedCell); + } + + function getSelectedRows() { + var rows = []; + + each(table.rows, function(row) { + each(row.cells, function(cell) { + if (dom.getAttrib(cell, 'data-mce-selected') || (selectedCell && cell == selectedCell.elm)) { + rows.push(row); + return false; + } + }); + }); + + return rows; + } + + function deleteTable() { + var rng = dom.createRng(); + + if (isEditorBody(table)) { + return; + } + + rng.setStartAfter(table); + rng.setEndAfter(table); + + selection.setRng(rng); + + dom.remove(table); + } + + function cloneCell(cell) { + var formatNode, cloneFormats = {}; + + if (editor.settings.table_clone_elements !== false) { + cloneFormats = Tools.makeMap( + (editor.settings.table_clone_elements || 'strong em b i span font h1 h2 h3 h4 h5 h6 p div').toUpperCase(), + /[ ,]/ + ); + } + + // Clone formats + Tools.walk(cell, function(node) { + var curNode; + + if (node.nodeType == 3) { + each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) { + if (!cloneFormats[node.nodeName]) { + return; + } + + node = cloneNode(node, false); + + if (!formatNode) { + formatNode = curNode = node; + } else if (curNode) { + curNode.appendChild(node); + } + + curNode = node; + }); + + // Add something to the inner node + if (curNode) { + curNode.innerHTML = Env.ie && Env.ie < 10 ? ' ' : '
'; + } + + return false; + } + }, 'childNodes'); + + cell = cloneNode(cell, false); + fireNewCell(cell); + + setSpanVal(cell, 'rowSpan', 1); + setSpanVal(cell, 'colSpan', 1); + + if (formatNode) { + cell.appendChild(formatNode); + } else { + Utils.paddCell(cell); + } + + return cell; + } + + function cleanup() { + var rng = dom.createRng(), row; + + // Empty rows + each(dom.select('tr', table), function(tr) { + if (tr.cells.length === 0) { + dom.remove(tr); + } + }); + + // Empty table + if (dom.select('tr', table).length === 0) { + rng.setStartBefore(table); + rng.setEndBefore(table); + selection.setRng(rng); + dom.remove(table); + return; + } + + // Empty header/body/footer + each(dom.select('thead,tbody,tfoot', table), function(part) { + if (part.rows.length === 0) { + dom.remove(part); + } + }); + + // Restore selection to start position if it still exists + buildGrid(); + + // If we have a valid startPos object + if (startPos) { + // Restore the selection to the closest table position + row = grid[Math.min(grid.length - 1, startPos.y)]; + if (row) { + selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true); + selection.collapse(true); + } + } + } + + function fillLeftDown(x, y, rows, cols) { + var tr, x2, r, c, cell; + + tr = grid[y][x].elm.parentNode; + for (r = 1; r <= rows; r++) { + tr = dom.getNext(tr, 'tr'); + + if (tr) { + // Loop left to find real cell + for (x2 = x; x2 >= 0; x2--) { + cell = grid[y + r][x2].elm; + + if (cell.parentNode == tr) { + // Append clones after + for (c = 1; c <= cols; c++) { + dom.insertAfter(cloneCell(cell), cell); + } + + break; + } + } + + if (x2 == -1) { + // Insert nodes before first cell + for (c = 1; c <= cols; c++) { + tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]); + } + } + } + } + } + + function split() { + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan, i; + + if (isCellSelected(cell)) { + cell = cell.elm; + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan > 1 || rowSpan > 1) { + setSpanVal(cell, 'rowSpan', 1); + setSpanVal(cell, 'colSpan', 1); + + // Insert cells right + for (i = 0; i < colSpan - 1; i++) { + dom.insertAfter(cloneCell(cell), cell); + } + + fillLeftDown(x, y, rowSpan - 1, colSpan); + } + } + }); + }); + } + + function findItemsOutsideOfRange(items, start, end) { + var out = []; + + for (var i = 0; i < items.length; i++) { + if (i < start || i > end) { + out.push(items[i]); + } + } + + return out; + } + + function getFakeCells(cells) { + return Tools.grep(cells, function (cell) { + return cell.real === false; + }); + } + + function getUniqueElms(cells) { + var elms = []; + + for (var i = 0; i < cells.length; i++) { + var elm = cells[i].elm; + if (elms[elms.length - 1] !== elm) { + elms.push(elm); + } + } + + return elms; + } + + function reduceRowSpans(grid, startX, startY, endX, endY) { + var count = 0; + + for (var y = startY; y <= endY; y++) { + var allCells = findItemsOutsideOfRange(getRow(grid, y), startX, endX); + var fakeCells = getFakeCells(allCells); + + if (allCells.length === fakeCells.length) { + Tools.each(getUniqueElms(fakeCells), function (elm) { + Utils.setRowSpan(elm, Utils.getRowSpan(elm) - 1); + }); + + count++; + } + } + + return count; + } + + function reduceColSpans(grid, startX, startY, endX, endY) { + var count = 0; + + for (var x = startX; x <= endX; x++) { + var allCells = findItemsOutsideOfRange(getColumn(grid, x), startY, endY); + var fakeCells = getFakeCells(allCells); + + if (allCells.length === fakeCells.length) { + Tools.each(getUniqueElms(fakeCells), function (elm) { + Utils.setColSpan(elm, Utils.getColSpan(elm) - 1); + }); + + count++; + } + } + + return count; + } + + function merge(cell, cols, rows) { + var pos, startX, startY, endX, endY, x, y, startCell, endCell, children, count, reducedRows, reducedCols; + + // Use specified cell and cols/rows + if (cell) { + pos = getPos(cell); + startX = pos.x; + startY = pos.y; + endX = startX + (cols - 1); + endY = startY + (rows - 1); + } else { + startPos = endPos = null; + + // Calculate start/end pos by checking for selected cells in grid works better with context menu + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + if (!startPos) { + startPos = {x: x, y: y}; + } + + endPos = {x: x, y: y}; + } + }); + }); + + // Use selection, but make sure startPos is valid before accessing + if (startPos) { + startX = startPos.x; + startY = startPos.y; + endX = endPos.x; + endY = endPos.y; + } + } + + // Find start/end cells + startCell = getCell(startX, startY); + endCell = getCell(endX, endY); + + // Check if the cells exists and if they are of the same part for example tbody = tbody + if (startCell && endCell && startCell.part == endCell.part) { + // Split and rebuild grid + split(); + buildGrid(); + + reducedRows = reduceRowSpans(grid, startX, startY, endX, endY); + reducedCols = reduceColSpans(grid, startX, startY, endX, endY); + + // Set row/col span to start cell + startCell = getCell(startX, startY).elm; + var colSpan = (endX - startX - reducedCols) + 1; + var rowSpan = (endY - startY - reducedRows) + 1; + + // All cells in table selected then just make it a table with one cell + if (colSpan === gridWidth && rowSpan === grid.length) { + colSpan = 1; + rowSpan = 1; + } + + // Multiple whole rows selected then just make it one rowSpan + if (colSpan === gridWidth && rowSpan > 1) { + rowSpan = 1; + } + + setSpanVal(startCell, 'colSpan', colSpan); + setSpanVal(startCell, 'rowSpan', rowSpan); + + // Remove other cells and add it's contents to the start cell + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + if (!grid[y] || !grid[y][x]) { + continue; + } + + cell = grid[y][x].elm; + + /*jshint loopfunc:true */ + /*eslint no-loop-func:0 */ + if (cell != startCell) { + // Move children to startCell + children = Tools.grep(cell.childNodes); + each(children, function(node) { + startCell.appendChild(node); + }); + + // Remove bogus nodes if there is children in the target cell + if (children.length) { + children = Tools.grep(startCell.childNodes); + count = 0; + each(children, function(node) { + if (node.nodeName == 'BR' && count++ < children.length - 1) { + startCell.removeChild(node); + } + }); + } + + dom.remove(cell); + } + } + } + + // Remove empty rows etc and restore caret location + cleanup(); + } + } + + function insertRow(before) { + var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan, spanValue; + + // Find first/last row + each(grid, function(row, y) { + each(row, function(cell) { + if (isCellSelected(cell)) { + cell = cell.elm; + rowElm = cell.parentNode; + newRow = fireNewRow(cloneNode(rowElm, false)); + posY = y; + + if (before) { + return false; + } + } + }); + + if (before) { + return !posY; + } + }); + + // If posY is undefined there is nothing for us to do here...just return to avoid crashing below + if (posY === undefined) { + return; + } + + for (x = 0, spanValue = 0; x < grid[0].length; x += spanValue) { + // Cell not found could be because of an invalid table structure + if (!grid[posY][x]) { + continue; + } + + cell = grid[posY][x].elm; + spanValue = getSpanVal(cell, 'colspan'); + + if (cell != lastCell) { + if (!before) { + rowSpan = getSpanVal(cell, 'rowspan'); + if (rowSpan > 1) { + setSpanVal(cell, 'rowSpan', rowSpan + 1); + continue; + } + } else { + // Check if cell above can be expanded + if (posY > 0 && grid[posY - 1][x]) { + otherCell = grid[posY - 1][x].elm; + rowSpan = getSpanVal(otherCell, 'rowSpan'); + if (rowSpan > 1) { + setSpanVal(otherCell, 'rowSpan', rowSpan + 1); + continue; + } + } + } + + // Insert new cell into new row + newCell = cloneCell(cell); + setSpanVal(newCell, 'colSpan', cell.colSpan); + + newRow.appendChild(newCell); + + lastCell = cell; + } + } + + if (newRow.hasChildNodes()) { + if (!before) { + dom.insertAfter(newRow, rowElm); + } else { + rowElm.parentNode.insertBefore(newRow, rowElm); + } + } + } + + function insertCol(before) { + var posX, lastCell; + + // Find first/last column + each(grid, function(row) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + posX = x; + + if (before) { + return false; + } + } + }); + + if (before) { + return !posX; + } + }); + + each(grid, function(row, y) { + var cell, rowSpan, colSpan; + + if (!row[posX]) { + return; + } + + cell = row[posX].elm; + if (cell != lastCell) { + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan == 1) { + if (!before) { + dom.insertAfter(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } else { + cell.parentNode.insertBefore(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } + } else { + setSpanVal(cell, 'colSpan', cell.colSpan + 1); + } + + lastCell = cell; + } + }); + } + + function getSelectedCells(grid) { + return Tools.grep(getAllCells(grid), isCellSelected); + } + + function getAllCells(grid) { + var cells = []; + + each(grid, function(row) { + each(row, function(cell) { + cells.push(cell); + }); + }); + + return cells; + } + + function deleteCols() { + var cols = []; + + if (isEditorBody(table)) { + if (grid[0].length == 1) { + return; + } + + if (getSelectedCells(grid).length == getAllCells(grid).length) { + return; + } + } + + // Get selected column indexes + each(grid, function(row) { + each(row, function(cell, x) { + if (isCellSelected(cell) && Tools.inArray(cols, x) === -1) { + each(grid, function(row) { + var cell = row[x].elm, colSpan; + + colSpan = getSpanVal(cell, 'colSpan'); + + if (colSpan > 1) { + setSpanVal(cell, 'colSpan', colSpan - 1); + } else { + dom.remove(cell); + } + }); + + cols.push(x); + } + }); + }); + + cleanup(); + } + + function deleteRows() { + var rows; + + function deleteRow(tr) { + var pos, lastCell; + + // Move down row spanned cells + each(tr.cells, function(cell) { + var rowSpan = getSpanVal(cell, 'rowSpan'); + + if (rowSpan > 1) { + setSpanVal(cell, 'rowSpan', rowSpan - 1); + pos = getPos(cell); + fillLeftDown(pos.x, pos.y, 1, 1); + } + }); + + // Delete cells + pos = getPos(tr.cells[0]); + each(grid[pos.y], function(cell) { + var rowSpan; + + cell = cell.elm; + + if (cell != lastCell) { + rowSpan = getSpanVal(cell, 'rowSpan'); + + if (rowSpan <= 1) { + dom.remove(cell); + } else { + setSpanVal(cell, 'rowSpan', rowSpan - 1); + } + + lastCell = cell; + } + }); + } + + // Get selected rows and move selection out of scope + rows = getSelectedRows(); + + if (isEditorBody(table) && rows.length == table.rows.length) { + return; + } + + // Delete all selected rows + each(rows.reverse(), function(tr) { + deleteRow(tr); + }); + + cleanup(); + } + + function cutRows() { + var rows = getSelectedRows(); + + if (isEditorBody(table) && rows.length == table.rows.length) { + return; + } + + dom.remove(rows); + cleanup(); + + return rows; + } + + function copyRows() { + var rows = getSelectedRows(); + + each(rows, function(row, i) { + rows[i] = cloneNode(row, true); + }); + + return rows; + } + + function pasteRows(rows, before) { + var splitResult, targetRow, newRows; + + // Nothing to paste + if (!rows) { + return; + } + + splitResult = SplitCols.splitAt(grid, startPos.x, startPos.y, before); + targetRow = splitResult.row; + Tools.each(splitResult.cells, fireNewCell); + + newRows = Tools.map(rows, function (row) { + return row.cloneNode(true); + }); + + if (!before) { + newRows.reverse(); + } + + each(newRows, function(row) { + var i, cellCount = row.cells.length, cell; + + fireNewRow(row); + + // Remove col/rowspans + for (i = 0; i < cellCount; i++) { + cell = row.cells[i]; + + fireNewCell(cell); + setSpanVal(cell, 'colSpan', 1); + setSpanVal(cell, 'rowSpan', 1); + } + + // Needs more cells + for (i = cellCount; i < gridWidth; i++) { + row.appendChild(fireNewCell(cloneCell(row.cells[cellCount - 1]))); + } + + // Needs less cells + for (i = gridWidth; i < cellCount; i++) { + dom.remove(row.cells[i]); + } + + // Add before/after + if (before) { + targetRow.parentNode.insertBefore(row, targetRow); + } else { + dom.insertAfter(row, targetRow); + } + }); + + removeCellSelection(); + } + + function getPos(target) { + var pos; + + each(grid, function(row, y) { + each(row, function(cell, x) { + if (cell.elm == target) { + pos = {x: x, y: y}; + return false; + } + }); + + return !pos; + }); + + return pos; + } + + function setStartCell(cell) { + startPos = getPos(cell); + } + + function findEndPos() { + var maxX, maxY; + + maxX = maxY = 0; + + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan; + + if (isCellSelected(cell)) { + cell = grid[y][x]; + + if (x > maxX) { + maxX = x; + } + + if (y > maxY) { + maxY = y; + } + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) { + maxX = x + colSpan; + } + } + + if (rowSpan) { + if (y + rowSpan > maxY) { + maxY = y + rowSpan; + } + } + } + } + }); + }); + + return {x: maxX, y: maxY}; + } + + function setEndCell(cell) { + var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan, x, y; + + endPos = getPos(cell); + + if (startPos && endPos) { + // Get start/end positions + startX = Math.min(startPos.x, endPos.x); + startY = Math.min(startPos.y, endPos.y); + endX = Math.max(startPos.x, endPos.x); + endY = Math.max(startPos.y, endPos.y); + + // Expand end position to include spans + maxX = endX; + maxY = endY; + + // This logic tried to expand the selection to always be a rectangle + // Expand startX + /*for (y = startY; y <= maxY; y++) { + cell = grid[y][startX]; + + if (!cell.real) { + newX = startX - (cell.colspan - 1); + if (newX < startX && newX >= 0) { + startX = newX; + } + } + } + + // Expand startY + for (x = startX; x <= maxX; x++) { + cell = grid[startY][x]; + + if (!cell.real) { + newY = startY - (cell.rowspan - 1); + if (newY < startY && newY >= 0) { + startY = newY; + } + } + }*/ + + // Find max X, Y + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + cell = grid[y][x]; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) { + maxX = x + colSpan; + } + } + + if (rowSpan) { + if (y + rowSpan > maxY) { + maxY = y + rowSpan; + } + } + } + } + } + + removeCellSelection(); + + // Add new selection + for (y = startY; y <= maxY; y++) { + for (x = startX; x <= maxX; x++) { + if (grid[y][x]) { + dom.setAttrib(grid[y][x].elm, 'data-mce-selected', '1'); + } + } + } + } + } + + function moveRelIdx(cellElm, delta) { + var pos, index, cell; + + pos = getPos(cellElm); + index = pos.y * gridWidth + pos.x; + + do { + index += delta; + cell = getCell(index % gridWidth, Math.floor(index / gridWidth)); + + if (!cell) { + break; + } + + if (cell.elm != cellElm) { + selection.select(cell.elm, true); + + if (dom.isEmpty(cell.elm)) { + selection.collapse(true); + } + + return true; + } + } while (cell.elm == cellElm); + + return false; + } + + function splitCols(before) { + if (startPos) { + var splitResult = SplitCols.splitAt(grid, startPos.x, startPos.y, before); + Tools.each(splitResult.cells, fireNewCell); + } + } + + table = table || dom.getParent(selection.getStart(true), 'table'); + + buildGrid(); + + selectedCell = selectedCell || dom.getParent(selection.getStart(true), 'th,td'); + + if (selectedCell) { + startPos = getPos(selectedCell); + endPos = findEndPos(); + selectedCell = getCell(startPos.x, startPos.y); + } + + Tools.extend(this, { + deleteTable: deleteTable, + split: split, + merge: merge, + insertRow: insertRow, + insertCol: insertCol, + splitCols: splitCols, + deleteCols: deleteCols, + deleteRows: deleteRows, + cutRows: cutRows, + copyRows: copyRows, + pasteRows: pasteRows, + getPos: getPos, + setStartCell: setStartCell, + setEndCell: setEndCell, + moveRelIdx: moveRelIdx, + refresh: buildGrid + }); + }; +}); + +// Included from: js/tinymce/plugins/table/classes/Quirks.js + +/** + * Quirks.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class includes fixes for various browser quirks. + * + * @class tinymce.tableplugin.Quirks + * @private + */ +define("tinymce/tableplugin/Quirks", [ + "tinymce/util/VK", + "tinymce/util/Delay", + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/tableplugin/Utils" +], function(VK, Delay, Env, Tools, Utils) { + var each = Tools.each, getSpanVal = Utils.getSpanVal; + + return function(editor) { + /** + * Fixed caret movement around tables on WebKit. + */ + function moveWebKitSelection() { + function eventHandler(e) { + var key = e.keyCode; + + function handle(upBool, sourceNode) { + var siblingDirection = upBool ? 'previousSibling' : 'nextSibling'; + var currentRow = editor.dom.getParent(sourceNode, 'tr'); + var siblingRow = currentRow[siblingDirection]; + + if (siblingRow) { + moveCursorToRow(editor, sourceNode, siblingRow, upBool); + e.preventDefault(); + return true; + } + + var tableNode = editor.dom.getParent(currentRow, 'table'); + var middleNode = currentRow.parentNode; + var parentNodeName = middleNode.nodeName.toLowerCase(); + if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) { + var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody'); + if (targetParent !== null) { + return moveToRowInTarget(upBool, targetParent, sourceNode); + } + } + + return escapeTable(upBool, currentRow, siblingDirection, tableNode); + } + + function getTargetParent(upBool, topNode, secondNode, nodeName) { + var tbodies = editor.dom.select('>' + nodeName, topNode); + var position = tbodies.indexOf(secondNode); + if (upBool && position === 0 || !upBool && position === tbodies.length - 1) { + return getFirstHeadOrFoot(upBool, topNode); + } else if (position === -1) { + var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1; + return tbodies[topOrBottom]; + } + + return tbodies[position + (upBool ? -1 : 1)]; + } + + function getFirstHeadOrFoot(upBool, parent) { + var tagName = upBool ? 'thead' : 'tfoot'; + var headOrFoot = editor.dom.select('>' + tagName, parent); + return headOrFoot.length !== 0 ? headOrFoot[0] : null; + } + + function moveToRowInTarget(upBool, targetParent, sourceNode) { + var targetRow = getChildForDirection(targetParent, upBool); + + if (targetRow) { + moveCursorToRow(editor, sourceNode, targetRow, upBool); + } + + e.preventDefault(); + return true; + } + + function escapeTable(upBool, currentRow, siblingDirection, table) { + var tableSibling = table[siblingDirection]; + + if (tableSibling) { + moveCursorToStartOfElement(tableSibling); + return true; + } + + var parentCell = editor.dom.getParent(table, 'td,th'); + if (parentCell) { + return handle(upBool, parentCell, e); + } + + var backUpSibling = getChildForDirection(currentRow, !upBool); + moveCursorToStartOfElement(backUpSibling); + e.preventDefault(); + return false; + } + + function getChildForDirection(parent, up) { + var child = parent && parent[up ? 'lastChild' : 'firstChild']; + // BR is not a valid table child to return in this case we return the table cell + return child && child.nodeName === 'BR' ? editor.dom.getParent(child, 'td,th') : child; + } + + function moveCursorToStartOfElement(n) { + editor.selection.setCursorLocation(n, 0); + } + + function isVerticalMovement() { + return key == VK.UP || key == VK.DOWN; + } + + function isInTable(editor) { + var node = editor.selection.getNode(); + var currentRow = editor.dom.getParent(node, 'tr'); + return currentRow !== null; + } + + function columnIndex(column) { + var colIndex = 0; + var c = column; + while (c.previousSibling) { + c = c.previousSibling; + colIndex = colIndex + getSpanVal(c, "colspan"); + } + return colIndex; + } + + function findColumn(rowElement, columnIndex) { + var c = 0, r = 0; + + each(rowElement.children, function(cell, i) { + c = c + getSpanVal(cell, "colspan"); + r = i; + if (c > columnIndex) { + return false; + } + }); + return r; + } + + function moveCursorToRow(ed, node, row, upBool) { + var srcColumnIndex = columnIndex(editor.dom.getParent(node, 'td,th')); + var tgtColumnIndex = findColumn(row, srcColumnIndex); + var tgtNode = row.childNodes[tgtColumnIndex]; + var rowCellTarget = getChildForDirection(tgtNode, upBool); + moveCursorToStartOfElement(rowCellTarget || tgtNode); + } + + function shouldFixCaret(preBrowserNode) { + var newNode = editor.selection.getNode(); + var newParent = editor.dom.getParent(newNode, 'td,th'); + var oldParent = editor.dom.getParent(preBrowserNode, 'td,th'); + + return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent); + } + + function checkSameParentTable(nodeOne, NodeTwo) { + return editor.dom.getParent(nodeOne, 'TABLE') === editor.dom.getParent(NodeTwo, 'TABLE'); + } + + if (isVerticalMovement() && isInTable(editor)) { + var preBrowserNode = editor.selection.getNode(); + Delay.setEditorTimeout(editor, function() { + if (shouldFixCaret(preBrowserNode)) { + handle(!e.shiftKey && key === VK.UP, preBrowserNode, e); + } + }, 0); + } + } + + editor.on('KeyDown', function(e) { + eventHandler(e); + }); + } + + function fixBeforeTableCaretBug() { + // Checks if the selection/caret is at the start of the specified block element + function isAtStart(rng, par) { + var doc = par.ownerDocument, rng2 = doc.createRange(), elm; + + rng2.setStartBefore(par); + rng2.setEnd(rng.endContainer, rng.endOffset); + + elm = doc.createElement('body'); + elm.appendChild(rng2.cloneContents()); + + // Check for text characters of other elements that should be treated as content + return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length === 0; + } + + // Fixes an bug where it's impossible to place the caret before a table in Gecko + // this fix solves it by detecting when the caret is at the beginning of such a table + // and then manually moves the caret infront of the table + editor.on('KeyDown', function(e) { + var rng, table, dom = editor.dom; + + // On gecko it's not possible to place the caret before a table + if (e.keyCode == 37 || e.keyCode == 38) { + rng = editor.selection.getRng(); + table = dom.getParent(rng.startContainer, 'table'); + + if (table && editor.getBody().firstChild == table) { + if (isAtStart(rng, table)) { + rng = dom.createRng(); + + rng.setStartBefore(table); + rng.setEndBefore(table); + + editor.selection.setRng(rng); + + e.preventDefault(); + } + } + } + }); + } + + // Fixes an issue on Gecko where it's impossible to place the caret behind a table + // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled + function fixTableCaretPos() { + editor.on('KeyDown SetContent VisualAid', function() { + var last; + + // Skip empty text nodes from the end + for (last = editor.getBody().lastChild; last; last = last.previousSibling) { + if (last.nodeType == 3) { + if (last.nodeValue.length > 0) { + break; + } + } else if (last.nodeType == 1 && (last.tagName == 'BR' || !last.getAttribute('data-mce-bogus'))) { + break; + } + } + + if (last && last.nodeName == 'TABLE') { + if (editor.settings.forced_root_block) { + editor.dom.add( + editor.getBody(), + editor.settings.forced_root_block, + editor.settings.forced_root_block_attrs, + Env.ie && Env.ie < 10 ? ' ' : '
' + ); + } else { + editor.dom.add(editor.getBody(), 'br', {'data-mce-bogus': '1'}); + } + } + }); + + editor.on('PreProcess', function(o) { + var last = o.node.lastChild; + + if (last && (last.nodeName == "BR" || (last.childNodes.length == 1 && + (last.firstChild.nodeName == 'BR' || last.firstChild.nodeValue == '\u00a0'))) && + last.previousSibling && last.previousSibling.nodeName == "TABLE") { + editor.dom.remove(last); + } + }); + } + + // this nasty hack is here to work around some WebKit selection bugs. + function fixTableCellSelection() { + function tableCellSelected(ed, rng, n, currentCell) { + // The decision of when a table cell is selected is somewhat involved. The fact that this code is + // required is actually a pointer to the root cause of this bug. A cell is selected when the start + // and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases) + // or the parent of the table (in the case of the selection containing the last cell of a table). + var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'); + var tableParent, allOfCellSelected, tableCellSelection; + + if (table) { + tableParent = table.parentNode; + } + + allOfCellSelected = rng.startContainer.nodeType == TEXT_NODE && + rng.startOffset === 0 && + rng.endOffset === 0 && + currentCell && + (n.nodeName == "TR" || n == tableParent); + + tableCellSelection = (n.nodeName == "TD" || n.nodeName == "TH") && !currentCell; + + return allOfCellSelected || tableCellSelection; + } + + function fixSelection() { + var rng = editor.selection.getRng(); + var n = editor.selection.getNode(); + var currentCell = editor.dom.getParent(rng.startContainer, 'TD,TH'); + + if (!tableCellSelected(editor, rng, n, currentCell)) { + return; + } + + if (!currentCell) { + currentCell = n; + } + + // Get the very last node inside the table cell + var end = currentCell.lastChild; + while (end.lastChild) { + end = end.lastChild; + } + + // Select the entire table cell. Nothing outside of the table cell should be selected. + if (end.nodeType == 3) { + rng.setEnd(end, end.data.length); + editor.selection.setRng(rng); + } + } + + editor.on('KeyDown', function() { + fixSelection(); + }); + + editor.on('MouseDown', function(e) { + if (e.button != 2) { + fixSelection(); + } + }); + } + + /** + * Delete table if all cells are selected. + */ + function deleteTable() { + function placeCaretInCell(cell) { + editor.selection.select(cell, true); + editor.selection.collapse(true); + } + + function clearCell(cell) { + editor.$(cell).empty(); + Utils.paddCell(cell); + } + + editor.on('keydown', function(e) { + if ((e.keyCode == VK.DELETE || e.keyCode == VK.BACKSPACE) && !e.isDefaultPrevented()) { + var table, tableCells, selectedTableCells, cell; + + table = editor.dom.getParent(editor.selection.getStart(), 'table'); + if (table) { + tableCells = editor.dom.select('td,th', table); + selectedTableCells = Tools.grep(tableCells, function(cell) { + return !!editor.dom.getAttrib(cell, 'data-mce-selected'); + }); + + if (selectedTableCells.length === 0) { + // If caret is within an empty table cell then empty it for real + cell = editor.dom.getParent(editor.selection.getStart(), 'td,th'); + if (editor.selection.isCollapsed() && cell && editor.dom.isEmpty(cell)) { + e.preventDefault(); + clearCell(cell); + placeCaretInCell(cell); + } + + return; + } + + e.preventDefault(); + + editor.undoManager.transact(function() { + if (tableCells.length == selectedTableCells.length) { + editor.execCommand('mceTableDelete'); + } else { + Tools.each(selectedTableCells, clearCell); + placeCaretInCell(selectedTableCells[0]); + } + }); + } + } + }); + } + + deleteTable(); + + if (Env.webkit) { + moveWebKitSelection(); + fixTableCellSelection(); + } + + if (Env.gecko) { + fixBeforeTableCaretBug(); + fixTableCaretPos(); + } + + if (Env.ie > 9) { + fixBeforeTableCaretBug(); + fixTableCaretPos(); + } + }; +}); + +// Included from: js/tinymce/plugins/table/classes/CellSelection.js + +/** + * CellSelection.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles table cell selection by faking it using a css class that gets applied + * to cells when dragging the mouse from one cell to another. + * + * @class tinymce.tableplugin.CellSelection + * @private + */ +define("tinymce/tableplugin/CellSelection", [ + "tinymce/tableplugin/TableGrid", + "tinymce/dom/TreeWalker", + "tinymce/util/Tools" +], function(TableGrid, TreeWalker, Tools) { + return function(editor, selectionChange) { + var dom = editor.dom, tableGrid, startCell, startTable, lastMouseOverTarget, hasCellSelection = true, resizing, dragging; + + function clear(force) { + // Restore selection possibilities + editor.getBody().style.webkitUserSelect = ''; + + if (force || hasCellSelection) { + editor.$('td[data-mce-selected],th[data-mce-selected]').removeAttr('data-mce-selected'); + hasCellSelection = false; + } + } + + var endSelection = function () { + startCell = tableGrid = startTable = lastMouseOverTarget = null; + selectionChange(false); + }; + + function isCellInTable(table, cell) { + if (!table || !cell) { + return false; + } + + return table === dom.getParent(cell, 'table'); + } + + function cellSelectionHandler(e) { + var sel, target = e.target, currentCell; + + if (resizing || dragging) { + return; + } + + // Fake mouse enter by keeping track of last mouse over + if (target === lastMouseOverTarget) { + return; + } + + lastMouseOverTarget = target; + + if (startTable && startCell) { + currentCell = dom.getParent(target, 'td,th'); + + if (!isCellInTable(startTable, currentCell)) { + currentCell = dom.getParent(startTable, 'td,th'); + } + + // Selection inside first cell is normal until we have expanted + if (startCell === currentCell && !hasCellSelection) { + return; + } + + selectionChange(true); + + if (isCellInTable(startTable, currentCell)) { + e.preventDefault(); + + if (!tableGrid) { + tableGrid = new TableGrid(editor, startTable, startCell); + editor.getBody().style.webkitUserSelect = 'none'; + } + + tableGrid.setEndCell(currentCell); + hasCellSelection = true; + + // Remove current selection + sel = editor.selection.getSel(); + + try { + if (sel.removeAllRanges) { + sel.removeAllRanges(); + } else { + sel.empty(); + } + } catch (ex) { + // IE9 might throw errors here + } + } + } + } + + editor.on('SelectionChange', function(e) { + if (hasCellSelection) { + e.stopImmediatePropagation(); + } + }, true); + + // Add cell selection logic + editor.on('MouseDown', function(e) { + if (e.button != 2 && !resizing && !dragging) { + clear(); + + startCell = dom.getParent(e.target, 'td,th'); + startTable = dom.getParent(startCell, 'table'); + } + }); + + editor.on('mouseover', cellSelectionHandler); + + editor.on('remove', function() { + dom.unbind(editor.getDoc(), 'mouseover', cellSelectionHandler); + clear(); + }); + + editor.on('MouseUp', function() { + var rng, sel = editor.selection, selectedCells, walker, node, lastNode; + + function setPoint(node, start) { + var walker = new TreeWalker(node, node); + + do { + // Text node + if (node.nodeType == 3 && Tools.trim(node.nodeValue).length !== 0) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, node.nodeValue.length); + } + + return; + } + + // BR element + if (node.nodeName == 'BR') { + if (start) { + rng.setStartBefore(node); + } else { + rng.setEndBefore(node); + } + + return; + } + } while ((node = (start ? walker.next() : walker.prev()))); + } + + // Move selection to startCell + if (startCell) { + if (tableGrid) { + editor.getBody().style.webkitUserSelect = ''; + } + + // Try to expand text selection as much as we can only Gecko supports cell selection + selectedCells = dom.select('td[data-mce-selected],th[data-mce-selected]'); + if (selectedCells.length > 0) { + rng = dom.createRng(); + node = selectedCells[0]; + rng.setStartBefore(node); + rng.setEndAfter(node); + + setPoint(node, 1); + walker = new TreeWalker(node, dom.getParent(selectedCells[0], 'table')); + + do { + if (node.nodeName == 'TD' || node.nodeName == 'TH') { + if (!dom.getAttrib(node, 'data-mce-selected')) { + break; + } + + lastNode = node; + } + } while ((node = walker.next())); + + setPoint(lastNode); + + sel.setRng(rng); + } + + editor.nodeChanged(); + endSelection(); + } + }); + + editor.on('KeyUp Drop SetContent', function(e) { + clear(e.type == 'setcontent'); + endSelection(); + resizing = false; + }); + + editor.on('ObjectResizeStart ObjectResized', function(e) { + resizing = e.type != 'objectresized'; + }); + + editor.on('dragstart', function () { + dragging = true; + }); + + editor.on('drop dragend', function () { + dragging = false; + }); + + return { + clear: clear + }; + }; +}); + +// Included from: js/tinymce/plugins/table/classes/Dialogs.js + +/** + * Dialogs.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*eslint dot-notation:0*/ + +/** + * ... + * + * @class tinymce.tableplugin.Dialogs + * @private + */ +define("tinymce/tableplugin/Dialogs", [ + "tinymce/util/Tools", + "tinymce/Env" +], function(Tools, Env) { + var each = Tools.each; + + return function(editor) { + var self = this; + + function createColorPickAction() { + var colorPickerCallback = editor.settings.color_picker_callback; + + if (colorPickerCallback) { + return function() { + var self = this; + + colorPickerCallback.call( + editor, + function(value) { + self.value(value).fire('change'); + }, + self.value() + ); + }; + } + } + + function createStyleForm(dom) { + return { + title: 'Advanced', + type: 'form', + defaults: { + onchange: function() { + updateStyle(dom, this.parents().reverse()[0], this.name() == "style"); + } + }, + items: [ + { + label: 'Style', + name: 'style', + type: 'textbox' + }, + + { + type: 'form', + padding: 0, + formItemDefaults: { + layout: 'grid', + alignH: ['start', 'right'] + }, + defaults: { + size: 7 + }, + items: [ + { + label: 'Border color', + type: 'colorbox', + name: 'borderColor', + onaction: createColorPickAction() + }, + + { + label: 'Background color', + type: 'colorbox', + name: 'backgroundColor', + onaction: createColorPickAction() + } + ] + } + ] + }; + } + + function removePxSuffix(size) { + return size ? size.replace(/px$/, '') : ""; + } + + function addSizeSuffix(size) { + if (/^[0-9]+$/.test(size)) { + size += "px"; + } + + return size; + } + + function unApplyAlign(elm) { + each('left center right'.split(' '), function(name) { + editor.formatter.remove('align' + name, {}, elm); + }); + } + + function unApplyVAlign(elm) { + each('top middle bottom'.split(' '), function(name) { + editor.formatter.remove('valign' + name, {}, elm); + }); + } + + function buildListItems(inputList, itemCallback, startItems) { + function appendItems(values, output) { + output = output || []; + + Tools.each(values, function(item) { + var menuItem = {text: item.text || item.title}; + + if (item.menu) { + menuItem.menu = appendItems(item.menu); + } else { + menuItem.value = item.value; + + if (itemCallback) { + itemCallback(menuItem); + } + } + + output.push(menuItem); + }); + + return output; + } + + return appendItems(inputList, startItems || []); + } + + function updateStyle(dom, win, isStyleCtrl) { + var data = win.toJSON(); + var css = dom.parseStyle(data.style); + + if (isStyleCtrl) { + win.find('#borderColor').value(css["border-color"] || '')[0].fire('change'); + win.find('#backgroundColor').value(css["background-color"] || '')[0].fire('change'); + } else { + css["border-color"] = data.borderColor; + css["background-color"] = data.backgroundColor; + } + + win.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css)))); + } + + function appendStylesToData(dom, data, elm) { + var css = dom.parseStyle(dom.getAttrib(elm, 'style')); + + if (css["border-color"]) { + data.borderColor = css["border-color"]; + } + + if (css["background-color"]) { + data.backgroundColor = css["background-color"]; + } + + data.style = dom.serializeStyle(css); + } + + function mergeStyles(dom, elm, styles) { + var css = dom.parseStyle(dom.getAttrib(elm, 'style')); + + each(styles, function(style) { + css[style.name] = style.value; + }); + + dom.setAttrib(elm, 'style', dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css)))); + } + + self.tableProps = function() { + self.table(true); + }; + + self.table = function(isProps) { + var dom = editor.dom, tableElm, colsCtrl, rowsCtrl, classListCtrl, data = {}, generalTableForm, stylesToMerge; + + function onSubmitTableForm() { + + //Explore the layers of the table till we find the first layer of tds or ths + function styleTDTH(elm, name, value) { + if (elm.tagName === "TD" || elm.tagName === "TH") { + dom.setStyle(elm, name, value); + } else { + if (elm.children) { + for (var i = 0; i < elm.children.length; i++) { + styleTDTH(elm.children[i], name, value); + } + } + } + } + + var captionElm; + + updateStyle(dom, this); + data = Tools.extend(data, this.toJSON()); + + if (data["class"] === false) { + delete data["class"]; + } + + editor.undoManager.transact(function() { + if (!tableElm) { + tableElm = editor.plugins.table.insertTable(data.cols || 1, data.rows || 1); + } + + editor.dom.setAttribs(tableElm, { + style: data.style, + 'class': data['class'] + }); + + if (editor.settings.table_style_by_css) { + stylesToMerge = []; + stylesToMerge.push({name: 'border', value: data.border}); + stylesToMerge.push({name: 'border-spacing', value: addSizeSuffix(data.cellspacing)}); + mergeStyles(dom, tableElm, stylesToMerge); + dom.setAttribs(tableElm, { + 'data-mce-border-color': data.borderColor, + 'data-mce-cell-padding': data.cellpadding, + 'data-mce-border': data.border + }); + if (tableElm.children) { + for (var i = 0; i < tableElm.children.length; i++) { + styleTDTH(tableElm.children[i], 'border', data.border); + styleTDTH(tableElm.children[i], 'padding', addSizeSuffix(data.cellpadding)); + } + } + } else { + editor.dom.setAttribs(tableElm, { + border: data.border, + cellpadding: data.cellpadding, + cellspacing: data.cellspacing + }); + } + + if (dom.getAttrib(tableElm, 'width') && !editor.settings.table_style_by_css) { + dom.setAttrib(tableElm, 'width', removePxSuffix(data.width)); + } else { + dom.setStyle(tableElm, 'width', addSizeSuffix(data.width)); + } + + dom.setStyle(tableElm, 'height', addSizeSuffix(data.height)); + + // Toggle caption on/off + captionElm = dom.select('caption', tableElm)[0]; + + if (captionElm && !data.caption) { + dom.remove(captionElm); + } + + if (!captionElm && data.caption) { + captionElm = dom.create('caption'); + captionElm.innerHTML = !Env.ie ? '
' : '\u00a0'; + tableElm.insertBefore(captionElm, tableElm.firstChild); + } + unApplyAlign(tableElm); + if (data.align) { + editor.formatter.apply('align' + data.align, {}, tableElm); + } + + editor.focus(); + editor.addVisual(); + }); + } + + function getTDTHOverallStyle(elm, name) { + var cells = editor.dom.select("td,th", elm), firstChildStyle; + + function checkChildren(firstChildStyle, elms) { + + for (var i = 0; i < elms.length; i++) { + var currentStyle = dom.getStyle(elms[i], name); + if (typeof firstChildStyle === "undefined") { + firstChildStyle = currentStyle; + } + if (firstChildStyle != currentStyle) { + return ""; + } + } + + return firstChildStyle; + + } + + firstChildStyle = checkChildren(firstChildStyle, cells); + + return firstChildStyle; + } + + if (isProps === true) { + tableElm = dom.getParent(editor.selection.getStart(), 'table'); + + if (tableElm) { + data = { + width: removePxSuffix(dom.getStyle(tableElm, 'width') || dom.getAttrib(tableElm, 'width')), + height: removePxSuffix(dom.getStyle(tableElm, 'height') || dom.getAttrib(tableElm, 'height')), + cellspacing: removePxSuffix(dom.getStyle(tableElm, 'border-spacing') || + dom.getAttrib(tableElm, 'cellspacing')), + cellpadding: dom.getAttrib(tableElm, 'data-mce-cell-padding') || dom.getAttrib(tableElm, 'cellpadding') || + getTDTHOverallStyle(tableElm, 'padding'), + border: dom.getAttrib(tableElm, 'data-mce-border') || dom.getAttrib(tableElm, 'border') || + getTDTHOverallStyle(tableElm, 'border'), + borderColor: dom.getAttrib(tableElm, 'data-mce-border-color'), + caption: !!dom.select('caption', tableElm)[0], + 'class': dom.getAttrib(tableElm, 'class') + }; + + each('left center right'.split(' '), function(name) { + if (editor.formatter.matchNode(tableElm, 'align' + name)) { + data.align = name; + } + }); + } + } else { + colsCtrl = {label: 'Cols', name: 'cols'}; + rowsCtrl = {label: 'Rows', name: 'rows'}; + } + + if (editor.settings.table_class_list) { + if (data["class"]) { + data["class"] = data["class"].replace(/\s*mce\-item\-table\s*/g, ''); + } + + classListCtrl = { + name: 'class', + type: 'listbox', + label: 'Class', + values: buildListItems( + editor.settings.table_class_list, + function(item) { + if (item.value) { + item.textStyle = function() { + return editor.formatter.getCssText({block: 'table', classes: [item.value]}); + }; + } + } + ) + }; + } + + generalTableForm = { + type: 'form', + layout: 'flex', + direction: 'column', + labelGapCalc: 'children', + padding: 0, + items: [ + { + type: 'form', + labelGapCalc: false, + padding: 0, + layout: 'grid', + columns: 2, + defaults: { + type: 'textbox', + maxWidth: 50 + }, + items: (editor.settings.table_appearance_options !== false) ? [ + colsCtrl, + rowsCtrl, + {label: 'Width', name: 'width'}, + {label: 'Height', name: 'height'}, + {label: 'Cell spacing', name: 'cellspacing'}, + {label: 'Cell padding', name: 'cellpadding'}, + {label: 'Border', name: 'border'}, + {label: 'Caption', name: 'caption', type: 'checkbox'} + ] : [ + colsCtrl, + rowsCtrl, + {label: 'Width', name: 'width'}, + {label: 'Height', name: 'height'} + ] + }, + + { + label: 'Alignment', + name: 'align', + type: 'listbox', + text: 'None', + values: [ + {text: 'None', value: ''}, + {text: 'Left', value: 'left'}, + {text: 'Center', value: 'center'}, + {text: 'Right', value: 'right'} + ] + }, + + classListCtrl + ] + }; + + if (editor.settings.table_advtab !== false) { + appendStylesToData(dom, data, tableElm); + + editor.windowManager.open({ + title: "Table properties", + data: data, + bodyType: 'tabpanel', + body: [ + { + title: 'General', + type: 'form', + items: generalTableForm + }, + createStyleForm(dom) + ], + + onsubmit: onSubmitTableForm + }); + } else { + editor.windowManager.open({ + title: "Table properties", + data: data, + body: generalTableForm, + onsubmit: onSubmitTableForm + }); + } + }; + + self.merge = function(grid, cell) { + editor.windowManager.open({ + title: "Merge cells", + body: [ + {label: 'Cols', name: 'cols', type: 'textbox', value: '1', size: 10}, + {label: 'Rows', name: 'rows', type: 'textbox', value: '1', size: 10} + ], + onsubmit: function() { + var data = this.toJSON(); + + editor.undoManager.transact(function() { + grid.merge(cell, data.cols, data.rows); + }); + } + }); + }; + + self.cell = function() { + var dom = editor.dom, cellElm, data, classListCtrl, cells = []; + + function onSubmitCellForm() { + updateStyle(dom, this); + data = Tools.extend(data, this.toJSON()); + + editor.undoManager.transact(function() { + each(cells, function(cellElm) { + editor.dom.setAttribs(cellElm, { + scope: data.scope, + style: data.style, + 'class': data['class'] + }); + + editor.dom.setStyles(cellElm, { + width: addSizeSuffix(data.width), + height: addSizeSuffix(data.height) + }); + + // Switch cell type + if (data.type && cellElm.nodeName.toLowerCase() != data.type) { + cellElm = dom.rename(cellElm, data.type); + } + + // Apply/remove alignment + unApplyAlign(cellElm); + if (data.align) { + editor.formatter.apply('align' + data.align, {}, cellElm); + } + + // Apply/remove vertical alignment + unApplyVAlign(cellElm); + if (data.valign) { + editor.formatter.apply('valign' + data.valign, {}, cellElm); + } + }); + + editor.focus(); + }); + } + + // Get selected cells or the current cell + cells = editor.dom.select('td[data-mce-selected],th[data-mce-selected]'); + cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th'); + if (!cells.length && cellElm) { + cells.push(cellElm); + } + + cellElm = cellElm || cells[0]; + + if (!cellElm) { + // If this element is null, return now to avoid crashing. + return; + } + + data = { + width: removePxSuffix(dom.getStyle(cellElm, 'width') || dom.getAttrib(cellElm, 'width')), + height: removePxSuffix(dom.getStyle(cellElm, 'height') || dom.getAttrib(cellElm, 'height')), + scope: dom.getAttrib(cellElm, 'scope'), + 'class': dom.getAttrib(cellElm, 'class') + }; + + data.type = cellElm.nodeName.toLowerCase(); + + each('left center right'.split(' '), function(name) { + if (editor.formatter.matchNode(cellElm, 'align' + name)) { + data.align = name; + } + }); + + each('top middle bottom'.split(' '), function(name) { + if (editor.formatter.matchNode(cellElm, 'valign' + name)) { + data.valign = name; + } + }); + + if (editor.settings.table_cell_class_list) { + classListCtrl = { + name: 'class', + type: 'listbox', + label: 'Class', + values: buildListItems( + editor.settings.table_cell_class_list, + function(item) { + if (item.value) { + item.textStyle = function() { + return editor.formatter.getCssText({block: 'td', classes: [item.value]}); + }; + } + } + ) + }; + } + + var generalCellForm = { + type: 'form', + layout: 'flex', + direction: 'column', + labelGapCalc: 'children', + padding: 0, + items: [ + { + type: 'form', + layout: 'grid', + columns: 2, + labelGapCalc: false, + padding: 0, + defaults: { + type: 'textbox', + maxWidth: 50 + }, + items: [ + {label: 'Width', name: 'width'}, + {label: 'Height', name: 'height'}, + { + label: 'Cell type', + name: 'type', + type: 'listbox', + text: 'None', + minWidth: 90, + maxWidth: null, + values: [ + {text: 'Cell', value: 'td'}, + {text: 'Header cell', value: 'th'} + ] + }, + { + label: 'Scope', + name: 'scope', + type: 'listbox', + text: 'None', + minWidth: 90, + maxWidth: null, + values: [ + {text: 'None', value: ''}, + {text: 'Row', value: 'row'}, + {text: 'Column', value: 'col'}, + {text: 'Row group', value: 'rowgroup'}, + {text: 'Column group', value: 'colgroup'} + ] + }, + { + label: 'H Align', + name: 'align', + type: 'listbox', + text: 'None', + minWidth: 90, + maxWidth: null, + values: [ + {text: 'None', value: ''}, + {text: 'Left', value: 'left'}, + {text: 'Center', value: 'center'}, + {text: 'Right', value: 'right'} + ] + }, + { + label: 'V Align', + name: 'valign', + type: 'listbox', + text: 'None', + minWidth: 90, + maxWidth: null, + values: [ + {text: 'None', value: ''}, + {text: 'Top', value: 'top'}, + {text: 'Middle', value: 'middle'}, + {text: 'Bottom', value: 'bottom'} + ] + } + ] + }, + + classListCtrl + ] + }; + + if (editor.settings.table_cell_advtab !== false) { + appendStylesToData(dom, data, cellElm); + + editor.windowManager.open({ + title: "Cell properties", + bodyType: 'tabpanel', + data: data, + body: [ + { + title: 'General', + type: 'form', + items: generalCellForm + }, + + createStyleForm(dom) + ], + + onsubmit: onSubmitCellForm + }); + } else { + editor.windowManager.open({ + title: "Cell properties", + data: data, + body: generalCellForm, + onsubmit: onSubmitCellForm + }); + } + }; + + self.row = function() { + var dom = editor.dom, tableElm, cellElm, rowElm, classListCtrl, data, rows = [], generalRowForm; + + function onSubmitRowForm() { + var tableElm, oldParentElm, parentElm; + + updateStyle(dom, this); + data = Tools.extend(data, this.toJSON()); + + editor.undoManager.transact(function() { + var toType = data.type; + + each(rows, function(rowElm) { + editor.dom.setAttribs(rowElm, { + scope: data.scope, + style: data.style, + 'class': data['class'] + }); + + editor.dom.setStyles(rowElm, { + height: addSizeSuffix(data.height) + }); + + if (toType != rowElm.parentNode.nodeName.toLowerCase()) { + tableElm = dom.getParent(rowElm, 'table'); + + oldParentElm = rowElm.parentNode; + parentElm = dom.select(toType, tableElm)[0]; + if (!parentElm) { + parentElm = dom.create(toType); + if (tableElm.firstChild) { + tableElm.insertBefore(parentElm, tableElm.firstChild); + } else { + tableElm.appendChild(parentElm); + } + } + + parentElm.appendChild(rowElm); + + if (!oldParentElm.hasChildNodes()) { + dom.remove(oldParentElm); + } + } + + // Apply/remove alignment + unApplyAlign(rowElm); + if (data.align) { + editor.formatter.apply('align' + data.align, {}, rowElm); + } + }); + + editor.focus(); + }); + } + + tableElm = editor.dom.getParent(editor.selection.getStart(), 'table'); + cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th'); + + each(tableElm.rows, function(row) { + each(row.cells, function(cell) { + if (dom.getAttrib(cell, 'data-mce-selected') || cell == cellElm) { + rows.push(row); + return false; + } + }); + }); + + rowElm = rows[0]; + if (!rowElm) { + // If this element is null, return now to avoid crashing. + return; + } + + data = { + height: removePxSuffix(dom.getStyle(rowElm, 'height') || dom.getAttrib(rowElm, 'height')), + scope: dom.getAttrib(rowElm, 'scope'), + 'class': dom.getAttrib(rowElm, 'class') + }; + + data.type = rowElm.parentNode.nodeName.toLowerCase(); + + each('left center right'.split(' '), function(name) { + if (editor.formatter.matchNode(rowElm, 'align' + name)) { + data.align = name; + } + }); + + if (editor.settings.table_row_class_list) { + classListCtrl = { + name: 'class', + type: 'listbox', + label: 'Class', + values: buildListItems( + editor.settings.table_row_class_list, + function(item) { + if (item.value) { + item.textStyle = function() { + return editor.formatter.getCssText({block: 'tr', classes: [item.value]}); + }; + } + } + ) + }; + } + + generalRowForm = { + type: 'form', + columns: 2, + padding: 0, + defaults: { + type: 'textbox' + }, + items: [ + { + type: 'listbox', + name: 'type', + label: 'Row type', + text: 'None', + maxWidth: null, + values: [ + {text: 'Header', value: 'thead'}, + {text: 'Body', value: 'tbody'}, + {text: 'Footer', value: 'tfoot'} + ] + }, + { + type: 'listbox', + name: 'align', + label: 'Alignment', + text: 'None', + maxWidth: null, + values: [ + {text: 'None', value: ''}, + {text: 'Left', value: 'left'}, + {text: 'Center', value: 'center'}, + {text: 'Right', value: 'right'} + ] + }, + {label: 'Height', name: 'height'}, + classListCtrl + ] + }; + + if (editor.settings.table_row_advtab !== false) { + appendStylesToData(dom, data, rowElm); + + editor.windowManager.open({ + title: "Row properties", + data: data, + bodyType: 'tabpanel', + body: [ + { + title: 'General', + type: 'form', + items: generalRowForm + }, + createStyleForm(dom) + ], + + onsubmit: onSubmitRowForm + }); + } else { + editor.windowManager.open({ + title: "Row properties", + data: data, + body: generalRowForm, + onsubmit: onSubmitRowForm + }); + } + }; + }; +}); + +// Included from: js/tinymce/plugins/table/classes/ResizeBars.js + +/** + * ResizeBars.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles table column and row resizing by adding divs over the columns and rows of the table. + * These divs are then manipulated using mouse events to resize the underlying table. + * + * @class tinymce.tableplugin.ResizeBars + * @private + */ +define("tinymce/tableplugin/ResizeBars", [ + "tinymce/util/Tools", + "tinymce/util/VK" +], function(Tools, VK) { + var hoverTable; + + return function(editor) { + var RESIZE_BAR_CLASS = 'mce-resize-bar', + RESIZE_BAR_ROW_CLASS = 'mce-resize-bar-row', + RESIZE_BAR_ROW_CURSOR_STYLE = 'row-resize', + RESIZE_BAR_ROW_DATA_ATTRIBUTE = 'data-row', + RESIZE_BAR_ROW_DATA_INITIAL_TOP_ATTRIBUTE = 'data-initial-top', + RESIZE_BAR_COL_CLASS = 'mce-resize-bar-col', + RESIZE_BAR_COL_CURSOR_STYLE = 'col-resize', + RESIZE_BAR_COL_DATA_ATTRIBUTE = 'data-col', + RESIZE_BAR_COL_DATA_INITIAL_LEFT_ATTRIBUTE = 'data-initial-left', + RESIZE_BAR_THICKNESS = 4, + RESIZE_MINIMUM_WIDTH = 10, + RESIZE_MINIMUM_HEIGHT = 10, + RESIZE_BAR_DRAGGING_CLASS = 'mce-resize-bar-dragging'; + + var percentageBasedSizeRegex = new RegExp(/(\d+(\.\d+)?%)/), + pixelBasedSizeRegex = new RegExp(/px|em/); + + var delayDrop, dragging, blockerElement, dragBar, lastX, lastY; + + // Get the absolute position's top edge. + function getTopEdge(index, row) { + return { + index: index, + y: editor.dom.getPos(row).y + }; + } + + // Get the absolute position's bottom edge. + function getBottomEdge(index, row) { + return { + index: index, + y: editor.dom.getPos(row).y + row.offsetHeight + }; + } + + // Get the absolute position's left edge. + function getLeftEdge(index, cell) { + return { + index: index, + x: editor.dom.getPos(cell).x + }; + } + + // Get the absolute position's right edge. + function getRightEdge(index, cell) { + return { + index: index, + x: editor.dom.getPos(cell).x + cell.offsetWidth + }; + } + + function isRtl() { + var dir = editor.getBody().dir; + return dir === 'rtl'; + } + + function isInline() { + return editor.inline; + } + + function getBody() { + return isInline ? editor.getBody().ownerDocument.body : editor.getBody(); + } + + function getInnerEdge(index, cell) { + return isRtl() ? getRightEdge(index, cell) : getLeftEdge(index, cell); + } + + function getOuterEdge(index, cell) { + return isRtl() ? getLeftEdge(index, cell) : getRightEdge(index, cell); + } + + function getPercentageWidthFallback(element, table) { + return getComputedStyleSize(element, 'width') / getComputedStyleSize(table, 'width') * 100; + } + + function getComputedStyleSize(element, property) { + var widthString = editor.dom.getStyle(element, property, true); + var width = parseInt(widthString, 10); + return width; + } + + function getCurrentTablePercentWidth(table) { + var tableWidth = getComputedStyleSize(table, 'width'); + var tableParentWidth = getComputedStyleSize(table.parentElement, 'width'); + return tableWidth / tableParentWidth * 100; + } + + function getCellPercentDelta(table, delta) { + var tableWidth = getComputedStyleSize(table, 'width'); + return delta / tableWidth * 100; + } + + function getTablePercentDelta(table, delta) { + var tableParentWidth = getComputedStyleSize(table.parentElement, 'width'); + return delta / tableParentWidth * 100; + } + + // Find the left/right (ltr/rtl) or top side locations of the cells to measure. + // This is the location of the borders we need to draw over. + function findPositions(getInner, getOuter, thingsToMeasure) { + var tablePositions = []; + + // Skip the first item in the array = no left (LTR), right (RTL) or top bars + for (var i = 1; i < thingsToMeasure.length; i++) { + // Get the element from the details + var item = thingsToMeasure[i].element; + + // We need to zero index this again + tablePositions.push(getInner(i - 1, item)); + } + + var lastTableLineToMake = thingsToMeasure[thingsToMeasure.length - 1]; + tablePositions.push(getOuter(thingsToMeasure.length - 1, lastTableLineToMake.element)); + + return tablePositions; + } + + // Clear the bars. + function clearBars() { + var bars = editor.dom.select('.' + RESIZE_BAR_CLASS, getBody()); + Tools.each(bars, function(bar) { + editor.dom.remove(bar); + }); + } + + // Refresh the bars. + function refreshBars(tableElement) { + clearBars(); + drawBars(tableElement); + } + + // Generates a resize bar object for the editor to add. + function generateBar(classToAdd, cursor, left, top, height, width, indexAttr, index) { + var bar = { + 'data-mce-bogus': 'all', + 'class': RESIZE_BAR_CLASS + ' ' + classToAdd, + 'unselectable': 'on', + 'data-mce-resize': false, + style: 'cursor: ' + cursor + '; ' + + 'margin: 0; ' + + 'padding: 0; ' + + 'position: absolute; ' + + 'left: ' + left + 'px; ' + + 'top: ' + top + 'px; ' + + 'height: ' + height + 'px; ' + + 'width: ' + width + 'px; ' + }; + + bar[indexAttr] = index; + + return bar; + } + + // Draw the row bars over the row borders. + function drawRows(rowPositions, tableWidth, tablePosition) { + Tools.each(rowPositions, function(rowPosition) { + var left = tablePosition.x, + top = rowPosition.y - RESIZE_BAR_THICKNESS / 2, + height = RESIZE_BAR_THICKNESS, + width = tableWidth; + + editor.dom.add(getBody(), 'div', + generateBar(RESIZE_BAR_ROW_CLASS, RESIZE_BAR_ROW_CURSOR_STYLE, + left, top, height, width, RESIZE_BAR_ROW_DATA_ATTRIBUTE, rowPosition.index)); + }); + } + + // Draw the column bars over the column borders. + function drawCols(cellPositions, tableHeight, tablePosition) { + Tools.each(cellPositions, function(cellPosition) { + var left = cellPosition.x - RESIZE_BAR_THICKNESS / 2, + top = tablePosition.y, + height = tableHeight, + width = RESIZE_BAR_THICKNESS; + + editor.dom.add(getBody(), 'div', + generateBar(RESIZE_BAR_COL_CLASS, RESIZE_BAR_COL_CURSOR_STYLE, + left, top, height, width, RESIZE_BAR_COL_DATA_ATTRIBUTE, cellPosition.index)); + }); + } + + // Get a matrix of the cells in each row and the rows in the table. + function getTableDetails(table) { + return Tools.map(table.rows, function(row) { + + var cells = Tools.map(row.cells, function(cell) { + + var rowspan = cell.hasAttribute('rowspan') ? parseInt(cell.getAttribute('rowspan'), 10) : 1; + var colspan = cell.hasAttribute('colspan') ? parseInt(cell.getAttribute('colspan'), 10) : 1; + + return { + element: cell, + rowspan: rowspan, + colspan: colspan + }; + }); + + return { + element: row, + cells: cells + }; + + }); + + } + + // Get a grid model of the table. + function getTableGrid(tableDetails) { + function key(rowIndex, colIndex) { + return rowIndex + ',' + colIndex; + } + + function getAt(rowIndex, colIndex) { + return access[key(rowIndex, colIndex)]; + } + + function getAllCells() { + var allCells = []; + Tools.each(rows, function(row) { + allCells = allCells.concat(row.cells); + }); + return allCells; + } + + function getAllRows() { + return rows; + } + + var access = {}; + var rows = []; + + var maxRows = 0; + var maxCols = 0; + + Tools.each(tableDetails, function(row, rowIndex) { + var currentRow = []; + + Tools.each(row.cells, function(cell) { + + var start = 0; + + while (access[key(rowIndex, start)] !== undefined) { + start++; + } + + var current = { + element: cell.element, + colspan: cell.colspan, + rowspan: cell.rowspan, + rowIndex: rowIndex, + colIndex: start + }; + + for (var i = 0; i < cell.colspan; i++) { + for (var j = 0; j < cell.rowspan; j++) { + var cr = rowIndex + j; + var cc = start + i; + access[key(cr, cc)] = current; + maxRows = Math.max(maxRows, cr + 1); + maxCols = Math.max(maxCols, cc + 1); + } + } + + currentRow.push(current); + }); + + rows.push({ + element: row.element, + cells: currentRow + }); + }); + + return { + grid: { + maxRows: maxRows, + maxCols: maxCols + }, + getAt: getAt, + getAllCells: getAllCells, + getAllRows: getAllRows + }; + } + + function range(start, end) { + var r = []; + + for (var i = start; i < end; i++) { + r.push(i); + } + + return r; + } + + // Attempt to get a representative single block for this column. + // If we can't find a single block, all blocks in this row/column are spanned + // and we'll need to fallback to getting the first cell in the row/column. + function decide(getBlock, isSingle, getFallback) { + var inBlock = getBlock(); + var singleInBlock; + + for (var i = 0; i < inBlock.length; i++) { + if (isSingle(inBlock[i])) { + singleInBlock = inBlock[i]; + } + } + return singleInBlock ? singleInBlock : getFallback(); + } + + // Attempt to get representative blocks for the width of each column. + function getColumnBlocks(tableGrid) { + var cols = range(0, tableGrid.grid.maxCols); + var rows = range(0, tableGrid.grid.maxRows); + + return Tools.map(cols, function(col) { + function getBlock() { + var details = []; + for (var i = 0; i < rows.length; i++) { + var detail = tableGrid.getAt(i, col); + if (detail && detail.colIndex === col) { + details.push(detail); + } + } + + return details; + } + + function isSingle(detail) { + return detail.colspan === 1; + } + + function getFallback() { + var item; + + for (var i = 0; i < rows.length; i++) { + item = tableGrid.getAt(i, col); + if (item) { + return item; + } + } + + return null; + } + + return decide(getBlock, isSingle, getFallback); + }); + } + + // Attempt to get representative blocks for the height of each row. + function getRowBlocks(tableGrid) { + var cols = range(0, tableGrid.grid.maxCols); + var rows = range(0, tableGrid.grid.maxRows); + + return Tools.map(rows, function(row) { + function getBlock() { + var details = []; + for (var i = 0; i < cols.length; i++) { + var detail = tableGrid.getAt(row, i); + if (detail && detail.rowIndex === row) { + details.push(detail); + } + } + return details; + } + + function isSingle(detail) { + return detail.rowspan === 1; + } + + function getFallback() { + return tableGrid.getAt(row, 0); + } + + return decide(getBlock, isSingle, getFallback); + }); + } + + // Draw resize bars over the left/right (ltr/rtl) or top side locations of the cells to measure. + // This is the location of the borders we need to draw over. + function drawBars(table) { + var tableDetails = getTableDetails(table); + var tableGrid = getTableGrid(tableDetails); + var rows = getRowBlocks(tableGrid); + var cols = getColumnBlocks(tableGrid); + + var tablePosition = editor.dom.getPos(table); + var rowPositions = rows.length > 0 ? findPositions(getTopEdge, getBottomEdge, rows) : []; + var colPositions = cols.length > 0 ? findPositions(getInnerEdge, getOuterEdge, cols) : []; + + drawRows(rowPositions, table.offsetWidth, tablePosition); + drawCols(colPositions, table.offsetHeight, tablePosition); + } + + // Attempt to deduce the width/height of a column/row that has more than one cell spanned. + function deduceSize(deducables, index, isPercentageBased, table) { + if (index < 0 || index >= deducables.length - 1) { + return ""; + } + + var current = deducables[index]; + + if (current) { + current = { + value: current, + delta: 0 + }; + } else { + var reversedUpToIndex = deducables.slice(0, index).reverse(); + for (var i = 0; i < reversedUpToIndex.length; i++) { + if (reversedUpToIndex[i]) { + current = { + value: reversedUpToIndex[i], + delta: i + 1 + }; + } + } + } + + var next = deducables[index + 1]; + + if (next) { + next = { + value: next, + delta: 1 + }; + } else { + var rest = deducables.slice(index + 1); + for (var j = 0; j < rest.length; j++) { + if (rest[j]) { + next = { + value: rest[j], + delta: j + 1 + }; + } + } + } + + var extras = next.delta - current.delta; + var pixelWidth = Math.abs(next.value - current.value) / extras; + return isPercentageBased ? pixelWidth / getComputedStyleSize(table, 'width') * 100 : pixelWidth; + } + + function getStyleOrAttrib(element, property) { + var sizeString = editor.dom.getStyle(element, property); + if (!sizeString) { + sizeString = editor.dom.getAttrib(element, property); + } + if (!sizeString) { + sizeString = editor.dom.getStyle(element, property, true); + } + return sizeString; + } + + function getWidth(element, isPercentageBased, table) { + var widthString = getStyleOrAttrib(element, 'width'); + + var widthNumber = parseInt(widthString, 10); + + var getWidthFallback = isPercentageBased ? getPercentageWidthFallback(element, table) : getComputedStyleSize(element, 'width'); + + // If this is percentage based table, but this cell isn't percentage based. + // Or if this is a pixel based table, but this cell isn't pixel based. + if (isPercentageBased && !isPercentageBasedSize(widthString) || + !isPercentageBased && !isPixelBasedSize(widthString)) { + // set the widthnumber to 0 + widthNumber = 0; + } + + return !isNaN(widthNumber) && widthNumber > 0 ? + widthNumber : getWidthFallback; + } + + // Attempt to get the css width from column representative cells. + function getWidths(tableGrid, isPercentageBased, table) { + + var cols = getColumnBlocks(tableGrid); + + var backups = Tools.map(cols, function(col) { + return getInnerEdge(col.colIndex, col.element).x; + }); + + var widths = []; + + for (var i = 0; i < cols.length; i++) { + var span = cols[i].element.hasAttribute('colspan') ? parseInt(cols[i].element.getAttribute('colspan'), 10) : 1; + // Deduce if the column has colspan of more than 1 + var width = span > 1 ? deduceSize(backups, i) : getWidth(cols[i].element, isPercentageBased, table); + // If everything's failed and we still don't have a width + width = width ? width : RESIZE_MINIMUM_WIDTH; + widths.push(width); + } + + return widths; + } + + // Attempt to get the pixel height from a cell. + function getPixelHeight(element) { + + var heightString = getStyleOrAttrib(element, 'height'); + + var heightNumber = parseInt(heightString, 10); + + if (isPercentageBasedSize(heightString)) { + heightNumber = 0; + } + + return !isNaN(heightNumber) && heightNumber > 0 ? + heightNumber : getComputedStyleSize(element, 'height'); + } + + // Attempt to get the css height from row representative cells. + function getPixelHeights(tableGrid) { + + var rows = getRowBlocks(tableGrid); + + var backups = Tools.map(rows, function(row) { + return getTopEdge(row.rowIndex, row.element).y; + }); + + var heights = []; + + for (var i = 0; i < rows.length; i++) { + var span = rows[i].element.hasAttribute('rowspan') ? parseInt(rows[i].element.getAttribute('rowspan'), 10) : 1; + + var height = span > 1 ? deduceSize(backups, i) : getPixelHeight(rows[i].element); + + height = height ? height : RESIZE_MINIMUM_HEIGHT; + heights.push(height); + } + + return heights; + } + + // Determine how much each column's css width will need to change. + // Sizes = result = pixels widths OR percentage based widths + function determineDeltas(sizes, column, step, min, isPercentageBased) { + + var result = sizes.slice(0); + + function generateZeros(array) { + return Tools.map(array, function() { + return 0; + }); + } + + function onOneColumn() { + var deltas; + if (isPercentageBased) { + // If we have one column in a percent based table, that column should be 100% of the width of the table. + deltas = [100 - result[0]]; + } else { + var newNext = Math.max(min, result[0] + step); + deltas = [newNext - result[0]]; + } + return deltas; + } + + function onLeftOrMiddle(index, next) { + + var startZeros = generateZeros(result.slice(0, index)); + var endZeros = generateZeros(result.slice(next + 1)); + var deltas; + + if (step >= 0) { + var newNext = Math.max(min, result[next] - step); + deltas = startZeros.concat([step, newNext - result[next]]).concat(endZeros); + } else { + var newThis = Math.max(min, result[index] + step); + var diffx = result[index] - newThis; + deltas = startZeros.concat([newThis - result[index], diffx]).concat(endZeros); + } + + return deltas; + } + + function onRight(previous, index) { + var startZeros = generateZeros(result.slice(0, index)); + var deltas; + + if (step >= 0) { + deltas = startZeros.concat([step]); + } else { + var size = Math.max(min, result[index] + step); + deltas = startZeros.concat([size - result[index]]); + } + + return deltas; + + } + + var deltas; + + if (sizes.length === 0) { // No Columns + deltas = []; + } else if (sizes.length === 1) { // One Column + deltas = onOneColumn(); + } else if (column === 0) { // Left Column + deltas = onLeftOrMiddle(0, 1); + } else if (column > 0 && column < sizes.length - 1) { // Middle Column + deltas = onLeftOrMiddle(column, column + 1); + } else if (column === sizes.length - 1) { // Right Column + deltas = onRight(column - 1, column); + } else { + deltas = []; + } + + return deltas; + } + + function total(start, end, measures) { + var r = 0; + for (var i = start; i < end; i++) { + r += measures[i]; + } + return r; + } + + // Combine cell's css widths to determine widths of colspan'd cells. + function recalculateWidths(tableGrid, widths) { + var allCells = tableGrid.getAllCells(); + return Tools.map(allCells, function(cell) { + var width = total(cell.colIndex, cell.colIndex + cell.colspan, widths); + return { + element: cell.element, + width: width, + colspan: cell.colspan + }; + }); + } + + // Combine cell's css heights to determine heights of rowspan'd cells. + function recalculateCellHeights(tableGrid, heights) { + var allCells = tableGrid.getAllCells(); + return Tools.map(allCells, function(cell) { + var height = total(cell.rowIndex, cell.rowIndex + cell.rowspan, heights); + return { + element: cell.element, + height: height, + rowspan: cell.rowspan + }; + }); + } + + // Calculate row heights. + function recalculateRowHeights(tableGrid, heights) { + var allRows = tableGrid.getAllRows(); + return Tools.map(allRows, function(row, i) { + return { + element: row.element, + height: heights[i] + }; + }); + } + + function isPercentageBasedSize(size) { + return percentageBasedSizeRegex.test(size); + } + + function isPixelBasedSize(size) { + return pixelBasedSizeRegex.test(size); + } + + // Adjust the width of the column of table at index, with delta. + function adjustWidth(table, delta, index) { + var tableDetails = getTableDetails(table); + var tableGrid = getTableGrid(tableDetails); + + function setSizes(newSizes, styleExtension) { + Tools.each(newSizes, function(cell) { + editor.dom.setStyle(cell.element, 'width', cell.width + styleExtension); + editor.dom.setAttrib(cell.element, 'width', null); + }); + } + + function getNewTablePercentWidth() { + return index < tableGrid.grid.maxCols - 1 ? getCurrentTablePercentWidth(table) : + getCurrentTablePercentWidth(table) + getTablePercentDelta(table, delta); + } + + function getNewTablePixelWidth() { + return index < tableGrid.grid.maxCols - 1 ? getComputedStyleSize(table, 'width') : + getComputedStyleSize(table, 'width') + delta; + } + + function setTableSize(newTableWidth, styleExtension, isPercentBased) { + if (index == tableGrid.grid.maxCols - 1 || !isPercentBased) { + editor.dom.setStyle(table, 'width', newTableWidth + styleExtension); + editor.dom.setAttrib(table, 'width', null); + } + } + + var percentageBased = isPercentageBasedSize(table.width) || + isPercentageBasedSize(table.style.width); + + var widths = getWidths(tableGrid, percentageBased, table); + + var step = percentageBased ? getCellPercentDelta(table, delta) : delta; + // TODO: change the min for percentage maybe? + var deltas = determineDeltas(widths, index, step, RESIZE_MINIMUM_WIDTH, percentageBased, table); + var newWidths = []; + + for (var i = 0; i < deltas.length; i++) { + newWidths.push(deltas[i] + widths[i]); + } + + var newSizes = recalculateWidths(tableGrid, newWidths); + var styleExtension = percentageBased ? '%' : 'px'; + var newTableWidth = percentageBased ? getNewTablePercentWidth() : + getNewTablePixelWidth(); + + editor.undoManager.transact(function() { + setSizes(newSizes, styleExtension); + setTableSize(newTableWidth, styleExtension, percentageBased); + }); + } + + // Adjust the height of the row of table at index, with delta. + function adjustHeight(table, delta, index) { + var tableDetails = getTableDetails(table); + var tableGrid = getTableGrid(tableDetails); + + var heights = getPixelHeights(tableGrid); + + var newHeights = [], newTotalHeight = 0; + + for (var i = 0; i < heights.length; i++) { + newHeights.push(i === index ? delta + heights[i] : heights[i]); + newTotalHeight += newTotalHeight[i]; + } + + var newCellSizes = recalculateCellHeights(tableGrid, newHeights); + var newRowSizes = recalculateRowHeights(tableGrid, newHeights); + + editor.undoManager.transact(function() { + + Tools.each(newRowSizes, function(row) { + editor.dom.setStyle(row.element, 'height', row.height + 'px'); + editor.dom.setAttrib(row.element, 'height', null); + }); + + Tools.each(newCellSizes, function(cell) { + editor.dom.setStyle(cell.element, 'height', cell.height + 'px'); + editor.dom.setAttrib(cell.element, 'height', null); + }); + + editor.dom.setStyle(table, 'height', newTotalHeight + 'px'); + editor.dom.setAttrib(table, 'height', null); + }); + } + + function scheduleDelayedDropEvent() { + delayDrop = setTimeout(function() { + drop(); + }, 200); + } + + function cancelDelayedDropEvent() { + clearTimeout(delayDrop); + } + + function getBlockerElement() { + var blocker = document.createElement('div'); + + blocker.setAttribute('style', 'margin: 0; ' + + 'padding: 0; ' + + 'position: fixed; ' + + 'left: 0px; ' + + 'top: 0px; ' + + 'height: 100%; ' + + 'width: 100%;'); + blocker.setAttribute('data-mce-bogus', 'all'); + + return blocker; + } + + function bindBlockerEvents(blocker, dragHandler) { + editor.dom.bind(blocker, 'mouseup', function() { + drop(); + }); + + editor.dom.bind(blocker, 'mousemove', function(e) { + cancelDelayedDropEvent(); + + if (dragging) { + dragHandler(e); + } + }); + + editor.dom.bind(blocker, 'mouseout', function() { + scheduleDelayedDropEvent(); + }); + + } + + function drop() { + editor.dom.remove(blockerElement); + + if (dragging) { + editor.dom.removeClass(dragBar, RESIZE_BAR_DRAGGING_CLASS); + dragging = false; + + var index, delta; + + if (isCol(dragBar)) { + var initialLeft = parseInt(editor.dom.getAttrib(dragBar, RESIZE_BAR_COL_DATA_INITIAL_LEFT_ATTRIBUTE), 10); + var newLeft = editor.dom.getPos(dragBar).x; + index = parseInt(editor.dom.getAttrib(dragBar, RESIZE_BAR_COL_DATA_ATTRIBUTE), 10); + delta = isRtl() ? initialLeft - newLeft : newLeft - initialLeft; + adjustWidth(hoverTable, delta, index); + } else if (isRow(dragBar)) { + var initialTop = parseInt(editor.dom.getAttrib(dragBar, RESIZE_BAR_ROW_DATA_INITIAL_TOP_ATTRIBUTE), 10); + var newTop = editor.dom.getPos(dragBar).y; + index = parseInt(editor.dom.getAttrib(dragBar, RESIZE_BAR_ROW_DATA_ATTRIBUTE), 10); + delta = newTop - initialTop; + adjustHeight(hoverTable, delta, index); + } + refreshBars(hoverTable); + editor.nodeChanged(); + } + } + + function setupBaseDrag(bar, dragHandler) { + blockerElement = blockerElement ? blockerElement : getBlockerElement(); + dragging = true; + editor.dom.addClass(bar, RESIZE_BAR_DRAGGING_CLASS); + dragBar = bar; + bindBlockerEvents(blockerElement, dragHandler); + editor.dom.add(getBody(), blockerElement); + } + + function isCol(target) { + return editor.dom.hasClass(target, RESIZE_BAR_COL_CLASS); + } + + function isRow(target) { + return editor.dom.hasClass(target, RESIZE_BAR_ROW_CLASS); + } + + function colDragHandler(event) { + lastX = lastX !== undefined ? lastX : event.clientX; // we need a firstX + var deltaX = event.clientX - lastX; + lastX = event.clientX; + var oldLeft = editor.dom.getPos(dragBar).x; + editor.dom.setStyle(dragBar, 'left', oldLeft + deltaX + 'px'); + } + + function rowDragHandler(event) { + lastY = lastY !== undefined ? lastY : event.clientY; + var deltaY = event.clientY - lastY; + lastY = event.clientY; + var oldTop = editor.dom.getPos(dragBar).y; + editor.dom.setStyle(dragBar, 'top', oldTop + deltaY + 'px'); + } + + function setupColDrag(bar) { + lastX = undefined; + setupBaseDrag(bar, colDragHandler); + } + + function setupRowDrag(bar) { + lastY = undefined; + setupBaseDrag(bar, rowDragHandler); + } + + function mouseDownHandler(e) { + var target = e.target, body = editor.getBody(); + + // Since this code is working on global events we need to work on a global hoverTable state + // and make sure that the state is correct according to the events fired + if (!editor.$.contains(body, hoverTable) && hoverTable !== body) { + return; + } + + if (isCol(target)) { + e.preventDefault(); + var initialLeft = editor.dom.getPos(target).x; + editor.dom.setAttrib(target, RESIZE_BAR_COL_DATA_INITIAL_LEFT_ATTRIBUTE, initialLeft); + setupColDrag(target); + } else if (isRow(target)) { + e.preventDefault(); + var initialTop = editor.dom.getPos(target).y; + editor.dom.setAttrib(target, RESIZE_BAR_ROW_DATA_INITIAL_TOP_ATTRIBUTE, initialTop); + setupRowDrag(target); + } else { + clearBars(); + } + } + + editor.on('init', function() { + // Needs to be like this for inline mode, editor.on does not bind to elements in the document body otherwise + editor.dom.bind(getBody(), 'mousedown', mouseDownHandler); + }); + + // If we're updating the table width via the old mechanic, we need to update the constituent cells' widths/heights too. + editor.on('ObjectResized', function(e) { + var table = e.target; + if (table.nodeName === 'TABLE') { + var newCellSizes = []; + Tools.each(table.rows, function(row) { + Tools.each(row.cells, function(cell) { + var width = editor.dom.getStyle(cell, 'width', true); + newCellSizes.push({ + cell: cell, + width: width + }); + }); + }); + Tools.each(newCellSizes, function(newCellSize) { + editor.dom.setStyle(newCellSize.cell, 'width', newCellSize.width); + editor.dom.setAttrib(newCellSize.cell, 'width', null); + }); + } + }); + + editor.on('mouseover', function(e) { + if (!dragging) { + var tableElement = editor.dom.getParent(e.target, 'table'); + + if (e.target.nodeName === 'TABLE' || tableElement) { + hoverTable = tableElement; + refreshBars(tableElement); + } + } + }); + + // Prevents the user from moving the caret inside the resize bars on Chrome + // Only does it on arrow keys since clearBars might be an epxensive operation + // since it's querying the DOM + editor.on('keydown', function(e) { + switch (e.keyCode) { + case VK.LEFT: + case VK.RIGHT: + case VK.UP: + case VK.DOWN: + clearBars(); + break; + } + }); + + editor.on('remove', function() { + clearBars(); + editor.dom.unbind(getBody(), 'mousedown', mouseDownHandler); + }); + + return { + adjustWidth: adjustWidth, + adjustHeight: adjustHeight, + clearBars: clearBars, + drawBars: drawBars, + determineDeltas: determineDeltas, + getTableGrid: getTableGrid, + getTableDetails: getTableDetails, + getWidths: getWidths, + getPixelHeights: getPixelHeights, + isPercentageBasedSize: isPercentageBasedSize, + isPixelBasedSize: isPixelBasedSize, + recalculateWidths: recalculateWidths, + recalculateCellHeights: recalculateCellHeights, + recalculateRowHeights: recalculateRowHeights + }; + }; +}); + +// Included from: js/tinymce/plugins/table/classes/Plugin.js + +/** + * Plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains all core logic for the table plugin. + * + * @class tinymce.tableplugin.Plugin + * @private + */ +define("tinymce/tableplugin/Plugin", [ + "tinymce/tableplugin/TableGrid", + "tinymce/tableplugin/Quirks", + "tinymce/tableplugin/CellSelection", + "tinymce/tableplugin/Dialogs", + "tinymce/tableplugin/ResizeBars", + "tinymce/util/Tools", + "tinymce/dom/TreeWalker", + "tinymce/Env", + "tinymce/PluginManager" +], function(TableGrid, Quirks, CellSelection, Dialogs, ResizeBars, Tools, TreeWalker, Env, PluginManager) { + var each = Tools.each; + + function Plugin(editor) { + var clipboardRows, self = this, dialogs = new Dialogs(editor), resizeBars; + + if (editor.settings.object_resizing && editor.settings.table_resize_bars !== false && + (editor.settings.object_resizing === true || editor.settings.object_resizing === 'table')) { + resizeBars = ResizeBars(editor); + } + + function cmd(command) { + return function() { + editor.execCommand(command); + }; + } + + function insertTable(cols, rows) { + var y, x, html, tableElm; + + html = '
'; + + for (y = 0; y < rows; y++) { + html += ''; + + for (x = 0; x < cols; x++) { + html += ''; + } + + html += ''; + } + + html += '
' + (Env.ie && Env.ie < 10 ? ' ' : '
') + '
'; + + editor.undoManager.transact(function() { + editor.insertContent(html); + + tableElm = editor.dom.get('__mce'); + editor.dom.setAttrib(tableElm, 'id', null); + + editor.$('tr', tableElm).each(function(index, row) { + editor.fire('newrow', { + node: row + }); + + editor.$('th,td', row).each(function(index, cell) { + editor.fire('newcell', { + node: cell + }); + }); + }); + + editor.dom.setAttribs(tableElm, editor.settings.table_default_attributes || {}); + editor.dom.setStyles(tableElm, editor.settings.table_default_styles || {}); + }); + + return tableElm; + } + + function handleDisabledState(ctrl, selector, sameParts) { + function bindStateListener() { + var selectedElm, selectedCells, parts = {}, sum = 0, state; + + selectedCells = editor.dom.select('td[data-mce-selected],th[data-mce-selected]'); + selectedElm = selectedCells[0]; + if (!selectedElm) { + selectedElm = editor.selection.getStart(); + } + + // Make sure that we don't have a selection inside thead and tbody at the same time + if (sameParts && selectedCells.length > 0) { + each(selectedCells, function(cell) { + return parts[cell.parentNode.parentNode.nodeName] = 1; + }); + + each(parts, function(value) { + sum += value; + }); + + state = sum !== 1; + } else { + state = !editor.dom.getParent(selectedElm, selector); + } + + ctrl.disabled(state); + + editor.selection.selectorChanged(selector, function(state) { + ctrl.disabled(!state); + }); + } + + if (editor.initialized) { + bindStateListener(); + } else { + editor.on('init', bindStateListener); + } + } + + function postRender() { + /*jshint validthis:true*/ + handleDisabledState(this, 'table'); + } + + function postRenderCell() { + /*jshint validthis:true*/ + handleDisabledState(this, 'td,th'); + } + + function postRenderMergeCell() { + /*jshint validthis:true*/ + handleDisabledState(this, 'td,th', true); + } + + function generateTableGrid() { + var html = ''; + + html = ''; + + for (var y = 0; y < 10; y++) { + html += ''; + + for (var x = 0; x < 10; x++) { + html += ''; + } + + html += ''; + } + + html += '
'; + + html += ''; + + return html; + } + + function selectGrid(tx, ty, control) { + var table = control.getEl().getElementsByTagName('table')[0]; + var x, y, focusCell, cell, active; + var rtl = control.isRtl() || control.parent().rel == 'tl-tr'; + + table.nextSibling.innerHTML = (tx + 1) + ' x ' + (ty + 1); + + if (rtl) { + tx = 9 - tx; + } + + for (y = 0; y < 10; y++) { + for (x = 0; x < 10; x++) { + cell = table.rows[y].childNodes[x].firstChild; + active = (rtl ? x >= tx : x <= tx) && y <= ty; + + editor.dom.toggleClass(cell, 'mce-active', active); + + if (active) { + focusCell = cell; + } + } + } + + return focusCell.parentNode; + } + + if (editor.settings.table_grid === false) { + editor.addMenuItem('inserttable', { + text: 'Insert table', + icon: 'table', + context: 'table', + onclick: dialogs.table + }); + } else { + editor.addMenuItem('inserttable', { + text: 'Insert table', + icon: 'table', + context: 'table', + ariaHideMenu: true, + onclick: function(e) { + if (e.aria) { + this.parent().hideAll(); + e.stopImmediatePropagation(); + dialogs.table(); + } + }, + onshow: function() { + selectGrid(0, 0, this.menu.items()[0]); + }, + onhide: function() { + var elements = this.menu.items()[0].getEl().getElementsByTagName('a'); + editor.dom.removeClass(elements, 'mce-active'); + editor.dom.addClass(elements[0], 'mce-active'); + }, + menu: [ + { + type: 'container', + html: generateTableGrid(), + + onPostRender: function() { + this.lastX = this.lastY = 0; + }, + + onmousemove: function(e) { + var target = e.target, x, y; + + if (target.tagName.toUpperCase() == 'A') { + x = parseInt(target.getAttribute('data-mce-x'), 10); + y = parseInt(target.getAttribute('data-mce-y'), 10); + + if (this.isRtl() || this.parent().rel == 'tl-tr') { + x = 9 - x; + } + + if (x !== this.lastX || y !== this.lastY) { + selectGrid(x, y, e.control); + + this.lastX = x; + this.lastY = y; + } + } + }, + + onclick: function(e) { + var self = this; + + if (e.target.tagName.toUpperCase() == 'A') { + e.preventDefault(); + e.stopPropagation(); + self.parent().cancel(); + + editor.undoManager.transact(function() { + insertTable(self.lastX + 1, self.lastY + 1); + }); + + editor.addVisual(); + } + } + } + ] + }); + } + + editor.addMenuItem('tableprops', { + text: 'Table properties', + context: 'table', + onPostRender: postRender, + onclick: dialogs.tableProps + }); + + editor.addMenuItem('deletetable', { + text: 'Delete table', + context: 'table', + onPostRender: postRender, + cmd: 'mceTableDelete' + }); + + editor.addMenuItem('cell', { + separator: 'before', + text: 'Cell', + context: 'table', + menu: [ + {text: 'Cell properties', onclick: cmd('mceTableCellProps'), onPostRender: postRenderCell}, + {text: 'Merge cells', onclick: cmd('mceTableMergeCells'), onPostRender: postRenderMergeCell}, + {text: 'Split cell', onclick: cmd('mceTableSplitCells'), onPostRender: postRenderCell} + ] + }); + + editor.addMenuItem('row', { + text: 'Row', + context: 'table', + menu: [ + {text: 'Insert row before', onclick: cmd('mceTableInsertRowBefore'), onPostRender: postRenderCell}, + {text: 'Insert row after', onclick: cmd('mceTableInsertRowAfter'), onPostRender: postRenderCell}, + {text: 'Delete row', onclick: cmd('mceTableDeleteRow'), onPostRender: postRenderCell}, + {text: 'Row properties', onclick: cmd('mceTableRowProps'), onPostRender: postRenderCell}, + {text: '-'}, + {text: 'Cut row', onclick: cmd('mceTableCutRow'), onPostRender: postRenderCell}, + {text: 'Copy row', onclick: cmd('mceTableCopyRow'), onPostRender: postRenderCell}, + {text: 'Paste row before', onclick: cmd('mceTablePasteRowBefore'), onPostRender: postRenderCell}, + {text: 'Paste row after', onclick: cmd('mceTablePasteRowAfter'), onPostRender: postRenderCell} + ] + }); + + editor.addMenuItem('column', { + text: 'Column', + context: 'table', + menu: [ + {text: 'Insert column before', onclick: cmd('mceTableInsertColBefore'), onPostRender: postRenderCell}, + {text: 'Insert column after', onclick: cmd('mceTableInsertColAfter'), onPostRender: postRenderCell}, + {text: 'Delete column', onclick: cmd('mceTableDeleteCol'), onPostRender: postRenderCell} + ] + }); + + var menuItems = []; + each("inserttable tableprops deletetable | cell row column".split(' '), function(name) { + if (name == '|') { + menuItems.push({text: '-'}); + } else { + menuItems.push(editor.menuItems[name]); + } + }); + + editor.addButton("table", { + type: "menubutton", + title: "Table", + menu: menuItems + }); + + // Select whole table is a table border is clicked + if (!Env.isIE) { + editor.on('click', function(e) { + e = e.target; + + if (e.nodeName === 'TABLE') { + editor.selection.select(e); + editor.nodeChanged(); + } + }); + } + + self.quirks = new Quirks(editor); + + editor.on('Init', function() { + self.cellSelection = new CellSelection(editor, function (selecting) { + if (selecting) { + resizeBars.clearBars(); + } + }); + self.resizeBars = resizeBars; + }); + + editor.on('PreInit', function() { + // Remove internal data attributes + editor.serializer.addAttributeFilter( + 'data-mce-cell-padding,data-mce-border,data-mce-border-color', + function(nodes, name) { + + var i = nodes.length; + + while (i--) { + nodes[i].attr(name, null); + } + }); + }); + + // Register action commands + each({ + mceTableSplitCells: function(grid) { + grid.split(); + }, + + mceTableMergeCells: function(grid) { + var cell; + + cell = editor.dom.getParent(editor.selection.getStart(), 'th,td'); + + if (!editor.dom.select('td[data-mce-selected],th[data-mce-selected]').length) { + dialogs.merge(grid, cell); + } else { + grid.merge(); + } + }, + + mceTableInsertRowBefore: function(grid) { + grid.insertRow(true); + }, + + mceTableInsertRowAfter: function(grid) { + grid.insertRow(); + }, + + mceTableInsertColBefore: function(grid) { + grid.insertCol(true); + }, + + mceTableInsertColAfter: function(grid) { + grid.insertCol(); + }, + + mceTableDeleteCol: function(grid) { + grid.deleteCols(); + }, + + mceTableDeleteRow: function(grid) { + grid.deleteRows(); + }, + + mceTableCutRow: function(grid) { + clipboardRows = grid.cutRows(); + }, + + mceTableCopyRow: function(grid) { + clipboardRows = grid.copyRows(); + }, + + mceTablePasteRowBefore: function(grid) { + grid.pasteRows(clipboardRows, true); + }, + + mceTablePasteRowAfter: function(grid) { + grid.pasteRows(clipboardRows); + }, + + mceSplitColsBefore: function(grid) { + grid.splitCols(true); + }, + + mceSplitColsAfter: function(grid) { + grid.splitCols(false); + }, + + mceTableDelete: function(grid) { + if (resizeBars) { + resizeBars.clearBars(); + } + grid.deleteTable(); + } + }, function(func, name) { + editor.addCommand(name, function() { + var grid = new TableGrid(editor); + + if (grid) { + func(grid); + editor.execCommand('mceRepaint'); + self.cellSelection.clear(); + } + }); + }); + + // Register dialog commands + each({ + mceInsertTable: dialogs.table, + mceTableProps: function() { + dialogs.table(true); + }, + mceTableRowProps: dialogs.row, + mceTableCellProps: dialogs.cell + }, function(func, name) { + editor.addCommand(name, function(ui, val) { + func(val); + }); + }); + + function addButtons() { + editor.addButton('tableprops', { + title: 'Table properties', + onclick: dialogs.tableProps, + icon: 'table' + }); + + editor.addButton('tabledelete', { + title: 'Delete table', + onclick: cmd('mceTableDelete') + }); + + editor.addButton('tablecellprops', { + title: 'Cell properties', + onclick: cmd('mceTableCellProps') + }); + + editor.addButton('tablemergecells', { + title: 'Merge cells', + onclick: cmd('mceTableMergeCells') + }); + + editor.addButton('tablesplitcells', { + title: 'Split cell', + onclick: cmd('mceTableSplitCells') + }); + + editor.addButton('tableinsertrowbefore', { + title: 'Insert row before', + onclick: cmd('mceTableInsertRowBefore') + }); + + editor.addButton('tableinsertrowafter', { + title: 'Insert row after', + onclick: cmd('mceTableInsertRowAfter') + }); + + editor.addButton('tabledeleterow', { + title: 'Delete row', + onclick: cmd('mceTableDeleteRow') + }); + + editor.addButton('tablerowprops', { + title: 'Row properties', + onclick: cmd('mceTableRowProps') + }); + + editor.addButton('tablecutrow', { + title: 'Cut row', + onclick: cmd('mceTableCutRow') + }); + + editor.addButton('tablecopyrow', { + title: 'Copy row', + onclick: cmd('mceTableCopyRow') + }); + + editor.addButton('tablepasterowbefore', { + title: 'Paste row before', + onclick: cmd('mceTablePasteRowBefore') + }); + + editor.addButton('tablepasterowafter', { + title: 'Paste row after', + onclick: cmd('mceTablePasteRowAfter') + }); + + editor.addButton('tableinsertcolbefore', { + title: 'Insert column before', + onclick: cmd('mceTableInsertColBefore') + }); + + editor.addButton('tableinsertcolafter', { + title: 'Insert column after', + onclick: cmd('mceTableInsertColAfter') + }); + + editor.addButton('tabledeletecol', { + title: 'Delete column', + onclick: cmd('mceTableDeleteCol') + }); + + } + + function isTable(table) { + + var selectorMatched = editor.dom.is(table, 'table') && editor.getBody().contains(table); + + return selectorMatched; + } + + function addToolbars() { + var toolbarItems = editor.settings.table_toolbar; + + if (toolbarItems === '' || toolbarItems === false) { + return; + } + + if (!toolbarItems) { + toolbarItems = 'tableprops tabledelete | ' + + 'tableinsertrowbefore tableinsertrowafter tabledeleterow | ' + + 'tableinsertcolbefore tableinsertcolafter tabledeletecol'; + } + + editor.addContextToolbar( + isTable, + toolbarItems + ); + } + + function getClipboardRows() { + return clipboardRows; + } + + function setClipboardRows(rows) { + clipboardRows = rows; + } + + addButtons(); + addToolbars(); + + // Enable tab key cell navigation + if (editor.settings.table_tab_navigation !== false) { + editor.on('keydown', function(e) { + var cellElm, grid, delta; + + if (e.keyCode == 9) { + cellElm = editor.dom.getParent(editor.selection.getStart(), 'th,td'); + + if (cellElm) { + e.preventDefault(); + + grid = new TableGrid(editor); + delta = e.shiftKey ? -1 : 1; + + editor.undoManager.transact(function() { + if (!grid.moveRelIdx(cellElm, delta) && delta > 0) { + grid.insertRow(); + grid.refresh(); + grid.moveRelIdx(cellElm, delta); + } + }); + } + } + }); + } + + self.insertTable = insertTable; + self.setClipboardRows = setClipboardRows; + self.getClipboardRows = getClipboardRows; + } + + PluginManager.add('table', Plugin); +}); +})(this); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/table/plugin.min.js b/public/mosaico/dist/vendor/plugins/table/plugin.min.js new file mode 100644 index 00000000..25ff4a60 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/table/plugin.min.js @@ -0,0 +1,2 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],a=0;a9)&&(t.hasChildNodes()||(t.innerHTML='
'))}var n=function(e){return function(t,n){t&&(n=parseInt(n,10),1===n||0===n?t.removeAttribute(e,1):t.setAttribute(e,n,1))}},r=function(e){return function(t){return parseInt(t.getAttribute(e)||1,10)}};return{setColSpan:n("colSpan"),setRowSpan:n("rowspan"),getColSpan:r("colSpan"),getRowSpan:r("rowSpan"),setSpanVal:function(e,t,r){n(t)(e,r)},getSpanVal:function(e,t){return r(t)(e)},paddCell:t}}),r("tinymce/tableplugin/SplitCols",["tinymce/util/Tools","tinymce/tableplugin/Utils"],function(e,t){var n=function(e,t,n){return e[n]?e[n][t]:null},r=function(e,t,r){var i=n(e,t,r);return i?i.elm:null},i=function(e,t,i,o){var a,s,l=0,c=r(e,t,i);for(a=i;(o>0?a=0)&&(s=n(e,t,a),c===s.elm);a+=o)l++;return l},o=function(e,t,n){for(var r,i=e[n],o=t;o'),!1},"childNodes"),t=v(t,!1),g(t),s(t,"rowSpan",1),s(t,"colSpan",1),i?t.appendChild(i):r.paddCell(t),t}function _(){var e,t=ee.createRng();return o(ee.select("tr",c),function(e){0===e.cells.length&&ee.remove(e)}),0===ee.select("tr",c).length?(t.setStartBefore(c),t.setEndBefore(c),Z.setRng(t),void ee.remove(c)):(o(ee.select("thead,tbody,tfoot",c),function(e){0===e.rows.length&&ee.remove(e)}),p(),void(J&&(e=K[Math.min(K.length-1,J.y)],e&&(Z.select(e[Math.min(e.length-1,J.x)].elm,!0),Z.collapse(!0)))))}function S(e,t,n,r){var i,o,a,s,l;for(i=K[t][e].elm.parentNode,a=1;a<=n;a++)if(i=ee.getNext(i,"tr")){for(o=e;o>=0;o--)if(l=K[t+a][o].elm,l.parentNode==i){for(s=1;s<=r;s++)ee.insertAfter(E(l),l);break}if(o==-1)for(s=1;s<=r;s++)i.insertBefore(E(i.cells[0]),i.cells[0])}}function k(){o(K,function(e,t){o(e,function(e,n){var r,i,o;if(x(e)&&(e=e.elm,r=a(e,"colspan"),i=a(e,"rowspan"),r>1||i>1)){for(s(e,"rowSpan",1),s(e,"colSpan",1),o=0;on)&&r.push(e[i]);return r}function R(t){return e.grep(t,function(e){return e.real===!1})}function A(e){for(var t=[],n=0;n1&&(N=1),s(h,"colSpan",w),s(h,"rowSpan",N),f=l;f<=u;f++)for(d=a;d<=c;d++)K[f]&&K[f][d]&&(t=K[f][d].elm,t!=h&&(g=e.grep(t.childNodes),o(g,function(e){h.appendChild(e)}),g.length&&(g=e.grep(h.childNodes),v=0,o(g,function(e){"BR"==e.nodeName&&v++0&&K[n-1][l]&&(f=K[n-1][l].elm,h=a(f,"rowSpan"),h>1)){s(f,"rowSpan",h+1);continue}}else if(h=a(r,"rowspan"),h>1){s(r,"rowSpan",h+1);continue}d=E(r),s(d,"colSpan",r.colSpan),u.appendChild(d),i=r}u.hasChildNodes()&&(e?c.parentNode.insertBefore(u,c):ee.insertAfter(u,c))}}function P(e){var t,n;o(K,function(n){if(o(n,function(n,r){if(x(n)&&(t=r,e))return!1}),e)return!t}),o(K,function(r,i){var o,l,c;r[t]&&(o=r[t].elm,o!=n&&(c=a(o,"colspan"),l=a(o,"rowspan"),1==c?e?(o.parentNode.insertBefore(E(o),o),S(t,i,l-1,c)):(ee.insertAfter(E(o),o),S(t,i,l-1,c)):s(o,"colSpan",o.colSpan+1),n=o))})}function O(t){return e.grep(H(t),x)}function H(e){var t=[];return o(e,function(e){o(e,function(e){t.push(e)})}),t}function I(){var t=[];if(f(c)){if(1==K[0].length)return;if(O(K).length==H(K).length)return}o(K,function(n){o(n,function(n,r){x(n)&&e.inArray(t,r)===-1&&(o(K,function(e){var t,n=e[r].elm;t=a(n,"colSpan"),t>1?s(n,"colSpan",t-1):ee.remove(n)}),t.push(r))})}),_()}function F(){function e(e){var t,n;o(e.cells,function(e){var n=a(e,"rowSpan");n>1&&(s(e,"rowSpan",n-1),t=V(e),S(t.x,t.y,1,1))}),t=V(e.cells[0]),o(K[t.y],function(e){var t;e=e.elm,e!=n&&(t=a(e,"rowSpan"),t<=1?ee.remove(e):s(e,"rowSpan",t-1),n=e)})}var t;t=w(),f(c)&&t.length==c.rows.length||(o(t.reverse(),function(t){e(t)}),_())}function z(){var e=w();if(!f(c)||e.length!=c.rows.length)return ee.remove(e),_(),e}function U(){var e=w();return o(e,function(t,n){e[n]=v(t,!0)}),e}function W(t,n){var r,a,l;t&&(r=i.splitAt(K,J.x,J.y,n),a=r.row,e.each(r.cells,g),l=e.map(t,function(e){return e.cloneNode(!0)}),n||l.reverse(),o(l,function(e){var t,r,i=e.cells.length;for(m(e),t=0;te&&(e=i),r>t&&(t=r),n.real&&(o=n.colspan-1,a=n.rowspan-1,o&&i+o>e&&(e=i+o),a&&r+a>t&&(t=r+a)))})}),{x:e,y:t}}function j(e){var t,n,r,i,o,a,s,l,c,u;if(Q=V(e),J&&Q){for(t=Math.min(J.x,Q.x),n=Math.min(J.y,Q.y),r=Math.max(J.x,Q.x),i=Math.max(J.y,Q.y),o=r,a=i,u=n;u<=i;u++)for(c=t;c<=r;c++)e=K[u][c],e.real&&(s=e.colspan-1,l=e.rowspan-1,s&&c+s>o&&(o=c+s),l&&u+l>a&&(a=u+l));for(d(),u=n;u<=a;u++)for(c=t;c<=o;c++)K[u][c]&&ee.setAttrib(K[u][c].elm,"data-mce-selected","1")}}function Y(e,t){var n,r,i;n=V(e),r=n.y*G+n.x;do{if(r+=t,i=y(r%G,Math.floor(r/G)),!i)break;if(i.elm!=e)return Z.select(i.elm,!0),ee.isEmpty(i.elm)&&Z.collapse(!0),!0}while(i.elm==e);return!1}function X(t){if(J){var n=i.splitAt(K,J.x,J.y,t);e.each(n.cells,g)}}var K,G,J,Q,Z=l.selection,ee=Z.dom;c=c||ee.getParent(Z.getStart(!0),"table"),p(),u=u||ee.getParent(Z.getStart(!0),"th,td"),u&&(J=V(u),Q=q(),u=y(J.x,J.y)),e.extend(this,{deleteTable:N,split:k,merge:L,insertRow:M,insertCol:P,splitCols:X,deleteCols:I,deleteRows:F,cutRows:z,copyRows:U,pasteRows:W,getPos:V,setStartCell:$,setEndCell:j,moveRelIdx:Y,refresh:p})}}),r("tinymce/tableplugin/Quirks",["tinymce/util/VK","tinymce/util/Delay","tinymce/Env","tinymce/util/Tools","tinymce/tableplugin/Utils"],function(e,t,n,r,i){var o=r.each,a=i.getSpanVal;return function(s){function l(){function n(n){function r(e,t){var r=e?"previousSibling":"nextSibling",o=s.dom.getParent(t,"tr"),a=o[r];if(a)return v(s,t,a,e),n.preventDefault(),!0;var l=s.dom.getParent(o,"table"),d=o.parentNode,f=d.nodeName.toLowerCase();if("tbody"===f||f===(e?"tfoot":"thead")){var h=i(e,l,d,"tbody");if(null!==h)return c(e,h,t)}return u(e,o,r,l)}function i(e,t,n,r){var i=s.dom.select(">"+r,t),o=i.indexOf(n);if(e&&0===o||!e&&o===i.length-1)return l(e,t);if(o===-1){var a="thead"===n.tagName.toLowerCase()?0:i.length-1;return i[a]}return i[o+(e?-1:1)]}function l(e,t){var n=e?"thead":"tfoot",r=s.dom.select(">"+n,t);return 0!==r.length?r[0]:null}function c(e,t,r){var i=d(t,e);return i&&v(s,r,i,e),n.preventDefault(),!0}function u(e,t,i,o){var a=o[i];if(a)return f(a),!0;var l=s.dom.getParent(o,"td,th");if(l)return r(e,l,n);var c=d(t,!e);return f(c),n.preventDefault(),!1}function d(e,t){var n=e&&e[t?"lastChild":"firstChild"];return n&&"BR"===n.nodeName?s.dom.getParent(n,"td,th"):n}function f(e){s.selection.setCursorLocation(e,0)}function h(){return C==e.UP||C==e.DOWN}function p(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"tr");return null!==n}function m(e){for(var t=0,n=e;n.previousSibling;)n=n.previousSibling,t+=a(n,"colspan");return t}function g(e,t){var n=0,r=0;return o(e.children,function(e,i){if(n+=a(e,"colspan"),r=i,n>t)return!1}),r}function v(e,t,n,r){var i=m(s.dom.getParent(t,"td,th")),o=g(n,i),a=n.childNodes[o],l=d(a,r);f(l||a)}function y(e){var t=s.selection.getNode(),n=s.dom.getParent(t,"td,th"),r=s.dom.getParent(e,"td,th");return n&&n!==r&&b(n,r)}function b(e,t){return s.dom.getParent(e,"TABLE")===s.dom.getParent(t,"TABLE")}var C=n.keyCode;if(h()&&p(s)){var x=s.selection.getNode();t.setEditorTimeout(s,function(){y(x)&&r(!n.shiftKey&&C===e.UP,x,n)},0)}}s.on("KeyDown",function(e){n(e)})}function c(){function e(e,t){var n,r=t.ownerDocument,i=r.createRange();return i.setStartBefore(t),i.setEnd(e.endContainer,e.endOffset),n=r.createElement("body"),n.appendChild(i.cloneContents()),0===n.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length}s.on("KeyDown",function(t){var n,r,i=s.dom;37!=t.keyCode&&38!=t.keyCode||(n=s.selection.getRng(),r=i.getParent(n.startContainer,"table"),r&&s.getBody().firstChild==r&&e(n,r)&&(n=i.createRng(),n.setStartBefore(r),n.setEndBefore(r),s.selection.setRng(n),t.preventDefault()))})}function u(){s.on("KeyDown SetContent VisualAid",function(){var e;for(e=s.getBody().lastChild;e;e=e.previousSibling)if(3==e.nodeType){if(e.nodeValue.length>0)break}else if(1==e.nodeType&&("BR"==e.tagName||!e.getAttribute("data-mce-bogus")))break;e&&"TABLE"==e.nodeName&&(s.settings.forced_root_block?s.dom.add(s.getBody(),s.settings.forced_root_block,s.settings.forced_root_block_attrs,n.ie&&n.ie<10?" ":'
'):s.dom.add(s.getBody(),"br",{"data-mce-bogus":"1"}))}),s.on("PreProcess",function(e){var t=e.node.lastChild;t&&("BR"==t.nodeName||1==t.childNodes.length&&("BR"==t.firstChild.nodeName||"\xa0"==t.firstChild.nodeValue))&&t.previousSibling&&"TABLE"==t.previousSibling.nodeName&&s.dom.remove(t)})}function d(){function e(e,t,n,r){var i,o,a,s=3,l=e.dom.getParent(t.startContainer,"TABLE");return l&&(i=l.parentNode),o=t.startContainer.nodeType==s&&0===t.startOffset&&0===t.endOffset&&r&&("TR"==n.nodeName||n==i),a=("TD"==n.nodeName||"TH"==n.nodeName)&&!r,o||a}function t(){var t=s.selection.getRng(),n=s.selection.getNode(),r=s.dom.getParent(t.startContainer,"TD,TH");if(e(s,t,n,r)){r||(r=n);for(var i=r.lastChild;i.lastChild;)i=i.lastChild;3==i.nodeType&&(t.setEnd(i,i.data.length),s.selection.setRng(t))}}s.on("KeyDown",function(){t()}),s.on("MouseDown",function(e){2!=e.button&&t()})}function f(){function t(e){s.selection.select(e,!0),s.selection.collapse(!0)}function n(e){s.$(e).empty(),i.paddCell(e)}s.on("keydown",function(i){if((i.keyCode==e.DELETE||i.keyCode==e.BACKSPACE)&&!i.isDefaultPrevented()){var o,a,l,c;if(o=s.dom.getParent(s.selection.getStart(),"table")){if(a=s.dom.select("td,th",o),l=r.grep(a,function(e){return!!s.dom.getAttrib(e,"data-mce-selected")}),0===l.length)return c=s.dom.getParent(s.selection.getStart(),"td,th"),void(s.selection.isCollapsed()&&c&&s.dom.isEmpty(c)&&(i.preventDefault(),n(c),t(c)));i.preventDefault(),s.undoManager.transact(function(){a.length==l.length?s.execCommand("mceTableDelete"):(r.each(l,n),t(l[0]))})}}})}f(),n.webkit&&(l(),d()),n.gecko&&(c(),u()),n.ie>9&&(c(),u())}}),r("tinymce/tableplugin/CellSelection",["tinymce/tableplugin/TableGrid","tinymce/dom/TreeWalker","tinymce/util/Tools"],function(e,t,n){return function(r,i){function o(e){r.getBody().style.webkitUserSelect="",(e||m)&&(r.$("td[data-mce-selected],th[data-mce-selected]").removeAttr("data-mce-selected"),m=!1)}function a(e,t){return!(!e||!t)&&e===p.getParent(t,"table")}function s(t){var n,o,s=t.target;if(!f&&!h&&s!==d&&(d=s,u&&c)){if(o=p.getParent(s,"td,th"),a(u,o)||(o=p.getParent(u,"td,th")),c===o&&!m)return;if(i(!0),a(u,o)){t.preventDefault(),l||(l=new e(r,u,c),r.getBody().style.webkitUserSelect="none"),l.setEndCell(o),m=!0,n=r.selection.getSel();try{n.removeAllRanges?n.removeAllRanges():n.empty()}catch(e){}}}}var l,c,u,d,f,h,p=r.dom,m=!0,g=function(){c=l=u=d=null,i(!1)};return r.on("SelectionChange",function(e){m&&e.stopImmediatePropagation()},!0),r.on("MouseDown",function(e){2==e.button||f||h||(o(),c=p.getParent(e.target,"td,th"),u=p.getParent(c,"table"))}),r.on("mouseover",s),r.on("remove",function(){p.unbind(r.getDoc(),"mouseover",s),o()}),r.on("MouseUp",function(){function e(e,r){var o=new t(e,e);do{if(3==e.nodeType&&0!==n.trim(e.nodeValue).length)return void(r?i.setStart(e,0):i.setEnd(e,e.nodeValue.length));if("BR"==e.nodeName)return void(r?i.setStartBefore(e):i.setEndBefore(e))}while(e=r?o.next():o.prev())}var i,o,a,s,u,d=r.selection;if(c){if(l&&(r.getBody().style.webkitUserSelect=""),o=p.select("td[data-mce-selected],th[data-mce-selected]"),o.length>0){i=p.createRng(),s=o[0],i.setStartBefore(s),i.setEndAfter(s),e(s,1),a=new t(s,p.getParent(o[0],"table"));do if("TD"==s.nodeName||"TH"==s.nodeName){if(!p.getAttrib(s,"data-mce-selected"))break;u=s}while(s=a.next());e(u),d.setRng(i)}r.nodeChanged(),g()}}),r.on("KeyUp Drop SetContent",function(e){o("setcontent"==e.type),g(),f=!1}),r.on("ObjectResizeStart ObjectResized",function(e){f="objectresized"!=e.type}),r.on("dragstart",function(){h=!0}),r.on("drop dragend",function(){h=!1}),{clear:o}}}),r("tinymce/tableplugin/Dialogs",["tinymce/util/Tools","tinymce/Env"],function(e,t){var n=e.each;return function(r){function i(){var e=r.settings.color_picker_callback;if(e)return function(){var t=this;e.call(r,function(e){t.value(e).fire("change")},t.value())}}function o(e){return{title:"Advanced",type:"form",defaults:{onchange:function(){d(e,this.parents().reverse()[0],"style"==this.name())}},items:[{label:"Style",name:"style",type:"textbox"},{type:"form",padding:0,formItemDefaults:{layout:"grid",alignH:["start","right"]},defaults:{size:7},items:[{label:"Border color",type:"colorbox",name:"borderColor",onaction:i()},{label:"Background color",type:"colorbox",name:"backgroundColor",onaction:i()}]}]}}function a(e){return e?e.replace(/px$/,""):""}function s(e){return/^[0-9]+$/.test(e)&&(e+="px"),e}function l(e){n("left center right".split(" "),function(t){r.formatter.remove("align"+t,{},e)})}function c(e){n("top middle bottom".split(" "),function(t){r.formatter.remove("valign"+t,{},e)})}function u(t,n,r){function i(t,r){return r=r||[],e.each(t,function(e){var t={text:e.text||e.title};e.menu?t.menu=i(e.menu):(t.value=e.value,n&&n(t)),r.push(t)}),r}return i(t,r||[])}function d(e,t,n){var r=t.toJSON(),i=e.parseStyle(r.style);n?(t.find("#borderColor").value(i["border-color"]||"")[0].fire("change"),t.find("#backgroundColor").value(i["background-color"]||"")[0].fire("change")):(i["border-color"]=r.borderColor,i["background-color"]=r.backgroundColor),t.find("#style").value(e.serializeStyle(e.parseStyle(e.serializeStyle(i))))}function f(e,t,n){var r=e.parseStyle(e.getAttrib(n,"style"));r["border-color"]&&(t.borderColor=r["border-color"]),r["background-color"]&&(t.backgroundColor=r["background-color"]),t.style=e.serializeStyle(r)}function h(e,t,r){var i=e.parseStyle(e.getAttrib(t,"style"));n(r,function(e){i[e.name]=e.value}),e.setAttrib(t,"style",e.serializeStyle(e.parseStyle(e.serializeStyle(i))))}var p=this;p.tableProps=function(){p.table(!0)},p.table=function(i){function c(){function n(e,t,r){if("TD"===e.tagName||"TH"===e.tagName)x.setStyle(e,t,r);else if(e.children)for(var i=0;i',m.insertBefore(i,m.firstChild)),l(m),w.align&&r.formatter.apply("align"+w.align,{},m),r.focus(),r.addVisual()})}function p(e,t){function n(e,n){for(var r=0;r0?b(o,a,r):[],u=s.length>0?b(f,h,s):[];N(c,e.offsetWidth,l),E(u,e.offsetHeight,l)}function D(e,t,n,r){if(t<0||t>=e.length-1)return"";var i=e[t];if(i)i={value:i,delta:0};else for(var o=e.slice(0,t).reverse(),a=0;a0?i:o}function P(t,n,r){for(var i=R(t),o=e.map(i,function(e){return f(e.colIndex,e.element).x}),a=[],s=0;s1?D(o,s):M(i[s].element,n,r);c=c?c:we,a.push(c)}return a}function O(e){var t=L(e,"height"),n=parseInt(t,10);return V(t)&&(n=0),!isNaN(n)&&n>0?n:m(e,"height")}function H(t){for(var n=A(t),r=e.map(n,function(e){return o(e.rowIndex,e.element).y}),i=[],a=0;a1?D(r,a):O(n[a].element);l=l?l:Ne,i.push(l)}return i}function I(t,n,r,i,o){function a(t){return e.map(t,function(){return 0})}function s(){var e;if(o)e=[100-d[0]];else{var t=Math.max(i,d[0]+r);e=[t-d[0]]}return e}function l(e,t){var n,o=a(d.slice(0,e)),s=a(d.slice(t+1));if(r>=0){var l=Math.max(i,d[t]-r);n=o.concat([r,l-d[t]]).concat(s)}else{var c=Math.max(i,d[e]+r),u=d[e]-c;n=o.concat([c-d[e],u]).concat(s); +}return n}function c(e,t){var n,o=a(d.slice(0,t));if(r>=0)n=o.concat([r]);else{var s=Math.max(i,d[t]+r);n=o.concat([s-d[t]])}return n}var u,d=t.slice(0);return u=0===t.length?[]:1===t.length?s():0===n?l(0,1):n>0&&n",r=0;r"+(s.ie&&s.ie<10?" ":"
")+"";i+="
",o.undoManager.transact(function(){o.insertContent(i),a=o.dom.get("__mce"),o.dom.setAttrib(a,"id",null),o.$("tr",a).each(function(e,t){o.fire("newrow",{node:t}),o.$("th,td",t).each(function(e,t){o.fire("newcell",{node:t})})}),o.dom.setAttribs(a,o.settings.table_default_attributes||{}),o.dom.setStyles(a,o.settings.table_default_styles||{})}),a}function c(e,t,n){function r(){var r,i,a,s={},l=0;i=o.dom.select("td[data-mce-selected],th[data-mce-selected]"),r=i[0],r||(r=o.selection.getStart()),n&&i.length>0?(u(i,function(e){return s[e.parentNode.parentNode.nodeName]=1}),u(s,function(e){l+=e}),a=1!==l):a=!o.dom.getParent(r,t),e.disabled(a),o.selection.selectorChanged(t,function(t){e.disabled(!t)})}o.initialized?r():o.on("init",r)}function d(){c(this,"table")}function f(){c(this,"td,th")}function h(){c(this,"td,th",!0)}function p(){var e="";e='';for(var t=0;t<10;t++){e+="";for(var n=0;n<10;n++)e+='';e+=""}return e+="
",e+=''}function m(e,t,n){var r,i,a,s,l,c=n.getEl().getElementsByTagName("table")[0],u=n.isRtl()||"tl-tr"==n.parent().rel;for(c.nextSibling.innerHTML=e+1+" x "+(t+1),u&&(e=9-e),i=0;i<10;i++)for(r=0;r<10;r++)s=c.rows[i].childNodes[r].firstChild,l=(u?r>=e:r<=e)&&i<=t,o.dom.toggleClass(s,"mce-active",l),l&&(a=s);return a.parentNode}function g(){o.addButton("tableprops",{title:"Table properties",onclick:E.tableProps,icon:"table"}),o.addButton("tabledelete",{title:"Delete table",onclick:a("mceTableDelete")}),o.addButton("tablecellprops",{title:"Cell properties",onclick:a("mceTableCellProps")}),o.addButton("tablemergecells",{title:"Merge cells",onclick:a("mceTableMergeCells")}),o.addButton("tablesplitcells",{title:"Split cell",onclick:a("mceTableSplitCells")}),o.addButton("tableinsertrowbefore",{title:"Insert row before",onclick:a("mceTableInsertRowBefore")}),o.addButton("tableinsertrowafter",{title:"Insert row after",onclick:a("mceTableInsertRowAfter")}),o.addButton("tabledeleterow",{title:"Delete row",onclick:a("mceTableDeleteRow")}),o.addButton("tablerowprops",{title:"Row properties",onclick:a("mceTableRowProps")}),o.addButton("tablecutrow",{title:"Cut row",onclick:a("mceTableCutRow")}),o.addButton("tablecopyrow",{title:"Copy row",onclick:a("mceTableCopyRow")}),o.addButton("tablepasterowbefore",{title:"Paste row before",onclick:a("mceTablePasteRowBefore")}),o.addButton("tablepasterowafter",{title:"Paste row after",onclick:a("mceTablePasteRowAfter")}),o.addButton("tableinsertcolbefore",{title:"Insert column before",onclick:a("mceTableInsertColBefore")}),o.addButton("tableinsertcolafter",{title:"Insert column after",onclick:a("mceTableInsertColAfter")}),o.addButton("tabledeletecol",{title:"Delete column",onclick:a("mceTableDeleteCol")})}function v(e){var t=o.dom.is(e,"table")&&o.getBody().contains(e);return t}function y(){var e=o.settings.table_toolbar;""!==e&&e!==!1&&(e||(e="tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol"),o.addContextToolbar(v,e))}function b(){return x}function C(e){x=e}var x,w,N=this,E=new r(o);!o.settings.object_resizing||o.settings.table_resize_bars===!1||o.settings.object_resizing!==!0&&"table"!==o.settings.object_resizing||(w=i(o)),o.settings.table_grid===!1?o.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",onclick:E.table}):o.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",ariaHideMenu:!0,onclick:function(e){e.aria&&(this.parent().hideAll(),e.stopImmediatePropagation(),E.table())},onshow:function(){m(0,0,this.menu.items()[0])},onhide:function(){var e=this.menu.items()[0].getEl().getElementsByTagName("a");o.dom.removeClass(e,"mce-active"),o.dom.addClass(e[0],"mce-active")},menu:[{type:"container",html:p(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(e){var t,n,r=e.target;"A"==r.tagName.toUpperCase()&&(t=parseInt(r.getAttribute("data-mce-x"),10),n=parseInt(r.getAttribute("data-mce-y"),10),(this.isRtl()||"tl-tr"==this.parent().rel)&&(t=9-t),t===this.lastX&&n===this.lastY||(m(t,n,e.control),this.lastX=t,this.lastY=n))},onclick:function(e){var t=this;"A"==e.target.tagName.toUpperCase()&&(e.preventDefault(),e.stopPropagation(),t.parent().cancel(),o.undoManager.transact(function(){l(t.lastX+1,t.lastY+1)}),o.addVisual())}}]}),o.addMenuItem("tableprops",{text:"Table properties",context:"table",onPostRender:d,onclick:E.tableProps}),o.addMenuItem("deletetable",{text:"Delete table",context:"table",onPostRender:d,cmd:"mceTableDelete"}),o.addMenuItem("cell",{separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:a("mceTableCellProps"),onPostRender:f},{text:"Merge cells",onclick:a("mceTableMergeCells"),onPostRender:h},{text:"Split cell",onclick:a("mceTableSplitCells"),onPostRender:f}]}),o.addMenuItem("row",{text:"Row",context:"table",menu:[{text:"Insert row before",onclick:a("mceTableInsertRowBefore"),onPostRender:f},{text:"Insert row after",onclick:a("mceTableInsertRowAfter"),onPostRender:f},{text:"Delete row",onclick:a("mceTableDeleteRow"),onPostRender:f},{text:"Row properties",onclick:a("mceTableRowProps"),onPostRender:f},{text:"-"},{text:"Cut row",onclick:a("mceTableCutRow"),onPostRender:f},{text:"Copy row",onclick:a("mceTableCopyRow"),onPostRender:f},{text:"Paste row before",onclick:a("mceTablePasteRowBefore"),onPostRender:f},{text:"Paste row after",onclick:a("mceTablePasteRowAfter"),onPostRender:f}]}),o.addMenuItem("column",{text:"Column",context:"table",menu:[{text:"Insert column before",onclick:a("mceTableInsertColBefore"),onPostRender:f},{text:"Insert column after",onclick:a("mceTableInsertColAfter"),onPostRender:f},{text:"Delete column",onclick:a("mceTableDeleteCol"),onPostRender:f}]});var _=[];u("inserttable tableprops deletetable | cell row column".split(" "),function(e){"|"==e?_.push({text:"-"}):_.push(o.menuItems[e])}),o.addButton("table",{type:"menubutton",title:"Table",menu:_}),s.isIE||o.on("click",function(e){e=e.target,"TABLE"===e.nodeName&&(o.selection.select(e),o.nodeChanged())}),N.quirks=new t(o),o.on("Init",function(){N.cellSelection=new n(o,function(e){e&&w.clearBars()}),N.resizeBars=w}),o.on("PreInit",function(){o.serializer.addAttributeFilter("data-mce-cell-padding,data-mce-border,data-mce-border-color",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)})}),u({mceTableSplitCells:function(e){e.split()},mceTableMergeCells:function(e){var t;t=o.dom.getParent(o.selection.getStart(),"th,td"),o.dom.select("td[data-mce-selected],th[data-mce-selected]").length?e.merge():E.merge(e,t)},mceTableInsertRowBefore:function(e){e.insertRow(!0)},mceTableInsertRowAfter:function(e){e.insertRow()},mceTableInsertColBefore:function(e){e.insertCol(!0)},mceTableInsertColAfter:function(e){e.insertCol()},mceTableDeleteCol:function(e){e.deleteCols()},mceTableDeleteRow:function(e){e.deleteRows()},mceTableCutRow:function(e){x=e.cutRows()},mceTableCopyRow:function(e){x=e.copyRows()},mceTablePasteRowBefore:function(e){e.pasteRows(x,!0)},mceTablePasteRowAfter:function(e){e.pasteRows(x)},mceSplitColsBefore:function(e){e.splitCols(!0)},mceSplitColsAfter:function(e){e.splitCols(!1)},mceTableDelete:function(e){w&&w.clearBars(),e.deleteTable()}},function(t,n){o.addCommand(n,function(){var n=new e(o);n&&(t(n),o.execCommand("mceRepaint"),N.cellSelection.clear())})}),u({mceInsertTable:E.table,mceTableProps:function(){E.table(!0)},mceTableRowProps:E.row,mceTableCellProps:E.cell},function(e,t){o.addCommand(t,function(t,n){e(n)})}),g(),y(),o.settings.table_tab_navigation!==!1&&o.on("keydown",function(t){var n,r,i;9==t.keyCode&&(n=o.dom.getParent(o.selection.getStart(),"th,td"),n&&(t.preventDefault(),r=new e(o),i=t.shiftKey?-1:1,o.undoManager.transact(function(){!r.moveRelIdx(n,i)&&i>0&&(r.insertRow(),r.refresh(),r.moveRelIdx(n,i))})))}),N.insertTable=l,N.setClipboardRows=C,N.getClipboardRows=b}var u=o.each;l.add("table",c)})}(this); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/template/plugin.js b/public/mosaico/dist/vendor/plugins/template/plugin.js new file mode 100644 index 00000000..29db21bc --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/template/plugin.js @@ -0,0 +1,276 @@ +/** + * plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('template', function(editor) { + var each = tinymce.each; + + function createTemplateList(callback) { + return function() { + var templateList = editor.settings.templates; + + if (typeof templateList == "function") { + templateList(callback); + return; + } + + if (typeof templateList == "string") { + tinymce.util.XHR.send({ + url: templateList, + success: function(text) { + callback(tinymce.util.JSON.parse(text)); + } + }); + } else { + callback(templateList); + } + }; + } + + function showDialog(templateList) { + var win, values = [], templateHtml; + + if (!templateList || templateList.length === 0) { + var message = editor.translate('No templates defined.'); + editor.notificationManager.open({text: message, type: 'info'}); + return; + } + + tinymce.each(templateList, function(template) { + values.push({ + selected: !values.length, + text: template.title, + value: { + url: template.url, + content: template.content, + description: template.description + } + }); + }); + + function onSelectTemplate(e) { + var value = e.control.value(); + + function insertIframeHtml(html) { + if (html.indexOf('') == -1) { + var contentCssLinks = ''; + + tinymce.each(editor.contentCSS, function(url) { + contentCssLinks += ''; + }); + + var bodyClass = editor.settings.body_class || ''; + if (bodyClass.indexOf('=') != -1) { + bodyClass = editor.getParam('body_class', '', 'hash'); + bodyClass = bodyClass[editor.id] || ''; + } + + html = ( + '' + + '' + + '' + + contentCssLinks + + '' + + '' + + html + + '' + + '' + ); + } + + html = replaceTemplateValues(html, 'template_preview_replace_values'); + + var doc = win.find('iframe')[0].getEl().contentWindow.document; + doc.open(); + doc.write(html); + doc.close(); + } + + if (value.url) { + tinymce.util.XHR.send({ + url: value.url, + success: function(html) { + templateHtml = html; + insertIframeHtml(templateHtml); + } + }); + } else { + templateHtml = value.content; + insertIframeHtml(templateHtml); + } + + win.find('#description')[0].text(e.control.value().description); + } + + win = editor.windowManager.open({ + title: 'Insert template', + layout: 'flex', + direction: 'column', + align: 'stretch', + padding: 15, + spacing: 10, + + items: [ + {type: 'form', flex: 0, padding: 0, items: [ + {type: 'container', label: 'Templates', items: { + type: 'listbox', label: 'Templates', name: 'template', values: values, onselect: onSelectTemplate + }} + ]}, + {type: 'label', name: 'description', label: 'Description', text: '\u00a0'}, + {type: 'iframe', flex: 1, border: 1} + ], + + onsubmit: function() { + insertTemplate(false, templateHtml); + }, + + minWidth: Math.min(tinymce.DOM.getViewPort().w, editor.getParam('template_popup_width', 600)), + minHeight: Math.min(tinymce.DOM.getViewPort().h, editor.getParam('template_popup_height', 500)) + }); + + win.find('listbox')[0].fire('select'); + } + + function getDateTime(fmt, date) { + var daysShort = "Sun Mon Tue Wed Thu Fri Sat Sun".split(' '); + var daysLong = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(' '); + var monthsShort = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(' '); + var monthsLong = "January February March April May June July August September October November December".split(' '); + + function addZeros(value, len) { + value = "" + value; + + if (value.length < len) { + for (var i = 0; i < (len - value.length); i++) { + value = "0" + value; + } + } + + return value; + } + + date = date || new Date(); + + fmt = fmt.replace("%D", "%m/%d/%Y"); + fmt = fmt.replace("%r", "%I:%M:%S %p"); + fmt = fmt.replace("%Y", "" + date.getFullYear()); + fmt = fmt.replace("%y", "" + date.getYear()); + fmt = fmt.replace("%m", addZeros(date.getMonth() + 1, 2)); + fmt = fmt.replace("%d", addZeros(date.getDate(), 2)); + fmt = fmt.replace("%H", "" + addZeros(date.getHours(), 2)); + fmt = fmt.replace("%M", "" + addZeros(date.getMinutes(), 2)); + fmt = fmt.replace("%S", "" + addZeros(date.getSeconds(), 2)); + fmt = fmt.replace("%I", "" + ((date.getHours() + 11) % 12 + 1)); + fmt = fmt.replace("%p", "" + (date.getHours() < 12 ? "AM" : "PM")); + fmt = fmt.replace("%B", "" + editor.translate(monthsLong[date.getMonth()])); + fmt = fmt.replace("%b", "" + editor.translate(monthsShort[date.getMonth()])); + fmt = fmt.replace("%A", "" + editor.translate(daysLong[date.getDay()])); + fmt = fmt.replace("%a", "" + editor.translate(daysShort[date.getDay()])); + fmt = fmt.replace("%%", "%"); + + return fmt; + } + + function replaceVals(e) { + var dom = editor.dom, vl = editor.getParam('template_replace_values'); + + each(dom.select('*', e), function(e) { + each(vl, function(v, k) { + if (dom.hasClass(e, k)) { + if (typeof vl[k] == 'function') { + vl[k](e); + } + } + }); + }); + } + + function replaceTemplateValues(html, templateValuesOptionName) { + each(editor.getParam(templateValuesOptionName), function(v, k) { + if (typeof v == 'function') { + v = v(k); + } + + html = html.replace(new RegExp('\\{\\$' + k + '\\}', 'g'), v); + }); + + return html; + } + + function insertTemplate(ui, html) { + var el, n, dom = editor.dom, sel = editor.selection.getContent(); + + html = replaceTemplateValues(html, 'template_replace_values'); + el = dom.create('div', null, html); + + // Find template element within div + n = dom.select('.mceTmpl', el); + if (n && n.length > 0) { + el = dom.create('div', null); + el.appendChild(n[0].cloneNode(true)); + } + + function hasClass(n, c) { + return new RegExp('\\b' + c + '\\b', 'g').test(n.className); + } + + each(dom.select('*', el), function(n) { + // Replace cdate + if (hasClass(n, editor.getParam('template_cdate_classes', 'cdate').replace(/\s+/g, '|'))) { + n.innerHTML = getDateTime(editor.getParam("template_cdate_format", editor.getLang("template.cdate_format"))); + } + + // Replace mdate + if (hasClass(n, editor.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|'))) { + n.innerHTML = getDateTime(editor.getParam("template_mdate_format", editor.getLang("template.mdate_format"))); + } + + // Replace selection + if (hasClass(n, editor.getParam('template_selected_content_classes', 'selcontent').replace(/\s+/g, '|'))) { + n.innerHTML = sel; + } + }); + + replaceVals(el); + + editor.execCommand('mceInsertContent', false, el.innerHTML); + editor.addVisual(); + } + + editor.addCommand('mceInsertTemplate', insertTemplate); + + editor.addButton('template', { + title: 'Insert template', + onclick: createTemplateList(showDialog) + }); + + editor.addMenuItem('template', { + text: 'Insert template', + onclick: createTemplateList(showDialog), + context: 'insert' + }); + + editor.on('PreProcess', function(o) { + var dom = editor.dom; + + each(dom.select('div', o.node), function(e) { + if (dom.hasClass(e, 'mceTmpl')) { + each(dom.select('*', e), function(e) { + if (dom.hasClass(e, editor.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|'))) { + e.innerHTML = getDateTime(editor.getParam("template_mdate_format", editor.getLang("template.mdate_format"))); + } + }); + + replaceVals(e); + } + }); + }); +}); diff --git a/public/mosaico/dist/vendor/plugins/template/plugin.min.js b/public/mosaico/dist/vendor/plugins/template/plugin.min.js new file mode 100644 index 00000000..9f7753e5 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/template/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("template",function(e){function t(t){return function(){var n=e.settings.templates;return"function"==typeof n?void n(t):void("string"==typeof n?tinymce.util.XHR.send({url:n,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(n))}}function n(t){function n(t){function n(t){if(t.indexOf("")==-1){var n="";tinymce.each(e.contentCSS,function(t){n+=''});var i=e.settings.body_class||"";i.indexOf("=")!=-1&&(i=e.getParam("body_class","","hash"),i=i[e.id]||""),t=""+n+''+t+""}t=o(t,"template_preview_replace_values");var a=r.find("iframe")[0].getEl().contentWindow.document;a.open(),a.write(t),a.close()}var a=t.control.value();a.url?tinymce.util.XHR.send({url:a.url,success:function(e){i=e,n(i)}}):(i=a.content,n(i)),r.find("#description")[0].text(t.control.value().description)}var r,i,s=[];if(!t||0===t.length){var l=e.translate("No templates defined.");return void e.notificationManager.open({text:l,type:"info"})}tinymce.each(t,function(e){s.push({selected:!s.length,text:e.title,value:{url:e.url,content:e.content,description:e.description}})}),r=e.windowManager.open({title:"Insert template",layout:"flex",direction:"column",align:"stretch",padding:15,spacing:10,items:[{type:"form",flex:0,padding:0,items:[{type:"container",label:"Templates",items:{type:"listbox",label:"Templates",name:"template",values:s,onselect:n}}]},{type:"label",name:"description",label:"Description",text:"\xa0"},{type:"iframe",flex:1,border:1}],onsubmit:function(){a(!1,i)},minWidth:Math.min(tinymce.DOM.getViewPort().w,e.getParam("template_popup_width",600)),minHeight:Math.min(tinymce.DOM.getViewPort().h,e.getParam("template_popup_height",500))}),r.find("listbox")[0].fire("select")}function r(t,n){function r(e,t){if(e=""+e,e.length0&&(l=u.create("div",null),l.appendChild(c[0].cloneNode(!0))),s(u.select("*",l),function(t){a(t,e.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))&&(t.innerHTML=r(e.getParam("template_cdate_format",e.getLang("template.cdate_format")))),a(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=r(e.getParam("template_mdate_format",e.getLang("template.mdate_format")))),a(t,e.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))&&(t.innerHTML=d)}),i(l),e.execCommand("mceInsertContent",!1,l.innerHTML),e.addVisual()}var s=tinymce.each;e.addCommand("mceInsertTemplate",a),e.addButton("template",{title:"Insert template",onclick:t(n)}),e.addMenuItem("template",{text:"Insert template",onclick:t(n),context:"insert"}),e.on("PreProcess",function(t){var n=e.dom;s(n.select("div",t.node),function(t){n.hasClass(t,"mceTmpl")&&(s(n.select("*",t),function(t){n.hasClass(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=r(e.getParam("template_mdate_format",e.getLang("template.mdate_format"))))}),i(t))})})}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/textcolor/plugin.js b/public/mosaico/dist/vendor/plugins/textcolor/plugin.js new file mode 100644 index 00000000..145afb17 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/textcolor/plugin.js @@ -0,0 +1,297 @@ +/** + * plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ +/*eslint consistent-this:0 */ + +tinymce.PluginManager.add('textcolor', function(editor) { + var cols, rows; + + rows = { + forecolor: editor.settings.forecolor_rows || editor.settings.textcolor_rows || 5, + backcolor: editor.settings.backcolor_rows || editor.settings.textcolor_rows || 5 + }; + cols = { + forecolor: editor.settings.forecolor_cols || editor.settings.textcolor_cols || 8, + backcolor: editor.settings.backcolor_cols || editor.settings.textcolor_cols || 8 + }; + + function getCurrentColor(format) { + var color; + + editor.dom.getParents(editor.selection.getStart(), function(elm) { + var value; + + if ((value = elm.style[format == 'forecolor' ? 'color' : 'background-color'])) { + color = value; + } + }); + + return color; + } + + function mapColors(type) { + var i, colors = [], colorMap; + + colorMap = [ + "000000", "Black", + "993300", "Burnt orange", + "333300", "Dark olive", + "003300", "Dark green", + "003366", "Dark azure", + "000080", "Navy Blue", + "333399", "Indigo", + "333333", "Very dark gray", + "800000", "Maroon", + "FF6600", "Orange", + "808000", "Olive", + "008000", "Green", + "008080", "Teal", + "0000FF", "Blue", + "666699", "Grayish blue", + "808080", "Gray", + "FF0000", "Red", + "FF9900", "Amber", + "99CC00", "Yellow green", + "339966", "Sea green", + "33CCCC", "Turquoise", + "3366FF", "Royal blue", + "800080", "Purple", + "999999", "Medium gray", + "FF00FF", "Magenta", + "FFCC00", "Gold", + "FFFF00", "Yellow", + "00FF00", "Lime", + "00FFFF", "Aqua", + "00CCFF", "Sky blue", + "993366", "Red violet", + "FFFFFF", "White", + "FF99CC", "Pink", + "FFCC99", "Peach", + "FFFF99", "Light yellow", + "CCFFCC", "Pale green", + "CCFFFF", "Pale cyan", + "99CCFF", "Light sky blue", + "CC99FF", "Plum" + ]; + + colorMap = editor.settings.textcolor_map || colorMap; + colorMap = editor.settings[type + '_map'] || colorMap; + + for (i = 0; i < colorMap.length; i += 2) { + colors.push({ + text: colorMap[i + 1], + color: '#' + colorMap[i] + }); + } + + return colors; + } + + function renderColorPicker() { + var ctrl = this, colors, color, html, last, x, y, i, id = ctrl._id, count = 0, type; + + type = ctrl.settings.origin; + + function getColorCellHtml(color, title) { + var isNoColor = color == 'transparent'; + + return ( + '' + + '
' + + (isNoColor ? '×' : '') + + '
' + + '' + ); + } + + colors = mapColors(type); + colors.push({ + text: tinymce.translate("No color"), + color: "transparent" + }); + + html = ''; + last = colors.length - 1; + + for (y = 0; y < rows[type]; y++) { + html += ''; + + for (x = 0; x < cols[type]; x++) { + i = y * cols[type] + x; + + if (i > last) { + html += ''; + } else { + color = colors[i]; + html += getColorCellHtml(color.color, color.text); + } + } + + html += ''; + } + + if (editor.settings.color_picker_callback) { + html += ( + '' + + '' + + '' + ); + + html += ''; + + for (x = 0; x < cols[type]; x++) { + html += getColorCellHtml('', 'Custom color'); + } + + html += ''; + } + + html += '
' + + '
' + + '' + + '
' + + '
'; + + return html; + } + + function applyFormat(format, value) { + editor.undoManager.transact(function() { + editor.focus(); + editor.formatter.apply(format, {value: value}); + editor.nodeChanged(); + }); + } + + function removeFormat(format) { + editor.undoManager.transact(function() { + editor.focus(); + editor.formatter.remove(format, {value: null}, null, true); + editor.nodeChanged(); + }); + } + + function onPanelClick(e) { + var buttonCtrl = this.parent(), value, type; + + type = buttonCtrl.settings.origin; + + function selectColor(value) { + buttonCtrl.hidePanel(); + buttonCtrl.color(value); + applyFormat(buttonCtrl.settings.format, value); + } + + function resetColor() { + buttonCtrl.hidePanel(); + buttonCtrl.resetColor(); + removeFormat(buttonCtrl.settings.format); + } + + function setDivColor(div, value) { + div.style.background = value; + div.setAttribute('data-mce-color', value); + } + + if (tinymce.DOM.getParent(e.target, '.mce-custom-color-btn')) { + buttonCtrl.hidePanel(); + + editor.settings.color_picker_callback.call(editor, function(value) { + var tableElm = buttonCtrl.panel.getEl().getElementsByTagName('table')[0]; + var customColorCells, div, i; + + customColorCells = tinymce.map(tableElm.rows[tableElm.rows.length - 1].childNodes, function(elm) { + return elm.firstChild; + }); + + for (i = 0; i < customColorCells.length; i++) { + div = customColorCells[i]; + if (!div.getAttribute('data-mce-color')) { + break; + } + } + + // Shift colors to the right + // TODO: Might need to be the left on RTL + if (i == cols[type]) { + for (i = 0; i < cols[type] - 1; i++) { + setDivColor(customColorCells[i], customColorCells[i + 1].getAttribute('data-mce-color')); + } + } + + setDivColor(div, value); + selectColor(value); + }, getCurrentColor(buttonCtrl.settings.format)); + } + + value = e.target.getAttribute('data-mce-color'); + if (value) { + if (this.lastId) { + document.getElementById(this.lastId).setAttribute('aria-selected', false); + } + + e.target.setAttribute('aria-selected', true); + this.lastId = e.target.id; + + if (value == 'transparent') { + resetColor(); + } else { + selectColor(value); + } + } else if (value !== null) { + buttonCtrl.hidePanel(); + } + } + + function onButtonClick() { + var self = this; + + if (self._color) { + applyFormat(self.settings.format, self._color); + } else { + removeFormat(self.settings.format); + } + } + + editor.addButton('forecolor', { + type: 'colorbutton', + tooltip: 'Text color', + format: 'forecolor', + panel: { + origin: 'forecolor', + role: 'application', + ariaRemember: true, + html: renderColorPicker, + onclick: onPanelClick + }, + onclick: onButtonClick + }); + + editor.addButton('backcolor', { + type: 'colorbutton', + tooltip: 'Background color', + format: 'hilitecolor', + panel: { + origin: 'backcolor', + role: 'application', + ariaRemember: true, + html: renderColorPicker, + onclick: onPanelClick + }, + onclick: onButtonClick + }); +}); diff --git a/public/mosaico/dist/vendor/plugins/textcolor/plugin.min.js b/public/mosaico/dist/vendor/plugins/textcolor/plugin.min.js new file mode 100644 index 00000000..938d1e05 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/textcolor/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("textcolor",function(e){function t(t){var n;return e.dom.getParents(e.selection.getStart(),function(e){var r;(r=e.style["forecolor"==t?"color":"background-color"])&&(n=r)}),n}function n(t){var n,r,i=[];for(r=["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","FFFFFF","White","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum"],r=e.settings.textcolor_map||r,r=e.settings[t+"_map"]||r,n=0;n
'+(n?"×":"")+"
"}var r,i,o,a,s,u,d,f,h=this,p=h._id,m=0;for(f=h.settings.origin,r=n(f),r.push({text:tinymce.translate("No color"),color:"transparent"}),o='',a=r.length-1,u=0;u",s=0;sa?o+="":(i=r[d],o+=t(i.color,i.text));o+=""}if(e.settings.color_picker_callback){for(o+='",o+="",s=0;s b.start.length) { + return -1; + } + + if (a.start.length < b.start.length) { + return 1; + } + + return 0; + }); + + isPatternsDirty = false; + } + + return patterns; + } + + // Finds a matching pattern to the specified text + function findPattern(text) { + var patterns = getPatterns(); + + for (var i = 0; i < patterns.length; i++) { + if (text.indexOf(patterns[i].start) !== 0) { + continue; + } + + if (patterns[i].end && text.lastIndexOf(patterns[i].end) != text.length - patterns[i].end.length) { + continue; + } + + return patterns[i]; + } + } + + // Finds the best matching end pattern + function findEndPattern(text, offset, delta) { + var patterns, pattern, i; + + // Find best matching end + patterns = getPatterns(); + for (i = 0; i < patterns.length; i++) { + pattern = patterns[i]; + if (pattern.end && text.substr(offset - pattern.end.length - delta, pattern.end.length) == pattern.end) { + return pattern; + } + } + } + + // Handles inline formats like *abc* and **abc** + function applyInlineFormat(space) { + var selection, dom, rng, container, offset, startOffset, text, patternRng, pattern, delta, format; + + function splitContainer() { + // Split text node and remove start/end from text node + container = container.splitText(startOffset); + container.splitText(offset - startOffset - delta); + container.deleteData(0, pattern.start.length); + container.deleteData(container.data.length - pattern.end.length, pattern.end.length); + } + + selection = editor.selection; + dom = editor.dom; + + if (!selection.isCollapsed()) { + return; + } + + rng = selection.getRng(true); + container = rng.startContainer; + offset = rng.startOffset; + text = container.data; + delta = space ? 1 : 0; + + if (container.nodeType != 3) { + return; + } + + // Find best matching end + pattern = findEndPattern(text, offset, delta); + if (!pattern) { + return; + } + + // Find start of matched pattern + // TODO: Might need to improve this if there is nested formats + startOffset = Math.max(0, offset - delta); + startOffset = text.lastIndexOf(pattern.start, startOffset - pattern.end.length - 1); + + if (startOffset === -1) { + return; + } + + // Setup a range for the matching word + patternRng = dom.createRng(); + patternRng.setStart(container, startOffset); + patternRng.setEnd(container, offset - delta); + pattern = findPattern(patternRng.toString()); + + if (!pattern || !pattern.end) { + return; + } + + // If container match doesn't have anything between start/end then do nothing + if (container.data.length <= pattern.start.length + pattern.end.length) { + return; + } + + format = editor.formatter.get(pattern.format); + if (format && format[0].inline) { + splitContainer(); + editor.formatter.apply(pattern.format, {}, container); + return container; + } + } + + // Handles block formats like ##abc or 1. abc + function applyBlockFormat() { + var selection, dom, container, firstTextNode, node, format, textBlockElm, pattern, walker, rng, offset; + + selection = editor.selection; + dom = editor.dom; + + if (!selection.isCollapsed()) { + return; + } + + textBlockElm = dom.getParent(selection.getStart(), 'p'); + if (textBlockElm) { + walker = new tinymce.dom.TreeWalker(textBlockElm, textBlockElm); + while ((node = walker.next())) { + if (node.nodeType == 3) { + firstTextNode = node; + break; + } + } + + if (firstTextNode) { + pattern = findPattern(firstTextNode.data); + if (!pattern) { + return; + } + + rng = selection.getRng(true); + container = rng.startContainer; + offset = rng.startOffset; + + if (firstTextNode == container) { + offset = Math.max(0, offset - pattern.start.length); + } + + if (tinymce.trim(firstTextNode.data).length == pattern.start.length) { + return; + } + + if (pattern.format) { + format = editor.formatter.get(pattern.format); + if (format && format[0].block) { + firstTextNode.deleteData(0, pattern.start.length); + editor.formatter.apply(pattern.format, {}, firstTextNode); + + rng.setStart(container, offset); + rng.collapse(true); + selection.setRng(rng); + } + } + + if (pattern.cmd) { + editor.undoManager.transact(function() { + firstTextNode.deleteData(0, pattern.start.length); + editor.execCommand(pattern.cmd); + }); + } + } + } + } + + function handleEnter() { + var rng, wrappedTextNode; + + wrappedTextNode = applyInlineFormat(); + if (wrappedTextNode) { + rng = editor.dom.createRng(); + rng.setStart(wrappedTextNode, wrappedTextNode.data.length); + rng.setEnd(wrappedTextNode, wrappedTextNode.data.length); + editor.selection.setRng(rng); + } + + applyBlockFormat(); + } + + function handleSpace() { + var wrappedTextNode, lastChar, lastCharNode, rng, dom; + + wrappedTextNode = applyInlineFormat(true); + if (wrappedTextNode) { + dom = editor.dom; + lastChar = wrappedTextNode.data.slice(-1); + + // Move space after the newly formatted node + if (/[\u00a0 ]/.test(lastChar)) { + wrappedTextNode.deleteData(wrappedTextNode.data.length - 1, 1); + lastCharNode = dom.doc.createTextNode(lastChar); + + if (wrappedTextNode.nextSibling) { + dom.insertAfter(lastCharNode, wrappedTextNode.nextSibling); + } else { + wrappedTextNode.parentNode.appendChild(lastCharNode); + } + + rng = dom.createRng(); + rng.setStart(lastCharNode, 1); + rng.setEnd(lastCharNode, 1); + editor.selection.setRng(rng); + } + } + } + + editor.on('keydown', function(e) { + if (e.keyCode == 13 && !tinymce.util.VK.modifierPressed(e)) { + handleEnter(); + } + }, true); + + editor.on('keyup', function(e) { + if (e.keyCode == 32 && !tinymce.util.VK.modifierPressed(e)) { + handleSpace(); + } + }); + + this.getPatterns = getPatterns; + this.setPatterns = function(newPatterns) { + patterns = newPatterns; + isPatternsDirty = true; + }; +}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/textpattern/plugin.min.js b/public/mosaico/dist/vendor/plugins/textpattern/plugin.min.js new file mode 100644 index 00000000..a3bbda2f --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/textpattern/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("textpattern",function(e){function t(){return c&&(l.sort(function(e,t){return e.start.length>t.start.length?-1:e.start.length' + value + ''; + } + + function compileCharMapToRegExp() { + var key, regExp = ''; + + for (key in charMap) { + regExp += key; + } + + return new RegExp('[' + regExp + ']', 'g'); + } + + function compileCharMapToCssSelector() { + var key, selector = ''; + + for (key in charMap) { + if (selector) { + selector += ','; + } + + selector += 'span.mce-' + charMap[key]; + } + + return selector; + } + + state = !state; + self.state = state; + editor.fire('VisualChars', {state: state}); + visualCharsRegExp = compileCharMapToRegExp(); + + if (addBookmark) { + bookmark = selection.getBookmark(); + } + + if (state) { + nodeList = []; + tinymce.walk(body, function(n) { + if (n.nodeType == 3 && n.nodeValue && visualCharsRegExp.test(n.nodeValue)) { + nodeList.push(n); + } + }, 'childNodes'); + + for (i = 0; i < nodeList.length; i++) { + nodeValue = nodeList[i].nodeValue; + nodeValue = nodeValue.replace(visualCharsRegExp, wrapCharWithSpan); + + div = editor.dom.create('div', null, nodeValue); + while ((node = div.lastChild)) { + editor.dom.insertAfter(node, nodeList[i]); + } + + editor.dom.remove(nodeList[i]); + } + } else { + nodeList = editor.dom.select(compileCharMapToCssSelector(), body); + + for (i = nodeList.length - 1; i >= 0; i--) { + editor.dom.remove(nodeList[i], 1); + } + } + + selection.moveToBookmark(bookmark); + } + + function toggleActiveState() { + var self = this; + + editor.on('VisualChars', function(e) { + self.active(e.state); + }); + } + + editor.addCommand('mceVisualChars', toggleVisualChars); + + editor.addButton('visualchars', { + title: 'Show invisible characters', + cmd: 'mceVisualChars', + onPostRender: toggleActiveState + }); + + editor.addMenuItem('visualchars', { + text: 'Show invisible characters', + cmd: 'mceVisualChars', + onPostRender: toggleActiveState, + selectable: true, + context: 'view', + prependToContext: true + }); + + editor.on('beforegetcontent', function(e) { + if (state && e.format != 'raw' && !e.draft) { + state = true; + toggleVisualChars(false); + } + }); +}); diff --git a/public/mosaico/dist/vendor/plugins/visualchars/plugin.min.js b/public/mosaico/dist/vendor/plugins/visualchars/plugin.min.js new file mode 100644 index 00000000..47041fb5 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/visualchars/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("visualchars",function(e){function t(t){function n(e){return''+e+""}function o(){var e,t="";for(e in h)t+=e;return new RegExp("["+t+"]","g")}function a(){var e,t="";for(e in h)t&&(t+=","),t+="span.mce-"+h[e];return t}var s,l,c,u,d,f,h,p,m=e.getBody(),g=e.selection;if(h={"\xa0":"nbsp","\xad":"shy"},r=!r,i.state=r,e.fire("VisualChars",{state:r}),p=o(),t&&(f=g.getBookmark()),r)for(l=[],tinymce.walk(m,function(e){3==e.nodeType&&e.nodeValue&&p.test(e.nodeValue)&&l.push(e)},"childNodes"),c=0;c=0;c--)e.dom.remove(l[c],1);g.moveToBookmark(f)}function n(){var t=this;e.on("VisualChars",function(e){t.active(e.state)})}var r,i=this;e.addCommand("mceVisualChars",t),e.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n}),e.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n,selectable:!0,context:"view",prependToContext:!0}),e.on("beforegetcontent",function(e){r&&"raw"!=e.format&&!e.draft&&(r=!0,t(!1))})}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/wordcount/plugin.js b/public/mosaico/dist/vendor/plugins/wordcount/plugin.js new file mode 100644 index 00000000..2fd6d08f --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/wordcount/plugin.js @@ -0,0 +1,69 @@ +/** + * plugin.js + * + * Released under LGPL License. + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('wordcount', function(editor) { + var self = this, countre, cleanre; + + // Included most unicode blocks see: http://en.wikipedia.org/wiki/Unicode_block + // Latin-1_Supplement letters, a-z, u2019 == ’ + countre = editor.getParam('wordcount_countregex', /[\w\u2019\x27\-\u00C0-\u1FFF]+/g); + cleanre = editor.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$?\x27\x22_+=\\\/\-]*/g); + + function update() { + editor.theme.panel.find('#wordcount').text(['Words: {0}', self.getCount()]); + } + + editor.on('init', function() { + var statusbar = editor.theme.panel && editor.theme.panel.find('#statusbar')[0]; + + if (statusbar) { + tinymce.util.Delay.setEditorTimeout(editor, function() { + statusbar.insert({ + type: 'label', + name: 'wordcount', + text: ['Words: {0}', self.getCount()], + classes: 'wordcount', + disabled: editor.settings.readonly + }, 0); + + editor.on('setcontent beforeaddundo', update); + + editor.on('keyup', function(e) { + if (e.keyCode == 32) { + update(); + } + }); + }, 0); + } + }); + + self.getCount = function() { + var tx = editor.getContent({format: 'raw'}); + var tc = 0; + + if (tx) { + tx = tx.replace(/\.\.\./g, ' '); // convert ellipses to spaces + tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' '); // remove html tags and space chars + + // deal with html entities + tx = tx.replace(/(\w+)(&#?[a-z0-9]+;)+(\w+)/i, "$1$3").replace(/&.+?;/g, ' '); + tx = tx.replace(cleanre, ''); // remove numbers and punctuation + + var wordArray = tx.match(countre); + if (wordArray) { + tc = wordArray.length; + } + } + + return tc; + }; +}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/plugins/wordcount/plugin.min.js b/public/mosaico/dist/vendor/plugins/wordcount/plugin.min.js new file mode 100644 index 00000000..d31b9260 --- /dev/null +++ b/public/mosaico/dist/vendor/plugins/wordcount/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("wordcount",function(e){function t(){e.theme.panel.find("#wordcount").text(["Words: {0}",i.getCount()])}var n,r,i=this;n=e.getParam("wordcount_countregex",/[\w\u2019\x27\-\u00C0-\u1FFF]+/g),r=e.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\x27\x22_+=\\\/\-]*/g),e.on("init",function(){var n=e.theme.panel&&e.theme.panel.find("#statusbar")[0];n&&tinymce.util.Delay.setEditorTimeout(e,function(){n.insert({type:"label",name:"wordcount",text:["Words: {0}",i.getCount()],classes:"wordcount",disabled:e.settings.readonly},0),e.on("setcontent beforeaddundo",t),e.on("keyup",function(e){32==e.keyCode&&t()})},0)}),i.getCount=function(){var t=e.getContent({format:"raw"}),i=0;if(t){t=t.replace(/\.\.\./g," "),t=t.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," "),t=t.replace(/(\w+)(&#?[a-z0-9]+;)+(\w+)/i,"$1$3").replace(/&.+?;/g," "),t=t.replace(r,"");var o=t.match(n);o&&(i=o.length)}return i}}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/gray-flat/Variables.less b/public/mosaico/dist/vendor/skins/gray-flat/Variables.less new file mode 100644 index 00000000..d7f76799 --- /dev/null +++ b/public/mosaico/dist/vendor/skins/gray-flat/Variables.less @@ -0,0 +1,196 @@ +// Variables +// Syntax: -()--()-(); +// Example: @btn-primary-bg-hover-hlight; + +@prefix: mce; + +// Default font +@font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +@font-size: 14px; +@line-height: 20px; +@has-gradients: false; +@has-radius: true; +@has-boxshadow: false; +@has-button-borders: true; + +// Text colors +@text: #333333; +@text-inverse: #ffffff; +@text-disabled: #aaaaaa; +@text-shadow: 0 1px 1px hsla(hue(@text-inverse), saturation(@text-inverse), lightness(@text-inverse), 0.75); +@text-error: #aa0000; + +// Button +@btn-text: #ffffff; +@btn-text-shadow: #333332; +@btn-border-top: rgba(0,0,0,0.1); +@btn-border-right: rgba(0,0,0,0.1); +@btn-border-bottom: rgba(0,0,0,0.25); +@btn-border-left: rgba(0,0,0,0.25); +@btn-caret-border: @btn-text; +@btn-text-disabled: @text-disabled; +@btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); +@btn-box-shadow-active: inset 0 2px 4px rgba(0, 0, 0, .15), 0 1px 2px rgba(0, 0, 0, .05); +@btn-box-disabled-opacity: 0.4; +@btn-bg: #333332; +@btn-bg-hlight: #333332; +@btn-bg-hover: darken(@btn-bg, 5%); +@btn-bg-hlight-hover: darken(@btn-bg-hlight, 5%); +@btn-border-hover: darken(@btn-bg, 20%); +@btn-border-active: darken(@btn-bg, 20%); +@btn-padding: 4px 8px; + +@btn-primary-bg: #333332; +@btn-primary-bg-hlight: #333332; +@btn-primary-bg-hover: darken(@btn-primary-bg, 5%); +@btn-primary-bg-hover-hlight: darken(@btn-primary-bg-hlight, 5%); +@btn-primary-text: #ffffff; +@btn-primary-text-shadow: #333333; +@btn-primary-border-top: mix(@btn-border-top, @btn-primary-bg, 50%); +@btn-primary-border-right: mix(@btn-border-right, @btn-primary-bg, 50%); +@btn-primary-border-bottom: mix(@btn-border-bottom, @btn-primary-bg, 50%); +@btn-primary-border-left: mix(@btn-border-left, @btn-primary-bg, 50%); +@btn-primary-border: transparent; +@btn-primary-border-hover: transparent; + +// Button group +@btn-group-border-width: 1px; + +// Menu +@menuitem-text: #333333; +@menu-bg: #ffffff; +@menu-margin: -1px 0 0; +@menu-border: rgba(0,0,0,0.2); +@menubar-border: mix(@panel-border, @panel-bg, 60%); +@menuitem-text-inverse: #ffffff; +@menubar-bg-active: darken(@btn-bg, 10%); +@menuitem-bg-hover: #0081C2; +@menuitem-bg-selected: #333332; +@menuitem-bg-selected-hlight: #333332; +@menuitem-bg-disabled: #CCC; +@menuitem-caret: @menuitem-text; +@menuitem-caret-selected: @menuitem-text-inverse; +@menuitem-separator-top: #cbcbcb; +@menuitem-separator-bottom: #ffffff; +@menuitem-bg-active: #666666; +@menuitem-text-active: #ffffff; +@menuitem-preview-border-active: #aaaaaa; +@menubar-menubtn-text: ; + +// Panel +@panel-border: #9e9e9e; +@panel-bg: #f1eee6; +@panel-bg-hlight: #f1eee6; + +// Tabs +@tab-border: #c5c5c5; +@tab-bg: #e3e3e3; +@tab-bg-hover: #fdfdfd; +@tab-bg-active: #fdfdfd; +@tabs-bg: #ffffff; + +// Tooltip +@tooltip-bg: #000; +@tooltip-text: white; +@tooltip-font-size: 11px; + +// Notification +@notification-font-size: 14px; +@notification-bg: #f0f0f0; +@notification-border: #cccccc; +@notification-text: #333333; +@notification-success-bg: #dff0d8; +@notification-success-border: #d6e9c6; +@notification-success-text: #3c763d; +@notification-info-bg: #d9edf7; +@notification-info-border: #779ecb; +@notification-info-text: #31708f; +@notification-warning-bg: #fcf8e3; +@notification-warning-border: #faebcc; +@notification-warning-text: #8a6d3b; +@notification-error-bg: #f2dede; +@notification-error-border: #ebccd1; +@notification-error-text: #a94442; + +// Window +@window-border: #c4c4c4; +@window-head-border: @window-border; +@window-head-close: mix(@text, @window-bg, 60%); +@window-head-close-hover: mix(@text, @window-bg, 40%); +@window-foot-border: @window-border; +@window-foot-bg: @window-bg; +@window-fullscreen-bg: #FFF; +@window-modalblock-bg: #000; +@window-modalblock-opacity: 0.3; +@window-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +@window-bg: #ffffff; +@window-title-font-size: 20px; + +// Popover +@popover-bg: @window-bg; +@popover-arrow-width: 10px; +@popover-arrow: @window-bg; +@popover-arrow-outer-width: @popover-arrow-width + 1; +@popover-arrow-outer: rgba(0, 0, 0, 0.25); + +// Floatpanel +@floatpanel-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + +// Checkbox +@checkbox-bg: @btn-bg; +@checkbox-bg-hlight: @btn-bg-hlight; +@checkbox-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); +@checkbox-border: #c5c5c5; +@checkbox-border-focus: #59a5e1; + +// Path +@path-text: @text; +@path-bg-focus: #666; +@path-text-focus: #fff; + +// Textbox +@textbox-text-placeholder: #aaa; +@textbox-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +@textbox-bg: #ffffff; +@textbox-border: #c5c5c5; +@textbox-border-focus: #59a5e1; + +// Selectbox +@selectbox-bg: @textbox-bg; +@selectbox-border: @textbox-border; + +// Throbber +@throbber-bg: #fff url('img/loader.gif') no-repeat center center; + +// Combobox +@combobox-border: @textbox-border; + +// Colorpicker +@colorpicker-border: @textbox-border; +@colorpicker-hue-bg: #fff; +@colorpicker-hue-border: #333; + +// Grid +@grid-bg-active: @menuitem-bg-active; +@grid-border-active: #a1a1a1; +@grid-border: #d6d6d6; + +// Misc +@colorbtn-backcolor-bg: #bbbbbb; +@iframe-border: @panel-border; + +// Slider +@slider-border: #aaaaaa; +@slider-bg: #eeeeee; +@slider-handle-border: #bbbbbb; +@slider-handle-bg: #dddddd; + +// Progress +@progress-border: #cccccc; +@progress-bar-bg: #dfdfdf; +@progress-bar-bg-hlight: #cccccc; +@progress-text: #333333; +@progress-text-shadow: #ffffff; + +// Flow layout +@flow-layout-spacing: 2px; diff --git a/public/mosaico/dist/vendor/skins/gray-flat/content.inline.min.css b/public/mosaico/dist/vendor/skins/gray-flat/content.inline.min.css new file mode 100644 index 00000000..3597a011 --- /dev/null +++ b/public/mosaico/dist/vendor/skins/gray-flat/content.inline.min.css @@ -0,0 +1 @@ +.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-preview-object[data-mce-selected] .mce-shim{display:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #f00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #bbb}td[data-mce-selected],th[data-mce-selected]{background-color:#39f !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7acaff}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1} \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/gray-flat/content.min.css b/public/mosaico/dist/vendor/skins/gray-flat/content.min.css new file mode 100644 index 00000000..3597a011 --- /dev/null +++ b/public/mosaico/dist/vendor/skins/gray-flat/content.min.css @@ -0,0 +1 @@ +.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-preview-object[data-mce-selected] .mce-shim{display:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #f00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #bbb}td[data-mce-selected],th[data-mce-selected]{background-color:#39f !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7acaff}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1} \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/gray-flat/fonts/readme.md b/public/mosaico/dist/vendor/skins/gray-flat/fonts/readme.md new file mode 100644 index 00000000..fa5d6394 --- /dev/null +++ b/public/mosaico/dist/vendor/skins/gray-flat/fonts/readme.md @@ -0,0 +1 @@ +Icons are generated and provided by the http://icomoon.io service. diff --git a/public/mosaico/dist/vendor/skins/gray-flat/fonts/tinymce-small.eot b/public/mosaico/dist/vendor/skins/gray-flat/fonts/tinymce-small.eot new file mode 100644 index 0000000000000000000000000000000000000000..b144ba0bd949de3c0f87abdd78b517067169884f GIT binary patch literal 9492 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 + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/gray-flat/fonts/tinymce-small.ttf b/public/mosaico/dist/vendor/skins/gray-flat/fonts/tinymce-small.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a983e2dc4cb30880fffe00e1f0879be4d95eb4cc GIT binary patch literal 9304 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 literal 0 HcmV?d00001 diff --git a/public/mosaico/dist/vendor/skins/gray-flat/fonts/tinymce.eot b/public/mosaico/dist/vendor/skins/gray-flat/fonts/tinymce.eot new file mode 100644 index 0000000000000000000000000000000000000000..8838c8dc9762b9d3d6658d10601cf241062c0aa2 GIT binary patch literal 14308 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 + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/gray-flat/fonts/tinymce.ttf b/public/mosaico/dist/vendor/skins/gray-flat/fonts/tinymce.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ab4487febe5b98a161dcd2daa9b80d03de7c0fd8 GIT binary patch literal 14144 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 C+YCGa literal 0 HcmV?d00001 diff --git a/public/mosaico/dist/vendor/skins/gray-flat/img/loader.gif b/public/mosaico/dist/vendor/skins/gray-flat/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..c69e937232b24ea30f01c68bbd2ebc798dcecfcb GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u literal 0 HcmV?d00001 diff --git a/public/mosaico/dist/vendor/skins/gray-flat/img/object.gif b/public/mosaico/dist/vendor/skins/gray-flat/img/object.gif new file mode 100644 index 0000000000000000000000000000000000000000..cccd7f023fb80908cb33bb7d9604236cd21b7ae7 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xD.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c4c4c4;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c4c4c4;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-window-body .mce-listbox{border-color:#000}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333;text-shadow:1px 1px #fff}.mce-bar{display:block;width:0%;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#f0f0f0;padding:5px;margin-top:5px;opacity:.8;filter:alpha(opacity=80);zoom:1;border-width:1px;border-style:solid;border-color:#ccc}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ecb}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333}.mce-notification .mce-progress .mce-bar-container{border-color:#ccc}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ecb}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #a9a7a1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background-color:#333332}.mce-btn:hover,.mce-btn:focus{color:#fff;background-color:#262625;border-color:#000}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#1e1e1e;border-color:#000}.mce-btn:active{background-color:#232322;border-color:#000}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#fff;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #333332}.mce-primary{min-width:50px;color:#fff;border:1px solid transparent;border-color:transparent;background-color:#333332}.mce-primary:hover,.mce-primary:focus{background-color:#262625;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#191919}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #fff;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #fff;border-top:0}.mce-btn-flat{border:0;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#191919;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;margin-left:2px}.mce-btn-group .mce-btn{border-left-width:0;border-right-width:0;margin-left:0}.mce-btn-group:not(:first-child){padding-left:1px;margin-left:1px}.mce-btn-group .mce-first{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;border-left:1px solid rgba(0,0,0,0.25);margin-left:0}.mce-btn-group .mce-last{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;border-right:1px solid rgba(0,0,0,0.1)}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #0c0c0c;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background-color:#333332;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#fff;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid #59a5e1}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#a5a39e}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#000}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:none}.mce-menubar .mce-menubtn button{color:}.mce-menubar{border:1px solid #bfbebb}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#000;background:#fff;filter:none}.mce-menubtn button{color:#fff}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#666}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#fff}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#333332}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #918f8a;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;border:1px solid #aaa;background:#eee;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;border:1px solid #bbb;background:#ddd;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#000}.mce-splitbtn button{padding-right:4px;padding-left:8px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#1e1e1e;outline:1px solid #000}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#59a5e1}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#fff;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-alignnone{-ie7-icon:"\e003"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-rotateleft{-ie7-icon:"\eaa8"}.mce-i-rotateright{-ie7-icon:"\eaa9"}.mce-i-crop{-ie7-icon:"\ee78"}.mce-i-editimage{-ie7-icon:"\e914"}.mce-i-options{-ie7-icon:"\ec6a"}.mce-i-flipv{-ie7-icon:"\eaaa"}.mce-i-fliph{-ie7-icon:"\eaac"}.mce-i-zoomin{-ie7-icon:"\eb35"}.mce-i-zoomout{-ie7-icon:"\eb36"}.mce-i-sun{-ie7-icon:"\eccc"}.mce-i-moon{-ie7-icon:"\eccd"}.mce-i-arrowleft{-ie7-icon:"\edc0"}.mce-i-arrowright{-ie7-icon:"\edb8"}.mce-i-drop{-ie7-icon:"\e934"}.mce-i-contrast{-ie7-icon:"\ecd4"}.mce-i-sharpen{-ie7-icon:"\eba7"}.mce-i-palette{-ie7-icon:"\e92a"}.mce-i-resize2{-ie7-icon:"\edf9"}.mce-i-orientation{-ie7-icon:"\e601"}.mce-i-invert{-ie7-icon:"\e602"}.mce-i-gamma{-ie7-icon:"\e600"}.mce-i-remove{-ie7-icon:"\ed6a"}.mce-i-codesample{-ie7-icon:"\e603"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB} \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/gray-flat/skin.json b/public/mosaico/dist/vendor/skins/gray-flat/skin.json new file mode 100644 index 00000000..0e134c3a --- /dev/null +++ b/public/mosaico/dist/vendor/skins/gray-flat/skin.json @@ -0,0 +1,79 @@ +{ + "skin-name": "gray-flat", + "preview-bg": "#eeeeee", + "text": "#333333", + "text-inverse": "#ffffff", + "text-disabled": "#aaaaaa", + "has-gradients": false, + "has-radius": true, + "has-boxshadow": false, + "has-button-borders": true, + "btn-text": "#ffffff", + "btn-text-shadow": "#333332", + "btn-bg": "#333332", + "btn-bg-hlight": "#333332", + "btn-border-top": "rgba(0,0,0,0.1)", + "btn-border-right": "rgba(0,0,0,0.1)", + "btn-border-bottom": "rgba(0,0,0,0.25)", + "btn-border-left": "rgba(0,0,0,0.25)", + "btn-split-border": "#ffffff", + "btn-primary-text": "#ffffff", + "btn-primary-text-shadow": "#333333", + "btn-primary-bg": "#333332", + "btn-primary-bg-hlight": "#333332", + "btn-padding": "4px 8px", + "menu-bg": "#ffffff", + "menu-border": "rgba(0,0,0,0.2)", + "menuitem-text": "#333333", + "menuitem-bg-selected": "#333332", + "menuitem-bg-selected-hlight": "#333332", + "menuitem-separator-top": "#cbcbcb", + "menuitem-separator-bottom": "#ffffff", + "menuitem-text-inverse": "#ffffff", + "menuitem-bg-active": "#666666", + "menuitem-text-active": "#ffffff", + "menuitem-preview-border-active": "#aaaaaa", + "menubar-menubtn-text": "", + "checkbox-border": "#c5c5c5", + "checkbox-border-focus": "#59a5e1", + "panel-border": "#9e9e9e", + "panel-bg": "#f1eee6", + "panel-bg-hlight": "#f1eee6", + "textbox-bg": "#ffffff", + "textbox-border": "#c5c5c5", + "textbox-border-focus": "#59a5e1", + "window-bg": "#ffffff", + "window-border": "#c4c4c4", + "tab-bg": "#e3e3e3", + "tab-bg-hover": "#fdfdfd", + "tab-bg-active": "#fdfdfd", + "tab-border": "#c5c5c5", + "tabs-bg": "#ffffff", + "notification-bg": "#f0f0f0", + "notification-border": "#cccccc", + "notification-text": "#333333", + "notification-success-bg": "#dff0d8", + "notification-success-border": "#d6e9c6", + "notification-success-text": "#3c763d", + "notification-info-bg": "#d9edf7", + "notification-info-border": "#779ecb", + "notification-info-text": "#31708f", + "notification-warning-bg": "#fcf8e3", + "notification-warning-border": "#faebcc", + "notification-warning-text": "#8a6d3b", + "notification-error-bg": "#f2dede", + "notification-error-border": "#ebccd1", + "notification-error-text": "#a94442", + "progress-bar-bg": "#dfdfdf", + "progress-bar-bg-hlight": "#cccccc", + "progress-border": "#cccccc", + "progress-text": "#333333", + "progress-text-shadow": "#ffffff", + "slider-bg": "#eeeeee", + "slider-border": "#aaaaaa", + "slider-handle-bg": "#dddddd", + "slider-handle-border": "#bbbbbb", + "colorbtn-backcolor-bg": "#bbbbbb", + "grid-border": "#d6d6d6", + "grid-border-active": "#a1a1a1" +} \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/gray-flat/skin.min.css b/public/mosaico/dist/vendor/skins/gray-flat/skin.min.css new file mode 100644 index 00000000..955fce5b --- /dev/null +++ b/public/mosaico/dist/vendor/skins/gray-flat/skin.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#333332}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0px;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#a1a1a1}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#666}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.3;filter:alpha(opacity=30);zoom:1;position:absolute;background:black}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #e0ded8;border:0 solid #9e9e9e;background-color:#f1eee6}.mce-floatpanel{position:absolute}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c4c4c4;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c4c4c4;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-window-body .mce-listbox{border-color:#000}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0%;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#f0f0f0;padding:5px;margin-top:5px;opacity:.8;filter:alpha(opacity=80);zoom:1;border-width:1px;border-style:solid;border-color:#ccc}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ecb}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333}.mce-notification .mce-progress .mce-bar-container{border-color:#ccc}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ecb}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #a9a7a1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background-color:#333332}.mce-btn:hover,.mce-btn:focus{color:#fff;background-color:#262625;border-color:#000}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#1e1e1e;border-color:#000}.mce-btn:active{background-color:#232322;border-color:#000}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#fff;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #333332}.mce-primary{min-width:50px;color:#fff;border:1px solid transparent;border-color:transparent;background-color:#333332}.mce-primary:hover,.mce-primary:focus{background-color:#262625;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#191919}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #fff;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #fff;border-top:0}.mce-btn-flat{border:0;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#191919;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;margin-left:2px}.mce-btn-group .mce-btn{border-left-width:0;border-right-width:0;margin-left:0}.mce-btn-group:not(:first-child){padding-left:1px;margin-left:1px}.mce-btn-group .mce-first{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;border-left:1px solid rgba(0,0,0,0.25);margin-left:0}.mce-btn-group .mce-last{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;border-right:1px solid rgba(0,0,0,0.1)}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #0c0c0c;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background-color:#333332;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#fff;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid #59a5e1}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#a5a39e}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#000}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:none}.mce-menubar .mce-menubtn button{color:}.mce-menubar{border:1px solid #bfbebb}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#000;background:#fff;filter:none}.mce-menubtn button{color:#fff}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#666}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#fff}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#333332}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #918f8a;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;border:1px solid #aaa;background:#eee;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;border:1px solid #bbb;background:#ddd;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#000}.mce-splitbtn button{padding-right:4px;padding-left:8px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#1e1e1e;outline:1px solid #000}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#59a5e1}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#fff}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e914"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\edb8"}.mce-i-drop:before{content:"\e934"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-palette:before{content:"\e92a"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb} \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/lightgray/content.inline.min.css b/public/mosaico/dist/vendor/skins/lightgray/content.inline.min.css new file mode 100644 index 00000000..10300948 --- /dev/null +++ b/public/mosaico/dist/vendor/skins/lightgray/content.inline.min.css @@ -0,0 +1 @@ +.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #f00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #bbb}td[data-mce-selected],th[data-mce-selected]{background-color:#39f !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7acaff}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1} \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/lightgray/content.min.css b/public/mosaico/dist/vendor/skins/lightgray/content.min.css new file mode 100644 index 00000000..af85f749 --- /dev/null +++ b/public/mosaico/dist/vendor/skins/lightgray/content.min.css @@ -0,0 +1 @@ +body{background-color:#fff;color:#000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#f0f0ee;scrollbar-arrow-color:#676662;scrollbar-base-color:#f0f0ee;scrollbar-darkshadow-color:#ddd;scrollbar-face-color:#e0e0dd;scrollbar-highlight-color:#f0f0ee;scrollbar-shadow-color:#f0f0ee;scrollbar-track-color:#f5f5f5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #f00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #bbb}td[data-mce-selected],th[data-mce-selected]{background-color:#39f !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7acaff}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1} \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/lightgray/fonts/tinymce-small.eot b/public/mosaico/dist/vendor/skins/lightgray/fonts/tinymce-small.eot new file mode 100644 index 0000000000000000000000000000000000000000..b144ba0bd949de3c0f87abdd78b517067169884f GIT binary patch literal 9492 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 + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/lightgray/fonts/tinymce-small.ttf b/public/mosaico/dist/vendor/skins/lightgray/fonts/tinymce-small.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a983e2dc4cb30880fffe00e1f0879be4d95eb4cc GIT binary patch literal 9304 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 literal 0 HcmV?d00001 diff --git a/public/mosaico/dist/vendor/skins/lightgray/fonts/tinymce.eot b/public/mosaico/dist/vendor/skins/lightgray/fonts/tinymce.eot new file mode 100644 index 0000000000000000000000000000000000000000..09fd441c624d9e3d85e25a1f1e29a0b516e1dc38 GIT binary patch literal 17292 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 literal 0 HcmV?d00001 diff --git a/public/mosaico/dist/vendor/skins/lightgray/fonts/tinymce.svg b/public/mosaico/dist/vendor/skins/lightgray/fonts/tinymce.svg new file mode 100644 index 00000000..8688c1c8 --- /dev/null +++ b/public/mosaico/dist/vendor/skins/lightgray/fonts/tinymce.svg @@ -0,0 +1,129 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/lightgray/fonts/tinymce.ttf b/public/mosaico/dist/vendor/skins/lightgray/fonts/tinymce.ttf new file mode 100644 index 0000000000000000000000000000000000000000..bf22ca64d11265721e0caa8b099a96c23313ee7b GIT binary patch literal 17128 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 z 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 xV`ImT9nC?HAlRn>{Q#OdDtfdJ@009KYVx3Y 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 WuoL+2#6Hv-L!i2FS!0%O`1!wV+k}Y# literal 0 HcmV?d00001 diff --git a/public/mosaico/dist/vendor/skins/lightgray/img/anchor.gif b/public/mosaico/dist/vendor/skins/lightgray/img/anchor.gif new file mode 100644 index 0000000000000000000000000000000000000000..606348c7f53dba169a9aca7279a2a973f4b07bdb GIT binary patch literal 53 zcmZ?wbhEHbWM^P!XkcUjg8%>jEB<5wG8q|kKzxu40~1eAV&{y5e`l1KFoiKNSOWkz C+YCGa literal 0 HcmV?d00001 diff --git a/public/mosaico/dist/vendor/skins/lightgray/img/loader.gif b/public/mosaico/dist/vendor/skins/lightgray/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..c69e937232b24ea30f01c68bbd2ebc798dcecfcb GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u literal 0 HcmV?d00001 diff --git a/public/mosaico/dist/vendor/skins/lightgray/img/object.gif b/public/mosaico/dist/vendor/skins/lightgray/img/object.gif new file mode 100644 index 0000000000000000000000000000000000000000..cccd7f023fb80908cb33bb7d9604236cd21b7ae7 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xD.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#858585}.mce-close:hover i{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#f0f0f0;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#ccc;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ecb}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333}.mce-notification .mce-progress .mce-bar-container{border-color:#ccc}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ecb}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b1b1b1;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9e9e9e}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #ccc}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:white}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:white}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:white}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:white}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:white}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #aaa;background:#eee;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #bbb;background:#ddd;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{background:#bbb}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-alignnone{-ie7-icon:"\e003"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-rotateleft{-ie7-icon:"\eaa8"}.mce-i-rotateright{-ie7-icon:"\eaa9"}.mce-i-crop{-ie7-icon:"\ee78"}.mce-i-editimage{-ie7-icon:"\e914"}.mce-i-options{-ie7-icon:"\ec6a"}.mce-i-flipv{-ie7-icon:"\eaaa"}.mce-i-fliph{-ie7-icon:"\eaac"}.mce-i-zoomin{-ie7-icon:"\eb35"}.mce-i-zoomout{-ie7-icon:"\eb36"}.mce-i-sun{-ie7-icon:"\eccc"}.mce-i-moon{-ie7-icon:"\eccd"}.mce-i-arrowleft{-ie7-icon:"\edc0"}.mce-i-arrowright{-ie7-icon:"\edb8"}.mce-i-drop{-ie7-icon:"\e934"}.mce-i-contrast{-ie7-icon:"\ecd4"}.mce-i-sharpen{-ie7-icon:"\eba7"}.mce-i-palette{-ie7-icon:"\e92a"}.mce-i-resize2{-ie7-icon:"\edf9"}.mce-i-orientation{-ie7-icon:"\e601"}.mce-i-invert{-ie7-icon:"\e602"}.mce-i-gamma{-ie7-icon:"\e600"}.mce-i-remove{-ie7-icon:"\ed6a"}.mce-i-codesample{-ie7-icon:"\e603"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#bbb} \ No newline at end of file diff --git a/public/mosaico/dist/vendor/skins/lightgray/skin.min.css b/public/mosaico/dist/vendor/skins/lightgray/skin.min.css new file mode 100644 index 00000000..43598556 --- /dev/null +++ b/public/mosaico/dist/vendor/skins/lightgray/skin.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#fff;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid rgba(0,0,0,0.2);width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#3498db}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#3498db}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#3498db;background:#3498db}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp{padding:2px 0}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.3;filter:alpha(opacity=30);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#3498db}.mce-croprect-handle-move:focus{outline:1px solid #3498db}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:12px}.mce-arrow-down{margin-top:-12px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:rgba(0,0,0,0.2);border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:rgba(0,0,0,0.2);border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#f0f0f0;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#f0f0f0;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:8px}.mce-arrow.mce-arrow-left:after{left:9px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:8px}.mce-arrow.mce-arrow-right:after{right:9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:before{left:-9px;top:50%;border-right-color:rgba(0,0,0,0.2);border-width:9px 9px 9px 0;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:after{left:-8px;top:50%;border-right-color:#f0f0f0;border-width:8px 8px 8px 0;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left{margin-left:12px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:before{right:-9px;top:50%;border-left-color:rgba(0,0,0,0.2);border-width:9px 0 9px 9px;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:after{right:-8px;top:50%;border-left-color:#f0f0f0;border-width:8px 0 8px 8px;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right{margin-left:-14px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#aaa;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #cacaca;border:0 solid rgba(0,0,0,0.2);background-color:#f0f0f0}.mce-floatpanel{position:absolute}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;top:0;left:0;background:#fff;border:1px solid rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#858585}.mce-close:hover i{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#f0f0f0;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#ccc;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ecb}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333}.mce-notification .mce-progress .mce-bar-container{border-color:#ccc}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ecb}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b1b1b1;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9e9e9e}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #ccc}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:white}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:white}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:white}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:white}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:white}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #aaa;background:#eee;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #bbb;background:#ddd;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{background:#bbb}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e915"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\e93c"}.mce-i-drop:before{content:"\e935"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-fill:before{content:"\e902"}.mce-i-borderwidth:before{content:"\e903"}.mce-i-line:before{content:"\e904"}.mce-i-count:before{content:"\e905"}.mce-i-translate:before{content:"\e907"}.mce-i-drag:before{content:"\e908"}.mce-i-home:before{content:"\e90b"}.mce-i-upload:before{content:"\e914"}.mce-i-bubble:before{content:"\e91c"}.mce-i-user:before{content:"\e91d"}.mce-i-lock:before{content:"\e926"}.mce-i-unlock:before{content:"\e927"}.mce-i-settings:before{content:"\e928"}.mce-i-remove2:before{content:"\e92a"}.mce-i-menu:before{content:"\e92d"}.mce-i-warning:before{content:"\e930"}.mce-i-question:before{content:"\e931"}.mce-i-pluscircle:before{content:"\e932"}.mce-i-info:before{content:"\e933"}.mce-i-notice:before{content:"\e934"}.mce-i-arrowup:before{content:"\e93b"}.mce-i-arrowdown:before{content:"\e93d"}.mce-i-arrowup2:before{content:"\e93f"}.mce-i-arrowdown2:before{content:"\e940"}.mce-i-menu2:before{content:"\e941"}.mce-i-newtab:before{content:"\e961"}.mce-i-a11y:before{content:"\e900"}.mce-i-plus:before{content:"\e93a"}.mce-i-minus:before{content:"\e939"}.mce-i-books:before{content:"\e911"}.mce-i-checkmark:before{content:"\e033"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb} \ No newline at end of file diff --git a/public/mosaico/dist/vendor/themes/inlite/theme.js b/public/mosaico/dist/vendor/themes/inlite/theme.js new file mode 100644 index 00000000..865d7982 --- /dev/null +++ b/public/mosaico/dist/vendor/themes/inlite/theme.js @@ -0,0 +1,1828 @@ +(function () { + +var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)} + +// Used when there is no 'main' module. +// The name is probably (hopefully) unique so minification removes for releases. +var register_3795 = function (id) { + var module = dem(id); + var fragments = id.split('.'); + var target = Function('return this;')(); + for (var i = 0; i < fragments.length - 1; ++i) { + if (target[fragments[i]] === undefined) + target[fragments[i]] = {}; + target = target[fragments[i]]; + } + target[fragments[fragments.length - 1]] = module; +}; + +var instantiate = function (id) { + var actual = defs[id]; + var dependencies = actual.deps; + var definition = actual.defn; + var len = dependencies.length; + var instances = new Array(len); + for (var i = 0; i < len; ++i) + instances[i] = dem(dependencies[i]); + var defResult = definition.apply(null, instances); + if (defResult === undefined) + throw 'module [' + id + '] returned undefined'; + actual.instance = defResult; +}; + +var def = function (id, dependencies, definition) { + if (typeof id !== 'string') + throw 'module id must be a string'; + else if (dependencies === undefined) + throw 'no dependencies for ' + id; + else if (definition === undefined) + throw 'no definition function for ' + id; + defs[id] = { + deps: dependencies, + defn: definition, + instance: undefined + }; +}; + +var dem = function (id) { + var actual = defs[id]; + if (actual === undefined) + throw 'module [' + id + '] was undefined'; + else if (actual.instance === undefined) + instantiate(id); + return actual.instance; +}; + +var req = function (ids, callback) { + var len = ids.length; + var instances = new Array(len); + for (var i = 0; i < len; ++i) + instances.push(dem(ids[i])); + callback.apply(null, callback); +}; + +var ephox = {}; + +ephox.bolt = { + module: { + api: { + define: def, + require: req, + demand: dem + } + } +}; + +var define = def; +var require = req; +var demand = dem; +// this helps with minificiation when using a lot of global references +var defineGlobal = function (id, ref) { + define(id, [], function () { return ref; }); +}; +/*jsc +["tinymce/inlite/Theme","global!tinymce.ThemeManager","global!tinymce.util.Delay","tinymce/inlite/ui/Panel","tinymce/inlite/ui/Buttons","tinymce/inlite/core/SkinLoader","tinymce/inlite/core/SelectionMatcher","tinymce/inlite/core/ElementMatcher","tinymce/inlite/core/Matcher","tinymce/inlite/alien/Arr","tinymce/inlite/alien/EditorSettings","tinymce/inlite/core/PredicateId","global!tinymce.util.Tools","global!tinymce.ui.Factory","global!tinymce.DOM","tinymce/inlite/ui/Toolbar","tinymce/inlite/ui/Forms","tinymce/inlite/core/Measure","tinymce/inlite/core/Layout","tinymce/inlite/alien/Type","tinymce/inlite/file/Conversions","tinymce/inlite/file/Picker","tinymce/inlite/core/Actions","global!tinymce.EditorManager","global!tinymce.util.Promise","tinymce/inlite/alien/Uuid","tinymce/inlite/alien/Unlink","tinymce/inlite/core/UrlType","global!tinymce.geom.Rect","tinymce/inlite/core/Convert","tinymce/inlite/alien/Bookmark","global!tinymce.dom.TreeWalker","global!tinymce.dom.RangeUtils"] +jsc*/ +defineGlobal("global!tinymce.ThemeManager", tinymce.ThemeManager); +defineGlobal("global!tinymce.util.Delay", tinymce.util.Delay); +defineGlobal("global!tinymce.util.Tools", tinymce.util.Tools); +defineGlobal("global!tinymce.ui.Factory", tinymce.ui.Factory); +defineGlobal("global!tinymce.DOM", tinymce.DOM); +/** + * Type.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/alien/Type', [ +], function () { + var isType = function (type) { + return function (value) { + return typeof value === type; + }; + }; + + var isArray = function (value) { + return Array.isArray(value); + }; + + var isNull = function (value) { + return value === null; + }; + + var isObject = function (predicate) { + return function (value) { + return !isNull(value) && !isArray(value) && predicate(value); + }; + }; + + return { + isString: isType("string"), + isNumber: isType("number"), + isBoolean: isType("boolean"), + isFunction: isType("function"), + isObject: isObject(isType("object")), + isNull: isNull, + isArray: isArray + }; +}); + +/** + * Toolbar.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/ui/Toolbar', [ + 'global!tinymce.util.Tools', + 'global!tinymce.ui.Factory', + 'tinymce/inlite/alien/Type' +], function (Tools, Factory, Type) { + var setActiveItem = function (item, name) { + return function(state, args) { + var nodeName, i = args.parents.length; + + while (i--) { + nodeName = args.parents[i].nodeName; + if (nodeName == 'OL' || nodeName == 'UL') { + break; + } + } + + item.active(state && nodeName == name); + }; + }; + + var getSelectorStateResult = function (itemName, item) { + var result = function (selector, handler) { + return { + selector: selector, + handler: handler + }; + }; + + var activeHandler = function(state) { + item.active(state); + }; + + var disabledHandler = function (state) { + item.disabled(state); + }; + + if (itemName == 'bullist') { + return result('ul > li', setActiveItem(item, 'UL')); + } + + if (itemName == 'numlist') { + return result('ol > li', setActiveItem(item, 'OL')); + } + + if (item.settings.stateSelector) { + return result(item.settings.stateSelector, activeHandler); + } + + if (item.settings.disabledStateSelector) { + return result(item.settings.disabledStateSelector, disabledHandler); + } + + return null; + }; + + var bindSelectorChanged = function (editor, itemName, item) { + return function () { + var result = getSelectorStateResult(itemName, item); + if (result !== null) { + editor.selection.selectorChanged(result.selector, result.handler); + } + }; + }; + + var itemsToArray = function (items) { + if (Type.isArray(items)) { + return items; + } else if (Type.isString(items)) { + return items.split(/[ ,]/); + } + + return []; + }; + + var create = function (editor, name, items) { + var toolbarItems = [], buttonGroup; + + if (!items) { + return; + } + + Tools.each(itemsToArray(items), function(item) { + var itemName; + + if (item == '|') { + buttonGroup = null; + } else { + if (Factory.has(item)) { + item = {type: item}; + toolbarItems.push(item); + buttonGroup = null; + } else { + if (editor.buttons[item]) { + if (!buttonGroup) { + buttonGroup = {type: 'buttongroup', items: []}; + toolbarItems.push(buttonGroup); + } + + itemName = item; + item = editor.buttons[itemName]; + + if (typeof item == 'function') { + item = item(); + } + + item.type = item.type || 'button'; + + item = Factory.create(item); + item.on('postRender', bindSelectorChanged(editor, itemName, item)); + buttonGroup.items.push(item); + } + } + } + }); + + return Factory.create({ + type: 'toolbar', + layout: 'flow', + name: name, + items: toolbarItems + }); + }; + + return { + create: create + }; +}); + +defineGlobal("global!tinymce.util.Promise", tinymce.util.Promise); +/** + * Uuid.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Generates unique ids this is the same as in core but since + * it's not exposed as a global we can't access it. + */ +define("tinymce/inlite/alien/Uuid", [ +], function() { + var count = 0; + + var seed = function () { + var rnd = function () { + return Math.round(Math.random() * 0xFFFFFFFF).toString(36); + }; + + return 's' + Date.now().toString(36) + rnd() + rnd() + rnd(); + }; + + var uuid = function (prefix) { + return prefix + (count++) + seed(); + }; + + return { + uuid: uuid + }; +}); + +/** + * Bookmark.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/alien/Bookmark', [ +], function () { + /** + * Returns a range bookmark. This will convert indexed bookmarks into temporary span elements with + * index 0 so that they can be restored properly after the DOM has been modified. Text bookmarks will not have spans + * added to them since they can be restored after a dom operation. + * + * So this:

||

+ * becomes:

||

+ * + * @param {DOMRange} rng DOM Range to get bookmark on. + * @return {Object} Bookmark object. + */ + var create = function (dom, rng) { + var bookmark = {}; + + function setupEndPoint(start) { + var offsetNode, container, offset; + + container = rng[start ? 'startContainer' : 'endContainer']; + offset = rng[start ? 'startOffset' : 'endOffset']; + + if (container.nodeType == 1) { + offsetNode = dom.create('span', {'data-mce-type': 'bookmark'}); + + if (container.hasChildNodes()) { + offset = Math.min(offset, container.childNodes.length - 1); + + if (start) { + container.insertBefore(offsetNode, container.childNodes[offset]); + } else { + dom.insertAfter(offsetNode, container.childNodes[offset]); + } + } else { + container.appendChild(offsetNode); + } + + container = offsetNode; + offset = 0; + } + + bookmark[start ? 'startContainer' : 'endContainer'] = container; + bookmark[start ? 'startOffset' : 'endOffset'] = offset; + } + + setupEndPoint(true); + + if (!rng.collapsed) { + setupEndPoint(); + } + + return bookmark; + }; + + /** + * Moves the selection to the current bookmark and removes any selection container wrappers. + * + * @param {Object} bookmark Bookmark object to move selection to. + */ + var resolve = function (dom, bookmark) { + function restoreEndPoint(start) { + var container, offset, node; + + function nodeIndex(container) { + var node = container.parentNode.firstChild, idx = 0; + + while (node) { + if (node == container) { + return idx; + } + + // Skip data-mce-type=bookmark nodes + if (node.nodeType != 1 || node.getAttribute('data-mce-type') != 'bookmark') { + idx++; + } + + node = node.nextSibling; + } + + return -1; + } + + container = node = bookmark[start ? 'startContainer' : 'endContainer']; + offset = bookmark[start ? 'startOffset' : 'endOffset']; + + if (!container) { + return; + } + + if (container.nodeType == 1) { + offset = nodeIndex(container); + container = container.parentNode; + dom.remove(node); + } + + bookmark[start ? 'startContainer' : 'endContainer'] = container; + bookmark[start ? 'startOffset' : 'endOffset'] = offset; + } + + restoreEndPoint(true); + restoreEndPoint(); + + var rng = dom.createRng(); + + rng.setStart(bookmark.startContainer, bookmark.startOffset); + + if (bookmark.endContainer) { + rng.setEnd(bookmark.endContainer, bookmark.endOffset); + } + + return rng; + }; + + return { + create: create, + resolve: resolve + }; +}); + + + +defineGlobal("global!tinymce.dom.TreeWalker", tinymce.dom.TreeWalker); +defineGlobal("global!tinymce.dom.RangeUtils", tinymce.dom.RangeUtils); +/** + * Unlink.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Unlink implementation that doesn't leave partial links for example it would produce: + * a[bc]de -> a[bc]de + * instead of: + * a[bc]de -> a[bc]de + */ +define("tinymce/inlite/alien/Unlink", [ + 'tinymce/inlite/alien/Bookmark', + 'global!tinymce.util.Tools', + 'global!tinymce.dom.TreeWalker', + 'global!tinymce.dom.RangeUtils' +], function (Bookmark, Tools, TreeWalker, RangeUtils) { + var getSelectedElements = function (rootElm, startNode, endNode) { + var walker, node, elms = []; + + walker = new TreeWalker(startNode, rootElm); + for (node = startNode; node; node = walker.next()) { + if (node.nodeType === 1) { + elms.push(node); + } + + if (node === endNode) { + break; + } + } + + return elms; + }; + + var unwrapElements = function (editor, elms) { + var bookmark, dom, selection; + + dom = editor.dom; + selection = editor.selection; + bookmark = Bookmark.create(dom, selection.getRng()); + + Tools.each(elms, function (elm) { + editor.dom.remove(elm, true); + }); + + selection.setRng(Bookmark.resolve(dom, bookmark)); + }; + + var isLink = function (elm) { + return elm.nodeName === 'A' && elm.hasAttribute('href'); + }; + + var getParentAnchorOrSelf = function (dom, elm) { + var anchorElm = dom.getParent(elm, isLink); + return anchorElm ? anchorElm : elm; + }; + + var getSelectedAnchors = function (editor) { + var startElm, endElm, rootElm, anchorElms, selection, dom, rng; + + selection = editor.selection; + dom = editor.dom; + rng = selection.getRng(); + startElm = getParentAnchorOrSelf(dom, RangeUtils.getNode(rng.startContainer, rng.startOffset)); + endElm = RangeUtils.getNode(rng.endContainer, rng.endOffset); + rootElm = editor.getBody(); + anchorElms = Tools.grep(getSelectedElements(rootElm, startElm, endElm), isLink); + + return anchorElms; + }; + + var unlinkSelection = function (editor) { + unwrapElements(editor, getSelectedAnchors(editor)); + }; + + return { + unlinkSelection: unlinkSelection + }; +}); + +/** + * Actions.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/core/Actions', [ + 'tinymce/inlite/alien/Uuid', + 'tinymce/inlite/alien/Unlink' +], function (Uuid, Unlink) { + var createTableHtml = function (cols, rows) { + var x, y, html; + + html = '
'; + html += ''; + + for (y = 0; y < rows; y++) { + html += ''; + + for (x = 0; x < cols; x++) { + html += ''; + } + + html += ''; + } + + html += ''; + html += '

'; + + return html; + }; + + var getInsertedElement = function (editor) { + var elms = editor.dom.select('*[data-mce-id]'); + return elms[0]; + }; + + var insertTable = function (editor, cols, rows) { + editor.undoManager.transact(function () { + var tableElm, cellElm; + + editor.insertContent(createTableHtml(cols, rows)); + + tableElm = getInsertedElement(editor); + tableElm.removeAttribute('data-mce-id'); + cellElm = editor.dom.select('td,th', tableElm); + editor.selection.setCursorLocation(cellElm[0], 0); + }); + }; + + var formatBlock = function (editor, formatName) { + editor.execCommand('FormatBlock', false, formatName); + }; + + var insertBlob = function (editor, base64, blob) { + var blobCache, blobInfo; + + blobCache = editor.editorUpload.blobCache; + blobInfo = blobCache.create(Uuid.uuid('mceu'), blob, base64); + blobCache.add(blobInfo); + + editor.insertContent(editor.dom.createHTML('img', {src: blobInfo.blobUri()})); + }; + + var collapseSelectionToEnd = function (editor) { + editor.selection.collapse(false); + }; + + var unlink = function (editor) { + editor.focus(); + Unlink.unlinkSelection(editor); + collapseSelectionToEnd(editor); + }; + + var changeHref = function (editor, elm, url) { + editor.focus(); + editor.dom.setAttrib(elm, 'href', url); + collapseSelectionToEnd(editor); + }; + + var insertLink = function (editor, url) { + editor.execCommand('mceInsertLink', false, {href: url}); + collapseSelectionToEnd(editor); + }; + + var updateOrInsertLink = function (editor, url) { + var elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]'); + elm ? changeHref(editor, elm, url) : insertLink(editor, url); + }; + + var createLink = function (editor, url) { + url.trim().length === 0 ? unlink(editor) : updateOrInsertLink(editor, url); + }; + + return { + insertTable: insertTable, + formatBlock: formatBlock, + insertBlob: insertBlob, + createLink: createLink, + unlink: unlink + }; +}); + +/** + * UrlType.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/core/UrlType', [ +], function () { + var isDomainLike = function (href) { + return /^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(href.trim()); + }; + + var isAbsolute = function (href) { + return /^https?:\/\//.test(href.trim()); + }; + + return { + isDomainLike: isDomainLike, + isAbsolute: isAbsolute + }; +}); + + + +/** + * Forms.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/ui/Forms', [ + 'global!tinymce.util.Tools', + 'global!tinymce.ui.Factory', + 'global!tinymce.util.Promise', + 'tinymce/inlite/core/Actions', + 'tinymce/inlite/core/UrlType' +], function (Tools, Factory, Promise, Actions, UrlType) { + var focusFirstTextBox = function (form) { + form.find('textbox').eq(0).each(function (ctrl) { + ctrl.focus(); + }); + }; + + var createForm = function (name, spec) { + var form = Factory.create( + Tools.extend({ + type: 'form', + layout: 'flex', + direction: 'row', + padding: 5, + name: name, + spacing: 3 + }, spec) + ); + + form.on('show', function () { + focusFirstTextBox(form); + }); + + return form; + }; + + var toggleVisibility = function (ctrl, state) { + return state ? ctrl.show() : ctrl.hide(); + }; + + var askAboutPrefix = function (editor, href) { + return new Promise(function (resolve) { + editor.windowManager.confirm( + 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', + function (result) { + var output = result === true ? 'http://' + href : href; + resolve(output); + } + ); + }); + }; + + var convertLinkToAbsolute = function (editor, href) { + return !UrlType.isAbsolute(href) && UrlType.isDomainLike(href) ? askAboutPrefix(editor, href) : Promise.resolve(href); + }; + + var createQuickLinkForm = function (editor, hide) { + var unlink = function () { + editor.focus(); + Actions.unlink(editor); + hide(); + }; + + return createForm('quicklink', { + items: [ + {type: 'button', name: 'unlink', icon: 'unlink', onclick: unlink, tooltip: 'Remove link'}, + {type: 'textbox', name: 'linkurl', placeholder: 'Paste or type a link'}, + {type: 'button', icon: 'checkmark', subtype: 'primary', tooltip: 'Ok', onclick: 'submit'} + ], + onshow: function () { + var elm, linkurl = ''; + + elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]'); + if (elm) { + linkurl = editor.dom.getAttrib(elm, 'href'); + } + + this.fromJSON({ + linkurl: linkurl + }); + + toggleVisibility(this.find('#unlink'), elm); + }, + onsubmit: function (e) { + convertLinkToAbsolute(editor, e.data.linkurl).then(function (url) { + Actions.createLink(editor, url); + hide(); + }); + } + }); + }; + + return { + createQuickLinkForm: createQuickLinkForm + }; +}); + +defineGlobal("global!tinymce.geom.Rect", tinymce.geom.Rect); +/** + * Convert.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/core/Convert', [ +], function () { + var fromClientRect = function (clientRect) { + return { + x: clientRect.left, + y: clientRect.top, + w: clientRect.width, + h: clientRect.height + }; + }; + + var toClientRect = function (geomRect) { + return { + left: geomRect.x, + top: geomRect.y, + width: geomRect.w, + height: geomRect.h, + right: geomRect.x + geomRect.w, + bottom: geomRect.y + geomRect.h + }; + }; + + return { + fromClientRect: fromClientRect, + toClientRect: toClientRect + }; +}); + +/** + * Measure.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/core/Measure', [ + 'global!tinymce.DOM', + 'global!tinymce.geom.Rect', + 'tinymce/inlite/core/Convert' +], function (DOM, Rect, Convert) { + var toAbsolute = function (rect) { + var vp = DOM.getViewPort(); + + return { + x: rect.x + vp.x, + y: rect.y + vp.y, + w: rect.w, + h: rect.h + }; + }; + + var measureElement = function (elm) { + var clientRect = elm.getBoundingClientRect(); + + return toAbsolute({ + x: clientRect.left, + y: clientRect.top, + w: Math.max(elm.clientWidth, elm.offsetWidth), + h: Math.max(elm.clientHeight, elm.offsetHeight) + }); + }; + + var getElementRect = function (editor, elm) { + return measureElement(elm); + }; + + var getPageAreaRect = function (editor) { + return measureElement(editor.getElement().ownerDocument.body); + }; + + var getContentAreaRect = function (editor) { + return measureElement(editor.getContentAreaContainer() || editor.getBody()); + }; + + var getSelectionRect = function (editor) { + var clientRect = editor.selection.getBoundingClientRect(); + return clientRect ? toAbsolute(Convert.fromClientRect(clientRect)) : null; + }; + + return { + getElementRect: getElementRect, + getPageAreaRect: getPageAreaRect, + getContentAreaRect: getContentAreaRect, + getSelectionRect: getSelectionRect + }; +}); + +/** + * Layout.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/core/Layout', [ + 'global!tinymce.geom.Rect', + 'tinymce/inlite/core/Convert' +], function (Rect, Convert) { + var result = function (rect, position) { + return { + rect: rect, + position: position + }; + }; + + var moveTo = function (rect, toRect) { + return {x: toRect.x, y: toRect.y, w: rect.w, h: rect.h}; + }; + + var calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) { + var relPos, relRect, outputPanelRect; + + relPos = Rect.findBestRelativePosition(panelRect, targetRect, contentAreaRect, testPositions1); + targetRect = Rect.clamp(targetRect, contentAreaRect); + + if (relPos) { + relRect = Rect.relativePosition(panelRect, targetRect, relPos); + outputPanelRect = moveTo(panelRect, relRect); + return result(outputPanelRect, relPos); + } + + targetRect = Rect.intersect(contentAreaRect, targetRect); + if (targetRect) { + relPos = Rect.findBestRelativePosition(panelRect, targetRect, contentAreaRect, testPositions2); + if (relPos) { + relRect = Rect.relativePosition(panelRect, targetRect, relPos); + outputPanelRect = moveTo(panelRect, relRect); + return result(outputPanelRect, relPos); + } + + outputPanelRect = moveTo(panelRect, targetRect); + return result(outputPanelRect, relPos); + } + + return null; + }; + + var calcInsert = function (targetRect, contentAreaRect, panelRect) { + return calcByPositions( + ['cr-cl', 'cl-cr'], + ['bc-tc', 'bl-tl', 'br-tr'], + targetRect, + contentAreaRect, + panelRect + ); + }; + + var calc = function (targetRect, contentAreaRect, panelRect) { + return calcByPositions( + ['tc-bc', 'bc-tc', 'tl-bl', 'bl-tl', 'tr-br', 'br-tr'], + ['bc-tc', 'bl-tl', 'br-tr'], + targetRect, + contentAreaRect, + panelRect + ); + }; + + var userConstrain = function (handler, targetRect, contentAreaRect, panelRect) { + var userConstrainedPanelRect; + + if (typeof handler === 'function') { + userConstrainedPanelRect = handler({ + elementRect: Convert.toClientRect(targetRect), + contentAreaRect: Convert.toClientRect(contentAreaRect), + panelRect: Convert.toClientRect(panelRect) + }); + + return Convert.fromClientRect(userConstrainedPanelRect); + } + + return panelRect; + }; + + var defaultHandler = function (rects) { + return rects.panelRect; + }; + + return { + calcInsert: calcInsert, + calc: calc, + userConstrain: userConstrain, + defaultHandler: defaultHandler + }; +}); + +/** + * EditorSettings.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/alien/EditorSettings', [ + 'tinymce/inlite/alien/Type' +], function (Type) { + var validDefaultOrDie = function (value, predicate) { + if (predicate(value)) { + return true; + } + + throw new Error('Default value doesn\'t match requested type.'); + }; + + var getByTypeOr = function (predicate) { + return function (editor, name, defaultValue) { + var settings = editor.settings; + validDefaultOrDie(defaultValue, predicate); + return name in settings && predicate(settings[name]) ? settings[name] : defaultValue; + }; + }; + + var splitNoEmpty = function (str, delim) { + return str.split(delim).filter(function (item) { + return item.length > 0; + }); + }; + + var itemsToArray = function (value, defaultValue) { + var stringToItemsArray = function (value) { + return typeof value === 'string' ? splitNoEmpty(value, /[ ,]/) : value; + }; + + var boolToItemsArray = function (value, defaultValue) { + return value === false ? [ ] : defaultValue; + }; + + if (Type.isArray(value)) { + return value; + } else if (Type.isString(value)) { + return stringToItemsArray(value); + } else if (Type.isBoolean(value)) { + return boolToItemsArray(value, defaultValue); + } + + return defaultValue; + }; + + var getToolbarItemsOr = function (predicate) { + return function (editor, name, defaultValue) { + var value = name in editor.settings ? editor.settings[name] : defaultValue; + validDefaultOrDie(defaultValue, predicate); + return itemsToArray(value, defaultValue); + }; + }; + + return { + // TODO: Add Option based getString, getBool if merged with core + getStringOr: getByTypeOr(Type.isString), + getBoolOr: getByTypeOr(Type.isBoolean), + getNumberOr: getByTypeOr(Type.isNumber), + getHandlerOr: getByTypeOr(Type.isFunction), + getToolbarItemsOr: getToolbarItemsOr(Type.isArray) + }; +}); + +/** + * Panel.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/ui/Panel', [ + 'global!tinymce.util.Tools', + 'global!tinymce.ui.Factory', + 'global!tinymce.DOM', + 'tinymce/inlite/ui/Toolbar', + 'tinymce/inlite/ui/Forms', + 'tinymce/inlite/core/Measure', + 'tinymce/inlite/core/Layout', + 'tinymce/inlite/alien/EditorSettings' +], function (Tools, Factory, DOM, Toolbar, Forms, Measure, Layout, EditorSettings) { + return function () { + var DEFAULT_TEXT_SELECTION_ITEMS = ['bold', 'italic', '|', 'quicklink', 'h2', 'h3', 'blockquote']; + var DEFAULT_INSERT_TOOLBAR_ITEMS = ['quickimage', 'quicktable']; + var panel, currentRect; + + var createToolbars = function (editor, toolbars) { + return Tools.map(toolbars, function (toolbar) { + return Toolbar.create(editor, toolbar.id, toolbar.items); + }); + }; + + var getTextSelectionToolbarItems = function (editor) { + return EditorSettings.getToolbarItemsOr(editor, 'selection_toolbar', DEFAULT_TEXT_SELECTION_ITEMS); + }; + + var getInsertToolbarItems = function (editor) { + return EditorSettings.getToolbarItemsOr(editor, 'insert_toolbar', DEFAULT_INSERT_TOOLBAR_ITEMS); + }; + + var hasToolbarItems = function (toolbar) { + return toolbar.items().length > 0; + }; + + var create = function (editor, toolbars) { + var items = createToolbars(editor, toolbars).concat([ + Toolbar.create(editor, 'text', getTextSelectionToolbarItems(editor)), + Toolbar.create(editor, 'insert', getInsertToolbarItems(editor)), + Forms.createQuickLinkForm(editor, hide) + ]); + + return Factory.create({ + type: 'floatpanel', + role: 'dialog', + classes: 'tinymce tinymce-inline arrow', + ariaLabel: 'Inline toolbar', + layout: 'flex', + direction: 'column', + align: 'stretch', + autohide: false, + autofix: true, + fixed: true, + border: 1, + items: Tools.grep(items, hasToolbarItems), + oncancel: function() { + editor.focus(); + } + }); + }; + + var showPanel = function (panel) { + if (panel) { + panel.show(); + } + }; + + var movePanelTo = function (panel, pos) { + panel.moveTo(pos.x, pos.y); + }; + + var togglePositionClass = function (panel, relPos) { + relPos = relPos ? relPos.substr(0, 2) : ''; + + Tools.each({ + t: 'down', + b: 'up', + c: 'center' + }, function(cls, pos) { + panel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1)); + }); + + if (relPos === 'cr') { + panel.classes.toggle('arrow-left', true); + panel.classes.toggle('arrow-right', false); + } else if (relPos === 'cl') { + panel.classes.toggle('arrow-left', true); + panel.classes.toggle('arrow-right', true); + } else { + Tools.each({ + l: 'left', + r: 'right' + }, function(cls, pos) { + panel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1)); + }); + } + }; + + var showToolbar = function (panel, id) { + var toolbars = panel.items().filter('#' + id); + + if (toolbars.length > 0) { + toolbars[0].show(); + panel.reflow(); + return true; + } + + return false; + }; + + var showPanelAt = function (panel, id, editor, targetRect) { + var contentAreaRect, panelRect, result, userConstainHandler; + + showPanel(panel); + panel.items().hide(); + + if (!showToolbar(panel, id)) { + hide(panel); + return; + } + + userConstainHandler = EditorSettings.getHandlerOr(editor, 'inline_toolbar_position_handler', Layout.defaultHandler); + contentAreaRect = Measure.getContentAreaRect(editor); + panelRect = DOM.getRect(panel.getEl()); + + if (id === 'insert') { + result = Layout.calcInsert(targetRect, contentAreaRect, panelRect); + } else { + result = Layout.calc(targetRect, contentAreaRect, panelRect); + } + + if (result) { + panelRect = result.rect; + currentRect = targetRect; + movePanelTo(panel, Layout.userConstrain(userConstainHandler, targetRect, contentAreaRect, panelRect)); + togglePositionClass(panel, result.position); + } else { + hide(panel); + } + }; + + var hasFormVisible = function () { + return panel.items().filter('form:visible').length > 0; + }; + + var showForm = function (editor, id) { + if (panel) { + panel.items().hide(); + + if (!showToolbar(panel, id)) { + hide(panel); + return; + } + + var contentAreaRect, panelRect, result, userConstainHandler; + + showPanel(panel); + panel.items().hide(); + showToolbar(panel, id); + + userConstainHandler = EditorSettings.getHandlerOr(editor, 'inline_toolbar_position_handler', Layout.defaultHandler); + contentAreaRect = Measure.getContentAreaRect(editor); + panelRect = DOM.getRect(panel.getEl()); + + result = Layout.calc(currentRect, contentAreaRect, panelRect); + + if (result) { + panelRect = result.rect; + movePanelTo(panel, Layout.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect)); + togglePositionClass(panel, result.position); + } + } + }; + + var show = function (editor, id, targetRect, toolbars) { + if (!panel) { + panel = create(editor, toolbars); + panel.renderTo(document.body).reflow().moveTo(targetRect.x, targetRect.y); + editor.nodeChanged(); + } + + showPanelAt(panel, id, editor, targetRect); + }; + + var hide = function () { + if (panel) { + panel.hide(); + } + }; + + var focus = function () { + if (panel) { + panel.find('toolbar:visible').eq(0).each(function (item) { + item.focus(true); + }); + } + }; + + var remove = function () { + if (panel) { + panel.remove(); + panel = null; + } + }; + + var inForm = function () { + return panel && panel.visible() && hasFormVisible(); + }; + + return { + show: show, + showForm: showForm, + inForm: inForm, + hide: hide, + focus: focus, + remove: remove + }; + }; +}); + +/** + * Conversions.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/file/Conversions', [ + 'global!tinymce.util.Promise' +], function (Promise) { + var blobToBase64 = function (blob) { + return new Promise(function(resolve) { + var reader = new FileReader(); + + reader.onloadend = function() { + resolve(reader.result.split(',')[1]); + }; + + reader.readAsDataURL(blob); + }); + }; + + return { + blobToBase64: blobToBase64 + }; +}); + + + +/** + * Picker.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/file/Picker', [ + 'global!tinymce.util.Promise' +], function (Promise) { + var pickFile = function () { + return new Promise(function (resolve) { + var fileInput; + + fileInput = document.createElement("input"); + fileInput.type = "file"; + fileInput.style.position = 'fixed'; + fileInput.style.left = 0; + fileInput.style.top = 0; + fileInput.style.opacity = 0.001; + document.body.appendChild(fileInput); + + fileInput.onchange = function(e) { + resolve(Array.prototype.slice.call(e.target.files)); + }; + + fileInput.click(); + fileInput.parentNode.removeChild(fileInput); + }); + }; + + return { + pickFile: pickFile + }; +}); + + + +/** + * Buttons.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/ui/Buttons', [ + 'tinymce/inlite/ui/Panel', + 'tinymce/inlite/file/Conversions', + 'tinymce/inlite/file/Picker', + 'tinymce/inlite/core/Actions' +], function (Panel, Conversions, Picker, Actions) { + var addHeaderButtons = function (editor) { + var formatBlock = function (name) { + return function () { + Actions.formatBlock(editor, name); + }; + }; + + for (var i = 1; i < 6; i++) { + var name = 'h' + i; + + editor.addButton(name, { + text: name.toUpperCase(), + tooltip: 'Heading ' + i, + stateSelector: name, + onclick: formatBlock(name), + onPostRender: function () { + // TODO: Remove this hack that produces bold H1-H6 when we have proper icons + var span = this.getEl().firstChild.firstChild; + span.style.fontWeight = 'bold'; + } + }); + } + }; + + var addToEditor = function (editor, panel) { + editor.addButton('quicklink', { + icon: 'link', + tooltip: 'Insert/Edit link', + stateSelector: 'a[href]', + onclick: function () { + panel.showForm(editor, 'quicklink'); + } + }); + + editor.addButton('quickimage', { + icon: 'image', + tooltip: 'Insert image', + onclick: function () { + Picker.pickFile().then(function (files) { + var blob = files[0]; + + Conversions.blobToBase64(blob).then(function (base64) { + Actions.insertBlob(editor, base64, blob); + }); + }); + } + }); + + editor.addButton('quicktable', { + icon: 'table', + tooltip: 'Insert table', + onclick: function () { + panel.hide(); + Actions.insertTable(editor, 2, 2); + } + }); + + addHeaderButtons(editor); + }; + + return { + addToEditor: addToEditor + }; +}); + +defineGlobal("global!tinymce.EditorManager", tinymce.EditorManager); +/** + * SkinLoader.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/core/SkinLoader', [ + 'global!tinymce.EditorManager', + 'global!tinymce.DOM' +], function (EditorManager, DOM) { + var fireSkinLoaded = function (editor, callback) { + var done = function () { + editor.fire('SkinLoaded'); + callback(); + }; + + if (editor.initialized) { + done(); + } else { + editor.on('init', done); + } + }; + + var urlFromName = function (name) { + var prefix = EditorManager.baseURL + '/skins/'; + return name ? prefix + name : prefix + 'lightgray'; + }; + + var toAbsoluteUrl = function (editor, url) { + return editor.documentBaseURI.toAbsolute(url); + }; + + var load = function (editor, callback) { + var settings = editor.settings; + var skinUrl = settings.skin_url ? toAbsoluteUrl(editor, settings.skin_url) : urlFromName(settings.skin); + + var done = function () { + fireSkinLoaded(editor, callback); + }; + + DOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done); + editor.contentCSS.push(skinUrl + '/content.inline.min.css'); + }; + + return { + load: load + }; +}); + + + +/** + * Matcher.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/core/Matcher', [ +], function () { + // result :: String, Rect -> Matcher.result + var result = function (id, rect) { + return { + id: id, + rect: rect + }; + }; + + // match :: Editor, [(Editor -> Matcher.result | Null)] -> Matcher.result | Null + var match = function (editor, matchers) { + for (var i = 0; i < matchers.length; i++) { + var f = matchers[i]; + var result = f(editor); + + if (result) { + return result; + } + } + + return null; + }; + + return { + match: match, + result: result + }; +}); + +/** + * SelectionMatcher.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/core/SelectionMatcher', [ + 'tinymce/inlite/core/Matcher', + 'tinymce/inlite/core/Measure' +], function (Matcher, Measure) { + // textSelection :: String -> (Editor -> Matcher.result | Null) + var textSelection = function (id) { + return function (editor) { + if (!editor.selection.isCollapsed()) { + return Matcher.result(id, Measure.getSelectionRect(editor)); + } + + return null; + }; + }; + + // emptyTextBlock :: [Elements], String -> (Editor -> Matcher.result | Null) + var emptyTextBlock = function (elements, id) { + return function (editor) { + var i, textBlockElementsMap = editor.schema.getTextBlockElements(); + + for (i = 0; i < elements.length; i++) { + if (elements[i].nodeName === 'TABLE') { + return null; + } + } + + for (i = 0; i < elements.length; i++) { + if (elements[i].nodeName in textBlockElementsMap) { + if (editor.dom.isEmpty(elements[i])) { + return Matcher.result(id, Measure.getSelectionRect(editor)); + } + + return null; + } + } + + return null; + }; + }; + + return { + textSelection: textSelection, + emptyTextBlock: emptyTextBlock + }; +}); + +/** + * ElementMatcher.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/core/ElementMatcher', [ + 'tinymce/inlite/core/Matcher', + 'tinymce/inlite/core/Measure' +], function (Matcher, Measure) { + // element :: Element, [PredicateId] -> (Editor -> Matcher.result | Null) + var element = function (element, predicateIds) { + return function (editor) { + for (var i = 0; i < predicateIds.length; i++) { + if (predicateIds[i].predicate(element)) { + return Matcher.result(predicateIds[i].id, Measure.getElementRect(editor, element)); + } + } + + return null; + }; + }; + + // parent :: [Elements], [PredicateId] -> (Editor -> Matcher.result | Null) + var parent = function (elements, predicateIds) { + return function (editor) { + for (var i = 0; i < elements.length; i++) { + for (var x = 0; x < predicateIds.length; x++) { + if (predicateIds[x].predicate(elements[i])) { + return Matcher.result(predicateIds[x].id, Measure.getElementRect(editor, elements[i])); + } + } + } + + return null; + }; + }; + + return { + element: element, + parent: parent + }; +}); + +/** + * Arr.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/alien/Arr', [ +], function () { + var flatten = function (arr) { + return arr.reduce(function (results, item) { + return Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item); + }, []); + }; + + return { + flatten: flatten + }; +}); + +/** + * PredicateId.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/core/PredicateId', [ + 'global!tinymce.util.Tools' +], function (Tools) { + var create = function (id, predicate) { + return { + id: id, + predicate: predicate + }; + }; + + // fromContextToolbars :: [ContextToolbar] -> [PredicateId] + var fromContextToolbars = function (toolbars) { + return Tools.map(toolbars, function (toolbar) { + return create(toolbar.id, toolbar.predicate); + }); + }; + + return { + create: create, + fromContextToolbars: fromContextToolbars + }; +}); + +/** + * Theme.js + * + * Released under LGPL License. + * Copyright (c) 1999-2016 Ephox Corp. All rights reserved + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define('tinymce/inlite/Theme', [ + 'global!tinymce.ThemeManager', + 'global!tinymce.util.Delay', + 'tinymce/inlite/ui/Panel', + 'tinymce/inlite/ui/Buttons', + 'tinymce/inlite/core/SkinLoader', + 'tinymce/inlite/core/SelectionMatcher', + 'tinymce/inlite/core/ElementMatcher', + 'tinymce/inlite/core/Matcher', + 'tinymce/inlite/alien/Arr', + 'tinymce/inlite/alien/EditorSettings', + 'tinymce/inlite/core/PredicateId' +], function(ThemeManager, Delay, Panel, Buttons, SkinLoader, SelectionMatcher, ElementMatcher, Matcher, Arr, EditorSettings, PredicateId) { + var getSelectionElements = function (editor) { + var node = editor.selection.getNode(); + var elms = editor.dom.getParents(node); + return elms; + }; + + var createToolbar = function (editor, selector, id, items) { + var selectorPredicate = function (elm) { + return editor.dom.is(elm, selector); + }; + + return { + predicate: selectorPredicate, + id: id, + items: items + }; + }; + + var getToolbars = function (editor) { + var contextToolbars = editor.contextToolbars; + + return Arr.flatten([ + contextToolbars ? contextToolbars : [], + createToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright') + ]); + }; + + var findMatchResult = function (editor, toolbars) { + var result, elements, contextToolbarsPredicateIds; + + elements = getSelectionElements(editor); + contextToolbarsPredicateIds = PredicateId.fromContextToolbars(toolbars); + + result = Matcher.match(editor, [ + ElementMatcher.element(elements[0], contextToolbarsPredicateIds), + SelectionMatcher.textSelection('text'), + SelectionMatcher.emptyTextBlock(elements, 'insert'), + ElementMatcher.parent(elements, contextToolbarsPredicateIds) + ]); + + return result && result.rect ? result : null; + }; + + var togglePanel = function (editor, panel) { + var toggle = function () { + var toolbars = getToolbars(editor); + var result = findMatchResult(editor, toolbars); + + if (result) { + panel.show(editor, result.id, result.rect, toolbars); + } else { + panel.hide(); + } + }; + + return function () { + if (!editor.removed) { + toggle(); + } + }; + }; + + var ignoreWhenFormIsVisible = function (panel, f) { + return function () { + if (!panel.inForm()) { + f(); + } + }; + }; + + var bindContextualToolbarsEvents = function (editor, panel) { + var throttledTogglePanel = Delay.throttle(togglePanel(editor, panel), 0); + var throttledTogglePanelWhenNotInForm = Delay.throttle(ignoreWhenFormIsVisible(panel, togglePanel(editor, panel)), 0); + + editor.on('blur hide ObjectResizeStart', panel.hide); + editor.on('click', throttledTogglePanel); + editor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm); + editor.on('ResizeEditor ResizeWindow keyup', throttledTogglePanel); + editor.on('remove', panel.remove); + + editor.shortcuts.add('Alt+F10', '', panel.focus); + }; + + var overrideLinkShortcut = function (editor, panel) { + editor.shortcuts.remove('meta+k'); + editor.shortcuts.add('meta+k', '', function () { + var toolbars = getToolbars(editor); + var result = result = Matcher.match(editor, [ + SelectionMatcher.textSelection('quicklink') + ]); + + if (result) { + panel.show(editor, result.id, result.rect, toolbars); + } + }); + }; + + var renderInlineUI = function (editor, panel) { + SkinLoader.load(editor, function () { + bindContextualToolbarsEvents(editor, panel); + overrideLinkShortcut(editor, panel); + }); + + return {}; + }; + + var fail = function (message) { + throw new Error(message); + }; + + ThemeManager.add('inlite', function (editor) { + var panel = new Panel(); + + Buttons.addToEditor(editor, panel); + + var renderUI = function () { + return editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.'); + }; + + return { + renderUI: renderUI + }; + }); + + return function() {}; +}); + +dem('tinymce/inlite/Theme')(); +})(); diff --git a/public/mosaico/dist/vendor/themes/inlite/theme.min.js b/public/mosaico/dist/vendor/themes/inlite/theme.min.js new file mode 100644 index 00000000..4e7e62e8 --- /dev/null +++ b/public/mosaico/dist/vendor/themes/inlite/theme.min.js @@ -0,0 +1 @@ +!function(){var e={},t=function(t){for(var n=e[t],i=n.deps,o=n.defn,a=i.length,s=new Array(a),l=0;l li",r(t,"UL")):"numlist"==e?n("ol > li",r(t,"OL")):t.settings.stateSelector?n(t.settings.stateSelector,i):t.settings.disabledStateSelector?n(t.settings.disabledStateSelector,o):null},o=function(e,t,n){return function(){var r=i(t,n);null!==r&&e.selection.selectorChanged(r.selector,r.handler)}},a=function(e){return n.isArray(e)?e:n.isString(e)?e.split(/[ ,]/):[]},s=function(n,r,i){var s,l=[];if(i)return e.each(a(i),function(e){var r;"|"==e?s=null:t.has(e)?(e={type:e},l.push(e),s=null):n.buttons[e]&&(s||(s={type:"buttongroup",items:[]},l.push(s)),r=e,e=n.buttons[r],"function"==typeof e&&(e=e()),e.type=e.type||"button",e=t.create(e),e.on("postRender",o(n,r,e)),s.items.push(e))}),t.create({type:"toolbar",layout:"flow",name:r,items:l})};return{create:s}}),s("o",tinymce.util.Promise),a("p",[],function(){var e=0,t=function(){var e=function(){return Math.round(4294967295*Math.random()).toString(36)};return"s"+Date.now().toString(36)+e()+e()+e()},n=function(n){return n+e++ +t()};return{uuid:n}}),a("u",[],function(){var e=function(e,t){function n(n){var i,o,a;o=t[n?"startContainer":"endContainer"],a=t[n?"startOffset":"endOffset"],1==o.nodeType&&(i=e.create("span",{"data-mce-type":"bookmark"}),o.hasChildNodes()?(a=Math.min(a,o.childNodes.length-1),n?o.insertBefore(i,o.childNodes[a]):e.insertAfter(i,o.childNodes[a])):o.appendChild(i),o=i,a=0),r[n?"startContainer":"endContainer"]=o,r[n?"startOffset":"endOffset"]=a}var r={};return n(!0),t.collapsed||n(),r},t=function(e,t){function n(n){function r(e){for(var t=e.parentNode.firstChild,n=0;t;){if(t==e)return n;1==t.nodeType&&"bookmark"==t.getAttribute("data-mce-type")||n++,t=t.nextSibling}return-1}var i,o,a;i=a=t[n?"startContainer":"endContainer"],o=t[n?"startOffset":"endOffset"],i&&(1==i.nodeType&&(o=r(i),i=i.parentNode,e.remove(a)),t[n?"startContainer":"endContainer"]=i,t[n?"startOffset":"endOffset"]=o)}n(!0),n();var r=e.createRng();return r.setStart(t.startContainer,t.startOffset),t.endContainer&&r.setEnd(t.endContainer,t.endOffset),r};return{create:e,resolve:t}}),s("v",tinymce.dom.TreeWalker),s("w",tinymce.dom.RangeUtils),a("q",["u","c","v","w"],function(e,t,n,r){var i=function(e,t,r){var i,o,a=[];for(i=new n(t,e),o=t;o&&(1===o.nodeType&&a.push(o),o!==r);o=i.next());return a},o=function(n,r){var i,o,a;o=n.dom,a=n.selection,i=e.create(o,a.getRng()),t.each(r,function(e){n.dom.remove(e,!0)}),a.setRng(e.resolve(o,i))},a=function(e){return"A"===e.nodeName&&e.hasAttribute("href")},s=function(e,t){var n=e.getParent(t,a);return n?n:t},l=function(e){var n,o,l,c,u,d,f;return u=e.selection,d=e.dom,f=u.getRng(),n=s(d,r.getNode(f.startContainer,f.startOffset)),o=r.getNode(f.endContainer,f.endOffset),l=e.getBody(),c=t.grep(i(l,n,o),a)},c=function(e){o(e,l(e))};return{unlinkSelection:c}}),a("m",["p","q"],function(e,t){var n=function(e,t){var n,r,i;for(i='',i+="",r=0;r",n=0;n
";i+=""}return i+="
",i+="
"},r=function(e){var t=e.dom.select("*[data-mce-id]");return t[0]},i=function(e,t,i){e.undoManager.transact(function(){var o,a;e.insertContent(n(t,i)),o=r(e),o.removeAttribute("data-mce-id"),a=e.dom.select("td,th",o),e.selection.setCursorLocation(a[0],0)})},o=function(e,t){e.execCommand("FormatBlock",!1,t)},a=function(t,n,r){var i,o;i=t.editorUpload.blobCache,o=i.create(e.uuid("mceu"),r,n),i.add(o),t.insertContent(t.dom.createHTML("img",{src:o.blobUri()}))},s=function(e){e.selection.collapse(!1)},l=function(e){e.focus(),t.unlinkSelection(e),s(e)},c=function(e,t,n){e.focus(),e.dom.setAttrib(t,"href",n),s(e)},u=function(e,t){e.execCommand("mceInsertLink",!1,{href:t}),s(e)},d=function(e,t){var n=e.dom.getParent(e.selection.getStart(),"a[href]");n?c(e,n,t):u(e,t)},f=function(e,t){0===t.trim().length?l(e):d(e,t)};return{insertTable:i,formatBlock:o,insertBlob:a,createLink:f,unlink:l}}),a("r",[],function(){var e=function(e){return/^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(e.trim())},t=function(e){return/^https?:\/\//.test(e.trim())};return{isDomainLike:e,isAbsolute:t}}),a("g",["c","d","o","m","r"],function(e,t,n,r,i){var o=function(e){e.find("textbox").eq(0).each(function(e){e.focus()})},a=function(n,r){var i=t.create(e.extend({type:"form",layout:"flex",direction:"row",padding:5,name:n,spacing:3},r));return i.on("show",function(){o(i)}),i},s=function(e,t){return t?e.show():e.hide()},l=function(e,t){return new n(function(n){e.windowManager.confirm("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(e){var r=e===!0?"http://"+t:t;n(r)})})},c=function(e,t){return!i.isAbsolute(t)&&i.isDomainLike(t)?l(e,t):n.resolve(t)},u=function(e,t){var n=function(){e.focus(),r.unlink(e),t()};return a("quicklink",{items:[{type:"button",name:"unlink",icon:"unlink",onclick:n,tooltip:"Remove link"},{type:"textbox",name:"linkurl",placeholder:"Paste or type a link"},{type:"button",icon:"checkmark",subtype:"primary",tooltip:"Ok",onclick:"submit"}],onshow:function(){var t,n="";t=e.dom.getParent(e.selection.getStart(),"a[href]"),t&&(n=e.dom.getAttrib(t,"href")),this.fromJSON({linkurl:n}),s(this.find("#unlink"),t)},onsubmit:function(n){c(e,n.data.linkurl).then(function(n){r.createLink(e,n),t()})}})};return{createQuickLinkForm:u}}),s("s",tinymce.geom.Rect),a("t",[],function(){var e=function(e){return{x:e.left,y:e.top,w:e.width,h:e.height}},t=function(e){return{left:e.x,top:e.y,width:e.w,height:e.h,right:e.x+e.w,bottom:e.y+e.h}};return{fromClientRect:e,toClientRect:t}}),a("h",["e","s","t"],function(e,t,n){var r=function(t){var n=e.getViewPort();return{x:t.x+n.x,y:t.y+n.y,w:t.w,h:t.h}},i=function(e){var t=e.getBoundingClientRect();return r({x:t.left,y:t.top,w:Math.max(e.clientWidth,e.offsetWidth),h:Math.max(e.clientHeight,e.offsetHeight)})},o=function(e,t){return i(t)},a=function(e){return i(e.getElement().ownerDocument.body)},s=function(e){return i(e.getContentAreaContainer()||e.getBody())},l=function(e){var t=e.selection.getBoundingClientRect();return t?r(n.fromClientRect(t)):null};return{getElementRect:o,getPageAreaRect:a,getContentAreaRect:s,getSelectionRect:l}}),a("i",["s","t"],function(e,t){var n=function(e,t){return{rect:e,position:t}},r=function(e,t){return{x:t.x,y:t.y,w:e.w,h:e.h}},i=function(t,i,o,a,s){var l,c,u;return l=e.findBestRelativePosition(s,o,a,t),o=e.clamp(o,a),l?(c=e.relativePosition(s,o,l),u=r(s,c),n(u,l)):(o=e.intersect(a,o),o?(l=e.findBestRelativePosition(s,o,a,i))?(c=e.relativePosition(s,o,l),u=r(s,c),n(u,l)):(u=r(s,o),n(u,l)):null)},o=function(e,t,n){return i(["cr-cl","cl-cr"],["bc-tc","bl-tl","br-tr"],e,t,n)},a=function(e,t,n){return i(["tc-bc","bc-tc","tl-bl","bl-tl","tr-br","br-tr"],["bc-tc","bl-tl","br-tr"],e,t,n)},s=function(e,n,r,i){var o;return"function"==typeof e?(o=e({elementRect:t.toClientRect(n),contentAreaRect:t.toClientRect(r),panelRect:t.toClientRect(i)}),t.fromClientRect(o)):i},l=function(e){return e.panelRect};return{calcInsert:o,calc:a,userConstrain:s,defaultHandler:l}}),a("a",["j"],function(e){var t=function(e,t){if(t(e))return!0;throw new Error("Default value doesn't match requested type.")},n=function(e){return function(n,r,i){var o=n.settings;return t(i,e),r in o&&e(o[r])?o[r]:i}},r=function(e,t){return e.split(t).filter(function(e){return e.length>0})},i=function(t,n){var i=function(e){return"string"==typeof e?r(e,/[ ,]/):e},o=function(e,t){return e===!1?[]:t};return e.isArray(t)?t:e.isString(t)?i(t):e.isBoolean(t)?o(t,n):n},o=function(e){return function(n,r,o){var a=r in n.settings?n.settings[r]:o;return t(o,e),i(a,o)}};return{getStringOr:n(e.isString),getBoolOr:n(e.isBoolean),getNumberOr:n(e.isNumber),getHandlerOr:n(e.isFunction),getToolbarItemsOr:o(e.isArray)}}),a("3",["c","d","e","f","g","h","i","a"],function(e,t,n,r,i,o,a,s){return function(){var l,c,u=["bold","italic","|","quicklink","h2","h3","blockquote"],d=["quickimage","quicktable"],f=function(t,n){return e.map(n,function(e){return r.create(t,e.id,e.items)})},h=function(e){return s.getToolbarItemsOr(e,"selection_toolbar",u)},p=function(e){return s.getToolbarItemsOr(e,"insert_toolbar",d)},m=function(e){return e.items().length>0},g=function(n,o){var a=f(n,o).concat([r.create(n,"text",h(n)),r.create(n,"insert",p(n)),i.createQuickLinkForm(n,_)]);return t.create({type:"floatpanel",role:"dialog",classes:"tinymce tinymce-inline arrow",ariaLabel:"Inline toolbar",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!0,border:1,items:e.grep(a,m),oncancel:function(){n.focus()}})},v=function(e){e&&e.show()},y=function(e,t){e.moveTo(t.x,t.y)},b=function(t,n){n=n?n.substr(0,2):"",e.each({t:"down",b:"up",c:"center"},function(e,r){t.classes.toggle("arrow-"+e,r===n.substr(0,1))}),"cr"===n?(t.classes.toggle("arrow-left",!0),t.classes.toggle("arrow-right",!1)):"cl"===n?(t.classes.toggle("arrow-left",!0),t.classes.toggle("arrow-right",!0)):e.each({l:"left",r:"right"},function(e,r){t.classes.toggle("arrow-"+e,r===n.substr(1,1))})},C=function(e,t){var n=e.items().filter("#"+t);return n.length>0&&(n[0].show(),e.reflow(),!0)},x=function(e,t,r,i){var l,u,d,f;return v(e),e.items().hide(),C(e,t)?(f=s.getHandlerOr(r,"inline_toolbar_position_handler",a.defaultHandler),l=o.getContentAreaRect(r),u=n.getRect(e.getEl()),d="insert"===t?a.calcInsert(i,l,u):a.calc(i,l,u),void(d?(u=d.rect,c=i,y(e,a.userConstrain(f,i,l,u)),b(e,d.position)):_(e))):void _(e)},w=function(){return l.items().filter("form:visible").length>0},N=function(e,t){if(l){if(l.items().hide(),!C(l,t))return void _(l);var r,i,u,d;v(l),l.items().hide(),C(l,t),d=s.getHandlerOr(e,"inline_toolbar_position_handler",a.defaultHandler),r=o.getContentAreaRect(e),i=n.getRect(l.getEl()),u=a.calc(c,r,i),u&&(i=u.rect,y(l,a.userConstrain(d,c,r,i)),b(l,u.position))}},E=function(e,t,n,r){l||(l=g(e,r),l.renderTo(document.body).reflow().moveTo(n.x,n.y),e.nodeChanged()),x(l,t,e,n)},_=function(){l&&l.hide()},S=function(){l&&l.find("toolbar:visible").eq(0).each(function(e){e.focus(!0)})},k=function(){l&&(l.remove(),l=null)},T=function(){return l&&l.visible()&&w()};return{show:E,showForm:N,inForm:T,hide:_,focus:S,remove:k}}}),a("k",["o"],function(e){var t=function(t){return new e(function(e){var n=new FileReader;n.onloadend=function(){e(n.result.split(",")[1])},n.readAsDataURL(t)})};return{blobToBase64:t}}),a("l",["o"],function(e){var t=function(){return new e(function(e){var t;t=document.createElement("input"),t.type="file",t.style.position="fixed",t.style.left=0,t.style.top=0,t.style.opacity=.001,document.body.appendChild(t),t.onchange=function(t){e(Array.prototype.slice.call(t.target.files))},t.click(),t.parentNode.removeChild(t)})};return{pickFile:t}}),a("4",["3","k","l","m"],function(e,t,n,r){var i=function(e){for(var t=function(t){return function(){r.formatBlock(e,t)}},n=1;n<6;n++){var i="h"+n;e.addButton(i,{text:i.toUpperCase(),tooltip:"Heading "+n,stateSelector:i,onclick:t(i),onPostRender:function(){var e=this.getEl().firstChild.firstChild;e.style.fontWeight="bold"}})}},o=function(e,o){e.addButton("quicklink",{icon:"link",tooltip:"Insert/Edit link",stateSelector:"a[href]",onclick:function(){o.showForm(e,"quicklink")}}),e.addButton("quickimage",{icon:"image",tooltip:"Insert image",onclick:function(){n.pickFile().then(function(n){var i=n[0];t.blobToBase64(i).then(function(t){r.insertBlob(e,t,i)})})}}),e.addButton("quicktable",{icon:"table",tooltip:"Insert table",onclick:function(){o.hide(),r.insertTable(e,2,2)}}),i(e)};return{addToEditor:o}}),s("n",tinymce.EditorManager),a("5",["n","e"],function(e,t){var n=function(e,t){var n=function(){e.fire("SkinLoaded"),t()};e.initialized?n():e.on("init",n)},r=function(t){var n=e.baseURL+"/skins/";return t?n+t:n+"lightgray"},i=function(e,t){return e.documentBaseURI.toAbsolute(t)},o=function(e,o){var a=e.settings,s=a.skin_url?i(e,a.skin_url):r(a.skin),l=function(){n(e,o)};t.styleSheetLoader.load(s+"/skin.min.css",l),e.contentCSS.push(s+"/content.inline.min.css")};return{load:o}}),a("8",[],function(){var e=function(e,t){return{id:e,rect:t}},t=function(e,t){for(var n=0;n li', setActiveItem("UL")); + } + + if (itemName == "numlist") { + selection.selectorChanged('ol > li', setActiveItem("OL")); + } + + if (item.settings.stateSelector) { + selection.selectorChanged(item.settings.stateSelector, function(state) { + item.active(state); + }, true); + } + + if (item.settings.disabledStateSelector) { + selection.selectorChanged(item.settings.disabledStateSelector, function(state) { + item.disabled(state); + }); + } + } + + if (item == "|") { + buttonGroup = null; + } else { + if (Factory.has(item)) { + item = {type: item, size: size}; + toolbarItems.push(item); + buttonGroup = null; + } else { + if (!buttonGroup) { + buttonGroup = {type: 'buttongroup', items: []}; + toolbarItems.push(buttonGroup); + } + + if (editor.buttons[item]) { + // TODO: Move control creation to some UI class + itemName = item; + item = editor.buttons[itemName]; + + if (typeof item == "function") { + item = item(); + } + + item.type = item.type || 'button'; + item.size = size; + + item = Factory.create(item); + buttonGroup.items.push(item); + + if (editor.initialized) { + bindSelectorChanged(); + } else { + editor.on('init', bindSelectorChanged); + } + } + } + } + }); + + return { + type: 'toolbar', + layout: 'flow', + items: toolbarItems + }; + } + + /** + * Creates the toolbars from config and returns a toolbar array. + * + * @param {String} size Optional toolbar item size. + * @return {Array} Array with toolbars. + */ + function createToolbars(size) { + var toolbars = []; + + function addToolbar(items) { + if (items) { + toolbars.push(createToolbar(items, size)); + return true; + } + } + + // Convert toolbar array to multiple options + if (tinymce.isArray(settings.toolbar)) { + // Empty toolbar array is the same as a disabled toolbar + if (settings.toolbar.length === 0) { + return; + } + + tinymce.each(settings.toolbar, function(toolbar, i) { + settings["toolbar" + (i + 1)] = toolbar; + }); + + delete settings.toolbar; + } + + // Generate toolbar + for (var i = 1; i < 10; i++) { + if (!addToolbar(settings["toolbar" + i])) { + break; + } + } + + // Generate toolbar or default toolbar unless it's disabled + if (!toolbars.length && settings.toolbar !== false) { + addToolbar(settings.toolbar || defaultToolbar); + } + + if (toolbars.length) { + return { + type: 'panel', + layout: 'stack', + classes: "toolbar-grp", + ariaRoot: true, + ariaRemember: true, + items: toolbars + }; + } + } + + /** + * Creates the menu buttons based on config. + * + * @return {Array} Menu buttons array. + */ + function createMenuButtons() { + var name, menuButtons = []; + + function createMenuItem(name) { + var menuItem; + + if (name == '|') { + return {text: '|'}; + } + + menuItem = editor.menuItems[name]; + + return menuItem; + } + + function createMenu(context) { + var menuButton, menu, menuItems, isUserDefined, removedMenuItems; + + removedMenuItems = tinymce.makeMap((settings.removed_menuitems || '').split(/[ ,]/)); + + // User defined menu + if (settings.menu) { + menu = settings.menu[context]; + isUserDefined = true; + } else { + menu = defaultMenus[context]; + } + + if (menu) { + menuButton = {text: menu.title}; + menuItems = []; + + // Default/user defined items + each((menu.items || '').split(/[ ,]/), function(item) { + var menuItem = createMenuItem(item); + + if (menuItem && !removedMenuItems[item]) { + menuItems.push(createMenuItem(item)); + } + }); + + // Added though context + if (!isUserDefined) { + each(editor.menuItems, function(menuItem) { + if (menuItem.context == context) { + if (menuItem.separator == 'before') { + menuItems.push({text: '|'}); + } + + if (menuItem.prependToContext) { + menuItems.unshift(menuItem); + } else { + menuItems.push(menuItem); + } + + if (menuItem.separator == 'after') { + menuItems.push({text: '|'}); + } + } + }); + } + + for (var i = 0; i < menuItems.length; i++) { + if (menuItems[i].text == '|') { + if (i === 0 || i == menuItems.length - 1) { + menuItems.splice(i, 1); + } + } + } + + menuButton.menu = menuItems; + + if (!menuButton.menu.length) { + return null; + } + } + + return menuButton; + } + + var defaultMenuBar = []; + if (settings.menu) { + for (name in settings.menu) { + defaultMenuBar.push(name); + } + } else { + for (name in defaultMenus) { + defaultMenuBar.push(name); + } + } + + var enabledMenuNames = typeof settings.menubar == "string" ? settings.menubar.split(/[ ,]/) : defaultMenuBar; + for (var i = 0; i < enabledMenuNames.length; i++) { + var menu = enabledMenuNames[i]; + menu = createMenu(menu); + + if (menu) { + menuButtons.push(menu); + } + } + + return menuButtons; + } + + /** + * Adds accessibility shortcut keys to panel. + * + * @param {tinymce.ui.Panel} panel Panel to add focus to. + */ + function addAccessibilityKeys(panel) { + function focus(type) { + var item = panel.find(type)[0]; + + if (item) { + item.focus(true); + } + } + + editor.shortcuts.add('Alt+F9', '', function() { + focus('menubar'); + }); + + editor.shortcuts.add('Alt+F10', '', function() { + focus('toolbar'); + }); + + editor.shortcuts.add('Alt+F11', '', function() { + focus('elementpath'); + }); + + panel.on('cancel', function() { + editor.focus(); + }); + } + + /** + * Resizes the editor to the specified width, height. + */ + function resizeTo(width, height) { + var containerElm, iframeElm, containerSize, iframeSize; + + function getSize(elm) { + return { + width: elm.clientWidth, + height: elm.clientHeight + }; + } + + containerElm = editor.getContainer(); + iframeElm = editor.getContentAreaContainer().firstChild; + containerSize = getSize(containerElm); + iframeSize = getSize(iframeElm); + + if (width !== null) { + width = Math.max(settings.min_width || 100, width); + width = Math.min(settings.max_width || 0xFFFF, width); + + DOM.setStyle(containerElm, 'width', width + (containerSize.width - iframeSize.width)); + DOM.setStyle(iframeElm, 'width', width); + } + + height = Math.max(settings.min_height || 100, height); + height = Math.min(settings.max_height || 0xFFFF, height); + DOM.setStyle(iframeElm, 'height', height); + + editor.fire('ResizeEditor'); + } + + function resizeBy(dw, dh) { + var elm = editor.getContentAreaContainer(); + self.resizeTo(elm.clientWidth + dw, elm.clientHeight + dh); + } + + /** + * Handles contextual toolbars. + */ + function addContextualToolbars() { + var scrollContainer; + + function getContextToolbars() { + return editor.contextToolbars || []; + } + + function getElementRect(elm) { + var pos, targetRect, root; + + pos = tinymce.DOM.getPos(editor.getContentAreaContainer()); + targetRect = editor.dom.getRect(elm); + root = editor.dom.getRoot(); + + // Adjust targetPos for scrolling in the editor + if (root.nodeName == 'BODY') { + targetRect.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft; + targetRect.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop; + } + + targetRect.x += pos.x; + targetRect.y += pos.y; + + return targetRect; + } + + function hideAllFloatingPanels() { + each(editor.contextToolbars, function(toolbar) { + if (toolbar.panel) { + toolbar.panel.hide(); + } + }); + } + + function togglePositionClass(panel, relPos, predicate) { + relPos = relPos ? relPos.substr(0, 2) : ''; + + each({ + t: 'down', + b: 'up' + }, function(cls, pos) { + panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(0, 1))); + }); + + each({ + l: 'left', + r: 'right' + }, function(cls, pos) { + panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(1, 1))); + }); + } + + function toClientRect(geomRect) { + return { + left: geomRect.x, + top: geomRect.y, + width: geomRect.w, + height: geomRect.h, + right: geomRect.x + geomRect.w, + bottom: geomRect.y + geomRect.h + }; + } + + function userConstrain(x, y, elementRect, contentAreaRect, panelRect) { + panelRect = toClientRect({x: x, y: y, w: panelRect.w, h: panelRect.h}); + + if (settings.inline_toolbar_position_handler) { + panelRect = settings.inline_toolbar_position_handler({ + elementRect: toClientRect(elementRect), + contentAreaRect: toClientRect(contentAreaRect), + panelRect: panelRect + }); + } + + return panelRect; + } + + function movePanelTo(panel, pos) { + panel.moveTo(pos.left, pos.top); + } + + function reposition(match) { + var relPos, panelRect, elementRect, contentAreaRect, panel, relRect, testPositions, smallElementWidthThreshold; + + if (editor.removed) { + return; + } + + if (!match || !match.toolbar.panel) { + hideAllFloatingPanels(); + return; + } + + testPositions = [ + 'bc-tc', 'tc-bc', + 'tl-bl', 'bl-tl', + 'tr-br', 'br-tr' + ]; + + panel = match.toolbar.panel; + panel.show(); + + elementRect = getElementRect(match.element); + panelRect = tinymce.DOM.getRect(panel.getEl()); + contentAreaRect = tinymce.DOM.getRect(editor.getContentAreaContainer() || editor.getBody()); + smallElementWidthThreshold = 25; + + // We need to use these instead of the rect values since the style + // size properites might not be the same as the real size for a table + elementRect.w = match.element.clientWidth; + elementRect.h = match.element.clientHeight; + + if (!editor.inline) { + contentAreaRect.w = editor.getDoc().documentElement.offsetWidth; + } + + // Inflate the elementRect so it doesn't get placed above resize handles + if (editor.selection.controlSelection.isResizable(match.element) && elementRect.w < smallElementWidthThreshold) { + elementRect = Rect.inflate(elementRect, 0, 8); + } + + relPos = Rect.findBestRelativePosition(panelRect, elementRect, contentAreaRect, testPositions); + elementRect = Rect.clamp(elementRect, contentAreaRect); + + if (relPos) { + relRect = Rect.relativePosition(panelRect, elementRect, relPos); + movePanelTo(panel, userConstrain(relRect.x, relRect.y, elementRect, contentAreaRect, panelRect)); + } else { + // Allow overflow below the editor to avoid placing toolbars ontop of tables + contentAreaRect.h += panelRect.h; + + elementRect = Rect.intersect(contentAreaRect, elementRect); + if (elementRect) { + relPos = Rect.findBestRelativePosition(panelRect, elementRect, contentAreaRect, [ + 'bc-tc', 'bl-tl', 'br-tr' + ]); + + if (relPos) { + relRect = Rect.relativePosition(panelRect, elementRect, relPos); + movePanelTo(panel, userConstrain(relRect.x, relRect.y, elementRect, contentAreaRect, panelRect)); + } else { + movePanelTo(panel, userConstrain(elementRect.x, elementRect.y, elementRect, contentAreaRect, panelRect)); + } + } else { + panel.hide(); + } + } + + togglePositionClass(panel, relPos, function(pos1, pos2) { + return pos1 === pos2; + }); + + //drawRect(contentAreaRect, 'blue'); + //drawRect(elementRect, 'red'); + //drawRect(panelRect, 'green'); + } + + function repositionHandler() { + function execute() { + if (editor.selection) { + reposition(findFrontMostMatch(editor.selection.getNode())); + } + } + + tinymce.util.Delay.requestAnimationFrame(execute); + } + + function bindScrollEvent() { + if (!scrollContainer) { + scrollContainer = editor.selection.getScrollContainer() || editor.getWin(); + tinymce.$(scrollContainer).on('scroll', repositionHandler); + + editor.on('remove', function() { + tinymce.$(scrollContainer).off('scroll'); + }); + } + } + + function showContextToolbar(match) { + var panel; + + if (match.toolbar.panel) { + match.toolbar.panel.show(); + reposition(match); + return; + } + + bindScrollEvent(); + + panel = Factory.create({ + type: 'floatpanel', + role: 'dialog', + classes: 'tinymce tinymce-inline arrow', + ariaLabel: 'Inline toolbar', + layout: 'flex', + direction: 'column', + align: 'stretch', + autohide: false, + autofix: true, + fixed: true, + border: 1, + items: createToolbar(match.toolbar.items), + oncancel: function() { + editor.focus(); + } + }); + + match.toolbar.panel = panel; + panel.renderTo(document.body).reflow(); + reposition(match); + } + + function hideAllContextToolbars() { + tinymce.each(getContextToolbars(), function(toolbar) { + if (toolbar.panel) { + toolbar.panel.hide(); + } + }); + } + + function findFrontMostMatch(targetElm) { + var i, y, parentsAndSelf, toolbars = getContextToolbars(); + + parentsAndSelf = editor.$(targetElm).parents().add(targetElm); + for (i = parentsAndSelf.length - 1; i >= 0; i--) { + for (y = toolbars.length - 1; y >= 0; y--) { + if (toolbars[y].predicate(parentsAndSelf[i])) { + return { + toolbar: toolbars[y], + element: parentsAndSelf[i] + }; + } + } + } + + return null; + } + + editor.on('click keyup setContent', function(e) { + // Only act on partial inserts + if (e.type == 'setcontent' && !e.selection) { + return; + } + + // Needs to be delayed to avoid Chrome img focus out bug + tinymce.util.Delay.setEditorTimeout(editor, function() { + var match; + + match = findFrontMostMatch(editor.selection.getNode()); + if (match) { + hideAllContextToolbars(); + showContextToolbar(match); + } else { + hideAllContextToolbars(); + } + }); + }); + + editor.on('blur hide', hideAllContextToolbars); + + editor.on('ObjectResizeStart', function() { + var match = findFrontMostMatch(editor.selection.getNode()); + + if (match && match.toolbar.panel) { + match.toolbar.panel.hide(); + } + }); + + editor.on('nodeChange ResizeEditor ResizeWindow', repositionHandler); + + editor.on('remove', function() { + tinymce.each(getContextToolbars(), function(toolbar) { + if (toolbar.panel) { + toolbar.panel.remove(); + } + }); + + editor.contextToolbars = {}; + }); + + editor.shortcuts.add('ctrl+shift+e > ctrl+shift+p', '', function() { + var match = findFrontMostMatch(editor.selection.getNode()); + if (match && match.toolbar.panel) { + match.toolbar.panel.items()[0].focus(); + } + }); + } + + function fireSkinLoaded(editor) { + return function() { + if (editor.initialized) { + editor.fire('SkinLoaded'); + } else { + editor.on('init', function() { + editor.fire('SkinLoaded'); + }); + } + }; + } + + /** + * Renders the inline editor UI. + * + * @return {Object} Name/value object with theme data. + */ + function renderInlineUI(args) { + var panel, inlineToolbarContainer; + + if (settings.fixed_toolbar_container) { + inlineToolbarContainer = DOM.select(settings.fixed_toolbar_container)[0]; + } + + function reposition() { + if (panel && panel.moveRel && panel.visible() && !panel._fixed) { + // TODO: This is kind of ugly and doesn't handle multiple scrollable elements + var scrollContainer = editor.selection.getScrollContainer(), body = editor.getBody(); + var deltaX = 0, deltaY = 0; + + if (scrollContainer) { + var bodyPos = DOM.getPos(body), scrollContainerPos = DOM.getPos(scrollContainer); + + deltaX = Math.max(0, scrollContainerPos.x - bodyPos.x); + deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y); + } + + panel.fixed(false).moveRel(body, editor.rtl ? ['tr-br', 'br-tr'] : ['tl-bl', 'bl-tl', 'tr-br']).moveBy(deltaX, deltaY); + } + } + + function show() { + if (panel) { + panel.show(); + reposition(); + DOM.addClass(editor.getBody(), 'mce-edit-focus'); + } + } + + function hide() { + if (panel) { + // We require two events as the inline float panel based toolbar does not have autohide=true + panel.hide(); + + // All other autohidden float panels will be closed below. + FloatPanel.hideAll(); + + DOM.removeClass(editor.getBody(), 'mce-edit-focus'); + } + } + + function render() { + if (panel) { + if (!panel.visible()) { + show(); + } + + return; + } + + // Render a plain panel inside the inlineToolbarContainer if it's defined + panel = self.panel = Factory.create({ + type: inlineToolbarContainer ? 'panel' : 'floatpanel', + role: 'application', + classes: 'tinymce tinymce-inline', + layout: 'flex', + direction: 'column', + align: 'stretch', + autohide: false, + autofix: true, + fixed: !!inlineToolbarContainer, + border: 1, + items: [ + settings.menubar === false ? null : {type: 'menubar', border: '0 0 1 0', items: createMenuButtons()}, + createToolbars(settings.toolbar_items_size) + ] + }); + + // Add statusbar + /*if (settings.statusbar !== false) { + panel.add({type: 'panel', classes: 'statusbar', layout: 'flow', border: '1 0 0 0', items: [ + {type: 'elementpath'} + ]}); + }*/ + + editor.fire('BeforeRenderUI'); + panel.renderTo(inlineToolbarContainer || document.body).reflow(); + + addAccessibilityKeys(panel); + show(); + addContextualToolbars(); + + editor.on('nodeChange', reposition); + editor.on('activate', show); + editor.on('deactivate', hide); + + editor.nodeChanged(); + } + + settings.content_editable = true; + + editor.on('focus', function() { + // Render only when the CSS file has been loaded + if (args.skinUiCss) { + tinymce.DOM.styleSheetLoader.load(args.skinUiCss, render, render); + } else { + render(); + } + }); + + editor.on('blur hide', hide); + + // Remove the panel when the editor is removed + editor.on('remove', function() { + if (panel) { + panel.remove(); + panel = null; + } + }); + + // Preload skin css + if (args.skinUiCss) { + tinymce.DOM.styleSheetLoader.load(args.skinUiCss, fireSkinLoaded(editor)); + } + + return {}; + } + + /** + * Renders the iframe editor UI. + * + * @param {Object} args Details about target element etc. + * @return {Object} Name/value object with theme data. + */ + function renderIframeUI(args) { + var panel, resizeHandleCtrl, startSize; + + function switchMode() { + return function(e) { + if (e.mode == 'readonly') { + panel.find('*').disabled(true); + } else { + panel.find('*').disabled(false); + } + }; + } + + if (args.skinUiCss) { + tinymce.DOM.styleSheetLoader.load(args.skinUiCss, fireSkinLoaded(editor)); + } + + // Basic UI layout + panel = self.panel = Factory.create({ + type: 'panel', + role: 'application', + classes: 'tinymce', + style: 'visibility: hidden', + layout: 'stack', + border: 1, + items: [ + settings.menubar === false ? null : {type: 'menubar', border: '0 0 1 0', items: createMenuButtons()}, + createToolbars(settings.toolbar_items_size), + {type: 'panel', name: 'iframe', layout: 'stack', classes: 'edit-area', html: '', border: '1 0 0 0'} + ] + }); + + if (settings.resize !== false) { + resizeHandleCtrl = { + type: 'resizehandle', + direction: settings.resize, + + onResizeStart: function() { + var elm = editor.getContentAreaContainer().firstChild; + + startSize = { + width: elm.clientWidth, + height: elm.clientHeight + }; + }, + + onResize: function(e) { + if (settings.resize == 'both') { + resizeTo(startSize.width + e.deltaX, startSize.height + e.deltaY); + } else { + resizeTo(null, startSize.height + e.deltaY); + } + } + }; + } + + // Add statusbar if needed + if (settings.statusbar !== false) { + panel.add({type: 'panel', name: 'statusbar', classes: 'statusbar', layout: 'flow', border: '1 0 0 0', ariaRoot: true, items: [ + {type: 'elementpath', editor: editor}, + resizeHandleCtrl + ]}); + } + + editor.fire('BeforeRenderUI'); + editor.on('SwitchMode', switchMode()); + panel.renderBefore(args.targetNode).reflow(); + + if (settings.readonly) { + editor.setMode('readonly'); + } + + if (settings.width) { + tinymce.DOM.setStyle(panel.getEl(), 'width', settings.width); + } + + // Remove the panel when the editor is removed + editor.on('remove', function() { + panel.remove(); + panel = null; + }); + + // Add accesibility shortcuts + addAccessibilityKeys(panel); + addContextualToolbars(); + + return { + iframeContainer: panel.find('#iframe')[0].getEl(), + editorContainer: panel.getEl() + }; + } + + /** + * Renders the UI for the theme. This gets called by the editor. + * + * @param {Object} args Details about target element etc. + * @return {Object} Theme UI data items. + */ + self.renderUI = function(args) { + var skin = settings.skin !== false ? settings.skin || 'lightgray' : false; + + if (skin) { + var skinUrl = settings.skin_url; + + if (skinUrl) { + skinUrl = editor.documentBaseURI.toAbsolute(skinUrl); + } else { + skinUrl = tinymce.baseURL + '/skins/' + skin; + } + + // Load special skin for IE7 + // TODO: Remove this when we drop IE7 support + if (tinymce.Env.documentMode <= 7) { + args.skinUiCss = skinUrl + '/skin.ie7.min.css'; + } else { + args.skinUiCss = skinUrl + '/skin.min.css'; + } + + // Load content.min.css or content.inline.min.css + editor.contentCSS.push(skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css'); + } + + // Handle editor setProgressState change + editor.on('ProgressState', function(e) { + self.throbber = self.throbber || new tinymce.ui.Throbber(self.panel.getEl('body')); + + if (e.state) { + self.throbber.show(e.time); + } else { + self.throbber.hide(); + } + }); + + if (settings.inline) { + return renderInlineUI(args); + } + + return renderIframeUI(args); + }; + + self.resizeTo = resizeTo; + self.resizeBy = resizeBy; +}); diff --git a/public/mosaico/dist/vendor/themes/modern/theme.min.js b/public/mosaico/dist/vendor/themes/modern/theme.min.js new file mode 100644 index 00000000..4f274042 --- /dev/null +++ b/public/mosaico/dist/vendor/themes/modern/theme.min.js @@ -0,0 +1 @@ +tinymce.ThemeManager.add("modern",function(e){function t(t,n){var r,i=[];if(t)return p(t.split(/[ ,]/),function(t){function o(){function n(e){return function(n,r){for(var i,o=r.parents.length;o--&&(i=r.parents[o].nodeName,"OL"!=i&&"UL"!=i););t.active(n&&i==e)}}var r=e.selection;"bullist"==a&&r.selectorChanged("ul > li",n("UL")),"numlist"==a&&r.selectorChanged("ol > li",n("OL")),t.settings.stateSelector&&r.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&r.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var a;"|"==t?r=null:h.has(t)?(t={type:t,size:n},i.push(t),r=null):(r||(r={type:"buttongroup",items:[]},i.push(r)),e.buttons[t]&&(a=t,t=e.buttons[a],"function"==typeof t&&(t=t()),t.type=t.type||"button",t.size=n,t=h.create(t),r.items.push(t),e.initialized?o():e.on("init",o)))}),{type:"toolbar",layout:"flow",items:i}}function n(e){function n(n){if(n)return r.push(t(n,e)),!0}var r=[];if(tinymce.isArray(f.toolbar)){if(0===f.toolbar.length)return;tinymce.each(f.toolbar,function(e,t){f["toolbar"+(t+1)]=e}),delete f.toolbar}for(var i=1;i<10&&n(f["toolbar"+i]);i++);if(r.length||f.toolbar===!1||n(f.toolbar||b),r.length)return{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:r}}function r(){function t(t){var n;return"|"==t?{text:"|"}:n=e.menuItems[t]}function n(n){var r,i,o,a,s;if(s=tinymce.makeMap((f.removed_menuitems||"").split(/[ ,]/)),f.menu?(i=f.menu[n],a=!0):i=y[n],i){r={text:i.title},o=[],p((i.items||"").split(/[ ,]/),function(e){var n=t(e);n&&!s[e]&&o.push(t(e))}),a||p(e.menuItems,function(e){e.context==n&&("before"==e.separator&&o.push({text:"|"}),e.prependToContext?o.unshift(e):o.push(e),"after"==e.separator&&o.push({text:"|"}))});for(var l=0;l=0;r--)for(i=a.length-1;i>=0;i--)if(a[i].predicate(o[r]))return{toolbar:a[i],element:o[r]};return null}var b;e.on("click keyup setContent",function(t){("setcontent"!=t.type||t.selection)&&tinymce.util.Delay.setEditorTimeout(e,function(){var t;t=y(e.selection.getNode()),t?(v(),m(t)):v()})}),e.on("blur hide",v),e.on("ObjectResizeStart",function(){var t=y(e.selection.getNode());t&&t.toolbar.panel&&t.toolbar.panel.hide()}),e.on("nodeChange ResizeEditor ResizeWindow",u),e.on("remove",function(){tinymce.each(n(),function(e){e.panel&&e.panel.remove()}),e.contextToolbars={}}),e.shortcuts.add("ctrl+shift+e > ctrl+shift+p","",function(){var t=y(e.selection.getNode());t&&t.toolbar.panel&&t.toolbar.panel.items()[0].focus()})}function l(e){return function(){e.initialized?e.fire("SkinLoaded"):e.on("init",function(){e.fire("SkinLoaded")})}}function c(t){function o(){if(p&&p.moveRel&&p.visible()&&!p._fixed){var t=e.selection.getScrollContainer(),n=e.getBody(),r=0,i=0;if(t){var o=m.getPos(n),a=m.getPos(t);r=Math.max(0,a.x-o.x),i=Math.max(0,a.y-o.y)}p.fixed(!1).moveRel(n,e.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(r,i)}}function a(){p&&(p.show(),o(),m.addClass(e.getBody(),"mce-edit-focus"))}function c(){p&&(p.hide(),v.hideAll(),m.removeClass(e.getBody(),"mce-edit-focus"))}function u(){return p?void(p.visible()||a()):(p=d.panel=h.create({type:g?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!!g,border:1,items:[f.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:r()},n(f.toolbar_items_size)]}),e.fire("BeforeRenderUI"),p.renderTo(g||document.body).reflow(),i(p),a(),s(),e.on("nodeChange",o),e.on("activate",a),e.on("deactivate",c),void e.nodeChanged())}var p,g;return f.fixed_toolbar_container&&(g=m.select(f.fixed_toolbar_container)[0]),f.content_editable=!0,e.on("focus",function(){t.skinUiCss?tinymce.DOM.styleSheetLoader.load(t.skinUiCss,u,u):u()}),e.on("blur hide",c),e.on("remove",function(){p&&(p.remove(),p=null)}),t.skinUiCss&&tinymce.DOM.styleSheetLoader.load(t.skinUiCss,l(e)),{}}function u(t){function a(){return function(e){"readonly"==e.mode?c.find("*").disabled(!0):c.find("*").disabled(!1)}}var c,u,p;return t.skinUiCss&&tinymce.DOM.styleSheetLoader.load(t.skinUiCss,l(e)),c=d.panel=h.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[f.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:r()},n(f.toolbar_items_size),{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",html:"",border:"1 0 0 0"}]}),f.resize!==!1&&(u={type:"resizehandle",direction:f.resize,onResizeStart:function(){var t=e.getContentAreaContainer().firstChild;p={width:t.clientWidth,height:t.clientHeight}},onResize:function(e){"both"==f.resize?o(p.width+e.deltaX,p.height+e.deltaY):o(null,p.height+e.deltaY)}}),f.statusbar!==!1&&c.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath",editor:e},u]}),e.fire("BeforeRenderUI"),e.on("SwitchMode",a()),c.renderBefore(t.targetNode).reflow(),f.readonly&&e.setMode("readonly"),f.width&&tinymce.DOM.setStyle(c.getEl(),"width",f.width),e.on("remove",function(){c.remove(),c=null}),i(c),s(),{iframeContainer:c.find("#iframe")[0].getEl(),editorContainer:c.getEl()}}var d=this,f=e.settings,h=tinymce.ui.Factory,p=tinymce.each,m=tinymce.DOM,g=tinymce.geom.Rect,v=tinymce.ui.FloatPanel,y={file:{title:"File",items:"newdocument"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall"},insert:{title:"Insert",items:"|"},view:{title:"View",items:"visualaid |"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript | formats | removeformat"},table:{title:"Table"},tools:{title:"Tools"}},b="undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image";d.renderUI=function(t){var n=f.skin!==!1&&(f.skin||"lightgray");if(n){var r=f.skin_url;r=r?e.documentBaseURI.toAbsolute(r):tinymce.baseURL+"/skins/"+n,tinymce.Env.documentMode<=7?t.skinUiCss=r+"/skin.ie7.min.css":t.skinUiCss=r+"/skin.min.css",e.contentCSS.push(r+"/content"+(e.inline?".inline":"")+".min.css")}return e.on("ProgressState",function(e){d.throbber=d.throbber||new tinymce.ui.Throbber(d.panel.getEl("body")),e.state?d.throbber.show(e.time):d.throbber.hide()}),f.inline?c(t):u(t)},d.resizeTo=o,d.resizeBy=a}); \ No newline at end of file diff --git a/public/mosaico/dist/vendor/tinymce.min.js b/public/mosaico/dist/vendor/tinymce.min.js new file mode 100644 index 00000000..f0c5b898 --- /dev/null +++ b/public/mosaico/dist/vendor/tinymce.min.js @@ -0,0 +1,14 @@ +// 4.4.3 (2016-09-01) +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i=r.x&&o.x+o.w<=r.w+r.x&&o.y>=r.y&&o.y+o.h<=r.h+r.y)return i[a];return null}function n(e,t,n){return o(e.x-t,e.y-n,e.w+2*t,e.h+2*n)}function r(e,t){var n,r,i,a;return n=l(e.x,t.x),r=l(e.y,t.y),i=s(e.x+e.w,t.x+t.w),a=s(e.y+e.h,t.y+t.h),i-n<0||a-r<0?null:o(n,r,i-n,a-r)}function i(e,t,n){var r,i,a,s,c,u,d,f,h,p;return c=e.x,u=e.y,d=e.x+e.w,f=e.y+e.h,h=t.x+t.w,p=t.y+t.h,r=l(0,t.x-c),i=l(0,t.y-u),a=l(0,d-h),s=l(0,f-p),c+=r,u+=i,n&&(d+=r,f+=i,c-=a,u-=s),d-=a,f-=s,o(c,u,d-c,f-u)}function o(e,t,n,r){return{x:e,y:t,w:n,h:r}}function a(e){return o(e.left,e.top,e.width,e.height)}var s=Math.min,l=Math.max,c=Math.round;return{inflate:n,relativePosition:e,findBestRelativePosition:t,intersect:r,clamp:i,create:o,fromClientRect:a}}),r(c,[],function(){function e(e,t){return function(){e.apply(t,arguments)}}function t(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],s(t,e(r,this),e(i,this))}function n(e){var t=this;return null===this._state?void this._deferreds.push(e):void l(function(){var n=t._state?e.onFulfilled:e.onRejected;if(null===n)return void(t._state?e.resolve:e.reject)(t._value);var r;try{r=n(t._value)}catch(t){return void e.reject(t)}e.resolve(r)})}function r(t){try{if(t===this)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if("function"==typeof n)return void s(e(n,t),e(r,this),e(i,this))}this._state=!0,this._value=t,o.call(this)}catch(e){i.call(this,e)}}function i(e){this._state=!1,this._value=e,o.call(this)}function o(){for(var e=0,t=this._deferreds.length;e=534;return{opera:r,webkit:i,ie:o,gecko:l,mac:c,iOS:u,android:d,contentEditable:g,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=o,range:window.getSelection&&"Range"in window,documentMode:o&&!s?document.documentMode||7:10,fileApi:f,ceFalse:o===!1||o>8,canHaveCSP:o===!1||o>11,desktop:!h&&!p,windowsPhone:m}}),r(f,[u,d],function(e,t){function n(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r||!1):e.attachEvent&&e.attachEvent("on"+t,n)}function r(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r||!1):e.detachEvent&&e.detachEvent("on"+t,n)}function i(e,t){var n,r=t;return n=e.path,n&&n.length>0&&(r=n[0]),e.deepPath&&(n=e.deepPath(),n&&n.length>0&&(r=n[0])),r}function o(e,n){function r(){return!1}function o(){return!0}var a,s=n||{},l;for(a in e)u[a]||(s[a]=e[a]);if(s.target||(s.target=s.srcElement||document),t.experimentalShadowDom&&(s.target=i(e,s.target)),e&&c.test(e.type)&&e.pageX===l&&e.clientX!==l){var d=s.target.ownerDocument||document,f=d.documentElement,h=d.body;s.pageX=e.clientX+(f&&f.scrollLeft||h&&h.scrollLeft||0)-(f&&f.clientLeft||h&&h.clientLeft||0),s.pageY=e.clientY+(f&&f.scrollTop||h&&h.scrollTop||0)-(f&&f.clientTop||h&&h.clientTop||0)}return s.preventDefault=function(){s.isDefaultPrevented=o,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},s.stopPropagation=function(){s.isPropagationStopped=o,e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0)},s.stopImmediatePropagation=function(){s.isImmediatePropagationStopped=o,s.stopPropagation()},s.isDefaultPrevented||(s.isDefaultPrevented=r,s.isPropagationStopped=r,s.isImmediatePropagationStopped=r),"undefined"==typeof s.metaKey&&(s.metaKey=!1),s}function a(t,i,o){function a(){o.domLoaded||(o.domLoaded=!0,i(u))}function s(){("complete"===c.readyState||"interactive"===c.readyState&&c.body)&&(r(c,"readystatechange",s),a())}function l(){try{c.documentElement.doScroll("left")}catch(t){return void e.setTimeout(l)}a()}var c=t.document,u={type:"ready"};return o.domLoaded?void i(u):(c.addEventListener?"complete"===c.readyState?a():n(t,"DOMContentLoaded",a):(n(c,"readystatechange",s),c.documentElement.doScroll&&t.self===t.top&&l()),void n(t,"load",a))}function s(){function e(e,t){var n,r,o,a,s=i[t];if(n=s&&s[e.type])for(r=0,o=n.length;rw.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[F]=!0,e}function i(e){var t=D.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=e.length;r--;)w.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||X)-(~e.sourceIndex||X);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function u(e){return e&&typeof e.getElementsByTagName!==Y&&e}function d(){}function f(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function m(t,n,r){for(var i=0,o=n.length;i-1&&(r[c]=!(a[c]=d))}}else b=g(b===a?b.splice(p,b.length):b),o?o(null,a,b,l):Z.apply(a,b)})}function y(e){for(var t,n,r,i=e.length,o=w.relative[e[0].type],a=o||w.relative[" "],s=o?1:0,l=h(function(e){return e===t},a,!0),c=h(function(e){return te.call(t,e)>-1},a,!0),u=[function(e,n,r){return!o&&(r||n!==T)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];s1&&p(u),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,s0,o=t.length>0,a=function(r,a,s,l,c){var u,d,f,h=0,p="0",m=r&&[],v=[],y=T,b=r||o&&w.find.TAG("*",c),C=U+=null==y?1:Math.random()||.1,x=b.length;for(c&&(T=a!==D&&a);p!==x&&null!=(u=b[p]);p++){if(o&&u){for(d=0;f=t[d++];)if(f(u,a,s)){l.push(u);break}c&&(U=C)}i&&((u=!f&&u)&&h--,r&&m.push(u))}if(h+=p,i&&p!==h){for(d=0;f=n[d++];)f(m,v,a,s);if(r){if(h>0)for(;p--;)m[p]||v[p]||(v[p]=J.call(l));v=g(v)}Z.apply(l,v),c&&!r&&v.length>0&&h+n.length>1&&e.uniqueSort(l)}return c&&(U=C,T=y),m};return i?r(a):a}var C,x,w,N,E,_,S,k,T,R,A,B,D,L,M,P,O,H,I,F="sizzle"+-new Date,z=window.document,U=0,W=0,V=n(),$=n(),q=n(),j=function(e,t){return e===t&&(A=!0),0},Y=typeof t,X=1<<31,K={}.hasOwnProperty,G=[],J=G.pop,Q=G.push,Z=G.push,ee=G.slice,te=G.indexOf||function(e){for(var t=0,n=this.length;t+~]|"+re+")"+re+"*"),ue=new RegExp("="+re+"*([^\\]'\"]*?)"+re+"*\\]","g"),de=new RegExp(ae),fe=new RegExp("^"+ie+"$"),he={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie+"|[*])"),ATTR:new RegExp("^"+oe),PSEUDO:new RegExp("^"+ae),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},pe=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,be=/'|\\/g,Ce=new RegExp("\\\\([\\da-f]{1,6}"+re+"?|("+re+")|.)","ig"),xe=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{Z.apply(G=ee.call(z.childNodes),z.childNodes),G[z.childNodes.length].nodeType}catch(e){Z={apply:G.length?function(e,t){Q.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}x=e.support={},E=e.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},B=e.setDocument=function(e){function t(e){try{return e.top}catch(e){}return null}var n,r=e?e.ownerDocument||e:z,o=r.defaultView;return r!==D&&9===r.nodeType&&r.documentElement?(D=r,L=r.documentElement,M=!E(r),o&&o!==t(o)&&(o.addEventListener?o.addEventListener("unload",function(){B()},!1):o.attachEvent&&o.attachEvent("onunload",function(){B()})),x.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),x.getElementsByTagName=i(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),x.getElementsByClassName=ge.test(r.getElementsByClassName),x.getById=i(function(e){return L.appendChild(e).id=F,!r.getElementsByName||!r.getElementsByName(F).length}),x.getById?(w.find.ID=function(e,t){if(typeof t.getElementById!==Y&&M){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},w.filter.ID=function(e){var t=e.replace(Ce,xe);return function(e){return e.getAttribute("id")===t}}):(delete w.find.ID,w.filter.ID=function(e){var t=e.replace(Ce,xe);return function(e){var n=typeof e.getAttributeNode!==Y&&e.getAttributeNode("id");return n&&n.value===t}}),w.find.TAG=x.getElementsByTagName?function(e,t){if(typeof t.getElementsByTagName!==Y)return t.getElementsByTagName(e)}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},w.find.CLASS=x.getElementsByClassName&&function(e,t){if(M)return t.getElementsByClassName(e)},O=[],P=[],(x.qsa=ge.test(r.querySelectorAll))&&(i(function(e){e.innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+re+"*(?:value|"+ne+")"),e.querySelectorAll(":checked").length||P.push(":checked")}),i(function(e){var t=r.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+re+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(x.matchesSelector=ge.test(H=L.matches||L.webkitMatchesSelector||L.mozMatchesSelector||L.oMatchesSelector||L.msMatchesSelector))&&i(function(e){x.disconnectedMatch=H.call(e,"div"),H.call(e,"[s!='']:x"),O.push("!=",ae)}),P=P.length&&new RegExp(P.join("|")),O=O.length&&new RegExp(O.join("|")),n=ge.test(L.compareDocumentPosition),I=n||ge.test(L.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},j=n?function(e,t){if(e===t)return A=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!x.sortDetached&&t.compareDocumentPosition(e)===n?e===r||e.ownerDocument===z&&I(z,e)?-1:t===r||t.ownerDocument===z&&I(z,t)?1:R?te.call(R,e)-te.call(R,t):0:4&n?-1:1)}:function(e,t){if(e===t)return A=!0,0;var n,i=0,o=e.parentNode,s=t.parentNode,l=[e],c=[t];if(!o||!s)return e===r?-1:t===r?1:o?-1:s?1:R?te.call(R,e)-te.call(R,t):0;if(o===s)return a(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[i]===c[i];)i++;return i?a(l[i],c[i]):l[i]===z?-1:c[i]===z?1:0},r):D},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==D&&B(t),n=n.replace(ue,"='$1']"),x.matchesSelector&&M&&(!O||!O.test(n))&&(!P||!P.test(n)))try{var r=H.call(t,n);if(r||x.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(e){}return e(n,D,null,[t]).length>0},e.contains=function(e,t){return(e.ownerDocument||e)!==D&&B(e),I(e,t)},e.attr=function(e,n){(e.ownerDocument||e)!==D&&B(e);var r=w.attrHandle[n.toLowerCase()],i=r&&K.call(w.attrHandle,n.toLowerCase())?r(e,n,!M):t;return i!==t?i:x.attributes||!M?e.getAttribute(n):(i=e.getAttributeNode(n))&&i.specified?i.value:null},e.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},e.uniqueSort=function(e){var t,n=[],r=0,i=0;if(A=!x.detectDuplicates,R=!x.sortStable&&e.slice(0),e.sort(j),A){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return R=null,e},N=e.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=N(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=N(t);return n},w=e.selectors={cacheLength:50,createPseudo:r,match:he,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Ce,xe),e[3]=(e[3]||e[4]||e[5]||"").replace(Ce,xe),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=_(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Ce,xe).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=V[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&V(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==Y&&e.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(i){var o=e.attr(i,t);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,h,p,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(g){if(o){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?g.firstChild:g.lastChild],a&&y){for(u=g[F]||(g[F]={}),c=u[e]||[],h=c[0]===U&&c[1],f=c[0]===U&&c[2],d=h&&g.childNodes[h];d=++h&&d&&d[m]||(f=h=0)||p.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[U,h,f];break}}else if(y&&(c=(t[F]||(t[F]={}))[e])&&c[0]===U)f=c[1];else for(;(d=++h&&d&&d[m]||(f=h=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[F]||(d[F]={}))[e]=[U,f]),d!==t)););return f-=i,f===r||f%r===0&&f/r>=0}}},PSEUDO:function(t,n){var i,o=w.pseudos[t]||w.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return o[F]?o(n):o.length>1?(i=[t,t,"",n],w.setFilters.hasOwnProperty(t.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=te.call(e,i[a]),e[r]=!(t[r]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=S(e.replace(se,"$1"));return i[F]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),!n.pop()}}),has:r(function(t){return function(n){return e(t,n).length>0}}),contains:r(function(e){return e=e.replace(Ce,xe),function(t){return(t.textContent||t.innerText||N(t)).indexOf(e)>-1}}),lang:r(function(t){return fe.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(Ce,xe).toLowerCase(),function(e){var n;do if(n=M?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===L},focus:function(e){return e===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!w.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return pe.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[n<0?n+t:n]}),even:c(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(a=o[0]).type&&x.getById&&9===t.nodeType&&M&&w.relative[o[1].type]){if(t=(w.find.ID(a.matches[0].replace(Ce,xe),t)||[])[0], +!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=he.needsContext.test(e)?0:o.length;i--&&(a=o[i],!w.relative[s=a.type]);)if((l=w.find[s])&&(r=l(a.matches[0].replace(Ce,xe),ye.test(o[0].type)&&u(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&f(o),!e)return Z.apply(n,r),n;break}}return(c||S(e,d))(r,t,!M,n,ye.test(e)&&u(t.parentNode)||t),n},x.sortStable=F.split("").sort(j).join("")===F,x.detectDuplicates=!!A,B(),x.sortDetached=i(function(e){return 1&e.compareDocumentPosition(D.createElement("div"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),x.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(ne,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),e}),r(p,[],function(){function e(e){var t=e,n,r;if(!u(e))for(t=[],n=0,r=e.length;n=0;i--)c(e,t[i],n,r);else for(i=0;i)[^>]*$|#([\w\-]*)$)/,S=e.Event,k,T=r.makeMap("children,contents,next,prev"),R=r.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),A=r.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),B={for:"htmlFor",class:"className",readonly:"readOnly"},D={float:"cssFloat"},L={},M={},P=/^\s*|\s*$/g;return f.fn=f.prototype={constructor:f,selector:"",context:null,length:0,init:function(e,t){var n=this,r,i;if(!e)return n;if(e.nodeType)return n.context=n[0]=e,n.length=1,n;if(t&&t.nodeType)n.context=t;else{if(t)return f(e).attr(t);n.context=t=document}if(a(e)){if(n.selector=e,r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:_.exec(e),!r)return f(t).find(e);if(r[1])for(i=l(e,v(t)).firstChild;i;)N.call(n,i),i=i.nextSibling;else{if(i=v(t).getElementById(r[2]),!i)return n;if(i.id!==r[2])return n.find(e);n.length=1,n[0]=i}}else this.add(e,!1);return n},toArray:function(){return r.toArray(this)},add:function(e,t){var n=this,r,i;if(a(e))return n.add(f(e));if(t!==!1)for(r=f.unique(n.toArray().concat(f.makeArray(e))),n.length=r.length,i=0;i1&&(T[e]||(i=f.unique(i)),0===e.indexOf("parents")&&(i=i.reverse())),i=f(i),n?i.filter(n):i}}),m({parentsUntil:function(e,t){return y(e,"parentNode",t)},nextUntil:function(e,t){return b(e,"nextSibling",1,t).slice(1)},prevUntil:function(e,t){return b(e,"previousSibling",1,t).slice(1)}},function(e,t){f.fn[e]=function(n,r){var i=this,o=[];return i.each(function(){var e=t.call(o,this,n,o);e&&(f.isArray(e)?o.push.apply(o,e):o.push(e))}),this.length>1&&(o=f.unique(o),0!==e.indexOf("parents")&&"prevUntil"!==e||(o=o.reverse())),o=f(o),r?o.filter(r):o}}),f.fn.is=function(e){return!!e&&this.filter(e).length>0},f.fn.init.prototype=f.fn,f.overrideDefaults=function(e){function t(r,i){return n=n||e(),0===arguments.length&&(r=n.element),i||(i=n.context),new t.fn.init(r,i)}var n;return f.extend(t,this),t},i.ie&&i.ie<8&&(x(L,"get",{maxlength:function(e){var t=e.maxLength;return 2147483647===t?k:t},size:function(e){var t=e.size;return 20===t?k:t},class:function(e){return e.className},style:function(e){var t=e.style.cssText;return 0===t.length?k:t}}),x(L,"set",{class:function(e,t){e.className=t},style:function(e,t){e.style.cssText=t}})),i.ie&&i.ie<9&&(D.float="styleFloat",x(M,"set",{opacity:function(e,t){var n=e.style;null===t||""===t?n.removeAttribute("filter"):(n.zoom=1,n.filter="alpha(opacity="+100*t+")")}})),f.attrHooks=L,f.cssHooks=M,f}),r(v,[],function(){return function(e,t){function n(e,t,n,r){function i(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+i(t)+i(n)+i(r)}var r=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,o=/\s*([^:]+):\s*([^;]+);?/g,a=/\s+$/,s,l,c={},u,d,f,h="\ufeff";for(e=e||{},t&&(d=t.getValidStyles(),f=t.getInvalidStyles()),u=("\\\" \\' \\; \\: ; : "+h).split(" "),l=0;l-1&&n||(m[e+t]=l==-1?s[0]:s.join(" "),delete m[e+"-top"+t],delete m[e+"-right"+t],delete m[e+"-bottom"+t],delete m[e+"-left"+t])}}function u(e){var t=m[e],n;if(t){for(t=t.split(" "),n=t.length;n--;)if(t[n]!==t[0])return!1;return m[e]=t[0],!0}}function d(e,t,n,r){u(t)&&u(n)&&u(r)&&(m[e]=m[t]+" "+m[n]+" "+m[r],delete m[t],delete m[n],delete m[r])}function f(e){return b=!0,c[e]}function h(e,t){return b&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return c[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e}function p(t,n,r,i,o,a){if(o=o||a)return o=h(o),"'"+o.replace(/\'/g,"\\'")+"'";if(n=h(n||r||i),!e.allow_script_urls){var s=n.replace(/[\s\r\n]+/,"");if(/(java|vb)script:/i.test(s))return"";if(!e.allow_svg_data_urls&&/^data:image\/svg/i.test(s))return""}return C&&(n=C.call(x,n,"style")),"url('"+n.replace(/\'/g,"\\'")+"')"}var m={},g,v,y,b,C=e.url_converter,x=e.url_converter_scope||this;if(t){for(t=t.replace(/[\u0000-\u001F]/g,""),t=t.replace(/\\[\"\';:\uFEFF]/g,f).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,f)});g=o.exec(t);){if(v=g[1].replace(a,"").toLowerCase(),y=g[2].replace(a,""),y=y.replace(/\\[0-9a-f]+/g,function(e){return String.fromCharCode(parseInt(e.substr(1),16))}),v&&y.length>0){if(!e.allow_script_urls&&("behavior"==v||/expression\s*\(|\/\*|\*\//.test(y)))continue;"font-weight"===v&&"700"===y?y="bold":"color"!==v&&"background-color"!==v||(y=y.toLowerCase()),y=y.replace(r,n),y=y.replace(i,p),m[v]=b?h(y,!0):y}o.lastIndex=g.index+g[0].length}s("border","",!0),s("border","-width"),s("border","-color"),s("border","-style"),s("padding",""),s("margin",""),d("border","border-width","border-style","border-color"),"medium none"===m.border&&delete m.border,"none"===m["border-image"]&&delete m["border-image"]}return m},serialize:function(e,t){function n(t){var n,r,o,a;if(n=d[t])for(r=0,o=n.length;r0&&(i+=(i.length>0?" ":"")+t+": "+a+";")}function r(e,t){var n;return n=f["*"],(!n||!n[e])&&(n=f[t],!n||!n[e])}var i="",o,a;if(t&&d)n("*"),n(t);else for(o in e)a=e[o],a!==s&&a.length>0&&(f&&!r(o,t)||(i+=(i.length>0?" ":"")+o+": "+a+";"));return i}}}}),r(y,[],function(){return function(e,t){function n(e,n,r,i){var o,a;if(e){if(!i&&e[n])return e[n];if(e!=t){if(o=e[r])return o;for(a=e.parentNode;a&&a!=t;a=a.parentNode)if(o=a[r])return o}}}function r(e,n,r,i){var o,a,s;if(e){if(o=e[r],t&&o===t)return;if(o){if(!i)for(s=o[n];s;s=s[n])if(!s[n])return s;return o}if(a=e.parentNode,a&&a!==t)return a}}var i=e;this.current=function(){return i},this.next=function(e){return i=n(i,"firstChild","nextSibling",e)},this.prev=function(e){return i=n(i,"lastChild","previousSibling",e)},this.prev2=function(e){return i=r(i,"lastChild","previousSibling",e)}}}),r(b,[m],function(e){function t(n){function r(){return P.createDocumentFragment()}function i(e,t){N(F,e,t)}function o(e,t){N(z,e,t)}function a(e){i(e.parentNode,j(e))}function s(e){i(e.parentNode,j(e)+1)}function l(e){o(e.parentNode,j(e))}function c(e){o(e.parentNode,j(e)+1)}function u(e){e?(M[V]=M[W],M[$]=M[U]):(M[W]=M[V],M[U]=M[$]),M.collapsed=F}function d(e){a(e),c(e)}function f(e){i(e,0),o(e,1===e.nodeType?e.childNodes.length:e.nodeValue.length)}function h(e,t){var n=M[W],r=M[U],i=M[V],o=M[$],a=t.startContainer,s=t.startOffset,l=t.endContainer,c=t.endOffset;return 0===e?w(n,r,a,s):1===e?w(i,o,a,s):2===e?w(i,o,l,c):3===e?w(n,r,l,c):void 0}function p(){E(I)}function m(){return E(O)}function g(){return E(H)}function v(e){var t=this[W],r=this[U],i,o;3!==t.nodeType&&4!==t.nodeType||!t.nodeValue?(t.childNodes.length>0&&(o=t.childNodes[r]),o?t.insertBefore(e,o):3==t.nodeType?n.insertAfter(e,t):t.appendChild(e)):r?r>=t.nodeValue.length?n.insertAfter(e,t):(i=t.splitText(r),t.parentNode.insertBefore(e,i)):t.parentNode.insertBefore(e,t)}function y(e){var t=M.extractContents();M.insertNode(e),e.appendChild(t),M.selectNode(e)}function b(){return q(new t(n),{startContainer:M[W],startOffset:M[U],endContainer:M[V],endOffset:M[$],collapsed:M.collapsed,commonAncestorContainer:M.commonAncestorContainer})}function C(e,t){var n;if(3==e.nodeType)return e;if(t<0)return e;for(n=e.firstChild;n&&t>0;)--t,n=n.nextSibling;return n?n:e}function x(){return M[W]==M[V]&&M[U]==M[$]}function w(e,t,r,i){var o,a,s,l,c,u;if(e==r)return t==i?0:t0&&M.collapse(e):M.collapse(e),M.collapsed=x(),M.commonAncestorContainer=n.findCommonAncestor(M[W],M[V])}function E(e){var t,n=0,r=0,i,o,a,s,l,c;if(M[W]==M[V])return _(e);for(t=M[V],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[W])return S(t,e);++n}for(t=M[W],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[V])return k(t,e);++r}for(o=r-n,a=M[W];o>0;)a=a.parentNode,o--;for(s=M[V];o<0;)s=s.parentNode,o++;for(l=a.parentNode,c=s.parentNode;l!=c;l=l.parentNode,c=c.parentNode)a=l,s=c;return T(a,s,e)}function _(e){var t,n,i,o,a,s,l,c,u;if(e!=I&&(t=r()),M[U]==M[$])return t;if(3==M[W].nodeType){if(n=M[W].nodeValue,i=n.substring(M[U],M[$]),e!=H&&(o=M[W],c=M[U],u=M[$]-M[U],0===c&&u>=o.nodeValue.length-1?o.parentNode.removeChild(o):o.deleteData(c,u),M.collapse(F)),e==I)return;return i.length>0&&t.appendChild(P.createTextNode(i)),t}for(o=C(M[W],M[U]),a=M[$]-M[U];o&&a>0;)s=o.nextSibling,l=D(o,e),t&&t.appendChild(l),--a,o=s;return e!=H&&M.collapse(F),t}function S(e,t){var n,i,o,a,s,l;if(t!=I&&(n=r()),i=R(e,t),n&&n.appendChild(i),o=j(e),a=o-M[U],a<=0)return t!=H&&(M.setEndBefore(e),M.collapse(z)),n;for(i=e.previousSibling;a>0;)s=i.previousSibling,l=D(i,t),n&&n.insertBefore(l,n.firstChild),--a,i=s;return t!=H&&(M.setEndBefore(e),M.collapse(z)),n}function k(e,t){var n,i,o,a,s,l;for(t!=I&&(n=r()),o=A(e,t),n&&n.appendChild(o),i=j(e),++i,a=M[$]-i,o=e.nextSibling;o&&a>0;)s=o.nextSibling,l=D(o,t),n&&n.appendChild(l),--a,o=s;return t!=H&&(M.setStartAfter(e),M.collapse(F)),n}function T(e,t,n){var i,o,a,s,l,c,u;for(n!=I&&(o=r()),i=A(e,n),o&&o.appendChild(i),a=j(e),s=j(t),++a,l=s-a,c=e.nextSibling;l>0;)u=c.nextSibling,i=D(c,n),o&&o.appendChild(i),c=u,--l;return i=R(t,n),o&&o.appendChild(i),n!=H&&(M.setStartAfter(e),M.collapse(F)),o}function R(e,t){var n=C(M[V],M[$]-1),r,i,o,a,s,l=n!=M[V];if(n==e)return B(n,l,z,t);for(r=n.parentNode,i=B(r,z,z,t);r;){for(;n;)o=n.previousSibling,a=B(n,l,z,t),t!=I&&i.insertBefore(a,i.firstChild),l=F,n=o;if(r==e)return i;n=r.previousSibling,r=r.parentNode,s=B(r,z,z,t),t!=I&&s.appendChild(i),i=s}}function A(e,t){var n=C(M[W],M[U]),r=n!=M[W],i,o,a,s,l;if(n==e)return B(n,r,F,t);for(i=n.parentNode,o=B(i,z,F,t);i;){for(;n;)a=n.nextSibling,s=B(n,r,F,t),t!=I&&o.appendChild(s),r=F,n=a;if(i==e)return o;n=i.nextSibling,i=i.parentNode,l=B(i,z,F,t),t!=I&&l.appendChild(o),o=l}}function B(e,t,r,i){var o,a,s,l,c;if(t)return D(e,i);if(3==e.nodeType){if(o=e.nodeValue,r?(l=M[U],a=o.substring(l),s=o.substring(0,l)):(l=M[$],a=o.substring(0,l),s=o.substring(l)),i!=H&&(e.nodeValue=s),i==I)return;return c=n.clone(e,z),c.nodeValue=a,c}if(i!=I)return n.clone(e,z)}function D(e,t){return t!=I?t==H?n.clone(e,F):e:void e.parentNode.removeChild(e)}function L(){return n.create("body",null,g()).outerText}var M=this,P=n.doc,O=0,H=1,I=2,F=!0,z=!1,U="startOffset",W="startContainer",V="endContainer",$="endOffset",q=e.extend,j=n.nodeIndex;return q(M,{startContainer:P,startOffset:0,endContainer:P,endOffset:0,collapsed:F,commonAncestorContainer:P,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:i,setEnd:o,setStartBefore:a,setStartAfter:s,setEndBefore:l,setEndAfter:c,collapse:u,selectNode:d,selectNodeContents:f,compareBoundaryPoints:h,deleteContents:p,extractContents:m,cloneContents:g,insertNode:v,surroundContents:y,cloneRange:b,toStringIE:L}),M}return t.prototype.toString=function(){return this.toStringIE()},t}),r(C,[m],function(e){function t(e){var t;return t=document.createElement("div"),t.innerHTML=e,t.textContent||t.innerText||e}function n(e,t){var n,r,i,a={};if(e){for(e=e.split(","),t=t||10,n=0;n\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[<>&\"\']/g,u=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,d={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};o={'"':""","'":"'","<":"<",">":">","&":"&","`":"`"},a={"<":"<",">":">","&":"&",""":'"',"'":"'"},i=n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var f={encodeRaw:function(e,t){return e.replace(t?s:l,function(e){return o[e]||e})},encodeAllRaw:function(e){return(""+e).replace(c,function(e){return o[e]||e})},encodeNumeric:function(e,t){return e.replace(t?s:l,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":o[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||i,e.replace(t?s:l,function(e){return o[e]||n[e]||e})},getEncodeFunc:function(e,t){function a(e,n){return e.replace(n?s:l,function(e){return o[e]||t[e]||"&#"+e.charCodeAt(0)+";"||e})}function c(e,n){return f.encodeNamed(e,n,t)}return t=n(t)||i,e=r(e.replace(/\+/g,",")),e.named&&e.numeric?a:e.named?t?c:f.encodeNamed:e.numeric?f.encodeNumeric:f.encodeRaw},decode:function(e){return e.replace(u,function(e,n){return n?(n="x"===n.charAt(0).toLowerCase()?parseInt(n.substr(1),16):parseInt(n,10),n>65535?(n-=65536,String.fromCharCode(55296+(n>>10),56320+(1023&n))):d[n]||String.fromCharCode(n)):a[e]||i[e]||t(e)})}};return f}),r(x,[m,u],function(e,t){return function(n,r){function i(e){n.getElementsByTagName("head")[0].appendChild(e)}function o(r,o,c){function u(){for(var e=b.passed,t=e.length;t--;)e[t]();b.status=2,b.passed=[],b.failed=[]}function d(){for(var e=b.failed,t=e.length;t--;)e[t]();b.status=3,b.passed=[],b.failed=[]}function f(){var e=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(e&&e[1]<536)}function h(e,n){e()||((new Date).getTime()-y0)return v=n.createElement("style"),v.textContent='@import "'+r+'"',m(),void i(v);p()}i(g),g.href=r}}var a=0,s={},l;r=r||{},l=r.maxLoadTime||5e3,this.load=o}}),r(w,[h,g,v,f,y,b,C,d,m,x],function(e,n,r,i,o,a,s,l,c,u){function d(e,t){var n={},r=t.keep_values,i;return i={set:function(n,r,i){t.url_converter&&(r=t.url_converter.call(t.url_converter_scope||e,r,i,n[0])),n.attr("data-mce-"+i,r).attr(i,r)},get:function(e,t){return e.attr("data-mce-"+t)||e.attr(t)}},n={style:{set:function(e,t){return null!==t&&"object"==typeof t?void e.css(t):(r&&e.attr("data-mce-style",t),void e.attr("style",t))},get:function(t){var n=t.attr("data-mce-style")||t.attr("style");return n=e.serializeStyle(e.parseStyle(n),t[0].nodeName)}}},r&&(n.href=n.src=i),n}function f(e,t){var n=t.attr("style");n=e.serializeStyle(e.parseStyle(n),t[0].nodeName),n||(n=null),t.attr("data-mce-style",n)}function h(e,t){var n=0,r,i;if(e)for(r=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)i=e.nodeType,(!t||3!=i||i!=r&&e.nodeValue.length)&&(n++,r=i);return n}function p(e,t){var o=this,a;o.doc=e,o.win=window,o.files={},o.counter=0,o.stdMode=!b||e.documentMode>=8,o.boxModel=!b||"CSS1Compat"==e.compatMode||o.stdMode,o.styleSheetLoader=new u(e),o.boundEvents=[],o.settings=t=t||{},o.schema=t.schema,o.styles=new r({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),o.fixDoc(e),o.events=t.ownEvents?new i(t.proxy):i.Event,o.attrHooks=d(o,t),a=t.schema?t.schema.getBlockElements():{},o.$=n.overrideDefaults(function(){return{context:e,element:o.getRoot()}}),o.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!a[e.nodeName]):!!a[e]}}var m=c.each,g=c.is,v=c.grep,y=c.trim,b=l.ie,C=/^([a-z0-9],?)+$/i,x=/^[ \t\r\n]*$/;return p.prototype={$$:function(e){return"string"==typeof e&&(e=this.get(e)),this.$(e)},root:null,fixDoc:function(e){var t=this.settings,n;if(b&&t.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(t){e.createElement(t)});for(n in t.schema.getCustomElements())e.createElement(n)}},clone:function(e,t){var n=this,r,i;return!b||1!==e.nodeType||t?e.cloneNode(t):(i=n.doc,t?r.firstChild:(r=i.createElement(e.nodeName),m(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),r))},getRoot:function(){var e=this;return e.settings.root_element||e.doc.body},getViewPort:function(e){var t,n;return e=e?e:this.win,t=e.document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t=this,n,r;return e=t.get(e),n=t.getPos(e),r=t.getSize(e),{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:function(e){var t=this,n,r;return e=t.get(e),n=t.getStyle(e,"width"),r=t.getStyle(e,"height"),n.indexOf("px")===-1&&(n=0),r.indexOf("px")===-1&&(r=0),{w:parseInt(n,10)||e.offsetWidth||e.clientWidth,h:parseInt(r,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,n,r,i){var o=this,a,s=[];for(e=o.get(e),i=i===t,r=r||("BODY"!=o.getRoot().nodeName?o.getRoot().parentNode:null),g(n,"string")&&(a=n,n="*"===n?function(e){ +return 1==e.nodeType}:function(e){return o.is(e,a)});e&&e!=r&&e.nodeType&&9!==e.nodeType;){if(!n||n(e)){if(!i)return e;s.push(e)}e=e.parentNode}return i?s:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,e=this.doc.getElementById(e),e&&e.id!==t)?this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(t,n){var r=this;return e(t,r.get(n)||r.settings.root_element||r.doc,[])},is:function(n,r){var i;if(n.length===t){if("*"===r)return 1==n.nodeType;if(C.test(r)){for(r=r.toLowerCase().split(/,/),n=n.nodeName.toLowerCase(),i=r.length-1;i>=0;i--)if(r[i]==n)return!0;return!1}}if(n.nodeType&&1!=n.nodeType)return!1;var o=n.nodeType?[n]:n;return e(r,o[0].ownerDocument||o[0],null,o).length>0},add:function(e,t,n,r,i){var o=this;return this.run(e,function(e){var a;return a=g(t,"string")?o.doc.createElement(t):t,o.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):o.setHTML(a,r)),i?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r="",i;r+="<"+e;for(i in t)t.hasOwnProperty(i)&&null!==t[i]&&"undefined"!=typeof t[i]&&(r+=" "+i+'="'+this.encode(t[i])+'"');return"undefined"!=typeof n?r+">"+n+"":r+" />"},createFragment:function(e){var t,n,r=this.doc,i;for(i=r.createElement("div"),t=r.createDocumentFragment(),e&&(i.innerHTML=e);n=i.firstChild;)t.appendChild(n);return t},remove:function(e,t){return e=this.$$(e),t?e.each(function(){for(var e;e=this.firstChild;)3==e.nodeType&&0===e.data.length?this.removeChild(e):this.parentNode.insertBefore(e,this)}).remove():e.remove(),e.length>1?e.toArray():e[0]},setStyle:function(e,t,n){e=this.$$(e).css(t,n),this.settings.update_styles&&f(this,e)},getStyle:function(e,n,r){return e=this.$$(e),r?e.css(n):(n=n.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"float"==n&&(n=l.ie&&l.ie<12?"styleFloat":"cssFloat"),e[0]&&e[0].style?e[0].style[n]:t)},setStyles:function(e,t){e=this.$$(e).css(t),this.settings.update_styles&&f(this,e)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r=this,i,o,a=r.settings;""===n&&(n=null),e=r.$$(e),i=e.attr(t),e.length&&(o=r.attrHooks[t],o&&o.set?o.set(e,n,t):e.attr(t,n),i!=n&&a.onSetAttrib&&a.onSetAttrib({attrElm:e,attrName:t,attrValue:n}))},setAttribs:function(e,t){var n=this;n.$$(e).each(function(e,r){m(t,function(e,t){n.setAttrib(r,t,e)})})},getAttrib:function(e,t,n){var r=this,i,o;return e=r.$$(e),e.length&&(i=r.attrHooks[t],o=i&&i.get?i.get(e,t):e.attr(t)),"undefined"==typeof o&&(o=n||""),o},getPos:function(e,t){var r=this,i=0,o=0,a,s=r.doc,l=s.body,c;if(e=r.get(e),t=t||l,e){if(t===l&&e.getBoundingClientRect&&"static"===n(l).css("position"))return c=e.getBoundingClientRect(),t=r.boxModel?s.documentElement:l,i=c.left+(s.documentElement.scrollLeft||l.scrollLeft)-t.clientLeft,o=c.top+(s.documentElement.scrollTop||l.scrollTop)-t.clientTop,{x:i,y:o};for(a=e;a&&a!=t&&a.nodeType;)i+=a.offsetLeft||0,o+=a.offsetTop||0,a=a.offsetParent;for(a=e.parentNode;a&&a!=t&&a.nodeType;)i-=a.scrollLeft||0,o-=a.scrollTop||0,a=a.parentNode}return{x:i,y:o}},parseStyle:function(e){return this.styles.parse(e)},serializeStyle:function(e,t){return this.styles.serialize(e,t)},addStyle:function(e){var t=this,n=t.doc,r,i;if(t!==p.DOM&&n===document){var o=p.DOM.addedStyles;if(o=o||[],o[e])return;o[e]=!0,p.DOM.addedStyles=o}i=n.getElementById("mceDefaultStyles"),i||(i=n.createElement("style"),i.id="mceDefaultStyles",i.type="text/css",r=n.getElementsByTagName("head")[0],r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)),i.styleSheet?i.styleSheet.cssText+=e:i.appendChild(n.createTextNode(e))},loadCSS:function(e){var t=this,n=t.doc,r;return t!==p.DOM&&n===document?void p.DOM.loadCSS(e):(e||(e=""),r=n.getElementsByTagName("head")[0],void m(e.split(","),function(e){var i;e=c._addCacheSuffix(e),t.files[e]||(t.files[e]=!0,i=t.create("link",{rel:"stylesheet",href:e}),b&&n.documentMode&&n.recalc&&(i.onload=function(){n.recalc&&n.recalc(),i.onload=null}),r.appendChild(i))}))},addClass:function(e,t){this.$$(e).addClass(t)},removeClass:function(e,t){this.toggleClass(e,t,!1)},hasClass:function(e,t){return this.$$(e).hasClass(t)},toggleClass:function(e,t,r){this.$$(e).toggleClass(t,r).each(function(){""===this.className&&n(this).attr("class",null)})},show:function(e){this.$$(e).show()},hide:function(e){this.$$(e).hide()},isHidden:function(e){return"none"==this.$$(e).css("display")},uniqueId:function(e){return(e?e:"mce_")+this.counter++},setHTML:function(e,t){e=this.$$(e),b?e.each(function(e,r){if(r.canHaveHTML!==!1){for(;r.firstChild;)r.removeChild(r.firstChild);try{r.innerHTML="
"+t,r.removeChild(r.firstChild)}catch(e){n("
").html("
"+t).contents().slice(1).appendTo(r)}return t}}):e.html(t)},getOuterHTML:function(e){return e=this.get(e),1==e.nodeType&&"outerHTML"in e?e.outerHTML:n("
").append(n(e).clone()).html()},setOuterHTML:function(e,t){var r=this;r.$$(e).each(function(){try{if("outerHTML"in this)return void(this.outerHTML=t)}catch(e){}r.remove(n(this).html(t),!0)})},decode:s.decode,encode:s.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,r=t.nextSibling,r?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){var r=this;return r.run(t,function(t){return g(t,"array")&&(e=e.cloneNode(!0)),n&&m(v(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n=this,r;return e.nodeName!=t.toUpperCase()&&(r=n.create(t),m(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),n.replace(r,e,1)),r||e},findCommonAncestor:function(e,t){for(var n=e,r;n;){for(r=t;r&&n!=r;)r=r.parentNode;if(n==r)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.documentElement:n},toHex:function(e){return this.styles.toHex(c.trim(e))},run:function(e,t,n){var r=this,i;return"string"==typeof e&&(e=r.get(e)),!!e&&(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(i=[],m(e,function(e,o){e&&("string"==typeof e&&(e=r.get(e)),i.push(t.call(n,e,o)))}),i))},getAttribs:function(e){var t;if(e=this.get(e),!e)return[];if(b){if(t=[],"OBJECT"==e.nodeName)return e.attributes;"OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"});var n=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return e.cloneNode(!1).outerHTML.replace(n,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t}return e.attributes},isEmpty:function(e,t){var n=this,r,i,a,s,l,c=0;if(e=e.firstChild){s=new o(e,e.parentNode),t=t||(n.schema?n.schema.getNonEmptyElements():null);do{if(a=e.nodeType,1===a){if(e.getAttribute("data-mce-bogus"))continue;if(l=e.nodeName.toLowerCase(),t&&t[l]){if("br"===l){c++;continue}return!1}for(i=n.getAttribs(e),r=i.length;r--;)if(l=i[r].nodeName,"name"===l||"data-mce-bookmark"===l)return!1}if(8==a)return!1;if(3===a&&!x.test(e.nodeValue))return!1}while(e=s.next())}return c<=1},createRng:function(){var e=this.doc;return e.createRange?e.createRange():new a(this)},nodeIndex:h,split:function(e,t,n){function r(e){function t(e){var t=e.previousSibling&&"SPAN"==e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"==e.nextSibling.nodeName;return t&&n}var n,o=e.childNodes,a=e.nodeType;if(1!=a||"bookmark"!=e.getAttribute("data-mce-type")){for(n=o.length-1;n>=0;n--)r(o[n]);if(9!=a){if(3==a&&e.nodeValue.length>0){var s=y(e.nodeValue).length;if(!i.isBlock(e.parentNode)||s>0||0===s&&t(e))return}else if(1==a&&(o=e.childNodes,1==o.length&&o[0]&&1==o[0].nodeType&&"bookmark"==o[0].getAttribute("data-mce-type")&&e.parentNode.insertBefore(o[0],e),o.length||/^(br|hr|input|img)$/i.test(e.nodeName)))return;i.remove(e)}return e}}var i=this,o=i.createRng(),a,s,l;if(e&&t)return o.setStart(e.parentNode,i.nodeIndex(e)),o.setEnd(t.parentNode,i.nodeIndex(t)),a=o.extractContents(),o=i.createRng(),o.setStart(t.parentNode,i.nodeIndex(t)+1),o.setEnd(e.parentNode,i.nodeIndex(e)+1),s=o.extractContents(),l=e.parentNode,l.insertBefore(r(a),e),n?l.insertBefore(n,e):l.insertBefore(t,e),l.insertBefore(r(s),e),i.remove(e),n||t},bind:function(e,t,n,r){var i=this;if(c.isArray(e)){for(var o=e.length;o--;)e[o]=i.bind(e[o],t,n,r);return e}return!i.settings.collect||e!==i.doc&&e!==i.win||i.boundEvents.push([e,t,n,r]),i.events.bind(e,t,n,r||i)},unbind:function(e,t,n){var r=this,i;if(c.isArray(e)){for(i=e.length;i--;)e[i]=r.unbind(e[i],t,n);return e}if(r.boundEvents&&(e===r.doc||e===r.win))for(i=r.boundEvents.length;i--;){var o=r.boundEvents[i];e!=o[0]||t&&t!=o[1]||n&&n!=o[2]||this.events.unbind(o[0],o[1],o[2])}return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return e&&1==e.nodeType?(t=e.getAttribute("data-mce-contenteditable"),t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null):null},getContentEditableParent:function(e){for(var t=this.getRoot(),n=null;e&&e!==t&&(n=this.getContentEditable(e),null===n);e=e.parentNode);return n},destroy:function(){var t=this;if(t.boundEvents){for(var n=t.boundEvents.length;n--;){var r=t.boundEvents[n];this.events.unbind(r[0],r[1],r[2])}t.boundEvents=null}e.setDocument&&e.setDocument(),t.win=t.doc=t.root=t.events=t.frag=null},isChildOf:function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,i=t;if(e)for("string"==typeof i&&(i=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(i(e))return e;return null}},p.DOM=new p(document),p.nodeIndex=h,p}),r(N,[w,m],function(e,t){function n(){function e(e,n){function i(){a.remove(l),s&&(s.onreadystatechange=s.onload=s=null),n()}function o(){"undefined"!=typeof console&&console.log&&console.log("Failed to load: "+e)}var a=r,s,l;l=a.uniqueId(),s=document.createElement("script"),s.id=l,s.type="text/javascript",s.src=t._addCacheSuffix(e),"onreadystatechange"in s?s.onreadystatechange=function(){/loaded|complete/.test(s.readyState)&&i()}:s.onload=i,s.onerror=o,(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}var n=0,a=1,s=2,l={},c=[],u={},d=[],f=0,h;this.isDone=function(e){return l[e]==s},this.markDone=function(e){l[e]=s},this.add=this.load=function(e,t,r){var i=l[e];i==h&&(c.push(e),l[e]=n),t&&(u[e]||(u[e]=[]),u[e].push({func:t,scope:r||this}))},this.remove=function(e){delete l[e],delete u[e]},this.loadQueue=function(e,t){this.loadScripts(c,e,t)},this.loadScripts=function(t,n,r){function c(e){i(u[e],function(e){e.func.call(e.scope)}),u[e]=h}var p;d.push({func:n,scope:r||this}),(p=function(){var n=o(t);t.length=0,i(n,function(t){return l[t]==s?void c(t):void(l[t]!=a&&(l[t]=a,f++,e(t,function(){l[t]=s,f--,c(t),p()})))}),f||(i(d,function(e){e.func.call(e.scope)}),d.length=0)})()}}var r=e.DOM,i=t.each,o=t.grep;return n.ScriptLoader=new n,n}),r(E,[N,m],function(e,n){function r(){var e=this;e.items=[],e.urls={},e.lookup={}}var i=n.each;return r.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:t},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLangPack:function(t,n){var i=r.language;if(i&&r.languageLoad!==!1){if(n)if(n=","+n+",",n.indexOf(","+i.substr(0,2)+",")!=-1)i=i.substr(0,2);else if(n.indexOf(","+i+",")==-1)return;e.ScriptLoader.add(this.urls[t]+"/langs/"+i+".js")}},add:function(e,t,n){return this.items.push(t),this.lookup[e]={instance:t,dependencies:n},t},remove:function(e){delete this.urls[e],delete this.lookup[e]},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(t,n){var r=this.urls[t];i(n,function(t){e.ScriptLoader.add(r+"/"+t)})},load:function(n,o,a,s){function l(){var r=c.dependencies(n);i(r,function(e){var n=c.createUrl(o,e);c.load(n.resource,n,t,t)}),a&&(s?a.call(s):a.call(e))}var c=this,u=o;c.urls[n]||("object"==typeof o&&(u=o.prefix+o.resource+o.suffix),0!==u.indexOf("/")&&u.indexOf("://")==-1&&(u=r.baseURL+"/"+u),c.urls[n]=u.substring(0,u.lastIndexOf("/")),c.lookup[n]?l():e.ScriptLoader.add(u,l,s))}},r.PluginManager=new r,r.ThemeManager=new r,r}),r(_,[],function(){function e(e){return function(t){return!!t&&t.nodeType==e}}function t(e){return e=e.toLowerCase().split(" "),function(t){var n,r;if(t&&t.nodeType)for(r=t.nodeName.toLowerCase(),n=0;nn.length-1?t=n.length-1:t<0&&(t=0),n[t]||e}function a(e){this.walk=function(t,n){function r(e){var t;return t=e[0],3===t.nodeType&&t===c&&u>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===f&&e.length>0&&t===d&&3===t.nodeType&&e.splice(e.length-1,1),e}function i(e,t,n){for(var r=[];e&&e!=n;e=e[t])r.push(e);return r}function a(e,t){do{if(e.parentNode==t)return e;e=e.parentNode}while(e)}function s(e,t,o){var a=o?"nextSibling":"previousSibling";for(g=e,v=g.parentNode;g&&g!=t;g=v)v=g.parentNode,y=i(g==e?g:g[a],a),y.length&&(o||y.reverse(),n(r(y)))}var c=t.startContainer,u=t.startOffset,d=t.endContainer,f=t.endOffset,h,p,m,g,v,y,b;if(b=e.select("td[data-mce-selected],th[data-mce-selected]"),b.length>0)return void l(b,function(e){n([e])});if(1==c.nodeType&&c.hasChildNodes()&&(c=c.childNodes[u]),1==d.nodeType&&d.hasChildNodes()&&(d=o(d,f)),c==d)return n(r([c]));for(h=e.findCommonAncestor(c,d),g=c;g;g=g.parentNode){if(g===d)return s(c,h,!0);if(g===h)break}for(g=d;g;g=g.parentNode){if(g===c)return s(d,h);if(g===h)break}p=a(c,h)||c,m=a(d,h)||d,s(c,p,!0),y=i(p==c?p:p.nextSibling,"nextSibling",m==d?m.nextSibling:m),y.length&&n(r(y)),s(d,m)},this.split=function(e){function t(e,t){return e.splitText(t)}var n=e.startContainer,r=e.startOffset,i=e.endContainer,o=e.endOffset;return n==i&&3==n.nodeType?r>0&&rr?(o-=r,n=i=t(i,o).previousSibling,o=i.nodeValue.length,r=0):o=0):(3==n.nodeType&&r>0&&r0&&o0)return h=v,p=n?v.nodeValue.length:0,void(i=!0);if(e.isBlock(v)||y[v.nodeName.toLowerCase()])return;s=v}o&&s&&(h=s,i=!0,p=0)}var h,p,m,g=e.getRoot(),v,y,b,C;if(h=n[(r?"start":"end")+"Container"],p=n[(r?"start":"end")+"Offset"],C=1==h.nodeType&&p===h.childNodes.length,y=e.schema.getNonEmptyElements(),b=r,!u(h)){if(1==h.nodeType&&p>h.childNodes.length-1&&(b=!1),9===h.nodeType&&(h=e.getRoot(),p=0),h===g){if(b&&(v=h.childNodes[p>0?p-1:0])){if(u(v))return;if(y[v.nodeName]||"TABLE"==v.nodeName)return}if(h.hasChildNodes()){if(p=Math.min(!b&&p>0?p-1:p,h.childNodes.length-1),h=h.childNodes[p],p=0,!o&&h===g.lastChild&&"TABLE"===h.nodeName)return;if(l(h)||u(h))return;if(h.hasChildNodes()&&!/TABLE/.test(h.nodeName)){v=h,m=new t(h,g);do{if(c(v)||u(v)){i=!1;break}if(3===v.nodeType&&v.nodeValue.length>0){p=b?0:v.nodeValue.length,h=v,i=!0;break}if(y[v.nodeName.toLowerCase()]&&!a(v)){p=e.nodeIndex(v),h=v.parentNode,"IMG"!=v.nodeName||b||p++,i=!0;break}}while(v=b?m.next():m.prev())}}}o&&(3===h.nodeType&&0===p&&f(!0),1===h.nodeType&&(v=h.childNodes[p],v||(v=h.childNodes[p-1]),!v||"BR"!==v.nodeName||d(v,"A")||s(v)||s(v,!0)||f(!0,v))),b&&!o&&3===h.nodeType&&p===h.nodeValue.length&&f(!1),i&&n["set"+(r?"Start":"End")](h,p)}}var i,o;return o=n.collapsed,r(!0),o||r(),i&&o&&n.collapse(!0),i}}function s(t,n,r){var i,o,a;if(i=r.elementFromPoint(t,n),o=r.body.createTextRange(),i&&"HTML"!=i.tagName||(i=r.body),o.moveToElementText(i),a=e.toArray(o.getClientRects()),a=a.sort(function(e,t){return e=Math.abs(Math.max(e.top-n,e.bottom-n)),t=Math.abs(Math.max(t.top-n,t.bottom-n)),e-t}),a.length>0){n=(a[0].bottom+a[0].top)/2;try{return o.moveToPoint(t,n),o.collapse(!0),o}catch(e){}}return null}var l=e.each,c=n.isContentEditableFalse,u=i.isCaretContainer;return a.compareRanges=function(e,t){if(e&&t){if(!e.item&&!e.duplicate)return e.startContainer==t.startContainer&&e.startOffset==t.startOffset;if(e.item&&t.item&&e.item(0)===t.item(0))return!0;if(e.isEqual&&t.isEqual&&t.isEqual(e))return!0}return!1},a.getCaretRangeFromPoint=function(e,t,n){var r,i;if(n.caretPositionFromPoint)i=n.caretPositionFromPoint(e,t),r=n.createRange(),r.setStart(i.offsetNode,i.offset),r.collapse(!0);else if(n.caretRangeFromPoint)r=n.caretRangeFromPoint(e,t);else if(n.body.createTextRange){r=n.body.createTextRange();try{r.moveToPoint(e,t),r.collapse(!0)}catch(i){r=s(e,t,n)}}return r},a.getSelectedNode=function(e){var t=e.startContainer,n=e.startOffset;return t.hasChildNodes()&&e.endOffset==n+1?t.childNodes[n]:null},a.getNode=function(e,t){return 1==e.nodeType&&e.hasChildNodes()&&(t>=e.childNodes.length&&(t=e.childNodes.length-1),e=e.childNodes[t]),e},a}),r(R,[T,d,u],function(e,t,n){return function(r){function i(e){var t,n;if(n=r.$(e).parentsUntil(r.getBody()).add(e),n.length===a.length){for(t=n.length;t>=0&&n[t]===a[t];t--);if(t===-1)return a=n,!0}return a=n,!1}var o,a=[];"onselectionchange"in r.getDoc()||r.on("NodeChange Click MouseUp KeyUp Focus",function(t){var n,i;n=r.selection.getRng(),i={startContainer:n.startContainer,startOffset:n.startOffset,endContainer:n.endContainer,endOffset:n.endOffset},"nodechange"!=t.type&&e.compareRanges(i,o)||r.fire("SelectionChange"),o=i}),r.on("contextmenu",function(){r.fire("SelectionChange")}),r.on("SelectionChange",function(){var e=r.selection.getStart(!0);!t.range&&r.selection.isCollapsed()||!i(e)&&r.dom.isChildOf(e,r.getBody())&&r.nodeChanged({selectionChange:!0})}),r.on("MouseUp",function(e){e.isDefaultPrevented()||("IMG"==r.selection.getNode().nodeName?n.setEditorTimeout(r,function(){r.nodeChanged()}):r.nodeChanged())}),this.nodeChanged=function(e){var t=r.selection,n,i,o;r.initialized&&t&&!r.settings.disable_nodechange&&!r.readonly&&(o=r.getBody(),n=t.getStart()||o,n.ownerDocument==r.getDoc()&&r.dom.isChildOf(n,o)||(n=o),"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),i=[],r.dom.getParent(n,function(e){return e===o||void i.push(e)}),e=e||{},e.element=n,e.parents=i,r.fire("NodeChange",e))}}}),r(A,[],function(){function e(e,t,n){var r,i,o=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[o])return e[o];if(e!==t){if(r=e[a])return r;for(i=e.parent;i&&i!==t;i=i.parent)if(r=i[a])return r}}function t(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}var n=/^[ \t\r\n]*$/,r={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return t.prototype={replace:function(e){var t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t},attr:function(e,t){var n=this,r,i,o;if("string"!=typeof e){for(i in e)n.attr(i,e[i]);return n}if(r=n.attributes){if(t!==o){if(null===t){if(e in r.map)for(delete r.map[e],i=r.length;i--;)if(r[i].name===e)return r=r.splice(i,1),n;return n}if(e in r.map){for(i=r.length;i--;)if(r[i].name===e){r[i].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}},clone:function(){var e=this,n=new t(e.name,e.type),r,i,o,a,s;if(o=e.attributes){for(s=[],s.map={},r=0,i=o.length;r
"},postRender:function(){var e=this,t;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e.state.set("rendered",!0),e.settings.style&&e.$el.css(e.settings.style),e.settings.border&&(t=e.borderBox,e.$el.css({"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e.parent()||(e.keyboardNav=new i({root:e})),e},initLayoutRect:function(){var e=this,t=e._super();return e._layout.recalc(e),t},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;if(!n||n.w!=t.w||n.h!=t.h)return e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0},reflow:function(){var t;if(l.remove(this),this.visible()){for(e.repaintControls=[],e.repaintControls.map={},this.recalc(),t=e.repaintControls.length;t--;)e.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),e.repaintControls=[]}return this}})}),r(we,[g],function(e){function t(e){var t,n,r,i,o,a,s,l,c=Math.max;return t=e.documentElement,n=e.body,r=c(t.scrollWidth,n.scrollWidth),i=c(t.clientWidth,n.clientWidth),o=c(t.offsetWidth,n.offsetWidth),a=c(t.scrollHeight,n.scrollHeight),s=c(t.clientHeight,n.clientHeight),l=c(t.offsetHeight,n.offsetHeight),{width:r").css({position:"absolute",top:0,left:0,width:c.width,height:c.height,zIndex:2147483647,opacity:1e-4,cursor:m}).appendTo(s.body),e(s).on("mousemove touchmove",d).on("mouseup touchend",u),i.start(r)},d=function(e){return n(e),e.button!==l?u(e):(e.deltaX=e.screenX-f,e.deltaY=e.screenY-h,e.preventDefault(),void i.drag(e))},u=function(t){n(t),e(s).off("mousemove touchmove",d).off("mouseup touchend",u),a.remove(),i.stop&&i.stop(t)},this.destroy=function(){e(o()).off()},e(o()).on("mousedown touchstart",c)}}),r(Ne,[g,we],function(e,t){return{init:function(){var e=this;e.on("repaint",e.renderScroll)},renderScroll:function(){function n(){function t(t,a,s,l,c,u){var d,f,h,p,m,g,v,y,b;if(f=i.getEl("scroll"+t)){if(y=a.toLowerCase(),b=s.toLowerCase(),e(i.getEl("absend")).css(y,i.layoutRect()[l]-1),!c)return void e(f).css("display","none");e(f).css("display","block"),d=i.getEl("body"),h=i.getEl("scroll"+t+"t"),p=d["client"+s]-2*o,p-=n&&r?f["client"+u]:0,m=d["scroll"+s],g=p/m,v={},v[y]=d["offset"+a]+o,v[b]=p,e(f).css(v),v={},v[y]=d["scroll"+a]*g,v[b]=p*g,e(h).css(v)}}var n,r,a;a=i.getEl("body"),n=a.scrollWidth>a.clientWidth,r=a.scrollHeight>a.clientHeight,t("h","Left","Width","contentW",n,"Height"),t("v","Top","Height","contentH",r,"Width")}function r(){function n(n,r,a,s,l){var c,u=i._id+"-scroll"+n,d=i.classPrefix;e(i.getEl()).append('
'),i.draghelper=new t(u+"t",{start:function(){c=i.getEl("body")["scroll"+r],e("#"+u).addClass(d+"active")},drag:function(e){var t,u,d,f,h=i.layoutRect();u=h.contentW>h.innerW,d=h.contentH>h.innerH,f=i.getEl("body")["client"+a]-2*o,f-=u&&d?i.getEl("scroll"+n)["client"+l]:0,t=f/i.getEl("body")["scroll"+a],i.getEl("body")["scroll"+r]=c+e["delta"+s]/t},stop:function(){e("#"+u).removeClass(d+"active")}})}i.classes.add("scroll"),n("v","Top","Height","Y","Width"),n("h","Left","Width","X","Height")}var i=this,o=2;i.settings.autoScroll&&(i._hasScroll||(i._hasScroll=!0,r(),i.on("wheel",function(e){var t=i.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),e(i.getEl("body")).on("scroll",n)),n())}}}),r(Ee,[xe,Ne],function(e,t){return e.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[t],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),"undefined"==typeof n?n='
'+t.renderHtml(e)+"
":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'
'+(e._preBodyHtml||"")+n+"
"}})}),r(_e,[pe],function(e){function t(t,n,r){var i,o,a,s,l,c,u,d,f,h;return f=e.getViewPort(),o=e.getPos(n),a=o.x,s=o.y,t.state.get("fixed")&&"static"==e.getRuntimeStyle(document.body,"position")&&(a-=f.x,s-=f.y),i=t.getEl(),h=e.getSize(i),l=h.width,c=h.height,h=e.getSize(n),u=h.width,d=h.height,r=(r||"").split(""),"b"===r[0]&&(s+=d),"r"===r[1]&&(a+=u),"c"===r[0]&&(s+=Math.round(d/2)),"c"===r[1]&&(a+=Math.round(u/2)),"b"===r[3]&&(s-=c),"r"===r[4]&&(a-=l),"c"===r[3]&&(s-=Math.round(c/2)),"c"===r[4]&&(a-=Math.round(l/2)),{x:a,y:s,w:l,h:c}}return{testMoveRel:function(n,r){for(var i=e.getViewPort(),o=0;o0&&a.x+a.w0&&a.y+a.hi.x&&a.x+a.wi.y&&a.y+a.ht?(e=t-n,e<0?0:e):e}var i=this;if(i.settings.constrainToViewport){var o=e.getViewPort(window),a=i.layoutRect();t=r(t,o.w+o.x,a.w),n=r(n,o.h+o.y,a.h)}return i.state.get("rendered")?i.layoutRect({x:t,y:n}).repaint():(i.settings.x=t,i.settings.y=n),i.fire("move",{x:t,y:n}),i}}}),r(Se,[pe],function(e){return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,n){if(t<=1||n<=1){var r=e.getWindowSize();t=t<=1?t*r.w:t,n=n<=1?n*r.h:n}return this._layoutRect.autoResize=!1,this.layoutRect({minW:t,minH:n,w:t,h:n}).reflow()},resizeBy:function(e,t){var n=this,r=n.layoutRect();return n.resizeTo(r.w+e,r.h+t)}}}),r(ke,[Ee,_e,Se,pe,g,u],function(e,t,n,r,i,o){function a(e,t){for(;e;){if(e==t)return!0;e=e.parent()}}function s(e){for(var t=v.length;t--;){var n=v[t],r=n.getParentCtrl(e.target);if(n.settings.autohide){if(r&&(a(r,n)||n.parent()===r))continue;e=n.fire("autohide",{target:e.target}),e.isDefaultPrevented()||n.hide()}}}function l(){p||(p=function(e){2!=e.button&&s(e)},i(document).on("click touchstart",p))}function c(){m||(m=function(){var e;for(e=v.length;e--;)d(v[e])},i(window).on("scroll",m))}function u(){if(!g){var e=document.documentElement,t=e.clientWidth,n=e.clientHeight;g=function(){document.all&&t==e.clientWidth&&n==e.clientHeight||(t=e.clientWidth,n=e.clientHeight,C.hideAll())},i(window).on("resize",g)}}function d(e){function t(t,n){for(var r,i=0;in&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),t(!1,e._autoFixY-n)):(e._autoFixY=e.layoutRect().y,e._autoFixY
').appendTo(t.getContainerElm())),o.setTimeout(function(){n.addClass(r+"in"),i(t.getEl()).addClass(r+"in")}),b=!0),f(!0,t)}}),t.on("show",function(){t.parents().each(function(e){if(e.state.get("fixed"))return t.fixed(!0),!1})}),e.popover&&(t._preBodyHtml='
',t.classes.add("popover").add("bottom").add(t.isRtl()?"end":"start")),t.aria("label",e.ariaLabel),t.aria("labelledby",t._id),t.aria("describedby",t.describedBy||t._id+"-none")},fixed:function(e){var t=this;if(t.state.get("fixed")!=e){if(t.state.get("rendered")){var n=r.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.classes.toggle("fixed",e),t.state.set("fixed",e)}return t},show:function(){var e=this,t,n=e._super();for(t=v.length;t--&&v[t]!==e;);return t===-1&&v.push(e),n},hide:function(){return h(this),f(!1,this),this._super()},hideAll:function(){C.hideAll()},close:function(){var e=this;return e.fire("close").isDefaultPrevented()||(e.remove(),f(!1,e)),e},remove:function(){h(this),this._super()},postRender:function(){var e=this;return e.settings.bodyRole&&this.getEl("body").setAttribute("role",e.settings.bodyRole),e._super()}});return C.hideAll=function(){for(var e=v.length;e--;){var t=v[e];t&&t.settings.autohide&&(t.hide(),v.splice(e,1))}},C}),r(Te,[ke,Ee,pe,g,we,me,d,u],function(e,t,n,r,i,o,a,s){function l(e){var t="width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0",n=r("meta[name=viewport]")[0],i;a.overrideViewPort!==!1&&(n||(n=document.createElement("meta"),n.setAttribute("name","viewport"),document.getElementsByTagName("head")[0].appendChild(n)),i=n.getAttribute("content"),i&&"undefined"!=typeof f&&(f=i),n.setAttribute("content",e?t:f))}function c(e){for(var t=0;tr.w&&(o=r.x-Math.max(0,i/2),e.layoutRect({w:i,x:o}),a=!0)),t&&(t.layoutRect({w:e.layoutRect().innerW}).recalc(),i=t.layoutRect().minW+r.deltaW,i>r.w&&(o=r.x-Math.max(0,i-r.w),e.layoutRect({w:i,x:o}),a=!0)),a&&e.recalc()},initLayoutRect:function(){var e=this,t=e._super(),r=0,i;if(e.settings.title&&!e._fullscreen){i=e.getEl("head");var o=n.getSize(i);t.headerW=o.width,t.headerH=o.height,r+=t.headerH}e.statusbar&&(r+=e.statusbar.layoutRect().h),t.deltaH+=r,t.minH+=r,t.h+=r;var a=n.getWindowSize();return t.x=e.settings.x||Math.max(0,a.w/2-t.w/2),t.y=e.settings.y||Math.max(0,a.h/2-t.h/2),t},renderHtml:function(){var e=this,t=e._layout,n=e._id,r=e.classPrefix,i=e.settings,o="",a="",s=i.html;return e.preRender(),t.preRender(e),i.title&&(o='
'+e.encode(i.title)+'
'),i.url&&(s=''),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'
'+o+'
'+s+"
"+a+"
"},fullscreen:function(e){var t=this,i=document.documentElement,a,l=t.classPrefix,c;if(e!=t._fullscreen)if(r(window).on("resize",function(){var e;if(t._fullscreen)if(a)t._timer||(t._timer=s.setTimeout(function(){var e=n.getWindowSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(a=!0)}}),c=t.layoutRect(),t._fullscreen=e,e){t._initial={x:c.x,y:c.y,w:c.w,h:c.h},t.borderBox=o.parseBox("0"),t.getEl("head").style.display="none",c.deltaH-=c.headerH+2,r([i,document.body]).addClass(l+"fullscreen"),t.classes.add("fullscreen");var u=n.getWindowSize();t.moveTo(0,0).resizeTo(u.w,u.h)}else t.borderBox=o.parseBox(t.settings.border),t.getEl("head").style.display="",c.deltaH+=c.headerH,r([i,document.body]).removeClass(l+"fullscreen"),t.classes.remove("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t;setTimeout(function(){e.classes.add("in"),e.fire("open")},0),e._super(),e.statusbar&&e.statusbar.postRender(),e.focus(),this.dragHelper=new i(e._id+"-dragh",{start:function(){t={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(n){e.moveTo(t.x+n.deltaX,t.y+n.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()}),d.push(e),l(!0)},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this,t;for(e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove(),t=d.length;t--;)d[t]===e&&d.splice(t,1);l(d.length>0),c(e.classPrefix)},getContentWindow:function(){var e=this.getEl().getElementsByTagName("iframe")[0];return e?e.contentWindow:null}});return u(),h}),r(Re,[Te],function(e){var t=e.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){function r(e,t,n){return{type:"button",text:e,subtype:n?"primary":"",onClick:function(e){e.control.parents()[1].close(),o(t)}}}var i,o=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:i=[r("Ok",!0,!0),r("Cancel",!1)];break;case t.YES_NO:case t.YES_NO_CANCEL:i=[r("Yes",1,!0),r("No",0)],n.buttons==t.YES_NO_CANCEL&&i.push(r("Cancel",-1));break;default:i=[r("Ok",!0,!0)]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:i,title:n.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:n.onClose,onCancel:function(){o(!1)}}).renderTo(document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(Ae,[Te,Re],function(e,t){return function(n){function r(){if(s.length)return s[s.length-1]}function i(e){n.fire("OpenWindow",{win:e})}function o(e){n.fire("CloseWindow",{win:e})}var a=this,s=[];a.windows=s,n.on("remove",function(){for(var e=s.length;e--;)s[e].close()}),a.open=function(t,r){var a;return n.editorManager.setActive(n),t.title=t.title||" ",t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.bodyType||"form",items:t.body,data:t.data,callbacks:t.commands}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){a.find("form")[0].submit()}},{text:"Cancel",onclick:function(){a.close()}}]),a=new e(t),s.push(a),a.on("close",function(){for(var e=s.length;e--;)s[e]===a&&s.splice(e,1);s.length||n.focus(),o(a)}),t.data&&a.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),a.features=t||{},a.params=r||{},1===s.length&&n.nodeChanged(),a=a.renderTo().reflow(),i(a),a},a.alert=function(e,r,a){var s;s=t.alert(e,function(){r?r.call(a||this):n.focus()}),s.on("close",function(){o(s)}),i(s)},a.confirm=function(e,n,r){var a;a=t.confirm(e,function(e){n.call(r||this,e)}),a.on("close",function(){o(a)}),i(a)},a.close=function(){r()&&r().close()},a.getParams=function(){return r()?r().params:null},a.setParams=function(e){r()&&(r().params=e)},a.getWindows=function(){return s}}}),r(Be,[ye,_e],function(e,t){return e.extend({Mixins:[t],Defaults:{classes:"widget tooltip tooltip-n"},renderHtml:function(){var e=this,t=e.classPrefix;return'"},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl().lastChild.innerHTML=e.encode(t.value)}),e._super()},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(De,[ye,Be],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&(t.on("mouseenter",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","bc-tl","bc-tr"]);r.classes.toggle("tooltip-n","bc-tc"==i),r.classes.toggle("tooltip-nw","bc-tl"==i),r.classes.toggle("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.on("mouseleave mousedown click",function(){t.tooltip().hide()})),t.aria("label",e.ariaLabel||e.tooltip)},tooltip:function(){return n||(n=new t({type:"tooltip"}),n.renderTo()),n},postRender:function(){var e=this,t=e.settings;e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},bindStates:function(){function e(e){n.aria("disabled",e),n.classes.toggle("disabled",e)}function t(e){n.aria("pressed",e),n.classes.toggle("active",e)}var n=this;return n.state.on("change:disabled",function(t){e(t.value)}),n.state.on("change:active",function(e){t(e.value)}),n.state.get("disabled")&&e(!0),n.state.get("active")&&t(!0),n._super()},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(Le,[De],function(e){return e.extend({Defaults:{value:0},init:function(e){var t=this;t._super(e),t.classes.add("progress"),t.settings.filter||(t.settings.filter=function(e){return Math.round(e)})},renderHtml:function(){var e=this,t=e._id,n=this.classPrefix;return'
0%
'},postRender:function(){var e=this;return e._super(),e.value(e.settings.value),e},bindStates:function(){function e(e){e=t.settings.filter(e),t.getEl().lastChild.innerHTML=e+"%",t.getEl().firstChild.firstChild.style.width=e+"%"}var t=this;return t.state.on("change:value",function(t){e(t.value)}),e(t.state.get("value")),t._super()}})}),r(Me,[ye,_e,Le,u],function(e,t,n,r){return e.extend({Mixins:[t],Defaults:{classes:"widget notification"},init:function(e){var t=this;t._super(e),e.text&&t.text(e.text),e.icon&&(t.icon=e.icon),e.color&&(t.color=e.color),e.type&&t.classes.add("notification-"+e.type),e.timeout&&(e.timeout<0||e.timeout>0)&&!e.closeButton?t.closeButton=!1:(t.classes.add("has-close"),t.closeButton=!0),e.progressBar&&(t.progressBar=new n),t.on("click",function(e){e.target.className.indexOf(t.classPrefix+"close")!=-1&&t.close()})},renderHtml:function(){var e=this,t=e.classPrefix,n="",r="",i="",o="";return e.icon&&(n=''),e.color&&(o=' style="background-color: '+e.color+'"'),e.closeButton&&(r=''),e.progressBar&&(i=e.progressBar.renderHtml()),'"},postRender:function(){var e=this;return r.setTimeout(function(){e.$el.addClass(e.classPrefix+"in")}),e._super()},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl().childNodes[1].innerHTML=t.value}),e.progressBar&&e.progressBar.bindStates(),e._super()},close:function(){var e=this;return e.fire("close").isDefaultPrevented()||e.remove(),e},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(Pe,[Me,u],function(e,t){return function(n){function r(){if(l.length)return l[l.length-1]}function i(){t.requestAnimationFrame(function(){o(),a()})}function o(){for(var e=0;e0){var e=l.slice(0,1)[0],t=n.inline?n.getElement():n.getContentAreaContainer();if(e.moveRel(t,"tc-tc"),l.length>1)for(var r=1;r0&&(r.timer=setTimeout(function(){r.close()},t.timeout)),r.on("close",function(){var e=l.length;for(r.timer&&n.getWin().clearTimeout(r.timer);e--;)l[e]===r&&l.splice(e,1);a()}),r.renderTo(),a(),r},s.close=function(){r()&&r().close()},s.getNotifications=function(){return l},n.on("SkinLoaded",function(){var e=n.settings.service_message;e&&n.notificationManager.open({text:e,type:"warning",timeout:0,icon:""})})}}),r(Oe,[w],function(e){function t(t,n,r){for(var i=[];n&&n!=t;n=n.parentNode)i.push(e.nodeIndex(n,r));return i}function n(e,t){var n,r,i;for(r=e,n=t.length-1;n>=0;n--){if(i=r.childNodes,t[n]>i.length-1)return null;r=i[t[n]]}return r}return{create:t,resolve:n}}),r(He,[I,T,y,Oe,A,C,d,m,u,k,$,ne],function(e,t,n,r,i,o,a,s,l,c,u,d){return function(f){function h(e,t){try{f.getDoc().execCommand(e,!1,t)}catch(e){}}function p(){var e=f.getDoc().documentMode;return e?e:6}function m(e){return e.isDefaultPrevented()}function g(e){var t,n;e.dataTransfer&&(f.selection.isCollapsed()&&"IMG"==e.target.tagName&&re.select(e.target),t=f.selection.getContent(),t.length>0&&(n=ue+escape(f.id)+","+escape(t),e.dataTransfer.setData(de,n)))}function v(e){var t;return e.dataTransfer&&(t=e.dataTransfer.getData(de),t&&t.indexOf(ue)>=0)?(t=t.substr(ue.length).split(","),{id:unescape(t[0]),html:unescape(t[1])}):null}function y(e){f.queryCommandSupported("mceInsertClipboardContent")?f.execCommand("mceInsertClipboardContent",!1,{content:e}):f.execCommand("mceInsertContent",!1,e)}function b(){function i(e){var t=C.schema.getBlockElements(),n=f.getBody();if("BR"!=e.nodeName)return!1;for(;e!=n&&!t[e.nodeName];e=e.parentNode)if(e.nextSibling)return!1;return!0}function o(e,t){var n;for(n=e.nextSibling;n&&n!=t;n=n.nextSibling)if((3!=n.nodeType||0!==Z.trim(n.data).length)&&n!==t)return!1;return n===t}function a(e,t,r){var o,a,s;for(s=C.schema.getNonEmptyElements(),o=new n(r||e,e);a=o[t?"next":"prev"]();){if(s[a.nodeName]&&!i(a))return a;if(3==a.nodeType&&a.data.length>0)return a}}function c(e){var n,r,i,o,s;if(!e.collapsed&&(n=C.getParent(t.getNode(e.startContainer,e.startOffset),C.isBlock),r=C.getParent(t.getNode(e.endContainer,e.endOffset),C.isBlock),s=f.schema.getTextBlockElements(),n!=r&&s[n.nodeName]&&s[r.nodeName]&&"false"!==C.getContentEditable(n)&&"false"!==C.getContentEditable(r)))return e.deleteContents(), +i=a(n,!1),o=a(r,!0),C.isEmpty(r)||Z(n).append(r.childNodes),Z(r).remove(),i?1==i.nodeType?"BR"==i.nodeName?(e.setStartBefore(i),e.setEndBefore(i)):(e.setStartAfter(i),e.setEndAfter(i)):(e.setStart(i,i.data.length),e.setEnd(i,i.data.length)):o&&(1==o.nodeType?(e.setStartBefore(o),e.setEndBefore(o)):(e.setStart(o,0),e.setEnd(o,0))),x.setRng(e),!0}function u(e,n){var r,i,s,l,c,u;if(!e.collapsed)return e;if(c=e.startContainer,u=e.startOffset,3==c.nodeType)if(n){if(u0)return e;if(r=t.getNode(e.startContainer,e.startOffset),s=C.getParent(r,C.isBlock),i=a(f.getBody(),n,r),l=C.getParent(i,C.isBlock),!r||!i)return e;if(l&&s!=l)if(n){if(!o(s,l))return e;1==r.nodeType?"BR"==r.nodeName?e.setStartBefore(r):e.setStartAfter(r):e.setStart(r,r.data.length),1==i.nodeType?e.setEnd(i,0):e.setEndBefore(i)}else{if(!o(l,s))return e;1==i.nodeType?"BR"==i.nodeName?e.setStartBefore(i):e.setStartAfter(i):e.setStart(i,i.data.length),1==r.nodeType?e.setEnd(r,0):e.setEndBefore(r)}return e}function d(e){var t=x.getRng();if(t=u(t,e),c(t))return!0}function h(e,t){function n(e,n){return m=Z(n).parents().filter(function(e,t){return!!f.schema.getTextInlineElements()[t.nodeName]}),l=e.cloneNode(!1),m=s.map(m,function(e){return e=e.cloneNode(!1),l.hasChildNodes()?(e.appendChild(l.firstChild),l.appendChild(e)):l.appendChild(e),l.appendChild(e),e}),m.length?(p=C.create("br"),m[0].appendChild(p),C.replace(l,e),t.setStartBefore(p),t.setEndBefore(p),f.selection.setRng(t),p):null}function i(e){return e&&f.schema.getTextBlockElements()[e.tagName]}var o,a,l,c,u,d,h,p,m;if(t.collapsed&&(d=t.startContainer,h=t.startOffset,a=C.getParent(d,C.isBlock),i(a)))if(1==d.nodeType){if(d=d.childNodes[h],d&&"BR"!=d.tagName)return;if(u=e?a.nextSibling:a.previousSibling,C.isEmpty(a)&&i(u)&&C.isEmpty(u)&&n(a,d))return C.remove(u),!0}else if(3==d.nodeType){if(o=r.create(a,d),c=a.cloneNode(!0),d=r.resolve(c,o),e){if(h>=d.data.length)return;d.deleteData(h,1)}else{if(h<=0)return;d.deleteData(h-1,1)}if(C.isEmpty(c))return n(a,d)}}function p(e){var t,n,r;d(e)||(s.each(f.getBody().getElementsByTagName("*"),function(e){"SPAN"==e.tagName&&e.setAttribute("mce-data-marked",1),!e.hasAttribute("data-mce-style")&&e.hasAttribute("style")&&f.dom.setAttrib(e,"style",f.dom.getAttrib(e,"style"))}),t=new w(function(){}),t.observe(f.getDoc(),{childList:!0,attributes:!0,subtree:!0,attributeFilter:["style"]}),f.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null),n=f.selection.getRng(),r=n.startContainer.parentNode,s.each(t.takeRecords(),function(e){if(C.isChildOf(e.target,f.getBody())){if("style"==e.attributeName){var t=e.target.getAttribute("data-mce-style");t?e.target.setAttribute("style",t):e.target.removeAttribute("style")}s.each(e.addedNodes,function(e){if("SPAN"==e.nodeName&&!e.getAttribute("mce-data-marked")){var t,i;e==r&&(t=n.startOffset,i=e.firstChild),C.remove(e,!0),i&&(n.setStart(i,t),n.setEnd(i,t),f.selection.setRng(n))}})}}),t.disconnect(),s.each(f.dom.select("span[mce-data-marked]"),function(e){e.removeAttribute("mce-data-marked")}))}var b=f.getDoc(),C=f.dom,x=f.selection,w=window.MutationObserver,N,E;w||(N=!0,w=function(){function e(e){var t=e.relatedNode||e.target;n.push({target:t,addedNodes:[t]})}function t(e){var t=e.relatedNode||e.target;n.push({target:t,attributeName:e.attrName})}var n=[],r;this.observe=function(n){r=n,r.addEventListener("DOMSubtreeModified",e,!1),r.addEventListener("DOMNodeInsertedIntoDocument",e,!1),r.addEventListener("DOMNodeInserted",e,!1),r.addEventListener("DOMAttrModified",t,!1)},this.disconnect=function(){r.removeEventListener("DOMSubtreeModified",e,!1),r.removeEventListener("DOMNodeInsertedIntoDocument",e,!1),r.removeEventListener("DOMNodeInserted",e,!1),r.removeEventListener("DOMAttrModified",t,!1)},this.takeRecords=function(){return n}}),f.on("keydown",function(e){var t=e.keyCode==te,n=e.ctrlKey||e.metaKey;if(!m(e)&&(t||e.keyCode==ee)){var r=f.selection.getRng(),i=r.startContainer,o=r.startOffset;if(t&&e.shiftKey)return;if(h(t,r))return void e.preventDefault();if(!n&&r.collapsed&&3==i.nodeType&&(t?o0))return;e.preventDefault(),n&&f.selection.getSel().modify("extend",t?"forward":"backward",e.metaKey?"lineboundary":"word"),p(t)}}),f.on("keypress",function(t){if(!m(t)&&!x.isCollapsed()&&t.charCode>31&&!e.metaKeyPressed(t)){var n,r,i,o,a,s;n=f.selection.getRng(),s=String.fromCharCode(t.charCode),t.preventDefault(),r=Z(n.startContainer).parents().filter(function(e,t){return!!f.schema.getTextInlineElements()[t.nodeName]}),p(!0),r=r.filter(function(e,t){return!Z.contains(f.getBody(),t)}),r.length?(i=C.createFragment(),r.each(function(e,t){t=t.cloneNode(!1),i.hasChildNodes()?(t.appendChild(i.firstChild),i.appendChild(t)):(a=t,i.appendChild(t)),i.appendChild(t)}),a.appendChild(f.getDoc().createTextNode(s)),o=C.getParent(n.startContainer,C.isBlock),C.isEmpty(o)?Z(o).empty().append(i):n.insertNode(i),n.setStart(a.firstChild,1),n.setEnd(a.firstChild,1),f.selection.setRng(n)):f.selection.setContent(s)}}),f.addCommand("Delete",function(){p()}),f.addCommand("ForwardDelete",function(){p(!0)}),N||(f.on("dragstart",function(e){E=x.getRng(),g(e)}),f.on("drop",function(e){if(!m(e)){var n=v(e);n&&(e.preventDefault(),l.setEditorTimeout(f,function(){var r=t.getCaretRangeFromPoint(e.x,e.y,b);E&&(x.setRng(E),E=null),p(),x.setRng(r),y(n.html)}))}}),f.on("cut",function(e){m(e)||!e.clipboardData||f.selection.isCollapsed()||(e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/html",f.selection.getContent()),e.clipboardData.setData("text/plain",f.selection.getContent({format:"text"})),l.setEditorTimeout(f,function(){p(!0)}))}))}function C(){function e(e){var t=ne.create("body"),n=e.cloneContents();return t.appendChild(n),re.serializer.serialize(t,{format:"html"})}function n(n){if(!n.setStart){if(n.item)return!1;var r=n.duplicate();return r.moveToElementText(f.getBody()),t.compareRanges(n,r)}var i=e(n),o=ne.createRng();o.selectNode(f.getBody());var a=e(o);return i===a}f.on("keydown",function(e){var t=e.keyCode,r,i;if(!m(e)&&(t==te||t==ee)){if(r=f.selection.isCollapsed(),i=f.getBody(),r&&!ne.isEmpty(i))return;if(!r&&!n(f.selection.getRng()))return;e.preventDefault(),f.setContent(""),i.firstChild&&ne.isBlock(i.firstChild)?f.selection.setCursorLocation(i.firstChild,0):f.selection.setCursorLocation(i,0),f.nodeChanged()}})}function x(){f.shortcuts.add("meta+a",null,"SelectAll")}function w(){f.settings.content_editable||ne.bind(f.getDoc(),"mousedown mouseup",function(e){var t;if(e.target==f.getDoc().documentElement)if(t=re.getRng(),f.getBody().focus(),"mousedown"==e.type){if(c.isCaretContainer(t.startContainer))return;re.placeCaretAt(e.clientX,e.clientY)}else re.setRng(t)})}function N(){f.on("keydown",function(e){if(!m(e)&&e.keyCode===ee){if(!f.getBody().getElementsByTagName("hr").length)return;if(re.isCollapsed()&&0===re.getRng(!0).startOffset){var t=re.getNode(),n=t.previousSibling;if("HR"==t.nodeName)return ne.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(ne.remove(n),e.preventDefault())}}})}function E(){window.Range.prototype.getClientRects||f.on("mousedown",function(e){if(!m(e)&&"HTML"===e.target.nodeName){var t=f.getBody();t.blur(),l.setEditorTimeout(f,function(){t.focus()})}})}function _(){f.on("click",function(e){var t=e.target;/^(IMG|HR)$/.test(t.nodeName)&&"false"!==ne.getContentEditableParent(t)&&(e.preventDefault(),re.getSel().setBaseAndExtent(t,0,t,1),f.nodeChanged()),"A"==t.nodeName&&ne.hasClass(t,"mce-item-anchor")&&(e.preventDefault(),re.select(t))})}function S(){function e(){var e=ne.getAttribs(re.getStart().cloneNode(!1));return function(){var t=re.getStart();t!==f.getBody()&&(ne.setAttrib(t,"style",null),Q(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!re.isCollapsed()&&ne.getParent(re.getStart(),ne.isBlock)!=ne.getParent(re.getEnd(),ne.isBlock)}f.on("keypress",function(n){var r;if(!m(n)&&(8==n.keyCode||46==n.keyCode)&&t())return r=e(),f.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1}),ne.bind(f.getDoc(),"cut",function(n){var r;!m(n)&&t()&&(r=e(),l.setEditorTimeout(f,function(){r()}))})}function k(){document.body.setAttribute("role","application")}function T(){f.on("keydown",function(e){if(!m(e)&&e.keyCode===ee&&re.isCollapsed()&&0===re.getRng(!0).startOffset){var t=re.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function R(){p()>7||(h("RespectVisibilityInDesign",!0),f.contentStyles.push(".mceHideBrInPre pre br {display: none}"),ne.addClass(f.getBody(),"mceHideBrInPre"),oe.addNodeFilter("pre",function(e){for(var t=e.length,n,r,o,a;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)o=n[r],a=o.prev,a&&3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new i("#text",3),o,!0).value="\n"}),ae.addNodeFilter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function A(){ne.bind(f.getBody(),"mouseup",function(){var e,t=re.getNode();"IMG"==t.nodeName&&((e=ne.getStyle(t,"width"))&&(ne.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),ne.setStyle(t,"width","")),(e=ne.getStyle(t,"height"))&&(ne.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),ne.setStyle(t,"height","")))})}function B(){f.on("keydown",function(t){var n,r,i,o,a;if(!m(t)&&t.keyCode==e.BACKSPACE&&(n=re.getRng(),r=n.startContainer,i=n.startOffset,o=ne.getRoot(),a=r,n.collapsed&&0===i)){for(;a&&a.parentNode&&a.parentNode.firstChild==a&&a.parentNode!=o;)a=a.parentNode;"BLOCKQUOTE"===a.tagName&&(f.formatter.toggle("blockquote",null,a),n=ne.createRng(),n.setStart(r,0),n.setEnd(r,0),re.setRng(n))}})}function D(){function e(){K(),h("StyleWithCSS",!1),h("enableInlineTableEditing",!1),ie.object_resizing||h("enableObjectResizing",!1)}ie.readonly||f.on("BeforeExecCommand MouseDown",e)}function L(){function e(){Q(ne.select("a"),function(e){var t=e.parentNode,n=ne.getRoot();if(t.lastChild===e){for(;t&&!ne.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}ne.add(t,"br",{"data-mce-bogus":1})}})}f.on("SetContent ExecCommand",function(t){"setcontent"!=t.type&&"mceInsertLink"!==t.command||e()})}function M(){ie.forced_root_block&&f.on("init",function(){h("DefaultParagraphSeparator",ie.forced_root_block)})}function P(){f.on("keydown",function(e){var t;m(e)||e.keyCode!=ee||(t=f.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),f.undoManager.beforeChange(),ne.remove(t.item(0)),f.undoManager.add()))})}function O(){var e;p()>=10&&(e="",Q("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){e+=(n>0?",":"")+t+":empty"}),f.contentStyles.push(e+"{padding-right: 1px !important}"))}function H(){p()<9&&(oe.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),ae.addNodeFilter("noscript",function(e){for(var t=e.length,n,r,a;t--;)n=e[t],r=e[t].firstChild,r?r.value=o.decode(r.value):(a=n.attributes.map["data-mce-innertext"],a&&(n.attr("data-mce-innertext",null),r=new i("#text",3),r.value=a,r.raw=!0,n.append(r)))}))}function I(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(e){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.item&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),ne.unbind(r,"mouseup",n),ne.unbind(r,"mousemove",t),a=o=0}var r=ne.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,ne.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(ne.bind(r,"mouseup",n),ne.bind(r,"mousemove",t),ne.getRoot().focus(),a.select())}})}function F(){f.on("keyup focusin mouseup",function(t){65==t.keyCode&&e.metaKeyPressed(t)||re.normalize()},!0)}function z(){f.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function U(){f.inline||f.on("keydown",function(){document.activeElement==document.body&&f.getWin().focus()})}function W(){f.inline||(f.contentStyles.push("body {min-height: 150px}"),f.on("click",function(e){var t;if("HTML"==e.target.nodeName){if(a.ie>11)return void f.getBody().focus();t=f.selection.getRng(),f.getBody().focus(),f.selection.setRng(t),f.selection.normalize(),f.nodeChanged()}}))}function V(){a.mac&&f.on("keydown",function(t){!e.metaKeyPressed(t)||t.shiftKey||37!=t.keyCode&&39!=t.keyCode||(t.preventDefault(),f.selection.getSel().modify("move",37==t.keyCode?"backward":"forward","lineboundary"))})}function $(){h("AutoUrlDetect",!1)}function q(){f.on("click",function(e){var t=e.target;do if("A"===t.tagName)return void e.preventDefault();while(t=t.parentNode)}),f.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}function j(){f.on("init",function(){f.dom.bind(f.getBody(),"submit",function(e){e.preventDefault()})})}function Y(){oe.addNodeFilter("br",function(e){for(var t=e.length;t--;)"Apple-interchange-newline"==e[t].attr("class")&&e[t].remove()})}function X(){f.on("dragstart",function(e){g(e)}),f.on("drop",function(e){if(!m(e)){var n=v(e);if(n&&n.id!=f.id){e.preventDefault();var r=t.getCaretRangeFromPoint(e.x,e.y,f.getDoc());re.setRng(r),y(n.html)}}})}function K(){var e,t;G()&&(e=f.getBody(),t=e.parentNode,t.removeChild(e),t.appendChild(e),e.focus())}function G(){var e;return se?(e=f.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}function J(){function t(e){var t=new d(e.getBody()),n=e.selection.getRng(),r=u.fromRangeStart(n),i=u.fromRangeEnd(n);return!e.selection.isCollapsed()&&!t.prev(r)&&!t.next(i)}f.on("keypress",function(n){!m(n)&&!re.isCollapsed()&&n.charCode>31&&!e.metaKeyPressed(n)&&t(f)&&(n.preventDefault(),f.setContent(String.fromCharCode(n.charCode)),f.selection.select(f.getBody(),!0),f.selection.collapse(!1),f.nodeChanged())}),f.on("keydown",function(e){var n=e.keyCode;m(e)||n!=te&&n!=ee||t(f)&&(e.preventDefault(),f.setContent(""),f.nodeChanged())})}var Q=s.each,Z=f.$,ee=e.BACKSPACE,te=e.DELETE,ne=f.dom,re=f.selection,ie=f.settings,oe=f.parser,ae=f.serializer,se=a.gecko,le=a.ie,ce=a.webkit,ue="data:text/mce-internal,",de=le?"Text":"URL";return B(),C(),a.windowsPhone||F(),ce&&(J(),b(),w(),_(),M(),j(),T(),Y(),a.iOS?(U(),W(),q()):x()),le&&a.ie<11&&(N(),k(),R(),A(),P(),O(),H(),I()),a.ie>=11&&(W(),T()),a.ie&&(x(),$(),X()),se&&(J(),N(),E(),S(),D(),L(),z(),V(),T()),{refreshContentEditable:K,isHidden:G}}}),r(Ie,[ue,w,m],function(e,t,n){function r(e,t){return"selectionchange"==t?e.getDoc():!e.inline&&/^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(t)?e.getDoc().documentElement:e.settings.event_root?(e.eventRoot||(e.eventRoot=o.select(e.settings.event_root)[0]),e.eventRoot):e.getBody()}function i(e,t){function n(e){return!e.hidden&&!e.readonly}var i=r(e,t),s;if(e.delegates||(e.delegates={}),!e.delegates[t])if(e.settings.event_root){if(a||(a={},e.editorManager.on("removeEditor",function(){var t;if(!e.editorManager.activeEditor&&a){for(t in a)e.dom.unbind(r(e,t));a=null}})),a[t])return;s=function(r){for(var i=r.target,a=e.editorManager.editors,s=a.length;s--;){var l=a[s].getBody();(l===i||o.isChildOf(i,l))&&n(a[s])&&a[s].fire(t,r)}},a[t]=s,o.bind(i,t,s)}else s=function(r){n(e)&&e.fire(t,r)},o.bind(i,t,s),e.delegates[t]=s}var o=t.DOM,a,s={bindPendingEventDelegates:function(){var e=this;n.each(e._pendingNativeEvents,function(t){i(e,t)})},toggleNativeEvent:function(e,t){var n=this;"focus"!=e&&"blur"!=e&&(t?n.initialized?i(n,e):n._pendingNativeEvents?n._pendingNativeEvents.push(e):n._pendingNativeEvents=[e]:n.initialized&&(n.dom.unbind(r(n,e),e,n.delegates[e]),delete n.delegates[e]))},unbindAllNativeEvents:function(){var e=this,t;if(e.delegates){for(t in e.delegates)e.dom.unbind(r(e,t),t,e.delegates[t]);delete e.delegates}e.inline||(e.getBody().onload=null,e.dom.unbind(e.getWin()),e.dom.unbind(e.getDoc())),e.dom.unbind(e.getBody()),e.dom.unbind(e.getContainer())}};return s=n.extend({},e,s)}),r(Fe,[],function(){function e(e,t,n){try{e.getDoc().execCommand(t,!1,n)}catch(e){}}function t(e){var t,n;return t=e.getBody(),n=function(t){e.dom.getParents(t.target,"a").length>0&&t.preventDefault()},e.dom.bind(t,"click",n),{unbind:function(){e.dom.unbind(t,"click",n)}}}function n(n,r){n._clickBlocker&&(n._clickBlocker.unbind(),n._clickBlocker=null),r?(n._clickBlocker=t(n),n.selection.controlSelection.hideResizeRect(),n.readonly=!0,n.getBody().contentEditable=!1):(n.readonly=!1,n.getBody().contentEditable=!0,e(n,"StyleWithCSS",!1),e(n,"enableInlineTableEditing",!1),e(n,"enableObjectResizing",!1),n.focus(),n.nodeChanged())}function r(e,t){var r=e.readonly?"readonly":"design";t!=r&&(e.initialized?n(e,"readonly"==t):e.on("init",function(){n(e,"readonly"==t)}),e.fire("SwitchMode",{mode:t}))}return{setMode:r}}),r(ze,[m,d],function(e,t){var n=e.each,r=e.explode,i={f9:120,f10:121,f11:122},o=e.makeMap("alt,ctrl,shift,meta,access");return function(a){function s(e){var a,s,l={};n(r(e,"+"),function(e){e in o?l[e]=!0:/^[0-9]{2,}$/.test(e)?l.keyCode=parseInt(e,10):(l.charCode=e.charCodeAt(0),l.keyCode=i[e]||e.toUpperCase().charCodeAt(0))}),a=[l.keyCode];for(s in o)l[s]?a.push(s):l[s]=!1;return l.id=a.join(","),l.access&&(l.alt=!0,t.mac?l.ctrl=!0:l.shift=!0),l.meta&&(t.mac?l.meta=!0:(l.ctrl=!0,l.meta=!1)),l}function l(t,n,i,o){var l;return l=e.map(r(t,">"),s),l[l.length-1]=e.extend(l[l.length-1],{func:i,scope:o||a}),e.extend(l[0],{desc:a.translate(n),subpatterns:l.slice(1)})}function c(e){return e.altKey||e.ctrlKey||e.metaKey}function u(e){return e.keyCode>=112&&e.keyCode<=123}function d(e,t){return!!t&&(t.ctrl==e.ctrlKey&&t.meta==e.metaKey&&(t.alt==e.altKey&&t.shift==e.shiftKey&&(!!(e.keyCode==t.keyCode||e.charCode&&e.charCode==t.charCode)&&(e.preventDefault(),!0))))}function f(e){return e.func?e.func.call(e.scope):null}var h=this,p={},m=[];a.on("keyup keypress keydown",function(e){!c(e)&&!u(e)||e.isDefaultPrevented()||(n(p,function(t){if(d(e,t))return m=t.subpatterns.slice(0),"keydown"==e.type&&f(t),!0}),d(e,m[0])&&(1===m.length&&"keydown"==e.type&&f(m[0]),m.shift()))}),h.add=function(t,i,o,s){var c;return c=o,"string"==typeof o?o=function(){a.execCommand(c,!1,null)}:e.isArray(c)&&(o=function(){a.execCommand(c[0],c[1],c[2])}),n(r(e.trim(t.toLowerCase())),function(e){var t=l(e,i,o,s);p[t.id]=t}),!0},h.remove=function(e){var t=l(e);return!!p[t.id]&&(delete p[t.id],!0)}}}),r(Ue,[c,m,z],function(e,t,n){return function(r,i){function o(e){var t,n;return n={"image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/png":"png"},t=n[e.blob().type.toLowerCase()]||"dat",e.id()+"."+t}function a(e,t){return e?e.replace(/\/$/,"")+"/"+t.replace(/^\//,""):t}function s(e){return{id:e.id,blob:e.blob,base64:e.base64,filename:n.constant(o(e))}}function l(e,t,n,r){var s,l;s=new XMLHttpRequest,s.open("POST",i.url),s.withCredentials=i.credentials,s.upload.onprogress=function(e){r(e.loaded/e.total*100)},s.onerror=function(){n("Image upload failed due to a XHR Transport error. Code: "+s.status)},s.onload=function(){var e;return 200!=s.status?void n("HTTP Error: "+s.status):(e=JSON.parse(s.responseText),e&&"string"==typeof e.location?void t(a(i.basePath,e.location)):void n("Invalid JSON: "+s.responseText))},l=new FormData,l.append("file",e.blob(),o(e)),s.send(l)}function c(){return new e(function(e){e([])})}function u(e,t){return{url:t,blobInfo:e,status:!0}}function d(e,t){return{url:"",blobInfo:e,status:!1,error:t}}function f(e,n){t.each(y[e],function(e){e(n)}),delete y[e]}function h(t,n,i){return r.markPending(t.blobUri()),new e(function(e){var o,a,l=function(){};try{var c=function(){o&&(o.close(),a=l)},h=function(n){c(),r.markUploaded(t.blobUri(),n),f(t.blobUri(),u(t,n)),e(u(t,n))},p=function(){c(),r.removeFailed(t.blobUri()),f(t.blobUri(),d(t,p)),e(d(t,p))};a=function(e){e<0||e>100||(o||(o=i()),o.progressBar.value(e))},n(s(t),h,p,a)}catch(n){e(d(t,n.message))}})}function p(e){return e===l}function m(t){var n=t.blobUri();return new e(function(e){y[n]=y[n]||[],y[n].push(e)})}function g(n,o){return n=t.grep(n,function(e){return!r.isUploaded(e.blobUri())}),e.all(t.map(n,function(e){return r.isPending(e.blobUri())?m(e):h(e,i.handler,o)}))}function v(e,t){return!i.url&&p(i.handler)?c():g(e,t)}var y={};return i=t.extend({credentials:!1,handler:l},i),{upload:v}}}),r(We,[c],function(e){function t(t){return new e(function(e){var n=new XMLHttpRequest;n.open("GET",t,!0),n.responseType="blob",n.onload=function(){200==this.status&&e(this.response)},n.send()})}function n(e){var t,n;return e=decodeURIComponent(e).split(","),n=/data:([^;]+)/.exec(e[0]),n&&(t=n[1]),{type:t,data:e[1]}}function r(t){return new e(function(e){var r,i,o;t=n(t);try{r=atob(t.data)}catch(t){return void e(new Blob([]))}for(i=new Uint8Array(r.length),o=0;o0&&(n&&(l*=-1),r.left+=l,r.right+=l),r}function l(){var n,r,o,a,s;for(n=i("*[contentEditable=false]",t),a=0;a
').css(l).appendTo(t),o&&m.addClass("mce-visual-caret-before"),d(),c=a.ownerDocument.createRange(),f=g.firstChild,c.setStart(f,0),c.setEnd(f,1),c):(g=e.insertInline(a,o),c=a.ownerDocument.createRange(),s(g.nextSibling)?(c.setStart(g,0),c.setEnd(g,0)):(c.setStart(g,1),c.setEnd(g,1)),c)}function u(){l(),g&&(e.remove(g),g=null),m&&(m.remove(),m=null),clearInterval(p)}function d(){p=a.setInterval(function(){i("div.mce-visual-caret",t).toggleClass("mce-visual-caret-hidden")},500)}function f(){a.clearInterval(p)}function h(){return".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}"}var p,m,g;return{show:c,hide:u,getCss:h,destroy:f}}}),r(Xe,[p,_,W],function(e,t,n){function r(i){function o(t){return e.map(t,function(e){return e=n.clone(e),e.node=i,e})}if(e.isArray(i))return e.reduce(i,function(e,t){return e.concat(r(t))},[]);if(t.isElement(i))return o(i.getClientRects());if(t.isText(i)){var a=i.ownerDocument.createRange();return a.setStart(i,0),a.setEnd(i,i.data.length),o(a.getClientRects())}}return{getClientRects:r}}),r(Ke,[z,p,Xe,U,te,ne,$,W],function(e,t,n,r,i,o,a,s){function l(e,t,n,o){for(;o=i.findNode(o,e,r.isEditableCaretCandidate,t);)if(n(o))return}function c(e,r,i,o,a,s){function c(o){var s,l,c;for(c=n.getClientRects(o),e==-1&&(c=c.reverse()),s=0;s0&&r(l,t.last(f))&&u++,l.line=u,a(l))return!0;f.push(l)}}var u=0,d,f=[],h;return(h=t.last(s.getClientRects()))?(d=s.getNode(),c(d),l(e,o,c,d),f):f}function u(e,t){return t.line>e}function d(e,t){return t.line===e}function f(e,n,r,i){function l(n){return 1==e?t.last(n.getClientRects()):t.last(n.getClientRects())}var c=new o(n),u,d,f,h,p=[],m=0,g,v;1==e?(u=c.next,d=s.isBelow,f=s.isAbove,h=a.after(i)):(u=c.prev,d=s.isAbove,f=s.isBelow,h=a.before(i)),v=l(h);do if(h.isVisible()&&(g=l(h),!f(g,v))){if(p.length>0&&d(g,t.last(p))&&m++,g=s.clone(g),g.position=h,g.line=m,r(g))return p;p.push(g)}while(h=u(h));return p}var h=e.curry,p=h(c,-1,s.isAbove,s.isBelow),m=h(c,1,s.isBelow,s.isAbove);return{upUntil:p,downUntil:m,positionsUntil:f,isAboveLine:h(u),isLine:h(d)}}),r(Ge,[z,p,_,Xe,W,te,U],function(e,t,n,r,i,o,a){function s(e,t){return Math.abs(e.left-t)}function l(e,t){return Math.abs(e.right-t)}function c(e,n){function r(e,t){return e>=t.left&&e<=t.right}return t.reduce(e,function(e,t){var i,o;return i=Math.min(s(e,n),l(e,n)),o=Math.min(s(t,n),l(t,n)),r(n,t)?t:r(n,e)?e:o==i&&m(t.node)?t:o=e.top&&i<=e.bottom}),a=c(o,n),a&&(a=c(d(e,a),n),a&&m(a.node))?h(a,n):null}var m=n.isContentEditableFalse,g=o.findNode,v=e.curry;return{findClosestClientRect:c,findLineNodeRects:d,closestCaret:p}}),r(Je,[],function(){var e=function(e){var t,n,r,i;return i=e.getBoundingClientRect(),t=e.ownerDocument,n=t.documentElement,r=t.defaultView,{top:i.top+r.pageYOffset-n.clientTop,left:i.left+r.pageXOffset-n.clientLeft}},t=function(t){return t.inline?e(t.getBody()):{left:0,top:0}},n=function(e){var t=e.getBody();return e.inline?{left:t.scrollLeft,top:t.scrollTop}:{left:0,top:0}},r=function(e){var t=e.getBody(),n=e.getDoc().documentElement,r={left:t.scrollLeft,top:t.scrollTop},i={left:t.scrollLeft||n.scrollLeft,top:t.scrollTop||n.scrollTop};return e.inline?r:i},i=function(t,n){if(n.target.ownerDocument!==t.getDoc()){var i=e(t.getContentAreaContainer()),o=r(t);return{left:n.pageX-i.left+o.left,top:n.pageY-i.top+o.top}}return{left:n.pageX,top:n.pageY}},o=function(e,t,n){return{pageX:n.left-e.left+t.left,pageY:n.top-e.top+t.top}},a=function(e,r){return o(t(e),n(e),i(e,r))};return{calc:a}}),r(Qe,[_,p,z,u,w,Je],function(e,t,n,r,i,o){var a=e.isContentEditableFalse,s=e.isContentEditableTrue,l=function(e){return a(e)},c=function(e,t,n){return t!==n&&!e.dom.isChildOf(t,n)&&!a(t)},u=function(e){var t=e.cloneNode(!0);return t.removeAttribute("data-mce-selected"),t},d=function(e,t,n,r){var i=t.cloneNode(!0);e.dom.setStyles(i,{width:n,height:r}),e.dom.setAttrib(i,"data-mce-selected",null);var o=e.dom.create("div",{class:"mce-drag-container","data-mce-bogus":"all",unselectable:"on",contenteditable:"false"});return e.dom.setStyles(o,{position:"absolute",opacity:.5,overflow:"hidden",border:0,padding:0,margin:0,width:n,height:r}),e.dom.setStyles(i,{margin:0,boxSizing:"border-box"}),o.appendChild(i),o},f=function(e,t){e.parentNode!==t&&t.appendChild(e)},h=function(e,t,n,r,i,o){var a=0,s=0;e.style.left=t.pageX+"px",e.style.top=t.pageY+"px",t.pageX+n>i&&(a=t.pageX+n-i),t.pageY+r>o&&(s=t.pageY+r-o),e.style.width=n-a+"px",e.style.height=r-s+"px"},p=function(e){e&&e.parentNode&&e.parentNode.removeChild(e)},m=function(e){return 0===e.button},g=function(e){return e.element},v=function(e,t){return{pageX:t.pageX-e.relX, +pageY:t.pageY+5}},y=function(e,r){return function(i){if(m(i)){var o=t.find(r.dom.getParents(i.target),n.or(a,s));if(l(o)){var c=r.dom.getPos(o),u=r.getBody(),f=r.getDoc().documentElement;e.element=o,e.screenX=i.screenX,e.screenY=i.screenY,e.maxX=(r.inline?u.scrollWidth:f.offsetWidth)-2,e.maxY=(r.inline?u.scrollHeight:f.offsetHeight)-2,e.relX=i.pageX-c.x,e.relY=i.pageY-c.y,e.width=o.offsetWidth,e.height=o.offsetHeight,e.ghost=d(r,o,e.width,e.height)}}}},b=function(e,t){var n=r.throttle(function(e,n){t._selectionOverrides.hideFakeCaret(),t.selection.placeCaretAt(e,n)},0);return function(r){var i=Math.max(Math.abs(r.screenX-e.screenX),Math.abs(r.screenY-e.screenY));if(g(e)&&!e.dragging&&i>10){var a=t.fire("dragstart",{target:e.element});if(a.isDefaultPrevented())return;e.dragging=!0,t.focus()}if(e.dragging){var s=v(e,o.calc(t,r));f(e.ghost,t.getBody()),h(e.ghost,s,e.width,e.height,e.maxX,e.maxY),n(r.clientX,r.clientY)}}},C=function(e,t){return function(n){if(e.dragging&&c(t,t.selection.getNode(),e.element)){var r=u(e.element),i=t.fire("drop",{targetClone:r,clientX:n.clientX,clientY:n.clientY});i.isDefaultPrevented()||(r=i.targetClone,t.undoManager.transact(function(){p(e.element),t.insertContent(t.dom.getOuterHTML(r)),t._selectionOverrides.hideFakeCaret()}))}w(e)}},x=function(e,t){return function(){w(e),e.dragging&&t.fire("dragend")}},w=function(e){e.dragging=!1,e.element=null,p(e.ghost)},N=function(e){var t={},n,r,o,a,s,l;n=i.DOM,l=document,r=y(t,e),o=b(t,e),a=C(t,e),s=x(t,e),e.on("mousedown",r),e.on("mousemove",o),e.on("mouseup",a),n.bind(l,"mousemove",o),n.bind(l,"mouseup",s),e.on("remove",function(){n.unbind(l,"mousemove",o),n.unbind(l,"mouseup",s)})},E=function(e){e.on("drop",function(t){var n="undefined"!=typeof t.clientX?e.getDoc().elementFromPoint(t.clientX,t.clientY):null;(a(n)||a(e.dom.getContentEditableParent(n)))&&t.preventDefault()})},_=function(e){N(e),E(e)};return{init:_}}),r(Ze,[d,ne,$,k,te,Ye,Ke,Ge,_,T,W,I,z,p,u,Qe,S],function(e,t,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g){function v(e,t){for(;t=e(t);)if(t.isVisible())return t;return t}function y(c){function y(){var e=c.dom.get(le);return e?e.getElementsByTagName("*")[0]:e}function S(e){return c.dom.isBlock(e)}function k(e){e&&c.selection.setRng(e)}function T(){return c.selection.getRng()}function R(e,t){c.selection.scrollIntoView(e,t)}function A(e,t,n){var r;return r=c.fire("ShowCaret",{target:t,direction:e,before:n}),r.isDefaultPrevented()?null:(R(t,e===-1),se.show(n,t))}function B(e){var t;return se.hide(),t=c.fire("BeforeObjectSelected",{target:e}),t.isDefaultPrevented()?null:D(e)}function D(e){var t=e.ownerDocument.createRange();return t.selectNode(e),t}function L(e,t){var n=i.isInSameBlock(e,t);return!(n||!l.isBr(e.getNode()))||n}function M(e,t){return t=i.normalizeRange(e,re,t),e==-1?n.fromRangeStart(t):n.fromRangeEnd(t)}function P(e){return r.isCaretContainerBlock(e.startContainer)}function O(e,t,n,r){var i,o,a,s;return!r.collapsed&&(i=_(r),x(i))?A(e,i,e==-1):(s=P(r),o=M(e,r),n(o)?B(o.getNode(e==-1)):(o=t(o))?n(o)?A(e,o.getNode(e==-1),1==e):(a=t(o),n(a)&&L(o,a)?A(e,a.getNode(e==-1),1==e):s?$(o.toRange()):null):s?r:null)}function H(e,t,n){var r,i,o,l,c,u,d,f,p;if(p=_(n),r=M(e,n),i=t(re,a.isAboveLine(1),r),o=h.filter(i,a.isLine(1)),c=h.last(r.getClientRects()),E(r)&&(p=r.getNode()),N(r)&&(p=r.getNode(!0)),!c)return null;if(u=c.left,l=s.findClosestClientRect(o,u),l&&x(l.node))return d=Math.abs(u-l.left),f=Math.abs(u-l.right),A(e,l.node,d=11)&&(t.innerHTML='
'),t}var o,a,s;if(r.collapsed&&c.settings.forced_root_block){if(o=c.dom.getParent(r.startContainer,"PRE"),!o)return;a=1==t?oe(n.fromRangeStart(r)):ae(n.fromRangeStart(r)),a||(s=i(),1==t?c.$(o).after(s):c.$(o).before(s),c.selection.select(s,!0),c.selection.collapse())}}function F(e,t,n,r){var i;return(i=O(e,t,n,r))?i:(i=I(e,r),i?i:null)}function z(e,t,n){var r;return(r=H(e,t,n))?r:(r=I(e,n),r?r:null)}function U(){return ue("*[data-mce-caret]")[0]}function W(e){e=ue(e),e.attr("data-mce-caret")&&(se.hide(),e.removeAttr("data-mce-caret"),e.removeAttr("data-mce-bogus"),e.removeAttr("style"),k(T()),R(e[0]))}function V(e){var t,r;return e=i.normalizeRange(1,re,e),t=n.fromRangeStart(e),x(t.getNode())?A(1,t.getNode(),!t.isAtEnd()):x(t.getNode(!0))?A(1,t.getNode(!0),!1):(r=c.dom.getParent(t.getNode(),f.or(x,C)),x(r)?A(1,r,!1):(se.hide(),null))}function $(e){var t;return e&&e.collapsed?(t=V(e),t?t:e):e}function q(e){var t,i,o,a;return x(e)?(x(e.previousSibling)&&(o=e.previousSibling),i=ae(n.before(e)),i||(t=oe(n.after(e))),t&&w(t.getNode())&&(a=t.getNode()),r.remove(e.previousSibling),r.remove(e.nextSibling),c.dom.remove(e),ee(),c.dom.isEmpty(c.getBody())?(c.setContent(""),void c.focus()):o?n.after(o).toRange():a?n.before(a).toRange():i?i.toRange():t?t.toRange():null):null}function j(e){var t=c.schema.getTextBlockElements();return e.nodeName in t}function Y(e){return c.dom.isEmpty(e)}function X(e,t,r){var i=c.dom,o,a,s,l;if(o=i.getParent(t.getNode(),i.isBlock),a=i.getParent(r.getNode(),i.isBlock),e===-1){if(l=r.getNode(!0),N(r)&&S(l))return j(o)?(Y(o)&&i.remove(o),n.after(l).toRange()):q(r.getNode(!0))}else if(l=t.getNode(),E(t)&&S(l))return j(a)?(Y(a)&&i.remove(a),n.before(l).toRange()):q(t.getNode());if(o===a||!j(o)||!j(a))return null;for(;s=o.firstChild;)a.appendChild(s);return c.dom.remove(o),r.toRange()}function K(e,t,n,i){var o,a,s,l;return!i.collapsed&&(o=_(i),x(o))?$(q(o)):(a=M(e,i),n(a)&&r.isCaretContainerBlock(i.startContainer)?(l=e==-1?ie.prev(a):ie.next(a),l?$(l.toRange()):i):t(a)?$(q(a.getNode(e==-1))):(s=e==-1?ie.prev(a):ie.next(a),t(s)?e===-1?X(e,a,s):X(e,s,a):void 0))}function G(){function r(e,t){var n=t(T());n&&!e.isDefaultPrevented()&&(e.preventDefault(),k(n))}function i(e){for(var t=c.getBody();e&&e!=t;){if(C(e)||x(e))return e;e=e.parentNode}return null}function o(e,t,n){return!n.collapsed&&h.reduce(n.getClientRects(),function(n,r){return n||u.containsXY(r,e,t)},!1)}function l(e){var t=!1;e.on("touchstart",function(){t=!1}),e.on("touchmove",function(){t=!0}),e.on("touchend",function(e){var n=i(e.target);x(n)?t||(e.preventDefault(),Z(B(n))):ee()})}function f(){var e,t=i(c.selection.getNode());C(t)&&S(t)&&c.dom.isEmpty(t)&&(e=c.dom.create("br",{"data-mce-bogus":"1"}),c.$(t).empty().append(e),c.selection.setRng(n.before(e).toRange()))}function g(e){var t=U();if(t)return"compositionstart"==e.type?(e.preventDefault(),e.stopPropagation(),void W(t)):void(" "!=t.innerHTML&&W(t))}function v(e){var t;switch(e.keyCode){case d.DELETE:t=f();break;case d.BACKSPACE:t=f()}t&&e.preventDefault()}var w=b(F,1,oe,E),_=b(F,-1,ae,N),R=b(K,1,E,N),D=b(K,-1,N,E),L=b(z,-1,a.upUntil),M=b(z,1,a.downUntil);c.on("mouseup",function(){var e=T();e.collapsed&&k(V(e))}),c.on("click",function(e){var t;t=i(e.target),t&&x(t)&&(e.preventDefault(),c.focus())});var P=function(e){var r=new t(e);if(!e.firstChild)return!1;var i=n.before(e.firstChild),o=r.next(i);return o&&!E(o)&&!N(o)},O=function(e,t){var n=c.dom.getParent(e,c.dom.isBlock),r=c.dom.getParent(t,c.dom.isBlock);return n===r},H=function(e,t){var n=c.dom.getParent(e,c.dom.isBlock),r=c.dom.getParent(t,c.dom.isBlock);return n&&!O(n,r)&&P(n)};l(c),c.on("mousedown",function(e){var t;if(t=i(e.target))x(t)?(e.preventDefault(),Z(B(t))):(ee(),o(e.clientX,e.clientY,c.selection.getRng())||c.selection.placeCaretAt(e.clientX,e.clientY));else{ee(),se.hide();var n=s.closestCaret(re,e.clientX,e.clientY);n&&(H(e.target,n.node)||(e.preventDefault(),c.getBody().focus(),k(A(1,n.node,n.before))))}}),c.on("keydown",function(e){if(!d.modifierPressed(e))switch(e.keyCode){case d.RIGHT:r(e,w);break;case d.DOWN:r(e,M);break;case d.LEFT:r(e,_);break;case d.UP:r(e,L);break;case d.DELETE:r(e,R);break;case d.BACKSPACE:r(e,D);break;default:x(c.selection.getNode())&&e.preventDefault()}}),c.on("keyup compositionstart",function(e){g(e),v(e)},!0),c.on("cut",function(){var e=c.selection.getNode();x(e)&&p.setEditorTimeout(c,function(){k($(q(e)))})}),c.on("getSelectionRange",function(e){var t=e.range;if(ce){if(!ce.parentNode)return void(ce=null);t=t.cloneRange(),t.selectNode(ce),e.range=t}}),c.on("setSelectionRange",function(e){var t;t=Z(e.range),t&&(e.range=t)}),c.on("focus",function(){p.setEditorTimeout(c,function(){c.selection.setRng($(c.selection.getRng()))},0)}),c.on("copy",function(t){var n=t.clipboardData;if(!t.isDefaultPrevented()&&t.clipboardData&&!e.ie){var r=y();r&&(t.preventDefault(),n.clearData(),n.setData("text/html",r.outerHTML),n.setData("text/plain",r.outerText))}}),m.init(c)}function J(){var e=c.contentStyles,t=".mce-content-body";e.push(se.getCss()),e.push(t+" .mce-offscreen-selection {position: absolute;left: -9999999999px;}"+t+" *[contentEditable=false] {cursor: default;}"+t+" *[contentEditable=true] {cursor: text;}")}function Q(e){return r.isCaretContainer(e.startContainer)||r.isCaretContainer(e.endContainer)}function Z(t){var n,r=c.$,i=c.dom,o,a,s,l,u,d,f,h,p;if(!t)return ee(),null;if(t.collapsed){if(ee(),!Q(t)){if(f=M(1,t),x(f.getNode()))return A(1,f.getNode(),!f.isAtEnd());if(x(f.getNode(!0)))return A(1,f.getNode(!0),!1)}return null}return s=t.startContainer,l=t.startOffset,u=t.endOffset,3==s.nodeType&&0==l&&x(s.parentNode)&&(s=s.parentNode,l=i.nodeIndex(s),s=s.parentNode),1!=s.nodeType?(ee(),null):(u==l+1&&(n=s.childNodes[l]),x(n)?(h=p=n.cloneNode(!0),d=c.fire("ObjectSelected",{target:n,targetClone:h}),d.isDefaultPrevented()?(ee(),null):(h=d.targetClone,o=r("#"+le),0===o.length&&(o=r('
').attr("id",le),o.appendTo(c.getBody())),t=c.dom.createRng(),h===p&&e.ie?(o.empty().append(g.ZWSP).append(h).append(g.ZWSP),t.setStart(o[0].firstChild,0),t.setEnd(o[0].lastChild,1)):(o.empty().append("\xa0").append(h).append("\xa0"),t.setStart(o[0].firstChild,1),t.setEnd(o[0].lastChild,0)),o.css({top:i.getPos(n,c.getBody()).y}),o[0].focus(),a=c.selection.getSel(),a.removeAllRanges(),a.addRange(t),c.$("*[data-mce-selected]").removeAttr("data-mce-selected"),n.setAttribute("data-mce-selected",1),ce=n,t)):(ee(),null))}function ee(){ce&&(ce.removeAttribute("data-mce-selected"),c.$("#"+le).remove(),ce=null)}function te(){se.destroy(),ce=null}function ne(){se.hide()}var re=c.getBody(),ie=new t(re),oe=b(v,ie.next),ae=b(v,ie.prev),se=new o(c.getBody(),S),le="sel-"+c.dom.uniqueId(),ce,ue=c.$;return e.ceFalse&&(G(),J()),{showBlockCaretContainer:W,hideFakeCaret:ne,destroy:te}}var b=f.curry,C=l.isContentEditableTrue,x=l.isContentEditableFalse,w=l.isElement,N=i.isAfterContentEditableFalse,E=i.isBeforeContentEditableFalse,_=c.getSelectedNode;return y}),r(et,[],function(){var e=0,t=function(){var e=function(){return Math.round(4294967295*Math.random()).toString(36)},t=(new Date).getTime();return"s"+t.toString(36)+e()+e()+e()},n=function(n){return n+e++ +t()};return{uuid:n}}),r(tt,[w,g,E,R,A,O,P,Y,J,Q,Z,ee,oe,ae,N,f,Ae,Pe,B,L,He,d,m,u,Ie,Fe,ze,je,Ze,et],function(e,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g,v,y,b,C,x,w,N,E,_,S,k,T,R,A){function B(e,t,i){var o=this,a,s,l;a=o.documentBaseUrl=i.documentBaseURL,s=i.baseURI,l=i.defaultSettings,t=P({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:a,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:o.convertURL,url_converter_scope:o,ie7_compat:!0},l,t),l&&l.external_plugins&&t.external_plugins&&(t.external_plugins=P({},l.external_plugins,t.external_plugins)),o.settings=t,r.language=t.language||"en",r.languageLoad=t.language_load,r.baseURL=i.baseURL,o.id=t.id=e,o.setDirty(!1),o.plugins={},o.documentBaseURI=new p(t.document_base_url||a,{base_uri:s}),o.baseURI=s,o.contentCSS=[],o.contentStyles=[],o.shortcuts=new k(o),o.loadedCSS={},o.editorCommands=new h(o),t.target&&(o.targetElm=t.target),o.suffix=i.suffix,o.editorManager=i,o.inline=t.inline,o.settings.content_editable=o.inline,t.cache_suffix&&(w.cacheSuffix=t.cache_suffix.replace(/^[\?\&]+/,"")),t.override_viewport===!1&&(w.overrideViewPort=!1),i.fire("SetupEditor",o),o.execCallback("setup",o),o.$=n.overrideDefaults(function(){return{context:o.inline?o.getBody():o.getDoc(),element:o.getBody()}})}var D=e.DOM,L=r.ThemeManager,M=r.PluginManager,P=N.extend,O=N.each,H=N.explode,I=N.inArray,F=N.trim,z=N.resolve,U=g.Event,W=w.gecko,V=w.ie;return B.prototype={render:function(){function e(){D.unbind(window,"ready",e),n.render()}function t(){var e=m.ScriptLoader;if(r.language&&"en"!=r.language&&!r.language_url&&(r.language_url=n.editorManager.baseURL+"/langs/"+r.language+".js"),r.language_url&&e.add(r.language_url),r.theme&&"function"!=typeof r.theme&&"-"!=r.theme.charAt(0)&&!L.urls[r.theme]){var t=r.theme_url;t=t?n.documentBaseURI.toAbsolute(t):"themes/"+r.theme+"/theme"+o+".js",L.load(r.theme,t)}N.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),O(r.external_plugins,function(e,t){M.load(t,e),r.plugins+=" "+t}),O(r.plugins.split(/[ ,]/),function(e){if(e=F(e),e&&!M.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=M.dependencies(e);O(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=M.createUrl(t,e),M.load(e.resource,e)})}else M.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"})}),e.loadQueue(function(){n.removed||n.init()})}var n=this,r=n.settings,i=n.id,o=n.suffix;if(!U.domLoaded)return void D.bind(window,"ready",e);if(n.getElement()&&w.contentEditable){r.inline?n.inline=!0:(n.orgVisibility=n.getElement().style.visibility,n.getElement().style.visibility="hidden");var a=n.getElement().form||D.getParent(i,"form");a&&(n.formElement=a,r.hidden_input&&!/TEXTAREA|INPUT/i.test(n.getElement().nodeName)&&(D.insertAfter(D.create("input",{type:"hidden",name:i}),i),n.hasHiddenInput=!0),n.formEventDelegate=function(e){n.fire(e.type,e)},D.bind(a,"submit reset",n.formEventDelegate),n.on("reset",function(){n.setContent(n.startContent,{format:"raw"})}),!r.submit_patch||a.submit.nodeType||a.submit.length||a._mceOldSubmit||(a._mceOldSubmit=a.submit,a.submit=function(){return n.editorManager.triggerSave(),n.setDirty(!1),a._mceOldSubmit(a)})),n.windowManager=new v(n),n.notificationManager=new y(n),"xml"==r.encoding&&n.on("GetContent",function(e){e.save&&(e.content=D.encode(e.content))}),r.add_form_submit_trigger&&n.on("submit",function(){n.initialized&&n.save()}),r.add_unload_trigger&&(n._beforeUnload=function(){!n.initialized||n.destroyed||n.isHidden()||n.save({format:"raw",no_events:!0,set_dirty:!1})},n.editorManager.on("BeforeUnload",n._beforeUnload)),n.editorManager.add(n),t()}},init:function(){function e(n){var r=M.get(n),i,o;if(i=M.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=F(n),r&&I(m,n)===-1){if(O(M.dependencies(n),function(t){e(t)}),t.plugins[n])return;o=new r(t,i,t.$),t.plugins[n]=o,o.init&&(o.init(t,i),m.push(n))}}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,u,d,f,h,p,m=[];if(t.rtl=n.rtl_ui||t.editorManager.i18n.rtl,t.editorManager.i18n.setCode(n.language),n.aria_label=n.aria_label||D.getAttrib(r,"aria-label",t.getLang("aria.rich_text_area")),t.fire("ScriptsLoaded"),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),c=L.get(n.theme),t.theme=new c(t,L.urls[n.theme]),t.theme.init&&t.theme.init(t,L.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""),t.$)):t.theme=n.theme),O(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,h=/^[0-9\.]+(|px)$/i,h.test(""+i)&&(i=Math.max(parseInt(i,10),100)),h.test(""+o)&&(o=Math.max(parseInt(o,10),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),o",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+=''),!w.caretAfter&&n.ie7_compat&&(t.iframeHTML+=''),t.iframeHTML+='',!/#$/.test(document.location.href))for(p=0;p',t.loadedCSS[g]=!0}d=n.body_id||"tinymce",d.indexOf("=")!=-1&&(d=t.getParam("body_id","","hash"),d=d[t.id]||d),f=n.body_class||"",f.indexOf("=")!=-1&&(f=t.getParam("body_class","","hash"),f=f[t.id]||""),n.content_security_policy&&(t.iframeHTML+=''),t.iframeHTML+='
';var v='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()';document.domain!=location.hostname&&w.ie&&w.ie<12&&(u=v);var y=D.create("iframe",{id:t.id+"_ifr",frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}});if(y.onload=function(){y.onload=null,t.fire("load")},D.setAttrib(y,"src",u||'javascript:""'),t.contentAreaContainer=l.iframeContainer,t.iframeElement=y,s=D.add(l.iframeContainer,y),V)try{t.getDoc()}catch(e){s.src=u=v}l.editorContainer&&(D.get(l.editorContainer).style.display=t.orgDisplay,t.hidden=D.isHidden(l.editorContainer)),t.getElement().style.display="none",D.setAttrib(t.id,"aria-hidden",!0),u||t.initContentBody(),r=s=l=null},initContentBody:function(t){var n=this,r=n.settings,s=n.getElement(),h=n.getDoc(),p,m;r.inline||(n.getElement().style.visibility=n.orgVisibility),t||r.content_editable||(h.open(),h.write(n.iframeHTML),h.close()),r.content_editable&&(n.on("remove",function(){var e=this.getBody();D.removeClass(e,"mce-content-body"),D.removeClass(e,"mce-edit-focus"),D.setAttrib(e,"contentEditable",null)}),D.addClass(s,"mce-content-body"),n.contentDocument=h=r.content_document||document,n.contentWindow=r.content_window||window,n.bodyElement=s,r.content_document=r.content_window=null,r.root_name=s.nodeName.toLowerCase()),p=n.getBody(),p.disabled=!0,n.readonly=r.readonly,n.readonly||(n.inline&&"static"==D.getStyle(p,"position",!0)&&(p.style.position="relative"),p.contentEditable=n.getParam("content_editable_state",!0)),p.disabled=!1,n.editorUpload=new T(n),n.schema=new b(r),n.dom=new e(h,{keep_values:!0,url_converter:n.convertURL,url_converter_scope:n,hex_colors:r.force_hex_style_colors,class_filter:r.class_filter,update_styles:!0,root_element:n.inline?n.getBody():null,collect:r.content_editable,schema:n.schema,onSetAttrib:function(e){n.fire("SetAttrib",e)}}),n.parser=new C(r,n.schema),n.parser.addAttributeFilter("src,href,style,tabindex",function(e,t){for(var r=e.length,i,o=n.dom,a,s;r--;)if(i=e[r],a=i.attr(t),s="data-mce-"+t,!i.attributes.map[s]){if(0===a.indexOf("data:")||0===a.indexOf("blob:"))continue;"style"===t?(a=o.serializeStyle(o.parseStyle(a),i.name),a.length||(a=null),i.attr(s,a),i.attr(t,a)):"tabindex"===t?(i.attr(s,a),i.attr(t,null)):i.attr(s,n.convertURL(a,t,i.name))}}),n.parser.addNodeFilter("script",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("type")||"no/type",0!==r.indexOf("mce-")&&n.attr("type","mce-"+r)}),n.parser.addNodeFilter("#cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t=e.length,r,i=n.schema.getNonEmptyElements();t--;)r=e[t],r.isEmpty(i)&&(r.append(new o("br",1)).shortEnded=!0)}),n.serializer=new a(r,n),n.selection=new l(n.dom,n.getWin(),n.serializer,n),n.formatter=new c(n),n.undoManager=new u(n),n.forceBlocks=new f(n),n.enterKey=new d(n),n._nodeChangeDispatcher=new i(n),n._selectionOverrides=new R(n),n.fire("PreInit"),r.browser_spellcheck||r.gecko_spellcheck||(h.body.spellcheck=!1,D.setAttrib(p,"spellcheck","false")),n.quirks=new x(n),n.fire("PostRender"),r.directionality&&(p.dir=r.directionality),r.nowrap&&(p.style.whiteSpace="nowrap"),r.protect&&n.on("BeforeSetContent",function(e){O(r.protect,function(t){e.content=e.content.replace(t,function(e){return""})})}),n.on("SetContent",function(){n.addVisual(n.getBody())}),r.padd_empty_editor&&n.on("PostProcess",function(e){e.content=e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,n.bindPendingEventDelegates(),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.on("compositionstart compositionend",function(e){n.composing="compositionstart"===e.type}),n.contentStyles.length>0&&(m="",O(n.contentStyles,function(e){m+=e+"\r\n"}),n.dom.addStyle(m)),O(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),r.auto_focus&&E.setEditorTimeout(n,function(){var e;e=r.auto_focus===!0?n:n.editorManager.get(r.auto_focus),e.destroyed||e.focus()},100),s=h=p=null},focus:function(e){function t(e){return n.dom.getParent(e,function(e){return"true"===n.dom.getContentEditable(e)})}var n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l=n.getBody(),c;if(!e){if(o=r.getRng(),o.item&&(a=o.item(0)),n.quirks.refreshContentEditable(),c=t(r.getNode()),n.$.contains(l,c))return c.focus(),r.normalize(),void n.editorManager.setActive(n);if(i||(w.opera||n.getBody().focus(),n.getWin().focus()),W||i){if(l.setActive)try{l.setActive()}catch(e){l.focus()}else l.focus();i&&r.normalize()}a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())}n.editorManager.setActive(n)},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?z(r):0,n=z(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?(e=n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}),this.editorManager.translate(e)):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?O(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(e){e=e.split("="),e.length>1?i[F(e[0])]=F(e[1]):i[F(e[0])]=F(e)}):i=r,i):r},nodeChanged:function(e){this._nodeChangeDispatcher.nodeChanged(e)},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addContextToolbar:function(e,t){var n=this,r;n.contextToolbars=n.contextToolbars||[],"string"==typeof e&&(r=e,e=function(e){return n.dom.is(e,r)}),n.contextToolbars.push({id:A.uuid("mcet"),predicate:e,items:t})},addCommand:function(e,t,n){this.editorCommands.addCommand(e,t,n)},addQueryStateHandler:function(e,t,n){this.editorCommands.addQueryStateHandler(e,t,n)},addQueryValueHandler:function(e,t,n){this.editorCommands.addQueryValueHandler(e,t,n)},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){return this.editorCommands.execCommand(e,t,n,r)},queryCommandState:function(e){return this.editorCommands.queryCommandState(e)},queryCommandValue:function(e){return this.editorCommands.queryCommandValue(e)},queryCommandSupported:function(e){return this.editorCommands.queryCommandSupported(e)},show:function(){var e=this;e.hidden&&(e.hidden=!1,e.inline?e.getBody().contentEditable=!0:(D.show(e.getContainer()),D.hide(e.id)),e.load(),e.fire("show"))},hide:function(){var e=this,t=e.getDoc();e.hidden||(V&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getBody().contentEditable=!1,e==e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(D.hide(e.getContainer()),D.setStyle(e.id,"display",e.orgDisplay)),e.hidden=!0,e.fire("hide"))},isHidden:function(){return!!this.hidden},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;if(r)return e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),"raw"==e.format&&t.fire("RawSaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(t.inline||(n.innerHTML=r),(i=D.getParent(t.id,"form"))&&O(i.elements,function(e){if(e.name==t.id)return e.value=r,!1})),e.element=n=null,e.set_dirty!==!1&&t.setDirty(!1),r},setContent:function(e,t){var n=this,r=n.getBody(),i,o;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(o=V&&V<11?"":'
',"TABLE"==r.nodeName?e=""+o+"":/^(UL|OL)$/.test(r.nodeName)&&(e="
  • "+o+"
  • "),i=n.settings.forced_root_block,i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?(e=o,e=n.dom.createHTML(i,n.settings.forced_root_block_attrs,e)):V||e||(e='
    '),n.dom.setHTML(r,e),n.fire("SetContent",t)):("raw"!==t.format&&(e=new s({validate:n.validate},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=F(e),n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t)),t.content},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?t.serializer.getTrimmedContent():"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),"text"!=e.format?e.content=F(n):e.content=n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e,t){t&&(e=P({content:e},t)),this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},setDirty:function(e){var t=!this.isNotDirty;this.isNotDirty=!e,e&&e!=t&&this.fire("dirty")},setMode:function(e){S.setMode(this,e)},getContainer:function(){var e=this;return e.container||(e.container=D.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return this.targetElm||(this.targetElm=D.get(this.id)),this.targetElm},getWin:function(){var e=this,t;return e.contentWindow||(t=e.iframeElement,t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){var e=this.getDoc();return this.bodyElement||(e?e.body:null)},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:function(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),O(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),void(t&&"0"!=t||!n.hasVisual?i.removeClass(e,o):i.addClass(e,o));case"A":return void(i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o=r.visual_anchor_class||"mce-item-anchor",t&&n.hasVisual?i.addClass(e,o):i.removeClass(e,o)))}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this;e.removed||(e.save(),e.removed=1,e.unbindAllNativeEvents(),e.hasHiddenInput&&D.remove(e.getElement().nextSibling),e.inline||(V&&V<10&&e.getDoc().execCommand("SelectAll",!1,null),D.setStyle(e.id,"display",e.orgDisplay),e.getBody().onload=null),e.fire("remove"),e.editorManager.remove(e),D.remove(e.getContainer()),e._selectionOverrides.destroy(),e.editorUpload.destroy(),e.destroy())},destroy:function(e){var t=this,n;if(!t.destroyed){if(!e&&!t.removed)return void t.remove();e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destroy(),t.dom.destroy()),n=t.formElement,n&&(n._mceOldSubmit&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null),D.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=t.editorContainer=null,t.bodyElement=t.contentDocument=t.contentWindow=null,t.iframeElement=t.targetElm=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1}},uploadImages:function(e){return this.editorUpload.uploadImages(e)},_scanForImages:function(){return this.editorUpload.scanForImages()}},P(B.prototype,_),B}),r(nt,[],function(){var e={},t="en";return{setCode:function(e){e&&(t=e,this.rtl=!!this.data[e]&&"rtl"===this.data[e]._dir)},getCode:function(){return t},rtl:!1,add:function(t,n){var r=e[t];r||(e[t]=r={});for(var i in n)r[i]=n[i];this.setCode(t)},translate:function(n){var r;if(r=e[t],r||(r={}),"undefined"==typeof n)return n;if("string"!=typeof n&&n.raw)return n.raw;if(n.push){var i=n.slice(1);n=(r[n[0]]||n[0]).replace(/\{([0-9]+)\}/g,function(e,t){return i[t]})}return(r[n]||n).replace(/{context:\w+}$/,"")},data:e}}),r(rt,[w,u,d],function(e,t,n){function r(e){function l(){try{return document.activeElement}catch(e){return document.body}}function c(e,t){if(t&&t.startContainer){if(!e.isChildOf(t.startContainer,e.getRoot())||!e.isChildOf(t.endContainer,e.getRoot()))return;return{startContainer:t.startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset}}return t}function u(e,t){var n;return t.startContainer?(n=e.getDoc().createRange(),n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset)):n=t, +n}function d(e){return!!s.getParent(e,r.isEditorUIElement)}function f(r){var f=r.editor;f.on("init",function(){(f.inline||n.ie)&&("onbeforedeactivate"in document&&n.ie<9?f.dom.bind(f.getBody(),"beforedeactivate",function(e){if(e.target==f.getBody())try{f.lastRng=f.selection.getRng()}catch(e){}}):f.on("nodechange mouseup keyup",function(e){var t=l();"nodechange"==e.type&&e.selectionChange||(t&&t.id==f.id+"_ifr"&&(t=f.getBody()),f.dom.isChildOf(t,f.getBody())&&(f.lastRng=f.selection.getRng()))}),n.webkit&&!i&&(i=function(){var t=e.activeEditor;if(t&&t.selection){var n=t.selection.getRng();n&&!n.collapsed&&(f.lastRng=n)}},s.bind(document,"selectionchange",i)))}),f.on("setcontent",function(){f.lastRng=null}),f.on("mousedown",function(){f.selection.lastFocusBookmark=null}),f.on("focusin",function(){var t=e.focusedEditor,n;f.selection.lastFocusBookmark&&(n=u(f,f.selection.lastFocusBookmark),f.selection.lastFocusBookmark=null,f.selection.setRng(n)),t!=f&&(t&&t.fire("blur",{focusedEditor:f}),e.setActive(f),e.focusedEditor=f,f.fire("focus",{blurredEditor:t}),f.focus(!0)),f.lastRng=null}),f.on("focusout",function(){t.setEditorTimeout(f,function(){var t=e.focusedEditor;d(l())||t!=f||(f.fire("blur",{focusedEditor:null}),e.focusedEditor=null,f.selection&&(f.selection.lastFocusBookmark=null))})}),o||(o=function(t){var n=e.activeEditor,r;r=t.target,n&&r.ownerDocument==document&&(n.selection&&r!=n.getBody()&&(n.selection.lastFocusBookmark=c(n.dom,n.lastRng)),r==document.body||d(r)||e.focusedEditor!=n||(n.fire("blur",{focusedEditor:null}),e.focusedEditor=null))},s.bind(document,"focusin",o)),f.inline&&!a&&(a=function(t){var n=e.activeEditor,r=n.dom;if(n.inline&&r&&!r.isChildOf(t.target,n.getBody())){var i=n.selection.getRng();i.collapsed||(n.lastRng=i)}},s.bind(document,"mouseup",a))}function h(t){e.focusedEditor==t.editor&&(e.focusedEditor=null),e.activeEditor||(s.unbind(document,"selectionchange",i),s.unbind(document,"focusin",o),s.unbind(document,"mouseup",a),i=o=a=null)}e.on("AddEditor",f),e.on("RemoveEditor",h)}var i,o,a,s=e.DOM;return r.isEditorUIElement=function(e){return e.className.toString().indexOf("mce-")!==-1},r}),r(it,[tt,g,w,ae,d,m,c,ue,nt,rt],function(e,t,n,r,i,o,a,s,l,c){function u(e){g(C.editors,function(t){"scroll"===e.type?t.fire("ScrollWindow",e):t.fire("ResizeWindow",e)})}function d(e,n){n!==x&&(n?t(window).on("resize scroll",u):t(window).off("resize scroll",u),x=n)}function f(e){var t=C.editors,n;delete t[e.id];for(var r=0;r0&&g(m(t),function(e){var t;(t=p.get(e))?n.push(t):g(document.forms,function(t){g(t.elements,function(t){t.name===e&&(e="mce_editor_"+y++,p.setAttrib(t,"id",e),n.push(t))})})});break;case"textareas":case"specific_textareas":g(p.select("textarea"),function(t){e.editor_deselector&&c(t,e.editor_deselector)||e.editor_selector&&!c(t,e.editor_selector)||n.push(t)})}return n}function d(){function a(t,n,r){var i=new e(t,n,f);m.push(i),i.on("init",function(){++c===y.length&&x(m)}),i.targetElm=i.targetElm||r,i.render()}var c=0,m=[],y;return p.unbind(window,"ready",d),l("onpageload"),y=t.unique(u(n)),n.types?void g(n.types,function(e){o.each(y,function(t){return!p.is(t,e.selector)||(a(s(t),v({},n,e),t),!1)})}):(o.each(y,function(e){h(f.get(e.id))}),y=o.grep(y,function(e){return!f.get(e.id)}),void g(y,function(e){r(n,e)?i("Could not initialize inline editor on invalid inline target element",e):a(s(e),n,e)}))}var f=this,b,C;C=o.makeMap("area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu"," ");var x=function(e){b=e};return f.settings=n,p.bind(window,"ready",d),new a(function(e){b?e(b):x=function(t){e(t)}})},get:function(e){return arguments.length?e in this.editors?this.editors[e]:null:this.editors},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),d(n,!0),t.activeEditor=e,t.fire("AddEditor",{editor:e}),b||(b=function(){t.fire("BeforeUnload")},p.bind(window,"beforeunload",b)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i;{if(e)return"string"==typeof e?(e=e.selector||e,void g(p.select(e),function(e){i=r[e.id],i&&t.remove(i)})):(i=e,r[i.id]?(f(i)&&t.fire("RemoveEditor",{editor:i}),r.length||p.unbind(window,"beforeunload",b),i.remove(),d(r,r.length>0),i):null);for(n=r.length-1;n>=0;n--)t.remove(r[n])}},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return!!i.activeEditor&&i.activeEditor.execCommand(t,n,r)},triggerSave:function(){g(this.editors,function(e){e.save()})},addI18n:function(e,t){l.add(e,t)},translate:function(e){return l.translate(e)},setActive:function(e){var t=this.activeEditor;this.activeEditor!=e&&(t&&t.fire("deactivate",{relatedTarget:e}),e.fire("activate",{relatedTarget:t})),this.activeEditor=e}},v(C,s),C.setup(),window.tinymce=window.tinyMCE=C,C}),r(ot,[it,m],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.convert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(n,r){"html4"===t.settings.schema&&e(r,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(at,[ue,m],function(e,t){var n={send:function(e){function r(){!e.async||4==i.readyState||o++>1e4?(e.success&&o<1e4&&200==i.status?e.success.call(e.success_scope,""+i.responseText,i,e):e.error&&e.error.call(e.error_scope,o>1e4?"TIMED_OUT":"GENERAL",i,e),i=null):setTimeout(r,10)}var i,o=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=e.async!==!1,e.data=e.data||"",n.fire("beforeInitialize",{settings:e}),i=new XMLHttpRequest){if(i.overrideMimeType&&i.overrideMimeType(e.content_type),i.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.crossDomain&&(i.withCredentials=!0),e.content_type&&i.setRequestHeader("Content-Type",e.content_type),e.requestheaders&&t.each(e.requestheaders,function(e){i.setRequestHeader(e.key,e.value)}),i.setRequestHeader("X-Requested-With","XMLHttpRequest"),i=n.fire("beforeSend",{xhr:i,settings:e}).xhr,i.send(e.data),!e.async)return r();setTimeout(r,10)}}};return t.extend(n,e),n}),r(st,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb\tt\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnProperty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(e){}}}}),r(lt,[st,at,m],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(ct,[w],function(e){return{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(ut,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?u+e:i.indexOf(",",u),r===-1||r>i.length?null:(n=i.substring(u,r),u=r+1,n)}var r,i,s,u=0;if(a={},c){o.load(l),i=o.getAttribute(l)||"";do{var d=n();if(null===d)break;if(r=n(parseInt(d,32)||0),null!==r){if(d=n(),null===d)break;s=n(parseInt(d,32)||0),r&&(a[r]=s)}}while(null!==r);e()}}function r(){var t,n="";if(c){for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n);try{o.save(l)}catch(e){}e()}}var i,o,a,s,l,c;try{if(window.localStorage)return localStorage}catch(e){}return l="tinymce",o=document.documentElement,c=!!o.addBehavior,c&&o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i}),r(dt,[w,f,N,E,m,d],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManager,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(ft,[se,m],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.bodyClasses.add(this.settings.containerClass)},applyClasses:function(e){var t=this,n=t.settings,r,i,o,a;r=n.firstControlClass,i=n.lastControlClass,e.each(function(e){e.classes.remove(r).remove(i).add(n.controlClass),e.visible()&&(o||(o=e),a=e)}),o&&o.classes.add(r),a&&a.classes.add(i)},renderHtml:function(e){var t=this,n="";return t.applyClasses(e.items()),e.items().each(function(e){n+=e.renderHtml()}),n},recalc:function(){},postRender:function(){},isNative:function(){return!1}})}),r(ht,[ft],function(e){return e.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'
    '+this._super(e)}})}),r(pt,[De],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t._super(e),e=t.settings,n=t.settings.size,t.on("click mousedown",function(e){e.preventDefault()}),t.on("touchstart",function(e){t.fire("click",e),e.preventDefault()}),e.subtype&&t.classes.add(e.subtype),n&&t.classes.add("btn-"+n),e.icon&&t.icon(e.icon)},icon:function(e){return arguments.length?(this.state.set("icon",e),this):this.state.get("icon")},repaint:function(){var e=this.getEl().firstChild,t;e&&(t=e.style,t.width=t.height="100%"),this._super()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.state.get("icon"),i,o=e.state.get("text"),a="";return i=e.settings.image,i?(r="none","string"!=typeof i&&(i=window.getSelection?i[0]:i[1]),i=" style=\"background-image: url('"+i+"')\""):i="",o&&(e.classes.add("btn-has-text"),a=''+e.encode(o)+""),r=e.settings.icon?n+"ico "+n+"i-"+r:"",'
    "},bindStates:function(){function e(e){var i=n("span."+r,t.getEl());e?(i[0]||(n("button:first",t.getEl()).append(''),i=n("span."+r,t.getEl())),i.html(t.encode(e))):i.remove(),t.classes.toggle("btn-has-text",!!e)}var t=this,n=t.$,r=t.classPrefix+"txt";return t.state.on("change:text",function(t){e(t.value)}),t.state.on("change:icon",function(n){var r=n.value,i=t.classPrefix;t.settings.icon=r,r=r?i+"ico "+i+"i-"+t.settings.icon:"";var o=t.getEl().firstChild,a=o.getElementsByTagName("i")[0];r?(a&&a==o.firstChild||(a=document.createElement("i"),o.insertBefore(a,o.firstChild)),a.className=r):a&&o.removeChild(a),e(t.state.get("text"))}),t._super()}})}),r(mt,[xe],function(e){return e.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.classes.add("btn-group"),e.preRender(),t.preRender(e),'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(gt,[De],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){return arguments.length?(this.state.set("checked",e),this):this.state.get("checked")},value:function(e){return arguments.length?this.checked(e):this.checked()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
    '+e.encode(e.state.get("text"))+"
    "},bindStates:function(){function e(e){t.classes.toggle("checked",e),t.aria("checked",e)}var t=this;return t.state.on("change:text",function(e){t.getEl("al").firstChild.data=t.translate(e.value)}),t.state.on("change:checked change:value",function(n){t.fire("change"),e(n.value)}),t.state.on("change:icon",function(e){var n=e.value,r=t.classPrefix;if("undefined"==typeof n)return t.settings.icon;t.settings.icon=n,n=n?r+"ico "+r+"i-"+t.settings.icon:"";var i=t.getEl().firstChild,o=i.getElementsByTagName("i")[0];n?(o&&o==i.firstChild||(o=document.createElement("i"),i.insertBefore(o,i.firstChild)),o.className=n):o&&i.removeChild(o)}),t.state.get("checked")&&e(!0),t._super()}})}),r(vt,[De,be,pe,g],function(e,t,n,r){return e.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.classes.add("combobox"),t.subinput=!0,t.ariaTarget="inp",e.menu=e.menu||e.values,e.menu&&(e.icon="caret"),t.on("click",function(n){var i=n.target,o=t.getEl();if(r.contains(o,i)||i==o)for(;i&&i!=o;)i.id&&i.id.indexOf("-open")!=-1&&(t.fire("action"),e.menu&&(t.showMenu(),n.aria&&t.menu.items()[0].focus())),i=i.parentNode}),t.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&t.parents().reverse().each(function(n){var r=t.state.get("value"),i=t.getEl("inp").value;if(e.preventDefault(),t.state.set("value",i),r!=i&&t.fire("change"),n.hasEventListeners("submit")&&n.toJSON)return n.fire("submit",{data:n.toJSON()}),!1})}),t.on("keyup",function(e){"INPUT"==e.target.nodeName&&t.state.set("value",e.target.value)})},showMenu:function(){var e=this,n=e.settings,r;e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control.items().each(function(t){t.active(t.value()==e.value())})}).fire("show"),e.menu.on("select",function(t){e.value(t.control.value())}),e.on("focusin",function(t){"INPUT"==t.target.tagName.toUpperCase()&&e.menu.hide()}),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,t=e.getEl(),i=e.getEl("open"),o=e.layoutRect(),a,s;a=i?o.w-n.getSize(i).width-10:o.w-10;var l=document;return l.all&&(!l.documentMode||l.documentMode<=8)&&(s=e.layoutRect().h-2+"px"),r(t.firstChild).css({width:a,lineHeight:s}),e._super(),e},postRender:function(){var e=this;return r(this.getEl("inp")).on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)}),e._super()},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=e.state.get("value")||"",o,a,s="",l="";return"spellcheck"in n&&(l+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(l+=' maxlength="'+n.maxLength+'"'),n.size&&(l+=' size="'+n.size+'"'),n.subtype&&(l+=' type="'+n.subtype+'"'),e.disabled()&&(l+=' disabled="disabled"'),o=n.icon,o&&"caret"!=o&&(o=r+"ico "+r+"i-"+n.icon),a=e.state.get("text"),(o||a)&&(s='
    ",e.classes.add("has-open")),'
    '+s+"
    "},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl("inp").value),this.state.get("value"))},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.getEl("inp").value!=t.value&&(e.getEl("inp").value=t.value)}),e.state.on("change:disabled",function(t){e.getEl("inp").disabled=t.value}),e._super()},remove:function(){r(this.getEl("inp")).off(),this._super()}})}),r(yt,[vt],function(e){return e.extend({init:function(e){var t=this;e.spellcheck=!1,e.onaction&&(e.icon="none"),t._super(e),t.classes.add("colorbox"),t.on("change keyup postrender",function(){t.repaintColor(t.value())})},repaintColor:function(e){var t=this.getEl().getElementsByTagName("i")[0];if(t)try{t.style.background=e}catch(e){}},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.state.get("rendered")&&e.repaintColor(t.value)}),e._super()}})}),r(bt,[pt,ke],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;if(e.active(!0),e.panel)e.panel.show();else{var r=n.panel;r.type&&(r={layout:"grid",items:r}),r.role=r.role||"dialog",r.popover=!0,r.autohide=!0,r.ariaRoot=!0,e.panel=new t(r).on("hide",function(){e.active(!1)}).on("cancel",function(t){t.stopPropagation(),e.focus(),e.hidePanel()}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()}e.panel.moveRel(e.getEl(),n.popoverAlign||(e.isRtl()?["bc-tr","bc-tc"]:["bc-tl","bc-tc"]))},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.aria("haspopup",!0),e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():(e.showPanel(),e.panel.focus(!!t.aria)))}),e._super()},remove:function(){return this.panel&&(this.panel.remove(),this.panel=null),this._super()}})}),r(Ct,[bt,w],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.classes.add("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},resetColor:function(){return this._color=null,this.getEl("preview").style.backgroundColor=null,this},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.state.get("text"),i=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",o=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"",a="";return r&&(e.classes.add("btn-has-text"),a=''+e.encode(r)+""),'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.aria&&"down"==r.aria.key||r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super()}})}),r(xt,[],function(){function e(e){function i(e,i,o){var a,s,l,c,u,d;return a=0,s=0,l=0,e/=255,i/=255,o/=255,u=t(e,t(i,o)),d=n(e,n(i,o)),u==d?(l=u,{h:0,s:0,v:100*l}):(c=e==u?i-o:o==u?e-i:o-e,a=e==u?3:o==u?1:5,a=60*(a-c/(d-u)),s=(d-u)/d,l=d,{h:r(a),s:r(100*s),v:r(100*l)})}function o(e,i,o){var a,s,l,c;if(e=(parseInt(e,10)||0)%360,i=parseInt(i,10)/100,o=parseInt(o,10)/100,i=n(0,t(i,1)),o=n(0,t(o,1)),0===i)return void(d=f=h=r(255*o));switch(a=e/60,s=o*i,l=s*(1-Math.abs(a%2-1)),c=o-s,Math.floor(a)){case 0:d=s,f=l,h=0;break;case 1:d=l,f=s,h=0;break;case 2:d=0,f=s,h=l;break;case 3:d=0,f=l,h=s;break;case 4:d=l,f=0,h=s;break;case 5:d=s,f=0,h=l;break;default:d=f=h=0}d=r(255*(d+c)),f=r(255*(f+c)),h=r(255*(h+c))}function a(){function e(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+e(d)+e(f)+e(h)}function s(){return{r:d,g:f,b:h}}function l(){return i(d,f,h)}function c(e){var t;return"object"==typeof e?"r"in e?(d=e.r,f=e.g,h=e.b):"v"in e&&o(e.h,e.s,e.v):(t=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(e))?(d=parseInt(t[1],10),f=parseInt(t[2],10),h=parseInt(t[3],10)):(t=/#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(e))?(d=parseInt(t[1],16),f=parseInt(t[2],16),h=parseInt(t[3],16)):(t=/#([0-F])([0-F])([0-F])/gi.exec(e))&&(d=parseInt(t[1]+t[1],16),f=parseInt(t[2]+t[2],16),h=parseInt(t[3]+t[3],16)),d=d<0?0:d>255?255:d,f=f<0?0:f>255?255:f,h=h<0?0:h>255?255:h,u}var u=this,d=0,f=0,h=0;e&&c(e),u.toRgb=s,u.toHsv=l,u.toHex=a,u.parse=c}var t=Math.min,n=Math.max,r=Math.round;return e}),r(wt,[De,we,pe,xt],function(e,t,n,r){return e.extend({Defaults:{classes:"widget colorpicker"},init:function(e){this._super(e)},postRender:function(){function e(e,t){var r=n.getPos(e),i,o;return i=t.pageX-r.x,o=t.pageY-r.y,i=Math.max(0,Math.min(i/e.clientWidth,1)),o=Math.max(0,Math.min(o/e.clientHeight,1)),{x:i,y:o}}function i(e,t){var i=(360-e.h)/360;n.css(d,{top:100*i+"%"}),t||n.css(h,{left:e.s+"%",top:100-e.v+"%"}),f.style.background=new r({s:100,v:100,h:e.h}).toHex(),s.color().parse({s:e.s,v:e.v,h:e.h})}function o(t){var n;n=e(f,t),c.s=100*n.x,c.v=100*(1-n.y),i(c),s.fire("change")}function a(t){var n;n=e(u,t),c=l.toHsv(),c.h=360*(1-n.y),i(c,!0),s.fire("change")}var s=this,l=s.color(),c,u,d,f,h;u=s.getEl("h"),d=s.getEl("hp"),f=s.getEl("sv"),h=s.getEl("svp"),s._repaint=function(){c=l.toHsv(),i(c)},s._super(),s._svdraghelper=new t(s._id+"-sv",{start:o,drag:o}),s._hdraghelper=new t(s._id+"-h",{start:a,drag:a}),s._repaint()},rgb:function(){return this.color().toRgb()},value:function(e){var t=this;return arguments.length?(t.color().parse(e),void(t._rendered&&t._repaint())):t.color().toHex()},color:function(){return this._color||(this._color=new r),this._color},renderHtml:function(){function e(){var e,t,n="",i,a;for(i="filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=",a=o.split(","),e=0,t=a.length-1;e';return n}var t=this,n=t._id,r=t.classPrefix,i,o="#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000",a="background: -ms-linear-gradient(top,"+o+");background: linear-gradient(to bottom,"+o+");";return i='
    '+e()+'
    ','
    '+i+"
    "}})}),r(Nt,[De],function(e){return e.extend({init:function(e){var t=this;e.delimiter||(e.delimiter="\xbb"),t._super(e),t.classes.add("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select",{value:t.row()[n],index:n})}),t.row(t.settings.row)},focus:function(){var e=this;return e.getEl().firstChild.focus(),e},row:function(e){return arguments.length?(this.state.set("row",e),this):this.state.get("row")},renderHtml:function(){var e=this;return'
    '+e._getDataPathHtml(e.state.get("row"))+"
    "},bindStates:function(){var e=this;return e.state.on("change:row",function(t){e.innerHtml(e._getDataPathHtml(t.value))}),e._super()},_getDataPathHtml:function(e){var t=this,n=e||[],r,i,o="",a=t.classPrefix;for(r=0,i=n.length;r0?'":"")+'
    '+n[r].name+"
    ";return o||(o='
    \xa0
    '),o}})}),r(Et,[Nt],function(e){return e.extend({postRender:function(){function e(e){if(1===e.nodeType){if("BR"==e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}var t=this,n=t.settings.editor;return n.settings.elementpath!==!1&&(t.on("select",function(e){n.focus(),n.selection.select(this.row()[e.index].element),n.nodeChanged()}),n.on("nodeChange",function(r){for(var i=[],o=r.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=n.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});if(s.isDefaultPrevented()||i.push({name:s.name,element:o[a]}),s.isPropagationStopped())break}t.row(i)})),t._super()}})}),r(_t,[xe],function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.classes.add("formitem"),t.preRender(e),'
    '+(e.settings.title?'
    '+e.settings.title+"
    ":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(St,[xe,_t,m],function(e,t,n){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var e=this,r=e.items();e.settings.formItemDefaults||(e.settings.formItemDefaults={layout:"flex",autoResize:"overflow",defaults:{flex:1}}),r.each(function(r){var i,o=r.settings.label;o&&(i=new t(n.extend({items:{type:"label",id:r._id+"-l",text:o,flex:0,forId:r._id,disabled:r.disabled()}},e.settings.formItemDefaults)),i.type="formitem",r.aria("labelledby",r._id+"-l"),"undefined"==typeof r.settings.flex&&(r.settings.flex=1),e.replace(r,i),i.add(r))})},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.fromJSON(e.settings.data)},bindStates:function(){function e(){var e=0,n=[],r,i,o;if(t.settings.labelGapCalc!==!1)for(o="children"==t.settings.labelGapCalc?t.find("formitem"):t.items(),o.filter("formitem").each(function(t){var r=t.items()[0],i=r.getEl().clientWidth;e=i>e?i:e,n.push(r)}),i=t.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth=e+i}var t=this;t._super(),t.on("show",e),e()}})}),r(kt,[St],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'
    '+(e.settings.title?''+e.settings.title+"":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(Tt,[vt,m],function(e,t){return e.extend({init:function(e){var n=this,r=tinymce.activeEditor,i=r.settings,o,a,s;e.spellcheck=!1,s=i.file_picker_types||i.file_browser_callback_types,s&&(s=t.makeMap(s,/[, ]/)),s&&!s[e.filetype]||(a=i.file_picker_callback,!a||s&&!s[e.filetype]?(a=i.file_browser_callback,!a||s&&!s[e.filetype]||(o=function(){a(n.getEl("inp").id,n.value(),e.filetype,window)})):o=function(){var i=n.fire("beforecall").meta;i=t.extend({filetype:e.filetype},i),a.call(r,function(e,t){n.value(e).fire("change",{meta:t})},n.value(),i)}),o&&(e.icon="browse",e.onaction=o),n._super(e)}})}),r(Rt,[ht],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox;e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}})}),r(At,[ht],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g,v=[],y,b,C,x,w,N,E,_,S,k,T,R,A,B,D,L,M,P,O,H,I,F,z=Math.max,U=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e.paddingBox,a=e.settings,f=e.isRtl()?a.direction||"row-reversed":a.direction,s=a.align,l=e.isRtl()?a.pack||"end":a.pack,c=a.spacing||0,"row-reversed"!=f&&"column-reverse"!=f||(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==f?(S="y",E="h",_="minH",k="maxH",R="innerH",T="top",A="deltaH",B="contentH",O="left",M="w",D="x",L="innerW",P="minW",H="right",I="deltaW",F="contentW"):(S="x",E="w",_="minW",k="maxW",R="innerW",T="left",A="deltaW",B="contentW",O="top",M="h",D="y",L="innerH",P="minH",H="bottom",I="deltaH",F="contentH"),d=i[R]-o[T]-o[T],N=u=0,t=0,n=r.length;t0&&(u+=g,p[k]&&v.push(h),p.flex=g),d-=p[_],y=o[O]+p[P]+o[H],y>N&&(N=y);if(x={},d<0?x[_]=i[_]-d+i[A]:x[_]=i[R]-d+i[A],x[P]=N+i[I],x[B]=i[R]-d,x[F]=N,x.minW=U(x.minW,i.maxW),x.minH=U(x.minH,i.maxH),x.minW=z(x.minW,i.startMinWidth),x.minH=z(x.minH,i.startMinHeight),!i.autoResize||x.minW==i.minW&&x.minH==i.minH){for(C=d/u,t=0,n=v.length;tb?(d-=p[k]-p[_],u-=p.flex,p.flex=0,p.maxFlexSize=b):p.maxFlexSize=0;for(C=d/u,w=o[T],x={},0===u&&("end"==l?w=d+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-d)/2)+o[T],w<0&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(d/(r.length-1)))),x[D]=o[O],t=0,n=r.length;t0&&(y+=p.flex*C),x[E]=y,x[S]=w,h.layoutRect(x),h.recalc&&h.recalc(),w+=y+c}else if(x.w=x.minW,x.h=x.minH,e.layoutRect(x),this.recalc(e),null===e._lastRect){var W=e.parent();W&&(W._lastRect=null,W.recalc())}}})}),r(Bt,[ft],function(e){return e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})},isNative:function(){return!0}})}),r(Dt,[ye,De,ke,m,w,it,d],function(e,t,n,r,i,o,a){function s(e){e.settings.ui_container&&(a.container=i.DOM.select(e.settings.ui_container)[0])}function l(t){t.on("ScriptsLoaded",function(){t.rtl&&(e.rtl=!0)})}function c(e){function t(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;u(i.parents,function(e){if(u(t,function(t){if(n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a)return!1}),a)return!1}),r.value(a)})}}function r(e){e=e.replace(/;$/,"").split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function i(){function t(e){var n=[];if(e)return u(e,function(e){var o={text:e.title,icon:e.icon};if(e.items)o.menu=t(e.items);else{var a=e.format||"custom"+r++;e.format||(e.name=a,i.push(e)),o.format=a,o.cmd=e.cmd}n.push(o)}),n}function n(){var n;return n=t(e.settings.style_formats_merge?e.settings.style_formats?o.concat(e.settings.style_formats):o:e.settings.style_formats||o)}var r=0,i=[],o=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return e.on("init",function(){u(i,function(t){e.formatter.register(t.name,t)})}),{type:"menu",items:n(),onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){if(this.settings.format)return e.formatter.getCssText(this.settings.format)},onPostRender:function(){var t=this;t.parent().on("show",function(){var n,r;n=t.settings.format,n&&(t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))),r=t.settings.cmd,r&&t.active(e.queryCommandState(r))})},onclick:function(){this.settings.format&&l(this.settings.format),this.settings.cmd&&e.execCommand(this.settings.cmd)}}}}function o(t){return function(){var n=this;e.formatter?e.formatter.formatChanged(t,function(e){n.active(e)}):e.on("init",function(){e.formatter.formatChanged(t,function(e){n.active(e)})})}}function a(t){return function(){function n(){return!!e.undoManager&&e.undoManager[t]()}var r=this;t="redo"==t?"hasRedo":"hasUndo",r.disabled(!n()),e.on("Undo Redo AddUndo TypingUndo ClearUndos SwitchMode",function(){r.disabled(e.readonly||!n())})}}function s(){var t=this;e.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function l(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t)}var c;c=i(),u({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:o(n),onclick:function(){l(n)}})}),u({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),u({blockquote:["Blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"],alignnone:["No alignment","JustifyNone"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:o(n)})}),e.addButton("undo",{tooltip:"Undo",onPostRender:a("undo"),cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:a("redo"),cmd:"redo"}),e.addMenuItem("newdocument",{text:"New document",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Meta+Z",onPostRender:a("undo"),cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Meta+Y",onPostRender:a("redo"),cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:s,cmd:"mceToggleVisualAid"}),e.addButton("remove",{tooltip:"Remove",icon:"remove",cmd:"Delete"}),u({cut:["Cut","Cut","Meta+X"],copy:["Copy","Copy","Meta+C"],paste:["Paste","Paste","Meta+V"],selectall:["Select all","SelectAll","Meta+A"],bold:["Bold","Bold","Meta+B"],italic:["Italic","Italic","Meta+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:c}),e.addButton("formatselect",function(){var n=[],i=r(e.settings.block_formats||"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre");return u(i,function(t){n.push({text:t[0],value:t[1],textStyle:function(){return e.formatter.getCssText(t[1])}})}),{type:"listbox",text:i[0][0],values:n,fixedWidth:!0,onselect:l,onPostRender:t(n)}}),e.addButton("fontselect",function(){var n="Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",i=[],o=r(e.settings.font_formats||n);return u(o,function(e){i.push({text:{raw:e[0]},value:e[1],textStyle:e[1].indexOf("dings")==-1?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:i,fixedWidth:!0,onPostRender:t(i,"fontname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var n=[],r="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||r;return u(i.split(" "),function(e){var t=e,r=e,i=e.split("=");i.length>1&&(t=i[0],r=i[1]),n.push({text:t,value:r})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:n,fixedWidth:!0,onPostRender:t(n,"fontsize"),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:c})}var u=r.each;o.on("AddEditor",function(e){var t=e.editor;l(t),c(t),s(t)}),e.translate=function(e){return o.translate(e)},t.tooltips=!a.iOS}),r(Lt,[ht],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g,v,y,b,C,x,w,N,E=[],_=[],S,k,T,R,A,B;t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,C=t.alignH||t.align,x=t.alignV||t.align,g=e.paddingBox,A="reverseRows"in t?t.reverseRows:e.isRtl(),C&&"string"==typeof C&&(C=[C]),x&&"string"==typeof x&&(x=[x]);for(d=0;dE[d]?S:E[d],_[f]=k>_[f]?k:_[f];for(T=o.innerW-g.left-g.right,w=0,d=0;d0?y:0),T-=(d>0?y:0)+E[d];for(R=o.innerH-g.top-g.bottom,N=0,f=0;f0?b:0),R-=(f>0?b:0)+_[f];if(w+=g.left+g.right,N+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=N+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var D;D="start"==t.packV?0:R>0?Math.floor(R/n):0;var L=0,M=t.flexWidths;if(M)for(d=0;d'},src:function(e){this.getEl().src=e},html:function(e,n){var r=this,i=this.getEl().contentWindow.document.body;return i?(i.innerHTML=e,n&&n()):t.setTimeout(function(){r.html(e)}),this}})}),r(Pt,[De],function(e){return e.extend({init:function(e){var t=this;t._super(e),t.classes.add("widget").add("infobox"),t.canFocus=!1},severity:function(e){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(e)},help:function(e){this.state.set("help",e)},renderHtml:function(){var e=this,t=e.classPrefix;return'
    '+e.encode(e.state.get("text"))+'
    '},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl("body").firstChild.data=e.encode(t.value),e.state.get("rendered")&&e.updateLayoutRect()}),e.state.on("change:help",function(t){e.classes.toggle("has-help",t.value),e.state.get("rendered")&&e.updateLayoutRect()}),e._super()}})}),r(Ot,[De,pe],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t.classes.add("widget").add("label"),t.canFocus=!1,e.multiline&&t.classes.add("autoscroll"),e.strong&&t.classes.add("strong")},initLayoutRect:function(){var e=this,n=e._super();if(e.settings.multiline){var r=t.getSize(e.getEl());r.width>n.maxW&&(n.minW=n.maxW,e.classes.add("multiline")),e.getEl().style.width=n.minW+"px",n.startMinH=n.h=n.minH=Math.min(n.maxH,t.getSize(e.getEl()).height)}return n},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},severity:function(e){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(e)},renderHtml:function(){var e=this,t,n,r=e.settings.forId;return!r&&(n=e.settings.forName)&&(t=e.getRoot().find("#"+n)[0],t&&(r=t._id)),r?'":''+e.encode(e.state.get("text"))+""},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.innerHtml(e.encode(t.value)),e.state.get("rendered")&&e.updateLayoutRect()}),e._super()}})}),r(Ht,[xe],function(e){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.classes.add("toolbar")},postRender:function(){var e=this;return e.items().each(function(e){e.classes.add("toolbar-item")}),e._super()}})}),r(It,[Ht],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),r(Ft,[pt,be,It],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),e=t.settings,t.classes.add("menubtn"),e.fixedWidth&&t.classes.add("fixed-width"),t.aria("haspopup",!0),t.state.set("menu",e.menu||t.render())},showMenu:function(){var e=this,n;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(n=e.state.get("menu")||[],n.length?n={type:"menu",items:n}:n.type=n.type||"menu",n.renderTo?e.menu=n.parent(e).show().renderTo():e.menu=t.create(n).parent(e).renderTo(),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control.parent()===e.menu&&(t.stopPropagation(),e.focus(),e.hideMenu())}),e.menu.on("select",function(){e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type),e.aria("expanded","show"==t.type)}).fire("show")),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),void e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]))},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide())},activeMenu:function(e){this.classes.toggle("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon,o,a=e.state.get("text"),s="";return o=e.settings.image,o?(i="none","string"!=typeof o&&(o=window.getSelection?o[0]:o[1]),o=" style=\"background-image: url('"+o+"')\""):o="",a&&(e.classes.add("btn-has-text"),s=''+e.encode(a)+""),i=e.settings.icon?r+"ico "+r+"i-"+i:"",e.aria("role",e.parent()instanceof n?"menuitem":"button"),'
    '},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.aria&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},bindStates:function(){var e=this;return e.state.on("change:menu",function(){e.menu&&e.menu.remove(),e.menu=null}),e._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}});return i}),r(zt,[De,be,d,u],function(e,t,n,r){return e.extend({Defaults:{border:0,role:"menuitem"},init:function(e){var t=this,n;t._super(e),e=t.settings,t.classes.add("menu-item"),e.menu&&t.classes.add("menu-item-expand"),e.preview&&t.classes.add("menu-item-preview"),n=t.state.get("text"),"-"!==n&&"|"!==n||(t.classes.add("menu-item-sep"),t.aria("role","separator"),t.state.set("text","-")),e.selectable&&(t.aria("role","menuitemcheckbox"),t.classes.add("menu-item-checkbox"),e.icon="selected"),e.preview||e.selectable||t.classes.add("menu-item-normal"),t.on("mousedown",function(e){e.preventDefault()}),e.menu&&!e.ariaHideMenu&&t.aria("haspopup",!0)},hasMenus:function(){return!!this.settings.menu},showMenu:function(){var e=this,n=e.settings,r,i=e.parent();if(i.items().each(function(t){t!==e&&t.hideMenu()}),n.menu){r=e.menu,r?r.show():(r=n.menu,r.length?r={type:"menu",items:r}:r.type=r.type||"menu",i.settings.itemDefaults&&(r.itemDefaults=i.settings.itemDefaults),r=e.menu=t.create(r).parent(e).renderTo(),r.reflow(),r.on("cancel",function(t){t.stopPropagation(),e.focus(),r.hide()}),r.on("show hide",function(e){e.control.items().each(function(e){e.active(e.settings.selected)})}).fire("show"),r.on("hide",function(t){t.control===r&&e.classes.remove("selected")}),r.submenu=!0),r._parentMenu=i,r.classes.add("menu-sub");var o=r.testMoveRel(e.getEl(),e.isRtl()?["tl-tr","bl-br","tr-tl","br-bl"]:["tr-tl","br-bl","tl-tr","bl-br"]);r.moveRel(e.getEl(),o),r.rel=o,o="menu-sub-"+o,r.classes.remove(r._lastRel).add(o),r._lastRel=o,e.classes.add("selected"),e.aria("expanded",!0)}},hideMenu:function(){var e=this;return e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide(),e.aria("expanded",!1)),e},renderHtml:function(){function e(e){var t,r,i={};for(i=n.mac?{alt:"⌥",ctrl:"⌘",shift:"⇧",meta:"⌘"}:{meta:"Ctrl"},e=e.split("+"),t=0;t'+("-"!==a?'\xa0":"")+("-"!==a?''+a+"":"")+(c?'
    '+c+"
    ":"")+(i.menu?'
    ':"")+""},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var i=e.getEl("text");i&&i.setAttribute("style",n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),r.requestAnimationFrame(function(){e.parent().hideAll()})))}),e._super(),e},hover:function(){var e=this;return e.parent().items().each(function(e){e.classes.remove("selected")}),e.classes.toggle("selected",!0),e},active:function(e){return"undefined"!=typeof e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(Ut,[g,ye,u],function(e,t,n){return function(r,i){var o=this,a,s=t.classPrefix,l;o.show=function(t,c){function u(){a&&(e(r).append('
    '),c&&c())}return o.hide(),a=!0,t?l=n.setTimeout(u,t):u(),o},o.hide=function(){var e=r.lastChild;return n.clearTimeout(l),e&&e.className.indexOf("throbber")!=-1&&e.parentNode.removeChild(e),a=!1,o}}}),r(Wt,[ke,zt,Ut,m],function(e,t,n,r){return e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){var t=this;if(e.autohide=!0,e.constrainToViewport=!0,"function"==typeof e.items&&(e.itemsFactory=e.items,e.items=[]),e.itemDefaults)for(var n=e.items,i=n.length;i--;)n[i]=r.extend({},e.itemDefaults,n[i]);t._super(e),t.classes.add("menu")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("select")},load:function(){function e(){t.throbber&&(t.throbber.hide(),t.throbber=null)}var t=this,r,i;i=t.settings.itemsFactory,i&&(t.throbber||(t.throbber=new n(t.getEl("body"),!0),0===t.items().length?(t.throbber.show(),t.fire("loading")):t.throbber.show(100,function(){t.items().remove(),t.fire("loading")}),t.on("hide close",e)),t.requestTime=r=(new Date).getTime(),t.settings.itemsFactory(function(n){return 0===n.length?void t.hide():void(t.requestTime===r&&(t.getEl().style.width="",t.getEl("body").style.width="",e(),t.items().remove(),t.getEl("body").innerHTML="",t.add(n),t.renderNew(),t.fire("loaded")))}))},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;if(n.icon||n.image||n.selectable)return e._hasIcons=!0,!1}),e.settings.itemsFactory&&e.on("postrender",function(){e.settings.itemsFactory&&e.load()}),e._super()}})}),r(Vt,[Ft,Wt],function(e,t){return e.extend({init:function(e){function t(r){for(var a=0;a0&&(o=r[0].text,n.state.set("value",r[0].value)),n.state.set("menu",r)),n.state.set("text",e.text||o),n.classes.add("listbox"),n.on("select",function(t){var r=t.control;a&&(t.lastControl=a),e.multiple?r.active(!r.active()):n.value(t.control.value()),a=r})},bindStates:function(){function e(e,n){e instanceof t&&e.items().each(function(e){e.hasMenus()||e.active(e.value()===n)})}function n(e,t){var r;if(e)for(var i=0;i'},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r(jt,[De],function(e){function t(e){var t="";if(e)for(var n=0;n'+e[n]+"";return t}return e.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(e){var t=this;t._super(e),t.settings.size&&(t.size=t.settings.size),t.settings.options&&(t._options=t.settings.options),t.on("keydown",function(e){var n;13==e.keyCode&&(e.preventDefault(),t.parents().reverse().each(function(e){if(e.toJSON)return n=e,!1}),t.fire("submit",{data:n.toJSON()}))})},options:function(e){return arguments.length?(this.state.set("options",e),this):this.state.get("options")},renderHtml:function(){var e=this,n,r="";return n=t(e._options),e.size&&(r=' size = "'+e.size+'"'),'"},bindStates:function(){var e=this;return e.state.on("change:options",function(n){e.getEl().innerHTML=t(n.value)}),e._super()}})}),r(Yt,[De,we,pe],function(e,t,n){function r(e,t,n){return en&&(e=n),e}function i(e,t,n){e.setAttribute("aria-"+t,n)}function o(e,t){var r,o,a,s,l,c;"v"==e.settings.orientation?(s="top",a="height",o="h"):(s="left",a="width",o="w"),c=e.getEl("handle"),r=(e.layoutRect()[o]||100)-n.getSize(c)[a],l=r*((t-e._minValue)/(e._maxValue-e._minValue))+"px",c.style[s]=l,c.style.height=e.layoutRect().h+"px",i(c,"valuenow",t),i(c,"valuetext",""+e.settings.previewFilter(t)),i(c,"valuemin",e._minValue),i(c,"valuemax",e._maxValue)}return e.extend({init:function(e){var t=this;e.previewFilter||(e.previewFilter=function(e){return Math.round(100*e)/100}),t._super(e),t.classes.add("slider"),"v"==e.orientation&&t.classes.add("vertical"),t._minValue=e.minValue||0,t._maxValue=e.maxValue||100,t._initValue=t.state.get("value")},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
    '},reset:function(){this.value(this._initValue).repaint()},postRender:function(){function e(e,t,n){return(n+e)/(t-e)}function i(e,t,n){return n*(t-e)-e}function o(t,n){function o(o){var a;a=s.value(),a=i(t,n,e(t,n,a)+.05*o),a=r(a,t,n),s.value(a),s.fire("dragstart",{value:a}),s.fire("drag",{value:a}),s.fire("dragend",{value:a})}s.on("keydown",function(e){switch(e.keyCode){case 37:case 38:o(-1);break;case 39:case 40:o(1)}})}function a(e,i,o){var a,l,c,p,m;s._dragHelper=new t(s._id,{handle:s._id+"-handle",start:function(e){a=e[u],l=parseInt(s.getEl("handle").style[d],10),c=(s.layoutRect()[h]||100)-n.getSize(o)[f],s.fire("dragstart",{value:m})},drag:function(t){var n=t[u]-a;p=r(l+n,0,c),o.style[d]=p+"px",m=e+p/c*(i-e),s.value(m),s.tooltip().text(""+s.settings.previewFilter(m)).show().moveRel(o,"bc tc"),s.fire("drag",{value:m})},stop:function(){s.tooltip().hide(),s.fire("dragend",{value:m})}})}var s=this,l,c,u,d,f,h;l=s._minValue,c=s._maxValue,"v"==s.settings.orientation?(u="screenY",d="top",f="height",h="h"):(u="screenX",d="left",f="width",h="w"),s._super(),o(l,c,s.getEl("handle")),a(l,c,s.getEl("handle"))},repaint:function(){this._super(),o(this,this.value())},bindStates:function(){var e=this;return e.state.on("change:value",function(t){o(e,t.value)}),e._super()}})}),r(Xt,[De],function(e){return e.extend({renderHtml:function(){var e=this;return e.classes.add("spacer"),e.canFocus=!1,'
    '}})}),r(Kt,[Ft,pe,g],function(e,t,n){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e=this,r=e.getEl(),i=e.layoutRect(),o,a;return e._super(),o=r.firstChild,a=r.lastChild,n(o).css({width:i.w-t.getSize(a).width,height:i.h-2}),n(a).css({height:i.h-2}),e},activeMenu:function(e){var t=this;n(t.getEl().lastChild).toggleClass(t.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r,i=e.state.get("icon"),o=e.state.get("text"),a="";return r=e.settings.image,r?(i="none","string"!=typeof r&&(r=window.getSelection?r[0]:r[1]),r=" style=\"background-image: url('"+r+"')\""):r="",i=e.settings.icon?n+"ico "+n+"i-"+i:"",o&&(e.classes.add("btn-has-text"),a=''+e.encode(o)+""),'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){var n=e.target;if(e.control==this)for(;n;){if(e.aria&&"down"!=e.aria.key||"BUTTON"==n.nodeName&&n.className.indexOf("open")==-1)return e.stopImmediatePropagation(),void(t&&t.call(this,e));n=n.parentNode}}),delete e.settings.onclick,e._super()}})}),r(Gt,[Bt],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}})}),r(Jt,[Ee,g,pe],function(e,t,n){return e.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var n;this.activeTabId&&(n=this.getEl(this.activeTabId),t(n).removeClass(this.classPrefix+"active"),n.setAttribute("aria-selected","false")),this.activeTabId="t"+e,n=this.getEl("t"+e),n.setAttribute("aria-selected","true"),t(n).addClass(this.classPrefix+"active"),this.items()[e].show().fire("showtab"),this.reflow(),this.items().each(function(t,n){e!=n&&t.hide()})},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){var o=e._id+"-t"+i;t.aria("role","tabpanel"),t.aria("labelledby",o),n+='"}),'
    '+n+'
    '+t.renderHtml(e)+"
    "},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,t,r,i;r=n.getSize(e.getEl("head")).width,r=r<0?0:r,i=0,e.items().each(function(e){r=Math.max(r,e.layoutRect().minW),i=Math.max(i,e.layoutRect().minH)}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=n.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,t=e._super(),t.deltaH+=o,t.innerH=t.h-t.deltaH,t}})}),r(Qt,[De,m,pe],function(e,t,n){return e.extend({init:function(e){var t=this;t._super(e),t.classes.add("textbox"),e.multiline?t.classes.add("multiline"):(t.on("keydown",function(e){var n;13==e.keyCode&&(e.preventDefault(),t.parents().reverse().each(function(e){if(e.toJSON)return n=e,!1}),t.fire("submit",{data:n.toJSON()}))}),t.on("keyup",function(e){t.state.set("value",e.target.value)}))},repaint:function(){var e=this,t,n,r,i,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e.borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,r=e.settings,i,o;return i={id:e._id,hidefocus:"1"},t.each(["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"],function(e){i[e]=r[e]}),e.disabled()&&(i.disabled="disabled"),r.subtype&&(i.type=r.subtype),o=n.create(r.multiline?"textarea":"input",i),o.value=e.state.get("value"),o.className=e.classes,o.outerHTML},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var e=this;e.getEl().value=e.state.get("value"),e._super(),e.$el.on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)})},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.getEl().value!=t.value&&(e.getEl().value=t.value)}),e.state.on("change:disabled",function(t){e.getEl().disabled=t.value}), +e._super()},remove:function(){this.$el.off(),this._super()}})}),r(Zt,[],function(){var e=this||window,t=function(){return e.tinymce};return"function"==typeof e.define&&(e.define.amd||e.define("ephox/tinymce",[],t)),{}}),a([l,c,u,d,f,h,m,g,v,y,C,w,N,E,T,A,B,D,L,M,P,O,I,F,j,Y,J,Q,oe,ae,se,le,ue,fe,he,ve,ye,be,Ce,xe,we,Ne,Ee,_e,Se,ke,Te,Re,Ae,Be,De,Le,Me,Pe,Ie,ze,tt,nt,rt,it,at,st,lt,ct,ut,dt,ft,ht,pt,mt,gt,vt,yt,bt,Ct,xt,wt,Nt,Et,_t,St,kt,Tt,Rt,At,Bt,Dt,Lt,Mt,Pt,Ot,Ht,It,Ft,zt,Ut,Wt,Vt,$t,qt,jt,Yt,Xt,Kt,Gt,Jt,Qt])}(this); \ No newline at end of file diff --git a/public/mosaico/templates/versafix-1/edres/_full.png b/public/mosaico/templates/versafix-1/edres/_full.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c50514cc8ebbc9ed88c919bfb12832c8e36e8c GIT binary patch literal 85618 zcmbTe1z1$;-!?jQ3P>Xz0s;bp64KHkA>AF)B_JJ=5()w;4INp&{}&;i6^9%Gp@GOsh^cubZ$rIY$;VUH zE{a-{XwdyR{2c;gndO|#epjKXq2n` z{Lc{L(N+uaEvwqC}WqV}T5 z`}{=Eb)BZVvYJ-diBk0^vEbcIg;ik~e6@?Po=V_@rSHzsSMnzGy=vIO@~!kIOi9jc z1CH(H#kDkXq*YEr^kVmqj(qPQQjxWA-yO2@o%FakinyZhaIZZht)Sy_MtguO9A$~S z+qy3)Lgi_TwyW@w?|7MU23vih%#B>?XRCjA!0ID<7J+KkU0#Ue6;->2J7Rzlc8t(1 zsnpLm=TpDVS#(&IYWeM2O$9bNxh&hjAIg)pluEmP$N@d$cu0eTC#0wLN11(Fohw6x zI6fC2t;*VscRa8MuBYh1Xt4y`Ej!hY>Nx&f2`0O8%*VO#)IWgErd@7jSPz~|7`LN& z2I$`*Ck+P7d-n#K!UnRSMF{#aK2)QSo08#2Z8orIxZ(Bf-V)ZYi+3~U7tbOwMoa6c zTQ%JgUByj;Z$E*}KTa znyj!66No)r`VO!8Gre?aQOox-Pi99Fm0mhh{DU4-Kcs=g=!G<@87%i8w4nw9(PR7i zvyT|aot5J*^|KRa+Yi55I?#HGM1KR@I!DRZ9~#;eiDQgi)7@d?l2KJbK0rAU!8+dQ z==3~%-nX7u1vhd7m-Lk=qbb}7N4Dw%R z*GK1ZYiDrke((J2xiS9|!3q*ClQ5Y7){XIXfrCg)=u`>>Vz~xCht6LSbeU48Z;jtQ zskh}aDdWr39H6b3aFws-te=Ko)%CB|mi&QfJ zgIC!XU1*uT%u`4m$H>*kCd`B|tmzn4F#<|rOe{Jn%Q_xFka zyS4g1nzDayl8y^N`hR0Tc(8c5(j&td_sN_rkcP0a@Aq#x(x{DLjvg)vr=4F#jG0gz4?<;_K`0>He-nyjjUnpER?e1HUXITgm&ZI!gp9E0Nc!>PN6AU5m=ewi zO6s-SHk2x4JYC<7Bvxz5|%fz!8knU z%Z8AQ;9F#^AiwvffPx=?n6%;-qoS7Ha};|j#$&DMNDqTaRy|(`)M2!(OkR-sIAFv{ z*!Z9y3c5p9Hsl;g{-nu-l74Nj6{RY2!iv8oikMpZ4*VEN?io`TTvy*a`Hw%A^|#Ek zWSW>5)o5_X^f;LS*~2^eFbKRN>!0iP;JUaR?foyjyeV#4QQifm|8ob&QEXOpT?pKP ze|f2=%!}ta@VDPMpx-paALHLCeuBYV@>dYScjLd~NPhDHOx1ng1cepzTEK+R@J{?Y zT2%0qzmF`n^6mX72l5hFz+``kN+4K1aFRm+)6)CTgP!-ZUGeu7(Q}I>YHY?`gIxIG z%@!3cwme`ezbY_J*z#xInYEuM zGYU0gx>uYtGBXiTgAnr6FtM<((1TxrW%?|G?AAajmGybo@%Yi4FE7XbSxI>C>mV1qDGJCK;`=5@6Pht*p??v?4JJXwboRaaC0U z2HC(Nt6r@bg;s1FoTby9>4dPOTn$FdmX9GvO;gKM|8MtvQ&yFNE(h1oxr`;v6?VHrBdz@APmq@BDn=#(0Zq$Iorjrxa>DIEov*g%?QTb`_j26A$)w0_m-qwsQQ7kn6EdF-4t?S zkL0-V^q&=H zA9;Hlo3@pn#J7rr_BCy`JS5&T43>Gsul~d_I8|3yXM)BU<787$_~CMFotEy z)Kt~hhHY%Tz2v>h!ovwAavB{ONzcp-WGBH4#=}NcQCCOF8OETwF&&(k2pbwwVNWne zCK=(%sIULN%KQKoDI_F>lb2Uo(scOe>(c3+5nfqOiyxM92_HL5(2)@WhMdQP2a^*Y(R0WlrU*Uw@Fb zlcn<$puhopl{Mtfwz#&e>>-$}ZZmxMy*U)fb6#G{W97+YS99~nJF}R9{@~Pz(m;&( z&lEg2Z3UP0KJD}m4467P;(=okE`c~ZJL~u|1yAxJRSX(EJv~_#g5n0SGT5IOFo4<9 zEHMZkvidM&)xN&YY|BHAjf#XU)_i>}$im8sAWEBV=7IYIC73d{;*~|sbXjSse@BNT z3j+f+rhf$4bQXP^UtIT(^`Xxmle7(^){>T%OefBub@*yul3H_IH-m(V1h}^CCcq&3 zitAf@6ge+m42;`3f3tCOdz;OErZzx}EhHf!foR&**Ef|4Yf|LlTjy)kAh99EA9h6= ztp1hFib_gIkeg@Zl$62KJ3mE`!BP%2tbXAU4AnseW&<2wQ5ydS_r2D=Gx~VBA%o8h zvblwYKbEAOlMDAtg{8S=j|A(eb0)ga1uoe;F?1%zthI)D* z=J(J_1;3Q!<*97{YHCW2cml!3#igf;8NRmz%U_EPpb-PYSJ?N*{YY*{HafVszk)#T z$LvTNLVBFb=3FgX57-A0)Kql&$%nu(^?a~RNY!FP4QrkU-3r zq6jPzL!9h~SG3582wmlo5fPYSnPFfgpFclzefLf*!F*(FEc542)D|PKH<3nGZjJEgX?bl!TaDRHT0X`ZXiL=H}*t>r1Dj)z=L87{Hd% z#LLm*p*Ne9r9+{VV8aTy@BV=DWDSL>v7r2#j|mUQkSyGsc`PdptUeew9|g|K@Ue*r zba1b_ny22EnXt9J9l6gbRx4Z?Y=6l;%@q1RCc`JP_$lplV_emCeHPsJZ93OE!aEaHjkacsYpNH85{O#TxJEFN;zSGic^q`naS2DcXLsy`VQU|*Y*k)~+TZIyA) zTGI=Cs@8kK%R4*=5-a}}qvqvhhMze(L|dR!Ki)i1P*O7W^n96hR`_C>G0q^9*#wyQ zZnIcL?{}`Qz-=MOtXYSKhH^8Oju65pJ?TC{2=5+4H6W#0Y*zO6KiB*#D;`y$uxjc$ z%8|^8KNSc5V0fdwKSh8@e1@FYo`w|rPbvv3{tr#Ea0$n?e#&-}XTSkgR#&%zzIvxk z+DZvh<={T7tgKXin3|f}2@WDSJl59M%BreC_4O~Yv9XP8ZP~U|rIsB`w9B>FNU5ko z2G)X@BSzvyso0H}LbQ1OA91NvCFDd(sQj?A2Ger@dJq%sVXW%M)Cmg1ub0rLz- z0=67jymhXMiV7_)t@N@|Sk7a!N$>m%8d?1QRG|VZO}9V0_w6*k=O%JZ>XTxERwBo~ zeq9QV%hx`OTdTLh^+QY!J8-v`RWfq2&L^^tVv5A7~>iAzaGHxKy zSuIn4+Rc8-#>VU%XqGFVs>Bp16>=lN*~LKoX?O9V1LLPBEZg)c?LcF!31Yf@o}>r5)wV65Z~M(ixc8o}UlAC4a0okkpFcEySB4YRB1%2UAjISLCydhB z1_M=qb#8PNrC}C_Mo9bJ&eV(gCa^ngYzpYyzdPJIy*QDxv9{hH6vs6_+nx1T3TMiF zmKJ8|;{&C0i`7(QjH`^2xeWFZ9N%z#(*g`c1a+0kxa!J`Uu}8<#8yeBV2<${>4Asf zu~c-2$-al+{)M-djg7dMm%t5(SftXP;0C`^LkEsF*N*0buj zod_#ZSwKqQha(ShW5za1C$1NO!E zXtnQn55!lh8FGwqAVA18nFayKeH_?pJ(0W(qOPw)soTiIs!BrHVLQFwxWgpqzJC9n zS!b9t94_Q_I_PGc7G3YMh65talOy0evp~f15(VsuLMt!)>Gt*yOE8A%ixnLIKljqNmPeV`5>0cg+yeAflvUruX>7x*Z4hygLrT9)T9F9 z)H=S{FDOGOxUiisW)mz-y(>zyjNV#e9uD8RdPd z`yiso=Qq2!(J(3`x6Y7~L_4&x7n#Ufa{1&-?l7I9~FqU$3+=Y*VlN9^f+>xT+ zM=CK8liACz!#_-;%;3|{wQ~@owJmlX`RuoyuioBFl$@VUlS-lc9Xs5ji$P$w@Vh8u zNMiJ_55Hde<}IA_B|A&H2g-S>m$MCP?hzx2;SuiXau5o^q$T)8S{yp=+%KOirtNmL z=~8u)=P1FCH||0-wDz;-&+%7L`xiBD5}lTo`8#xOo4D6EHd?+3`?VZ6^Q{E#BCF#e zqX$A%2x-w@N%=YzeR>ye_4zDIK2|N^fM{+w3Z9Y%4f@*28-Q!rM%{G$(oDNEJn;^j z3GEfi?#H$#xUNjOI_pA~d1vRC8NOQvwl=n{El6G)mN`l(Vw&STz)10=p;;=X7{bu` zDQ=YU12NYHEHTzanoLZqbZC0G*iKR=#%HVNz^d1$n<1+Y@XL$d9T0Vrdd6_9DW8cz zamO!9#PN_7^h9t)s1IEDAabJ0@{cX^#?KF#gfPrU&#zeL&xu*GX!&Y(Tjq*R_609> z&xh%+XnVNoac*&%-WhEPMTECKdFpDpJrMf)_wUT_TWyP_bhtXZ2X9R~0_FwNFWhy{ zgc}D_ZY$qyOc#0K8f_T>b_8|yOt~WCEIE4)4tM11$T34v-{Y5u!eC&#Ds^Mz&$%Rc z#>BKO&IrgUDpw6Q;HvE%IPoPfDHDS+irmi#*wBk#qS812PS4*jjsNxKfcd@HC@=@| z`W+J_c-x(}Fe94YY+hNH zxT9@N8co4}m~&=h$)1R1Un8)_1y0HS6&44EB~Q|41x8xgH!2dGpJke@p10lug-;i5 z+sEhTqEAmxXIML#98JeQ&c9z|ov5-Q(bGuZQ{Yfc7DlV}LBHTwyy2$KSPWp-GDYy- zYbeQB>CQ3QPa8Ktg}m}TZahT2yrzAQ4*$yYf_~5){~^o*+s6%|_&0-ZYfe+Hq@dCs5`4a-tBbS9aHa!eTb8*9h9k}?TjbBTsGCBi zQ*Q-Uv;NA?noy{uF+j98q_3|kf`@|dh#>jgmI^J+ z6XJ0Fe0Fzsho|vqjDr)uDr0slv*+CVr1rWXX0UWJ$^hTgCHvH=wy?l<;7W;;RDx5h z(6BcCNe>lE`dxB%>Js_3K>TjTX(|F#$hVLIUE z%6l>qVS$>WbvQJpS?HK5gy18e&+SWlz4y2zCAe_7yyiorUo{%=o4A~S2~OeL<6;Z% z6Me6;r*2eG686PD+@SNR4AkqLGIxZ?mZjO4i8@0QKH&gdkrUGeZw}k(RFq5MX2*5z zYwzZWlAWDa?Ah-G`qOSk19L^cPfXkL?U4M5G&y`Cn@>KTU#ujN-fll%#V7DM^2V0N zacIN!n#+LsUXG?Ml(k7Olu3Q-f_to)QKt$yqx+pf#}Bs0oBRz=Q=0{ZMB1y{r11pq z7>h&yIEmBy8tal&yYB_V@?SEoanKN^H6I+gJ1r05Q21?$C*N$?OgOEh3ohw(t{dC9 z^H#fyJm_Vsxyla5NZyGVYUMHeHX*$M=O5@K9Tturt+Bkw5)g~(FfmW5Xrw-PjF0ii zQ24w)trLr*(VrxB7OmZ+_I5*?!slk>PfgUmhZ<{PsRG;c@HuK~$@v{JEnPP{{=tu0 zv%+krH^@Jy^dt6+-%6%%2FsK5!(GsDML(jJpruN2m}FqgH2n#s{`C$eMOO&&sLZZ_ zfQNPZ?yZDZ0TE9DQCYat*T$$)&&J%b8LkRn!5>p@-}S4WT%WnGIi-_%?0kRdwQ0)v zo*W?ujVN5(bK8AQ(j!?kC`YUet)_-bLu+WgAar!|gSuYxwh4-$V)~Gc6tn4e6NTUD zsp9b15>lbY1Vr%tvM#CD7PF_)HKtRasd_32WPgO$iY;E4>RqG`tSsS_%^etd(Qj*P zFKRUpik?(^pw}Q(Xel7#W!dOhSQ+7!tNXVQO0w-rP$K4TdLk}1<4w80%Wp!%+0N@Y z>u=w;Dj=fuqeeyiEj%_|at)dH@`8A|`%%U0IEsaZmVJfM{HZs`Wx1MfEu%i=5>jj4 ziC9?f7G7!XfBJoTuFjnVHON@742mf(Mv$DUsD^!mFT_D9zLV9{fsNzSgfj1!hnBMelu}POV&)@xy~|p&S$69r;3q&r##mLtZ8upaUyM1wUB~rM9BVP zunSoa^OR38LoHn=(Xr!;9qnE89L1D+2M1>x8=IhkwVt}(Z~`XBB?(VHl}OrWtja&! zwG|xlsNnRi*S*{W3m*-yO~j__soO&amK;RhE$I&IO4yzwvM;(!%+@>Ew|ccqp7k$v zGo|Y3$oY`{rxsw3b1WqzgBFlavo$vx#i4TTKayP%bO^bH>Hhp6DY7v^IKDMO9S~|D zfEd}$_H|UEJ3iB=21~Flf9c`r1_Tr6yV9=rQ(DUtT_39oD<57O%rex*BmmLXwJQj~-ckJu*E_X<-a#@-Uw8j8Brvo3xU(qAbw9bfU zzyOdtSxjE6EZc1Qsm$te0EbR^xvGY$J9GvN(`XG046NE7Gv7GnoU3O||W0xyd%tn&MKQpEs_(A+H{KVL$!F zxrO(BKL;llM~hi`RyS*U%^DH%f>gtJ)$&_t7_jxqZ$XZkzbYbWXhL2usBzr%p4d?M z8s&T-<;PrqSJ6?}`!kd35)xWn0V(0zQ1gMUD*1ika>~UGhVQnto9;Wi);X}O{UL*f z%0LdH^_w~OgE|LqaY=hUK-RV?({eHsL}4IE5=D8Qt|1y1JIC*RY_W=cy(u+Id}5o}3u!yv>rZjAUtcp6&rk&xWnc{_ie#@@yzpJ1 z>|?CAE5U2#U{^AAvBQMYIH2~7aua*PE zrmCt602je+i|J_N2hyb1*FSm{Rb`iZpj>%Z9?&CcMPG@`0~D; zb{gL2dDNCMH&4AoV`v;t_c$rYJ2?hA9GCYEurCwSnkVb-@a&TX9()iMZ?wlvE+fZu zV1nrRtx4B1xEmKR74I7%rXQ60j<4jzjimO)d*?M5mOUzx=MOFNN()5$?Lj#0fB1D| zr^8d6=-_qf`~&5^)#eK<^gI)d*tCJTb7K+J%3sd%NWf>5c@X7@U@gwZ*e_m^f9t7M z*<*FI^G1-y*=e>Z`Bm_;L}6O8=zQvP+j%!`Qw|?*!2wdmbgH9$$IJ@vevQb>=;~dj zgv9Q}icx~cN0@}#3C280i$@pAy1E|$7_FV~Ohlw)z2!aB;5iQu-8Y3d0m%Ss?dn3; z?}s0xmzAk}p2tQ;taaP@zS<-^5PKXsNx`(C5^KJ?wg#f(^-r^a!2(E~;+k`UBS^P8 zZ7L?gy5M~5$dpk9==)5Q4>_1{0L&-x*uC=c5t>b-LI0YZECKkr9rL)a8b}A$t(z@b z4gQ+*1fSFCXnp^v&X<`B718Q}loM1&(Ir@7bDsXNtr zIAD$2^6xSq!CeJ*m$5^{{d+LZulgaUnCgPtPOLHA<+-*c<_=cR>4i@PRswQO`=zGV zCSjL?uesM}PWhJBhHr<2C9f?1)L+qb`kgZ3|0I^k32|hBmFuVIKcAaqn|^(zn&PN| z<)6t>=G;IqGVSZy!|1)%%a(egB^HaOM0G*z8AByGpYr~kYPLw1UZeY186o{2ei86` zYFb^6`gq7-uY!F`ONyQO>ld|Vv7VS9m9)M-CBVP`;%q379z6n-TWC)r2Yhq10OYX% zHq0&Vuk?$fVj%MbVCHvwK(GOfNK^+oyi}6z;dj-Y?d=b3i=rTffOM1^;vqkO{v3d8 zfTdXYlP$l#wg* zU32LWtU2voI%?qloEpHS$&uzs;y7s@zh!E?IW$bqSu<~R=79_l+m$?l(EJqqsps3L z*Q6Beu1Zuf^|9emT2AIol^Sd_;H@p5?x|2d)K+*cesXuaS=!@bg(P4~`h{C{We?GH z^L8~nz{O)Hgv{?&0C(x`;^X)_*TuQ*iGQ(AZnHDTAV?(Ejuru64kir%t!)5y>x98* zBj^AzXJf+(U_De+RJ@NJ0E!1-8DIf@0=w3ZS~gto7Xz?}nar90@a_QL0+1uwvv+Q8 znHd=ffT8m7@!@px258pU!~_xKIe@{g^*Uo`WMs@0 z)zs8%GvhM0wvO;!J@FhG9P|g&7a(7e>7q~*ui#~EP_>44kdv*^}f%=PV)0wX|ijkvy9;eJ`^ zj3NhS_1-4i*>&vib9xI?=NA+_1FRV+LQ#2U9=Z$&RFJrV3IzL_q)x>I0_1>Bspw(r zs@4@}+HVRbzP?nk41k4t70Uo93>`IdW8;9S=82J@xdTrqpYw8;XK04k)O`ia_d#en z{z%1|gdp8#bg<)lEx4;*fhh)j#Lx=Z_>Nm+PXSj1NGh4w4**mKbVxl^f-az?MGVrz z!>o~ed3ALF!1xR>e}E`1Dk=iyS)`<-gUP{6X?+6&px7nWx6{)^+ZcoxF@lHaVA;Xm zpWl;y{wTP`C>@q6m#wU#5@7XQE^V9%ri^Lwd-03F<9P8tDF%FS5Ob=t0eY?127urX)B-g6B-?noy)l}Q^egWhCE2lN9hh4>ZrL7h32L@ki#OFM>OnQ6q@#r+W z_%qu(LyWTqR0rBGk+|`I6aYIKd|qYXy^>cQ0-G7QLa=5a_W99v3Wnt&NCoIuz)y~h zjDUKdnfiBFU=9I;39xyC5)x4GU}|cLha7-Y)GZOm90977tgNjw13lLIQyQuF7~&Mb zbAVbteL2}(b#d_?RCa)^1zxJAp#drwFo73;?)xX{F@Ym!8ocTIRqsIPqh|8E1=!so z+T9~1!A6ue_f{)wBj^tey_Z+=jXs;UQ}j=e3FqYAsB-f;T69ZmN7Xc4jg#HJ+LYB7 zxBGKsIgk!5qAY8Muq!3~5$;p>VEr6vH717w>Q5W`0&s=|`wkd;GE5q_mhUF8iaX zKL+_U=+DtuWn(ir!^bL4a0T}vL`HGlV4oKgK?}^hBtB>xKKXR}8628pZrRvRG7J!Z zoHf~|5$mcq2UR*n&y|vT&VO-HUH8mSL}W=Dwx&VPF?&bZXyfo3{!t8abBYnod74^1J3iPLf=C z+PCsK*dj%FhsPReiQv4y2Ug}cZ;)N$+>Lcz1+{PVTvFY9Vr~-~-CN=vSx8-b=HM5$ z3zFf>N|IZ=ttZf~%J+|W=IT1lsaZgBggLqlw? zZdJJge+z%_7A}?z>5XN$XA)u=GV1ES6^{=NLd5WZ=R*T=i-3T<2$Pb*Loxa>#%hB+ zKw$$S*1;ikdZ!aubig(Owij@$AW-BgRNl_|2`X&9qKGvE7SQLE8e(l@GXx0tl5zQt zgm!TXG;Z#<82Ke7p??cNB!I8|r}QII3O+T@M09A1zT>eNEYf^;v4;y!gfelGC%5H| z$Iz88W4T`GEPfz(XO9%9^WsIt$d*}65TbS5u5c}yPY#FC#CnTjROqd)J9Ya~b8O8U zq6SZDvMQ;Tk)WGdzv#MKo8LO=ZDQ&-s-5&$J1;XPH>3Oe>2}6Hl>5F7tA0)X$Zmsg z^o49eb@Bb2ejTwqsmj5U;qa2){5Mt%&U+Q<~8@$m3 zZ0*j@4yde2^FGAbov8}~+&73|GC;K!F#ATFMovx-+uGWW7lT2)7qBhO8?JxC3xS;h zF(R-H779OBqK1Q-ClmLb)6l-A!Nk#gv8ERS@7nc0tW>T!x-HN*&Tyld&Qe9QKA!@S^!z)&@4e(Mr&)`av3(qd$yv~ zqUNZ1=~30Y(9>sZ?^$(!ovK%&WJOFI8JF%6dV1Q^6Mt=vE)k3=o^*HG&Zg>mM(%r7 zr>N(>Wq#bqknT3%(%epNHGg3)G2o51c0DCNSb0~;-sZP?ItDkq8CyG`_S=7yx}~6O znEkGYO0DUZ%K!)c>*p!|$8eE@+Mn=!qwSmvYWlo^M~%Leq3$>JO9FpZ?^Z?KEgBt7 zt}E^k{MMgT@|P{k-%#)0O^p*xPqZcL;v?}#rJ z%`^#ndvtX7X+C@eq5dobQ5l{2Y6M?^mYa_cU4^i$wiZ3H=e}&KVzO{O9x*-89HdN+ ze82$^laSmWozUS;pE!zDPz-BfX_+S(vHSs)DDBQc<&UauBX{!MUzSxIm~km2n1d3X zmyt0r_}7$_K1W1Qq483M2qzR&O}LDyK8?nG@!{9S?$&wD-EJ^qjVdXu>1h1?_uci? zigr8;ar0yoP3jCW%<$HO!tc7lki{boX|2C?^oF6|XHUd zul*0h=^?J2Ggi;(2r+5#!w0*`=?Wpaq*7Tbz~i&zZWr=Tw}F}r0s;b8zxEoI2s%(l z0ggFgS!pI)510LXQ&Cq>`7~pl^2d%qW#$h?oVgy2@%jb{=D-nsM^!$1CEL%dYhGMs z+OjJ>&g=KWahG8#?cDi&#FJ0E#-WPv^{r;!XhF>{ud6RM58wbdgQs#hXg$-vXB2?% zlgfH#dY(^=_f9GHBocoJ`A-7N;SVBhMW}soX201lGYtb9k0N5XqLZp7&`VG#i6^N- zyT19yXL4-(GCHb+Z{@ad;%2>=&en3rcGe4`t7%a9W72DZe_Q{3S!0=J^-?g&Z|LZ8 zC_7U&&!#}S|5AI7`rZrHf@88d)&c9XO#|Xf`}4#1HQv}F=eTz`OlX+4quE=pD)cdn zMIzo_lL?kQ=P$~C&B4!=Q2X-X#=6r(b360#r>AG<(BG4H#;nb7RB}H zzGE=bv$ev2$s84N*M(~okF(uQ8eM`>KiQ3~Wb|gW2C@vBZ+lVWdWPz%>WgGh7qp+N zjOPRT{<8YxBad`W11%=0O%NUoY+_(_l0B){mJ74^Z;S+{R5(8 zC>N%#BgDa1Fk-jZEtq<;p75&F4}ZriO{ZFW#i;E{c{0|Me1%e3)Co?HnD+Etb9wz` zBCD6i(Sf-|5mx@;v(@5&Zv`Q_`HY*fB}dP<`mmQh9lUqH=VK16Uu08NOX&~K37+Qc zTcfJMO01?Sp1n;Tk7E*UYq7k;&{-BR63F|_(+Br{`_55&z{U@6ZC)gNVjl%Nr1kp? z9ob!7vWi0wM$~@OvDqlfGM9CNhO#H;wCvcd(}idMfr%~Nlb7HO>f^-sTG^~1W4&*W z^+6*fD~}t{RMpZ+86LIqwlVIwOdP4G#|?V`zq`4`uuX{XF+Vb2RV7i=PagCsc-t8mf1HHpCXT zSv~4<&^YeWNpLAAemUQ~UN*e%_Y2Dhy%g`1Dtx3Hzlr#qy|g{ypCeC`em$D#=ZMYy z2Bp3}lJD{jE<4VEMPcH=?SyB(K$`WxqD!WlRYL^RfPs zU6W_y2|TNmc&V?_(+KlqaeeFNyz}!6>UHLJjOv?p_R##FYR(CsQ85(?WsTo1Jn!EG zSBZ81`ImN6LQus$<}mP9Ibf%MobNulwooy*2k%I{!)mHnz5Mom1g8%sk`$wKXfSr6 zCz-TjvT`=dO2+4okU?Y}X~CA5O*y7l;uiEKHV{*E$c7cQ!>3;6?x5_Gwfx=H9#!jr z@1=dnWD{VxJUx{-o>IPYP{Qp$z8Jn}kK0Sn$+6T9Geu}TIF)?_e@b$X(rGc2$SNpTxNpAThs&rg}^Q$?@fg#O@VF+L4Ig)N8 z!f_$UMhi>)<1sn&pI48wgp_L32C_#T(RYMn$xYQMH_Zps^N!CbJ{O? zeJnkPynZ^oy|Nq}9@hO5`s{ajERovZU6#h!&!fg59X}^GDlkekCo}4`jsVe6s`p)q z+gQ8PPFwj<8aBLE0`H7Jb3C}@6mD`QA}RNHJ$VMT85QsA5h2&f56V9jSHw=1YMzRM z6(MyUk}Q+)m^7Ew9Xie_D+?s;I6-k(s)y#PBvVciTV^$pUjnDe0`_~Sf9O) zbP>@rZpT|hz5GX6in1}E11JztX3@ncx>R)6$!6ch1S%5KINXLsh# z!Fy!8Vo*%uma@L)N9Wb!td{4fkykTX^wtq{2N<+(o*I|!F>#LW{?;Lh^O?VrJ5kom zAC~pbW!q`usdTF}b>o?Znb-tcjGT;2Sx7yYSkWoi4e;=TWzh#A8X?1K0_p_*0f08G zr^t5VCQs|8J~v-}c+w9lWqCqTl+7yco*y9@6M*Z!&{7 z*#plKsZ|#P)GlO+sQMmLuTMYnebbKUvF5=6&Q<)J)RLhO(@xUJu@Gk0eoT4kGe^F& zpz^=_^BsYq-o|6~a|)NSH8oF~_;);2Tc0(o&t>1*^|6a-UpZ&%WXd-w6iub*RLSxu zUj^(UzW~aTD%@k=_Cy&5EANYDPg(6Wdgse$@l-Owus3a48wWH6X(OuhpBC-Z8a0JO z_nvJDtZnMAl zPJ=3uc-MSlmLfu^D#g7;bXr1I1fsC?W1sX3M~h-iuP9V7^tbjm z6p?7?C9Tf1O+YZeR<$6`QD4l^=@yy_+Co;1Vsqu>$8Q<5GZgymt8Td1GK>9Dx{h{} zAAbH+tj)Zs=+$eLVoYpyP=!ppA7+)2dP3Ug)UqPJ5y7KdbY5BzNlJz;W z?DLk@&e{Zq{0=sSJ|?x*rR`I(FmW)37B3ucV6dTzTTMc7llsK2uXlJCoWDOTvI=4y z|GoOs^@Tylv_neB1C_75B9SkT-n@8PffdC=M!$IFL`cyOm2^k>$$yr3rSD&(e7ZOP zYmU}YF6@D!(RWZVB}W7b%aTo?EepQNa%Ijuj6ht)2T&tWAi71_8S%;Tf}cXD4TQFQ zAU93BnpqnYz{bg8TM+t3(fj{KBlo}80{{R2WqrYf-{tY!#*5XY|A*pEJl>ovv-WiU zp?1PUoY42)g2GhuFJUzf^TM-G6wO2-wLku#b}RwQujd7S3naob@V&Q95KNO)Q1~Vj z*qJZC)H;!Su;FxWcwf#W!qf(5#Rd)A{y3LV8QIzY1XzdvK}r7_)pB>Car@eNZy=E&6nMSl73wk!WN2btLDf31(q!9$fXID>jOI?KQP6UI-YI?55nz+mZ- z`fp=XQu^`(Od0F_T3`nM9j+3`m%?=WAIT4!;jDyU8P|n`p~~ff_1}{t8Du{($R2qW zC94RNJec&WHq-)J1sxGkbf4w2*PCRMmmN+lb?#)mAx1URSij$XhBLL*IPyhG(21R8 z+gHRh$0uv|J&pZOEr9MbIH>9d`c6Vgpt~AAuk3&PR{B(++~M@mZ(?eGB{RRtsqh=W z)B0~|X*q2+_-%5Z%qLd5-x;W=AY=`FT_n-0QL5e>xne%P-h6QLI<6?dk*~1ps1&Gs zHaD%c*b*9DM8VE~6lKjm;LF3u_qD8;K^D*^$0mf54*`jym_qq;naEnHO-~hr)#<;f~ z@W=D=v0o0vcb)5uDkcGevR(&l3m_qYMz0O<1%WLzl)vLl_49l_`uL8=mE)-yUHr)P zN(4Gw0G9!-JCS8JQT~AVBUwu{DqwF|%`?W)ew0 z1Oou=j*gB35gQ<+?zvT#_)K2vI+^a*HB+<%lTvnePeDNfB4Bu z`=Dr9%f@@M%guNExAl_hT`3SaRo2wB0gWWW<4-(a%)i|_Y5>}5>x2$J+z5y*LA7;d z-{@8W+*Gm(DDi~Ta5W0lhp-+4t^<64QOnHB!zk0j21L+3y+!v~#$bmD9q~;bVN}nK z8$cL=B8pjHwrx*Gha&BEEjJk?ac*rc7nass} zKWGre+oLJV-#!Sc@@!vz1ym*XrG7631dJ;txk3WAOKLsI0V4-y4v0DehBwr(+q$@H zpb((S0uS9EfCoQ_x4lC{CkMUy?Oq&|3CSh)1WQx<5Q6qy*L!Zee!j_zJjQ>ko79I2 zfD!<2dZw7$nDPh%*xhcr`d+rlnbhZcRp;pfpiCeJt*9WFuC@zmF%kuQ5Z!0311;H@ z8X&Cf>+7qul;5R3eWW&zYf(Wa;I<9OJ(3;fW%0UYwH_(uiWRf2U{QAAL&JCdpVAE! zx9&zSUY}fo?PyYF1SALd8iy;(8<$N3mhkYt9E?Cn#Uysx09wv)-Z}exGR;Ng4#vIq z%If)_lac9Ox9tmMdw%uP^AtrUx7`^4^(h1g+RFPpEnU-w4glQ+SW8RWG$9SQTfZ@2O@iRJn>>u*lE)nVAUMpA7_JF2U(K7p6Y>e3dhWiI1vVi1?BZ z@8wlF>5Pd=pN?5%ya3BM)$j)9TQb-X^Gwrw*&Bd}w$s(GD_|WzLnds*x4dILWU16x zrE%Flnu8Jn!13kQ<{rh`3QiUusj&ouA`VcSfCx#+{ev%{ouHzr843m$tW_X@y#3Nv z!PWr^$X77=WbY^Ana$IzwJ}*rz29J?2Cbs>|3uWdgq>nfe3af=rCZWeQOWoggz_g2 z4eVr6a`Lv35khbp0VK-piNv57JAdp6)sEp!Qu;Kbw`>U3jzA(dt0TYZy^;6NIbB;pKfyCc-$N-DSk^-iEXVBL4r3B>FRpaLP{ zI*qLdD3h9js0uhf!n8OQr0#AYxf$N;Ui;zx`$tJG3ng@tpvWy+-|w;t6CK|rlB{eK><@rBUiK}cKZ4$CX8Qh zK<4Fmup|kv;7g$`RZ23l7NDToA*vvu*?h0*b|(n66BZ)VJpW zjw{*o7AW52OUlX$rawig*pM%$wHS4E)gkoUcH6!`9IXUZEg)l2ZEsUl28y8j`3{$O zMavcVse10@?5`NtrPsg@lqlurN7%>Nfl_&8ef=W-kpu<|zzYN45MlR^eEIg)7sz2> zPIghH!Qd*}p?!JfS7yP<+rxWj!*H{Kp`|4{A_X2FpsA*3EqbWMBljXFUqB2cBFTlG zyKHlY(7#Z;e6$^nZ7mPzje+IANj?_DaNnKj{%Q{XatAOJwR0v$#`QI1H;+^$2bF>w zU?jQi&w+3{JUl!yN%ZwIXB}Hl;29%2bA-`;Xr}EnR?sPcqMEJ$i?p|niZXn+hD8)a z1uQ^7L8ZGJ29WOV?gjzr#z3T`o1weAM?kuydqBF8fdPh^@Ah}jS?gWrk9U3F`u=2i zo@bsruYF&8?`tsD9U=zrFZjn$(otLWo%Q1%0wxKB!JYOgIjA&IFS@c&GD^)#4QOJ+k!qsEXX~QpoAFdd9h?DB7c5aFYjas+V`Exh$9}H1c1kqP!jCqch zvY@+1NKo)!eS_}Gl*Nz05ItLK^Bj21@Kj#xn1>`tJ1jNFLwrRcW}^kmM=XUrT^Y;m z?GRuMFS7)z=9UL|Dg9s7`rmPJdpJu@;PRNVF7BY?SqzUG@2gsmet)H33VYb92^L^y z2Ldm>D#0KArRsKGZ2y6BCR2__Sm@-~d6*KW-E3=LBlixGs1?WcYQ+LLY_T zH!Fa>Od-tiRc`3EEr;1R8Jj}YqMr0M88^sDzFAkX;Q~p8Q(esQ3QUtVvr)EWW%YAj z26}qVwfcpFl-_Q`!MRB2A`iF-_?o|u-hZ2(YI#&O)oB>8Z&vFqmdK~hRRY#%oATLA zID!19jzDcj$@>y7B>sV+@^U;72_QKRb-DyROgm4jcqHEP8M#D9XW%5~zF95`=>cKL z%RwuK5-3GLP`oo3O#S^Gn7*L6z>fwNWreqVOe*p-+@MOr2)%MH_TcTx(<)H!0hoea zd!pXXodKU5P%iCIq;~f;m2F&C3y+Im>x@wb^sXI0&U%|eQZ_5|Hr4*P>Ur3lO9q(9 z|InIO)ttRfz{{z_`&{bpnPx$%o0DTwEOo?hFZL z-8}KKChqQp|I|*BIp0r%nrUjLt@dQ_>T_~F`H%F7B1}=LDk`E(+WS#`zc$SEUu%?Ps)+bek%H5`^J=p<(MTZT`bYTB&4q%uD{U&O z+awA)jpYFKAixwJ?Gl*qt)|WZ_#h#MLMs0TLjws0GH^*4P zsFBTwp+EIo+!e;w-a#w4A!VL(=;BcpyK$@0ZuMFey1%WwMcK&+?N# z=02<5-X%DBrEDdY=G5O=|7l$sZ890XTst3=%b)f4 zLceHGCHi=Q0Ks{-!Aq}32%r-?pMh!AP^A^6Z<27 z|Ndv%gw2f-5fT>my0t;eth$YX5Dxg~zo*gad>y(hP^Ghnw-OVEeW}O2vy0sZe7~TW zLCsnA;YJPG_WV9^weZEtr|)A}KKmlg9$cK9_jD3CRtFn+l5jy?3fjA6hS2cl$#fhh zAb(^e9Q6F~mb9teN&=QN^IusI7h%#7!ygQ|W3yr3%O0id^<1Ine9kXu%Q;4`7Me2? zp48rZ&-6Ac>}d?^%SQr%zV~B@F_S4j57~!rJ(D{+oEz`kJ5}UE-ukq+QpLn z&<@2XA6wFJ%Q#6>Q%dJYmTX=4LaM8)IV)a#wS)2pmY|EAG^k`&7n@uGai5Z!N=!nc zy3Qu4hP!Llr~4kI9f(K>YrbAUI=1l}4+H>Lay${~b9IZ?dOZfbCJq9W;r%rjTZ)-hKiQ? z!+$ZOeB7QyxuH28#nwwA(xRgkHH5JFGM*Tc(Sdpj6AKGr!^)id`>SFBnim?z^|Rl&~b4R9!5$1Nb4b z?9G9Qmu&tVem!&GuBNV@D|7v}!OY*k{ZIRy-pJQ#%$#cxwT?Y4XqQNpux|9crHxGy zLYZzh)su)>AIO!3Ry6e;mz9Y=BGY?4kqYwik5e+G{6r@hWKK8wZzTQCmkZHF1-8Li z%iIY~uZKEw9~DNA6b;Dv7Dfxm7#WcRsowY2U#7>8vZW*?{|Pj~iCJ5_aOal`_9@DD z;Mt36V1ezf8?whnii)p-1eq{y zYrj!ZQKcALpEmCRbbDWjL` ziAwK|p_g|nMlql4ZMZn{#4=}+WWmOZFyn3`h`kKm%*{Uo)F4)7=;Xu#Owl<71tH+? ze-o_1X;;NWSC<6j<_D@G_&>uTH#jtCBR@HYfO_3BP;`aOZkiFO6$e020tE*&Hv8A{ zj6kQ1@eK6ZIyg+Fc{XHsNmfh#XdW>zFv!i%kIBd=e*k~Wnh8!o{QUecV9WAXr-hh= z7Yk*Tm8{!#8N0@FQ&Zi?YrR$4jIy>eekkC-PuYnwcCEA}oh-aEt`s4X3DhL--OkQk z?%kgChVC@Q2JgOpsw`U4rMA4=P+yM~{$ujUbgyE-<&$BHd&K0VIF7ek!yj7?r%2e^7Q2WlFHl*9348uE{&|1~#RX)5GWw-W zAJJpvedFvSRVmrVhM8Tx?u!dgVDkkjr*b8^IF2=Ts zI#63+=jAP=L|j~-jK+sZ?P9Ya&WehPQc&V3cP)P{BO#*c=_O0bu+G=< zLGcOdSAx+({IW|-zyy#Fy>tm`(OxKM&|vl$N#jcqERw9w2H{T;3Ms?MUo%)-H?~su zxakgP<;Pl(Bv|aZIW9R&EfsOUb_xfP*1zE?`j zJOJ%+BBSqNqavk+>fV^u%6qe>iuIqFQ-unyCd6itA|3cTWGnfm0TiLbkqe$Hz*}8o zOWsnaxp~0#vTCwvXG?KvyJ8lBM&_uCxXQg8g4798X?r0AOTx!|Q+*%t8(KYfXD^N_ z8m;Ae`hG`b!)$Y7!v<2ar5WK^u(1(6g}-L%0G*G5Km+*jz3%JgjOBN)YJE@RccWjg zm7rY@SCwp6W!a%fERd>~g4)Phf=W2Kxs(!`dCU{r+K5L4S+>sv@8|5|A zch_rp<=1~cFB=&)C6;?-^09NEfejI_KOzbJ@k7Ma^c?_X1FhxYz_n;gJXg?e!9nsA z>=YY2m1CjB{!YS+cb?O4gM_8R`^Zo%Mz2XrP9m9-g3#cH*_nm7@}-Chh?l{pL05WZ+;={1V!2+OdbE$MKn@q@tq3 zuRWdMsBS}SbI$JNwzakW>g{EK#P6*lz2jR6ch~v{pWSa+>AS+m#l2r!w)pkZrsnwD z6w0TB%|IlcGBhhI3uo`%)RnopImoyZELp0mKEuJmkxyp-0yO)y4T#;JdF{h7FtsS@ zQ<@TQR2Yb^!*~65$I?f)jA|9y@5k+Ny6viO?BdPeA+uF4CGU>diZcF8;#SB7MR+`K zyHOo&%FEBEcO8X5jYb)S>1LoqAdLV9<2#sp8~w2PjKxKLu-6TNQgAum+xZ!4TqLil zXlTIUIp;z|xZA8s8<-zJF)QoCXVl(T^w{bY1OuS(L9fCZt=09+xf660W*)vT#Rn~B z?2Rq>af&lipadO>XV7{)7*n7(Swv%Desy(u`98APVzNDUk1g2|t>86Ce$X<5fN)q2 zDZ8YOq;SbSU8SL6Wmt;=%^|f!8m+stQ7!eCSKJ--l^6(P4 zn}BrxA^#6)85xzk;bdNi8Y4fPI1MPG2scJu2x<9*av@2VzL1UJ0x8E5kh`M_`3x5Z z+3t!Nfj_q#$?zMVr3V_+DZZ%)0hD2dR&2VyUnfA-<6~o@0Rb@TAH|;(e0>GMdvQI^ zM^vpx9-W|o0Rfbmh>4Bm>b)C4lg{lxVq;@7FwejHG~Rye@83#V+~V-nvD$|$cD1D2&tdLk~ysCz4VX{?Ch&XDE0PXd`U`vIWI-Te4X7_)H{Hy zVqhXrJSPzLi_{9({VqQ$pkof&{eeDJ4RsYAT@_CQgw!wMzg#kRJ2tGjw_qZY2eu-I zEh(6ohLyk4RyYtwV0l+>t1A#GPl?@z-qS$p>w0*2{H$(5EQ8QU=DC6a&JL1FN=iR5 z(`_d5RdjWW?@6I%ck#SY2n$M?@jkV3{if{g_ZE{{mwc|9Pl$*L=+rVS!Le+8eVrCR zJzViO$V^C-3bV6!g2n_tYy=e_WfT?3c(C)vWJrmKdXalG@p{@#t=5ygZxToQ#D2(a|jsj7{WPdTMGK8WL-3IW36IDY`$W9mx8La+|($ z4F+enftH&~GbY_yX_cpiqxdCLvZA6vJ);OT#_;=Sgtex>D=QaQJn)=sxY>D?Ycjib z1mAzf=OTXMZlbUMijIyhE+GM{ZKZH9t?va~{Ki9o)j&i8oAKNAlAT))E*{?a#6*s? z{$zz)a6mAuv{YVaSIa-fzGm*OW_p}}g}#0oJKysBysVKCw5J^mXH0Z-R_PDADDe$5 zN=iy)W#vFh84_G0S=sN1`q;69ifa^r`4|+I6y`n@e&@Q7eD4jFHNDL313ioH5`Rf{B;J?U0fWD=JU|cAK4@ov~BW zCZoP9kok-UK4Jyd_@le|3aLHS7K4qR$Jx)+L423>_HG_`nj+$Wj{Y08rjI-0pAAnm zX6CFFr@~K)@*fpSg4J2qOkvRYLDcKW;8tN2Y)SDO?31sR(S~i;d=OBHra+Odq09Sf zeMqK5Q5-r7|9LYOt5fd2)$yb^Az= zWT8q7f;<3w(tjGY6ZL_J^YIt&+iOjj4K+)C~WYoLcs z>a>9Et=chhtZH4WYKrKNS8fR;WOZ!~tl%-hZ{ZSX;B8E)E-sm4-4LUrc-KbX|9T4; zrqcLaskfVVo+P!33LVj*HH@nC^z`@wZd*6CtNjp#m0(QFKamdiVwHr9ZV^e4^SPLJ zzD8JXVd4_$ykx-^M;1zEM8#rW?TNgxBLRjos<>L+EJ5-G2>i^bp?d2=Vpr z+mZ$I?V0=rb~Hj=qqc99V(21eHy5W6k*3)gmRqFM1C|}Ye6K$SvAXptlS>J)M}M-A zlM8e4$@kx7SfCj_(r^A4I#HlRx@kK#O4E<#sm8nx8}++IZDCN9OG|yNN}EjFs(p7b ziLlFYxuZ_5q!{_m=sK9G38)yzqNHMt#mivvu>l3Sx#CQCu&IW4+p@AnB3(Vbcx1!r zN$l<;rOKA9ldaK-r6t_YBRm*pH#J~UQ($mZtN4k=4Jt}Y8-Mul<2jAuJ#&*-N|_wx zWZKJ}ha7A+cZt(Zq8(5R+g7>vvvY zv0;D-kSrX~o)t#}fsjS@c7gbVIc>-O-Y|%JmNo!D=Yi_QDsLYBrOj$+Fp6z4VAuG? zetGxS35)gY;$o@Sdlq!Q|5Neyn={n4=_Q~Y|80bEY;a5gq&p~!_HU+-i`=}b7;6_2 z5(3#c=Rcia?gU)<-X?PP2n6)neNrC9bL824bZqjZKP|I42jvTyUswQjJ z4j|^Uy9I3np`&~4I9x!9V5l9OrNK2j`}^u-?%?o9=dC?=3*uYeBA^{w4J%y2sKd}* z_71+u|Dy#kn6VO^JOfP8{q#g&@W3ru`#TXLo513_ zIt{Ot!drtI>iFy5AF^HB5#Cyth>i1Uv!}UEi;bf1-v_gw+nGasuL3p(2tc*5=y|3MvTV2g_nDRm)^esg6F!V$o+e_WcRrKOdhL6wr(CA_xzIXQp*+cvzB^Z>VM zZgPvYH4*Od`Ejt(VbY7|t4)o{_1it|cM9*LkpWTo9dBYZ4VuD_HtUcRaSJkir>Cbc z=L^VoilyEoc1u9_T9}(t=C8W({eIa-SlIsLix_Qsralx7Hv|Pv`42I9z4UUP@@o7uyy6m1vzWtuTP>$#VH% zH4>+=DkC=3a%A{{iP6XZxzxG$-lX<$|1Z-Kg;|>Y=Vwb~SB^X$@**0p4a3AZSJ`5- zM6WFyjx=4Qu+$r`Hp4&rjlJCu!>d{FC}}jq++E_fq6B|}2PQ4G>wVd|TYRa(&oR`W zZ!jP^gc`s~-)zF@b!vXW^EodZ~bt8?F#{ePNe3ng|!(@2QiKlyj*f8Nz2)(=6V zVcB{E<;0l!KQ1+g3J!1$Z1}XW`H2v?N_Ij_pp{P5#+QM%zn1u|?sc|@zWGnHtf;9i zM834xjXVHv`|iI!BBXW@X-nM<7nvnu0$P8bf%H!v++%xxPd!NF&9|rTG9TW%D;oX;L*vbp2d1C@`&M~k<)sl_ z`WcjwsKLo3)~-QD<$3)4?!{KIUtr?V&CdCDvIxp8lAONc=K$JYyDn<;bt1(5U7nY(HxGxs@b{| zst{lpG_lu3Q}=g?y!D~<^CX(x%jldTXlJz+Ef?IIaB9&pN#lhK<65feFe*~1usnLT0 zBMAkMY_{u9xKi&|a^%%TKFFsZYO_N)rK(D7OysZ~)|9r(^t_RAGP*6XP;n)ih-9Vqzd4SvIrG_lA_in@5nbwv% zi5%Xy4)$8C7qkGBz9(*CrwAk^QHbH(S`ocKke>9+ZmJKLn0g^U-@%0>Ws+o&-{Mg0BM zT-D8^YR=v>m?zbk=gI><4yOIv^%t%a*o7YWzdd%JLoS9ztL2Es{cFdJ&iVT7mo6a= zhhZ<`gdvxk3F2l;Qv1s_P*OUzqMNCT#%M$7gsH*$27l3(IC+&GR_sW9Y8rfO2|)ckWz{)*5it&@|Eb>Degy?zOI-LL_g8w$y%bbxaj99yStafQ zEh*(ym&adP(HYA}7We!2Z~sz^oYScNh|jlI(@yG-RuZOYp-s1)>seG^^Ul?wIHkE= zeCl))JYh)7)YqwD#IZRzN+L5f++naRot^JLr;awSfrSrR{TqpA6Zz56sh^|_daPk; zS8upz5|^)6{m24ZUpcAamQ4(Lv3ht8p___0$#_R%VuF#tUMNO zgyClZq0vjhyc%1x@bq!~5xf7orm5CA`%m`|y_@_vuwVSt*&;(fsB0$t>k=K9?r3PpTNIAUQu{U+d zNGoXaF9uDke+ygXGCM5JXK{xIK51qZoD*ESjH}m?qW52IuGJ$GP2B^E^Ur= ziS4lmaG8tt{ zaTs-#_EbOttX^(_7xODr%uT(m#p-lsZuX%0b<1uFfE_ ziz5x2S=FXT3?j**N!-;8^SsQ^!rI6^;q}!%Bc&6ORV2UHRaef7#Mz*^A(pCWdkt8h zaB8q1L%$}2suoSCPEFN(O_GVH`P40@;ZoHNukZ15Uy`-UxJ#X9cF1Hq96!zJsQtxSJdT(nUtIP_Y`qAc zl4bv^-OZtYQTct>0LpHxt>w^iXO^P|w;nMg<&>i$M7^psr$n_OSLx;Rv3)YT914fL z$qYA!Xty_~T^hjtv{HQ%v@>36Zt39eGTqK$+ahiV^7pA5{_59hnRC9MJce($YnzU7 z_TSz4y@QYVcU17KU^1J9$Q0|!MtDJL7O99n`g6UFTY9%u-4p0+6sNHnAz6MRM7E+J zKDfKPdD&#D`mteAympFJ_n!MI!n#*mprO5oLBJr6#p`njVXg`Bw#B#Onk?-tCJN+5 zNb9X7*KT=i#xKUmoR{I|Pjz2CB!MaDbHTDLeg<>V z-4Dc!Kw>OdUqePH8+#;g?rTU<-p1XWcIHD@t8DyqbW=p8EU`lt?tZf4wb=H1V>YbU z`7;Qua9BO{)lF`6U|nz7H(1Niho&(q_!OlK;o5&*FLABtPMTWJJA2wm_^hT{>{3^) z;Ef+koZnAvVFbynpz)#>^`m!u-!WA6UOT<2J|3EvkamdRbS0NVh+h_37cLm}nngj} zTZS7C_UG%uMn*;edbQ~v7%;WnolHW;>!rWy_C+Z>@x+AeMwS0H&x47UdC6(Jq$)H& zf6_5I3RIO&4LHH6-yRftm%3+^>ie{m0XQ4`^bpM2FXdk)tJ^=Yv>gyx!#;jWV`PZHj{LBe zE!W^+o+1%}#pN-OM9umQORel&ZMP2bl$o4ZpuWZuJG6 zqA<&F{RJLcIhSs@^zk?2@z`>f9$u0_cs*0HO4?2{gbPl4*X2Uu&Z4h6liD~g{^miQ zsdB#EZz6trzN5^)I0^)#gpDEI=3G{$3NiFR;DL0niRa#=PK8ds?lwdHdf&&Y_3l${9%0tPT-vc<{IToY6VKMLbtfWYMR)6Y%X0RdmTYL7 z+yr&C|CCQ5NkeHC)9Y6?YX_KXGb&{!Nbaf}oaw}Z8i$#;3IVl+zK2o{6>3u<6h{+T z9~*W33Y(Q=o7u-M7FBm=o@^~pyGJTm{ySI45hl`KHXLS@?0YqQZ=ckUc{#<1HAWa2 z{j0i__`1420wGcFT>sjr<^etKZlI+1*&nRHCqqcpHHN&RVFDr)d#GDsDQ!oiaOWgCZ zhez}L(?^%${*0~ptRmaO=P4F1$@6z_0%;!ojRp)X) z>MvKDj33RdgCLpvB&YFPV!LM;y0iPG;`ObSI3Zmf9a--W8SrX7wx(w;c3MKTT>~~R zyd}aN9_d6m&r6kUq)WGa&QCpmh4%^%8`hRG?05cO4gC7~w>%-^fmbCTR!0bCcwE^l+j$*{>m%KAk#&Mc&DMK+9IVV~TI68wqAy{gG*PZeZ-4=fI!`G;3gAQUJAm`fpiT(8$7XR*mFW(NR4G+zU7@A)oZeW^1K7=du5#Ko{$d-h z(?N%U7S@6)i9m-+k*7&5G#R>7GntW0GL|?q%ZJfOll4_C#=B!l$0Pk=b4N2u zc=t9-)z>)t_;zfqDNB5DtRha+UEm|k_@TrSo_crd+`nFxAS9R>2atOh77D9Pu4Z0* zNH5k6{rtBBYIgT}U9=DJC(kYO?hl(ZRnqeOi)(eJ~bS^N~iOi`D_ z-TA$r&NvGqL^>OC*EU2{QAT#Y4xfMhY0qrdI4?|48}ZvK#?OeISal|`RbIm4ljq_S z)8O+aZ*t;~JdjHET9Y+SrS)>G;Y``#Z%fb|S-bk;^RhLgXB?%O=a-L6f0$CCwIGFU zeeH%THCh{!W-u@&237uH6u9o}yzcT&$7cF3=Mpi_ZEIUbEQzr9r0(X}nT|I;iGgjQ zzxl`8?JG57$CX*vnLXu>5%Pe#&&9>Vf-oBfHOpKZu0l~46Rc6pq5*@V@hgo|qfcAm z0_Jc`>%hb|yHN9`oiAx8^{0g5xv5{f zb+E2i%Y2ic)XS8*tXXm}4u2NbyS8)XI%+_#xYZRE#c*vGF6Q-c>wQ%nYwZ@q6Sp)g zlJS0z4|w^KGd!|}GRqma!+YNN)wV1TTz+@64>%xL9pM~X|I%a75-NA%L!qy59wc^n zN7%M*$RLn;##XP;|Aiqr{t&Jpify^&+K{L0g|bf5t6c6|k~>I%Ey=qbm#p zhT{5yUC~|Ts}7xIu{(HHp)830<9yE2S2Lc|pPJIYzn=5&*53yg*^A%_OC;E?X9g9z;&$jwZQ}>C;r< z3+bXYkxvle@&U_FXM-cvW(TjPGTjxk7D|wFb4u5@kMrBQ_cp!X<2{CwxPBQo0-ZDp(4fE{h_`~Kahbt@1k?iof1!>>lbYXVS zH+=cThxnCBXQ`0U527XzFUuF$x})D)xHmzeRb%a8dIN{LV(%N6&1q=z+gkUxk!3TKwg{Kq zvquGjb&?;(a^}J0u)|5;Qa?z|PcdLDx`-5hdhvCuGNVLev*6PPhQ@OlX7!{@N3Jye z=6crJh6}A|P<+32d$vn!MyTB8xnIV@hszR@vacMhMoz2&?ky0r!32dLRWC~X=+Zv2 z`oR%ZxbMb3l4e>bCk|uQI`pJHxsirgzVy?Fl6qECWFYpwaXVSbpN2lQer8r4@=@~}yspW{4HpiAs-F{lv#+2ktFL|?C#a59I1;zt`yQO74e`dc* zjfWwqQuf@zj|Y5cZu8U+0qU?Gm9j+6paq?o+z1rJ@1zoHMc%6U(kJr0QR% z@R)Q4lJFmydYh1O+YiY`S>4fqk2+2j(hecVA|7a;xAV$0NPH8F|2*=CK4;{(2#ys| z&tlX7n`TMjCoT;FMyi;p!4HQHxlA1+@1`)Za`dZHt~1`cXh=5y*W=p*>1|G!cV{Gz z-2Hk8do7j1dQd`79`;&P{t^e30-8cBCa_Y-p zQh#=>x(sLxp+ORsFT^*v55>oL~}%zq+FD2IKL=nC*+&>K@jcOh3Fh(aZF^lcnA)UTdM z+;?9k-dyaT$Q@3VQ&eQLx#{Keg=FlU#;W@Y<8Ljl6jbjACX^A&a7K!EO1Lvo_njDqsEuvil*-#<6Z`k){2-G zrWaT}S)R!A-EW6{(aE7p9w5{Ib==kKn6d;i+ang^k;*LfWEMwo=C9tZLps%I*>pnJ z-dk6>bNRoaF-p4N{-NxTXKe2Njfv)$$*QMsYVsFf-Y`YX^+QI^;oo&Z8dm^kBJZeW zYNtNiqWe2R!@@m4gxrg6R|4b)H60j)(9pM5!V2By)qw6;^aW_Srn))_C~OY6&Ggqj zP=Fy3>G_DC2UzT;qxP%+45!EwwtUk6Oc(S2`*ivL!MFVPttQQDG&-0?(HA=fK4~y0sx-H>0wK5ce;v=g+t)XfU(O`1f&_ zUtxlGqSa*2%0@k(U6IgwWEpO73nANk0&z(_3fSq0)e*Wu1-08j{CD8WM+dnWdk5^g z7qxkxPCMDBnOW58W2Nfw%XE}Nmt+s%QCTenQf^FpgEgGpjp=p!&KdW|b+oDoNmrbw z*7g;9cTsUQOSdWoOU3j3wp;xJvUhf0ZSnH14XXP)FzTS@#$dZHTg8twB0l60yFEHI z{PjTN32}1w;=&CbNIeu5d0$}@WCyDpp>{#maJV5Wx($T@r8sQp>?PnoqoZeE^d4aT*<~@`X4O-{kO*@ z>4~rP`s5K+ZWA@7+Eu{=5uiwm6u6=ZAsa@-D=#OvQC=bk~T8aj=HDmMD)6U&O8#Hkyzm!^K7`SIfa>@#a!(N&zVoX z(4(VxGBldQ>Izn?E0cgl{X#inyY=@Mu6};ohN#vn@`6@g4oNAZMJ7Nee*2ccJ1mIA zM3&XZYbcd>(aQwl>NSh+bS-CsqQV0O?eenU<0_ zn$z;*D=RrSCZ#2cMB|OrJ=joBM1W-X{Dwc@)bS4QtsI*{i$_oXv-&C*qCTYVv75af z4;U$mxLNE%xaR1xK(VP>#!C6y_U!D{BPR_LpmNGBC|E9Dy~p$Ev%3G*-d?{#>rl6y z*d5;uCA0wS+!*gp(<3qy8OL{9%!U+KK~ug*QSJ9c`m3kRyS*AchkK9EbIZyJu@5x` zP&Hq74iz##iawn#B4%V9peivZW{{iUTNqR5ob*VuTtvazX9ue3i~dINg#y3RaYRK>Y{^ zW&kO+SdC!xIolsAIdvpKp-?Xf3E`j-cRLIefzb%4{u@dK*+TwbP{jZLcf0>ZOee8q z%97Rdz2cQbM>ND$%pClxDxKn`RP^|f<7xBCAee9amaX$Z zFjJ=*Wy$)q#jfP_+v)g+0jb&xZZ(65#$73`Z%8#gt&)ZJ*~ftso?BxO0*AJ{m!Ew{ zH1-^t`acUwQPTh(57R*ZbV&>pZUWrp`oeoBc;(4+GQ*bddUe_oi6w76MI4mfK9;2C zS)fECvvCUrxMA|CfWI5tw9jSG#F$zblGC`l+s;g9)X6)XE5Y9%9XS`5IGeLT{eWiz zddY6yi3}2A_<|2#-b1fAWFNZTAYNet8ppi#M1%+%uZiNk0nY*Y7qR+iLEAv3BjqlO z@RIwR?-U`Si&5`0C}N+hF^_vpH(`gYJhL?h?kfszG%@f#!{3sL zyI-vBLRC!n?AleTD?M_5W_G2C`k_~Za&P*kvbW7xu#WZdsO0$hWULpg7LfW zYf!n1AQn!s!%%}Wk;kJ-mNjJ*saZ;C28$w&GdOMf3P2%k5vk!(mdB!jD2FrNj0@{KRUp!C)D~95j3nlX_G_-_pv1?!$689v5x=1;<;x@W zUk!ga{@r(7HowYeGHbWL@EG8}z}Nf-lP9zjH)@v+q{;@qe2 zU;eEBW;5fyV!?FSh7@c+)ccO>vUDd+z<&fnSUv6jey8Q%djtw6B|2PF6l-jCyDBjw zXQZZPZXg;BGMIRNP;0wY?|!k_I}0~PYZZr5cB5Y{u4%1X{No!qZ@n2ZE25CmM%ZT* zO8g7L`*0@AK)9k~4Ld9D;^R+Yy#Ifir7UwWG$tZZ7R z#vOpckidf9j{5^2aHR)o53quo}v8BH!qN2qo7Ykv7%y zWq}2KI_o#l0EpscnQI`?|@JZ z@DI%Mn!bbfXo>n8BoGR_)NRT?a>p$!V{^p3Iosu)BhFRY9$R=`Yk+ypHLcZ(aYl@! zz)W?TT3k}-jKk3QR1kfj_-IcvA;RCJyI5GPcg}KQGr;Wl^5MgYpj@w9pSb;ElF`?#^=(_Ctfd%R(ErF!FK44(xH7<2mOo#a%P1mcRhvlp)uvJD17E0kgg0(Yx}InSL`Bf_2f8ljo^4S$Xsx%T?q2ZF(6qa~`wtLD#ui z)cId{MO3Bv21PD)W?X8t0IA)3dOjT+vtCa&57Uv}|x z`0-=lrklIoDIjWYqr{Vy=abPj;`L#hM^Jvm;9)A)riTy2Mor^@`TWxuf`~Cqz|yQk zzRP=k-CSyabX-LkDL=Z_F@B%KDB;D3`FW%fo6oJ-P2j*@JC{td5TP zJ=%%b$kj0^7hO8^TYsvXil=4>VfihkWAoJyl3Bs9aOH42ek5r9o2FC{@#XHn_lfnZ zxi};Dqx+pgbowJG!~QKOQ+~pIh$+vJUeO_aB!a%8QvI#i6`J3pl1(2>P>-|VE z=^HQU;C`%1&(Pj6#oD>@_z;5nwCw?y;sYi6|sp~2^aM09RS_0%R+7A^rn5AyGJn0I`nP=7g5 zScG)iv6-N|@V+mT7h&E%&nt1RH4;R))<00elH7%E=^Bng^T%3tIf(7xU`8!~y#_ci z6#pdhI`1?i{8-zdviH_25)Ws|w3zzCGO|luixXjZ;ZVA+~kS3VABANGJRXL&=*3rwM@)K>p>-H}at{_?3xui1->xzb)GEi8e%t z|EE>szVV8xB`TbgSN%x(|A(`;fU2_Xx<)Ahky0!`LQz2xP$b=yARr(q(kYFEbcdvX zG$OsFq(izx1O%izH;v?`JI>;Hp7;I!|2yya{{NgY9D_03cV4m9b*(w?In|zT^nKSU zWs9Hp%j11+Cdaw(=-?H6{NU#u%-VB$5y6k1&q#9(p0cH1`@qI3C+ToPhW{#{>wMb| z&rz;%pD`M;t*{iWTMNyuQ#7|$gGCFU-MR39oxSKTr6Yj-+jW?=3x`o;b7PbSvKA z-}vLXWr!G*kSg*12V>StEnm~IUCZ#?7A$x~ea=@}+?7)Z`MpNMKke+s%A2cVyPD&> zP42wk(+Lc#pB`f``Yn3i4=5Ba=LaNGGfK2dV6dDWiJtxV{OQh>k);<8j8GM$kJphZL(is zm~D5v9^h8z&~w{c^W#bH734Dvo&mt}FA`b;e;|r_ds9mmYjoo90${taojETfOmgD2 zFsr{rE#jv9gD)3yJEcdSIPF@|={+p2J-o*0aro;;V+nC&#BVKC(@U2Oh-QWk!S#?F zPx`5K@s|mSh5d6rTR=|+b+OL=vGNt6e%a0awsH=^x6|^LJ-EjOw7OeyGzk&{Yo z3n@3QZ?@5#wHY3LVkVomVch+;M?GU;zP4~FIS-?fe{}KexQi!Slvs;M_>a{Yf@p*t}e&uHE+ye+JTj983jelL(Lz`{pK2W zg(WAIJa_f4PMMM;=x1MD_c3m6f6FsP0bCPBiTtNI1Lh z^m);kZK^r)k+)O3ir_&QyED3JSSdwAD8J?ds}% zR9}=dBAec9rYr4X&{Qp?Sf64=e*R(@JYzIH$jrFhCh_Ld{BVTn6qcAWW5^Q!H%a3e zPi)?7&G2^0JT%?fD>6w9!?EJnGB#5Vc|{>QPod_a(OEr|K^pf)&B$&y*db(8P-KcF z)LxIP?N{sXe73hQnr@E%85Z~Rf2Cj1AAEhD^mg2N!g>XF^5ESU(etG?GQr5$;Qa>um{2HEk(@Ns0zxZkIjAVu_ zPDl1_vJuSRooha0`;N)iZrs;fez;DZ*|h2%*|B`i?Lwfb6%NLNM<%igZ5VYk3qk{_ zbdb5hpQsIssIM&#PIAu-9LjEH9=^=^c4|AG8Taxbvew1kI(59@*XqS&bKhQ91jVy- z;2}`aR9r=sQvkJVDa)wWee0F#nM`fVYOUh95A`bdWlJ|3{=vPRZl0f~wIe5)4a}W9 zQ7ofAgOZFFnsE#p zh)>VMxGd6xdJUZGl-AtW628xL^^3h7Fv+&1eEL{r#(-l>!h|bF;pV#Ke0q2(**O5F z9eI^`CcZlGC;iX?o##rAgM>owK^Do)S8+mTsS3O4CWBvOLkvf2GODV=VV@qD~%@mJa;L3K7EJ~LZalr7HvXZKUFmU*Ji*W^|;Girs-q#tG zTWzK?N+HtxGAe2W3XCnu@3JzxM=1$+p7fbAj?xB}JW)VM+-N8{dB|^Tbo8;})cYP| z@dXEL7rx6*KbA(di!@K;1cgwG%WZGp#78oB2Q7KT(KXc`jGle1AhKEbX@Asqq9)gY zC^x@=%A*_GeB}k3Ar3@BMUIID*U+X4J4v=meL=q_?OLX{2AWiX(Han|0G+273#n6j zZLTBx1)blX8B*{aV|MkncM;L%BDah9jE&=BW`@>OMV2;598TJe+rv6GOH^X#H@ZC7 z9${A#YBw5d63|nViDxP)+*E6~wQ@jKM+wA0(q72CbszjuyGRP(O2LUHQPL_^~eG{b9-F`Vna~!o`K%28)<&Ab2$$A$F4-pUPIhx>1@=*MnuZc3mx7u;mY$zt!fF0-6| z$~&7Y^<;Kq%?Rb`<94z)ImO_2tqiZ7Sbx#yYu!H>s<3-=C-3;u7V?C;ah{icO=)R& zaAPPrSknG1sz@8hh4K2FpULZ)u%BV6dZqnXiY`PKf?el22)|9zXgkHrS3AY=XME&~ z!kWFIzd1GfM(K--Fi!923%2^JZ~J^MZ|AfO8Qh=3KmV5DhtMY(^E(OH==D{%3F;jS zTNBsl655IerA16Sp{&&L?*}wPYHx(!^y_OlTbXxNFWur#=6)pX_l4$c67TrLP9rM6 z>G7><6E2F$_s338i$kW49^r%X{M zdn#2ex~a+;<~#ysQp8in?oOSWwCr>rT#Whe7!|clM9yO{rDPkit%zER;`bv(Mn!g` zA7#kx#qV}fyoqUzj*}nO-6-3i)xtgsc4T0Dsle8jQO<2ocvvKYa7+%~ZTpgOa8R4E zU2!E4&$@=+<-(<~g7}GG(!?M|6#wfZwoya2nu?QtSFzRJffl2$7QCaY+6fw?RM=j` zZ+ey<=`pFCb8X|P*~<9P0+SZil4|j;G_{q+941Ewkkj zlR-^i-9)ZEU&inyIZ8Ydn@^_{3AjW3z%Le95G@*+?Z)NoW24xiiO?2@-6X6-F2bWKj-zroj=@l@w&vF~JOP`A!TrnxQzWNu7Hx!5!u9XA}q!=W%2HUkq7QL3y-LnryRbje;vW#o}Q&iAF?!<4#u#k8OIC^H!SMekYgQ<8^76jCThIQh+xcj(f{d?^kyTCvf7TSn z%a%PK~WJlq@*mS zr*{wKw#1kDPW=>lmjq!FVR!@#D z`>#4|Bga~n5xdhmucXUL%ddSCO-J_@cP4E%#;q>Sbvvc?j)Z??^5VBMa|u+mtzcj& zDKu8b&Fd3?)c%^~8ea`A*G*$n%PTnj{~k0?$<@`_W5lszZQ>jnhZ=w)qP=NDV}$ z2pWlj^4&~+b+p7C`2##L$lF;TYvqI(j^ZJIBjjvtnr$iuY=^t*8 zv9sEv1Mw;C9p9{nA9AT?9e>lR&%5VrPI6x97Cc%RRaOn$GU3!?9F)DkR(rmadxFA$ zGjKCfh3&A)!ip})_z}Cxk8bS@*<9iCkJ;GgDHB;UpY+Y~^Bjq-kA1`@5{+>2obMt0 zd?tJTb(=e+f7WL%8fE2|J&iBg9CGGJoo9+9gC3r_8wYF`u%4$ti#(6|RDKz@Hgb}^8d%F+7&px0L_31pVoJ!o7B|z z;oE8?OT`WN=v-mxzc6C^5=XNr&C-9mSK8mwzEEEBnjTyVkpQXH4w0ray}H z>l&&S2_Fz&rlIK!q~!b<5MV|d9}-emWYl|p$=kPYFA=k{vFSP`~h*iR6n94Gm2XzK5y-iMuFv59L*mk8D`j3XO<(0m=zON72Q6 ztop^$`%cckC((a@SZYiAN;Er$6)l7-1=F=}_k^8MdQ#fjX`-(<}z9B9s`oEvyvxuEZUD&z! z@5}#lBHH#Td_((bc)|L&+5dhmyUM5{%xk~-)8K}88drAy>-k3OL455$JTYojzvqHH z?|=FwN52P8p8WrH|1*9kH1&9s&G?ZUo;emRW(dwjK1}}28q^emjk4A53U{)#%Rv$Y zRwjf0aWK{6#Sc2Q-x=>YX~amT)SV6$M87l-cKPxkjjsQ;spg^6Hy5qLAyyCC6vMWZ zVBX5OQ(mhI0osrPl5(lQ$Qo%~^j%$ayAC?=g~e9lw+7;m+r#RAN!4G>QMiO*zYuR% zCX~;ZibDI2n~8!bBzWn{!vHWa0KuG3;J!GKz~B$c`=Dz1!oh*t`WY2i?($HR`1txB zJl7MV_$=ON^>SshAj^=4dZBhf3`z4ZF2ECB6Ydg1s|qmL1MSR_5tY7yfuxiaoQIzY zwzjrFg#IU(1SfSf6sa)5CAS@U5nG*7Ln%NhHOLMb?}UhjrR}1HC9hgZ>ZXdbHZVP3dE;r zLtobEvYuQ0I#wspJc^gX19A6)0@kXN-BF%2kU5G}D^Cr=qt&|~_u@`{yudT-ZsTIG z000kWkjw}9d9~UWU5^%BK@iP3mzz|2gqx!f5Rb4+s;Y`Z=hbVuOQi`ZE0Z&8RDB#C zRtA;(0?y&s6?K8DG%~}Ol6S9w@*6M%!5mST;i@2HN;}qhB~ZWzaRvBV5(@()HHpCY zl7We-F@e|VYquddl0JU=6!f1#$sea$g9NxLA3k7$E-}cnCxfQ`^?(bYjSY(8JZTNB zFQ7-j^_dhzlKJ`J&@Yy6LHS=Gxm(N3EQmxkO5r)_xx+x|D417+5Uj<{(i;o`=t$6b zfS~wcbJOzGt5-lxxB}lvolEV%pTYuW*Vo>~{C9)QV8aYL+R1r&Bp(DY^b4a`BzNyS z-N0|W(5LjMDKBWH^^*IUo1q~-Xhx-HWPtJUg3#6Z2;<@y&BgNp1TTRBuiXgJgWxM* zKk+iHH?g9E0*sE))qB*Ss*VzY7U8FFo}#lZSi-0B%cATC@PItYYA zA2g5}C4A(j#(-Y^n1l~P`yk&7Z8p&~J9`(Nug{phwY3!e=)L6ZY(h}UVR-Q1gF==tNY}%}fg!%%a-KeLJnJKlqqco8dQDlQ;rupV z#4BWr?(`W}9f)(aw&NN7m;fts^xoFqYE=9DoAKNCoWiR)3#+#Rr?DQoN5m0Rie&2v zDo6e{z|&m%1eOC0ppgNV+x4iXn*oja;6np?Xcz$v`HPE2YGvEZm1LA(n3QQ5{<@HU^9Rk_+t3JMQUw^1~sNhIVq@M zJ4gjo6AO~!z?g(rc%xZ=J~`V>(9TJ}+#lu$=@gsF39HCMCqZjF0nGAxpbh zC9&JEYhb_!CP{j~F}_C~*(8Y1LdP77!+~96W1nD{V+34uuuYARjrF9(zez`6HLSP3pY?h>n}-h(&aNF68yIb5?nbWUGn5I_CtbTpiV69 zcF_Ch3Vj|(6x(_ko%^aM@e-m7r1)XXG(vJdm%1(;Z70!kaBvW3&H~?dP~QXL-llS^ z1$(nh2oTF3^cqSxHY~tbG-0L!JSg6NR~k5ZYYM{Lp8^9ns#NY?sRx$~5Mw@&3E`&c zZP}HK@zkNm5OUo6{MSrbAQ9e`Nd+zWgjs#u2#R=@NLNmnq{-bMWf&p~s!-?!MUfnZ zHYB-zP)@(`!G}vYSRiV3-0_WV5!7PJg`jysBYJZ$uzALUjg1XfXDNiKH-8T+A*h4# zpy?iTG7k<62woN5KXFZ$fB3t-z5eZYQ0`AzVPW+4YkcdhnR+AvGd8?>DSL<}dGB-e_iihfxg<4(HRURu(!pvETSSn!LF40c6HuqJRR*i#wPB zjX&~6k{B#S@i35`^ljH-&%5RK?u6l0l#pKjm^AQAFjD%Gxo;7#DZwngNkik?u77Tt z0puH`VLfzkq69ppMqV?hd!M`B@9x?vW1N#Pebx@E5KjV7HHL&Q@{GcpI^^(s56xqM_8w39tGS>bs1T#0D;6*J{d=HFb zl|V=$f)J@eq!?X$#s_KFY@!N$WIjT&g!lz&wF!vu2=GJzO&+-N^W^UJG#zk#LZO>s z$q9kqU6;G1t_}m#MfY|5vgsdlbNj)Xw#9bmyw4#_a8fkl$r}|+EbshSwcSd@_Pp0N zT$>b?t?hJnvZu{PQQiP%_YeWL4*6-7Jy@aj5)*GjP!P&dIQP*Z#fKrco~3LbmN=Olg)Kx{cHlPsb0u=|LsGvJBvGJyD*Bi9Xy`LP zYZNPY&^8V!&IeR>h_QZK%dl$L8YL_o+D~iASE@r9_`ZshxZd|HFmM_U@gnl;Ia5-t zo7Qn%?7+HfC3QdCk3>1;LgQkaes3FTqb|`nSF3~k#jP*EKh7it5v6g}` z|IPKC%-Q@&(zCP~tLY5rwsWqfqJw*O{`oT(E_qpIxZeqW6P0p#C%kwB%g=xQ9O%Br zkr#24@||-Y263OFHx(-G*vA*VI~$gmyK^ z3ra0zbOkPyC`iF;t%UMcYjkRwlu$%e@Drvk(K+RPy0Q|_0(VRux8IG5Q(a23RdU&F{^z7Gz6)Z0ro|V$ z&+zpM&huY57vw!?@uR=Gi-VOL*;Sc~9<;h1SP!3*dcBenxQFi%a*-e%=Q$~BVi|oZ z291XEp~LSKXM=|1ao?_^9-~|K`=maON0UP+zb*k5+-|QE)BX!R738!|3pb#BM51}+ zWxW`D)>|d=Xz%*JbhF;SLGMaHxnw=JOphC4~#>B^g^_vD>tNWQpJ7SvB9l~R;iJ*OA{5shYJ#_4mmRTq4>lVXzuMC$x7e)}<)!|5O!X>!P#kO>&B6wAB#{2yEavv0E#WdNr8Fx=n2$2HQlEFi zmBjy3$2|YLHzRJy2vPGKZTH$cPMQBIJ)W*fbmci&VZ>*ujWV&vbu2Wd__K$hj$ZN@`? z4O6Xs`l(IWUzXeuo%&hc*J&{Wt;OYX;{1HKgGCoD8F&XdN3+83orbKz9g694DZ@rN zZpJ=Vb+>5tG~BDk<+PpoGvlj$(V=V9?Xr%6)Xe8z-smrwkF5{MdB$m)x4WG7w>?Ln z$erMO^|}!^B-YloYo6iTu`jRBc%y2&Tu2;o->vUYt?mz?cs==#f6Pd1#~-)we^rcY zYDRJe)fm(Uv_wCSq2?yg!tLbWBCIlFsj)t$b=@B$q%c6aS5{GTvINcqpDkJNY|U~e z<~*opvwc)F-!La}gLH|?{dvVHk}qhmrgUgGktj|#>hGZ4LEpNZh-J9M6;3QFF?fd9&PzH{RFY?C7T`;PnV3twxSx;J{;_! zepX^qJ}XsB%+1C9ykql#JGGU{iI%zW(|B%Uo>YyGY3Z71af3HO4*uZUsFu7@{=z`@ z`~H;EiTRI{jaJ$`y9mT&iIE8p+0Ri`UBtslQbCv8pQX$`oW zmlo7q#|fu5-%y@j*;7mwXk==B^E`~- zFD@Ni_8wdwk7{}eS(oohit%1yKuXc)cHDnwdLDn2x?!L^wG|p9KtZ? zK1yDaM3w5Z4pz0a7O>kzD@&eeb+G#^cYQ`cr9g0(83OFLdgFOHrILB(r&$>^YIcE% zXe#HUqde>>i#T4zF?z0Hr^dkW>Hz%4{zT&14eYqWl>YA3qDk+km>(0l66~j?jvK=} zry7usR~OuNomJW?*E=Mnr!LrWUwP{JzC7mr!6s?VHvcIpzta*rkputn_<_aEj^kTY z&HTZqX*HffYb4XE(lze!ffrxc@!+5Z+v9HXHM~1Ion;h#KRuVqZpVKzVwd;?t2@mj{tdM0FsHQ}U@Vg3SBklV)VEKA*gZ)tOVM~2Fag4WbfI6>6>J|yMy7LC|k zD(D~a^WO>C&Bcg$HjQ{nIz7I5BAd{tH~t^&@@W4Yk_J)n`?nNUOOz}cR+BYX&T zCk*};dw0|{+~#tZ-Hs3A9xgAA#I@au9{(`VkNp*SpoMoU$8Ji%)ZVY@-qDi;lZoLP zYy@IAc?6@+tQH%t(Xdi{JMN&-{I&{?S8jYm|C@=SyMGVezqYf463c%~Mre8Xw5%Ut z1zhM_CTi=e();?`|IZM^|4)D8^;&CofNJRvI}@NL_cEh>j=H zNRo3hu<~lQpZ1lYyyx{5qzy3H^jC~a6Wz41YOS1R-mYpClPSDbX^(%0@Ias8(xYPP z>G?J)KWeI~be77U(9&isyc_Z%cx23G#JVD?$D56dfqUr~U3<~grP(7lWw(;1jI5gf z^a~>291+76wAN_rkH`787|H6yhirwQC6+m zFU|wGh00q_rrrm1P--wQu=}1=Ms56Oi5zEy=EryX8joP=_eq>NA}pU9E4Z^#Y}>mX zZxF9YXvp@y8)WStP&VVn=?~P{@7SxW+M}IRRvFxDEj;@aB+BPovb5AUg1Gpg*yY%v zvgm+WF^-=V)=C-P7JSNrr z;{@joTTbZr(q+{7H@s(xQ{1zD86FT zj}hZf$Zo|nG>89|lvyclLOiQlVqnB(<$Kz1gb};e@BwpSJ599W`Q}8@#5_}|{VCK5 zxEwZh6ZJ4K&ZV~dpirjLq?nmpB;1+3*qJ1#!^1-Rua%S}70&yk2A%WT;g{H5vocD< zwR4+_`*ux_5$!D#a=#{G+b0f$9cDESxqt%;PfGJg6u)Dqg(xg9gl~Q zkKKB>gez@WcEeHkV9J)@siByp+BZjTqd=73m%{$hd&>Q4fueiUwfqOS_>ME^qW&BS z&)WqbP1KjVIa7PIeqwRfr#ant!Job5Y1B496+i#a-XK9%i^S%^VzFbu7QzuDfVe5& zoyy6sAwQ)?>RGMM?)e>PLUJa|rb_#N_y18%zczMV`E-2d5I3qnysXC#cNAg#^pR?m zUCjCBKX!P6(r**Xc!o))+T}_D=_I-R1=RioBl$vru9qN(^NQ7Y6!!_M&zHVIv88>5 zsLIg(eazu`f3*se0Y`yv7T3_!ZYhPBZcZZs2$igYN0s$xHhKtuy+iW59Zy@cguF3n z%ErCP=o6azxe+z%El%B4hz94-OE&gSrK<0ze{Q9ZyWy9Xm!$O#rdEkMN0(FfzB}$& zUUfa#LcU$-P`|XP@KkZeqX~B*Y%k`ilBuSZ=%poz*48eonmyPtkZolizxl_;cq&;yiKM{I%V9Zj+9mh&JIrE3%Xv9f+ndff~r)TZ#{u z?4N217xvRWzZ;RGVxDno?p11MRmJ-&teERZDEbm;=}(sKAE7%1bt=f-U?78^oK#Oq zEU2huzv~?xt1?@&qCx*0L~;k_-Ljo_GDsplsBB4PcWrg2B z-!DTKwEu(tojT()wQt@Wul}qoc|BNaG-r7=xf`TFyVU4JCtFmu;yr|z`+Mt=l*;9l zE=%M5_F6?nMOVMF@1WC!#`}W1$%-h?)M9LPJ2q{NY(d3Ayp8%?<|xnGD@#j)qVKM` z9&Ek?K8>Ja+9j6SeTf%IeA|0*O>fL`J|4ced7t#PGM(Y?jat!F1Az;Vr)u025~#Q1 z_yYV*-#OPund67Hy5z@VM6C>&ZNDA5)VI3&^JnT7Wm4(T?en2(XCW6SN6%)<$(C&y2kFwf;MyEzwZ%u)s*D(Wg=Ydq7kjqcayeGm^e?a zT-8=KyC*?s{d(c?6Fge34|XmhY%1aW%JEK9m5#Qz-Gozw{+cw?Nzeckms;NwrAawp zL|Js!OGV|AeW-cO#g0GbimL8ndNerAy4i26q7rhP(%?eE?^W|UZJqhI{hxK0F5xQY z;nB4U5=8^cKUYjR{&{BxGmk}QY5Z75utM^V3?ch#P20i3R?l`ml#x8DDu_VCXZ_y1eL;(s{FKUQmG)pllcu8kB2bHo0Yaq+W-=yoDp>=&|L z;;DjAY^KHMF1|tF{St+{^v=vouZV@VR&P)BUFC=wot9TK4FDL+hO zFDZ2Hn6SG*9ow1%`h-4*=0q$H z`yb8(~e z2NmuyQcq?bUusUt{(YcW?o}57JqF%Ep~Hv|J@E9`IQ?U5%6;A~u)dMh7 zT6}PohHA103ax43VuT=EG=DVsT1BPx3mFb3_#*>4>O9d5)_#C$Z0HTeg(NY28w=De zPZyxA8|~Di7XQ|1!eKB*9~t|$H$kknQSNaUTlmHoGLUquW5ZsUFEVa$dh_SJ;psv1 zUrg%-M8AzBs_%KA2;J_=FgBq47*#jwEcqXPemFN9cKUr65C*_f*(ksv*3j74LnBX` zTP%vss8|Kev%hU)v8wCMbqHtl8@m?dy9^o^!!bWfOh;wpaB;sC78id;-hEZ7 zk^@6n0MHw=^117$)oi3Ij-ujXXv17h`(ToPaRF%QFCK_p*$h9H zvF4SZ|IN;8?8z=vY*{endos04UG{J`DIa81GEeUyKz~OO?BQix@27Q;IrW zW22+RETX{YyXF-SweRSv2ra35x8YBCJX(A#HVUGLjEn~|rrb)*t?0c4wjymux=?(u zH-7z^3|IkjQqGGPqgQ8ha&vtYvgUX}A{+yv2bg09GLbK3 z`~drbxX|0%>uj&Ap%DZ@29EUiCjhW~ow`Rv$Tf`MK+IJ}O(3xG?SpC{I3!p$f~)!U zfO~WPyg-})@WWNl)XZ!iFC{6-L(}HN>}UCyUdzgHiB0j}p;5hne)>MZup%w3GkcznEyEthqP{25I)M1`Wyi+GV&}6h+@Yg7a~STKnGe;#pJF*9H+SAP9>^95bXCJBSe4L& zN;7Fdql~I*KzBF5x6f||Hf1;46+?7IGF%qMm5-b>P%Pa3xeI{8m>DOqGcdGlZ8`4M zHVoi}bu{I!1H8W{KU6X#))4ubxM9ez*+(;5pZSVk3gMApA}Ok*=nuE*TlE|ToxQd3 z*~C1pj2PfvD|H8eE1`_uDU)tbz-51ev9=F@bF*70epIrk=$UcNA#EgMO^d>e=wfk*~uU6>cs6o8MaF)OyVoUT=( zAsp!OiVf{S*x+(I_OOZLO`4uny|qWXPXS z+lDE3$T(~ijX!_l0Qd|_3}9GN2KY4KUXcHwAs;_^f?10SURp8+_e%RI~ zplrI}`5dt8MBsZE7gI>3kpZd)xIYYdV7mxxrhpabH2uS6?bOi#?gDUJ6;GX3-0ufA zh<&U{ZEAJCAzO?k8Ni!3&^>r}cU{;h=8(gVJvzyQ%LfI+L1-1)zh8wgozUncj_u2x z_5d-Gbd5aU-o;sZLBPwmx7qBlAWX#rYAyff&GWS0joa~%x`l+WS8Ndzj>}9FH7Yqx zfBrB4yh%Yp0k?kN##H(~%|MR{AmU?xWP+wnej;#^Zc zx5JH7r}RqZ$a_#J#K;Hu`8%oH&97pB2DYe?OSKvPc^Cq4H$#PQt5*3{g~)mzEa)o; zNRR>^6#GyF`k=b?@LoTY*FHNuaaF5vCI^e?bF5ocl@hou5cGiF18&AZn1Empd?TRx zl)sjglDcz~@SJ}IfGh(G3n1+cV3qQOoBLv*Nce_s=n_z#V8(#Gs-c+~B&lODY6UeW zDq^ugO{Q1oheX#F(S%0kbfbRv@LRA)Sr?x@C3;T2*lbsQ9z3qbB;ltomS449 zpV{C7nHQjK9K@^1Ufno7LT_ncRNk(;wKv@uaGXg4TqRDXzHBB0)A~f>>M26Sbh;^d2w+uWMqJmAMmDFr$~XX0dS-m0usplaGd#Q zNC;k;=W;~Mm!|xju{d>cWbwK{vG{D|o227+p5>PBddk#c@#!o2V&A6zh|J2jNDmk^ zw6D=q`c3;D%PBE?s|!QQ1PG|?sYtSH6_~?S?FRSfrfND2*DJyt6=#KYCKy;nBwn=g z0`?Dt4t&9aSKikgp3;+3QqIuddq?)m`2wz-l_ZANVWH8qe zNQkuj4nGp~%Pr>!JnARI)IM!5{qkWniAn{MOA6ud;nW6l;NO|cJWdN4xPdiETzAXA z7-_nHXEiV%@vEoAJtdqwUh2<|qejD*jC^jF^q3mnMYIPk?JeRhfge)mEEHDjUgP2i z2fWuGD`|uc^WP-gT*Vh;<$u6CtQ1Y!ORLUD35%Mk_x6o*3LeLIul<$5G1)_3(ozI& zUb#-oT?Brmza8~}_0r~6Tw1Dwo~U-dPpcqfQmpdYOd#L#%E0|fxwP6_pBA-hJ0Xyc z&HgGPS#h%EjN+bz`LO>cp7%;iLPSfEc{Y9BEriRTU%T<#j}d;Uyk+mX;=;ni=E2jR z3w`bT)J;S*q;wiw|D=zg=X0w1=(-S$ZS$vB{IWB749ahfKqryJ8p27Yo+%EhxD#RYncrB^t`+UDf40#;Eyy>-G!GT{|L;r zgOWE7-}qz0>JN5KS6zVo28_iA)wB;*bRV&>ECeszyK)h-E7f^Q8CP=cFfIlfhpw|t zuJxZrDG!rc38%L}Nz@zqY4#hg0Zv@73f)*8HQ}hK*mL`-J4`8iyo54R;ZV}i&mcBq5t;`o`k+UU#$W~5FQ%BI!yMlsiA_0Z!GT+d<*7&w0r?pp}-^D zGIivkKHdHVR1%1nKp=#TNEa|{V8QMBh8WkgsyUP|T3At0v9(6RO2vbAa?&A?%+w~x{29B{qoWEnNF9dKs1)o(CBb_4`m6=e6AzX<>*hJKCRob z5{YqQL4*x=er@d^ts_Py5OWDT#8U5-CK_DOfC45#kdZ0{#5GKyWaXs;5d&P9C+!?D z>&!}%Apk&MA_k9-dBCqS&Qgc2+BJyi2Bhcg9VFDFp?GVcNwlJ*gZGmZS#z(7D^-q!noX~zlmn_ zF8HIR@-!!qoUbDYo_FuaTzFo$y=~nZ;!PzFangdhS?lpHUv3DL=fKmoo(zk59ayYznorDv3LtF`GNAD-bm+Qc^|4(E z|4I<+I~_17TS!$h_m<>RQ&I6hUm*B#W2`HOMhayH?t}~xeSFVFSUFByIQ)B=6HH+r z^YL{!@h`rTmZrN(keHcC0Bn#vPF~(X7zN<MlBYu=Z70S zPkZugS5hD}H-PnGlg6cxTmC?#I{p2$GG?O80-Mup?4>dXFMZ=J!Iy*91=Z z;$C0c9jZ|pNG|Z#>j~GUPqa>WwK)E#zP?^h`s(6t%Hi;*EsTA-PbLlu$Y?XhjMasO zh1VrayqKxMbQe~~Tk zbCO`BY%BNDO^5Sd4;8GzteUkuy(OF;W>W`Ce*C@r}y#F)aevxlry0f9cpUdJh<=Nmj~2BTA-+wH>N8TAi0SL*bRblNh3 zF}N3M5EF6R<%p3R2cbOlg8UWIy0V8lU|YQ7^s_4quX2i&J+p7o>UM%M$B`bTtJsd- zGrw6^Q+YB${PQM7lNrB9LegGxhdv_y*yb>nti^cd{%OZoo!f%z-e zkmX|qP=}#y(i~WgczxSy{!(c(;W%wisuf`!h|X8; zd=tFgk|mut$l_r0%W>qqAW$>5oiixSLD49QTCgmSJc*YaA`KKdc!Vma#SeHok^d!a z4r{SZ9VO0(0b``5|KP9k&YPq}e7)zcf((}%Ne+MzRBhVy7Q*+>~rg18@xn&y6g*hfCBk8pX z*W-x!pJ*}^iL}3@KOW0jLtQjI!+&Of0r|pyY738s+y7ms+cl^(+E3@X5sDIxx8FNI zknY^Oxiq6}(7ksNw$iU_I7CT*UTE=Fkx@Qd9H3&td0} z!ulrV;I&>BzQ760&O=Ud*E@`{1JawH;F9*Y$fh~0?d*~(D=DSgHUp5{2b5zj`=p!f zMqT@L(JS<=rRyWlmzXVO34yU{ewJ(G1tPmZG8Tv`TAj}YH~ zXp7&ozJ{L2ZZ~z6+ayySE^-YsxO(vDOzZ3c&&f7>-GJ9x1J(XOILd1n>l1?dMJ1ZO z>^r3>4L_m8FVBh7fSU*_ioCeBmMTK`#NN)y#Z#_tz7q{;G-E-bOQN)Kr&c$KPcE39 z9*UM_Df`l}9G`lxIdwf%@@ytCZ!SGuBR`(HL9LmDo|Qhute$4$JN;>~&3mN&s>7>$ z`Qk|K(WV zMZk>avAj4f<)76?Z;8S6LkS%&_NbyGr1Kp9>HP9J>td2~Q@pr4gNqAgp!-QwWK#+4!F1Ku%vj48@$e4@Sj5lh!SR#Kk_uruARp{QECBRmd(F*O#bM{o%93*|S@1&z9VbPi*}F#0sWb6Cxu?bJIy(B5Un(;mb32SAr(()iY zLplQv2ulckg@E}=t6W>A#h}~J%r_Vq-OHlG)n@y8HKF1(<~;GrVl1t#t>w+X(}6uB zN37}G1$OHWJoZZQT!3p7odXl*JQEn+Svd7L)S^6H%S7=HY z6Dcz-1T3m>MCrX_Q6xDKJCvTK_ZD%$WcM8@49xD8K;h~X7u)m`)197pC(PoZ9I7@H z95v|A;bqpmThz_NRzmOcW+do}2fBRCT~3sFy2b zH>I3c(Kp_0{}*K|T!C|swCd96AO5qv_d1*=TXbCSkI#N6w{X~gs{US7(qVZ?{Dh_6 zx8df}Vk2*`tIs>FBV3FVmJ>RSX0ux*YE$f?ZkwO!Fv94Knm44Ug~h7p6!~05E#2<2 zN3^K$8s(tKdEzzRaXC}hmsDzDY7HMft|_~b;RsRGEwor;oo-*&zuL7Z#mDmd?s{?R zjvqCpR27eBu!$9m@hLE2UY~}-!uEw9L#}VDaVJH8%d>I`qhj;urJ1noR4Ed!gV<&J zV~8IIj7aZBt9!*FEP;&`sSHMQ!v;O;ynVS~pUq!MbNhH|K`h+q_1K7pN;P(Mx1c4K-$7KbxhW zr5Ar;foT(}tF9`(I_f_Y)jzoS{jl=G1m|RT+Q1+3?dSF`b)Q(c$Ha4-R2?XXjh879 zB-7Q%V{REY4BSWKoDlr@TqG`PIF1&k>;{FWmYA2TRDUY=2`m-Z*%h-FbT{~aD0>fZ zuHW{57zx=5*@TcXDkEeTA|IQw_nyh#5=z-*^|7*Nb~Z^8*;`gf#>d|CIX`{x`~Khm z|M48p@BbW!<9mGLJ+A9|U*kMq=j(i(GZfx)UM08sVk-4}qieEnmp2mbzSiO^AwlnM z3u!-v2ZL&>^y-qY+Dz+Gd{bw9@+97yenWeC$Mx3Wv_~h+vx#uM8~mPj2nzSztkm?X zQ*J)NoZ%lR>*}IUL^(t^DqY?jn+2%cjhH+pX|~2ly1P2jP2!EQw(VeYem0y{=|*hx zRa>5^C^(uYbM9x~k~d^2KrxF8JtO#9pFQxb8m` zt7-7ZaW-CDsX!8q?RNAjaZ;el_^S~G3Wqu*b>PwSdR z+i#yOtL3^1%o(5K-A`|D2gb6L2?l3v_^;W9w!1C%jp*%2g&B}<;p_aCl@sgDrEBfH zUUqmEzMDF)C^6G*79EGGdD(weJ^DH>8QzF#zROy?gKXIgA1CZAE@C5#?0R;%w;Q|u zB!6-4m_pI+xYwfT?JVP&#h)>y&4 zQf8AUht2w2cWO3vP%?X%$-HpU2$kJd#gppCxG(N4zPx+)6Zbu%Bu|3z>}g5k zdBJ;!!-Qg+ucxKGGZ`Nk-Q@fcT7O1?gT`JoB>qM18Q3SomL$LNKbr02S|5LJ9|F#* zW=Y+d@i&VJ;t&K}W}Q;tn-M`w8&XrBFP7E6R4@WC!lWlf6bJ>^;hc_r^(**9e*M{_ z#H1w7ikDmjFjpT!t_9kcqi7>Kd?G#gM$m5{0uMtXB)o22#_^BnQ*9kXEMCuDQEam2 zFtRuqt zFujUOOV~XX#lZMK_$S<58#XR$LF>z7LG`qyTCjq)B%kdm^Havo(kLRgFnH%u0+GB% z>{vcIj@G1~P8+?_b)FWtnavjrRa7t?%7q*=_~QBGD9-97Z1&C`r@e7MEUTV$VJz;R z?~S__i-{gea={koM)sFK;);ulr5=yM?m=1*z?Q&<_ku$ezTy+_#n>0Qxw#zw`Lh2X zw3E>?xEp;^P+&mtU0G98(~|n-XY?EihB*S6Ep7P!ml-hsqxUcMEat<`{{9?9IfLE- z@9Oi?pFhowKF9c6EEgeXIXs-$+1Z&~8%L7#OHw*I73cp*vH2fg@c)*V^RJu81%>d_ zZ6S5q5enBo{Lm-$cuW~$r&SKq#C4PUmNy=fNs6i)BW!~V@i8C)`bn|wjS9kyZ;>to!7>>~I&xudE z2^I=xugKo(J-z5$Tj-7QJ3Vg<=Fqy}fq@=-vj1e_n zbK)t(ezx+Y2_NIr;C9I;^W`t=uEK{sou|L)ms`cpPv{tge}=8GiTDedKdw*vHy5D( z@H2t?kwN`|_x^)kOn=Hh9cimO)nW=NV_Ipn*K=_vEgAM;7seVx0ANgr)2!( z%F1Dq<30;x&`nQF2a@Yvg&*x?M_e&^PRbk}RFdk@;^)4se`vm8u0-NVd8Y4P$yn{S zHr`Bh#4Bw4!lvVsUP#q2+ouwuO$Xt15yDw{lB1tfM1v1(&4AHV#uCbWUjDR#ihlAN z2BkD#*>`CdO*-ES0#TlNjCJdgYp?hvgw&<2Dj|D9Dm8%3yS}T`k^g3Wy3?Ga3{LHP|-@DCnrMrM>yg?a5WolyeJRXQf-- zSH2|koDdYhtTwR-);X~K<7Z}~R`-SSr6+W~i|7|Efg9wTo4WnlV2O~zl^AgnWJpSE zY4YAKiLBQ!{fx^X^tMi?C~-pjx~2uY@A)+@{nNvNgQYK0W9o~3Qf~XWk)_PmMt{!T zrq?^H>ae529hV1h+%}+nE{uej^Y@Y8uZYrea&mevZ^=VcApJV2(2Q%{tZUtNl_<^D zmH*2;wl7JLf(v9e!K(ho%UcqdaZj&IR69&x4v;ArGCtk|B|=GZ>YYsTQZ@(%ueu(8 zC%F8#hv@vb|9^|~b$$2fx@+C$Kf!rPa%o7Ud!B4wPECW@I>c5XPggBEr-7_;$P-;+ z@yT?E`D0^a^T5l?t6TWV<0-G)F8>!y66DV#7P|Z~OhubB9ee-=W%8-H1__X=k=L4b z@>y|L)4n~E!03;^2_&jV2KL{I9JuEB)5>oC!|*9XlmVFmo}bZ|dkYoy_io7}rw8^v zHrGlpHAt}`1vpOrq9p0Nd8J_jop^e36>?}0&XS|M%}+Jh<(F+A^*QFSjfor*CrIAhWj5GJX`L> z4aLt*RQ6O1-dVs|>LlvVxdj3jkl<+wegFH~@97{}^4||g`{SR#^PUjhpAz?7JM2*6 z|Lp-!o`wRz{k`X3jg~yZmsP=0&-z~v3}Pw4sj1yQwW3|N=8kQ>Y!5P zv*i00_m9nfP#0xJ*rob(SBd5|I^OHrH9L+ezQ7tHy?S@yr)CLHj9!*-IsJ5;bD;*~ zvEb>bxlP29iR5GQw)Y{UkSgz^D%x3@cs3zJKaGABrx}+J^=~|g-f+fQzYb)-d?`U8 zJ9f5JzD4G!-T6^H{hx)1l)y)@#WV{ zK&{c5GQA^7iv6;6mjB|AGio)1@l6{<;nBPm-nZ>@5cb1^fqBTRJ78VKzP~y7h@4tk zOUbcP5#>~4Sg9SayV)ONR3PfV^j^%zQ%(m$r(9fImX?-JpL-Pyv5U%id3tJQi8DmB zf*1z`BtgRjGTp1MO;R4y;RgYG3li@Whm5p(*>+oqI@iKYu6zF~_dDK^j;TdXUKSJ+a= zY`^ZICVk5i45S1Xy>m-~ERoeaj0nGO&n40#oY~N9A4KN-T#_E^)M2@}Ze~z=K}- zV{|=J5c?)4XYbThw?kPr3;pen_pM}QaeGvXEwHmy^S}k`17RSby9O4v7(Oi%@7J|s zj%p647g5&JYgkjK`2a5fhGl{MgSEMv?9yb)THPEv;SoYvmrI_~hH-@E78lEa5RHFZ zU46kN<<*z+JWYA|`M^Bwt`+OFvWpXz$rH2E?_YAx{`p6zhe(MMPb(6d51^{v@L>4P zxro~uu(W^qtt1wQqauKcW@5tP084|LwgLziXrjed>&m5k+n4G9!^U(}EW5;N=V+6| zq#XFJ9ujZ&ikY59u2Z)Ee6%C-EWYv7cD#Q=?%X#^+!a?q&+q6`^jRWu6sFJPj`FgT zJPx+UAK*{~PTlQ$_g?*ta5uiq;wr3{CB+6J1JBsiDn!;`Kz8eDsmc+MDL+k)5{XwK zs`T>KK$8QsX5L0bnAqA90+$oEip6%V@hfJc(oBglUF2PvEYZM`)9<);iabnX!h^rJ zgRTz)42s;n?C6k75sqSbVnqw| zq#I)KKc?e!bMm`c1Am^RqZU==cX!zYd!!frOLsH<;$m#T}X6?)}U;v32G&y*z zVkZB{k#vn2cAHjD#J^|C;4lUkrMW*@b@ht?P1p_g*Rim?w-}mOq!Y7A;yO8yJt^B$Pfkj@lZ`XF2qOz4wQV-q1S=o9qvaqxG&tD2vb(jAwPzwZ zFzW~^T3jBA`k)O$69#t5461q>t=u#MErdg%^!cLVTFFw?-9!Z-K7rE5!g0-I`8pL1 za?wHOOx&lQWfphLJ?-T@rOk1hE&0rUP|KA>k2%Tr_uP^QkxIWl@%a2gGqMUAKBsqP z$rlP^Ygsvdo%mKLGtd>(w!Bnf7NALfK)?_$PvaFAj{vQctR3#m21=k>0_W<5yMVeIWg12;2%>a;pwy(1-$|KM+|;e&$ov13Diczz>9dG^(;pnp_%q zy@sZytaC>ofs~M#*pal)M@3lA9k-i@j&C>3_z=wfW zoY6@@MND=9_o)56XDa#Yqi9_#2bh;vht=F!tX+IXLD$(&;wUH`!-8OelKAb!*6+NGPfoC#g{+Jx?z#{4kXC@tVD z;9NfrJq~vqiI^$Bv%m2QXgF^_c6}t_Fg26;bZpVnl_Gk)npl%XKvyz5JREMcD2YIAo4uZhTJC^44!_na{u2htW zxYd|PtfM|fsVlYN>YPEwrK6dsZM*r^)vmp>`9I82uk5_;5`M6ACcv1On6Oo5ZvWCr zW?^Abg-Xo$^N`ud8kQCavPm%cJKp>0^i{SWtLdJ+tFi{gp*I7tNUHWO^v3E;Tzc5A ze!M(vwHU1C@#4@sCCjUK`p`@D=#s%RSC#8Nf~0sANU>2N2b&LR(=K`z9xwPjx77GT zHO`nam!2z>$bU5)xr%Ff$?0X6drjrBW(@@wG_nG5Uh zi(BXBsfW6Jb@h1n1kps;+6-z@pgJb1Cc7wJGGu+QTHXWFE_T}zm>*k0?s0Q*mC`BH zvNHx;kC9tlUA=cll#lR3NBYx=C&Ea9v0g=i?~B`ry?G0~dh*r>D&#;=#Mtxb2$I5t z4h9>2oc9amUOMCp+&Vr*?Bmd&x@vD@SPnX{UbeDHEib49>WIB3w@DrDMD*oL;{-~=eC7@J7At}~@7?1? zT*Z8z!X$ou@yg~BL!SDwyf3(NT~Xt4@orT}Ywe=doP17hZtjmwP19SR)e~VuLmHHN zTHES!xHvQy2BG`O4BK=|7J2H%J##EY_A5_R$TL-M&@nQyBq}f`DwLsO`P>JFyEVz! zFeaoQ{mNYN>`av8r81p(g<4Y*NzD~QZFzU3SBHLV(03THebp?x=!&`)CtryyF31lx zy<>Gu{R}u@dQFB7y&m}&$Qa&_CqM2p5SiQ5?s4HuOdh4R|M3JU)Ph1c#f*jS-#3lM zWOTs{Q#7N(Iqp!RSUTVJq+f8V;o^~2QRa+$s%|qP2_|bL9cS;jZ^gIjnwr;7Zv{WS zWv;^xN^G#YTV`jkC7-Fu&hGL@v)j*m_*sHz${lpLDGIu5iOENe{M@M;=0{QB$ z>BYP^E1)J4_XoPnIF_}A!}#!6{*QseSLbi587qN^Ianoj>g%U=tU@02BYX8gExG)= z!F^{v3-*jY(Zl1I`XK_GnteaR5{YM0+i8l@aTbE7YriF8ll!q>zcHc$b~+!T=G(R9 z+Hk4#W@qjd@^@#HVKTGZhe;_9ray2j+zR@hI+Eq23%%j&Ci-=%oI@x+Wfuppb zr>hHPd5$-Ad?>P_s3pmSO2{scz-+EE?jkX58048Ac5hd`MLE{zQekLj!Q+&j=`-O| z%n^pPc0I9d$<@&7l}gx6(LC1Rq?kC93Vc^-he<@c^~Pv;r6aML)_Z9^_SDcv48t{7 zzFK9OiGQe3CRfu$B;BK8qNJNg+oM4rrZVIY0OO1@YRH;jy+C7r+XL1Z{0R6E2T6Tf z+!l>+uK)cw?;2Q=t9Ql9)X6W(%F3?N_|CpPr$rpErkGKEt-Pnk`g7TlGNS#tSp|V} zu@!Z2fK$!ekrD$FJG&p`eZA)m`aHlA4oN*fSzJA<(Io~(YEt$!$~V^-A_QIZkNm_^ z+xz;W@_e4UMG0l)VXgB$7rR_B74u!DV62D^AJK8xuMF-uC(dr^b-1*b$J;^B4WG-th)5rGJn?J|O5#kCIdynu-pzOZ0+-}@laDke1JBRz|vRU>Rq3z%EPZ-p-*F`P9P z8#xj4!noDCmGLPwW`YaV1qPw45fKrf!P@6kurNAGrBk2Q{fK6^t4pDiFhaX17)a15 z{L}WmYqnUN5AM;)@X=HvbaU2~_b&D*sc7?Pl3AKOycrp2zgWnjTKS7}(Rrx6XiK7? zC(l4QK(U+D_3{O`TnPscQ&hjFF85WDPcKrl`zktxGy3?!oA~6m&OjT5RNzZZOf+J- zyH2XEAq_59N5^Zsa2AqQ-eLudTKkvs`;~#agNG}h*B;(*BBiCJ&0bflo<{h^?D$dZnH2zAcu>y*`VQ3)kqZd6H!70#*1BcU{OEuWfY? z)siIh6?^TkmFD$mcqNMjjI6YM{wx(kjLXM72=jdSnsyP^wpsZFza~YRD{-k!!$SZWfM#!HY?WCY$-r^=K#- z4aKGwmp{*S6)L}fpFwE=CrWd_+9uVzDHDOwkb>%Uz#~iF`c$0l689i0bY}Z*5dqVQ zb3cA+kA-l>Z0!lh^&8~)M#jb&a-L}x42+EXr}V#&FWmYYGU86B8hvcWzci1KAWq}s zzL(E)n|JxRj`R!2l4+W!rWgbS1U7b-)Vw#_uDTy?U58y+B~Lv8 zTuIj2VwR{!36vLv7up3SgpnbOa>!g=?sDv7{T2~s_B4(#3az?UliHvm-->IqojgsZ z7ns)7of|gqv_dx4KKr}QTPJl3BX6?vIq*T#bh8DQu|nb5hjrK( zkw|*hn2wvzeJ6Ze2WE2Sir&+XH6=^Fj-NfaQ`Mg-{Zg5Dw>F9LTn{7ri$^OjoQCMJ ztjg$kf^T32=;o~(WBAcnmL&%+2P%t;Ph5(6az|Ex)EjKXr!grW8i~>AA~2EwD+s6D??#>zF?V&y;;!SVBLtc%s*-V=I3B! zgh|3EW_l#z6QAMGh+JD;o!Q!o7E-gRV|&UnUhusiU$f@*xrlf{`MWXBtf%6Oc75M{ zQSO_lLyUZJ&QKl9`&3;@56t8h(d-K@pTI?7=#Y5-B)hJG#E`?IXwKZbHND_ zK1R$+R{1>F`P}sahT(ebVPcG4RkOy0*hx{HvGsh(bPa~ef!!6pm!Zl!=|ejK!eoX` zoN@$;!#L)myzz=NR{U96HmIt($~oL-=dA|%^VZe}YHa>-1~)5?-mkSz%;hgVshhW; ziFN-u=#iy<6#!v}>Bfe#0k9=?_4Nf1WXB#UoI+}$9E@V#uV5Nu6tUbBE6aW$FC3PA zcrvbenIe6tu;WPd?Cz08wS;x`Tv!M{fxn?elO}Q0*|4JiWi7P^3gXJRY%}^kl;$N& zzO1C)omBB}n3n3X6ep)TR@OxaHM-o{4daM`n2yY)G(2DHQTe+W$GUN3hIT)T_#~Yg zQKr}h4_vedn0?8ktdqVHhg;zaTYaz1+Q~i`s}!F>7ESw|`@9Vgze8L^r_CAnIl^~` z<+p;zjX6%;oGDbwWOw>y2kloCB0s;@5*s#D4L$GhMVS&z>7(efza{1O67O;%-Z)ff z-cCMm;unnY-CD=PTBQ%sXs-)pT(7@@2pws4M?~vCGg=suzxyl4*mdIM;OqBoOAB#n zmC<4r5xEzNY-MvxFSFYoU#n2^d-g1lDei*B-%` zTy<-E_s7T~to9T!pHP^}3T!6AzFYa2Uw8@CIpeAV8O7gNFKiIDevDH)pk_oCe4mJz zk}?uijW!Gup0N5|G!-dXl_fCpo!CDC-TEP7&C@U3!ll2ls<6cSD@Ck})Tm_U9ChWX z6B816mu%`=?-I7|4Z7Ye^l(3k{Z@>ra;Sqktm-VEC;3!0RiIr|_SMdK*x!p5fu&`ZUIF_T;?{` zej~H8cat=0-EL9Z+)&!+v5UtvrV1MM@$2t?q&=dZDRj)i$q?3gvlHOV{1gm0$5+)}IHTC;QJlXN559 zr?~D+4tbp)u@UMNS(jNko3)p^Ar1SNISnCG1Ps-mE`lErx^J#itjXDs`_fq5!L(;Fj;} zc!I*ovFGP1h=D{^BV>R6P@Mer_ef;o+1HY!lET7|t?|fT7H*7beN%9}0=%T4U846= zJ5PP%a51%f+Yu#@;rzXamnP4qXjy8+1%QEJ#=_m6iMKdjE2m2qz)%d$ycs7yfvGvb zClFVid|SCe^`-SipQ*Knej=|j^Y-}d03%4(E)qcAAG}f6_x(xJk;a~}XsFYlA!_G* z#XE_%{W_PtogcOzjERz9Oz8Y1_O9q^de?eH-^x3>X^Zq9@jkra1*5edmw_s;zl)C( zh+r4mRFf7?jytd8=L!LVsnWSF8*Nwi$CWp)J_8tI)m!cCdHx63!dZ}tESFz@42W=Z z%+LST5{P^7>kW^B#gz@>9o(X5I46k`jp<03a%!#yNVJV|s!&l)g{EEaU8mUuy`97dWPdVSVVcb! zdUIq3^7JUIQ8u^1nnArKKR*LHkLt_$DXupHq7^@it@uyVR}KcIFFA`Z(;*cOmuTv) zjOAhW2MkZD-*XTTWj<&l^9;|=U!`CfHg!L%0mNoiSZ@TOgJV;vJ%PEz>5ClXks}6M zmy7>fOw1K<9Lt^aHOY)11rsc@N+s8xJL(a~# zF1IZaE=+1?_WUG`EK9ZB**M-Nvn&B19=#{8D-sqdtPAP7{r%BJt(jh16Pgp7Y8n(` zsU-`1Nzpwz{I!bB?D9DSOKf3LXN<2Of-HnWRd%>JRoF$oP-pi#vVG`o^J0MfXSCbUnp}u$Pq8XA_CMJQ`SKXYj z)Y(sR?YVh)Cb}unbGT+iGpDw`o-oY?pR(ch=e5J&K6jfuWVk%>`^>9nBBmiArYlz6 znIt4CYKE$rXnlc`m$x^RuFc( z7ELl-g_(@|Q-L`}#8YHZ|pm$+`VL&e`?!yv=fsGreLQnPhFiuin^-HEE?i z?9&H37P#xCaUBLqM21#Ymms9Uu9bJD>P?~eIC|U6itIN2){QGC8$KMv5Zc(sN5tiLol2%bDyA*dgKcBfol!PS4cw(jP z%m|s=0Di{UcgnIYIn#8QMhhK74Fv_ZKsc;WD7(U9kG1SEKj(nmG#Dc z+@P+4m2(6VryIAC>&~VHuA}4QpCO%3ZH>40-r6R-7jbjhv;fotz-@nr_yzv!>xT*` zdUwIcEV!~I;a1hEAUz+cz?SIi5Eln(8JbU?0Oa>{%^J|advx~wx=Ws|mbUIQ16j2w z7H=q?0Nyc=ACK2_IRnUOtFmJ9#@+L5$o`h0@$exL7*DW7%3C8QkW^o$V}zXx%Ba59 z*#_vp=e(Bu!`Q}#Ac9fc-0y>;v^YQF0qbQ+u*%FnuJC@z(JYunO;n3+GCxI9GFF1q zjpbgQCL@4LqZrL>nqt9A^)Owz82}vk;t1k!gV^Nv?;qYtG$m7FKM{sy9Xf_kx^bhw ztdqWbar@J!Plk&RN1uVd3&hW|QKha-AyrLH5#C}BBF$UV=sKp!$q*OJ)^qjd#q#Is z+Dg^xY?sZ$#lbFK}ZlKF!Ux{9#;WEJrg$weInxV|J-eiKKv??cMmW; zV7=W%mJMFgwo}PkRFhXLi9>`PLrHIVG)A*4#U>I=nm3L`l?4J^EIPZQ<;J{Ltp&(fza$} zG2Hm>mhBRnT+DLwrDJY`B|~WcHx=*WJuVwv?5U^?ovVjmp4A;M)rP-$LvXTcArA82 zCf$`+e1nZD6eiLZM^;=8yc@$6)vR$Fqt;L;BL|0)C667^n~Zf=UOVfx|NhN}AB1Hy zs0e2fg>(zRg*vw?bUw=E44}s!nQUkxfpBq z-6*sncHYC@un%plsp-fbD#CeNp#RhzeDuYh)Cq3BO{N?0vWQAe~~ z!jJ_}=BBHnw`n2rlMQcHxhM&D{a`$R^EIcriOB_kH?!w9z6ETuWV>JnpKF01w6*Z~ zzTer;!4|^SPh0eY^=wvpGo`|JX$SH7&S=f?JIS9-obG*5#jS)oj^y ztuczfay#y^7H>oV7y^(E`m9Y<5a43cUYR@+)Ehx}Cr2q&-y@VFZu$t>&>#wJtG60S zarxao@p2rH*3U3iZXn(;lH(xN#))u>)3y7+AzTp#fB2cFXD9%g0ARZ}=&M;&2=LM% zczAfwzXnu9jn%a1o8m#`K>jOsJ+C2; z)MQV_S~+hDVWu$JHGmHL=+u-99Io);0qwUcsn?h*9J2mYUk}dlMTo%;6xYpKQHAm4 zo8Ea1U@Jh=31zwmf8v;b8kfF;qYd!FVPb9M_Oj{m3T~{D_-Tbh@%ch$Jh=a6veT$N z3i6ZB(fI<3dKu)zN#Sa&>IFlQJ&OnnRoDEm%3l^?FAHm*6dbEL&p!;j{no7{4Pw?H z6#)OWtpL-NBTjy`lI?^q+^zP$QqDnC*bU+8=h`QauS|$Wq`pvHtk8K_>bk0E_@rq* z?eJJnL-R=M7G>gm-;MES3m*hmUc_W@pr3Z=?O3DRl`>>a(PrGoN*4K}Y|M6~CRv?i zo=%j3q;n`sK%-!2H29rnPicXOR5i*0phECJM!40gNx7vib`>O#Jj?fP%@}I;Z0O#h z7JfKxUm3N|q$#=vmX^y;%_t%v3Ey~Go-_`BoXd5ESe|0%#k-pHqc?o(FLW(9t(tPz z^@yPE4ZemX_~-eW8(T8$`*s>l8+@s?3oGC_>Z#ZKfeUI{o1LENxIIJxk>bK=ody$+xX`Dc?%b*9b%3GbIXOkHQy5n ziN(J0rI4Ld#ol~h9ii-kdsypxA9W7(vQn$&;^AB6JlQ;19gnB*7Qrqq(b5jY67fCp zD5<|t?PNW|ja*|CymXD8lO$*V_ukf&i^wD22Fa}zqUhA8q*Liwr#`aEf{`blf%7A@ ztm4lcZ_;sE$q1f?r`caS+{NiA5q#wPYew_lpgq6FO?%bySdakdSa;oee!2Q{`WC5P zOw_+_ZEE=i&W?mPLI(Y81Bb{HoDiKQW$6)9)}|>Y^rIXc{}epPLee%*4x7S5l(y;` zPCO;2Sq6;;{&P)96Vtw=PgeaC{<-}@0k z$LB(t1M#@1o<;iSCom|VF8NLh|IuffzF~F&eMtwzE@6wI3dW3RpL?34Mt%`cmLRE? zsADC%(mh zs-GLZ9vgjPe^FdRBT;b?!sRQ@Z7KkdXm%(F9y{~A>y^p1l$BH7VHP56P0Anm%ZdN&Aog|f&1(-| zemD8oLz2-Cxim}1$?KhzHa{W~jJOhe@&(XIm%kSzdJ+G<0ymv*`J?rV=+r^=>rH3d zb(ioKlu^94aLXd$KezaA5K~ZzA(XdP=v%X)9meRDV>AHovse>CUnuB~hf)sFfX8QM za~|%drd}Z(Paik>uXYgORClLiwdTOx4S(C`!22oge{aYxqmN5&ma5#N9|&iJ2marRHA{|=6u2(M!ZK4ApgBiLrz zdC>!SK>9hI_zn6O?^}4SUPMo${7H#jsNe}DB6eM#(?)&R*PEseb_t~JsWbc?$!Eh-1h!hkkS-A0cmJKIa=+<#q=@XrNHV64!dhK(p6yw^NqBnkCb*9bDA0w*Z@ z(MmqvYd+}}@uOSGKLj@Gh>xE+YjTT2eZey+Qwr{URF z3T&|4V41OrIDfwAZlTtQ2rbORUs6T~@B~CzS+-wKNqDtClF8{N!w*WcO3J%3rl%z0 zyh=kped%r@Az-pBN6a&Y=2lcVPBnDj7w#M*n@aQ^%-gkyFx5`2?yBa>)c_exhU!h z>*at6lz{Zj9nt)6iZsMwUlJ9*_Jz7=mv=30=V})8^8J`+vNB|TO3QU>ANJHrx$IrM zt*qjkH4~rUp+>>HylAzL?*bv<>pAR#l#baEK^PRFf*nMVGLPq-L)$V~78>M!L}$2^ zy{??>-S?oiN&4ze2J%BEzD;(bY7?b<&u+RWzsb!L_6jX&RVKd(qD_!B4__862wMm) zEk-HkM9F7q(->%IfG!FXFbWs9OTSg})h(al{?q{}Pt^q}ldM@Pra924?3 z0MeO~e=w8cHP3DC=-P*79{wrP0oxC9ZXS%d3@1c{hf}#VKHuoOKlTHZ0b4>cUTkka z$5^N14_M3Lz<(DXPxe=p5(>*fL?E(r!4b?)2)l>U$*H-h=D5`8qJ4KT-)J$M^<-;w zWdxGj78b5UG^F!r_s|>aGFb#BXInvuDUSHgdl01nARgj6&xcKWfOv@Z4RGe2g~Pym z(421YU+$jU;>Ahi8h{Eo@*JuOYd4NRo;IocWXaYdfzrdv&ou0NBshzY3#X-=N+U8dY&HBKR1!EI_PfXsDZiyyIe?eo77O(_fyBfw9W$?7)Ezss>sk8oqrU`` zVQBBSJQ#a$qJjS~x3e?I#{_Xvps&bAFkB!$h4*d*+b6Z5j#`?L0i8e%y$iif9 zLyQ^fLZ++cC1f7~*pi*cb)HB8AvXXYY&{W*yR{2AUFAgm>Ln}cdG!z+-(Q~=TuM<_ zs?qJPLUDw?_*<1Lkxi}}<@#WN5BNu*No4EbP=5A#{|AJxK;JHz*;hjY);TGD5W0pG zysb2MFh6h4SUiVmFg7*y1=p=xP*1Sf3cpQBoLpKGJ{9QlVeqyWaNz%5T!cFlo&iXx zsHm7kc>ywfc<O5qwARgkn3*1inGBu=}1nc)$r|?Rk2Y zqT_7XwRNS_pUNXGDccBabc567Cvdu?=W~k8&`L~rUJ8=RX37L~52-jeKMyiu7|;?Z ztvFo~DF7cLC@AP%+3UY90fY{#UEXC_=1WQEHj6Csi;MTr`Da_9VHa2*;8p<^!*Jid znbXtM6dOEu+qQdDgv@lr<$u5sH+ud&hN}!d#I0MmJ`y*=gzgbPe=i!5ja0u4ak?rR zgMy3rIXNZdcDixqnJdC*{t*cGl}@kh3WKjE*O-Q5zW^9EjFfW82(%t{;Hi3#Rz9Fq z1%TFQ%qfX0!;hi*`Gf=Fh&uM+EJwxzj^4N`EeG5qJ|OzyjH_zTVc!##cv;X&8O z#2PB(zyJaCe9YCcl{XULi1o}%SdI^IvzEkrBh8CJ0MO_HS<|~_9=s82ez;VJ9ul%* zcZWP1!asaqd7qNN&-NIwA8aW@Ky83VK>0wqxs&^aS4cn=sl+$G+Y%XSc)ht zAF{%^K;FqapO9T;tfcM4xrX|EdgvV1(SkA!0MWdI*?;1<2Xkf5m{!$xAt86R}-6Y4qXqglY zUCWLDGX|0+!EHCaGo~J{zZ(CDl?oRz@UgVC#ktN_;0=Hc-aCD=Z&|qRL=B|Hd51EC zOOGfIRA6g;U!0#0X9x#5{x|b-Hd)0zARkvD^)}SBX`0^;VwV);fezsB4Gs)Yxa#WL zB#?CeQ@!h{p)vN>ze010(t8rt01Wo0NqgXkx4;3>0}IvB+nW$E0E9khL4cCj;Y;Zf z0MZd)!#_|%6+D1#AN*Y|eo1TRFh0 zG1z^O4h0$<8~c|DWVJy~(hOiwaBRGxJd}P6nCbukt4XTOg{tBF5ByW}A_v%z5#uxg z2CMTEIDVo{=7vMqR_~xp^T*oS?{uy}e<^rUlCYg73=kWj9FQ)sx(*QFJt3i*eqZ$} zz+CAV7(Vk73cQ)?oR%-o6nl6mvgiLZo~aMgl*&mZgkq^ZNsxB27e2{kD+Z z$@)CgK`=FB6>PeXo*pQE7QvlT+3qU=He`y>1}wXGkqQHktxvpVlVQ#gRcIF6?g)_C zbKUdWU8WE_KiLi+cy^E*KaDLx;9S4@IX+@XBUFk*YPQp^5?9Fmh+)YYr5a|5vGni? zYs2=RKX@S_A%G2CG)$3H{vxw$j*1+l#DhSdP@HGORK@L=cP_&D3ZRahAgsk~jxeRk zIh1YArD(NYKB5IDYB+>2npxk&S*$5g>%bgkSn>vwCc1NT^R~K1L%(mL0*?5}EJYtZ(~_f3r<36P1kj*=LBETYh2KZwT`#2a^XIi z&dUH(0S@&7z9d!UAeAyvy{p6_W1%HRR8-W|M#zo@r&2O9i~-7yO$af8o-2BnH#k2U z*+e<`(K7m-+y<&Z4_!&+<_4fyFnTWafU>DE?{{^*wc_`*whkqtOv;{xh{2fcuxW(r z-s7Bsu1n5ISL77qrXPY~F`*@ce8+sj35!pUeX(;QQsBzQM|#f6%{#8Pv7kit`>sFXMhRT>z6Fm&D(k?M?RcRSHLg$`E|SCFYxu` zU7OsF%lDoLL)Rq3f+bQt+3>~9xpv!h=>b02=+PT4s8}y<15|GU#>&l`H-UExlCbbU zwqF=wm?@$Z*q*t%;>_q>-%z=jHM0@U3PmA-8szOw*OMx4F|kt^*D2dFuT0d6=I&5l zy^6`#AB#RSnwomB-9qbQI#?Bzl#;V`iy#hZd0nmo%gQ#`$k5F#zNpIcKEux@KSr1( zP;(8W6yxqf0FhGnV91ar)-n#+taO|ks3W9vxTR)Zn;pky$t5DhSnCVrIl-o8BZh4S zb_!ch&@)6^E|8+KA`EO_2%bT%4Z7+qAOYKvuA4i}3&c%+KjQA);WMyQ)HhBRo z3|m`U-YHim1gRxq1}p+F&=vMUCix)%6tF{q)FAC6OhXHc5JcVKpHFe82j9lIdn)L~ z^FIK8c>Ehk7Nf<)7w%;AanL#f;aG*2h~s4Yo0c|`b2G>0fUDPaZ*Ia^yl+2#Cra|0 z)}|Gk_w3U7$?#poz{bYxgLlNzD(%4a!Q^wUbE@g0A><0Bl3|&3_x64-Gyr%px`B3f ziP@&!tTti79zIcPHI0o^PB+=6TjchkRxF%3zzDW5gV=%Dl7T5?pS^(D9TPb7fl=gG zt1r*@;dJNXHW-NRuq^;T4D4wp(q@2vb(CQ>z}`0c^QY z2YqibEt}ksi_I%#K$Lr`qjOi<0HR*7)7m-+E^7m%&(XJQ2MV8cWD^iw`LpF1!QaJ*M+-((6hXcE1P-z-K$D)&i%C=yAy?o_ie z-*H7CF74~q9!kgb4z>BH6cp*pLfhbw?(yzxE6>TFT4D$lLab|mIZ9(a{j0mLZ#d)0 z4DP|%ep3X*%s$=_K{UWL9d{+fLYxCr5KS|?MX6N-=L=-FQAZ$=$Z%IVq0;@-^;Pg( z!5PTDi2F-XAn~u7GiWA6?uhRxj$gg@Ck&OTy5MaxLcwf6rW01{O}0 zA(Yfcr;<><|Kpn(1fj@xk2`D)wivv>y}iAV zZpk@`>kAMx>b(!6kt~vG6Oc6KYEyZk0}=b(6^vPV+RR7K{QR00fQqr|M&W*`5H>as zkHoCOC}$}jn6T)2;IO}eF#=m0nhchuYIGr5j}pJ9C+SAt(vd{d?F~E%_nbWK=fo6Q zrMz2lCEh_k+4*6od+6=%W`ehHM7C8za`Ig(Pgq3?*g1J(S$a|aiYny2k7mT+cn5QH zfH$y(X~6D=Y&d6vs<|*V*OCbM^@rY5e0K8#Z;G!}R+bsCkMx0!0@)}85$&zttH8ph zwBwjaQ|Bzbu?UX1%}#y!JT6`e56~~d?;YB;^q+nnhg9L4I%5(5>QqOjB zRzK3~r|x<-K$}d=(zh8bd4HIf-@AXGPmUM#vRAjg#UjA|d?yP*4XsRRf%^J-Qvv2W zXRIT!jw=;R->U0?sw@9wxy=`;tArUey)I}*4_0e7&lMgT_rtMkah=7er-xcDdYl$b zIXh2`(ujxhiTVX(j_QDn>$Tp{o~Jh0+E**)Xsf!{a zCLu{S4FTiV9IwKG!BRh{aw0;hW7u17YoWe-=STh}$Z?4A{s=BPEP2Y)$g_imc!Q+n z@c27mGL*ApyrcY5eOs(wGuBNg%2iFdHokMgc;JcCyt9%o(>i%@-&4c6l?1Fnz@D`8 zs%->a_v(t(vMeAQ!IIBf{tX}>+1u&?!CZ%Yvc6t-xg^LeeCxP{4D$_Y*;A+3qSYvv zrLIScNdp!`_tSE+owwZUs0 z>%l7IZSx<6xeRVbswr#4*>U~8Y6iYuAY{&0IrCyDkX00~R9(hjC&x%oEp!)+Ta!eE zzZY|0NxJQ#YTw9(UdyO*426jYS1Bozh+CJiM~2i7JuB@2i7!BS$_K;%1@tYj=MtsB0CRTTVe)zLAnI? zg@S?t*cUJvL_J>y1zp?|;va;x9{Gbc^+4usFnoM`kSZ7Nu%QcBKKdGT{uv*qr%Z)VioDFQcRJpX0nfZ^wLbf zm$@G-eG!#HBvDb{CnG9^c9q`YQVIy5!(r9>K{jFoEv?s}KM*@Sw+ZlCa+&l2QU@jB zieSAA7?(L}c4H&bt`lbpN%>WF2-%%dE2N~M5}R!|HmG!PUqfFTvx^|n`&=c~?e*Eo z>I)o^GOZfjM$N;ci|KTn)Lkgox;-~i|fq#u7A@X>zVpJ}$ar1|>c=bhTi;CXoY z%DFa~e<9d`@W#ji3lzNu=vScr_t!(j$_?U&ncJuX1lKU-+MHZ@GEQc_w z(O`gmC32Ff*I%2#VcQbYNE^{U7Ea4~Rh&QjA~%NZk)qcxE3$~x4gh`N=PO`HOmXrq zs~cdv=zQUO`?bRy=%)PiGZ`zwQt6Q$ORi=9&-D;-4iV1Z2t*^66Z_AdYTn=Ye=7U# zcq;$*|6`A=j40W%vNtJ0lFSgP*Y$ipuj`eSd;B<7IZ^9{{1Z@l=Dk^no@U&^T^vok zko=3`vFXe#m|m={p94Z{C&0SYp^h2UH!^PBYTP=@5)v2`M07Q9i7yxE%4z5 zZy@p<0ATvU$8`1r0D)`p*#gzcuq#*lYo3oPWU@7{ZSE?14DdO`0@NVfIrB$KA#DBh z*pRH8+^EKneW^y6ml5_>A7F>l3H-Y1Z(kh&Uk2PcWw&FTwh9b@> z*JmkBd)>^c5CivVU|`_63z!%n_I}QjRl%;w&C0=XkuQE;o-i#r*{mhBbBAE1{Kac$z#enXY=@8rPfw=LH|Wo$ z#}v5V4F=FDP2`x@08p=6nG9&2jE9>$|_Uj1u%}EZ*xF+7k#)5So(z{LlsIeY9WO7 zbheF^RApMIMN%`(FT zEm?3F-&#DmspoMo%eje1mjR0@(>!qm}Fv>pfebDwzWA4Dn%j~p7l!l@m_)unoOPrM& z!_Wf&+SXoM;+t9E;{wQ&%=#_zX5Yb%K;VHg76)2!XIIxO2sUW{;cXsUiUlzV-zoi> zUWJVP2Z;d>@{B~2ngP{_>%2Am3sr@QV{m_Kai@OF)Y4LhEop0a!^!Yxpsn;3Cp<*w zg#^49b`yA_+cn85niE}B!6D-}-Uapr-XqXiUYRn93e+$gY-=NR`m$~THX3wXh@H<( zytPYnVRHYO4*z&&>ls5Qvg*@vUy(LsI@$iaed&@rkA4NmtO7m=4V-fK4pUC11Bi8A z^gi5X@`T=xL`FgHmCYFHKaH-2T@xayK*GDvOMQ!xJa&8!z^ZDl574XJ-OI8IBuXxN z*(u{Z1e@(&rek1XOChCj!kWA`hQ4Tf`*xn7c&3-0B%ObQEz6>rqEv=?=T>eea(6z@ zmw|h(pSkF3p{)T4bL54-_R|~^wHBff8fJ(SRFKlr%lalb;;C9vnQ?TuaJonH5)A{w zC!HzBWo6JTesCu&@+6JS)2nfe9IeEJfw^iIM?UC=I^R~V3sF?k`8e+eYk)hDS=zKb zW3kSTCRQK-mrhqSJeLk^f%FpJRLAJ=cP4&9=;D3k+0`SQ1M^%Q8!J-8xQFT8A9H(* zLLiO?qU^k?u6>{t^+Tawp^`doR%2NZ=JMG~Z?2jyHDBBrsBR@Yj{JREEVU}g(zmk0 zx_&rdZ~=B(x!KFo5EZK%J>BsR{@s;Xq(l$6wn)W_4c zXIha&a6U|BU!9v_(|Brqu%>CHT$ z;q5bM9=Kk=z%JTL`KOezill}GuZcBbpI~4^T_0J?fv`a&QOntcC-j=X{sz*zD`HW&?qrUdh(%FSus-QE7KqI;`X^P~~uc;Nsad zdCLDVvpdv6SJ*x!SbKEpz{BWbvOP{H#$CQ~_@CT|7^~Ogdh3vkW!>=4SGt(#d-env z8M#AFp7wr{`KaD{f95L1*83G;T+tglJ-&y$b1_+?k_3==`Tu?%#8+RP!B`~N_q|0#mhHCT=9 z7!)3#T=+wd#ZPzg>i?#RfiefV#J>{pK_5WR{x3YSn>aKXps=bAu31h{J!kx~4*zQI z5=-ik@WZO3c|cupSecz-fL>pHO>x*tAZVcG{?~R{H8f7VpvHa3wSzRG%8VLp)3`m) zh`&q# zk+(C(_>!qw5pl}#%qc5#lcx?w3#1{o;@Fj9%-RkT@{bHQK1*{5U3eDFJpd8qs|rQi zr{X_9+3szqoAmBKn_Aw$Q2MNB@HmBawe5trVeFY4;o6S<-*<->Iq6aL7P4o;x}eFu zwT34|*XlcNRs?DOIjD$A3HUB}GpPQP-iXx*PKb*2@CzAU{9*N3@1zc|l$|kR(#CdW z=aJ~YF8aH~Zb7Q=c+JFESj)0#QYQ^J=CJ6w{g-%I!B8b@-1gW^`S5vOKkv8BUUaFT zx^T_=CT=gsy#gmPq@pcFM_qo-5pe?XPu#q(FWe+tW5TR7IF07{~N6k{z%*PBW6 zAI>LLRrqGx@4EY8xlmw2Hc7|BuXi(Ode&%tR1nO5FBaLQHvDLZI9tyRGs>P0K1F4R zy)Jjd>gAd=p?7K|A$s-hPty;T+n}?vv=qBLj40c=G-^#NXS?U8ci;y7AIiAo_f5VY z_M=Inrb|h$#BOjtU8)a;fFD^WId06ttrnCByc-;t*xoQ#CL#9D_oB0`KbmSSM%UmB zZ$*-Ye==-S5nkUkLd|&&WySdr>U!{qx>(BG{%#;%zBS;A!0c=g;-B&F!?ZB3Jk!d_ z{OYRy!$kPlvNK%6@1ksaIBH<5yQ)uK%*I*@o1YGAg2q(xlM4>i-T|oZXds932)e4g zDu{gl)l%vQm#;>9I7-G{1?`b&{5LsEB~7K6dJ3w=Q@-!V23^&s_+7+Y{Fy?6(K>dA z3a@`QaMOD>Q0@G)M^NC03fwXr+BStveF{3zEwY{+1%ktAO^$o@e;R&jmKSupN+JI| z+w;gIUK8|>(o0y$=l@gbobjx~O9o$vs*aGC#KpR*9?V(oFJE2C9X$Fb z)vH-KX|~nB?Lc>z9s%@u?bz>Jl;Mj{fXUC*56se|v~uirztHq<_HL$56c6M0IHS}^ z#*b?m8{gUn6@X(^yZVw@5vfj}X;6g|@BVEguE&6x{+_AyY7RolS??I>?p{nRE)<&n zcw`fKy+@k*ef^VzSriJJ<1b71Cl}p|VRuSk4 zAP1KpiUTqY0G5NN>vOK?dFH3yOKexn z)xtt>NhV?2Wze7_PB0~avtzHrBnJshAfOLexvL7`ssP&xru=cdCm<$v9T;Q4#OsQi zXYS&SGDrjkkpPfvVD>K9j#@c{Ngb`+2%SFQ>q~(bhtvkiPrxtnDzasPcgDlru%RAn zndPB20=yic<5;#rX*uwmT*G#ByA&|lAjz;Rv+w9}9pT0I;XxN=0LIJ8%F;SU1W8Y1 z(&xLMy}yEhCj%Y3>9uPTI@VOpP>HPoeZzJ+84HR)v4VvU$~)M}6rYU+sNnlbPdYj- zgERsdN5p#wv4fBk$PxHQIS~LB(*E{GWsL?aGMltwkO4z-nR2IaeuR3q0T4Kd_dtyS zq>kWB@2)7g++g)_YKj{)^FXEpgq)JgVblm}llw~SjFA^0&qjuY=yl)%0OW$;3#eJp zn&a7ScsA%6;A`D^_>dBmCmS1{@H|kb)2pk!(w$Q-!tl1r&eh9ups5~M@Z?M5kH3W6 z9KMa0ha|cL4=&u~!NDy-w+x`UGS05~7Wwg3c!0Df@t z>iMH9TkVbldkBGUO(3Wa(0B!Jj+yJ>0ewaD@>aHy&nC$By0Rq*vEzcg*GUzP$;_+_}&jB}tt`9CNv}@Dkop`TP@D^e& zXbxCbp4M8F3}WzXbL0hC&r;U;qDM+@>Sjl&i3vf11btRzy2axm&Ajfb4bY{)fQBjr zEEpj2!<;TFKRa20q=w;jsMZOA3WI+k0|OxYe7H642ck)8Z!OvYqIcR(&Xrl3;CvF1 zC9WfIl13`^4G{G4pFx#WT98n@0Cdda0|?Rv`y^U~g(`WG`_DrvQy~o~11?qO#r3)- zNKg@hA1Lz*U_0>DA@&P4t>li=6whQuTyD*vq1!G2%oGTQCg^)|BqW@Zb0qq5Luy8;h0NZ3OvLir)0IL3Q zfSW2SVAz0^6T}h@C!ivozP*yTG^8D zqk&l*mI49=oX%{kl5Ddgyz~L$4fGjzs$dUA>I(*@9x6)Vs6%0(^Qk0Ul_N~MKjGv` z>{zw0vP7()a&*{W=TV+)7$EO__m067pgpwpumPVu0#Ry74~z&@7<){p3~_I=y~lLl z#e4}2Pc@`I0Boi25gx;zoh_@VxR+z4)(zoK)qM(%&~pJwy( z@nsYWf#wDx7p_f}g5T_8v}1&+e0m=c9vFDwA>(lns95MHkfjC>#rUnpr)QW7Cks6t zymJiV=AthfoY*TYKmr>Anhap7K$wT$y$v)c(A-ez9j5@^e_U9Ie{-0YVD7|YYu&TZ z>93i6hCZ@za^LQ8WkV&lbfghIx1d`9(L;d$@1{V;jMu&#e%oAto&yipcOL-4%L1Z_ zT0s4Q?gY~A1?M^lhY!!((rm=ZVLAXD1Ay=36B4vZ9sP{Q@nab6ISLZUP0zf9)%m>i zO`ZD?kb>9i?4|0VKr#ave&u31QehKf0uCP*d#+U7l&c&CSr3{Cmvi+Qf12m9t6a~CujD&d^+>L^>ijhm z%A#yb035s{8Dwyn(4&!FR`K-quu%ho2D76fWQvvP*+QZ2)}ty3V@Pp!()2%$Z46#L4@Z23q) zbk_c?hhAMt6%ic=?%qS)bLqD)R$lA4(LXVFZ5^2=H5_$J>Ao)BV(Z<+Hovb)GvnH= zzx7-4j~n&BoD-FO@6PWx|9CflS-i7@)F6#UvMdub-mD!D?mO~tmw}IBWOb1XWATks0vt2s_8=VhUFxf0Z>noAwzbl0*;VishtsO*=Acj=8Z-us@gv{#fz zxs2CgyT1GZ!b?~(2S28STga+7gQGLptTWVz?mI9)G{D`Ta>#VKvNnFYN!0R_-^KrI z*o{3`u1d9rPP|oJcO2t(`H%Y`?}r`GBlvI__u%^9PRPT+Iq+euQFj(j3UO9@5ruV^ zFo#*m_WbRV_)S0U+5-kTebq}2cxELbn$^oB5XFM` zg86p}3P<{+HGh;7*g=0mv8$K+4t6gs^wr@jNq057CoL;{0XBmEpTjk^OyHJ64XkGS zcoQ8uymj7khi)hhvvMZ5e0lg zIoS#y!$&Qa##mKVwTTPDd$_o`Ch1K0AmYzG{&~{>=RKMf zzxBKzA(mc4b7#kYN56aiG72po`SbRdBL66B+>CWw`;EDfbP+Bt_fgJVwSMmBDXFdP zP0#1M<9aR;Tdt=t_xaw*-_^M7-|lAD()Y7>0O%=_Gy=*y9ObPrdlTW~M@DKh!d0mpPad`nn7kgpO}PCF8C z2%c)uU*5IKYWCbP*^Sv=q!P70V3`aK{dy;4;)~+IM}!Fb#|06wbK4_i`Am*0oZ&ND zIMOWn)=fXQ$Rh;#`YWx>ZkUzqE&bO7i9urSKVP(BYe{PvAqPHGasZ|-$-zB>>I?8fy-ASV2A%LiNmbhuzN)-yp!WvMk!pyWV^Z|!1O z_oyGiq z@i6+~vY-6kXuQ(qX8%AqzmvwpWN-yFK(zg0a$(M@hGb-FYAT&7`SI}+>}MYkQ;QN$ z$KPS56<0hHDW>cnkt{}f!IR5Kp|#H>k0qTdq{R$aR(&%Z|dp4@DJ!qZВ?YAQ5Y#U(sh>A` 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 b@sDwT(!Y5ZMT32Td7Hu0)z4*}Q$iB}uK(b7 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/edres/doubleArticleBlock.png b/public/mosaico/templates/versafix-1/edres/doubleArticleBlock.png new file mode 100644 index 0000000000000000000000000000000000000000..a4998c79727987083fa3c757e1bfbf656f268ec4 GIT binary patch literal 8546 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
    AIf-)xNsKhttH%!_aZODPftxodG4-3C ztL~H-a!Oo$Xj9+F&~Q%Xl+cC`SzsS2{3Cm?s=K#$Z~c2QrPR+LvgfSBxj2CFQO^!^ zVq!@$@erkXe%dXo17j@mXMLQ1duMAann3El{%0;IG55)@mll;2+qK!t#5xv6v)5Zz z#WuqV<;8j9Z^PTbK-irgp+Z!EQRsoPPb&U&&WFW;|P2Xa@BMhd) zj!PwYI^z-fp@i7}zEeMwPTp9hk2?CpTdv{rC%KzH^_35ACmAe}XCvAA z<}Ibw26z7Sq-934*t34(Sa1$FqvBU<8y~+fl!f#>7SdVHe@w#W!VJyQE|%6J1ub<- z(#$YvcW+4rgCLw9AWIlKrLhGGUYfayx{om1y$3!u{^JHFzTn^+<;i)sz61vcXA{+( z(9ZZD)4Z9!=hr`Xb-v$s?gNc;ad&^))+TFNWe5;H7ZLI1pIvVrA)!L{*Tuv3r5Yv3 z@U%24Fw%P#si>#`O8`9w1Rw~LjTN^#YUi&M$ApgdcLrqSeZdR^n}%&Z=$hJhh>4B{ zu>a&75}p9K4_9yRP{52>J}#c5pzoS`MY7W5?BoPk)^PyQNS{4>1{m1J9B%8Ux;Ek) zA67Q*09pdjL|+_BhM$OLSS!leNW7N=Opq1_nPT)CK)KeDmLo`#m~Ov(`O@I*3h$96 z3Uzg{jaj7z!BkUL#z{>}dmZ8&M6^U|l%9*s09ebUXb%A5>FIA%Q#5{(bQR7@+BL+0 zdy!ge9EG;H;p>ssY`#b;X0P+i6tI z`91vnN>!}TftPfErfO*DdSnV1Rnd%*-M%F^U>qgp`1ea&nM(lb8Jn0)Q{9S4&E8G# zl{q3|`~=7x4Dks1Np7js#i~Yk)WB1>S{4=-(atGbe$Zc{0a%*uRM%n~2d)OKt~}Gb z`@uwTW=49t!8^X9=PMoxP%F$FI^ASJ&_1cSS&NL%)8YAwz{&ZsZ5M(dw;pF{^t#~^`sHM)4dQcKWNH{hmeEvynvg!aBaeGr%x{fTgCUJ}BiMe94MS zUgMCud*3LBPXK=w)`xdMJ0@dyfNA!7x2hv3mb^r108Bm_npM_*Iw%gHe&S&$`x;2< z%_!_QgLOGVzjx`uKOdk z^-RR><%RDQ(+dX-{>9|g;}4lFZ_yGzq~{L--(Br)-C`jyQ~2(niyNh?8k!Z;Oz~ER zCW5k7zhqV4q$3n?LD|Fht7{rRK4`rrPE_wNCqXOSNsWyXrR_;rqssiv=ZKPI{rsOyMV!0{2`26EC`J|RHgtq{0KE!B^Gk++Fh#9o?dFRsv=**uD z6On{0WlR0<LNvB3tdjS{_K4S2*uNzI$QPCl&W z>3uwICu-3%toR-j-IBdgy|%Z$1vs_L9qXPmZ)$R;?GXfhKs+NzxvJawD_}}})!BHC zII@w(3vP23_4dTS$8+^+z30-{8>3*R(e0dwcFDYFdL>0Z4HVAOoMK58IMOa=vOy9j zZ${$4C051-BVeBPOLUGmOcR)AEY*S!;Dxit6skknBkLa1dNNqvI7;4hpS>T@W86V zdjSW`9FNn?{~xJ#5!rTzF;wmKIaQC-EeZ{}eH?*-7izh;Mj z{8vN8NUI}nmjH7qg;A^}|0>+2w^c;{RkF=kFsitk0T89-|086Jo@e4Fxfe0~f7S4R z*1!|L1Ggs!t1a6if$+V|?OC>Q&L33n0kPoc!Hi8h&Q}|5AGgTjgkwealq| zf2=()LUbZxm|v*mWsv9cQ?BF>Gr+t!!)yQgrb3r3d&=pV3C0<~{X$XyQwfhpaCA}Q z8U9tf!5>GRYP2dw)#_%7QYI9$4E_WiiR5~EB7NhTZOQ%#KaG&98$)+@@KgLJ-hyXdAW(UAx$-Aw GLH`AGi;Kfv0w$KqH+mm3dnP`cvpbui z{j}xspi}Rp@@rNwIQIPx@YXyYE8CF&BY?3wu16@O1Ta JS?83{1OR~&fgX#xUDM`}QtN-qJCCen#P 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 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/edres/sideArticleBlock.png b/public/mosaico/templates/versafix-1/edres/sideArticleBlock.png new file mode 100644 index 0000000000000000000000000000000000000000..66ac245e066e87410d7d0c717869ad7479e6b8c3 GIT binary patch literal 9730 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 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/edres/singleArticleBlock.png b/public/mosaico/templates/versafix-1/edres/singleArticleBlock.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea7304909ba5ea0420b10023f3d8f4011eb2151 GIT binary patch literal 16872 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 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/edres/socialBlock.png b/public/mosaico/templates/versafix-1/edres/socialBlock.png new file mode 100644 index 0000000000000000000000000000000000000000..587c19eb36f14ca0077d226b068b9ca87938ce07 GIT binary patch literal 2850 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 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/edres/spacerBlock.png b/public/mosaico/templates/versafix-1/edres/spacerBlock.png new file mode 100644 index 0000000000000000000000000000000000000000..d5ba9799506cb08eb2247bc2495c3278b5c93139 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0y~yU|Q~I+=hCOBb z_!xe0JF|93XgM4SU{q@35-<#D=vc_)!Xv7Xw1PnpBK3r6##iPLpZB*}fW|U-y85}S Ib4q9e01|307XSbN literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/edres/textBlock.png b/public/mosaico/templates/versafix-1/edres/textBlock.png new file mode 100644 index 0000000000000000000000000000000000000000..3d4bd3fa82547f8ac131ef26b44446c2763a6946 GIT binary patch literal 9280 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 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/edres/titleBlock.png b/public/mosaico/templates/versafix-1/edres/titleBlock.png new file mode 100644 index 0000000000000000000000000000000000000000..479d69d1aed843606ca8c12a9b8230e2a68177a5 GIT binary patch literal 1570 zcmV+-2Hp9IP)K|Lm2qe;3XJF6g&wI{2zjK<~r}y@@S5Z?_6Q!Sw961uR z+1y`oLWlv*ZntB%+xsmqso#=>5aI$S1yu+k5=08B5JDt~6jULENDwKgLI{x{s{eZe z;{4=nX`;;^0bqoA96C+k#_@PO==FLc?H=qWLRctcvCOTu1StBh#qsd#(^Yq@ap8b+TvYo4o&JE&fmx2s1S8T9y^&GFqpNZ>Zx9 zJhka7wyn)0;Mh;8)j{d%xqY8nz(MKy^>~1GuZy5khhc~Y(DVEorR=LJ#WZUjw+wBG z<^E{fMosi43KmT7d#(^Yq@arUoM>RvC-rP7DZ`SU0{D5iFrSL|_p&zoRsaG%557PL zDoqN8)Rfq+K97q)M;E%GMh2^s@H(4mYH@PR?Zs%mo`OZE&MiZJFJ6BLP+=HuKm~*Y zKKv0Cim;DRB#EI$BkJB?TInvQw6YR_uiq}>2g59u-nImom_vRImd(YM9JoSnfb1=`Z;MXmua#v68 zY3%A`_j@I5*|C=nqGa8jL($^cjbb^>99Wc5SEG9b$W7HZ>1C!%Nv$aiIPWeyN+! z8?oM_IUaQI+n*WaUSk4a!#g{>n+~6C^kW>TSF&u)4FG7;EIc%0A~pLCaLF(*XHCO& z5in*f22U+sK%am$HPzR1u;Ftaxb3spwp+&h4%cTSV01B1NI?~Gar|6MQz(s_CR@1i zz6IP!lsPl6<-tW&c(cb73}jMndk0JGuD=3Rq?xEff#Mu9qEQ8kUY&!X5SrBP8(vz? z;6yIxR7N1g)Q9p}lRYE0O_8MhPqM^?OD_3ET(r^Syu9I6zOA?SY*EngT^$;;866`S zpXKMnUHee0)wmjVvv7F{p}{7`7+b0PsTBxO@xo%NzBvqo2BGQbAaq(n8dqEy=7Z|J z0EAB1`MkD~30Gd0xJ8^LcYM|a>h^rXk&|7h)j_sBzm%Q(9Er;m1A?5PintiBxRbnD zM|i7vB^x`sKabN#jpLbR&ys|a1xr^^P+Z3Bk4r(D%A6#&UBf z^{i{+OqSkyfRzg$BT3!G#S`wLXo@L8fnuOg$m9D&U$~tPe8EltQqwZgC#z#^KDQIM zFNjjB!<23~W1rsr-A)I-u$oL`GEQ$e*1z53;<(ojsL33ei5dv{+<3!k(hWN34B}|@ zl3_~cY!~M39v4C75DdM38|!vDP^V^~(<)=Rh9OEqBxBSkcaQ0C(g_&SP3W|8$$!4< z@5lE^K@~z=u;h8DLI`o5l7cFP5D6j$RR|#xL<*`9LL`V3R3U^&5Gkla2$3Lv16c?s UXO;v5hX4Qo07*qoM6N<$f-Cao3jhEB literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/edres/tripleArticleBlock.png b/public/mosaico/templates/versafix-1/edres/tripleArticleBlock.png new file mode 100644 index 0000000000000000000000000000000000000000..95f356cdc41204b089cc70124e0d5f0c0b9d3f74 GIT binary patch literal 8033 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 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/edres/tripleImageBlock.png b/public/mosaico/templates/versafix-1/edres/tripleImageBlock.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a103dd37cf7e43c4949c4e75a38df8bec8bfe1 GIT binary patch literal 4441 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 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/img/social_def/facebook_bw_ok.png b/public/mosaico/templates/versafix-1/img/social_def/facebook_bw_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..611b585284c065488182fbec603f8aa4b62b42af GIT binary patch literal 858 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaciX0(?STfr5>VjrH~Q4Gj&|)zv@}$c2ai1%ZsJswyB^Q&R&Hg{cH8%gxON za^dR1k|;!IXeh)4h%Sg6LwA==$~ROO`B|H*emZJ9k=JTc1CF-r3oC z<;s4I+C?F+eD?j1S*-6o*5^X;3u zOFR1CO>$IS-k1xFIB!oE#}JFtwUfh>n+!x+^~IL#*nTZ*YxVoR-{&n{8ua?by~qFe zPfhS_N;)U}eU83LOEqJM)wJo47=M2F@#M=P*4`}N(;Y9~*o2GkPP;w9_vhjjxs}{m z0l#_9{(fob|=_XKyvgXZU^Qq`u*Y!xDLq|2?UC&}C@E_2$B>Q0?Rg-j}!dpYC>? z#bmA(IPsleIm^A1wTGq&2PoZ>DG6Q>v*N*)C=DCo^UTT}-$gYz9qlGGh}tO}l#oAh z$U^=G>vcx{8**$j9x<*ycK^)N*~}|5?+7@bZS1%i7`ReWfamJ0P1}!4PH z*B@_P=$=}B@!*FxX?AsmO^cVV;r?bJ%6ZlI`HPgcV}};KFu3n^X7A32o@z_p9FZ#h a&yXkk^Qa2P^e4bLWAJqKb6Mw<&;$TLC9W<2 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/img/social_def/facebook_ok.png b/public/mosaico/templates/versafix-1/img/social_def/facebook_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..57c99aa5384d7398068920b8a143417986902e49 GIT binary patch literal 876 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~Ixyack70(?STfr9>3`|R!O{j2wRRqq9o5ad?4!#;k#d)0Oz*AFOOz8fl4wbwpt zm4EeKkKAp3Rba&s5~k6wdLKjRDxjG_S=Zv7AnjHAyi0ch8D1q@ysP#Ar9ehi?KMuD z31;l`t=t1v2DE)IP_bVXkg?kjs0Adx7fM!xOamGYROwT_+rJ#>FtBTZ>Z|wp!psEf z4FD=g+XS)*$vQzf!x8$F&`~a{v8{ci+oqoL#y9LBoQJ$FIKLcH&7${lRS~pL8s{^7hk@ z@|kDP-Fo})-~ZH}<8MCx`1tkL;Y%-r>kiy~_BpEM@QQu+(|b=eo%U-5hH_v@kY6yv zES4Yg$G*K1;*fl@NB6?TUY--|-aj97{o3~BJ@dSyVxJ$W-j*=C^Rkxp@jdbHr7hj9 z4pIRVZA)HrpI>OBaHMbhegC%$I%jf8zp0z#xZ_>_rQS;u#DG!h?djqeVsW~5^3&u) z1_DRi+Lml*3lCzRJ8 z=M1~5QrWU~`&{Fr=RR7c1k`C~MZ|UMWW7+V3^v|&e%-wL_q>nBKizn`|N8caG5Z8e z=dNl!zxw&yE5FaXaybY(GXL_>>tp}Ep*LaU;g0n@ouu?yCm2B(;oP2E59bU6E?%~{SR zA?!|3?yftt91PZ&r+P28J+NCl_wDz;(bJE2t<$d5mgLDlVr9W-ZX4ya|G30)=fuk; xeCty^-b5DOKC@k*_)O{UAWpsATm0_WKic~%a=Ru^DKO3$JYD@<);T3K0RV^dt}g%p literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/img/social_def/flickr_bw_ok.png b/public/mosaico/templates/versafix-1/img/social_def/flickr_bw_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..e761ba9f92660e1147e596d0d2ccb1c820a85be0 GIT binary patch literal 967 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaclQ1AIbUfr5=NP+eW!(9lp{Uk?-jl0X3D0@*b+HMzODRaI3mg^dtp5Lvhu zh-_$RC|ntY0n`o`sjRGom<$&IYEMf`D=sdEi!?Pg!A*t>qA`Gm07ZbxAg+SA0WOHC z9pV>=)j;$A|NsB)-MfyCj;^k*dGqFd{ra`LyZgqC8{4;UKY#xG$B!TP?c29?>(cJ%@#*(r=DP z**LcDc-y(a_FX`?0+-tU5B_r46!&}JNaw$VFQ6SW8Jxi<`UAt@K`s~Fgr+{{CBZzxe%9&voJqn^r~K-5@pNW#7?#m8u${k)q6-qh4eeX@Sxr?#zwspR2pmdQUJoIkPryW#!A2bhj|Ix{UdXMe8v z=&$(ohd&HIzINEDa_!Z^GKQ)nTxvV^XMX1Re9G5EVC^B+G@HPvR)OoYPXw5meJ*zM zJ07L{_$lws_JzjNikfZyXKq|PY0>A|zOL(wx80s;epb6^-uJV+mKY~z?T${Aymu<~ aKjZBie_nr9?Xm;LFoUP7pUXO@geCy?n&*Z9 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/img/social_def/flickr_ok.png b/public/mosaico/templates/versafix-1/img/social_def/flickr_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..16a3d7f98eacce70d1ca4ce36f534b53ca8b1f97 GIT binary patch literal 996 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 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/img/social_def/google+_ok.png b/public/mosaico/templates/versafix-1/img/social_def/google+_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..485d659770dcd83d32be76ff53e1096391a35387 GIT binary patch literal 2941 zcmZ`*3pkVg8y*pxL~^E@Id<5_OxoClVb~-o^Qo8_#%$Wbsr8SPLnw4~h*A{!2T z5D_Yb@;QDfa`;r_&?oygI{3Tly{`B0d!GCL-Ov5J@3U+1&Q5l+AaxJ`0FbrE<6MMy zu;`RtDZH{HA|{152|r7sB>+%zQf7`UDO>}C@$PH@KxVDz6a%DZstPeWG*=RbL?oao z%pe%qhv`j)g#`r*(ExyX7+UxkMCFjdVL@~T8y$v$EFjRrXHggq0WUx}ffxvh=nS@I zvZ!Da7!qa(!GgeGusO@e7wv+x{YDqAFc5zZCm0QfhlYm2LXBZemLJ>*g+jp%5pV_&h)C$iu~;XE=KE8L!Tx4T zXb>*Sz>Q#r@L$oWVYJ`SM48{xd?-I$1#?;S1y4Q{IF(KfqB1yaACyJApT#G zVdUUNv4tisdNUVQj&`B4nRKqG1-ltE4i;g)U}$;xXGa!U*36(_7M0Bw(y%7qC`)6@ z@uZ(JSkvzsOM}Y^J6JTKQ?jTotkE}trLpCB_g@Jt4K5*wT90<7g;D7w98K8J1sBG` zs(zVRPPAsynXFyGWC~SO*aBrqXgPX8#{G9POAm5L)aF)C+;X7OS_N~Z% z@Fih$_%G4s!Y=_$Wctv2!*OH|6^k%5GJzT)pvH!-MqANF2(+oN_GOqQ6^Js{EGn79 zWVte#bnJqQAkh+RESyDQtCl0akf^z{+uZ zoTV!XSn1|Yccm)M&zt?b>V=gDt)#9c=NedALfdxDA!pp5@<#W+K>UwbW+f`T5eLH6 z6+BO?BsSkk_EJ<*cpRA$py-CXP8XL1;ool^E1aG-8|*QA`JO*%BWS#E7&FN8s}z{1 zQqAshXsenVFVuGaYmbmJlpP&8^lA0OthY0MfsOigHPg>t-8CK=PkNQMCiHIj=%Wh# za)TmM!;|h{Ztg_sjy#%7MVqC6_2kLvOpSP75+HU@QDQAZB|G*&$D{P4!Rxr%E~w(| zg|9P{I_`1a+zPtuFsbyqp#9d2mV1{2(Th++IWu#ny-;^wWaq`UsIr_?lbB#^C+i7) zBqqc?+TMDr6#Pn z{8j~-l^#{Vp_)NhQ&GCq4J$2D$1$@Pa<^}*)by+$qryglt;A;IDy7}7DJKow+UFxF z(eHIp%r0946%dzjV;>0FY>?AIu%0Q1*rr)As|gx3OSa&;M4{?;>e|Z7LKrFfG9%QS z@-O)zUFBQJRpeK^{n;;}x5-_lvGNb5B90am#5e40O2F)^oBL>1ZqXSNwL#7RPY%h= zi?U}s`*%L1DY#ve)OoJkMu-zP&{TA-7~YuZ`Ef`-OB}KnBSw*S%98Q$wCgy?d}OZ^ za}xMDDw~Kj?9MEOtR+#dRH0G``kP5EO-^e&Fn3qCO&1#g;V+cZst<2R%I!|FyO*!l zf1u4^l5_dZnIzSj5Q|I_FASjTbWX}!(sV;H&@nvs{iz&oNwLaqM~`{kdxO_2hj@OQ zKk1*WRt5o97>A4zT%jH(vbwW(hHb8TqYqFxt(2Z?rEo(}GYT00s79g?R(k~(LJFwh z#_6BazO3#FKYZnJ-of6%ZMWY`s)9mN?ISG>9*2Jsh;OhqOab29o0{m=2a>Kw)n|F9 z?1{e=^7)U)>BZH#p}jcI5$v{nqhVhlHU*kIP$Qnv0NKja%4tnk+J1img6{1S-?in% z=yXmw9XI2Mft${BM`b^->u=mBX9V>sbJrPcwBxmFuDf1ab%a=UIoYoFKBg`- z)AGszP=Ts->MidG8nC4uQ=&X8GnmpN(3L-{?yWB2fcg6983Y-kd9YXsmN~(5Y8n{y zMc}(5%nCgAth9@ne0@1KWwuNFqW8cg1J5nK6|~1%JHQ#r;8+o*xXG z>`f(zJSxAXe!YezsWzSu&gK$E;$H8|D}IrIKl-{Qdj6Jm!J*M%+dO}TyRBCz33+3t z%FeY3y%O7{Y>)|&bML3T)_qJX>q}gB-HM3JBScL7Qwz9xdON#J?P%bL^Yp8L0OOS~ z<7=I78mbPIcj&E(9+N?8k zr6$AItE*DZC4&(;Z<07P=lLYLr)*dDeuN^%ihr8lmA_X0c3RxIjivf$xoZ4Qol`^a z9(MNRU^F6z%kwAh+;Jwj-I+11GU4L83_WfV8na|fyPrT_)@C)sXnG8?qT5aLLdk}P zpuU!=X{{&?SDgLMk^sRDsTY+8^-B|F!*!o_TUq*dkz-L^r333JC5}0NK)P?d+tK-9 zlL9~T9a1jOo!-)W=uf@X&CvJ^6|cse8uhPLe8IH!wu&qj{k(iXu?Gh6k~&4lx8Ty( z=(b)LBc+bZI()QQxyJz%_gA*9&oGC;duO9Fm)@6l{nO!FUv-|{pDQf4OE^QK1)mbv zC5rFcaDt{b&sU7yZ^pWUH$^(1I+hA^sXX4;cAq)bI(`7BM{MWq(TkoxPH0%4*E-vj z;p}g5NzAQ8Q|gFPw7|**8`6-t!=l#`+|zWf7X7qrW0dlpYHAt$g12= zZ=dnC*&p-==6z7gL4Whso((LrdOClP?lu&)1Sz6^iL#0mHSH_^qlt_^ke>p`FzR6(t_qs|`Dbkxkz zBv&R$$~K14yy9{~wP2$~fBz-AlKUeXvpzfARC^k5HL1$e)G<2p@wnsOhW3U$>Oi%p z!!f5KJd6A8#)bTRP(!F?jov@1m+bE;eZ7ll8p rvrs3*PR%FH3IyArv7bB-WeHXs(>3XulY0Oa{UNrual#c@c^&x=+hM)9 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/img/social_def/instagram_bw_ok.png b/public/mosaico/templates/versafix-1/img/social_def/instagram_bw_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..ddefed9f50256564a41253ec1d0acd7ad2814049 GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyackB1o(uw0tFiz8ymo&y1Kf)z8=U00w4pzhBF{)AhMyMp%4ZpSyfe)o10rx zQv*~Fkp;5h%F@!(fCd&97ehoKRzOt3t%FEGtb-c@;lj;nYHEVBfeeTvfh5p&AQz$w zLIMSWjLOPNxO$-8|Ns9_ojUdLWMhaEe1Y~H;2 z{Q2`IPMrAn@87p?-#&f%G-b+^<;$1%_V&Ji|9;xEX&*m+T)K4W#*G^nELiaH;lo|K zcJ=l3{rvg!$dMx*9Uc4j?K^nz;DG}Nwr<_JZr!@svuCefy?V`>HK$IUdh_PZ*RNma z&71f3?b{bGUhLVk=hdrM$BrFqZEc-DfBw#$JKw!~_vFcw_V)Ju`}Z$fwru6fmF?B3 zO2BvuED7=pX83k&k37q)S3(>=c*N%QZu5T6-1Xqsm!B6e9F=6(J@MqT>g|_zSk1Wm zN*uO#UQ)1?nzXRHwEzCQBRjq?@SpkS^?66G02}Fh6I)u}O4N!!s(ZXJt@gA z#g+ee+@Aa0+`4@C<{nScZCjsD-TgbN%F51iX6Q`Uya}(W=FUyBo-f+4=+;avRa<7A zRWpqKsFzM~+kDk%f8+W6>^`@i3Dz(DApP@~eRx1%&Ds9>z*n8eu%Ynu|N7qFo(U5ykMlD8yMJGG+V=wt_e_n=oZjc!a4-FGnQPsp z&%ATf%5-@j?GO$5!+J#{;MOVWq)E?Shg6+YdDU;wTKu(d)uzuqGpZIyeLua)CD_mB zv+MMIGq#-K-X(i-+q!Sdv#ZM|7aD41uc_O4xMr)(VzaAyXU}@=oV(uc2hZ(q_a;88 otNs*w_wc<*N!5Pu8w6`v7S%J&;+1{Z4@@--p00i_>zopr0Dp%da{vGU literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/img/social_def/instagram_ok.png b/public/mosaico/templates/versafix-1/img/social_def/instagram_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..d60b0d15c20722afbf944d7934eabcedf3db7690 GIT binary patch literal 1134 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyackZ1o(uw0tMYG7Q2-%cCT3ESUktxz8=U0i4@MZkDm`@*k?^~t5^hNFocGJ z#LE}CgA~J1`C`{%kSqcfEOsfMr;K*bB)N{xCiiTNXkGK--52lbrR$GefBoU>zkmN`Z9Tj5%$=I~`&R6~64SCb7}I1lR1;OwJtli#V>h0>{o!-^QK7RS(Q?o3xZEb4*=G4AT zPu_egn!fYyvv&_(e3-lA+?qqzd~26g&)fU$$FGuEyNYM-ynO#<$;@3dww$?q@8#dW z|86{b{rv6c#d|I;*mc3bZpF8sztJEGX?One?u;W#U_jTJcA9kFOpmQ3fWS+nz3t zAr_}|CznSHI|>{#S8R2d5I0$1Lt__L2Wx<%2=@XbX0aU;obnqbR*AZ}cJYRE)kLP} z&wrD;bI<=b_x9|+yL0Z`RG(KavEFqnKi_&Qz16fVEo|3q&YNv#z zh2_tGc9DE5x&Q4C>ljX3GU1-wst4HG+`kC%J&<#l&v0(@ zWg(77OICc8pEJ>cEqmGlvpS&z@jadj{Zl;>xWk#PKJcci1{|2B^5G}5U+~uiUgbc} zh?}vT2Toc1`>}O%rv6P&}LQO9A*B@+LL_o8cKs@Gp7&nxndT+d&~KHYrDL?lc< zg!@vbw~=dbncc(Le0JWKs^?wE^xm@d`utUI=cf0zKh!k;y>#1?M4sW}&acRZ!lvI6;x#X;^) z4C~IxyackV0(?STfr5>Vjn&oFH8nL24Gs16^*}BV02vT=Zf-76ysD}SA`WCj7!WlO zZfIyITo6qe#1Nq25JqKXC9+DO_O!G#APEG>;!RCW$mRg`!WBT+KrX~d5Mv>V;Zn#( z0R@YTi-96Q1`q%lK*Rt4|NrODpL_T2End8M*|KGe7A;!3bm{BYujkB}^XSo|dGqGA zw6wIgw(i)mB0J zlP6Dh?%etK@#BvlKVH6kdB%(xhYlUux^?TNOP4-<`ZQ(AlmiD2tX{o(^5n_q&!6w> z>szp3LD|Lo>wuvjSQ6wH%rHw{_ZZ8!S3(>=*!M_2IeOyr`!2C<-ppTq&3ka6_vb~P zN2(Gp#qZpHTvy9l+UfZEQs2yymK|@n`u*QY9qE?7=WzeLtSRd$>_fcEhSo(gAV8+I^cg)%%2laUOr0@)I7yncCv=MX@b-K6p?v(^YYIx4tM`wZK0~*HK}Kz z?X1_b{_Zu?#Lf#plT_$dO?~l4#>9}pFV5z|amBgjPWsF?lj?UZe>USxwZajGFAnQh zdI~;nHf6h^zFz%`O2%cP^pxciBj?6y-51?^%k?5ui~ z^ZFOENd64w3YhG`xN(usEw6A%E^pVH5&H7xD~eOsZai^pJ9ls5woQfmckS4^L$Nl~ zLV{y@>GLNIyI0J*e%0vj*_|Q5f{TwY|Jv6tmiC`Pg!j+-`>+0_0i%||)78&qol`;+ E0EQ#aeE!lvI6;x#X;^) z4C~IxyackR2Ka=y0tFc=b}gq80_mADt3a{g*zDH=Ytrz+Zf7sGZbuxiUZYv z)PvOk#ewY5RUi_A%E975Hbfbak+q5;ZzDqq*nEhZQm|r>f}J2`X){53%VFk2)IhWY z$X||ect99meWr$Rqc84`KQU0lfumh zcHMsKHt*c_n{TRj-LaZ}Dt-O6qYpnUKL70S{r8MjyE8UiZ`ylr*@frNKmGjs@86H# zf7xpGKK}5dOSH;=j@-q z|K^=}D$#b(Zq}Kw*jQCyyabj6`2{n4lYerIW!5Vpjvws0l6#Jx=o0(v{fqhimu>SN zTxLw{*&%cY60OQZw1 zzndv6RC@ls5g7Xwo-U3d7N=_`r$!$(5NS1j>85Vb`m=5K?%mm&4sjXZxqJ6v`Q$A= zm%r9{_!r$*`R@6iRbl0!dw$E^Z<}8&btkl~G5yu^_UD8k z$3m^RKvva|OpkZ^&69#8k5=ef+SirTR88`o5y2>N)a+A_09SB&52yHqKl2M@_69U0 zu`x3@^(uY&>bQL2!T0L>&cBX+er) zx158eaFTYx%qLa#u5Mdo1@8%)1RYQn5>BekA8% zsr83ohRO@JN#8aWHj8mZ9K9@?kBBIIVUo>?GcV9$PFiOhzU|I3cf zlK!AOscD7U0lnje^9@?u^Mw5mAKBx)J|M8FbY1*Q{tnm3AU)aZTEeNh0iMUigL)H9 zE*AD1?cI8#&^7JGbKaEF=K*t-*Uq{!lvI6;x#X;^) z4C~Ixyacj$2Ka=y0tFjkpt`!czP`Spp#dlWWWd=FE>Ju-Hy6SV4Go29YJ{kVbAgPi zs;Zir8i)u`7RUw~1>`~uOiN2EE-pq^kIaUsgqR5=ApltrZWK@#P!_A+rluyKI7B5x zL1kqn&{YsEK-vHQ|F^WX{Qdj4tE=nx@88FdAOG{`&+gs3w{G2f_wL=dZ{PO!_kaHU zdEUHv6DLmm@#Dv(OP8KKdv@>My_qv-u359@+qZAc&COS?T)BPw_SC6U=g*(NY15_! z3l=@7|LqPd<9|XxXx5hYuf~J9lnJN5{j557)0> zKV{04GiT0pc6Ppg{d(1^RgWJ(zIN@}?Af!oZQC|!(xkSwwj)Q5ELpN-|Ni}R=FGW# z`SPMgi|*gQ-`d(befsoMr%o+a%jX0}USLU(UogY0Z$IQ&j=d7%*mLm$PcQpVG3H%BcjWw~g^z6R zl+JuBwcvi8xb)-JzZcG*2BwfTo-U3d7N<)mr$!$(5NS0|@8Ol)z-x8~7)FY7AD@}< z@ZCGU{WHumZ*A3n?)|R#-sENH&+;vI?w7lSAS8%?4+lQ z`WrH%F0{Y#z7_e&>ZO(glOoHdM$Y<5vD{np@7X9dWeabTa|i-N@OoIA7mev1X1H2d%^PQW5D*Hj~E zwLjy1+vHs14E6F4(vmaO@{|L3CtAJuCa}+S-MXa$4N^isek$F0uM)>!JG)a;psqcB z@9G%sZx-_cj`FzJ#qM2Sc>H|c=gr9u!lLWbUbS!M|NrUinTMH2a$bI^&?v52>K?RM zB{}!>geR4M4sS?v{cMr?|OUfD!a9`aJ? z1_{a*MLPWhkitx4NZpDe1>}}Tfr5ZkUh7(V2kR#XM_f9q)Vqx30)8h8%_4wF>}f?Hjp>pyT} zxIOv4-l~n@Gr8FU?x8Y1x32Yzdrh1U2*aMae8Q|wMO+Iphc6R~xI%IuPjpxF-(JO{Tu7yZ*3Ppt7&93TH18KRS@{#^?Ltl4Njb0rbeZ)#4j z-Yo!;$0^~*^IpQG=C=9n+~nkzEGs*M2251`mAZW{X(;KzQnNdyH7bXb!B0Qw!#)G` lMzV_8uA^bOd|@P6f2bCB42@}SF%tiR6mdQ}Ou$I5`WIJ{aP0s9 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/img/social_def/vimeo_bw_ok.png b/public/mosaico/templates/versafix-1/img/social_def/vimeo_bw_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..d307d112b5a18bd2764713402b4657e871f252fd GIT binary patch literal 1105 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyackZ2l#}z0tFjkpt`!cp`oF^z8)w5B!K|Pg-F8La1n@jXlN*00fdp8n_E>? z1!ULM)Ibyi8E9%CrWF?#1I3$~njo@35^f6`8)!~iS{kx4I2$Mh)CJ_i84xy*go^{& zKqpmJRzjqJHva$rf6<~vfByVAbLPyaPoJhwpMLxH?O(rswYIi)baZ_G{{8LSw+k08 z?CR>;zJ2?|i4)t}+J683egFRb2@@u4*s$Tpj~^{9EnmNWoi%IL`}gnn?c2A0{rZa+ zFJ8TR_5AtsU%q^qJ9qAm9Xl2*Sa9RUjW=)JoH})C+O%ogwryLnV#U;{Qx`8@ymjl= zIdkTG`0(M#kt6%}@87g((~~DpX3w7e?Afz<^X5Hx@Luc7mId<&W%9Sfmo;-Q!(xq$HuJ!izZrr%>@87>a z_SN(Pqc*T4$S;^-*0&$>$5>toaqPKpk*Bw7+k;>8eloxREav@%UGjERTyTW--TCiawk7wv6&9A-ylLrwD|NrKPFnnNtIX+@O~CZC z+tbA{#Nu>raH{iR1CcYwS{|M&Co&B^YTRkOT*Y3I#`)k&8@fM3c z-ClQPzJ_MbG>x=M;jRw1eRjgz?BC|nqjopA_VqG`-Im?J>ohynUWZA0f$EI+{KvaE zxJ3TOy!_4F9DT-UZ(UtYvP@EgL#xI)J+4EIGxi8;+%wE;W%}?x`FY4|S+$ZRk(!6k zxmVBjSkUa zbw8?H;5=dDedW%18m{}|jK8a!&zRO&vejn8fj{>&)kKddPC3P_J?Z||BTI{lX1m4j zi(%b=_6X~GBP)T8HG6&eFI?CEKb6}jq+uGj^V`p}?{0ekM29amWy_}vuS|2+G&hU< zmH3&+(stul->m)qrvuh*+qO4m&i}pVcCpmo3`@@zxwrkG|J2~5=MUF?_0gGfHGXFm W^XzYJttr4X!r!lvI6;x#X;^) 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 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/img/social_def/youtube_ok.png b/public/mosaico/templates/versafix-1/img/social_def/youtube_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..d4a24ba73c485d1784dfe36bf0da1e58e92866d5 GIT binary patch literal 1095 zcmX|92~bl<7=8#+8csnHlMq7kO1VryP!0iyAm^w^qJ>&YTkKfDp-d?VI^_r*Km((U zLKOiKD-?<|0v3=cPAFAC(qd6OT7dw;(%g?DFZW9~P`WewAK&ixeY>;EO-_op$B}Rl z1lcDh#IQm3Fi#sx5Mx@aMnJMU$vnh_pq?6AL&jFnTja6hqoF$!Zemc+B_BK*3qS=- zR?tc2=&^$jS~?lj3vLcVD)iUJDomERZ{CMD8pAAE_fThIuqpaQeuJ z)M%ztdYzLii)EKAQz#VfvS?=a129BgdpZ6bRms58G_UZfqA_H@P4%2%4RTCmetL>s zc|LSF*3$x?<%1RUd+&3~ZsC5@7pAawKyV^My-kZp%0zRGmGAV46#lq9R#r3R+#&LH zA*ZL?RyXDJe8N$NP_i8-E_R7~@oRnRi6-J&9K?*YJ_R+W^=&U|fSS5XU*9NXxC$W} z`&oHv`g2SF%%8Y8-UT1kL3DMCb%1aiXHZc0vBg?(c8hTOFuOcr*mmekuUjcB*V^R8 zj1tKDifJkWcanWR;wzVrjyF$nha0VE%2mq|W}N)y3jAV>FgP^%u6~T%`>2(uZT7kD z&`Zg?akl!(;Quh1J%t&uhvY8pzyi=D;VZve-WgN-8@4qeZ3r1nPE_eF) zSdm+?BdxTrHEc`To7DNNd)NOwMr&du;Mr(eXTkWPuTj*+&n1W_@z3eBY8%K!e87i* N5@VBM?nHn7-M=yG5ljF8 literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/img/sponsor.gif b/public/mosaico/templates/versafix-1/img/sponsor.gif new file mode 100644 index 0000000000000000000000000000000000000000..8a6786069ca0d7684419648f3fcf3bd51132fa53 GIT binary patch literal 5720 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 H0LK3Xg#d+> literal 0 HcmV?d00001 diff --git a/public/mosaico/templates/versafix-1/template-versafix-1.html b/public/mosaico/templates/versafix-1/template-versafix-1.html new file mode 100644 index 00000000..e729255a --- /dev/null +++ b/public/mosaico/templates/versafix-1/template-versafix-1.html @@ -0,0 +1,1531 @@ + + + + + + + TITLE + + + + + + + +
    + + +
    + + + + + +
    +
    + + +
    + + + + +
    + + + +
    + + + + +
    + Unsubscribe + +
    +
    + + + + + +
    + + View in your browser + +
    + +
    + +
    +
    + +
    + +
    + + +
    + + + + + + +
    + + +
    + + + + +
    + + +
    + +
    + + +
    +
    + + +
    + + + + + + + +
    + + +
    + + + + +
    + + +
    + +
    + + + + + +
    + +
    + + + + + + + + + + + +
    + + Title + +
    + + + + +
    + BUTTON +
    +
    +
    + + +
    +
    + +
    + + + + + + + +
    + + +
    + + + + + +
    + + + + + + + + + + + + + + + +
    + + Section Title + +
     
     
    + + + + +
    + BUTTON +
    +
    +
    + +
    + + + + + + + +
    + + +
    + + + + +
    + Section Title +
    +
    + +
    + + + + + + + +
    + + +
    + + + + +
    +
    + +
    + + + + + + + +
    + + +
    + + + + +
    + + + +
    + + + + + + + + + + + + + + +
    + Title + +
    + + + + +
    + BUTTON +
    +
    + +
    + + + + + + + + + + + + + + +
    + + Title + +
    + + + + +
    + BUTTON +
    +
    + +
    + + + + + + + + + + + + + + +
    + + Title + +
    + + + + +
    + BUTTON +
    +
    + +
    + + + +
    +
    + +
    + + + + + + + +
    + + +
    + + + + +
    + + + +
    + + + + + + + + + + + + + + +
    + + Title + +
    + + + + +
    + BUTTON +
    +
    + +
    + + + + + + + + + + + + + + +
    + + Title + +
    + + + + +
    + BUTTON +
    +
    + +
    + + + +
    +
    + +
    + + + + + + + +
    + + +
    + + + + +
    + + + + +
     
    +
    +
    + +
    + + + + + + + +
    + + +
    + + + + +
    + + + + + +
    + BUTTON +
    + +
    +
    + +
    + + + + + + + +
    + + +
    + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    + +
    + + + + +
    + + + +
    + +
    + +
    + + +
    + + + + + +
    + +
    + + + + + + + +
    + +
    + + + + +
    + + + +
    + +
    + +
    + +
    + + +
    + + + + + +
    + +
    + + + + + + + +
     
    + + + + + + + +
    + +
    + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + +
    + +
    + + + +
    +
    + +
    + + +
    + + + + + + +
    + + +
    + + + + + + + + + + + +
    + Unsubscribe +
    + sponsor +
    +
    + +
    + + +
    + + \ No newline at end of file diff --git a/public/mosaico/uploads/README.md b/public/mosaico/uploads/README.md new file mode 100644 index 00000000..1ae198a5 --- /dev/null +++ b/public/mosaico/uploads/README.md @@ -0,0 +1 @@ +# default image upload folder From abdc822f811af3b8d7cbb45a2a9061cdd9013e0e Mon Sep 17 00:00:00 2001 From: witzig Date: Fri, 3 Mar 2017 14:09:31 +0100 Subject: [PATCH 173/483] Added GrapeJS v0.4.25 to public/grapejs --- public/grapejs/LICENSE | 25 + public/grapejs/README.md | 183 +++++ public/grapejs/dist/css/grapes.min.css | 6 + .../dist/css/grapesjs-preset-newsletter.css | 215 ++++++ public/grapejs/dist/css/material.css | 53 ++ public/grapejs/dist/css/toastr.min.css | 6 + public/grapejs/dist/css/tooltip.css | 88 +++ public/grapejs/dist/fonts/FontAwesome.otf | Bin 0 -> 109688 bytes .../dist/fonts/fontawesome-webfont.eot | Bin 0 -> 70807 bytes .../dist/fonts/fontawesome-webfont.svg | 655 ++++++++++++++++++ .../dist/fonts/fontawesome-webfont.ttf | Bin 0 -> 142072 bytes .../dist/fonts/fontawesome-webfont.woff | Bin 0 -> 83588 bytes .../dist/fonts/fontawesome-webfont.woff2 | Bin 0 -> 66624 bytes public/grapejs/dist/fonts/main-fonts.eot | Bin 0 -> 5798 bytes public/grapejs/dist/fonts/main-fonts.svg | 394 +++++++++++ public/grapejs/dist/fonts/main-fonts.ttf | Bin 0 -> 5628 bytes public/grapejs/dist/fonts/main-fonts.woff | Bin 0 -> 2700 bytes public/grapejs/dist/js/ajaxable.min.js | 2 + public/grapejs/dist/js/grapes.min.js | 17 + .../dist/js/grapesjs-preset-newsletter.min.js | 22 + public/grapejs/dist/js/toastr.min.js | 7 + public/grapejs/templates/demo/index.html | 416 +++++++++++ public/grapejs/uploads/README.md | 1 + 23 files changed, 2090 insertions(+) create mode 100755 public/grapejs/LICENSE create mode 100755 public/grapejs/README.md create mode 100755 public/grapejs/dist/css/grapes.min.css create mode 100644 public/grapejs/dist/css/grapesjs-preset-newsletter.css create mode 100644 public/grapejs/dist/css/material.css create mode 100644 public/grapejs/dist/css/toastr.min.css create mode 100644 public/grapejs/dist/css/tooltip.css create mode 100755 public/grapejs/dist/fonts/FontAwesome.otf create mode 100755 public/grapejs/dist/fonts/fontawesome-webfont.eot create mode 100755 public/grapejs/dist/fonts/fontawesome-webfont.svg create mode 100755 public/grapejs/dist/fonts/fontawesome-webfont.ttf create mode 100755 public/grapejs/dist/fonts/fontawesome-webfont.woff create mode 100755 public/grapejs/dist/fonts/fontawesome-webfont.woff2 create mode 100755 public/grapejs/dist/fonts/main-fonts.eot create mode 100755 public/grapejs/dist/fonts/main-fonts.svg create mode 100755 public/grapejs/dist/fonts/main-fonts.ttf create mode 100755 public/grapejs/dist/fonts/main-fonts.woff create mode 100644 public/grapejs/dist/js/ajaxable.min.js create mode 100755 public/grapejs/dist/js/grapes.min.js create mode 100644 public/grapejs/dist/js/grapesjs-preset-newsletter.min.js create mode 100644 public/grapejs/dist/js/toastr.min.js create mode 100644 public/grapejs/templates/demo/index.html create mode 100644 public/grapejs/uploads/README.md diff --git a/public/grapejs/LICENSE b/public/grapejs/LICENSE new file mode 100755 index 00000000..33625788 --- /dev/null +++ b/public/grapejs/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2016, Artur Arseniev +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +- Neither the name "GrapesJS" nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/public/grapejs/README.md b/public/grapejs/README.md new file mode 100755 index 00000000..c6e9b001 --- /dev/null +++ b/public/grapejs/README.md @@ -0,0 +1,183 @@ +# [GrapesJS](http://grapesjs.com) + +[![Build Status](https://travis-ci.org/artf/grapesjs.svg?branch=master)](https://travis-ci.org/artf/grapesjs) + +

    GrapesJS

    +
    + +GrapesJS is a free and open source Web Builder Framework which helps you building HTML templates to be used inside sites, newsletters and mobile apps. +Mainly GrapesJS was designed to be used inside a [CMS] to speed up a creation of dynamic templates. To better understand this concept check the image below + +
    +

    GrapesJS - Style Manager

    +
    + +Generally any 'template system', that you'd find in various applications like CMS, is composed by the **structure** (HTML), **style** (CSS) and **variables**, which are then replaced with other templates and contents on server-side and rendered on client. + +This demos show examples of what is possible to achieve: +Webpage Demo - http://grapesjs.com/demo.html +Newsletter Demo - http://grapesjs.com/demo-newsletter-editor.html + + +## Features + + +* Blocks +

    GrapesJS - Block Manager

    + +* Style Manager, for component styling
    +

    GrapesJS - Style Manager

    + +* Layer Manager, that comes handy with nested elements
    +

    GrapesJS - Layer Manager

    + +* Code Viewer
    +

    GrapesJS - Code Viewer

    + +* Asset Manager, for uploading and managing images
    +

    GrapesJS - Asset Manager

    + +* Local and remote storage + +* Default built-in commands (basically for creating and managing different components) + + +## Installation + +You can get GrapesJS with `bower install grapesjs` or via `git clone https://github.com/artf/grapesjs.git` to directly use it. For development purpose you should follow instructions below. + + +## Development + +GrapesJS uses [RequireJS](http://requirejs.org/) to organize its files inside `src` folder and [Grunt](http://gruntjs.com/) for build them to `dist` + +Clone the repository and enter inside the folder + +```sh +$ npm install -g grunt-cli +$ git clone https://github.com/artf/grapesjs.git +$ cd grapesjs +``` + +Install all necessary dependencies + +```sh +$ npm install +``` + +Build GrapesJS + +```sh +$ npm run build +``` + +Launch server, which also gonna watch some files, and try out the demo on `localhost:8000` + +```sh +$ npm start +``` + +Tests are already available inside browser on `localhost:8000/test` + +If [Grunt](http://gruntjs.com/) is already installed globally you could change the port by using `grunt dev --port 9000` + + +## Usage + +JQuery is the only hard dependency so you have to include it before using GrapesJS + +```html + +``` +After that include scripts from GrapesJS with all your configurations + +```html + + + +
    + + +``` + +You could also grab the content directly from the element with `fromElement` property + +```html +
    +
    Hello world!
    + +
    + + +``` + +For more practical example I suggest to look up the code inside this demo: http://grapesjs.com/demo.html + + +## Configuration + +Check the getting started guide here: [wiki] + + +## API + +API References (draft) could be found here: [API-Reference] + + +## Testing + +```sh +$ npm test +``` + +## Acknowledgements + +GrapesJS is built on top of this amazing open source projects: + +* [Backbone] - gives Backbone to web applications +* [Backbone.Undo] - a simple Backbone undo-manager +* [Keymaster] - keyboard shortcuts +* [CodeMirror] - versatile text editor +* [Spectrum] - no hassle colorpicker +* [FontAwesome] - the iconic font and CSS framework + + +## Sponsors + +The project is sponsored by + +[![Sendloop](http://grapesjs.com/img/sendloop-logo-l.png)](https://sendloop.com) + + +## Support + +If you like the project support it with a donation of your choice. + +[![PayPalMe](http://grapesjs.com/img/ppme.png)](https://paypal.me/grapesjs) + + +## License + +BSD 3-clause + + +[Backbone]: +[Backbone.Undo]: +[Keymaster]: +[CodeMirror]: +[Spectrum]: +[FontAwesome]: +[wiki]: +[API-Reference]: +[CMS]: diff --git a/public/grapejs/dist/css/grapes.min.css b/public/grapejs/dist/css/grapes.min.css new file mode 100755 index 00000000..d4134c45 --- /dev/null +++ b/public/grapejs/dist/css/grapes.min.css @@ -0,0 +1,6 @@ +.CodeMirror{font-family:monospace;height:300px;color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0} +.cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.cm-s-hopscotch div.CodeMirror-selected{background:#433b42!important}.cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0}.cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498!important}.cm-s-hopscotch span.cm-comment{color:#b33508}.cm-s-hopscotch span.cm-atom,.cm-s-hopscotch span.cm-number{color:#c85e7c}.cm-s-hopscotch span.cm-attribute,.cm-s-hopscotch span.cm-property{color:#8fc13e}.cm-s-hopscotch span.cm-keyword{color:#dd464c}.cm-s-hopscotch span.cm-string{color:#fdcc59}.cm-s-hopscotch span.cm-variable{color:#8fc13e}.cm-s-hopscotch span.cm-variable-2{color:#1290bf}.cm-s-hopscotch span.cm-def{color:#fd8b19}.cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.cm-s-hopscotch span.cm-tag{color:#dd464c}.cm-s-hopscotch span.cm-link{color:#c85e7c}.cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-hopscotch .CodeMirror-activeline-background{background:#302020} +@charset "UTF-8";.sp-alpha-handle,.sp-slider{opacity:.8;background-color:#ccc}.fa-fw,.fa-li,.sp-container button{text-align:center}.fa,.gjs-fonts::before{text-rendering:auto;-moz-osx-font-smoothing:grayscale}.gjs-cv-canvas,.gjs-grabbing,.sp-container,.sp-replacer{overflow:hidden}.sp-container{position:absolute;top:0;left:0;display:inline-block;z-index:9999994}.sp-container.sp-flat,.sp-top{position:relative}.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.sp-top{width:100%;display:inline-block}.sp-alpha-handle,.sp-color,.sp-dragger,.sp-hue,.sp-sat,.sp-slider,.sp-top-inner,.sp-val{position:absolute}.sp-top-inner{top:0;left:0;bottom:0;right:0}.sp-color{top:0;left:0;bottom:0}.sp-hue{top:0;right:0;bottom:0;height:100%}.sp-clear-enabled .sp-hue{top:33px;height:77.5%}.sp-fill{padding-top:80%}.sp-sat,.sp-val{top:0;left:0;right:0;bottom:0}.sp-alpha-enabled .sp-top{margin-bottom:18px}.sp-alpha-enabled .sp-alpha{display:block}.sp-alpha,.sp-clear{display:none}.sp-alpha-handle{top:-4px;bottom:-4px;left:50%;background:#fff;opacity:.8}.sp-alpha{bottom:-14px;right:0;left:0;height:8px}.sp-alpha-inner{border:1px solid #333}.sp-clear.sp-clear-display{background-position:center}.sp-clear-enabled .sp-clear{display:block;position:absolute;top:0;right:0;bottom:0;left:84%;height:28px}.sp-alpha,.sp-alpha-handle,.sp-clear,.sp-container,.sp-container button,.sp-container.sp-dragging .sp-input,.sp-dragger,.sp-preview,.sp-replacer,.sp-slider{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}.sp-container.sp-buttons-disabled .sp-button-container,.sp-container.sp-input-disabled .sp-input-container,.sp-container.sp-palette-buttons-disabled .sp-palette-button-container,.sp-initial-disabled .sp-initial,.sp-palette-disabled .sp-palette-container,.sp-palette-only .sp-picker-container{display:none}.sp-sat{background-image:-webkit-gradient(linear,0 0,100% 0,from(#FFF),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left,#FFF,rgba(204,154,129,0));background-image:-moz-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-o-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-ms-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:linear-gradient(to right,#fff,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81')}.sp-val{background-image:-webkit-gradient(linear,0 100%,0 0,from(#000),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-o-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:linear-gradient(to top,#000,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000')}.sp-hue{background:-moz-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-ms-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-o-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(.17,#ff0),color-stop(.33,#0f0),color-stop(.5,#0ff),color-stop(.67,#00f),color-stop(.83,#f0f),to(red));background:-webkit-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.sp-1{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00')}.sp-2{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00')}.sp-3{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff')}.sp-4{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff')}.sp-5{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff')}.sp-6{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000')}.sp-hidden{display:none!important}.sp-cf:after,.sp-cf:before{content:"";display:table}.sp-cf:after{clear:both}@media (max-device-width:480px){.sp-color{right:40%}.sp-hue{left:63%}.sp-fill{padding-top:60%}}.sp-dragger{border-radius:5px;height:5px;width:5px;border:1px solid #fff;top:0;left:0}.sp-slider{top:0;right:-1px;background:#fff;opacity:.8}.sp-container{border:1px solid #f0c49B;padding:0}.sp-clear,.sp-color,.sp-container,.sp-container button,.sp-container input,.sp-hue{font:400 12px "Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.gjs-btnt,.gjs-com-dashed *,.gjs-cv-canvas,.gjs-cv-canvas *,.gjs-editor,.gjs-input,.gjs-pn-btn,.gjs-pn-panel,.gjs-select{box-sizing:border-box}.sp-top{margin-bottom:3px}.sp-clear,.sp-color,.sp-hue{border:1px solid #666}.sp-input-container{float:right;width:100px;margin-bottom:4px}.sp-initial-disabled .sp-input-container,.sp-input{width:100%}.sp-input{font-size:12px!important;border:1px inset;padding:4px 5px;margin:0;background:0 0;border-radius:3px;color:#222}.sp-input:focus{border:1px solid orange}.sp-input.sp-validation-error{border:1px solid red;background:#fdd}.sp-palette-container,.sp-picker-container{float:left;position:relative;padding:10px 10px 300px;margin-bottom:-290px}.sp-picker-container{width:172px}.sp-palette-only .sp-palette-container{border:0}.sp-palette .sp-thumb-el{display:block;position:relative;float:left;cursor:pointer}.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:orange}.sp-thumb-el{position:relative}.sp-initial{float:left;border:1px solid #333}.sp-initial span{width:30px;height:25px;border:none;display:block;float:left;margin:0}.sp-initial .sp-clear-display{background-position:center}.sp-button-container,.sp-palette-button-container{float:right}.sp-replacer{margin:0;cursor:pointer;padding:4px;display:inline-block;border:1px solid #91765d;background:#eee;color:#333;vertical-align:middle}.sp-replacer.sp-active,.sp-replacer:hover{border-color:#F0C49B;color:#111}.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}.sp-dd{padding:2px 0;height:16px;line-height:16px;float:left;font-size:10px}.sp-preview{width:25px;height:20px;border:1px solid #222;margin-right:5px;float:left;z-index:0}.sp-palette{max-width:220px}.sp-palette .sp-thumb-el{width:16px;height:16px;margin:2px 1px;border:1px solid #d0d0d0}.sp-container{padding-bottom:0}.sp-container button{background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#ccc);background-image:-moz-linear-gradient(top,#eee,#ccc);background-image:-ms-linear-gradient(top,#eee,#ccc);background-image:-o-linear-gradient(top,#eee,#ccc);background-image:linear-gradient(to bottom,#eee,#ccc);border:1px solid #ccc;border-bottom:1px solid #bbb;border-radius:3px;font-size:14px;line-height:1;vertical-align:middle}.sp-container button:hover{background-color:#ddd;background-image:-webkit-linear-gradient(top,#ddd,#bbb);background-image:-moz-linear-gradient(top,#ddd,#bbb);background-image:-ms-linear-gradient(top,#ddd,#bbb);background-image:-o-linear-gradient(top,#ddd,#bbb);background-image:linear-gradient(to bottom,#ddd,#bbb);border:1px solid #bbb;border-bottom:1px solid #999;cursor:pointer}.sp-container button:active{border:1px solid #aaa;border-bottom:1px solid #888;-webkit-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-moz-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-ms-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-o-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee}.sp-cancel{margin:0 5px 0 0;padding:2px;vertical-align:middle}.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}.sp-palette span.sp-thumb-active,.sp-palette span:hover{border-color:#000}.sp-alpha,.sp-preview,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-alpha-inner,.sp-preview-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}.fa,.fa-stack{display:inline-block}.sp-palette .sp-thumb-inner{background-position:50% 50%;background-repeat:no-repeat}.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==)}/*! + * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.5.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2?v=4.5.0) format("woff2"),url(../fonts/fontawesome-webfont.woff?v=4.5.0) format("woff"),url(../fonts/fontawesome-webfont.ttf?v=4.5.0) format("truetype"),url(../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;-webkit-font-smoothing:antialiased}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right,.pull-right{float:right}.pull-left{float:left}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.gjs-clm-tags #gjs-clm-close,.gjs-freezed,.gjs-nv-freezed,.opac50{opacity:.5;filter:alpha(opacity=50)}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}@font-face{font-family:font3336;src:url(../fonts/main-fonts.eot?v=20);src:url(../fonts/main-fonts.woff?v=20) format("woff"),url(../fonts/main-fonts.ttf?v=20) format("truetype"),url(../fonts/main-fonts.svg?v=20) format("svg"),url(../fonts/main-fonts.eot?v=20) format("embedded-opentype");font-weight:400;font-style:normal}.gjs-fonts::before{display:block;font:normal normal normal 14px font3336;-webkit-font-smoothing:antialiased;font-size:5em}.gjs-block-label,.gjs-editor,.gjs-mdl-container{font-family:Helvetica,sans-serif}.gjs-f-b1::before{content:'Q'}.gjs-f-b2::before{content:'W'}.gjs-f-b3::before{content:'E'}.gjs-f-b37::before{content:'R'}.gjs-f-hero::before{content:'T'}.gjs-f-h1p::before{content:'y'}.gjs-f-3ba::before{content:'u'}.gjs-f-image::before{content:'I'}.gjs-f-text::before{content:'o'}.gjs-f-quo::before{content:'p'}.gjs-f-button::before{content:'B'}.gjs-f-divider::before{content:'D'}.gjs-clm-tags #gjs-clm-new,.gjs-invis-invis,.gjs-no-app{background-color:transparent;border:none;color:inherit}.gjs-no-app{height:10px}.gjs-test::btn{color:'#fff'}.checker-bg,.gjs-checker-bg,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.gjs-grabbing,.gjs-grabbing *,.gjs-nav-comp-name,.gjs-no-user-select{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el,.gjs-margin-v-el,.gjs-no-pointer-events,.gjs-padding-v-el,.gjs-resizer-c{pointer-events:none}.gjs-bdrag,.gjs-drag-helper{pointer-events:none!important;position:absolute!important;z-index:10!important}#gjs-rte-toolbar,.gjs-bg-main,.gjs-block,.gjs-clm-select option,.gjs-clm-tags .gjs-sm-colorp-c,.gjs-mdl-dialog,.gjs-nv-item .gjs-nv-title-c,.gjs-off-prv,.gjs-pn-panel,.gjs-select option,.gjs-sm-sector .gjs-sm-colorp-c,.gjs-sm-select option,.gjs-sm-unit option,.sp-container{background-color:#444}#gjs-rte-toolbar .gjs-rte-btn,.gjs-btn-prim,.gjs-btnt,.gjs-clm-tags .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add,.gjs-color-main,.gjs-mdl-dialog,.gjs-off-prv,.gjs-pn-btn,.gjs-pn-panel,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add{color:#ddd}.gjs-btnt.gjs-pn-active,.gjs-color-active,.gjs-pn-btn.gjs-pn-active{color:#f8f8f8}.gjs-bdrag{width:auto}.gjs-drag-helper{background-color:#3b97e3!important;transform:scale(.3)!important;transform-origin:top left!important;-webkit-transform-origin:top left!important;margin:15px!important;transition:none!important;outline:0!important}.gjs-grabbing,.gjs-grabbing *{cursor:grabbing!important;cursor:-webkit-grabbing!important}.gjs-off-prv{position:relative;z-index:10;padding:5px;cursor:pointer}.gjs-editor-cont ::-webkit-scrollbar-track{background:rgba(0,0,0,.1)}.gjs-editor-cont ::-webkit-scrollbar-thumb{background-color:rgba(255,255,255,.2)}.gjs-editor-cont ::-webkit-scrollbar{width:8px}.clear{clear:both}.gjs-clm-tags #gjs-clm-close,.gjs-clm-tags #gjs-clm-tag-label,.gjs-com-no-select,.gjs-com-no-select img,.no-select{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-editor{background-color:#444;position:relative;height:100%}.gjs-btn-prim,.gjs-btn-prim:active{background-color:rgba(255,255,255,.1)}.gjs-freezed,.gjs-nv-freezed{pointer-events:none}.gjs-btn-prim{border-radius:2px;cursor:pointer;padding:.5em;border:none}.gjs-input,.gjs-select{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.1);border-radius:2px;box-shadow:1px 1px 0 rgba(255,255,255,.1);color:#ddd;padding:.5em 1em}div.gjs-select{padding:0}.gjs-select select{padding-right:10px}.gjs-select select:-moz-focusring,.gjs-select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,.7)}.gjs-btn-prim:focus,.gjs-button:focus,.gjs-input:focus,.gjs-select select:focus,.gjs-select:focus{outline:0}.gjs-traits-label{border-bottom:1px solid rgba(0,0,0,.3);font-size:13px;font-weight:lighter;margin-bottom:5px;padding:10px;text-align:left}.gjs-trt-trait{display:flex;justify-content:start;padding:5px 10px;font-size:.75em;font-weight:lighter}.gjs-trt-trait .gjs-label{width:30%;text-align:left}.gjs-trt-trait .gjs-field{width:70%}.gjs-cv-canvas{background-color:rgba(0,0,0,.15);position:absolute;width:85%;height:100%;bottom:0;left:0;padding-top:40px;z-index:1}.gjs-cv-canvas>iframe{height:100%;outline:0;width:100%;border:none;margin:0 auto;display:block}.gjs-cv-canvas .gjs-ghost{display:none;pointer-events:none;background-color:#5b5b5b;border:2px dashed #ccc;position:absolute;z-index:10;opacity:.55;filter:alpha(opacity=55)}.gjs-cv-canvas .gjs-highlighter,.gjs-cv-canvas .gjs-highlighter-sel{position:absolute;outline:#3b97e3 solid 1px;pointer-events:none}.gjs-cv-canvas .gjs-highlighter-warning{outline:#ffca6f solid 3px}.gjs-cv-canvas .gjs-highlighter-sel{outline:#3b97e3 solid 3px}.gjs-cv-canvas #gjs-tools{width:100%;position:absolute;top:0;left:0;outline:0}.gjs-cv-canvas>div:first-child{background-color:#fff;position:relative;height:100%;overflow:auto;width:100%}.dragged,.gjs-resizer-c,.gjs-resizer-h,.gjs-toolbar{position:absolute}.gjs-frame{transition:width .35s ease}.gjs-toolbar{background-color:#3b97e3;color:#fff;z-index:10}.gjs-toolbar-item{padding:5px 7px;font-size:.8rem;cursor:pointer}.gjs-resizer-c{z-index:9}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el,.gjs-margin-v-el,.gjs-padding-v-el{opacity:.1;filter:alpha(opacity=10);position:absolute;background-color:#ff0}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{opacity:.2;filter:alpha(opacity=20)}.gjs-fixedpadding-v-el,.gjs-padding-v-el{background-color:navy}.gjs-resizer-h{pointer-events:all;border:3px solid #3b97e3;width:10px;height:10px;background-color:#fff;margin:-5px}.gjs-resizer-h-tl{top:0;left:0;cursor:nwse-resize}.gjs-resizer-h-tr{top:0;right:0;cursor:nesw-resize}.gjs-resizer-h-tc{top:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-cl,.gjs-resizer-h-cr{margin:auto -5px;cursor:ew-resize;bottom:0;top:0}.gjs-resizer-h-cl{left:0}.gjs-resizer-h-cr{right:0}.gjs-resizer-h-bl{bottom:0;left:0;cursor:nesw-resize}.gjs-resizer-h-bc{bottom:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-br{bottom:0;right:0;cursor:nwse-resize}.gjs-resizing .gjs-badge,.gjs-resizing .gjs-highlighter{display:none!important}.gjs-resizing-tl *{cursor:nwse-resize!important}.gjs-resizing-tr *{cursor:nesw-resize!important}.gjs-resizing-tc *{cursor:ns-resize!important}.gjs-resizing-cl *,.gjs-resizing-cr *{cursor:ew-resize!important}.gjs-resizing-bl *{cursor:nesw-resize!important}.gjs-resizing-bc *{cursor:ns-resize!important}.gjs-resizing-br *{cursor:nwse-resize!important}.btn-cl,.gjs-am-assets-cont #gjs-am-close,.gjs-mdl-dialog .gjs-mdl-btn-close{opacity:.3;filter:alpha(opacity=30);font-size:25px;cursor:pointer}.btn-cl:hover,.gjs-am-assets-cont #gjs-am-close:hover,.gjs-mdl-dialog .gjs-mdl-btn-close:hover{opacity:.7;filter:alpha(opacity=70)}.dragged,.gjs-nv-opac50{opacity:.5;filter:alpha(opacity=50)}#commands.panel{min-width:35px;height:100%;z-index:3}#options.panel{z-index:4;bottom:0}#views.panel{width:16.5%;font-weight:lighter;color:#ddd;right:0;top:0;z-index:3;height:100%;padding:0}#views.panel .c{height:100%}#commands.panel,#options.panel{width:3.5%;left:0}#options .c{display:table;margin:0 auto}body.dragging,body.dragging *{cursor:move!important}.dragged{z-index:2000}ol.example li.placeholder{position:relative}ol.example li.placeholder:before{position:absolute}.no-dots,.ui-resizable-handle{border:none!important;margin:0!important;outline:0!important}.gjs-com-dashed *{outline:#888 dashed 1px;outline-offset:-2px}.gjs-cv-canvas .gjs-comp-selected{outline:#3b97e3 solid 3px!important}.gjs-com-hover,div.gjs-com-hover{outline:#3b97e3 solid 1px}.gjs-com-hover-delete,div.gjs-com-hover-delete{outline:#dd3636 solid 2px;opacity:.5;filter:alpha(opacity=50)}.gjs-com-hover-move,div.gjs-com-hover-move{outline:#ffca6f solid 3px}.gjs-badge,.gjs-com-badge,.gjs-com-badge-red{pointer-events:none;background-color:#3b97e3;color:#fff;padding:2px 5px;position:absolute;z-index:1;font-size:12px;outline:0;display:none}.gjs-com-badge-red{background-color:#dd3636}.gjs-badge-warning{background-color:#ffca6f}.gjs-com-placeholder,.gjs-nv-placeholder,.gjs-placeholder{position:absolute;z-index:10;pointer-events:none;display:none}.gjs-nv-placeholder,.gjs-placeholder{border-style:solid!important;border-color:#62c462;outline:0;box-sizing:border-box}.gjs-com-placeholder-int,.gjs-nv-placeholder-int,.gjs-placeholder-int{background-color:#62c462;box-shadow:0 0 3px rgba(0,0,0,.2);height:100%;width:100%;pointer-events:none;padding:1.5px;outline:0}.gjs-pn-panel{display:inline-block;padding:5px;position:absolute;text-align:center;z-index:3}.gjs-pn-panel#gjs-pn-commands,.gjs-pn-panel#gjs-pn-options2{width:85%;left:0;top:0;box-shadow:0 0 5px rgba(0,0,0,.3)}.gjs-pn-panel#gjs-pn-options{right:15%;top:0}.gjs-pn-panel#gjs-pn-options2{bottom:150px;height:auto}.gjs-pn-panel .icon-redo,.gjs-pn-panel .icon-undo{font-size:20px;height:30px;width:25px}.gjs-pn-panel#gjs-pn-views{border-bottom:2px solid rgba(0,0,0,.3);right:0;width:15%;z-index:4}.gjs-pn-panel#gjs-pn-views-container{height:100%;padding:42px 0 0;right:0;width:15%;overflow:auto;box-shadow:0 0 5px rgba(0,0,0,.3)}.gjs-pn-buttons{align-items:center;display:flex;justify-content:center}.gjs-btnt,.gjs-pn-btn{height:30px;width:30px;line-height:21px;background-color:transparent;border:none;font-size:18px;margin-right:5px;border-radius:2px;cursor:pointer;padding:5px;position:relative}.gjs-btnt.gjs-pn-active,.gjs-pn-btn.gjs-pn-active{background-color:rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.25) inset}.gjs-btnt>.gjs-pn-arrow-rd,.gjs-pn-btn>.gjs-pn-arrow-rd{border-bottom:5px solid rgba(255,255,255,.7);border-left:5px solid transparent;bottom:2px;right:2px;position:absolute}.gjs-btnt>.gjs-pn-buttons,.gjs-pn-btn>.gjs-pn-buttons{background-color:#444;border-radius:2px;position:absolute;display:none;left:50px;top:0;padding:5px}.gjs-btnt>.gjs-pn-buttons.gjs-pn-visible,.gjs-pn-btn>.gjs-pn-buttons.gjs-pn-visible{display:block}.gjs-btnt>.gjs-pn-buttons>.gjs-pn-arrow-l,.gjs-pn-btn>.gjs-pn-buttons>.gjs-pn-arrow-l{border-bottom:5px solid transparent;border-right:5px solid #444;border-top:5px solid transparent;left:-5px;top:15px;position:absolute}.gjs-nv-navigator{position:relative;height:100%}.gjs-nv-navigator #gjs-nv-placeholder{width:100%;position:absolute}.gjs-nv-navigator #gjs-nv-placeholder #gjs-nv-plh-int{height:100%;padding:1px}.gjs-nv-navigator #gjs-nv-placeholder #gjs-nv-plh-int.gjs-nv-insert{background-color:#62c462}.gjs-nv-navigator .gjs-nv-item{font-weight:lighter;text-align:left;position:relative;background-color:rgba(0,0,0,.1)}.gjs-nv-navigator .gjs-nv-item.gjs-nv-hide{opacity:.55;filter:alpha(opacity=55)}.gjs-nv-navigator .gjs-nv-item #gjs-nv-counter{font-size:10px;position:absolute;right:27px;top:9px}.gjs-nv-navigator .gjs-nv-item #gjs-nv-btn-eye{height:auto!important;width:auto!important;font-size:13px;left:0;top:0;padding:7px 5px 7px 10px;position:absolute;cursor:pointer;z-index:1}.gjs-nv-item #gjs-nv-caret{font-size:7px;width:8px;padding:5px;cursor:pointer;opacity:.7;filter:alpha(opacity=70)}.gjs-nv-item #gjs-nv-caret:hover{opacity:1;filter:alpha(opacity=100)}.gjs-nv-title{background-color:rgba(0,0,0,.1);font-size:11px;letter-spacing:1px;padding:3px 10px 5px 30px;border-bottom:1px solid rgba(0,0,0,.3);border-top:1px solid rgba(255,255,255,.1);display:flex;align-items:center}.gjs-nv-item .gjs-nv-children .gjs-nv-title{border-left:1px solid rgba(5,5,5,.3)}.gjs-nv-item>.gjs-nv-children{margin-left:7px;display:none}.gjs-nv-item.open>.gjs-nv-children{display:block}.gjs-nv-item>.gjs-nv-no-chld>#gjs-nv-caret::before{content:''}.gjs-nv-no-chld>#gjs-nv-caret{display:none}.gjs-nv-item>#gjs-nv-move{position:absolute;cursor:move;font-size:12px;right:0;top:0;padding:7px 10px 7px 5px}.gjs-nv-selected .gjs-nv-title{background-color:rgba(255,255,255,.1)}.gjs-nv-nav-item-edit{visibility:hidden;padding:5px;font-size:10px;opacity:.7;filter:alpha(opacity=70)}.gjs-nv-nav-item-edit:hover{opacity:1;filter:alpha(opacity=100)}.gjs-nv-title-c:hover .gjs-nv-nav-item-edit{visibility:visible;cursor:pointer}.gjs-nav-comp-name{padding:5px;box-sizing:content-box}.btn.expand,.gjs-nv-navigator .gjs-nv-item .expand#gjs-nv-btn-eye{background-image:none}.gjs-comp-image-placeholder{display:block;background-color:#f5f5f5;color:#777;height:50px;width:50px;line-height:50px;outline:#ffca6f solid 3px;outline-offset:-3px;text-align:center;font-size:16.67px;cursor:pointer}.gjs-field-checkbox input,.gjs-radio-item input{display:none}.gjs-comp-image-placeholder.fa-picture-o::after{content:"\f03e"}.gjs-label{line-height:18px}.gjs-field{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 0 rgba(255,255,255,.1);border-radius:2px;box-sizing:border-box;padding:0;position:relative}.gjs-field input,.gjs-field select,.gjs-field textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;color:rgba(255,255,255,.7);border:none;background-color:transparent;box-sizing:border-box;width:100%;position:relative;padding:3px 4px 4px;z-index:1}.gjs-field textarea{resize:vertical}.gjs-field select{height:20px;padding-right:12px}.gjs-field option{padding:3px 0}.gjs-field .gjs-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;z-index:0}.gjs-field .gjs-d-s-arrow{bottom:7px;border-top:4px solid rgba(255,255,255,.7);position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-field-color input{padding-right:22px;box-sizing:border-box}.gjs-field-colorp{border-left:1px solid rgba(0,0,0,.3);box-sizing:border-box;height:100%;padding:2px;position:absolute;right:0;top:0;width:22px;z-index:10}.gjs-field-colorp .gjs-checker-bg{height:100%;width:100%;border-radius:1px}.gjs-field-colorp-c{height:100%;position:relative;width:100%}.gjs-field-color-picker{background-color:#ddd;cursor:pointer;height:100%;width:100%;box-shadow:0 0 1px rgba(0,0,0,.3);border-radius:1px;position:absolute;top:0}.gjs-field-radio{float:left;overflow:hidden;padding:0;width:auto}.gjs-field-checkbox{padding:0;width:auto!important}.gjs-field-checkbox input:checked+.gjs-chk-icon{border-color:rgba(255,255,255,.5);border-width:0 2px 2px 0;border-style:solid}.gjs-radio-item{float:left;border-left:1px solid rgba(0,0,0,.3)}.gjs-radio-item:first-child{border:none}.gjs-radio-item:hover{background:rgba(0,0,0,.3)}.gjs-radio-item input:checked+.gjs-radio-item-label{background-color:rgba(255,255,255,.2)}.gjs-radio-item-label{cursor:pointer;display:block;padding:5px}.gjs-field-units{position:absolute;right:0;top:0}.gjs-field-units select{padding:0 12px 0 0}.gjs-field-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,.7);cursor:pointer}.gjs-field-arrows{z-index:10;cursor:ns-resize;height:100%;position:absolute;right:0;top:0;width:9px}.gjs-field-arrow-d,.gjs-field-arrow-u{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.7);bottom:4px;cursor:pointer}.gjs-field-arrow-u{border-bottom:4px solid rgba(255,255,255,.7);border-top:none;top:4px}.gjs-field-select{padding:0}.gjs-field-range{background-color:transparent;border:none;box-shadow:none;padding:0}.gjs-field-range input{margin:0}.gjs-field-range input::-moz-range-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,.3);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-5px;height:10px;width:10px;border:1px solid rgba(0,0,0,.3);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-ms-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,.3);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-moz-range-track{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.15);border-radius:1px;height:2px}.gjs-field-range input::-webkit-slider-runnable-track{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.15);border-radius:1px;height:2px}.gjs-field-range input::-ms-track{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.15);border-radius:1px;height:2px}.gjs-chk-icon{-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);box-sizing:border-box;display:block;height:14px;margin:0 5px;width:6px;cursor:pointer}.gjs-add-trasp{background:0 0;border:none;color:#ddd;cursor:pointer;font-size:1em;border-radius:2px;opacity:.75;filter:alpha(opacity=75)}.gjs-add-trasp:hover{opacity:1;filter:alpha(opacity=100)}.gjs-add-trasp:active{background-color:rgba(0,0,0,.2)}.gjs-devices-c{display:flex;align-items:center;padding:4px}.gjs-devices-c .gjs-device-label{flex-grow:2;font-size:.7em;text-align:left;margin-right:10px}.gjs-devices-c .gjs-select{flex-grow:20}.gjs-devices-c .gjs-add-trasp{flex-grow:1;margin-left:5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-sm-close-btn,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.2;filter:alpha(opacity=20)}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover,.gjs-sm-close-btn:hover,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-sm-header{font-size:11px;font-weight:lighter;padding:10px}.gjs-clm-tags,.gjs-sm-sector{clear:both;border-bottom:1px solid rgba(0,0,0,.3);font-weight:lighter;text-align:left}.gjs-clm-tags #gjs-sm-caret,.gjs-sm-sector #gjs-sm-caret{padding-right:5px;font-size:11px}.gjs-clm-tags .gjs-sm-title,.gjs-sm-sector .gjs-sm-title{background-color:rgba(0,0,0,.1);font-size:13px;letter-spacing:1px;padding:12px 10px 12px 20px;border-top:1px solid rgba(255,255,255,.1);cursor:pointer}.gjs-clm-tags .gjs-sm-label,.gjs-sm-sector .gjs-sm-label{margin:5px 5px 2px 0}.gjs-clm-tags .gjs-clm-field,.gjs-clm-tags .gjs-sm-field,.gjs-sm-sector .gjs-clm-field,.gjs-sm-sector .gjs-sm-field{width:100%;position:relative}.gjs-clm-tags .gjs-clm-field input,.gjs-clm-tags .gjs-clm-field select,.gjs-clm-tags .gjs-sm-field input,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field input,.gjs-sm-sector .gjs-clm-field select,.gjs-sm-sector .gjs-sm-field input,.gjs-sm-sector .gjs-sm-field select{background-color:transparent;color:rgba(255,255,255,.7);border:none;width:100%}.gjs-clm-tags .gjs-clm-field input,.gjs-clm-tags .gjs-sm-field input,.gjs-sm-sector .gjs-clm-field input,.gjs-sm-sector .gjs-sm-field input{box-sizing:border-box}.gjs-clm-tags .gjs-clm-field select,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field select,.gjs-sm-sector .gjs-sm-field select{position:relative;z-index:1;-webkit-appearance:none;-moz-appearance:none;appearance:none}.gjs-clm-tags .gjs-clm-field select::-ms-expand,.gjs-clm-tags .gjs-sm-field select::-ms-expand,.gjs-sm-sector .gjs-clm-field select::-ms-expand,.gjs-sm-sector .gjs-sm-field select::-ms-expand{display:none}.gjs-clm-tags .gjs-clm-field select:-moz-focusring,.gjs-clm-tags .gjs-sm-field select:-moz-focusring,.gjs-sm-sector .gjs-clm-field select:-moz-focusring,.gjs-sm-sector .gjs-sm-field select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,.7)}.gjs-clm-tags .gjs-clm-field input:focus,.gjs-clm-tags .gjs-clm-field select:focus,.gjs-clm-tags .gjs-sm-field input:focus,.gjs-clm-tags .gjs-sm-field select:focus,.gjs-sm-sector .gjs-clm-field input:focus,.gjs-sm-sector .gjs-clm-field select:focus,.gjs-sm-sector .gjs-sm-field input:focus,.gjs-sm-sector .gjs-sm-field select:focus{outline:0}.gjs-clm-tags .gjs-clm-field .gjs-sm-unit,.gjs-clm-tags .gjs-sm-field .gjs-sm-unit,.gjs-sm-sector .gjs-clm-field .gjs-sm-unit,.gjs-sm-sector .gjs-sm-field .gjs-sm-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,.7);cursor:pointer}.gjs-clm-tags .gjs-clm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;cursor:ns-resize}.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow{cursor:pointer}.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow{border-bottom:4px solid rgba(255,255,255,.7);top:4px}.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow{border-top:4px solid rgba(255,255,255,.7);bottom:4px}.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow{bottom:7px}.gjs-clm-tags .gjs-clm-select,.gjs-clm-tags .gjs-sm-color.gjs-clm-field,.gjs-clm-tags .gjs-sm-field.gjs-sm-color,.gjs-clm-tags .gjs-sm-field.gjs-sm-input,.gjs-clm-tags .gjs-sm-field.gjs-sm-integer,.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-input.gjs-clm-field,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field,.gjs-clm-tags .gjs-sm-list.gjs-clm-field,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-sm-sector .gjs-sm-color.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-color,.gjs-sm-sector .gjs-sm-field.gjs-sm-input,.gjs-sm-sector .gjs-sm-field.gjs-sm-integer,.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-input.gjs-clm-field,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field,.gjs-sm-sector .gjs-sm-list.gjs-clm-field,.gjs-sm-sector .gjs-sm-select.gjs-clm-field{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 0 rgba(255,255,255,.1);color:rgba(255,255,255,.7);border-radius:2px;box-sizing:border-box;padding:0 5px}.gjs-clm-tags .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-composite{border-radius:2px;background-color:rgba(0,0,0,.1);border:1px solid rgba(0,0,0,.25)}.gjs-clm-tags .gjs-clm-select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field{padding:0}.gjs-clm-tags .gjs-clm-select select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select select,.gjs-clm-tags .gjs-sm-select.gjs-clm-field select,.gjs-sm-sector .gjs-clm-select select,.gjs-sm-sector .gjs-sm-field.gjs-sm-select select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field select{height:20px}.gjs-clm-tags .gjs-clm-select option,.gjs-clm-tags .gjs-sm-field.gjs-sm-select option,.gjs-clm-tags .gjs-sm-select.gjs-clm-field option,.gjs-sm-sector .gjs-clm-select option,.gjs-sm-sector .gjs-sm-field.gjs-sm-select option,.gjs-sm-sector .gjs-sm-select.gjs-clm-field option{padding:3px 0}.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-list.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-list.gjs-clm-field{width:auto;padding:0;overflow:hidden;float:left}.gjs-clm-tags .gjs-sm-field.gjs-sm-list input,.gjs-clm-tags .gjs-sm-list.gjs-clm-field input,.gjs-sm-sector .gjs-sm-field.gjs-sm-list input,.gjs-sm-sector .gjs-sm-list.gjs-clm-field input{display:none}.gjs-clm-tags .gjs-sm-field.gjs-sm-list label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field label,.gjs-sm-sector .gjs-sm-field.gjs-sm-list label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field label{cursor:pointer;padding:5px;display:block}.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label,.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label{background-color:rgba(255,255,255,.2)}.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-icon,.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-icon{background-repeat:no-repeat;background-position:center;text-shadow:none;line-height:normal}.gjs-clm-tags .gjs-sm-field.gjs-sm-integer select,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field select,.gjs-sm-sector .gjs-sm-field.gjs-sm-integer select,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field select{width:auto;padding:0}.gjs-clm-tags .gjs-sm-list .gjs-sm-el,.gjs-sm-sector .gjs-sm-list .gjs-sm-el{float:left;border-left:1px solid rgba(0,0,0,.3)}.gjs-clm-tags .gjs-sm-list .gjs-sm-el:first-child,.gjs-sm-sector .gjs-sm-list .gjs-sm-el:first-child{border:none}.gjs-clm-tags .gjs-sm-list .gjs-sm-el:hover,.gjs-sm-sector .gjs-sm-list .gjs-sm-el:hover{background:rgba(0,0,0,.3)}.gjs-clm-tags .gjs-sm-properties,.gjs-sm-sector .gjs-sm-properties{font-size:11px;padding:10px 5px}.gjs-clm-tags .gjs-sm-property,.gjs-sm-sector .gjs-sm-property{box-sizing:border-box;float:left;width:50%;margin-bottom:5px;padding:0 5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-composite,.gjs-clm-tags .gjs-sm-property.gjs-sm-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-list,.gjs-clm-tags .gjs-sm-property.gjs-sm-stack,.gjs-sm-sector .gjs-sm-property.gjs-sm-composite,.gjs-sm-sector .gjs-sm-property.gjs-sm-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-list,.gjs-sm-sector .gjs-sm-property.gjs-sm-stack{width:100%}.gjs-clm-tags .gjs-sm-property .gjs-sm-btn,.gjs-sm-sector .gjs-sm-property .gjs-sm-btn{background-color:rgba(33,33,33,.3);border-radius:2px;box-shadow:1px 1px 0 rgba(5,5,5,.3),1px 1px 0 rgba(43,43,43,.3) inset;padding:5px;position:relative;text-align:center;height:auto;width:100%;cursor:pointer;color:#ddd;box-sizing:border-box;text-shadow:-1px -1px 0 rgba(0,0,0,.3);border:none;opacity:.85;filter:alpha(opacity=85)}.gjs-clm-tags .gjs-sm-property .gjs-sm-btn-c,.gjs-sm-sector .gjs-sm-property .gjs-sm-btn-c{box-sizing:border-box;float:left;width:100%;padding:0 5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box{background-color:rgba(255,255,255,.05);border-radius:2px;margin-top:5px;position:relative;overflow:hidden}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show{border:1px solid rgba(252,252,252,.05);padding:3px 5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{display:block}.gjs-clm-tags .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file{height:50px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file{background-size:auto 100%;background-repeat:no-repeat;background-position:center center}.gjs-clm-tags .gjs-sm-property .gjs-sm-layers,.gjs-sm-sector .gjs-sm-property .gjs-sm-layers{margin-top:5px;min-height:30px}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer{background-color:rgba(255,255,255,.055);border-radius:2px;box-shadow:1px 1px 0 rgba(0,0,0,.2),1px 1px 0 rgba(255,255,255,.055) inset;margin:2px;padding:7px;position:relative;cursor:pointer}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{height:15px;position:absolute;right:27px;top:6px;width:15px}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box{border-radius:2px}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.5;filter:alpha(opacity=50)}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover{opacity:.8;filter:alpha(opacity=80)}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview{background-color:#fff;height:100%;width:100%;background-size:cover!important}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-active,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-active{background-color:rgba(255,255,255,.12)}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box{display:none}.gjs-clm-tags #gjs-sm-text-shadow #gjs-sm-preview::after,.gjs-sm-sector #gjs-sm-text-shadow #gjs-sm-preview::after{color:#000;content:"T";font-weight:900;line-height:17px;padding:0 4px}.gjs-clm-tags .gjs-sm-stack .gjs-sm-properties,.gjs-sm-sector .gjs-sm-stack .gjs-sm-properties{padding-top:5px}.gjs-clm-tags .gjs-sm-stack #gjs-sm-add,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add{background:0 0;border:none;cursor:pointer;font-size:22px;line-height:10px;position:absolute;right:0;top:-20px;opacity:.75}.gjs-clm-tags .gjs-sm-stack #gjs-sm-add:hover,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add:hover{opacity:1;filter:alpha(opacity=100)}.gjs-clm-tags .gjs-sm-colorp-c,.gjs-sm-sector .gjs-sm-colorp-c{height:100%;width:20px;position:absolute;right:0;top:0;box-sizing:border-box;border-radius:2px;padding:2px}.gjs-clm-tags .gjs-sm-colorp-c .gjs-checker-bg,.gjs-sm-sector .gjs-sm-colorp-c .gjs-checker-bg{height:100%;width:100%;border-radius:1px}.gjs-clm-tags .gjs-sm-color-picker,.gjs-sm-sector .gjs-sm-color-picker{background-color:#ddd;cursor:pointer;height:16px;width:100%;margin-top:-16px;box-shadow:0 0 1px rgba(0,0,0,.3);border-radius:1px}.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-upload,.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-upload{left:0;top:0;position:absolute;width:100%;opacity:0;cursor:pointer}.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-label,.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-label{padding:2px 0}.gjs-sm-layer>#gjs-sm-move{opacity:.7;filter:alpha(opacity=70);cursor:move;font-size:12px;float:left;margin:0 5px 0 0}.gjs-sm-layer>#gjs-sm-move:hover{opacity:.9;filter:alpha(opacity=90)}.gjs-blocks-c{display:flex;flex-wrap:wrap;justify-content:flex-start}.gjs-block{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;width:45%;padding:1em;box-sizing:border-box;height:90px;cursor:all-scroll;font-size:11px;font-weight:lighter;display:flex;flex-direction:column;justify-content:flex-end;border:1px solid rgba(0,0,0,.2);border-radius:3px;margin:10px 2.5% 5px;box-shadow:0 1px 0 0 rgba(0,0,0,.15);transition:all .2s ease 0s;transition-property:box-shadow,color}.gjs-block:hover{box-shadow:0 3px 4px 0 rgba(0,0,0,.15)}.gjs-block.fa{font-size:2em;line-height:2em;padding:11px}.gjs-block-label{line-height:normal;font-size:.65rem;font-weight:400}.gjs-block.gjs-bdrag{width:auto;padding:0}.gjs-clm-tags{font-size:11px;padding:10px 5px}.gjs-clm-tags #gjs-clm-label,.gjs-clm-tags #gjs-clm-sel{padding:7px 0;float:left}.gjs-clm-tags #gjs-clm-sel{font-style:italic;margin-left:5px}.gjs-clm-tags #gjs-clm-status-c{float:right}.gjs-clm-tags #gjs-clm-tags-field{clear:both;padding:5px;margin-bottom:5px}.gjs-clm-tags #gjs-clm-tags-c{display:inline-block;vertical-align:top}.gjs-clm-tags #gjs-clm-add-tag{background-color:rgba(255,255,255,.15);border-radius:2px;padding:5px 6px;box-shadow:1px 1px 0 rgba(255,255,255,.2) inset;border:1px solid rgba(0,0,0,.15);cursor:pointer}.gjs-clm-tags #gjs-clm-new{color:#ddd;padding:5px 6px;display:none}.gjs-clm-tags .gjs-clm-tag{background-color:#804f7b;border:1px solid #5a3857;box-shadow:1px 1px #9c6196 inset;text-shadow:1px 1px #6a4166;display:inline-block;border-radius:3px;margin:0 3px 3px 0;padding:4px;cursor:default}.gjs-clm-tags #gjs-clm-close{font-size:20px;line-height:0;cursor:pointer;color:rgba(255,255,255,.9)}.gjs-clm-tags #gjs-clm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-clm-tags #gjs-clm-checkbox{color:rgba(255,255,255,.9);vertical-align:middle;cursor:pointer;font-size:9px}.gjs-clm-tags #gjs-clm-tag-label{cursor:text}.gjs-clm-tags #gjs-clm-tag-label input{width:auto;padding:0 4px}.gjs-mdl-backlayer,.gjs-mdl-container{position:absolute;top:0;left:0;width:100%;height:100%}.gjs-mdl-backlayer{background-color:#000;z-index:1;opacity:.5;filter:alpha(opacity=50)}.gjs-mdl-container{z-index:10}.gjs-mdl-dialog{text-shadow:-1px -1px 0 rgba(0,0,0,.05);animation:gjs-slide-down 215ms;margin:30px auto 0;max-width:850px;width:90%;border-radius:3px;font-weight:lighter;position:relative;z-index:2}.gjs-mdl-dialog .gjs-mdl-btn-close{position:absolute;right:15px;top:5px}.gjs-mdl-active .gjs-mdl-dialog{animation:gjs-mdl-slide-down 216ms}.gjs-mdl-content,.gjs-mdl-header{padding:10px 15px;clear:both}.gjs-mdl-header{position:relative;border-bottom:1px solid rgba(0,0,0,.3);padding:15px 15px 7px}.gjs-mdl-content{border-top:1px solid rgba(255,255,255,.1)}.gjs-export-dl::after{content:"";clear:both;display:block;margin-bottom:10px}.gjs-am-assets{height:290px;overflow:auto;clear:both}.gjs-am-assets-header{padding:5px}.gjs-am-add-asset .gjs-am-add-field{width:70%;float:left}.gjs-am-add-asset button{width:25%;float:right}.gjs-am-add-field input{padding:6px}.gjs-am-assets-cont{background-color:rgba(0,0,0,.1);border-radius:3px;box-sizing:border-box;padding:10px;width:45%;float:right;height:325px;overflow:hidden}.gjs-am-assets-cont #gjs-am-preview-cont{position:relative;height:70px;width:30%;background-color:#444;border-radius:2px;float:left;overflow:hidden}.gjs-am-assets-cont #gjs-am-preview{position:absolute;background-position:center center;background-size:cover;background-repeat:no-repeat;height:100%;width:100%;z-index:1}.gjs-am-assets-cont #gjs-am-preview-bg{position:absolute;height:100%;width:100%;opacity:.5;filter:alpha(opacity=50);z-index:0}.gjs-am-assets-cont .gjs-am-highlight{background-color:rgba(255,255,255,.1)}.gjs-am-assets-cont .gjs-am-asset{border-bottom:1px solid rgba(0,0,0,.3);padding:5px;cursor:pointer;position:relative}.gjs-am-assets-cont .gjs-am-asset:hover #gjs-am-close{display:block}.gjs-am-assets-cont #gjs-am-close{position:absolute;right:5px;top:0;display:none}.gjs-am-assets-cont #gjs-am-meta{width:70%;float:left;font-size:12px;padding:5px 0 0 5px;box-sizing:border-box}.gjs-am-assets-cont #gjs-am-meta>div{margin-bottom:5px}.gjs-am-assets-cont #gjs-am-meta #gjs-am-dimensions{font-size:10px;opacity:.5;filter:alpha(opacity=50)}.gjs-am-file-uploader{width:55%;float:left}.gjs-am-file-uploader>form{background-color:rgba(0,0,0,.1);border:2px dashed;border-radius:3px;position:relative;text-align:center;margin-bottom:15px}#gjs-rte-toolbar .gjs-rte-btn.btn-info,.gjs-cm-editor #gjs-cm-title{background-color:rgba(0,0,0,.3)}.gjs-am-file-uploader>form.gjs-am-hover{border:2px solid #62c462;color:#75cb75}.gjs-am-file-uploader>form.gjs-am-disabled{border-color:red}.gjs-am-file-uploader>form #gjs-am-uploadFile{opacity:0;filter:alpha(opacity=0);padding:150px 10px;width:100%;box-sizing:border-box}.gjs-am-file-uploader #gjs-am-title{position:absolute;padding:150px 10px;width:100%}.gjs-cm-editor-c{float:left;box-sizing:border-box;width:50%}.gjs-cm-editor-c .CodeMirror{height:450px}.gjs-cm-editor{font-size:12px}.gjs-cm-editor#gjs-cm-htmlmixed{padding-right:10px;border-right:1px solid rgba(0,0,0,.3)}.gjs-cm-editor#gjs-cm-htmlmixed #gjs-cm-title{color:#a97d44}.gjs-cm-editor#gjs-cm-css{padding-left:10px;border-left:1px solid rgba(255,255,255,.1)}.gjs-cm-editor#gjs-cm-css #gjs-cm-title{color:#ddca7e}.gjs-cm-editor #gjs-cm-title{font-size:12px;padding:5px 10px 3px;text-align:right}#gjs-rte-toolbar{display:none;border:1px solid rgba(0,0,0,.3);position:absolute;border-radius:3px;overflow:hidden;z-index:10}#gjs-rte-toolbar .gjs-rte-btn{display:inline-block;padding:5px;min-width:25px;border-right:1px solid rgba(0,0,0,.3);text-align:center;cursor:pointer;outline:0}#gjs-rte-toolbar .gjs-rte-btn:last-child{border-right:none}#gjs-rte-toolbar .gjs-rte-btn:hover{background-color:rgba(255,255,255,.1)}#gjs-rte-toolbar select{height:16px}.sp-hue,.sp-slider{cursor:row-resize}.sp-color,.sp-dragger{cursor:crosshair}.sp-alpha-handle,.sp-alpha-inner{cursor:col-resize}.sp-hue{left:90%}.sp-color{right:15%}.sp-container{border:1px solid rgba(0,0,0,.3);box-shadow:0 0 7px rgba(0,0,0,.3);border-radius:3px}.sp-picker-container{border:none}.colpick_dark .colpick_color{outline:rgba(0,0,0,.3) solid 1px}.sp-cancel,.sp-cancel:hover{bottom:-8px;color:#777!important;font-size:25px;left:0;position:absolute;text-decoration:none}.sp-alpha-handle{border:1px solid #555;width:4px}.sp-color,.sp-hue{border:1px solid #333}.sp-slider{border:1px solid #555;height:3px;left:-4px;width:22px}.sp-dragger{background:0 0;box-shadow:0 0 0 1px #111}.sp-button-container{float:none;width:100%;position:relative;text-align:right}.sp-container button,.sp-container button:active,.sp-container button:hover{background:rgba(0,0,0,.3);border-color:rgba(0,0,0,.3);color:#ddd;text-shadow:none;box-shadow:none;padding:3px 5px}.sp-palette-container{border:none;float:none;margin:0;padding:5px 10px 0}.sp-palette .sp-thumb-el,.sp-palette .sp-thumb-el:hover{border:1px solid rgba(0,0,0,.9)}.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:rgba(0,0,0,.9)}.gjs-hidden{display:none}@keyframes gjs-slide-down{0%{transform:translate(0,-3rem);opacity:0}100%{transform:translate(0,0);opacity:1}}@keyframes gjs-slide-up{0%{transform:translate(0,0);opacity:1}100%{transform:translate(0,-3rem);opacity:0}} \ No newline at end of file diff --git a/public/grapejs/dist/css/grapesjs-preset-newsletter.css b/public/grapejs/dist/css/grapesjs-preset-newsletter.css new file mode 100644 index 00000000..9eb4c81e --- /dev/null +++ b/public/grapejs/dist/css/grapesjs-preset-newsletter.css @@ -0,0 +1,215 @@ +/* #008f73 #4c9790 */ +.gjs-clm-tags .gjs-sm-title, +.gjs-sm-sector .gjs-sm-title { + border-top: none; } + +.gjs-clm-tags .gjs-clm-tag { + background-color: #4c9790; + border: none; + box-shadow: none; + padding: 5px 8px; + text-shadow: none; } + +.gjs-field { + background-color: rgba(0, 0, 0, 0.15); + box-shadow: none; } + +.gjs-btnt.gjs-pn-active, +.gjs-pn-btn.gjs-pn-active { + box-shadow: none; } + +.gjs-pn-btn:hover { + color: rgba(255, 255, 255, 0.75); } + +.gjs-btnt.gjs-pn-active, +.gjs-color-active, +.gjs-pn-btn.gjs-pn-active, +.gjs-pn-btn:active, +.gjs-block:hover { + color: #35d7bb; } + +#gjs-rte-toolbar .gjs-rte-btn, +.gjs-btn-prim, +.gjs-btnt, +.gjs-clm-tags .gjs-sm-composite.gjs-clm-field, +.gjs-clm-tags .gjs-sm-field.gjs-sm-composite, +.gjs-clm-tags .gjs-sm-stack #gjs-sm-add, +.gjs-color-main, +.gjs-mdl-dialog, +.gjs-off-prv, +.gjs-pn-btn, +.gjs-pn-panel, +.gjs-sm-sector .gjs-sm-composite.gjs-clm-field, +.gjs-sm-sector .gjs-sm-field.gjs-sm-composite, +.gjs-sm-sector .gjs-sm-stack #gjs-sm-add { + color: #a0aabf; + /* #a0aabf #d0d6e2 */ } + +#gjs-rte-toolbar, +.gjs-bg-main, +.gjs-clm-select option, +.gjs-clm-tags .gjs-sm-colorp-c, +.gjs-editor, +.gjs-mdl-dialog, +.gjs-nv-item .gjs-nv-title-c, +.gjs-off-prv, +.gjs-pn-panel, +.gjs-select option, +.gjs-sm-sector .gjs-sm-colorp-c, +.gjs-sm-select option, +.gjs-sm-unit option, +.sp-container, +.gjs-block { + background-color: #373d49; +} + +.gjs-import-label, +.gjs-export-label { + margin-bottom: 10px; + font-size: 13px; } + +.gjs-mdl-dialog .gjs-btn-import { + margin-top: 10px; } + +.CodeMirror { + border-radius: 3px; + height: 450px; + font-family: sans-serif, monospace; + letter-spacing: 0.3px; + font-size: 12px; } + +/* Extra */ + +.gjs-block { + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 3px; + margin: 10px 2.5% 5px; + box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.15); + transition: box-shadow 0.2s ease 0s; +} + +.gjs-block:hover { + box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.15); +} + +#gjs-pn-views-container.gjs-pn-panel { + padding: 39px 0 0; } + +#gjs-pn-views.gjs-pn-panel { + padding: 0; + border: none; } + +#gjs-pn-views .gjs-pn-btn { + margin: 0; + height: 40px; + padding: 10px; + width: 25%; + border-bottom: 2px solid rgba(0, 0, 0, 0.3); } + +#gjs-pn-views .gjs-pn-active { + color: rgba(255, 255, 255, 0.9); + border-bottom: 2px solid #35d7bb; + border-radius: 0; } + +#gjs-pn-devices-c { + padding-left: 30px; } + +#gjs-pn-options { + padding-right: 30px; } + +.gjs-sm-composite .gjs-sm-properties { + display: flex; + flex-flow: row wrap; + justify-content: space-between; } + +#gjs-sm-border-top-left-radius, +#gjs-sm-border-top-right-radius, +#gjs-sm-border-bottom-left-radius, +#gjs-sm-border-bottom-right-radius, +#gjs-sm-margin-top, +#gjs-sm-margin-bottom, +#gjs-sm-margin-right, +#gjs-sm-margin-left, +#gjs-sm-padding-top, +#gjs-sm-padding-bottom, +#gjs-sm-padding-right, +#gjs-sm-padding-left { + flex: 999 1 60px; } + +#gjs-sm-border-width, +#gjs-sm-border-style, +#gjs-sm-border-color { + flex: 999 1 80px; } + +#gjs-sm-margin-left, +#gjs-sm-padding-left { + order: 2; } + +#gjs-sm-margin-right, +#gjs-sm-padding-right { + order: 3; } + +#gjs-sm-margin-bottom, +#gjs-sm-padding-bottom { + order: 4; } + +.gjs-field-radio { + width: 100%; } + +.gjs-field-radio #gjs-sm-input-holder { + display: flex; } + +.gjs-radio-item { + flex: 1 0 auto; + text-align: center; } + +.gjs-sm-sector .gjs-sm-property.gjs-sm-list { + width: 50%; } + +.gjs-mdl-content { + border-top: none; } + +.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-active { + background-color: rgba(255, 255, 255, 0.09); } + +/* + +#gjs-pn-views-container, +#gjs-pn-views{ + min-width: 270px; +} +*/ +.gjs-f-button::before { + content: 'B'; } + +.gjs-f-divider::before { + content: 'D'; } + +.gjs-mdl-dialog-sm { + width: 300px; } + +.gjs-mdl-dialog form .gjs-sm-property { + font-size: 12px; + margin-bottom: 15px; } + +.gjs-mdl-dialog form .gjs-sm-label { + margin-bottom: 5px; } + +#gjs-clm-status-c { + display: none; } + +.anim-spin { + animation: 0.5s linear 0s normal none infinite running spin; } + +.form-status { + float: right; + font-size: 14px; } + +.text-danger { + color: #f92929; } + +@keyframes spin { + 0% { + transform: rotate(0deg); } + 100% { + transform: rotate(360deg); } } diff --git a/public/grapejs/dist/css/material.css b/public/grapejs/dist/css/material.css new file mode 100644 index 00000000..1bc89d6b --- /dev/null +++ b/public/grapejs/dist/css/material.css @@ -0,0 +1,53 @@ +/* + + Name: material + Author: Michael Kaminsky (http://github.com/mkaminsky11) + + Original material color scheme by Mattia Astorino (https://github.com/equinusocio/material-theme) + +*/ + +.cm-s-material { + background-color: #263238; + color: rgba(233, 237, 237, 1); +} +.cm-s-material .CodeMirror-gutters { + background: #263238; + color: rgb(83,127,126); + border: none; +} +.cm-s-material .CodeMirror-guttermarker, .cm-s-material .CodeMirror-guttermarker-subtle, .cm-s-material .CodeMirror-linenumber { color: rgb(83,127,126); } +.cm-s-material .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } +.cm-s-material div.CodeMirror-selected { background: rgba(255, 255, 255, 0.15); } +.cm-s-material.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } +.cm-s-material .CodeMirror-line::selection, .cm-s-material .CodeMirror-line > span::selection, .cm-s-material .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-material .CodeMirror-line::-moz-selection, .cm-s-material .CodeMirror-line > span::-moz-selection, .cm-s-material .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } + +.cm-s-material .CodeMirror-activeline-background { background: rgba(0, 0, 0, 0); } +.cm-s-material .cm-keyword { color: rgba(199, 146, 234, 1); } +.cm-s-material .cm-operator { color: rgba(233, 237, 237, 1); } +.cm-s-material .cm-variable-2 { color: #80CBC4; } +.cm-s-material .cm-variable-3 { color: #82B1FF; } +.cm-s-material .cm-builtin { color: #DECB6B; } +.cm-s-material .cm-atom { color: #F77669; } +.cm-s-material .cm-number { color: #F77669; } +.cm-s-material .cm-def { color: rgba(233, 237, 237, 1); } +.cm-s-material .cm-string { color: #C3E88D; } +.cm-s-material .cm-string-2 { color: #80CBC4; } +.cm-s-material .cm-comment { color: #546E7A; } +.cm-s-material .cm-variable { color: #82B1FF; } +.cm-s-material .cm-tag { color: #80CBC4; } +.cm-s-material .cm-meta { color: #80CBC4; } +.cm-s-material .cm-attribute { color: #FFCB6B; } +.cm-s-material .cm-property { color: #80CBAE; } +.cm-s-material .cm-qualifier { color: #DECB6B; } +.cm-s-material .cm-variable-3 { color: #DECB6B; } +.cm-s-material .cm-tag { color: rgba(255, 83, 112, 1); } +.cm-s-material .cm-error { + color: rgba(255, 255, 255, 1.0); + background-color: #EC5F67; +} +.cm-s-material .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} \ No newline at end of file diff --git a/public/grapejs/dist/css/toastr.min.css b/public/grapejs/dist/css/toastr.min.css new file mode 100644 index 00000000..095b99ca --- /dev/null +++ b/public/grapejs/dist/css/toastr.min.css @@ -0,0 +1,6 @@ +/* + * Note that this is toastr v2.1.3, the "latest" version in url has no more maintenance, + * please go to https://cdnjs.com/libraries/toastr.js and pick a certain version you want to use, + * make sure you copy the url from the website since the url may change between versions. + * */ +.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#FFF}.toast-message a:hover{color:#CCC;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#FFF;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);line-height:1}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}.rtl .toast-close-button{left:-.3em;float:left;right:.3em}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999;pointer-events:none}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#FFF;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>div.rtl{direction:rtl;padding:15px 50px 15px 15px;background-position:right 15px center}#toast-container>div:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin-left:auto;margin-right:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin-left:auto;margin-right:auto}.toast{background-color:#030303}.toast-success{background-color:#51A351}.toast-error{background-color:#BD362F}.toast-info{background-color:#2F96B4}.toast-warning{background-color:#F89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{right:-.2em;top:-.2em}#toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{right:-.2em;top:-.2em}#toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}#toast-container>div.rtl{padding:15px 50px 15px 15px}} \ No newline at end of file diff --git a/public/grapejs/dist/css/tooltip.css b/public/grapejs/dist/css/tooltip.css new file mode 100644 index 00000000..c9a3160d --- /dev/null +++ b/public/grapejs/dist/css/tooltip.css @@ -0,0 +1,88 @@ +[data-tooltip] { + position: relative; +} + +[data-tooltip]::after { + font-family: Helvetica, sans-serif; + background: rgba(51, 51, 51, 0.9); + background: rgba(55, 61, 73, 0.9); + border-radius: 3px; + bottom: 100%; + color: #fff; + content: attr(data-tooltip); + display: block; + font-size: 12px; + left: 50%; + line-height: normal; + max-width: 32rem; + opacity: 0; + overflow: hidden; + padding: 0.6rem 1rem; + pointer-events: none; + position: absolute; + text-overflow: ellipsis; + -webkit-transform: translate(-50%, 0); + -ms-transform: translate(-50%, 0); + transform: translate(-50%, 0); + transition: all 0.216s ease; + z-index: 99; +} + +[data-tooltip]:focus::after, +[data-tooltip]:hover::after { + opacity: 1; + -webkit-transform: translate(-50%, -0.5rem); + -ms-transform: translate(-50%, -0.5rem); + transform: translate(-50%, -0.5rem); +} + +[data-tooltip][disabled], +[data-tooltip].disabled { + pointer-events: auto; +} + +[data-tooltip-pos=right]::after { + bottom: 50%; + left: 100%; + -webkit-transform: translate(0, 50%); + -ms-transform: translate(0, 50%); + transform: translate(0, 50%); +} + +[data-tooltip-pos=right]:focus::after, +[data-tooltip-pos=right]:hover::after { + -webkit-transform: translate(0.5rem, 50%); + -ms-transform: translate(0.5rem, 50%); + transform: translate(0.5rem, 50%); +} + +[data-tooltip-pos=bottom]::after { + bottom: auto; + top: 100%; + -webkit-transform: translate(-50%, 0); + -ms-transform: translate(-50%, 0); + transform: translate(-50%, 0); +} + +[data-tooltip-pos=bottom]:focus::after, +[data-tooltip-pos=bottom]:hover::after { + -webkit-transform: translate(-50%, 0.5rem); + -ms-transform: translate(-50%, 0.5rem); + transform: translate(-50%, 0.5rem); +} + +[data-tooltip-pos=left]::after { + bottom: 50%; + left: auto; + right: 100%; + -webkit-transform: translate(0, 50%); + -ms-transform: translate(0, 50%); + transform: translate(0, 50%); +} + +[data-tooltip-pos=left]:focus::after, +[data-tooltip-pos=left]:hover::after { + -webkit-transform: translate(-0.5rem, 50%); + -ms-transform: translate(-0.5rem, 50%); + transform: translate(-0.5rem, 50%); +} \ No newline at end of file diff --git a/public/grapejs/dist/fonts/FontAwesome.otf b/public/grapejs/dist/fonts/FontAwesome.otf new file mode 100755 index 0000000000000000000000000000000000000000..3ed7f8b48ad9bfab52eb03822fefcd6b77d2e680 GIT binary patch literal 109688 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%0D}#zSrRb8FuaocFSDv)#ldj3 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 literal 0 HcmV?d00001 diff --git a/public/grapejs/dist/fonts/fontawesome-webfont.svg b/public/grapejs/dist/fonts/fontawesome-webfont.svg new file mode 100755 index 00000000..d05688e9 --- /dev/null +++ b/public/grapejs/dist/fonts/fontawesome-webfont.svg @@ -0,0 +1,655 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/grapejs/dist/fonts/fontawesome-webfont.ttf b/public/grapejs/dist/fonts/fontawesome-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..26dea7951a73079223b50653c455c5adf46a4648 GIT binary patch literal 142072 zcmd4434B!5**|{Ix!dgfl1wJaOfpLr43K1!u!SM)5RlCc5Ce)Lh@yfZZlh8a+(9X| zRijob-Cn!cUu%o+wC`JeyGU(o?dIDzwzc-HO9Sm|D`YPJ?{n@g3-Ylumyd6~ zTR!vRO`DOwLz4K>OV(b!<-`fpBq`V9zU7k3uD#elZr_#2?~>T@ zaU0gJy~yc!@hpj*cn0@7HsFF=wyi?`kH{xBY~H$KUt_pQ;*vv>Y_`j;xNz;IcfWbI z#BCLlqA1EB$cV<3FPF50>0b?T~)5t^1(3<3a{+!VgED@!N1j?~z0G z+FW*@q)Li%m(qs(ZRVL@jY{_*f7+id*IsqCl$B!tg9e;HDNSPaIEj`NABu?_#*M~K zikkP>+sIL=sH8CTN7{l~RB3_~llrBD(if$#N-s#ih}mM}V;98h>T2rxl0$>8!J5JD z!Nr4X1}`7HaqynOM+Uz*_~pUFgTEPkchETEI#P3_uAl64otpoP|dh@@&{+svy z^Z0*0_p4e@)KlfD^i+7lo{%T#33&V-pU3M_JhF#-m`8G-a2xJ|d&qs32fL0%`OSN~j#l0+*Y42uj@zxrqJ<(ja zgJmPBRAeYeN0u$z(VS=qtGRGPLY-5O+XX4rp2D9j@g2?e;VO%zN=y~rA>kd($an)T zUf06gyLnq{*sG4tws&;0j<(j2Ce7M#$;wMM%);r6OV25c&ZcVQti#jLrN)l;w=QlD z2AdaOgj1SVzEhY|enEb*w#^14)I|`2HssI-U5cag9w|ou3|*~DGaM2r?(uabVoJyt z#4v=EobkSKkMTa!*;TUM+uo5d4u0jedyV6VuDIe5Q&|mD4_$FRJ15CefazvoBiG)W zVrO4JQsRn3#_@Y!`-*WeDM0c>P6rZ_BGNQzkt8L(ny%kjW! z-XdcTv|u0{3fCx8cx$)Z+0og}I=$xPWV|#z7^qwiJHT^ znkP)0IH7sh;hIE2a{B#B1NT|I7MtpKKE3t8lj_7s(&tM?CaO;!XuiMiIG$V6qfi~@ z98=$Nz_*fuA#G7IXklv&4|mI$P#RPDp>|*4K3je7)bYkZ_sv%8@kZhP zoR6=xBrdq6p+UKihbqvWvaXRzAw z_S=r?pypzKW$UVfN$Y&}Vq>E*X}*=#2*Hi{ZYx2rl_l+%d^xF>+Hv}3C|9ypW96Yk z#!A*YpY3GVvKK|W8c*LW9$<~#>_+33ZsX_1suy3BZKY5D+qe>nvmhyDO)ZE@{hxT8)R}aQI=B%G)?OFb@+dj6u$2x8OoQ_yfH}bC= z-+BFY)_v=aJMY|)S-e zL}0el926-PDM*C+WE_W(D-~4Bo-~jiDfMA>Vi~?K7LtaAlr7blVh^1vS%`4FI2AGI zsEiajK9ZEnix?x?YW|bggbYW2yG(44ah|hgzoH9xaT!Bf2Ddhp|5zr36dy`zS9TT_SEp?_e7#AB`Hn zb?BLyQ)vwD}ftI1l&xkOIvXmkE%PZqw5a^bSqPRqGsb)#;?qpSPH4)+gPet z`>$|SyytXx%_pc9lb$hYs(S2=v#>W~T{WABy3{m=y_r_r6rgP!T0_+g8xfccL3v47 zlBcA+6v^)#@H;`a41fd~Nsgk&7G_RIkMV(%o}^0tP)4LZyK&)Zh_v!Pxur0;#j#NP zkF~#$r>1kXNx4!z}u#ud$xZF;{cbrLhICUb_Ls@zjQEUtJKpw5iz@+iX0~7Zd~@ z=X4}m3WTqqf6M6wDJfv41SzedBw7cWLF_ODG-LDB`ttiHL zRfb5iENVJh5NS?ncGVD_Tryo^M~{h&N|_?9i1`5C)1}LiZ%@@}flwHLg7x3*5C|?tadRy zR10=Qk@ml`fB!3dzsKKO;-C=9X6-K9$Zz~I%0Bu#KajU~JwG{x?uVd}}vjag1(U(^Ua!c+ezZirA?w zj!`F0s+Qrv0X{@)LBM@ozR=zQX6~ThlWHda92ggk|Qq z7t{W}*gc13Ts}Eg21c&aqzg6jSBH85^WLPgV4Ib5>w{>>Q19|W@e#{Mc6)30ru$BY;X=ZMf{159D;S4N7@ zSYYKkpHcW%3**)WwkiuhCldMLztLD28@@(z0ElEr4gh@RN6WEq0cwN8^I?)^Vci=~ zrCADc2*LqzullWMLs!EwL958QhQ8=7w!`KyUUaYvjlPDi0)(T{zJ}vDqNB7dibiJ{ zcT_vrB*!tIf}NiA3&97y+gzIg>_6j7h$28RcPMbvglr^F3yZm!r-sEkBo7BRg-`%8 z0U3zI#0Udo5?KG-ihS# zx4VVR7jyyUSqEpBgsekK6menc>>oAl;ZW;zT74{}6CJ}+KyUG)fFlTjlxj+q7)h2= z?N0$5FwvOWAKyOtQ@P8Q->7*p0l~VhQEN!oe8*a2RIx?mY==c%Q>zeA{YeS&u)!2yR?PzmK<;LE52{ zK<5-~1zyD9np>nP9U)4SoxZJW%35e+)6r~}b^qi8oBBY&=%)s$@kOq(({Ezqus*k5nTVW?WNhzN@~mu=*`VR!4xWG9sG&(@zwMsJ8!GGSDht1uRyIa%sfr{d zM2Cw_7i?^22gc?!%Uxg zA3+;J6Ndh$Q`1?hzRtx#v$eI-eh*w-1CBu%7EiXdD%kr$+5y0gY?IepyXS%Lm58tH zugupyF8gjPvurlL|M?M8Z6EV*x&;ufN=7!4YDm}Y*@He6ui);*R=+phbGsAF9$ zdU)p*>u<&)8m2En&m^R|Xk|d>QoJq!f@MSi0L}y3tZ1xQ7Nvy^{svtcrgNq-pA;8u zZw;w$vaGSecz3Vy=S?^Ju{I_N|olNj=N|)m7}S7nS~3t z71YWq*Vb|E{l{sAvqe~^Iqb@d%r!{x5>s-bt}{+u8>9p@kr;q(xxGck=n&s?s&}y5 zS#xaeNUEZ)u7dtk5w~s5DPC;&4%`}5lU2d$U}ej!mP(wfk}9ZEs4ak#zkxZMi@u#9 z&6hTPlr~}eFSb>>fBg0HV*sahr5LAGJs9tk2%%bX29%U4aG5moEr( zrBe~7^Dg#Thc@1xa!9r~mjUbQ*_^!W1ycB*KbQsf?^*9@fe{t0I-ih7%~VimVR6+Zg>wsyMsdwBYE{M{)2)=Zy%Xw4cb zHhsF9J9e{r(?9i3^J4Dl52|k=t&_%gSVmE#h`>RVwjq#3EDz+kaHDcf(g>#8Gs!|G zm4RHoKa)%GA0!n!-CSs7Gf5+mO!6Nla~am(-kV7kI*7;u6i6o?)HfC11qsy$zfCpU z0PYVs5eh_BPx$)7TETLnafy~1_G*$^n9B_O1MNd^(CBC_9>UA`_fr|O*|KBlXI4+&)gnGIo)!EHSP(ullsEtnGmKN5*zO3flVBf%cr$Z{S zZmlHSNukOjD_54+E@=oE@A$8tF|>Zsz0r!0#;_-HM^Foov&br!qjIoGVY;Fu6#saI zSvYrvG>g~i55&`u8aw&>3zme8cN25ZANpjK-EOPcA%C*E!@|btJazmX#o^+8&PpYS zM4=yv4JTbu>L$$_x+Z(hro}U-DlINcm1YlA*;1QQwg!v6PD^a5v$m+tdNr~wWvRDX z0uhTN8BbS+m?m4dEEu|G`)s$TYEErL{&lF{T|@h&pcV|G7R)4u6maozRl*oUSIk-= zgdiz^5Q9Nb0da*1gxIf@yTZYEIvw{{PN+BL8gmol&3q6x2UcfS-Lb#bbvZ3D_Ox+s zobsv_d7%m-T%HsAuME5tkfuUNY9bRM_lcK4kyL;}WNlJxwAG01xyXGI{Vg~>2JAD0 z|9*%Za!Sr*L?Kuq_5Xcd9)iTMHqkH7}?;bq( z?m>BgNTy>sIu5k?*JrqtS?_NvTrwj0mitid;JbYO{*6PToQ&fg6X(vIc*pS^89JDD z40t(ctkU@D(h|&)+zP^}GljP+(6 +|+&Vdls@0SAya!8#E9iVniRwHu0GY;H*n zR85WCMp8<;snu)zXP=G#Xp%p5&d~RHxMxCJ%JB}XSeUWMFU9vZy3ei-xcz(F8k=rp zdyPM(m0MZZ60|zi?q$sAj;xPPN%hK%PyX-8mZZEy{;|=m@WRkFXXA z5nF70;)1&WoP37EU9F}3icj&lSaW?;#r|w_SUit?N9L1_cPc}*K5%Pkt1n=2nYaoV z5-=GAhF=RUdZ;btZBMs=_tMe1fL6m~K|7*rAS?BN=yO0|fNo_f%Xms&H32%tGnW7tmw`>^wOMdk3PM6+%w}g8kf6c?98ir#!ZcT z6o%=3F`@>TLafTh+!$%g~lJN`>1|lZ=iJwyN^0%@(IsRoHUw zXOYP(ZdllU&ZNn)iuxBGyy(%3XGgV=Sf4qC*5@Qi3JMh0*%4vsObbtU5^D;iN4f
    2+6Pgs9+! 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�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%0D0!#Bo^>xe$Z4SmykflG_VnkLvLv4@e#4_y4Q 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�>=olG4!T4BYNCc4f{&*Kgc`m= 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 IrMnXN7hU8`zW@LL literal 0 HcmV?d00001 diff --git a/public/grapejs/dist/fonts/main-fonts.svg b/public/grapejs/dist/fonts/main-fonts.svg new file mode 100755 index 00000000..ff483d53 --- /dev/null +++ b/public/grapejs/dist/fonts/main-fonts.svg @@ -0,0 +1,394 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + Borders: 30pxCanvas: 1000x1000px + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/grapejs/dist/fonts/main-fonts.ttf b/public/grapejs/dist/fonts/main-fonts.ttf new file mode 100755 index 0000000000000000000000000000000000000000..4399759ffee5241e01d260bc77461ec79ff7cf9a GIT binary patch literal 5628 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 BJ6He! literal 0 HcmV?d00001 diff --git a/public/grapejs/dist/fonts/main-fonts.woff b/public/grapejs/dist/fonts/main-fonts.woff new file mode 100755 index 0000000000000000000000000000000000000000..77e183be9514eb36dacfdf8bf2e024be864678d5 GIT binary patch literal 2700 zcmY*ac{tSDAO13nwUFT!$u_p=HjI6pY=aaLlO<-1HI1yvrTr{ z1`!G&qsU&C`*rX0`{Q?>=RN21zUT8f+w+{~^)}Gf2511VF~$N+rz6MVfBZE5|AsX- zQ3n7TdQepYahoqz$k)L5suZYcf*hO!Oie3@Y(x^l71Sa@ehdJ#{R$PBLx=mm_FxQZ zFarQML%*5idB)L>U<&|rlVF}W2wA32{Y;La2mtg@kn?~*(#1m>9Z8-(poRoF3kX9) zu)F_&c$y~-hL=wv#L8blBKUy&(&ItS3xbaZ1#GzxNOqtW44%gu-2d0fo6#cI2OgdP zz_1VIB!cMWZAmos$s*!y@%VWg6uy#(@70y)A{uG3CZJCN4MCcY!-oNsY)p{9!BF- zF2;P8`6hEpf8X&{VkCipkECTphb{tbmW*xyxW>SUic33&_3>x#gOfKJ!JJyf`3MDA zXz01{P6km?Rt83OOHn$#l&}Jkxyc*>xhNxh91CTTYsg0h!(P;vB+VBPAGulXc=?N$ zpH@>_CWYOFqbFU;p)Fd5yOuiXvDlf>xAVI3Rew!mDfN=i(d>~EQYD~0`)h!m>P8WR zAh}lw>5$9iQZ$@rfEyPYrxcVmnEUChr7;Ix(o0>H+Lnq-?lt3)S&h86BE&I&cw%GQ z^`j6+{1TI_Ema*kbmjO>rO(>SrK+ls(i`vd9#}+sOqpl(4u0|6rKE*1c4a!|Z3|#;Cj>dY|65aMM+6ShvOGJL5r7<&3?`h z{oTd$>B}wwO|4?lGTG!>n=Vy}5mUoV-ZBdBc&Mn2SOmsN%qSYcRjj)jhxr9ubEL*i zMyu&LJAdT0u_h~RKUZq3?orL(eM5cZF<9TB66gP2;R(Q|_Rxe4(`_VZTUk=~5r%zv z$d@gkXok^|FVogYNVnTY{LHiCxezxjxF4IqIiqUrToN~nS-i3he@VNVj2B*1ud9$z zKY$WzEbhM^oRrhzOgd+#AzS}DEw`!Fi+h%scl;;jNSodKqfF=qv|S;M%T1pr&of;8 z+ePB?`2r-ikk%^DiU}%x&lfVV!n(99_L8$KfN27;I+y1@)1Z^UnlAWoN`bP{>?m?y zvu5a>Hkpd<4=fF-yttmqd0`#3z}}waLZKKcPLmNm@s^|exb-Ua3#?O{q2KmO)b0hg z)^gL_6dXzs$KlaUM3xU?t>o6RN2*Ub-J12V`>=*^Ytft_8C9XG)ccuAtzVpE82%y! z%uha64ixt_AkH4O+zM3H=jaOIhx*Vb1YKPf)BFwTycI57e;C|erGHqZUu+b{s1&XsH#QNG-=0{Y3iDlKt)2*qKcG0xkql1Zcp|0kDsLP zeiuC|ein@DlonQ&b{O-=GTzD*e(QuE-#FRZ+t%nma`U|w`E9Fsq5HwZ2#fdR{beE% zWvv{RpqY)J11N$3Kf~VrtQGPc}u^>IBuOjM(FGDV6n6Dxn7YONMu+WEb@j zekA&Oq~VC6lyit{Q|E;u`A5oWthwH@!mO$eC=Ixay!ug{RBLFf$ly%5 zEXt|J8tr)R56!2KgtOPWpOikoqs&?7KG95)7`^n}YMCWN(lN?Tqbx4{`qu+x5|@Qf zjYkyjEt86$@_FVV@pjz$R@l^w&K++Wv`)BZB1gV@qU*U*M+vUs)YpodF%dRa$PA(I zP4m3>=V(p({)mn^too}fzK6m%_~XfKn|iqocWdjDz~I|e6BF+EaXnSldV!Pe-ej8O z?-5=}eN3UcF{y9Tu58bZAj*P#+psLb#|WzYu5mNceY1PPLL<}SdH{D*1FlgyGlh^8 zn4LTN;oaXTByvQNyx# z#T2g~0);tduckEC^oTgo<*3?%Pr(?ov~Fbc|8^Y z-HPzd_SF7V_BJ$Ha(X+sY2ZbBGJk`;F!mVEEG_KypC{q*z?TKfqv?eMQj3&pH7fXB z3bkXsTY8JBQl1XNe(GOg45R?DL=5reVr-a&%N>@;1xq4?HVRa>6uGL7 z<9G!d;WdJXss=mrUYl!M-juZT7p+T=j6$#Wdkq0X#d4qF<>R=!)k__O5x+~n^W1Qm8}{5-x*a)0G4X-C4tvS8x3DEP zkQ24?u(8=@SHJdIVU&wfnL5|APTLk4n8dV}{LF?42JYj=g%wTi9mSKIYV(bW&9 zygy+)9TLe+5vj)-?}y8W*gCNEkUzv*+`H>$jbe^BjtdWGy_i`vnB#vMn3G8}ZaJ*Z zrh5te@hL8|{@6EIZ?f@#M?l(-T(3p0k(9-oIj`H22eHa-GjoL+<5JhR`qH_RqR|(g zBL$o#w%)>07`*7Jm7Swh=eks=X8Sx1cUHO25#74McPGVOKO2eyG?i*s?dg$8Yk&0^PYgTk{yUb@ou90S_-Hv(5-Iv|NRIoS7NWsc9I{>TcMu bewB33%pSYx&q%U1T1Q=Snk0)T%2dcn`F literal 0 HcmV?d00001 diff --git a/public/grapejs/dist/js/ajaxable.min.js b/public/grapejs/dist/js/ajaxable.min.js new file mode 100644 index 00000000..76165b56 --- /dev/null +++ b/public/grapejs/dist/js/ajaxable.min.js @@ -0,0 +1,2 @@ +/*! ajaxable - 0.2.3 */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ajaxable=t():e.ajaxable=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}var o=n(1),i=r(o);e.exports=function(e,t){return new i["default"](e,t)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"";o(this,t);var r=i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));if(!e)throw new Error("The element is empty");var s={responseType:"json",headers:{}},a=n||{};for(var u in s)u in a||(a[u]=s[u]);var f="X-Requested-With";""!=a.headers[f]&&(a.headers[f]="XMLHttpRequest"),r.els=r.parseEl(e),r.opts=a;for(var c=0;c0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}if((o||q)&&p){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),o)for(l=o.length;l>0;l-=1)if(e=p[o.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&q&&q[d]&&(i=q[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,b){return function(){var c=w.call(arguments,0);return"string"!=typeof c[0]&&1===c.length&&c.push(null),o.apply(d,c.concat([a,b]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){r[a]=b}}function j(a){if(e(s,a)){var b=s[a];delete s[a],u[a]=!0,n.apply(d,b)}if(!e(r,a)&&!e(u,a))throw new Error("No "+a);return r[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return a?k(a):[]}function m(a){return function(){return t&&t.config&&t.config[a]||{}}}var n,o,p,q,r={},s={},t={},u={},v=Object.prototype.hasOwnProperty,w=[].slice,x=/\.js$/;p=function(a,b){var c,d=k(a),e=d[0],g=b[1];return a=d[1],e&&(e=f(e,g),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(g)):f(a,g):(a=f(a,g),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},q={require:function(a){return g(a)},exports:function(a){var b=r[a];return"undefined"!=typeof b?b:r[a]={}},module:function(a){return{id:a,uri:"",exports:r[a],config:m(a)}}},n=function(a,b,c,f){var h,k,m,n,o,t,v,w=[],x=typeof c;if(f=f||a,t=l(f),"undefined"===x||"function"===x){for(b=!b.length&&c.length?["require","exports","module"]:b,o=0;o
    ",attributes:{"class":"gjs-fonts gjs-f-b1"}},{id:"b2",label:"2 Blocks",content:'
    ",attributes:{"class":"gjs-fonts gjs-f-b2"}},{id:"b3",label:"3 Blocks",content:'
    ",attributes:{"class":"gjs-fonts gjs-f-b3"}},{id:"b4",label:"3/7 Block",content:'
    ",attributes:{"class":"gjs-fonts gjs-f-b37"}},{id:"hero",label:"Hero section",content:'
    Build your templates without coding
    Try it now
    ',attributes:{"class":"gjs-fonts gjs-f-hero"}},{id:"h1p",label:"Text section",content:'

    Insert title here

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua

    ',attributes:{"class":"gjs-fonts gjs-f-h1p"}},{id:"3ba",label:"Badges",content:'
    Adam Smith
    CEO
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ftln
    John Black
    Software Engineer
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ftln
    Jessica White
    Web Designer
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ftln
    ',attributes:{"class":"gjs-fonts gjs-f-3ba"}},{id:"text",label:"Text",attributes:{"class":"gjs-fonts gjs-f-text"},content:{type:"text",content:"Insert your text here",style:{padding:"10px"},activeOnRender:1}},{id:"image",label:"Image",attributes:{"class":"gjs-fonts gjs-f-image"},content:{style:{color:"black"},type:"image",activeOnRender:1}},{id:"quo",label:"Quote",content:'
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ',attributes:{"class":"fa fa-quote-right"}},{id:"link",label:"Link",attributes:{"class":"fa fa-link"},content:{type:"link",content:"Link",style:{color:"#d983a6"}}},{id:"map",label:"Map",attributes:{"class":"fa fa-map-o"},content:{type:"map",style:{height:"350px"}}},{id:"video",label:"Video",attributes:{"class":"fa fa-youtube-play"},content:{type:"video",src:"img/video2.webm",style:{height:"350px",width:"615px"}}}]}}}),function(){function a(a){function b(b,c,d,e,f,g){for(;f>=0&&f0?0:h-1;return arguments.length<3&&(e=c[g?g[i]:i],i+=a),b(c,d,e,g,i,h)}}function b(a){return function(b,c,d){c=v(c,d);for(var e=A(b),f=a>0?0:e-1;f>=0&&f0?g=f>=0?f:Math.max(f+h,g):h=f>=0?Math.min(f+1,h):f+h+1;else if(c&&f&&h)return f=c(d,e),d[f]===e?f:-1;if(e!==e)return f=b(l.call(d,g,h),t.isNaN),f>=0?f+g:-1;for(f=a>0?g:h-1;f>=0&&f=0&&b<=z};t.each=t.forEach=function(a,b,c){b=u(b,c);var d,e;if(B(a))for(d=0,e=a.length;d=0},t.invoke=function(a,b){var c=l.call(arguments,2),d=t.isFunction(b);return t.map(a,function(a){var e=d?b:a[b];return null==e?e:e.apply(a,c)})},t.pluck=function(a,b){return t.map(a,t.property(b))},t.where=function(a,b){return t.filter(a,t.matcher(b))},t.findWhere=function(a,b){return t.find(a,t.matcher(b))},t.max=function(a,b,c){var d,e,f=-(1/0),g=-(1/0);if(null==b&&null!=a){a=B(a)?a:t.values(a);for(var h=0,i=a.length;hf&&(f=d)}else b=v(b,c),t.each(a,function(a,c,d){e=b(a,c,d),(e>g||e===-(1/0)&&f===-(1/0))&&(f=a,g=e)});return f},t.min=function(a,b,c){var d,e,f=1/0,g=1/0;if(null==b&&null!=a){a=B(a)?a:t.values(a);for(var h=0,i=a.length;hd||void 0===c)return 1;if(cb?(g&&(clearTimeout(g),g=null),h=j,f=a.apply(d,e),g||(d=e=null)):g||c.trailing===!1||(g=setTimeout(i,k)),f}},t.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=t.now()-g;j=0?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),d||(f=e=null)))};return function(){f=this,e=arguments,g=t.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},t.wrap=function(a,b){return t.partial(b,a)},t.negate=function(a){return function(){return!a.apply(this,arguments)}},t.compose=function(){var a=arguments,b=a.length-1;return function(){for(var c=b,d=a[b].apply(this,arguments);c--;)d=a[c].call(this,d);return d}},t.after=function(a,b){return function(){if(--a<1)return b.apply(this,arguments)}},t.before=function(a,b){var c;return function(){return--a>0&&(c=b.apply(this,arguments)),a<=1&&(b=null),c}},t.once=t.partial(t.before,2);var F=!{toString:null}.propertyIsEnumerable("toString"),G=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];t.keys=function(a){if(!t.isObject(a))return[];if(p)return p(a);var b=[];for(var c in a)t.has(a,c)&&b.push(c);return F&&e(a,b),b},t.allKeys=function(a){if(!t.isObject(a))return[];var b=[];for(var c in a)b.push(c);return F&&e(a,b),b},t.values=function(a){for(var b=t.keys(a),c=b.length,d=Array(c),e=0;e":">",'"':""","'":"'","`":"`"},J=t.invert(I),K=function(a){var b=function(b){return a[b]},c="(?:"+t.keys(a).join("|")+")",d=RegExp(c),e=RegExp(c,"g");return function(a){return a=null==a?"":""+a,d.test(a)?a.replace(e,b):a}};t.escape=K(I),t.unescape=K(J),t.result=function(a,b,c){var d=null==a?void 0:a[b];return void 0===d&&(d=c),t.isFunction(d)?d.call(a):d};var L=0;t.uniqueId=function(a){var b=++L+"";return a?a+b:b},t.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var M=/(.)^/,N={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},O=/\\|'|\r|\n|\u2028|\u2029/g,P=function(a){return"\\"+N[a]};t.template=function(a,b,c){!b&&c&&(b=c),b=t.defaults({},b,t.templateSettings);var d=RegExp([(b.escape||M).source,(b.interpolate||M).source,(b.evaluate||M).source].join("|")+"|$","g"),e=0,f="__p+='";a.replace(d,function(b,c,d,g,h){return f+=a.slice(e,h).replace(O,P),e=h+b.length,c?f+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'":d?f+="'+\n((__t=("+d+"))==null?'':__t)+\n'":g&&(f+="';\n"+g+"\n__p+='"),b}),f+="';\n",b.variable||(f="with(obj||{}){\n"+f+"}\n"),f="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+f+"return __p;\n";try{var g=new Function(b.variable||"obj","_",f)}catch(h){throw h.source=f,h}var i=function(a){return g.call(this,a,t)},j=b.variable||"obj";return i.source="function("+j+"){\n"+f+"}",i},t.chain=function(a){var b=t(a);return b._chain=!0,b};var Q=function(a,b){return a._chain?t(b).chain():b};t.mixin=function(a){t.each(t.functions(a),function(b){var c=t[b]=a[b];t.prototype[b]=function(){var a=[this._wrapped];return k.apply(a,arguments),Q(this,c.apply(t,a))}})},t.mixin(t),t.each(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=h[a];t.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!==a&&"splice"!==a||0!==c.length||delete c[0],Q(this,c)}}),t.each(["concat","join","slice"],function(a){var b=h[a];t.prototype[a]=function(){return Q(this,b.apply(this._wrapped,arguments))}}),t.prototype.value=function(){return this._wrapped},t.prototype.valueOf=t.prototype.toJSON=t.prototype.value,t.prototype.toString=function(){return""+this._wrapped},"function"==typeof c&&c.amd&&c("underscore",[],function(){return t})}.call(this),c("jquery",[],function(){return jQuery}),function(a){var d="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global;if("function"==typeof c&&c.amd)c("backbone",["underscore","jquery","exports"],function(b,c,e){d.Backbone=a(d,e,b,c)});else if("undefined"!=typeof exports){var e,f=b("underscore");try{e=b("jquery")}catch(g){}a(d,exports,f,e)}else d.Backbone=a(d,{},d._,d.jQuery||d.Zepto||d.ender||d.$)}(function(a,b,c,d){var e=a.Backbone,f=Array.prototype.slice;b.VERSION="1.3.3",b.$=d,b.noConflict=function(){return a.Backbone=e,this},b.emulateHTTP=!1,b.emulateJSON=!1;var g=function(a,b,d){switch(a){case 1:return function(){return c[b](this[d])};case 2:return function(a){return c[b](this[d],a)};case 3:return function(a,e){return c[b](this[d],i(a,this),e)};case 4:return function(a,e,f){return c[b](this[d],i(a,this),e,f)};default:return function(){var a=f.call(arguments);return a.unshift(this[d]),c[b].apply(c,a)}}},h=function(a,b,d){c.each(b,function(b,e){c[e]&&(a.prototype[e]=g(b,e,d))})},i=function(a,b){return c.isFunction(a)?a:c.isObject(a)&&!b._isModel(a)?j(a):c.isString(a)?function(b){return b.get(a)}:a},j=function(a){var b=c.matches(a);return function(a){return b(a.attributes)}},k=b.Events={},l=/\s+/,m=function(a,b,d,e,f){var g,h=0;if(d&&"object"==typeof d){void 0!==e&&"context"in f&&void 0===f.context&&(f.context=e);for(g=c.keys(d);hthis.length&&(e=this.length),e<0&&(e+=this.length+1);var f,g,h=[],i=[],j=[],k=[],l={},m=b.add,n=b.merge,o=b.remove,p=!1,q=this.comparator&&null==e&&b.sort!==!1,r=c.isString(this.comparator)?this.comparator:null;for(g=0;g7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(L,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var b=this.root.slice(0,-1)||"/";return this.location.replace(b+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var d=document.body,e=d.insertBefore(this.iframe,d.firstChild).contentWindow;e.document.open(),e.document.close(),e.location.hash="#"+this.fragment}var f=window.addEventListener||function(a,b){return attachEvent("on"+a,b)};if(this._usePushState?f("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?f("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var a=window.removeEventListener||function(a,b){return detachEvent("on"+a,b)};this._usePushState?a("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&a("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),J.started=!1},route:function(a,b){this.handlers.unshift({route:a,callback:b})},checkUrl:function(a){var b=this.getFragment();return b===this.fragment&&this.iframe&&(b=this.getHash(this.iframe.contentWindow)),b!==this.fragment&&(this.iframe&&this.navigate(b),void this.loadUrl())},loadUrl:function(a){return!!this.matchRoot()&&(a=this.fragment=this.getFragment(a),c.some(this.handlers,function(b){if(b.route.test(a))return b.callback(a),!0}))},navigate:function(a,b){if(!J.started)return!1;b&&b!==!0||(b={trigger:!!b}),a=this.getFragment(a||"");var c=this.root;""!==a&&"?"!==a.charAt(0)||(c=c.slice(0,-1)||"/");var d=c+a;if(a=this.decodeFragment(a.replace(M,"")),this.fragment!==a){if(this.fragment=a,this._usePushState)this.history[b.replace?"replaceState":"pushState"]({},document.title,d);else{if(!this._wantsHashChange)return this.location.assign(d);if(this._updateHash(this.location,a,b.replace),this.iframe&&a!==this.getHash(this.iframe.contentWindow)){var e=this.iframe.contentWindow;b.replace||(e.document.open(),e.document.close()),this._updateHash(e.location,a,b.replace)}}return b.trigger?this.loadUrl(a):void 0}},_updateHash:function(a,b,c){if(c){var d=a.href.replace(/(javascript:|#).*$/,"");a.replace(d+"#"+b)}else a.hash="#"+b}}),b.history=new J;var N=function(a,b){var d,e=this;return d=a&&c.has(a,"constructor")?a.constructor:function(){return e.apply(this,arguments)},c.extend(d,e,b),d.prototype=c.create(e.prototype,a),d.prototype.constructor=d,d.__super__=e.prototype,d};t.extend=v.extend=E.extend=A.extend=J.extend=N;var O=function(){throw new Error('A "url" property or function must be specified')},P=function(a,b){var c=b.error;b.error=function(d){c&&c.call(b.context,a,d,b),a.trigger("error",a,d,b)}};return b}),function(a){"function"==typeof c&&c.amd?c("backboneUndo",["underscore","backbone"],a):"undefined"!=typeof exports?module.exports=a(b("underscore"),b("backbone")):a(_,Backbone)}(function(a,b){function c(a,b,c){return c.length<=4?a.call(b,c[0],c[1],c[2],c[3]):a.apply(b,c)}function d(a,b){return n.call(a,b)}function e(b,c){return null!=b&&(a.isArray(c)||(c=d(arguments,1)),a.all(c,function(a){return a in b}))}function f(){this.registeredObjects=[],this.cidIndexes=[]}function g(b,c,d,e){for(var f,g=0,h=c.length;ga.maximumStackLength&&(a.shift(),a.pointer--)}}}function l(){}function m(b,c,d,f){if("object"==typeof c)return a.each(c,function(a,c){2===b?m(b,a,d,f):m(b,c,a,d)});switch(b){case 0:e(d,"undo","redo","on")&&a.all(a.pick(d,"undo","redo","on"),a.isFunction)&&(f[c]=d);break;case 1:f[c]&&a.isObject(d)&&(f[c]=a.extend({},f[c],d));break;case 2:delete f[c]}return this}var n=Array.prototype.slice,o=function(){function b(){d++,c=!0,a.defer(function(){c=!1})}var c=!1,d=-1;return function(){return c||b(),d}}();f.prototype={isRegistered:function(b){return b&&b.cid?this.registeredObjects[b.cid]:a.contains(this.registeredObjects,b)},register:function(a){return!this.isRegistered(a)&&(a&&a.cid?(this.registeredObjects[a.cid]=a,this.cidIndexes.push(a.cid)):this.registeredObjects.push(a),!0)},unregister:function(b){if(this.isRegistered(b)){if(b&&b.cid)delete this.registeredObjects[b.cid],this.cidIndexes.splice(a.indexOf(this.cidIndexes,b.cid),1);else{var c=a.indexOf(this.registeredObjects,b);this.registeredObjects.splice(c,1)}return!0}return!1},get:function(){return a.map(this.cidIndexes,function(a){return this.registeredObjects[a]},this).concat(this.registeredObjects)}};var p={add:{undo:function(a,b,c,d){a.remove(c,d)},redo:function(a,b,c,d){d.index&&(d.at=d.index),a.add(c,d)},on:function(b,c,d){return{object:c,before:void 0,after:b,options:a.clone(d)}}},remove:{undo:function(a,b,c,d){"index"in d&&(d.at=d.index),a.add(b,d)},redo:function(a,b,c,d){a.remove(b,d)},on:function(b,c,d){return{object:c,before:b,after:void 0,options:a.clone(d)}}},change:{undo:function(b,c,d,e){a.isEmpty(c)?a.each(a.keys(d),b.unset,b):(b.set(c),e&&e.unsetData&&e.unsetData.before&&e.unsetData.before.length&&a.each(e.unsetData.before,b.unset,b))},redo:function(b,c,d,e){a.isEmpty(d)?a.each(a.keys(c),b.unset,b):(b.set(d),e&&e.unsetData&&e.unsetData.after&&e.unsetData.after.length&&a.each(e.unsetData.after,b.unset,b))},on:function(b,c){var d=b.changedAttributes(),e=a.keys(d),f=a.pick(b.previousAttributes(),e),g=a.keys(f),h=(c||(c={})).unsetData={after:[],before:[]};return e.length!=g.length&&(e.length>g.length?a.each(e,function(a){a in f||h.before.push(a)},this):a.each(g,function(a){a in d||h.after.push(a)})),{object:b,before:f,after:d,options:a.clone(c)}}},reset:{undo:function(a,b,c){a.reset(b)},redo:function(a,b,c){a.reset(c)},on:function(b,c){return{object:b,before:c.previousModels,after:a.clone(b.models)}}}};l.prototype=p;var q=b.Model.extend({defaults:{type:null,object:null,before:null,after:null,magicFusionIndex:null},undo:function(a){h("undo",this.attributes)},redo:function(a){h("redo",this.attributes)}}),r=b.Collection.extend({model:q,pointer:-1,track:!1,isCurrentlyUndoRedoing:!1,maximumStackLength:1/0,setMaxLength:function(a){this.maximumStackLength=a}}),s=b.Model.extend({defaults:{maximumStackLength:1/0,track:!1},initialize:function(b){this.stack=new r,this.objectRegistry=new f,this.undoTypes=new l,this.stack.setMaxLength(this.get("maximumStackLength")),this.on("change:maximumStackLength",function(a,b){this.stack.setMaxLength(b)},this),b&&b.track&&this.startTracking(),b&&b.register&&(a.isArray(b.register)||a.isArguments(b.register)?c(this.register,this,b.register):this.register(b.register))},startTracking:function(){this.set("track",!0),this.stack.track=!0},stopTracking:function(){this.set("track",!1),this.stack.track=!1},isTracking:function(){return this.get("track")},_addToStack:function(a){k(this.stack,a,d(arguments,1),this.undoTypes)},register:function(){g("on",arguments,this._addToStack,this)},unregister:function(){g("off",arguments,this._addToStack,this)},unregisterAll:function(){c(this.unregister,this,this.objectRegistry.get())},undo:function(a){i("undo",this,this.stack,a)},undoAll:function(){i("undo",this,this.stack,!1,!0)},redo:function(a){i("redo",this,this.stack,a)},redoAll:function(){i("redo",this,this.stack,!1,!0)},isAvailable:function(a){var b=this.stack,c=b.length;switch(a){case"undo":return c>0&&b.pointer>-1;case"redo":return c>0&&b.pointer0;for(f in v)(!v[f]&&b(e.mods,+f)>-1||v[f]&&b(e.mods,+f)==-1)&&(i=!1);(0!=e.mods.length||v[16]||v[18]||v[17]||v[91])&&!i||e.method(a,e)===!1&&(a.preventDefault?a.preventDefault():a.returnValue=!1,a.stopPropagation&&a.stopPropagation(),a.cancelBubble&&(a.cancelBubble=!0))}}function f(a){var c,d=a.keyCode,e=b(A,d);if(e>=0&&A.splice(e,1),93!=d&&224!=d||(d=91),d in v){v[d]=!1;for(c in x)x[c]==d&&(h[c]=!1)}}function g(){for(t in v)v[t]=!1;for(t in x)h[t]=!1}function h(a,b,c){var d,e;d=p(a),void 0===c&&(c=b,b="all");for(var f=0;f1&&(e=q(a),a=[a[a.length-1]]),a=a[0],a=z(a),a in u||(u[a]=[]),u[a].push({shortcut:d[f],scope:b,method:c,key:d[f],mods:e})}function i(a,b){var d,e,f,g,h,i=[];for(d=p(a),g=0;g1&&(i=q(e),a=e[e.length-1]),a=z(a),void 0===b&&(b=n()),!u[a])return;for(f=0;fg||g>h+j-e||i+e>f||f>i+k-e)&&(d=1),!!d},findPosition:function(a,b,c){for(var d={index:0,method:"before"},e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=a.length;mf||h&&j>=h||e&&gg?d.h=Math.round(d.w/g):d.w=Math.round(d.h*g)}return~e.indexOf("l")&&(d.l=c.w-d.w),~e.indexOf("t")&&(d.t=c.h-d.h),d}}}}),c("Utils/main",["require","./Sorter","./Resizer"],function(a){var b=function(){var b=a("./Sorter"),c=a("./Resizer");return{name:"Utils",init:function(){return this},Sorter:b,Resizer:c}};return b}),c("Utils",["Utils/main"],function(a){return a}),c("StorageManager/config/config",[],function(){return{id:"gjs-",autosave:1,autoload:1,type:"local",stepsBeforeSave:1,storeComponents:!1,storeStyles:!1,storeHtml:!0,storeCss:!0,checkLocal:!0,params:{},urlStore:"",urlLoad:"",beforeSend:function(a,b){},onComplete:function(a,b){}}}),c("StorageManager/model/LocalStorage",["backbone"],function(a){return a.Model.extend({defaults:{checkLocal:!0},store:function(a){this.checkStorageEnvironment();for(var b in a)localStorage.setItem(b,a[b])},load:function(a){this.checkStorageEnvironment();for(var b={},c=0,d=a.length;c/im,j=/]*>\s*([\s\S]+)\s*<\/body>/im,k="undefined"!=typeof location&&location.href,l=k&&location.protocol&&location.protocol.replace(/\:/,""),m=k&&location.hostname,n=k&&(location.port||void 0),o={},p=a.config&&a.config()||{};return c={version:"2.0.12",strip:function(a){if(a){a=a.replace(i,"");var b=a.match(j);b&&(a=b[1])}else a="";return a},jsEscape:function(a){return a.replace(/(['\\])/g,"\\$1").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r").replace(/[\u2028]/g,"\\u2028").replace(/[\u2029]/g,"\\u2029")},createXhr:p.createXhr||function(){var a,b,c;if("undefined"!=typeof XMLHttpRequest)return new XMLHttpRequest;if("undefined"!=typeof ActiveXObject)for(b=0;b<3;b+=1){c=h[b];try{a=new ActiveXObject(c)}catch(d){}if(a){h=[c];break}}return a},parseName:function(a){var b,c,d,e=!1,f=a.indexOf("."),g=0===a.indexOf("./")||0===a.indexOf("../");return f!==-1&&(!g||f>1)?(b=a.substring(0,f),c=a.substring(f+1,a.length)):b=a,d=c||b,f=d.indexOf("!"),f!==-1&&(e="strip"===d.substring(f+1),d=d.substring(0,f),c?c=d:b=d),{moduleName:b,ext:c,strip:e}},xdRegExp:/^((\w+)\:)?\/\/([^\/\\]+)/,useXhr:function(a,b,d,e){var f,g,h,i=c.xdRegExp.exec(a);return!i||(f=i[2],g=i[3],g=g.split(":"),h=g[1],g=g[0],!(f&&f!==b||g&&g.toLowerCase()!==d.toLowerCase()||(h||g)&&h!==e))},finishLoad:function(a,b,d,e){d=b?c.strip(d):d,p.isBuild&&(o[a]=d),e(d)},load:function(a,b,d,e){if(e&&e.isBuild&&!e.inlineText)return void d();p.isBuild=e&&e.isBuild;var f=c.parseName(a),g=f.moduleName+(f.ext?"."+f.ext:""),h=b.toUrl(g),i=p.useXhr||c.useXhr;return 0===h.indexOf("empty:")?void d():void(!k||i(h,l,m,n)?c.get(h,function(b){c.finishLoad(a,f.strip,b,d)},function(a){d.error&&d.error(a)}):b([g],function(a){c.finishLoad(f.moduleName+"."+f.ext,f.strip,a,d)}))},write:function(a,b,d,e){if(o.hasOwnProperty(b)){var f=c.jsEscape(o[b]);d.asModule(a+"!"+b,"define(function () { return '"+f+"';});\n")}},writeFile:function(a,b,d,e,f){var g=c.parseName(b),h=g.ext?"."+g.ext:"",i=g.moduleName+h,j=d.toUrl(g.moduleName+h)+".js";c.load(i,d,function(b){var d=function(a){return e(j,a)};d.asModule=function(a,b){return e.asModule(a,j,b)},c.write(a,i,d,f)},f)}},"node"===p.env||!p.env&&"undefined"!=typeof process&&process.versions&&process.versions.node&&!process.versions["node-webkit"]?(d=b.nodeRequire("fs"),c.get=function(a,b,c){try{var e=d.readFileSync(a,"utf8");0===e.indexOf("\ufeff")&&(e=e.substring(1)),b(e)}catch(f){c&&c(f)}}):"xhr"===p.env||!p.env&&c.createXhr()?c.get=function(a,b,d,e){var f,g=c.createXhr();if(g.open("GET",a,!0),e)for(f in e)e.hasOwnProperty(f)&&g.setRequestHeader(f.toLowerCase(),e[f]);p.onXhr&&p.onXhr(g,a),g.onreadystatechange=function(c){var e,f;4===g.readyState&&(e=g.status||0,e>399&&e<600?(f=new Error(a+" HTTP status: "+e),f.xhr=g,d&&d(f)):b(g.responseText),p.onXhrComplete&&p.onXhrComplete(g,a))},g.send(null)}:"rhino"===p.env||!p.env&&"undefined"!=typeof Packages&&"undefined"!=typeof java?c.get=function(a,b){var c,d,e="utf-8",f=new java.io.File(a),g=java.lang.System.getProperty("line.separator"),h=new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(f),e)),i="";try{for(c=new java.lang.StringBuffer,d=h.readLine(),d&&d.length()&&65279===d.charAt(0)&&(d=d.substring(1)),null!==d&&c.append(d);null!==(d=h.readLine());)c.append(g),c.append(d);i=String(c.toString())}finally{h.close()}b(i)}:("xpconnect"===p.env||!p.env&&"undefined"!=typeof Components&&Components.classes&&Components.interfaces)&&(e=Components.classes,f=Components.interfaces,Components.utils["import"]("resource://gre/modules/FileUtils.jsm"),g="@mozilla.org/windows-registry-key;1"in e,c.get=function(a,b){var c,d,h,i={};g&&(a=a.replace(/\//g,"\\")),h=new FileUtils.File(a);try{c=e["@mozilla.org/network/file-input-stream;1"].createInstance(f.nsIFileInputStream),c.init(h,1,0,!1),d=e["@mozilla.org/intl/converter-input-stream;1"].createInstance(f.nsIConverterInputStream),d.init(c,"utf-8",c.available(),f.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER),d.readString(c.available(),i),d.close(),c.close(),b(i.value)}catch(j){throw new Error((h&&h.path||"")+": "+j)}}),c}),c("text!DeviceManager/template/devices.html",[],function(){return'
    <%= deviceLabel %>
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n'}),c("DeviceManager/view/DevicesView",["backbone","text!./../template/devices.html"],function(a,b){return a.View.extend({template:_.template(b),events:{change:"updateDevice"},initialize:function(a){this.config=a.config||{},this.em=this.config.em,this.ppfx=this.config.pStylePrefix||"",this.events["click ."+this.ppfx+"add-trasp"]=this.startAdd,this.listenTo(this.em,"change:device",this.updateSelect),this.delegateEvents()},startAdd:function(){},updateDevice:function(){var a=this.em;if(a){var b=this.devicesEl,c=b?b.val():"";a.set("device",c)}},updateSelect:function(){var a=this.em,b=this.devicesEl;if(a&&a.getDeviceModel&&b){var c=a.getDeviceModel(),d=c?c.get("name"):"";b.val(d)}},getOptions:function(){var a="";return this.collection.each(function(b){var c=b.get("name");a+='"}),a},render:function(){var a=this.ppfx;return this.$el.html(this.template({ppfx:a,deviceLabel:this.config.deviceLabel})),this.devicesEl=this.$el.find("."+a+"devices"),this.devicesEl.append(this.getOptions()),this.el.className=a+"devices-c",this}})}),c("DeviceManager/main",["require","./config/config","./model/Devices","./view/DevicesView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Devices"),g=a("./view/DevicesView");return{name:"DeviceManager",init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);return b=new f(d.devices),c=new g({collection:b,config:d}),this},add:function(a,c,d){var e=d||{};return e.name=a,e.width=c,b.add(e)},get:function(a){return b.get(a)},getAll:function(){return b},render:function(){return c.render().el}}}}),c("DeviceManager",["DeviceManager/main"],function(a){return a}),c("Parser/config/config",[],function(){return{textTags:["br","b","i","u"]}}),c("Parser/model/ParserCss",["require"],function(a){return function(a){return{parseSelector:function(a){for(var b=[],c=a.split(","),d=0,e=c.length;d\n
    <%= label %>
    \n
    \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n \n \n
    \n
    \n
    Selected
    \n
    \n
    \n
    \n'}),c("text!SelectorManager/template/classTag.html",[],function(){return'\n \n />\n \n'}),c("SelectorManager/view/ClassTagView",["backbone","text!./../template/classTag.html"],function(a,b){return a.View.extend({template:_.template(b),events:{},initialize:function(a){this.config=a.config||{},this.coll=a.coll||null,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.inputProp="readonly",this.target=this.config.em,this.className=this.pfx+"tag",this.closeId=this.pfx+"close",this.chkId=this.pfx+"checkbox",this.labelId=this.pfx+"tag-label",this.events["click #"+this.closeId]="removeTag",this.events["click #"+this.chkId]="changeStatus",this.events["dblclick #"+this.labelId]="startEditTag",this.events["keypress #"+this.labelId+" input"]="updateInputLabel",this.events["blur #"+this.labelId+" input"]="endEditTag",this.listenTo(this.model,"change:active",this.updateStatus),this.delegateEvents()},startEditTag:function(){this.$labelInput.prop(this.inputProp,!1)},endEditTag:function(){var a=this.$labelInput.val(),b=this.model.escapeName(a);if(this.target){var c=this.target.get("SelectorManager");c&&(c.get(b)?this.$labelInput.val(this.model.get("label")):this.model.set({name:b,label:a}))}this.$labelInput.prop(this.inputProp,!0)},changeStatus:function(){this.model.set("active",!this.model.get("active")),this.target.trigger("targetClassUpdated")},removeTag:function(a){var b=this.target.get("selectedComponent");b&&b.get("classes").remove(this.model),this.coll&&(this.coll.remove(this.model),this.target.trigger("targetClassRemoved")),this.remove()},updateStatus:function(){this.$chk||(this.$chk=this.$el.find("#"+this.pfx+"checkbox")),this.model.get("active")?(this.$chk.removeClass("fa-circle-o").addClass("fa-dot-circle-o"),this.$el.removeClass("opac50")):(this.$chk.removeClass("fa-dot-circle-o").addClass("fa-circle-o"),this.$el.addClass("opac50"))},updateInputLabel:function(){this.$labelInput||(this.$labelInput=this.$el.find("input"));var a=this.$labelInput.val().length-1;a=a<1?1:a,this.$labelInput.attr("size",a)},render:function(){return this.$el.html(this.template({label:this.model.get("label"),pfx:this.pfx,ppfx:this.ppfx,inputProp:this.inputProp})),this.updateStatus(),this.$el.attr("class",this.className),this.updateInputLabel(),this}})}),c("SelectorManager/view/ClassTagsView",["backbone","text!./../template/classTags.html","./ClassTagView"],function(a,b,c){return a.View.extend({template:_.template(b),events:{},initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.className=this.pfx+"tags",this.addBtnId=this.pfx+"add-tag",this.newInputId=this.pfx+"new",this.stateInputId=this.pfx+"states",this.stateInputC=this.pfx+"input-c",this.states=this.config.states||[],this.events["click #"+this.addBtnId]="startNewTag",this.events["blur #"+this.newInputId]="endNewTag",this.events["keyup #"+this.newInputId]="onInputKeyUp",this.events["change #"+this.stateInputId]="stateChanged",this.target=this.config.em,this.listenTo(this.target,"change:selectedComponent",this.componentChanged),this.listenTo(this.target,"targetClassUpdated",this.updateSelector),this.listenTo(this.collection,"add",this.addNew),this.listenTo(this.collection,"reset",this.renderClasses),this.listenTo(this.collection,"remove",this.tagRemoved),this.delegateEvents()},tagRemoved:function(a){this.updateStateVis()},getStateOptions:function(){for(var a="",b=0;b'+this.states[b].label+"";return a},addNew:function(a){this.addToClasses(a)},startNewTag:function(a){this.$addBtn.hide(),this.$input.show().focus()},endNewTag:function(a){this.$addBtn.show(),this.$input.hide().val("")},onInputKeyUp:function(a){13===a.keyCode?this.addNewTag(this.$input.val()):27===a.keyCode&&this.endNewTag()},componentChanged:function(a){this.compTarget=this.target.get("selectedComponent"),this.compTarget&&this.getStates().val(this.compTarget.get("state"));var b=this.compTarget?this.compTarget.get("classes").models:[];this.collection.reset(b),this.updateStateVis()},updateStateVis:function(){this.collection.length?this.getStatesC().css("display","block"):this.getStatesC().css("display","none"),this.updateSelector()},updateSelector:function(){if(this.compTarget=this.target.get("selectedComponent"),this.compTarget&&this.compTarget.get){var a="",b=this.compTarget.get("classes");b.each(function(b){b.get("active")&&(a+="."+b.get("name"))});var c=this.compTarget.get("state");a=c?a+":"+c:a;var d=this.el.querySelector("#"+this.pfx+"sel");d&&(d.innerHTML=a)}},stateChanged:function(a){this.compTarget&&(this.compTarget.set("state",this.$states.val()),this.target&&this.target.trigger("targetStateUpdated"),this.updateSelector())},addNewTag:function(a){if(a){if(this.target){var b=this.target.get("SelectorManager"),c=b.add(a);if(this.compTarget){var d=this.compTarget.get("classes"),e=d.length;d.add(c);var f=d.length;this.collection.add(c),f>e&&this.target.trigger("targetClassAdded"),this.updateStateVis()}}this.endNewTag()}},addToClasses:function(a,b){var d=b||null,e=new c({model:a,config:this.config,coll:this.collection}),f=e.render().el;return d?d.appendChild(f):this.getClasses().append(f),f},renderClasses:function(){var a=document.createDocumentFragment();return this.collection.each(function(b){this.addToClasses(b,a)},this),this.getClasses()&&this.getClasses().empty().append(a),this},getClasses:function(){return this.$classes||(this.$classes=this.$el.find("#"+this.pfx+"tags-c")),this.$classes},getStates:function(){return this.$states||(this.$states=this.$el.find("#"+this.stateInputId)),this.$states},getStatesC:function(){return this.$statesC||(this.$statesC=this.$el.find("#"+this.stateInputC)),this.$statesC},render:function(){return this.$el.html(this.template({label:this.config.label,statesLabel:this.config.statesLabel,pfx:this.pfx,ppfx:this.ppfx})),this.$input=this.$el.find("input#"+this.newInputId),this.$addBtn=this.$el.find("#"+this.addBtnId),this.$classes=this.$el.find("#"+this.pfx+"tags-c"),this.$states=this.$el.find("#"+this.stateInputId),this.$statesC=this.$el.find("#"+this.stateInputC),this.$states.append(this.getStateOptions()),this.renderClasses(),this.$el.attr("class",this.className),this}})}),c("SelectorManager/main",["require","./config/config","./model/Selectors","./view/ClassTagsView"],function(a){return function(b){var c=b||{},d=a("./config/config");Selectors=a("./model/Selectors"),ClassTagsView=a("./view/ClassTagsView");var e,f;return{name:"SelectorManager",init:function(a){c=a||{};for(var b in d)b in c||(c[b]=d[b]);var g=c.pStylePrefix;return g&&(c.stylePrefix=g+c.stylePrefix),e=new Selectors(c.selectors),f=new ClassTagsView({collection:e,config:c}),this},add:function(a,b){var c=b||{};return c.name=a.name||a,e.add(c)},get:function(a){return e.where({name:a})[0]},getAll:function(){return e},render:function(a){if(a){var b=new ClassTagsView({collection:new Selectors(a),config:c});return b.render().el}return f.render().el}}}}),c("SelectorManager",["SelectorManager/main"],function(a){return a}),c("ModalDialog/config/config",[],function(){return{stylePrefix:"mdl-",title:"",content:"",backdrop:!0}}),c("ModalDialog/model/Modal",["backbone"],function(a){return a.Model.extend({defaults:{title:"",content:"",open:!1}})}),c("text!ModalDialog/template/modal.html",[],function(){return'
    \n
    \n
    <%= title %>
    \n
    \n
    \n
    \n
    <%= content %>
    \n
    \n
    \n
    \n
    \n\n'}),c("ModalDialog/view/ModalView",["backbone","text!./../template/modal.html"],function(a,b){return a.View.extend({template:_.template(b),events:{},initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.listenTo(this.model,"change:open",this.updateOpen),this.listenTo(this.model,"change:title",this.updateTitle),this.listenTo(this.model,"change:content",this.updateContent), +this.events["click ."+this.pfx+"btn-close"]="hide",this.config.backdrop&&(this.events["click ."+this.pfx+"backlayer"]="hide"),this.delegateEvents()},getCollector:function(){return this.$collector||(this.$collector=this.$el.find("."+this.pfx+"collector")),this.$collector},getContent:function(){return this.$content||(this.$content=this.$el.find("."+this.pfx+"content #"+this.pfx+"c")),this.$content},getTitle:function(){return this.$title||(this.$title=this.$el.find("."+this.pfx+"title")),this.$title.get(0)},updateContent:function(){var a=this.getContent();this.getCollector().append(a.children()),a.html(this.model.get("content"))},updateTitle:function(){var a=this.getTitle();a&&(a.innerHTML=this.model.get("title"))},updateOpen:function(){this.model.get("open")?this.$el.show():this.$el.hide()},hide:function(){this.model.set("open",0)},show:function(){this.model.set("open",1)},render:function(){var a=this.model.toJSON();return a.pfx=this.pfx,this.$el.html(this.template(a)),this.$el.attr("class",this.pfx+"container"),this.updateOpen(),this}})}),c("ModalDialog/main",["require","./config/config","./model/Modal","./view/ModalView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Modal"),g=a("./view/ModalView");return{name:"Modal",init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);var i=d.pStylePrefix;return i&&(d.stylePrefix=i+d.stylePrefix),b=new f(d),c=new g({model:b,config:d}),d.em&&d.em.on("loaded",function(){this.render().appendTo(d.em.config.el||"body")},this),this},open:function(){return c.show(),this},close:function(){return c.hide(),this},isOpen:function(){return!!b.get("open")},setTitle:function(a){return b.set("title",a),this},getTitle:function(){return b.get("title")},setContent:function(a){return b.set("content"," "),b.set("content",a),this},getContent:function(){return b.get("content")},getContentEl:function(){return c.getContent().get(0)},getModel:function(){return b},render:function(){return c.render().$el}}}}),c("ModalDialog",["ModalDialog/main"],function(a){return a}),c("CodeManager/config/config",[],function(){return{stylePrefix:"cm-",inlineCss:!1}}),c("CodeManager/model/HtmlGenerator",["backbone"],function(a){return a.Model.extend({build:function(a,b){var c=a.get("components")||a,d="";return c.each(function(a){d+=a.toHTML({cssc:b})},this),d}})}),c("CodeManager/model/CssGenerator",["backbone"],function(a){return a.Model.extend({initialize:function(){this.compCls=[]},buildFromModel:function(a){var b="",c=a.get("style"),d=a.get("classes");if(d&&d.each(function(a){this.compCls.push(a.get("name"))},this),c&&0!==Object.keys(c).length){b+="#"+a.cid+"{";for(var e in c)c.hasOwnProperty(e)&&(b+=e+":"+c[e]+";");b+="}"}return b},buildFromComp:function(a){var b=a.get("components")||a,c="";return b.each(function(a){var b=a.get("components");c+=this.buildFromModel(a),b.length&&(c+=this.buildFromComp(b))},this),c},build:function(a,b){this.compCls=[];var c=this.buildFromModel(a);c+=this.buildFromComp(a);this.compCls;if(b){var d=b.getAll(),e={};d.each(function(a){var b=a.get("maxWidth");if(b){var d=e[b];return void(d?d.push(a):e[b]=[a])}c+=this.buildFromRule(a)},this);for(var f in e){for(var g=e[f],h="",i=0,j=g.length;i-1&&(g=1)}),f&&g){f+=e?":"+e:"";var i="";if(d&&0!==Object.keys(d).length)for(var j in d)d.hasOwnProperty(j)&&(i+=j+":"+d[j]+";");i&&(b+=f+"{"+i+"}")}return b}})}),c("CodeManager/model/JsonGenerator",["backbone"],function(a){return a.Model.extend({build:function(b){var c=b.toJSON();return this.beforeEach(c),_.each(c,function(b,d){var e=c[d];if(e instanceof a.Model)c[d]=this.build(e);else if(e instanceof a.Collection){var f=e;c[d]=[],f.length&&f.each(function(a,b){c[d][b]=this.build(a)},this)}},this),c},beforeEach:function(a){delete a.status}})}),function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof c&&c.amd?c("codemirror/lib/codemirror",b):a.CodeMirror=b()}(this,function(){"use strict";function a(a){return new RegExp("(^|\\s)"+a+"(?:$|\\s)\\s*")}function b(a){for(var b=a.childNodes.length;b>0;--b)a.removeChild(a.firstChild);return a}function c(a,c){return b(a).appendChild(c)}function d(a,b,c,d){var e=document.createElement(a);if(c&&(e.className=c),d&&(e.style.cssText=d),"string"==typeof b)e.appendChild(document.createTextNode(b));else if(b)for(var f=0;f=b)return g+(b-f);g+=h-f,g+=c-g%c,f=h+1}}function l(){this.id=null}function m(a,b){for(var c=0;c=b)return d+Math.min(g,b-e);if(e+=f-d,e+=c-e%c,d=f+1,e>=b)return d}}function o(a){for(;Hg.length<=a;)Hg.push(p(Hg)+" ");return Hg[a]}function p(a){return a[a.length-1]}function q(a,b){for(var c=[],d=0;d"€"&&(a.toUpperCase()!=a.toLowerCase()||Ig.test(a))}function v(a,b){return b?!!(b.source.indexOf("\\w")>-1&&u(a))||b.test(a):u(a)}function w(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function x(a){return a.charCodeAt(0)>=768&&Jg.test(a)}function y(a,b,c){var e=this;this.input=c,e.scrollbarFiller=d("div",null,"CodeMirror-scrollbar-filler"),e.scrollbarFiller.setAttribute("cm-not-content","true"),e.gutterFiller=d("div",null,"CodeMirror-gutter-filler"),e.gutterFiller.setAttribute("cm-not-content","true"),e.lineDiv=d("div",null,"CodeMirror-code"),e.selectionDiv=d("div",null,null,"position: relative; z-index: 1"),e.cursorDiv=d("div",null,"CodeMirror-cursors"),e.measure=d("div",null,"CodeMirror-measure"),e.lineMeasure=d("div",null,"CodeMirror-measure"),e.lineSpace=d("div",[e.measure,e.lineMeasure,e.selectionDiv,e.cursorDiv,e.lineDiv],null,"position: relative; outline: none"),e.mover=d("div",[d("div",[e.lineSpace],"CodeMirror-lines")],null,"position: relative"),e.sizer=d("div",[e.mover],"CodeMirror-sizer"),e.sizerWidth=null,e.heightForcer=d("div",null,null,"position: absolute; height: "+Cg+"px; width: 1px;"),e.gutters=d("div",null,"CodeMirror-gutters"),e.lineGutter=null,e.scroller=d("div",[e.sizer,e.heightForcer,e.gutters],"CodeMirror-scroll"),e.scroller.setAttribute("tabIndex","-1"),e.wrapper=d("div",[e.scrollbarFiller,e.gutterFiller,e.scroller],"CodeMirror"),gg&&hg<8&&(e.gutters.style.zIndex=-1,e.scroller.style.paddingRight=0),ig||dg&&qg||(e.scroller.draggable=!0),a&&(a.appendChild?a.appendChild(e.wrapper):a(e.wrapper)),e.viewFrom=e.viewTo=b.first,e.reportedViewFrom=e.reportedViewTo=b.first,e.view=[],e.renderedView=null,e.externalMeasured=null,e.viewOffset=0,e.lastWrapHeight=e.lastWrapWidth=0,e.updateLineNumbers=null,e.nativeBarWidth=e.barHeight=e.barWidth=0,e.scrollbarsClipped=!1,e.lineNumWidth=e.lineNumInnerWidth=e.lineNumChars=null,e.alignWidgets=!1,e.cachedCharWidth=e.cachedTextHeight=e.cachedPaddingH=null,e.maxLine=null,e.maxLineLength=0,e.maxLineChanged=!1,e.wheelDX=e.wheelDY=e.wheelStartX=e.wheelStartY=null,e.shift=!1,e.selForContextMenu=null,e.activeTouch=null,c.init(e)}function z(a,b){if(b-=a.first,b<0||b>=a.size)throw new Error("There is no line "+(b+a.first)+" in the document.");for(var c=a;!c.lines;)for(var d=0;;++d){var e=c.children[d],f=e.chunkSize();if(b=a.first&&bc?H(c,z(a,c).text.length):O(b,z(a,b.line).text.length)}function O(a,b){var c=a.ch;return null==c||c>b?H(a.line,b):c<0?H(a.line,0):a}function P(a,b){for(var c=[],d=0;d=b:f.to>b);(d||(d=[])).push(new S(g,f.from,i?null:f.to))}}return d}function X(a,b,c){var d;if(a)for(var e=0;e=b:f.to>b);if(h||f.from==b&&"bookmark"==g.type&&(!c||f.marker.insertLeft)){var i=null==f.from||(g.inclusiveLeft?f.from<=b:f.from0&&h)for(var v=0;v0)){var k=[i,1],l=I(j.from,h.from),n=I(j.to,h.to);(l<0||!g.inclusiveLeft&&!l)&&k.push({from:j.from,to:h.from}),(n>0||!g.inclusiveRight&&!n)&&k.push({from:h.to,to:j.to}),e.splice.apply(e,k),i+=k.length-1}}return e}function _(a){var b=a.markedSpans;if(b){for(var c=0;c=0&&l<=0||k<=0&&l>=0)&&(k<=0&&(i.marker.inclusiveRight&&e.inclusiveLeft?I(j.to,c)>=0:I(j.to,c)>0)||k>=0&&(i.marker.inclusiveRight&&e.inclusiveLeft?I(j.from,d)<=0:I(j.from,d)<0)))return!0}}}function ia(a){for(var b;b=fa(a);)a=b.find(-1,!0).line;return a}function ja(a){for(var b,c;b=ga(a);)a=b.find(1,!0).line,(c||(c=[])).push(a);return c}function ka(a,b){var c=z(a,b),d=ia(c);return c==d?b:D(d)}function la(a,b){if(b>a.lastLine())return b;var c,d=z(a,b);if(!ma(a,d))return b;for(;c=ga(d);)d=c.find(1,!0).line;return D(d)+1}function ma(a,b){var c=Lg&&b.markedSpans;if(c)for(var d=void 0,e=0;eb.maxLineLength&&(b.maxLineLength=c,b.maxLine=a)})}function ra(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;fb||b==c&&g.to==b)&&(d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?"rtl":"ltr"),e=!0)}e||d(b,c,"ltr")}function sa(a){return a.level%2?a.to:a.from}function ta(a){return a.level%2?a.from:a.to}function ua(a){var b=Ba(a);return b?sa(b[0]):0}function va(a){var b=Ba(a);return b?ta(p(b)):a.text.length}function wa(a,b,c){var d=a[0].level;return b==d||c!=d&&bb)return d;if(e.from==b||e.to==b){if(null!=c)return wa(a,e.level,a[c].level)?(e.from!=e.to&&(Mg=c),d):(e.from!=e.to&&(Mg=d),c);c=d}}return c}function ya(a,b,c,d){if(!d)return b+c;do b+=c;while(b>0&&x(a.text.charAt(b)));return b}function za(a,b,c,d){var e=Ba(a);if(!e)return Aa(a,b,c,d);for(var f=xa(e,b),g=e[f],h=ya(a,b,g.level%2?-c:c,d);;){if(h>g.from&&h0==g.level%2?g.to:g.from);if(g=e[f+=c],!g)return null;h=c>0==g.level%2?ya(a,g.to,-1,d):ya(a,g.from,1,d)}}function Aa(a,b,c,d){var e=b+c;if(d)for(;e>0&&x(a.text.charAt(e));)e+=c;return e<0||e>a.text.length?null:e}function Ba(a){var b=a.order;return null==b&&(b=a.order=Ng(a.text)),b}function Ca(a,b){return a._handlers&&a._handlers[b]||Og}function Da(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,!1);else if(a.detachEvent)a.detachEvent("on"+b,c);else{var d=a._handlers,e=d&&d[b];if(e){var f=m(e,c);f>-1&&(d[b]=e.slice(0,f).concat(e.slice(f+1)))}}}function Ea(a,b){var c=Ca(a,b);if(c.length)for(var d=Array.prototype.slice.call(arguments,2),e=0;e0}function Ia(a){a.prototype.on=function(a,b){Pg(this,a,b)},a.prototype.off=function(a,b){Da(this,a,b)}}function Ja(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function Ka(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function La(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.returnValue}function Ma(a){Ja(a),Ka(a)}function Na(a){return a.target||a.srcElement}function Oa(a){var b=a.which;return null==b&&(1&a.button?b=1:2&a.button?b=3:4&a.button&&(b=2)),rg&&a.ctrlKey&&1==b&&(b=3),b}function Pa(a){if(null==Ag){var b=d("span","​");c(a,d("span",[b,document.createTextNode("x")])),0!=a.firstChild.offsetHeight&&(Ag=b.offsetWidth<=1&&b.offsetHeight>2&&!(gg&&hg<8))}var e=Ag?d("span","​"):d("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return e.setAttribute("cm-text",""),e}function Qa(a){if(null!=Bg)return Bg;var d=c(a,document.createTextNode("AخA")),e=vg(d,0,1).getBoundingClientRect(),f=vg(d,1,2).getBoundingClientRect();return b(a),!(!e||e.left==e.right)&&(Bg=f.right-e.right<3)}function Ra(a){if(null!=Ug)return Ug;var b=c(a,d("span","x")),e=b.getBoundingClientRect(),f=vg(b,0,1).getBoundingClientRect();return Ug=Math.abs(e.left-f.left)>1}function Sa(a,b){arguments.length>2&&(b.dependencies=Array.prototype.slice.call(arguments,2)),Vg[a]=b}function Ta(a,b){Wg[a]=b}function Ua(a){if("string"==typeof a&&Wg.hasOwnProperty(a))a=Wg[a];else if(a&&"string"==typeof a.name&&Wg.hasOwnProperty(a.name)){var b=Wg[a.name];"string"==typeof b&&(b={name:b}),a=t(b,a),a.name=b.name}else{if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a))return Ua("application/xml");if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+json$/.test(a))return Ua("application/json")}return"string"==typeof a?{name:a}:a||{name:"null"}}function Va(a,b){b=Ua(b);var c=Vg[b.name];if(!c)return Va(a,"text/plain");var d=c(a,b);if(Xg.hasOwnProperty(b.name)){var e=Xg[b.name];for(var f in e)e.hasOwnProperty(f)&&(d.hasOwnProperty(f)&&(d["_"+f]=d[f]),d[f]=e[f])}if(d.name=b.name,b.helperType&&(d.helperType=b.helperType),b.modeProps)for(var g in b.modeProps)d[g]=b.modeProps[g];return d}function Wa(a,b){var c=Xg.hasOwnProperty(a)?Xg[a]:Xg[a]={};j(b,c)}function Xa(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c}function Ya(a,b){for(var c;a.innerMode&&(c=a.innerMode(b),c&&c.mode!=a);)b=c.state,a=c.mode;return c||{mode:a,state:b}}function Za(a,b,c){return!a.startState||a.startState(b,c)}function $a(a,b,c,d){var e=[a.state.modeGen],f={};gb(a,b.text,a.doc.mode,c,function(a,b){return e.push(a,b)},f,d);for(var g=function(c){var d=a.state.overlays[c],g=1,h=0;gb(a,b.text,d.mode,!0,function(a,b){for(var c=g;ha&&e.splice(g,1,a,e[g+1],f),g+=2,h=Math.min(a,f)}if(b)if(d.opaque)e.splice(c,g-c,a,"overlay "+b),g=c+2;else for(;ca.options.maxHighlightLength?Xa(a.doc.mode,d):d);b.stateAfter=d,b.styles=e.styles,e.classes?b.styleClasses=e.classes:b.styleClasses&&(b.styleClasses=null),c===a.doc.frontier&&a.doc.frontier++}return b.styles}function ab(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0;var f=hb(a,b,c),g=f>d.first&&z(d,f-1).stateAfter;return g=g?Xa(d.mode,g):Za(d.mode),d.iter(f,b,function(c){bb(a,c.text,g);var h=f==b-1||f%5==0||f>=e.viewFrom&&fb.start)return f}throw new Error("Mode "+a.name+" failed to advance stream.")}function eb(a,b,c,d){var e,f=function(a){return{start:l.start,end:l.pos,string:l.current(),type:e||null,state:a?Xa(g.mode,k):k}},g=a.doc,h=g.mode;b=N(g,b);var i,j=z(g,b.line),k=ab(a,b.line,c),l=new Yg(j.text,a.options.tabSize);for(d&&(i=[]);(d||l.posa.options.maxHighlightLength?(h=!1,g&&bb(a,b,d,l.pos),l.pos=b.length,i=null):i=fb(db(c,l,d,m),f),m){var n=m[0].name;n&&(i="m-"+(i?n+" "+i:n))}if(!h||k!=i){for(;jg;--h){if(h<=f.first)return f.first;var i=z(f,h-1);if(i.stateAfter&&(!c||h<=f.frontier))return h;var j=k(i.text,null,a.options.tabSize);(null==e||d>j)&&(e=h-1,d=j)}return e}function ib(a,b,c){this.text=a,aa(this,b),this.height=c?c(this):1}function jb(a,b,c,d){a.text=b,a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null),null!=a.order&&(a.order=null),_(a),aa(a,c);var e=d?d(a):1;e!=a.height&&C(a,e)}function kb(a){a.parent=null,_(a)}function lb(a,b){if(!a||/^\s*$/.test(a))return null;var c=b.addModeClass?_g:$g;return c[a]||(c[a]=a.replace(/\S+/g,"cm-$&"))}function mb(a,b){var c=d("span",null,null,ig?"padding-right: .1px":null),e={pre:d("pre",[c],"CodeMirror-line"),content:c,col:0,pos:0,cm:a,trailingSpace:!1,splitSpaces:(gg||ig)&&a.getOption("lineWrapping")};b.measure={};for(var f=0;f<=(b.rest?b.rest.length:0);f++){var g=f?b.rest[f-1]:b.line,i=void 0;e.pos=0,e.addToken=ob,Qa(a.display.measure)&&(i=Ba(g))&&(e.addToken=qb(e.addToken,i)),e.map=[];var j=b!=a.display.externalMeasured&&D(g);sb(g,e,_a(a,g,j)),g.styleClasses&&(g.styleClasses.bgClass&&(e.bgClass=h(g.styleClasses.bgClass,e.bgClass||"")),g.styleClasses.textClass&&(e.textClass=h(g.styleClasses.textClass,e.textClass||""))),0==e.map.length&&e.map.push(0,0,e.content.appendChild(Pa(a.display.measure))),0==f?(b.measure.map=e.map,b.measure.cache={}):((b.measure.maps||(b.measure.maps=[])).push(e.map),(b.measure.caches||(b.measure.caches=[])).push({}))}if(ig){var k=e.content.lastChild;(/\bcm-tab\b/.test(k.className)||k.querySelector&&k.querySelector(".cm-tab"))&&(e.content.className="cm-tab-wrap-hack")}return Ea(a,"renderLine",a,b.line,e.pre),e.pre.className&&(e.textClass=h(e.pre.className,e.textClass||"")),e}function nb(a){var b=d("span","•","cm-invalidchar");return b.title="\\u"+a.charCodeAt(0).toString(16),b.setAttribute("aria-label",b.title),b}function ob(a,b,c,e,f,g,h){if(b){var i,j=a.splitSpaces?pb(b,a.trailingSpace):b,k=a.cm.state.specialChars,l=!1;if(k.test(b)){i=document.createDocumentFragment();for(var m=0;;){k.lastIndex=m;var n=k.exec(b),p=n?n.index-m:b.length-m;if(p){var q=document.createTextNode(j.slice(m,m+p));gg&&hg<9?i.appendChild(d("span",[q])):i.appendChild(q),a.map.push(a.pos,a.pos+p,q),a.col+=p,a.pos+=p}if(!n)break;m+=p+1;var r=void 0;if("\t"==n[0]){var s=a.cm.options.tabSize,t=s-a.col%s;r=i.appendChild(d("span",o(t),"cm-tab")),r.setAttribute("role","presentation"),r.setAttribute("cm-text","\t"),a.col+=t}else"\r"==n[0]||"\n"==n[0]?(r=i.appendChild(d("span","\r"==n[0]?"␍":"␤","cm-invalidchar")),r.setAttribute("cm-text",n[0]),a.col+=1):(r=a.cm.options.specialCharPlaceholder(n[0]),r.setAttribute("cm-text",n[0]),gg&&hg<9?i.appendChild(d("span",[r])):i.appendChild(r),a.col+=1);a.map.push(a.pos,a.pos+1,r),a.pos++}}else a.col+=b.length,i=document.createTextNode(j),a.map.push(a.pos,a.pos+b.length,i),gg&&hg<9&&(l=!0),a.pos+=b.length;if(a.trailingSpace=32==j.charCodeAt(b.length-1),c||e||f||l||h){var u=c||"";e&&(u+=e),f&&(u+=f);var v=d("span",[i],u,h);return g&&(v.title=g),a.content.appendChild(v)}a.content.appendChild(i)}}function pb(a,b){if(a.length>1&&!/ /.test(a))return a;for(var c=b,d="",e=0;ej&&l.from<=j));m++);if(l.to>=k)return a(c,d,e,f,g,h,i);a(c,d.slice(0,l.to-j),e,f,null,h,i),f=null,d=d.slice(l.to-j),j=l.to}}}function rb(a,b,c,d){var e=!d&&c.widgetNode;e&&a.map.push(a.pos,a.pos+b,e),!d&&a.cm.display.input.needsContentAttribute&&(e||(e=a.content.appendChild(document.createElement("span"))),e.setAttribute("cm-marker",c.id)),e&&(a.cm.display.input.setUneditable(e),a.content.appendChild(e)),a.pos+=b,a.trailingSpace=!1}function sb(a,b,c){var d=a.markedSpans,e=a.text,f=0;if(d)for(var g,h,i,j,k,l,m,n=e.length,o=0,p=1,q="",r=0;;){if(r==o){i=j=k=l=h="",m=null,r=1/0;for(var s=[],t=void 0,u=0;uo||w.collapsed&&v.to==o&&v.from==o)?(null!=v.to&&v.to!=o&&r>v.to&&(r=v.to,j=""),w.className&&(i+=" "+w.className),w.css&&(h=(h?h+";":"")+w.css),w.startStyle&&v.from==o&&(k+=" "+w.startStyle),w.endStyle&&v.to==r&&(t||(t=[])).push(w.endStyle,v.to),w.title&&!l&&(l=w.title),w.collapsed&&(!m||da(m.marker,w)<0)&&(m=v)):v.from>o&&r>v.from&&(r=v.from)}if(t)for(var x=0;x=n)break;for(var z=Math.min(n,r);;){if(q){var A=o+q.length;if(!m){var B=A>z?q.slice(0,z-o):q;b.addToken(b,B,g?g+i:i,k,o+B.length==r?j:"",l,h)}if(A>=z){q=q.slice(z-o),o=z;break}o=A,k=""}q=e.slice(f,f=c[p++]),g=lb(c[p++],b.cm.options)}}else for(var C=1;C2&&f.push((i.bottom+j.top)/2-c.top)}}f.push(c.bottom-c.top)}}function Vb(a,b,c){if(a.line==b)return{map:a.measure.map,cache:a.measure.cache};for(var d=0;dc)return{map:a.measure.maps[e],cache:a.measure.caches[e],before:!0}}function Wb(a,b){b=ia(b);var d=D(b),e=a.display.externalMeasured=new tb(a.doc,b,d);e.lineN=d;var f=e.built=mb(a,e);return e.text=f.pre,c(a.display.lineMeasure,f.pre),e}function Xb(a,b,c,d){return $b(a,Zb(a,b),c,d)}function Yb(a,b){if(b>=a.display.viewFrom&&b=c.lineN&&bb)&&(f=i-h,e=f-1,b>=i&&(g="right")),null!=e){if(d=a[j+2],h==i&&c==(d.insertLeft?"left":"right")&&(g=c),"left"==c&&0==e)for(;j&&a[j-2]==a[j-3]&&a[j-1].insertLeft;)d=a[(j-=3)+2],g="left";if("right"==c&&e==i-h)for(;j=0&&(c=a[e]).left==c.right;e--);return c}function bc(a,b,c,d){var e,f=_b(b.map,c,d),g=f.node,h=f.start,i=f.end,j=f.collapse;if(3==g.nodeType){for(var k=0;k<4;k++){for(;h&&x(b.line.text.charAt(f.coverStart+h));)--h;for(;f.coverStart+i0&&(j=d="right");var l;e=a.options.lineWrapping&&(l=g.getClientRects()).length>1?l["right"==d?l.length-1:0]:g.getBoundingClientRect()}if(gg&&hg<9&&!h&&(!e||!e.left&&!e.right)){var m=g.parentNode.getClientRects()[0];e=m?{left:m.left,right:m.left+rc(a.display),top:m.top,bottom:m.bottom}:ch}for(var n=e.top-b.rect.top,o=e.bottom-b.rect.top,p=(n+o)/2,q=b.view.measure.heights,r=0;rc.from?g(a-1):g(a,d)}d=d||z(a.doc,b.line),e||(e=Zb(a,d));var i=Ba(d),j=b.ch;if(!i)return g(j);var k=xa(i,j),l=h(j,k);return null!=Mg&&(l.other=h(j,Mg)),l}function mc(a,b){var c=0;b=N(a.doc,b),a.options.lineWrapping||(c=rc(a.display)*b.ch);var d=z(a.doc,b.line),e=oa(d)+Ob(a.display);return{left:c,right:c,top:e,bottom:e+d.height}}function nc(a,b,c,d){var e=H(a,b);return e.xRel=d,c&&(e.outside=!0),e}function oc(a,b,c){var d=a.doc;if(c+=a.display.viewOffset,c<0)return nc(d.first,0,!0,-1);var e=E(d,c),f=d.first+d.size-1;if(e>f)return nc(d.first+d.size-1,z(d,f).text.length,!0,1);b<0&&(b=0);for(var g=z(d,e);;){var h=pc(a,g,e,b,c),i=ga(g),j=i&&i.find(0,!0);if(!i||!(h.ch>j.from.ch||h.ch==j.from.ch&&h.xRel>0))return h;e=D(g=j.to.line)}}function pc(a,b,c,d,e){function f(d){var e=lc(a,H(c,d),"line",b,j);return h=!0,g>e.bottom?e.left-i:gq)return nc(c,n,r,1);for(;;){if(k?n==m||n==za(b,m,1):n-m<=1){var s=d0&&s1){var v=$b(a,j,s,"right");g<=v.bottom&&g>=v.top&&Math.abs(d-v.right)1?1:0);return w}var y=Math.ceil(l/2),z=m+y;if(k){z=m;for(var A=0;Ad?(n=z,q=B,(r=h)&&(q+=1e3),l=y):(m=z,o=B,p=h,l-=y)}}function qc(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==Zg){Zg=d("pre");for(var e=0;e<49;++e)Zg.appendChild(document.createTextNode("x")),Zg.appendChild(d("br"));Zg.appendChild(document.createTextNode("x"))}c(a.measure,Zg);var f=Zg.offsetHeight/50;return f>3&&(a.cachedTextHeight=f),b(a.measure),f||1}function rc(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b=d("span","xxxxxxxxxx"),e=d("pre",[b]);c(a.measure,e);var f=b.getBoundingClientRect(),g=(f.right-f.left)/10;return g>2&&(a.cachedCharWidth=g),g||10}function sc(a){for(var b=a.display,c={},d={},e=b.gutters.clientLeft,f=b.gutters.firstChild,g=0;f;f=f.nextSibling,++g)c[a.options.gutters[g]]=f.offsetLeft+f.clientLeft+e,d[a.options.gutters[g]]=f.clientWidth;return{fixedPos:tc(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:c,gutterWidth:d,wrapperWidth:b.wrapper.clientWidth}}function tc(a){return a.scroller.getBoundingClientRect().left-a.sizer.getBoundingClientRect().left}function uc(a){var b=qc(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/rc(a.display)-3);return function(e){if(ma(a.doc,e))return 0;var f=0;if(e.widgets)for(var g=0;g=a.display.viewTo)return null;if(b-=a.display.viewFrom,b<0)return null;for(var c=a.display.view,d=0;d=a.display.viewTo||h.to().line3&&(e(n,p.top,null,p.bottom),n=k,p.bottomi.bottom||j.bottom==i.bottom&&j.right>i.right)&&(i=j),n0?b.blinker=setInterval(function(){return b.cursorDiv.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate):a.options.cursorBlinkRate<0&&(b.cursorDiv.style.visibility="hidden")}}function Dc(a){a.state.focused||(a.display.input.focus(),Fc(a))}function Ec(a){a.state.delayingBlurEvent=!0,setTimeout(function(){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!1,Gc(a))},100)}function Fc(a,b){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!1),"nocursor"!=a.options.readOnly&&(a.state.focused||(Ea(a,"focus",a,b),a.state.focused=!0,g(a.display.wrapper,"CodeMirror-focused"),a.curOp||a.display.selForContextMenu==a.doc.sel||(a.display.input.reset(),ig&&setTimeout(function(){return a.display.input.reset(!0)},20)),a.display.input.receivedFocus()),Cc(a))}function Gc(a,b){a.state.delayingBlurEvent||(a.state.focused&&(Ea(a,"blur",a,b),a.state.focused=!1,yg(a.display.wrapper,"CodeMirror-focused")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.display.shift=!1)},150))}function Hc(a){var b=a.display,c=b.view;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var d=tc(b)-b.scroller.scrollLeft+a.doc.scrollLeft,e=b.gutters.offsetWidth,f=d+"px",g=0;g.001||i<-.001)&&(C(e.line,f),Kc(e.line),e.rest))for(var j=0;j=g&&(f=E(b,oa(z(b,i))-a.wrapper.clientHeight),g=i)}return{from:f,to:Math.max(g,f+1)}}function Mc(a,b){Math.abs(a.doc.scrollTop-b)<2||(a.doc.scrollTop=b,dg||Ad(a,{top:b}),a.display.scroller.scrollTop!=b&&(a.display.scroller.scrollTop=b),a.display.scrollbars.setScrollTop(b),dg&&Ad(a),ud(a,100))}function Nc(a,b,c){(c?b==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-b)<2)||(b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth),a.doc.scrollLeft=b,Hc(a),a.display.scroller.scrollLeft!=b&&(a.display.scroller.scrollLeft=b),a.display.scrollbars.setScrollLeft(b))}function Oc(a){var b=a.wheelDeltaX,c=a.wheelDeltaY;return null==b&&a.detail&&a.axis==a.HORIZONTAL_AXIS&&(b=a.detail),null==c&&a.detail&&a.axis==a.VERTICAL_AXIS?c=a.detail:null==c&&(c=a.wheelDelta),{x:b,y:c}}function Pc(a){var b=Oc(a);return b.x*=eh,b.y*=eh,b}function Qc(a,b){var c=Oc(b),d=c.x,e=c.y,f=a.display,g=f.scroller,h=g.scrollWidth>g.clientWidth,i=g.scrollHeight>g.clientHeight;if(d&&h||e&&i){if(e&&rg&&ig)a:for(var j=b.target,k=f.view;j!=g;j=j.parentNode)for(var l=0;l(window.innerHeight||document.documentElement.clientHeight)&&(f=!1),null!=f&&!og){var g=d("div","​",null,"position: absolute;\n top: "+(b.top-c.viewOffset-Ob(a.display))+"px;\n height: "+(b.bottom-b.top+Rb(a)+c.barHeight)+"px;\n left: "+b.left+"px; width: 2px;");a.display.lineSpace.appendChild(g),g.scrollIntoView(f),a.display.lineSpace.removeChild(g)}}}function Yc(a,b,c,d){null==d&&(d=0);for(var e,f=0;f<5;f++){var g=!1;e=lc(a,b);var h=c&&c!=b?lc(a,c):e,i=$c(a,Math.min(e.left,h.left),Math.min(e.top,h.top)-d,Math.max(e.left,h.left),Math.max(e.bottom,h.bottom)+d),j=a.doc.scrollTop,k=a.doc.scrollLeft;if(null!=i.scrollTop&&(Mc(a,i.scrollTop),Math.abs(a.doc.scrollTop-j)>1&&(g=!0)),null!=i.scrollLeft&&(Nc(a,i.scrollLeft),Math.abs(a.doc.scrollLeft-k)>1&&(g=!0)),!g)break}return e}function Zc(a,b,c,d,e){var f=$c(a,b,c,d,e);null!=f.scrollTop&&Mc(a,f.scrollTop),null!=f.scrollLeft&&Nc(a,f.scrollLeft)}function $c(a,b,c,d,e){var f=a.display,g=qc(a.display);c<0&&(c=0);var h=a.curOp&&null!=a.curOp.scrollTop?a.curOp.scrollTop:f.scroller.scrollTop,i=Tb(a),j={};e-c>i&&(e=c+i);var k=a.doc.height+Pb(f),l=ck-g;if(ch+i){var n=Math.min(c,(m?k:e)-i);n!=h&&(j.scrollTop=n)}var o=a.curOp&&null!=a.curOp.scrollLeft?a.curOp.scrollLeft:f.scroller.scrollLeft,p=Sb(a)-(a.options.fixedGutter?f.gutters.offsetWidth:0),q=d-b>p;return q&&(d=b+p),b<10?j.scrollLeft=0:bp+o-3&&(j.scrollLeft=d+(q?0:10)-p),j}function _c(a,b,c){null==b&&null==c||bd(a),null!=b&&(a.curOp.scrollLeft=(null==a.curOp.scrollLeft?a.doc.scrollLeft:a.curOp.scrollLeft)+b),null!=c&&(a.curOp.scrollTop=(null==a.curOp.scrollTop?a.doc.scrollTop:a.curOp.scrollTop)+c)}function ad(a){bd(a);var b=a.getCursor(),c=b,d=b;a.options.lineWrapping||(c=b.ch?H(b.line,b.ch-1):b,d=H(b.line,b.ch+1)),a.curOp.scrollToPos={from:c,to:d,margin:a.options.cursorScrollMargin,isCursor:!0}}function bd(a){var b=a.curOp.scrollToPos;if(b){a.curOp.scrollToPos=null;var c=mc(a,b.from),d=mc(a,b.to),e=$c(a,Math.min(c.left,d.left),Math.min(c.top,d.top)-b.margin,Math.max(c.right,d.right),Math.max(c.bottom,d.bottom)+b.margin);a.scrollTo(e.scrollLeft,e.scrollTop)}}function cd(a){a.curOp={cm:a,viewChanged:!1,startHeight:a.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++gh},vb(a.curOp)}function dd(a){var b=a.curOp;xb(b,function(a){for(var b=0;b=c.viewTo)||c.maxLineChanged&&b.options.lineWrapping,a.update=a.mustUpdate&&new wd(b,a.mustUpdate&&{top:a.scrollTop,ensure:a.scrollToPos},a.forceUpdate)}function gd(a){a.updatedDisplay=a.mustUpdate&&yd(a.cm,a.update)}function hd(a){var b=a.cm,c=b.display;a.updatedDisplay&&Jc(b),a.barMeasure=Rc(b),c.maxLineChanged&&!b.options.lineWrapping&&(a.adjustWidthTo=Xb(b,c.maxLine,c.maxLine.text.length).left+3,b.display.sizerWidth=a.adjustWidthTo,a.barMeasure.scrollWidth=Math.max(c.scroller.clientWidth,c.sizer.offsetLeft+a.adjustWidthTo+Rb(b)+b.display.barWidth),a.maxScrollLeft=Math.max(0,c.sizer.offsetLeft+a.adjustWidthTo-Sb(b))),(a.updatedDisplay||a.selectionChanged)&&(a.preparedSelection=c.input.prepareSelection(a.focus))}function id(a){var b=a.cm;null!=a.adjustWidthTo&&(b.display.sizer.style.minWidth=a.adjustWidthTo+"px",a.maxScrollLeftb)&&(e.updateLineNumbers=b),a.curOp.viewChanged=!0,b>=e.viewTo)Lg&&ka(a.doc,b)e.viewFrom?qd(a):(e.viewFrom+=d,e.viewTo+=d);else if(b<=e.viewFrom&&c>=e.viewTo)qd(a);else if(b<=e.viewFrom){var f=rd(a,c,c+d,1);f?(e.view=e.view.slice(f.index),e.viewFrom=f.lineN,e.viewTo+=d):qd(a)}else if(c>=e.viewTo){var g=rd(a,b,b,-1);g?(e.view=e.view.slice(0,g.index),e.viewTo=g.lineN):qd(a)}else{var h=rd(a,b,b,-1),i=rd(a,c,c+d,1);h&&i?(e.view=e.view.slice(0,h.index).concat(ub(a,h.lineN,i.lineN)).concat(e.view.slice(i.index)),e.viewTo+=d):qd(a)}var j=e.externalMeasured;j&&(c=e.lineN&&b=d.viewTo)){var f=d.view[xc(a,b)];if(null!=f.node){var g=f.changes||(f.changes=[]);m(g,c)==-1&&g.push(c)}}}function qd(a){a.display.viewFrom=a.display.viewTo=a.doc.first,a.display.view=[],a.display.viewOffset=0}function rd(a,b,c,d){var e,f=xc(a,b),g=a.display.view;if(!Lg||c==a.doc.first+a.doc.size)return{index:f,lineN:c};for(var h=a.display.viewFrom,i=0;i0){if(f==g.length-1)return null;e=h+g[f].size-b,f++}else e=h-b;b+=e,c+=e}for(;ka(a.doc,c)!=c;){if(f==(d<0?0:g.length-1))return null;c+=d*g[f-(d<0?1:0)].size,f+=d}return{index:f,lineN:c}}function sd(a,b,c){var d=a.display,e=d.view;0==e.length||b>=d.viewTo||c<=d.viewFrom?(d.view=ub(a,b,c),d.viewFrom=b):(d.viewFrom>b?d.view=ub(a,b,d.viewFrom).concat(d.view):d.viewFromc&&(d.view=d.view.slice(0,xc(a,c)))),d.viewTo=c}function td(a){for(var b=a.display.view,c=0,d=0;d=a.display.viewTo)){var c=+new Date+a.options.workTime,d=Xa(b.mode,ab(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.viewTo+500),function(f){if(b.frontier>=a.display.viewFrom){var g=f.styles,h=f.text.length>a.options.maxHighlightLength,i=$a(a,f,h?Xa(b.mode,d):d,!0);f.styles=i.styles;var j=f.styleClasses,k=i.classes;k?f.styleClasses=k:j&&(f.styleClasses=null);for(var l=!g||g.length!=f.styles.length||j!=k&&(!j||!k||j.bgClass!=k.bgClass||j.textClass!=k.textClass),m=0;!l&&mc)return ud(a,a.options.workDelay),!0}),e.length&&kd(a,function(){for(var b=0;b=d.viewFrom&&c.visible.to<=d.viewTo&&(null==d.updateLineNumbers||d.updateLineNumbers>=d.viewTo)&&d.renderedView==d.view&&0==td(a))return!1;Ic(a)&&(qd(a),c.dims=sc(a));var g=e.first+e.size,h=Math.max(c.visible.from-a.options.viewportMargin,e.first),i=Math.min(g,c.visible.to+a.options.viewportMargin);d.viewFromi&&d.viewTo-i<20&&(i=Math.min(g,d.viewTo)),Lg&&(h=ka(a.doc,h),i=la(a.doc,i));var j=h!=d.viewFrom||i!=d.viewTo||d.lastWrapHeight!=c.wrapperHeight||d.lastWrapWidth!=c.wrapperWidth;sd(a,h,i),d.viewOffset=oa(z(a.doc,d.viewFrom)),a.display.mover.style.top=d.viewOffset+"px";var k=td(a);if(!j&&0==k&&!c.force&&d.renderedView==d.view&&(null==d.updateLineNumbers||d.updateLineNumbers>=d.viewTo))return!1;var l=f();return k>4&&(d.lineDiv.style.display="none"),Bd(a,d.updateLineNumbers,c.dims),k>4&&(d.lineDiv.style.display=""),d.renderedView=d.view,l&&f()!=l&&l.offsetHeight&&l.focus(),b(d.cursorDiv),b(d.selectionDiv),d.gutters.style.height=d.sizer.style.minHeight=0,j&&(d.lastWrapHeight=c.wrapperHeight,d.lastWrapWidth=c.wrapperWidth,ud(a,400)),d.updateLineNumbers=null,!0}function zd(a,b){for(var c=b.viewport,d=!0;(d&&a.options.lineWrapping&&b.oldDisplayWidth!=Sb(a)||(c&&null!=c.top&&(c={top:Math.min(a.doc.height+Pb(a.display)-Tb(a),c.top)}),b.visible=Lc(a.display,a.doc,c),!(b.visible.from>=a.display.viewFrom&&b.visible.to<=a.display.viewTo)))&&yd(a,b);d=!1){Jc(a);var e=Rc(a);yc(a),Uc(a,e),Dd(a,e)}b.signal(a,"update",a),a.display.viewFrom==a.display.reportedViewFrom&&a.display.viewTo==a.display.reportedViewTo||(b.signal(a,"viewportChange",a,a.display.viewFrom,a.display.viewTo),a.display.reportedViewFrom=a.display.viewFrom,a.display.reportedViewTo=a.display.viewTo)}function Ad(a,b){var c=new wd(a,b);if(yd(a,c)){Jc(a),zd(a,c);var d=Rc(a);yc(a),Uc(a,d),Dd(a,d),c.finish()}}function Bd(a,c,d){function e(b){var c=b.nextSibling;return ig&&rg&&a.display.currentWheelTarget==b?b.style.display="none":b.parentNode.removeChild(b),c}for(var f=a.display,g=a.options.lineNumbers,h=f.lineDiv,i=h.firstChild,j=f.view,k=f.viewFrom,l=0;l-1&&(o=!1),Ab(a,n,k,d)),o&&(b(n.lineNumber),n.lineNumber.appendChild(document.createTextNode(G(a.options,k)))), +i=n.node.nextSibling}else{var p=Ib(a,n,k,d);h.insertBefore(p,i)}k+=n.size}for(;i;)i=e(i)}function Cd(a){var b=a.display.gutters.offsetWidth;a.display.sizer.style.marginLeft=b+"px"}function Dd(a,b){a.display.sizer.style.minHeight=b.docHeight+"px",a.display.heightForcer.style.top=b.docHeight+"px",a.display.gutters.style.height=b.docHeight+a.display.barHeight+Rb(a)+"px"}function Ed(a){var c=a.display.gutters,e=a.options.gutters;b(c);for(var f=0;f-1&&!a.lineNumbers&&(a.gutters=a.gutters.slice(0),a.gutters.splice(b,1))}function Gd(a,b){this.ranges=a,this.primIndex=b}function Hd(a,b){this.anchor=a,this.head=b}function Id(a,b){var c=a[b];a.sort(function(a,b){return I(a.from(),b.from())}),b=m(a,c);for(var d=1;d=0){var g=L(f.from(),e.from()),h=K(f.to(),e.to()),i=f.empty()?e.from()==e.head:f.from()==f.head;d<=b&&--b,a.splice(--d,2,new Hd(i?h:g,i?g:h))}}return new Gd(a,b)}function Jd(a,b){return new Gd([new Hd(a,b||a)],0)}function Kd(a){return a.text?H(a.from.line+a.text.length-1,p(a.text).length+(1==a.text.length?a.from.ch:0)):a.to}function Ld(a,b){if(I(a,b.from)<0)return a;if(I(a,b.to)<=0)return Kd(b);var c=a.line+b.text.length-(b.to.line-b.from.line)-1,d=a.ch;return a.line==b.to.line&&(d+=Kd(b).ch-b.to.ch),H(c,d)}function Md(a,b){for(var c=[],d=0;d1&&a.remove(h.line+1,o-1),a.insert(h.line+1,s)}yb(a,"change",a,b)}function Td(a,b,c){function d(a,e,f){if(a.linked)for(var g=0;g1&&!a.done[a.done.length-2].ranges?(a.done.pop(),p(a.done)):void 0}function Zd(a,b,c,d){var e=a.history;e.undone.length=0;var f,g,h=+new Date;if((e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&("+"==b.origin.charAt(0)&&a.cm&&e.lastModTime>h-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0)))&&(f=Yd(e,e.lastOp==d)))g=p(f.changes),0==I(b.from,b.to)&&0==I(b.from,g.to)?g.to=Kd(b):f.changes.push(Wd(a,b));else{var i=p(e.done);for(i&&i.ranges||ae(a.sel,e.done),f={changes:[Wd(a,b)],generation:e.generation},e.done.push(f);e.done.length>e.undoDepth;)e.done.shift(),e.done[0].ranges||e.done.shift()}e.done.push(c),e.generation=++e.maxGeneration,e.lastModTime=e.lastSelTime=h,e.lastOp=e.lastSelOp=d,e.lastOrigin=e.lastSelOrigin=b.origin,g||Ea(a,"historyAdded")}function $d(a,b,c,d){var e=b.charAt(0);return"*"==e||"+"==e&&c.ranges.length==d.ranges.length&&c.somethingSelected()==d.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}function _d(a,b,c,d){var e=a.history,f=d&&d.origin;c==e.lastSelOp||f&&e.lastSelOrigin==f&&(e.lastModTime==e.lastSelTime&&e.lastOrigin==f||$d(a,f,p(e.done),b))?e.done[e.done.length-1]=b:ae(b,e.done),e.lastSelTime=+new Date,e.lastSelOrigin=f,e.lastSelOp=c,d&&d.clearRedo!==!1&&Xd(e.undone)}function ae(a,b){var c=p(b);c&&c.ranges&&c.equals(a)||b.push(a)}function be(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=c.markedSpans),++f})}function ce(a){if(!a)return null;for(var b,c=0;c-1&&(p(h)[l]=j[l],delete j[l])}}}return d}function ge(a,b,c,d){if(a.cm&&a.cm.display.shift||a.extend){var e=b.anchor;if(d){var f=I(c,e)<0;f!=I(d,e)<0?(e=c,c=d):f!=I(c,d)<0&&(c=d)}return new Hd(e,c)}return new Hd(d||c,c)}function he(a,b,c,d){ne(a,new Gd([ge(a,a.sel.primary(),b,c)],0),d)}function ie(a,b,c){for(var d=[],e=0;e=b.ch:h.to>b.ch))){if(e&&(Ea(i,"beforeCursorEnter"),i.explicitlyCleared)){if(f.markedSpans){--g;continue}break}if(!i.atomic)continue;if(c){var j=i.find(d<0?1:-1),k=void 0;if((d<0?i.inclusiveRight:i.inclusiveLeft)&&(j=ue(a,j,-d,j&&j.line==b.line?f:null)),j&&j.line==b.line&&(k=I(j,c))&&(d<0?k<0:k>0))return se(a,j,b,d,e)}var l=i.find(d<0?-1:1);return(d<0?i.inclusiveLeft:i.inclusiveRight)&&(l=ue(a,l,d,l.line==b.line?f:null)),l?se(a,l,b,d,e):null}}return b}function te(a,b,c,d,e){var f=d||1,g=se(a,b,c,f,e)||!e&&se(a,b,c,f,!0)||se(a,b,c,-f,e)||!e&&se(a,b,c,-f,!0);return g?g:(a.cantEdit=!0,H(a.first,0))}function ue(a,b,c,d){return c<0&&0==b.ch?b.line>a.first?N(a,H(b.line-1)):null:c>0&&b.ch==(d||z(a,b.line)).text.length?b.line=0;--e)ye(a,{from:d[e].from,to:d[e].to,text:e?[""]:b.text});else ye(a,b)}}function ye(a,b){if(1!=b.text.length||""!=b.text[0]||0!=I(b.from,b.to)){var c=Md(a,b);Zd(a,b,c,a.cm?a.cm.curOp.id:NaN),Be(a,b,c,Y(a,b));var d=[];Td(a,function(a,c){c||m(d,a.history)!=-1||(Ge(a.history,b),d.push(a.history)),Be(a,b,null,Y(a,b))})}}function ze(a,b,c){if(!a.cm||!a.cm.state.suppressEdits||c){for(var d,e=a.history,f=a.sel,g="undo"==b?e.done:e.undone,h="undo"==b?e.undone:e.done,i=0;i=0;--n){var o=l(n);if(o)return o.v}}}}function Ae(a,b){if(0!=b&&(a.first+=b,a.sel=new Gd(q(a.sel.ranges,function(a){return new Hd(H(a.anchor.line+b,a.anchor.ch),H(a.head.line+b,a.head.ch))}),a.sel.primIndex),a.cm)){od(a.cm,a.first,a.first-b,b);for(var c=a.cm.display,d=c.viewFrom;da.lastLine())){if(b.from.linef&&(b={from:b.from,to:H(f,z(a,f).text.length),text:[b.text[0]],origin:b.origin}),b.removed=A(a,b.from,b.to),c||(c=Md(a,b)),a.cm?Ce(a.cm,b,d):Sd(a,b,d),oe(a,c,Eg)}}function Ce(a,b,c){var d=a.doc,e=a.display,f=b.from,g=b.to,h=!1,i=f.line;a.options.lineWrapping||(i=D(ia(z(d,f.line))),d.iter(i,g.line+1,function(a){if(a==e.maxLine)return h=!0,!0})),d.sel.contains(b.from,b.to)>-1&&Ga(a),Sd(d,b,c,uc(a)),a.options.lineWrapping||(d.iter(i,f.line+b.text.length,function(a){var b=pa(a);b>e.maxLineLength&&(e.maxLine=a,e.maxLineLength=b,e.maxLineChanged=!0,h=!1)}),h&&(a.curOp.updateMaxLine=!0)),d.frontier=Math.min(d.frontier,f.line),ud(a,400);var j=b.text.length-(g.line-f.line)-1;b.full?od(a):f.line!=g.line||1!=b.text.length||Rd(a.doc,b)?od(a,f.line,g.line+1,j):pd(a,f.line,"text");var k=Ha(a,"changes"),l=Ha(a,"change");if(l||k){var m={from:f,to:g,text:b.text,removed:b.removed,origin:b.origin};l&&yb(a,"change",a,m),k&&(a.curOp.changeObjs||(a.curOp.changeObjs=[])).push(m)}a.display.selForContextMenu=null}function De(a,b,c,d,e){if(d||(d=c),I(d,c)<0){var f=d;d=c,c=f}"string"==typeof b&&(b=a.splitLines(b)),xe(a,{from:c,to:d,text:b,origin:e})}function Ee(a,b,c,d){c0||0==h&&g.clearWhenEmpty!==!1)return g;if(g.replacedWith&&(g.collapsed=!0,g.widgetNode=d("span",[g.replacedWith],"CodeMirror-widget"),e.handleMouseEvents||g.widgetNode.setAttribute("cm-ignore-events","true"),e.insertLeft&&(g.widgetNode.insertLeft=!0)),g.collapsed){if(ha(a,b.line,b,c,g)||b.line!=c.line&&ha(a,c.line,b,c,g))throw new Error("Inserting collapsed marker partially overlapping an existing one");R()}g.addToHistory&&Zd(a,{from:b,to:c,origin:"markText"},a.sel,NaN);var i,k=b.line,l=a.cm;if(a.iter(k,c.line+1,function(a){l&&g.collapsed&&!l.options.lineWrapping&&ia(a)==l.display.maxLine&&(i=!0),g.collapsed&&k!=b.line&&C(a,0),V(a,new S(g,k==b.line?b.ch:null,k==c.line?c.ch:null)),++k}),g.collapsed&&a.iter(b.line,c.line+1,function(b){ma(a,b)&&C(b,0)}),g.clearOnEnter&&Pg(g,"beforeCursorEnter",function(){return g.clear()}),g.readOnly&&(Q(),(a.history.done.length||a.history.undone.length)&&a.clearHistory()),g.collapsed&&(g.id=++hh,g.atomic=!0),l){if(i&&(l.curOp.updateMaxLine=!0),g.collapsed)od(l,b.line,c.line+1);else if(g.className||g.title||g.startStyle||g.endStyle||g.css)for(var m=b.line;m<=c.line;m++)pd(l,m,"text");g.atomic&&qe(l.doc),yb(l,"markerAdded",l,g)}return g}function Pe(a,b){var c=this;this.markers=a,this.primary=b;for(var d=0;d-1)return b.state.draggingText(a),void setTimeout(function(){return b.display.input.focus()},20);try{var j=a.dataTransfer.getData("Text");if(j){var k;if(b.state.draggingText&&!b.state.draggingText.copy&&(k=b.listSelections()),oe(b.doc,Jd(c,c)),k)for(var l=0;l=0;b--)De(a.doc,"",d[b].from,d[b].to,"+delete");ad(a)})}function hf(a,b){var c=z(a.doc,b),d=ia(c);d!=c&&(b=D(d));var e=Ba(d),f=e?e[0].level%2?va(d):ua(d):0;return H(b,f)}function jf(a,b){for(var c,d=z(a.doc,b);c=ga(d);)d=c.find(1,!0).line,b=null;var e=Ba(d),f=e?e[0].level%2?ua(d):va(d):d.text.length;return H(null==b?D(d):b,f)}function kf(a,b){var c=hf(a,b.line),d=z(a.doc,c.line),e=Ba(d);if(!e||0==e[0].level){var f=Math.max(0,d.text.search(/\S/)),g=b.line==c.line&&b.ch<=f&&b.ch;return H(c.line,g?0:f)}return c}function lf(a,b,c){if("string"==typeof b&&(b=th[b],!b))return!1;a.display.input.ensurePolled();var d=a.display.shift,e=!1;try{a.isReadOnly()&&(a.state.suppressEdits=!0),c&&(a.display.shift=!1),e=b(a)!=Dg}finally{a.display.shift=d,a.state.suppressEdits=!1}return e}function mf(a,b,c){for(var d=0;de-400&&0==I(sh.pos,c)?d="triple":rh&&rh.time>e-400&&0==I(rh.pos,c)?(d="double",sh={time:e,pos:c}):(d="single",rh={time:e,pos:c});var g,h=a.doc.sel,j=rg?b.metaKey:b.ctrlKey;a.options.dragDrop&&Qg&&!a.isReadOnly()&&"single"==d&&(g=h.contains(c))>-1&&(I((g=h.ranges[g]).from(),c)<0||c.xRel>0)&&(I(g.to(),c)>0||c.xRel<0)?wf(a,b,c,j):xf(a,b,c,d,j)}function wf(a,b,c,d){var e=a.display,f=+new Date,g=ld(a,function(h){ig&&(e.scroller.draggable=!1),a.state.draggingText=!1,Da(document,"mouseup",g),Da(e.scroller,"drop",g),Math.abs(b.clientX-h.clientX)+Math.abs(b.clientY-h.clientY)<10&&(Ja(h),!d&&+new Date-200u&&e.push(new Hd(H(q,u),H(q,n(s,j,f))))}e.length||e.push(new Hd(c,c)),ne(l,Id(p.ranges.slice(0,o).concat(e),o),{origin:"*mouse",scroll:!1}),a.scrollIntoView(b)}else{var v=m,w=v.anchor,x=b;if("single"!=d){var y;y="double"==d?a.findWordAt(b):new Hd(H(b.line,0),N(l,H(b.line+1,0))),I(y.anchor,w)>0?(x=y.head,w=L(v.from(),y.anchor)):(x=y.anchor,w=K(v.to(),y.head))}var A=p.ranges.slice(0);A[o]=new Hd(N(l,w),x),ne(l,Id(A,o),Fg)}}function h(b){var c=++v,e=wc(a,b,!0,"rect"==d);if(e)if(0!=I(e,t)){a.curOp.focus=f(),g(e);var i=Lc(j,l);(e.line>=i.to||e.lineu.bottom?20:0;k&&setTimeout(ld(a,function(){v==c&&(j.scroller.scrollTop+=k,h(b))}),50)}}function i(b){a.state.selectingText=!1,v=1/0,Ja(b),j.input.focus(),Da(document,"mousemove",w),Da(document,"mouseup",x),l.history.lastSelOrigin=null}var j=a.display,l=a.doc;Ja(b);var m,o,p=l.sel,q=p.ranges;if(e&&!b.shiftKey?(o=l.sel.contains(c),m=o>-1?q[o]:new Hd(c,c)):(m=l.sel.primary(),o=l.sel.primIndex),sg?b.shiftKey&&b.metaKey:b.altKey)d="rect",e||(m=new Hd(c,c)),c=wc(a,b,!0,!0),o=-1;else if("double"==d){var r=a.findWordAt(c);m=a.display.shift||l.extend?ge(l,m,r.anchor,r.head):r}else if("triple"==d){var s=new Hd(H(c.line,0),N(l,H(c.line+1,0)));m=a.display.shift||l.extend?ge(l,m,s.anchor,s.head):s}else m=ge(l,m,c);e?o==-1?(o=q.length,ne(l,Id(q.concat([m]),o),{scroll:!1,origin:"*mouse"})):q.length>1&&q[o].empty()&&"single"==d&&!b.shiftKey?(ne(l,Id(q.slice(0,o).concat(q.slice(o+1)),0),{scroll:!1,origin:"*mouse"}),p=l.sel):je(l,o,m,Fg):(o=0,ne(l,new Gd([m],0),Fg),p=l.sel);var t=c,u=j.wrapper.getBoundingClientRect(),v=0,w=ld(a,function(a){Oa(a)?h(a):i(a)}),x=ld(a,i);a.state.selectingText=x,Pg(document,"mousemove",w),Pg(document,"mouseup",x)}function yf(a,b,c,d){var e,f;try{e=b.clientX,f=b.clientY}catch(b){return!1}if(e>=Math.floor(a.display.gutters.getBoundingClientRect().right))return!1;d&&Ja(b);var g=a.display,h=g.lineDiv.getBoundingClientRect();if(f>h.bottom||!Ha(a,c))return La(b);f-=h.top-g.viewOffset;for(var i=0;i=e){var k=E(a.doc,f),l=a.options.gutters[i];return Ea(a,c,a,k,l,b),La(b)}}}function zf(a,b){return yf(a,b,"gutterClick",!0)}function Af(a,b){Nb(a.display,b)||Bf(a,b)||Fa(a,b,"contextmenu")||a.display.input.onContextMenu(b)}function Bf(a,b){return!!Ha(a,"gutterContextMenu")&&yf(a,b,"gutterContextMenu",!1)}function Cf(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-"),fc(a)}function Df(a){function b(b,d,e,f){a.defaults[b]=d,e&&(c[b]=f?function(a,b,c){c!=wh&&e(a,b,c)}:e)}var c=a.optionHandlers;a.defineOption=b,a.Init=wh,b("value","",function(a,b){return a.setValue(b)},!0),b("mode",null,function(a,b){a.doc.modeOption=b,Pd(a)},!0),b("indentUnit",2,Pd,!0),b("indentWithTabs",!1),b("smartIndent",!0),b("tabSize",4,function(a){Qd(a),fc(a),od(a)},!0),b("lineSeparator",null,function(a,b){if(a.doc.lineSep=b,b){var c=[],d=a.doc.first;a.doc.iter(function(a){for(var e=0;;){var f=a.text.indexOf(b,e);if(f==-1)break;e=f+b.length,c.push(H(d,f))}d++});for(var e=c.length-1;e>=0;e--)De(a.doc,b,c[e],H(c[e].line,c[e].ch+b.length))}}),b("specialChars",/[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(a,b,c){a.state.specialChars=new RegExp(b.source+(b.test("\t")?"":"|\t"),"g"),c!=wh&&a.refresh()}),b("specialCharPlaceholder",nb,function(a){return a.refresh()},!0),b("electricChars",!0),b("inputStyle",qg?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),b("spellcheck",!1,function(a,b){return a.getInputField().spellcheck=b},!0),b("rtlMoveVisually",!tg),b("wholeLineUpdateBefore",!0),b("theme","default",function(a){Cf(a),Ef(a)},!0),b("keyMap","default",function(a,b,c){var d=ff(b),e=c!=wh&&ff(c);e&&e.detach&&e.detach(a,d),d.attach&&d.attach(a,e||null)}),b("extraKeys",null),b("lineWrapping",!1,Gf,!0),b("gutters",[],function(a){Fd(a.options),Ef(a)},!0),b("fixedGutter",!0,function(a,b){a.display.gutters.style.left=b?tc(a.display)+"px":"0",a.refresh()},!0),b("coverGutterNextToScrollbar",!1,function(a){return Uc(a)},!0),b("scrollbarStyle","native",function(a){Wc(a),Uc(a),a.display.scrollbars.setScrollTop(a.doc.scrollTop),a.display.scrollbars.setScrollLeft(a.doc.scrollLeft)},!0),b("lineNumbers",!1,function(a){Fd(a.options),Ef(a)},!0),b("firstLineNumber",1,Ef,!0),b("lineNumberFormatter",function(a){return a},Ef,!0),b("showCursorWhenSelecting",!1,yc,!0),b("resetSelectionOnContextMenu",!0),b("lineWiseCopyCut",!0),b("readOnly",!1,function(a,b){"nocursor"==b?(Gc(a),a.display.input.blur(),a.display.disabled=!0):a.display.disabled=!1,a.display.input.readOnlyChanged(b)}),b("disableInput",!1,function(a,b){b||a.display.input.reset()},!0),b("dragDrop",!0,Ff),b("allowDropFileTypes",null),b("cursorBlinkRate",530),b("cursorScrollMargin",0),b("cursorHeight",1,yc,!0),b("singleCursorHeightPerLine",!0,yc,!0),b("workTime",100),b("workDelay",100),b("flattenSpans",!0,Qd,!0),b("addModeClass",!1,Qd,!0),b("pollInterval",100),b("undoDepth",200,function(a,b){return a.doc.history.undoDepth=b}),b("historyEventDelay",1250),b("viewportMargin",10,function(a){return a.refresh()},!0),b("maxHighlightLength",1e4,Qd,!0),b("moveInputWithCursor",!0,function(a,b){b||a.display.input.resetPosition()}),b("tabindex",null,function(a,b){return a.display.input.getField().tabIndex=b||""}),b("autofocus",null)}function Ef(a){Ed(a),od(a),setTimeout(function(){return Hc(a)},20)}function Ff(a,b,c){var d=c&&c!=wh;if(!b!=!d){var e=a.display.dragFunctions,f=b?Pg:Da;f(a.display.scroller,"dragstart",e.start),f(a.display.scroller,"dragenter",e.enter),f(a.display.scroller,"dragover",e.over),f(a.display.scroller,"dragleave",e.leave),f(a.display.scroller,"drop",e.drop)}}function Gf(a){a.options.lineWrapping?(g(a.display.wrapper,"CodeMirror-wrap"),a.display.sizer.style.minWidth="",a.display.sizerWidth=null):(yg(a.display.wrapper,"CodeMirror-wrap"),qa(a)),vc(a),od(a),fc(a),setTimeout(function(){return Uc(a)},100)}function Hf(a,b){ +var c=this;if(!(this instanceof Hf))return new Hf(a,b);this.options=b=b?j(b):{},j(xh,b,!1),Fd(b);var d=b.value;"string"==typeof d&&(d=new jh(d,b.mode,null,b.lineSeparator)),this.doc=d;var e=new Hf.inputStyles[b.inputStyle](this),f=this.display=new y(a,d,e);f.wrapper.CodeMirror=this,Ed(this),Cf(this),b.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),b.autofocus&&!qg&&f.input.focus(),Wc(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new l,keySeq:null,specialChars:null},gg&&hg<11&&setTimeout(function(){return c.display.input.reset(!0)},20),If(this),Ze(),cd(this),this.curOp.forceUpdate=!0,Ud(this,d),b.autofocus&&!qg||this.hasFocus()?setTimeout(i(Fc,this),20):Gc(this);for(var g in yh)yh.hasOwnProperty(g)&&yh[g](c,b[g],wh);Ic(this),b.finishInit&&b.finishInit(this);for(var h=0;h400}var e=a.display;Pg(e.scroller,"mousedown",ld(a,uf)),gg&&hg<11?Pg(e.scroller,"dblclick",ld(a,function(b){if(!Fa(a,b)){var c=wc(a,b);if(c&&!zf(a,b)&&!Nb(a.display,b)){Ja(b);var d=a.findWordAt(c);he(a.doc,d.anchor,d.head)}}})):Pg(e.scroller,"dblclick",function(b){return Fa(a,b)||Ja(b)}),xg||Pg(e.scroller,"contextmenu",function(b){return Af(a,b)});var f,g={end:0};Pg(e.scroller,"touchstart",function(b){if(!Fa(a,b)&&!c(b)){e.input.ensurePolled(),clearTimeout(f);var d=+new Date;e.activeTouch={start:d,moved:!1,prev:d-g.end<=300?g:null},1==b.touches.length&&(e.activeTouch.left=b.touches[0].pageX,e.activeTouch.top=b.touches[0].pageY)}}),Pg(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),Pg(e.scroller,"touchend",function(c){var f=e.activeTouch;if(f&&!Nb(e,c)&&null!=f.left&&!f.moved&&new Date-f.start<300){var g,h=a.coordsChar(e.activeTouch,"page");g=!f.prev||d(f,f.prev)?new Hd(h,h):!f.prev.prev||d(f,f.prev.prev)?a.findWordAt(h):new Hd(H(h.line,0),N(a.doc,H(h.line+1,0))),a.setSelection(g.anchor,g.head),a.focus(),Ja(c)}b()}),Pg(e.scroller,"touchcancel",b),Pg(e.scroller,"scroll",function(){e.scroller.clientHeight&&(Mc(a,e.scroller.scrollTop),Nc(a,e.scroller.scrollLeft,!0),Ea(a,"scroll",a))}),Pg(e.scroller,"mousewheel",function(b){return Qc(a,b)}),Pg(e.scroller,"DOMMouseScroll",function(b){return Qc(a,b)}),Pg(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(b){Fa(a,b)||Ma(b)},over:function(b){Fa(a,b)||(We(a,b),Ma(b))},start:function(b){return Ve(a,b)},drop:ld(a,Ue),leave:function(b){Fa(a,b)||Xe(a)}};var h=e.input.getField();Pg(h,"keyup",function(b){return sf.call(a,b)}),Pg(h,"keydown",ld(a,qf)),Pg(h,"keypress",ld(a,tf)),Pg(h,"focus",function(b){return Fc(a,b)}),Pg(h,"blur",function(b){return Gc(a,b)})}function Jf(a,b,c,d){var e,f=a.doc;null==c&&(c="add"),"smart"==c&&(f.mode.indent?e=ab(a,b):c="prev");var g=a.options.tabSize,h=z(f,b),i=k(h.text,null,g);h.stateAfter&&(h.stateAfter=null);var j,l=h.text.match(/^\s*/)[0];if(d||/\S/.test(h.text)){if("smart"==c&&(j=f.mode.indent(e,h.text.slice(l.length),h.text),j==Dg||j>150)){if(!d)return;c="prev"}}else j=0,c="not";"prev"==c?j=b>f.first?k(z(f,b-1).text,null,g):0:"add"==c?j=i+a.options.indentUnit:"subtract"==c?j=i-a.options.indentUnit:"number"==typeof c&&(j=i+c),j=Math.max(0,j);var m="",n=0;if(a.options.indentWithTabs)for(var p=Math.floor(j/g);p;--p)n+=g,m+="\t";if(n1)if(Ah&&Ah.text.join("\n")==b){if(d.ranges.length%Ah.text.length==0){i=[];for(var j=0;j=0;l--){var m=d.ranges[l],n=m.from(),o=m.to();m.empty()&&(c&&c>0?n=H(n.line,n.ch-c):a.state.overwrite&&!g?o=H(o.line,Math.min(z(f,o.line).text.length,o.ch+p(h).length)):Ah&&Ah.lineWise&&Ah.text.join("\n")==b&&(n=o=H(n.line,0))),k=a.curOp.updateInput;var r={from:n,to:o,text:i?i[l%i.length]:h,origin:e||(g?"paste":a.state.cutIncoming?"cut":"+input")};xe(a.doc,r),yb(a,"inputRead",a,r)}b&&!g&&Nf(a,b),ad(a),a.curOp.updateInput=k,a.curOp.typing=!0,a.state.pasteIncoming=a.state.cutIncoming=!1}function Mf(a,b){var c=a.clipboardData&&a.clipboardData.getData("Text");if(c)return a.preventDefault(),b.isReadOnly()||b.options.disableInput||kd(b,function(){return Lf(b,c,0,null,"paste")}),!0}function Nf(a,b){if(a.options.electricChars&&a.options.smartIndent)for(var c=a.doc.sel,d=c.ranges.length-1;d>=0;d--){var e=c.ranges[d];if(!(e.head.ch>100||d&&c.ranges[d-1].head.line==e.head.line)){var f=a.getModeAt(e.head),g=!1;if(f.electricChars){for(var h=0;h-1){g=Jf(a,e.head.line,"smart");break}}else f.electricInput&&f.electricInput.test(z(a.doc,e.head.line).text.slice(0,e.head.ch))&&(g=Jf(a,e.head.line,"smart"));g&&yb(a,"electricInput",a,e.head.line)}}}function Of(a){for(var b=[],c=[],d=0;dd&&(Jf(b,f.head.line,a,!0),d=f.head.line,e==b.doc.sel.primIndex&&ad(b));else{var g=f.from(),h=f.to(),i=Math.max(d,g.line);d=Math.min(b.lastLine(),h.line-(h.ch?0:1))+1;for(var j=i;j0&&je(b.doc,e,new Hd(g,k[e].to()),Eg)}}}),getTokenAt:function(a,b){return eb(this,a,b)},getLineTokens:function(a,b){return eb(this,H(a),b,!0)},getTokenTypeAt:function(a){a=N(this.doc,a);var b,c=_a(this,z(this.doc,a.line)),d=0,e=(c.length-1)/2,f=a.ch;if(0==f)b=c[2];else for(;;){var g=d+e>>1;if((g?c[2*g-1]:0)>=f)e=g;else{if(!(c[2*g+1]f&&(a=f,e=!0),d=z(this.doc,a)}else d=a;return ic(this,d,{top:0,left:0},b||"page",c).top+(e?this.doc.height-oa(d):0)},defaultTextHeight:function(){return qc(this.display)},defaultCharWidth:function(){return rc(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(a,b,c,d,e){var f=this.display;a=lc(this,N(this.doc,a));var g=a.bottom,h=a.left;if(b.style.position="absolute",b.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(b),f.sizer.appendChild(b),"over"==d)g=a.top;else if("above"==d||"near"==d){var i=Math.max(f.wrapper.clientHeight,this.doc.height),j=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);("above"==d||a.bottom+b.offsetHeight>i)&&a.top>b.offsetHeight?g=a.top-b.offsetHeight:a.bottom+b.offsetHeight<=i&&(g=a.bottom),h+b.offsetWidth>j&&(h=j-b.offsetWidth)}b.style.top=g+"px",b.style.left=b.style.right="","right"==e?(h=f.sizer.clientWidth-b.offsetWidth,b.style.right="0px"):("left"==e?h=0:"middle"==e&&(h=(f.sizer.clientWidth-b.offsetWidth)/2),b.style.left=h+"px"),c&&Zc(this,h,g,h+b.offsetWidth,g+b.offsetHeight)},triggerOnKeyDown:md(qf),triggerOnKeyPress:md(tf),triggerOnKeyUp:sf,execCommand:function(a){if(th.hasOwnProperty(a))return th[a].call(null,this)},triggerElectric:md(function(a){Nf(this,a)}),findPosH:function(a,b,c,d){var e=this,f=1;b<0&&(f=-1,b=-b);for(var g=N(this.doc,a),h=0;h0&&h(c.charAt(d-1));)--d;for(;e.5)&&vc(this),Ea(this,"refresh",this)}),swapDoc:md(function(a){var b=this.doc;return b.cm=null,Ud(this,a),fc(this),this.display.input.reset(),this.scrollTo(a.scrollLeft,a.scrollTop),this.curOp.forceScroll=!0,yb(this,"swapDoc",this,b),b}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Ia(a),a.registerHelper=function(b,d,e){c.hasOwnProperty(b)||(c[b]=a[b]={_global:[]}),c[b][d]=e},a.registerGlobalHelper=function(b,d,e,f){a.registerHelper(b,d,f),c[b]._global.push({pred:e,val:f})}}function Sf(a,b,c,d,e){function f(){var b=h+c;return!(b=a.first+a.size)&&(h=b,k=z(a,b))}function g(a){var b=(e?za:Aa)(k,i,c,!0);if(null==b){if(a||!f())return!1;i=e?(c<0?va:ua)(k):c<0?k.text.length:0}else i=b;return!0}var h=b.line,i=b.ch,j=c,k=z(a,h);if("char"==d)g();else if("column"==d)g(!0);else if("word"==d||"group"==d)for(var l=null,m="group"==d,n=a.cm&&a.cm.getHelper(b,"wordChars"),o=!0;!(c<0)||g(!o);o=!1){var p=k.text.charAt(i)||"\n",q=v(p,n)?"w":m&&"\n"==p?"n":!m||/\s/.test(p)?null:"p";if(!m||o||q||(q="s"),l&&l!=q){c<0&&(c=1,g());break}if(q&&(l=q),c>0&&!g(!o))break}var r=te(a,H(h,i),b,j,!0);return I(b,r)||(r.hitSide=!0),r}function Tf(a,b,c,d){var e,f=a.doc,g=b.left;if("page"==d){var h=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),i=Math.max(h-.5*qc(a.display),3);e=(c>0?b.bottom:b.top)+c*i}else"line"==d&&(e=c>0?b.bottom+3:b.top-3);for(var j;j=oc(a,g,e),j.outside;){if(c<0?e<=0:e>=f.height){j.hitSide=!0;break}e+=5*c}return j}function Uf(a){this.cm=a,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new l,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null}function Vf(a,b){var c=Yb(a,b.line);if(!c||c.hidden)return null;var d=z(a.doc,b.line),e=Vb(c,d,b.line),f=Ba(d),g="left";if(f){var h=xa(f,b.ch);g=h%2?"right":"left"}var i=_b(e.map,b.ch,g);return i.offset="right"==i.collapse?i.end:i.start,i}function Wf(a,b){return b&&(a.bad=!0),a}function Xf(a,b,c,d,e){function f(a){return function(b){return b.id==a}}function g(b){if(1==b.nodeType){var c=b.getAttribute("cm-text");if(null!=c)return void(h+=""==c?b.textContent.replace(/\u200b/g,""):c);var k,l=b.getAttribute("cm-marker");if(l){var m=a.findMarks(H(d,0),H(e+1,0),f(+l));return void(m.length&&(k=m[0].find())&&(h+=A(a.doc,k.from,k.to).join(j)))}if("false"==b.getAttribute("contenteditable"))return;for(var n=0;n=15&&(lg=!1,ig=!0);var vg,wg=rg&&(jg||lg&&(null==ug||ug<12.11)),xg=dg||gg&&hg>=9,yg=function(b,c){var d=b.className,e=a(c).exec(d);if(e){var f=d.slice(e.index+e[0].length);b.className=d.slice(0,e.index)+(f?e[1]+f:"")}};vg=document.createRange?function(a,b,c,d){var e=document.createRange();return e.setEnd(d||a,c),e.setStart(a,b),e}:function(a,b,c){var d=document.body.createTextRange();try{d.moveToElementText(a.parentNode)}catch(e){return d}return d.collapse(!0),d.moveEnd("character",c),d.moveStart("character",b),d};var zg=function(a){a.select()};pg?zg=function(a){a.selectionStart=0,a.selectionEnd=a.value.length}:gg&&(zg=function(a){try{a.select()}catch(b){}}),l.prototype.set=function(a,b){clearTimeout(this.id),this.id=setTimeout(b,a)};var Ag,Bg,Cg=30,Dg={toString:function(){return"CodeMirror.Pass"}},Eg={scroll:!1},Fg={origin:"*mouse"},Gg={origin:"+move"},Hg=[""],Ig=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Jg=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,Kg=!1,Lg=!1,Mg=null,Ng=function(){function a(a){return a<=247?c.charAt(a):1424<=a&&a<=1524?"R":1536<=a&&a<=1773?d.charAt(a-1536):1774<=a&&a<=2220?"r":8192<=a&&a<=8203?"w":8204==a?"b":"L"}function b(a,b,c){this.level=a,this.from=b,this.to=c}var c="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",d="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm",e=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,f=/[stwN]/,g=/[LRr]/,h=/[Lb1n]/,i=/[1n]/,j="L";return function(c){if(!e.test(c))return!1;for(var d=c.length,k=[],l=0;l=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){if(this.posb},eatSpace:function(){for(var a=this,b=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++a.pos;return this.pos>b},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);if(b>-1)return this.pos=b,!0},backUp:function(a){this.pos-=a},column:function(){return this.lastColumnPos0?null:(d&&b!==!1&&(this.pos+=d[0].length),d)}var e=function(a){return c?a.toLowerCase():a},f=this.string.substr(this.pos,a.length);if(e(f)==e(a))return b!==!1&&(this.pos+=a.length),!0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(a,b){this.lineStart+=a;try{return b()}finally{this.lineStart-=a}}},Ia(ib),ib.prototype.lineNo=function(){return D(this)};var Zg,$g={},_g={},ah=null,bh=null,ch={left:0,right:0,top:0,bottom:0},dh=0,eh=null;gg?eh=-.53:dg?eh=15:kg?eh=-.7:mg&&(eh=-1/3),Sc.prototype=j({update:function(a){var b=a.scrollWidth>a.clientWidth+1,c=a.scrollHeight>a.clientHeight+1,d=a.nativeBarWidth;if(c){this.vert.style.display="block",this.vert.style.bottom=b?d+"px":"0";var e=a.viewHeight-(b?d:0);this.vert.firstChild.style.height=Math.max(0,a.scrollHeight-a.clientHeight+e)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(b){this.horiz.style.display="block",this.horiz.style.right=c?d+"px":"0",this.horiz.style.left=a.barLeft+"px";var f=a.viewWidth-a.barLeft-(c?d:0);this.horiz.firstChild.style.width=a.scrollWidth-a.clientWidth+f+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&a.clientHeight>0&&(0==d&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:c?d:0,bottom:b?d:0}},setScrollLeft:function(a){this.horiz.scrollLeft!=a&&(this.horiz.scrollLeft=a),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz)},setScrollTop:function(a){this.vert.scrollTop!=a&&(this.vert.scrollTop=a),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert)},zeroWidthHack:function(){var a=rg&&!ng?"12px":"18px";this.horiz.style.height=this.vert.style.width=a,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new l,this.disableVert=new l},enableZeroWidthBar:function(a,b){function c(){var d=a.getBoundingClientRect(),e=document.elementFromPoint(d.left+1,d.bottom-1);e!=a?a.style.pointerEvents="none":b.set(1e3,c)}a.style.pointerEvents="auto",b.set(1e3,c)},clear:function(){var a=this.horiz.parentNode;a.removeChild(this.horiz),a.removeChild(this.vert)}},Sc.prototype),Tc.prototype=j({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},Tc.prototype);var fh={"native":Sc,"null":Tc},gh=0;wd.prototype.signal=function(a,b){Ha(a,b)&&this.events.push(arguments)},wd.prototype.finish=function(){for(var a=this,b=0;b=0&&I(a,e.to())<=0)return d}return-1}},Hd.prototype={from:function(){return L(this.anchor,this.head)},to:function(){return K(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}},Ie.prototype={chunkSize:function(){return this.lines.length},removeInner:function(a,b){ +for(var c=this,d=a,e=a+b;d1||!(this.children[0]instanceof Ie))){var i=[];this.collapse(i),this.children=[new Ie(i)],this.children[0].parent=this}},collapse:function(a){for(var b=this,c=0;c50){for(var h=f.lines.length%25+25,i=h;i10);a.parent.maybeSpill()}},iterN:function(a,b,c){for(var d=this,e=0;eb.display.maxLineLength&&(b.display.maxLine=k,b.display.maxLineLength=l,b.display.maxLineChanged=!0)}null!=e&&b&&this.collapsed&&od(b,e,f+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,b&&qe(b.doc)),b&&yb(b,"markerCleared",b,this),c&&dd(b),this.parent&&this.parent.clear()}},Ne.prototype.find=function(a,b){var c=this;null==a&&"bookmark"==this.type&&(a=1);for(var d,e,f=0;f=0;j--)xe(d,e[j]);i?me(this,i):this.cm&&ad(this.cm)}),undo:nd(function(){ze(this,"undo")}),redo:nd(function(){ze(this,"redo")}),undoSelection:nd(function(){ze(this,"undo",!0)}),redoSelection:nd(function(){ze(this,"redo",!0)}),setExtending:function(a){this.extend=a},getExtending:function(){return this.extend},historySize:function(){for(var a=this.history,b=0,c=0,d=0;d=a.ch)&&b.push(e.marker.parent||e.marker)}return b},findMarks:function(a,b,c){a=N(this,a),b=N(this,b);var d=[],e=a.line;return this.iter(a.line,b.line+1,function(f){var g=f.markedSpans;if(g)for(var h=0;h=i.to||null==i.from&&e!=a.line||null!=i.from&&e==b.line&&i.from>=b.ch||c&&!c(i.marker)||d.push(i.marker.parent||i.marker)}++e}),d},getAllMarks:function(){var a=[];return this.iter(function(b){var c=b.markedSpans;if(c)for(var d=0;da?(b=a,!0):(a-=f,void++c)}),N(this,H(c,b))},indexFromPos:function(a){a=N(this,a);var b=a.ch;if(a.lineb&&(b=a.from),null!=a.to&&a.to0)e=new H(e.line,e.ch+1),a.replaceRange(f.charAt(e.ch-1)+f.charAt(e.ch-2),H(e.line,e.ch-2),e,"+transpose");else if(e.line>a.doc.first){var g=z(a.doc,e.line-1).text;g&&(e=new H(e.line,1),a.replaceRange(f.charAt(0)+a.doc.lineSeparator()+g.charAt(g.length-1),H(e.line-1,g.length-1),e,"+transpose"))}c.push(new Hd(e,e))}a.setSelections(c)})},newlineAndIndent:function(a){return kd(a,function(){for(var b=a.listSelections(),c=b.length-1;c>=0;c--)a.replaceRange(a.doc.lineSeparator(),b[c].anchor,b[c].head,"+input");b=a.listSelections();for(var d=0;da.firstLine()&&(d=H(d.line-1,z(a.doc,d.line-1).length)),e.ch==z(a.doc,e.line).text.length&&e.lineb.viewTo-1)return!1;var f,g,h;d.line==b.viewFrom||0==(f=xc(a,d.line))?(g=D(b.view[0].line),h=b.view[0].node):(g=D(b.view[f].line),h=b.view[f-1].node.nextSibling);var i,j,k=xc(a,e.line);if(k==b.view.length-1?(i=b.viewTo-1,j=b.lineDiv.lastChild):(i=D(b.view[k+1].line)-1,j=b.view[k+1].node.previousSibling),!h)return!1;for(var l=a.doc.splitLines(Xf(a,h,j,g,i)),m=A(a.doc,H(g,0),H(i,z(a.doc,i).text.length));l.length>1&&m.length>1;)if(p(l)==p(m))l.pop(),m.pop(),i--;else{if(l[0]!=m[0])break;l.shift(),m.shift(),g++}for(var n=0,o=0,q=l[0],r=m[0],s=Math.min(q.length,r.length);n1||l[0]||I(w,x)?(De(a.doc,l,w,x,"+input"),!0):void 0},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){this.composing&&(this.composing=null,this.pollContent()||od(this.cm),this.div.blur(),this.div.focus())},readFromDOMSoon:function(){var a=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){a.readDOMTimeout=null,a.composing||!a.cm.isReadOnly()&&a.pollContent()||kd(a.cm,function(){return od(a.cm)})},80))},setUneditable:function(a){a.contentEditable="false"},onKeyPress:function(a){a.preventDefault(),this.cm.isReadOnly()||ld(this.cm,Lf)(this.cm,String.fromCharCode(null==a.charCode?a.keyCode:a.charCode),0)},readOnlyChanged:function(a){this.div.contentEditable=String("nocursor"!=a)},onContextMenu:s,resetPosition:s,needsContentAttribute:!0},Uf.prototype),$f.prototype=j({init:function(a){function b(a){if(!Fa(e,a)){if(e.somethingSelected())Kf({lineWise:!1,text:e.getSelections()}),d.inaccurateSelection&&(d.prevInput="",d.inaccurateSelection=!1,g.value=Ah.text.join("\n"),zg(g));else{if(!e.options.lineWiseCopyCut)return;var b=Of(e);Kf({lineWise:!0,text:b.text}),"cut"==a.type?e.setSelections(b.ranges,null,Eg):(d.prevInput="",g.value=b.text.join("\n"),zg(g))}"cut"==a.type&&(e.state.cutIncoming=!0)}}var c=this,d=this,e=this.cm,f=this.wrapper=Qf(),g=this.textarea=f.firstChild;a.wrapper.insertBefore(f,a.wrapper.firstChild),pg&&(g.style.width="0px"),Pg(g,"input",function(){gg&&hg>=9&&c.hasSelection&&(c.hasSelection=null),d.poll()}),Pg(g,"paste",function(a){Fa(e,a)||Mf(a,e)||(e.state.pasteIncoming=!0,d.fastPoll())}),Pg(g,"cut",b),Pg(g,"copy",b),Pg(a.scroller,"paste",function(b){Nb(a,b)||Fa(e,b)||(e.state.pasteIncoming=!0,d.focus())}),Pg(a.lineSpace,"selectstart",function(b){Nb(a,b)||Ja(b)}),Pg(g,"compositionstart",function(){var a=e.getCursor("from");d.composing&&d.composing.range.clear(),d.composing={start:a,range:e.markText(a,e.getCursor("to"),{className:"CodeMirror-composing"})}}),Pg(g,"compositionend",function(){d.composing&&(d.poll(),d.composing.range.clear(),d.composing=null)})},prepareSelection:function(){var a=this.cm,b=a.display,c=a.doc,d=zc(a);if(a.options.moveInputWithCursor){var e=lc(a,c.sel.primary().head,"div"),f=b.wrapper.getBoundingClientRect(),g=b.lineDiv.getBoundingClientRect();d.teTop=Math.max(0,Math.min(b.wrapper.clientHeight-10,e.top+g.top-f.top)),d.teLeft=Math.max(0,Math.min(b.wrapper.clientWidth-10,e.left+g.left-f.left))}return d},showSelection:function(a){var b=this.cm,d=b.display;c(d.cursorDiv,a.cursors),c(d.selectionDiv,a.selection),null!=a.teTop&&(this.wrapper.style.top=a.teTop+"px",this.wrapper.style.left=a.teLeft+"px")},reset:function(a){if(!this.contextMenuPending){var b,c,d=this.cm,e=d.doc;if(d.somethingSelected()){this.prevInput="";var f=e.sel.primary();b=Tg&&(f.to().line-f.from().line>100||(c=d.getSelection()).length>1e3);var g=b?"-":c||d.getSelection();this.textarea.value=g,d.state.focused&&zg(this.textarea),gg&&hg>=9&&(this.hasSelection=g)}else a||(this.prevInput=this.textarea.value="",gg&&hg>=9&&(this.hasSelection=null));this.inaccurateSelection=b}},getField:function(){return this.textarea},supportsTouch:function(){return!1},focus:function(){if("nocursor"!=this.cm.options.readOnly&&(!qg||f()!=this.textarea))try{this.textarea.focus()}catch(a){}},blur:function(){this.textarea.blur()},resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var a=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){a.poll(),a.cm.state.focused&&a.slowPoll()})},fastPoll:function(){function a(){var d=c.poll();d||b?(c.pollingFast=!1,c.slowPoll()):(b=!0,c.polling.set(60,a))}var b=!1,c=this;c.pollingFast=!0,c.polling.set(20,a)},poll:function(){var a=this,b=this.cm,c=this.textarea,d=this.prevInput;if(this.contextMenuPending||!b.state.focused||Sg(c)&&!d&&!this.composing||b.isReadOnly()||b.options.disableInput||b.state.keySeq)return!1;var e=c.value;if(e==d&&!b.somethingSelected())return!1;if(gg&&hg>=9&&this.hasSelection===e||rg&&/[\uf700-\uf7ff]/.test(e))return b.display.input.reset(),!1;if(b.doc.sel==b.display.selForContextMenu){var f=e.charCodeAt(0);if(8203!=f||d||(d="​"),8666==f)return this.reset(),this.cm.execCommand("undo")}for(var g=0,h=Math.min(d.length,e.length);g1e3||e.indexOf("\n")>-1?c.value=a.prevInput="":a.prevInput=e,a.composing&&(a.composing.range.clear(),a.composing.range=b.markText(a.composing.start,b.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},ensurePolled:function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},onKeyPress:function(){gg&&hg>=9&&(this.hasSelection=null),this.fastPoll()},onContextMenu:function(a){function b(){if(null!=g.selectionStart){var a=e.somethingSelected(),b="​"+(a?g.value:"");g.value="⇚",g.value=b,d.prevInput=a?"":"​",g.selectionStart=1,g.selectionEnd=b.length,f.selForContextMenu=e.doc.sel}}function c(){if(d.contextMenuPending=!1,d.wrapper.style.cssText=l,g.style.cssText=k,gg&&hg<9&&f.scrollbars.setScrollTop(f.scroller.scrollTop=i),null!=g.selectionStart){(!gg||gg&&hg<9)&&b();var a=0,c=function(){f.selForContextMenu==e.doc.sel&&0==g.selectionStart&&g.selectionEnd>0&&"​"==d.prevInput?ld(e,ve)(e):a++<10?f.detectingSelectAll=setTimeout(c,500):f.input.reset()};f.detectingSelectAll=setTimeout(c,200)}}var d=this,e=d.cm,f=e.display,g=d.textarea,h=wc(e,a),i=f.scroller.scrollTop;if(h&&!lg){ +var j=e.options.resetSelectionOnContextMenu;j&&e.doc.sel.contains(h)==-1&&ld(e,ne)(e.doc,Jd(h),Eg);var k=g.style.cssText,l=d.wrapper.style.cssText;d.wrapper.style.cssText="position: absolute";var m=d.wrapper.getBoundingClientRect();g.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(a.clientY-m.top-5)+"px; left: "+(a.clientX-m.left-5)+"px;\n z-index: 1000; background: "+(gg?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var n;if(ig&&(n=window.scrollY),f.input.focus(),ig&&window.scrollTo(null,n),f.input.reset(),e.somethingSelected()||(g.value=d.prevInput=" "),d.contextMenuPending=!0,f.selForContextMenu=e.doc.sel,clearTimeout(f.detectingSelectAll),gg&&hg>=9&&b(),xg){Ma(a);var o=function(){Da(window,"mouseup",o),setTimeout(c,20)};Pg(window,"mouseup",o)}else setTimeout(c,50)}},readOnlyChanged:function(a){a||this.reset()},setUneditable:s,needsContentAttribute:!1},$f.prototype),Df(Hf),Rf(Hf);var Bh="iter insert remove copy getEditor constructor".split(" ");for(var Ch in jh.prototype)jh.prototype.hasOwnProperty(Ch)&&m(Bh,Ch)<0&&(Hf.prototype[Ch]=function(a){return function(){return a.apply(this.doc,arguments)}}(jh.prototype[Ch]));return Ia(jh),Hf.inputStyles={textarea:$f,contenteditable:Uf},Hf.defineMode=function(a){Hf.defaults.mode||"null"==a||(Hf.defaults.mode=a),Sa.apply(this,arguments)},Hf.defineMIME=Ta,Hf.defineMode("null",function(){return{token:function(a){return a.skipToEnd()}}}),Hf.defineMIME("text/plain","null"),Hf.defineExtension=function(a,b){Hf.prototype[a]=b},Hf.defineDocExtension=function(a,b){jh.prototype[a]=b},Hf.fromTextArea=_f,ag(Hf),Hf.version="5.21.0",Hf}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("../../lib/codemirror")):"function"==typeof c&&c.amd?c("codemirror/mode/xml/xml",["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";var b={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},c={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,caseFold:!1};a.defineMode("xml",function(d,e){function f(a,b){function c(c){return b.tokenize=c,c(a,b)}var d=a.next();if("<"==d)return a.eat("!")?a.eat("[")?a.match("CDATA[")?c(i("atom","]]>")):null:a.match("--")?c(i("comment","-->")):a.match("DOCTYPE",!0,!0)?(a.eatWhile(/[\w\._\-]/),c(j(1))):null:a.eat("?")?(a.eatWhile(/[\w\._\-]/),b.tokenize=i("meta","?>"),"meta"):(A=a.eat("/")?"closeTag":"openTag",b.tokenize=g,"tag bracket");if("&"==d){var e;return e=a.eat("#")?a.eat("x")?a.eatWhile(/[a-fA-F\d]/)&&a.eat(";"):a.eatWhile(/[\d]/)&&a.eat(";"):a.eatWhile(/[\w\.\-:]/)&&a.eat(";"),e?"atom":"error"}return a.eatWhile(/[^&<]/),null}function g(a,b){var c=a.next();if(">"==c||"/"==c&&a.eat(">"))return b.tokenize=f,A=">"==c?"endTag":"selfcloseTag","tag bracket";if("="==c)return A="equals",null;if("<"==c){b.tokenize=f,b.state=n,b.tagName=b.tagStart=null;var d=b.tokenize(a,b);return d?d+" tag error":"tag error"}return/[\'\"]/.test(c)?(b.tokenize=h(c),b.stringStartCol=a.column(),b.tokenize(a,b)):(a.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function h(a){var b=function(b,c){for(;!b.eol();)if(b.next()==a){c.tokenize=g;break}return"string"};return b.isInAttribute=!0,b}function i(a,b){return function(c,d){for(;!c.eol();){if(c.match(b)){d.tokenize=f;break}c.next()}return a}}function j(a){return function(b,c){for(var d;null!=(d=b.next());){if("<"==d)return c.tokenize=j(a+1),c.tokenize(b,c);if(">"==d){if(1==a){c.tokenize=f;break}return c.tokenize=j(a-1),c.tokenize(b,c)}}return"meta"}}function k(a,b,c){this.prev=a.context,this.tagName=b,this.indent=a.indented,this.startOfLine=c,(x.doNotIndent.hasOwnProperty(b)||a.context&&a.context.noIndent)&&(this.noIndent=!0)}function l(a){a.context&&(a.context=a.context.prev)}function m(a,b){for(var c;;){if(!a.context)return;if(c=a.context.tagName,!x.contextGrabbers.hasOwnProperty(c)||!x.contextGrabbers[c].hasOwnProperty(b))return;l(a)}}function n(a,b,c){return"openTag"==a?(c.tagStart=b.column(),o):"closeTag"==a?p:n}function o(a,b,c){return"word"==a?(c.tagName=b.current(),B="tag",s):(B="error",o)}function p(a,b,c){if("word"==a){var d=b.current();return c.context&&c.context.tagName!=d&&x.implicitlyClosed.hasOwnProperty(c.context.tagName)&&l(c),c.context&&c.context.tagName==d||x.matchClosing===!1?(B="tag",q):(B="tag error",r)}return B="error",r}function q(a,b,c){return"endTag"!=a?(B="error",q):(l(c),n)}function r(a,b,c){return B="error",q(a,b,c)}function s(a,b,c){if("word"==a)return B="attribute",t;if("endTag"==a||"selfcloseTag"==a){var d=c.tagName,e=c.tagStart;return c.tagName=c.tagStart=null,"selfcloseTag"==a||x.autoSelfClosers.hasOwnProperty(d)?m(c,d):(m(c,d),c.context=new k(c,d,e==c.indented)),n}return B="error",s}function t(a,b,c){return"equals"==a?u:(x.allowMissing||(B="error"),s(a,b,c))}function u(a,b,c){return"string"==a?v:"word"==a&&x.allowUnquoted?(B="string",s):(B="error",s(a,b,c))}function v(a,b,c){return"string"==a?v:s(a,b,c)}var w=d.indentUnit,x={},y=e.htmlMode?b:c;for(var z in y)x[z]=y[z];for(var z in e)x[z]=e[z];var A,B;return f.isInText=!0,{startState:function(a){var b={tokenize:f,state:n,indented:a||0,tagName:null,tagStart:null,context:null};return null!=a&&(b.baseIndent=a),b},token:function(a,b){if(!b.tagName&&a.sol()&&(b.indented=a.indentation()),a.eatSpace())return null;A=null;var c=b.tokenize(a,b);return(c||A)&&"comment"!=c&&(B=null,b.state=b.state(A||c,a,b),B&&(c="error"==B?c+" error":B)),c},indent:function(b,c,d){var e=b.context;if(b.tokenize.isInAttribute)return b.tagStart==b.indented?b.stringStartCol+1:b.indented+w;if(e&&e.noIndent)return a.Pass;if(b.tokenize!=g&&b.tokenize!=f)return d?d.match(/^(\s*)/)[0].length:0;if(b.tagName)return x.multilineTagIndentPastTag!==!1?b.tagStart+b.tagName.length+2:b.tagStart+w*(x.multilineTagIndentFactor||1);if(x.alignCDATA&&/$/,blockCommentStart:"",configuration:x.htmlMode?"html":"xml",helperType:x.htmlMode?"html":"xml",skipAttribute:function(a){a.state==u&&(a.state=s)}}}),a.defineMIME("text/xml","xml"),a.defineMIME("application/xml","xml"),a.mimeModes.hasOwnProperty("text/html")||a.defineMIME("text/html",{name:"xml",htmlMode:!0})}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("../../lib/codemirror")):"function"==typeof c&&c.amd?c("codemirror/mode/javascript/javascript",["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";function b(a,b,c){return/^(?:operator|sof|keyword c|case|new|[\[{}\(,;:]|=>)$/.test(b.lastType)||"quasi"==b.lastType&&/\{\s*$/.test(a.string.slice(0,a.pos-(c||0)))}a.defineMode("javascript",function(c,d){function e(a){for(var b,c=!1,d=!1;null!=(b=a.next());){if(!c){if("/"==b&&!d)return;"["==b?d=!0:d&&"]"==b&&(d=!1)}c=!c&&"\\"==b}}function f(a,b,c){return xa=a,ya=c,b}function g(a,c){var d=a.next();if('"'==d||"'"==d)return c.tokenize=h(d),c.tokenize(a,c);if("."==d&&a.match(/^\d+(?:[eE][+\-]?\d+)?/))return f("number","number");if("."==d&&a.match(".."))return f("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(d))return f(d);if("="==d&&a.eat(">"))return f("=>","operator");if("0"==d&&a.eat(/x/i))return a.eatWhile(/[\da-f]/i),f("number","number");if("0"==d&&a.eat(/o/i))return a.eatWhile(/[0-7]/i),f("number","number");if("0"==d&&a.eat(/b/i))return a.eatWhile(/[01]/i),f("number","number");if(/\d/.test(d))return a.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),f("number","number");if("/"==d)return a.eat("*")?(c.tokenize=i,i(a,c)):a.eat("/")?(a.skipToEnd(),f("comment","comment")):b(a,c,1)?(e(a),a.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/),f("regexp","string-2")):(a.eatWhile(Ga),f("operator","operator",a.current()));if("`"==d)return c.tokenize=j,j(a,c);if("#"==d)return a.skipToEnd(),f("error","error");if(Ga.test(d))return a.eatWhile(Ga),f("operator","operator",a.current());if(Ea.test(d)){a.eatWhile(Ea);var g=a.current(),k=Fa.propertyIsEnumerable(g)&&Fa[g];return k&&"."!=c.lastType?f(k.type,k.style,g):f("variable","variable",g)}}function h(a){return function(b,c){var d,e=!1;if(Ba&&"@"==b.peek()&&b.match(Ha))return c.tokenize=g,f("jsonld-keyword","meta");for(;null!=(d=b.next())&&(d!=a||e);)e=!e&&"\\"==d;return e||(c.tokenize=g),f("string","string")}}function i(a,b){for(var c,d=!1;c=a.next();){if("/"==c&&d){b.tokenize=g;break}d="*"==c}return f("comment","comment")}function j(a,b){for(var c,d=!1;null!=(c=a.next());){if(!d&&("`"==c||"$"==c&&a.eat("{"))){b.tokenize=g;break}d=!d&&"\\"==c}return f("quasi","string-2",a.current())}function k(a,b){b.fatArrowAt&&(b.fatArrowAt=null);var c=a.string.indexOf("=>",a.start);if(!(c<0)){if(Da){var d=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(a.string.slice(a.start,c));d&&(c=d.index)}for(var e=0,f=!1,g=c-1;g>=0;--g){var h=a.string.charAt(g),i=Ia.indexOf(h);if(i>=0&&i<3){if(!e){++g;break}if(0==--e){"("==h&&(f=!0);break}}else if(i>=3&&i<6)++e;else if(Ea.test(h))f=!0;else{if(/["'\/]/.test(h))return;if(f&&!e){++g;break}}}f&&!e&&(b.fatArrowAt=g)}}function l(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.prev=e,this.info=f,null!=d&&(this.align=d)}function m(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0;for(var d=a.context;d;d=d.prev)for(var c=d.vars;c;c=c.next)if(c.name==b)return!0}function n(a,b,c,d,e){var f=a.cc;for(Ka.state=a,Ka.stream=e,Ka.marked=null,Ka.cc=f,Ka.style=b,a.lexical.hasOwnProperty("align")||(a.lexical.align=!0);;){var g=f.length?f.pop():Ca?x:w;if(g(c,d)){for(;f.length&&f[f.length-1].lex;)f.pop()();return Ka.marked?Ka.marked:"variable"==c&&m(a,d)?"variable-2":b}}}function o(){for(var a=arguments.length-1;a>=0;a--)Ka.cc.push(arguments[a])}function p(){return o.apply(null,arguments),!0}function q(a){function b(b){for(var c=b;c;c=c.next)if(c.name==a)return!0;return!1}var c=Ka.state;if(Ka.marked="def",c.context){if(b(c.localVars))return;c.localVars={name:a,next:c.localVars}}else{if(b(c.globalVars))return;d.globalVars&&(c.globalVars={name:a,next:c.globalVars})}}function r(){Ka.state.context={prev:Ka.state.context,vars:Ka.state.localVars},Ka.state.localVars=La}function s(){Ka.state.localVars=Ka.state.context.vars,Ka.state.context=Ka.state.context.prev}function t(a,b){var c=function(){var c=Ka.state,d=c.indented;if("stat"==c.lexical.type)d=c.lexical.indented;else for(var e=c.lexical;e&&")"==e.type&&e.align;e=e.prev)d=e.indented;c.lexical=new l(d,Ka.stream.column(),a,null,c.lexical,b)};return c.lex=!0,c}function u(){var a=Ka.state;a.lexical.prev&&(")"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function v(a){function b(c){return c==a?p():";"==a?o():p(b)}return b}function w(a,b){return"var"==a?p(t("vardef",b.length),$,v(";"),u):"keyword a"==a?p(t("form"),z,w,u):"keyword b"==a?p(t("form"),w,u):"{"==a?p(t("}"),T,u):";"==a?p():"if"==a?("else"==Ka.state.lexical.info&&Ka.state.cc[Ka.state.cc.length-1]==u&&Ka.state.cc.pop()(),p(t("form"),z,w,u,da)):"function"==a?p(ja):"for"==a?p(t("form"),ea,w,u):"variable"==a?p(t("stat"),M):"switch"==a?p(t("form"),z,t("}","switch"),v("{"),T,u,u):"case"==a?p(x,v(":")):"default"==a?p(v(":")):"catch"==a?p(t("form"),r,v("("),ka,v(")"),w,u,s):"class"==a?p(t("form"),ma,u):"export"==a?p(t("stat"),qa,u):"import"==a?p(t("stat"),ra,u):"module"==a?p(t("form"),_,t("}"),v("{"),T,u,u):"type"==a?p(V,v("operator"),V,v(";")):"async"==a?p(w):o(t("stat"),x,v(";"),u)}function x(a){return A(a,!1)}function y(a){return A(a,!0)}function z(a){return"("!=a?o():p(t(")"),x,v(")"),u)}function A(a,b){if(Ka.state.fatArrowAt==Ka.stream.start){var c=b?I:H;if("("==a)return p(r,t(")"),R(_,")"),u,v("=>"),c,s);if("variable"==a)return o(r,_,v("=>"),c,s)}var d=b?E:D;return Ja.hasOwnProperty(a)?p(d):"function"==a?p(ja,d):"class"==a?p(t("form"),la,u):"keyword c"==a||"async"==a?p(b?C:B):"("==a?p(t(")"),B,v(")"),u,d):"operator"==a||"spread"==a?p(b?y:x):"["==a?p(t("]"),va,u,d):"{"==a?S(O,"}",null,d):"quasi"==a?o(F,d):"new"==a?p(J(b)):p()}function B(a){return a.match(/[;\}\)\],]/)?o():o(x)}function C(a){return a.match(/[;\}\)\],]/)?o():o(y)}function D(a,b){return","==a?p(x):E(a,b,!1)}function E(a,b,c){var d=0==c?D:E,e=0==c?x:y;return"=>"==a?p(r,c?I:H,s):"operator"==a?/\+\+|--/.test(b)?p(d):"?"==b?p(x,v(":"),e):p(e):"quasi"==a?o(F,d):";"!=a?"("==a?S(y,")","call",d):"."==a?p(N,d):"["==a?p(t("]"),B,v("]"),u,d):void 0:void 0}function F(a,b){return"quasi"!=a?o():"${"!=b.slice(b.length-2)?p(F):p(x,G)}function G(a){if("}"==a)return Ka.marked="string-2",Ka.state.tokenize=j,p(F)}function H(a){return k(Ka.stream,Ka.state),o("{"==a?w:x)}function I(a){return k(Ka.stream,Ka.state),o("{"==a?w:y)}function J(a){return function(b){return"."==b?p(a?L:K):o(a?y:x)}}function K(a,b){if("target"==b)return Ka.marked="keyword",p(D)}function L(a,b){if("target"==b)return Ka.marked="keyword",p(E)}function M(a){return":"==a?p(u,w):o(D,v(";"),u)}function N(a){if("variable"==a)return Ka.marked="property",p()}function O(a,b){return"async"==a?(Ka.marked="property",p(O)):"variable"==a||"keyword"==Ka.style?(Ka.marked="property",p("get"==b||"set"==b?P:Q)):"number"==a||"string"==a?(Ka.marked=Ba?"property":Ka.style+" property",p(Q)):"jsonld-keyword"==a?p(Q):"modifier"==a?p(O):"["==a?p(x,v("]"),Q):"spread"==a?p(x):":"==a?o(Q):void 0}function P(a){return"variable"!=a?o(Q):(Ka.marked="property",p(ja))}function Q(a){return":"==a?p(y):"("==a?o(ja):void 0}function R(a,b){function c(d,e){if(","==d){var f=Ka.state.lexical;return"call"==f.info&&(f.pos=(f.pos||0)+1),p(function(c,d){return c==b||d==b?o():o(a)},c)}return d==b||e==b?p():p(v(b))}return function(d,e){return d==b||e==b?p():o(a,c)}}function S(a,b,c){for(var d=3;d"==a)return p(V)}function X(a){return"variable"==a||"keyword"==Ka.style?(Ka.marked="property",p(X)):":"==a?p(V):void 0}function Y(a){return"variable"==a?p(Y):":"==a?p(V):void 0}function Z(a,b){return"<"==b?p(R(V,">"),Z):"["==a?p(v("]"),Z):void 0}function $(){return o(_,U,ba,ca)}function _(a,b){return"modifier"==a?p(_):"variable"==a?(q(b),p()):"spread"==a?p(_):"["==a?S(_,"]"):"{"==a?S(aa,"}"):void 0}function aa(a,b){return"variable"!=a||Ka.stream.match(/^\s*:/,!1)?("variable"==a&&(Ka.marked="property"),"spread"==a?p(_):"}"==a?o():p(v(":"),_,ba)):(q(b),p(ba))}function ba(a,b){if("="==b)return p(y)}function ca(a){if(","==a)return p($)}function da(a,b){if("keyword b"==a&&"else"==b)return p(t("form","else"),w,u)}function ea(a){if("("==a)return p(t(")"),fa,v(")"),u)}function fa(a){return"var"==a?p($,v(";"),ha):";"==a?p(ha):"variable"==a?p(ga):o(x,v(";"),ha)}function ga(a,b){return"in"==b||"of"==b?(Ka.marked="keyword",p(x)):p(D,ha)}function ha(a,b){return";"==a?p(ia):"in"==b||"of"==b?(Ka.marked="keyword",p(x)):o(x,v(";"),ia)}function ia(a){")"!=a&&p(x)}function ja(a,b){return"*"==b?(Ka.marked="keyword",p(ja)):"variable"==a?(q(b),p(ja)):"("==a?p(r,t(")"),R(ka,")"),u,U,w,s):void 0}function ka(a){return"spread"==a?p(ka):o(_,U,ba)}function la(a,b){return"variable"==a?ma(a,b):na(a,b)}function ma(a,b){if("variable"==a)return q(b),p(na)}function na(a,b){return"extends"==b||"implements"==b?p(Da?V:x,na):"{"==a?p(t("}"),oa,u):void 0}function oa(a,b){return"variable"==a||"keyword"==Ka.style?("static"==b||"get"==b||"set"==b||Da&&("public"==b||"private"==b||"protected"==b||"readonly"==b||"abstract"==b))&&Ka.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(Ka.marked="keyword",p(oa)):(Ka.marked="property",p(Da?pa:ja,oa)):"*"==b?(Ka.marked="keyword",p(oa)):";"==a?p(oa):"}"==a?p():void 0}function pa(a,b){return"?"==b?p(pa):":"==a?p(V,ba):o(ja)}function qa(a,b){return"*"==b?(Ka.marked="keyword",p(ua,v(";"))):"default"==b?(Ka.marked="keyword",p(x,v(";"))):o(w)}function ra(a){return"string"==a?p():o(sa,ua)}function sa(a,b){return"{"==a?S(sa,"}"):("variable"==a&&q(b),"*"==b&&(Ka.marked="keyword"),p(ta))}function ta(a,b){if("as"==b)return Ka.marked="keyword",p(sa)}function ua(a,b){if("from"==b)return Ka.marked="keyword",p(x)}function va(a){return"]"==a?p():o(R(y,"]"))}function wa(a,b){return"operator"==a.lastType||","==a.lastType||Ga.test(b.charAt(0))||/[,.]/.test(b.charAt(0))}var xa,ya,za=c.indentUnit,Aa=d.statementIndent,Ba=d.jsonld,Ca=d.json||Ba,Da=d.typescript,Ea=d.wordCharacters||/[\w$\xa1-\uffff]/,Fa=function(){function a(a){return{type:a,style:"keyword"}}var b=a("keyword a"),c=a("keyword b"),d=a("keyword c"),e=a("operator"),f={type:"atom",style:"atom"},g={"if":a("if"),"while":b,"with":b,"else":c,"do":c,"try":c,"finally":c,"return":d,"break":d,"continue":d,"new":a("new"),"delete":d,"throw":d,"debugger":d,"var":a("var"),"const":a("var"),"let":a("var"),"function":a("function"),"catch":a("catch"),"for":a("for"),"switch":a("switch"),"case":a("case"),"default":a("default"),"in":e,"typeof":e,"instanceof":e,"true":f,"false":f,"null":f,undefined:f,NaN:f,Infinity:f,"this":a("this"),"class":a("class"),"super":a("atom"),"yield":d,"export":a("export"),"import":a("import"),"extends":d,await:d,async:a("async")};if(Da){var h={type:"variable",style:"variable-3"},i={"interface":a("class"),"implements":d,namespace:d,module:a("module"),"enum":a("module"),type:a("type"),"public":a("modifier"),"private":a("modifier"),"protected":a("modifier"),"abstract":a("modifier"),as:e,string:h,number:h,"boolean":h,any:h};for(var j in i)g[j]=i[j]}return g}(),Ga=/[+\-*&%=<>!?|~^]/,Ha=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/,Ia="([{}])",Ja={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,"this":!0,"jsonld-keyword":!0},Ka={state:null,column:null,marked:null,cc:null},La={name:"this",next:{name:"arguments"}};return u.lex=!0,{startState:function(a){var b={tokenize:g,lastType:"sof",cc:[],lexical:new l((a||0)-za,0,"block",(!1)),localVars:d.localVars,context:d.localVars&&{vars:d.localVars},indented:a||0};return d.globalVars&&"object"==typeof d.globalVars&&(b.globalVars=d.globalVars),b},token:function(a,b){if(a.sol()&&(b.lexical.hasOwnProperty("align")||(b.lexical.align=!1),b.indented=a.indentation(),k(a,b)),b.tokenize!=i&&a.eatSpace())return null;var c=b.tokenize(a,b);return"comment"==xa?c:(b.lastType="operator"!=xa||"++"!=ya&&"--"!=ya?xa:"incdec",n(b,c,xa,ya,a))},indent:function(b,c){if(b.tokenize==i)return a.Pass;if(b.tokenize!=g)return 0;var e,f=c&&c.charAt(0),h=b.lexical;if(!/^\s*else\b/.test(c))for(var j=b.cc.length-1;j>=0;--j){var k=b.cc[j];if(k==u)h=h.prev;else if(k!=da)break}for(;("stat"==h.type||"form"==h.type)&&("}"==f||(e=b.cc[b.cc.length-1])&&(e==D||e==E)&&!/^[,\.=+\-*:?[\(]/.test(c));)h=h.prev;Aa&&")"==h.type&&"stat"==h.prev.type&&(h=h.prev);var l=h.type,m=f==l;return"vardef"==l?h.indented+("operator"==b.lastType||","==b.lastType?h.info+1:0):"form"==l&&"{"==f?h.indented:"form"==l?h.indented+za:"stat"==l?h.indented+(wa(b,c)?Aa||za:0):"switch"!=h.info||m||0==d.doubleIndentSwitch?h.align?h.column+(m?0:1):h.indented+(m?0:za):h.indented+(/^(?:case|default)\b/.test(c)?za:2*za)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:Ca?null:"/*",blockCommentEnd:Ca?null:"*/",lineComment:Ca?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:Ca?"json":"javascript",jsonldMode:Ba,jsonMode:Ca,expressionAllowed:b,skipExpression:function(a){var b=a.cc[a.cc.length-1];b!=x&&b!=y||a.cc.pop()}}}),a.registerHelper("wordChars","javascript",/[\w$]/),a.defineMIME("text/javascript","javascript"),a.defineMIME("text/ecmascript","javascript"),a.defineMIME("application/javascript","javascript"),a.defineMIME("application/x-javascript","javascript"),a.defineMIME("application/ecmascript","javascript"),a.defineMIME("application/json",{name:"javascript",json:!0}),a.defineMIME("application/x-json",{name:"javascript",json:!0}),a.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),a.defineMIME("text/typescript",{name:"javascript",typescript:!0}),a.defineMIME("application/typescript",{name:"javascript",typescript:!0})}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("../../lib/codemirror")):"function"==typeof c&&c.amd?c("codemirror/mode/css/css",["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";function b(a){for(var b={},c=0;c*\/]/.test(c)?d(null,"select-op"):"."==c&&a.match(/^-?[_a-z][_a-z0-9-]*/i)?d("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(c)?d(null,c):"u"==c&&a.match(/rl(-prefix)?\(/)||"d"==c&&a.match("omain(")||"r"==c&&a.match("egexp(")?(a.backUp(1),b.tokenize=g,d("property","word")):/[\w\\\-]/.test(c)?(a.eatWhile(/[\w\\\-]/),d("property","word")):d(null,null):/[\d.]/.test(a.peek())?(a.eatWhile(/[\w.%]/),d("number","unit")):a.match(/^-[\w\\\-]+/)?(a.eatWhile(/[\w\\\-]/),a.match(/^\s*:/,!1)?d("variable-2","variable-definition"):d("variable-2","variable")):a.match(/^\w+-/)?d("meta","meta"):void 0}function f(a){return function(b,c){for(var e,f=!1;null!=(e=b.next());){if(e==a&&!f){")"==a&&b.backUp(1);break}f=!f&&"\\"==e}return(e==a||!f&&")"!=a)&&(c.tokenize=null),d("string","string")}}function g(a,b){return a.next(),a.match(/\s*[\"\')]/,!1)?b.tokenize=null:b.tokenize=f(")"),d(null,"(")}function h(a,b,c){this.type=a,this.indent=b,this.prev=c}function i(a,b,c,d){return a.context=new h(c,b.indentation()+(d===!1?0:q),a.context),c}function j(a){return a.context.prev&&(a.context=a.context.prev),a.context.type}function k(a,b,c){return E[c.context.type](a,b,c)}function l(a,b,c,d){for(var e=d||1;e>0;e--)c.context=c.context.prev;return k(a,b,c)}function m(a){var b=a.current().toLowerCase();p=B.hasOwnProperty(b)?"atom":A.hasOwnProperty(b)?"keyword":"variable"}var n=c.inline;c.propertyKeywords||(c=a.resolveMode("text/css"));var o,p,q=b.indentUnit,r=c.tokenHooks,s=c.documentTypes||{},t=c.mediaTypes||{},u=c.mediaFeatures||{},v=c.mediaValueKeywords||{},w=c.propertyKeywords||{},x=c.nonStandardPropertyKeywords||{},y=c.fontProperties||{},z=c.counterDescriptors||{},A=c.colorKeywords||{},B=c.valueKeywords||{},C=c.allowNested,D=c.supportsAtComponent===!0,E={};return E.top=function(a,b,c){if("{"==a)return i(c,b,"block");if("}"==a&&c.context.prev)return j(c);if(D&&/@component/.test(a))return i(c,b,"atComponentBlock");if(/^@(-moz-)?document$/.test(a))return i(c,b,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/.test(a))return i(c,b,"atBlock");if(/^@(font-face|counter-style)/.test(a))return c.stateArg=a,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(a))return"keyframes";if(a&&"@"==a.charAt(0))return i(c,b,"at");if("hash"==a)p="builtin";else if("word"==a)p="tag";else{if("variable-definition"==a)return"maybeprop";if("interpolation"==a)return i(c,b,"interpolation");if(":"==a)return"pseudo";if(C&&"("==a)return i(c,b,"parens")}return c.context.type},E.block=function(a,b,c){if("word"==a){var d=b.current().toLowerCase();return w.hasOwnProperty(d)?(p="property","maybeprop"):x.hasOwnProperty(d)?(p="string-2","maybeprop"):C?(p=b.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(p+=" error","maybeprop")}return"meta"==a?"block":C||"hash"!=a&&"qualifier"!=a?E.top(a,b,c):(p="error","block")},E.maybeprop=function(a,b,c){return":"==a?i(c,b,"prop"):k(a,b,c)},E.prop=function(a,b,c){if(";"==a)return j(c);if("{"==a&&C)return i(c,b,"propBlock");if("}"==a||"{"==a)return l(a,b,c);if("("==a)return i(c,b,"parens");if("hash"!=a||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(b.current())){if("word"==a)m(b);else if("interpolation"==a)return i(c,b,"interpolation")}else p+=" error";return"prop"},E.propBlock=function(a,b,c){return"}"==a?j(c):"word"==a?(p="property","maybeprop"):c.context.type},E.parens=function(a,b,c){return"{"==a||"}"==a?l(a,b,c):")"==a?j(c):"("==a?i(c,b,"parens"):"interpolation"==a?i(c,b,"interpolation"):("word"==a&&m(b),"parens")},E.pseudo=function(a,b,c){return"word"==a?(p="variable-3",c.context.type):k(a,b,c)},E.documentTypes=function(a,b,c){return"word"==a&&s.hasOwnProperty(b.current())?(p="tag",c.context.type):E.atBlock(a,b,c)},E.atBlock=function(a,b,c){if("("==a)return i(c,b,"atBlock_parens");if("}"==a||";"==a)return l(a,b,c);if("{"==a)return j(c)&&i(c,b,C?"block":"top");if("interpolation"==a)return i(c,b,"interpolation");if("word"==a){var d=b.current().toLowerCase();p="only"==d||"not"==d||"and"==d||"or"==d?"keyword":t.hasOwnProperty(d)?"attribute":u.hasOwnProperty(d)?"property":v.hasOwnProperty(d)?"keyword":w.hasOwnProperty(d)?"property":x.hasOwnProperty(d)?"string-2":B.hasOwnProperty(d)?"atom":A.hasOwnProperty(d)?"keyword":"error"}return c.context.type},E.atComponentBlock=function(a,b,c){return"}"==a?l(a,b,c):"{"==a?j(c)&&i(c,b,C?"block":"top",!1):("word"==a&&(p="error"),c.context.type)},E.atBlock_parens=function(a,b,c){return")"==a?j(c):"{"==a||"}"==a?l(a,b,c,2):E.atBlock(a,b,c)},E.restricted_atBlock_before=function(a,b,c){return"{"==a?i(c,b,"restricted_atBlock"):"word"==a&&"@counter-style"==c.stateArg?(p="variable","restricted_atBlock_before"):k(a,b,c)},E.restricted_atBlock=function(a,b,c){return"}"==a?(c.stateArg=null,j(c)):"word"==a?(p="@font-face"==c.stateArg&&!y.hasOwnProperty(b.current().toLowerCase())||"@counter-style"==c.stateArg&&!z.hasOwnProperty(b.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},E.keyframes=function(a,b,c){return"word"==a?(p="variable","keyframes"):"{"==a?i(c,b,"top"):k(a,b,c)},E.at=function(a,b,c){return";"==a?j(c):"{"==a||"}"==a?l(a,b,c):("word"==a?p="tag":"hash"==a&&(p="builtin"),"at")},E.interpolation=function(a,b,c){return"}"==a?j(c):"{"==a||";"==a?l(a,b,c):("word"==a?p="variable":"variable"!=a&&"("!=a&&")"!=a&&(p="error"),"interpolation")},{startState:function(a){return{tokenize:null,state:n?"block":"top",stateArg:null,context:new h(n?"block":"top",a||0,null)}},token:function(a,b){if(!b.tokenize&&a.eatSpace())return null;var c=(b.tokenize||e)(a,b);return c&&"object"==typeof c&&(o=c[1],c=c[0]),p=c,b.state=E[b.state](o,a,b),p},indent:function(a,b){var c=a.context,d=b&&b.charAt(0),e=c.indent;return"prop"!=c.type||"}"!=d&&")"!=d||(c=c.prev),c.prev&&("}"!=d||"block"!=c.type&&"top"!=c.type&&"interpolation"!=c.type&&"restricted_atBlock"!=c.type?(")"!=d||"parens"!=c.type&&"atBlock_parens"!=c.type)&&("{"!=d||"at"!=c.type&&"atBlock"!=c.type)||(e=Math.max(0,c.indent-q),c=c.prev):(c=c.prev,e=c.indent)),e},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace"}});var d=["domain","regexp","url","url-prefix"],e=b(d),f=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],g=b(f),h=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],i=b(h),j=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],k=b(j),l=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],m=b(l),n=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],o=b(n),p=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],q=b(p),r=["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"],s=b(r),t=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],u=b(t),v=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],w=b(v),x=d.concat(f).concat(h).concat(j).concat(l).concat(n).concat(t).concat(v); +a.registerHelper("hintWords","css",x),a.defineMIME("text/css",{documentTypes:e,mediaTypes:g,mediaFeatures:i,mediaValueKeywords:k,propertyKeywords:m,nonStandardPropertyKeywords:o,fontProperties:q,counterDescriptors:s,colorKeywords:u,valueKeywords:w,tokenHooks:{"/":function(a,b){return!!a.eat("*")&&(b.tokenize=c,c(a,b))}},name:"css"}),a.defineMIME("text/x-scss",{mediaTypes:g,mediaFeatures:i,mediaValueKeywords:k,propertyKeywords:m,nonStandardPropertyKeywords:o,colorKeywords:u,valueKeywords:w,fontProperties:q,allowNested:!0,tokenHooks:{"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=c,c(a,b)):["operator","operator"]},":":function(a){return!!a.match(/\s*\{/)&&[null,"{"]},$:function(a){return a.match(/^[\w-]+/),a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(a){return!!a.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),a.defineMIME("text/x-less",{mediaTypes:g,mediaFeatures:i,mediaValueKeywords:k,propertyKeywords:m,nonStandardPropertyKeywords:o,colorKeywords:u,valueKeywords:w,fontProperties:q,allowNested:!0,tokenHooks:{"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=c,c(a,b)):["operator","operator"]},"@":function(a){return a.eat("{")?[null,"interpolation"]:!a.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/,!1)&&(a.eatWhile(/[\w\\\-]/),a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),a.defineMIME("text/x-gss",{documentTypes:e,mediaTypes:g,mediaFeatures:i,propertyKeywords:m,nonStandardPropertyKeywords:o,fontProperties:q,counterDescriptors:s,colorKeywords:u,valueKeywords:w,supportsAtComponent:!0,tokenHooks:{"/":function(a,b){return!!a.eat("*")&&(b.tokenize=c,c(a,b))}},name:"css",helperType:"gss"})}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("../../lib/codemirror"),b("../xml/xml"),b("../javascript/javascript"),b("../css/css")):"function"==typeof c&&c.amd?c("codemirror/mode/htmlmixed/htmlmixed",["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],a):a(CodeMirror)}(function(a){"use strict";function b(a,b,c){var d=a.current(),e=d.search(b);return e>-1?a.backUp(d.length-e):d.match(/<\/?$/)&&(a.backUp(d.length),a.match(b,!1)||a.match(d)),c}function c(a){var b=i[a];return b?b:i[a]=new RegExp("\\s+"+a+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*")}function d(a,b){var d=a.match(c(b));return d?/^\s*(.*?)\s*$/.exec(d[2])[1]:""}function e(a,b){return new RegExp((b?"^":"")+"","i")}function f(a,b){for(var c in a)for(var d=b[c]||(b[c]=[]),e=a[c],f=e.length-1;f>=0;f--)d.unshift(e[f])}function g(a,b){for(var c=0;c\s\/]/.test(d.current())&&(h=f.htmlState.tagName&&f.htmlState.tagName.toLowerCase())&&k.hasOwnProperty(h))f.inTag=h+" ";else if(f.inTag&&m&&/>$/.test(d.current())){var n=/^([\S]+) (.*)/.exec(f.inTag);f.inTag=null;var o=">"==d.current()&&g(k[n[1]],n[2]),p=a.getMode(c,o),q=e(n[1],!0),r=e(n[1],!1);f.token=function(a,c){return a.match(q,!1)?(c.token=i,c.localState=c.localMode=null,null):b(a,r,c.localMode.token(a,c.localState))},f.localMode=p,f.localState=a.startState(p,j.indent(f.htmlState,""))}else f.inTag&&(f.inTag+=d.current(),d.eol()&&(f.inTag+=" "));return l}var j=a.getMode(c,{name:"xml",htmlMode:!0,multilineTagIndentFactor:d.multilineTagIndentFactor,multilineTagIndentPastTag:d.multilineTagIndentPastTag}),k={},l=d&&d.tags,m=d&&d.scriptTypes;if(f(h,k),l&&f(l,k),m)for(var n=m.length-1;n>=0;n--)k.script.unshift(["type",m[n].matches,m[n].mode]);return{startState:function(){var b=a.startState(j);return{token:i,inTag:null,localMode:null,localState:null,htmlState:b}},copyState:function(b){var c;return b.localState&&(c=a.copyState(b.localMode,b.localState)),{token:b.token,inTag:b.inTag,localMode:b.localMode,localState:c,htmlState:a.copyState(j,b.htmlState)}},token:function(a,b){return b.token(a,b)},indent:function(b,c){return!b.localMode||/^\s*<\//.test(c)?j.indent(b.htmlState,c):b.localMode.indent?b.localMode.indent(b.localState,c):a.Pass},innerMode:function(a){return{state:a.localState||a.htmlState,mode:a.localMode||j}}}},"xml","javascript","css"),a.defineMIME("text/html","htmlmixed")}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("codemirror/lib/codemirror")):"function"==typeof c&&c.amd?c("formatting",["codemirror/lib/codemirror"],a):a(CodeMirror)}(function(a){a.extendMode("css",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(a,b){return/^[;{}]$/.test(b)}}),a.extendMode("javascript",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(a,b,c,d){return this.jsonMode?/^[\[,{]$/.test(b)||/^}/.test(c):(";"!=b||!d.lexical||")"!=d.lexical.type)&&(/^[;{}]$/.test(b)&&!/^;/.test(c))}});var b=/^(a|abbr|acronym|area|base|bdo|big|br|button|caption|cite|code|col|colgroup|dd|del|dfn|em|frame|hr|iframe|img|input|ins|kbd|label|legend|link|map|object|optgroup|option|param|q|samp|script|select|small|span|strong|sub|sup|textarea|tt|var)$/;a.extendMode("xml",{commentStart:"",newlineAfterToken:function(a,c,d,e){var f=!1;return"html"==this.configuration&&(f=!!e.context&&b.test(e.context.tagName)),!f&&("tag"==a&&/>$/.test(c)&&e.context||/^-1&&h>-1&&h>g&&(a=a.substr(0,g)+a.substring(g+f.commentStart.length,h)+a.substr(h+f.commentEnd.length)),e.replaceRange(a,c,d)}})}),a.defineExtension("autoIndentRange",function(a,b){var c=this;this.operation(function(){for(var d=a.line;d<=b.line;d++)c.indentLine(d,"smart")})}),a.defineExtension("autoFormatRange",function(b,c){function d(){j+="\n",l=!0,++k}for(var e=this,f=e.getMode(),g=e.getRange(b,c).split("\n"),h=a.copyState(f,e.getTokenAt(b).state),i=e.getOption("tabSize"),j="",k=0,l=0===b.ch,m=0;m\n\t
    <%= label %>
    \n\t
    \n\n'}),c("CodeManager/view/EditorView",["backbone","text!./../template/editor.html"],function(a,b){return a.View.extend({template:_.template(b),initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix},render:function(){var a=this.model.toJSON();return a.pfx=this.pfx,this.$el.html(this.template(a)),this.$el.attr("class",this.pfx+"editor-c"),this.$el.find("#"+this.pfx+"code").html(this.model.get("input")),this}})}),c("CodeManager/main",["require","./config/config","./model/HtmlGenerator","./model/CssGenerator","./model/JsonGenerator","./model/CodeMirrorEditor","./view/EditorView"],function(a){var b=function(){var b={},c=a("./config/config"),d=a("./model/HtmlGenerator"),e=a("./model/CssGenerator"),f=a("./model/JsonGenerator"),g=a("./model/CodeMirrorEditor"),h=a("./view/EditorView"),i={},j={},k={},l={};return{getConfig:function(){return b},config:b,EditorView:h,name:"CodeManager",init:function(a){b=a||{};for(var h in c)h in b||(b[h]=c[h]);var i=b.pStylePrefix;return i&&(b.stylePrefix=i+b.stylePrefix),j.html=new d,j.css=new e,j.json=new f,l.CodeMirror=new g,this},onLoad:function(){this.loadDefaultGenerators().loadDefaultViewers()},addGenerator:function(a,b){return i[a]=b,this},getGenerator:function(a){return i[a]||null},getGenerators:function(){return i},addViewer:function(a,b){return k[a]=b,this},getViewer:function(a){return k[a]||null},getViewers:function(){return k},updateViewer:function(a,b){a.setContent(b)},getCode:function(a,b,c){var d=this.getGenerator(b);return d?d.build(a,c):""},loadDefaultGenerators:function(){for(var a in j)this.addGenerator(a,j[a]);return this},loadDefaultViewers:function(){for(var a in l)this.addViewer(a,l[a]);return this}}};return b}),c("CodeManager",["CodeManager/main"],function(a){return a}),c("Panels/config/config",[],function(){var a="create-comp",b="move-comp",c="sw-visibility",d="export-template",e="open-sm",f="open-tm",g="open-layers",h="open-blocks",i="fullscreen",j="preview";return{stylePrefix:"pn-",defaults:[{id:"commands",buttons:[{id:a,command:a,className:"fa fa-pencil-square-o",attributes:{title:"Create element"},stopDefaultCommand:1},{id:b,command:b,className:"fa fa-arrows",attributes:{title:"Move elements"},stopDefaultCommand:1}]},{id:"options",buttons:[{active:!0,id:c,className:"fa fa-square-o",command:c,context:c,attributes:{title:"View components"}},{id:j,className:"fa fa-eye",command:j,context:j,stopDefaultCommand:1,attributes:{title:"Preview"}},{id:i,className:"fa fa-arrows-alt",command:i,context:i,attributes:{title:"Fullscreen"}},{id:d,className:"fa fa-code",command:d,attributes:{title:"View code"}}]},{id:"views",buttons:[{id:e,className:"fa fa-paint-brush",command:e,active:!0,attributes:{title:"Open Style Manager"}},{id:f,className:"fa fa-cog",command:f,attributes:{title:"Settings"}},{id:g,className:"fa fa-bars",command:g,attributes:{title:"Open Layer Manager"}},{id:h,className:"fa fa-th-large",command:h,attributes:{title:"Open Blocks"}}]}],em:null,delayBtnsShow:300}}),c("Panels/model/Button",["backbone","require"],function(a,b){return a.Model.extend({defaults:{id:"",className:"",command:"",context:"",buttons:[],attributes:{},options:{},active:!1,dragDrop:!1,runDefaultCommand:!0,stopDefaultCommand:!1},initialize:function(a){if(this.get("buttons").length){var c=b("./Buttons");this.set("buttons",new c(this.get("buttons")))}}})}),c("Panels/model/Buttons",["backbone","./Button"],function(a,b){return a.Collection.extend({model:b,deactivateAllExceptOne:function(a,b){this.forEach(function(c,d){c!==a&&(c.set("active",!1),b&&c.get("buttons").length&&c.get("buttons").deactivateAllExceptOne(a,b))})},deactivateAll:function(a){var b=a||"";this.forEach(function(a,c){a.get("context")==b&&(a.set("active",!1),a.get("buttons").length&&a.get("buttons").deactivateAll(b))})}})}),c("Panels/model/Panel",["backbone","./Buttons"],function(a,b){return a.Model.extend({defaults:{id:"",content:"",visible:!0,buttons:[]},initialize:function(a){this.btn=this.get("buttons")||[],this.buttons=new b(this.btn),this.set("buttons",this.buttons)}})}),c("Panels/model/Panels",["backbone","./Panel"],function(a,b){return a.Collection.extend({model:b})}),c("Panels/view/ButtonView",["backbone","require"],function(a,b){return a.View.extend({tagName:"span",initialize:function(a){_.bindAll(this,"startTimer","stopTimer","showButtons","hideButtons","closeOnKeyPress","onDrop","initSorter","stopDrag");var b=this.model.get("className");this.config=a.config||{},this.em=this.config.em||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.id=this.pfx+this.model.get("id"),this.activeCls=this.pfx+"active",this.btnsVisCls=this.pfx+"visible",this.parentM=a.parentM||null,this.className=this.pfx+"btn"+(b?" "+b:""),this.listenTo(this.model,"change:active updateActive",this.updateActive),this.listenTo(this.model,"checkActive",this.checkActive),this.listenTo(this.model,"change:bntsVis",this.updateBtnsVis),this.listenTo(this.model,"change:attributes",this.updateAttributes),this.listenTo(this.model,"change:className",this.updateClassName),this.model.get("buttons").length&&(this.$el.on("mousedown",this.startTimer),this.$el.append($("
    ",{"class":this.pfx+"arrow-rd"}))),this.em&&this.em.get&&(this.commands=this.em.get("Commands")),this.events={},this.model.get("dragDrop")?(this.events.mousedown="initDrag",this.em.on("loaded",this.initSorter)):this.events.click="clicked",this.delegateEvents()},initSorter:function(){if(this.em.Canvas){var a=this.em.Canvas;this.canvasEl=a.getBody(),this.sorter=new this.em.Utils.Sorter({container:this.canvasEl,placer:a.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,onMove:this.onDrag,onEndMove:this.onDrop,document:a.getFrameEl().contentDocument,direction:"a",wmargin:1,nested:1});var b=a.getOffset();this.sorter.offTop=b.top,this.sorter.offLeft=b.left}},initDrag:function(){this.model.collection.deactivateAll(this.model.get("context")),this.sorter.startSort(this.el),this.sorter.setDropContent(this.model.get("options").content),this.canvasEl.style.cursor="grabbing",$(document).on("mouseup",this.stopDrag)},stopDrag:function(){$(document).off("mouseup",this.stopDrag),this.sorter.endMove()},onDrag:function(a){},onDrop:function(a){this.canvasEl.style.cursor="default"},updateClassName:function(){var a=this.model.get("className");this.$el.attr("class",this.pfx+"btn"+(a?" "+a:""))},updateAttributes:function(){this.$el.attr(this.model.get("attributes"))},updateBtnsVis:function(){this.$buttons&&(this.model.get("bntsVis")?this.$buttons.addClass(this.btnsVisCls):this.$buttons.removeClass(this.btnsVisCls))},startTimer:function(){this.timeout=setTimeout(this.showButtons,this.config.delayBtnsShow),$(document).on("mouseup",this.stopTimer)},stopTimer:function(){$(document).off("mouseup",this.stopTimer),this.timeout&&clearTimeout(this.timeout)},showButtons:function(){clearTimeout(this.timeout),this.model.set("bntsVis",!0),$(document).on("mousedown",this.hideButtons),$(document).on("keypress",this.closeOnKeyPress)},hideButtons:function(a){a&&$(a.target).trigger("click"),this.model.set("bntsVis",!1),$(document).off("mousedown",this.hideButtons),$(document).off("keypress",this.closeOnKeyPress)},closeOnKeyPress:function(a){var b=a.which||a.keyCode;27==b&&this.hideButtons()},updateActive:function(){var a=null,b=this.em&&this.em.get?this.em.get("Editor"):null,c=this.model.get("command");this.commands&&"string"==typeof c?a=this.commands.get(c):null!==c&&"object"==typeof c?a=c:"function"==typeof c&&(a={run:c}),this.model.get("active")?(this.model.collection.deactivateAll(this.model.get("context")),this.model.set("active",!0,{silent:!0}).trigger("checkActive"),this.parentM&&this.parentM.set("active",!0,{silent:!0}).trigger("checkActive"),a&&a.run&&(a.run(b,this.model,this.model.get("options")),b.trigger("run:"+c))):(this.$el.removeClass(this.activeCls),this.model.collection.deactivateAll(this.model.get("context")),this.parentM&&this.parentM.set("active",!1,{silent:!0}).trigger("checkActive"),a&&a.stop&&(a.stop(b,this.model,this.model.get("options")),b.trigger("stop:"+c)))},checkActive:function(){this.model.get("active")?this.$el.addClass(this.activeCls):this.$el.removeClass(this.activeCls)},clicked:function(a){if(!this.model.get("bntsVis")){this.parentM&&this.swapParent();var b=this.model.get("active");this.model.set("active",!b);this.em.get("Commands").get("select-comp");b?this.model.get("runDefaultCommand")&&this.em.runDefault():this.model.get("stopDefaultCommand")&&this.em.stopDefault()}},swapParent:function(){this.parentM.collection.deactivateAll(this.model.get("context")),this.parentM.set("attributes",this.model.get("attributes")),this.parentM.set("options",this.model.get("options")),this.parentM.set("command",this.model.get("command")),this.parentM.set("className",this.model.get("className")),this.parentM.set("active",!0,{silent:!0}).trigger("checkActive")},render:function(){if(this.updateAttributes(),this.$el.attr("class",this.className),this.model.get("buttons").length){var a=b("./ButtonsView"),c=new a({collection:this.model.get("buttons"),config:this.config,parentM:this.model});this.$buttons=c.render().$el,this.$buttons.append($("
    ",{"class":this.pfx+"arrow-l"})),this.$el.append(this.$buttons)}return this}})}),c("Panels/view/ButtonsView",["backbone","./ButtonView"],function(a,b){return a.View.extend({initialize:function(a){this.opt=a||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"",this.parentM=this.opt.parentM||null,this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset",this.render),this.className=this.pfx+"buttons"},addTo:function(a){this.addToCollection(a)},addToCollection:function(a,c){var d=c||null,e=b,f=new e({model:a,config:this.config,parentM:this.parentM}),g=f.render().el;return d?d.appendChild(g):this.$el.append(g),g},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",_.result(this,"className")),this}})}),c("Panels/view/PanelView",["backbone","./ButtonsView"],function(a,b){return a.View.extend({initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.buttons=this.model.get("buttons"),this.className=this.pfx+"panel",this.id=this.pfx+this.model.get("id"),this.listenTo(this.model,"change:appendContent",this.appendContent),this.listenTo(this.model,"change:content",this.updateContent)},appendContent:function(){this.$el.append(this.model.get("appendContent"))},updateContent:function(){this.$el.html(this.model.get("content"))},render:function(){if(this.$el.attr("class",_.result(this,"className")),this.id&&this.$el.attr("id",this.id),this.buttons.length){var a=new b({collection:this.buttons,config:this.config});this.$el.append(a.render().el)}return this.$el.append(this.model.get("content")),this}})}),c("Panels/view/PanelsView",["backbone","./PanelView"],function(a,b){return a.View.extend({initialize:function(a){this.opt=a||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"",this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset",this.render),this.className=this.pfx+"panels"},addTo:function(a){this.addToCollection(a)},addToCollection:function(a,c){var d=c||null,e=b,f=new e({model:a,config:this.config}),g=f.render().el;return d?d.appendChild(g):this.$el.append(g),g},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",_.result(this,"className")),this}})}),c("Panels/main",["require","./config/config","./model/Panel","./model/Panels","./view/PanelView","./view/PanelsView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Panel"),g=a("./model/Panels"),h=(a("./view/PanelView"),a("./view/PanelsView"));return{name:"Panels",init:function(a){d=a||{};for(var f in e)f in d||(d[f]=e[f]);var i=d.pStylePrefix;return i&&(d.stylePrefix=i+d.stylePrefix),b=new g(d.defaults),c=new h({collection:b,config:d}),this},getPanels:function(){return b},getPanelsEl:function(){return c.el},addPanel:function(a){return b.add(a)},getPanel:function(a){var c=b.where({id:a});return c.length?c[0]:null},addButton:function(a,b){var c=this.getPanel(a);return c?c.get("buttons").add(b):null},getButton:function(a,b){var c=this.getPanel(a);if(c){var d=c.get("buttons").where({id:b});return d.length?d[0]:null}return null},render:function(){return c.render().el},active:function(){this.getPanels().each(function(a){a.get("buttons").each(function(a){a.get("active")&&a.trigger("updateActive")})})},Panel:f}}}),c("Panels",["Panels/main"],function(a){return a}),c("RichTextEditor/config/config",[],function(){return{stylePrefix:"rte-",toolbarId:"toolbar",containerId:"wrapper",commands:[{command:"bold",title:"Bold","class":"fa fa-bold"},{command:"italic",title:"Italic","class":"fa fa-italic"},{command:"underline",title:"Underline","class":"fa fa-underline"},{command:"strikethrough",title:"Strikethrough","class":"fa fa-strikethrough",group:"format"},{command:"insertHTML",title:"Link","class":"fa fa-link",args:'${content}'}]}}),c("RichTextEditor/view/TextEditorView",["jquery"],function(a){var b=function(b){var c=a.Deferred(),d=new FileReader;return d.onload=function(a){c.resolve(a.target.result)},d.onerror=c.reject,d.onprogress=c.notify,d.readAsDataURL(b),c.promise()};return a.fn.cleanHtml=function(){var b=a(this).html();return b&&b.replace(/(
    |\s|

    <\/div>| )*$/,"")},a.fn.wysiwyg=function(c){var d,e,f,g=this,h=function(){var b=e.activeToolbarClass;b&&a(e.toolbarSelector).find(f).each(function(){var c=a(this),d=c.data(e.commandRole),f=g.get(0).ownerDocument;f.queryCommandState(d)?c.addClass(b):c.removeClass(b)})},i=function(a,b){var c=a.split(" "),d=c.shift(),e=c.join(" ")+(b||"");g.get(0).ownerDocument.execCommand("styleWithCSS",!1,!0),g.get(0).ownerDocument.execCommand(d,0,e),h(),g.trigger("change")},j=function(){var a=window.getSelection();if(a.getRangeAt&&a.rangeCount)return a.getRangeAt(0)},k=function(){d=j()},l=function(){var a=window.getSelection();if(d){try{a.removeAllRanges()}catch(b){document.body.createTextRange().select(),document.selection.empty()}a.addRange(d)}},m=function(c){g.focus(),a.each(c,function(c,d){/^image\//.test(d.type)?a.when(b(d)).done(function(a){i("insertimage",a)}).fail(function(a){e.fileUploadError("file-reader",a)}):e.fileUploadError("unsupported-file-type",d.type)})},n=function(a,b){l(),document.queryCommandSupported("hiliteColor")&&document.execCommand("hiliteColor",0,b||"transparent"),k(),a.data(e.selectionMarker,b)},o=function(b,c){b.find(f).unbind().click(function(){l();var b=g.get(0).ownerDocument,d=a(this),e=d.data(c.commandRole),f=d.data("args");f?(f=f.replace("${content}",b.getSelection()),i(e,f)):b.execCommand(e),k()}),b.find("[data-toggle=dropdown]").click(l);var d="[data-"+c.commandRole+"]";b.find("select"+d).on("webkitspeechchange change",function(){var b=this.value;l(),b&&(g.focus(),i(a(this).data(c.commandRole),b)),k()}),b.find("input[type=text]"+d,", select"+d).on("webkitspeechchange change",function(){var b=this.value;this.value="",l(),b&&(g.focus(),i(a(this).data(c.commandRole),b)),k()}).on("focus",function(){var b=a(this);b.data(c.selectionMarker)||(n(b,c.selectionColor),b.focus())}).on("blur",function(){var b=a(this);b.data(c.selectionMarker)&&n(b,!1)}),b.find("input[type=file][data-"+c.commandRole+"]").change(function(){l(),"file"===this.type&&this.files&&this.files.length>0&&m(this.files),k(),this.value=""})},p=function(){g.on("dragenter dragover",!1).on("drop",function(a){var b=a.originalEvent.dataTransfer;a.stopPropagation(),a.preventDefault(),b&&b.files&&b.files.length>0&&m(b.files)})};if("string"==typeof c&&"destroy"==c)return g.attr("contenteditable",!1).unbind("mouseup keyup mouseout dragenter dragover"),a(window).unbind("touchend"),this;e=a.extend({},a.fn.wysiwyg.defaults,c);var q="[data-"+e.commandRole+"]";return f="a"+q+",button"+q+",input[type=button]"+q+", select"+q,e.dragAndDropImages&&p(),o(a(e.toolbarSelector),e),g.attr("contenteditable",!0).on("mouseup keyup mouseout",function(){k(),h()}),a(window).bind("touchend",function(a){var b=g.is(a.target)||g.has(a.target).length>0,c=j(),d=c&&c.startContainer===c.endContainer&&c.startOffset===c.endOffset;d&&!b||(k(),h())}),this},a.fn.wysiwyg.defaults={toolbarSelector:"[data-role=editor-toolbar]",commandRole:"edit",activeToolbarClass:"btn-info",selectionMarker:"edit-focus-marker",selectionColor:"darkgrey",dragAndDropImages:!0,fileUploadError:function(a,b){console.log("File upload error",a,b)}},a}),c("RichTextEditor/model/CommandButton",["backbone"],function(a){return a.Model.extend({idAttribute:"command",defaults:{command:"",type:"",title:"","class":"",options:[]},initialize:function(){var a=this.get("options");a.length&&this.set("type","select")}})}),c("RichTextEditor/model/CommandButtons",["backbone","./CommandButton"],function(a,b){return a.Collection.extend({model:b})}),c("RichTextEditor/view/CommandButtonView",["backbone"],function(a){return a.View.extend({tagName:"a",initialize:function(a,b){this.config=b||{},this.ppfx=this.config.pStylePrefix||"",this.className=this.config.stylePrefix+"btn "+this.model.get("class")},render:function(){return this.$el.addClass(this.className),this}})}),c("RichTextEditor/view/CommandButtonSelectView",["backbone","./CommandButtonView"],function(a,b){return b.extend({initialize:function(a,c){b.prototype.initialize.apply(this,arguments)},getInput:function(){var a=this.model;if(!this.input){var b=a.get("command"),c='",this.input=$(c)}return this.input},getInputCont:function(){var a=this.getInput(),b=this.ppfx,c=$('
    ');return c.append(a)},render:function(){return b.prototype.render.apply(this,arguments),this.$el.html(this.getInputCont()),this}})}),c("RichTextEditor/view/CommandButtonsView",["backbone","./CommandButtonView","./CommandButtonSelectView"],function(a,b,c){return a.View.extend({attributes:{"data-role":"editor-toolbar"},initialize:function(a){this.config=a.config||{};var b=this.config.stylePrefix||"";this.id=b+this.config.toolbarId,this.listenTo(this.collection,"add",this.addTo),this.$el.data("helper",1)},addTo:function(a){this.add(a)},add:function(a,d){var e=d||null,f=b;switch(a.get("type")){case"select":f=c}var g=a.get("args"),h={title:a.get("title"),"data-edit":a.get("command")};g&&(h["data-args"]=g);var i=new f({model:a,attributes:h},this.config),j=i.render().el;e?e.appendChild(j):this.$el.append(j)},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.add(b,a)},this),this.$el.append(a),this.$el.attr("id",this.id),this}})}),c("RichTextEditor/main",["require","./config/config","./view/TextEditorView","./model/CommandButtons","./view/CommandButtonsView"],function(a){return function(){var b,c,d,e,f={},g=a("./config/config"),h=(a("./view/TextEditorView"),a("./model/CommandButtons")),i=a("./view/CommandButtonsView");return{customRte:null,name:"rte",init:function(a){e=this,f=a||{};for(var j in g)j in f||(f[j]=g[j]);var k=f.pStylePrefix;return k&&(f.stylePrefix=k+f.stylePrefix),b=f.stylePrefix,d=new h(f.commands),c=new i({collection:d,config:f}),this},add:function(a,b){var c=b||{};return c.command=a,d.add(c)},get:function(a){return d.where({command:a})[0]},getAll:function(){return d},udpatePosition:function(){var a="px",b=f.em.get("Canvas"),d=b.getTargetToElementDim(c.el,this.lastEl,{event:"rteToolbarPosUpdate"}),e=c.el.style;e.top=d.top+a,e.left=d.left+a},attach:function(a,b){this.lastEl=a.el;var d=this.customRte;return d?b=d.enable(a.el,b):a.$el.wysiwyg({}).focus(),this.show(),f.em&&(setTimeout(this.udpatePosition.bind(this),0),f.em.off("change:canvasOffset",this.udpatePosition,this),f.em.on("change:canvasOffset",this.udpatePosition,this),f.em.off("canvasScroll",this.udpatePosition,this),f.em.on("canvasScroll",this.udpatePosition,this)),c.$el.on("mousedown",this.disableProp),b},detach:function(a,b){var d=this.customRte;d?(a.model.set("content",a.el.innerHTML),d.disable(a.el,b)):a.$el.wysiwyg("destroy"),this.hide(),c.$el.off("mousedown",this.disableProp)},focus:function(a,b){var c=this.customRte;c?c.focus(a.el,b):this.attach(a)},show:function(){var a=c.el.style;a.display="block"},hide:function(){c.el.style.display="none"},disableProp:function(a){a.stopPropagation()},getToolbarEl:function(){return c.el},render:function(){return c.render().el}}}}),c("RichTextEditor",["RichTextEditor/main"],function(a){return a}),c("StyleManager/config/config",[],function(){return{stylePrefix:"sm-",sectors:[],textNoElement:"Select an element before using Style Manager"}}),c("StyleManager/model/Layer",["backbone"],function(a){return a.Model.extend({defaults:{index:"",active:!0,value:"",values:{},preview:!1},initialize:function(){var a=this.get("value");if(!a){var b="",c=this.get("values");for(var d in c)b+=" "+c[d];this.set("value",b.trim())}}})}),c("StyleManager/model/Layers",["backbone","./Layer"],function(a,b){return a.Collection.extend({model:b,initialize:function(){this.idx=1,this.on("add",this.onAdd),this.on("reset",this.onReset)},onAdd:function(a,b,c){c.noIncrement||a.set("index",this.idx++)},onReset:function(){this.idx=1}})}),c("StyleManager/model/Property",["backbone","./Layers","require"],function(a,b,c){return a.Model.extend({defaults:{name:"",property:"",type:"",units:[],unit:"",defaults:"",info:"",value:"",icon:"",preview:!1,detached:!1,functionName:"",properties:[],layers:[],list:[],fixedValues:["initial","inherit"]},initialize:function(a){var d=this.get("type"),e=this.get("name"),f=this.get("property"),g=this.get("properties");if(e||this.set("name",f.charAt(0).toUpperCase()+f.slice(1).replace(/-/g," ")),g.length){var h=c("./Properties");this.set("properties",new h(g))}switch(d){case"stack":this.set("layers",new b)}},getValue:function(){var a="",b=this.get("type");switch(b){case"integer":a=this.get("value")+this.get("unit");break;default:a=this.get("value")}return a}})}),c("StyleManager/model/Properties",["backbone","./Property"],function(a,b){return a.Collection.extend({model:b})}),c("StyleManager/model/PropertyFactory",["backbone"],function(a){return function(){return{build:function(a){var b=[];"string"==typeof a&&(a=[a]);for(var c=0,d=a.length;c\n\t
    \n\t\t<%= label %>\n\t
    \n
    '}),c("text!StyleManager/templates/propertyInput.html",[],function(){return'
    \n\tinput-holder\'>\n
    \n
    \n'}),c("StyleManager/view/PropertyView",["backbone","text!./../templates/propertyLabel.html","text!./../templates/propertyInput.html"],function(a,b,c){return a.View.extend({template:_.template(c),templateLabel:_.template(b),events:{change:"valueUpdated"},initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=a.target||{},this.propTarget=a.propTarget||{},this.onChange=a.onChange||{},this.onInputRender=a.onInputRender||{},this.customValue=a.customValue||{},this.defaultValue=this.model.get("defaults"),this.property=this.model.get("property"),this.input=this.$input=null,this.className=this.pfx+"property",this.inputHolderId="#"+this.pfx+"input-holder",this.model.get("value")||this.model.set("value",this.model.get("defaults")),this.listenTo(this.model,"destroy remove",this.remove),this.listenTo(this.propTarget,"update",this.targetUpdated),this.listenTo(this.model,"change:value",this.valueChanged),this.listenTo(this.model,"targetUpdated",this.targetUpdated)},getTarget:function(){return this.selectedComponent?this.selectedComponent:this.propTarget?this.propTarget.model:null},valueUpdated:function(){this.$input&&this.model.set("value",this.getInputValue())},targetUpdated:function(){this.selectedComponent=this.propTarget.model,this.helperComponent=this.propTarget.helper,this.getTarget()&&(this.sameValue()||this.renderInputRequest())},sameValue:function(){return this.getComponentValue()==this.model.get("value")+this.model.get("unit")},getComponentValue:function(){var a=this.getTarget();if(a){var b=a.get("style")[this.property];if(b?this.componentValue=b:this.componentValue=this.defaultValue+(this.unit||""),this.model.get("functionName")){var c=this.fetchFromFunction(this.componentValue);c&&(this.componentValue=c)}if(this.customValue&&"function"==typeof this.customValue){var d=this.model.collection.indexOf(this.model),e=this.customValue(this,d);e&&(this.componentValue=e)}return this.componentValue}},fetchFromFunction:function(a){return a.substring(a.indexOf("(")+1,a.lastIndexOf(")"))},getValueForTarget:function(){return this.model.getValue()},getInputValue:function(){return this.$input?this.$input.val():""},valueChanged:function(a,b,c){var d=this.getValueForTarget();if(this.$input&&this.setValue(d),this.getTarget()&&this.isTargetStylable()){value=this.getValueForTarget();var e=this.model.get("functionName");e&&(value=e+"("+value+")");var f=this.getTarget(),g=this.onChange;g&&"function"==typeof g?g(f,this,c):this.updateTargetStyle(value,null,c);var h=this.config.em;if(h){var i=this.model;h.trigger("component:update",i),h.trigger("component:styleUpdate",i),h.trigger("component:styleUpdate:"+i.get("property"),i)}}},updateTargetStyle:function(a,b,c){var d=b||this.property,e=a||"",f=c?c.avoidStore:0,g=this.getTarget(),h=_.clone(g.get("style"));e?h[d]=e:delete h[d],g.set("style",h,{avoidStore:f}),this.helperComponent&&this.helperComponent.set("style",h,{avoidStore:f})},isTargetStylable:function(){var a=this.getTarget().get("stylable");return a instanceof Array&&(a=_.indexOf(a,this.property)>=0),a},setValue:function(a,b){var c=0===b?0:1,d=this.model.get("defaults"),e=this.model.get("value")||d;(a||c)&&(e=a),this.$input&&this.$input.val(e),this.model.set({value:e},{silent:!0})},renderLabel:function(){this.$el.html(this.templateLabel({pfx:this.pfx,ppfx:this.ppfx,icon:this.model.get("icon"),info:this.model.get("info"),label:this.model.get("name")}))},renderField:function(){this.renderTemplate(),this.renderInput(),delete this.componentValue},renderTemplate:function(){this.$el.append(this.template({pfx:this.pfx,ppfx:this.ppfx,icon:this.model.get("icon"),info:this.model.get("info"),label:this.model.get("name")}))},renderInput:function(){this.$input||(this.$input=$("",{placeholder:this.model.get("defaults"),type:"text"}),this.$el.find(this.inputHolderId).html(this.$input)),this.setValue(this.componentValue,0)},renderInputRequest:function(){this.renderInput()},cleanValue:function(){this.setValue("")},render:function(){return this.renderLabel(),this.renderField(),this.$el.attr("class",this.className),this}})}),c("text!Abstract/ui/templates/inputNumber.html",[],function(){return'input-holder\'>\nfield-units\'>\n
    \n\t
    \n\t
    \n
    \n'}),c("Abstract/ui/InputNumber",["backbone","text!./templates/inputNumber.html"],function(a,b){return a.View.extend({events:{},template:_.template(b),initialize:function(a){_.bindAll(this,"moveIncrement","upIncrement");var b=a.ppfx||"";this.ppfx=b,this.docEl=$(document),this.inputCls=b+"input-number",this.unitCls=b+"input-unit",this.events["click ."+b+"field-arrow-u"]="upArrowClick",this.events["click ."+b+"field-arrow-d"]="downArrowClick",this.events["mousedown ."+b+"field-arrows"]="downIncrement",this.events["change ."+this.inputCls]="handleChange",this.events["change ."+this.unitCls]="handleUnitChange",this.listenTo(this.model,"change:unit change:value",this.handleModelChange),this.delegateEvents()},setValue:function(a,b){var c=b||{},d=this.validateInputValue(a,{deepCheck:1}),e={value:d.value};(d.unit||d.force)&&(e.unit=d.unit),this.model.set(e,c),c.silent&&this.handleModelChange()},handleChange:function(a){a.stopPropagation(),this.setValue(this.getInputEl().value)},handleUnitChange:function(a){a.stopPropagation();var b=this.getUnitEl().value;this.model.set("unit",b)},handleModelChange:function(){var a=this.model;this.getInputEl().value=a.get("value");var b=this.getUnitEl();b&&(b.value=a.get("unit"))},getInputEl:function(){return this.inputEl||(this.inputEl=$("",{type:"text","class":this.inputCls,placeholder:this.model.get("defaults")})),this.inputEl.get(0)},getUnitEl:function(){if(!this.unitEl){var a=this.model,b=a.get("units")||[];if(b.length){var c='",this.unitEl=$(c)}}return this.unitEl&&this.unitEl.get(0)},upArrowClick:function(){var a=this.model.get("value");a=isNaN(a)?1:parseInt(a,10)+1;var b=this.validateInputValue(a);this.model.set("value",b.value)},downArrowClick:function(){var a=this.model.get("value");a=isNaN(a)?0:parseInt(a,10)-1;var b=this.validateInputValue(a);this.model.set("value",b.value)},downIncrement:function(a){a.preventDefault(),this.moved=0;var b=this.model.get("value");b=isNaN(b)?0:parseInt(b,10);var c={y:a.pageY,val:b};this.docEl.mouseup(c,this.upIncrement),this.docEl.mousemove(c,this.moveIncrement)},moveIncrement:function(a){this.moved=1;var b=parseInt(a.data.val-a.pageY+a.data.y,10);return this.prValue=this.validateInputValue(b).value,this.model.set("value",this.prValue,{avoidStore:1}),!1},upIncrement:function(a){if(this.docEl.off("mouseup",this.upIncrement),this.docEl.off("mousemove",this.moveIncrement),this.prValue&&this.moved){var b=this.prValue-1;this.model.set("value",b,{avoidStore:1}).set("value",b+1)}},validateInputValue:function(a,b){var c=0,d=b||{},e=this.model,f=a||e.get("defaults"),g=e.get("units")||[],h=e.get("unit")||g.length&&g[0]||"",i=e.get("max"),j=e.get("min");if(d.deepCheck){var k=e.get("fixedValues")||[];if(f){var l=new RegExp("^"+k.join("|"),"g");if(k.length&&l.test(f))f=f.match(l)[0],h="",c=1;else{var m=f+"";f+="",f=parseFloat(f.replace(",",".")),f=isNaN(f)?e.get("defaults"):f;var n=m.replace(f,"");_.indexOf(g,n)>=0&&(h=n)}}}return"undefined"!=typeof i&&(f=f>i?i:f),"undefined"!=typeof j&&(f=f\n\tinput-holder\'>\n
    \n
    \n'}),c("StyleManager/view/PropertyRadioView",["backbone","./PropertyView","text!./../templates/propertyRadio.html"],function(a,b,c){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),this.list=this.model.get("list")||[],this.className=this.className+" "+this.pfx+"list"},renderInput:function(){var a=this.pfx,b=this.ppfx,c=b+"radio-item-label";this.$input||this.list&&this.list.length&&(this.input="",_.each(this.list,function(d){var e=d.className?d.className+" "+a+"icon "+c:"",f=this.property+"-"+d.value,g=d.name?d.name:d.value;titleAttr=d.title?'title="'+d.title+'"':"",this.input+='
    "},this),this.$inputEl=$(this.input),this.$el.find("#"+a+"input-holder").html(this.$inputEl),this.$input=this.$inputEl.find('input[name="'+this.property+'"]')),this.setValue(this.componentValue)},getInputValue:function(){return this.$input?this.$el.find("input:checked").val():""},setValue:function(a){var b=this.model.get("value")||this.defaultValue;a&&(b=a),this.$input&&this.$input.filter('[value="'+b+'"]').prop("checked",!0),this.model.set({value:b},{silent:!0})}})}),c("text!StyleManager/templates/propertySelect.html",[],function(){return'
    \n\tinput-holder\'>\n\t
    \n\t\t
    \n\t
    \n
    \n
    \n'}),c("StyleManager/view/PropertySelectView",["backbone","./PropertyView","text!./../templates/propertySelect.html"],function(a,b,c){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),this.list=this.model.get("list")||[]},renderInput:function(){var a=this.pfx;this.$input||(this.input="",this.$input=$(this.input),this.$el.find("#"+a+"input-holder").html(this.$input)),this.setValue(this.componentValue,0)}})}),c("text!Abstract/ui/templates/input.html",[],function(){return"\n"}),c("Abstract/ui/Input",["backbone","text!./templates/input.html"],function(a,b){return a.View.extend({events:{change:"handleChange"},template:_.template(b),initialize:function(a){var b=a||{},c=b.ppfx||"";this.target=b.target||{},this.inputClass=c+"field",this.inputHolderClass=c+"input-holder",this.ppfx=c,this.listenTo(this.model,"change:value",this.handleModelChange)},handleChange:function(a){a.stopPropagation(),this.setValue(this.getInputEl().value)},setValue:function(a,b){var c=b||{},d=this.model;d.set({value:a||d.get("defaults")},c),c.silent&&this.handleModelChange()},handleModelChange:function(){this.getInputEl().value=this.model.get("value")},getInputEl:function(){return this.inputEl||(this.inputEl=$("",{type:"text","class":this.inputCls,placeholder:this.model.get("defaults")})),this.inputEl.get(0)},render:function(){var a=this.$el;return a.addClass(this.inputClass),a.html(this.template({holderClass:this.inputHolderClass,ppfx:this.ppfx})),a.find("."+this.inputHolderClass).html(this.getInputEl()),this}})}),function(a){"use strict";"function"==typeof c&&c.amd?c("Spectrum",["jquery"],a):"object"==typeof exports&&"object"==typeof module?module.exports=a(b("jquery")):a(jQuery)}(function(a,b){"use strict";function c(b,c,d,e){for(var f=[],g=0;g')}else{var m="sp-clear-display";f.push(a("
    ").append(a('').attr("title",e.noColorSelectedText)).html())}}return"
    "+f.join("")+"
    "}function d(){for(var a=0;aMath.abs(b-e);ta=f?"x":"y"}}else ta=null;var g=!ta||"x"===ta,h=!ta||"y"===ta;g&&(ka=parseFloat(a/ba)),h&&(la=parseFloat((ca-b)/ca)),Xa=!1,U.showAlpha||(ma=1),K()},y,z),Ta?(H(Ta),L(),Va=U.preferredFormat||tinycolor(Ta).format,u(Ta)):L(),V&&C();var d=p?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Ha.delegate(".sp-thumb-el",d,b),Ia.delegate(".sp-thumb-el:nth-child(1)",d,{ignore:!0},b)}function t(){if(X&&window.localStorage){try{var b=window.localStorage[X].split(",#");b.length>1&&(delete window.localStorage[X],a.each(b,function(a,b){u(b)}))}catch(c){}try{qa=window.localStorage[X].split(";")}catch(c){}}}function u(b){if(W){var c=tinycolor(b).toRgbString();if(!pa[c]&&a.inArray(c,qa)===-1)for(qa.push(c);qa.length>ra;)qa.shift();if(X&&window.localStorage)try{window.localStorage[X]=qa.join(";")}catch(d){}}}function v(){var a=[];if(U.showPalette)for(var b=0;bj&&j>e?Math.abs(l.left+e-j):0),l.top-=Math.min(l.top,l.top+f>k&&k>f?Math.abs(f+g-d):d),l}function h(){}function i(a){a.stopPropagation()}function j(a,b){var c=Array.prototype.slice,d=c.call(arguments,2);return function(){return a.apply(b,d.concat(c.call(arguments))); +}}function k(b,c,d,e){function f(a){a.stopPropagation&&a.stopPropagation(),a.preventDefault&&a.preventDefault(),a.returnValue=!1}function g(a){if(k){if(p&&j.documentMode<9&&!a.button)return i();var d=a.originalEvent&&a.originalEvent.touches&&a.originalEvent.touches[0],e=d&&d.pageX||a.pageX,g=d&&d.pageY||a.pageY,h=Math.max(0,Math.min(e-l.left,n)),q=Math.max(0,Math.min(g-l.top,m));o&&f(a),c.apply(b,[h,q,a])}}function h(c){var e=c.which?3==c.which:2==c.button;e||k||d.apply(b,arguments)!==!1&&(k=!0,m=a(b).height(),n=a(b).width(),l=a(b).offset(),a(j).bind(q),a(j.body).addClass("sp-dragging"),g(c),f(c))}function i(){k&&(a(j).unbind(q),a(j.body).removeClass("sp-dragging"),setTimeout(function(){e.apply(b,arguments)},0)),k=!1}c=c||function(){},d=d||function(){},e=e||function(){};var j=document,k=!1,l={},m=0,n=0,o="ontouchstart"in window,q={};q.selectstart=f,q.dragstart=f,q["touchmove mousemove"]=g,q["touchend mouseup"]=i,a(b).bind("touchstart mousedown",h)}function l(a,b,c){var d;return function(){var e=this,f=arguments,g=function(){d=null,a.apply(e,f)};c&&clearTimeout(d),!c&&d||(d=setTimeout(g,b))}}function m(){return a.fn.spectrum.inputTypeColorSupport()}var n={beforeShow:h,move:h,change:h,show:h,hide:h,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",togglePaletteMoreText:"more",togglePaletteLessText:"less",clearText:"Clear Color Selection",noColorSelectedText:"No Color Selected",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,offset:null},o=[],p=!!/msie/i.exec(window.navigator.userAgent),q=function(){function a(a,b){return!!~(""+a).indexOf(b)}var b=document.createElement("div"),c=b.style;return c.cssText="background-color:rgba(0,0,0,.5)",a(c.backgroundColor,"rgba")||a(c.backgroundColor,"hsla")}(),r=["
    ","
    ","
    ","
    "].join(""),s=function(){var a="";if(p)for(var b=1;b<=6;b++)a+="
    ";return["
    ","
    ","
    ","
    ","","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ",a,"
    ","
    ","
    ","
    ","
    ","","
    ","
    ","
    ","","","
    ","
    ","
    "].join("")}(),t="spectrum.id";a.fn.spectrum=function(b,c){if("string"==typeof b){var d=this,e=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=o[a(this).data(t)];if(c){var f=c[b];if(!f)throw new Error("Spectrum: no such method: '"+b+"'");"get"==b?d=c.get():"container"==b?d=c.container:"option"==b?d=c.option.apply(c,e):"destroy"==b?(c.destroy(),a(this).removeData(t)):f.apply(c,e)}}),d}return this.spectrum("destroy").each(function(){var c=a.extend({},b,a(this).data()),d=f(this,c);a(this).data(t,d.id)})},a.fn.spectrum.load=!0,a.fn.spectrum.loadOpts={},a.fn.spectrum.draggable=k,a.fn.spectrum.defaults=n,a.fn.spectrum.inputTypeColorSupport=function u(){if("undefined"==typeof u._cachedResult){var b=a("")[0];u._cachedResult="color"===b.type&&""!==b.value}return u._cachedResult},a.spectrum={},a.spectrum.localization={},a.spectrum.palettes={},a.fn.spectrum.processNativeColorInputs=function(){var b=a("input[type=color]");b.length&&!m()&&b.spectrum({preferredFormat:"hex6"})},function(){function a(a){var c={r:0,g:0,b:0},e=1,g=!1,h=!1;return"string"==typeof a&&(a=G(a)),"object"==typeof a&&(a.hasOwnProperty("r")&&a.hasOwnProperty("g")&&a.hasOwnProperty("b")?(c=b(a.r,a.g,a.b),g=!0,h="%"===String(a.r).substr(-1)?"prgb":"rgb"):a.hasOwnProperty("h")&&a.hasOwnProperty("s")&&a.hasOwnProperty("v")?(a.s=D(a.s),a.v=D(a.v),c=f(a.h,a.s,a.v),g=!0,h="hsv"):a.hasOwnProperty("h")&&a.hasOwnProperty("s")&&a.hasOwnProperty("l")&&(a.s=D(a.s),a.l=D(a.l),c=d(a.h,a.s,a.l),g=!0,h="hsl"),a.hasOwnProperty("a")&&(e=a.a)),e=w(e),{ok:g,format:a.format||h,r:M(255,N(c.r,0)),g:M(255,N(c.g,0)),b:M(255,N(c.b,0)),a:e}}function b(a,b,c){return{r:255*x(a,255),g:255*x(b,255),b:255*x(c,255)}}function c(a,b,c){a=x(a,255),b=x(b,255),c=x(c,255);var d,e,f=N(a,b,c),g=M(a,b,c),h=(f+g)/2;if(f==g)d=e=0;else{var i=f-g;switch(e=h>.5?i/(2-f-g):i/(f+g),f){case a:d=(b-c)/i+(b1&&(c-=1),c<1/6?a+6*(b-a)*c:c<.5?b:c<2/3?a+(b-a)*(2/3-c)*6:a}var e,f,g;if(a=x(a,360),b=x(b,100),c=x(c,100),0===b)e=f=g=c;else{var h=c<.5?c*(1+b):c+b-c*b,i=2*c-h;e=d(i,h,a+1/3),f=d(i,h,a),g=d(i,h,a-1/3)}return{r:255*e,g:255*f,b:255*g}}function e(a,b,c){a=x(a,255),b=x(b,255),c=x(c,255);var d,e,f=N(a,b,c),g=M(a,b,c),h=f,i=f-g;if(e=0===f?0:i/f,f==g)d=0;else{switch(f){case a:d=(b-c)/i+(b>1)+720)%360;--b;)d.h=(d.h+e)%360,f.push(P(d));return f}function u(a,b){b=b||6;for(var c=P(a).toHsv(),d=c.h,e=c.s,f=c.v,g=[],h=1/b;b--;)g.push(P({h:d,s:e,v:f})),f=(f+h)%1;return g}function v(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[a[c]]=c);return b}function w(a){return a=parseFloat(a),(isNaN(a)||a<0||a>1)&&(a=1),a}function x(a,b){A(a)&&(a="100%");var c=B(a);return a=M(b,N(0,parseFloat(a))),c&&(a=parseInt(a*b,10)/100),K.abs(a-b)<1e-6?1:a%b/parseFloat(b)}function y(a){return M(1,N(0,a))}function z(a){return parseInt(a,16)}function A(a){return"string"==typeof a&&a.indexOf(".")!=-1&&1===parseFloat(a)}function B(a){return"string"==typeof a&&a.indexOf("%")!=-1}function C(a){return 1==a.length?"0"+a:""+a}function D(a){return a<=1&&(a=100*a+"%"),a}function E(a){return Math.round(255*parseFloat(a)).toString(16)}function F(a){return z(a)/255}function G(a){a=a.replace(H,"").replace(I,"").toLowerCase();var b=!1;if(Q[a])a=Q[a],b=!0;else if("transparent"==a)return{r:0,g:0,b:0,a:0,format:"name"};var c;return(c=S.rgb.exec(a))?{r:c[1],g:c[2],b:c[3]}:(c=S.rgba.exec(a))?{r:c[1],g:c[2],b:c[3],a:c[4]}:(c=S.hsl.exec(a))?{h:c[1],s:c[2],l:c[3]}:(c=S.hsla.exec(a))?{h:c[1],s:c[2],l:c[3],a:c[4]}:(c=S.hsv.exec(a))?{h:c[1],s:c[2],v:c[3]}:(c=S.hsva.exec(a))?{h:c[1],s:c[2],v:c[3],a:c[4]}:(c=S.hex8.exec(a))?{a:F(c[1]),r:z(c[2]),g:z(c[3]),b:z(c[4]),format:b?"name":"hex8"}:(c=S.hex6.exec(a))?{r:z(c[1]),g:z(c[2]),b:z(c[3]),format:b?"name":"hex"}:!!(c=S.hex3.exec(a))&&{r:z(c[1]+""+c[1]),g:z(c[2]+""+c[2]),b:z(c[3]+""+c[3]),format:b?"name":"hex"}}var H=/^[\s,#]+/,I=/\s+$/,J=0,K=Math,L=K.round,M=K.min,N=K.max,O=K.random,P=function(b,c){if(b=b?b:"",c=c||{},b instanceof P)return b;if(!(this instanceof P))return new P(b,c);var d=a(b);this._originalInput=b,this._r=d.r,this._g=d.g,this._b=d.b,this._a=d.a,this._roundA=L(100*this._a)/100,this._format=c.format||d.format,this._gradientType=c.gradientType,this._r<1&&(this._r=L(this._r)),this._g<1&&(this._g=L(this._g)),this._b<1&&(this._b=L(this._b)),this._ok=d.ok,this._tc_id=J++};P.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var a=this.toRgb();return(299*a.r+587*a.g+114*a.b)/1e3},setAlpha:function(a){return this._a=w(a),this._roundA=L(100*this._a)/100,this},toHsv:function(){var a=e(this._r,this._g,this._b);return{h:360*a.h,s:a.s,v:a.v,a:this._a}},toHsvString:function(){var a=e(this._r,this._g,this._b),b=L(360*a.h),c=L(100*a.s),d=L(100*a.v);return 1==this._a?"hsv("+b+", "+c+"%, "+d+"%)":"hsva("+b+", "+c+"%, "+d+"%, "+this._roundA+")"},toHsl:function(){var a=c(this._r,this._g,this._b);return{h:360*a.h,s:a.s,l:a.l,a:this._a}},toHslString:function(){var a=c(this._r,this._g,this._b),b=L(360*a.h),d=L(100*a.s),e=L(100*a.l);return 1==this._a?"hsl("+b+", "+d+"%, "+e+"%)":"hsla("+b+", "+d+"%, "+e+"%, "+this._roundA+")"},toHex:function(a){return g(this._r,this._g,this._b,a)},toHexString:function(a){return"#"+this.toHex(a)},toHex8:function(){return h(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:L(this._r),g:L(this._g),b:L(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+L(this._r)+", "+L(this._g)+", "+L(this._b)+")":"rgba("+L(this._r)+", "+L(this._g)+", "+L(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:L(100*x(this._r,255))+"%",g:L(100*x(this._g,255))+"%",b:L(100*x(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+L(100*x(this._r,255))+"%, "+L(100*x(this._g,255))+"%, "+L(100*x(this._b,255))+"%)":"rgba("+L(100*x(this._r,255))+"%, "+L(100*x(this._g,255))+"%, "+L(100*x(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(R[g(this._r,this._g,this._b,!0)]||!1)},toFilter:function(a){var b="#"+h(this._r,this._g,this._b,this._a),c=b,d=this._gradientType?"GradientType = 1, ":"";if(a){var e=P(a);c=e.toHex8String()}return"progid:DXImageTransform.Microsoft.gradient("+d+"startColorstr="+b+",endColorstr="+c+")"},toString:function(a){var b=!!a;a=a||this._format;var c=!1,d=this._a<1&&this._a>=0,e=!b&&d&&("hex"===a||"hex6"===a||"hex3"===a||"name"===a);return e?"name"===a&&0===this._a?this.toName():this.toRgbString():("rgb"===a&&(c=this.toRgbString()),"prgb"===a&&(c=this.toPercentageRgbString()),"hex"!==a&&"hex6"!==a||(c=this.toHexString()),"hex3"===a&&(c=this.toHexString(!0)),"hex8"===a&&(c=this.toHex8String()),"name"===a&&(c=this.toName()),"hsl"===a&&(c=this.toHslString()),"hsv"===a&&(c=this.toHsvString()),c||this.toHexString())},_applyModification:function(a,b){var c=a.apply(null,[this].concat([].slice.call(b)));return this._r=c._r,this._g=c._g,this._b=c._b,this.setAlpha(c._a),this},lighten:function(){return this._applyModification(l,arguments)},brighten:function(){return this._applyModification(m,arguments)},darken:function(){return this._applyModification(n,arguments)},desaturate:function(){return this._applyModification(i,arguments)},saturate:function(){return this._applyModification(j,arguments)},greyscale:function(){return this._applyModification(k,arguments)},spin:function(){return this._applyModification(o,arguments)},_applyCombination:function(a,b){return a.apply(null,[this].concat([].slice.call(b)))},analogous:function(){return this._applyCombination(t,arguments)},complement:function(){return this._applyCombination(p,arguments)},monochromatic:function(){return this._applyCombination(u,arguments)},splitcomplement:function(){return this._applyCombination(s,arguments)},triad:function(){return this._applyCombination(q,arguments)},tetrad:function(){return this._applyCombination(r,arguments)}},P.fromRatio=function(a,b){if("object"==typeof a){var c={};for(var d in a)a.hasOwnProperty(d)&&("a"===d?c[d]=a[d]:c[d]=D(a[d]));a=c}return P(a,b)},P.equals=function(a,b){return!(!a||!b)&&P(a).toRgbString()==P(b).toRgbString()},P.random=function(){return P.fromRatio({r:O(),g:O(),b:O()})},P.mix=function(a,b,c){c=0===c?0:c||50;var d,e=P(a).toRgb(),f=P(b).toRgb(),g=c/100,h=2*g-1,i=f.a-e.a;d=h*i==-1?h:(h+i)/(1+h*i),d=(d+1)/2;var j=1-d,k={r:f.r*d+e.r*j,g:f.g*d+e.g*j,b:f.b*d+e.b*j,a:f.a*g+e.a*(1-g)};return P(k)},P.readability=function(a,b){var c=P(a),d=P(b),e=c.toRgb(),f=d.toRgb(),g=c.getBrightness(),h=d.getBrightness(),i=Math.max(e.r,f.r)-Math.min(e.r,f.r)+Math.max(e.g,f.g)-Math.min(e.g,f.g)+Math.max(e.b,f.b)-Math.min(e.b,f.b);return{brightness:Math.abs(g-h),color:i}},P.isReadable=function(a,b){var c=P.readability(a,b);return c.brightness>125&&c.color>500},P.mostReadable=function(a,b){for(var c=null,d=0,e=!1,f=0;f125&&g.color>500,i=3*(g.brightness/125)+g.color/500;(h&&!e||h&&e&&i>d||!h&&!e&&i>d)&&(e=h,d=i,c=P(b[f]))}return c};var Q=P.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},R=P.hexNames=v(Q),S=function(){var a="[-\\+]?\\d+%?",b="[-\\+]?\\d*\\.\\d+%?",c="(?:"+b+")|(?:"+a+")",d="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?",e="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?";return{rgb:new RegExp("rgb"+d),rgba:new RegExp("rgba"+e),hsl:new RegExp("hsl"+d),hsla:new RegExp("hsla"+e),hsv:new RegExp("hsv"+d),hsva:new RegExp("hsva"+e),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();window.tinycolor=P}(),a(function(){a.fn.spectrum.load&&a.fn.spectrum.processNativeColorInputs()})}),c("text!Abstract/ui/templates/inputColor.html",[],function(){return'
    input-holder\'>
    \n
    \n\t
    \n\t\t
    \n\t
    \n
    \n'}),c("Abstract/ui/InputColor",["backbone","./Input","Spectrum","text!./templates/inputColor.html"],function(a,b,c,d){return b.extend({template:_.template(d),initialize:function(a){b.prototype.initialize.apply(this,arguments);var c=this.ppfx;this.colorCls=c+"field-color-picker",this.inputClass=c+"field "+c+"field-color",this.colorHolderClass=c+"field-colorp-c",this.listenTo(this.model,"change:value",this.handleModelChange)},handleModelChange:function(){b.prototype.handleModelChange.apply(this,arguments);var a=this.model.get("value"),c=this.getColorEl();a="none"===a?"#fff":a,c.spectrum("set",a),c.get(0).style.backgroundColor=a},getColorEl:function(){if(!this.colorEl){var a=this.model,b=$("
    ",{"class":this.colorCls}),c=b.get(0).style,d=this.target&&this.target.config?this.target.config.el:"";b.spectrum({appendTo:d||"body",maxSelectionSize:8,showPalette:!0,showAlpha:!0,chooseText:"Ok",cancelText:"⨯",palette:[],move:function(a){var b=1==a.getAlpha()?a.toHexString():a.toRgbString();c.backgroundColor=b},change:function(b){var d=1==b.getAlpha()?b.toHexString():b.toRgbString();d=d.replace(/ /g,""),c.backgroundColor=d,a.set("value",d)}}),this.colorEl=b}return this.colorEl},render:function(){return b.prototype.render.apply(this,arguments),this.$el.find("."+this.colorHolderClass).html(this.getColorEl()),this}})}),c("StyleManager/view/PropertyColorView",["backbone","./PropertyView","Abstract/ui/InputColor"],function(a,b,c){return b.extend({renderTemplate:function(){},renderInput:function(){if(!this.input){var a=new c({target:this.target,model:this.model,ppfx:this.ppfx});this.input=a.render(),this.$el.append(this.input.$el),this.$input=this.input.inputEl,this.$color=this.input.colorEl}this.setValue(this.componentValue)},setValue:function(a){this.input.setValue(a,{silent:1})}})}),c("text!StyleManager/templates/propertyFile.html",[],function(){return'
    \n\t
    input-holder\'>\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t
    \n\t
    \n
    \n
    '}),c("StyleManager/view/PropertyFileView",["backbone","./PropertyView","text!./../templates/propertyFile.html"],function(a,b,c){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),this.assets=this.target.get("assets"),this.modal=this.target.get("Modal"),this.am=this.target.get("AssetManager"),this.className=this.className+" "+this.pfx+"file",this.events["click #"+this.pfx+"close"]="removeFile",this.events["click #"+this.pfx+"images"]="openAssetManager",this.delegateEvents()},renderInput:function(){this.$input||(this.$input=$("",{placeholder:this.defaultValue,type:"text"})),this.$preview||(this.$preview=this.$el.find("#"+this.pfx+"preview-file")),this.$previewBox||(this.$previewBox=this.$el.find("#"+this.pfx+"preview-box")),this.componentValue&&this.componentValue!=this.defaultValue?this.setPreviewView(1):this.setPreviewView(0),this.setValue(this.componentValue,0)},setPreviewView:function(a){this.$previewBox&&(a?this.$previewBox.addClass(this.pfx+"show"):this.$previewBox.removeClass(this.pfx+"show"))},spreadUrl:function(a){this.setValue('url("'+a+'")'),this.setPreviewView(1)},setPreview:function(a){this.$preview&&this.$preview.css("background-image",a)},setValue:function(a,c){b.prototype.setValue.apply(this,arguments),this.setPreview(a)},renderTemplate:function(){this.$el.append(this.template({upload:"Upload",assets:"Images",pfx:this.pfx}))},cleanValue:function(){this.setPreviewView(0),this.model.set({value:""},{silent:!0})},removeFile:function(){this.model.set("value",this.defaultValue),b.prototype.cleanValue.apply(this,arguments),this.setPreviewView(0)},openAssetManager:function(a){var b=this;this.modal&&this.am&&(this.modal.setTitle("Select image"),this.modal.setContent(this.am.render()),this.am.setTarget(null),this.modal.open(),this.am.onSelect(function(c){b.modal.close(),b.spreadUrl(c.get("src")),b.valueChanged(a)}))}})}),c("text!StyleManager/templates/propertyComposite.html",[],function(){return'
    \n\tinput-holder\'>\n
    \n
    '}),c("StyleManager/view/PropertyCompositeView",["backbone","./PropertyView","text!./../templates/propertyComposite.html","require"],function(a,b,c,d){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),_.bindAll(this,"build"),this.config=a.config||{},this.className=this.className+" "+this.pfx+"composite"},valueUpdated:function(){this.model.get("detached")||b.prototype.valueUpdated.apply(this,arguments)},renderInput:function(){var a=this.model.get("properties");this.model.get("detached");if(a&&a.length&&(this.$input||(this.$input=$("",{value:0,type:"hidden"})),this.props||(this.props=this.model.get("properties")),!this.$props)){this.props.each(function(a,b){a&&"composite"==a.get("type")&&(this.props.remove(a),console.warn("Nested composite types not yet allowed."))},this);var b=d("./PropertiesView"),c=new b(this.getPropsConfig());this.$props=c.render().$el,this.$el.find("#"+this.pfx+"input-holder").html(this.$props)}},getPropsConfig:function(a){var b=this;return result={config:this.config,collection:this.props,target:this.target,propTarget:this.propTarget,onChange:function(a,c,d){var e=b.build();b.model.set("value",e,d)},customValue:function(a,c){return b.valueOnIndex(c,a)}},this.model.get("detached")&&delete result.onChange,result},getDefaultValue:function(){var a="";return this.props.each(function(b,c){a+=b.get("defaults")+b.get("unit")+" "}),a.replace(/ +$/,"")},valueOnIndex:function(a,b){var c=null,d=this.getComponentValue().split(" ");if(d.length&&d[a]&&(c=d[a],b&&b.model&&b.model.get("functionName"))){var e=this.fetchFromFunction(c);e&&(c=e)}return c},build:function(a,b,c){var d="";return this.model.get("properties").each(function(a){var b=a.getValue();func=a.get("functionName"),func&&(b=func+"("+b+")"),d+=b+" "}),d.replace(/ +$/,"")}})}),c("text!StyleManager/templates/propertyStack.html",[],function(){return"
    field <%= pfx %>stack\">\n\t\n\t\n
    \n
    "}),c("text!StyleManager/templates/layer.html",[],function(){return'
    \n \n
    \n
    <%= label %>
    \n
    \n\t
    \n
    \n
    \n
    \n
    '}),c("StyleManager/view/LayerView",["backbone","text!./../templates/layer.html"],function(a,b){return a.View.extend({events:{click:"updateIndex"},template:_.template(b),initialize:function(a){this.stackModel=a.stackModel||{},this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.className=this.pfx+"layer",this.sorter=a.sorter||null,this.listenTo(this.model,"destroy remove",this.remove),this.listenTo(this.model,"change:value",this.valueChanged),this.listenTo(this.model,"change:props",this.showProps),this.events["click #"+this.pfx+"close-layer"]="remove",this.events["mousedown > #"+this.pfx+"move"]="initSorter",this.model.get("preview")||this.$el.addClass(this.pfx+"no-preview"),this.$el.data("model",this.model),this.delegateEvents()},initSorter:function(a){this.sorter&&this.sorter.startSort(this.el)},getProps:function(){return this.stackModel.get?this.stackModel.get("properties"):null},valueChanged:function(){var a=this.model.get("preview");if(a){this.$preview||(this.$preview=this.$el.find("#"+this.pfx+"preview"));"function"==typeof a?a(this.getProps(),this.$preview):this.onPreview(this.getProps(),this.$preview)}},onPreview:function(a,b){var c=this.model.get("value").split(" "),d=3,e="";if(a.each(function(a,b){var f=c[b]||"";if(f&&"integer"==a.get("type")){var g=parseInt(f,10),h=f.replace(g,"");g=isNaN(g)?0:g,g>d&&(g=d),g<-d&&(g=-d),f=g+h}e+=f+" "}),this.stackModel.get){var f=this.stackModel.get("property");f&&(this.$preview.get(0).style[f]=e)}},showProps:function(){this.$props=this.model.get("props"),this.$el.find("#"+this.pfx+"inputs").html(this.$props.show()),this.model.set({props:null},{silent:!0})},remove:function(b){this.$props&&this.$props.detach(),b&&b.stopPropagation&&b.stopPropagation(),a.View.prototype.remove.apply(this,arguments),this.model.collection.contains(this.model)&&this.model.collection.remove(this.model),this.stackModel&&this.stackModel.set&&(this.stackModel.set({stackIndex:null},{silent:!0}),this.stackModel.trigger("updateValue"))},updateIndex:function(a){var b=this.getIndex();this.stackModel.set("stackIndex",b),this.model.collection&&this.model.collection.trigger("deselectAll"),this.$el.addClass(this.pfx+"active")},getIndex:function(){var a=0;return this.model.collection&&(a=this.model.collection.indexOf(this.model)),a},render:function(){return this.$el.html(this.template({label:"Layer "+this.model.get("index"),pfx:this.pfx})),this.$el.attr("class",this.className),this.valueChanged(),this}})}),c("StyleManager/view/LayersView",["backbone","./LayerView"],function(a,b){return a.View.extend({initialize:function(a){this.config=a.config||{},this.stackModel=a.stackModel,this.preview=a.preview,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.className=this.pfx+"layers "+this.ppfx+"field",this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"deselectAll",this.deselectAll),this.listenTo(this.collection,"reset",this.render);var b=this.config.em||"",c=b?b.get("Utils"):"";this.sorter=c?new c.Sorter({container:this.el,containerSel:"."+this.pfx+"layers",itemSel:"."+this.pfx+"layer",pfx:this.config.pStylePrefix}):"",this.$el.data("collection",this.collection)},addTo:function(a){var b=this.collection.indexOf(a);this.addToCollection(a,null,b)},addToCollection:function(a,c,d){var e=c||null,f=b;"undefined"!=typeof this.preview&&a.set("preview",this.preview);var g=new f({model:a,stackModel:this.stackModel,config:this.config,sorter:this.sorter}),h=g.render().el;if(e)e.appendChild(h);else if("undefined"!=typeof d){var i="before";this.$el.children().length==d&&(d--,i="after"),d<0?this.$el.append(h):this.$el.children().eq(d)[i](h)}else this.$el.append(h);return h},deselectAll:function(){this.$el.find("."+this.pfx+"layer").removeClass(this.pfx+"active")},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",this.className),this.sorter&&(this.sorter.plh=null),this}})}),c("StyleManager/view/PropertyStackView",["backbone","./PropertyCompositeView","text!./../templates/propertyStack.html","./../model/Layers","./LayersView"],function(a,b,c,d,e){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),this.model.set("stackIndex",null),this.className=this.pfx+"property "+this.pfx+"stack",this.events["click #"+this.pfx+"add"]="addLayer",this.listenTo(this.model,"change:stackIndex",this.indexChanged),this.listenTo(this.model,"updateValue",this.valueUpdated),this.delegateEvents()},targetUpdated:function(){this.model.get("detached")?this.refreshLayers():b.prototype.targetUpdated.apply(this,arguments)},getLayers:function(){return this.model.get("layers")},indexChanged:function(a){var b=this.getLayers().at(this.model.get("stackIndex"));b.set("props",this.$props),this.model.get("properties").each(function(a){a.trigger("targetUpdated")})},getStackValues:function(){return this.getLayers().pluck("value")},getPropsConfig:function(a){var c=this,d=b.prototype.getPropsConfig.apply(this,arguments);return d.onChange=function(a,b,d){var e=b.model,f=c.build();if(c.model.get("detached")){var g="";e.collection.indexOf(e);c.getLayers().each(function(a){var b=a.get("values")[e.get("property")];b&&(g+=(g?",":"")+b)}),b.updateTargetStyle(g,null,d)}else c.model.set("value",f,d)},d},valueOnIndex:function(a,b){var c=null;if(this.model.get("detached")){var d=b.componentValue.split(",");c=d[this.model.get("stackIndex")],c=c?c.trim():c}else{var e=this.getStackValues(),f=e[this.model.get("stackIndex")];if(!f)return;var g=f.split(" ");g.length&&g[a]&&(c=g[a])}return c},build:function(){var a=this.model.get("stackIndex");if(null!==a){var c=b.prototype.build.apply(this,arguments),d=this.getLayers().at(a);if(d){var e={};return this.model.get("properties").each(function(a){var b=a.getValue(),c=a.get("functionName");c&&(b=c+"("+b+")"),e[a.get("property")]=b}),d.set("values",e),d.set("value",c),this.createValue()}}},addLayer:function(a){if(this.getTarget()){var b=this.getLayers(),c=b.add({name:"test"}),d=b.indexOf(c);return c.set("value",this.getDefaultValue()),this.valueUpdated(),this.model.set("stackIndex",d),c}},valueUpdated:function(){this.model.get("detached")?this.model.get("properties").each(function(a){a.trigger("change:value")}):this.model.set("value",this.createValue())},createValue:function(){return this.getStackValues().join(", ")},renderLayers:function(){return this.$field||(this.$field=this.$el.find("> ."+this.pfx+"field")),this.$layers||(this.$layers=new e({collection:this.getLayers(),stackModel:this.model,preview:this.model.get("preview"),config:this.config +})),this.$field.append(this.$layers.render().el),this.$props.hide(),this},renderInput:function(){b.prototype.renderInput.apply(this,arguments),this.refreshLayers()},getLayersFromTarget:function(){var a=[],b=this.getTarget();if(!b)return a;var c=b.get("style");return this.model.get("properties").each(function(b){var d=c[b.get("property")];if(d)for(var e=d.split(","),f=0,g=e.length;f",{"class":"clear"})),this.$el.attr("class",this.pfx+"properties"),this}})}),c("text!StyleManager/templates/sector.html",[],function(){return'
    \n \n <%= label %>\n
    '}),c("StyleManager/view/SectorView",["backbone","./PropertiesView","text!./../templates/sector.html"],function(a,b,c){return a.View.extend({template:_.template(c),events:{},initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.target=a.target||{},this.propTarget=a.propTarget||{},this.open=this.model.get("open"),this.caretR="fa-caret-right",this.caretD="fa-caret-down",this.listenTo(this.model,"change:open",this.updateOpen),this.events["click ."+this.pfx+"title"]="toggle",this.delegateEvents()},updateOpen:function(){this.model.get("open")?this.show():this.hide()},show:function(){this.$el.addClass(this.pfx+"open"),this.$el.find("."+this.pfx+"properties").show(),this.$caret.removeClass(this.caretR).addClass(this.caretD)},hide:function(){this.$el.removeClass(this.pfx+"open"),this.$el.find("."+this.pfx+"properties").hide(),this.$caret.removeClass(this.caretD).addClass(this.caretR)},toggle:function(){var a=this.model.get("open")?0:1;this.model.set("open",a)},render:function(){return this.$el.html(this.template({pfx:this.pfx,label:this.model.get("name")})),this.$caret=this.$el.find("#"+this.pfx+"caret"),this.renderProperties(),this.$el.attr("class",this.pfx+"sector no-select"),this.updateOpen(),this},renderProperties:function(){var a=this.model.get("properties");if(a){var c=new b({collection:a,target:this.target,propTarget:this.propTarget,config:this.config});this.$el.append(c.render().el)}}})}),c("StyleManager/view/SectorsView",["backbone","./SectorView"],function(a,b){return a.View.extend({initialize:function(b){this.config=b.config||{},this.pfx=this.config.stylePrefix||"",this.target=b.target||{},this.propTarget={},_.extend(this.propTarget,a.Events),this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset",this.render),this.listenTo(this.target,"change:selectedComponent targetClassAdded targetClassRemoved targetClassUpdated targetStateUpdated targetStyleUpdated change:device",this.targetUpdated)},addTo:function(a){this.addToCollection(a)},targetUpdated:function(){var a=this.target.get("selectedComponent");if(a){var b=this.target.get("Config").devicePreviewMode,c=a.get("classes"),d=this.propTarget,e=this.target.getDeviceModel(),f=b?"":a.get("state"),g=e&&!b?e.get("width"):"";if(d.helper=null,c.length){var h=this.target.get("CssComposer"),i=_.filter(c.models,function(a){return a.get("active")}),j=h.get(i,f,g);if(j||(j=h.add(i,f,g),j.set("style",a.get("style")),a.set("style",{})),f){var k=this.target.get("SelectorManager"),l=k.add("hc-state"),m=h.get([l]);m?(h.getAll().remove(m),h.getAll().add(m)):m=h.add([l]),m.set("style",j.get("style")),d.helper=m}return d.model=j,void d.trigger("update")}d.model=a,d.trigger("update")}},addToCollection:function(a,c){var d=c||null,e=b,f=new e({model:a,id:this.pfx+a.get("name").replace(" ","_").toLowerCase(),name:a.get("name"),properties:a.get("properties"),target:this.target,propTarget:this.propTarget,config:this.config}),g=f.render().el;return d?d.appendChild(g):this.$el.append(g),g},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addToCollection(b,a)},this),this.$el.attr("id",this.pfx+"sectors"),this.$el.append(a),this}})}),c("StyleManager/main",["require","./config/config","./model/Sectors","./view/SectorsView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Sectors"),g=a("./view/SectorsView");return{name:"StyleManager",getConfig:function(){return d},init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);var i=d.pStylePrefix;return i&&(d.stylePrefix=i+d.stylePrefix),b=new f(d.sectors),c=new g({collection:b,target:d.em,config:d}),this},addSector:function(a,c){var d=this.getSector(a);return d||(c.id=a,d=b.add(c)),d},getSector:function(a){var c=b.where({id:a});return c.length?c[0]:null},getSectors:function(){return b},addProperty:function(a,b){var c=null,d=this.getSector(a);return d&&(c=d.get("properties").add(b)),c},getProperty:function(a,b){var c=null,d=this.getSector(a);return d&&(c=d.get("properties").where({property:b}),c=1==c.length?c[0]:c),c},getProperties:function(a){var b=null,c=this.getSector(a);return c&&(b=c.get("properties")),b},getModelToStyle:function(a){var b=a.get("classes");if(d.em&&b&&b.length){var c=d.em.get("Config").devicePreviewMode,e=d.em.getDeviceModel(),f=c?"":a.get("state"),g=e&&!c?e.get("width"):"",h=d.em.get("CssComposer"),i=_.filter(b.models,function(a){return a.get("active")}),j=h.get(i,f,g);if(j)return j}return a},render:function(){return c.render().el}}}}),c("StyleManager",["StyleManager/main"],function(a){return a}),c("AssetManager/model/Asset",["backbone"],function(a){return a.Model.extend({idAttribute:"src",defaults:{type:"",src:""},getFilename:function(){return this.get("src").split("/").pop()},getExtension:function(){return this.getFilename().split(".").pop()}})}),c("AssetManager/model/AssetImage",["backbone","./Asset"],function(a,b){return b.extend({defaults:_.extend({},b.prototype.defaults,{type:"image",unitDim:"px",height:0,width:0})})}),c("AssetManager/model/Assets",["backbone","./Asset","./AssetImage"],function(a,b,c){return a.Collection.extend({model:c,initialize:function(a,b){this.model=function(a,b){var d;switch(a.type){default:d=new c(a,b)}return d}},addImg:function(a,b){return this.add({type:"image",src:a},b),this},add:function(b,c){var d=[];b=b instanceof Array?b:[b];for(var e=0,f=b.length;e\n
    \n
    \n
    \n
    \n\t
    <%= name %>
    \n\t
    <%= dim %>
    \n
    \n
    \n
    '}),c("AssetManager/view/AssetImageView",["./AssetView","text!./../template/assetImage.html"],function(a,b){return a.extend({events:{click:"handleClick",dblclick:"handleDblClick"},template:_.template(b),initialize:function(b){a.prototype.initialize.apply(this,arguments),this.className+=" "+this.pfx+"asset-image",this.events["click #"+this.pfx+"close"]="removeItem",this.delegateEvents()},handleClick:function(){var a=this.config.onClick,b=this.model;b.collection.trigger("deselectAll"),this.$el.addClass(this.pfx+"highlight"),"function"==typeof a?a(b):this.updateTarget(b.get("src"))},handleDblClick:function(){var a=this.config.onDblClick,b=this.model;"function"==typeof a?a(b):this.updateTarget(b.get("src"));var c=b.collection.onSelect;"function"==typeof c&&c(this.model)},updateTarget:function(a){var b=this.model.collection.target;if(b&&b.set){var c=_.clone(b.get("attributes"));b.set("attributes",c),b.set("src",a)}},removeItem:function(a){a.stopPropagation(),this.model.collection.remove(this.model)},render:function(){var a=this.model.get("name"),b=this.model.get("width")&&this.model.get("height")?this.model.get("width")+" x "+this.model.get("height"):"";return a=a?a:this.model.get("src").split("/").pop(),a=a&&a.length>30?a.substring(0,30)+"...":a,b=b?b+(this.model.get("unitDim")?this.model.get("unitDim"):" px"):"",this.$el.html(this.template({name:a,src:this.model.get("src"),dim:b,pfx:this.pfx,ppfx:this.ppfx})),this.$el.attr("class",this.className),this}})}),c("text!AssetManager/template/fileUploader.html",[],function(){return'
    \n\t
    <%= title %>
    \n\t multiple/>\n\t
    \n
    '}),c("AssetManager/view/FileUploader",["backbone","text!./../template/fileUploader.html"],function(a,b){return a.View.extend({template:_.template(b),events:{},initialize:function(a){this.options=a||{},this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.target=this.collection||{},this.uploadId=this.pfx+"uploadFile",this.disabled=!this.config.upload,this.events["change #"+this.uploadId]="uploadFile",this.delegateEvents()},uploadFile:function(a){for(var b=a.dataTransfer?a.dataTransfer.files:a.target.files,c=new FormData,d=0;d\n
    \n
    \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n'}),c("AssetManager/view/AssetsView",["backbone","./AssetView","./AssetImageView","./FileUploader","text!./../template/assets.html"],function(a,b,c,d,e){return a.View.extend({template:_.template(e),initialize:function(a){this.options=a,this.config=a.config,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.listenTo(this.collection,"add",this.addToAsset),this.listenTo(this.collection,"deselectAll",this.deselectAll),this.className=this.pfx+"assets",this.events={},this.events.submit="addFromStr",this.delegateEvents()},addFromStr:function(a){a.preventDefault();var b=this.getInputUrl(),c=b.value.trim();if(c)return this.collection.addImg(c,{at:0}),this.getAssetsEl().scrollTop=0,b.value="",this},getAssetsEl:function(){return this.assets=this.el.querySelector("."+this.pfx+"assets"),this.assets},getInputUrl:function(){return this.inputUrl&&this.inputUrl.value||(this.inputUrl=this.el.querySelector("."+this.pfx+"add-asset input")),this.inputUrl},addToAsset:function(a){this.addAsset(a)},addAsset:function(a,d){var e=d||null,f=b;a.get("type").indexOf("image")>-1&&(f=c);var g=new f({model:a,config:this.config}),h=g.render().el;if(e)e.appendChild(h);else{var i=this.getAssetsEl();i&&i.insertBefore(h,i.firstChild)}return h},deselectAll:function(){this.$el.find("."+this.pfx+"highlight").removeClass(this.pfx+"highlight")},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addAsset(b,a)},this),this.$el.html(this.template({pfx:this.pfx,ppfx:this.ppfx,btnText:this.config.addBtnText})),this.$el.find("."+this.pfx+"assets").append(a),this}})}),c("AssetManager/config/config",[],function(){return{assets:[],stylePrefix:"am-",upload:"http://localhost/assets/upload",uploadText:"Drop files here or click to upload",addBtnText:"Add image"}}),c("AssetManager/main",["require","./model/Assets","./view/AssetsView","./view/FileUploader","./config/config"],function(a){return function(){var b,c,d,e={},f=a("./model/Assets"),g=a("./view/AssetsView"),h=a("./view/FileUploader");return{name:"AssetManager",storageKey:"assets",init:function(i){e=i||{};var j=a("./config/config");for(var k in j)k in e||(e[k]=j[k]);var l=e.pStylePrefix;l&&(e.stylePrefix=l+e.stylePrefix),b=new f(e.assets);var m={collection:b,config:e};return c=new g(m),d=new h(m),this},add:function(a){return b.add(a)},get:function(a){return b.where({src:a})[0]},getAll:function(){return b},remove:function(a){var b=this.get(a);return this.getAll().remove(b),this},store:function(a){var b={},c=JSON.stringify(this.getAll().toJSON());return b[this.storageKey]=c,!a&&e.stm&&e.stm.store(b),b},load:function(a){var b=a||"",c=this.storageKey;!b&&e.stm&&(b=e.stm.load(c));var d=[];try{d=JSON.parse(b[c])}catch(f){}return this.getAll().add(d),d},render:function(a){return this.rendered&&!a||(this.rendered=c.render().$el.add(d.render().$el)),this.rendered},setTarget:function(a){c.collection.target=a},onSelect:function(a){c.collection.onSelect=a},onClick:function(a){e.onClick=a},onDblClick:function(a){e.onDblClick=a}}}}),c("AssetManager",["AssetManager/main"],function(a){return a}),c("CssComposer/config/config",[],function(){return{stylePrefix:"css-",staticRules:"",rules:[]}}),c("CssComposer/model/Selectors",["backbone","require"],function(a,b){return a.Collection.extend({initialize:function(a,c){this.model=function(a,c){var d;return this.ClassTag||(this.ClassTag=b("SelectorManager/model/Selector")),d=new this.ClassTag(a,c)}}})}),c("CssComposer/model/CssRule",["backbone","./Selectors"],function(a,b){return a.Model.extend({defaults:{selectors:{},style:{},maxWidth:"",state:"",stylable:!0},initialize:function(a,c){if(this.config=a||{},this.sm=c?c.sm||{}:{},this.slct=this.config.selectors||[],this.sm.get){for(var d=[],e=0;e=0&&(c.css=d.em.getCss()),e.indexOf("styles")>=0&&(c.styles=JSON.stringify(b)),a||d.stm.store(c),c}},add:function(a,c,d){var e=c||"",g=d||"",h=this.get(a,e,g);return h?h:(h=new f({state:e,maxWidth:g}),h.get("selectors").add(a),b.add(h),h)},get:function(a,c,d){var e=null;return b.each(function(b){e||b.compare(a,c,d)&&(e=b)}),e},getAll:function(){return b},addCollection:function(a){for(var b=[],c=a instanceof Array?a:[a],e=0,f=c.length;e=0&&this.set("void",!0),this.opt=e,this.sm=e?e.sm||{}:{},this.config=a||{},this.defaultC=this.config.components||[],this.defaultCl=this.normalizeClasses(this.get("classes")||this.config.classes||[]),this.components=new b(this.defaultC,e),this.components.parent=this,this.set("attributes",this.get("attributes")||{}),this.set("components",this.components),this.set("classes",new c(this.defaultCl));var f=new d;f.setTarget(this),f.add(this.get("traits")),this.set("traits",f),this.initToolbar(),this.init()},init:function(){},initToolbar:function(){var a=this;if(!a.get("toolbar")){var b=[];a.get("draggable")&&b.push({attributes:{"class":"fa fa-arrows"},command:"tlb-move"}),a.get("copyable")&&b.push({attributes:{"class":"fa fa-clone"},command:"tlb-clone"}),a.get("removable")&&b.push({attributes:{"class":"fa fa-trash-o"},command:"tlb-delete"}),a.set("toolbar",b)}},loadTraits:function(a){var b=new d;b.setTarget(this),b.add(a),this.set("traits",b)},normalizeClasses:function(a){var b=[];if(this.sm.get){var c=this.sm.get("SelectorManager");if(c)return a.forEach(function(a){var d="";d="string"==typeof a?a:a.name;var e=c.add(d);b.push(e)}),b}},clone:function(a){var b=_.clone(this.attributes),c=this.get("components"),d=this.get("traits"),e=this.get("classes");return b.components=[],b.classes=[],b.traits=[],c.each(function(a,c){b.components[c]=a.clone(1)}),d.each(function(a,c){b.traits[c]=a.clone()}),e.each(function(a,c){b.classes[c]=a.get("name")}),b.status="",b.view="",a&&(this.opt.collection=null),new this.constructor(b,this.opt)},getName:function(){if(!this.name){var a=(this.cid.replace(/\D/g,""),this.get("type")),b=this.get("tagName");b="div"==b?"box":b,b=a?a:b,this.name=b.charAt(0).toUpperCase()+b.slice(1)}return this.name},toHTML:function(a){var b="",c=this,d=c.get("tagName"),e=c.get("void"),f="",g="",h=this.getAttrToHTML();for(var i in h){var j=h[i];g+=void 0!==typeof j&&""!==j?" "+i+'="'+j+'"':""}var k="";return c.get("classes").each(function(a){k+=" "+a.get("name")}),k=""!==k?' class="'+k.trim()+'"':"",_.isEmpty(c.get("style"))||(f=' id="'+c.cid+'" '),b+="<"+d+k+f+g+(e?"/":"")+">"+c.get("content"),c.get("components").each(function(a){b+=a.toHTML()}),e||(b+=""),b},getAttrToHTML:function(){var a=this.get("attributes")||{};return delete a.style,a}},{isComponent:function(a){return{tagName:a.tagName?a.tagName.toLowerCase():""}}})}),c("DomComponents/view/ComponentsView",["backbone","require"],function(a,b){return a.View.extend({initialize:function(a){this.opts=a||{},this.config=a.config||{},this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset",this.render)},addTo:function(a){var b=this.collection.indexOf(a);this.addToCollection(a,null,b),this.config.em&&this.config.em.trigger("add:component",a)},addToCollection:function(a,c,d){this.compView||(this.compView=b("./ComponentView"));for(var e=c||null,f=this.compView,g=this.opts.defaultTypes,h=this.opts.componentTypes,i=a.get("type"),j=0;j=0&&(b.html=d.em.getHtml()),c.indexOf("components")>=0&&(b.components=JSON.stringify(d.em.getComponents())),a||d.stm.store(b),b}},getComponent:function(){return b},getWrapper:function(){return this.getComponent()},getComponents:function(){return this.getWrapper().get("components")},addComponent:function(a){return this.getComponents().add(a)},render:function(){return c.render().el},clear:function(){for(var a=this.getComponents(),b=0,c=a.length;b div")},render:function(){return this.$el.attr({"class":this.ppfx+"frame"}),this}})}),c("Canvas/view/CanvasView",["backbone","./FrameView"],function(a,b){return a.View.extend({initialize:function(a){_.bindAll(this,"renderBody","onFrameScroll","clearOff"),this.config=a.config||{},this.em=this.config.em||{},this.ppfx=this.config.pStylePrefix||"",this.className=this.config.stylePrefix+"canvas",this.listenTo(this.em,"change:canvasOffset",this.clearOff),this.frame=new b({model:this.model.get("frame"),config:this.config})},onFrameScroll:function(){var a="px",b=this.frame.el.contentDocument.body;this.toolsEl.style.top="-"+b.scrollTop+a,this.toolsEl.style.left="-"+b.scrollLeft+a,this.em.trigger("canvasScroll")},renderBody:function(){var a=this.model.get("frame").get("wrapper");if(a){var b=this.ppfx,c=this.frame.$el.contents().find("body"),d=this.config.em.get("CssComposer"),e=this.config.em.get("Config");c.append(a.render()).append(d.render());var f=e.protectedCss,g="."+b+"dashed :not([contenteditable]) > *{outline: 1px dashed rgba(170,170,170,0.7); outline-offset: -2px}."+b+"comp-selected{outline: 3px solid #3b97e3 !important}."+b+"no-select{user-select: none; -webkit-user-select:none; -moz-user-select: none}."+b+"freezed{opacity: 0.5; pointer-events: none}."+b+"no-pointer{pointer-events: none}."+b+"plh-image{background:#f5f5f5; border:none; height:50px; width:50px; display:block; outline:3px solid #ffca6f; cursor:pointer}."+b+"grabbing{cursor: grabbing; cursor: -webkit-grabbing}* ::-webkit-scrollbar-track {background: rgba(0, 0, 0, 0.1)}* ::-webkit-scrollbar-thumb {background: rgba(255, 255, 255, 0.2)}* ::-webkit-scrollbar {width: 10px}"+(e.canvasCss||"");f&&c.append(""),this.config.em.trigger("loaded"),this.frame.el.contentWindow.onscroll=this.onFrameScroll,this.frame.udpateOffset();var h=document,i=this.frame.el.contentDocument;i.addEventListener("keydown",function(a){h.dispatchEvent(new KeyboardEvent(a.type,a))}),i.addEventListener("keyup",function(a){h.dispatchEvent(new KeyboardEvent(a.type,a))})}},offset:function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument.body;return{top:b.top+c.scrollTop,left:b.left+c.scrollLeft}},clearOff:function(){this.frmOff=null,this.cvsOff=null},getFrameOffset:function(){return this.frmOff||(this.frmOff=this.offset(this.frame.el)),this.frmOff},getCanvasOffset:function(){return this.cvsOff||(this.cvsOff=this.offset(this.el)),this.cvsOff},getElementPos:function(a){var b=this.getFrameOffset(),c=this.getCanvasOffset(),d=this.offset(a),e=d.top+b.top-c.top,f=d.left+b.left-c.left;return{top:e,left:f,height:a.offsetHeight,width:a.offsetWidth}},getPosition:function(){var a=this.frame.el.contentDocument.body,b=this.getFrameOffset(),c=this.getCanvasOffset();return{top:b.top+a.scrollTop-c.top,left:b.left+a.scrollLeft-c.left}},render:function(){if(this.wrapper=this.model.get("wrapper"),this.wrapper&&"function"==typeof this.wrapper.render){this.model.get("frame").set("wrapper",this.wrapper),this.$el.append(this.frame.render().el);var a=this.frame;a.el.onload=this.renderBody}var b=this.ppfx;toolsEl=$("
    ",{id:b+"tools"}).get(0),this.hlEl=$("
    ",{"class":b+"highlighter"}).get(0),this.badgeEl=$("
    ",{"class":b+"badge"}).get(0),this.placerEl=$("
    ",{"class":b+"placeholder"}).get(0),this.placerIntEl=$("
    ",{"class":b+"placeholder-int"}).get(0),this.ghostEl=$("
    ",{"class":b+"ghost"}).get(0),this.toolbarEl=$("
    ",{"class":b+"toolbar"}).get(0),this.resizerEl=$("
    ",{"class":b+"resizer"}).get(0),this.offsetEl=$("
    ",{"class":b+"offset-v"}).get(0),this.fixedOffsetEl=$("
    ",{"class":b+"offset-fixed-v"}).get(0),this.placerEl.appendChild(this.placerIntEl),toolsEl.appendChild(this.hlEl),toolsEl.appendChild(this.badgeEl),toolsEl.appendChild(this.placerEl),toolsEl.appendChild(this.ghostEl),toolsEl.appendChild(this.toolbarEl),toolsEl.appendChild(this.resizerEl),toolsEl.appendChild(this.offsetEl),toolsEl.appendChild(this.fixedOffsetEl),this.$el.append(toolsEl);var c=this.em.get("rte");return c&&toolsEl.appendChild(c.render()),this.toolsEl=toolsEl,this.$el.attr({"class":this.className}),this}})}),c("Canvas/main",["require","./config/config","./model/Canvas","./view/CanvasView"],function(a){return function(){var b,c={},d=a("./config/config"),e=a("./model/Canvas"),f=a("./view/CanvasView");return{getCanvasView:function(){return f},name:"Canvas",init:function(a){c=a||{};for(var g in d)g in c||(c[g]=d[g]);var h=c.pStylePrefix;h&&(c.stylePrefix=h+c.stylePrefix),b=new e(a),f=new f({model:b,config:c});var i=c.em.get("DomComponents");return i&&this.setWrapper(i),this},setWrapper:function(a){b.set("wrapper",a)},getElement:function(){return f.el},getFrameEl:function(){return f.frame.el},getBody:function(){return f.frame.el.contentDocument.body},getWrapperEl:function(){return this.getBody().querySelector("#wrapper")},getToolsEl:function(){return f.toolsEl},getHighlighter:function(){return f.hlEl},getBadgeEl:function(){return f.badgeEl},getPlacerEl:function(){return f.placerEl},getGhostEl:function(){return f.ghostEl},getToolbarEl:function(){return f.toolbarEl},getResizerEl:function(){return f.resizerEl},getOffsetViewerEl:function(){return f.offsetEl},getFixedOffsetViewerEl:function(){return f.fixedOffsetEl},render:function(){return f.render().el},getOffset:function(){var a=this.offset(this.getFrameEl()),b=this.offset(this.getElement());return{top:a.top-b.top,left:a.left-b.left}},offset:function(a){var b=a.getBoundingClientRect();return{top:b.top+document.body.scrollTop,left:b.left+document.body.scrollLeft}},getElementPos:function(a){return f.getElementPos(a)},getTargetToElementDim:function(a,b,d){var e=d||{},g=f.getPosition(),h=e.elPos||f.getElementPos(b),i=d.toRight||0,j=e.targetHeight||a.offsetHeight,k=e.targetWidth||a.offsetWidth,l=e.event||null,m=h.top-j,n=h.left;n+=i?h.width:0,n=i?n-k:n;var o=nh.top+h.height?h.top+h.height:p;var q={top:p,left:o,elementTop:h.top,elementLeft:h.left,elementWidth:h.width,elementHeight:h.height,targetWidth:a.offsetWidth,targetHeight:a.offsetHeight,canvasTop:g.top,canvasLeft:g.left};return l&&c.em&&c.em.trigger(l,q),q},getMouseRelativePos:function(a,b){var c=b||{},d=0,e=0,f=c.subWinOffset,g=a.target.ownerDocument,h=g.defaultView||g.parentWindow,i=h.frameElement,j=f?h.pageYOffset:0,k=f?h.pageXOffset:0;if(i){var l=i.getBoundingClientRect();d=l.top||0,e=l.left||0}return{y:a.clientY+d-j,x:a.clientX+e-k}},getFrameWrapperEl:function(){return f.frame.getWrapper()}}}}),c("Canvas",["Canvas/main"],function(a){return a}),c("Commands/config/config",[],function(){return{ESCAPE_KEY:27,stylePrefix:"com-",defaults:[],em:null,firstCentered:!0,newFixedH:!1,minComponentH:50,minComponentW:50}}),c("Commands/view/CommandAbstract",["backbone"],function(a){return a.View.extend({initialize:function(a){this.config=a||{},this.editorModel=this.em=this.config.em||{},this.pfx=this.config.stylePrefix,this.ppfx=this.config.pStylePrefix,this.hoverClass=this.pfx+"hover",this.badgeClass=this.pfx+"badge",this.plhClass=this.pfx+"placeholder",this.freezClass=this.ppfx+"freezed",this.canvas=this.em.get&&this.em.get("Canvas"),this.em.get&&this.setElement(this.getCanvas()),this.canvas&&(this.$canvas=this.$el,this.$wrapper=$(this.getCanvasWrapper()),this.frameEl=this.canvas.getFrameEl(),this.canvasTool=this.getCanvasTools(),this.bodyEl=this.getCanvasBody()),this.init(this.config)},onFrameScroll:function(a){},getCanvas:function(){return this.canvas.getElement()},getCanvasBody:function(){return this.canvas.getBody()},getCanvasWrapper:function(){return this.canvas.getWrapperEl()},getCanvasTools:function(){return this.canvas.getToolsEl()},offset:function(a){var b=a.getBoundingClientRect();return{top:b.top+a.ownerDocument.body.scrollTop,left:b.left+a.ownerDocument.body.scrollLeft}},init:function(a){},run:function(a,b){},stop:function(a,b){}})}),c("Abstract/view/DomainViews",["backbone"],function(a){return a.View.extend({itemView:"",itemsView:"",itemType:"type",initialize:function(a,b){this.config=b||{}},addTo:function(a){this.add(a)},add:function(a,b){var c=b||null,d=this.itemView,e=a.get(this.itemType);this.itemsView&&this.itemsView[e]&&(d=this.itemsView[e]);var f=new d({model:a,config:this.config},this.config),g=f.render().el;c?c.appendChild(g):this.$el.append(g)},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.length&&this.collection.each(function(b){this.add(b,a)},this),this.$el.append(a),this}})}),c("DomComponents/view/ToolbarButtonView",["backbone"],function(a){return a.View.extend({events:{mousedown:"handleClick"},attributes:function(){return this.model.get("attributes")},initialize:function(a){this.editor=a.config.editor},handleClick:function(){var a=this.model.get("command");"function"==typeof a&&a(this.editor),"string"==typeof a&&this.editor.runCommand(a)},render:function(){var a=this.editor.getConfig();return this.el.className+=" "+a.stylePrefix+"toolbar-item",this}})}),c("DomComponents/view/ToolbarView",["backbone","Abstract/view/DomainViews","./ToolbarButtonView"],function(a,b,c){return b.extend({itemView:c,initialize:function(a){this.config={editor:a.editor||""},this.listenTo(this.collection,"reset",this.render)}})}),c("DomComponents/model/ToolbarButton",["backbone"],function(a){return a.Model.extend({defaults:{command:"",attributes:{}}})}),c("DomComponents/model/Toolbar",["backbone","./ToolbarButton"],function(a,b){return a.Collection.extend({model:b})}),c("Commands/view/SelectComponent",["require","DomComponents/view/ToolbarView","DomComponents/model/Toolbar"],function(a){var b=a("DomComponents/view/ToolbarView"),c=a("DomComponents/model/Toolbar");return{init:function(a){_.bindAll(this,"onHover","onOut","onClick","onKeyPress")},enable:function(){_.bindAll(this,"copyComp","pasteComp","onFrameScroll"),this.frameOff=this.canvasOff=this.adjScroll=null;var a=this.config.em.get("Config");this.startSelectComponent(),this.toggleClipboard(a.copyPaste);var b=this.config.em;b.on("component:update",this.updateAttached,this),b.on("change:canvasOffset",this.updateAttached,this),b.on("change:selectedComponent",this.updateToolbar,this)},toggleClipboard:function(a){var b=a||0;b?(key("⌘+c, ctrl+c",this.copyComp),key("⌘+v, ctrl+v",this.pasteComp)):(key.unbind("⌘+c, ctrl+c"),key.unbind("⌘+v, ctrl+v"))},copyComp:function(){var a=this.editorModel.get("selectedComponent");a&&a.get("copyable")&&this.editorModel.set("clipboard",a)},pasteComp:function(){var a=this.editorModel.get("clipboard"),b=this.editorModel.get("selectedComponent");if(a&&b&&b.collection){var c=b.collection.indexOf(b),d=a.clone();b.collection.add(d,{at:c+1})}},getCanvasBodyEl:function(){return this.$bodyEl||(this.$bodyEl=$(this.getCanvasBody())),this.$bodyEl},startSelectComponent:function(){this.toggleSelectComponent(1)},stopSelectComponent:function(){this.toggleSelectComponent()},toggleSelectComponent:function(a){var b="*",c=a?"on":"off";this.getCanvasBodyEl()[c]("mouseover",b,this.onHover)[c]("mouseout",b,this.onOut)[c]("click",b,this.onClick);var d=this.getContentWindow();d[c]("scroll",this.onFrameScroll),d[c]("keydown",this.onKeyPress)},onKeyPress:function(a){var b=a.which||a.keyCode,c=this.editorModel.get("selectedComponent"),d="BODY"!==this.frameEl.contentDocument.activeElement.tagName;if((8==b||46==b)&&(d||a.preventDefault(),c&&!d)){if(!c.get("removable"))return;c.set("status",""),c.destroy(),this.hideBadge(),this.clean(),this.hideHighlighter(),this.editorModel.set("selectedComponent",null)}},onHover:function(a){a.stopPropagation();var b=a.target;this.adjScroll||(this.adjScroll=1,this.onFrameScroll(a),this.updateAttached());var c=this.getElementPos(b);this.updateBadge(b,c),this.updateHighlighter(b,c),this.showElementOffset(b,c)},onOut:function(a){a.stopPropagation(),this.hideBadge(),this.hideHighlighter(),this.hideElementOffset()},showElementOffset:function(a,b){var c=$(a),d=c.data("model");d&&"selected"==d.get("status")||this.editor.runCommand("show-offset",{el:a,elPos:b})},hideElementOffset:function(a,b){this.editor.stopCommand("show-offset")},showFixedElementOffset:function(a,b){this.editor.runCommand("show-offset",{el:a,elPos:b,state:"Fixed"})},hideFixedElementOffset:function(a,b){this.editor&&this.editor.stopCommand("show-offset",{state:"Fixed"})},hideHighlighter:function(){this.canvas.getHighlighter().style.display="none"},onClick:function(a){var b=$(a.target).data("model");if(b){var c=b.get("stylable");(c instanceof Array||c)&&this.onSelect(a,a.target)}},updateBadge:function(a,b){var c=$(a);this.cacheEl=a;var d=c.data("model");if(d&&d.get("badgable")){var e=this.getBadge();e.innerHTML=d.getName();var f=e.style,g="px";f.display="block";var h=this.canvas.getCanvasView().getPosition(),i=e?e.offsetHeight:0,j=e?e.offsetWidth:0,k=b.top-i"),e=this.codeMirror.clone().set({label:c,codeName:a,theme:b,input:d[0]}),f=new this.cm.EditorView({model:e,config:this.cm.getConfig()}).render().$el;return e.init(d[0]),{el:e,$el:f}},enable:function(){if(!this.$editors){var a=this.buildEditor("htmlmixed","hopscotch","HTML"),b=this.buildEditor("css","hopscotch","CSS");this.htmlEditor=a.el,this.cssEditor=b.el,this.$editors=$("
    ",{"class":this.pfx+"export-dl"}),this.$editors.append(a.$el).append(b.$el)}this.modal&&(this.modal.setTitle("Export template"),this.modal.setContent(this.$editors),this.modal.open());var c=this.protCss||"";this.htmlEditor.setContent(this.cm.getCode(this.components,"html",this.cssc)),this.cssEditor.setContent(c+this.cm.getCode(this.wrapper,"css",this.cssc)),this.sender&&this.sender.set("active",!1)},stop:function(){}}}),c("Commands/view/SwitchVisibility",[],function(){return{run:function(a){a.Canvas.getBody().className=this.ppfx+"dashed"},stop:function(a){a.Canvas.getBody().className=""}}}),c("Navigator/config/config",[],function(){return{stylePrefix:"nv-",sortable:1,hidable:1,hideTextnode:1,containerId:"navigator",itemClass:"item",itemsClass:"items"}}),c("text!Navigator/template/item.html",[],function(){return'<% if (hidable) { %>\n\t\n<% } %>\n\n
    \n
    \n \t\n\t\t\n\t\t\n
    \n
    \n\n
    <%= (count ? count : \'\') %>
    \n\n
    \n\t\n
    \n\n
    \n'}),c("Navigator/view/ItemView",["backbone","text!./../template/item.html","require"],function(a,b,c){return a.View.extend({template:_.template(b),initialize:function(a){this.opt=a,this.config=a.config,this.em=a.config.em,this.ppfx=this.em.get("Config").stylePrefix,this.sorter=a.sorter||{},this.pfx=this.config.stylePrefix,"undefined"==typeof this.model.get("open")&&this.model.set("open",!1),this.listenTo(this.model.components,"remove add change reset",this.checkChildren),this.listenTo(this.model,"destroy remove",this.remove),this.listenTo(this.model,"change:status",this.updateStatus),this.listenTo(this.model,"change:open",this.updateOpening),this.className=this.pfx+"item no-select",this.editBtnCls=this.pfx+"nav-item-edit",this.inputNameCls=this.ppfx+"nav-comp-name",this.caretCls=this.ppfx+"nav-item-caret",this.titleCls=this.pfx+"title",this.customNameProp="custom-name",this.events={},this.events["click > #"+this.pfx+"btn-eye"]="toggleVisibility",this.events["click ."+this.caretCls]="toggleOpening",this.events["click ."+this.titleCls]="handleSelect",this.events["click ."+this.editBtnCls]="handleEdit",this.events["blur ."+this.inputNameCls]="handleEditEnd",this.$el.data("model",this.model),this.$el.data("collection",this.model.get("components")),a.config.sortable&&(this.events["mousedown > #"+this.pfx+"move"]="startSort"),this.delegateEvents()},handleEdit:function(a){a.stopPropagation();var b=this.getInputName();b.readOnly=!1,b.focus()},handleEditEnd:function(a){a.stopPropagation();var b=this.getInputName();b.readOnly=!0,this.model.set(this.customNameProp,b.value)},getInputName:function(){return this.inputName||(this.inputName=this.el.querySelector("."+this.inputNameCls)),this.inputName},updateOpening:function(){var a=this.opt.opened||{},b=this.model;b.get("open")?(this.$el.addClass("open"),this.$caret.addClass("fa-chevron-down"),a[b.cid]=b):(this.$el.removeClass("open"),this.$caret.removeClass("fa-chevron-down"),delete a[b.cid])},toggleOpening:function(a){a.stopPropagation(),this.model.components.length&&this.model.set("open",!this.model.get("open"))},handleSelect:function(a){a.stopPropagation();var b=this.em;if(b){var c=b.get("selectedComponent");c&&c.set("status",""),this.model.set("status","selected"),b.set("selectedComponent",this.model)}},startSort:function(a){this.sorter&&this.sorter.startSort(a.target)},freeze:function(){this.$el.addClass(this.pfx+"opac50"),this.model.set("open",0)},unfreeze:function(){this.$el.removeClass(this.pfx+"opac50")},updateStatus:function(a){var b=this.model.get("status"),c=this.pfx+"selected",d=this.$el;switch(b){case"selected":d.addClass(c);break;case"moving":break;default:d.removeClass(c)}},toggleVisibility:function(a){this.$eye||(this.$eye=this.$el.find("> #"+this.pfx+"btn-eye"));var b=_.clone(this.model.get("style")),c=this.pfx+"hide";this.isVisible()?(this.$el.addClass(c),this.$eye.addClass("fa-eye-slash"),b.display="none"):(this.$el.removeClass(c),this.$eye.removeClass("fa-eye-slash"),delete b.display),this.model.set("style",b)},isVisible:function(){var a=this.model.get("style"),b=a.display;if(!b||"none"!=b)return 1},checkChildren:function(){var a=this.countChildren(this.model),b=this.pfx,c="> ."+b+"title-c > ."+b+"title";this.$counter||(this.$counter=this.$el.find("> #"+b+"counter")),a?(this.$el.find(c).removeClass(b+"no-chld"),this.$counter.html(a)):(this.$el.find(c).addClass(b+"no-chld"),this.$counter.empty(),this.model.set("open",0))},countChildren:function(a){var b=0;return a.components.each(function(a){var c=this.opt.isCountable,d=this.config.hideTextnode;c&&!c(a,d)||b++},this),b},render:function(){var a=this.pfx,b=this.isVisible(),d=this.countChildren(this.model);return this.$el.html(this.template({title:this.model.get(this.customNameProp)||this.model.getName(),addClass:d?"":a+"no-chld",editBtnCls:this.editBtnCls,inputNameCls:this.inputNameCls,caretCls:this.caretCls,count:d,visible:b,hidable:this.config.hidable,prefix:a,ppfx:this.ppfx})),"undefined"==typeof ItemsView&&(ItemsView=c("./ItemsView")),this.$components=new ItemsView({collection:this.model.components,config:this.config,sorter:this.sorter,opened:this.opt.opened,parent:this.model}).render().$el,this.$el.find("."+a+"children").html(this.$components),this.$caret=this.$el.find("> ."+a+"title-c > ."+a+"title > #"+a+"caret"),this.model.get("draggable")&&this.config.sortable||this.$el.find("> #"+a+"move").detach(),b||(this.className+=" "+a+"hide"),this.$el.attr("class",_.result(this,"className")),this.updateOpening(),this.updateStatus(),this}})}),c("Navigator/view/ItemsView",["backbone","./ItemView"],function(a,b){return a.View.extend({initialize:function(a){if(this.opt=a,this.config=a.config,this.preview=a.preview,this.ppfx=a.config.pStylePrefix||"",this.pfx=a.config.stylePrefix||"",this.parent=a.parent,this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset resetNavigator",this.render),this.className=this.pfx+"items",this.config.sortable&&!this.opt.sorter){var b=this.pfx,c=this.config.em.get("Utils");this.opt.sorter=new c.Sorter({container:this.el,containerSel:"."+b+"items",itemSel:"."+b+"item",ppfx:this.ppfx,pfx:b,nested:1})}this.sorter=this.opt.sorter||"",this.parent||(this.className+=" "+this.pfx+this.config.containerId),this.$el.data("collection",this.collection)},addTo:function(a){var b=this.collection.indexOf(a);this.addToCollection(a,null,b)},addToCollection:function(a,c,d){var e=c||null,f=b,g=new f({model:a,config:this.config,sorter:this.sorter,isCountable:this.isCountable,opened:this.opt.opened}),h=g.render().el;if(e)e.appendChild(h);else if("undefined"!=typeof d){var i="before";this.$el.children().length==d&&(d--,i="after"),d<0?this.$el.append(h):this.$el.children().eq(d)[i](h)}else this.$el.append(h);return h},isCountable:function(a,b){var c=a.get("type"),d=a.get("tagName");return"textnode"!=c&&"br"!=d||!b},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.isCountable(b,this.config.hideTextnode)&&this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",_.result(this,"className")),this}})}),c("Navigator/main",["require","./config/config","./view/ItemsView"],function(a){function b(b,c){var d=c,e=a("./config/config"),f=a("./view/ItemsView");for(var g in e)g in d||(d[g]=e[g]);var h={collection:b,config:d,opened:c.opened||{}};this.ItemsView=new f(h)}return b.prototype={render:function(){return this.ItemsView.render().$el}},b}),c("Navigator",["Navigator/main"],function(a){return a}),c("Commands/view/OpenLayers",["Navigator"],function(a){return{run:function(b,c){if(!this.$layers){var d=b.DomComponents.getComponent().get("components"),e=b.getConfig(),f=b.Panels,g=e.layers.stylePrefix||"nv-";e.layers.stylePrefix=e.stylePrefix+g,e.layers.pStylePrefix=e.stylePrefix,e.layers.em=b.editor,e.layers.opened=b.editor.get("opened");var h=new a(d,e.layers);this.$layers=h.render(),f.getPanel("views-container")?this.panel=f.getPanel("views-container"):this.panel=f.addPanel({id:"views-container"}),this.panel.set("appendContent",this.$layers).trigger("change:appendContent")}this.$layers.show()},stop:function(){this.$layers&&this.$layers.hide()}}}),c("Commands/view/OpenStyleManager",["StyleManager"],function(a){return{run:function(a,b){if(this.sender=b,!this.$cn){var c=a.getConfig(),d=a.Panels;this.$cn=$("
    "),this.$cn2=$("
    "),this.$cn.append(this.$cn2);var e=a.DeviceManager;if(e&&c.showDevices){var f=d.addPanel({id:"devices-c"});f.set("appendContent",e.render()).trigger("change:appendContent")}var g=a.SelectorManager;g&&this.$cn2.append(g.render([])),this.$cn2.append(a.StyleManager.render());var h=a.StyleManager.getConfig();this.$header=$("
    ",{"class":h.stylePrefix+"header",text:h.textNoElement}),this.$cn.append(this.$header),d.getPanel("views-container")?this.panel=d.getPanel("views-container"):this.panel=d.addPanel({id:"views-container"}),this.panel.set("appendContent",this.$cn).trigger("change:appendContent"),this.target=a.editor,this.listenTo(this.target,"change:selectedComponent",this.toggleSm)}this.toggleSm()},toggleSm:function(){this.sender.get("active")&&(this.target.get("selectedComponent")?(this.$cn2.show(),this.$header.hide()):(this.$cn2.hide(),this.$header.show()))},stop:function(){this.$cn2&&this.$cn2.hide(),this.$header&&this.$header.hide()}}}),c("Commands/view/OpenTraitManager",[],function(){return{run:function(a,b){var c=a.Config,d=c.stylePrefix,e=a.TraitManager;if(!this.obj){var f=e.getTraitsViewer(),g=e.getConfig();this.obj=$("
    ").append('
    '+g.labelContainer+"
    ").get(0),this.obj.appendChild(f.render().el);var h=a.Panels;h.getPanel("views-container")?panelC=h.getPanel("views-container"):panelC=h.addPanel({id:"views-container"}),panelC.set("appendContent",this.obj).trigger("change:appendContent")}this.obj.style.display="block"},stop:function(){this.obj&&(this.obj.style.display="none")}}}),c("Commands/view/OpenBlocks",[],function(){return{run:function(a,b){var c=a.Config,d=(c.stylePrefix,a.BlockManager);if(!this.blocks){this.blocks=$("
    ").get(0),this.blocks.appendChild(d.render());var e=a.Panels;e.getPanel("views-container")?panelC=e.getPanel("views-container"):panelC=e.addPanel({id:"views-container"}),panelC.set("appendContent",this.blocks).trigger("change:appendContent")}this.blocks.style.display="block"},stop:function(){this.blocks&&(this.blocks.style.display="none")}}}),c("Commands/view/OpenAssets",[],function(){return{run:function(a,b,c){var d=c||{},e=(a.getConfig(),a.Modal),f=a.AssetManager;f.onClick(d.onClick),f.onDblClick(d.onDblClick),f.setTarget(d.target),f.onSelect(d.onSelect),e.setTitle(d.modalTitle||"Select image"),e.setContent(f.render()),e.open()}}}),c("Commands/view/ShowOffset",[],function(){return{getOffsetMethod:function(a){var b=a||"";return"get"+b+"OffsetViewerEl"},run:function(a,b,c){if(a.getConfig().showOffsets){var d=a.Canvas,e=c||{},f=e.el||"",g=e.state||"",h=e.elPos||d.getElementPos(f),i=window.getComputedStyle(f),j=this.ppfx,k=g+"State",l=this.getOffsetMethod(g),m=d[l]();m.style.display="block";var n=this["marginT"+g],o=this["marginB"+g],p=this["marginL"+g],q=this["marginR"+g],r=this["padT"+g],s=this["padB"+g],t=this["padL"+g],u=this["padR"+g];if(!this[k]){var v=g.toLowerCase(),w=v+"margin-v",x=v+"padding-v",y=$("
    ",{"class":j+w}).get(0),z=$("
    ",{"class":j+x}).get(0),A=j+w+"-el",B=j+x+"-el";n=$("
    ",{"class":j+w+"-top "+A}).get(0),o=$("
    ",{"class":j+w+"-bottom "+A}).get(0),p=$("
    ",{"class":j+w+"-left "+A}).get(0),q=$("
    ",{"class":j+w+"-right "+A}).get(0),r=$("
    ",{"class":j+x+"-top "+B}).get(0),s=$("
    ",{"class":j+x+"-bottom "+B}).get(0),t=$("
    ",{"class":j+x+"-left "+B}).get(0),u=$("
    ",{"class":j+x+"-right "+B}).get(0),this["marginT"+g]=n,this["marginB"+g]=o,this["marginL"+g]=p,this["marginR"+g]=q,this["padT"+g]=r,this["padB"+g]=s,this["padL"+g]=t,this["padR"+g]=u,y.appendChild(n),y.appendChild(o),y.appendChild(p),y.appendChild(q),z.appendChild(r),z.appendChild(s),z.appendChild(t),z.appendChild(u),m.appendChild(y),m.appendChild(z),this[k]="1"}var C="px",D=i.marginLeft.replace(C,""),E=parseInt(i.marginTop.replace(C,"")),F=parseInt(i.marginBottom.replace(C,"")),G=n.style,H=o.style,I=p.style,J=q.style,K=r.style,L=s.style,M=t.style,N=u.style,O=parseInt(h.left);G.height=i.marginTop,G.width=i.width,G.top=h.top-i.marginTop.replace(C,"")+C,G.left=O+C,H.height=i.marginBottom,H.width=i.width,H.top=h.top+h.height+C,H.left=O+C;var P=h.height+E+F+C,Q=h.top-E+C;I.height=P,I.width=i.marginLeft,I.top=Q,I.left=O-D+C,J.height=P,J.width=i.marginRight,J.top=Q,J.left=O+h.width+C;var R=parseInt(i.paddingTop.replace(C,""));K.height=i.paddingTop,K.width=i.width,K.top=h.top+C,K.left=O+C;var S=parseInt(i.paddingBottom.replace(C,""));L.height=i.paddingBottom,L.width=i.width,L.top=h.top+h.height-S+C,L.left=O+C;var T=h.height-S-R+C,U=h.top+R+C;M.height=T,M.width=i.paddingLeft,M.top=U,M.left=h.left+C;var V=parseInt(i.paddingRight.replace(C,""));N.height=T,N.width=i.paddingRight,N.top=U,N.left=h.left+h.width-V+C}},stop:function(a,b,c){var d=c||{},e=d.state||"",f=this.getOffsetMethod(e),g=a.Canvas,h=g[f]();h.style.display="none"}}}),c("Commands/view/Fullscreen",[],function(){return{isEnabled:function(){var a=document;return a.fullscreenElement||a.webkitFullscreenElement||a.mozFullScreenElement?1:0},enable:function(a){var b="";return a.requestFullscreen?a.requestFullscreen():a.webkitRequestFullscreen?(b="webkit",a.webkitRequestFullscreen()):a.mozRequestFullScreen?(b="moz",a.mozRequestFullScreen()):a.msRequestFullscreen?a.msRequestFullscreen():console.warn("Fullscreen not supported"),b},disable:function(){var a=document;a.exitFullscreen?a.exitFullscreen():a.webkitExitFullscreen?a.webkitExitFullscreen():a.mozCancelFullScreen?a.mozCancelFullScreen():a.msExitFullscreen&&a.msExitFullscreen()},fsChanged:function(a,b){var c=(document,(a||"")+"fullscreenchange");this.isEnabled()||(this.stop(null,this.sender),document.removeEventListener(c,this.fsChanged))},run:function(a,b){this.sender=b;var c=this.enable(a.getContainer());this.fsChanged=this.fsChanged.bind(this,c),document.addEventListener(c+"fullscreenchange",this.fsChanged),a&&a.trigger("change:canvasOffset")},stop:function(a,b){b&&b.set&&b.set("active",!1),this.disable(),a&&a.trigger("change:canvasOffset")}}}),c("Commands/view/Preview",[],function(){return{getPanels:function(a){return this.panels||(this.panels=a.Panels.getPanelsEl()),this.panels},tglPointers:function(a,b){var c=a.Canvas.getBody().querySelectorAll("."+this.ppfx+"no-pointer");_.each(c,function(a){a.style.pointerEvents=b?"":"all"})},run:function(a,b){b&&b.set&&b.set("active",!1),a.stopCommand("sw-visibility");var c=this,d=this.getPanels(a),e=a.Canvas.getElement(),f=a.getEl(),g=a.Config.stylePrefix;this.helper||(this.helper=document.createElement("span"),this.helper.className=g+"off-prv fa fa-eye-slash",f.appendChild(this.helper),this.helper.onclick=function(){c.stop(a)}),this.helper.style.display="inline-block",this.tglPointers(a),d.style.display="none";var h=e.style;h.width="100%",h.height="100%",h.top="0",h.left="0",h.padding="0",h.margin="0",a.trigger("change:canvasOffset")},stop:function(a,b){var c=this.getPanels(a);a.runCommand("sw-visibility"),a.getModel().runDefault(),c.style.display="block";var d=a.Canvas.getElement();d.setAttribute("style",""),this.helper&&(this.helper.style.display="none"),a.trigger("change:canvasOffset"),this.tglPointers(a,1)}}}),c("Commands/view/Resize",[],function(){return{run:function(a,b,c){var d=c&&c.el||"",e=a.Canvas,f=this.canvasResizer,g=c.options||{};if(!f){var h=e.getCanvasView();g.ratioDefault=1,g.appendTo=e.getResizerEl(),g.prefix=a.getConfig().stylePrefix,g.posFetcher=h.getElementPos.bind(h),g.mousePosFetcher=e.getMouseRelativePos,this.canvasResizer=a.Utils.Resizer.init(g),f=this.canvasResizer}f.setOptions(g),f.focus(d)},stop:function(){this.canvasResizer&&this.canvasResizer.blur()}}}),c("Commands/main",["require","./config/config","./view/CommandAbstract","./view/SelectComponent","./view/CreateComponent","./view/DeleteComponent","./view/ImageComponent","./view/MoveComponent","./view/TextComponent","./view/InsertCustom","./view/ExportTemplate","./view/SwitchVisibility","./view/OpenLayers","./view/OpenStyleManager","./view/OpenTraitManager","./view/OpenBlocks","./view/OpenAssets","./view/ShowOffset","./view/Fullscreen","./view/Preview","./view/Resize"],function(a){return function(){var b={},c={},d={},e=a("./config/config"),f=a("./view/CommandAbstract"),g=function(a,b){return delete b.initialize,c[a]=f.extend(b),this};return{name:"Commands",init:function(c){b=c||{};for(var f in e)f in b||(b[f]=e[f]);var g=b.pStylePrefix;g&&(b.stylePrefix=g+b.stylePrefix);for(var h in b.defaults){var i=b.defaults[h];i.id&&this.add(i.id,i)}return d["select-comp"]=a("./view/SelectComponent"),d["create-comp"]=a("./view/CreateComponent"),d["delete-comp"]=a("./view/DeleteComponent"),d["image-comp"]=a("./view/ImageComponent"),d["move-comp"]=a("./view/MoveComponent"),d["text-comp"]=a("./view/TextComponent"),d["insert-custom"]=a("./view/InsertCustom"),d["export-template"]=a("./view/ExportTemplate"),d["sw-visibility"]=a("./view/SwitchVisibility"),d["open-layers"]=a("./view/OpenLayers"),d["open-sm"]=a("./view/OpenStyleManager"),d["open-tm"]=a("./view/OpenTraitManager"),d["open-blocks"]=a("./view/OpenBlocks"),d["open-assets"]=a("./view/OpenAssets"),d["show-offset"]=a("./view/ShowOffset"),d.fullscreen=a("./view/Fullscreen"),d.preview=a("./view/Preview"),d.resize=a("./view/Resize"),d["tlb-delete"]={run:function(a){var b=a.getSelected();return b&&b.get("removable")?(b.collection.remove(b),a.Canvas.getToolbarEl().style.display="none",a.editor.runDefault(),void a.trigger("component:update",b)):void console.warn("The element is not removable")}},d["tlb-clone"]={run:function(a){var b=a.getSelected();if(!b||!b.get("copyable"))return void console.warn("The element is not clonable");var c=b.collection,d=c.indexOf(b);c.add(b.clone(),{at:d+1}),a.trigger("component:update",b)}},d["tlb-move"]={run:function(a){var b=a.getSelected();if(!b||!b.get("draggable"))return void console.warn("The element is not draggable");var c=a.Canvas.getToolbarEl(),d=(c.style.display,a.Commands.get("move-comp"));d.onEndMoveFromModel=function(){a.editor.runDefault(),a.editor.set("selectedComponent",b),a.trigger("component:update",b)},a.editor.stopDefault(),d.initSorterFromModel(b),b.set("status","selected"),c.style.display="none"}},b.em&&(b.model=b.em.get("Canvas")),this},onLoad:function(){this.loadDefaultCommands()},add:g,get:function(a){var d=c[a];return"function"==typeof d&&(d=new d(b),c[a]=d),d},loadDefaultCommands:function(){for(var a in d)this.add(a,d[a]);return this}}}}),c("Commands",["Commands/main"],function(a){return a}),c("BlockManager/config/config",[],function(){return{blocks:[]}}),c("BlockManager/model/Block",["backbone"],function(a){return a.Model.extend({defaults:{label:"",content:"",attributes:{}}})}),c("BlockManager/model/Blocks",["backbone","./Block"],function(a,b){return a.Collection.extend({model:b})}),c("BlockManager/view/BlockView",["backbone"],function(a){return a.View.extend({events:{mousedown:"onDrag"},initialize:function(a,b){_.bindAll(this,"onDrop"),this.config=b||{},this.ppfx=this.config.pStylePrefix||"",this.listenTo(this.model,"destroy",this.remove),this.doc=$(document)},onDrag:function(a){if(this.config.getSorter){this.config.em.refreshCanvas();var b=this.config.getSorter();b.setDragHelper(this.el,a),b.startSort(this.el),b.setDropContent(this.model.get("content")),this.doc.on("mouseup",this.onDrop)}},onDrop:function(){this.doc.off("mouseup",this.onDrop), +this.config.getSorter().endMove()},render:function(){var a=this.ppfx+"block";return this.$el.addClass(a),this.el.innerHTML='
    '+this.model.get("label")+"
    ",this}})}),c("BlockManager/view/BlocksView",["backbone","./BlockView"],function(a,b){return a.View.extend({initialize:function(a,b){_.bindAll(this,"getSorter","onDrag","onDrop"),this.config=b||{},this.ppfx=this.config.pStylePrefix||"",this.listenTo(this.collection,"add",this.addTo),this.em=this.config.em,this.tac="test-tac",this.grabbingCls=this.ppfx+"grabbing",this.em&&(this.config.getSorter=this.getSorter,this.canvas=this.em.get("Canvas"))},getSorter:function(){if(this.em){if(!this.sorter){var a=this.em.get("Utils"),b=this.canvas;this.sorter=new a.Sorter({container:b.getBody(),placer:b.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,onStart:this.onDrag,onEndMove:this.onDrop,document:b.getFrameEl().contentDocument,direction:"a",wmargin:1,nested:1,em:this.em})}return this.sorter}},onDrag:function(){this.em.stopDefault()},onDrop:function(a){this.em.runDefault(),a&&a.get&&a.get("activeOnRender")&&(a.trigger("active"),a.set("activeOnRender",0))},addTo:function(a){this.add(a)},add:function(a,c){var d=c||null,e=new b({model:a,attributes:a.get("attributes")},this.config),f=e.render().el;d?d.appendChild(f):this.$el.append(f)},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.add(b,a)},this),this.$el.append(a),this.$el.addClass(this.ppfx+"blocks-c"),this}})}),c("BlockManager/main",["require","./config/config","./model/Blocks","./view/BlocksView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Blocks"),g=a("./view/BlocksView");return{name:"BlockManager",init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);return b=new f(d.blocks),c=new g({collection:b},d),this},add:function(a,c){var d=c||{};return d.id=a,b.add(d)},get:function(a){return b.get(a)},getAll:function(){return b},render:function(){return c.render().el}}}}),c("BlockManager",["BlockManager/main"],function(a){return a}),c("TraitManager/config/config",[],function(){return{stylePrefix:"trt-",labelContainer:"Component settings"}}),c("TraitManager/view/TraitView",["backbone"],function(a){return a.View.extend({events:{change:"onChange"},initialize:function(a){var b=this.model;this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=b.target,this.className=this.pfx+"trait",this.labelClass=this.ppfx+"label",this.fieldClass=this.ppfx+"field "+this.ppfx+"field-"+b.get("type"),this.inputhClass=this.ppfx+"input-holder",b.off("change:value",this.onValueChange),this.listenTo(b,"change:value",this.onValueChange),this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().value)},onValueChange:function(){var a=this.model,b=this.target,c=a.get("name"),d=a.get("value");if(a.get("changeProp"))b.set(c,d);else{var e=_.clone(b.get("attributes"));e[c]=d,b.set("attributes",e)}},renderLabel:function(){this.$el.html('
    '+this.getLabel()+"
    ")},getLabel:function(){var a=this.model,b=a.get("label")||a.get("name");return b.charAt(0).toUpperCase()+b.slice(1).replace(/-/g," ")},getInputEl:function(){if(!this.$input){var a=this.model,b=this.target,c=a.get("name"),d={placeholder:a.get("placeholder")||a.get("default"),type:a.get("type")||"text"};if(a.get("changeProp"))d.value=b.get(c);else{var e=b.get("attributes");d.value=a.get("value")||e[c]}a.get("min")&&(d.min=a.get("min")),a.get("max")&&(d.max=a.get("max")),this.$input=$("",d)}return this.$input.get(0)},renderField:function(){if(!this.$input){this.$el.append(this.tmpl);var a=this.getInputEl();this.$el.find("."+this.inputhClass).prepend(a)}},render:function(){return this.renderLabel(),this.renderField(),this.el.className=this.className,this}})}),c("TraitManager/view/TraitSelectView",["backbone","./TraitView"],function(a,b){return b.extend({initialize:function(a){b.prototype.initialize.apply(this,arguments);var c=this.ppfx;this.tmpl='
    '},getInputEl:function(){if(!this.$input){var a=this.model,b=a.get("options")||[];this.input="",this.$input=$(this.input);var c=this.target,d=a.get("name"),e=a.get("value");if(a.get("changeProp"))e=e||c.get(d);else{var f=c.get("attributes");e=f[d]}e&&this.$input.val(e)}return this.$input.get(0)}})}),c("TraitManager/view/TraitCheckboxView",["./TraitView"],function(a){return a.extend({initialize:function(b){a.prototype.initialize.apply(this,arguments);var c=this.ppfx+"chk-icon";this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().checked)},getInputEl:function(){var b;this.$input||(b=1);var c=a.prototype.getInputEl.apply(this,arguments);if(b){var d=this.model,e=d.get("name"),f=this.target;if(d.get("changeProp"))c.checked=f.get(e);else{var g=f.get("attributes");c.checked=!!g[e]}}return c}})}),c("TraitManager/view/TraitsView",["backbone","Abstract/view/DomainViews","./TraitView","./TraitSelectView","./TraitCheckboxView"],function(a,b,c,d,e){return b.extend({itemView:c,itemsView:{text:c,select:d,checkbox:e},initialize:function(a){this.config=a.config||{},this.em=a.editor,this.pfx=this.config.stylePrefix||"",this.className=this.pfx+"traits",this.listenTo(this.em,"change:selectedComponent",this.updatedCollection),this.updatedCollection()},updatedCollection:function(){this.el.className=this.className;var a=this.em.get("selectedComponent");a&&(this.collection=a.get("traits"),this.render())}})}),c("TraitManager/main",["require","./config/config","./model/Traits","./view/TraitsView"],function(a){return function(){var b,c={},d=a("./config/config"),e=(a("./model/Traits"),a("./view/TraitsView"));return{TraitsView:e,name:"TraitManager",getConfig:function(){return c},init:function(a){c=a||{};for(var f in d)f in c||(c[f]=d[f]);var g=c.pStylePrefix;return g&&(c.stylePrefix=g+c.stylePrefix),b=new e({collection:[],editor:c.em,config:c}),this},getTraitsViewer:function(){return b},addType:function(a,c){var d=b.itemView;b.itemsView[a]=d.extend(c)},getType:function(a){return b.itemsView[a]}}}}),c("TraitManager",["TraitManager/main"],function(a){return a});var d=["Utils","StorageManager","DeviceManager","Parser","SelectorManager","ModalDialog","CodeManager","Panels","RichTextEditor","StyleManager","AssetManager","CssComposer","DomComponents","Canvas","Commands","BlockManager","TraitManager"];return c("editor/model/Editor",["backbone","backboneUndo","keymaster","Utils","StorageManager","DeviceManager","Parser","SelectorManager","ModalDialog","CodeManager","Panels","RichTextEditor","StyleManager","AssetManager","CssComposer","DomComponents","Canvas","Commands","BlockManager","TraitManager"],function(){return Backbone.Model.extend({defaults:{clipboard:null,selectedComponent:null,previousModel:null,changesCount:0,storables:[],toLoad:[],opened:{},device:""},initialize:function(a){this.config=a,this.set("Config",a),a.el&&a.fromElement&&(this.config.components=a.el.innerHTML),d.forEach(function(a){this.loadModule(a)},this),this.get("toLoad").forEach(function(a){a.onLoad()}),this.initUndoManager(),this.on("change:selectedComponent",this.componentSelected,this),this.on("change:changesCount",this.updateBeforeUnload,this)},updateBeforeUnload:function(){var a=this.get("changesCount");this.config.noticeOnUnload&&a?window.onbeforeunload=function(a){return 1}:window.onbeforeunload=null},loadModule:function(a){var c=this.config,d=new b(a)(),e=d.name.charAt(0).toLowerCase()+d.name.slice(1),f=c[e]||c[d.name]||{};f.pStylePrefix=c.pStylePrefix||"";var g=this.get("StorageManager");if(d.storageKey&&d.store&&d.load&&g){f.stm=g;var h=this.get("storables");h.push(d),this.set("storables",h)}return f.em=this,d.init(Object.create(f)),d["private"]||this.set(d.name,d),d.onLoad&&this.get("toLoad").push(d),this},init:function(a){this.set("Editor",a)},listenRules:function(a){this.stopListening(a,"add remove",this.listenRule),this.listenTo(a,"add remove",this.listenRule),a.each(function(a){this.listenRule(a)},this)},listenRule:function(a){this.stopListening(a,"change:style",this.ruleUpdated),this.listenTo(a,"change:style",this.ruleUpdated)},ruleUpdated:function(a,b,c){var d=this.get("changesCount")+1,e=c?c.avoidStore:0;this.set("changesCount",d);var f=this.get("StorageManager");f.isAutosave()&&d0&&void 0!==arguments[0]?arguments[0]:{},e=t.editor,n=e.Commands,i=r(2),o=r(3),a=r(105);n.add(t.cmdOpenImport,i(t)),n.add(t.cmdTglImages,a(t)),n.add("export-template",o(t)),n.add("undo",{run:function(t,e){e.set("active",0),t.UndoManager.undo(1)}}),n.add("redo",{run:function(t,e){e.set("active",0),t.UndoManager.redo(1)}}),n.add("set-device-desktop",{run:function(t){t.setDevice("Desktop")}}),n.add("set-device-tablet",{run:function(t){t.setDevice("Tablet")}}),n.add("set-device-mobile",{run:function(t){t.setDevice("Mobile portrait")}})}}.call(e,r,e,t),!(void 0!==n&&(t.exports=n))},function(t,e,r){var n;n=function(){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.editor,r=e&&e.CodeManager.getViewer("CodeMirror").clone(),n=document.createElement("button"),i=document.createElement("div"),o=t.pfx||"";return n.innerHTML=t.modalBtnImport,n.className=o+"btn-prim "+o+"btn-import",n.onclick=function(){var t=r.editor.getValue();e.DomComponents.getWrapper().set("content",""),e.setComponents(t),e.Modal.close()},r.set({codeName:"htmlmixed",theme:t.codeViewerTheme,readOnly:0}),{run:function(e,a){var s=e.Modal,u=(s.getContentEl(),r.editor);if(s.setTitle(t.modalTitleImport),!u){var c=document.createElement("textarea");if(t.modalLabelImport){var l=document.createElement("div");l.className=o+"import-label",l.innerHTML=t.modalLabelImport,i.appendChild(l)}i.appendChild(c),i.appendChild(n),r.init(c),u=r.editor}s.setContent(""),s.setContent(i),r.setContent(t.importPlaceholder||""),s.open(),u.refresh(),a&&a.set("active",0)}}}}.call(e,r,e,t),!(void 0!==n&&(t.exports=n))},function(t,e,r){var n;n=function(){var t=r(4);return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.editor,n=r&&r.CodeManager.getViewer("CodeMirror").clone(),i=document.createElement("div"),o=e.pfx||"",a=r.Commands;return n.set({codeName:"htmlmixed",theme:e.codeViewerTheme}),a.add(o+"get-inlined-html",{run:function(e){var r=e.getHtml()+("");return t(r)}}),{run:function(r,a){var s=r.Modal,u=(s.getContentEl(),n.editor);if(s.setTitle(e.modalTitleExport),!u){var c=document.createElement("textarea");if(e.modalLabelExport){var l=document.createElement("div");l.className=o+"export-label",l.innerHTML=e.modalLabelExport,i.appendChild(l)}i.appendChild(c),n.init(c),u=n.editor,u.setOption("lineWrapping",1)}s.setContent(""),s.setContent(i);var f=r.getHtml()+("");n.setContent(e.inlineCss?t(f):f),s.open(),u.refresh(),a&&a.set("active",0)}}}}.call(e,r,e,t),!(void 0!==n&&(t.exports=n))},function(t,e,r){"use strict";var n=r(5),i=r(104),o=i(function(t,e){return n(t,{xmlMode:e&&e.xmlMode},a,[e])}),a=function(t,e){return o.juiceDocument(t,e)};o.inlineContent=function(t,e,r){return n(t,{xmlMode:r&&r.xmlMode},o.inlineDocument,[e,r])},t.exports=o},function(t,e,r){"use strict";var n=r(6),i=r(94),o=function(t,e){return e=i.extend({decodeEntities:!1},e||{}),t=u(t),n.load(t,e)},a=function(e){var r=t.exports.codeBlocks;return Object.keys(r).forEach(function(t){var n=new RegExp(r[t].start+"((.|\\s)*?)"+r[t].end,"g");e=e.replace(n,function(e,n){return""})}),e},s=function(e){var r=t.exports.codeBlocks;return Object.keys(r).forEach(function(t){var n=new RegExp("","g");e=e.replace(n,function(e,n){return r[t].start+n+r[t].end})}),e},u=function(t){return a(t)},c=function(t){return s(t)};t.exports=function(t,e,r,n){var i=o(t,e),a=[i];a.push.apply(a,n);var s=r.apply(void 0,a)||i;return e&&e.xmlMode?s.xml():c(s.html())},t.exports.codeBlocks={EJS:{start:"<%",end:"%>"},HBS:{start:"{{",end:"}}"}}},function(t,e,r){e=t.exports=r(7),e.version=r(93).version},function(t,e,r){var n=r(8),i=r(61).isHtml,o={extend:r(62),bind:r(63),forEach:r(64),defaults:r(65)},a=[r(66),r(83),r(87),r(89),r(91)],s=t.exports=function(t,e,r,a){return this instanceof s?(this.options=o.defaults(a||{},this.options),t?(r&&("string"==typeof r&&(r=n(r,this.options)),this._root=s.call(this,r)),t.cheerio?t:(u(t)&&(t=[t]),Array.isArray(t)?(o.forEach(t,o.bind(function(t,e){this[e]=t},this)),this.length=t.length,this):"string"==typeof t&&i(t)?s.call(this,n(t,this.options).children):(e?"string"==typeof e?i(e)?(e=n(e,this.options),e=s.call(this,e)):(t=[e,t].join(" "),e=this._root):e.cheerio||(e=s.call(this,e)):e=this._root,e?e.find(t):this))):this):new s(t,e,r,a)};o.extend(s,r(67)),s.prototype.cheerio="[cheerio object]",s.prototype.options={withDomLvl1:!0,normalizeWhitespace:!1,xmlMode:!1,decodeEntities:!0},s.prototype.length=0,s.prototype.splice=Array.prototype.splice,s.prototype._make=function(t,e){var r=new this.constructor(t,e,this._root,this.options);return r.prevObject=this,r},s.prototype.toArray=function(){return this.get()},a.forEach(function(t){o.extend(s.prototype,t)});var u=function(t){return t.name||"text"===t.type||"comment"===t.type}},function(t,e,r){(function(n){var i=r(13);e=t.exports=function(t,r){var n=e.evaluate(t,r),i=e.evaluate("",r)[0];return i.type="root",e.update(n,i),i},e.evaluate=function(t,e){var r;return r="string"==typeof t||n.isBuffer(t)?i.parseDOM(t,e):t},e.update=function(t,e){Array.isArray(t)||(t=[t]),e?e.children=t:e=null;for(var r=0;r + * @license MIT + */ +"use strict";function i(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}function o(){return t.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,r){if(o()=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function v(e){return+e!=e&&(e=0),t.alloc(+e)}function y(e,r){if(t.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var i=!1;;)switch(r){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return H(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return W(e).length;default:if(i)return H(e).length;r=(""+r).toLowerCase(),i=!0}}function b(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,e>>>=0,r<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return R(this,e,r);case"utf8":case"utf-8":return T(this,e,r);case"ascii":return L(this,e,r);case"latin1":case"binary":return D(this,e,r);case"base64":return O(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return N(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function m(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function _(e,r,n,i,o){if(0===e.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof r&&(r=t.from(r,i)),t.isBuffer(r))return 0===r.length?-1:w(e,r,n,i,o);if("number"==typeof r)return r&=255,t.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,r,n):Uint8Array.prototype.lastIndexOf.call(e,r,n):w(e,[r],n,i,o);throw new TypeError("val must be string, number or Buffer")}function w(t,e,r,n,i){function o(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}var a=1,s=t.length,u=e.length;if(void 0!==n&&(n=String(n).toLowerCase(),"ucs2"===n||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,r/=2}var c;if(i){var l=-1;for(c=r;cs&&(r=s-u),c=r;c>=0;c--){for(var f=!0,h=0;hi&&(n=i)):n=i;var o=e.length;if(o%2!==0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a239?4:o>223?3:o>191?2:1;if(i+s<=r){var u,c,l,f;switch(s){case 1:o<128&&(a=o);break;case 2:u=t[i+1],128===(192&u)&&(f=(31&o)<<6|63&u,f>127&&(a=f));break;case 3:u=t[i+1],c=t[i+2],128===(192&u)&&128===(192&c)&&(f=(15&o)<<12|(63&u)<<6|63&c,f>2047&&(f<55296||f>57343)&&(a=f));break;case 4:u=t[i+1],c=t[i+2],l=t[i+3],128===(192&u)&&128===(192&c)&&128===(192&l)&&(f=(15&o)<<18|(63&u)<<12|(63&c)<<6|63&l,f>65535&&f<1114112&&(a=f))}}null===a?(a=65533,s=1):a>65535&&(a-=65536,n.push(a>>>10&1023|55296),a=56320|1023&a),n.push(a),i+=s}return C(n)}function C(t){var e=t.length;if(e<=tt)return String.fromCharCode.apply(String,t);for(var r="",n=0;nn)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function q(e,r,n,i,o,a){if(!t.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>o||re.length)throw new RangeError("Index out of range")}function B(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function M(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function I(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function U(t,e,r,n,i){return i||I(t,e,r,4,3.4028234663852886e38,-3.4028234663852886e38),Z.write(t,e,r,n,23,4),r+4}function F(t,e,r,n,i){return i||I(t,e,r,8,1.7976931348623157e308,-1.7976931348623157e308),Z.write(t,e,r,n,52,8),r+8}function V(t){if(t=$(t).replace(et,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function $(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function z(t){return t<16?"0"+t.toString(16):t.toString(16)}function H(t,e){e=e||1/0;for(var r,n=t.length,i=null,o=[],a=0;a55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function G(t){for(var e=[],r=0;r>8,i=r%256,o.push(i),o.push(n);return o}function W(t){return Q.toByteArray(V(t))}function X(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function J(t){return t!==t}var Q=r(10),Z=r(11),K=r(12);e.Buffer=t,e.SlowBuffer=v,e.INSPECT_MAX_BYTES=50,t.TYPED_ARRAY_SUPPORT=void 0!==n.TYPED_ARRAY_SUPPORT?n.TYPED_ARRAY_SUPPORT:i(),e.kMaxLength=o(),t.poolSize=8192,t._augment=function(e){return e.__proto__=t.prototype,e},t.from=function(t,e,r){return s(null,t,e,r)},t.TYPED_ARRAY_SUPPORT&&(t.prototype.__proto__=Uint8Array.prototype,t.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&t[Symbol.species]===t&&Object.defineProperty(t,Symbol.species,{value:null,configurable:!0})),t.alloc=function(t,e,r){return c(null,t,e,r)},t.allocUnsafe=function(t){return l(null,t)},t.allocUnsafeSlow=function(t){return l(null,t)},t.isBuffer=function(t){return!(null==t||!t._isBuffer)},t.compare=function(e,r){if(!t.isBuffer(e)||!t.isBuffer(r))throw new TypeError("Arguments must be Buffers");if(e===r)return 0;for(var n=e.length,i=r.length,o=0,a=Math.min(n,i);o0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},t.prototype.compare=function(e,r,n,i,o){if(!t.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===o&&(o=this.length),r<0||n>e.length||i<0||o>this.length)throw new RangeError("out of range index");if(i>=o&&r>=n)return 0;if(i>=o)return-1;if(r>=n)return 1;if(r>>>=0,n>>>=0,i>>>=0,o>>>=0,this===e)return 0;for(var a=o-i,s=n-r,u=Math.min(a,s),c=this.slice(i,o),l=e.slice(r,n),f=0;fi)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return x(this,t,e,r);case"utf8":case"utf-8":return j(this,t,e,r);case"ascii":return A(this,t,e,r);case"latin1":case"binary":return S(this,t,e,r);case"base64":return E(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},t.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var tt=4096;t.prototype.slice=function(e,r){var n=this.length;e=~~e,r=void 0===r?n:~~r,e<0?(e+=n,e<0&&(e=0)):e>n&&(e=n),r<0?(r+=n,r<0&&(r=0)):r>n&&(r=n),r0&&(i*=256);)n+=this[t+--e]*i;return n},t.prototype.readUInt8=function(t,e){return e||P(t,1,this.length),this[t]},t.prototype.readUInt16LE=function(t,e){return e||P(t,2,this.length),this[t]|this[t+1]<<8},t.prototype.readUInt16BE=function(t,e){return e||P(t,2,this.length),this[t]<<8|this[t+1]},t.prototype.readUInt32LE=function(t,e){return e||P(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},t.prototype.readUInt32BE=function(t,e){return e||P(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},t.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||P(t,e,this.length);for(var n=this[t],i=1,o=0;++o=i&&(n-=Math.pow(2,8*e)),n},t.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||P(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},t.prototype.readInt8=function(t,e){return e||P(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},t.prototype.readInt16LE=function(t,e){e||P(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt16BE=function(t,e){e||P(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt32LE=function(t,e){return e||P(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},t.prototype.readInt32BE=function(t,e){return e||P(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},t.prototype.readFloatLE=function(t,e){return e||P(t,4,this.length),Z.read(this,t,!0,23,4)},t.prototype.readFloatBE=function(t,e){return e||P(t,4,this.length),Z.read(this,t,!1,23,4)},t.prototype.readDoubleLE=function(t,e){return e||P(t,8,this.length),Z.read(this,t,!0,52,8)},t.prototype.readDoubleBE=function(t,e){return e||P(t,8,this.length),Z.read(this,t,!1,52,8)},t.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e|=0,r|=0,!n){var i=Math.pow(2,8*r)-1;q(this,t,e,r,i,0)}var o=1,a=0;for(this[e]=255&t;++a=0&&(a*=256);)this[e+o]=t/a&255;return e+r},t.prototype.writeUInt8=function(e,r,n){return e=+e,r|=0,n||q(this,e,r,1,255,0),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[r]=255&e,r+1},t.prototype.writeUInt16LE=function(e,r,n){return e=+e,r|=0,n||q(this,e,r,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):B(this,e,r,!0),r+2},t.prototype.writeUInt16BE=function(e,r,n){return e=+e,r|=0,n||q(this,e,r,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):B(this,e,r,!1),r+2},t.prototype.writeUInt32LE=function(e,r,n){return e=+e,r|=0,n||q(this,e,r,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[r+3]=e>>>24,this[r+2]=e>>>16,this[r+1]=e>>>8,this[r]=255&e):M(this,e,r,!0),r+4},t.prototype.writeUInt32BE=function(e,r,n){return e=+e,r|=0,n||q(this,e,r,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):M(this,e,r,!1),r+4},t.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);q(this,t,e,r,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o>0)-s&255;return e+r},t.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);q(this,t,e,r,i-1,-i)}var o=r-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+r},t.prototype.writeInt8=function(e,r,n){return e=+e,r|=0,n||q(this,e,r,1,127,-128),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[r]=255&e,r+1},t.prototype.writeInt16LE=function(e,r,n){return e=+e,r|=0,n||q(this,e,r,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):B(this,e,r,!0),r+2},t.prototype.writeInt16BE=function(e,r,n){return e=+e,r|=0,n||q(this,e,r,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):B(this,e,r,!1),r+2},t.prototype.writeInt32LE=function(e,r,n){return e=+e,r|=0,n||q(this,e,r,4,2147483647,-2147483648),t.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8,this[r+2]=e>>>16,this[r+3]=e>>>24):M(this,e,r,!0),r+4},t.prototype.writeInt32BE=function(e,r,n){return e=+e,r|=0,n||q(this,e,r,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):M(this,e,r,!1),r+4},t.prototype.writeFloatLE=function(t,e,r){return U(this,t,e,!0,r)},t.prototype.writeFloatBE=function(t,e,r){return U(this,t,e,!1,r)},t.prototype.writeDoubleLE=function(t,e,r){return F(this,t,e,!0,r)},t.prototype.writeDoubleBE=function(t,e,r){return F(this,t,e,!1,r)},t.prototype.copy=function(e,r,n,i){if(n||(n=0),i||0===i||(i=this.length),r>=e.length&&(r=e.length),r||(r=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-r=0;--o)e[o+r]=this[o+n];else if(a<1e3||!t.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var a;if("number"==typeof e)for(a=r;a0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function n(t){return 3*t.length/4-r(t)}function i(t){var e,n,i,o,a,s,u=t.length;a=r(t),s=new l(3*u/4-a),i=a>0?u-4:u;var f=0;for(e=0,n=0;e>16&255,s[f++]=o>>8&255,s[f++]=255&o;return 2===a?(o=c[t.charCodeAt(e)]<<2|c[t.charCodeAt(e+1)]>>4,s[f++]=255&o):1===a&&(o=c[t.charCodeAt(e)]<<10|c[t.charCodeAt(e+1)]<<4|c[t.charCodeAt(e+2)]>>2,s[f++]=o>>8&255,s[f++]=255&o),s}function o(t){return u[t>>18&63]+u[t>>12&63]+u[t>>6&63]+u[63&t]}function a(t,e,r){for(var n,i=[],a=e;al?l:c+s));return 1===n?(e=t[r-1],i+=u[e>>2],i+=u[e<<4&63],i+="=="):2===n&&(e=(t[r-2]<<8)+t[r-1],i+=u[e>>10],i+=u[e>>4&63],i+=u[e<<2&63],i+="="),o.push(i),o.join("")}e.byteLength=n,e.toByteArray=i,e.fromByteArray=s;for(var u=[],c=[],l="undefined"!=typeof Uint8Array?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,p=f.length;h>1,l=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,o=p&(1<<-l)-1,p>>=-l,l+=s;l>0;o=256*o+t[e+f],f+=h,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=n;l>0;a=256*a+t[e+f],f+=h,l-=8);if(0===o)o=1-c;else{if(o===u)return a?NaN:(p?-1:1)*(1/0);a+=Math.pow(2,n),o-=c}return(p?-1:1)*a*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var a,s,u,c=8*o-i-1,l=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),e+=a+f>=1?h/u:h*Math.pow(2,1-f),e*u>=2&&(a++,u/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(e*u-1)*Math.pow(2,i),a+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(a=a<0;t[r+p]=255&a,p+=d,a/=256,c-=8);t[r+p-d]|=128*g}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){function n(e,r){return delete t.exports[e],t.exports[e]=r,r}var i=r(14),o=r(23);t.exports={Parser:i,Tokenizer:r(15),ElementType:r(24),DomHandler:o,get FeedHandler(){return n("FeedHandler",r(27))},get Stream(){return n("Stream",r(28))},get WritableStream(){return n("WritableStream",r(29))},get ProxyHandler(){return n("ProxyHandler",r(47))},get DomUtils(){return n("DomUtils",r(48))},get CollectingHandler(){return n("CollectingHandler",r(60))},DefaultHandler:o,get RssHandler(){return n("RssHandler",this.FeedHandler)},parseDOM:function(t,e){var r=new o(e);return new i(r,e).end(t),r.dom},parseFeed:function(e,r){var n=new t.exports.FeedHandler(r);return new i(n,r).end(e),n.dom},createDomStream:function(t,e,r){var n=new o(t,e,r);return new i(n,e)},EVENTS:{attribute:2,cdatastart:0,cdataend:0,text:1,processinginstruction:2,comment:1,commentend:0,closetag:1,opentag:2,opentagname:1,error:1,end:0}}},function(t,e,r){function n(t,e){this._options=e||{},this._cbs=t||{},this._tagname="",this._attribname="",this._attribvalue="",this._attribs=null,this._stack=[],this.startIndex=0,this.endIndex=null,this._lowerCaseTagNames="lowerCaseTags"in this._options?!!this._options.lowerCaseTags:!this._options.xmlMode,this._lowerCaseAttributeNames="lowerCaseAttributeNames"in this._options?!!this._options.lowerCaseAttributeNames:!this._options.xmlMode,this._options.Tokenizer&&(i=this._options.Tokenizer),this._tokenizer=new i(this._options,this),this._cbs.onparserinit&&this._cbs.onparserinit(this)}var i=r(15),o={input:!0,option:!0,optgroup:!0,select:!0,button:!0,datalist:!0,textarea:!0},a={tr:{tr:!0,th:!0,td:!0},th:{th:!0},td:{thead:!0,th:!0,td:!0},body:{head:!0,link:!0,script:!0},li:{li:!0},p:{p:!0},h1:{p:!0},h2:{p:!0},h3:{p:!0},h4:{p:!0},h5:{p:!0},h6:{p:!0},select:o,input:o,output:o,button:o,datalist:o,textarea:o,option:{option:!0},optgroup:{optgroup:!0}},s={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,path:!0,circle:!0,ellipse:!0,line:!0,rect:!0,use:!0,stop:!0,polyline:!0,polygon:!0},u=/\s|\//;r(21)(n,r(22).EventEmitter),n.prototype._updatePosition=function(t){null===this.endIndex?this._tokenizer._sectionStart<=t?this.startIndex=0:this.startIndex=this._tokenizer._sectionStart-t:this.startIndex=this.endIndex+1,this.endIndex=this._tokenizer.getAbsoluteIndex()},n.prototype.ontext=function(t){this._updatePosition(1),this.endIndex--,this._cbs.ontext&&this._cbs.ontext(t)},n.prototype.onopentagname=function(t){if(this._lowerCaseTagNames&&(t=t.toLowerCase()),this._tagname=t,!this._options.xmlMode&&t in a)for(var e;(e=this._stack[this._stack.length-1])in a[t];this.onclosetag(e));!this._options.xmlMode&&t in s||this._stack.push(t),this._cbs.onopentagname&&this._cbs.onopentagname(t),this._cbs.onopentag&&(this._attribs={})},n.prototype.onopentagend=function(){this._updatePosition(1),this._attribs&&(this._cbs.onopentag&&this._cbs.onopentag(this._tagname,this._attribs),this._attribs=null),!this._options.xmlMode&&this._cbs.onclosetag&&this._tagname in s&&this._cbs.onclosetag(this._tagname),this._tagname=""},n.prototype.onclosetag=function(t){if(this._updatePosition(1),this._lowerCaseTagNames&&(t=t.toLowerCase()),!this._stack.length||t in s&&!this._options.xmlMode)this._options.xmlMode||"br"!==t&&"p"!==t||(this.onopentagname(t),this._closeCurrentTag());else{var e=this._stack.lastIndexOf(t);if(e!==-1)if(this._cbs.onclosetag)for(e=this._stack.length-e;e--;)this._cbs.onclosetag(this._stack.pop());else this._stack.length=e;else"p"!==t||this._options.xmlMode||(this.onopentagname(t),this._closeCurrentTag())}},n.prototype.onselfclosingtag=function(){this._options.xmlMode||this._options.recognizeSelfClosing?this._closeCurrentTag():this.onopentagend()},n.prototype._closeCurrentTag=function(){var t=this._tagname;this.onopentagend(),this._stack[this._stack.length-1]===t&&(this._cbs.onclosetag&&this._cbs.onclosetag(t),this._stack.pop())},n.prototype.onattribname=function(t){this._lowerCaseAttributeNames&&(t=t.toLowerCase()),this._attribname=t},n.prototype.onattribdata=function(t){this._attribvalue+=t},n.prototype.onattribend=function(){this._cbs.onattribute&&this._cbs.onattribute(this._attribname,this._attribvalue),this._attribs&&!Object.prototype.hasOwnProperty.call(this._attribs,this._attribname)&&(this._attribs[this._attribname]=this._attribvalue),this._attribname="",this._attribvalue=""},n.prototype._getInstructionName=function(t){var e=t.search(u),r=e<0?t:t.substr(0,e);return this._lowerCaseTagNames&&(r=r.toLowerCase()),r},n.prototype.ondeclaration=function(t){if(this._cbs.onprocessinginstruction){var e=this._getInstructionName(t);this._cbs.onprocessinginstruction("!"+e,"!"+t)}},n.prototype.onprocessinginstruction=function(t){if(this._cbs.onprocessinginstruction){var e=this._getInstructionName(t);this._cbs.onprocessinginstruction("?"+e,"?"+t)}},n.prototype.oncomment=function(t){this._updatePosition(4),this._cbs.oncomment&&this._cbs.oncomment(t),this._cbs.oncommentend&&this._cbs.oncommentend()},n.prototype.oncdata=function(t){this._updatePosition(1),this._options.xmlMode||this._options.recognizeCDATA?(this._cbs.oncdatastart&&this._cbs.oncdatastart(),this._cbs.ontext&&this._cbs.ontext(t),this._cbs.oncdataend&&this._cbs.oncdataend()):this.oncomment("[CDATA["+t+"]]")},n.prototype.onerror=function(t){this._cbs.onerror&&this._cbs.onerror(t)},n.prototype.onend=function(){if(this._cbs.onclosetag)for(var t=this._stack.length;t>0;this._cbs.onclosetag(this._stack[--t]));this._cbs.onend&&this._cbs.onend()},n.prototype.reset=function(){this._cbs.onreset&&this._cbs.onreset(),this._tokenizer.reset(),this._tagname="",this._attribname="",this._attribs=null,this._stack=[],this._cbs.onparserinit&&this._cbs.onparserinit(this)},n.prototype.parseComplete=function(t){this.reset(),this.end(t)},n.prototype.write=function(t){this._tokenizer.write(t)},n.prototype.end=function(t){this._tokenizer.end(t)},n.prototype.pause=function(){this._tokenizer.pause()},n.prototype.resume=function(){this._tokenizer.resume()},n.prototype.parseChunk=n.prototype.write,n.prototype.done=n.prototype.end,t.exports=n},function(t,e,r){function n(t){return" "===t||"\n"===t||"\t"===t||"\f"===t||"\r"===t}function i(t,e){return function(r){r===t&&(this._state=e)}}function o(t,e,r){var n=t.toLowerCase();return t===n?function(t){t===n?this._state=e:(this._state=r,this._index--)}:function(i){i===n||i===t?this._state=e:(this._state=r,this._index--)}}function a(t,e){var r=t.toLowerCase();return function(n){n===r||n===t?this._state=e:(this._state=g,this._index--)}}function s(t,e){this._state=p,this._buffer="",this._sectionStart=0,this._index=0,this._bufferOffset=0,this._baseState=p,this._special=gt,this._cbs=e,this._running=!0,this._ended=!1,this._xmlMode=!(!t||!t.xmlMode),this._decodeEntities=!(!t||!t.decodeEntities)}t.exports=s;var u=r(16),c=r(18),l=r(19),f=r(20),h=0,p=h++,d=h++,g=h++,v=h++,y=h++,b=h++,m=h++,_=h++,w=h++,x=h++,j=h++,A=h++,S=h++,E=h++,k=h++,O=h++,T=h++,C=h++,L=h++,D=h++,R=h++,N=h++,P=h++,q=h++,B=h++,M=h++,I=h++,U=h++,F=h++,V=h++,$=h++,z=h++,H=h++,G=h++,Y=h++,W=h++,X=h++,J=h++,Q=h++,Z=h++,K=h++,tt=h++,et=h++,rt=h++,nt=h++,it=h++,ot=h++,at=h++,st=h++,ut=h++,ct=h++,lt=h++,ft=h++,ht=h++,pt=h++,dt=0,gt=dt++,vt=dt++,yt=dt++;s.prototype._stateText=function(t){"<"===t?(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._state=d,this._sectionStart=this._index):this._decodeEntities&&this._special===gt&&"&"===t&&(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._baseState=p,this._state=ct,this._sectionStart=this._index)},s.prototype._stateBeforeTagName=function(t){"/"===t?this._state=y:"<"===t?(this._cbs.ontext(this._getSection()),this._sectionStart=this._index):">"===t||this._special!==gt||n(t)?this._state=p:"!"===t?(this._state=k,this._sectionStart=this._index+1):"?"===t?(this._state=T,this._sectionStart=this._index+1):(this._state=this._xmlMode||"s"!==t&&"S"!==t?g:$,this._sectionStart=this._index)},s.prototype._stateInTagName=function(t){("/"===t||">"===t||n(t))&&(this._emitToken("onopentagname"),this._state=_,this._index--)},s.prototype._stateBeforeCloseingTagName=function(t){n(t)||(">"===t?this._state=p:this._special!==gt?"s"===t||"S"===t?this._state=z:(this._state=p,this._index--):(this._state=b,this._sectionStart=this._index))},s.prototype._stateInCloseingTagName=function(t){(">"===t||n(t))&&(this._emitToken("onclosetag"),this._state=m,this._index--)},s.prototype._stateAfterCloseingTagName=function(t){">"===t&&(this._state=p,this._sectionStart=this._index+1)},s.prototype._stateBeforeAttributeName=function(t){">"===t?(this._cbs.onopentagend(),this._state=p,this._sectionStart=this._index+1):"/"===t?this._state=v:n(t)||(this._state=w,this._sectionStart=this._index)},s.prototype._stateInSelfClosingTag=function(t){">"===t?(this._cbs.onselfclosingtag(),this._state=p,this._sectionStart=this._index+1):n(t)||(this._state=_,this._index--)},s.prototype._stateInAttributeName=function(t){("="===t||"/"===t||">"===t||n(t))&&(this._cbs.onattribname(this._getSection()),this._sectionStart=-1,this._state=x,this._index--)},s.prototype._stateAfterAttributeName=function(t){"="===t?this._state=j:"/"===t||">"===t?(this._cbs.onattribend(),this._state=_,this._index--):n(t)||(this._cbs.onattribend(),this._state=w,this._sectionStart=this._index)},s.prototype._stateBeforeAttributeValue=function(t){'"'===t?(this._state=A,this._sectionStart=this._index+1):"'"===t?(this._state=S,this._sectionStart=this._index+1):n(t)||(this._state=E,this._sectionStart=this._index,this._index--)},s.prototype._stateInAttributeValueDoubleQuotes=function(t){'"'===t?(this._emitToken("onattribdata"),this._cbs.onattribend(), +this._state=_):this._decodeEntities&&"&"===t&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=ct,this._sectionStart=this._index)},s.prototype._stateInAttributeValueSingleQuotes=function(t){"'"===t?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=_):this._decodeEntities&&"&"===t&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=ct,this._sectionStart=this._index)},s.prototype._stateInAttributeValueNoQuotes=function(t){n(t)||">"===t?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=_,this._index--):this._decodeEntities&&"&"===t&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=ct,this._sectionStart=this._index)},s.prototype._stateBeforeDeclaration=function(t){this._state="["===t?N:"-"===t?C:O},s.prototype._stateInDeclaration=function(t){">"===t&&(this._cbs.ondeclaration(this._getSection()),this._state=p,this._sectionStart=this._index+1)},s.prototype._stateInProcessingInstruction=function(t){">"===t&&(this._cbs.onprocessinginstruction(this._getSection()),this._state=p,this._sectionStart=this._index+1)},s.prototype._stateBeforeComment=function(t){"-"===t?(this._state=L,this._sectionStart=this._index+1):this._state=O},s.prototype._stateInComment=function(t){"-"===t&&(this._state=D)},s.prototype._stateAfterComment1=function(t){"-"===t?this._state=R:this._state=L},s.prototype._stateAfterComment2=function(t){">"===t?(this._cbs.oncomment(this._buffer.substring(this._sectionStart,this._index-2)),this._state=p,this._sectionStart=this._index+1):"-"!==t&&(this._state=L)},s.prototype._stateBeforeCdata1=o("C",P,O),s.prototype._stateBeforeCdata2=o("D",q,O),s.prototype._stateBeforeCdata3=o("A",B,O),s.prototype._stateBeforeCdata4=o("T",M,O),s.prototype._stateBeforeCdata5=o("A",I,O),s.prototype._stateBeforeCdata6=function(t){"["===t?(this._state=U,this._sectionStart=this._index+1):(this._state=O,this._index--)},s.prototype._stateInCdata=function(t){"]"===t&&(this._state=F)},s.prototype._stateAfterCdata1=i("]",V),s.prototype._stateAfterCdata2=function(t){">"===t?(this._cbs.oncdata(this._buffer.substring(this._sectionStart,this._index-2)),this._state=p,this._sectionStart=this._index+1):"]"!==t&&(this._state=U)},s.prototype._stateBeforeSpecial=function(t){"c"===t||"C"===t?this._state=H:"t"===t||"T"===t?this._state=et:(this._state=g,this._index--)},s.prototype._stateBeforeSpecialEnd=function(t){this._special!==vt||"c"!==t&&"C"!==t?this._special!==yt||"t"!==t&&"T"!==t?this._state=p:this._state=ot:this._state=J},s.prototype._stateBeforeScript1=a("R",G),s.prototype._stateBeforeScript2=a("I",Y),s.prototype._stateBeforeScript3=a("P",W),s.prototype._stateBeforeScript4=a("T",X),s.prototype._stateBeforeScript5=function(t){("/"===t||">"===t||n(t))&&(this._special=vt),this._state=g,this._index--},s.prototype._stateAfterScript1=o("R",Q,p),s.prototype._stateAfterScript2=o("I",Z,p),s.prototype._stateAfterScript3=o("P",K,p),s.prototype._stateAfterScript4=o("T",tt,p),s.prototype._stateAfterScript5=function(t){">"===t||n(t)?(this._special=gt,this._state=b,this._sectionStart=this._index-6,this._index--):this._state=p},s.prototype._stateBeforeStyle1=a("Y",rt),s.prototype._stateBeforeStyle2=a("L",nt),s.prototype._stateBeforeStyle3=a("E",it),s.prototype._stateBeforeStyle4=function(t){("/"===t||">"===t||n(t))&&(this._special=yt),this._state=g,this._index--},s.prototype._stateAfterStyle1=o("Y",at,p),s.prototype._stateAfterStyle2=o("L",st,p),s.prototype._stateAfterStyle3=o("E",ut,p),s.prototype._stateAfterStyle4=function(t){">"===t||n(t)?(this._special=gt,this._state=b,this._sectionStart=this._index-5,this._index--):this._state=p},s.prototype._stateBeforeEntity=o("#",lt,ft),s.prototype._stateBeforeNumericEntity=o("X",pt,ht),s.prototype._parseNamedEntityStrict=function(){if(this._sectionStart+16&&(e=6);e>=2;){var r=this._buffer.substr(t,e);if(l.hasOwnProperty(r))return this._emitPartial(l[r]),void(this._sectionStart+=e+1);e--}},s.prototype._stateInNamedEntity=function(t){";"===t?(this._parseNamedEntityStrict(),this._sectionStart+1"z")&&(t<"A"||t>"Z")&&(t<"0"||t>"9")&&(this._xmlMode||this._sectionStart+1===this._index||(this._baseState!==p?"="!==t&&this._parseNamedEntityStrict():this._parseLegacyEntity()),this._state=this._baseState,this._index--)},s.prototype._decodeNumericEntity=function(t,e){var r=this._sectionStart+t;if(r!==this._index){var n=this._buffer.substring(r,this._index),i=parseInt(n,e);this._emitPartial(u(i)),this._sectionStart=this._index}else this._sectionStart--;this._state=this._baseState},s.prototype._stateInNumericEntity=function(t){";"===t?(this._decodeNumericEntity(2,10),this._sectionStart++):(t<"0"||t>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(2,10),this._index--)},s.prototype._stateInHexEntity=function(t){";"===t?(this._decodeNumericEntity(3,16),this._sectionStart++):(t<"a"||t>"f")&&(t<"A"||t>"F")&&(t<"0"||t>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(3,16),this._index--)},s.prototype._cleanup=function(){this._sectionStart<0?(this._buffer="",this._bufferOffset+=this._index,this._index=0):this._running&&(this._state===p?(this._sectionStart!==this._index&&this._cbs.ontext(this._buffer.substr(this._sectionStart)),this._buffer="",this._bufferOffset+=this._index,this._index=0):this._sectionStart===this._index?(this._buffer="",this._bufferOffset+=this._index,this._index=0):(this._buffer=this._buffer.substr(this._sectionStart),this._index-=this._sectionStart,this._bufferOffset+=this._sectionStart),this._sectionStart=0)},s.prototype.write=function(t){this._ended&&this._cbs.onerror(Error(".write() after done!")),this._buffer+=t,this._parse()},s.prototype._parse=function(){for(;this._index=55296&&t<=57343||t>1114111)return"�";t in i&&(t=i[t]);var e="";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+=String.fromCharCode(t)}var i=r(17);t.exports=n},function(t,e){t.exports={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}},function(t,e){t.exports={Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",amp:"&",AMP:"&",andand:"⩕",And:"⩓",and:"∧",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angmsd:"∡",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",apacir:"⩯",ap:"≈",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxHd:"╤",boxhD:"╥",boxHD:"╦",boxhu:"┴",boxHu:"╧",boxhU:"╨",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsolb:"⧅",bsol:"\\",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",capand:"⩄",capbrcup:"⩉",capcap:"⩋",cap:"∩",Cap:"⋒",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cir:"○",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cup:"∪",Cup:"⋓",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",Darr:"↡",dArr:"⇓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",ddagger:"‡",ddarr:"⇊",DD:"ⅅ",dd:"ⅆ",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrowBar:"⤓",downarrow:"↓",DownArrow:"↓",Downarrow:"⇓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVectorBar:"⥖",DownLeftVector:"↽",DownRightTeeVector:"⥟",DownRightVectorBar:"⥗",DownRightVector:"⇁",DownTeeArrow:"↧",DownTee:"⊤",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",Ecirc:"Ê",ecirc:"ê",ecir:"≖",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",edot:"ė",eDot:"≑",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp13:" ",emsp14:" ",emsp:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",ge:"≥",gE:"≧",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",gescc:"⪩",ges:"⩾",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gla:"⪥",gl:"≷",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",gtcc:"⪧",gtcir:"⩺",gt:">",GT:">",Gt:"≫",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",harrcir:"⥈",harr:"↔",hArr:"⇔",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",Im:"ℑ",imof:"⊷",imped:"Ƶ",Implies:"⇒",incare:"℅",in:"∈",infin:"∞",infintie:"⧝",inodot:"ı",intcal:"⊺",int:"∫",Int:"∬",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larrb:"⇤",larrbfs:"⤟",larr:"←",Larr:"↞",lArr:"⇐",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",latail:"⤙",lAtail:"⤛",lat:"⪫",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",LeftArrowBar:"⇤",leftarrow:"←",LeftArrow:"←",Leftarrow:"⇐",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVectorBar:"⥙",LeftDownVector:"⇃",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTeeArrow:"↤",LeftTee:"⊣",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangleBar:"⧏",LeftTriangle:"⊲",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVectorBar:"⥘",LeftUpVector:"↿",LeftVectorBar:"⥒",LeftVector:"↼",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",lescc:"⪨",les:"⩽",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",llarr:"⇇",ll:"≪",Ll:"⋘",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoustache:"⎰",lmoust:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftrightarrow:"⟷",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longmapsto:"⟼",longrightarrow:"⟶",LongRightArrow:"⟶",Longrightarrow:"⟹",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",ltcc:"⪦",ltcir:"⩹",lt:"<",LT:"<",Lt:"≪",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",midast:"*",midcir:"⫰",mid:"∣",middot:"·",minusb:"⊟",minus:"−",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natural:"♮",naturals:"ℕ",natur:"♮",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",ne:"≠",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nlE:"≦̸",nle:"≰",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangleBar:"⧏̸",NotLeftTriangle:"⋪",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangleBar:"⧐̸",NotRightTriangle:"⋫",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",nparallel:"∦",npar:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",nprec:"⊀",npreceq:"⪯̸",npre:"⪯̸",nrarrc:"⤳̸",nrarr:"↛",nrArr:"⇏",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",Ocirc:"Ô",ocirc:"ô",ocir:"⊚",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",orarr:"↻",Or:"⩔",or:"∨",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",otimesas:"⨶",Otimes:"⨷",otimes:"⊗",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",para:"¶",parallel:"∥",par:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plus:"+",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",prap:"⪷",Pr:"⪻",pr:"≺",prcue:"≼",precapprox:"⪷",prec:"≺",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",pre:"⪯",prE:"⪳",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportional:"∝",Proportion:"∷",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarr:"→",Rarr:"↠",rArr:"⇒",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",Re:"ℜ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrowBar:"⇥",rightarrow:"→",RightArrow:"→",Rightarrow:"⇒",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVectorBar:"⥕",RightDownVector:"⇂",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTeeArrow:"↦",RightTee:"⊢",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangleBar:"⧐",RightTriangle:"⊳",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVectorBar:"⥔",RightUpVector:"↾",RightVectorBar:"⥓",RightVector:"⇀",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoustache:"⎱",rmoust:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",scap:"⪸",Scaron:"Š",scaron:"š",Sc:"⪼",sc:"≻",sccue:"≽",sce:"⪰",scE:"⪴",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdotb:"⊡",sdot:"⋅",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",solbar:"⌿",solb:"⧄",sol:"/",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squ:"□",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succapprox:"⪸",succ:"≻",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺", +succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup1:"¹",sup2:"²",sup3:"³",sup:"⊃",Sup:"⋑",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",therefore:"∴",Therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",ThinSpace:" ",thinsp:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",timesbar:"⨱",timesb:"⊠",times:"×",timesd:"⨰",tint:"∭",toea:"⤨",topbot:"⌶",topcir:"⫱",top:"⊤",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",uarr:"↑",Uarr:"↟",uArr:"⇑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrowBar:"⤒",uparrow:"↑",UpArrow:"↑",Uparrow:"⇑",UpArrowDownArrow:"⇅",updownarrow:"↕",UpDownArrow:"↕",Updownarrow:"⇕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTeeArrow:"↥",UpTee:"⊥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",Vcy:"В",vcy:"в",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",veebar:"⊻",vee:"∨",Vee:"⋁",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xharr:"⟷",xhArr:"⟺",Xi:"Ξ",xi:"ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",yuml:"ÿ",Yuml:"Ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",zfr:"𝔷",Zfr:"ℨ",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}},function(t,e){t.exports={Aacute:"Á",aacute:"á",Acirc:"Â",acirc:"â",acute:"´",AElig:"Æ",aelig:"æ",Agrave:"À",agrave:"à",amp:"&",AMP:"&",Aring:"Å",aring:"å",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",brvbar:"¦",Ccedil:"Ç",ccedil:"ç",cedil:"¸",cent:"¢",copy:"©",COPY:"©",curren:"¤",deg:"°",divide:"÷",Eacute:"É",eacute:"é",Ecirc:"Ê",ecirc:"ê",Egrave:"È",egrave:"è",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",frac12:"½",frac14:"¼",frac34:"¾",gt:">",GT:">",Iacute:"Í",iacute:"í",Icirc:"Î",icirc:"î",iexcl:"¡",Igrave:"Ì",igrave:"ì",iquest:"¿",Iuml:"Ï",iuml:"ï",laquo:"«",lt:"<",LT:"<",macr:"¯",micro:"µ",middot:"·",nbsp:" ",not:"¬",Ntilde:"Ñ",ntilde:"ñ",Oacute:"Ó",oacute:"ó",Ocirc:"Ô",ocirc:"ô",Ograve:"Ò",ograve:"ò",ordf:"ª",ordm:"º",Oslash:"Ø",oslash:"ø",Otilde:"Õ",otilde:"õ",Ouml:"Ö",ouml:"ö",para:"¶",plusmn:"±",pound:"£",quot:'"',QUOT:'"',raquo:"»",reg:"®",REG:"®",sect:"§",shy:"­",sup1:"¹",sup2:"²",sup3:"³",szlig:"ß",THORN:"Þ",thorn:"þ",times:"×",Uacute:"Ú",uacute:"ú",Ucirc:"Û",ucirc:"û",Ugrave:"Ù",ugrave:"ù",uml:"¨",Uuml:"Ü",uuml:"ü",Yacute:"Ý",yacute:"ý",yen:"¥",yuml:"ÿ"}},function(t,e){t.exports={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function n(t){return"function"==typeof t}function i(t){return"number"==typeof t}function o(t){return"object"==typeof t&&null!==t}function a(t){return void 0===t}t.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(t){if(!i(t)||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},r.prototype.emit=function(t){var e,r,i,s,u,c;if(this._events||(this._events={}),"error"===t&&(!this._events.error||o(this._events.error)&&!this._events.error.length)){if(e=arguments[1],e instanceof Error)throw e;var l=new Error('Uncaught, unspecified "error" event. ('+e+")");throw l.context=e,l}if(r=this._events[t],a(r))return!1;if(n(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),r.apply(this,s)}else if(o(r))for(s=Array.prototype.slice.call(arguments,1),c=r.slice(),i=c.length,u=0;u0&&this._events[t].length>i&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace())),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(t,e){function r(){this.removeListener(t,r),i||(i=!0,e.apply(this,arguments))}if(!n(e))throw TypeError("listener must be a function");var i=!1;return r.listener=e,this.on(t,r),this},r.prototype.removeListener=function(t,e){var r,i,a,s;if(!n(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(r=this._events[t],a=r.length,i=-1,r===e||n(r.listener)&&r.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(r)){for(s=a;s-- >0;)if(r[s]===e||r[s].listener&&r[s].listener===e){i=s;break}if(i<0)return this;1===r.length?(r.length=0,delete this._events[t]):r.splice(i,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},r.prototype.removeAllListeners=function(t){var e,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[t],n(r))this.removeListener(t,r);else if(r)for(;r.length;)this.removeListener(t,r[r.length-1]);return delete this._events[t],this},r.prototype.listeners=function(t){var e;return e=this._events&&this._events[t]?n(this._events[t])?[this._events[t]]:this._events[t].slice():[]},r.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(n(e))return 1;if(e)return e.length}return 0},r.listenerCount=function(t,e){return t.listenerCount(e)}},function(t,e,r){function n(t,e,r){"object"==typeof t?(r=e,e=t,t=null):"function"==typeof e&&(r=e,e=u),this._callback=t,this._options=e||u,this._elementCB=r,this.dom=[],this._done=!1,this._tagStack=[],this._parser=this._parser||null}var i=r(24),o=/\s+/g,a=r(25),s=r(26),u={normalizeWhitespace:!1,withStartIndices:!1};n.prototype.onparserinit=function(t){this._parser=t},n.prototype.onreset=function(){n.call(this,this._callback,this._options,this._elementCB)},n.prototype.onend=function(){this._done||(this._done=!0,this._parser=null,this._handleCallback(null))},n.prototype._handleCallback=n.prototype.onerror=function(t){if("function"==typeof this._callback)this._callback(t,this.dom);else if(t)throw t},n.prototype.onclosetag=function(){var t=this._tagStack.pop();this._elementCB&&this._elementCB(t)},n.prototype._addDomElement=function(t){var e=this._tagStack[this._tagStack.length-1],r=e?e.children:this.dom,n=r[r.length-1];t.next=null,this._options.withStartIndices&&(t.startIndex=this._parser.startIndex),this._options.withDomLvl1&&(t.__proto__="tag"===t.type?s:a),n?(t.prev=n,n.next=t):t.prev=null,r.push(t),t.parent=e||null},n.prototype.onopentag=function(t,e){var r={type:"script"===t?i.Script:"style"===t?i.Style:i.Tag,name:t,attribs:e,children:[]};this._addDomElement(r),this._tagStack.push(r)},n.prototype.ontext=function(t){var e,r=this._options.normalizeWhitespace||this._options.ignoreWhitespace;!this._tagStack.length&&this.dom.length&&(e=this.dom[this.dom.length-1]).type===i.Text?r?e.data=(e.data+t).replace(o," "):e.data+=t:this._tagStack.length&&(e=this._tagStack[this._tagStack.length-1])&&(e=e.children[e.children.length-1])&&e.type===i.Text?r?e.data=(e.data+t).replace(o," "):e.data+=t:(r&&(t=t.replace(o," ")),this._addDomElement({data:t,type:i.Text}))},n.prototype.oncomment=function(t){var e=this._tagStack[this._tagStack.length-1];if(e&&e.type===i.Comment)return void(e.data+=t);var r={data:t,type:i.Comment};this._addDomElement(r),this._tagStack.push(r)},n.prototype.oncdatastart=function(){var t={children:[{data:"",type:i.Text}],type:i.CDATA};this._addDomElement(t),this._tagStack.push(t)},n.prototype.oncommentend=n.prototype.oncdataend=function(){this._tagStack.pop()},n.prototype.onprocessinginstruction=function(t,e){this._addDomElement({name:t,data:e,type:i.Directive})},t.exports=n},function(t,e){t.exports={Text:"text",Directive:"directive",Comment:"comment",Script:"script",Style:"style",Tag:"tag",CDATA:"cdata",Doctype:"doctype",isTag:function(t){return"tag"===t.type||"script"===t.type||"style"===t.type}}},function(t,e){var r=t.exports={get firstChild(){var t=this.children;return t&&t[0]||null},get lastChild(){var t=this.children;return t&&t[t.length-1]||null},get nodeType(){return i[this.type]||i.element}},n={tagName:"name",childNodes:"children",parentNode:"parent",previousSibling:"prev",nextSibling:"next",nodeValue:"data"},i={element:1,text:3,cdata:4,comment:8};Object.keys(n).forEach(function(t){var e=n[t];Object.defineProperty(r,t,{get:function(){return this[e]||null},set:function(t){return this[e]=t,t}})})},function(t,e,r){var n=r(25),i=t.exports=Object.create(n),o={tagName:"name"};Object.keys(o).forEach(function(t){var e=o[t];Object.defineProperty(i,t,{get:function(){return this[e]||null},set:function(t){return this[e]=t,t}})})},function(t,e,r){function n(t,e){this.init(t,e)}function i(t,e){return l.getElementsByTagName(t,e,!0)}function o(t,e){return l.getElementsByTagName(t,e,!0,1)[0]}function a(t,e,r){return l.getText(l.getElementsByTagName(t,e,r,1)).trim()}function s(t,e,r,n,i){var o=a(r,n,i);o&&(t[e]=o)}var u=r(13),c=u.DomHandler,l=u.DomUtils;r(21)(n,c),n.prototype.init=c;var f=function(t){return"rss"===t||"feed"===t||"rdf:RDF"===t};n.prototype.onend=function(){var t,e,r={},n=o(f,this.dom);n&&("feed"===n.name?(e=n.children,r.type="atom",s(r,"id","id",e),s(r,"title","title",e),(t=o("link",e))&&(t=t.attribs)&&(t=t.href)&&(r.link=t),s(r,"description","subtitle",e),(t=a("updated",e))&&(r.updated=new Date(t)),s(r,"author","email",e,!0),r.items=i("entry",e).map(function(t){var e,r={};return t=t.children,s(r,"id","id",t),s(r,"title","title",t),(e=o("link",t))&&(e=e.attribs)&&(e=e.href)&&(r.link=e),(e=a("summary",t)||a("content",t))&&(r.description=e),(e=a("updated",t))&&(r.pubDate=new Date(e)),r})):(e=o("channel",n.children).children,r.type=n.name.substr(0,3),r.id="",s(r,"title","title",e),s(r,"link","link",e),s(r,"description","description",e),(t=a("lastBuildDate",e))&&(r.updated=new Date(t)),s(r,"author","managingEditor",e,!0),r.items=i("item",n.children).map(function(t){var e,r={};return t=t.children,s(r,"id","guid",t),s(r,"title","title",t),s(r,"link","link",t),s(r,"description","description",t),(e=a("pubDate",t))&&(r.pubDate=new Date(e)),r}))),this.dom=r,c.prototype._handleCallback.call(this,n?null:Error("couldn't find root of feed"))},t.exports=n},function(t,e,r){function n(t){o.call(this,new i(this),t)}function i(t){this.scope=t}t.exports=n;var o=r(29);r(21)(n,o),n.prototype.readable=!0;var a=r(13).EVENTS;Object.keys(a).forEach(function(t){if(0===a[t])i.prototype["on"+t]=function(){this.scope.emit(t)};else if(1===a[t])i.prototype["on"+t]=function(e){this.scope.emit(t,e)};else{if(2!==a[t])throw Error("wrong number of arguments!");i.prototype["on"+t]=function(e,r){this.scope.emit(t,e,r)}}})},function(t,e,r){function n(t,e){var r=this._parser=new i(t,e),n=this._decoder=new a;o.call(this,{decodeStrings:!1}),this.once("finish",function(){r.end(n.end())})}t.exports=n;var i=r(14),o=r(30).Writable||r(46).Writable,a=r(39).StringDecoder,s=r(9).Buffer;r(21)(n,o),o.prototype._write=function(t,e,r){t instanceof s&&(t=this._decoder.write(t)),this._parser.write(t),r()}},function(t,e,r){function n(){i.call(this)}t.exports=n;var i=r(22).EventEmitter,o=r(21);o(n,i),n.Readable=r(31),n.Writable=r(42),n.Duplex=r(43),n.Transform=r(44),n.PassThrough=r(45),n.Stream=n,n.prototype.pipe=function(t,e){function r(e){t.writable&&!1===t.write(e)&&c.pause&&c.pause()}function n(){c.readable&&c.resume&&c.resume()}function o(){l||(l=!0,t.end())}function a(){l||(l=!0,"function"==typeof t.destroy&&t.destroy())}function s(t){if(u(),0===i.listenerCount(this,"error"))throw t}function u(){c.removeListener("data",r),t.removeListener("drain",n),c.removeListener("end",o),c.removeListener("close",a),c.removeListener("error",s),t.removeListener("error",s),c.removeListener("end",u),c.removeListener("close",u),t.removeListener("close",u)}var c=this;c.on("data",r),t.on("drain",n),t._isStdio||e&&e.end===!1||(c.on("end",o),c.on("close",a));var l=!1;return c.on("error",s),t.on("error",s),c.on("end",u),c.on("close",u),t.on("close",u),t.emit("pipe",c),t}},function(t,e,r){(function(n){e=t.exports=r(33),e.Stream=r(30),e.Readable=e,e.Writable=r(38),e.Duplex=r(37),e.Transform=r(40),e.PassThrough=r(41),n.browser||"disable"!==n.env.READABLE_STREAM||(t.exports=r(30))}).call(e,r(32))},function(t,e){function r(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function i(t){if(l===setTimeout)return setTimeout(t,0);if((l===r||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function o(t){if(f===clearTimeout)return clearTimeout(t);if((f===n||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(t);try{return f(t)}catch(e){try{return f.call(null,t)}catch(e){return f.call(this,t)}}}function a(){g&&p&&(g=!1,p.length?d=p.concat(d):v=-1,d.length&&s())}function s(){if(!g){var t=i(a);g=!0;for(var e=d.length;e;){for(p=d,d=[];++v1)for(var r=1;r0)if(e.ended&&!i){var s=new Error("stream.push() after EOF");t.emit("error",s)}else if(e.endEmitted&&i){var s=new Error("stream.unshift() after end event");t.emit("error",s)}else!e.decoder||i||n||(r=e.decoder.write(r)),i||(e.reading=!1),e.flowing&&0===e.length&&!e.sync?(t.emit("data",r),t.read(0)):(e.length+=e.objectMode?1:r.length,i?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&f(t)),p(t,e);else i||(e.reading=!1);return a(e)}function a(t){return!t.ended&&(t.needReadable||t.length=C)t=C;else{t--;for(var e=1;e<32;e<<=1)t|=t>>e;t++}return t}function u(t,e){return 0===e.length&&e.ended?0:e.objectMode?0===t?0:1:isNaN(t)||k.isNull(t)?e.flowing&&e.buffer.length?e.buffer[0].length:e.length:t<=0?0:(t>e.highWaterMark&&(e.highWaterMark=s(t)),t>e.length?e.ended?e.length:(e.needReadable=!0,0):t)}function c(t,e){var r=null;return k.isBuffer(e)||k.isString(e)||k.isNullOrUndefined(e)||t.objectMode||(r=new TypeError("Invalid non-string/buffer chunk")),r}function l(t,e){if(e.decoder&&!e.ended){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,f(t)}function f(t){var r=t._readableState;r.needReadable=!1,r.emittedReadable||(T("emitReadable",r.flowing),r.emittedReadable=!0,r.sync?e.nextTick(function(){h(t)}):h(t))}function h(t){T("emit readable"),t.emit("readable"),b(t)}function p(t,r){r.readingMore||(r.readingMore=!0,e.nextTick(function(){d(t,r)}))}function d(t,e){for(var r=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=i)r=o?n.join(""):A.concat(n,i),n.length=0;else if(t0)throw new Error("endReadable called on non-empty stream");r.endEmitted||(r.ended=!0,e.nextTick(function(){r.endEmitted||0!==r.length||(r.endEmitted=!0,t.readable=!1,t.emit("end"))}))}function w(t,e){for(var r=0,n=t.length;r0)&&(e.emittedReadable=!1),0===t&&e.needReadable&&(e.length>=e.highWaterMark||e.ended))return T("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?_(this):f(this),null;if(t=u(t,e),0===t&&e.ended)return 0===e.length&&_(this),null;var n=e.needReadable;T("need readable",n),(0===e.length||e.length-t0?m(t,e):null,k.isNull(i)&&(e.needReadable=!0,t=0),e.length-=t,0!==e.length||e.ended||(e.needReadable=!0),r!==t&&e.ended&&0===e.length&&_(this),k.isNull(i)||this.emit("data",i),i},i.prototype._read=function(t){this.emit("error",new Error("not implemented"))},i.prototype.pipe=function(t,r){function n(t){T("onunpipe"),t===f&&o()}function i(){T("onend"),t.end()}function o(){T("cleanup"),t.removeListener("close",u),t.removeListener("finish",c),t.removeListener("drain",v),t.removeListener("error",s),t.removeListener("unpipe",n),f.removeListener("end",i),f.removeListener("end",o),f.removeListener("data",a),!h.awaitDrain||t._writableState&&!t._writableState.needDrain||v()}function a(e){T("ondata");var r=t.write(e);!1===r&&(T("false write response, pause",f._readableState.awaitDrain),f._readableState.awaitDrain++,f.pause())}function s(e){T("onerror",e),l(),t.removeListener("error",s),0===S.listenerCount(t,"error")&&t.emit("error",e)}function u(){t.removeListener("finish",c),l()}function c(){T("onfinish"),t.removeListener("close",u),l()}function l(){T("unpipe"),f.unpipe(t)}var f=this,h=this._readableState;switch(h.pipesCount){case 0:h.pipes=t;break;case 1:h.pipes=[h.pipes,t];break;default:h.pipes.push(t)}h.pipesCount+=1,T("pipe count=%d opts=%j",h.pipesCount,r);var p=(!r||r.end!==!1)&&t!==e.stdout&&t!==e.stderr,d=p?i:o;h.endEmitted?e.nextTick(d):f.once("end",d),t.on("unpipe",n);var v=g(f);return t.on("drain",v),f.on("data",a),t._events&&t._events.error?j(t._events.error)?t._events.error.unshift(s):t._events.error=[s,t._events.error]:t.on("error",s),t.once("close",u),t.once("finish",c),t.emit("pipe",f),h.flowing||(T("pipe resume"),f.resume()),t},i.prototype.unpipe=function(t){var e=this._readableState;if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this),this);if(!t){var r=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var i=0;i1){for(var r=[],n=0;n=this.charLength-this.charReceived?this.charLength-this.charReceived:t.length;if(t.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived=55296&&n<=56319)){if(this.charReceived=this.charLength=0,0===t.length)return e;break}this.charLength+=this.surrogateSize,e=""}this.detectIncompleteChar(t);var i=t.length;this.charLength&&(t.copy(this.charBuffer,0,t.length-this.charReceived,i),i-=this.charReceived),e+=t.toString(this.encoding,0,i);var i=e.length-1,n=e.charCodeAt(i);if(n>=55296&&n<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),t.copy(this.charBuffer,0,0,o),e.substring(0,i)}return e},c.prototype.detectIncompleteChar=function(t){for(var e=t.length>=3?3:t.length;e>0;e--){var r=t[t.length-e];if(1==e&&r>>5==6){this.charLength=2;break}if(e<=2&&r>>4==14){this.charLength=3;break}if(e<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=e},c.prototype.end=function(t){var e="";if(t&&t.length&&(e=this.write(t)),this.charReceived){var r=this.charReceived,n=this.charBuffer,i=this.encoding;e+=n.slice(0,r).toString(i)}return e}},function(t,e,r){function n(t,e){this.afterTransform=function(t,r){return i(e,t,r)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null}function i(t,e,r){var n=t._transformState;n.transforming=!1;var i=n.writecb;if(!i)return t.emit("error",new Error("no writecb in Transform class"));n.writechunk=null,n.writecb=null,u.isNullOrUndefined(r)||t.push(r),i&&i(e);var o=t._readableState;o.reading=!1,(o.needReadable||o.length",t.children&&(r+=d(t.children,e)),p[t.name]&&!e.xmlMode||(r+="")):r+="/>",r}function o(t){return"<"+t.data+">"}function a(t,e){var r=t.data||"";return!e.decodeEntities||t.parent&&t.parent.name in h||(r=l.encodeXML(r)),r}function s(t){return""}function u(t){return""}var c=r(51),l=r(52),f={__proto__:null,allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,hidden:!0,ismap:!0,loop:!0,multiple:!0,muted:!0,open:!0,readonly:!0,required:!0,reversed:!0,scoped:!0,seamless:!0,selected:!0,typemustmatch:!0},h={__proto__:null,style:!0,script:!0,xmp:!0,iframe:!0,noembed:!0,noframes:!0,plaintext:!0,noscript:!0},p={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},d=t.exports=function(t,e){Array.isArray(t)||t.cheerio||(t=[t]),e=e||{};for(var r="",n=0;n0&&(o=i(t,o,r,n),a=a.concat(o),n-=o.length,n<=0)));s++);return a}function o(t,e){for(var r=0,n=e.length;r0&&(r=a(t,e[n].children)));return r}function s(t,e){for(var r=0,n=e.length;r0&&s(t,e[r].children)))return!0;return!1}function u(t,e){for(var r=[],n=0,i=e.length;n0&&(r=r.concat(u(t,e[n].children))));return r}var c=r(24).isTag;t.exports={filter:n,find:i,findOneChild:o,findOne:a,existsOne:s,findAll:u}},function(t,e,r){function n(t,e){return"function"==typeof e?function(r){return r.attribs&&e(r.attribs[t])}:function(r){return r.attribs&&r.attribs[t]===e}}function i(t,e){return function(r){return t(r)||e(r)}}var o=r(24),a=e.isTag=o.isTag;e.testElement=function(t,e){for(var r in t)if(t.hasOwnProperty(r)){if("tag_name"===r){if(!a(e)||!t.tag_name(e.name))return!1}else if("tag_type"===r){if(!t.tag_type(e.type))return!1}else if("tag_contains"===r){if(a(e)||!t.tag_contains(e.data))return!1}else if(!e.attribs||!t[r](e.attribs[r]))return!1}else;return!0};var s={tag_name:function(t){return"function"==typeof t?function(e){return a(e)&&t(e.name)}:"*"===t?a:function(e){return a(e)&&e.name===t}},tag_type:function(t){return"function"==typeof t?function(e){return t(e.type)}:function(e){return e.type===t}},tag_contains:function(t){return"function"==typeof t?function(e){return!a(e)&&t(e.data)}:function(e){return!a(e)&&e.data===t}}};e.getElements=function(t,e,r,o){var a=Object.keys(t).map(function(e){var r=t[e];return e in s?s[e](r):n(e,r)});return 0===a.length?[]:this.filter(a.reduce(i),e,r,o)},e.getElementById=function(t,e,r){return Array.isArray(e)||(e=[e]),this.findOne(n("id",t),e,r!==!1)},e.getElementsByTagName=function(t,e,r,n){return this.filter(s.tag_name(t),e,r,n)},e.getElementsByTagType=function(t,e,r,n){return this.filter(s.tag_type(t),e,r,n)}},function(t,e){e.removeSubsets=function(t){for(var e,r,n,i=t.length;--i>-1;){for(e=r=t[i],t[i]=null,n=!0;r;){if(t.indexOf(r)>-1){n=!1,t.splice(i,1);break}r=r.parent}n&&(t[i]=e)}return t};var r={DISCONNECTED:1,PRECEDING:2,FOLLOWING:4,CONTAINS:8,CONTAINED_BY:16},n=e.compareDocumentPosition=function(t,e){var n,i,o,a,s,u,c=[],l=[];if(t===e)return 0;for(n=t;n;)c.unshift(n),n=n.parent;for(n=e;n;)l.unshift(n),n=n.parent;for(u=0;c[u]===l[u];)u++;return 0===u?r.DISCONNECTED:(i=c[u-1],o=i.children,a=c[u],s=l[u],o.indexOf(a)>o.indexOf(s)?i===e?r.FOLLOWING|r.CONTAINED_BY:r.FOLLOWING:i===t?r.PRECEDING|r.CONTAINS:r.PRECEDING)};e.uniqueSort=function(t){var e,i,o=t.length;for(t=t.slice();--o>-1;)e=t[o],i=t.indexOf(e),i>-1&&i)[^>]*$|#([\w\-]*)$)/;e.isHtml=function(t){if("<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&t.length>=3)return!0;var e=a.exec(t);return!(!e||!e[1])}},function(t,e){function r(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function n(t,e){for(var r=-1,n=Array(t);++r1?r[i-1]:void 0,a=i>2?r[2]:void 0;for(o=t.length>3&&"function"==typeof o?(i--,o):void 0,a&&f(r[0],r[1],a)&&(o=i<3?void 0:o,i=1),e=Object(e);++n-1&&t%1==0&&t-1&&t%1==0&&t<=j}function _(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function w(t){return!!t&&"object"==typeof t}function x(t){return v(t)?i(t,!0):a(t)}var j=9007199254740991,A="[object Arguments]",S="[object Function]",E="[object GeneratorFunction]",k=/^(?:0|[1-9]\d*)$/,O=Object.prototype,T=O.hasOwnProperty,C=O.toString,L=O.propertyIsEnumerable,D=Math.max,R=Array.isArray,N=c(function(t,e){u(e,x(e),t)});t.exports=N},function(t,e){(function(e){function r(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function n(t,e){for(var r=-1,n=t?t.length:0;++r-1}function o(t,e,r,n){for(var i=t.length,o=r+(n?1:-1);n?o--:++o1&&E.reverse(),p&&c1?"& ":"")+e[n],e=e.join(r>2?", ":" "),t.replace(ft,"{\n/* [wrapped with "+e+"] */\n")}function T(t,e){return e=null==e?rt:e,!!e&&("number"==typeof t||bt.test(t))&&t>-1&&t%1==0&&t2?t:void 0}(),Pt=Nt?function(t,e,r){var n=e+"";return Nt(t,"toString",{configurable:!0,enumerable:!1,value:F(O(n,R(k(n),r)))})}:V,qt=d(function(t,e,r){var n=H;if(r.length){var i=f(r,S(qt));n|=J}return A(t,n,e,r,i)});qt.placeholder={},t.exports=qt}).call(e,function(){return this}())},function(t,e){function r(t,e){for(var r=-1,n=t?t.length:0;++r-1&&t%1==0&&t-1&&t%1==0&&t<=x}function b(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function m(t){return!!t&&"object"==typeof t}function _(t){return d(t)?o(t):s(t)}function w(t){return t}var x=9007199254740991,j="[object Arguments]",A="[object Function]",S="[object GeneratorFunction]",E=/^(?:0|[1-9]\d*)$/,k=Object.prototype,O=k.hasOwnProperty,T=k.toString,C=k.propertyIsEnumerable,L=i(Object.keys,Object),D=u(a),R=c(),N=Array.isArray;t.exports=h},function(t,e){function r(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function n(t,e){for(var r=-1,n=Array(t);++r1?r[i-1]:void 0,a=i>2?r[2]:void 0;for(o=t.length>3&&"function"==typeof o?(i--,o):void 0,a&&h(r[0],r[1],a)&&(o=i<3?void 0:o,i=1),e=Object(e);++n-1&&t%1==0&&t-1&&t%1==0&&t<=A}function w(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function x(t){return!!t&&"object"==typeof t}function j(t){return y(t)?i(t,!0):s(t)}var A=9007199254740991,S="[object Arguments]",E="[object Function]",k="[object GeneratorFunction]",O=/^(?:0|[1-9]\d*)$/,T=Object.prototype,C=T.hasOwnProperty,L=T.toString,D=T.propertyIsEnumerable,R=Math.max,N=Array.isArray,P=l(function(t,e,r,n){c(e,j(e),t,n)}),q=u(function(t){return t.push(void 0,o),r(P,void 0,t)});t.exports=q},function(t,e,r){var n=r(67),i=r(61),o=i.isTag,a=i.domEach,s=Object.prototype.hasOwnProperty,u=i.camelCase,c=i.cssCase,l=/\s+/,f="data-",h={forEach:r(64),extend:r(62),some:r(82)},p={null:null,true:!0,false:!1},d=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,g=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,v=function(t,e){if(t&&o(t))return t.attribs||(t.attribs={}),e?s.call(t.attribs,e)?d.test(e)?e:t.attribs[e]:"option"===t.name&&"value"===e?n.text(t.children):"input"!==t.name||"radio"!==t.attribs.type&&"checkbox"!==t.attribs.type||"value"!==e?void 0:"on":t.attribs},y=function(t,e,r){null===r?x(t,e):t.attribs[e]=r+""};e.attr=function(t,e){return"object"==typeof t||void 0!==e?"function"==typeof e?a(this,function(r,n){y(n,t,e.call(n,r,n.attribs[t]))}):a(this,function(r,n){o(n)&&("object"==typeof t?h.forEach(t,function(t,e){y(n,e,t)}):y(n,t,e))}):v(this[0],t)};var b=function(t,e){if(t&&o(t))return t.hasOwnProperty(e)?t[e]:d.test(e)?void 0!==v(t,e):v(t,e)},m=function(t,e,r){t[e]=d.test(e)?!!r:r};e.prop=function(t,e){var r,n=0;if("string"==typeof t&&void 0===e){switch(t){case"style":r=this.css(),h.forEach(r,function(t,e){r[n++]=e}),r.length=n;break;case"tagName":case"nodeName":r=this[0].name.toUpperCase();break;default:r=b(this[0],t)}return r}if("object"==typeof t||void 0!==e)return"function"==typeof e?a(this,function(r,n){m(n,t,e.call(n,r,b(n,t)))}):a(this,function(r,n){o(n)&&("object"==typeof t?h.forEach(t,function(t,e){m(n,e,t)}):m(n,t,e))})};var _=function(t,e,r){return t.data||(t.data={}),"object"==typeof e?h.extend(t.data,e):void("string"==typeof e&&void 0!==r?t.data[e]=r:"object"==typeof e&&h.extend(t.data,e))},w=function(t,e){var r,n,i,o,a,l,h,d=1===arguments.length;for(d?(r=Object.keys(t.attribs).filter(function(t){return t.slice(0,f.length)===f}),i=r.map(function(t){return u(t.slice(f.length))})):(r=[f+c(e)],i=[e]),l=0,h=r.length;l-1;)if(r=o+t.length,(0===o||l.test(i[o-1]))&&(r===i.length||l.test(i[r])))return!0})},e.addClass=function(t){if("function"==typeof t)return a(this,function(r,n){ +var i=n.attribs.class||"";e.addClass.call([n],t.call(n,r,i))});if(!t||"string"!=typeof t)return this;for(var r=t.split(l),n=this.length,i=0;i=0&&(u.splice(a,1),s=!0,c--);s&&(e.attribs.class=u.join(" "))}}))},e.toggleClass=function(t,r){if("function"==typeof t)return a(this,function(n,i){e.toggleClass.call([i],t.call(i,n,i.attribs.class||"",r),r)});if(!t||"string"!=typeof t)return this;for(var n,i,s=t.split(l),u=s.length,c="boolean"==typeof r?r?1:-1:0,f=this.length,h=0;h=0&&i<0?n.push(s[p]):c<=0&&i>=0&&n.splice(i,1);this[h].attribs.class=n.join(" ")}return this},e.is=function(t){return!!t&&this.filter(t).length>0}},function(t,e,r){function n(t,e,r){if(e)"string"==typeof e&&(e=o(e,t._root,r));else{if(!t._root||!t._root.children)return"";e=t._root.children}return i(e,r)}var i=r(50),o=r(68),a=r(8),s={merge:r(80),defaults:r(65)};e.load=function(t,n){var i=r(7);n=s.defaults(n||{},i.prototype.options);var o=a(t,n),u=function(t,e,r,a){return this instanceof u?(a=s.defaults(a||{},n),i.call(this,t,e,r||o,a)):new u(t,e,r,a)};return u.prototype=Object.create(i.prototype),u.prototype.constructor=u,u.fn=u.prototype,u.prototype._originalRoot=o,s.merge(u,e),u._root=o,u._options=n,u},e.html=function(t,e){var i=r(7);return"[object Object]"!==Object.prototype.toString.call(t)||e||"length"in t||"type"in t||(e=t,t=void 0),e=s.defaults(e||{},this._options,i.prototype.options),n(this,t,e)},e.xml=function(t){var e=s.defaults({xmlMode:!0},this._options);return n(this,t,e)},e.text=function(t){t||(t=this.root());for(var r,n="",i=t.length,o=0;o1&&"scope"!==e)throw new SyntaxError("pseudo-selector :"+e+" requires an argument")}else if(1===t.length)throw new SyntaxError("pseudo-selector :"+e+" doesn't have any arguments")}var s=r(48),u=s.isTag,c=s.getText,l=s.getParent,f=s.getChildren,h=s.getSiblings,p=s.hasAttrib,d=s.getName,g=s.getAttributeValue,v=r(70),y=r(74).rules.equals,b=r(73),m=b.trueFunc,_=b.falseFunc,w={contains:function(t,e){return function(r){return t(r)&&c(r).indexOf(e)>=0}},icontains:function(t,e){var r=e.toLowerCase();return function(e){return t(e)&&c(e).toLowerCase().indexOf(r)>=0}},"nth-child":function(t,e){var r=v(e);return r===_?r:r===m?o(t):function(e){for(var n=h(e),i=0,o=0;i=0;o--)if(u(n[o])){if(n[o]===e)break;i++}return r(i)&&t(e)}},"nth-of-type":function(t,e){var r=v(e);return r===_?r:r===m?o(t):function(e){for(var n=h(e),i=0,o=0;o=0;o--)if(u(n[o])){if(n[o]===e)break;d(n[o])===d(e)&&i++}return r(i)&&t(e)}},root:function(t){return function(e){return!l(e)&&t(e)}},scope:function(t,e,r,n){return n&&0!==n.length?1===n.length?function(e){return n[0]===e&&t(e)}:function(e){return n.indexOf(e)>=0&&t(e)}:w.root(t)},checkbox:i("type","checkbox"),file:i("type","file"),password:i("type","password"),radio:i("type","radio"),reset:i("type","reset"),image:i("type","image"),submit:i("type","submit")},x={empty:function(t){return!f(t).some(function(t){return u(t)||"text"===t.type})},"first-child":function(t){return n(h(t))===t},"last-child":function(t){for(var e=h(t),r=e.length-1;r>=0;r--){if(e[r]===t)return!0;if(u(e[r]))break}return!1},"first-of-type":function(t){for(var e=h(t),r=0;r=0;r--)if(u(e[r])){if(e[r]===t)return!0;if(d(e[r])===d(t))break}return!1},"only-of-type":function(t){for(var e=h(t),r=0,n=e.length;r=r};var n=r%e;return n<0&&(n+=e),e>1?function(t){return t>=r&&t%e===n}:(e*=-1,function(t){return t<=r&&t%e===n})}t.exports=n;var i=r(73),o=i.trueFunc,a=i.falseFunc},function(t,e){t.exports={trueFunc:function(){return!0},falseFunc:function(){return!1}}},function(t,e,r){var n=r(48),i=n.hasAttrib,o=n.getAttributeValue,a=r(73).falseFunc,s=/[-[\]{}()*+?.,\\^$|#\s]/g,u={__proto__:null,equals:function(t,e){var r=e.name,n=e.value;return e.ignoreCase?(n=n.toLowerCase(),function(e){var i=o(e,r);return null!=i&&i.toLowerCase()===n&&t(e)}):function(e){return o(e,r)===n&&t(e)}},hyphen:function(t,e){var r=e.name,n=e.value,i=n.length;return e.ignoreCase?(n=n.toLowerCase(),function(e){var a=o(e,r);return null!=a&&(a.length===i||"-"===a.charAt(i))&&a.substr(0,i).toLowerCase()===n&&t(e)}):function(e){var a=o(e,r);return null!=a&&a.substr(0,i)===n&&(a.length===i||"-"===a.charAt(i))&&t(e)}},element:function(t,e){var r=e.name,n=e.value;if(/\s/.test(n))return a;n=n.replace(s,"\\$&");var i="(?:^|\\s)"+n+"(?:$|\\s)",u=e.ignoreCase?"i":"",c=new RegExp(i,u);return function(e){var n=o(e,r);return null!=n&&c.test(n)&&t(e)}},exists:function(t,e){var r=e.name;return function(e){return i(e,r)&&t(e)}},start:function(t,e){var r=e.name,n=e.value,i=n.length;return 0===i?a:e.ignoreCase?(n=n.toLowerCase(),function(e){var a=o(e,r);return null!=a&&a.substr(0,i).toLowerCase()===n&&t(e)}):function(e){var a=o(e,r);return null!=a&&a.substr(0,i)===n&&t(e)}},end:function(t,e){var r=e.name,n=e.value,i=-n.length;return 0===i?a:e.ignoreCase?(n=n.toLowerCase(),function(e){var a=o(e,r);return null!=a&&a.substr(i).toLowerCase()===n&&t(e)}):function(e){var a=o(e,r);return null!=a&&a.substr(i)===n&&t(e)}},any:function(t,e){var r=e.name,n=e.value;if(""===n)return a;if(e.ignoreCase){var i=new RegExp(n.replace(s,"\\$&"),"i");return function(e){var n=o(e,r);return null!=n&&i.test(n)&&t(e)}}return function(e){var i=o(e,r);return null!=i&&i.indexOf(n)>=0&&t(e)}},not:function(t,e){var r=e.name,n=e.value;return""===n?function(e){return!!o(e,r)&&t(e)}:e.ignoreCase?(n=n.toLowerCase(),function(e){var i=o(e,r);return null!=i&&i.toLowerCase()!==n&&t(e)}):function(e){return o(e,r)!==n&&t(e)}}};t.exports={compile:function(t,e,r){if(r&&r.strict&&(e.ignoreCase||"not"===e.action))throw SyntaxError("Unsupported attribute selector");return u[e.action](t,e)},rules:u}},function(t,e,r){function n(t,e,r){var n=o(t,e,r);return i(n)}function i(t){return function(e){return g(e)&&t(e)}}function o(t,e,r){var n=p(t,e);return u(n,e,r)}function a(t){return"pseudo"===t.type&&("scope"===t.name||Array.isArray(t.data)&&t.data.some(function(t){return t.some(a)}))}function s(t,e){var r=!!e&&!!e.length&&e.every(function(t){return t===A||!!S(t)});t.forEach(function(t){if(t.length>0&&c(t[0])&&"descendant"!==t[0].type);else{if(!r||a(t))return;t.unshift(x)}t.unshift(j)})}function u(t,e,r){t=t.filter(function(t){return t.length>0}),t.forEach(y);var n=Array.isArray(r);return r=e&&e.context||r,r&&!n&&(r=[r]),s(t,r),t.map(function(t){return l(t,e,r,n)}).reduce(f,_)}function c(t){return w[t.type]<0}function l(t,e,r,n){var i=n&&"scope"===t[0].name&&"descendant"===t[1].type;return t.reduce(function(t,n,o){return t===_?t:v[n.type](t,n,e,r,i&&1===o)},e&&e.rootFunc||m)}function f(t,e){return e===_||t===m?t:t===_||e===m?e:function(r){return t(r)||e(r)}}function h(t){return t.some(c)}t.exports=n,t.exports.compileUnsafe=o,t.exports.compileToken=u;var p=r(76),d=r(48),g=d.isTag,v=r(77),y=r(78),b=r(73),m=b.trueFunc,_=b.falseFunc,w=r(79),x={type:"descendant"},j={type:"pseudo",name:"scope"},A={},S=d.getParent,E=r(69),k=E.filters,O=d.existsOne,g=d.isTag,T=d.getChildren;k.not=function(t,e,r,n){var i={xmlMode:!(!r||!r.xmlMode),strict:!(!r||!r.strict)};if(i.strict&&(e.length>1||e.some(h)))throw new SyntaxError("complex selectors in :not aren't allowed in strict mode");var o=u(e,i,n);return o===_?t:o===m?_:function(e){return!o(e)&&t(e)}},k.has=function(t,e,r){var n={xmlMode:!(!r||!r.xmlMode),strict:!(!r||!r.strict)},o=e.some(h)?[A]:null,a=u(e,n,o);return a===_?_:a===m?function(e){return T(e).some(g)&&t(e)}:(a=i(a),o?function(e){return t(e)&&(o[0]=e,O(a,T(e)))}:function(e){return t(e)&&O(a,T(e))})},k.matches=function(t,e,r,n){var i={xmlMode:!(!r||!r.xmlMode),strict:!(!r||!r.strict),rootFunc:t};return u(e,i,n)}},function(t,e){"use strict";function r(t,e,r){var n="0x"+e-65536;return n!==n||r?e:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)}function n(t){return t.replace(c,r)}function i(t){return" "===t||"\n"===t||"\t"===t||"\f"===t||"\r"===t}function o(t,e){var r=[];if(t=a(r,t+"",e),""!==t)throw new SyntaxError("Unmatched selector: "+t);return r}function a(t,e,r){function o(){var t=e.match(u)[0];return e=e.substr(t.length),n(t)}function c(t){for(;i(e.charAt(t));)t++;e=e.substr(t)}var y,b,m,_,w=[],x=!1;for(c(0);""!==e;)if(b=e.charAt(0),i(b))x=!0,c(1);else if(b in h)w.push({type:h[b]}),x=!1,c(1);else if(","===b){if(0===w.length)throw new SyntaxError("empty sub-selector");t.push(w),w=[],x=!1,c(1)}else if(x&&(w.length>0&&w.push({type:"descendant"}),x=!1),"*"===b)e=e.substr(1),w.push({type:"universal"});else if(b in p)e=e.substr(1),w.push({type:"attribute",name:p[b][0],action:p[b][1],value:o(),ignoreCase:!1});else if("["===b){if(e=e.substr(1),y=e.match(l),!y)throw new SyntaxError("Malformed attribute selector: "+e);e=e.substr(y[0].length),m=n(y[1]),r&&("lowerCaseAttributeNames"in r?!r.lowerCaseAttributeNames:r.xmlMode)||(m=m.toLowerCase()),w.push({type:"attribute",name:m,action:f[y[2]],value:n(y[4]||y[5]||""),ignoreCase:!!y[6]})}else if(":"===b){if(":"===e.charAt(1)){e=e.substr(2),w.push({type:"pseudo-element",name:o().toLowerCase()});continue}if(e=e.substr(1),m=o().toLowerCase(),y=null,"("===e.charAt(0))if(m in d){_=e.charAt(1);var j=_ in v;if(e=e.substr(j+1),y=[],e=a(y,e,r),j){if(e.charAt(0)!==_)throw new SyntaxError("unmatched quotes in :"+m);e=e.substr(1)}if(")"!==e.charAt(0))throw new SyntaxError("missing closing parenthesis in :"+m+" "+e);e=e.substr(1)}else{for(var A=1,S=1;S>0&&A0&&0===e.length)throw new SyntaxError("empty sub-selector");t.push(e)}t.exports=o;var u=/^(?:\\.|[\w\-\u00c0-\uFFFF])+/,c=/\\([\da-f]{1,6}\s?|(\s)|.)/gi,l=/^\s*((?:\\.|[\w\u00c0-\uFFFF\-])+)\s*(?:(\S?)=\s*(?:(['"])(.*?)\3|(#?(?:\\.|[\w\u00c0-\uFFFF\-])*)|)|)\s*(i)?\]/,f={__proto__:null,undefined:"exists","":"equals","~":"element","^":"start",$:"end","*":"any","!":"not","|":"hyphen"},h={__proto__:null,">":"child","<":"parent","~":"sibling","+":"adjacent"},p={__proto__:null,"#":["id","equals"],".":["class","element"]},d={__proto__:null,has:!0,not:!0,matches:!0},g={__proto__:null,contains:!0,icontains:!0},v={__proto__:null,'"':!0,"'":!0}},function(t,e,r){var n=r(48),i=n.isTag,o=n.getParent,a=n.getChildren,s=n.getSiblings,u=n.getName;t.exports={__proto__:null,attribute:r(74).compile,pseudo:r(69).compile,tag:function(t,e){var r=e.name;return function(e){return u(e)===r&&t(e)}},descendant:function(t,e,r,n,i){return function(e){if(i&&t(e))return!0;for(var r=!1;!r&&(e=o(e));)r=t(e);return r}},parent:function(t,e,r){function n(e){return i(e)&&t(e)}if(r&&r.strict)throw SyntaxError("Parent selector isn't part of CSS3");return function(t){return a(t).some(n)}},child:function(t){return function(e){var r=o(e);return!!r&&t(r)}},sibling:function(t){return function(e){for(var r=s(e),n=0;n=0&&n>=1);else if(e===o.pseudo)if(t.data)if("has"===t.name||"contains"===t.name)e=0;else if("matches"===t.name||"not"===t.name){e=0;for(var r=0;re&&(e=n)}t.data.length>1&&e>0&&(e-=1)}else e=1;else e=3;return e}t.exports=n;var o=r(79),a={__proto__:null,exists:10,equals:8,not:7,start:6,end:6,any:5,hyphen:4,element:4}},function(t,e){t.exports={universal:50,tag:30,attribute:1,pseudo:0,descendant:-1,child:-1,parent:-1,sibling:-1,adjacent:-1}},function(t,e,r){(function(t,r){function n(t,e){return t.set(e[0],e[1]),t}function i(t,e){return t.add(e),t}function o(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function a(t,e){for(var r=-1,n=t?t.length:0;++r-1}function k(t,e){var r=this.__data__,n=$(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function O(t){var e=-1,r=t?t.length:0;for(this.clear();++e1?r[i-1]:void 0,a=i>2?r[2]:void 0;for(o=t.length>3&&"function"==typeof o?(i--,o):void 0,a&&wt(r[0],r[1],a)&&(o=i<3?void 0:o,i=1),e=Object(e);++n-1&&t%1==0&&t-1&&t%1==0&&t<=$t}function Rt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Nt(t){return!!t&&"object"==typeof t}function Pt(t){if(!Nt(t)||Ue.call(t)!=Kt||h(t))return!1;var e=He(t);if(null===e)return!0;var r=Me.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&Be.call(r)==Ie}function qt(t){return ft(t,Mt(t))}function Bt(t){return Tt(t)?U(t):Q(t)}function Mt(t){return Tt(t)?U(t,!0):Z(t)}function It(){return[]}function Ut(){return!1}var Ft=200,Vt="__lodash_hash_undefined__",$t=9007199254740991,zt="[object Arguments]",Ht="[object Array]",Gt="[object Boolean]",Yt="[object Date]",Wt="[object Error]",Xt="[object Function]",Jt="[object GeneratorFunction]",Qt="[object Map]",Zt="[object Number]",Kt="[object Object]",te="[object Promise]",ee="[object RegExp]",re="[object Set]",ne="[object String]",ie="[object Symbol]",oe="[object WeakMap]",ae="[object ArrayBuffer]",se="[object DataView]",ue="[object Float32Array]",ce="[object Float64Array]",le="[object Int8Array]",fe="[object Int16Array]",he="[object Int32Array]",pe="[object Uint8Array]",de="[object Uint8ClampedArray]",ge="[object Uint16Array]",ve="[object Uint32Array]",ye=/[\\^$.*+?()[\]{}|]/g,be=/\w*$/,me=/^\[object .+?Constructor\]$/,_e=/^(?:0|[1-9]\d*)$/,we={};we[ue]=we[ce]=we[le]=we[fe]=we[he]=we[pe]=we[de]=we[ge]=we[ve]=!0,we[zt]=we[Ht]=we[ae]=we[Gt]=we[se]=we[Yt]=we[Wt]=we[Xt]=we[Qt]=we[Zt]=we[Kt]=we[ee]=we[re]=we[ne]=we[oe]=!1;var xe={};xe[zt]=xe[Ht]=xe[ae]=xe[se]=xe[Gt]=xe[Yt]=xe[ue]=xe[ce]=xe[le]=xe[fe]=xe[he]=xe[Qt]=xe[Zt]=xe[Kt]=xe[ee]=xe[re]=xe[ne]=xe[ie]=xe[pe]=xe[de]=xe[ge]=xe[ve]=!0,xe[Wt]=xe[Xt]=xe[oe]=!1;var je="object"==typeof t&&t&&t.Object===Object&&t,Ae="object"==typeof self&&self&&self.Object===Object&&self,Se=je||Ae||Function("return this")(),Ee="object"==typeof e&&e&&!e.nodeType&&e,ke=Ee&&"object"==typeof r&&r&&!r.nodeType&&r,Oe=ke&&ke.exports===Ee,Te=Oe&&je.process,Ce=function(){try{return Te&&Te.binding("util")}catch(t){}}(),Le=Ce&&Ce.isTypedArray,De=Array.prototype,Re=Function.prototype,Ne=Object.prototype,Pe=Se["__core-js_shared__"],qe=function(){var t=/[^.]+$/.exec(Pe&&Pe.keys&&Pe.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),Be=Re.toString,Me=Ne.hasOwnProperty,Ie=Be.call(Object),Ue=Ne.toString,Fe=RegExp("^"+Be.call(Me).replace(ye,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ve=Oe?Se.Buffer:void 0,$e=Se.Symbol,ze=Se.Uint8Array,He=d(Object.getPrototypeOf,Object),Ge=Object.create,Ye=Ne.propertyIsEnumerable,We=De.splice,Xe=Object.getOwnPropertySymbols,Je=Ve?Ve.isBuffer:void 0,Qe=d(Object.keys,Object),Ze=Math.max,Ke=vt(Se,"DataView"),tr=vt(Se,"Map"),er=vt(Se,"Promise"),rr=vt(Se,"Set"),nr=vt(Se,"WeakMap"),ir=vt(Object,"create"),or=Et(Ke),ar=Et(tr),sr=Et(er),ur=Et(rr),cr=Et(nr),lr=$e?$e.prototype:void 0,fr=lr?lr.valueOf:void 0;v.prototype.clear=y,v.prototype.delete=b,v.prototype.get=m,v.prototype.has=_,v.prototype.set=w,x.prototype.clear=j,x.prototype.delete=A,x.prototype.get=S,x.prototype.has=E,x.prototype.set=k,O.prototype.clear=T,O.prototype.delete=C,O.prototype.get=L,O.prototype.has=D,O.prototype.set=R,N.prototype.clear=P,N.prototype.delete=q,N.prototype.get=B,N.prototype.has=M,N.prototype.set=I;var hr=Xe?d(Xe,Object):It,pr=W;(Ke&&pr(new Ke(new ArrayBuffer(1)))!=se||tr&&pr(new tr)!=Qt||er&&pr(er.resolve())!=te||rr&&pr(new rr)!=re||nr&&pr(new nr)!=oe)&&(pr=function(t){var e=Ue.call(t),r=e==Kt?t.constructor:void 0,n=r?Et(r):void 0;if(n)switch(n){case or:return se;case ar:return Qt;case sr:return te;case ur:return re;case cr:return oe}return e});var dr=Array.isArray,gr=Je||Ut,vr=Le?l(Le):J,yr=pt(function(t,e,r){K(t,e,r)});r.exports=yr}).call(e,function(){return this}(),r(81)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},function(t,e,r){(function(t,r){function n(t,e){for(var r=-1,n=t?t.length:0;++r-1}function j(t,e){var r=this.__data__,n=U(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function A(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&$t?new C:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Gt}function Lt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Dt(t){return!!t&&"object"==typeof t}function Rt(t){return"symbol"==typeof t||Dt(t)&&He.call(t)==se}function Nt(t){return null==t?"":rt(t)}function Pt(t,e,r){var n=null==t?void 0:V(t,e);return void 0===n?r:n}function qt(t,e){return null!=t&&ht(t,e,z)}function Bt(t){return kt(t)?I(t):Q(t)}function Mt(t){return t}function It(t){return gt(t)?i(wt(t)):tt(t)}var Ut=200,Ft="Expected a function",Vt="__lodash_hash_undefined__",$t=1,zt=2,Ht=1/0,Gt=9007199254740991,Yt="[object Arguments]",Wt="[object Array]",Xt="[object Boolean]",Jt="[object Date]",Qt="[object Error]",Zt="[object Function]",Kt="[object GeneratorFunction]",te="[object Map]",ee="[object Number]",re="[object Object]",ne="[object Promise]",ie="[object RegExp]",oe="[object Set]",ae="[object String]",se="[object Symbol]",ue="[object WeakMap]",ce="[object ArrayBuffer]",le="[object DataView]",fe="[object Float32Array]",he="[object Float64Array]",pe="[object Int8Array]",de="[object Int16Array]",ge="[object Int32Array]",ve="[object Uint8Array]",ye="[object Uint8ClampedArray]",be="[object Uint16Array]",me="[object Uint32Array]",_e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,we=/^\w*$/,xe=/^\./,je=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ae=/[\\^$.*+?()[\]{}|]/g,Se=/\\(\\)?/g,Ee=/^\[object .+?Constructor\]$/,ke=/^(?:0|[1-9]\d*)$/,Oe={};Oe[fe]=Oe[he]=Oe[pe]=Oe[de]=Oe[ge]=Oe[ve]=Oe[ye]=Oe[be]=Oe[me]=!0,Oe[Yt]=Oe[Wt]=Oe[ce]=Oe[Xt]=Oe[le]=Oe[Jt]=Oe[Qt]=Oe[Zt]=Oe[te]=Oe[ee]=Oe[re]=Oe[ie]=Oe[oe]=Oe[ae]=Oe[ue]=!1;var Te="object"==typeof t&&t&&t.Object===Object&&t,Ce="object"==typeof self&&self&&self.Object===Object&&self,Le=Te||Ce||Function("return this")(),De="object"==typeof e&&e&&!e.nodeType&&e,Re=De&&"object"==typeof r&&r&&!r.nodeType&&r,Ne=Re&&Re.exports===De,Pe=Ne&&Te.process,qe=function(){try{return Pe&&Pe.binding("util")}catch(t){}}(),Be=qe&&qe.isTypedArray,Me=Array.prototype,Ie=Function.prototype,Ue=Object.prototype,Fe=Le["__core-js_shared__"],Ve=function(){var t=/[^.]+$/.exec(Fe&&Fe.keys&&Fe.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),$e=Ie.toString,ze=Ue.hasOwnProperty,He=Ue.toString,Ge=RegExp("^"+$e.call(ze).replace(Ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ye=Le.Symbol,We=Le.Uint8Array,Xe=Ue.propertyIsEnumerable,Je=Me.splice,Qe=l(Object.keys,Object),Ze=ft(Le,"DataView"),Ke=ft(Le,"Map"),tr=ft(Le,"Promise"),er=ft(Le,"Set"),rr=ft(Le,"WeakMap"),nr=ft(Object,"create"),ir=xt(Ze),or=xt(Ke),ar=xt(tr),sr=xt(er),ur=xt(rr),cr=Ye?Ye.prototype:void 0,lr=cr?cr.valueOf:void 0,fr=cr?cr.toString:void 0;h.prototype.clear=p,h.prototype.delete=d,h.prototype.get=g,h.prototype.has=v,h.prototype.set=y,b.prototype.clear=m,b.prototype.delete=_,b.prototype.get=w,b.prototype.has=x,b.prototype.set=j,A.prototype.clear=S,A.prototype.delete=E,A.prototype.get=k,A.prototype.has=O,A.prototype.set=T,C.prototype.add=C.prototype.push=L,C.prototype.has=D,R.prototype.clear=N,R.prototype.delete=P,R.prototype.get=q,R.prototype.has=B,R.prototype.set=M;var hr=it(F),pr=ot(),dr=$;(Ze&&dr(new Ze(new ArrayBuffer(1)))!=le||Ke&&dr(new Ke)!=te||tr&&dr(tr.resolve())!=ne||er&&dr(new er)!=oe||rr&&dr(new rr)!=ue)&&(dr=function(t){var e=He.call(t),r=e==re?t.constructor:void 0,n=r?xt(r):void 0;if(n)switch(n){case ir:return le;case or:return te;case ar:return ne;case sr:return oe;case ur:return ue}return e});var gr=At(function(t){t=Nt(t);var e=[];return xe.test(t)&&e.push(""),t.replace(je,function(t,r,n,i){e.push(n?i.replace(Se,"$1"):r||t)}),e});At.Cache=A;var vr=Array.isArray,yr=Be?a(Be):X;r.exports=jt}).call(e,function(){return this}(),r(81)(t))},function(t,e,r){function n(t,r,n,i){for(var o=[];r&&o.length0})},e.first=function(){return this.length>1?this._make(this[0]):this},e.last=function(){return this.length>1?this._make(this[this.length-1]):this},e.eq=function(t){return t=+t,0===t&&this.length<=1?this:(t<0&&(t=this.length+t),this[t]?this._make(this[t]):this._make([]))},e.get=function(t){return null==t?Array.prototype.slice.call(this):this[t<0?this.length+t:t]},e.index=function(t){var e,r;return 0===arguments.length?(e=this.parent().children(),r=this[0]):"string"==typeof t?(e=this._make(t),r=this[0]):(e=this,r=t.cheerio?t[0]:t),e.get().indexOf(r)},e.slice=function(){return this._make([].slice.apply(this,arguments))},e.end=function(){return this.prevObject||this._make([])},e.add=function(t,e){for(var r=this._make(t,e),n=s(r.get().concat(this.get())),i=0;i-1}function A(t,e){var r=this.__data__,n=F(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function S(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&zt?new L:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Yt}function Dt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Rt(t){return!!t&&"object"==typeof t}function Nt(t){return"symbol"==typeof t||Rt(t)&&Ge.call(t)==ue}function Pt(t){return null==t?"":nt(t)}function qt(t,e,r){var n=null==t?void 0:z(t,e);return void 0===n?r:n}function Bt(t,e){return null!=t&&pt(t,e,G)}function Mt(t){return Ot(t)?U(t):K(t)}function It(t){return t}function Ut(t){return gt(t)?o(wt(t)):rt(t)}var Ft=200,Vt="Expected a function",$t="__lodash_hash_undefined__",zt=1,Ht=2,Gt=1/0,Yt=9007199254740991,Wt="[object Arguments]",Xt="[object Array]",Jt="[object Boolean]",Qt="[object Date]",Zt="[object Error]",Kt="[object Function]",te="[object GeneratorFunction]",ee="[object Map]",re="[object Number]",ne="[object Object]",ie="[object Promise]",oe="[object RegExp]",ae="[object Set]",se="[object String]",ue="[object Symbol]",ce="[object WeakMap]",le="[object ArrayBuffer]",fe="[object DataView]",he="[object Float32Array]",pe="[object Float64Array]",de="[object Int8Array]",ge="[object Int16Array]",ve="[object Int32Array]",ye="[object Uint8Array]",be="[object Uint8ClampedArray]",me="[object Uint16Array]",_e="[object Uint32Array]",we=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xe=/^\w*$/,je=/^\./,Ae=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Se=/[\\^$.*+?()[\]{}|]/g,Ee=/\\(\\)?/g,ke=/^\[object .+?Constructor\]$/,Oe=/^(?:0|[1-9]\d*)$/,Te={};Te[he]=Te[pe]=Te[de]=Te[ge]=Te[ve]=Te[ye]=Te[be]=Te[me]=Te[_e]=!0,Te[Wt]=Te[Xt]=Te[le]=Te[Jt]=Te[fe]=Te[Qt]=Te[Zt]=Te[Kt]=Te[ee]=Te[re]=Te[ne]=Te[oe]=Te[ae]=Te[se]=Te[ce]=!1;var Ce="object"==typeof t&&t&&t.Object===Object&&t,Le="object"==typeof self&&self&&self.Object===Object&&self,De=Ce||Le||Function("return this")(),Re="object"==typeof e&&e&&!e.nodeType&&e,Ne=Re&&"object"==typeof r&&r&&!r.nodeType&&r,Pe=Ne&&Ne.exports===Re,qe=Pe&&Ce.process,Be=function(){try{return qe&&qe.binding("util")}catch(t){}}(),Me=Be&&Be.isTypedArray,Ie=Array.prototype,Ue=Function.prototype,Fe=Object.prototype,Ve=De["__core-js_shared__"],$e=function(){var t=/[^.]+$/.exec(Ve&&Ve.keys&&Ve.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),ze=Ue.toString,He=Fe.hasOwnProperty,Ge=Fe.toString,Ye=RegExp("^"+ze.call(He).replace(Se,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),We=De.Symbol,Xe=De.Uint8Array,Je=Fe.propertyIsEnumerable,Qe=Ie.splice,Ze=f(Object.keys,Object),Ke=ht(De,"DataView"),tr=ht(De,"Map"),er=ht(De,"Promise"),rr=ht(De,"Set"),nr=ht(De,"WeakMap"),ir=ht(Object,"create"),or=xt(Ke),ar=xt(tr),sr=xt(er),ur=xt(rr),cr=xt(nr),lr=We?We.prototype:void 0,fr=lr?lr.valueOf:void 0,hr=lr?lr.toString:void 0;p.prototype.clear=d,p.prototype.delete=g,p.prototype.get=v,p.prototype.has=y,p.prototype.set=b,m.prototype.clear=_,m.prototype.delete=w,m.prototype.get=x,m.prototype.has=j,m.prototype.set=A,S.prototype.clear=E,S.prototype.delete=k,S.prototype.get=O,S.prototype.has=T,S.prototype.set=C,L.prototype.add=L.prototype.push=D,L.prototype.has=R,N.prototype.clear=P,N.prototype.delete=q,N.prototype.get=B,N.prototype.has=M,N.prototype.set=I;var pr=ot($),dr=at(),gr=H;(Ke&&gr(new Ke(new ArrayBuffer(1)))!=fe||tr&&gr(new tr)!=ee||er&&gr(er.resolve())!=ie||rr&&gr(new rr)!=ae||nr&&gr(new nr)!=ce)&&(gr=function(t){var e=Ge.call(t),r=e==ne?t.constructor:void 0,n=r?xt(r):void 0;if(n)switch(n){case or:return fe;case ar:return ee;case sr:return ie;case ur:return ae;case cr:return ce}return e});var vr=At(function(t){t=Pt(t);var e=[];return je.test(t)&&e.push(""),t.replace(Ae,function(t,r,n,i){e.push(n?i.replace(Ee,"$1"):r||t)}),e});At.Cache=S;var yr=Array.isArray,br=Me?s(Me):Q;r.exports=jt}).call(e,function(){return this}(),r(81)(t))},function(t,e,r){(function(t,r){function n(t,e){for(var r=-1,n=t?t.length:0,i=0,o=[];++r-1}function A(t,e){var r=this.__data__,n=F(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function S(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&$t?new L:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Gt}function Lt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Dt(t){return!!t&&"object"==typeof t}function Rt(t){return"symbol"==typeof t||Dt(t)&&He.call(t)==se}function Nt(t){return null==t?"":nt(t)}function Pt(t,e,r){var n=null==t?void 0:z(t,e);return void 0===n?r:n}function qt(t,e){return null!=t&&pt(t,e,G)}function Bt(t){return kt(t)?U(t):K(t)}function Mt(t){return t}function It(t){return gt(t)?o(wt(t)):rt(t)}var Ut=200,Ft="Expected a function",Vt="__lodash_hash_undefined__",$t=1,zt=2,Ht=1/0,Gt=9007199254740991,Yt="[object Arguments]",Wt="[object Array]",Xt="[object Boolean]",Jt="[object Date]",Qt="[object Error]",Zt="[object Function]",Kt="[object GeneratorFunction]",te="[object Map]",ee="[object Number]",re="[object Object]",ne="[object Promise]",ie="[object RegExp]",oe="[object Set]",ae="[object String]",se="[object Symbol]",ue="[object WeakMap]",ce="[object ArrayBuffer]",le="[object DataView]",fe="[object Float32Array]",he="[object Float64Array]",pe="[object Int8Array]",de="[object Int16Array]",ge="[object Int32Array]",ve="[object Uint8Array]",ye="[object Uint8ClampedArray]",be="[object Uint16Array]",me="[object Uint32Array]",_e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,we=/^\w*$/,xe=/^\./,je=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ae=/[\\^$.*+?()[\]{}|]/g,Se=/\\(\\)?/g,Ee=/^\[object .+?Constructor\]$/,ke=/^(?:0|[1-9]\d*)$/,Oe={};Oe[fe]=Oe[he]=Oe[pe]=Oe[de]=Oe[ge]=Oe[ve]=Oe[ye]=Oe[be]=Oe[me]=!0,Oe[Yt]=Oe[Wt]=Oe[ce]=Oe[Xt]=Oe[le]=Oe[Jt]=Oe[Qt]=Oe[Zt]=Oe[te]=Oe[ee]=Oe[re]=Oe[ie]=Oe[oe]=Oe[ae]=Oe[ue]=!1;var Te="object"==typeof t&&t&&t.Object===Object&&t,Ce="object"==typeof self&&self&&self.Object===Object&&self,Le=Te||Ce||Function("return this")(),De="object"==typeof e&&e&&!e.nodeType&&e,Re=De&&"object"==typeof r&&r&&!r.nodeType&&r,Ne=Re&&Re.exports===De,Pe=Ne&&Te.process,qe=function(){try{return Pe&&Pe.binding("util")}catch(t){}}(),Be=qe&&qe.isTypedArray,Me=Array.prototype,Ie=Function.prototype,Ue=Object.prototype,Fe=Le["__core-js_shared__"],Ve=function(){var t=/[^.]+$/.exec(Fe&&Fe.keys&&Fe.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),$e=Ie.toString,ze=Ue.hasOwnProperty,He=Ue.toString,Ge=RegExp("^"+$e.call(ze).replace(Ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ye=Le.Symbol,We=Le.Uint8Array,Xe=Ue.propertyIsEnumerable,Je=Me.splice,Qe=f(Object.keys,Object),Ze=ht(Le,"DataView"),Ke=ht(Le,"Map"),tr=ht(Le,"Promise"),er=ht(Le,"Set"),rr=ht(Le,"WeakMap"),nr=ht(Object,"create"),ir=xt(Ze),or=xt(Ke),ar=xt(tr),sr=xt(er),ur=xt(rr),cr=Ye?Ye.prototype:void 0,lr=cr?cr.valueOf:void 0,fr=cr?cr.toString:void 0;p.prototype.clear=d,p.prototype.delete=g,p.prototype.get=v,p.prototype.has=y,p.prototype.set=b,m.prototype.clear=_,m.prototype.delete=w,m.prototype.get=x,m.prototype.has=j,m.prototype.set=A,S.prototype.clear=E,S.prototype.delete=k,S.prototype.get=O,S.prototype.has=T,S.prototype.set=C,L.prototype.add=L.prototype.push=D,L.prototype.has=R,N.prototype.clear=P,N.prototype.delete=q,N.prototype.get=B,N.prototype.has=M,N.prototype.set=I;var hr=ot($),pr=at(),dr=H;(Ze&&dr(new Ze(new ArrayBuffer(1)))!=le||Ke&&dr(new Ke)!=te||tr&&dr(tr.resolve())!=ne||er&&dr(new er)!=oe||rr&&dr(new rr)!=ue)&&(dr=function(t){var e=He.call(t),r=e==re?t.constructor:void 0,n=r?xt(r):void 0;if(n)switch(n){case ir:return le;case or:return te;case ar:return ne;case sr:return oe;case ur:return ue}return e});var gr=At(function(t){t=Nt(t);var e=[];return xe.test(t)&&e.push(""),t.replace(je,function(t,r,n,i){e.push(n?i.replace(Se,"$1"):r||t)}),e});At.Cache=S;var vr=Array.isArray,yr=Be?s(Be):Q;r.exports=jt}).call(e,function(){return this}(),r(81)(t))},function(t,e,r){(function(t,r){function n(t,e,r,n){var i=-1,o=t?t.length:0;for(n&&o&&(r=t[++i]);++i-1}function S(t,e){var r=this.__data__,n=V(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function E(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&$t?new D:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Gt}function Lt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Dt(t){return!!t&&"object"==typeof t}function Rt(t){return"symbol"==typeof t||Dt(t)&&He.call(t)==se}function Nt(t){return null==t?"":nt(t)}function Pt(t,e,r){var n=null==t?void 0:z(t,e);return void 0===n?r:n}function qt(t,e){return null!=t&&pt(t,e,G)}function Bt(t){return kt(t)?F(t):K(t)}function Mt(t){return t}function It(t){return gt(t)?o(wt(t)):rt(t)}var Ut=200,Ft="Expected a function",Vt="__lodash_hash_undefined__",$t=1,zt=2,Ht=1/0,Gt=9007199254740991,Yt="[object Arguments]",Wt="[object Array]",Xt="[object Boolean]",Jt="[object Date]",Qt="[object Error]",Zt="[object Function]",Kt="[object GeneratorFunction]",te="[object Map]",ee="[object Number]",re="[object Object]",ne="[object Promise]",ie="[object RegExp]",oe="[object Set]",ae="[object String]",se="[object Symbol]",ue="[object WeakMap]",ce="[object ArrayBuffer]",le="[object DataView]",fe="[object Float32Array]",he="[object Float64Array]",pe="[object Int8Array]",de="[object Int16Array]",ge="[object Int32Array]",ve="[object Uint8Array]",ye="[object Uint8ClampedArray]",be="[object Uint16Array]",me="[object Uint32Array]",_e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,we=/^\w*$/,xe=/^\./,je=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ae=/[\\^$.*+?()[\]{}|]/g,Se=/\\(\\)?/g,Ee=/^\[object .+?Constructor\]$/,ke=/^(?:0|[1-9]\d*)$/,Oe={};Oe[fe]=Oe[he]=Oe[pe]=Oe[de]=Oe[ge]=Oe[ve]=Oe[ye]=Oe[be]=Oe[me]=!0,Oe[Yt]=Oe[Wt]=Oe[ce]=Oe[Xt]=Oe[le]=Oe[Jt]=Oe[Qt]=Oe[Zt]=Oe[te]=Oe[ee]=Oe[re]=Oe[ie]=Oe[oe]=Oe[ae]=Oe[ue]=!1;var Te="object"==typeof t&&t&&t.Object===Object&&t,Ce="object"==typeof self&&self&&self.Object===Object&&self,Le=Te||Ce||Function("return this")(),De="object"==typeof e&&e&&!e.nodeType&&e,Re=De&&"object"==typeof r&&r&&!r.nodeType&&r,Ne=Re&&Re.exports===De,Pe=Ne&&Te.process,qe=function(){try{return Pe&&Pe.binding("util")}catch(t){}}(),Be=qe&&qe.isTypedArray,Me=Array.prototype,Ie=Function.prototype,Ue=Object.prototype,Fe=Le["__core-js_shared__"],Ve=function(){var t=/[^.]+$/.exec(Fe&&Fe.keys&&Fe.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),$e=Ie.toString,ze=Ue.hasOwnProperty,He=Ue.toString,Ge=RegExp("^"+$e.call(ze).replace(Ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ye=Le.Symbol,We=Le.Uint8Array,Xe=Ue.propertyIsEnumerable,Je=Me.splice,Qe=h(Object.keys,Object),Ze=ht(Le,"DataView"),Ke=ht(Le,"Map"),tr=ht(Le,"Promise"),er=ht(Le,"Set"),rr=ht(Le,"WeakMap"),nr=ht(Object,"create"),ir=xt(Ze),or=xt(Ke),ar=xt(tr),sr=xt(er),ur=xt(rr),cr=Ye?Ye.prototype:void 0,lr=cr?cr.valueOf:void 0,fr=cr?cr.toString:void 0;d.prototype.clear=g,d.prototype.delete=v,d.prototype.get=y,d.prototype.has=b,d.prototype.set=m,_.prototype.clear=w,_.prototype.delete=x,_.prototype.get=j,_.prototype.has=A,_.prototype.set=S,E.prototype.clear=k,E.prototype.delete=O,E.prototype.get=T,E.prototype.has=C,E.prototype.set=L,D.prototype.add=D.prototype.push=R,D.prototype.has=N,P.prototype.clear=q,P.prototype.delete=B,P.prototype.get=M,P.prototype.has=I,P.prototype.set=U;var hr=ot($),pr=at(),dr=H;(Ze&&dr(new Ze(new ArrayBuffer(1)))!=le||Ke&&dr(new Ke)!=te||tr&&dr(tr.resolve())!=ne||er&&dr(new er)!=oe||rr&&dr(new rr)!=ue)&&(dr=function(t){var e=He.call(t),r=e==re?t.constructor:void 0,n=r?xt(r):void 0;if(n)switch(n){case ir:return le;case or:return te;case ar:return ne;case sr:return oe;case ur:return ue}return e});var gr=At(function(t){t=Nt(t);var e=[];return xe.test(t)&&e.push(""),t.replace(je,function(t,r,n,i){e.push(n?i.replace(Se,"$1"):r||t)}),e});At.Cache=E;var vr=Array.isArray,yr=Be?u(Be):Q;r.exports=jt}).call(e,function(){return this}(),r(81)(t))},function(t,e,r){var n=r(8),i=r(67),o=n.update,a=n.evaluate,s=r(61),u=s.domEach,c=s.cloneDom,l=s.isHtml,f=Array.prototype.slice,h={flatten:r(88),bind:r(63),forEach:r(64)};e._makeDomArray=function(t,e){return null==t?[]:t.cheerio?e?c(t.get(),t.options):t.get():Array.isArray(t)?h.flatten(t.map(function(t){return this._makeDomArray(t,e)},this)):"string"==typeof t?a(t,this.options):e?c([t]):[t]};var p=function(t){return function(){var e=f.call(arguments),r=this.length-1;return u(this,function(n,o){var a,s;s="function"==typeof e[0]?e[0].call(o,n,i.html(o.children)):e,a=this._makeDomArray(s,n-1&&(c.children.splice(s,1),i===c&&e>s&&l[0]--),u.root=null,u.parent=i,u.prev&&(u.prev.next=u.next||null),u.next&&(u.next.prev=u.prev||null),u.prev=n[o-1]||f,u.next=n[o+1]||h;return f&&(f.next=n[0]),h&&(h.prev=n[n.length-1]),t.splice.apply(t,l)};e.appendTo=function(t){return t.cheerio||(t=this.constructor.call(this.constructor,t,null,this._originalRoot)),t.append(this),this},e.prependTo=function(t){return t.cheerio||(t=this.constructor.call(this.constructor,t,null,this._originalRoot)),t.prepend(this),this},e.append=p(function(t,e,r){d(e,e.length,0,t,r)}),e.prepend=p(function(t,e,r){d(e,0,0,t,r)}),e.wrap=function(t){var e="function"==typeof t&&t,r=this.length-1;return h.forEach(this,h.bind(function(n,i){var a,s,u=n.parent||n.root,c=u.children;u&&(e&&(t=e.call(n,i)),"string"!=typeof t||l(t)||(t=this.parents().last().find(t).clone()),a=this._makeDomArray(t,i0&&o(l)?e>1?n(l,e-1,o,a,s):r(s,l):a||(s[s.length]=l)}return s}function i(t){return E(t)||a(t)||!!(S&&t&&t[S])}function o(t){var e=t?t.length:0;return e?n(t,1):[]}function a(t){return u(t)&&w.call(t,"callee")&&(!A.call(t,"callee")||x.call(t)==d)}function s(t){return null!=t&&l(t.length)&&!c(t)}function u(t){return h(t)&&s(t)}function c(t){var e=f(t)?x.call(t):"";return e==g||e==v}function l(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=p}function f(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function h(t){return!!t&&"object"==typeof t}var p=9007199254740991,d="[object Arguments]",g="[object Function]",v="[object GeneratorFunction]",y="object"==typeof e&&e&&e.Object===Object&&e,b="object"==typeof self&&self&&self.Object===Object&&self,m=y||b||Function("return this")(),_=Object.prototype,w=_.hasOwnProperty,x=_.toString,j=m.Symbol,A=_.propertyIsEnumerable,S=j?j.isConcatSpreadable:void 0,E=Array.isArray;t.exports=o}).call(e,function(){return this}())},function(t,e,r){function n(t,e,r,a){if("string"==typeof e){var s=i(t);"function"==typeof r&&(r=r.call(t,a,s[e])),""===r?delete s[e]:null!=r&&(s[e]=r),t.attribs.style=o(s)}else"object"==typeof e&&Object.keys(e).forEach(function(r){n(t,r,e[r])})}function i(t,e){var r=a(t.attribs.style);return"string"==typeof e?r[e]:Array.isArray(e)?u.pick(r,e):r}function o(t){return Object.keys(t||{}).reduce(function(e,r){return e+=""+(e?" ":"")+r+": "+t[r]+";"},"")}function a(t){return t=(t||"").trim(),t?t.split(";").reduce(function(t,e){var r=e.indexOf(":");return r<1||r===e.length-1?t:(t[e.slice(0,r).trim()]=e.slice(r+1).trim(),t)},{}):{}}var s=r(61).domEach,u={pick:r(90)},c=Object.prototype.toString;e.css=function(t,e){return 2===arguments.length||"[object Object]"===c.call(t)?s(this,function(r,i){n(i,t,e,r)}):i(this[0],t)}},function(t,e){(function(e){function r(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function n(t,e){for(var r=-1,n=t?t.length:0,i=Array(n);++r0&&r(l)?e>1?o(l,e-1,r,n,a):i(a,l):n||(a[a.length]=l)}return a}function a(t,e){return t=Object(t),s(t,e,function(e,r){return r in t})}function s(t,e,r){for(var n=-1,i=e.length,o={};++n-1&&t%1==0&&t<=_}function v(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function y(t){return!!t&&"object"==typeof t}function b(t){return"symbol"==typeof t||y(t)&&C.call(t)==A}var m=1/0,_=9007199254740991,w="[object Arguments]",x="[object Function]",j="[object GeneratorFunction]",A="[object Symbol]",S="object"==typeof e&&e&&e.Object===Object&&e,E="object"==typeof self&&self&&self.Object===Object&&self,k=S||E||Function("return this")(),O=Object.prototype,T=O.hasOwnProperty,C=O.toString,L=k.Symbol,D=O.propertyIsEnumerable,R=L?L.isConcatSpreadable:void 0,N=Math.max,P=Array.isArray,q=u(function(t,e){return null==t?{}:a(t,n(o(e,1),l))});t.exports=q}).call(e,function(){return this}())},function(t,e,r){var n="input,select,textarea,keygen",i=/%20/g,o=/\r?\n/g,a={map:r(92)};e.serialize=function(){var t=this.serializeArray(),e=a.map(t,function(t){return encodeURIComponent(t.name)+"="+encodeURIComponent(t.value)});return e.join("&").replace(i,"+")},e.serializeArray=function(){var t=this.constructor;return this.map(function(){var e=this,r=t(e);return"form"===e.name?r.find(n).toArray():r.filter(n).toArray()}).filter('[name!=""]:not(:disabled):not(:submit, :button, :image, :reset, :file):matches([checked], :not(:checkbox, :radio))').map(function(e,r){var n=t(r),i=n.attr("name"),s=n.val();return null==s?null:Array.isArray(s)?a.map(s,function(t){return{name:i,value:t.replace(o,"\r\n")}}):{name:i,value:s.replace(o,"\r\n")}}).get()}},function(t,e,r){(function(t,r){function n(t,e){for(var r=-1,n=t?t.length:0,i=Array(n);++r-1}function A(t,e){var r=this.__data__,n=F(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function S(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&$t?new L:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Gt}function Lt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Dt(t){return!!t&&"object"==typeof t}function Rt(t){return"symbol"==typeof t||Dt(t)&&He.call(t)==se}function Nt(t){return null==t?"":nt(t)}function Pt(t,e,r){var n=null==t?void 0:$(t,e);return void 0===n?r:n}function qt(t,e){return null!=t&&pt(t,e,H)}function Bt(t){return kt(t)?U(t):Z(t)}function Mt(t){return t}function It(t){return gt(t)?o(wt(t)):rt(t)}var Ut=200,Ft="Expected a function",Vt="__lodash_hash_undefined__",$t=1,zt=2,Ht=1/0,Gt=9007199254740991,Yt="[object Arguments]",Wt="[object Array]",Xt="[object Boolean]",Jt="[object Date]",Qt="[object Error]",Zt="[object Function]",Kt="[object GeneratorFunction]",te="[object Map]",ee="[object Number]",re="[object Object]",ne="[object Promise]",ie="[object RegExp]",oe="[object Set]",ae="[object String]",se="[object Symbol]",ue="[object WeakMap]",ce="[object ArrayBuffer]",le="[object DataView]",fe="[object Float32Array]",he="[object Float64Array]",pe="[object Int8Array]",de="[object Int16Array]",ge="[object Int32Array]",ve="[object Uint8Array]",ye="[object Uint8ClampedArray]",be="[object Uint16Array]",me="[object Uint32Array]",_e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,we=/^\w*$/,xe=/^\./,je=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ae=/[\\^$.*+?()[\]{}|]/g,Se=/\\(\\)?/g,Ee=/^\[object .+?Constructor\]$/,ke=/^(?:0|[1-9]\d*)$/,Oe={};Oe[fe]=Oe[he]=Oe[pe]=Oe[de]=Oe[ge]=Oe[ve]=Oe[ye]=Oe[be]=Oe[me]=!0,Oe[Yt]=Oe[Wt]=Oe[ce]=Oe[Xt]=Oe[le]=Oe[Jt]=Oe[Qt]=Oe[Zt]=Oe[te]=Oe[ee]=Oe[re]=Oe[ie]=Oe[oe]=Oe[ae]=Oe[ue]=!1;var Te="object"==typeof t&&t&&t.Object===Object&&t,Ce="object"==typeof self&&self&&self.Object===Object&&self,Le=Te||Ce||Function("return this")(),De="object"==typeof e&&e&&!e.nodeType&&e,Re=De&&"object"==typeof r&&r&&!r.nodeType&&r,Ne=Re&&Re.exports===De,Pe=Ne&&Te.process,qe=function(){try{return Pe&&Pe.binding("util")}catch(t){}}(),Be=qe&&qe.isTypedArray,Me=Array.prototype,Ie=Function.prototype,Ue=Object.prototype,Fe=Le["__core-js_shared__"],Ve=function(){var t=/[^.]+$/.exec(Fe&&Fe.keys&&Fe.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),$e=Ie.toString,ze=Ue.hasOwnProperty,He=Ue.toString,Ge=RegExp("^"+$e.call(ze).replace(Ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ye=Le.Symbol,We=Le.Uint8Array,Xe=Ue.propertyIsEnumerable,Je=Me.splice,Qe=f(Object.keys,Object),Ze=ht(Le,"DataView"),Ke=ht(Le,"Map"),tr=ht(Le,"Promise"),er=ht(Le,"Set"),rr=ht(Le,"WeakMap"),nr=ht(Object,"create"),ir=xt(Ze),or=xt(Ke),ar=xt(tr),sr=xt(er),ur=xt(rr),cr=Ye?Ye.prototype:void 0,lr=cr?cr.valueOf:void 0,fr=cr?cr.toString:void 0;p.prototype.clear=d,p.prototype.delete=g,p.prototype.get=v,p.prototype.has=y,p.prototype.set=b,m.prototype.clear=_,m.prototype.delete=w,m.prototype.get=x,m.prototype.has=j,m.prototype.set=A,S.prototype.clear=E,S.prototype.delete=k,S.prototype.get=O,S.prototype.has=T,S.prototype.set=C,L.prototype.add=L.prototype.push=D,L.prototype.has=R,N.prototype.clear=P,N.prototype.delete=q,N.prototype.get=B,N.prototype.has=M,N.prototype.set=I;var hr=ot(V),pr=at(),dr=z;(Ze&&dr(new Ze(new ArrayBuffer(1)))!=le||Ke&&dr(new Ke)!=te||tr&&dr(tr.resolve())!=ne||er&&dr(new er)!=oe||rr&&dr(new rr)!=ue)&&(dr=function(t){var e=He.call(t),r=e==re?t.constructor:void 0,n=r?xt(r):void 0;if(n)switch(n){case ir:return le;case or:return te;case ar:return ne;case sr:return oe;case ur:return ue}return e});var gr=At(function(t){t=Nt(t);var e=[];return xe.test(t)&&e.push(""),t.replace(je,function(t,r,n,i){e.push(n?i.replace(Se,"$1"):r||t)}),e});At.Cache=S;var vr=Array.isArray,yr=Be?s(Be):J;r.exports=jt}).call(e,function(){return this}(),r(81)(t))},function(t,e){t.exports={name:"cheerio",version:"0.22.0",description:"Tiny, fast, and elegant implementation of core jQuery designed specifically for the server",author:"Matt Mueller (mat.io)",license:"MIT",keywords:["htmlparser","jquery","selector","scraper","parser","html"],repository:{type:"git",url:"git://github.com/cheeriojs/cheerio.git"},main:"./index.js",files:["index.js","lib"],engines:{node:">= 0.6"},dependencies:{"css-select":"~1.2.0","dom-serializer":"~0.1.0",entities:"~1.1.1",htmlparser2:"^3.9.1","lodash.assignin":"^4.0.9","lodash.bind":"^4.1.4","lodash.defaults":"^4.0.1","lodash.filter":"^4.4.0","lodash.flatten":"^4.2.0","lodash.foreach":"^4.3.0","lodash.map":"^4.4.0","lodash.merge":"^4.4.0","lodash.pick":"^4.2.1","lodash.reduce":"^4.4.0","lodash.reject":"^4.4.0","lodash.some":"^4.4.0"},devDependencies:{benchmark:"^2.1.0",coveralls:"^2.11.9","expect.js":"~0.3.1",istanbul:"^0.4.3",jsdom:"^9.2.1",jquery:"^3.0.0",jshint:"^2.9.2",mocha:"^2.5.3",xyz:"~0.5.0"},scripts:{test:"make test"}}},function(t,e,r){"use strict";var n=r(95),i={}.hasOwnProperty,o=r(100),a=r(101),s=r(103);e.Selector=a,e.Property=s,/** + * Returns an array of the selectors. + * + * @license Sizzle CSS Selector Engine - MIT + * @param {String} selectorText from mensch + * @api public + */ +e.extract=function(t){for(var e=0,r=[],n="",i=0,o=t.length;i=0;u--)(e.fontFaces&&"font-face"===i[u].type||e.mediaQueries&&"media"===i[u].type)&&a.push(n.stringify({stylesheet:{rules:[i[u]]}},{comments:!1,indentation:" "})),s=i[u].position.start;return 0!==a.length&&o.EOL+a.join(o.EOL)+o.EOL},e.normalizeLineEndings=function(t){return t.replace(/\r\n/g,"\n").replace(/\n/g,"\r\n")},e.compareFunc=function(t,e){for(var r=Math.min(t.length,e.length),n=0;ne[n]?1:-1;return t.length-e.length},e.compare=function(t,r){return 1==e.compareFunc(t,r)?t:r},e.extend=function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);return t},e.getDefaultOptions=function(t){var r=e.extend({extraCss:"",insertPreservedExtraCss:!0,applyStyleTags:!0,removeStyleTags:!0,preserveMediaQueries:!0,preserveFontFaces:!0,applyWidthAttributes:!0,applyHeightAttributes:!0,applyAttributesTableElements:!0,url:""},t);return r.webResources=r.webResources||{},r}},function(t,e,r){t.exports={lex:r(96),parse:r(98),stringify:r(99)}},function(t,e,r){function n(t){function e(){return p(),t[_]}function r(t){return t?A[A.length-1-t]:j}function n(e){var r=_+1;return e===t.slice(r,r+e.length)}function s(e){var r=t.slice(_).indexOf(e);return r>0&&r}function u(t){return t===c(1)}function c(e){return t[_+(e||1)]}function l(){var t=A.pop();return j=A[A.length-1],t}function f(t){return j=t,A.push(j),A.length}function h(t){var e=j;return A[A.length-1]=j=t,e}function p(e){if(1==(e||1))"\n"==t[_]?(x++,m=1):m++,_++;else{var r=t.slice(_,_+e).split("\n");r.length>1&&(x+=r.length-1,m=1),m+=r[r.length-1].length,_+=e}}function d(){S.end={line:x,col:m},i&&a("addToken:",JSON.stringify(S,null,2)),E.push(S),b="",S={}}function g(t){S={type:t,start:{line:x,col:m}}}var v,y,b="",m=0,_=-1,w=0,x=1,j="before-selector",A=[j],S={},E=[],k=["media","keyframes",{name:"-webkit-keyframes",type:"keyframes",prefix:"-webkit-"},{name:"-moz-keyframes",type:"keyframes",prefix:"-moz-"},{name:"-ms-keyframes",type:"keyframes",prefix:"-ms-"},{name:"-o-keyframes",type:"keyframes",prefix:"-o-"},"font-face",{name:"import",state:"before-at-value"},{name:"charset",state:"before-at-value"},"supports","viewport",{name:"namespace",state:"before-at-value"},"document",{name:"-moz-document",type:"document",prefix:"-moz-"},"page"];for(o&&(v=Date.now());y=e();)switch(i&&a(y,r()),y){case" ":switch(r()){case"selector":case"value":case"value-paren":case"at-group":case"at-value":case"comment":case"double-string":case"single-string":b+=y}break;case"\n":case"\t":case"\r":case"\f":switch(r()){case"value":case"value-paren":case"at-group":case"comment":case"single-string":case"double-string":case"selector":b+=y;break;case"at-value":"\n"===y&&(S.value=b.trim(),d(),l())}break;case":":switch(r()){case"name":S.name=b.trim(),b="",h("before-value");break;case"before-selector":b+=y,g("selector"),f("selector");break;case"before-value":h("value"),b+=y;break;default:b+=y}break;case";":switch(r()){case"name":case"before-value":case"value":b.trim().length>0&&(S.value=b.trim(),d()),h("before-name");break;case"value-paren":b+=y;break;case"at-value":S.value=b.trim(),d(),l();break;case"before-name":break;default:b+=y}break;case"{":switch(r()){case"selector":if("\\"===c(-1)){b+=y;break}S.text=b.trim(),d(),h("before-name"),w+=1;break;case"at-group":switch(S.name=b.trim(),S.type){case"font-face":case"viewport":case"page":f("before-name");break;default:f("before-selector")}d(),w+=1;break;case"name":case"at-rule":S.name=b.trim(),d(),f("before-name"),w+=1;break;case"comment":case"double-string":case"single-string":b+=y;break;case"before-value":h("value"),b+=y}break;case"}":switch(r()){case"before-name":case"name":case"before-value":case"value":b&&(S.value=b.trim()),S.name&&S.value&&d(),g("end"),d(),l(),"at-group"===r()&&(g("at-group-end"),d(),l()),w>0&&(w-=1);break;case"at-group":case"before-selector":case"selector":if("\\"===c(-1)){b+=y;break}w>0&&"at-group"===r(1)&&(g("at-group-end"),d()),w>1&&l(),w>0&&(w-=1);break;case"double-string":case"single-string":case"comment":b+=y}break;case'"':case"'":switch(r()){case"double-string":'"'===y&&"\\"!==c(-1)&&l();break;case"single-string":"'"===y&&"\\"!==c(-1)&&l();break;case"before-at-value":h("at-value"),f('"'===y?"double-string":"single-string");break;case"before-value":h("value"),f('"'===y?"double-string":"single-string");break;case"comment":break;default:"\\"!==c(-1)&&f('"'===y?"double-string":"single-string")}b+=y;break;case"/":switch(r()){case"comment":case"double-string":case"single-string":b+=y;break;case"before-value":case"selector":case"name":case"value":if(u("*")){var O=s("*/");O&&p(O+1)}else"before-value"==r()&&h("value"),b+=y;break;default:u("*")?(g("comment"),f("comment"),p()):b+=y}break;case"*":switch(r()){case"comment":u("/")?(S.text=b,p(),d(),l()):b+=y;break;case"before-selector":b+=y,g("selector"),f("selector");break;case"before-value":h("value"),b+=y;break;default:b+=y}break;case"@":switch(r()){case"comment":case"double-string":case"single-string":b+=y;break;case"before-value":h("value"),b+=y;break;default:for(var T,C,L=!1,D=0,R=k.length;!L&&D+)\\s*|(\\s+)|(+|\\*)|\\#(+)|\\.(+)|\\[\\s*(+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)".replace(//,"["+i(">+~`!@$%^&={}\\;/g,"(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])").replace(//g,"(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])")),s=function(t){this.combinator=t||" ",this.tag="*"};s.prototype.toString=function(){if(!this.raw){var t,e,r="";if(r+=this.tag||"*",this.id&&(r+="#"+this.id),this.classes&&(r+="."+this.classList.join(".")),this.attributes)for(t=0;e=this.attributes[t++];)r+="["+e.name+(e.operator?e.operator+'"'+e.value+'"':"")+"]";if(this.pseudos)for(t=0;e=this.pseudos[t++];)r+=":"+e.name,e.value&&(r+="("+e.value+")");this.raw=r}return this.raw};var u=function(){this.length=0};u.prototype.toString=function(){if(!this.raw){for(var t,e="",r=0;t=this[r++];)1!==r&&(e+=" ")," "!==t.combinator&&(e+=t.combinator+" "),e+=t;this.raw=e}return this.raw};var c=function(t,e,r,n,a,c,l,f,h,p,d,g,v,y,b,m){var _,w;if((e||!this.length)&&(_=this[this.length++]=new u,e))return"";if(_||(_=this[this.length-1]),(r||n||!_.length)&&(w=_[_.length++]=new s(r)),w||(w=_[_.length-1]),a)w.tag=o(a);else if(c)w.id=o(c);else if(l){var x=o(l),j=w.classes||(w.classes={});if(!j[x]){j[x]=i(l);var A=w.classList||(w.classList=[]);A.push(x),A.sort()}}else v?(m=m||b,(w.pseudos||(w.pseudos=[])).push({type:1==g.length?"class":"element",name:o(v),escapedName:i(v),value:m?o(m):null,escapedValue:m?i(m):null})):f&&(d=d?i(d):null,(w.attributes||(w.attributes=[])).push({operator:h,name:o(f),escapedName:i(f),value:d?o(d):null,escapedValue:d?i(d):null}));return""},l=function(t){this.length=0;for(var e,r=this,n=t;t;){if(e=t.replace(a,function(){return c.apply(r,arguments)}),e===t)throw new Error(n+" is an invalid expression");t=e}};l.prototype.toString=function(){if(!this.raw){for(var t,e=[],r=0;t=this[r++];)e.push(t);this.raw=e.join(", ")}return this.raw};var f={},h=function(t){return null==t?null:(t=(""+t).replace(/^\s+|\s+$/g,""),f[t]||(f[t]=new l(t)))};t.exports=h},function(t,e,r){"use strict";function n(t,e,r,n,i){this.prop=t,this.value=e,this.selector=r,this.priority=n||0,this.additionalPriority=i||[]}t.exports=e=n;var i=r(94);n.prototype.compareFunc=function(t){var e=[];e.push.apply(e,this.selector.specificity()),e.push.apply(e,this.additionalPriority),e[0]+=this.priority;var r=[];return r.push.apply(r,t.selector.specificity()),r.push.apply(r,t.additionalPriority),r[0]+=t.priority,i.compareFunc(e,r)},n.prototype.compare=function(t){var e=this.compareFunc(t);return 1===e?this:t},n.prototype.toString=function(){return this.prop+": "+this.value.replace(/['"]+/g,"")+";"}},function(t,e,r){"use strict";var n=r(94);t.exports=function(t){function e(e,o,s){function u(r){for(var o=r[0],u=r[1],c=new n.Selector(o),l=c.parsed(),f=i(l),h=0;h=0)return}}if(f){var b=l[l.length-1],m=b.pseudos;b.pseudos=a(b.pseudos),o=l.toString(),b.pseudos=m}var _;try{_=e(o)}catch(t){return}_.each(function(){function r(e,r){for(var o=0,a=e.length;o=0)){if(f){var o="pseudo"+f,a=i[o];a||(a=i[o]=e("").get(0),a.pseudoElementType=f,a.pseudoElementParent=i,i[o]=a),i=a}if(!i.styleProps){if(i.styleProps={},e(i).attr(g)){var l="* { "+e(i).attr(g)+" } ";r(n.parseCSS(l)[0][1],new n.Selector("")}}}function r(t){if("none"===t||"normal"===t)return"";var e=t.match(/^\s*url\s*\(\s*(.*?)\s*\)\s*$/i);if(e){var r=e[1].replace(/^['"]|['"]$/g,"");return{img:r}}return t=t.slice(1,t.length-1),t=t.replace(/\\/g,"")}function i(t){if(0!==t.length){var e=t[t.length-1].pseudos;if(e)for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},function t(e,r){var n="##";e.each(function(e){if("image"==e.get("type")){var i=e.get("src");r?i==n&&e.set("src",e.get("src_bkp")):i!=n&&(e.set("src_bkp",e.get("src")),e.set("src",n))}t(e.get("components"),r)})});return{run:function(e){var r=e.getComponents();t(r)},stop:function(e){var r=e.getComponents();t(r,1)}}}}.call(e,r,e,t),!(void 0!==n&&(t.exports=n))},function(t,e,r){var n;n=function(){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e="",r="",n=t.editor,i=t.tableStyle||{},o=t.cellStyle||{},a=n.BlockManager;for(var s in i)e+=s+": "+i[s]+"; ";for(var u in o)r+=u+": "+o[u]+"; ";a.getAll().reset(),a.add("sect100",{label:"1 Section",attributes:{class:"gjs-fonts gjs-f-b1"},content:'\n \n \n \n
    '}),a.add("sect50",{label:"1/2 Section",attributes:{class:"gjs-fonts gjs-f-b2"},content:'\n \n \n \n \n
    '}),a.add("sect30",{label:"1/3 Section",attributes:{class:"gjs-fonts gjs-f-b3"},content:'\n \n \n \n \n \n
    '}),a.add("sect37",{label:"3/7 Section",attributes:{class:"gjs-fonts gjs-f-b37"},content:'\n \n \n \n \n
    '}),a.add("button",{label:"Button",content:'Button',attributes:{class:"gjs-fonts gjs-f-button"}}),a.add("divider",{label:"Divider",content:'\n \n \n \n
    \n ',attributes:{class:"gjs-fonts gjs-f-divider"}}),a.add("text",{label:"Text",attributes:{class:"gjs-fonts gjs-f-text"},content:{type:"text",content:"Insert your text here",style:{padding:"10px"},activeOnRender:1}}),a.add("text-sect",{label:"Text section",content:'

    Insert title here

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua

    ',attributes:{class:"gjs-fonts gjs-f-h1p"}}),a.add("image",{label:"Image",attributes:{class:"gjs-fonts gjs-f-image"},content:{type:"image",style:{color:"black"},activeOnRender:1}}),a.add("quote",{label:"Quote",content:'
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ',attributes:{class:"fa fa-quote-right"}});var c='\n \n \n \n
    \n Image\n\n \n \n \n \n
    \n

    Title here\n

    \n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt\n

    \n
    \n\n
    ';a.add("grid-items",{label:"Grid items",content:'\n \n \n \n \n
    '+c+''+c+"
    ",attributes:{class:"fa fa-th"}});var l='\n \n \n \n
    \n \n \n \n \n \n
    \n Image\n \n

    Title here\n

    \n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt\n

    \n
    \n
    ';a.add("list-items",{label:"List items",content:l+l,attributes:{class:"fa fa-th-list"}})}}.call(e,r,e,t),!(void 0!==n&&(t.exports=n))},function(t,e,r){function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var i;i=function(){var t="title",e="data-tooltip-pos",r=function(t){t.each(function(t){var r=t.get("attributes");r[e]="bottom",t.set("attributes",r)})};return function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=i.editor,a=o.Panels,s=a.getPanel("options");if(a.addButton("options",{id:i.cmdOpenImport,className:"fa fa-download",command:i.cmdOpenImport,attributes:n({},t,i.modalTitleImport)}),a.addButton("options",{id:i.cmdTglImages,className:"fa fa-warning",command:i.cmdTglImages,attributes:n({},t,"Toggle images")}),s){var u=s.get("buttons");u.each(function(t){var r=t.get("attributes");r[e]="bottom",t.set("attributes",r)});var c=a.addButton("options","preview");c&&u.remove(c)}var l=a.getPanel("commands");if(l){var f,h=l.get("buttons");h.reset(),h.add({id:"move-comp",command:"move-comp",className:"fa fa-arrows",attributes:(f={},n(f,t,"Move"),n(f,e,"bottom"),f),stopDefaultCommand:1}),h.add([{id:"undo",className:"fa fa-undo",command:"undo",attributes:n({},t,"Undo")},{id:"redo",className:"fa fa-repeat",command:"redo",attributes:n({},t,"Redo")}]),r(h)}o.getConfig().showDevices=0;var p=a.addPanel({id:"devices-c"}),d=p.get("buttons");p.get("buttons").add([{id:"deviceDesktop",command:"set-device-desktop",className:"fa fa-desktop",attributes:n({},t,"Desktop"),active:1},{id:"deviceTablet",command:"set-device-tablet",className:"fa fa-tablet",attributes:n({},t,"Tablet")},{id:"deviceMobile",command:"set-device-mobile",className:"fa fa-mobile",attributes:n({},t,"Mobile")}]),r(d)}}.call(e,r,e,t),!(void 0!==i&&(t.exports=i))},function(t,e,r){var n;n=function(){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.editor,r=e.StyleManager.getSectors();e.on("load",function(){r.reset(),r.add([{name:"Dimension",open:!1,buildProps:["width","height","max-width","min-height","margin","padding"],properties:[{property:"margin",properties:[{name:"Top",property:"margin-top"},{name:"Left",property:"margin-left"},{name:"Right",property:"margin-right"},{name:"Bottom",property:"margin-bottom"}]},{property:"padding",properties:[{name:"Top",property:"padding-top"},{name:"Right",property:"padding-right"},{name:"Bottom",property:"padding-bottom"},{name:"Left",property:"padding-left"}]}]},{name:"Typography",open:!1,buildProps:["font-family","font-size","font-weight","letter-spacing","color","line-height","text-align","text-decoration","font-style","vertical-align","text-shadow"],properties:[{name:"Font",property:"font-family"},{name:"Weight",property:"font-weight"},{name:"Font color",property:"color"},{property:"text-align",type:"radio",defaults:"left",list:[{value:"left",name:"Left",className:"fa fa-align-left"},{value:"center",name:"Center",className:"fa fa-align-center"},{value:"right",name:"Right",className:"fa fa-align-right"},{value:"justify",name:"Justify",className:"fa fa-align-justify"}]},{property:"text-decoration",type:"radio",defaults:"none",list:[{value:"none",name:"None",className:"fa fa-times"},{value:"underline",name:"underline",className:"fa fa-underline"},{value:"line-through",name:"Line-through",className:"fa fa-strikethrough"}]},{property:"font-style",type:"radio",defaults:"normal",list:[{value:"normal",name:"Normal",className:"fa fa-font"},{value:"italic",name:"Italic",className:"fa fa-italic"}]},{property:"vertical-align",type:"select",defaults:"baseline",list:[{value:"baseline"},{value:"top"},{value:"middle"},{value:"bottom"}]},{property:"text-shadow",properties:[{name:"X position",property:"text-shadow-h"},{name:"Y position",property:"text-shadow-v"},{name:"Blur",property:"text-shadow-blur"},{name:"Color",property:"text-shadow-color"}]}]},{name:"Decorations",open:!1,buildProps:["background-color","border-collapse","border-radius","border","background"],properties:[{property:"background-color",name:"Background"},{property:"border-radius",properties:[{name:"Top",property:"border-top-left-radius"},{name:"Right",property:"border-top-right-radius"},{name:"Bottom",property:"border-bottom-left-radius"},{name:"Left",property:"border-bottom-right-radius"}]},{property:"border-collapse",type:"radio",defaults:"separate",list:[{value:"separate",name:"No"},{value:"collapse",name:"Yes"}]},{property:"border",properties:[{name:"Width",property:"border-width",defaults:"0"},{name:"Style",property:"border-style"},{name:"Color",property:"border-color"}]},{property:"background",properties:[{name:"Image",property:"background-image"},{name:"Repeat",property:"background-repeat"},{name:"Position",property:"background-position"},{name:"Attachment",property:"background-attachment"},{name:"Size",property:"background-size"}]}]}])})}}.call(e,r,e,t),!(void 0!==n&&(t.exports=n))}])}); \ No newline at end of file diff --git a/public/grapejs/dist/js/toastr.min.js b/public/grapejs/dist/js/toastr.min.js new file mode 100644 index 00000000..3e3f46f2 --- /dev/null +++ b/public/grapejs/dist/js/toastr.min.js @@ -0,0 +1,7 @@ +/* + * Note that this is toastr v2.1.3, the "latest" version in url has no more maintenance, + * please go to https://cdnjs.com/libraries/toastr.js and pick a certain version you want to use, + * make sure you copy the url from the website since the url may change between versions. + * */ +!function(e){e(["jquery"],function(e){return function(){function t(e,t,n){return g({type:O.error,iconClass:m().iconClasses.error,message:e,optionsOverride:n,title:t})}function n(t,n){return t||(t=m()),v=e("#"+t.containerId),v.length?v:(n&&(v=d(t)),v)}function o(e,t,n){return g({type:O.info,iconClass:m().iconClasses.info,message:e,optionsOverride:n,title:t})}function s(e){C=e}function i(e,t,n){return g({type:O.success,iconClass:m().iconClasses.success,message:e,optionsOverride:n,title:t})}function a(e,t,n){return g({type:O.warning,iconClass:m().iconClasses.warning,message:e,optionsOverride:n,title:t})}function r(e,t){var o=m();v||n(o),u(e,o,t)||l(o)}function c(t){var o=m();return v||n(o),t&&0===e(":focus",t).length?void h(t):void(v.children().length&&v.remove())}function l(t){for(var n=v.children(),o=n.length-1;o>=0;o--)u(e(n[o]),t)}function u(t,n,o){var s=!(!o||!o.force)&&o.force;return!(!t||!s&&0!==e(":focus",t).length)&&(t[n.hideMethod]({duration:n.hideDuration,easing:n.hideEasing,complete:function(){h(t)}}),!0)}function d(t){return v=e("
    ").attr("id",t.containerId).addClass(t.positionClass),v.appendTo(e(t.target)),v}function p(){return{tapToDismiss:!0,toastClass:"toast",containerId:"toast-container",debug:!1,showMethod:"fadeIn",showDuration:300,showEasing:"swing",onShown:void 0,hideMethod:"fadeOut",hideDuration:1e3,hideEasing:"swing",onHidden:void 0,closeMethod:!1,closeDuration:!1,closeEasing:!1,closeOnHover:!0,extendedTimeOut:1e3,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},iconClass:"toast-info",positionClass:"toast-top-right",timeOut:5e3,titleClass:"toast-title",messageClass:"toast-message",escapeHtml:!1,target:"body",closeHtml:'',closeClass:"toast-close-button",newestOnTop:!0,preventDuplicates:!1,progressBar:!1,progressClass:"toast-progress",rtl:!1}}function f(e){C&&C(e)}function g(t){function o(e){return null==e&&(e=""),e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function s(){c(),u(),d(),p(),g(),C(),l(),i()}function i(){var e="";switch(t.iconClass){case"toast-success":case"toast-info":e="polite";break;default:e="assertive"}I.attr("aria-live",e)}function a(){E.closeOnHover&&I.hover(H,D),!E.onclick&&E.tapToDismiss&&I.click(b),E.closeButton&&j&&j.click(function(e){e.stopPropagation?e.stopPropagation():void 0!==e.cancelBubble&&e.cancelBubble!==!0&&(e.cancelBubble=!0),E.onCloseClick&&E.onCloseClick(e),b(!0)}),E.onclick&&I.click(function(e){E.onclick(e),b()})}function r(){I.hide(),I[E.showMethod]({duration:E.showDuration,easing:E.showEasing,complete:E.onShown}),E.timeOut>0&&(k=setTimeout(b,E.timeOut),F.maxHideTime=parseFloat(E.timeOut),F.hideEta=(new Date).getTime()+F.maxHideTime,E.progressBar&&(F.intervalId=setInterval(x,10)))}function c(){t.iconClass&&I.addClass(E.toastClass).addClass(y)}function l(){E.newestOnTop?v.prepend(I):v.append(I)}function u(){if(t.title){var e=t.title;E.escapeHtml&&(e=o(t.title)),M.append(e).addClass(E.titleClass),I.append(M)}}function d(){if(t.message){var e=t.message;E.escapeHtml&&(e=o(t.message)),B.append(e).addClass(E.messageClass),I.append(B)}}function p(){E.closeButton&&(j.addClass(E.closeClass).attr("role","button"),I.prepend(j))}function g(){E.progressBar&&(q.addClass(E.progressClass),I.prepend(q))}function C(){E.rtl&&I.addClass("rtl")}function O(e,t){if(e.preventDuplicates){if(t.message===w)return!0;w=t.message}return!1}function b(t){var n=t&&E.closeMethod!==!1?E.closeMethod:E.hideMethod,o=t&&E.closeDuration!==!1?E.closeDuration:E.hideDuration,s=t&&E.closeEasing!==!1?E.closeEasing:E.hideEasing;if(!e(":focus",I).length||t)return clearTimeout(F.intervalId),I[n]({duration:o,easing:s,complete:function(){h(I),clearTimeout(k),E.onHidden&&"hidden"!==P.state&&E.onHidden(),P.state="hidden",P.endTime=new Date,f(P)}})}function D(){(E.timeOut>0||E.extendedTimeOut>0)&&(k=setTimeout(b,E.extendedTimeOut),F.maxHideTime=parseFloat(E.extendedTimeOut),F.hideEta=(new Date).getTime()+F.maxHideTime)}function H(){clearTimeout(k),F.hideEta=0,I.stop(!0,!0)[E.showMethod]({duration:E.showDuration,easing:E.showEasing})}function x(){var e=(F.hideEta-(new Date).getTime())/F.maxHideTime*100;q.width(e+"%")}var E=m(),y=t.iconClass||E.iconClass;if("undefined"!=typeof t.optionsOverride&&(E=e.extend(E,t.optionsOverride),y=t.optionsOverride.iconClass||y),!O(E,t)){T++,v=n(E,!0);var k=null,I=e("
    "),M=e("
    "),B=e("
    "),q=e("
    "),j=e(E.closeHtml),F={intervalId:null,hideEta:null,maxHideTime:null},P={toastId:T,state:"visible",startTime:new Date,options:E,map:t};return s(),r(),a(),f(P),E.debug&&console&&console.log(P),I}}function m(){return e.extend({},p(),b.options)}function h(e){v||(v=n()),e.is(":visible")||(e.remove(),e=null,0===v.children().length&&(v.remove(),w=void 0))}var v,C,w,T=0,O={error:"error",info:"info",success:"success",warning:"warning"},b={clear:r,remove:c,error:t,getContainer:n,info:o,options:{},subscribe:s,success:i,version:"2.1.3",warning:a};return b}()})}("function"==typeof define&&define.amd?define:function(e,t){"undefined"!=typeof module&&module.exports?module.exports=t(require("jquery")):window.toastr=t(window.jQuery)}); +//# sourceMappingURL=toastr.js.map \ No newline at end of file diff --git a/public/grapejs/templates/demo/index.html b/public/grapejs/templates/demo/index.html new file mode 100644 index 00000000..1ee03e3f --- /dev/null +++ b/public/grapejs/templates/demo/index.html @@ -0,0 +1,416 @@ + + + + +
    + + + + +
    + + + + +
    + View in browser + +
    + + + + + +
    + GrapesJS. + +
    GrapesJS Newsletter Builder +
    +
    +
    + + + + +
    + Big image here + + + + +
    +

    Build your newsletters faster than ever +
    +

    +

    Import, build, test and export responsive newsletter templates faster than ever using the GrapesJS Newsletter Builder. +

    + + + + +
    +
    +
    + + + + +
    + + + + + +
    + Image1 + +

    Built-in Blocks +

    +

    Drag and drop built-in blocks from the right panel and style them in a matter of seconds +

    +
    +
    + + + + +
    + + + + + +
    + Image2 + +

    Toggle images +

    +

    Build a good looking newsletter even without images enabled by the email clients +

    +
    +
    + + + + + +
    + + + + +
    + Image1 + + + + +
    +

    Test it +

    +

    You can send email tests directly from the editor and check how are looking on your email clients +

    +
    +
    +
    + + + + +
    + Image2 + + + + +
    +

    Responsive +

    +

    Using the device manager you'll always send a fully responsive contents +

    +
    +
    +
    + + + + + +
    +
    + + + diff --git a/public/grapejs/uploads/README.md b/public/grapejs/uploads/README.md new file mode 100644 index 00000000..d4210539 --- /dev/null +++ b/public/grapejs/uploads/README.md @@ -0,0 +1 @@ +# default upload folder From c36071524da81694c068cf548f0ece78c7566d23 Mon Sep 17 00:00:00 2001 From: witzig Date: Thu, 9 Mar 2017 11:55:09 +0100 Subject: [PATCH 174/483] Cleanup GrapeJS/Mosaico Templates --- .../grapejs/templates/demo/images/150x150.png | Bin 0 -> 4535 bytes .../grapejs/templates/demo/images/250x150.png | Bin 0 -> 5835 bytes .../grapejs/templates/demo/images/550x250.png | Bin 0 -> 7266 bytes .../templates/demo/images/grapesjs-logo.png | Bin 0 -> 5703 bytes public/grapejs/templates/demo/index.html | 12 +- .../{template-versafix-1.html => index.html} | 268 +++++++++--------- 6 files changed, 140 insertions(+), 140 deletions(-) create mode 100644 public/grapejs/templates/demo/images/150x150.png create mode 100644 public/grapejs/templates/demo/images/250x150.png create mode 100644 public/grapejs/templates/demo/images/550x250.png create mode 100644 public/grapejs/templates/demo/images/grapesjs-logo.png rename public/mosaico/templates/versafix-1/{template-versafix-1.html => index.html} (91%) diff --git a/public/grapejs/templates/demo/images/150x150.png b/public/grapejs/templates/demo/images/150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0219c82ac8433fbf683ebb71b2ed18fe309690 GIT binary patch literal 4535 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 Sue&ETKuKO*u14m4*na?%Bk+U( literal 0 HcmV?d00001 diff --git a/public/grapejs/templates/demo/images/550x250.png b/public/grapejs/templates/demo/images/550x250.png new file mode 100644 index 0000000000000000000000000000000000000000..17b053504411f2d905014d96eb9ce7c71711bf71 GIT binary patch literal 7266 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 z zQKFzyl;K%kJET05Rkq8?-&os661$68x@HNsl40TTd0EdnD&4{p{1yxz)eC4{vP?KG+JNQT?!X8KmES|0|0G6qIKf8W7Yrw002ovPDHLkV1gQI=`jER literal 0 HcmV?d00001 diff --git a/public/grapejs/templates/demo/index.html b/public/grapejs/templates/demo/index.html index 1ee03e3f..ec736412 100644 --- a/public/grapejs/templates/demo/index.html +++ b/public/grapejs/templates/demo/index.html @@ -15,7 +15,7 @@
    - GrapesJS. + GrapesJS.
    GrapesJS Newsletter Builder @@ -27,7 +27,7 @@
    - Big image here + Big image here
    @@ -56,7 +56,7 @@
    - Image1 + Image1

    Built-in Blocks @@ -75,7 +75,7 @@
    - Image2 + Image2

    Toggle images @@ -94,7 +94,7 @@
    - Image1 + Image1
    @@ -113,7 +113,7 @@
    - Image2 + Image2 ",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t("",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,h,l,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[a],l=!1,e[u]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(e[u]-h)&&(n=Math.abs(e[u]-h),o=this.items[s],this.direction=l?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.leftthis.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter; +this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.spinner",{version:"1.12.1",defaultElement:"",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("").parent().append("")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("
    ").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("
    ").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("
    ").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("
    ").attr("role","tooltip"),s=t("
    ").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip}); \ No newline at end of file diff --git a/public/subscription/footer-scripts.js b/public/subscription/footer-scripts.js new file mode 100644 index 00000000..af5e3137 --- /dev/null +++ b/public/subscription/footer-scripts.js @@ -0,0 +1,48 @@ +/* eslint-env browser */ +/* eslint no-invalid-this: 0, no-var: 0, prefer-arrow-callback: 0 */ +/* globals $: false, ace: false */ + +if (typeof moment !== 'undefined' && moment.tz) { + (function () { + var tz = moment.tz.guess(); + if (tz) { + document.querySelectorAll('.tz-detect').forEach(function(el) { + el.value = tz; + }); + } + })(); +} + +document.querySelectorAll('a[href="#submit"]').forEach(function(a) { + a.onclick = function() { + var form = document.getElementById('main-form'); + form && form.submit(); + return false; + }; +}); + +// Fixes MJML Button until they do ... +// https://github.com/mjmlio/mjml/issues/359 + +if (window.btnBgColor) { + (function() { + var s = document.createElement('style'); + var c = document.createTextNode( + '.td-btn:hover { background-color: ' + window.btnBgColorHover + '; }' + + '.td-btn { cursor: pointer !important; }' + + '.a-btn { background-color: transparent !important; }' + ); + s.appendChild(c); + document.getElementsByTagName('head')[0].appendChild(s); + document.querySelectorAll('a').forEach(function(a) { + if (a.parentNode.getAttribute('bgcolor') === window.btnBgColor) { + a.target = '_self'; + a.className += 'a-btn'; + a.parentNode.className += 'td-btn'; + a.parentNode.onclick = function() { + a.click(); + }; + } + }); + })(); +} diff --git a/public/subscription/form-input-style.css b/public/subscription/form-input-style.css new file mode 100644 index 00000000..4dc44b73 --- /dev/null +++ b/public/subscription/form-input-style.css @@ -0,0 +1,215 @@ +/* --- Colors ---------- + +Input Border: #DCE4EC +Input Group: #FAFAFA +Muted: #999999 +Anchor: #1F68D5 +Alerts: ... + +*/ + +/* --- General -------- */ + +form { + margin: .5em 0 1em; +} + +.form-group { + margin-bottom: 1.2em; + box-sizing: border-box; +} + +input, +select, +textarea { + margin-bottom: 0; +} + +label { + display: block; + font-size: 1em; + font-weight: 700; + margin-bottom: .3em; +} + +.label-checkbox, +.label-radio { + font-weight: normal; + font-size: .9em; +} + +.label-inline { + display: inline-block; + font-weight: normal; + margin-left: .3em; +} + + +/* --- Inputs ------------- */ + +input[type='email'], +input[type='number'], +input[type='password'], +input[type='search'], +input[type='tel'], +input[type='text'], +input[type='url'], +textarea, +select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: transparent; + border: 2px solid #DCE4EC; + border-radius: 4px; + box-shadow: none; + box-sizing: border-box; + height: 2.8em; + padding: .3em .7em; + width: 100%; + font-size: 1.2em; + font-style: inherit; +} + +input[type='email']:focus, +input[type='number']:focus, +input[type='password']:focus, +input[type='search']:focus, +input[type='tel']:focus, +input[type='text']:focus, +input[type='url']:focus, +textarea:focus, +select:focus { + border-color: #2D3E4F; + outline: 0; +} + +input[readonly] { + color: #999999; +} +input[readonly]:focus { + border-color: #DCE4EC; +} + +input[type="checkbox"], +input[type="radio"] { + margin-bottom: 0; + margin-right: .2em; +} + +input[type='checkbox'], +input[type='radio'] { + display: inline; +} + +select { + background: url('data:image/svg+xml;utf8,') center right no-repeat; + padding-right: 2em; +} + +select:focus { + background-image: url('data:image/svg+xml;utf8,'); +} + +textarea { + min-height: 8em; + max-width: 100%; +} + +/* --- Input Group --------- */ + +.input-group { + position: relative; +} + +.input-group-addon { + position: absolute; + right: 0; + top: 0; + background: #FAFAFA; + height: 100%; + padding: 0 .75em; + border: 2px solid #DCE4EC; + box-sizing: border-box; + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} + +.input-group-addon > * { + line-height: 2.8em; +} + + +/* --- Alerts ------------- */ + +.alert { + margin: 1.25em auto 0; + padding: 1em; + border-radius: 4px; + font-family: inherit; + font-size: 1em; + box-sizing: border-box; +} + +.alert-dismissible .close { + display: none; +} + +.alert-success { color: #397740; background-color: #DEF0D9; border-color: #CFEAC8; } +.alert-info { color: #33708E; background-color: #D9EDF6; border-color: #BCDFF0; } +.alert-warning { color: #8A6D3F; background-color: #FCF8E4; border-color: #F9F2CE; } +.alert-danger { color: #AA4144; background-color: #F2DEDE; border-color: #EBCCCC; } + + +/* --- GPG Key ------------- */ + +.form-group.gpg > label { + display: inline-block; +} + +.btn-download-pubkey, +.btn-download-pubkey:focus, +.btn-download-pubkey:active { + background: none; + border: none; + display: block; + font: inherit; + font-size: .8em; + margin: .3em 0 0; + padding: 0; + outline: none; + outline-offset: 0; + color: #1F68D5; + cursor: pointer; + text-transform: none; + height: auto; + float: right; +} + +.btn-download-pubkey:hover { + text-decoration: underline; +} + +.gpg-text { + font-family: monospace; + font-size: .8em; +} + + +/* --- Other ------------- */ + +.help-block { + display: block; + font-size: .9em; + line-height: 1; + color: #999999; +} + +form a { + color: #1F68D5; + text-decoration: none; +} + +form a:hover { + text-decoration: underline; +} diff --git a/routes/forms.js b/routes/forms.js new file mode 100644 index 00000000..ebc42d16 --- /dev/null +++ b/routes/forms.js @@ -0,0 +1,275 @@ +'use strict'; + +let express = require('express'); +let router = new express.Router(); +let passport = require('../lib/passport'); +let tools = require('../lib/tools'); +let helpers = require('../lib/helpers'); +let _ = require('../lib/translate')._; +let lists = require('../lib/models/lists'); +let fields = require('../lib/models/fields'); +let forms = require('../lib/models/forms'); +let subscriptions = require('../lib/models/subscriptions'); + +router.all('/*', (req, res, next) => { + if (!req.user) { + req.flash('danger', _('Need to be logged in to access restricted content')); + return res.redirect('/users/login?next=' + encodeURIComponent(req.originalUrl)); + } + res.setSelectedMenu('lists'); + next(); +}); + +router.get('/:list', passport.csrfProtection, (req, res) => { + lists.get(req.params.list, (err, list) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/'); + } + + if (!list) { + req.flash('danger', _('Selected list ID not found')); + return res.redirect('/'); + } + + forms.list(list.id, (err, rows) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/forms/' + encodeURIComponent(req.params.list)); + } + + let index = 0; + res.render('lists/forms/forms', { + customForms: rows.map(row => { + row.index = ++index; + row.isDefaultForm = list.defaultForm === row.id; + return row; + }), + list, + csrfToken: req.csrfToken() + }); + }); + }); +}); + +router.get('/:list/create', passport.csrfProtection, (req, res) => { + lists.get(req.params.list, (err, list) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/'); + } + + if (!list) { + req.flash('danger', _('Selected list ID not found')); + return res.redirect('/'); + } + + let data = {}; + data.csrfToken = req.csrfToken(); + data.list = list; + + res.render('lists/forms/create', data); + }); +}); + +router.post('/:list/create', passport.parseForm, passport.csrfProtection, (req, res) => { + forms.create(req.params.list, req.body, (err, id) => { + if (err || !id) { + req.flash('danger', err && err.message || err || _('Could not create custom form')); + return res.redirect('/forms/' + encodeURIComponent(req.params.list) + '/create?' + tools.queryParams(req.body)); + } + req.flash('success', 'Custom form created'); + res.redirect('/forms/' + encodeURIComponent(req.params.list) + '/edit/' + id); + }); +}); + +router.get('/:list/edit/:form', passport.csrfProtection, (req, res) => { + lists.get(req.params.list, (err, list) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/'); + } + + if (!list) { + req.flash('danger', _('Selected list ID not found')); + return res.redirect('/'); + } + + forms.get(req.params.form, (err, form) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/forms/' + encodeURIComponent(req.params.list)); + } + + if (!form) { + req.flash('danger', _('Selected form not found')); + return res.redirect('/forms/' + encodeURIComponent(req.params.list)); + } + + fields.list(list.id, (err, rows) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/forms/' + encodeURIComponent(req.params.list)); + } + + let customFields = rows.map(row => { + row.type = fields.types[row.type]; + return row; + }); + + let allFields = helpers.filterCustomFields(customFields, [], 'exclude'); + let fieldsShownOnSubscribe = allFields; + let fieldsHiddenOnSubscribe = []; + let fieldsShownOnManage = allFields; + let fieldsHiddenOnManage = []; + + if (form.fieldsShownOnSubscribe) { + fieldsShownOnSubscribe = helpers.filterCustomFields(customFields, form.fieldsShownOnSubscribe, 'include'); + fieldsHiddenOnSubscribe = helpers.filterCustomFields(customFields, form.fieldsShownOnSubscribe, 'exclude'); + } + + if (form.fieldsShownOnManage) { + fieldsShownOnManage = helpers.filterCustomFields(customFields, form.fieldsShownOnManage, 'include'); + fieldsHiddenOnManage = helpers.filterCustomFields(customFields, form.fieldsShownOnManage, 'exclude'); + } + + let templateOptgroups = [ + { + label: 'General', + opts: [{ + name: 'layout', + label: _('Layout'), + type: 'mjml', + isLayout: true + }, { + name: 'form_input_style', + label: _('Form Input Style'), + type: 'css' + }] + }, { + label: _('Subscribe'), + opts: [{ + name: 'web_subscribe', + label: _('Web - Subscribe'), + type: 'mjml' + }, { + name: 'web_confirm_notice', + label: _('Web - Confirm Notice'), + type: 'mjml' + }, { + name: 'mail_confirm_html', + label: _('Mail - Confirm Subscription (MJML)'), + type: 'mjml' + }, { + name: 'mail_confirm_text', + label: _('Mail - Confirm Subscription (Text)'), + type: 'text' + }, { + name: 'web_subscribed', + label: _('Web - Subscribed Notice'), + type: 'mjml' + }, { + name: 'mail_subscription_confirmed_html', + label: _('Mail - Subscription Confirmed (MJML)'), + type: 'mjml' + }, { + name: 'mail_subscription_confirmed_text', + label: _('Mail - Subscription Confirmed (Text)'), + type: 'text' + }] + }, { + label: 'Manage', + opts: [{ + name: 'web_manage', + label: _('Web - Manage Preferences'), + type: 'mjml' + }, { + name: 'web_manage_address', + label: _('Web - Manage Address'), + type: 'mjml' + }, { + name: 'web_updated_notice', + label: _('Web - Updated Notice'), + type: 'mjml' + }] + }, { + label: 'Unsubscribe', + opts: [{ + name: 'web_unsubscribe', + label: _('Web - Unsubscribe'), + type: 'mjml' + }, { + name: 'web_unsubscribe_notice', + label: _('Web - Unsubscribe Notice'), + type: 'mjml' + }, { + name: 'mail_unsubscribe_confirmed_html', + label: _('Mail - Unsubscribe Confirmed (MJML)'), + type: 'mjml' + }, { + name: 'mail_unsubscribe_confirmed_text', + label: _('Mail - Unsubscribe Confirmed (Text)'), + type: 'text' + }] + } + ]; + + templateOptgroups.forEach(group => { + group.opts.forEach(opt => { + let key = tools.fromDbKey(opt.name); + opt.value = form[key]; + }); + }); + + subscriptions.listTestUsers(list.id, (err, testUsers) => { + res.render('lists/forms/edit', { + csrfToken: req.csrfToken(), + list, + form, + templateOptgroups, + fieldsShownOnSubscribe, + fieldsHiddenOnSubscribe, + fieldsShownOnManage, + fieldsHiddenOnManage, + testUsers, + useEditor: true + }); + }); + }); + }); + }); +}); + +router.post('/:list/edit', passport.parseForm, passport.csrfProtection, (req, res) => { + forms.update(req.body.id, req.body, (err, updated) => { + if (err) { + req.flash('danger', err.message || err); + } else if (updated) { + req.flash('success', _('Form settings updated')); + } else { + req.flash('info', _('Form settings not updated')); + } + + if (req.body.id) { + return res.redirect('/forms/' + encodeURIComponent(req.params.list) + '/edit/' + encodeURIComponent(req.body.id)); + } else { + return res.redirect('/forms/' + encodeURIComponent(req.params.list)); + } + }); +}); + +router.post('/:list/delete', passport.parseForm, passport.csrfProtection, (req, res) => { + forms.delete(req.body.id, (err, deleted) => { + if (err) { + req.flash('danger', err && err.message || err); + } else if (deleted) { + req.flash('success', _('Custom form deleted')); + } else { + req.flash('info', _('Could not delete specified form')); + } + + return res.redirect('/forms/' + encodeURIComponent(req.params.list)); + }); +}); + +module.exports = router; diff --git a/routes/lists.js b/routes/lists.js index 91e39123..b0b0fffd 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -8,6 +8,7 @@ let router = new express.Router(); let lists = require('../lib/models/lists'); let subscriptions = require('../lib/models/subscriptions'); let fields = require('../lib/models/fields'); +let forms = require('../lib/models/forms'); let tools = require('../lib/tools'); let striptags = require('striptags'); let htmlescape = require('escape-html'); @@ -101,8 +102,21 @@ router.get('/edit/:id', passport.csrfProtection, (req, res) => { req.flash('danger', err && err.message || err || _('Could not find list with specified ID')); return res.redirect('/lists'); } - list.csrfToken = req.csrfToken(); - res.render('lists/edit', list); + + forms.list(list.id, (err, customForms) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/lists'); + } + + list.customForms = customForms.map(row => { + row.selected = list.defaultForm === row.id; + return row; + }); + + list.csrfToken = req.csrfToken(); + res.render('lists/edit', list); + }); }); }); @@ -117,7 +131,9 @@ router.post('/edit', passport.parseForm, passport.csrfProtection, (req, res) => req.flash('info', _('List settings not updated')); } - if (req.body.id) { + if (req.query.next) { + return res.redirect(req.query.next); + } else if (req.body.id) { return res.redirect('/lists/edit/' + encodeURIComponent(req.body.id)); } else { return res.redirect('/lists'); @@ -219,7 +235,7 @@ router.post('/ajax/:id', (req, res) => { } else { return htmlescape(cRow.value || ''); } - })).concat(statuses[row.status]).concat(row.created && row.created.toISOString ? '' + row.created.toISOString() + '' : 'N/A').concat('' + _('Edit') + '')) + })).concat(statuses[row.status]).concat(row.created && row.created.toISOString ? '' + row.created.toISOString() + '' : 'N/A').concat('' + _('Edit') + '')) }); }); }); diff --git a/routes/subscription.js b/routes/subscription.js index a552a3a6..8fedce9a 100644 --- a/routes/subscription.js +++ b/routes/subscription.js @@ -3,6 +3,7 @@ let log = require('npmlog'); let tools = require('../lib/tools'); +let helpers = require('../lib/helpers'); let mailer = require('../lib/mailer'); let passport = require('../lib/passport'); let express = require('express'); @@ -10,11 +11,13 @@ let urllib = require('url'); let router = new express.Router(); let lists = require('../lib/models/lists'); let fields = require('../lib/models/fields'); +let forms = require('../lib/models/forms'); let subscriptions = require('../lib/models/subscriptions'); let settings = require('../lib/models/settings'); let openpgp = require('openpgp'); let _ = require('../lib/translate')._; let util = require('util'); +let hbs = require('hbs'); router.get('/subscribe/:cid', (req, res, next) => { subscriptions.subscribe(req.params.cid, req.ip, (err, subscription) => { @@ -37,17 +40,44 @@ router.get('/subscribe/:cid', (req, res, next) => { return next(err); } - settings.list(['defaultHomepage', 'serviceUrl', 'pgpPrivateKey', 'defaultAddress', 'defaultFrom', 'disableConfirmations'], (err, configItems) => { + settings.list(['defaultHomepage', 'serviceUrl', 'pgpPrivateKey', 'defaultAddress', 'defaultPostaddress', 'defaultFrom', 'disableConfirmations'], (err, configItems) => { if (err) { return next(err); } - res.render('subscription/subscribed', { + let data = { title: list.name, - layout: 'subscription/layout', homepage: configItems.defaultHomepage || configItems.serviceUrl, preferences: '/subscription/' + list.cid + '/manage/' + subscription.cid, - hasPubkey: !!configItems.pgpPrivateKey + hasPubkey: !!configItems.pgpPrivateKey, + defaultAddress: configItems.defaultAddress, + defaultPostaddress: configItems.defaultPostaddress, + template: { + template: 'subscription/web-subscribed.mjml.hbs', + layout: 'subscription/layout.mjml.hbs' + } + }; + + helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-subscribed', data, (err, data) => { + if (err) { + return next(err); + } + + helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { + if (err) { + return next(err); + } + + helpers.captureFlashMessages(req, res, (err, flash) => { + if (err) { + return next(err); + } + + data.isWeb = true; + data.flashMessages = flash; + res.send(htmlRenderer(data)); + }); + }); }); if (configItems.disableConfirmations) { @@ -66,30 +96,52 @@ router.get('/subscribe/:cid', (req, res, next) => { } }); - mailer.sendMail({ - from: { - name: configItems.defaultFrom, - address: configItems.defaultAddress - }, - to: { - name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), - address: subscription.email - }, - subject: util.format(_('%s: Subscription Confirmed'), list.name), - encryptionKeys - }, { - html: 'emails/subscription-confirmed-html.hbs', - text: 'emails/subscription-confirmed-text.hbs', - data: { - title: list.name, - contactAddress: configItems.defaultAddress, - preferencesUrl: urllib.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '/manage/' + subscription.cid), - unsubscribeUrl: urllib.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid) - } - }, err => { + let sendMail = (html, text) => { + mailer.sendMail({ + from: { + name: configItems.defaultFrom, + address: configItems.defaultAddress + }, + to: { + name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), + address: subscription.email + }, + subject: util.format(_('%s: Subscription Confirmed'), list.name), + encryptionKeys + }, { + html, + text, + data: { + title: list.name, + homepage: configItems.defaultHomepage || configItems.serviceUrl, + contactAddress: configItems.defaultAddress, + defaultPostaddress: configItems.defaultPostaddress, + preferencesUrl: urllib.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '/manage/' + subscription.cid), + unsubscribeUrl: urllib.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid), + } + }, err => { + if (err) { + log.error('Subscription', err.stack); + } + }); + }; + + let text = { + template: 'subscription/mail-subscription-confirmed-text.hbs' + }; + + let html = { + template: 'subscription/mail-subscription-confirmed-html.mjml.hbs', + layout: 'subscription/layout.mjml.hbs', + type: 'mjml' + }; + + helpers.injectCustomFormTemplates(req.query.fid || list.defaultForm, { text, html }, (err, tmpl) => { if (err) { - log.error('Subscription', err.stack); + return sendMail(html, text); } + + sendMail(tmpl.html, tmpl.text); }); }); }); @@ -124,12 +176,41 @@ router.get('/:cid', passport.csrfProtection, (req, res, next) => { data.customFields = fields.getRow(fieldList, data); data.useEditor = true; - settings.list(['pgpPrivateKey'], (err, configItems) => { + settings.list(['pgpPrivateKey', 'defaultAddress', 'defaultPostaddress'], (err, configItems) => { if (err) { return next(err); } data.hasPubkey = !!configItems.pgpPrivateKey; - res.render('subscription/subscribe', data); + data.defaultAddress = configItems.defaultAddress; + data.defaultPostaddress = configItems.defaultPostaddress; + + data.template = { + template: 'subscription/web-subscribe.mjml.hbs', + layout: 'subscription/layout.mjml.hbs' + }; + + helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-subscribe', data, (err, data) => { + if (err) { + return next(err); + } + + helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { + if (err) { + return next(err); + } + + helpers.captureFlashMessages(req, res, (err, flash) => { + if (err) { + return next(err); + } + + data.isWeb = true; + data.needsJsWarning = true; + data.flashMessages = flash; + res.send(htmlRenderer(data)); + }); + }); + }); }); }); }); @@ -146,15 +227,43 @@ router.get('/:cid/confirm-notice', (req, res, next) => { return next(err); } - settings.list(['defaultHomepage', 'serviceUrl'], (err, configItems) => { + settings.list(['defaultHomepage', 'serviceUrl', 'defaultAddress', 'defaultPostaddress'], (err, configItems) => { if (err) { return next(err); } - res.render('subscription/confirm-notice', { + let data = { title: list.name, - layout: 'subscription/layout', - homepage: configItems.defaultHomepage || configItems.serviceUrl + homepage: configItems.defaultHomepage || configItems.serviceUrl, + defaultAddress: configItems.defaultAddress, + defaultPostaddress: configItems.defaultPostaddress, + template: { + template: 'subscription/web-confirm-notice.mjml.hbs', + layout: 'subscription/layout.mjml.hbs' + } + }; + + helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-confirm-notice', data, (err, data) => { + if (err) { + return next(err); + } + + helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { + if (err) { + return next(err); + } + + helpers.captureFlashMessages(req, res, (err, flash) => { + if (err) { + return next(err); + } + + data.isWeb = true; + data.isConfirmNotice = true; + data.flashMessages = flash; + res.send(htmlRenderer(data)); + }); + }); }); }); }); @@ -171,15 +280,42 @@ router.get('/:cid/updated-notice', (req, res, next) => { return next(err); } - settings.list(['defaultHomepage', 'serviceUrl'], (err, configItems) => { + settings.list(['defaultHomepage', 'serviceUrl', 'defaultAddress', 'defaultPostaddress'], (err, configItems) => { if (err) { return next(err); } - res.render('subscription/updated-notice', { + let data = { title: list.name, - layout: 'subscription/layout', - homepage: configItems.defaultHomepage || configItems.serviceUrl + homepage: configItems.defaultHomepage || configItems.serviceUrl, + defaultAddress: configItems.defaultAddress, + defaultPostaddress: configItems.defaultPostaddress, + template: { + template: 'subscription/web-updated-notice.mjml.hbs', + layout: 'subscription/layout.mjml.hbs' + } + }; + + helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-updated-notice', data, (err, data) => { + if (err) { + return next(err); + } + + helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { + if (err) { + return next(err); + } + + helpers.captureFlashMessages(req, res, (err, flash) => { + if (err) { + return next(err); + } + + data.isWeb = true; + data.flashMessages = flash; + res.send(htmlRenderer(data)); + }); + }); }); }); }); @@ -196,15 +332,43 @@ router.get('/:cid/unsubscribe-notice', (req, res, next) => { return next(err); } - settings.list(['defaultHomepage', 'serviceUrl'], (err, configItems) => { + settings.list(['defaultHomepage', 'serviceUrl', 'defaultAddress', 'defaultPostaddress'], (err, configItems) => { if (err) { return next(err); } - res.render('subscription/unsubscribe-notice', { + let data = { title: list.name, layout: 'subscription/layout', - homepage: configItems.defaultHomepage || configItems.serviceUrl + homepage: configItems.defaultHomepage || configItems.serviceUrl, + defaultAddress: configItems.defaultAddress, + defaultPostaddress: configItems.defaultPostaddress, + template: { + template: 'subscription/web-unsubscribe-notice.mjml.hbs', + layout: 'subscription/layout.mjml.hbs' + } + }; + + helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-unsubscribe-notice', data, (err, data) => { + if (err) { + return next(err); + } + + helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { + if (err) { + return next(err); + } + + helpers.captureFlashMessages(req, res, (err, flash) => { + if (err) { + return next(err); + } + + data.isWeb = true; + data.flashMessages = flash; + res.send(htmlRenderer(data)); + }); + }); }); }); }); @@ -298,13 +462,42 @@ router.get('/:lcid/manage/:ucid', passport.csrfProtection, (req, res, next) => { subscription.useEditor = true; - settings.list(['pgpPrivateKey'], (err, configItems) => { + settings.list(['pgpPrivateKey', 'defaultAddress', 'defaultPostaddress'], (err, configItems) => { if (err) { return next(err); } subscription.hasPubkey = !!configItems.pgpPrivateKey; + subscription.defaultAddress = configItems.defaultAddress; + subscription.defaultPostaddress = configItems.defaultPostaddress; - res.render('subscription/manage', subscription); + subscription.template = { + template: 'subscription/web-manage.mjml.hbs', + layout: 'subscription/layout.mjml.hbs' + }; + + helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-manage', subscription, (err, data) => { + if (err) { + return next(err); + } + + helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { + if (err) { + return next(err); + } + + helpers.captureFlashMessages(req, res, (err, flash) => { + if (err) { + return next(err); + } + + data.isWeb = true; + data.needsJsWarning = true; + data.isManagePreferences = true; + data.flashMessages = flash; + res.send(htmlRenderer(data)); + }); + }); + }); }); }); }); @@ -344,24 +537,55 @@ router.get('/:lcid/manage-address/:ucid', passport.csrfProtection, (req, res, ne return next(err); } - subscriptions.get(list.id, req.params.ucid, (err, subscription) => { - if (!err && !subscription) { - err = new Error(_('Subscription not found from this list')); - err.status = 404; + settings.list(['defaultAddress', 'defaultPostaddress'], (err, configItems) => { + if (err) { + return next(err); } - subscription.lcid = req.params.lcid; - subscription.title = list.name; - subscription.csrfToken = req.csrfToken(); - subscription.layout = 'subscription/layout'; - subscription.useEditor = true; + subscriptions.get(list.id, req.params.ucid, (err, subscription) => { + if (!err && !subscription) { + err = new Error(_('Subscription not found from this list')); + err.status = 404; + } - res.render('subscription/manage-address', subscription); + subscription.lcid = req.params.lcid; + subscription.title = list.name; + subscription.csrfToken = req.csrfToken(); + subscription.defaultAddress = configItems.defaultAddress; + subscription.defaultPostaddress = configItems.defaultPostaddress; + + subscription.template = { + template: 'subscription/web-manage-address.mjml.hbs', + layout: 'subscription/layout.mjml.hbs' + }; + + helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-manage-address', subscription, (err, data) => { + if (err) { + return next(err); + } + + helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { + if (err) { + return next(err); + } + + helpers.captureFlashMessages(req, res, (err, flash) => { + if (err) { + return next(err); + } + + data.isWeb = true; + data.needsJsWarning = true; + data.flashMessages = flash; + res.send(htmlRenderer(data)); + }); + }); + }); + }); }); }); }); - router.post('/:lcid/manage-address', passport.parseForm, passport.csrfProtection, (req, res, next) => { lists.getByCid(req.params.lcid, (err, list) => { if (!err && !list) { @@ -397,23 +621,56 @@ router.get('/:lcid/unsubscribe/:ucid', passport.csrfProtection, (req, res, next) return next(err); } - subscriptions.get(list.id, req.params.ucid, (err, subscription) => { - if (!err && !subscription) { - err = new Error(_('Subscription not found from this list')); - err.status = 404; - } - + settings.list(['defaultAddress', 'defaultPostaddress'], (err, configItems) => { if (err) { return next(err); } - subscription.lcid = req.params.lcid; - subscription.title = list.name; - subscription.csrfToken = req.csrfToken(); - subscription.layout = 'subscription/layout'; - subscription.autosubmit = !!req.query.auto; - subscription.campaign = req.query.c; - res.render('subscription/unsubscribe', subscription); + subscriptions.get(list.id, req.params.ucid, (err, subscription) => { + if (!err && !subscription) { + err = new Error(_('Subscription not found from this list')); + err.status = 404; + } + + if (err) { + return next(err); + } + + subscription.lcid = req.params.lcid; + subscription.title = list.name; + subscription.csrfToken = req.csrfToken(); + subscription.autosubmit = !!req.query.auto; + subscription.campaign = req.query.c; + subscription.defaultAddress = configItems.defaultAddress; + subscription.defaultPostaddress = configItems.defaultPostaddress; + + subscription.template = { + template: 'subscription/web-unsubscribe.mjml.hbs', + layout: 'subscription/layout.mjml.hbs' + }; + + helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-unsubscribe', subscription, (err, data) => { + if (err) { + return next(err); + } + + helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { + if (err) { + return next(err); + } + + helpers.captureFlashMessages(req, res, (err, flash) => { + if (err) { + return next(err); + } + + data.isWeb = true; + data.flashMessages = flash; + res.send(htmlRenderer(data)); + }); + }); + }); + }); }); }); }); @@ -451,7 +708,7 @@ router.post('/:lcid/unsubscribe', passport.parseForm, passport.csrfProtection, ( } }); - settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'serviceUrl', 'disableConfirmations'], (err, configItems) => { + settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'defaultPostaddress', 'serviceUrl', 'disableConfirmations'], (err, configItems) => { if (err) { return log.error('Settings', err); } @@ -460,29 +717,50 @@ router.post('/:lcid/unsubscribe', passport.parseForm, passport.csrfProtection, ( return; } - mailer.sendMail({ - from: { - name: configItems.defaultFrom, - address: configItems.defaultAddress - }, - to: { - name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), - address: subscription.email - }, - subject: util.format(_('%s: Subscription Confirmed'), list.name), - encryptionKeys - }, { - html: 'emails/unsubscribe-confirmed-html.hbs', - text: 'emails/unsubscribe-confirmed-text.hbs', - data: { - title: list.name, - contactAddress: configItems.defaultAddress, - subscribeUrl: urllib.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '?cid=' + subscription.cid) - } - }, err => { + let sendMail = (html, text) => { + mailer.sendMail({ + from: { + name: configItems.defaultFrom, + address: configItems.defaultAddress + }, + to: { + name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), + address: subscription.email + }, + subject: util.format(_('%s: Unsubscribe Confirmed'), list.name), + encryptionKeys + }, { + html, + text, + data: { + title: list.name, + contactAddress: configItems.defaultAddress, + defaultPostaddress: configItems.defaultPostaddress, + subscribeUrl: urllib.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '?cid=' + subscription.cid), + } + }, err => { + if (err) { + log.error('Subscription', err.stack); + } + }); + }; + + let text = { + template: 'subscription/mail-unsubscribe-confirmed-text.hbs' + }; + + let html = { + template: 'subscription/mail-unsubscribe-confirmed-html.mjml.hbs', + layout: 'subscription/layout.mjml.hbs', + type: 'mjml' + }; + + helpers.injectCustomFormTemplates(req.query.fid || list.defaultForm, { text, html }, (err, tmpl) => { if (err) { - log.error('Subscription', err.stack); + return sendMail(html, text); } + + sendMail(tmpl.html, tmpl.text); }); }); }); diff --git a/setup/sql/upgrade-00022.sql b/setup/sql/upgrade-00022.sql new file mode 100644 index 00000000..9aca2392 --- /dev/null +++ b/setup/sql/upgrade-00022.sql @@ -0,0 +1,41 @@ +# Header section +# Define incrementing schema version number +SET @schema_version = '22'; + +# Create table to store custom forms +CREATE TABLE `custom_forms` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `list` int(11) unsigned NOT NULL, + `name` varchar(255) DEFAULT '', + `description` text, + `fields_shown_on_subscribe` varchar(255) DEFAULT '', + `fields_shown_on_manage` varchar(255) DEFAULT '', + `layout` mediumtext, + `form_input_style` mediumtext, + `mail_confirm_html` text, + `mail_confirm_text` text, + `mail_subscription_confirmed_html` text, + `mail_subscription_confirmed_text` text, + `mail_unsubscribe_confirmed_html` text, + `mail_unsubscribe_confirmed_text` text, + `web_confirm_notice` text, + `web_manage_address` text, + `web_manage` text, + `web_subscribe` text, + `web_subscribed` text, + `web_unsubscribe_notice` text, + `web_unsubscribe` text, + `web_updated_notice` text, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `list` (`list`), + CONSTRAINT `custom_forms_ibfk_1` FOREIGN KEY (`list`) REFERENCES `lists` (`id`) ON DELETE CASCADE +) ENGINE=InnoDB ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4; + +# Add default_form to lists +ALTER TABLE `lists` ADD COLUMN `default_form` int(11) unsigned DEFAULT NULL AFTER `cid`; + +# Footer section +LOCK TABLES `settings` WRITE; +INSERT INTO `settings` (`key`, `value`) VALUES('db_schema_version', @schema_version) ON DUPLICATE KEY UPDATE `value`=@schema_version; +UNLOCK TABLES; diff --git a/views/emails/confirm-html.hbs b/views/emails/confirm-html.hbs deleted file mode 100644 index e958a62c..00000000 --- a/views/emails/confirm-html.hbs +++ /dev/null @@ -1,8478 +0,0 @@ - - - - - - {{title}}: {{#translate}}Please Confirm Subscription{{/translate}} - - - - - - - - -
    -

    {{title}}

    -

    - {{#translate}}Please Confirm Subscription{{/translate}} -

    - -

    {{#translate}}Yes, subscribe me to this list{{/translate}}

    - -

    - {{#translate}}If you received this email by mistake, simply delete it. You won't be subscribed if you don't click the confirmation link above.{{/translate}} -

    - -

    - {{#translate}}For questions about this list, please contact:{{/translate}} -
    {{contactAddress}}

    - -
    - - - diff --git a/views/emails/password-reset-html.hbs b/views/emails/password-reset-html.hbs index 8ff7e6c5..913b4075 100644 --- a/views/emails/password-reset-html.hbs +++ b/views/emails/password-reset-html.hbs @@ -1,8468 +1,18 @@ - - {{#translate}}Change your password{{/translate}} - - - - + {{title}} - -
    -

    {{#translate}}Change your password{{/translate}}

    -

    {{#translate}}We have received a password change request for your Mailtrain account:{{/translate}} {{username}}.

    -

    {{#translate}}Reset password{{/translate}}

    +

    {{#translate}}Change your password{{/translate}}

    + +

    {{#translate}}We have received a password change request for your Mailtrain account:{{/translate}} {{username}}.

    + +

    {{#translate}}Reset password{{/translate}}

    + +

    {{#translate}}If you did not ask to change your password, then you can ignore this email and your password will not be changed.{{/translate}}

    -

    {{#translate}}If you did not ask to change your password, then you can ignore this email and your password will not be changed.{{/translate}}

    -
    - diff --git a/views/emails/subscription-confirmed-html.hbs b/views/emails/subscription-confirmed-html.hbs deleted file mode 100644 index e35f05fe..00000000 --- a/views/emails/subscription-confirmed-html.hbs +++ /dev/null @@ -1,8477 +0,0 @@ - - - - - - {{title}}: {{#translate}}Subscription Confirmed{{/translate}} - - - - - - - -
    -

    {{title}}

    -

    {{#translate}}Your subscription to our list has been confirmed.{{/translate}}

    - -

    - {{#translate}}If you want to modify your subscription then you can:{{/translate}} -

    - -

    - {{#translate}}manage your preferences{{/translate}} - {{#translate}}or{{/translate}} - {{#translate}}unsubscribe here{{/translate}} -

    - -

    {{#translate}}For questions about this list, please contact:{{/translate}} -
    {{contactAddress}}

    - - - - diff --git a/views/emails/unsubscribe-confirmed-html.hbs b/views/emails/unsubscribe-confirmed-html.hbs deleted file mode 100644 index 7e446fb9..00000000 --- a/views/emails/unsubscribe-confirmed-html.hbs +++ /dev/null @@ -1,8475 +0,0 @@ - - - - - - {{title}}: - {{#translate}}You are now unsubscribed{{/translate}} - - - - - - - - -
    -

    {{title}}

    -

    {{#translate}}We have removed your email address from our list.{{/translate}}

    - -

    - {{#translate}}If you unsubscribed by mistake, you can re-subscribe at:{{/translate}} -

    - -

    {{#translate}}Subscribe{{/translate}}

    - -

    {{#translate}}For questions about this list, please contact:{{/translate}} -
    {{contactAddress}}

    -
    - - - diff --git a/views/lists/edit.hbs b/views/lists/edit.hbs index ade92785..62d01f7f 100644 --- a/views/lists/edit.hbs +++ b/views/lists/edit.hbs @@ -17,12 +17,14 @@
    +
    +
    @@ -30,6 +32,7 @@ {{#translate}}This is the list ID displayed to the subscribers{{/translate}}
    +
    @@ -38,6 +41,19 @@
    +
    + +
    + + {{#translate}}The custom form used for this list. You can create a form here.{{/translate}} +
    +
    +
    diff --git a/views/lists/forms/create.hbs b/views/lists/forms/create.hbs new file mode 100644 index 00000000..53cb19a4 --- /dev/null +++ b/views/lists/forms/create.hbs @@ -0,0 +1,27 @@ + + +

    {{list.name}} {{#translate}}Create Custom Form{{/translate}}

    + +
    + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + diff --git a/views/lists/forms/edit.hbs b/views/lists/forms/edit.hbs new file mode 100644 index 00000000..c46a312f --- /dev/null +++ b/views/lists/forms/edit.hbs @@ -0,0 +1,286 @@ + + +

    {{list.name}} {{#translate}}Edit Custom Form{{/translate}} {{#translate}}Back to forms{{/translate}}

    + +
    + +
    + + + + +
    + + + + + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + + +
    + + +


    + + + + + +
    + +
    + +
    + +
    + +
    +
    + + + + {{#each templateOptgroups}} + {{#each opts}} +
    +
    +
    + +
    +
    + {{/each}} + {{/each}} + +
    + + + + + + + + +
    +
    + +
    +
    + +
    +
    {{#translate}}Fields hidden on subscription page:{{/translate}}
    +
      + {{#each fieldsHiddenOnSubscribe}} +
    • + {{name}} + {{type}} +
    • + {{/each}} +
    +
    {{#translate}}Fields shown on subscription page:{{/translate}}
    +
      + {{#each fieldsShownOnSubscribe}} +
    • + {{name}} + {{type}} +
    • + {{/each}} +
    +
    +
    + +
    +
    {{#translate}}Fields hidden on preferences page:{{/translate}}
    +
      + {{#each fieldsHiddenOnManage}} +
    • + {{name}} + {{type}} +
    • + {{/each}} +
    +
    {{#translate}}Fields shown on preferences page:{{/translate}}
    +
      + {{#each fieldsShownOnManage}} +
    • + {{name}} + {{type}} +
    • + {{/each}} +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +

    + {{#translate}}The MJML Documentation can be found here.{{/translate}} +

    +
    +
    +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +
    + + + + + diff --git a/views/lists/forms/forms.hbs b/views/lists/forms/forms.hbs new file mode 100644 index 00000000..9bc3ab92 --- /dev/null +++ b/views/lists/forms/forms.hbs @@ -0,0 +1,87 @@ + + + + +

    {{list.name}} {{#translate}}Custom Forms{{/translate}}

    + +
    + +
    +
    diff --git a/public/mosaico/templates/versafix-1/template-versafix-1.html b/public/mosaico/templates/versafix-1/index.html similarity index 91% rename from public/mosaico/templates/versafix-1/template-versafix-1.html rename to public/mosaico/templates/versafix-1/index.html index e729255a..693d5051 100644 --- a/public/mosaico/templates/versafix-1/template-versafix-1.html +++ b/public/mosaico/templates/versafix-1/index.html @@ -37,18 +37,18 @@ widget: text; help: Alternative text will be shown on email clients that does not download image automatically; } - sponsor { label: Sponsor; properties: visible=true src url alt; category: hidden } - titleText {label:Title Text;category: hidden;} + sponsor { label: Sponsor; properties: visible=true; } + titleText { label: HTML Title; extend: text; } gutterVisible { label: Show Gutter; extend: visible } socialIconType { label: Icon Version;widget: select; options:bw=Black and White|colors=Colors; } preheaderLinkOption { label: Unsubscribe Link; widget: select; - options: [profile_link]=Profile|[unsubscribe_link]=Unsubscribe|none=None; + options: [LINK_PREFERENCES]=Preferences|[LINK_UNSUBSCRIBE]=Unsubscribe|none=None; help: If -None- is selected, preHeader text will be shown; } - + hrStyle { label: Separator Style;properties:color hrWidth hrHeight; } hrStyle:preview { height: 200%; width: 200%; bottom: 20px; -ko-border-bottom: @[hrHeight]px solid @color; } preheaderVisible { label: Show Preheader; extend: visible; help: Preheader block is the first one on the top of the page. It contains web version link and optionally unsubscribe link or a preheader text that will be shown as a preview on some email clients; } @@ -59,7 +59,7 @@ image { label: Image; properties: src url alt } backgroundColor { label: Background Color; extend: color } buttonLink { label: Button; extend: link } - + /* texts and links */ textStyle { label: Text; properties: face color size } textStyle:preview { -ko-bind-text: @['AaZz']; -ko-font-family: @face; -ko-color: @color; -ko-font-size: @[size]px; } @@ -74,7 +74,7 @@ externalTextStyle { label: Alternative Text; extend: textStyle } externalTextStyle:preview { -ko-bind-text: @['AaZz']; -ko-font-family: @face; -ko-color: @color; -ko-font-size: @[size]px; } - + bigTitleStyle { label: Title; properties: face color size align} bigTitleStyle:preview { -ko-bind-text: @['AaZz']; -ko-font-family: @face; -ko-color: @color; -ko-font-size: @[size]px; } /* buttons */ @@ -82,7 +82,7 @@ buttonStyle size { label: Text Size; extend: size } buttonStyle { label: Button; properties: face color size buttonColor radius } buttonStyle:preview { -ko-bind-text: @['Button']; -ko-font-family: @face; -ko-color: @color; -ko-font-size: @[size]px; -ko-background-color: @buttonColor; padding-left: 5px; -ko-border-radius: @[radius]px; } - + /* contents */ preheaderText {label: PreHeader Text; extend:text; help: This text will be shown on some email clients as a preview of the email contents;} leftImage { label: Left Image; extend: image } @@ -110,7 +110,7 @@ template { label: Page; theme: frameTheme ;properties: preheaderVisible=true; version: 1.0.6; } footerBlock { label: Unsubscribe Block; theme: frameTheme } - + socialBlock fbVisible { label: Facebook; } socialBlock twVisible { label: Twitter } socialBlock ggVisible { label: Google+ } @@ -135,7 +135,7 @@ variant:socialIconType; theme: frameTheme } - + preheaderBlock { label:Preheader Block; theme: frameTheme} sideArticleBlock imagePos {label:Image position;widget:select; options: left=Left|right=Right; } @@ -149,10 +149,10 @@ doubleArticleBlock { label: 2 Columns Block; properties: backgroundColor titleVisible=true buttonVisible=true imageVisible=true titleTextStyle longTextStyle buttonStyle leftImage leftLongText leftButtonLink rightImage rightLongText rightButtonLink; theme: contentTheme} tripleArticleBlock { label: 3 Columns Block; properties: backgroundColor titleVisible=true buttonVisible=true imageVisible=true titleTextStyle longTextStyle buttonStyle leftImage leftLongText leftButtonLink middleImage middleLongText middleButtonLink rightImage rightLongText rightButtonLink; theme: contentTheme} - + logoBlock imageWidth { label: Image Size; widget: select; options: 166=Small|258=Medium|350=Big; variant:imageWidth;} logoBlock { label: Logo Block; properties: image imageWidth=258; variant: imageWidth; theme: contentTheme} - + titleBlock { label: Title; theme: contentTheme} imageBlock longTextStyle { @@ -278,12 +278,12 @@ width: 100% !important; max-width: none !important; height: auto !important; - } + } } + + +{{> editor_navbar}} + + +
    +
    + {{#if resource.editorData.html}} + + {{{resource.editorData.html}}} + {{else}} + {{{resource.html}}} + {{/if}} +
    +
    + + + + + + + + + +{{#if resource.mergeTags}} + +{{/if}} + + + diff --git a/views/grapejs/layout-editor.hbs b/views/grapejs/layout-editor.hbs new file mode 100644 index 00000000..59005bed --- /dev/null +++ b/views/grapejs/layout-editor.hbs @@ -0,0 +1,23 @@ + + + + + GrapesJS Newsletter Editor + + + + + + + + + + + + + + + {{{body}}} + + + diff --git a/views/mosaico/editor.hbs b/views/mosaico/editor.hbs new file mode 100644 index 00000000..1c882836 --- /dev/null +++ b/views/mosaico/editor.hbs @@ -0,0 +1,286 @@ + + + +{{> editor_navbar}} + + +{{#if resource.mergeTags}} + +{{/if}} + + + diff --git a/views/mosaico/layout-editor.hbs b/views/mosaico/layout-editor.hbs new file mode 100644 index 00000000..4787f670 --- /dev/null +++ b/views/mosaico/layout-editor.hbs @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + {{#if editorConfig.customscripts}} + {{#each editorConfig.customscripts}} + + {{/each}} + {{/if}} + + + + + + + {{{body}}} + + + diff --git a/views/partials/editor-bridge.hbs b/views/partials/editor-bridge.hbs index 3d65659f..065b389a 100644 --- a/views/partials/editor-bridge.hbs +++ b/views/partials/editor-bridge.hbs @@ -3,36 +3,45 @@ overflow: hidden; } #editor-frame, - #editor-frame-spinner { - border: none; + #editor-frame-loader { position: fixed; z-index: 10000; top: 0; left: 0; width: 100%; height: 100%; + border: none; } - #editor-frame-spinner { + #editor-frame-loader { z-index: 10001; - background: white; + background: #eaeced; } - #editor-frame-spinner div { - width: 120px; - height: 120px; - margin-top: -60px; - margin-left: -60px; + #editor-frame-loader div { position: absolute; top: 50%; left: 50%; + width: 62px; margin-left: -31px; + height: 72px; margin-top: -36px; + background: url('/mailtrain-header.png'); + -webkit-animation: pulsate 1.2s ease-out; + animation: pulsate 1.2s ease-out; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; } - #editor-frame-spinner span:before { - font-size: 120px; - color: #efefef; + @-webkit-keyframes pulsate { + 0% { -webkit-transform: scale(0.1, 0.1); opacity: 0.5; } + 70% { opacity: 1.0; } + 100% { -webkit-transform: scale(1.2, 1.2); opacity: 0.0; } + } + @keyframes pulsate { + 0% { transform: scale(0.1, 0.1); opacity: 0.5; } + 70% { opacity: 1.0; } + 100% { transform: scale(1.2, 1.2); opacity: 0.0; } } -
    - +
    From 1ea399cbe97ee860b041451bb111671830f8943f Mon Sep 17 00:00:00 2001 From: witzig Date: Fri, 10 Mar 2017 15:38:04 +0100 Subject: [PATCH 181/483] Reduce error handling noise --- routes/editorapi.js | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/routes/editorapi.js b/routes/editorapi.js index f6b4d560..fd85bc73 100644 --- a/routes/editorapi.js +++ b/routes/editorapi.js @@ -417,37 +417,32 @@ let parseGrapejsMultipartTestForm = (req, res, next) => { }; router.post('/test', parseGrapejsMultipartTestForm, passport.csrfProtection, (req, res) => { + let sendError = err => { + if (req.query.editor === 'grapejs') { + res.status(500).json({ + errors: err.message || err + }); + } else { + res.status(500).send(err.message || err); + } + }; + prepareHtml({ editorName: req.query.editor, html: req.body.html }, (err, html) => { if (err) { - req.query.editor === 'grapejs' ? - res.status(500).json({ - errors: err.message || err - }) : - res.status(500).send(err.message || err); - return; + return sendError(err); } settings.list(['defaultAddress', 'defaultFrom'], (err, configItems) => { if (err) { - req.query.editor === 'grapejs' ? - res.status(500).json({ - errors: err.message || err - }) : - res.status(500).send(err.message || err); - return; + return sendError(err); } mailer.getMailer((err, transport) => { if (err) { - req.query.editor === 'grapejs' ? - res.status(500).json({ - errors: err.message || err - }) : - res.status(500).send(err.message || err); - return; + return sendError(err); } let opts = { @@ -465,12 +460,7 @@ router.post('/test', parseGrapejsMultipartTestForm, passport.csrfProtection, (re transport.sendMail(opts, (err, info) => { if (err) { - req.query.editor === 'grapejs' ? - res.status(500).json({ - errors: err.message || err - }) : - res.status(500).send(err.message || err); - return; + return sendError(err); } req.query.editor === 'grapejs' ? From 94897b18fdc58693af1b38a5710e578cffdc2b27 Mon Sep 17 00:00:00 2001 From: witzig Date: Fri, 10 Mar 2017 15:44:23 +0100 Subject: [PATCH 182/483] Allow external custom scripts for Mosaico --- config/default.toml | 4 ++-- views/mosaico/layout-editor.hbs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/default.toml b/config/default.toml index 63b08a91..bea73175 100644 --- a/config/default.toml +++ b/config/default.toml @@ -135,8 +135,8 @@ processes=1 [mosaico] # Installed templates templates=[["versafix-1", "Versafix One"]] -# Inject custom scripts from public/mosaico/custom/ -# customscripts=["some-lib.js", "my-mosaico-plugin.js"] +# Inject custom scripts +# customscripts=["/mosaico/custom/my-mosaico-plugin.js"] [grapejs] # Installed templates diff --git a/views/mosaico/layout-editor.hbs b/views/mosaico/layout-editor.hbs index 4787f670..175be4cf 100644 --- a/views/mosaico/layout-editor.hbs +++ b/views/mosaico/layout-editor.hbs @@ -25,7 +25,7 @@ {{#if editorConfig.customscripts}} {{#each editorConfig.customscripts}} - + {{/each}} {{/if}} From c7427596b1722846a74f2fd677155e7d536ec2b0 Mon Sep 17 00:00:00 2001 From: witzig Date: Fri, 10 Mar 2017 16:50:16 +0100 Subject: [PATCH 183/483] Fix GrapeJS image resizing --- views/grapejs/editor.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/grapejs/editor.hbs b/views/grapejs/editor.hbs index d9595ad8..2b0c6916 100644 --- a/views/grapejs/editor.hbs +++ b/views/grapejs/editor.hbs @@ -177,7 +177,7 @@ var encodedSrc = (s && s[1]) || encodeURIComponent(src); var dynamicSrc = '/editorapi/img?src=' + encodedSrc + '&method=resize¶ms=' + $(this).width() + '%2C' + $(this).height(); imgs.push({ - cls: $(this).attr('class'), + cls: $(this).attr('class').split(' ')[0], dynamicSrc: dynamicSrc, src: src, }); From 87723d05ee4b16b1404e358653866fb382a333a4 Mon Sep 17 00:00:00 2001 From: witzig Date: Fri, 10 Mar 2017 17:11:49 +0100 Subject: [PATCH 184/483] Improved GrapeJS toastr notifications --- views/grapejs/editor.hbs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/views/grapejs/editor.hbs b/views/grapejs/editor.hbs index 2b0c6916..f6203b1a 100644 --- a/views/grapejs/editor.hbs +++ b/views/grapejs/editor.hbs @@ -19,6 +19,9 @@ } #toast-container { + top: auto !important; + bottom: 5px; + right: 325px; font-size: 13px; font-weight: lighter; } @@ -245,10 +248,12 @@ statusFormElC.style.opacity = '0'; statusFormEl.removeAttribute('data-tooltip'); md.close(); + toastr.success('Testmail sent'); } else if (res.errors) { statusFormEl.className = 'fa fa-exclamation-circle'; statusFormEl.setAttribute('data-tooltip', res.errors); statusFormElC.className = 'form-status text-danger'; + toastr.error(res.errors); } }); @@ -357,9 +362,10 @@ }, null, 'html') .success(function() { window.bridge.lastSavedHtml = html; + toastr.success('Sucessfully saved'); }) .fail(function(data) { - alert(data.responseText || 'An error occured while saving the document'); + toastr.error(data.responseText || 'An error occured while saving the document'); }) .always(function() { setTimeout(function() { From adf183856f2e1f829ab8e66c5a2a8d800cfea649 Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 11 Mar 2017 09:52:12 +0100 Subject: [PATCH 185/483] Moved delivered count into stats section --- views/campaigns/view.hbs | 84 +++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 39 deletions(-) diff --git a/views/campaigns/view.hbs b/views/campaigns/view.hbs index fe52ce39..4528780b 100644 --- a/views/campaigns/view.hbs +++ b/views/campaigns/view.hbs @@ -115,63 +115,69 @@ - {{#unless isIdling}} -
    {{#translate}}Delivered{{/translate}}
    -
    {{delivered}}
    - + {{/unless}} +
    +
    + {{#unless isIdling}} -
    {{#translate}}Bounced{{/translate}}
    -
    -
    -
    - {{bounced}} ({{bounceRate}}%) +
    {{#translate}}Delivered{{/translate}}
    +
    +
    + {{delivered}}
    -
    - + -
    {{#translate}}Complaints{{/translate}}
    -
    -
    -
    - {{complained}} ({{complaintRate}}%) -
    -
    -
    - -
    {{#translate}}Unsubscribed{{/translate}}
    -
    -
    -
    - {{unsubscribed}} ({{unsubscribeRate}}%) -
    -
    -
    - - {{#unless trackingDisabled}} - -
    {{#translate}}Opened{{/translate}}
    +
    {{#translate}}Bounced{{/translate}}
    -
    - {{opened}} ({{openRate}}%) +
    + {{bounced}} ({{bounceRate}}%)
    -
    {{#translate}}Clicked{{/translate}}
    +
    {{#translate}}Complaints{{/translate}}
    -
    - {{clicks}} ({{clicksRate}}%) +
    + {{complained}} ({{complaintRate}}%)
    - {{/unless}} - {{/unless}} +
    {{#translate}}Unsubscribed{{/translate}}
    +
    +
    +
    + {{unsubscribed}} ({{unsubscribeRate}}%) +
    +
    +
    + + {{#unless trackingDisabled}} + +
    {{#translate}}Opened{{/translate}}
    +
    +
    +
    + {{opened}} ({{openRate}}%) +
    +
    +
    + +
    {{#translate}}Clicked{{/translate}}
    +
    +
    +
    + {{clicks}} ({{clicksRate}}%) +
    +
    +
    + + {{/unless}} {{/unless}} From fca8313a5ee588bc8e96ea60ee0674f06aed38a4 Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 11 Mar 2017 13:21:07 +0100 Subject: [PATCH 186/483] Landing Page Proposal --- public/images/iredmail-logo.png | Bin 0 -> 11572 bytes public/images/sendpulse-logo.png | Bin 0 -> 11045 bytes routes/index.js | 2 +- views/index-2.hbs | 215 ++++++++++++++++++++++++++++++ views/partials/modal-carousel.hbs | 93 +++++++++++++ 5 files changed, 309 insertions(+), 1 deletion(-) create mode 100644 public/images/iredmail-logo.png create mode 100644 public/images/sendpulse-logo.png create mode 100644 views/index-2.hbs create mode 100644 views/partials/modal-carousel.hbs diff --git a/public/images/iredmail-logo.png b/public/images/iredmail-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d4082f03890eade12221194d525a744deebc9479 GIT binary patch literal 11572 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 literal 0 HcmV?d00001 diff --git a/public/images/sendpulse-logo.png b/public/images/sendpulse-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3974736b7c9114d13061569c68e0b81ae5c782 GIT binary patch literal 11045 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 k?&Tdc@b({R`G0^dX7xAS { - res.render('index', { + res.render('index-2', { indexPage: true, title: _('Self hosted email newsletter app') }); diff --git a/views/index-2.hbs b/views/index-2.hbs new file mode 100644 index 00000000..8ec8bce0 --- /dev/null +++ b/views/index-2.hbs @@ -0,0 +1,215 @@ + + +
    +
    +

    {{#translate}}List management{{/translate}}

    +

    {{#translate}}Mailtrain allows you to easily manage even very large lists. Million subscribers? Not a problem. You can add subscribers manually, through the API or import from a CSV file. All lists come with support for custom fields and merge tags as well.{{/translate}}

    + + {{> modal_carousel + title='List management' + cls='modal-list-management' + img01='/images/img01.png' + img02='/images/img02.png' + img03='/images/img03.png' + img04='/images/img04.png' + }} +
    +
    +

    {{#translate}}Custom fields{{/translate}}

    +

    {{#translate}}Text fields, numbers, drop downs or checkboxes, Mailtrain has them all. Every custom field can be included in the generated newsletters through merge tags.{{/translate}}

    + + {{> modal_carousel + title='Custom fields' + cls='modal-custom-fields' + img01='/images/img01.png' + img02='/images/img02.png' + img03='/images/img03.png' + img04='/images/img04.png' + img05='/images/img05.png' + img06='/images/img06.png' + img07='/images/img07.png' + img08='/images/img08.png' + img09='/images/img09.png' + }} +
    +
    +

    {{#translate}}List segmentation{{/translate}}

    +

    {{#translate}}Send messages only to list subscribers that match predefined segmentation rules. No need to create separate lists with small differences.{{/translate}}

    + + {{> modal_carousel + title='List segmentation' + cls='modal-list-segmentation' + img01='/images/img01.png' + img02='/images/img02.png' + img03='/images/img03.png' + img04='/images/img04.png' + img05='/images/img05.png' + img06='/images/img06.png' + img07='/images/img07.png' + img08='/images/img08.png' + img09='/images/img09.png' + }} +
    +
    + +
    + +
    +
    +

    {{#translate}}RSS Campaigns{{/translate}}

    +

    {{#translate}}Setup Mailtrain to track RSS feeds and if a new entry is detected in a feed then Mailtrain auto-generates a new campaign using entry data as message contents and sends it to selected subscribers.{{/translate}}

    + + {{> modal_carousel + title='RSS Campaigns' + cls='modal-rss-campaigns' + img01='/images/img01.png' + img02='/images/img02.png' + img03='/images/img03.png' + img04='/images/img04.png' + img05='/images/img05.png' + img06='/images/img06.png' + img07='/images/img07.png' + img08='/images/img08.png' + img09='/images/img09.png' + }} +
    +
    +

    {{#translate}}GPG Encryption{{/translate}}

    +

    {{#translate}}If a list has a custom field for a GPG Public Key set then subscribers can upload their GPG public key to receive encrypted messages from the list.{{/translate}}

    + + {{> modal_carousel + title='GPG Encryption' + cls='modal-gpg-encryption' + img01='/images/img01.png' + img02='/images/img02.png' + img03='/images/img03.png' + img04='/images/img04.png' + img05='/images/img05.png' + img06='/images/img06.png' + img07='/images/img07.png' + img08='/images/img08.png' + img09='/images/img09.png' + }} +
    +
    +

    {{#translate}}Click stats{{/translate}}

    +

    {{#translate}}After a campaign is sent, check individual click statistics for every link included in the message.{{/translate}}

    + + {{> modal_carousel + title='Click stats' + cls='modal-click-stats' + img01='/images/img01.png' + img02='/images/img02.png' + img03='/images/img03.png' + img04='/images/img04.png' + img05='/images/img05.png' + img06='/images/img06.png' + img07='/images/img07.png' + img08='/images/img08.png' + img09='/images/img09.png' + }} +
    +
    + +
    + +
    +
    +

    {{#translate}}Open source{{/translate}}

    +

    {{#translate}}Mailtrain is available under GPLv3 license and completely open source.{{/translate}}

    + + {{> modal_carousel + title='Open source' + cls='modal-open-source' + img01='/images/img01.png' + img02='/images/img02.png' + img03='/images/img03.png' + img04='/images/img04.png' + img05='/images/img05.png' + img06='/images/img06.png' + img07='/images/img07.png' + img08='/images/img08.png' + img09='/images/img09.png' + }} +
    +
    +

    {{#translate}}Send via any provider{{/translate}}

    +

    {{#translate}}Mailtrain recommends SendPulse even though you can use any provider that supports SMTP protocol to send out your newsletters. Bounce and complaints handling via webhooks is supported for SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA.{{/translate}}

    + + {{> modal_carousel + title='Send via any provider' + cls='modal-send-via-any-provider' + img01='/images/img01.png' + img02='/images/img02.png' + img03='/images/img03.png' + img04='/images/img04.png' + img05='/images/img05.png' + img06='/images/img06.png' + img07='/images/img07.png' + img08='/images/img08.png' + img09='/images/img09.png' + }} +
    +
    +

    {{#translate}}Trigger based automation{{/translate}}

    +

    {{#translate}}Define automation triggers to send specific messages when a user activates the trigger.{{/translate}}

    + + {{> modal_carousel + title='Trigger based automation' + cls='modal-trigger-based-automation' + img01='/images/img01.png' + img02='/images/img02.png' + img03='/images/img03.png' + img04='/images/img04.png' + img05='/images/img05.png' + img06='/images/img06.png' + img07='/images/img07.png' + img08='/images/img08.png' + img09='/images/img09.png' + }} +
    +
    + +


    + +
    +
    +

    {{#translate}}Donate to author{{/translate}}

    +

    {{#translate}}If you really like Mailtrain or your business benefits from it financially then I would really appreciate a small donation to keep the Mailtrain development engines running. You can either use Bitcoin or PayPal for donations. My Bitcoin wallet is{{/translate}} 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM

    +

    {{#translate}}or donate using PayPal{{/translate}}

    +
    +
    + +


    + +
    +
    +

    {{#translate}}Official Mailtrain Partners{{/translate}}

    +
    +
    +
    +

    + + SendPulse + +

    +

    {{#translate}}A reliable SMTP server, easy integration, and 12,000 messages a month free{{/translate}}

    +
    +
    +

    + + iRedMail + +

    +

    {{#translate}}Free, open source mail server solution{{/translate}}

    +
    +
    + +




    diff --git a/views/partials/modal-carousel.hbs b/views/partials/modal-carousel.hbs new file mode 100644 index 00000000..b831068f --- /dev/null +++ b/views/partials/modal-carousel.hbs @@ -0,0 +1,93 @@ + From c4edd89576504aeb30f514639257268a4692ae0e Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 11 Mar 2017 13:27:21 +0100 Subject: [PATCH 187/483] Fixed some translation tags --- views/campaigns/create-triggered.hbs | 2 +- views/campaigns/edit-triggered.hbs | 2 +- views/settings.hbs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/views/campaigns/create-triggered.hbs b/views/campaigns/create-triggered.hbs index ab4a7088..8fdafbe5 100644 --- a/views/campaigns/create-triggered.hbs +++ b/views/campaigns/create-triggered.hbs @@ -56,7 +56,7 @@

    - Select a template: + {{#translate}}Select a template:{{/translate}}

    +
    diff --git a/views/settings.hbs b/views/settings.hbs index 6f1a5574..bb6a357e 100644 --- a/views/settings.hbs +++ b/views/settings.hbs @@ -297,7 +297,7 @@
    - T{{#translate}}he number of messages to send through a single connection before the connection is closed and reopened (defaults to 100){{/translate}} + {{#translate}}The number of messages to send through a single connection before the connection is closed and reopened (defaults to 100){{/translate}}
    From fe9928fac0088d0db378420e5a8a7e1a7426d3ff Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 11 Mar 2017 09:49:39 +0100 Subject: [PATCH 188/483] Fixed vertical spacing of settings page and made inputs consistent --- views/settings.hbs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/views/settings.hbs b/views/settings.hbs index bb6a357e..1f4d345e 100644 --- a/views/settings.hbs +++ b/views/settings.hbs @@ -119,6 +119,7 @@
    +  
    @@ -287,7 +288,7 @@
    -
    +
    {{#translate}}The count of maximum simultaneous connections to make against the SMTP server (defaults to 5). This limit is per sending process.{{/translate}}
    @@ -295,7 +296,7 @@
    -
    +
    {{#translate}}The number of messages to send through a single connection before the connection is closed and reopened (defaults to 100){{/translate}}
    @@ -303,7 +304,7 @@
    -
    +
    {{#translate}}Maximum number of messages to send in an hour. Leave empty or zero for no throttling. If your provider uses a different speed limit (messages/minute or messages/second) then convert this limit into messages/hour (1m/s => 3600m/h). This limit is per sending process.{{/translate}}
    From 1aef9b3b7c4c2483024e5357637ba01bd6991246 Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 11 Mar 2017 10:10:51 +0100 Subject: [PATCH 189/483] Removed Mosaico legacy styles --- views/mosaico/editor.hbs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/views/mosaico/editor.hbs b/views/mosaico/editor.hbs index 1c882836..12c9f4f9 100644 --- a/views/mosaico/editor.hbs +++ b/views/mosaico/editor.hbs @@ -34,16 +34,6 @@ padding: 5px 10px 5px 0; height: 2em; } - @media screen and (max-width: 1175px) { - a.ui-button[title='Download template'] { - display: none !important; - } - } - @media screen and (max-width: 1020px) { - #btnMergeReference { - display: none !important; - } - } From c2ffc684bf8021081236c9b4a08f83b6c0e2fe8e Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 11 Mar 2017 13:28:33 +0100 Subject: [PATCH 190/483] Updated mailtrain.pot --- languages/mailtrain.pot | 47 ++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/languages/mailtrain.pot b/languages/mailtrain.pot index ccd9bb0e..4f142a5c 100644 --- a/languages/mailtrain.pot +++ b/languages/mailtrain.pot @@ -8,7 +8,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2017-03-10 12:12+0000\n" +"POT-Creation-Date: 2017-03-11 12:28+0000\n" #: views/archive/layout.hbs:1 #: views/layout.hbs:1 @@ -168,7 +168,7 @@ msgid "Bounce time" msgstr "" #: views/campaigns/campaigns.hbs:3 -#: views/campaigns/create-triggered.hbs:24 +#: views/campaigns/create-triggered.hbs:25 #: views/campaigns/create.hbs:3 #: views/campaigns/create.hbs:4 #: views/campaigns/create.hbs:27 @@ -355,7 +355,7 @@ msgstr "" #: views/campaigns/create-rss.hbs:11 #: views/campaigns/create-triggered.hbs:10 -#: views/campaigns/create-triggered.hbs:13 +#: views/campaigns/create-triggered.hbs:14 #: views/campaigns/create.hbs:10 #: views/campaigns/create.hbs:14 #: views/campaigns/edit-rss.hbs:13 @@ -410,7 +410,7 @@ msgid "" msgstr "" #: views/campaigns/create-rss.hbs:15 -#: views/campaigns/create-triggered.hbs:17 +#: views/campaigns/create-triggered.hbs:18 #: views/campaigns/create.hbs:18 #: views/campaigns/edit-rss.hbs:18 #: views/campaigns/edit-triggered.hbs:16 @@ -420,16 +420,17 @@ msgid "Email \"from name\"" msgstr "" #: views/campaigns/create-rss.hbs:16 -#: views/campaigns/create-triggered.hbs:18 +#: views/campaigns/create-triggered.hbs:19 #: views/campaigns/create.hbs:19 #: views/campaigns/edit-rss.hbs:19 +#: views/campaigns/edit-triggered.hbs:17 #: views/campaigns/edit.hbs:18 #: views/settings.hbs:23 msgid "This is the name your emails will come from" msgstr "" #: views/campaigns/create-rss.hbs:17 -#: views/campaigns/create-triggered.hbs:19 +#: views/campaigns/create-triggered.hbs:20 #: views/campaigns/create.hbs:20 #: views/campaigns/edit-rss.hbs:20 #: views/campaigns/edit-triggered.hbs:18 @@ -439,7 +440,7 @@ msgid "Email \"from\" address" msgstr "" #: views/campaigns/create-rss.hbs:18 -#: views/campaigns/create-triggered.hbs:20 +#: views/campaigns/create-triggered.hbs:21 #: views/campaigns/edit-rss.hbs:21 #: views/campaigns/edit-triggered.hbs:19 #: views/settings.hbs:25 @@ -447,7 +448,7 @@ msgid "This is the address people will send replies to" msgstr "" #: views/campaigns/create-rss.hbs:19 -#: views/campaigns/create-triggered.hbs:23 +#: views/campaigns/create-triggered.hbs:24 #: views/campaigns/create.hbs:26 #: views/campaigns/edit-rss.hbs:22 #: views/campaigns/edit-triggered.hbs:22 @@ -470,17 +471,22 @@ msgstr "" msgid "Template" msgstr "" -#: views/campaigns/create-triggered.hbs:14 +#: views/campaigns/create-triggered.hbs:13 +#: views/campaigns/create.hbs:13 +msgid "Select a template:" +msgstr "" + +#: views/campaigns/create-triggered.hbs:15 #: views/campaigns/create.hbs:15 msgid "Selecting a template creates a campaign specific copy from it" msgstr "" -#: views/campaigns/create-triggered.hbs:15 +#: views/campaigns/create-triggered.hbs:16 #: views/campaigns/create.hbs:16 msgid "Or alternatively use an URL as the message content source:" msgstr "" -#: views/campaigns/create-triggered.hbs:16 +#: views/campaigns/create-triggered.hbs:17 #: views/campaigns/create.hbs:17 #: views/campaigns/edit-triggered.hbs:25 #: views/campaigns/edit.hbs:28 @@ -489,7 +495,7 @@ msgid "" "POST body. Use this if you want to generate the HTML message yourself" msgstr "" -#: views/campaigns/create-triggered.hbs:21 +#: views/campaigns/create-triggered.hbs:22 #: views/campaigns/create.hbs:24 #: views/campaigns/edit-triggered.hbs:20 #: views/campaigns/edit.hbs:23 @@ -497,7 +503,7 @@ msgstr "" msgid "Email \"subject line\"" msgstr "" -#: views/campaigns/create-triggered.hbs:22 +#: views/campaigns/create-triggered.hbs:23 #: views/campaigns/create.hbs:25 #: views/campaigns/edit-triggered.hbs:21 #: views/campaigns/edit.hbs:24 @@ -505,10 +511,6 @@ msgstr "" msgid "Keep it relevant and non-spammy" msgstr "" -#: views/campaigns/create.hbs:13 -msgid "Select a template:" -msgstr "" - #: views/campaigns/create.hbs:21 #: views/campaigns/edit.hbs:20 msgid "" @@ -590,10 +592,6 @@ msgstr "" msgid "General" msgstr "" -#: views/campaigns/edit-triggered.hbs:17 -msgid "his is the name your emails will come from" -msgstr "" - #: views/campaigns/edit-triggered.hbs:23 #: views/campaigns/edit.hbs:26 msgid "Template Settings" @@ -2230,7 +2228,7 @@ msgstr "" #: views/settings.hbs:62 msgid "" -"he number of messages to send through a single connection before the " +"The number of messages to send through a single connection before the " "connection is closed and reopened (defaults to 100)" msgstr "" @@ -2732,11 +2730,12 @@ msgid "New Password" msgstr "" #: views/users/account.hbs:16 +#: views/users/reset.hbs:8 msgid "Confirm Password" msgstr "" #: views/users/account.hbs:17 -#: views/users/reset.hbs:8 +#: views/users/reset.hbs:9 msgid "Confirm New Password" msgstr "" @@ -3461,7 +3460,7 @@ msgstr "" #: routes/archive.js:31 #: routes/archive.js:43 #: routes/archive.js:55 -#: app.js:217 +#: app.js:220 msgid "Not Found" msgstr "" From 713e20bc6c6cb741177a519b0ba432c6fa2f97eb Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 11 Mar 2017 22:59:15 +0100 Subject: [PATCH 191/483] Added screenshots --- .../images/screenshots/campaigns/campaigns.png | Bin 0 -> 90601 bytes .../screenshots/campaigns/clicked/view.png | Bin 0 -> 94104 bytes .../screenshots/campaigns/create-rss.png | Bin 0 -> 129405 bytes .../screenshots/campaigns/view-links.png | Bin 0 -> 89426 bytes .../images/screenshots/campaigns/view-rss.png | Bin 0 -> 156107 bytes public/images/screenshots/campaigns/view.png | Bin 0 -> 126303 bytes public/images/screenshots/fields/edit.png | Bin 0 -> 138970 bytes public/images/screenshots/fields/view.png | Bin 0 -> 92594 bytes public/images/screenshots/grapejs/editor-1.png | Bin 0 -> 416823 bytes public/images/screenshots/grapejs/editor-2.png | Bin 0 -> 180986 bytes public/images/screenshots/grapejs/editor-3.png | Bin 0 -> 324558 bytes public/images/screenshots/lists/lists.png | Bin 0 -> 83111 bytes .../screenshots/lists/subscription/edit.png | Bin 0 -> 125769 bytes public/images/screenshots/lists/view.png | Bin 0 -> 115640 bytes public/images/screenshots/mosaico/editor-1.png | Bin 0 -> 612362 bytes public/images/screenshots/mosaico/editor-2.png | Bin 0 -> 469736 bytes public/images/screenshots/mosaico/editor-3.png | Bin 0 -> 532234 bytes public/images/screenshots/segments/create.png | Bin 0 -> 80058 bytes .../screenshots/segments/rules/configure.png | Bin 0 -> 73819 bytes .../screenshots/segments/rules/create.png | Bin 0 -> 75479 bytes public/images/screenshots/segments/view.png | Bin 0 -> 94263 bytes public/images/screenshots/settings.png | Bin 0 -> 612247 bytes .../images/screenshots/subscription/create.png | Bin 0 -> 65942 bytes public/images/screenshots/templates/create.png | Bin 0 -> 92043 bytes .../screenshots/templates/edit/grapejs.png | Bin 0 -> 238522 bytes .../screenshots/templates/edit/mosaico.png | Bin 0 -> 303439 bytes .../screenshots/triggers/create-select.png | Bin 0 -> 72156 bytes public/images/screenshots/triggers/create.png | Bin 0 -> 144581 bytes public/images/screenshots/users/api.png | Bin 0 -> 462290 bytes 29 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/images/screenshots/campaigns/campaigns.png create mode 100644 public/images/screenshots/campaigns/clicked/view.png create mode 100644 public/images/screenshots/campaigns/create-rss.png create mode 100644 public/images/screenshots/campaigns/view-links.png create mode 100644 public/images/screenshots/campaigns/view-rss.png create mode 100644 public/images/screenshots/campaigns/view.png create mode 100644 public/images/screenshots/fields/edit.png create mode 100644 public/images/screenshots/fields/view.png create mode 100644 public/images/screenshots/grapejs/editor-1.png create mode 100644 public/images/screenshots/grapejs/editor-2.png create mode 100644 public/images/screenshots/grapejs/editor-3.png create mode 100644 public/images/screenshots/lists/lists.png create mode 100644 public/images/screenshots/lists/subscription/edit.png create mode 100644 public/images/screenshots/lists/view.png create mode 100644 public/images/screenshots/mosaico/editor-1.png create mode 100644 public/images/screenshots/mosaico/editor-2.png create mode 100644 public/images/screenshots/mosaico/editor-3.png create mode 100644 public/images/screenshots/segments/create.png create mode 100644 public/images/screenshots/segments/rules/configure.png create mode 100644 public/images/screenshots/segments/rules/create.png create mode 100644 public/images/screenshots/segments/view.png create mode 100644 public/images/screenshots/settings.png create mode 100644 public/images/screenshots/subscription/create.png create mode 100644 public/images/screenshots/templates/create.png create mode 100644 public/images/screenshots/templates/edit/grapejs.png create mode 100644 public/images/screenshots/templates/edit/mosaico.png create mode 100644 public/images/screenshots/triggers/create-select.png create mode 100644 public/images/screenshots/triggers/create.png create mode 100644 public/images/screenshots/users/api.png diff --git a/public/images/screenshots/campaigns/campaigns.png b/public/images/screenshots/campaigns/campaigns.png new file mode 100644 index 0000000000000000000000000000000000000000..298735bed8883fc252f9fafdc6d100e2c628296a GIT binary patch literal 90601 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 literal 0 HcmV?d00001 diff --git a/public/images/screenshots/campaigns/create-rss.png b/public/images/screenshots/campaigns/create-rss.png new file mode 100644 index 0000000000000000000000000000000000000000..e587a1700249239fe80f4f619c7479d8dcca2aaf GIT binary patch literal 129405 zcmbTc1ym%YN4v> zq+;jnXk_wn1qNpBWMFM>2Xx|QWn^R&{O2Wuk%5i9frXhZkip2&#K6f! zz{%a-gwGKOlx^d9`>-ec+n=eEtAXR+9u*Dj4IB+TJS<2_nCKY|nK>$?VLucZ|56k+ z0U9}4*gIL++5QzAOvS|7l;p3lCdMQtHU<{fB(^55Kx-2xClf~!1AF@{=sTDXHT1u1 zRV|#X|BfK{q3GmjU}38~q*C%BM*d4IYhY{UY+&}chKX&@Nb=VY5z}8Hk-tX%5t2mJ z!sc(eih&a?2@?~EoPi?=Gb0lR2{RKn3o|zh6A29?6C>k!P_7CX7!H$#h=`(;hzNB2W)*8%=QHnxA8lR{5XIdXdN;1z_ zS`tkfHA$Gc?;Ypp`PuvZ{JLYJHD^Eby7{=G{mx9m>X$b%7(wL2hQ2Q(9T>R3!IxI= zr#AY^XZM-}FmO%q&#@4kZ4&0y*-=rS{YG;3eN%Eoz?OYF5|w7=_ywBr12RcMmr4< z`^a7t=%A9@n#2})Xs{}EvpNO(Q^3FZHQMv(nkWzIA{E>eOreQ#eUji$CZj3RJ#coV z_sVTrURRUYKn#J!d9nAbkffFGIW$zzmnMRbM~WYEM&P#}ily>0cd}*jPUV5rqE_khDQT{ySX zwy4F@O=$iePO$#yX>p5O+KpCvub~1}B}?C<%jp*jOrt=izEu54CPQC$x2}rU%?QZQ zcjz>(moHuID|=`U#mMiABEF*c1;vw9ljsKvU9et@HMPaN;*pfE5nK$_km%KH+wJSk zz3gW12f2X;^U~kE6R}2#_o5BOYapl+$yU+%5|LIpC^VmP5PIJopUr6B*VfsO-%lp8 zGrwnkw}=UP2Bk4Ql;7IXK)o}GXJ5>`fYJxQ7_-$vEQOy4vy+}f=W=%8-=u(3MRXDc z+g9XHG#%e|RqIF%X8nApyHI1^v|UHKx9)2!bPuLjwY0wfKFC`QHVfBfyZl0&M#9mC z*azm8c!(+=zL;dwYUBsC;|H~lY3+v(1E%y_;7SnJ986aqa@3E_9;|YMk#~!q1Z>X> zqt7pa1ia9X)gD#{TtkTI8$?qVpFJ_Fzxo9RFSPdtrW-_6gasosR+mCGk`M}3egF;$ zdnhzoz!wsCNzCcsND}x#B*&m=!F5Fv45WU+;#`bxge{*ig?A@)OTaCIT5^33*jQo5 zgavZhAkl=v^hNDS15ue_)B=fm2sZsV124n_N%B#OQAk zXvx9jKMh6hh)9#F#X(70?f4X8#|QHI%Zi(lM#QQOio0b4$S7m42h}j3`u(=Vq`IwU zAa_Hr1cP$rbI0>4bB7h3OI&7UX1`d1H-r@l1M?{+kIYr-;g|8fF|z!|g;R2^rW7{3 zS)$&;y7g0;$Z#;-04;`IOjD`ARIgDRS@WS@bdJ!DfUAU^l%ev$oY+ zvj7WwR$*2T))0$)^IG#V3lEDu3y1oidZ>E0W%T;ydc^wP`Vl7tCr77wCvd0z1L}j8 z1Ji?=o1Po-o9vt7!-zxTnNBl7W*9~sMmNSx!{6fg`lOWAgE}mfSfm; zU#Y0lTv&8lid=kIq_15w^Bjpb#5QX(5g69%dJFW<{t+kgqxT1S+BVU^H_8B&%$aDG z^t#l#3}9MBh83{}qXyD~QKh@BsjaRp;7s<+^h}EgipYkDOyTPUdG=C^Cj|=HFq&wXSD24fePOzBu5sK>HO9}xY}G*3pR<_D4q)d)I>h6xQR zQz@0o9X8d5GfOo~yQ_;S?uJTd4_8wcltmqJ&B?RXr+0j>_@1y_)>7+{`owo@ho_9^ zgNKR7l1`QmId+_W-tf?H@jd7}`f}T{M17To!okJihI6=6k<(`+SXFf?B{?Ge~HF{%;HM3qJ3JSh*B?* zs_ox>BIwSn&y1qs*U;NN+Fu{v9_7hsia$>iP|Vda!vbdWJg=4~(b{ zXX;1oC$8erJ^!8OQP39H{^jS6tA+ldXqv8;=f|XV|7_MDBrR&E64zhnc8pf$ zRIE-QE0lzR%? zId}rzt9c8TB`W20r84d1n`uXN&l5>G3(hpo3mu9cN-G7cDhuV)+Mwe3g~h5R5N|Ha z|-@#MHZ>Af~EA8bbt?kThvGcz5 zwQR*~H%<%AB|Z~@+r9RI=Vs(QV)h~h-@>QV+pv9=$H*7inTktm&^|;?@qWPm{62ce zr1#J>^;5%M##z(Z=aits^TKm&fpNN8x@3AP`Ubic+L(8Qhvts>mxxo1rLrT-f%NO; z;@blJ#i)_aejg6obh~Jq&(=1dx1}DkRKZ{YFboV}K8c?Mcj3T9h{1MdTg|H40|Fak z2v)S}s5#*WoM;Z%1MnS)q=H5T!*aQ&3~;1IHLT&anCPQk5c+Y4Wy_S048F5-fAVG{ z@7o#nN=eEbOKOkYrb&TmVvAw0g9Lo>t?1I~M#$6IB#T3v!Z+mTtCHH0ERv#-9vBuK z79SKF9Qa0{vRd_}AX43@T)8~GOk9;?9%WY4T;8I=0{b{~>UIt|xxgOFXw1@sYlGvv zazC__b%JlZacpL3#_w#AmHi?EPK)HQWJ>JEl3 zdp&FF$6P`}*Ez)z-Eo0@{SD&v$h{r%1A!=d1?4dv%$!c2ZE@g`{b7t_8Qi6GLdJR%TKTY@K)X2<-NSplSYKGZXr%e}VH`N3Mxr=xxqA->rvtg|#fB!>ZSZq~udH7mi>g(w&!72c zWdUzE*N2mld$a>5NBeorN00D;mkvDN?dQgZ>PHddDd)rKtHtn_s>r!tw--_UV+GpU zJh{a(+x6d z<;rx^u*}J|ytOor?N=0VQ{hX6q_~ove zfH}X_ToB`&mVJUXA*LZYgxCuVq zcW!5{sJDFC7L#B*)0dwzTDwbfDbK*7s*3%o-3Y7$9p?@#9k<4kw%^xJvapq^6{8ia zRa-i{zcSjJuxw{QN^Qq(3~f)!a?UosYbhSq5P*Uwh?TGRA*5ptG4%C2jmeE`-m8o2 zaL?u0(J5J3x?>ZT*`O18cZXk;RUF0Vj=pz-XCt-UPa0VwRUrZ~6*0=~o45&{R-9)q z(X4TNOU!J~{s!Oo3*L(})1sGlxw;>F0n{CF44IGJjf?F%)$wiVEk4_>_vemXwGu#42XTiWAoRuW>*Xtp3*goJ$Db))(l6w!^qFM&)XY@rBwy+8R9AJqM95T> zm1{+YMero|he}4;;t`Vz;%QPil5>wA15fo>?TG71jZB%CbE3#B4uP5(naV$Vvp?vRb z5~S9?ub!o-qQ;}zq{T3;zu>kdBsOEuaug>F-@*3l*Y4#D`k!J;!Vqo+r`>MUU!Bhq zF86Y=KB6)g&xNQEW8!WJ{h7b zn9%P<>>;xm3``E?B?Ar&n#~Ud2Wpaq4s2=sHHuiX3!%@C-K+KnqFA3n8L_2X0!Hv8 zmf08)byGzjd=>^#LEB{Tj~1ewTTL39D0l9f546G01v zNCa14bJ$YfvY|{hzVV$gCMV=LHix*a$XlXtNWQ;vSZ%tre_8VPtd^iZfki3vK`!C+ zv9?kCVg5mRfl5I&35Q@a9D6ggC$#rkgqqk(%u7j203gBs&i=_3+~(efPY-$zP1kcW zLk395Pfs5#T2sE~r00Ai74usWStGTNMvsQF8uvjqb#Y#POqgk$NIEnIkbVmNWq za$;3!U+LBy!dySAIjc|iBQWQVJd3Ag;nwkn0WXt9mNlG%zvH|_s=BmkNeGA!FCv3U z<6uRP&#mpqQ^7Y6zAt$wdOo^Ic2ZUi+VI;J+R9t(U9ugM=xDxn=XCpun%aa~Yb~QC#h<%}HO)W2OWbx!M_KY=$E4)Vu$9Mi zQshr%;1%{qHQR5vJju*>?^WK8*yhRBj)f@1OxQ3_IRI+jE!XAgZOO+S);~5OQbOKh z4WV9}f)gXuZSn-}b331%%&7-iHjWpH zyxmrs;m)J^op~8wpl#9F12Pl|Y~NhPqXNjAD#R^9%!P2my~)3!LkPh^jdV@@lySD&HtNsuQyVnDMJHtFk>o#Lp-|CGT1!g`@HqniKhm;EFf%WZuoVTX(j1 zjU|ThXl!d+cJz+$b|1+enHKqpC|{5pYndQAtePv`)B3A41vk~+7;M@ii-X;El7dO* zTbzE5rf)I_7lp~Gm*A1=vVVjKE;O@QZM5#!iRR?;IF9f3FX@V#f|o=1(iA`w8_Z^o z-m;3b(A6JhpxOC#1*;3++-H=zmkNsZQ^D53grCukm67{;46_~6$e#`zg{#=grc<9gvq7rWUVxz3(E8N%K_#We?sRL zO#sr+9CPKb_B2k0@oY&kz@!x?tAWA znK{kxzXXGG7dN=#Rm`n^yNN<&8ldHS7~RAOgwMqsM+-O}-KTAdW)uR3^r%Gk<&^Pf zjOo`0H-<;Y4F@}7d%b>sQ{e90EPHFHBs<>f#;2#S8|EG9R2N_CQ8igZ?a&6;=&>ka zD=Ew=z6cgrRC85-Uhvqi5qh4Td64g}+@B}_4Bm|1Bq2N?Q6m}z59onB3wY-lE8i*& zlr4_tp*s%iW2{)t>Ii{b7h2?dRvR26pErXhKz8r;x}vmt0OjuRmfF2|I<@TO$BJCJEu07DA zrO1@%+uGU@J@$%{&>Q#tzkc23|M~^$zc4UD@WXmvJLl%93C8kkTeq3r}==_jO`3f=-q7WKPU+>FkUzAk5d~HCj$~U8*5u2 zw;LbXKQy>M&j0FWAS3yQijx%|nWmf~iHMz}2?-lLD?K9_KO6}O39qBEDYvqy_Pqj*LT~42#=ykI#l^tL%)rb{_n|=tbhmXfaHF#YlK<`GKmGg*Cqwd= zUjswCj~fOuvcCfT^Yb6$w6XtZAY0&np!&ea;AUXY@Im%4{BK6aM*p<2cXqV?$Iy(8 z7)-29Y)ovOfFE{D|Erz7xt)_8(A@6-5b~emzXSgxFMki0_anL7a(2cRrtYF2j1~W1 z1P>h}3mp@a>VMKaybS+C=fA-I!}=eLk)5Neot-uR|Kzj&w*6O)|IOIs|3CCU%>UN; z7i(i9ZsY%A$o>V=2e5zCT*%t#zxV#9z}n)kxxj7xL4xs-xzQP$m>M`+JCX7K-v~Bd zhQCT~ZSmi|{@wfEgYh!_A4kXg&suQ*%`Ec&KeLLw4FBfqU-I)`vcIzXcMgsJxB7mt zc-)MP|LW{t4gSO9-zfiO`u`&dfA@YYE`GR=O8@6V<%dh`bFcsd69khI6;gErKgojj zQdL`i_f5OelMMReR0t~+9?q&O3a->wyLiFC(2;MYHF89M9AToX5*;QOQc_s>sBrwtqrkp=D@&S`Fj_q9BO$-R8Q*>4zSo4!1TY&|Ik5@2 zErW)DjRk{^?ZOq)H?z3Koy#6yPpuE_8efMTR`~Qq@E^?{3WYHf+(sW=(hu_ATRMp# zgdn<~Tk8KJ8;AVF3YH1mKFI!8kpIyH(IL&j%s-(ZC;Sh=U*ky=^n>za$-`cPLL&kH zpUpe~3=vEYY|G$(3O-ah(P1XR?7!ZSt^7Us|Nbq9k_(;-E66MRpVNP(F!LoMQe6zN}pe3^s<@BA8l{l7(Il_s$s z|MUO}*^}swqGq*j$x4UpLf|iN0CoYZAX*jEVS_H6rjZ@*U!2m$dDZXXzeJ$FELvI6Pfbg7T zlBx*oTM*wq!~24zVHv`?(i=J|DGJ?yKjOf zrt1vRBJjjfg4)*zAIA8FqEXj@HVjg-i_ZT{;iX;3OVH4D{TWa3GCK4FfnrG_zLZrY z7`2^5OMW1&W*Cv3cXYMVJhT$1S@P-iHMI4l$At$SZ*bCQP&B#~$KXfsa(>&f>y9_hW6T07$6#w;KI<5{{Z~-y z5zR0wOkS@ziTe`Pw-~=hr12MVa@#qEgU2>cie)YvZJFtot0QWfhEIvzg)8J$4V8>Z zJcmAo6^~d{@OF0ITD1NjNXY$TwOo4!CfZfpFZ>$48AJGgt`Dg9c-s(()f1%#hDxl9 z>{Lj}QSffZxWYmB*@31G-p+67*gq{M`lu9EGvg|}qoti)UPIr)19i#W5vQE7l6}?^y zo`&tx4^o!45tLZBnRgQB8wwoW-7V95m3>(^Hnh2h8cT{#@-^W6+u5QqCRQlZgDhtl z5xl!QXC~%*?Z=5$*U<>Uwn#xB0e1O}@e&=Awa>j391WhjFDFIk6L|`!vGvEO1naRm zX5{w0^=CT=C7i?p1K#Y0FF}$X&T{1WgPvW?DQ3OtKMpQm(AFAIOK|&+ozJzRFa||F z))L(peVB-g)EN|vFM6EnYXe4QDx4ctXXsz$Lb!u;k_){VM4K*+P*@sXp#Tb6e_Vzq znIWWkV9m)L3})e1ij;SD}^Xl(xWJl@?++0#jD}!<0f4t zRv2y98N66yS_)e!0??xvo0Xoi&&8*LAueDs8;W1dSl^ee-jg40PoduvvG_BW0Xi{k zP&%*NMf`5C2zy?}-dCv6r^CX6IlwsHJb_`P)4S9va-<#pCvEGrIpUy^&ZE$ym0#ms zo_pk+l4=|nOs=vLXEHhLt+pb>Ou_?qe%*^Fv^Lq3?FeISt_{ts#Z_G!hu0`7?Csu+11Xyd)V`_bY4%mNJyHQ`^Mi#bqRd<*OGC3j?naze$>fs* z30clNHraDuFNY-e6m0~;scy_wJW(jG?>8@svPw>fAm3(GlNHC)eyFueqOGE#X3}%J z+ds4z9d7v23#?wSHD(7JQC(DZs58&8Zo?HKHq%j|-Y@)t_sJ=uu(y8@GJktBQ}P0B6=OG?Z z^TGkEH1UqB^rO{^oOchfBHV&Kus>mto4a}#kwdmhfiQ|DB% z9q*@K3p$r)w}VuN(frt%QG!E;@m98=?Yg*{sr0ubryJbGwd@XFD|{cfi|;#T7X9QK zM@>w-LQGJly3N5dzHe|DcFl;x7M%K5x17&^d>$;uWH{9;&?5W0e0hU>$e(%ux*#=^ zl2K3u@!P)i4tDDx6bp4-lhJd#?Q%xWMg4HVEGs_Ynzje;G?xx`Ix|x@T${4Cygmb9o^~+_JWs>~Jv$)t zRx(;q=rFt^SBxEsGDJ76Pu5`}*Xjryu#p1nG-GwFOlSAbBo6nCU^>jn0`dclry7}6 zy>2x!-OlLb(0XqcVja(euo$=wi_;;jVmm0P4qiijA4~)Lf=9Af ztD1ZxS3}=v*V*5aJ zzD(HP+&ypJWZFwFcJTO!P?A0#YVfrnt`sUkC1%_CL~qBujh}A$IS275U6y8o(1t;= zDkq@MTx~<-F^Cas8qxcehvuJX!?zc+388rF*p|6MS)jcD?{B|l#u@AyGme)B<auiS z01@9wzL*OavR-!>Ts+oX1djSqMf_Z08ybxOGX$pGHa zO!+ShXRml-pp#&QEtoGaDtdkOteY?=x9q1(i+DO9Jogfd zJtB+ubBs7B?^F$Q1>$8fYiWBS%xOs|dUL`zIv}$dKi~y;A3k zJytDsz==)!`m{5M#$fAJ7xtIlH5C%aS_*t@B^W)O_ncqa-?(lXxYIM>f#XW5UiUv; zY*R(E;4*G0MHkz*lBPAkTC+3=0Ns;LIOyvZE)_5pP%Xp{TNa#$JAe2!COP9!;6BGT zm{K5FV<8v+_Q$#0sZ+mSff2pKG|{VUu3!UfnX6OePt$kjhP^6vc#`|X-E=sPA$q=u zL0Sb#J^7d3-DnA5lhsdfMrt==G0j_gLs%)gYa%}v1-gu}4z=fU%OC_nBU=p{ZQsk67M+tk1f?lb?Ry^Hi77TDWR?}jfo0gLYLHb1PB@+UcWuvt^<+r?V(99(bg z+<|km5x&vDE4vOX+9UZ`)7N1g=lg8{M`U`Jq!PuDMsRIz4QJz818fR zFYCaDf^Zfmnf6kbmRyXd)Xy@Czs>m_#h&^+-w$S?e!gh+8oG(98H`Y*isSx#n67UCfR&MLrK@*xYGNXwK`3 z$0gxf;`O7-#hTq^4V!++Lns1Z20!|TfAukzGnccvioLHJiMs2>tkO_^7suxfT_T#g zy`tZl@n!e$VQn>V7Pp!$F+*8fL1qK-8sQ$sAH)yIOdj8-1^hZz>@O4?|Qk)T_wX+P3*9UW7TH_fEBN?GJNAPg&vK8A-oZg)7~^IYgAmW4v4D>0p>PmSI3*h%aR~ zaX^Q^{q~K)eHvu-jy!crwh!w|7Kf7ddzX2;Z3YOG9LzN>vk(FP&E!teDIuim za-ZLP@@lwqY+5{f&Octw(e?$%Eb+{oMC9~ zjMVMQe(b^FD)yAXfwE^{(S2m#4ubOSj{J|@$q$@nfjunke7O+*?z_(l!{hxIpf(KH zM}WcW`+5=K==%UsBrYEgY%Ray9{<8k*TlV7ScDxXe($>*VaMBbYl+u0R)z0Myu3RO z4tte&J`QySR|7HI@Cna0EP~{v$m3pd%~MlEgBu86ee=o_iihem(vsiD9Qrd@4~+d* zODuDQ?3_XmdZTxFJ*A-Y9eAhIqfCj4y|(0#ZW>~-S}`k0|Wx?Z-2+wTm-b^T3)9QTbk%L$0er8Wc&) z{h9{3mnNqyh*o57>FT9fHT%a%V~?+w^x*;)iQ?LEJ8EWLYn*i4KDSx_1|-cykOQSBODb|>`D1m_mI_8???Je8Z5AAUkAo3n`Tz*~PdNg%^Fc z6&CmLnkN%ccIn(^idQnh#T^NKi`8yhENV|8gA2)-EBr||BKwf{Cp4Rks}&~?-7O^0 z&FPFtLbvbe+7?CK=b>qd8i=HB+12!2Ke6lWWw}XGfg?>P<$kW6rQ_W30`?D=cX_R=;xBNC!WQ|HCYpL ztue#dI#!L2%t)5ONggXYfgK!VrZsNK-fi%u#J+{@@w27wcrE%9r@cx1c0Xg@^y z#kC_nL`{a}IfcJ|7w>8yzdP2Bw&N-!yl)sPq%a4)&u02+EB?7*##J0lu#h>LV8dy$ zb0~i)cbfA|Dmn|<0789ADAsD@=YN41b{UjPqN-=5oCY|3c>Zzpn)_B_?{kNn z8S5I@(;zT-yBRVlAs~{9&+w;coKD1b1XlI&*S2mCiavG{{>Sr@D3rmL(`6`$xpv0; zyHdohEHXTIQ=HjZaFd5dq$2L!ne)XQXt_4f@%2F?;Y1;N3ES{%U8}6;4B>(u^=AOp zQ)M0t)w}eayakvd@VT7BC-)ah`Q8c@xnDYQ(c5fexQg%Ct5dE*D6besq%AY^(=7Dz zh-}xx64pIv2$@VrJV=q2J_`SSBv^T;7uBm{TdYtItGK4^g>qO%nO<6>;m)F5=bjg` zbiL9%ad#QLK^n?Cjms`izrnIt*@suV>jbl@SA6Y~j*(uwkS^8O%P4O2+7t8Z9Aaax z)5V0bUNsU zWLJEysrdk?&eC@`Wb)#y2t^=~qst3Sf!dHt!Nr+y7Q3KLEg&VEs4}`OsU+#RO+CSw z{_EQ@?2X(p>`Ywy;EGw?#D<|j^^RJcsp{*N5Raqkr2Yumv*}4D|7QWOMhIu-Uj~DG z3xb&aRyGr-G(afayi{daJW)h)g)`+EnSK%Mn!PntUBA6U-Tzmt5H2m*rtaU)D7f5 z*tuGqTQ!&<0oeMPpPQNl@wJ@jM4JErOD%|8opn@ctg)V&8#+f;ygY2#>7Ubf>@K!i zXM}s?$*v^c^tK;Vh1=KM4(sXdG+#E!-1!ShHy@K9ZW5xvY~13#8mFUkPb7<3Kg)iD zn%rT-bHp6yXs1eXzwx4%^5jKg^k`G}`{dT3*I8cQTW2uL8{nJGB^Mf~tqST(_||V2 zF=#XLMqj{V#qwMUCxEC6ZCHc%)P6t7`^Q=mpknEsHzXC_Bs!HgzVNfVeS@93HtrET zo!u4TBlB+GgzZvYe;GDFqJ*LDTU~cARQO2A+&41vCQI6y%IQnt&B3WY^>NeLlAzQw z7g7bRs;idCQ86;BWDrB;@B3c6y9~)R4kXkW%DgQr87l+>#E{|DA_c&{^H^0AHC<5@ zd|Zkx(AO4%=~hQV7p}oY*XHLqm_A$LXL(L->T=;XHY5F6Ctr6`0MHi#{ANJ`XnaTg zrj=no{m^;9|0I5ccT>0~2AUd-h~pJ*qrd9xE2FWk5e2-WR(je0CYO?FyvaGn`Ly*u7L{k zdxNdPatzUTQz|1aiUyj0Rnx)3P5zdTk3%S zS@_Gy6RgCl&zfXTxp$+t(N?Zbz*-dCGC#zDg@-8ci_`a+p(E5iP0i*@U^)F|sw$J} zyuSw;Mbo=b`FLsD9!wYOm&tyZlEZle@&PyNhN}mq9B1`)UPJ^BIX;#|F4b&k(k)h1 z)22h2RSRS}e8QW`x2Mw?`tSH^Br&k($c=O4HpmL?@l}NyR-Z~xeODSA4WgQG!J{Ma zrSB!)ztZ=N4;M%u8#Vk$RrsDbQ0wa*Wb2z26w9SRCQ4YoOb6s%rNI+|Ul-{S!{WGJ zUZvFvT7?v;ukiZyOV2uC=jP4h2SRaE5TZx2`hz|ER}E0;pg zFNG#Cge30$A^o;T5qbE(GAI zOj{jexuDx5;~UW@a=B$Q2|esEVv)G`-THJmq~<&rU@+--Y~Q~;6weNW>TuLirDesd zS{V@?UkVkIO*2!@FCk^Z_%de(xkJ&XtJ|VeYzLgR4h$YT+Oq-(=8bq@>}6Y?J%2M` zfM>UT!fF5plNr91mmulDsoX9tW20CH%w>(H$SK(pxq%lU`-*mjVyM3SD)lU;b7k@E ze-^~;2q;>O+UOn8FFQgM=r&^sZcgcbTvvM=*C-)ohj(D85Pb!ukSH<{J?Ayh9abIJc5z4`iY=5zbLWN29B1a>3D_n|j|1*LIK9`~wP4Jj6 z-ahuDIm|5hG(GBd#N(mu>qH~E(3L!9Mdr)S+u~&&3-uej< z(ixaeJ$r?mwHj|WL3bE}XKxBst#JcZ;U`Voi#eVOTfoZOSBA3`a^|UkVvkql=i=m} zUmg3mY`e;lk)x4H!=1P$47xF&Rt#k~@5yfqcru(Fzw4+~plRK*9!QX71v%F(c;K#L z9Nj88J6`tc*m~C_+TnxV5xjC*Bv#4azo4_K#$p%WwBmb>EAbS*Qc9;&_fm0IgkvI4 z2yJfp4yAmi7s{u#|M~gx%lBQ7vFJ3F!tM6%zAdz` zc#qurPu7(gmoiPcKh4~#cXiDavGYxndWbAuRNB3SRRDFG%atGPk=fF(2S+|j6M36L z`W_mzIUvud{2}&SQHD2 zX%X9ELkIjMzhSon)viJzorrlLymu$C;1)VJ{=oOR+}ykcj}q7^L29t7K2YxZPl<72*T24Sh~-efKG_tr!6eapp*ddu_$?si=6vHcvpoLd`2n zNj|;LLGrhTYbD_;IOPnsCbq*H#vfvA61N?gzKN`8@_ROC+ui(~dEAoMHKS0RY=oR) z-bCzMLG$+w)Ak9ruQV}nU1{PQs)@eZD@pQL_lq(}5`SSIu=T zHLcsvjrYFVLr(zLd(M>oAE)jGCP1$F?t4jZ8TtLjzg~l><)f506#rW>c zI>Im4#RW3&^QJ`}sAk>)v5&r0vyFNn^PMZw(>>PWz2Q7tJ_Ij~OsS{?*zJ6wmXJ@y zU&K@J$kXku<)Q*c)y6 z%lK%U>%^oh+DpKQ!E*cDrSdYKLoaksQ*kQB&h|(HZkCl^Zr-^$PJoD#ucLq^TZ%p( zjK#vF{VefPIQMav`S#(hd%M|+#PY#$P1INtuwF;xd?fTIHz;MK_-n5cWln{Kn~`jw z9q8MDd+vCY8y834qAKNnu$4#uOz{U(;;F#g#P*)`)5fd}j>w(qQy}nkNQChWIL*6} z!Hv<8x0SE!1IeZ}9Mni*Ks&y60lvko*S+85<>x1aTC&un<(gBMv;@)p!^4uN!Llsc zb_rPeI8mjNxM`BPbe1GP@D=;rcYx|&Y zayS*Pda~%B8Q<&eyV#%Cqs5AS_O7^gCbS}Lp8b}Ca_7Je;>*zvE);EMuTX*gnHrjc zoUi>Z!pZJl=1nsA)9EZ;Fy%`uHGKQi@WPlpTghkTIXtTIyi2oS>0=(Jc+*heyZo^Z z-hKMlNh)42RThsyX%KkWnW-21nq-o&R+cL6fNfi@7VeR;=&jo!=L5zF8K4FGTgFJ3 zLUr4PAt5zVBB?6>4EpN@J>>ZsWkl@UpkaV_J+?$h{JLb4l94gy^)BaSt5z*cw3mt& z0vNafdF)H~S5+bgu`WOV5_gG6D1g>TEK%K%ewYOWE?(kNXq%o-3B8f-3V-2 zVVrFb&JZh`F%(?86GqoZI~|`j?k0#@8cW%&n()Qe*wkj8JEo!ErlA`aqoiYir!hk{ zMUe>DMx)R&sAkC%g+s%EK1x%|O;E!ezH_p>fFbHzYrC@SqW_P*w}7o{*|r5uF*7s9 z%*+t8W5*CPGc&WdnK3cO%*@Qp3^6k^Gk)jYcke$rC#{ycrB-+AN!!xed%9>%ShH%3 zsTTVh))-#lK>`}27`jhPda+kmfS zV8JP53_qIL_b1c#ML^#s_-D;9!-}}WuX%=Uez*=IdXnSX$Q;>_v6*_w6qWr5X>z59 z8WEHttMTcwo+Y%8>(s}ZmvmpnhPZ%ZVgz>aakXElnD{GH<+w4hK1+gpoX`TB&7{zr zEyJ9I@Iqo5_+BeEt9FkOo?d2753GXli(FO%<0H-bAwx5`rUrRbQ6u(&(6*Uo$ngmI zxXxs74}-p`?t55vFYhR!VG=-VuETT6l9Q?`m&t`D8seSt#zpN@mjW`OiskZs`GoyL zN3z-%)&CITS|Z-*W~;L#u|dCBev97k-zDRTQDsUu|H{#oq38$7@I{`XG? z%rBlFj001$_#cRVEI{YDf8yKG{o)+bO$=HP|ADGE0n}mt&xX9gntP{oOYHe{x@* zx#XXY4i9yhl4RA@my&w&O8!1j0T5$MU~O&f`=_UFoqe9I!*?U&65^-WX)h`&Vh;X{ z^-n%+6QoZ@MuxOL*gi`hH0$N~e~jrb7puY<%m+oOeLw>B0Bf#Z%70t&U-+uT6G;v~ zrS*Z<3q}4A13pgJy@#Wk6g>MsgcX5&qIXVn{s9&A=RXvsC4UzVFEEn-Axb!4zt`&U zqbw`qpEu(Fev`HCV_fpARK;ITw5$_KDptb}hspI`rQGSFf^`{) z*~>c0{;~m@HvI*7f{U}EgM|iMBtBR8Wi%Mo$XbZ#O*=G~ejh z3O>|m!Q(Tj0`5uFfO>vcJ#UePC|+Mm_W<36$heOu(v*b`8K&fCIsKx5PJT$D4J62O zJrwoSMl}Q0Oleh4*fvOLcu^tSBU!nx{-I{3-_!X8iHVW6_rwj$Xhcj^1GewP1Z*(7 z1VM3f)s^*yO-%!gR4!m(#Z(%axo~JVSqMsmR>#*!s%fyh#o&Y|Ov@sAf1`;DxFg%l z1};_aI+aSsMsn_D9d96AYMFh#3=rOu2iUeQ$;Fe>x^BNOnjLa@DBK)QXGM5{$O!`~kwI*6;EnmsU3#N$Yv(no2 z^i>=M)?%YtjTTjv3lR<^92%2q3-l1w*6Z}fkg~*&&FS7Y z7yDL_Mq;B>u9DFN*6+pXGk-3S2;*cn)NZW;9SDo#Eh|JD8flzC%(W14sU1X;tgH+8 zM62*v4Spk%qeID^6p{V#3G%9_S(X7@n*(Yv53#4IQG0*F_WN&-el9%Va<`jXaJL)R zCE4dG`+^5u2*g=}SLRdUZO8AltH8S!v3zedMa&4=K?=7MS4TMOSm8Vib& zB$yel0q>qz2yWP8D+bPlj-yT!Td2wUs<`b!6S+533|al_MHutV7+% zKS}y(!7)Xb8VZ&?g}DG%$@^&j^Jko~{v5)SoL-4{;Vez4JBz569g-fLDDL6~EmIVR z1TG>rH&Az94v}Cp)fbNE7i?TQ*-*aqBOG6UV0{~>bSt%_%}N9XBc16*6sFo-^cYWi z0kw3KL`kNL?pp#mlahEaA8`(I)WFoA-PxIhG;J8)HeYI)$_0{}w8I?$s$YK?|B9Jkq zj?}5qK#MJ!9QwL7`F_U0Q6b|Wo=!~MB%HlQi5EUAKBRoh~%tSN$b7*ypyzECU zjJ7T-!ZFUdZ*65XC`)U$w-0S>xp z)0#&iMC5q?Onouv1mfc-D;(+AFpDZ9;nH%c++eBB1^qt4J}0_{^L4u49vTj)KD#Cy zc%mvXWBZzz}!q#)#}0ZpF6vX9NmI~Jwa&$xO<2lVp zEQUO0bF_jRT{1K~2SrvE(-yIu^WO-Il1Qe0s<%yq!nC?JX+Aj9wzo||rXy7&vFrht z;_b%4$hK^H$CtF35J)|>0Y7T{XB1ln%B-?)=Dh(?DerZkbv19$`*qe9V`S`unm;~k z#$QuXy;w5Do(VWUjt&59{c0Bp?@4dH*X9=>(`<8dTa4-a7{>(*`2fsj?8d6-%hV6( zAEqFFW<5ViBN;K%A?pvbGnB3va-L2>01JJWyIZ-Ucvk z{VB7+{$|)YV53IcC#y>BUL;h^SH9&bwW*4SVh#4~R0waVUGl5FDf}h0$RI+npx_;t zzvKdu7a8v3F0&j}n7=XoM{@t{mUW=Em5P41(|ZyY7O;&A%f>CZVpbG<`vrdmRmyI0#EzH%l6CgIZ#i)cknaQXCEk8UHHCpjTT6 z^I@LY5IvSsU!dFOxtW#2p=4l+9S*^qkvt0Tr`J;&??BmeGg&Ef7&bwY_cq@q9-@Wl z!UgYqrE)k9@*x#;&KIVigf!?Y@+CB0s{th~X8z>YQ>Z7GExhwhOW#&$M5$>#D?X?D zW-LN)hZuJUo*}3gTc(sYZsuHz6xI?H+3K7aGdU6=IDXZ#8`pwFC=gZMkc%yzp40F_ z(ep1Tf)lX#Oy3h?E~KcNCzU!+`HBVmTL!VN3Dy)2;ca(QuI|rE&?dj?>-a_ zTMOvqikv{F*|T>&g<|y0n3wFZpY>bN1Xe-yim+Sr`7WrGr7}ZF=%HPp8Yrj)yhjDY z(-y-Tjm8P%;2px6y$_h|EkRB^w?T^YNiQ&$=7A>m<0ygB!oE(z$C9nY=R1$Q6v`w| z8%oWZ0y5#a$wtaWFwTIoh>SaYXHxK<0+yG`t!esbz&V4NTW+H!b%zTvjw>0c8C6e5 zw5z}{0X{~)E9}SI2qCRWKn%Ioho$y0)Vr5c%vd&TUOkYVW$Zv*-mA(ZaU`ZX04ab- z9NpUclP5Bc3yz8!eP6g}UO8A#dW5YL1W1f~z}YCv+(wv ze9y#sV7cL)JxHxAoQKdJ7e9Bi$`m5Oi!L1*}Y^%s3%ppyL?+N}A zE4}Lx&r68h!u%~M#mbiuz2vdq_q|;1X-5`e5FpNJDu!U?tuP%%Btae<+hZiyPDsf2 z0-f`Wd{(VJEV^Nhk1<#MhS2u;3?)}SVwj4xm;Z!V02b&oR5`n9?Bt>|!KcnK8_St? zuXHI|#DLs|%r@MBott-L*RHsOwHY_T|HhR+>ze;8d$)g-cn<0d+wm}>p_6a7xqv6< zrx~a8ZI)8YT`4TxpRhoa=SQTFtX56Fr3YvQ70IWfJHC6mLzLi6BAqoiD6yrF0<%OM zRBF~abl<(Ip;^@x34-&z-{}GRp92FsCn2hQyTx_ePQA(MWi+%;>Ni(o3ev8D1k0O{ zJ9$g-<|-1w8FR@+sP96e<@R^6)D8AEsk;@7A1q}v=(41j-*#Xp^$tr8hNCRH`@Zv= z#O*(gNY8M&hJ}@Y7M(f| zGo0)|c|R=^A&E)Q%i#`udnc+Z$Nq_h0c5|(rrDH^J23t3HQbk&6)#JvSy+yW&leXAKdRqK-6n)!1MeZ<6g!bByu}>+ z<3}mc<>Ir9>yrez+EdfmA?=-&VnpV~`lpdc6~?-OMK{RckgB4CN59j0P-4Aaj&C7d z7L1WO^RQy4(@ha@@iH4CV8M3OVkB7xTmS}NkuAmIYrvCG;QKs4T4VUd9NJbxV^!1d z3#U>bq?!`$0ECk@7tD?9m-)?Ib1DTL&XfQo`mok$qZdmt^>>1|rZ7d)H z3a`H#InN-1gt-un~_eHk)6lEbkVEgroj3#W8Kw$Kc zzLfHY|I<0YJI{GHzg(43prR>8w-kz9VZeu*PI6ri;xl#Mfu-Bv%q_JUvq_2e|$XopsIBC%UaKw>J^fb*UlB4X4`4&pY!q+x|s-!<~qa11ZU<5twZ>jfqY z!}oz_z)ma*>;Bh=NAG}MAK$x+Fs&mi6^rkTZsj508{=<)pI=}pxa<@z-HeLq=QB#{ zC_o<}4BUjL78Y6JL&@k+#nSgBH`)FYt>1S8^Z3M@*W%H;CyVRIcs?ol`cB4up*c6l1jmi zL2Oqvl4?yg6Y|tf(eAS;2%s{{m5DllOulx0K<>DzD$qq2v}%EU%~DQcZu_(oNGSYf znWa>1+M7&q#)jwht`(|iiX@y;4i*O1{gaOo0~#-<)C^io*nItS9ru}1j^YhCL|vtA zbK--wushZsAn6x=!V)Woli7qehdlRfL}9PI0IW-`BLsr2Pm+sT5eg;T3e9i)6fb;0 zoqL~o4TEHjWBs6X-#0i7>o1gu4N747q3cT;Fvl57wlTm;9R;+UBylv@eh7UUcz&_k zU{D?k_UuCvj%omF#hxMEQ}Y1yJcKf}p22u%*J}v5{`)KdM%dQPZaH~3slEvJjpOP~ z!+3uwb;SC|@Kkpl@d!|=NcH8-+A0u3pEg9?(XpN=eo;cs7U+OHVc5?Hl%cnL$FH0A zvG90QVL-E4AK4*%c*QdF#k&2!Xhw8QTtN_7Z}A z`)c2YT+#>YZOPf&@Xi{8cs|_A8Qu`S3I)aDri1oPJP4(mSnlcY9OSf>az2NC@uz>(M z;reCKD%3|SeIz)u(Q=((5PLq}ysV`+w9w{9;#ht?tjt?12OMIIRUJjaXPVF)%}>{U z<*-(p7|NLz(?H)4Z@RcCypHP&kh%p2o8uhVwE;JK>Ie)eD3L{;CTyOiW{v#&h1;?d-T zB!-65k>Pfm#%m4XjqvLZAQqnd2z)s*`UGNIJ{U%}YRXRKNqeXkY=g89g4RD$@Hm;E z^Zo*(fHNLK=&bOPG;nWc7zTaIzeIL_3S!oyN<0gC7j$jNA&~x^BfyWJ+1{R&iEPSk z@x+>tDGtjsG_Uu4$f=-kEdyWQ#%F|itx+CzySsUNJiZ%a#X_mu6$TOeJ2k zs-_$OVYs@%8K07sHR9nPw6*=5v!#Lj;CNW=iPelXPe{jnZ8CiP^Ppr8xZ19(z{hd? z>X4xaVH+gwz^a_*apmv^$79ua$N{|AFJkFY1>o4tz`Xrh;N4Nl6?fvmUJIoqUuF@b z3AHeIZEiDAkLMF2UX~mq;Oc04j3v$X$g?kp2zPPz_0XrK+0@OF7UjQ1_%&D2B7K!v zyqAj)ph(s!R>eOye8^twp+<7E!HC=)#LdiLm*&at7kKJWJNQm=q=k?(6>rv%cqf*GE) z!E^X`$1H^#86Lyj8Lc9kk$lff+0P6E%LaQ*qXpFUG*x>j6k#t5Xm;+WMwSJfuMY@( z5g8&!NR#Tj&&ja%=^&R*4a07GuuwS zrb^J(VMu{LfUzE{^AM^mQX4`}0Z*bsM9oMT{~D!At3!AKS2=QK(xRZ4MwVPYu)C;5 zSuXkoJbLr_S;WdyGXkTSzi9U!@S+L+O-!ac!>X;IkX3~*u0ZDFQbe`m$1*BrVnU5F zJlY~;2sW=kZD@Vl*Bz8vQb;_?#=k0KLJ`W}KjkpPvOjtXLBc59f9X-dEHi3Vj<7gW))UV&lm0-7-2Ov_G4|j3pEM(_G1Ot)c&F4yyb3$xJw` z)vWjQoP0ZgQkw6+h41qce4~kuABPMQpO0RHX%_xoixDbXu+JbpI8v$Xt6~yxXH~qv z{l=HmhY!KuPKn~a`tv4`ivrhU!4U_Axd#SaCWoW<@=?sApi1(l?bypVQPJ1LT!Kg! zZY?Vi%2l!XLg#T^5F*y4m2LMen28JkMCLDUlovq)7LCzL41;cu#dg*LgMUj@Qv)H_kfPGUQ#iK8JkRbvZ1~tQw?$kKl$9RGri0DzLl$rZU6X>GRh_JYv&;g{m1tsW0 z2_smcUk)O264@A193k36(9XC z5X}G1xF^!y0YDR(#gedplzxYmgWo|~Jg~H%f5KVZk>6ojUejv2zhjE;5aT}KFDM1k zMd=;<{ztPX67Nv$ZO&-Z-;v*6J@$iizy|d$FSmvu(yRSv*^ldK0>)E{+!4SXYinz~ zmVJNf83fY4R8x^mt3Ujv!_d#!pFcYdm@@0?Zey>Q{&dJo4H_`(WqB;XFLOG)I9nbI zXt5|;1^%~;=wHy311m^szry5Cx4@I%SM&et4*0Nre8-k>x(ww0)a}yu+k8HomZ|Xv z;Y8ps9S9}Tg#JMXEpfll`$gv1KPhN2`WKiF`Ca6<=j*?)cJKOk1$C&q2ipBXD1h@z zdw+%h{{l~(E4^#a#e7`$PpUN$`h~p_NumGM{r|1w)z9AGK-MQ%Lw^!liofff&3`cK z4|?xVhnfIdFXa_#{DUw9?p-($$e@b)2c@`Bzhn3LGQ597 z;MSx9px*VjuseSc{(nuG=jPp2D*ttRYJLcejg6nb91 z4oMxHkd5^DoUGUU&)U`kK!Xr6GX!fXz$ynT#e)6(K8XEpmP*^w#1`7!(Vq${1*_5B9+|CyaV;-407=E0ZeE##0zS8hc&P21o zjqxM;%F}gEMrJmn-8I8?$W;zp9UH)Y;YSR>g`Lgw3D3!r-&^Rz2Q|?zW2d|^JSLE1 zc$~OGk3FpQ0(sLY6szH3dXH97b}~lCSzCz!(G~c3p#gTT#dkl1nIP{$S~9F z4c4iW#|5tA>%9*s+__9K)i?Sr50l`>tL?y?t@vF-y>l5PCs^DGBV8@mG#Fi{&JZ$5 zLCsd}NZIns)MtI&N0s|NPnAtry&^KMnA8}f4rcD=SIr4cx)!f#?Qs+9MG{lQpE!$f zIx6}oy!^M5s7&B}#tu}?mqQ-D@98E>!pM_rgmEfs1b0%dcn^I=-8RrWTBJYUHIp2I zvL|y?Gwk9g>?y2W{b}pRc(y7zK}#s`y|Uz(Bl2`L2n{F2-K4v^eyedceJib!?aqZ{ z^=V5msJVWKmSpda&w*9+PU2HVJ5(;YeWi21Xo<(2=W$%jo$FLkB;(EOuCw5wt?}N{ z72}!eULBC1?FnAB%?796BrOQBF)$NgF_d1ZHN^4`Zh{*?DQ&*b^ai^jvgysSEJ z{pAcjGpb4lvtDm3XGxcz>k!_f&4A8g7g&>Qp`>dg6)RW*XVV74+R|$edihil?;fE~ z^DTC|63Us!uYXVadZ7LO+^A$YvUel|H09Fvzerhs4SHPPyq)1bvitelj&suuy`j=* z)B5tB=bmKZWNf7`UX7Yhl<$O0j%ln_6jM3Jc4*ANm{9N?@V zaKFVD)^dd_DlSG!<3QYt!1IeO2rR@yQzqi)hDo|~K2|}JdYxqIQ}zGhZK6tJ4G9h} zZdM@7&BR@Ii{E>pN3!`Pj)7Beg8(;zq8{e7RzXX1Bf=89cw=^fmjZtJ)b#_an9(}a zQ_sW804s;c{44}9YR(P&{7%x=n-dGirB)nk>i zS7fw{B>4UTAEw5ZZXzs@voD7WY23CUq>dO<`3OSctgT!x%&8l<;qvcN+ z!}6{lfY$Agb9j;%EM?E!xlYH4_H6o-LNfXRKNQXwbBH}x>~apmVHT3t`UuXvW+iNY z8Y^dahZ#6DWKtRTEN!;EmUuR(rw`ZhLPxb-8A8XQR+rNYoam{+ z)7Uf>hP1!rJ{jgH3=T!RICuIF;Hf=@&g+Y!L9dRcnry|FPOO>Fl7TbB6O#GQXC6;{ z8VkXfy zw+dSy#-(OgbE<*hTt(f$Nfhp0v94DOWHLR}{%udzDnL@`$FO{*8@jUe3w6~>@WxjP z=ifM09Y;_OMYgnCF?iC@LthX^OezJz0mHtI@%W*A>rh*aPA1wP$wa#qVgm@;o)N|R z(=5}iwP@1GlkZAaAAzKj?hwm(%K537+Pm##a=Od1EZxxoFBTx^UnD0}fj;fi?+mZg zST&jPJl;u)Y8XILT_UW1zc#MyOlyRMNq+&6M<2JCx#4si+7X{_#8N<0)*b25x_wlm zFK;bSvPRuO<%mPlF;{g!b{j-;pRQi*uiZQ8YaQng)s8yRm)wb+GtIAkNQJgvVbt5> zO69`!L@Bf5Mn3s5{^BKj*NK@6ujz%-hj0|Nea|6&w$(8!bAFuMbY*rUSn|U;Mv7>{ zvCIHw1`UVT1%wWt6Np!@nTRC=y!rKsNJ&Krek5|{arSa(DQc+-4FiAW8nE7!3LRg{pF?Cy~uv0d9<(v`8%!|OP)QS!g^ zFI|y$w@o|;?#x@J9I)JUP$o2FwYTpFilT1U#mp6s^*QkzL{rJU8u8pd-8nXjZ7loD z!g_(82N{?320q>N-)$~5m-kjrUK;wWjr5~^?cC3T?e(66U-4pfIEbE?Y=yF#tgGE-mx7&k83lYQTAVd zM}tZ4J*Es}?AVc>GTLj>R2vo@dz_0&%MFui#g)|lZYuEDi?DqzQrU0Y`rs);> zgwgS~76(o7z;wJ+r~f}6iTxe2M?Jl%CD^Lc3~61$YLx=!-~uP^Fh^adxgtDL}NAgy)~ zPSruCJh>^4|K+l2h9ayyPBBSN(a?WVCH(mr7k9N9jey=27vm_FB98hd@6AWrS!B5f z;$o~jp&6B;S;Rf&wPz)f@qlOK?PzKK`&nC%T5`K??=0pPqs1)c55NAjX*+9_s5ljP z;atstAaa%%ap#7tbl8$JUnJbx6^g?eT5I~)xdgSMkPUP7`x>qotd>7Y{b0e8&mZfk zWnYUVpHdzuanQu%L3p!K&5^~!W3VS;E0gNSOE{{L*Q~QV;}1*DkL>oXuWw2sSbKbK zD#A?$nLn_Y9>=uJF?)zFJ=;-k96`W8Xge7#>nP_Agm=o}`=Nd~UuiADtM70V{8CbR zH85St$GrE+8sy$oJ95dZQkfd3lymN62a`E9oGJUXb+|eqoL7FB{VQFAaJ^^%5?UNB zeHiEO;T8wd#jXDieBnoQXYjYra%nt`LF_TjJ3;jukLG*9dh12YVQg`=bByULmLHhP zJx2FbE*3s}RO^;Yb4H4q6EVa-^SVXkYmR9SwL0!H21~83&Dt$Sl10&7VJ?$b* zwAY5OD|rC3ekNHlZEGB=R@+S>pmoQx9&vu1^5L3Yd@c&_^R3Ltsq7x*G8$P8k%=$w zNH}WmT%}1h{m6wjS#>IWB#1eNPl@i`+T;kcjB4`D5#qS>2DOgB#4H=3EQKAjc$(G` z?PQr;xm!4)jTdgODNN2tN^Lw3%yQ-8T)amTDn3mPyj4#sb{v`Mzd5%ZZ^mby>sd{w zEpIa4c7sXMP>&!a&0+oGpCX1TQUUGS8kD59y zYslJ(EhkIAe!;-G`IN1`eIR2p)C7!E2RU9xq_0V)tAzv17#L&=TBJQ2rMGOByg;Mn*nw(kRr;11IefC<f`I6s&46rtM227^5@fKfwW#+Z-e5)m{FCswhia2rsG(^oxN}eWrJHs z7=9S6T@4YhBH1bC%Coe0yzdJH4I>zLkvA)Q9R*P1zj=^17!OoWEO1B4rSYMt@gs+s z{=@hrY4W!R?U=KqiA;@%5CZznRQ<&e5f0my`IQAYp^DNIOf%Tlr|p!V^KBQ_43iBW zowK1`sv>1$UoiDR-LQ(3IKeG@i-go{>BHzERs8 zR*iJn7{31fkK8T%N4*ky)&OVj>N=;HOnD^JJ00Lr;{jkf+_YClu-CL*ObBe`D@@Bl zCHh<9&mP@T%Fb}=BWC%zb6I0+-ksLV?)tc62bRNMH@G?g9uwJn_ita~uw}!X7-_AUu(@oABXdJ-?JEPb6 zcZ6eb+fD#>=Q>zNXfjd&prYWcNRgrHKK($Ug=)`D+|2AK87g`G0+ z4-ZyNgZ6IK^~<)RSXE7Jm)dH)EgWv+S+%wDsiC|Ip1fcP2VK6ofVZp-c{730MSyV7 zE0(+Jt!zq+PegNMR`xK0RLIigQi$eJn&TNcp_MA&RixCOYv!D2+Nci&puEcn0~E0{ zFh(sTZ(MJ_*en;mG8>SWeaY(Ab;3~`?<2fyuEHu?Z3?mY{E_ugv}6eonsCeR9;;89 zYMkt(yQ;SJEfALGWk?vqS3K4+fq|d=Kr)Tl!whBLbUBbSYB$s3iSBr%8AhEAon))> z!~Cp?iv5-teClrr)4I_|hTzJ5oQOgHQx$+%mFnqgcc|sm;XfL0ufK+kx>#F~ z5F>F!-TwHZLI}W8ZA^4q!_;`aCUHo6 zXg$U*r-%#3BZnuPZj@TI8%K>A9X4a9{dAHByFD(2)Sk_#1Rg-2VtO;bp%Eqa#wz0` z%*BUB#~-m28hv2~ZZ}2VL8puJ)5YGV!jPG42x1{Hs~q20*sFiE2c`;DN5VB*UW0_~ zxd017$uR54AT>TM^y`e`faL?OmXZdE3zYPpp+76PNq#{7n~4$IW*Ko zI;AO{Q|mc8x&?!STWPII621O9!UNA*ILqDM zgPU2Ug%T~3-6f;qtq>+@vOv}uh#F3~Jgy*xqo&neMxIB&^C#LZN@q~()RMSsSJAXu zFStCcJZRyp68FA!N5izhvoozI)#2swtSWvn%i6ErF8_P?%YQB3gOMQmfdffIni9|c z#O>ofg7y@BETMHAJ9)g;7P?f|>NH&owxAGx`Jnj_Jug+Ff3NYUs!H9LGx4zMfr6|3 z=${+c3rtceCSB3jH<9kabA@5=FGhg{ayu;j`4${V>TY8dl__7^LzLcaek~O(Gx9+H z3_7LQ9g5eE{ndqF5*UxnsJwdv?=Hipmu;M$HMq@jtQ=*(U6hEQmrR>l{EL{;q;rgV z+}Y>$&HUW5KAA?wz+0a7V^^$7>TcmUZ>E<7Tf)+H5ewDr8?;Es*c(~XS}Aq^??Gq% zvuBpVUxwF3ABB1|yAU}rK)-Il{T9H2c|q#?(uSlXzDTGv-EhF4y5Kir1wK3gBgdx1 zgx%1$c?YFrU*;{rnO7RN+H=H5+a?X$Ud~&^ZX1CGi`Yv`5BJ7$^N>oXsE2kdj+0O? zG=yXV7(=R70pZ3rKeuXf)n#uy+V)}{{2)nJ!M-<3vZH#!=?SHCC4t{^AW=J`Vp*wQ zv;*w%0rIwp^kwt{qL@-u(6jp5FA^o+v2Yi4@%3E%xO7v<4C#6=P#`WmcYQ5gp<?{g_ z3x|wW$cXNq8=1M{u^0PTm38{ep1G#VstZqlWjy#v{zqD9;y0$svP%xFa{h47X6N2T`NA z$-;#MD_nvy%8i%jc8BO5<~-XV(mih}={$aeKant*Z>7Tt`0=-peN}`%61X)tUxaL@{&*ro5e;v^+r4+`kz7sQ zc@)K~tJ7qvUFGa1wdB=WtA@;?;o|_{C(KY%k}#-EvD<3gui4?csS?0OSXrd=Li`*X z1U3~>oR?4G!~6s*^jikd9okXB2n1WKp{pmp4vu)v0Q4~-0a1!aTaoy;(uWPp4w z*)bUrNJ4I-wQzpc&g<=JKkes5+EE^Uv|)1At9s`3jnFFZ)B+Pk77ZFXfV#R*b>%WvE_Y1S67(p!({(~@v>>cpU3Hgfur|$fp^c4;$ zhU~NJZx-+`5EU`t9SjcclFI!2C!y&(`1(JC{J*Bj4%7gy2gSnt{Qh!oyuYQ5zcQh9 zQDku`sg{_@AiO);7d!uxWc)w;mp7Q+w|7hHF{qO>{fp22J9uJZzS}5xUs&58iV~9j zvb66DqPc$%>gc@d9TSuO@vjc`-%zzr;xB4}lo3wcpM*Y08NfO^E&IuTSwa8zZuj@T z!T~WRSt|VagAiQw-MD=&vaJ6wj$ny*OZ%Te{vT^HQBUOP_4QRnF3#<@m9+ngILpFd zR*gIHiQ<-0m_XNKZ*kPh=Y!jKKa1m=6(C+X?!)g4J>tdyrJp!`SF>Zl++Kgdtt-0Tf&I4WzN83WYd z0O{$W2=oGFNIfZwzPkP`N&WRzfCW+Zv7oX>nAZpvC=|(i`ZYT?W!8?-t+x!1b zEqOny0rK4|2?Yr$-{0r;Z)g0^#s6yu>0|!6Lsv*ynI3nJF3Sq`g9N~`D zrGT-q>PxGT31*I9hk47dZ@1uOz*(Qf-UgeT#y4wau51cmUiLmaG*c~S7vo{vKZNmV zW^-HX%QPns1Fctd&n|^onc6rF3+=amIuf{Bkgln9%n;HFZ`FdM&DA?KF&7dO%Xh%e z%8B7Cu-g+j$~>8Gc%g8EKuhx}Blnpt`jE(O&8}D6(<^{gU9Tr`i;H^7?a5osY@+d5 zYkcrE>1~e*#1S(mdwF5fhwb5r2d81f+ML_JMXb7#ke>hseWbf2VHLLMPRD9-u_&6? z7~X4<>-rmBY%&GLU<3Gfr85TjW;m^K3~Tzu+HTI z8;eDeC?0aP}*{_$HAk_SzUAo)-%D4Q0QwHlk|X< za_e4}sLvyTKh7+C(FRr8x1L;BPW3%poFsOUSOJ;gX-o?M{jrJe@f%; zC@5BLgdCu?JIUzyd?lR&*`ox|D=1Vdu~IFr%w|AS=6^wLf7-!U7#wDP!wNQr zlFz}erlAUi3v9!_?%3>K5Qy5e86ASm-sQiBk#mjMb)!C z=+mxWol+z9&2{TnI=)GsNL*X{)~28lZfvl3mC&^Ai_O27Ae_20w2Za;cD+_AMWbV2 z5P4?B=7!8|9>9Y(al+efp0p5@%Vp~ad%#@Nh}yS-mBF;GF4Rq&t#;;2%Q%VkQ3`8O z#&FPiQaGNvHypleh#tw0TsqHcK04I~J@QNGYutiM~cl*f1%UUdwH9%2H8*VZ}phckLZQ zl}r~`Z1-|>a@d%-WeTB}*-DQIdg&rmd8O_GiNpCq*;t+?u2wIZG_VxBt3@hX-&5O{ zWQ|2Zw-i?0R0MoIu~XPiG`$${IK(8>NYnEpqS;1C(Fn+J#1`Fscvid(8YNdlJc(vm z1ww-pW;6Y0|`S^06CDRuPG7m5=aLu3vzCJ9Z9~u?lVMbEjJvkxb z>5Y&_p~jD_dS)XD4-5#sO#7Zss>cbBQp0b8Gyo^{41+)qB|$qFBxU7ktrAK)h2h$- ztzRgm3(xY`Z!)Nf#)t+; zlG`Z9>(5o>p=cjgF0B@Vd5m##ZAP7HoXoB9dLKC^oJ*|RI3~y>5o+%M_|R8|=;0KG zlMp$Y&_fbHc%XdsQ(g;M^^G}}igm@St>Ht|*0FVSeJ4)=S5BzKmPn<%6WeaK*zdGc z>!v7y@hsyu3KXd*z3k#IL}#Y&hd(4_zk-Wb+tKSZ%3B4x7!OKP9J|eBYhn_ge4g?9 zY+UikB(5entF60V9ATkuSZ7_SbjyC~Jo}+@sO{U=ZbtDJIAo3d&O`HFdE;&^V=To* zDc5;Bg~jtvQ&=@A;=?4zd*iv8PMdOc+h4E>A_xlbw$U+KMlomYi7z0Imi({0Y>w=& z(pDV6fzC>1`%q~w%OpCklcos2OI!@^7|ze`taMHYD$zcn!?UK}m~^-g#|Hek-)%uF zu(A+S`UDkvS)CI<1+YpM%E}$Tg zm_=8x{9oL?Wl&ws)-8-nAV84d7TgK$kN|<;?(V@MxNRH)1lJ%Nhu|*3-QC^Y-PzyH zIp;lZ@+3dMs(b7H2(@;t^y<|zXLrvv#+bBSHQ$iL0htK(EK-vSm53HM=FdmOPcj#R zAJ25XKYAYJGwS+KXyT>NCcRxtL+njyLMy};%;;N)jK~@e9L_!7bm^+nJYtv0QY>C$Uj%ial`32t;-zl{g zjd5Jg7qybGyPh7i^WpKTD^Bc(-l1mIH5(DYPp5)j4=@_@4gNvV%~B54lbKa!C{ES; z47ORFl4U*o{=U&u)O`Si>3F;%7boDmnz2&*?l4k1L3xN zUbUk4sahX!Mqrs=APS7FjE;U|6n^sFaOsstz5yY4R|g2wo#x0~qLc~=i3BG3U;m(` zr7aG zMXz*arkmm`4o-(p%MJM1uNvPq0Tt!EFUzrw=bH#5J_Nb?YX^O))=i^UD-6y4JVAor z2OF`PY0t|IjS*{l_S{#ugTng09NB9nut}Cl$W@wbz4Bb1`9a6QwM6t(j(WEeJz8_O zPT+otX>4{pfJQ-(F(uWn55$kVjdq8X&-h~VIEth+)O~^&3!BdCCQapTZuySW^}(zs zifm}uSqgR8{B>;@lfG}pu%uLftXr2XKf!xYmlV~w0|LJ?3 zc4wl9;%UX(O}Ade?z;{31i|p;>kqNm{C<>qc5iICtMnS{k&de2Pirnx4f(I=s&1;% zGlp>MZcuN(H#Usy@yiKM`fP>dp@p2YCAU!0-ShQ!={Gc;n-Z>b$o5 zX6!{rPK(FtSKrCLF`N^5J{UF(Dj`1}JNBFiRMzOm?zmS>A|;GbJ%kcyu!=1+D7^Um zLQWyl@4DL@b4Y!Mr4IFw@F1DVG$P(0iJsr`B-!6LQ>?2jIiKcpS8>cuQeL?C%8ttZ zmd(e9oDb&=V*7KCLHBZ+<&dHM`_((WKfRHvwj;O1Kq2W@I?PR(_YGC>DvY2g3!!dJ z)bi;&PY{gT>$oTre%)0tp2IjN|KOW{=G8%f)$3y%-nP;;wm2mqAE^&WpSQOM2{#1Kd)lNJf#T zm*XbL58Q}vgx3+SyiVnIOqzEi&NpNM_llsYLe+;A&zmJu^ZA*U&uy2_dn?cCpk$lo zF;Fr_&x5nqNz(J)L|5^u>62&3rR2#qC|#%oi}P;4E4LBEc~aoKxjpsF=~Uvhlq}Gc z4%j)X?VP%C$@>t~uC7Fnk_%eac&hx~7fBt4#2CUs(%lLgJVfik}?Wt*lm`hmw zp(Ss>L2+tk0RRBVf=1Hh9dt(l>y2U}^8r`sv^G7--*jw_v_=K_HDj)ZN7zyU*YPD6 zQ_nye`qwbQ2m1|AD=LnH#~tY>Lxkph>?dY>wifoyAo#gAtPPF2vhtt?_JWmjj1Wm6 z>oD-DLHPReMDAR=U2VztF=bDm-BTGgVfj#(gvTv!hT_2w;|Z2l*3iRCBy=K~*FSFa z4&Tkr)^%dzDw@=et^&!adFy=7eLV@()<2}li$u=kH44%gs#Vq*IrI?5%1ekcb!y&2 z2W_LA6&~Ql6P2Xze|cN{71)QPw|jdpJ6Uas?wH{3KPz99=qQS((T#Xl4v(E27%P2D=wG?h za?Aak@0iG^Z$qdAL~IJzeDd>qBCaDs5VmC8?mox&HAa|DNEx~JwJ&Z~G&pcqEW8NY z<22Lfx^h!Vxr%$65~ayyw|516d*|kLJ5nm-C{N<-ckd-rs-ZiPwgvnY22f-i@tyn( z?@a4x_YRaCV!+=be^J=F*ONDVQxN2LP`cUDtqJJ4L?wTma=urkyV~0K(?~51db+l- zC(N|GWsvns$4LphifmKozZ&L!x?9Omk!W+=a}{w03{RW z&#<51Ne0@})h)_hB|kKq@^8mbNhrZh7rd64p4&QhQ#;EgaC4#H=Yd~wF5OlI>7rIn zoQ6*WaSgRsE&^3_(!R?(Odr&pu9W`}&}im5Xx>{n28flST-ld*JUze2&9WciJ;CB^ z(kXG31kh+73F?$IR#rYl07#*?0YCjLylWdYR_;#I>41M3FnAL(8)b* z4V#WMo=-Wy18KV9#wPP*wHmKb>*wD$EXcGSSeSZd@iDoPPEDOAGm-97eR3?cih$$? zSZjaXdJib^Jiu)VKQ%`^aC>-Qufgr`kn!lmG47StRwYa>DOEwe^AFGW8&_4nFOpbc zpGWOTY(M4n%U4v~ugMT6Hj$4`QSt3)h&P9}-o`AN|BUWx)zaqEw9rMX>lb&&PW`>0 z$6g&ivfhJE2RP#c@Vwf&%?Jxtu~Z8ryJN~US&}mT5Po61I+)B70#x%ZHKyDRFVS^Z zrMp(1S?%mIDId5t%knHf=~rT}4WmghMeoC9TSm~h#}tT4M_PO zbWF?=y7p0hqP95yg-r_+dJn~_5y0J2z#KVcrOfUzom6*@A=f?AswLtA zf!>(a%Tu*!78-ZHm(N0u8(^IhCs1W7Y+=BvSX_M>I_Qd)$-okzWkQaFYQrCPV`Oj8 zTD5;}%6BiSiq>En-A->NkN6$H&UPHH^Sfv@cMz1$3XMFr>dmq1)LqYtc6f*VYi#(&Ld=|70oG77M`Fe55xeZ~ zgVRTx`(_2$xw*L~mio>+Pn;4eTSxlINb9*71Bep}1tJL$({z3IGlh2_gUJO@i-v1r^b=t$vSxL*;Px=J5wuF){tM#9=i}eQf1n$HbcdC z8C+J-dKUpb)ATF?-=9#MeJmM2_x1ZRTnye~;l~Zq@%*f_K%yYCk|th?kzBw#Adhi- z7WcWsl+xOu*!X)p88+L57Lmm)w(pk5_xC=7NkWdota0=LXcX%VvIZL}@{HS!PJ_iGOb2+qClVub9AxLWbGQU-0IT(^g0yY8Qf zxBCLsf}+Hp2ZiTUGF*gdse~FkLiOT17;HR3(u8o;4-EAZqXQI55eSNK2X5A4&~ zn}JIGlTR;_qIG;0EAV2yL^TJ#R!K<#-LM&TRdlo_&Q|?^28UI={G0fdkjBcM zJ{85$wDic73K!f!8;i%d(IO)Ck6)^vKFGKxl{*#T2+ZvuG?G%MV8@RhRL&?{8dr+nmqy4ROd~o z6lro>lPr*~?Vb}+F}uCt*vGgo<@=>&HD(ykO$^wC5=}sm|4D8_#%4R`*Y5iv)tyzw z2#+KDb~k);P!m$t2&m9S1_Qr-x$BIWLyw<}vkL%`RXBmOb2n(Fbv4d;>Rd#sn_{Q_ z0j~TW_X_c0F&w0D%_b#v+Q2qi8?a8J2Ig%OXH~(zvAYemBM7nBe|x3t6?U{>F4tUv zvZa0?&!o%yA}uRZw%2}Va_)q8AeCsu!?8i^n!eEiu0ZUHl*C^=v~>76@!|f(F8YT# z&cLr>&lv|66vJh}gvc$CLSTEmsZ`mF>#Cbc<3QfCRy{!qRog^fJVxuMs~WojfXo9J6}xpB9zH?^hJl1 z3Pc6s7H*pi zzalV~-4`c%ZfcZT!-C$pamC-O)Z~!5;B0)%m0B4eDPfcorfKlw zo|=vZ%>zwu9u_wEU+t8>@vy3G5Z)adU#0nX;)7c0Ba)1h5Y&?|Nf+g=BOZJ+RY(_| z`Df=ARIwE)&n@dk|!eayZ#p1JHx_$x`cbA{Lmpd(M#BK|IwYzdpZ(;u2 zd`+OjJrFC__)KMw(+DG5*jF$45XIk9Mz3vAhdT=4)e?>jBTq(x#yygWT7lDoE^$OWe7QqWceGgf%eVC5mufj#kG1nV zWQ3&sfgUzIx33zBUJy+ml+gGyu0KUlT?8~73RXxl`k#>P0Z8}Ivsx?OD693UF0rO5 z!Ed$5**|5EWqEzphAHj2ydC_`O)arV`2bOzFvPpiHC;iZ*iH@ab|u3?m@Q>k!a(Zq_UX@A!PmNyZPL zYF2aoOG2xcE(`U*=mS@d=$iwx%k)&@xjQlfE3@}c%Pd9t=&9MH+?pSPPQDdQ=BgY% zj**VlLl?gs8b-WnW>EloNN8KjX?`m`X5-;C3?F=r2GGIEwh`A&Sgv`RRoDx=a0ax( zOGIeJ6DJyJ70I>+)~$;_}1 z?JqADPJG(oW^Z@L5PJ{-bDR}Bi%|-Vg6?ytRoDpbs(BjPkL((ION7+7yx7<|)9r_7 zC;NxOx+3n#6;sWv_z_e0s=b7@uprN-v?DPdq|*QncyD!QvJ(_5Ga0tTUSu`YY~(*oKo+EU>kG$m zn`Tu#1@qmUv%io;Nb|Yq1#l;_S)}cncJ-@wDFh}@xfuhtoc2yF;**#LpT8A=av!&5 zb0!%SP9FCeTmy}nX;XRtB#vsnmY3?(x>>W$AnI>9DQuhs?cFU)x!oX_T%3`xpcZ?K z5aZy7_)iydAaraXz()e*a_gzV}KMNc0q;PXR2z}gZs=(5a4 zh!H0Ta2sC*sx9VWu(o8{_yrcV6L38+il;u!l!)@-0+RL=1?wqX(qLy+CQ4fhN7rJQ z0Zj^|YRbX~m7y&~Ul5~i-1Lbo`8Q=}ysa}FqP#ywZ04WvihfX828Qk#rC1VCoe*91 zc3A?55m1Fo6um(}=KZ%L-W#Wz_a6F7jLDe&?@3){UD?_Bng*0x-9~%zO8w3Usaa+B zIkpT3yuOEiyUucX_kHv8n>3BvbUczv-f7hmFv!%`rf4|wQpqsQLpe{!6$HF>u9ikG z(yD8R=N{YlBPvR*gcB3B_NxkrSFXzMPUY@SvWLUfA2GqPZN_~wCc70XvM@k9#a3IL z8d$BGg!_8?Rpw%Vo9W9MMx|(X#2sSfPM zmngj^0(EPVi&sow3j`GvVC5@Lx6)>?N|e1|pJkM!xFma92t#Mjr+P?tLpiJ)v;%NP zNj3^87%clt^d9pLgRPo-E?bWZ~JWITet#mQJV zRdwT_f>EWf0m)5nYbJ$=4FsK#Y>8O3IVGVG!>~%9L9G3~grY$xZT)F2t=Kg`&qa#ShZo`txrj#KQCLHpX{1b_> z)b4i*b;-aI??>|hYTNp9y{=H$d`-=-=hY16bt$~t`qtnWj~xPmO25)5O9H(vd2jT& zT#$4Sw%&GuR1so3s~XWA1N=q8`l_U-+Lk;vL?JOiLOSTvx>i!axh~67oz^v``u88- zLB?O&20gJh=^uFpNqKi7q+?6bViVp2&SSR_?+!qSfQ=?dA#Zz(6l3aXmL{7KYpv%6 zn~WdkF)R=VeCT$jDXQked~_N00T>Cf#7)ni%?)JKG1*#%Yp3;+WwjkRWxOVU4U_Vz z{b4p$J`>%RN60Jr1xu>5KDLCihXv25k>^^ zhzZzeE(gEHje0Kpa_oVm!%@W~r!|UodiPQp)fN79n77!v{>FNUnLrCWiejr!P5^RI z!LUttWc*g(R{3qWa@-rktM@B=py6G={+IGCkThNgS28`9z<^5g;22Kl~`Ithv?C0-p5(ZVtW)ty0DnwM(*JL;ZTn|#1V6FzOI3J&E z#&A+D@{5W*=|q|GiPVg|ZS}Z7&)5W~okR|wRLRf)(=b%`mzZ4drcPY*xXtQWsbD=# z--T)F&omT3eQ183u=cpw=LrJJz(3ApX(ThwKBz_vBu7*tlGX|zSjc#ykL)zl9(B?d zDTPYF5qX(^>a8g4DXt2JFKpRDs*D6uR)$y%*zF%&M53>IvJQ_exEu!W|NwSKwv71V0UZx?sS6OkE!Va959XC8ue7w6jo4We^7 z%->#7?|Xu=Y!!&f%0#bM0_8d#6J*ye`(r_cEc|979&ga;kKw}4R~L+OTXPD>uW;>n zyD4Duo3tgq0FpVzO>1!Synif7o6H@`3ZQZ(3ai7jTBrwDD!3pA#E7+SGn2MO$e=WM z5cRG_QcJO5OcA6T>WkHSoH#FXF-V6WQ+j+JmPlcm^?@Fz!Q0J{a<87N=3>Z7+YvKx7%4XynfJ5`WNyA$!SWVqCAnW$R0+iQ6Kj`o6xD%|ZzuJ?}ZpJ}PDi;sjib z)Ic@Y)`P^D)?vt-_TdbAe8l}3)g2+0Df>-&?B|OWZ2^xtn0WKrs~2Q_Tg>BIvJ&Z4 z*G`TdZ!T!7Q+B(azlO@`+;E}P#QwnRUyFMSD0lm@=b9I*47AS@NOtO*fN?e9>!4A6 z*I`Zs70*pkB-|e_Z*80Ab51SCjRsQKj-_gEc|Lyd8xo}Wvj3_IB?gx9oc>DtNA`Yn zBG)k4(2wBAmUlp1M8fsvOh1Km0tHj`Y?&7xb=>eCDk)mfc1VJZS+9>DPltcTrG;*m zb@nQ6nJT++$lQt4K&R`t?{CpuiD{pOuH?Y^$4^k@v0GTMdNO+B%9<2F?g?}NJMLi) z5J&IzziE9uG_ijx%ZOd0>&_5st-BeZuO#*eNXhAXEzdSTprlwdQDjZ?no_=&~gi zg`pNmG;jqvIy@Ayw`Z|#IO15eA7Gf#^?~dZhi-+?6HQjtw4gA-QqIs5<5$_UxQ6?l z-BgSo!BBXP2u`AnNY4^hb?*{P8Z_NMM_qspPD@izHY40EcU}@zU|LRT==0+pF1oRo zSwuyea8jZ?h3*@K(syoOF|*Wu0vvJTVeo1;^{u{6C2=G{+g41P=B|}Vabf&RcF4;f7n@yf+rZx_ayB zgOkE4JKqrM4nk$KvZYdc9i%r=Wi!4|FQ2`sSmq5v6^xIHi*h!&FH%2O7xSz>Kb2xv z{8x3HA+57P*jZ+mJ$0;ip^0&<(8IX5oDziH|5krv9z?K(Yh@mgqx?hbMtt@DRd5b2 zM6He>eb|@3ASJ<|Y%q>;^+S|t<6q$LwuE5lrY)g9EA3w}pLOzJ=w_Y#CN9$-KvxJv zEio`!R113+<&MLu^nU5+0G*KRFAz^iCh&iAf&9{&lZEs!z+s@Om_R!`trBp^9eSF} z@MfImPYkX%44f1gr3y)gMCScO;H9M*6mkN3;WYIiekVvo){Y>-^tXmEAS9Lqj3(>k zZb{BoyK~x(VC%icA-HYXlZ1i%C+N2IC6(>xAqZQCjnQlN#MCGsvi45&{~4`wQ0uJGL|%xk0wTgA9T)MvpMgz^PKe$ zY;lbmOnJgT652Mt>GP`j=rE*sHQ3wRaV=bY`~++HFK|&~g3nxl=4eJfR)2FxIg-^`(1xu3V_i^&ubTYa0T7EPeeWC>7l*W79-msPfhcaY0_d_#mRd@*wbWn^H|Mn#e*H>^7Ry#wP2wVzJr~K~HtS1lokkS36@I2O2*KxLdxH3tI<8f1iv3#w zb+}0HQu^WdaSr|1MkylC`{?!N5ohs_ z6Nme=Y< zu8ef6aXCC6*VVgOriiXoFB&c7uP`OHL{un~2@LIl^F-t(n+9h^XI!7xl_#s|2v;+R z+BT}^9>{$~j0Cs{o!2TJp>uQjf(H!q3h+^K8RtX%Ziw5%6F4(W7U1p%T2a)qfVi!m z`wtCedd30bABDZf48ood8I;uhPPFyLVyG88pGn@azV$3H%M$8x;JaPT!{I%WS;7YV zNi@my_FgHm!Q6EmQtG{%|E$K&*(cU)p|`RVE(p(C)E|4liB3?WRpQjhD^?xI3~{-p zXr8#agtm!`iy+W#ETn~e756fj%;t}?vcD}vEmPZZzYx-0;z_G=BxcI8k zp^GOfOPuWMbZBYz3YGWV^v-K-BI&v2bl=hz18_eoXx$40)GT-}a(1nuOl`37kx8OV zuI^W_2?l9jt3~2sacX~LWnTS*r62<7lWc+^G*HFen=ovty~k&{=!jWdTx`arM8o@Z zkbLjD^&xopo;v5^w}{G}D%M-Cj%&Rg$%nB|7w!{;uE7g2CPRvEy20U$Sa1MvZ9d700rY~7gbrId#F>zC%e?^q4Y8=z6Gv=1s5|p1{ zM|K9DoQhIzsLx|lpLdD^cn)-BH z;1Ic2;aJV5`4rHB{$vl-J;PXM+Rc#{&8fl`J@HN|#byro@f2^`VdB@V@XvFHTjBYX zuM;`v@$@Yn2@^Wj>a7Vj1}hd$XJ$H3#3EkKN97zr>V+$I7-ZLwdH-vNuHy4;-ah62 zo-bR?qdW+^^iU?U0s&rkzk?QcZlxweGy>=6A&y^gMZ?cZnVs>bvk1MYw;rFWWpBju zO|;a%PuGQ<8Ts>AQc5!pQs3%PdYlBqRCO(Ut7pPelA7`hruX{beE)lFHnhrOBteP* z7&4+uq0A~4iO2;7Jf-KpY)Pv-n~JeGeX#Rf^nP%_%yI0=NG+1wP}GE$d14= zwUR3o*I`*+H(_=nTH2wAI)(Aa*!buRrB_yB^!4@C9n~z@4lvY;IEK8L!2Y^Veovd{ zl<1iXzh%JjpnZ3&8b4khzNqg@LE2Wzl>>dulnZ_lw3zIU(NyO?{-+IYwY4<4^!fo) zxE&l`&^HM2s^%aMpVpT6W}UtFe~=Arj}R7P;k+$^KHq*!(;_lFfhhx0@+op3o~X377%ga~M0|730bpJ}8|;#-KH zCx_d|i;=7d683)%AS8Mn4I;ItQcfuzo!B4_#D}kVu*pNO>9oH8nZ&Y{nJWEKKCaok z=qJZYj-J*K%+#g=dicr;KE<*^8ss?0%l>mA!wH0mjRNG@6#Tp3AXHtBZn)Vnswn@~ z2^f-wap=_W;;uiAu0WIRK>9BnsX!{ooDMn%o8N9p4}z%QXY@-IWk z%myW4stZyi7j@s!os#F7ly8C&8i~e{S5!^-O{4qYWjPUj)OH`~)b&H+9)q#c%iClA z#@N$>F<7UA;8cxg{+sMHn(NP5lSV`Fw^=j!(=_%g{9pXpxJaSRpQhoO8~ZoYkpF2K z`2*;*e>07!pQf>yr0}e-YM%M;Ow`=rmfYKtF~Nv zwP3B61*9B0e%EuOFaqv#4Ke(;ci`!ROaZ%u3^ums70~ld!IaHno!!q>L`m4&0D1M# zx1vt<+B&%y5fpQFuI0gZ>5rv(%ZlOM5#Q0^!Q%Le@+T#e=V7BKLRIYP6GSkxUdV47 z2_I_8bbN@|?;r_at9f;Sq+i^H8W(u%1GF;3<%NaRF918K&IPFeyAySDthXOOAznIY6DH9{3OzM59!*d+GF5tE! zMo9M`ld4=o$Oc5`32Dqx_U}j7gKdG1Ta-V`*SiAVo8^2&2B2gFANSi4$p`;~&>jZ0 zr=QyW8=RLAoJDoa>uMC~nonjh!BYg;%fHnDb_M10ROyg!w~pSvJQ=-K!8A1@5q|DRal{!n?^re%YO+-=Y)j4i^F_zNs_Ncm zLrK(Q2bqcy^U{)XbCXBY5-oOJN1eawKK$o=xl5rJqBE7R&W0AuN-bY)k9b_d9e796 zYV6lwZ+=qL(|vN>=FX9P5f00WG_yK)x5wP(v;8F4Ne9}oYIJ_)yT8AWWZSdbe7eFO zv%A!_JHKo|gCBhSc~)@#CTS1mVpz`I(JmkDL$6cm+x6kmkH|PK?SNG){@ru`{VQ|} z?t26vmS-k>@;T>5RJ>#GO{RW0u}}B46Y3234BiSx7tmffrFiAweO0+RN{iR18UP;b zetPG)$I`jt3^kCaZd=oge233>qH3w;%WBL%%cn|@#`j+y?SC)eM7$*-;QSA^ue44d zFM1VXbVIKeP&YQ}L}YO`o{=A%PCC{Mueh9S;q6mu@nxDy@9~Yt8mV?#ygS&LNQ6;S z%Zb?8nSPYWKHej*?zVE6?g(< zl7-d~5uZ<(h%~5E;h$$(_ht33c0zqFuYH9r!<&byw$h6GV4t0={l*oY5>iu@YWbKe zw602w*=q3=&V@CHeef{vceXS5UCPk>MOXVp;RpA+T*kQ3PjGv~pDF}fYrcI@%h@3Y z#`+tTB0^b%RJSJAmW5YCW~$f6I_QnN_PRe*g}x(wJ4Q3P7T;Y70rNw%+*tZ;|1}4a z)mGV>X~3OYxf8?wN+mo3roJgL;Tw{bHSZVxoegGv4NI z{%f$m%?B-aC?f4*3t~dUU~MQ3Q;Y5X7BQ6}7B)PL^|JMq6h$cev;_A13Q4`5Wdr)T zX@g7l^v|9bZJjAQ<$0HgVXWMv6UG7j0e@Wz2%y47zU-E-2aUra}bDD7(h(H+3vs^~ov$4wXj`>i$Yhjil2 zY?jOASP!#l8~UNy-uXE}XaY*grx+&U-Z7o(S6AB4VihAqp6W-Bbk8NoWeZ%NRERKr z`?y2TgoOOQ5Q21+edd2qdK~J)QtZDYUfV+}xh>?{Iees|q#{#)uDT=PH~U`L9s*lg z*0Rxkf?`*FlClD$zHlJd?1Z=-J4H5r!E|^66cLqX*e?R!eN7Jk%{QfEfYC)%ZMwQp z+gytW4uqfTc&$wkr%k!@HVQfEdqK^XhdT}x8pZuWm2P28iul&yGeMWB$M=ql;#MvrMoyKC~MhbXIZZ^s?Z7eY$4z`Ph18*5-jX2%bmyR zrXs3NvR~$5U9!#5Wr^O>0ZM^f^vPhL zXp1N`Xu8HOennSD z%gxo|P|w>LvP>AG()o~hQ>)#hdjCSQ4Q>W$)CObSX>AD-#PJ! zqoz$Sqa1pEM;9!%nhaC=@`>8znwyVR5M!Amaya)XfBxddzJ}4uz(G!NDVcU*MIsRu zFUajYx&xYa-obeCLG7D2&$b>Y1r%-AjMR7AgHdIdiE{myeISWfG^~GXVTE} zQa)*cO$CX**6Hy9nql2@8zFJJ^b+eko=Fzw#bxWR>!qQ@dWjXJbbR(?bET#VdzMkP z87MQq#)9OH4Gy+`dZdjpHO27m+LG1Iv>fx9al1WXwvaQpotDEzn9<#Zo5q|m{so9H z-_>eMupL1bG4uM4ckwTY764XLn=d8cjr-a-Cfy3ci7b!`BoZ>JO*v^3WIl`TfQ({Q z#hUPoZOjJVN9PHoI~P8|A6dU&ONmR!s%;>5Y^H0vNHP#YPy`MOsAX2jva!A?ZSeapIpxLU~{QxSvkqG`{)PY2uh@(k#zWim089Q%Wg6oMzR@cY>^e< zJ^OqlbF;8*4rx02Lq1elE`)}+%pv1ep?Ekvp$irqcH|EvoXzC{I_*5ki9e~uaZ=cF zCE=HWc!!4p_KXEyRVaHKQoG;Aj+Lt3PPZQgNfgW-Vy(o&;h=}J@lAK{Z`ETc+ktshzMW3 zjR#4 zsjHvN`4Tkm8TE^kxFK9>ce*Mk510pio(?f31Pd3+4806Zt$DLz&F`1t|-~ zfYID%DyDAa(yfOZ{uD-mP9EEG+11-2-*V_X743vilY4Lcmg>dlBk(*&qvCmJH ziIg?)?qYTKYRo4KqWNm_uohO_+kLtptP#`hfp03Xkoth?4&Gelt zV{2Ose3|2giRJPmw1@DA(GLC(_YOV{r#jBJsY~L!XeA}jk9X#7@ZATM7frcnyPv8T zZ^{nQNyHuy=cw8g&2>vZFZmo*EHaZF4d4wHr1nhV;{C9>K-j3ocTfej#DghMgM*!6 zxJlx&(r4gs4{7_1SPU?d1-h_?sP&-dx-a^bV-vhN=M#bH%duJ@INjhK@tQw-@Y=6m z7+RUZl0L1>!&;OKKM=_Ud6bvrWXHx?7*Iv$72LDqFn@5i$1ERyw$m#p(X{$N_hQ%8ZkHJE4_)P#Sv zz?m+gtp^P5bM8ZHaq#mTH?J4t;8rrQ>ggT|8a+^I9h>q7P*0g?8(|GAn7&@TnbkFS z*6c6Ow#5FnFh4r)fSJtsG>Jwt^jkq7`OQal^_rlA|k22E-d7nh|oL840E66H^DD_->9Hrg(6sE-4p;8 zG%g+6a;%kdLPU2pMdU{_gI~+hyq1#_dY$17RUwYx9~p`GI8x6lYj1B)vXY&?)*}(d(V1=;I7sf=pVa4-f7XE zWplV9uYT+4R6o1bu-B~h07WG?y%ovZ>I4eksj!@mklfjHLn78N1gI@JL%>%!d=jwlJ^w9x$6Qh4y6;l zjwE{(PBeF09tkhG`3WWCd;RW(ncv#Zh<*r?Pvo(q=oY9H;dch1Q|8NF)_y=>NFx|* zG(gkoF9;&?lu<2wxBv8Ne}^#jDqIHI?wiI*uh{~UIp&lm^6S<4i})qu+3?6hdXHJs?ExzRm1%jBfz z<2!t9P;Qp!D$19lqlI#9Powjd?;{9&e8#U$mL_V&CyGmPQ%iduzu#oW)MPDVlf;1H zJ-ZFIGlOg^$_eJJCMWjmA86`sa?5e}-PpQiJaAA~Ci8lmO+Q#iQwuX!xkSsiHEPoA?=exl~hZh#_ zJBISV@tH+atGB24;jrf$8;hw_s8W7l>dFmoyDRP!l0!K@K0eu#*cLzblmfjE=W-PT z=;qxcsY$nFFDSIhLbbwZvNc2)`Vks?zt_Qc^-)E8NU_BknCo>dv*TxF?deGLdA0#t zY_j-OU((g&#T^AUR~5rnd&NOV!wqVCHmv&otFN4=wFkWLpIxD@1PD$;#J)Pl<5>WY z-6IpRUK#J8T@DemvrdJgLob~NWV=J@D+c^8>IFTewcN00QWA(%W-^55aI(zLXcl`m z#m%^G8c7~m1~WcMt}_Ja0H0EAIu{nc%=5_eF93Rt*%xGy25(v4?>1=aUL`*taG0xH zJ_jf?UrevZUzCVi14(zs*()(RsNh0;&-hN~v`-aGMid-Z}F zZ+7^hw=j{Hev1GJVItZ>l7ujS0%tWOc}C2x#tktB-gGQCJ(Po1-(4*?L1oW;3aKHK zQ4vJ%{ax*CJplq6V%_-=2fUvU3PT{zn-Z;znWFk|{VD!`dkef1qxBW)YVIm}<0b|C zb#403b)+{;9YmzJ-!S8^YxBR~k(>yU5rTX}LKG6)W1qod`BUONYKNjLR5l-5{n?}x>*54>`xVDeT<uk9pJPHwCuwhSlK%Ue;lvsW0sN{+@*e6T0@rRN*#WXZD7B8vx z>gLxeHQ*$mu%v`!pJz&SBYrp@@W6XWNJzkniQN3d4{S-Nr>8^A&CLzxfvd2qL;&~o z`Lg0JQwgHwaw9Gn0AMy-Mp~d+8lIh>zUW|2>5IbG@aH#@NVT7iS#4wJ|L^K3a9wnDh|cZpBlE^3%8#@|&iLKZ z#Ud=qY!jF=BfZpa{VTF8zXE-rU#VyQ>D*htporKuEir=Y79(zo*=L&pqRuGsYR?`-c&-v*ucRm05ptuA%$KTR8S& zdCA zUROh|zDV8&t|{XFm1+A9^zNMKe9Qg~^`)H@>!x~1kM9l&ZkA(=UesY7eR__RE>mRB zx&Au&^k>QYGn#!FEQb!`p`sCjgA0iouGng?>y8M=l@I5o41LIwYB`q*_WXCNNcEoF zKk^w$?GV3BU7Rc4p`3A{oz2X-8yCRi8d~1P5c+o2}J!}%+YSB3glV_eAIDWrPp~E+;Yc&_jplr4<8y9RR z7qobi@5G}Gch3v5nv?7#Y_UGn|Ml3=xk<8tYMAz68`|Gi&?-lQZMFVWxPwn?zA0U* z>Ib%ZFAv7(H3s_065ZD)HN~BUB6M_UTds1IzYC*hcN^u&o}JN|eH+rh5zH1iQWvtr zph}dN7N!YaRd4cjH+U^U6t^u942Q79;*YA<#U2_|oO76Ur9=uV2io@3{p#`w8=^B= z&41-;((P~^VW^rOsfE{D8@fWLmJ}c+nDw^XpYRiOl0}WrTGKAzIPT%y+wFCW6+}OE zyig`hJoGGYeOY&@`bexd5qmaM&FeBMD)ql~R+LR`=B&}^iI$5-vl>>K~gpxds(-f?_C zayH2$*erRo==Yi;ldYQzvbzk{3HD*u}MM)omu?2;_# z2-j_ZX7y40c}AV_uj;|A$ACg{E<~$Z**cNrvc!me$I|tHNG^$F#BuU`wLz#CrM5`i zIC`k9*DZl9$}quQQMoB`oene`z#;a*tDf&r>+I9YbKa31n<=x*fn z!>B?BH3*vIm8k57k~QNmH-wI9$wbuh|AZnq6>4qOYkjxNEMh+%n)SH7Wk8p`M9#;z=ZMuKmMeQ!JC9KLNBjn5@dpQRfRvDpI+cejR0x^*I|OS4}z zEI@40;vtPG-UVE61DDxr7tcR22Yu`l2)1pC(Zeem+8f|08Ww97jlzb)78X*iwdDj( z<}m3iOY{{RwN&qDrcYAFRxk8=Y;%=Ad2J)PJI}mfPER?b%24SiL7^!?$q*ulJ?Hx+ z#O<%z;<<2{Vf*rcd&I~D%RY@)>mWhM_3bex~^vyWJy?ujq0Uo`==P`W7-ynzIdUvS(t~ITS%{J+(>Dsik5^U1#}pKQK|lvQ}(UK-3C>{$&qGb z?ADR2T$>z8J>tXwD%3u}N~$Ru52>rYC^2xgyY#ecjq2NA#XGpQ_85rvlUab~Uqy)w z#VnxL%=dl15-(#wY2+}XkN=eUz8e;ZJM&ldsFjsmZDrA>^TECOW^FKe|koHYNgPg{c`*7TH<$^^i!($pKko!*8VQTLJ#PIEEliH{)2hrr*O)u zH9x}tqClS-AAX{zCXVR!yMh0No(n(KFw@WEsQ=9rm!Yti0W?$lM+z7J$u;DM5Qv#@lUrCqx>v{tERx3F$<*iM(_@DpNV*LQ9-ubVE z{I7-luM_#dRTth22BxL5BF}H$l&Dm`8EFtaY}2 zXKK1|ytgC=_`u%$)d%+T47mf}f3*5gccxoZ@uvX&``J3Nu_DM${=U%rL9+Yz@Ap5G zG5!2EchnC$zmFd&wh)yASVsU&>Y4bWNjbs*Cdx)7@%SmldD&Ya5S@hcR%4StwLS3s z)4GU+(w}+QJonE(98qYh=CZP~s-|Wt->MrA0N=&m`8l_m?+%%$y)*oucx%;dfYbfI zw4@>9?hlRsJJGxJBB$(JM7B-l9|XaCE5NenTPHRC;%xjE0}VW7pk~?E@BIUlOcVu} zWTL19^q(Zi^r@7XzQ{ny>38AI_mtp#S*%?D0iEd^TV4C=?9@8~0pb!o)& z9jS|KyDv|K%$qk-9~=%e^dEd~{^j1F!nc2LpzNhGgP%5Hk^thdDf8ZPQr{W3+nUEA z?RBFb1%X#VHplaqpX_(g&8w6ih|KRvOMNtF^7L6eo0eU@Ajygd61^su@c553*Z($6 zI#DtobWqoEaumh4b_pI~OQRW$u|e$5kcV&S5|EN#?gxj7qq`2++Vgt+jc=>Btp%|^ zjq!)f`*k^dpF%x&^1(oWD=O%qKj%?rWLxrwY8B z^xkqGzLrG9Yo_bVu0YeZL$!ihbz%3!&HiE{e7u~^GPme2*WrF8``wuct;0hmJ83(p zC_2O=tdXJM;Co{9x1=7a#zj@EsQHBH`>0j_ftbK(s8mu4Y_2%6VT09ksDZiP+Tck* z-%Op1Dly6I_)z?#!TWoNBFGpvVfJ#RS}fUP8`h|t-joKkQpyWT#)?l_nE7}}9m$`aUW5UErrDb;v zPnzaD&!yCriwt$Ao8QAgv!0hp_-*qwbRZmlc1_Ce4ByDfZR=OZ&#=euuv{$K`vY9Wo2*ki{-!LnBosiE)N`oeikfKm#)IK)k84AIwp@MH6f` z(Ad#aDPEii$9e)N?sKY?d#l7_P9py%NB)c(eK~XTnJol0oc6xLpK<>(%~$6o$gX%Z z-SXW%x5m>S^m}Li_A-*KIaN03dmcCRq%D> zg{d@E;2q)08u?>xgo12F%J%tB4`qMP`1`*|Xj$#o+AV)BA>6Y)v@me##`4 zut|@@l5n z9T$opAFjP^yKRMgYCNKj3REuA)*Fh_B|Y8F&7!?Y=|q^BJd3vaSj*KAHiH|@hiOc@ zurHI2Z_Li+Mho=c2*L4fZmb<`3efp@dhyQ^t(a{@wP16vM>VaE7wE-P;zM`FvjZr~ z3yjOD)<)00G8~hL#6gl~DX<7BC#xj*(b;MK33k<>!w$FvQ}hCE+PhP~Vj^xg#i7Nk zYD?S4h=2o*S_Y`H+r?n^t4yg^`8f6ZX5*xath=}A2IOhG( znzoUhnzc|D;S7(*>O5pajW8B-C_myzV!(%-j1jaS8nWOQBiuW#i591?0u5o4=W0zYp?kwdFhh?Vn& z{4qbhTKx6VU52iBzpP^2YT?T1zJo_@Cpi6D2GIf!TSp76IV(O1cKv4$cjLlnj!j&) zd(~}2W()lM=knVs`sUu|ZOrM282z#;Y@6z1-bGD$I{81dMQ(q(BY!F3r`rMJ`=Kf- zwav*(NwrB|#7AisrXOq6(n1-|3;g*`$Gh~jPh1px>jLfd>c@s{@?%Ot}Z`b3-rk`rnN4*~`@7=hM4VA&H=2tEp;s8|@TW9&%xC zJ(z#zpl|I-wzUS1F0Vn?4ISwpHXYO-O0b@&+Q9yD?po8si19E!DE2wK+c;~b!|ZBw z%QD4X`Qs1GAuQ9(E^#hq5qm$kWC6SO0jlT3O7g0cUeVDZKP1TQ%}~}%6Juf)x*eF; zt-kO!z}#Ek?!Cn$JAwy`0L$!dVB zlXO$J%WQMg#Xh_rUHmi=VWlo;1d zr}dmdT#@EbUI(*#N}<6Y$Q*WwrRs}=4E}?ugUkll^hYp?b82Exc}>eFrcSQ zJlE$s-wL0q0r8;yY-WCn^Q&kpONCFXqxAmOcqmE{LKQckua_O@2Eb3=( zE;cjUJU?>x_DWCwdQdyseyAg~+q2Ef^2HgM-Gv_(6J5tkwWCNOcB953WFXR|Jos}T zt$EhZmvAQ#K7H7Fwd;H!hbwlJuK2iMeS??MufVCVQT?70)t|2hzeO%Wq1Z9HI@Tx- z805K6Z%KRt% zCjkF`Q8^8B{a1H?ni*gb{%bP-m1Opx{{C;@D!0VKC4l`5#4bDg``fo?YQqx}f}5M0 zuL{XZ{+Z?biE_MzxjUt2Wu1a4vbD0*jO0=rjjZh%`27Kki|e-oQf+Ilf!%3yOfI#E zzUzLMLLr;Jva)8=I)_r$m*0wzm50ql2fS&@JQ0FE->H9ad=w@$;PZsk#jk-5BQ6%N z?hPzKt}6UKNGWOzqJWS`L`K@rHpj+)afSkE)JYy!Xf>7J!H>265IkLT*p zh(lcS>HBZSOYNBNQ?H! zW9k`R6hS_wFHHB^4MC8ASyI1;^;;foFA!D}HBEBEZ(81aLfXS~BfS)j)zmOp*?#2+ zC_^~^LDQ76(U0sa|0amUh9MiyNRwD4oG((-u{o}uIR&v$?Un4&`nuk@-~Q_UIjiZa z%Q-nYo!#9ZG?UbomHq24Wj_ejM?&s_ke@zC zG3b1jSmzn=@y0(Py5W2HHEvVC6O)Ll*B#s|0&c_U>5=vJu0P1pD@u-ZUK>nJe3}?5 zF-vaub~-!i=b1x6l6$$j?JBftUO{P?M47j<@IVL{x}2Kk&?PQNF3g}YMJe)79v21w z%&F~hhdXDIS`dVChIRupCJ4+J@x2)Eu6NAG#N03tlijfDZ?)+xKGF$f)IpI=&oP3E ztZz2M%BT>ehkL)gL}Kf#)tB!InLIvtil`<@$j&DoylaSoU$?x$ozT#w|E~A()P9BJ z4LwDas}(T6EI#H{qQrI*ZkiNaulGY7{LSH`o0XVEcn`Z)dvEP$ah=R>aZGNdYDiRA z^i^PaKA0s%BKL~;wI`0)J!pRx5jVx2)mhb1{s&G7@Z~##PqK>eo9ZDqgaVOmS=XaI@ zm8Yg1`-F#tHhb&J5IOfvR^|Hh1rLU|qvFNIZGFn>JF6xmgbmfZE9!Y|D-lw4%djbH z59i6TanpmVHlCS<7KZqECo}LA3jX7dO&#ZEaipZmnp7!m0C_iUrI=8_ZE83dU5T(} z2k(PX6_T}9o0}!r^CD7O<7K?wed7P=Yyd;>$jA)sN3a)w1Z*nO`^F+m3T%52s0uoe zTahy&*|-AjG>QMjoRVWX#n@n$6c^(xA!OQH*BN&@1em6lJg}|Dm~My|4x4Q%PL5Ts zpqvpwF?D*i)&qQqlNu}U=8yrnkaaMmw7*xmHYr}f47}WXIs|Y|PTB!Relz%60mTlv8;aGZ}A*ho)^eGcJ?(p&H!#RI&WjI3I^ z8^GtwUPangRb7e+=@s7qng@^-aZ(qHjHUyQkNTM((cA*Q~IvYM!# zUPOI{swT+IaE>pSRgt6I9C7p@7@`Qn2PdY3_lGb$rl4u(^`LYx;j)+_Y#FwASt8;E zbf70?hR>T5y$|{j;ogNHZk0@gKi2f9@G2@fj)M0zbSiFevRjkDm}cu3Z-tFf_V7r! z@+=QqF^5GurVc-eTGZ17kpS))Q->P(-_vo9wfcCEd}Y_OkeHe7;eIOLZh_j-f>Y>wYZSz}DjW@>3HYs)@EBccCrxGc;Tn`Lh*I@t`im=H^9n6Jsl+CH z9-Y5*6aHcJeAe)&_oMpymSZtyjXh@Qw>ND}xf-&3?{GCcK{|7r&-2BSNW1ko=XNMJ&h9nyTrG~d7SV+Tq%b&hT6z@XY z7=fz+N$vv+fUJ}j15%;5z8Hy1NH9BX!0(&hn^5HR$aY|eYO@4Vh^H2rajaU!D;F(-}br0Wh8cCiD>Jkp`*by z=!}qQ{z~wq zPtwr}`-=(#S1i^XtwFN?A=GY)yr$i9 z^^U0W((jh6mfl|MW4%5MVf81969n4Ph8UxK9J?hBOgMmsIe8XW?2JkmVe~tg{ztwl zC4AvdZp=#YhUzkSk&ql@oWFkqO7p&OeZavBsY3e0M!1~M)5?qfFZz#;5g#9By=@XP z++7SQMa}aM3%aVIW$wHy&(&h(LemRgD6LoANxf&L4bg&T z+vi4-uV`SkEBp_o-xkTcylL-H{tnyLHuA>ozHM+Xxn8_?_3_UWch?pbBMd_1A*Iu! zldR_XP+P1eteTWs< z>yq1ZuE$A1LqnpBUoo8H-Ybi9KHkjA+UY>Sq%grtk_`tJjy*mSihLDJmLdqCS)|Yc z{Sj&6;tMMMm1Cwbv5tmVxd1|tQGW;75owXX=oyamOD_2LhZQAH65&V`w^bS*7q`Bp zzv|*cn5i|;^fcB2c{SLHv4b4-(C3aX&{By<8P+)5Fy5{8ke@F~VQIw5)82dve&<}Dj$O|fs=2Ckl)`uRLghkEaK}Oq`H{(L zl2?*pTx#Jf8@!S+hpp7LtmhVsi_Z`{5CU&rfx_Aufq1_eA04W9aG4T(7HIwa1V}4m zY~6Krz~^jyIZv{-WrOJhxym6JiAZ}?z2I#Gf50kVQn}C)SM+u^_~^C-LFmaKWaswK zj3zWa$a*l#rfA$S#d4?J7qfov-nm!>i^YfcsFX~(nof$s{D1L&+B;&MEC~I~zCcqV zz9^OH^k~Btl&TJ%xe|O<&b#OK)dFISY&O4r6R|dlq-`9F^HDjQ#q#X~UW}MQA|Z(b zOVV{DQqO|6Q!^g`tbSzLeN7%BefE*lhPFzg=+ONhtUBn-nrfH_71;a3+jGb;+)=LG z!G~&WF;-(^&p#Sr1POQgFfpn;TyI{GI-p~XMK8m+Nn`=+I!RP z@%UA)FY*~`4<{`jxeaR_+eT`*o{VKqm2yP>_z{ea+-bs9ol&0_y7#C{VhiqN;Bk#B zL?X-ePKc)`VV1{ryU*?ALUw^9mzo=e{}csHR7lv(&}I_YC6rXXm1g+J4L`Dm56a@t zj-pjiec@8~mE9Nxja;!x364o5j{BiU`y+Q5`sXa9#>FnTvE8ZN9_O;BG^#C+QlT z&6&C#tw*?EwOT*8dI*`%53SKMUz(Q6TG(!KdEHgp^JwqmLUx9zXfb|LG8%79W8ZN} zU1msYAW2BRgXYCN#@?S^U$c3^I+%YYz(P$rzEY3IBH=O8A!$$jg1B>+{z>=U-U$Q) z-HZgw4L?Gr>XDQv;)|AhDy9uPU^1NVUuC^dDJnSs*rU&Cnh1wZA5QEHl|FU;PS8Mg zZVY{+gCvBi>lL+)NkYp?1RpKXHM9@wk?2rG1j=@_<;omgNkcow)vQIh1Y7&hYkd~f z$@K)b$0`GIHZ$a|i+;)klXwE(cAa;sINyiCIxqQ)Np=!^s71OBq|m|MluOo|;Q~U` ziKbA6!*AzJ-SV9^Bzh`sJZgMlY(X*@vx%R9EQK(cEiQrd@?hDtQvcAJNX<`tsS1c%`ijo18O z{lIeO!oyc3XLxiyzikb&YtY{RWf#!vZ%j-Z$?+6F)MON~Zd4B-);K9k(N^h)aLy68 zI#+fkwp6y=U948{+`rAcXkvFeRdmKLo3v+lO=h;aE(d!2egI5;co^2F?!rKJm(LP8 z2mgy1v10cop6dtmo-9IYqU$+AQK%$W=oTyV?KvZ{67`|h4t5z{xGKV5mB#E%q`P9u zRoiXdx`x+RF*%AJ2942$19N!cZ7+MaLHkEG$*zKDT~s?3C>o+9Ek)j-shLw}#gG$Z zp|4S)s>ipv=WMmqTSqJ0Aznt0JkJ>*^V`ehx#k0WcI;11b{eKvRERiQ_8`OdOY)nC z+Hmbkn!B8=ZO!t9jaLPkII_^Mja-tTTF%gM)wX&kQgck+(NE))V0*>6deID1n$b!Q z{UXNeM8cfxthbX4wArmAmik%(%S9HUvy_OP#x3*h#uOc+ngKbf6Y$4i+_BfKb3rZA z*>bEx>&cQxOCfP@S^=W?Xu_*8HzeP;$c+;*cI{%LoiNkJ&dslH-JI8Lv~?jh*!Nrt6D6!kc#4XT59nx_muKKQ4%b#)C`?3JZ`9rv zaKa7WA!!0#xRN2^d5%?7)(@6L8k9&&=~miQi$UdgAA z4Pm?kMwPvv*AIi9{8r@Gknrx9-7uza8RD0Xg1C`IN>8pc^@BqtUd#ngLigwFJMVRX zw=+leclX5QA#cCKi?lJ2@KK9!vss1eqXy(y$pDsTh za{t94+^y6nmEbmX*>G_XP{8<{?}liD7tcjc?R}Yhoik}J2-*klxtE_B3Q=@pwmIY8 ztwF~Rd4zCQt8(&IRHgr^2~>Jf)-yUP-b?u47e_^FiuGKc@s`5PoVwP_56hRXHZ*CL z4glsEY!MA*0xXIL?D=z=MTF0Ed#`k%n91JY&WvrLymk_wDHBkUfP_85eGT% z%O)Zj)HR;ymwyTIeJp>uP;7Y?xw~2D1ZO3?|K8Y7kAxbcbQ9Dh2%#|Uc;es1Q7h_h{%-cu7s1(%nii%7mFjUKvWOp5sJE-( z%sMTwB6m1iNxh6yAME~e)ny!FOwpUW(5H&v$b=BZavQLHd zRt>Ygg@h^cSE^dAdowGswofYw+2@q8)>-w8m-}b`z20Q!B$C*Eo=-q+pjzv+NX-0+ z!`atM@m5(yCN_1=Zbpm4Jorp6gjCbj;L(7s+di#uLxKy_x0@@rh7eiRlue_+T3hB< zb=j$4yEQ96(x+~W2bHr|K9jz$VJ4BC&pHEBwAnAev747v#g*tl717pF&?ZG&gq^n6 z`08(4Rpag@Fo>Q06>!z(QJYVtXYCcs(7Q|X1GT&B5+kg0u>OsC6|06ylN%#*>^_)2fZY`CiZt#Wr7Vz}TPft}# zW)n_J`Na~fVNdpM>9SjWEZk_n@=88|fZKc|F|Wien;aWrsJ;^be(7@kA^yTuobji3 zbHaE_znhiyOutsb4(t-jrJW0`x5MtAu+f(_SUt31nJn)7aMCEQj~}A25`Ur%JGgV+ zu-@R;)XAcimyAzQTfE7ZmrI(-7g@-TvdM0zF_FJ|aXRq2xc%8N!jIrm=I&C#99k_Q z-_Rm*y}7U9C!v9Ppw{%KCdIC!M^);Q&c$ex^4*NP?UK^WdXDgE&+PIOj=Bg#{KV(2 zo(S=?lElQ%`8i9`E_oww6kzFQNrtg^xYxgQ)=mm-svyi@hTwOcqXIT=mEu~$`n4!6 zz?Wz}QDT;Ge}~I_Ea~4(X&6)PTedUsx*;-+`FeaFz0&I7-O*(#AjVe6ei?`^?lGOD z;j-MQTAA4>jSoE3D3UF=CQ?ZnE(70A~N`6L^OSNYrqvq`2+jJ ziv_t?I^Tbt&9z00nzt!erq1EKcIRbXOtQ<(D^4N(+RI)fMjx-A2`NA_nAnw*cZ2B; zB2kbKCkfj5I*t_CzNkmVBpJtC^bNCyecE~+QFiJEa0V1NU-n|uZflS>U)O=>H9yf6 zsq6HV@VPrLZv|?I?F$o~l82b+GD1?m)z)i;^1}3l2fZ+eU?i06XH$UR{~(Yz^t)Wp&F4)s z=do3z({;DDHqlZY))k)Dblx6n_vdBb?lEb-G!`7LACWMb@D<-E47fDmcK9JtL|blm z(a6Z9N$Fz!f`Ji#6(~L%I~Be~Fu3V;k{k*Z2WKslmMYyYQUOc*Q@g%#Y+QtA(+Q)??nAHyz3C@MmC&No0&0F$ zu({}3?!IQf5HOXvgy_na7UyFPo@H#<_YnHkW>}Pv($d0|oPV8ho;plF7X|jOoO7pB zZZIg=X6eL079gcm)S)Q>mrfptoLy?}FK2~JnF}FZ_resR{hHCn*V#`K^S|t7zmmKPF1{zE->rZg8Ecqu8qO;~diH zah~%tOdKgp?rc#O^blF(odc6{9q2>eW1$kS?Aw zl*v<*d&ncyMSAEH+I^}0)dtiv5`w4O?G`+C9nySPs1un2o*B9$XB;OTy==rUhqGCm zN)11VwAyf&7I%K~`7A4%mBOz}0q49Cw=$J$JhL*Lnx@43({Fe@LCiSrsJ*tTWc)f( z?c>s~Jk1U@B?%+py6Tz?Jf)TB1Pu={Cv5v;`F5QEJb9j@iK-Xmj&<>7to1>E78-;^hLA zga;2LqMLbR9s82{n>C7>IP7g!Z+r4PBpXaCYU(0iT zVIke?S{i<{*20yLCbHZ2QG~)oPrz(wbmxKSj61dOw$8Y6V9t@QidI;`R-i4Ky5=mC zqxCtwUS+N-DvVY9$29w9-V)4JeLuKs&cK-O<;YH){v)JxRjRc(oRaJMu5^}|OGIbd zLvgMf)CJsx4;!qqL>!~{v{&c-FZm-eGEb3&%EcV7rf?+(PxxToJ0~cIRyj2$eX%UN zzkwtHlck5YfU${BpX>-XC+d*!1K_U76wowAoE1!&d^C zyp?r1JZ^$fQkKSDrKFCTmo;POl`CIZM3y~_D>Q}HiMXFv@X$*{va}x_RTtMSRpfMcfIw=+_z=!DYN<=E*gfv}sgtK0`{>O_ zEz?;HJFWQ$SZ+l!%bbDXIzg9;LTsW2OZ_;fpm6&vm_OM~(<{%!ZNe#AZ2K6|QKcxU zM;QE#fDgEn=hY($wrTqvxhxD8O4S=)fJtV%sF~np_mJ8ASs`-`4u=(>kljwH8jR)pJ^UDX1aD#b^Cq`08hH(9Rh_J&UH9V+cZYg{?UsD` z*F4o6<_ii$vmFyTXEc1^gihV?x6h6$n*I3QpvMPSZNW{i2TeN3)<|RQ zXC_e_?d{#GL${(tYd56_ixgGMtkc@<_ZEKXFH6(Tge{59J>zvror4MPzJ6UNsFzLU z+v48P(`vE7Pf;gzDTT0Wc@g?*CeAKXbfDYvEOAfG(p~(;4B^@fwPV`IBG~AST6>^4 zTTOs`xJ%vHVfb6+a+yR$_e6Ndtbl~E@9o&Y$*|d=uu_+7Zf%tesm;_{Sj3`R7095i+=BeVn|N(J|IK&+6>;}3zi!4 z^`{TZ>r%2HBmKc@ubg}GRNuZK5g;$o`sX8Gw#&Rz^)?t_b0}sg^co7**q%aCyrk*NI2puJbozd+`{% zq4e2xnOXPgCsy?CM{9m>#!0hrcqW&Jmv|9a?vJl%*qYsxGUt9W?-kTj82BZKy%JEr zC%!{^H@_uy(sULk)Ukq0SslpD8=#aw;^`)p$kQ} z&r}jB2Hlo?+AW}WbgA_ZtK79ny#dDwle)Q}`eOwhiD< zT_S`Rih1WzqsSbQ0pwEfcuLDwTTk(ugR@q%^;+fkl+e&Tj>ZDa+yjRzSEOv-z7Nb7=SD=k_nLS@}ityZx+QnEw_}dY-Cq5bO zUlxDX{(h=H9F;#?e{yVHcQkA0x>?X@-fnn2K--soo^MRzE0E{Dz%Ef&%c!?>&C}dm+?7JCwk45k|dqk)hN^T_ae*-Gdlsp=YAl`2n zDNIk&zAxs^$#{-}=BoSc?k_FjLyO*%7$yj6I__X-$z+JMZ)xvF;^CJKNTom{9I-sb z!IHdp{#&rQ!svHN4iK*frvy8K>pv@;27pI0`w-pOm5w;fifSna_JpCWF01BnTPGf5+ zUsm>fS}uwF1WS^hJm2YHGIqSICQWcOj~S~sz5D{XWS!TznY|bIb?=40OlJJ_yA6>~ zIlQnJ7l3L!2TX7XfrrdJZ`|Sx@z9dMA~{H^;O2ifs^2@aeQh*FcA`d*T2f+-=QBfT z7ddElMVi+*`sy=gbV;rF07w=CDtxAnPV_M^l`abpy$g(RxNaqgrt$K##6 z-IQ|!HN?x`z}{4u(xk__gn@%9yF<|L_a}Fr5QaF{1XF9p-;B0?XWnT(=;2E14~Y3? zY1Wm(KSV$@*ax`l%{QQN6qJS{`0XPm4lPwt0T7XQ+bGZ5dcI|RuU2jtOnn2$z4;=_ zDGL&N*sRrH$Q4p$*Q`}_&@8MVp6s78-roi>%Z_0?TOkfB>aabj)XvLpw9O*iP&|^< z{*^L*bS&hqt+iCJ2=~m(yPn8kyIwgJ<_OE1+l#bEHVS8Fo@gKZcoR$1=ks=%gY3mf z7cd^h+HIGsO)I*SKgAA`;@0ek5cQXO82n8$MBiOI(fd?-;ORZ%D`XBix2%;nYNs3M z#1HE;b+u}xm=@V|^E_;kyPo?Ni!ceYCwUb`eKy65jsJ9a7nw%aUarFVn7zpa4t#bm|F+>jQeO6uw*$T z`{Z7jV!ro|5W4+q1maV&{~nFdEflp;fDKd{Jc<%doO>2h#4)A~Q_u(*p`=@owDiG; zurUkqUHUQYEp&ODXKB^>$Xy0)nQ?Njs6w;EOnz;z?}C`J<<25$o|(Bk z!ENWc`d~Vap&j7I&;x0G^!WNjHe-LN1zUG~g$3K3c#%^Qfp@Sl!q+y5CrJcNxYFih z?eW$y%blhYHc=vt1f-P3`7R)!cqLB_y*kFnuT&dXv(lDnQ(9?<mT?9;(Ucqr_?=^*+z7Xmr~^<^ARZmsr80=>lg#A#MXqQz%5>#QWVfVg=TFM znyg6x7>?Ga9&4r&|M)xre`^a7nZ17Ooyymloku7M`&zHIWU8zwQSY<7#QC=U71jCU z?+&**+*E-4X08ph^r#IJuv&7i)&MEfRC^6Y0`N@Ql}_V!QUGpDL8~%)^Rb+&H+t2X zB3xX)aWf1=CkEBbsVw{UO|vovx$=$!Vys_SXd^jrZb9tao^iH~-VvvH_W2kRW)LSaV)aWwYuk6wSGc4K#xa|L1T!@WFa3MeH-a}Fvwllma=Yz+HZKzb)ILxQ}Xp8(a`XR0HiGo(OT0N=NFqzD;KE< zpLs~7)j+qDJ^5Vu&lg6}4DuBS#Lp~_O*AW_7!7px<_BrN6G@3`>6ltjJBfc&V|XDt zl%VZvLd#`6I$*|Iz=gI;Bz;U}FC`LGYRWAd!}%&`tK*2;PDbO2Ak40U&8l11DUx9;&-IYhKZyS~mLO;b z=s}oW)BzwYMBD0`L_EC=hN^=RtnfpCrsyJ)kzIW;S@0+*-G$b@Q$$To^X9K|ZQ83G zxAfg_h^$^0Y((##?NRimT(yYG#k)Q8i{-yKG7NDGr{){#?^#NBSv>7+1 z(XFCZP?=Hbaea@A-p*m}-3AWOQkcZRl;JU_S%7ObfPbh)?_CU!HB6{PjjWq&ryU*Z zv(n>CZIf`(J#O=XuZrB5_+g&gG}iPC6-ua^iF4D;Zy$2MFisz5+xIWM*<83d>{Up- zg&Jo%j)HC%}WRq_eJh-2M!-%aR7|{iO0W{3 zD*9!KkCwCavijrFaho2tlA5FOs|iDjHJR(zs;cCi=UKcxEK_m{lP%@>&3P}HrJLYn z=YwK^LqoE4ndObbzg7!%{s)ZO%^Lv5sj=1XUK1`ODfGMY>v19|4e%BJK*Cn|=L$j{ zH|B?fW;w;HMT1@?;nU$K3aYKW;uD~t-<1D`1sR2&T&t_FyyqmU|_cDcS+zyg_qt2XH-I`Nr+1>R4>Xq24Adi zXp~B+klvD;cCu3)d1*I68)mCxTpx)&R5QcI`r5YEs`>Cn)jn-XUrIB3v)ee_lo2^K zLzO2&>SK-t-ZM+41YZcHfR~4~#4jcw9bD{yh#s*!!&BHp@53dA`H(C>337sKUv6M$ zlnbBn;m#er^pGZxXIF)YxCw@XGeoA~t>D%162cMzavq>UXmyOSH+2!Wb9;wGp@3hT zZK$D6kc7&S7ET+w2M_?g?R!dpmH4d3n+BuZ8v&OB-y*`$=>W|T5o3O(gF}P^s{I

    *t}bPI^d96~mpiy{+c9Hv0PIG22Fa|yfKfO#Txce_wlxRoiBKAi#L8w~)t{qo zV?ew3@_kB(*+cV$8)XSeoOGA*^eo35w-q?e)T0 z^OKPDZsMf0kV=>;fJRuWQYc#mHCf)3pvKkDDXl$RxhM zb%)=mi6GtM0-xlLnefS{9oKKK)K0wJC0=>%KMp(a!3u5T9Y#8~#b=N?d|;eqUWeCx z6r5qM-*lz7p0!TT?t)ls=5Kbhr{=Sz+9$N~e17hJb08MA3%yrt)iOKH*gmOQM6W-C zJEPIvyap&Th{&rnal>SGywa@RtNY}AS(I__%WlS5IqnK01^moR*p6ti_|;B!9nWv< z$>Z&~g2(*;^V;}Ih-MGcTl&)yKCxl->HXNV9`WM{5-Z1`$Q0}G*d7YYat1!EoIZP% z+k5uV?blGm;hJEcLlg(vzMG&$&vsX`)sWC(?$}naZ(|z+DKdo9vX(}$V-0hH+oSIU zI!Wpv6~IgM<1-@A)~1uh+EXK@yC5KbWJqmr-;#&yNsCCXnL>#DAl7|{?-cZ6 z!PuGiJO(7-Uic)N;)JInP5M`zg2gATN7H;w{f|%xIqFIqofG)g)<4osAXoU%12!Jw zW!uW9BANS(Z6TUJsCf4>Hj@I~%eT9$RFEJ?xK}d;SGNoJ2f;{qZS`&^p*C}P<)nEp zJaGu=&aSdT-OS)I0+4OawNuh6*X7->6SGkyxin4xE`o#- z{NMaIBi$Tgz%ZHVqPlElxxET0J)9~5@{rZqhZUVC{ER^ps}yRzT3 zg3nv?-W^?pz}0%isI=9m)fCU)7m3?iU8NXa`CJA1dmUQc)TLnvys1wnxA!nxQax%y zj|W!WWI{wQk5Q3mR=Tuv+6hm60lHB;{{2iT0*jhP{>O0@5f^;>y#gM_$Ly-__neIf@T_y*V)&+()!_JYMtA85>Dd z!XJHO7Ivi_U&!5f`OR5I?YsoUOHndc=vtfpTz|yoisb*DMg2?JxN3Y-DdE+<`sop` z7SGu=ZM^Svv{_JH0wFDEbUxL#F>lPc)1?GGt?hhJ=cMMpf;N)dT#&KsIzZR7X7^od!Vav+Iy*q-# z!3B=z&hH+~fA5ouq5kH$LmnTzLYWz;J>!y|{78m7J`gWep2$ovJu*F|j>%}U@w5cF zKE=nY;e26}h7kEoOn$a$cq3EnC$TTcKYIZnO~Dox7go9almL;++r7!{P;8}nCfS!N zmJ2nY-7R?AT7Pk83G4pFV)CqpdqV)4m*Bf#2soL0xDc7CR~M9WE`Q}C8zK&}zg%?E ztJ&Yu9)4cXvN4}2+1|#jtx*>z%MQ5@o2V6l3C*g?6P=)PLFA#+4k)?d5w@FW%l5pA zvvY>iDTgQs8!NuOg8$MjQF9Zli5u7jfvaLKk=cHDslnGSlY2Gc*v`_WJLa0Zq>JDk z@g3(>ggoDm1cN8-nS1UBt?kT(pP%q)IE=@r;_VpYD-qS9ee=aPCqaqapE81r}c|K_o8JovPkjwc#;hy5J)%i!UT3-ab9f3xgp_CZb|% z;-ZlxZOL?nj#hnMU?IIttz{nwj}6uJhc&{E*K ztN4R0kj8u7P|s#IiB}poIx!Y<%&$;5%VgqynbVV)t!K0G2AI<6P!)oract#_@odF1 zUs#qpE`qs;V9~XvT4)v{h0A=WsPK}K*g&^7@HC7hxDPr8G?o4E5uxlQ_sVRK>Qrg; z?rT!ecJ1oaHrJ6J4|P1z!HFUY|2dRA1^M~%Va)-4b=2WCkv#4uSR*ve-K&LlmME$8 z{D0uZL0cpc3G<=4LuxkG&T!f)!Khm_7$HGVRTR|mRsl7|PDUd@46h>-oFLzpS`~cbO6%ftm0Z!L9AKBl%lwxjxoRrpRe7L>m=Ugp`T{84b0+^z6(<>iM_*txaeI0$ox_zr`j%6(bwmqLRXp;zI zgSg*CGKTHJ5WLFUyDBH59M-vOMV?-b&~u37pyb8cuGYDT-_(nSJ_P+{7>JIHEeu#D zv{m|#j6&V`t0-ROfH+Cs10s-NUKg-xzn_<_RUpY~=0S){CJ*8YOM32>)2$a4%!cvp zUQCGQKn2Tfa*OZD=Dhj=FG^B=Z?iVzNyFj3co~cnDu?vbakv%hQ4DKoCM zS?fjh&RE)zVaDB4%7BRz-@-+};;e!#uMjR4BlJYp-o3w^Rc3r~R?Vknech@>L9K_7 z=%P>xIj3_0$U*rBKZe&(A-&5~!-d*SAn0S`jP$}-yoDq*v-26TqiYYsWBo`{>FuV7 z`(~1bV-g=XVp^=mU6f=_UVz%}Wr+DZ?w%ykFES#!lW%!l2nt=^)0X$Zt-XpavfX2L zi`EMojDwL^kd>RFw=6>ozpB|Mo2XO;iLKE@YIgsf+pB7{Ksc5$-+8z_SA3++NqR%x zgr90(&8=c737>x|_*b=a5n~?)_pQn3DJecH8CAG669j~|uU|JCSwol0CcA6m3NV01 zV&&XbQ`id~*xBQR4O>H}sTimbO+Ry{QH`z7D6e`lc*V$$Q!Uw_tzR{}i01NbhN$H% z?9kpxSnhN5fL}2)e7V@X>|JrTFBtHTrRI79ntTgQumC73mHz&PlJWHZ8=p6y*b}?m z=O!VoIC|cKM$kNgL7~sNP9py;6&PaA{iVokJ8Jtjq$utczxFaFfVsM&)#dBvgnB2A zgP}Juj#oo{7g<3^=Eq%Ecf3KYsi8as%`T;w9ay}VqWv|IBLZ4 z?kD>g`WcefrGBJyB%CUGxv3HxsvZx%AitnSU!jo2yN!cn=c$$?vEQ2?ZbEK8b&&y# zm1453iE;vG_#_#;XXRHo!6q)Np^XqG8n&iFF`FH3(JgLH0o^%s$r}1< zt#%XT$s1*LdiD;_m6AbmQ^Ngfr$_A-WLg?$KiG<#6v&G4YY86cDP^6PDVYr zaU@8+)WcJY;YW#MTA0(GFD{PKVjuZGTn_B~zGY3or+1B7oU}$05Z0~%9&3pk9xx84 z0Jfa>hH8$?#S1bvLTxY)BG**RBr;F^+=bTCu*=ZzGdKx@mBhJ{^{~OU-fZbB-&H$r zt^gw}s(Hqq-9$PGr0@3jgDu!4WafQ3CR~JXdoqZ6HzWPZCv@^Ho~zV>!cXM|bXL{k zEt9iAcU?Xzh##OJkBA~;-@mc=iI~?D%uQt!8377eTgD=Ze(j+rrX?Npl6w@4K}4?4 zJP(vQJnXYKzuw5R`>M=o;OzVQnL2h*o*=>MG&AJ#nC|(fE#{tzvvKvpC_l{hU2SwC zt=tTJNC5(S{i?bb*Z>J&l}}Fp(Ihs*d0>q0v<97i0PZo^)mpXjIpyt!jP~nIw#R2C zyjEsO3b~plIQ8=O@rJ)$>0_yGK}}4{bEFl5qIrn`HOMDqEyErywuUj})d3a-FOm6O^fcXbB@VXTxZW_VZr+&i7LKsp{8`=Uc(0-hqyVfnY+^&TZ?@2fL`VOe>G9gJasuaO~DSfp1 z?&6L5gA1Kcr#xszK`%;59nkg-tM=ifH}PNfL|NP);C`rlkVhpS6@JgB4m5Q)!(!GG zBy*D!1M{(3n0(P_u3WA=H9#is4PBjnV&<-~ZQ3XQp*X;5tVC`h_RIvR8^vJ8&fYw=Cl0+UfKUDWip~ zdY0|~mNEv2{}G%PcHG%;{rd<0!Rx`XQT~Zya|>qL|C<=fpZOzMvS9S>vul>?oUsGW zzamJB9v-63|ujgI(frB0X_sXK^$3QbY+1>_yEpYwMA#*_z`fXZARP zd8K()q@N!MjDZ)IUJI%=*mZ1ZPgcMleo&0Y0ixDgeTQmL3Z8H(1pnMHBc1x?FLEOw zl>TG%eVv^Pb3CU4-q3Dx=M8~7M`ypN01V?J3OFDgj$jdWfxe&No z)(Ncy&!Vn<+o1F)1Q2*DnIW5ii4R#eX`oqjxM^vadoB(%Zj${XMdhlAV zzyH-dDyS~u59o5GAxNjQ`!U+@Yj#JsC}yF$y-L=+5C9uZGnq*r?1-}TuO#`=<-S+7BwF(wR;YN_8193KQdoc@ zm0HK7jf4GbV*Nwdm5EXo@vbg6pX9k=04kBz*l#tgo1B&cNxRxJw6V+Id1_3je-9dK z3NBuV8d^!}VL9UB;n|c#_X#Av6>@5l8^#2z%g+#X@PVb-)K+dS${qMl*+?L%!s3sr zi+a6^_B+b{>P#jJWYaGFc98FGRvWd;3bep){L2x1m6U+k$|nhd*y$Wl{{jDvJ}QF; z*1{PzZksV7pZT@$*H>N>naM={P>J?Xb8+`M`AMGOhVtUG%UH{yH}BmHQ+P+~3x(yY z6|6H}4~WBaa6+iCuIM#JjqSD3$U5`l8t{3vdY?qW?!4ZnKC-?;L|tg(=QB;5*%ef@ z;qFFvHL{c24&_j`nit8}r>6`j9mn|RU%GL&g0JD|4}q(Q;oa8o61zS$mFom6Rut-E zdA!(DLi05!qQSb!`7s=Wg<33Tl>geF{|8y`MnwI?U{-V13o{zK>wqN|a|$~4xIkpD zhF7=H=ESgN?ZY~qnBo*CWuE@diY$VFg&3YaRK89FWx29@M5ve};sbZ;)C`33)ZX@D+fl#*BfgAy9Ab4ZgIw8PbF)rUfMT|_SVK8J@0@e)jo{Cg-d}L ztRY~?(4mCX&rj`L+>kPM>!)Y03VI(-9=i^IijVWm+JIwCa{`97yDbr!gJq zk|1eqIFGKWd#BU2G?f|*Kyz8^)u~Gd+TQtksHfT>f;J~Px^Jvd&B^Y=%%Qj{7E31AHje1%{o+@csvBNXj zHXlTxP(+u10watJn9Q^k!%XH`JRRT3-GK+O%!pzQPL(U0KzF;eR;LASQ=?p&OdV&` zU`;)9Nl8g3BmjW^eH#S3D6+K`V?g!49=|`B{Kp`(F?4=}3muFUO7gnG4aE^JeUmrk z;%$k&wM}JP_7aF*E)xB)!odE*&x>B~k{nu^>67P;shdq`)U1s+bq}7q!f8W z=QN%%d9m;hM&z=X`L2oo3u#1YW;v(i>v(8IJ=;hzT$I?0negC--}dd-b07Uegv-m7 zz6{Of*?Y;~bMw#K+ z2@SNfs>*Udjkv85M^vlQb(7CL`urvKh{Z1z2=kluOtRnRJM8?pz`#b7SW$}Fy)HFE zLv|lh)ogMFC!dfy6T2Gkgsg*z_;b@E)X~XI)xpg8+2$Q7bEBl{p^38FvT0*)vUv%# zekj4Xl?#!S0M+$z?gU`IeA?LyPJc?$;gj?5K8#h?ccmU{D6^^jJFtAj7;4QAFNd_- zww^j@2P035U0X#~sH>x=pdLPly}&L@KfmhfJ93mpfRr!dGypMa8}Lwi@!<1O{v0J1 z^3@5_vO=w5-@}8|+QA|8(V{1p?&dI4nW6r6Rz%C1)&fHqRR_`fpn~0+=>v>&`wsSv zi!0G4u3TN7Q$Fli_we0kO{LP4EbL!4X->*QcDPLrM?GVUmu>vSf2~~IFP2c;S*qRz zZ#u$(30IR*qJbwnyRKIs$)u?hWJg4EId8aD1n?WbT-WO4XwG*>PD*qp4ga^Or3?V} z$H?-cRt@T^&}}A`%8frt;zMk#?Rj#pCziDU7PSDCGtOo|oyLYT040+O+4A&sm55|9 zwu37vv0;>O>nc5@gY0|FSL72l@cEE-Utd2|RgZsI4XGEtq>+AMt_zum{jfXSlnA}u+~S)aRd(naTgX=oH>KXNc5 zlHdPIg8viyKPuHuu>T*#=Zgs(D-~E8wyNdP3yC4o(R3O=GrufE?rX9$7>KBeLshWr zA;JGMas4N89{ERxq7%H9f<3$(bNr#F36yp?jk8)5pNnYco&W9EKbv&rrEss(? ziBc^JQZ;(NS#`{b8m^~Md^?Ec#D<$FPRu#gxXO#MB}eZd6wP6DbTqy@;nl=cwYHPv zY^@m%Ud=X%Hy-})z>HVoUunoup3pSfiaZx4PV(bZXm`dkEwVyvoT-hRKHx8?|! z%W9y3AK{-g*3R>ZV$bXT*%!-Jf3)=W+Df)|?fRl)t<{!uBgV&M6@PPd30{rL(bZ)_ zMtx$n1FolTv4_nJ(v6Nl&#M=X@Vc?|bH}8_E?Er?Dduy8--oF=6?1gqA4XM8x?iw{ zQ}jI**FpJ=ZhOyi@NONgNRCW~ztIbs%Xol+I{G+(e?IH~$y2vNKLkh)BFomD)7i6; zl4Iq2Ni(x7pI7bw&W^wG*kG~I^XNQl$rEj%5m%3RMr55EMj1|#zTaOn4JVo7j9zx8 z=t+X}?3}S~2IlI%T?eh!gWMf`P3l;n>+fuorypsz#B`g$iQVoZB`O4b22SFjTr&s| z*odcn!#sU$)7y?;kzu}|)Za6Ci}VxwB|83bMv2t}WNP%qS!PA>eX57itrx^$=5!M! zw+wYg+uu31qV}HxF4cuTZP%KSap!y@{ae<^xvoz~Fv!EVXDorIXD0b*^E7Utd4-5x0y9$m&1uokNlMOwvIB66G_0i+Qr_ ztwy?C{SeaEJv@SVI0|kgJVyl)QK85x=#u*3liJf)_s)Q4RR zhs4RZ6!E0v&8B;OMyWA!HI7`VB}~ZO=(h(39-I!gZE^j1d3h0} zIs47u$)ThXlTsW(N|285LHdiq=%WW{FE*k#YfZW9F%y)J{r zJXiET6jH^fX2aEu1b2Ty-VK4An;DxSIHmDv^`dx3O(GcrN2P9X*PV6qi|&%JAA;=} z4#j;ZPcynF_w=~E7nRj%N9p4|O>niqPi54OXg0AO7ExR#YiG81iBP!rM!<>u;+vA? z028{orcMZp-b4xtFE02q)~hCWHD*6bzpvzzB?cJNQ%H!1(;3M91~2edyxp@pFV)@C zme!4+1O&m$fh^RGD@rcUCLqz*V0u0M{gto9P1?6&x$#xA;8Vku^R6z1xGVQQ^DO13u{dXDD#P{OA;Ys;bd|jXi;EWGgzOWi zz>2B7)4OU%#l#(6Gh~{?JMUV; zR*9=EDV1mpE4kfq<*9~AGS|{2^s*d2Jp4FgiII^^R0D>Fq6D*o^C!L+LmIg97qiF7 zZelIDB&C!^41J)mdS~hCHXd#FV2$>X&Zo7R#q03If{~5aGdQ1I8Rx{f1qa_=gVR$a zsedwz&#GkOn~9C*QXG{ewV;>8eO}DP8OLjartOSQp}M4u*6P6EFW&X4lSi%+WE?2S z<~TY&vT57X<}c^?9Vd9i-9K&}wr}XXaGtYCm;%xba`#*{@Tf@i+GuSq>UN_ho7JG4YeKmN zjMbiz$ra@lC-A_;R2|fkLBQo-^=!B3uwZHPXP(+lfejd*x)xSHwkhE{;Wa~5lRJ;O zo8!3S15%hR^8!ih)X9ZU05h+eR{11OD{1K%{6u;i51Ej`hHq_gB-i$HC>fuo4CIVa z8XlNm>$zkbL2q;WSf17#ET-fd$mCSM5*>k9S^SibQY_T+9L!~5=Iv#=Ug_P7)`_XO1vLEj!>+TEBR1o!O6)Y?IaoPTMkMhG`Q>|>s0Ky zlQrg%PAP0Rg1*EVJU<$&2zDN6z*bH8!wfKZfX~WPQZJ^tK|4rsi1t+SO3QwOA6LCh*bAop zms(v>74!u-sCMs?tG)y&3mR~=A%8k}kUjM!4C^B8_w;Y#_jS9$^?=zXnN*}H!hoZL z+H(v2!5Q#JJ}>Z2UXlot87O0LY$vOOAiGfcfTJ}T?>C_gmF^lG9@j7CK)W0AzLF+i zgH6J~aEY)oa^!a$qCmMS=_>XorXmI1dYn~~d|S@w=1Z*Ot1(s&p#0H#3x2Brvu5Ky zp?grruDVO;SSBbT*lK}x6>K<6xNvf`s3fjig1;3E-r7Hckuzd#vi~?qe$)=O9Ci??`+2Q(>F%C5#_HszetQ&nYG_k z_1eHy@`zU_lY?DY-$?UBEi>bY&NIpnn=!8Zg#R5O{)k&rJXsQ?duC6ijdRCOFe;@> z#F7awCUNI^VB6rxx2c^0b-#V8QelMuZ-lC>-QU~3`sVO9numeuI>m1o-KUs$rxnAs ztU>e9rul@c!tFq(G35=njfuwSd&eBHzYr`|`u-1>5G;EMK&kMLD6|%r&rxopnPcz2 zX=ArUWFD8%j}cxad!?tpW z@HE!%tFIOYD2+Z14kxX0A_N(o5m~0b0Chl7?K{%Q3r}sf;sq>*Cnu^ej$2^$l9bBVN&G$lG8zT-E9|{-iDZcM&R+6q5*9TdeF9s-?j!LU7>N==bN?l~|ylYmrEIdPX`;+}7>QjmdH#=Z$h# zPkDmlBi#i`AaQ3W-;nNs*WOhCdOUz)UKjHT&i}OKq_vVFRPggHC?5~}8kSsduUy_1 z_Shqu;KEXU2rN$yXkVUY=!iB^q91QFlo)Drc~zT6EgHg$T(4do7DR=Wn7T+B`Nv%nu~+x5E%PS(3&X=LLqPQ z;&&$qq(~}i%dXB#>S6p>s~0kJzE9R-GLrqnc(6PeDI~ut>Z49qma6dWh)Czo#eS0d z|A81Pv!p6lknZ_!PN#lm@CyzNNDoquXEQ_g*d>W>n@y3P^Nn72e~)fL&Eb&IkI|L-5`%>s`)T)igU6Qxa&{TdNPRVsu^BnQP`!Iz zUu(5#I`9Tt(#M>yHO>PjT!%6s>$@ zyFmKFbKE^f_clra`Gbc{1i{b$>gWV@LV~nQ5=4~_3pC$ zR6(?UtQYluD+9$PV5t3(Iy&J!`4o-i#g^{#`#NAp!DnpEZDN|+Vbjz+MJIA{Df4iD zTyuTVwXcA&5CzMk$(@pOXWVn>6lpSty*V-TW6wB}+Y&`^JAI`Ua~o`i0p+af19a)B zoHEW)VQ3RHv-k);i^w9ekdmILj)#YL_fqfwXgc*Jx0E@a!tZdYHYFHHl~YO=BnOKV z6aZI(HH-GNBeiqJP^vIl${@H~A2hx<`C&cFVv{=ZIpv&DZ7TWjN=k#<4~mS;%usWl zCwt5l0#WC*KsRf4P3^V$HRo8jg5{({O$oS#>mhG9U*uXvwsS2No?b3nK;zd@6tlXc z)mSSr*431^iwWh;^8UBesoNgqiaL3pGkZz}KgAzWElO37Dn8#|4>@RK#*>Dy$0}i{ z07@ieqlSS$?Iup6t~Q>2llzXjA>{k3RZ5;=vGUiA;`Xy&Se6QQ0w0)4@YGhiLs$FU z$(iH5K>Vpu-Ek3ritnmjh!egP7YIkkcf87~ap-tcC93ziv20Y#=9uz{1vAz6cWO{* z!n+;C(WPX7x7{b+3Bi}BGFLqLyx zG2{Obdx}yYcl-=Hxc7IU`v+O{O#MNP`LOrO{7*5GpZKw+zoJEt{NG{RD}6vk z&mIdJ=Kpsb6d&fTvQHYj(hQsWX_v+7mNlC32?+soPyTH;3%8*)!+>4-#o8>RhHfKU zE_#NxniO8E1``tca)Pc=(~)^s;qK6i=nAMiK)ZZ?E!w|FoG<>T&kE||bLtOBeC%jZ zMMV@W8@@_4f&DqiT7C@jLBHUNorxNvUIHn63^p`t_W|P`NmKq0s?V|~aJOxvXSj!) z$!eY&;)Ag3nG+Pp?1LGQVK83{j4QQv)vR~q6v!=XuzX$>+0RygH?$rtogMrDbuNNV z`RC{8AHUMrAHf87c~`$8;A_L33drIy!)+52Q8(VIeSk6rwZteqBc`-eoW*udsB$j_uH)W~DwEz)9+DAyrvdpOf9X(KHe@@*%N zX}HVu$MLrp(Embsw16yc53Afx!#wqfQSXf?!pb(V{bvhN*GKV_0}o5HCHHLaH8e;E zzP`*f4@xxi+TWt7-$oaeJ2VjfGvkC>z?J~#qx>PTRw5*&^}@3^KmE#neJ6f@*1_2T z^1uUPS{C$bs~*~lO1&nb>zne;)%{-cOAv(OoI1#ZwLl(Jq1nVOlPSeN3I+uMMT|Qi*((i zn!8u)XVf1Z-29Cq8>%gv5v>JZQI0%V@04|Z_)%DW|4bM7pXHeE1lF*?TCVdeUF)2V z1_AX$V{*49>)`uK=PB=^z61Yyg9?@_(-SO}&6CIWEH*yEc>39fOkl+oV)XXpUm#7F zj%hhUmEM&yoBS~E)2dPT)fM+2gu=7ezONWw?Xj_T=S-8^SxDPEQ~4V%k5N8>wAvtO zI!}JpUCZtsjVXK~(jgLYeVz+Z-Y=c-qbRl4ZQ;i0jJ>*>WRlQqR#p#@l z*s+(-IMy3L0_b_SN8`QzQfBK{k_KncH5#AS=e5U+ElcjHK${;M^yI|i4plZbkuiPD zxFKhoz96~joX~x3xLekjr2zOdkafKud2~T9?)6JQj?`C(qojMauOOUv&4Gw0`#8Re-Y&CVQ+9d&3*d6%kH zN&lpHab`77W3=WTcGkPPBIu!uWDAvYf4PbETgx!DX6ZF(b)J9|phFiDu(}}j$jFq4 zAgSIO4K(gg8STd!vxEvW)cw}~Cq9#}mqbBZ^L7MVBvm*;i4F$MAB~MAE5T?Uwi+se zzu8-RM89JsYT*AUDG)H)XQcUW*r~;TML7^ST&(dXNwnd^kBW}X*nc(YMXk`C_7B*} zMC>21Q@xwM#fqfvZ1wdoz|}(B%bs3*_P97-lK|dsF&WME<<`RRRIv}MYyhdpMKL5y zs<)`-B(NRTp6IOfAWWsL+UJ^T+5HShc_MKUBfJgBM0iU?sO*B=T95r-VAPjH9YA+} z8}r+frxRidyi#Zm0slXdr;{wYdv;QiD=gXUTlMHBU`O2ubtaAUq2M0mCk9-2-9b{H zns@rw&r9ucSq#lDjHk@io109=rVxt{DfQs>{t<4Q?Q!(5Qe>Z(K2`I2MZ*lW(}*Ms zudm^t1c&tvb*H1nO}T#>UbhyW9;Uh;ZLd)TK4`}oKjoE>iZ`V3jGhYk`8uXXkH3q{DQFBj7;$Ug%A_U#D>5%khs|0O^ zwak{2pEg=$^ckblZ!`1VEHkz#I*VwWaum1peSjvAmL15-d%uHh-ZW=qzzrqdDC>C# ztNB5OdG6DA3&YfSHn&>#avewn%}IkCNPs{tSBouHuX)iZ-D*u}&FQ#NMV@eM z)ILjNQ4#HAA;zd=ghXh2K35uF_3`$H2`Dot7JP?k41mVd$kc1!EjxZc5@1h798;f3 zmnY#&pmPiDR88Q?^SLFwDJ+Cs>Ryg8Dw!6()5DucnXnCkaTT?O^pV7g&j zwZpAfFk4snzA|}J>gFsD zgoYot+gxt+2EGc{SiL{lH<6H^()IS{m9$YqV_)2dY_H0jn3j@XInfDg9U3fZtiH?N zlk58;AWptwOYpC8@c@M}Z6)+`k|PObCg%)?OAq((aS`r5jrv5R$=BO66%=0fP}cg1 zKhn^xcWSNNd^B%jFtN2okfAeZekD|{tCe(NB75s_;Npkz0Cc>8>_J6h%t9SxVH|vY1u&Y(+{4<+OZiCGt2lUF$ho* zfd$~hUnc|V4R-6_)8zzBHmhMooA}~_i#~~(y@v1QL~SVm>i0gKSu44uzrRU-X?)zC zOBWXpE%yz_4^dlpH!5Sf-dROpFa(qJhh+k#?1o4OL05#mf)JwbLT5oMAs2aj(XU}M zI_7X%?%1XzwB2<0#7G>QnW-^TnL>%5DREq&#tZ zr2rBkl{}nS5Ot>pNa!t})EQe%pG`ZdJs^p2bx8=hM62qJ6 zVCo0|nbdxnD*Fr{w#k`l+s&OJ6-hbAFE3y6m7W8EYOy0=g=S?~O3R|GZRb7<-PMXQC5Z4ElwN|Sg3D(qEDEvNQ+M@no8x$q zjF~g(6ByCx84}(?lRmx6auAJXoDc+2oh6Ig(4+>`#2@bVVNl(=ib?I5oz zxj7S&#avQ|IW#4tThov>uS4eGLa+yQJM(t&Wx9H0m|J0u)8>{26r9R<^s#c@0E39- zq3>><{&A8oli;lGQPB`HbZ^3Wi}5`L7dw>Mr7{G;4ly`4Av}uE-u+|(+I`drEW0X~ zb;g>jKs;FaJ$#nMc66)ccO7WGwP=GF#_ZmBl#9Z2M{1)0)-M`!pG^)JxV$jGOYSH= zQZfmMwI?h)#N_e-bR*_YTF=~spsUrsZON%;qPioqf+q-y_Qji=a#y;KE)6@c3c3x5g>8|9plTi$Qey2Zp2S1^ zt609`1IAasJ;UKK`Jkq42APWNR$y7>K+>aiQJZW~_oJBbkU74=B}A-Q`V1AO#e`|8 zy#ux<#xM>A6W`Y(3;dcy!wcf}AGHRaki&JN7nC|uUQ4~)MUVO+=%jh0P03%+vyDp2 z0FqOK#!SpJ(Z%K1G)Y{$MBfFXV}@GB?qn0+IIGHb82_;#4F0h?upxe4m1e^uX8WqZ zK2CEiA<=)uZoU#GUG+E)9T%Ny`be& zP*#Z7`U;p?-J6-%z9)+BDV_7 z5agz_d7c#&{e(`T9m+ODaj!dx^bfa}geYX>CKdGGGw!1)!cqH3WPi)68amF?f%nPJ zqVmvVWVdT*r!0TFJ2`ZaM(e_`2}70l{3Zk2aq9jgR?(qJ~0@ zcW1L`Vq!*TUIp4sK5VC}^QH~8kfs;iEMzxoj)2cOBtJg$dNoVTc<=nijMOf(r3OUv zX3i|Ez&}|L`Ihs#La4((*p(93o9h>k%egEMMSWXJL8RD!wX0a>u!b<3cEifc@4;DV zf{e8TrcWA`oiI)W{#NxMGL+^fD{0`b}AR!HR*pP z%<4I`KA<+cJm4_o@<)BNMqCvz*R42DF>Ygr22$vM39ind(dhDGKZu1_X4Ua&8zDch z18niGYWX<_X02yzz8}jM>qE~eV;rj0FBSc8sj_Om|9rLFU`T6AU7CN(d;$9!Gg0=n zVpF_)ymdiS+c2X{tTgta{i>v>>ak_T)M`X>$V_9-0BDh5B}6h@Bd(&g@2ogXEt%q&00_ zix;<%m^nhzk%r$LvTWCL7}(HxD_xRDI6cTsTqz%4Qsgcx7A#5 z_@+grTn3_4N=P_3QU%Cj`yLg$SSIFO#8p?0*8nzOc!g%W3V3^vzq^3%l}rw1j_(e) zJ(A1M^?J(7b0C>f(xQ8PA%B@>AR-6zn!V)agpCqJ2Nb|8DdtxzSN(jj{W7VSNq83{ zzRF_6Apn;U=Uyfx26|M6%&tM-C?X>Vb0%YbXR`FLTRW{Z@idniQ6FV4eTgl>+-dZ8 zno~v!#yQgWll1iDC*HHRW@SV1I8GD>G}2zOt-if`HesZWF3xIx)>WPbD5tL*7t*f> zu>d>vB}ZTFGqmb+>U{Q-h&SVNXy+EI0p^ zUtd)5`~E%%8dh=3!NssaSK3T`B*WQiNmI1`F!`k=yV>D4jtI4VRY`%)V$)nAb|9lDL}#EZ`PpSS$dps?5BWW zx-Wv!i$oN|Bk0 zgE)x(Eo{p{Skfgd+LofuYqhGrm$_Oc8?n#qpg9&Vy|4 zLX-AV1t5_jhPjUz1vl`=m@?lEn-P!uXuYoW1^hd`{aCGAW+-KzQ`=@5noBOTymOZ& z0&7_3t{wJb*=!_wrd=2g#VAS zw+xGG*`h^p4FrNiaDoPRcXxO90Kwe@f#49_-Q5Z94#C~s8gHbr*V*Tuz0W!K{&~Op z`+BXeu3ELK=A2`Unlo4v-hQZEt**D3U?rB(pfIOdRAXTuUgDF{SLKfu6y{Qh4=|D@ zj~VE#RUS)Y<|6#9l`c4eUi7kK5p)OBHls*WZ73hlKH&SVc+apdV!i`ht{jNr7Oys) zMDXdhw3U7-HtYn^d8_uktkX_55Av zAAh0cf9)MR(+yQ9xDpKal&(iFOg}|4r+>4*wrqs!1`O!^C?flf2 zk%x&cekv1M)09rhBIQMstG>@igxEJ=SoJF(Y)#J)o6EVVhOFdK9U;|bFl`ihJPWSq zv{Qduuf(Sdf6mT|+&V^O8QC4Cca%)$5Mc9ke^-pOKJ_UU^|YRI z9eJ$jlj*Kx`jzXXXTuq82tQ)ja8Vf2cJ-M55x}>A5bs-hD8L}`i`sWezLy1&vs4yB zL`P;e{ZFDbAp4joZreAFAJUbV0WbvxlYLon#65ZAe3-QHuo8k-OQVXnOEOS9mS)SC zu-m!HxhZuV=;F+Aw+k`2t72LZ2J(7R_PwzSC){BtcSNc>`wQcP6Ga*1|7Dh)5ayn~ zi*WDjxrCxCH7n>EH{u(y;Q^up$G*9Gwn8r~7=uB3FXT}O6G=fq`-Z>(qp`L}>uCxzHjqNGMF6 zx+$j~w>xGspBE`x>;}#e+UFLjm=iXfYLXnIj+C%u(9o7hzlv9;1ta`OnI3i5dwhSo zj`LZyo-OSoVx*u4&ViqyeC1(&LwArE*wb2NtDd*JInSt8KYZFd=w4P!Wr($s{&NZD zBtR%aB-CwT{;{4p3urY5go7dKbXNu{t$q0gO2X=G-wMk?p>tJ>kA<_+anS^ueAxVm#Au zJM=~{Hzx--OTLYy<;{M2(irPCTBJAgze3*ycP`6@T;{o3SY69w7X3v`xxzBC3-qFsg*fo^0xYfV= z-(I;3fCtxdGt?sC?cucQ0|N_7O8o`pI@n@NST6rmz*lmcpuUrabwModbK>unlrZ*L z5Y2H37Ce}|Xy-7cKlW--G;FU~`BlZ@rcwL7EP}W8*n~0_g4VVo=o`p* zAllBOGJDi*V1s3={A*`b$h=8lssQ#&sDY$q?Shb@3*hS0|MrYCJ7D{Ovxk074l1e7 zX4-O&uUH;NjLHP~AXIEVKhf^vlB~mSgRGz>L5}vRrC={*OGBa*OB`ozoK-V$bRwq^tj?Ebv+(gry&U1=szOQ0Pt z#DSW{Lf+8WtkI5dJ%VqwvkezPC@jyr=P7lD5iXXDEn%XofmyajFy=T;j1}D;Hr3*l{>)46(S$Jbvji=~7=CpGv8RyxnyM3yRS%C1%lxF$`G|(ciy1IJbq< z*YCzgGmU3Fa{0)}DD7-Vd}*}m_y)}#@M~+3Du8ww9ozIjeIf9OghT_VAlR6`UYJ2( z+xxxm$`yAzroxZhtJG06naC@AxbCLW%K@yyvKdZwY|bJ88HG+jE+2W38_v;wAlA;J z?NF`pAU93;qad~^P;>R)irjY>Gqby~twQ_oKL&N)FI>IhaA+zN!k|3*Rjz%%>7n_V_@&4J@&u^7?HDB4-9sdZNU zVJ*z6q`T{4ns+KpRBeLAy8{rS z^=pmi)^drOItC7YtJ7&l=x2>Ly)@J07Ir|-rjL-^8EQ*(`i=T>d3`#4v>rV;IET$& zs?fCLygdu2U%Gm{r{wLq!n-x)17!RQ?ZT>uE#4?bgm9MRL;nEfiQMglPO$kxw;?~8 z!%qmtB1=8=H^>imwQ8*dKB&}VV)#JyUY&chMVl3+d>&PJfX?eY59meyj(ckXC1KU9 zMjg3RyMKh3F;O)6_>i~Q9d|T)@J>Z=E%@^&5`q_ua`n&$jCA(-+VAJ3>oz#M)fa^% zlFQQQ0jVR1F7~NL+^={B2r=Z7b9{}PzFWA@j-yIXzJ(i-7pAHb*uZsoNJzq|+6&zN z=!?qB+Klo3=VojYbzEdavGK^hg51E8V`Y`CYn=aH#U)UXujvg)HD8*oI65Z;U>F&v zihMu`ExEJM`rCHDBI#+4!&%7zzyA$!e@y%r#0@PN1S{EWv6MlkPE8)VM^9gCqd=|T z^NZ*hZx8>`P4o;ifhQR3Cz%aFI;QM?Zdi`0ZN!-P zQ3vz6f(^Sg+B7abKB%Qua@uG0%k6cMGfW=HGz*+g56QV+1&!4f2m7l*OzeTcks{qq z=5T5IZ=>MVF=yuT8a$rVj7EJ`PbZ#I7ZYi@4|b7&nB`zHBL@lz{Cl#%^HO6=eB;Bq z+=nmI5qr;vV1*Pdk(C?b8|Z@rj;MuZVg#k1-Bdvs4o_pFB25Wg#1ngB$|D>p8Oysz zZ$XJKGkhz7B$Rk$Xy^}wKUGxGSvQc=n-xfl+r65!P^nCJ+A$yCLU-r4ys!EW-+I+o z2VqVd%P$d#B9F4%cjuCcRi5gVmnb2|`c0A3o~XI_KD?qZlJL`Dl^zJyg;7FWyX}5A z-VwOz*&4PYVTF{gCy%>`4{3>AU}vYU2>nkpAAqP95s*)%PLHKm+Jq*RK~(DbbroK= z**hIdiiv7!rHL3 z%U{3YN$jK?SWyvZdT9tkz}r->XL%p$ z@=IdQA$R|BDEx+4%u?=ieJ1mj(Ju23IlY*dgU*MqjPeH$!KOQyE9@e6F}QZD0hAC( zGe@`hOy3bo{(@z{Ks9(7zsj6w$XJx(^ zf|cd1f^Ppc=a~rAAJnPx`eoE2@-lyNDmc29c;5dFSq>Q;L;mA`yC>b%lHGTQch!~< z&3eu-KG5H$M6S4y9dm2)&zF5LRvwxpayG4Cz|e8!cD^vHp$iILI7u1=T6(JUWc;c8 z)3zdDHRN7!O<4B^Ij3SA8N-=nWINo+Y040I#`y+OViqU$@m`{W zRLazGPt{SGZbK7YnTtrIxbwrKV35?N7{yHcz%~X>?5XogmGSJ!<3lZ;!#5x6Pc2+$ zQwH1Elog-EWo)z&>#gXzq#aLwTOfAc%0UsLJRA)hQOulxYI5`uvhkyS6pK#l^o{F% zE`l6=Z{h9lJEieCBR#^Z(s12zrc@Illde|u7f!iNM6J1`PCooW)Jc#(O7vi`Wwr>T zAdvap*m8%If=thyew+1->={&U%{^`haEJ8l=_h3$6K>C)BuB71%alT*DNaJf{RXb0 zstntsMAwk1$vb{z8BQT7$LRmUrc%1;DZyT4Gw#EL4FiIGl~za<2;KEovE=c?Q-8pY zsWvheyuymBkKISRs7WOTUms{RAxk8)^7qoR=*hKq@Qq_mc7Z+i)HB$I0|hA_13jY( zirpo*04*8a?Y6dMRMaUAhr}k{@U(^fCP?|r5GR_fkF6CibAki4*bF%*#)ho2N*gC` zuJY?M1^Uv~N%aX4L5PH6*6ey`xt9&}h=x4wu#0mzbhIYFZV`fckiO8zz`0(`4Up(^7a^|6^sJlG&%mcEESe5oK1qiXns_f3R9vWxK{}{|Fl7w zi>%&Q=t?~^^C9jz#{9NL1gh?c)k6bmr?kvO{h+h998a*zHuxt3MyT^ucAQ z{>QtkAodF~q;~>Vev0nt{Mt*vu6l$sKoH*w_LiN~t<}7%&-;aG@UM~KPfNp4EUFQ_1s4>fzU zL0bG`qui;vapLol<+fu-RZLB&{SPhXxPkx@3lxF~wG})JjOUtbov|8i>lD+|bW2Kk z2Rcfjj1Yq9Qt~S)PE(^>%-e;{kohwL&Hr&)*~P&= z>zDAo>Z(xGcmnp}X(VDVL+_QoXwSq>nSl~NZ|g$U3ac{VmKAgT=9!E+yzNV!RuomQ z5e$I&M4jV#votPtd>-b*188Ys+q$>`e*NcQ5n5Hvl3Er%jzV@Fu&_QelM7vVhuI77 z+t8Nqm)Deb4HNQjRC1q&Oj8GgRY;V zG}>bdDXn*sEs9VoJ4b%JoXFenn}lD(^dC@T$i9>?x_#D-R3&^OnOa0n_Tws4Yg;X5 z?ik2{fl~I``A`91fs2X;z=7nt<6W-(JadQ7jgk|~s^~r87k4@s*U|0}H$nRYb0ui@rZUl+V^2<%FV&r?kZlJQg`>l<{YuZ`Y|eaT6o-QA3iqr= zQE$>Y%_d`VC5%Erj$r!khQBwAMD|rND-!`ua9l)oq|xg*=% ztV~mXAU0?S^BqEZJ1+100qW`ln`ybrq~EQl%cs@SYTY;-whF=bx0 zTzFASwvu3c6_0Zei8g-e|w$@8irX$8~P819~|y&X_6~l;2?GBoUS=kellvDV!hhC)cvf18!3UiKT{$b zar|iM6}@4_Vogb?hg1%$fqddirQD9gy`qVfc{trLeL0eA;vuIxK~z`l~U zrSN_>y+p4)$af#K&ecwi$QCMG-r9ua*Y;&5HCfhmtt2|`B*8j?2xV9llE&5jK3Li& z!79e%hmwIHy@gI4C8|05YE%gmshxwfJC(Y+kxuSG8Wx%x5(S)72CP3G40MDC=73S2 zvO3R9k-@UX$PuZxE1hjN!427^T&G*xrR6 zXHF7^xmTjzm9GM;nq!Dss0^anwPEHJKJ1>n9STb4GSsT$c>mLq#vfEbhxwhYm^}J0 zZ&p~Pw*vHS+I>?8D6iT7CQW6+D+R(X?EeW)DRhkmYBT>02mNU{P)F*|X1ASFBmLk1 z^M8aJU(&ku*(+m#|NX1Kn`n#?LLur=f8rU!2H)Xe3UhsPUu8pCl07P5?(T5`q9IgVEHspPV5 z@l{a&?oWV705Rki!5^%>7-lkqJ1E-^gt)P>(ekweH7Ff21k}Xc=cOjzE-2RTN;=#* z>R#mV=J~wO?+Cx~rr{MNDJ_lI5jYUg-p&Uu6bECs(%^Vh>hSv3@u_lw`xRAU=6edl z!}@NJ#|NSJA=UqKZgM6+Y)L|#oJ~0or3TnQnd}>Ky+z@(f0HtNd*n&r3_%*we?$O})HE-I|xP%NNBQqeR&)ub>i$^ez^IsWN~FQX|HXYuPR`r=AV37L6= zHBJ5m#&P(!IrU`_)=0#4w*Ra4BOt;by1xr{XA{zntA(+Af%mP~pq5p5Y4jh40W6>) zhwz~SI}6}cq)T@f$H!r7YkF+9OG-3dr&XiBaTdypy(C!}W+BY2#>{jEMGVrLE;t-& zp%~50^@=)&r(kHPOqKUO13oL}51Oki#Dm+nOO+eb8n&5T^M?!;;CtO!pf)#7501SL zkHkV>wO5K;^p)nuJKf*6*YEGWy1%+oCW4(2Kq6^+*<{%6{Z-!_QEE%|e**TvbcLL2 z|LIK^)fUJ_n2H*$&rLD&jau?adgEehf08^68m%tt&RNK>_^Z04)?PLG^-~~J+wu9S zg0*lm1FUbFReH+f(^c3qPX)UqCUz_8zY^kWW8;Ah*2(+s%aoYZRa63b`gpvlwy~}H z$MJ5XEk*l4Pyr#!!ku=yoA%_3W{3=)Gxs^m!IkFn5|`S6p9-y2=k0y@!$bt%<0?)( z#Lgy+9a;?H8bfYVrlLcegDLO7W_xRrqMH}u%VP_X0V_)W4(rFtTNIJK6zWIc z=_vhF#j}uBYZd}{#Z>f_m9{~b&8F~i$yy$MO=iKD)!h`A`SoZ9<{vu zrNkoc`$;yWjx(^9@tI;WS_~8;Tk9uNojwDtnk@VS_4kmnEOM}$$)RDO?MaAWCw}z( zTVm)C+tXDqnr0q$_5f9cIrG(47`bJ&8Bed@a%?B= z;p%HFhsxr6#xA0$4S*b%0_cDal-2#MC6`GX)%2CvVz*_J^}+irp2=V>YVq|}z>oH} z8-vx-xTI^uqMUw|_Xk!)ve9hvkW@1jpRW60f~VspZ_CGOsrF*soEU#f@qyIFH5 z1y{jKVslR5o&9*2Q(3v%X;k4J?M{^S_6m4!Ui%93(Cpt9h5I*Gkz)eI2dTuIzd~wE zR-7U+w$x51;sp;5%qJlBvicMo*l)&~4@udFrsWuk$+_d}(FDjF8%Q{j5m_a+k18C>m`uQw>@tE2x}-IDc||_2`k#y-1rNPsThEa=Vz1 zKfdYl_@G{1vhA!q@()i=yF|~hO6-$*E|NXyGMLKB@GNWLv#9Lk`WlgO(!tO6(Mv6} z!~2N{%qt5-+?tygY|ZZhaE0SPNGNieAvC4MinY;Cxv>`AI!P*6&?e6ML|)*^k*4<9 z9HU2hreP0YKozh)r3f12AO_rc&%`p&T8V%K2`rOr-IM0zqkO%}2L3OTU&S77J=!Q8 zg@~Q10+`n4y6FNru^8zrp&FwDo+rjy7Vw7Q{;|RHln$DWHckV&vRh|FKJAX=NfX&2 z!(!>8cvBdJ!;d!&kF%XYmd2twNJ$Kt5$A(_KbpDUz~7kM+)bolotH0VWVH~Uzeg2{ zbxMq2?EFAQK|FNGA?S8_DG+XYVtkrQFp$)jy_ER|79}oqdeZdz1Ph^VDDwU|;P(%O z5YL)?$7L!p`F2OE$p#(ZOEtlD1%L$dJRlBO=;nR^yd09H-&_O@e=o1$rpJrG=?Xia zV|*jEH&(xfv)yPyp@}FKvHq#|>^nq%`^_?qLW%9cM8gUHLvhIRyaa>XV43!I)9E^w zOB`y&%!s{IhIKt&O0yL!z%6I09sZ~0Cvv+R4%-cqCxo*lXPxQ7tWd@B=bcd}v^ zO7T+7cIg*k1i2d0r7cNXkS;WVI9Oe3uh7>kmB>>!Q?pr7;_^US-IX+Ucvc72QP$dc zM8*<<)95Oli;0`2HLm6rLgwCb$a>Dy&- z(2oIYH6+rLoL2bkbdoeNZBBnQypo^D;#szurFLeuFDx#C3ylNq)F`SMak@O?G*dS_ zJLx+u{^nG^a6)e9JG2lY>{*cbHCYs<+D2z_bQ{AiyWI0zf!zxMHL3EGWZRcfY5l0K z1M{t!*N^N}hc+JvaNkkA7l=S@l>PmHgu(k_=G+TC^=6#A)n3_zzn`T}Xyn*v4fJ_l zddEeo(I!sKKpNA+3m0dfo(X&Qc)@^4m=jFzQ*VQVbXOLS9hB`e++)Fl`8K9D=F|K3 ztt7Tert+W{1_>wTd}yd#us8Wh9dCJWUt~aE^ZPKN{q8D$pkF>ZT6NVWr`1736{#pX zX0pi3sQ9Gkb<_MZbXoprGb`%Acxm=5X@uG7cPMkH?v%fTjUh43=bA*$Xc1>*DRaYD z=^KptR%6GUP7o`2@+~{o;Npm%q=i`m24Et!-PEn2Bw(d7J=@sb@Bu-NS zN3~9VF0N=LjcDmo&afB`uK7#Ct2sGh+2EZlkJ@N!($U@Ag6DCenmUOmV`PK{@6_C^ zGtwV$mE7ftcM90I`I~&*y8HA88=F{qB;%@Jjg+u=>3AcB34O%|$eBE_jScsrC-)ee zIoAl1hpri22Oj%QhO64JZ*5=333)-qG863HuhNF_2f+t7mjkPhuXVm=$p>&8#V1#1 zhF@BdghzUKFjaP27Lt?uh3F{Qg$>ReP6)NCtm5PfbNt?@LWwOusU$efIE>(BqGeI2 zP3KrA55Qh@cD9ShO#{iOc#^A!*+~ZQP(j+{t_v?l@V0R%6)z4(inQ}ALKuFTQk5eb z)`quCwDqie|CJ>-xe+D4u|UdD#YikwJZ!!|XFmqqVQNHsx;k9uNpzREdeSSIai=7hkN?$J3naOo(?B zzh+}BBhR>%v$;J_%~h0FWZ6TVi@ zUE?vs0J*&ff7fS3A(ZifM6)$t5}r4W&%8bLB*wh!-<9Mw>)=HyDF&-&+wKhEHF=n}-b-;q@u zcGdH~Avae_{>Ks41PQU8J8C4Pip9VjA6NnHJJka6eQ}Jibp)&1*lnxJ;vV z4HYU?vmRZ-b)QWv`FXqY&d7|!Z>^x}JQ+z{z+6Dz&;K8Auc!|q{%YqIW+y&soZR!s zmDK`b*ySp;>v`93Fi(<VV` zH$~^L`r(h@!2D=j`~=&T>W)WWm1D;G5xsL*CNJ^rb{SWU7_ax>Yj?(!o69ol?@s(k zwd33;F(V~SW>zJRl=IUFrnJv!st`0Tu}0zg{eLky&dL){!jbRt4v(>jmvB0~+{D|~ zj8=?u&T(Qbk(bJ85y?fU#7y1b0Ae}5(9A)gr3gd6C&eZm`F8!**>YCfzP}MN{D&}Av zLT}FPKah3EX$4gv_Au^11wXochaOwcYvWAT3w`!}X4S=G=N9&{JpkQzNUY?s!F1ct z>D%gy8v+0cjTBe$o~G@^Fd?NiT5`14Dm`OZSv2?FR10`ww2Ean(0nm)FRTh*ta}3X^n8cJP)Q~q5`z+v?tP37s#8RAVU2N;?URkW!I{fc>Gl-yJ~5-lGx7Qg^PEg zFnIBn5hCJkFnHaB7=NU4ChSr=iRIsK)X?osW>csE$#9DBgY<*E`SRazX}KJhcz~7>Y(GbEPuC)5YrDl|~zC1_lXqz%@ECy4T%VY5$H*pCldNxQqh7 z!586$`1o6!AA^v>9r(z@=ioMX)&|=}IM}DR@1lqM!A|N88lQR3QXR37YhnJ4aPSCi zNxZdJLH{@pVE7q-T6s2Io!W^zKp~Qf1xTB+BjL^Lm{Z`|rcCA~p*WN;rDMIOPq5##U!Ac!1?U6z*zBnoZ#q+z}usM-<&O+7luEa1eiA^N?-L zMUOO%sG2+}`POzy(|VaCqDu=mfwSYr#Oo71W-La3$!P+?c6 zM|y9?PD3WEKU1}`97XV`7*)Zk-|jyQ!fui$#ZN2Q`f=AG&6?gregA%h{)%saU>%V+ z+g7`GahozN;27F4a9KLb-09C*9B(gv*wy2GK|uzfOY^nu6TN4 zd47VgdmOgjo4o;KLctrY5Dx~1$f4|C)=QV5FVl^$H?zQP>vqH{zPVVr(sV&vwi@I; zsXWWc9ua9N-x1-8gm87(pU1)RXgR7fXjEt!yT6JlKDuQNd1Lnlxi3cUZ`knd{k{gF95Ugtj| zvNDC7Gs8{w#UA#QZh&z25~gV$xg%=jRGGxN4>_o#6N&zgxTn8+ zmCor@BxLv30nSxVt7{6!HAPZUM;Pi}H}Z>c_9Z@Y+YlvS@{v zm_b#P_gg`8_m^vr5=#wR($7w}rtP4w_$vZz2=QJ|J9{|1j*VjTw4Sc^0TO<%izzW&J}S>AHhqJlV7NJ`Y6~knjBb84uL>Q=>sVU8C~I zj=TY+XCmA|=gkcGwdfeE_b?Sex#OmXom@9G8+;Biap)_uw@Yr>H4dXe|KrW!)mG4Z9xKrG7$X1!B2Q>r zzBc6@nmugG_S6(c)RFbK@}W)|*VjyHc2}Qwr0=J=*}vmBK0L`pPlv1ovbiE)+QD zBe`Yx*Z$w37mt4xrf|#HNzyBIC31{Ne6j+STX^O`eyU2I=I<}sVc}pPJ>0Zmdi~|Z zBCi3F@3)HdLbloC-`NoW?_Fl8Jq z2tK&{I_OPd_xL))%&ZbONUA_4pKK&yk}< zET4{6k`rG$5+2Y))wz1EET&MvFqgo^&wBND3$(GF`}6d&qU zlSx>2ns1xXT={svOP}vf&2oM8-?+B_*vSJ0X*mWKH)?ex!w4F8@t1Hy@$h2>X(llH zREg-XJY7RJ!;PXsg?d9I*ZS~qzok7{xDW$7mw#RG5!J|hAQ0?v9nZQw*&@$HP-EoqDGd3WXAoZ>8*_xniJidVlYbYhBMD3I zpvl}Nq{kMK4o`EX4z|w6)i{NyoxNdGC0k!C!0>>AaRlr7`==mVOQ*eDHYobjI|31CEXRsE>jLr=16xz?eDEC1H!ZD8Y^9xm?zK{ zX@&5Kr8gST|HbjMGu8f`&=&tW^=qyVwvL~mO{TVZJ!pUGt=uxfuYr&qh7kY96@z|Y zQtRh|Z`tW8+Pv6|Z@)!TjegZA5+VZ)AQgOH@C0O@FbxS?b22cNnlu5%0qEEQa@x7;l(T&IZWH$BtR@siB=gNLy#h>Z?-nrSa1NnW(lyXri z@y^mC6yJ=Ne(8c!SM#B0cM`Eu_DV(MOCGU|HwEK2I{irVv|^B&bwu86jtXzOQMiU+cHK;7Hz#tc$_upJyY%?~j8*){MbY`XNH1~UTH28I#%3!^pkjeikY*>c^ zE^F-Fsw(;L#7Rk2Ma1*uUetn@#@>SbwGw19A((Euev+t_+KIF|L-qNN*y9ns(N0CF ztZyM!zZjsycS;{r*(O7n`;;v`ap^cy#?qR|lLjsMru$G`!ia{K0 z$JyunrWNtTQ8g&IA=}r+%6fS&8eelaL3#&`iAC^^@N(|5>EX*d<;T%Clsg{@RJWMY zOV))Tb^PL*OES2cdMlX<^DeQ^;^tiqwF&W_L?|+E7eYzargl1|q5$`kxfGB*_(RT7 zm5mfj^Zh5&=kY{}8N?t7lpxC4p$~q8jbycztH^rAS_Q!)2f_b5w!v8^kB9uiQW>>h5I~)5jjlySt;gG+hjr=9hfJ)6GIaUDyOyzcBSvEWBnCHIctEVy3^@QriT_PqDGoua>Z zaBf)V{JB4dKYaUJZCU~qIMek|rW7U)<_cSG5E0;o_?~pLUr81R3;DZbT@P%X$lf*} znLVx|2(=int!d`+LGJ5?tv<;|zjB#$PHFAgF(dbWI#&+ui5f`MH>P z;M(&*uKR*^8AjEpS759#a5X8QxDP&?jM zi0Cx8UeVXaD_=CgJ<$N-egJIlJkk>)^mhtTPH6%j+a@;L={h_BPAMdYjH^@l|9NAC z)+vZqxsbko&F>K5gVR zLWa!FiXd|2eZ2ltzpc#s+c$Z-0h*h4)aJ~*p6R`0&a42Rnp%ha!%1-$7EKf#}~ zjoy!1!66Dme){*uE%4-Gg4c^=X`ouudxK}oQymKXC*^7K&H_6!4p-&XO@WvVDI=RV z!EE2021Ya8HM&VFt|AI8nnQx-2 zv^r;|0X>B*0r{xs$U&lM+rRm3(dt7^ysdj%1_h3Em_V9 zj0e2Xe5xY~r4kjwktQ0}q4@5{m+J@zuHgKF^A9zm);G8ZVs^a+=4JUR)ds9$)jE+o zOSnFDd+bxSo|w<*^&Y68AL{%_y*(I!u%+Ej;gr|@Vy%Zq{Ab5x>cYwy(_UtpE4wWq zmrtDuLsNt;(!Kmq6r$SU_4fM1UUu72{y_wf|MQKI$A)=tFlS%wiz1EI2da=n`GCp4mT=givl+cHvSqOh-goy+d_U)e>lMqqK(9q`JZNU3GpFBit8AQq z7Q7{T;qu{=Q&JQuDL%_XdwF^+CXVYgM_HJW452cyAgyuqovQ~L?v;P$V>x8#;k0|XBqk0p2B^U|nVaUbaFk6{t!4|+4cHNR6ESNG8eOf3KLm-1U=d6m z-0CE{CbaGROVmhzb=DS@T~1Siw{+aB zoJR|1T}*BZr?^sB3T9g{12ZC0wuz|`|ePY&Wj*^ybBQTrjWw`h%UrEkB2hGbb7jTUo7pE9cA*gD2JPpNMME0Yp zVV7=p<$5rR!1Q`=#N%dyGcgRJ7HBvZ56mn~>?L@nEfRfhT40p0=fT+9Ao6vnme|DN zVH6E^ZWA05-o-eQ;e{3PQ4gf!Zi{o=YWM2d{9EfK)QC8>nbFjRTUPmvjs+|oD@OkV zu;Q~><@n&waG2#!OXO)(&gopZNOuk2+&7kev=k_m~ZzJ5s5G)%Hyovn+#FO0B| ztv~K$Lk_^ay^rD+B!&ZJCPZTaIX96QTi?uTX6(1ia?#uE?#mX4tn(9GvAV8D={%mV zhOFJCN_?Sm3JS!yXLs-km9!|%5%E9MMVbH3;s<=;@M)OIs`{E27>cuY92asrH`plR zyiE9ta-5h#1XR|Gjj?H3$DOycSz_HS(@i}6w`QRwA0gqU_>gd3@%+yT(s>dRLL~ID z7&Y>-zhqCNN2czIJnc~|K-9Dnsv9#xPWKfHMn<;Ux!e(zpCTK&)Qd1}{9n%-Moa1D zhQkVCv7*a3hC%ya)=9c+B(+w@{ElrT?IWRD=&NqbR!odI*(|01eaa)QN44{+ek~fP zzaZcle#7g8j$$7=&h)7_b2J0Cu$oPq1VO0)X4zl!TEa^~S5}Vh;^6$;H%-!Xr9B~{$u2d?(VB2b&GR|f%oEsXPF88Tz4UW8v3=2>8FwI_ zR)&{FQ6_1hPe zvn(8Nmm4Z)&C#zeHft)s5YR6+S1%SfOM>Ynk&UdXMVJ^x{Ge#qtfR|rQI7&k@6{&f zj)fT;-zU)B+6sz@*9ke3hqp#axth(sD(DW#4!i>kDE}w|K_D#s)BkN${g0?{VX^v1 z2P{nJxITG$cu1hZM(vs+-DQEw==qzHT5J02C@~=qM+V}W9@GqJ+~jvF`E06DF{Lc& zqK5KB5mGAi;PwsSI6Em{kdv|`LB>dglXbR$8ztjSgO|BZQkWJ@2S3PZxf%bsD;JN* z_rUWxdL`*4)@?*vLyTzQ z=D2$V=abxsd5WXPCxETZjPmT@%*cm*7J9-Dl^GR`<^}B=L^M<;=mn_2(JS2rtXc$- z=5dTg7C@Qa(ZVYEjhHWb17NIygQ2=pL*Zm*OqRg>7so>JKqJR+YZXXS85}v=$Bf4V zh6R4uq%I8Z&o7RSfV@1d^FJ?w!^)NgIPK=DJHzJ%@lEpz^FHgpZTHsQUng$vA8LVe zTSe$oJlZP_wn_(KHehufhhq9dQpEH1Hw}#<^RtSqCOPnjTxTAioj&+#$>|^UCtW#x z*Yq6_*w|{WGw8KEs%LXL+7K!3YiVuisiSS@Db8VK4!$yZ^5u_=baIbwbao-p8ZV-C za%S?np>E}xz|PRnuw1vuydt@Bys?DtbgYF1s1@>0%(VVT?d%rwUUvw_j~z+}UI>>| z1I9j)oJ7-E{PQ;}%>x=d_lM*&y8G;*x5bvX#xB>FE@<}$#hA8#O8~c`|D08Ke@1hL zPZa_pNLd>8_majcSOXil7k;+taks2AnaihARW~|{gBt1*r576neABUxlYJ9wORD8H z)w2yc^G?Ih%1ivj_y6_vRI&UiP_sah(Qw*T{&cokGtO^W6E6a^;-U^b-ly}{H%L#M z?{WIa5&_7-J!rJyTf(PQvO%!QhQy8zxO*2sz^=lB&4LYTI4(O$b~V>qy*+*+2P8P! z)oZSN+9ha=dAg7ia!S04x=!>m^T`MG+Z*~le1sUP-KG2Y3^wyZ0)xv}J8*yz*ysPw z1z;-(Ui|DbLeJBiIl|E5#SXN=tR&y0WT`|4WqRaaf7+=xy_Ah=n)%6}mY4ARdaAEh zm$i5Dzx)}@Y4uTS89-CLvuL$i%20i*d?mYVl($~;DAp@dBA*5FNG|&3|6}hxqnhfv ze^IJ}il~SPNU;C{0!r_oh$vlJ=!o<#y@r6OC@84(j?xJM1wyC^V4-&iozPq8A(TLp z6MWxC@i}AMd%xT>&WHaOMi_hSwf9=yw$eD<)8PWE9jCgeLXW$LDB-92dqv<+F)GOnhW(NX-C|^ zl&a?92jC@P;ST)5X2R~<9di=DRgKxDNZ^R)I+vRBGBuX*Yf1|1cLeRoliQb{K#ieB zP;r;rl>^43L$`k~Ml$J0gE7bHF?NPZI+}9l;R`%k>G#0~kc)PDu9WdIi(j7| zcBRRL`>c+%jOxBIDR&GL$@93f<%m{}G=MmP9i0Cu!-kq@l7JmoDG%58wEe*p=H}*= z0ocN=a1bd&ycllm1f95wlqtt~kTwxgx;DUn>F~876|ky^->NRi=88S@F z0e1*2{D2sl_C`eh<0tXr*LMCh*U_zsO%`dl-XoY=G)d+=J%JE>$=iB@1c>)!KVo5taMixISHn`r?`SU4<iub9OywV0{oWi$XH$5;CJCzhCyxaV8|`@9pi4U8;lZo_;yns3ZRIx99jr1viMp zHB5UqTLXzRC{v>+l(bhl^`4tzU*8;h!uvUs+SqySrV4NG1vkI@Q7=zHIiZIpMW+n3 zd!Cm+DspM^e27SH7AFM_X9(G`KcB8El5u(!Gs-EGkyD*h{PSn>Ej0~U z>K!&}((Qj;p!!7%&$@HZYh#YzFoTc`uGD#R}>d%&XLiiIVo%Xdn`#S z(pYxtDtG^SH0gQwR6@uU7ftyCBK|d2J@e^vWRh0Wr>^}q4I0jK(iBu=_ZEzMbpJh8 zr(p>;Mm_)6V$r;aA|ns!t}@uZ`0ueq zE^(4Q`{{M@{@;tG$mvBzL-wK*`Z@34W2Js2jrD&_B#Pf?VyjF`gNKgGm@L%o`Z>JI zDcwutRLd&$$r}r|Oo|%gw5VBLzm`$y%$Ug8vC^ek{3S#G5~LmzNgtQ5U6F_g zX*Oa@ zvqSgp6MR|(nRbhU;u6qPVtGo{P$%db@%32^har73cJzqfbDxC!$2EcGJW18AdVETD zk{Az6FXLIFJV`Gev-^p~SzcG?mD6;49u&K=L`A6@XLVhQaps%!&c5xs`A-w+XVUru zB0j;I#jrd9M{zIbxznNFUC}$>+AoSp5@t5U^16T*(nOaqAl!M~fN^Dy^F2)7cc)g| zgt7x_bm-nko7KPISHSv5VM6Em6v;BH%!ki0C*+k&KGgDz`|9&%t=i{Hylcl<4|zWw zuw%=D*@wdOw$%0cf!xc_xyy{@jok-ij0;dNm)wR`9(h{CI*neM8&fbxvVqVGlR|F# zu_Bs~Ce1R;MQ4A6PD>dg#rGLFT^!8#6K@%3=KtRB$FN&0%klk}IYH9QepUg-jP&}K z#$Rm9gvCn+BdB+84g>tA%;=o}lWV|=iJ*Yo2lO1pQ}cG)-&M+&CLc{ip$g;1q+Uvw zuhD9d3J?r-h>Lz#CO2|(Cd%Jv*+-8*FvHq8jra11dOt0E5Y6sFR8Pg{`bVKgmig>7 zYjzx#RtkKQ`g_8}B)$n=+y?A_z3vmBmr}tuf_)q(n;ty~7Cp!}w(zM+V?S?#(A~n) zPvmgPoV0IDjOD{m{1NKeHsABSvR%zgQ|{Aqlx>S=h8|ifr^3=xKP-MNXwQ}YG z9eTD0VQy~UtFF^ZAG>n9Ykp84)JADs`K(HqUo2+n)@>nH*+*5`&T{Vf%L2Q_xDvhU zwei=B_S7kpCQCmoR$!+yZqil+d|nICT3GRpE*aFiqS+#w`}GDSD*wllo~rqA#k3bC zHy{&bk)s>rdhfM#P9MI$GJ!#awh;HE9E=gRA0FH=6tiAV8mM`0z{p_o6$zioQP>$s z0Q(ZWhh|ZEpzOfNch#0(l4jGh35%D#zm)Ny30w{V-ajq~RD%{DwN>pF(Ww(uG%T_Q zN(6gv)}SUTz(k)QP-5CPwoGf(Vs}A3jk)>b;fSVGHC8)##A2mCoi- zJ>Tvo(d8UvzT*xeG~nVBYDKwe9W3nJMr`31oz1at7AK<2Ep}eR?S~&?ek%8p;fl}^$0IONy%JY9`MtHvn$zSE_ucX-37C5GqZLX>gvRwXWjB^Op&gj zXHR2Y>)b=6TOjOd>UTjXu(xDz|2sa@{n!Wzcu|&Gb>X)cHF1)*wP|hD2N~F!K>gr7 z-Gj=Gb8cTUjTx`}ZOiYHoEVkO)vsTvcZ&SYZ8za=kp_=lf3Plk`r0L)q~xnG_{w;I zG~alpSbid^>XC6xx2*og$?=LlfbDlftOR&WL@O&;A17TKg9YbLq6^c&rj;Yi=r2F2 zT1wY&HSu!U&za^O5c>{dIM=kBKH$Z7T>7d(*uAi2(V0*_hbwOt4Q*U3;BUNz9-HMEYREdd@i5C#l5_B4(Hq zhYl|0{Wh{>t+mFJGw~@g%2vOT17r!agwW7bR1MN}jWEEH3u<_^{j!(e1fGe>~JMr1)@~vpbQZ=S~B>Rq!rv z7Pmvo@;jVShM(K+=NhM-WG)s@ORU7=kEOP(d6~m2!0j5TnK`+X%;379xuV_)DY%)| zu9Mqf+ysl*JmHS&)+*W>dw?mJ{_)(Wx209tx2HW5AK$4_WB|ydTi49~_Ng*7EKV|@ z2ydl9fOOziZi8|pV)k9A$(KDNU72V3FD;kdU4C%PG=&D7e=TWQ5m1n%dS23oJbKJE zT9zF>g|nARJsW5g?DAv0SayynjxX0nO)70dVgN9UZJzT;kuJ;w%t{WMk7EbTan^H1 zn6+!V6G7va9l?Xl~kP7GQ>wkqm6=dXOgmdR;EJJ%!oqv?m7g^Cv zedzW+Zf5e`Nd6BippO4{93o0iK0)41B}ifRuRu>R6HZcte%Nj7-w&hV?4}~Q4$;s^ zMW(-^36hKZe|ic9na1R`ZtCMNb@aq#6H=%LJguv6T*gQHMnjQwfuWMdi~Nu8{Pimo zM+&yIQH}l4$9487&}2BrN%lWe`TtoeoYl13p@K)NeX)52^AdUJo&+Dly-|&fNO?lf zTB7EQD9hYr$+P(_=+FmDlJ3(ljLYpmRk)1uiHleC9C#M8kpkvIomr*K4^*wDf;DqD z^U4|mo@fx5qVexkPerg4b!a;_Pd$5~xd~kj{0k@b2X3smk5j?1q_n128wqoVxb*7r+X9zsX&&fY77XZY%H%7S}Ud8w4JO zzO6No(UQXs);Rw@eV-Bk5<^3dZ^)>2Ym(KNDLlA)!Zud zTR$P^-$B6!?wLYX?|e<^mj|WEx5bmNus%7W$is=iRg0x}qdX2X4|H!Xd1#nQ=$k>B zHpVm1`<8vsZ?o%O>tV^VS2f#CXd!uqPhvO4VLHSGbFArYql`iONUGmzMotA!3sInX z0({l_^Hhj-m5$|*mX<^C`^O7>Rs;9msR4~`JDHxFlusKEOsqC;!&YMc-{R<4-wu_SBV&6qd*rLjp)Kf5$~Q8h{*PGZ*5>B!Wq+$$%2rb_WpTvU)zOXA+}tSS#?&{lAg@Ap ze+TdwyzgKl=zakMkK^>pU^_*SXP+M`B{|VCigdVuoB?;&T{(%sTq(_g#h%==m>6mI ziixo}Ku^f9Of6Qd<4pM-W8DnH1*hvKZt`-vS&)j3E_>be+^{(5g^|3Rvb+)RyeRgf zDrWsch=+FY%4^`2fm}$04^VF|bzug}*CAhsOfYlJQ~7?v=$>}Y{XWUP=&N!$V;TV% zH>uu{1?+?!I}{Q0S}v(%?A!Xd_)sS-7;@2ffs^a<_%;gRTzY6iG$eeTUCB}_qNblW zF^E7MHVP(V<4gpMVfuN)h}*h&q3z!C)=K7)${fXoGsMU5D)?Y+^2hXh>RSDEvMG-o zrGV6M?7G%YfyStnF`_}8Y88@k0f_qU^K9JtUDDUWr!T6iR8s;I#O(ySTY1Cuyk@Od zJBI|gEap3Oz3wyDK;At41pjKzKPi<9Gl0akoFDQK5fMYrcg2;vCY|`6(n5Tt;lWkO{lIq`k>Q6!*o}jRJ_`k;K6An7%6pMlxk9A6M^36#tg~d@nOW;?)Q3CZ@-3HLJ5I<2mN!f6YduWLJxH(j944@9?!P8Ijq^%&tqX=_H$i`{jjf~v*ppUynPY3AAff`rHTe? z6QzrKqL_YIfbZi3c}mfIt&bk`Am;pKtWC5%@>|!UE^(ajQO9O=VopXu6*eKMm{z^5 zPmf6rbTK*1XI<6(!D@l*;nL#e#YWY`$P6tG68@X!$Y`Zpop^HB#ak@SOJp!Xl|Ofj zEih%c^35r|7gV)!@5K3~TMzexv?TO8W{`y4b~a!cP}r$>o-RFmfy23kc;!PrTbK1> zvfY|??^mIV`0>Zpo=XEh@F7F6clb!E6UWx+->!=+^b0A>I)_Y9&^wXwc_~^pJA7UN z0+WyjU$lT(pn~e*F{V}*dv<_887btLqo9}?ezl|42bKO7c~hIW0dD4E-fsudk}&D~ zFrz>6`dxvs(qmWUkgJ2T2Jh3;&l|p)Xl*x-JO$q|xVYycaZa)j-ZwpFy}yoQN|YHt z2=~_A=~Y--{Om8ik!4;=K}lEzH*svQi%)fh;dU41rSO;lYIy7VnE5;*h~RzzJj2K) zvA+}0{~6-jYT;4aoGPs)7ZBk29iLfZ2CtsjHNRY9P{mrl<)7EN8B}cdvva^AeP7QV z#b&LryWT3n)h@#>zn}S;Yv)gBaE=B*ikYVZ=9C=A=8f>CFj?1xvuk4lo>~(VwVvCT zQCmOtAD0< zDs0$suuVcq?2*-cQTNY|ln%fEM0cc&e_PQ}!FzQfa6QDpVXhiz&`@8t0fjn^W3?)G zTk4lcs9XUlxeT=;Mg@+ey!|@e@ZlOem>9YYHQF$*4uREyr{6WIrw{GtYKdKiT||>Q zi9xQy9RI23!&^*lI>l9<+K&BkONzLcVnzgv7 zx$JO>sT}PL=jYsgZ3b#GM<$;~KmU65ShArwFq-7Y*?oiB$7!p%K`cOgr^!}l@ip>0 zEt6y8$MKOgaiy?6J{z^9VoS3twk!@Bjf2S?6Z>5y!H_6>3_nC37WQGfcSbZyz?G zFUD0p5UP6;XOTmf@vh&S)#Ana{QW#UWp7aT#|3r_&>U1E_bf~t`qzY?&MyqvQ>@Y98zuC8@KeE;; z_pUENWt^qEF48s`6UDNSq(W7SiM-e+thw3AnI!8vS2dO!Wv?4<#Qa2FD-Z)a->1{* zXBX#ts?yBARftb)HN~^DaG}Vj2;++G*@^GD+m+#JK}v^>-@#4Tcr;|jr@iM9>xaZb zOb{^5`HoL=@a}=y_DHlYwxkQ8!4DMMEJGD^)PQ=gGjs)$O~N=*myM&`L{7B+0gFVv zLrY7A<6>iP-s!1b;G+^JfyK{0EMB94(#FnP^XJz2Z{TmamEodw9X_qs>~(sK^MD15 zL4k9i_nxIB`Y)=l)^ie*8Uy#7nq?elze|>xOUwIDs;ww_>V+{`NCMfb84F%3S8)pL zoqgD|YBOYB&)d${S=2I6PJ_To_v+Ojd^R~Y1e!R3d-JAX?@}rEKm%vmRkCwbFKv79L~1d^~5qOMMta+}iShI_mG%)IB%oe)vX~qWj^7Xr!VpljL5DdEHjG zMY->&Yuv>oU!E`2RP5uHz)`Y4GE=NPb(E_#KRg(J+GDrn`t`x{>tw$M_;;GEbZUb} zQOU9I(lL4en(Mn8BxL);qywp*aLkO7N-eK0k`nXxBjqpuJ=Ap)BxZlZFZnpScyx2- zRTB0fnl0{f-1Z#Z-2ISLn_;0%KPqee^%VPur2R)%pkeaQs{ivS(T}81`oZ%&qrcyY zoQg$<lDWktmdtXAQMl_NHzL;iiV7jo_nP~7z7=8BV&)gHEuU5^smj~!Z zIU#?9BFY=ez@wS39C^ucv;y+f$|^+7=eiX)g-`|HxgkjlzH|v#3a2N=nKR1qU`$k&_CLa|%?2N|VkshB1Ux zn@Ii2tpY{w^X?1H`+YV2!Oo7H5V#LKc$$`*=so#LCl(fE`Rvqht(ZJRT|}nn?_Z^= zrWTixQS$x!cafq3%Sh$Ks0{ldZU?&1pBJCC#VvdgflsaFW~|vq(%bN%_0BwKdy*-swQI;QMg1p8pog zlA!7h#4{Y^jko{s!SZZHFLuWUm{V)hcO9y1FJ&0h+8Vpg-q@Nl<60< zUUTMLLl=RgFHHEUyz$+p)%kein3luS6z|`EQItX2)5^-qz?xQ;FQOz|Mw5$d zvM1b4K5tmpZW$^!v9P1Ho6KRde=qYP%=G!TV^@49eQX?)$!C>;8tGQOGkk+@$7FY~MV2t#~A zQU---RBEz`y8xJU0fQP{C!bUI_zD3ASBc|;SCL({5G|*nN@nAfr8Gr=mjWOo{(I^ORqf|)qYVUx$z0eoESViM~~^fU53gk*#v zYV{v?N!1_tZ1vhlo zM+v5p21@YO^Z`@8p;^DH!TXA$GtS4%+>508qz;|NGjFESb3+27ZBfwgfSbx?0NG4% z%*>5wlR%iwL#7>Am;YI}fegalTXR&^;FYF=CPsyxBd7<4_k*jLSm0vPi3>c^&$jdN zPv2>hK6<#wDu_&%Ab#pFNYa!OwO$btonvuIg0&D+TZrb$gi1}I*wdBO zg)vA(r{%FHFm?5!oYluGBY8y!b>tV_pl(Yk5X9qf%PdBz8b^}}%;7QgpR<IKcL4ovWCQ<9>F#s8hf_Mc9Gd0^BC*ApL0x63Y3hXys z)-M8~8Z{#PVo!JM-nR8cbYMEN$Ftfsz_G5RPbQ=m^4i|3#>AEL0fp0gx5gQ^H5wf| zSZr;vZ~P@VYs^!CP;K-usXBGY63%i?h-Vu--_-kQXPxsg#{4F5^8_O}*1?cXOdRvgsSlT>iVkH#ygE{v(IpjH9iSzv% zwqpjY@jj=p`p=fztU8=OiT&OY4}!WB_De=WAzkvzDTh2xxQ_tn(+Mhn)Io)+R$X;d z=L#YvUDh_rAg|+b1R^4KNmVU{Nz$A+u^_fpVpMi7rg$4!8Q2no>jp)lEW+2zc0uy_ zc7WPKF*K6br9loZpN-A}y1J#ogW#+Og=2YQ-~@a1Qi*SYDYd{Io5B30)8$Wplo^-K zYAw$_bAmy)8b&VswEuy7XS}<7N=|y`nwxPBDr!BD@`i=NK{?(V)Y+dDTGmps8k=Q8 zKbMF9p&7aAVLoZ9JMoo=aEB4hsJa`(oCiSc6}o%l!kPce8eV!SJZ|ZcO3Gm zBT;4YeW#zfPUibRkQv&;lzWEl76)$a9e7zG1efJz7phw%k~*af40GO>Y4CV2%j*G5 z7d7A;rKbn#4(38<_>ww8%YcDgTv(*bE{v#51 zhR=$+S;_LvVZH>EkBZBJ~Iaa%WpmtvhdGv|8 zE=uC1N{;w@=Z`+ zQ$M2sR>6LzH#RAD-?c!-B+(lMhupCLQZMZ=en}ivvecIM(XolJy_`XtHc$|d?7gzx zAy_71KlZ|CJ_lIS@$t~wdwDiek&0heu0!HJF-X6&5OwR>;unS3Nr55!PZcq{!#KFH zaNN$2HC-Cc_MMxOy}N7ap)Ve?aJWm4&Rxj?_4X)Zye3uZtf@~Nl0LYiu!wSL%&5^T zAA~ex1kb4NSp_EQUoCbklqCuo?aM|u&(w+YM48;pWOwWtkSTAznlKW5M$ha#C)8N_ z@ne5C{@poo$EkgFi*X-V6u~>;vryg0!Rx#5H==&<_oJ*5_KliebiV^AvQQiosnSOL zX*u{D^PHce4KvtTt)W#inzJICuvJR$2;NVw9rUS+8|y>Jf|BIhMTC50DvdaB3+)6R znojM`ILteLV^k0qioY!=n)$}fsx+lL?r=Bqp*oEW>%dvu76XcnXx(7~(`k#>4``qC z8r>1Ny>XIvB5;AS@1#gqM`!$K`&~0`&i5V*K{n2&kl`61n7r4by9w?Qmr}Nd;~6`! z<}7$Nr^^>$^=NVkF=M{#%a)EYAzH@Zz4B5RPj4#q@8p>=-mxy6?us^O$sHJ=Aj>^K z7KRwCuDHhv1vb3^UWv%?he@$#Rw$tD&cVR>Tle8zdeHTS?oH}G@6Q@V*FGbxK-5q4 z^2Bx45`6GIauD2M7vqpV<}a*_F~91Blr!(;JtKx^+dU>jF``GzyNZ4^?L)%yYdJ@VG|4hMvCH9=6?j2>3=~hmn~17@`j_uy~l%7THZra zW!8%?h`v6+8!BH3(x@sinj;pDbrtLOD!@{J(NSH%A3@3W4f<)b!=>sr2A9N-TYJ+G zMlwsnNo|X7>%kpL#&!19I)|R)s&r-!aLukB`~!&j?H2WDemCA~;&2Yj#dQq~>dWrJ z1_vwx%Fg;4DYby(D{=Z!|I%uE<@x9e&)F-$;(_hQa3+>5s-5?_E0IJZSqw|8BTsUzR;x%Av};LgD-%w&qq5rvZLW4@e2w?du4; z9=3UtWhYdT9bx9gS%YbN4Ag(VDf!SO1v_j>XjQz+Pt#ovGp%y1F+RCot77CE1(*kE z(o0_z0=a)MbqycUAgODL!=c5R!8~>*&bv!a+HZ+o{|j{arkSs4t`NbqLg)@)U&5>) zY-YXx6NhQ;7?UsW@>+`{V_M#r0^AVFsq&ARA{nd~1&ZHk%U&)GG5dtk__g;EO#{#S zsH>|<&7>huPx8AEFamM!_3)-S&OGDZOI7`!0@{OYP%jxSIV^oAY$ZZ>&x*V${^~zw z``N*qdU87h)9iAgCt7D4Vgp3T#C zfZig+kwG4yAW<>7`Z5QrXAza#y>5U8=J=?}wL4s0xZ=_hgwD%(*2B&q*3V~0Idr#Q zRdI(r+o2?T#43^QKX~)aZ=2igOx4=js;8s#nUtQrzuX7QSbFjO_LB7s?R|dvmfCFy za@BglNx*RC{?~Q?0D${jpoIL00;V{4WU~Y;zrx+XaW+34uO7t~I(bjoAzWml zT-W{3Ww$7fYytj7`OYeOOYWP2aYbxIMCX@{B&IU>^!g;Crtr{&#OK(NSX{&o@=r&) zne`;mzxsG=jYaQ}5Cx5u=iO-{jIRw){g0Bjz2A(Oonz^NiLg1$d0>V2CFs5f?bh(Q zWY>(%)pYh|kE;`mCiM18UIKsXb!Zvy6MlfCXFI6Ux$a{s-Skc zZ%NdIMJncJ2rYb`jOLqy z!K=5w1@H^oJr_(7ME7LR%=5v&FT5hbEsYzWMXY~M=$Cs4-C!UU2Z9Gv&;N@Y^5PQ- zZMj{$c!v3p8#(&Ld3Z#GMTyycKeob0G!M(0BnI*sA!(&!G4v6#L!)p6zWa7C-}&vH zf4#HfcEwc0dpQP^>*wm;+f^+_73co04FFq-HU5-k+dOf6`m!=X!`r<}kPJ|>} z?fl%2Jnd^ir5AV1uE>YkWdD(c7?ozKLkMv zj#GC;(NHgH0ZqjRG8&opKXG}bqjWa>dTh0t#UEL8mXb8?CO^Nfre@R#%#B0%E*XjA zy-y#yd`^;;0-3E~H~f^bIEYW%?EaXP2Vq+f%8|nI5L}Yhs6}*K!-?#dbV$U0u7$n} z_4=)Hp(0Eq+Q;179G`%IesD1S0s})=ZRv?y%$Cx@pUFqFc&Ri^>SugNU#W@B`p~G4 z?S(VPsGXGxJ5#u)om=Y4tOJf=qMh4V z%1Yz(Z%k*ZL5)mlTKJ_Ck6D1j@-w$>Yhz$!tTq2vBg@);p~_raNJG4{dY93NxV*8BRZ#jsEF3$p=eL0$+tUUeY&wt=r?t!cZ#{#lbjo72t0fD(qI>N^l6o(s&a_PaFgdPeAyF zHt%w}^-Z`JDiaaB!Hc?%GF}DKCpC39h$I^&s}o$D|50u$_R)tlyPLs#I?%dl-XBE! zH&0Ct9x#jD@3bsQ!Nv1g4$Xuyw5hwKm`XNJ+b~n8U>y-``$^qfO zt&_HXJqOhnc_o|Eg!K*WB{_T%AoQNaD%Td3Lla26xu7iZV&e6tpQ%5LoeEn0Kdhz5 z|D=+9V2{gJTT!<|;O&1v3v+-mrip}jps>SQq=(Ds=hTCyw(1!-{FTEwNQB4F0_>23 zPx^C#^+EH;4AKn4`x1@=U+cz3U3J$E9Hh^K;!^8QB3CTOTpS%HJPo&dDAKxVq=eXu z7{ZCgW1vITwMNf=Tp$7ppt$c-ZGLBtRRgCrE4aj~vPGR+e7Ya^nW#MsM+}ny9FMMa zu6dzdQ|R*fY)CRB=K1eghA5UX*=Oe!rqnr=U4Fub>5tg-Kf7ENerc($NJ%=NKPSjD zS2sMEjumsivIiwv;%etotDiI*j*HB(a2e&v4I9I(KU{)ur8~%U z_6yM^ZRF>g_Kgb$`JtTxwpwgP0)|{of#K@CO1iK3JimbhrXZl@Z(7kf7AdWm^h7Q; zPq4lWth7{}5G(*($Tl8@d0L}8@;LfF0xCvkqS1Fu5x9;Ubj#C$P6(%r_)d^&3CK@T z)5g))HgkkUX09n}$l7lH~{-p5ybgOuzP&a_SA=e)7m&uRQaQ zfmvg@>%GEN(eDhvol1;f?aGoC0nT6LO3E>ethm>nCsJf~T^WO>&CX9vl<7tV124|p zP8b{OC2hZYK|_N{19kP>U8OP~-b3_kE{@TzyrEut%DjV%}c)H=TB#LpfaP zc%Do@?7;dq%(itr?3+bPI87wSv3!h$@Dy`o%^8&CeO11%ax(3|q;w||gcHOfCT@Vl zT#T9Qeq$9#5rZ#v^T>X2|G+hPjw}Rg8Y1=;)_W}rGT9dFuUdNB;jX}j~lpOyri&y(iiDLBadnmn13wJ!Bc zFG_rYN?0)Uwhm0L{K4`Qp$Yozj8@IObf&^U9VRo0eZZCh!bFDN&uep6xAuqUG4w@4 zXuQe08L;`nNLMW1m&tocL@^Af=Q8T=3h-X)H={hUT|r3+#d7%_2+pw+gtcdnaae*e zq;CU`*90x7EFoD>=IbWFmwR}%vwvzHkyy&7-wB}?Kjy{82B=J$kQJ5S+i>G`d#vV5tIV`tww~qJMe7Q)2>st8|`=ncp>ab*= zUl8I)`y^OXlhfke?$+pVyV_b1tjja%3cza@T^>L}{T|i$#|N+8d&laNQZb)IO}Ili zSPkWKLeU1DR?IQz$Syv37wy=&#}AzQ2dl}IwH01MJ+%pRsf;wAv-GVAgN)1DV?bB#0d|6y}>#PpkFe z(ORxOsxkDnPXd+MPmWRICFN?Aeh)xXIRPX%c#^&udcdIUb7iH&!m${zf7gF(!eH;+ zF_$Arf(L09z!nQbRzYe9Idk+xBM#e|S?OB+Xne!2IoQiU>Cjc&O<92NhoWrY7;w4Ac+1bl4#)p6VifCM@@MGuu&Pls5!iOC5$KIn6plV+ zC2wH^(V?-|;BmuS`@U)6l{YjLWc6OCqEoM5ZxUXnN|yG>cCBl-5idJwnsTbF z!@2D@KB)3*&9W8Dk5XUpSWnGkc+9PH&OZvz7;;{qBZYH3yl(x1z10A~w>zh$vFFb5 zaI9334fdeRLrss#m?BEP8W>b69G`M9oaB&vyR^4$yZxb#Yn7&Vkv08WG2bQ+GlgLj z@vBk|wYgn2KcK>(fT;UMeRh~mIY_eD&%-@U1Kh?*Dj%ULHQu;|dO+@SuOG~yt5SaB zOz^$u#3@|5sxwNZz)GFiCmdI`OwZyFTs!IqX{)S5DuyBCKum{C4WklD&(4Zj7{auj zG(yXnXY@YBW-6mm$Pi4pQ>>I59Ie=9mzY3~BPG{%$MB##s4q`kqS6<@*dKWPFEf;E zY0@K_WnpBtC4FyCuFT}_fo0Km8GV9`A#hURwSD^grf;0ZoC|)!Ji*pA27W;KL;6y| z_d0`OHk58kB&hg>rh){shu+2nrT+61hLcl5WMqnDkM7^q6TrPQ_`WHj=he=K=nXQ@ zLVmN5IAF)bg?Y9wP&+0CMfqD_6If(8X~6pzH1vp+R7`n6wLFU`b8kV)YvG?aUOzg$ zz1I~0xG@w6DP&7g^3)aIZBtd76{+hZ^7FL!Rmvl`LIsnP#ZBM`J8`W%H+xQUR89w8jsaHq&HUmD~h*KUicg$38?l{M*=;2D4pYuB3g zYtSZ7*WA8kOz<_J1O^mAl+i0S!Q0slvX_EVCQ81Z#yVlF~GlGGD1P2>;9X8Qj zDf-@HwaVeN<>rF43*YCbOoDJK_Dz`b5hfQ}1J{GuKlNnh^Pcm>qAvR{6|kPd9+N zb$Wz+S)<7DsvzeP0p~WSc3y~)w3~UQn`==(JKMUSR8iIblJh+IO6^#XQRJe@Pp%e+ zx>tzS`44S#kG;yFdZSlWuqV|06WSoxbnmKRo|D@_F|L60ElA9K4b_E@(_o-~<|Ch) z*fa}kxDY%ib#vZmlg}livEk9k?%?FQin>}~RGF;|(jSJk4{Te^T)<;fm-9eeir^k! z@JzNtp7BcT)*NAmCogv0*)HN?>Zd(&yxvBqVVqvA#KxKAC7y+7LS}P2wKV)-dv0|Q&axbc5Lqx0k;?<>{4E`&}}E%a}W{oG;kebC+jK1>Ni(k@vJi=A>$rfxq+QMYVKMQl&WN!iV2YCN!r*wNI0g z2rh<)M#9bWeA*l_pftu99*u6-a7cUg= zb}mR)VjUQ->>JM6yu(N;>b|U=%mb%54lXkN4hj@0Y5v31!4QPQ{S$^A5H>~R0heoO zDaabk9{!E`E;tq#{<=k!p9Jr8EPDuF z{w>!3=HSnd{LKh3qadluH^wp6M6E$pJh|928TxwC6pBzeRgU zv%YOeK8z*~0zKjw#SBwKUmS}U@@XZrj2-uP+0Q0%l0}of7_qpFr#nsV)Jq&_^dC_u zN)awWI}xu`5)NAZEset762ErEi|o6db71+SMKm_#=vPTtw*~ECL-KQcfQVpmA##|S zpwz5af6%GC|DrW$zw6VTkGC-Ee7#foVqGw~JI_`n8RM%EE@H7Ne>9TRTvHz5VUKyu zc=e8^0ojZ1HlJglw3V1r@4X}DjekPRV0_6^cFlHg|CB1TtlkkcGXnV=nh~tPWHc*$ zR?^i8iqj#r%LqUChNXIuwMMWbZU0hD6b$(SJZFlp;_Q6 zlts!pU+0xpzo!X(x~o22x&o=a#*>?6r1qK}tx>Q_J_aQ| zw9xjS?ivdJ;a^K>|CHi!7p;gUp|q4Va3V3~Q`1_tc^S&N^=`-!#)4c| z4gdevn*PY=7gU%WQD2#kkYLy;sJ@BZ&aaI(hgKOWh_CwqXR=;O+m>!?)Ebr0TNI4S zqy!%7x0*tlgqX7rix{i@I?h0ZR`N$rc4|x1jEr=0EfIp1VzKMY)q5HI7Y8?`$DOcT z1VD8$L`7&d-!Qk@qf5tTSthyPQ&E78>lY}UDMi~KL{=sBF6yhO0{Jd`2i)n6n<;N{ zjJV3T>ZUetKQOy$otjfe2Ufo<*M2BOlulK$Xo1~0dski|J8M2CU_Vzc8gpVf_YDzp zwQhz|{6JhbPbJ-7Igmc(io2XwUv@#Yi=o@W;S@w@sbzs!pd|IuBT4#3UMG52X&jHv zC+7P2c6t7Xnnpsw2 z@$~^{yomrq;Mw@Gl`)=KZdn27ty>f?Lzo`VBN2hICvM%Vh)e^#H3CnIct2jWd^8mjQb#)#(x_=b| z8R4)``bFIcohJeMnNsEhwzAxVdF#yz0_=!M^1v-Oy1`+G5L-F+#^&|hEr$s-gt6)Ur56}G2>YTB-*fAqVv)2m zPVT3~0p7rJ@fPc%Qz7Q1u8V`gowrsMw%)Bt5haonVzaH;dN+3%#Ktz?u?NC>L6};7 zN8rxg@xH1YTAi|A#6eNtP*vg^hczXeppJW-KXE+KP_z8IOg#R+Km?l{Jntfk&~wXE z0`&q`3to*OAtsJ>)w996tu-BKhzG7+>~ixY-b-|~g%h%*XXVZW(^ZIB>4f@fPNE?y z06%-j_^T~+USk9L{;RQ!#);j3b>cW)*X=5ru<0y0ejva>EsSFTBm-Ay*Tmt5^9F*Q z3y(k!qmLG&yecsER;`1`v`eFNwe?ayzkGXga)_9FiHjOCq~ff9;Vta$Jme1TZXHKv zrmFr~v;NM*-NGnO5Ps3JZu6ZIe#F{o>OjchSq7n1{)_3!>O<8Mi#ryWYQ0PASb=A)_?ex#6L+htlhL>Guw*&sIyKJbUFkJ1sNe~ z0CV9AP)s@VG~K2CqL;rK^g?q5pIjpGROV|S763b7%$DjpUZiRqx95aGfvY{ z^%eZwawpsZvrgRS=oXOzV!taVEKUyYvjq15lbO~bQ15IkNM>c2z@`!j zmgBK?+gj4q_UUI2^An2dLqG@1nvKTN3TrkT~o}cx{r3*R1 ze1IK#ptP#Lt3)?X~2VCP&G%;zw!4+%2%O*1l$eBlI%$>w) z&ei)WQ?L9-`L7?ve2Y(CebY`|pdX+?DIW1j)Ff8FT6Fq$*A}^L&CbC^cv*(Zrnx}# z84p`qOOa>}B+?}ie0$%bIpg+pu)t`gQHq3H|0$8FVDE9=Wq=i%ZQSRbyW!??lyCmq zQUi6LkAj;&vn>2s1U@@UVo z+n2GjQ91@w^o)CVeWo>b0x>8SU(#gfK|?`tu*YSfnY7xIYu46|$iz>{`n-K{1xj;X zUV!C2YnxkLdTS#Ji^iB4)Pr_^eR?|dv_cWKkM+G_K9pM}+28+(F{j=0OAwF=WhY1R z)JZ)f7H*-AxZ0@6#6OuGP5+pd?_vb{{lS&GCu zO%e9|ntPqU;(O6b#V>Y;_%uW851;XLkGNb(!e<@|V%=7nSVL&UDjR-2tF3(Fqx(pY zf9fOoT)Wm%0JF+1IhSlh?DZI|8k z)*93O+10axt{#;P%e@sR)%$jCN&m~31sg2dYC6b?%CYFgMovn|_Z2aOVs=zmvLSN*!GyQ=!6#Mw}Qce3m8m2wF% z=4u461kXm9Do2K=Z@|+y7~Ub^B9yFuK>F?bG$W<9K4h;LJ5&c8jvMAyWDQ@|p*v0B zgBdAK7E`&^h^#c2YxwPASVm<)8ZnImAN{P>(vi#c-80n|1WB8A$niN&9cW+^N-I7} z$a=KQC!D?^~|_w2QJHK*FUR0YwcCPNcO2f)k7H^Hlrmqtx1` zeHdz|cHnn!zhiMc3UfRSH<;U}5_bRpLM&-53e$AW855!>wtj z?9aXW&fpxNWu~WItV?4QmQSbbjvC)-)e~!YlM?p~uA>*S89qsob2E>zAhoKHj6ac? zJKCGKkFqC*9ub6(uI*Wk6#Gu66;+0$H@*$SezKzT5(qgxH#YDVT4{;hG2cMREj$ku zw`7HT&=d+PWtnah1(4lRCe(uMgiFBoByATq`Vy8mTF~BDzEiLfZ!4@<+P~;|a2QGN zQG3xaM|L08fVZ|p)JRw4uX>8HO4Xo|ARb~dJ68}8`JDbwG^#AVHeVxkm3{Ko29PiR zSaEzf6Af!ui=bKHzLosFI)UA#=-Mz3ti)(|Mua~7t@kZb%!fk7v>a*ysa>w=u1okm ztKLL1&E@QEMn$ocBHADOo5q_zaoqaZlzRV^0++8MEB=o|*v)GE0OnWcp+J0=$S5I- zYc2Na;U?^|Zj^KD`~{D38Q0&+R>Z8~VUXTl%O}?v=HsQWzxe*^>>-qB{^BY?xORIS z$ai1!MMwy1;#4b;@Q=6q*T(r>Y}h(XRluOY$Oy8!zg(%Oc4QeH0N1y7@BeW0Kd}}9 z(x}p_+8fLW-2bUI_$$y36my4T=&S_a{~SO3E6OKH|BpR z`71`Z{+-&9wk}~I{hzV9`tPhigJ84&jLg%1=XO|nsgU6PXKenjhB3tdb&dY7AoY{w zZ(oqaP(Ac-f#e@H|9{NJt5zSRLAb~RX{w>=^1_fk4u?^2Vcxl^@?Y!nm+ZP}Cpc&;1N1_YFBI@@%;nS=6=ZW@2JiIc(9 zh1k<@+=%MM&HRpZXI`&0zjJyp?i`Sq{Wb_-V32_$Hsd5f|E3P)DzpC*-0CuBd-qfK zW53ar{O*?R-d~NTGGfH&9>A#x-Fx~v=R7Kiu_As)xY3FvB_`BT`-^r`w(}D`vLqrZ z2Ux8dX@DW{iDFIdNzG5Q7ci944KnFmQ+5@0D7kgKS6C1!FA`V5b+a$2MQj_BCTZPgO#$DbXo zZ@&ipE2e|DcFf^7TCOHempY&z$wvc7t65&1?O4(^&B)qs3vc=-XKl4hLlr2^G!ddE zE>)7%Sv5BKhJ-pKv(%KrH8ZLNdw?(CWi+(3{|{v}#u|UMqM8^&+Vpu`k)JQ#&(og% zcCIThy<_<>{~>Ah+B!ETmB}C933Sk_wGSEFp#UUuXdRr%q0)=mg|HZMiXWg0?n6Ft z&Wu(zHoD5RcCF%AJotvPJnla4cW+mO>iS2(5-aTvCglVfl1eL=>Spet7yq{>1iqgR z6#!FFTqiT4>p&S@A-kx!QP->EdnSh!A9>_9!OQ;JeGCeJ*O3a%qa}DMWAZJ{0tuFr zzk-s8O(*2IS|&15ZS{5h5ET4THWrASBGp} z?Ds2+r=#<^9D7Ei2e2*1u6r{0=%vcR`w>an_J&S86?deD;I2FpdxyCq+|~ zGuS!>#`W^NTd1KO$ygiSqPkh5GR4>bW^6A0i!O z>5WnP39BX5m8;(c51@0a!f@0+M10YwqLP$Oc!r2K^ghY_6O=c(!_u=(hj3mYYaQRi zV`n7QwbRPOax9gT)Bm>D?^Hv`tV>RDW9bX`Q$=IhU9fZiO2zd`qh*Y8AkvE*F|!xO z$YN$pvu_iM#oI*ZTm^B)M@i62Ps)NOzXreVjTe&ER<7kIx{(kwHGTV5uB2Asf_>!eut!7xB~0@4tMQB%dPtNRxnmo3$%5 z_m~}H0@P62SZL;Zv+%(=i>mbx8gHXgIUVZo=Z*r`zp#`5y=5{%LhCMIp?@t=H5wg(r;<3; zZ6inb#>}h{x?V9}r6}cEu$nsRrFG^ruT&^d3()U7i1EwchMy4T#ElAX0d(%qSk1cb z+FXmvb|a&60A%?{A;-PS>{v^>x&!&6gnJRq(ej;TbhAO0W>--vHEqg%Fy)K z;Raj>VqQCjTTeB`F1)R54sA-ZoPfzkxvb9sMT!CuMw^s6t!hAQ7Rp;+(%w)jhD348wcj=cH?v*ZA zux?5~ET=`=>`5}#6e+rX-kR3)-)r&=5pkig*G0Fh{Dir~r*LV#1%S60l_@2cpoqG^ z=8-kxy%AZuf1ibR!OreSxkGUrv8z_u50m}EUO$NM)yRMxtC1x(ESE6-4tXO%5c^UR z#r@r*6kN3ek)jm?g%L;%zVQ@dkbLtKuT5Idi=MCS*c|5!ob*{7Fw|mIDeG*^CV~)?5KKG3W7cJ3~NuFPrnkNL|}Fyq?$0SGKdXQPTA=5t8bn^6Xf~ay>bG@i zkKl_zmJeS*u}=fk-Kc>BYDo$lw3$AJRl9A^;s-2EF0we((->4VThR}aIz9=zAd3FD zoqxz1KXY$sd+rr{C5-6hISR-@tx0(k&eT@n-(u$@tP<-Wh0}I=8>nkcXvegXAHtf-&cnl z{hMM^c-v!YTL9Go+q7^J5uXRg1-ikov7s(XDOt%UfLlsnAyD)@&1fjW(Z#5%{Z+N4 zpi5!xu|rm(saI2k^bf<4l`iC`-xZ!YO&VG@^vzDX#HR-|z|u5j1!m@Uw23zV`Ye|! zA|;C_&r}AdUiAA{MJN6#akWV3=rn>fEh$_BH|vr%5lyDLF4(E5RgVhNnW2d&I%A0+ z#XZf7X!Dd;-YUllzAQa2#w3|nz7AwAukmHDRM?A&RkM=D7sGu!q8%L#po}unjuO&& zWi>!NPf1N2N%Kqm7A~Z~I&gxMBkvR`)HPbo|+WRDq>Bu+8_rLS|?ghC(6Tf)bC(y6!#4crwLj zOeyjs-e@_ne=ep65@Tk5j@zCgss-@MY4XOaU#Lh~DiroO)(>Zv4W>ECEf^M`&tkx) ztv?)yqJ#|fIbOS)`l^#@N0ZAEWBsx3i4v4~go%>KCVF!gR4B`G;BeCDpjl+1ZF4V9 zdeksgL8Ju~HzlhP_rfJ{@DVB|)$+^a=mpNKe#<)UFHr}QS~lc5mxQDz2dCTt3Gp0u z+Ul7Jcg$gHl+$4*BSJb_>q1+8b+|eQb+{MvC*RbzyvzVx0Yc`Is|8O+5^h2TEE0_ zADzxwPw$DG7Cs;HvEg@M&3AsM*25a=DcT*#EIesg*E2hl#_Sx@gc z->+iMnVtbStLq1BKq$9U_+@IaU=R&p5C-l?4MYzfoBfSY>c+m`&pGDSDCZGy?k)OW zsCMUz9j&{3sGp@oK4MqzwYnUB85Cb^a96-1M8Wdz53H@ARI>H0`?|J3#dcjCFZk+9 z>6@Tk{5t6xD|>@c)|VzsIDBMSet9-S9PD z#Kg|kJ79bt8iI-NT1{P^?!UhJ-xG8L5Lb}ay2z6Y{(JO){T3XB@DkyDQAvvOA8G#& zNiT8&VMz7}r>ik?s{cmo?~(5%1OGR3@gQ6~4buGaNd9f)>)&|$m7d{k!ryuSL&;hf zoQ(UX&A9)f>yJ?Xp!8QIE@$?`psF>)ZxLqF~xwBvBV<@78y&-DF2S$;&X zM(hR%vdH{{_GcuBJP5(^D(ty`=jbo_!{E^Kf0pZCy7+&V>u*K`x8(m<)+N>qi!_|4 zfxkWGYoayOpz^m*{`IFH&NFoMi`O&#*m!uD2ylm8K>;&{Lil;z0>(joq|(rf|2D{f zX|k9ao-)HdY7k;y@SyR z0%R()EV>{azPLEmxu`kD8AHU(p(61(FjkmDL$yHztC;4C3qt-X8zCl z3Hdw@i50ViA|OZLvP77%6T-8IFa!on1lcCQHc<5GKS6=*8J+u#a;t=}IVnPdB!b5s zcBn#z&EGNa4_HWumF6?JYizT=2>oh}@C-$|=-WSye&n~&?@XC2{tLqYX2pnjaKs9H zMS}UC3@g7%fm=4tNMUdNKUV{TMEq>d z^|$%|`ty@9A)E}hWUOh)e;e^zkk7ut;TGx1PwRgY-@^na!KI@P{P8?5( zL4lS^X8L#A=&U(D!-N^a&Us^giq+`B4fYX)54W#(CZ%w{rC4WA4h_QH51bKi^*GPl zOPhqDfsBNN7b7wj|F!@V)+h-;m}meyX0iNiG*4`9T#d9D`aPuLMll+p;SQS5M2&2v zP^A1*Qn`S0#QMYiK~=UIwV1OrJ6<7fu1=jL+zQaY_<74daY8(O)4TU?QVmoPYdIeW zc13UI#n5f%B!q1$zt(!xx$%5)=Ah4Brd>bO)E)im#Y+Uzcdt3n|2~v&6$!4CSUuEh zx)hdskntW-#EatW+a}{@EO7S)hl%TL>ffbJq#FpmH?npigfZ%m~^)l&(7;zSu%jA5s7DOU@a5m&`d!pmBZw4;4A3gYS~D zTp53PNq?WvS_o-9nwIgOGi8)@(_{)#k68EV#G_e3PMRc$R+?CUuMHoST$n9sZ(Naoo2A@I4d#f>0uJTm zE&8v0l<4!~oIXJLM5(O5pN{atx&IXT28ZxvB*=9)&mvpo8G4fzzLFfZ*mkRX$>SQb zo6ng9nfHS`4}yLH$MZg0Z}h;Y64PV6-vU;j2=UyRrChNc7kO)E#M4h8Afh)`WW}Cs z)>XHROa*S2zf4aTKbJv)z)wL>UYsw*WcEG*nN@-9SsET5!* z-_@02*ZE*rlaBJzlCI*D<8ZkP*cOAF4GEtjJp`_T#sg;YA6K`a#x8Y|ig{wy=!XHW z9B<{*0yCD6p)@PgtX-ueZa2(Ap_q5&QYxNu%`oN`^o9DO$wHe%&*`BfN)e-&r*rp( zHs(A}TuHp=45aT*04C~{r-JH_iRE1JSqKgR4|e*ErXgu{oEjRhQ^emcFie=gL|`gB zF|(F^uBs|&8q_AM^}%(Nu9e^Z$mqC8hvsHM`U%tg)gy=bsQwpI-re%T6RV#*@t;R5 zz(PAsUd!^VCL`Ls?j-_%1)dIF>y-$U3m0YWl*nS&PW8=(1gGBG8y)T2fSSQ8zOnEa ztxlSaG)2i*9I}}NBws5d`!Y?9#MwuXmgj&DWD-qYE;bkVLEm8EdpurL8|;( zOMqqf>$CMR6Bfvk-wYw5)MwqCpF9ZnCy6185dyN+Uj0_@45a0kLSC?KP9OFUje?`7 z9a*9&Z)~cPQb@;bzKh%jC9@Hd372c)s+d){ysR9knu@bX{jemuCF`zp5vy0tM@!^Q zGbmg&WHLtYz7*altDttb!A3;4d@2+gmHKIk%3-`&CpHl61`ter`Kp$ zy5CdVj>kT=>|C{s<0;2mv_;Uj&vTk%J;J?Vn^|XdY)6%jijn7Xr_a5X4G-Rc?>h4o zPbK+sO$;dzmL8IXo;aw+v&PAZ0qbQ5UT_{%bvvYXb=Q9e$ohJZqe@QVd+t8s1K`i0 z#~WT#zwNjud!)mB9&gm#@ae1>jlz?YgNJ267@L-F^pKl}yu*<=7{;qFDCL^AAl=zF zno+v56}1o*2ZO?tX_^q>k1dP(p1+~O$Io;jCDdtJDC}Qd72jp;{CInCd14X1UzX`0 zAc3>S`mIhgXH)NDf~otA2lUIHsOhC0>heyR3!~xKEW>-?eO$)&JWr{p&jq1GlfHt3 zX+b~>4{#KMgLt&x>WP11vVY8hNi1U5a?juQ9m>Pb1NGP&AzcZ?O8z<4@a*d#LU-#2 zw}i)w%B85Eob@bv((;3LtcotplygxVqm=8#Sjb1h2IZ5e8`E|oOIw0C2bYX7J{Sjm zI=n|k9fAo|2yuYWvL$;#_q?^>HT=`o4v<1+lfT6BL@qB)-ticaA78|WJN6V3RC1^1 zVko2b;PFl0k7>F{mtn-y7{zpR(fG6aMx@9c9wUe49gg>Niu--EH$Pdn2giAg4**U1 z0vr@t%Ttu0*+?JZ?}bJ%b_zqJGzAMS?k>BiOx=(m6}KQ8AF~_N>upwCT%uyjV*7LR zjEd^HZwV0tlljiy3!YfnCDzHW;cX)Zu7Vn#MSe+YAxr^vM5u8~1{--`Mm_jaANO?yWe`O!vsA{HSZt3VchN16TE z_fD`%E86TQx^|*o$(3rj!a!f~V|YzaoV^T3vO{kfE0dT z)pl?0+T^PDh9(hyk%?}D`Ma~iY;3~Fo>z@wnDVWen#@M~!(n)ats9QoF+_w_?@b~a zr)3q>KZ`1M5XtyhtoXO|Q5Bxh2?&>(x#=-B}7w#(Ni4RI9f1UGY-1LQ$QI zp@jo8%1Y3iXI1e|tDCcqLFfD zRtY;chaHxyp4?;Lh-xE=YnDz75X)vL&H-q+__kdXfaS8i5)ZZzY?fQa+GmXo)zPlQ z<=UfL{elAU*CEZ#5SDKPnSk11IbdWZ)ArVJRaHmNxu_rh^Re^>SFjLnlx#Dw9p;|$Y+v5!%7IgHdlbz(C7qUCzt zz>#F;M6}(ULNnNZdK>F~3>EF9=t|uDYHvkp1J;RXg(Yk{${IzH`ilnem!wa7Si(>8 zQsart!U8BOT%J*+JmM6|w+?z>K;87kEZ8->lA<+E9B1XXa}CZ6eDb7DUJnuTlAWz% zuI@O5-iF_C%myGo+Rq(32vY_ffUTVT%|r|zuW5_@3zvR{y1N`K0T_ILSyWmK=--Rf z?(F`^*lLe;9_8#Z68g0D^41tq30Ti0TJ0{5bP;~LH9&wr3xq*Xu+3&8!yMKdyRMTQ zgj~c(Id&hBWSp5T(nv)8lfo=Ws%&;!ts`f+T^OzAc)~g8cKr$Y-yU`^qSc)>Oob>Z zh9|n#7d$02-XYHMj+8C$0^ohAROokr8pL3)z@A9~4E{hG5H>cp1+AYih-wWC!!)S9}khR<~isZ1BV7!|g-^D4rI> zhSjLj@7?BfmGBYh`_nJZXZ>PGp?df2m&7g<@s%L-)q#Zd_}m7-&A9R7nORF=x5ci8 z%IEe&o%3BXCkYu5LPemI1_U+gggk$&KEdJrZTR5j^K^>Nyl0V=a)T?yE^NCjrQdZR z#yjE86E3esiTJOzh6J8pVD+*|=}ER=`!CrG2am)i)&Zt^?W9c0Djrdbl0`()J&3-fh&10SCo6iD> zXYLbn*Tk7We^P?KmUZK4n0W30Ph^k>f?g(GE=YJYvb}pOs#*&7y_B^H5*FU-uHHe`Q26COjv}QYP(DE81}j9fX@uchx)EIs`431~ zXnq%D`l-Cp=4ghHO@{mjOF;*-%L*aCrjNkS8B9;b1%5COp5}U~hr_RA!t$#g1@Co9 zug)X;&V!uT6iE?gf)Z~8+Z)~k4HWSt2N@6<{{jyps=0N~0zUO2o>buj5&JSPOu3Vz zWBE-JUw15X*p8#oy57RVW_64~lz&!>7rA7?xF+K$$Sq;$aXe&1pzOFo!?M< z^ZUW^PSaK|d!-^3ke8ZMLve=O(t5C;5~q@a=s=ES}cw5xW$>8NG(+@$JRIvP(v$0P{3p<`GI(+gn6 zM35A1^nS|gKI4#j8xZv|daR@3&aApk=*PCuuPskXpsTBSRn4QF4bxFsMP==?;leX1 z2T4Fpke-|br`DF+>7(OenRWF*qLnyO;D5WA@JFLLf6JnvhMam zRwd)NrLx5PXC7wx;@hhtMgtp;gVe06w6pj4^YKlHJ7fNZ2LYrMdTK$UF}gH}x;f%= zknr03@FQZMrQeZaMMCWKrL4f<#AqCVzz4V?F_< zvCQCjU(N1+x5cKov`JLK774d>SnPh|g#7V{d5!d)wyOhhf%J&eZ~wWQ^hr#e%j>$0 zX*0GJ_GcAV5BN!}PQ9f80LcvXN9I*~$!)E$iTg#nkGIW`b|$A`jk0J=;K_2ZnlE(S z{sVdjzY5eP-EJ}M94eQlyTjPj`Lw}@BK?zz%zAi>^9$7%!Cwf5z=fg-NBYW_$F9;N z-HV^!^NTt3EJ|!%5}UC*t6)8EwC_p!?8#=4qj_N%uSOT!hDxfYt12w-w@023+U%HBs>MliUg~zqR)hG%|SWf2{igc#lm( z{t~pa)^kwN;7=`CVGxOlqG#S&ZWUQTE1@(#SgV%MQ*YN&aV}~Pq~bm#~9GcL9_YWi{uR@Z}QKe*P7}?j)=s%Mx96TzayN)$H;9h6ONPJ#mJi5!<_%IL{62 zi?XVzG0smyl^N{yUn-{3*AbRZ%C$~@W$&PTD zLn5rcxK`y=k{-{FabBmv$lcK}T@%Zsn3B>>N&E?FpWRWWeaESzLK?TCL#q?GsJ2{6 z+^&x$8+6qypOnS5S?ytl$io1RPUk?6J&AOV0IJf=pK7E!I8U#PHvr`}$fc7^9i_dm zElu;vCNH5??#Nh?@m1-a^e}KicV7 z2r=G?TePjzB1XR5?|KYzGLCIT*8KcEsQ74BVD+Z%xbw%v*VQ;Rb0V{Bs~>5i`|y>; zXm9Kk6LxgaZhNu^%$M;a-oKE|Zc`oEZr<%#))fJ1%mSk7LhA#7y&ACZT90Pa)gK_s z`!&YBg4(H^h`OTOl#K*)4@yBXt1gL3PVKc0Rw%WZ3X?Ib1TA%^8=40YOybsCVw-_8jj7Sjhd_z~eT649S*r6#mj$n<%9I6aU1ljP{FtP`3Nybeddt3OTd76(McPV;6h2zlONht~yN{FY| zp?0<=0j~*?ZgKHuTnxFv4@Q2jy#8NLCpUVeKJK+!gu@!9x(y@nPwW%N$E@9x{gU<6 zF`-^| z+y!*xwZ0VPZ&XnqLYqxqe8;kc6IM{*RWViE_dN_;>x~Ya@h{@?c=P6GB4UGXNf9H< zYeaTc8?JN(Hk}Rj!%r%?=6HkIHir3fdu$EZ?r%Y}LX=_*XB0Ef1QCw~pZvQcZ6j z$_-;;M4T8w4@%-Ot5|zA4pyiOW5=065+sX|4%1ml@QLseaaiy*aquwv@SBslm?O^j zReeMzgNDfu<=l?(S7h&g?vh<9eckRS2-Vix4B{@inodeWU2J2Vc3rHjK&xH!5kS3b z9*=3U#8IEc+v6^5LU=)7Ut5Wy$9p(2wrhU(SfvY78pyFL2Y+TJminx`R@biJWit~` zp$205o|vAMpnFQl&RmGsjBWG)?z~>9kX8De^lQf}y{h4z?9SoxeTRVPEyo?l`nScJ zA0qvu+QQCs!Vb$=25MXS`a69dgVg8UJvJzjXY)%Y`@IJ&?%oqw;O+5gc)LSpKbhSz zMF5a%?zO%lt~L1>uyc5Mg2NwaQGqyeKDT3XMDEcZxfj5|HX{$9qy!~8|>A|k~fkQB-gbI#S6<_?U+ z;k{ELh4!YHqBXRzruBYZByGw;!7dMRm9Ow6|zBi$g0?-(#-`xpJz z^z@+pI@GtNRbLL~l(Il8PEj8HMvIM206jD_Pkxn&7{4hCz!TNbn88|TlkUO2Y%uXz zA0Lfn!q!-CI3hi9b_0f<967#5gu?KS+1A7h3}QCoAR77oCl$^gB8P$v(i=eGDmD)@ z%|Z`E&2DX#xt)F~HGrxWU^cI~p;hwdfCsK7w+EisI0dkS*3+4Jay0YzgN%tuGOJ-@ zyem1V$CKcO**ZtE2pgr>Qa%Rd`Yo!k;hx0|`(H;2?(ozAHFHw1A3SMFdp?TeP!)`De&;AO{$5Re`%%;8X3$#A$v z29Pxvj%Z+xD>~e}3~ZN2Pjb^2HV#e$#(Bb&jx1Cmvv03tvs`@R_22dY&gHhIgJV}` zE4P+C%JhX*!fqjEK5XDHe;9hbxMzi-Wt*)nx`!h5uBr!7K(-ajLLs@Q=}C9PVxf!P zu^sYE&=h0;_-6i_;($>U0r(NS*$gu&|;e{}>)n&k}oE%w@(#n_at zuDILWL0uOrk81cbN=onzVtX2E6Ixcrf{fcqsZ|r`60+2{&vimEZJoqgwpBVcww%Oj z{L(z6vC(cm0H5hssJHSxspwXs5#4a=x+Mnz6TPd%m$t1>xC3<@5k3-AC34!A8tVdv zu+>0NElLjc@iozIJ}yg z_q5DjB+%&8|E>uc*VOEGxumnj{wZ=c;mOx>@N$OEd$koo)N-Wv%)r8W#h-4m>)NQ^ zTiNDgi4{LuPp%2lVpX2WaIpO^;gbh2NZ1~1FigYaWYNt@Ga<7yIJF0(mMDs3Lo=w_i@!UD;iO+X>Eba^5p#(E!k=tIsoa z_K_zyZex;zOjz3?&@PjZ3?ZT&7ERbxmM*=PXMDByqc+(8BH|~qv%3~@%<(b2J`1`ZFn`0C z&LANJ#G17}6Xv2F+)9$BwdT%mpv+=svxn9EUH+Y3vv!vpetnuSeZ6r)JK1`r)h31A z?XkP2>i{olMZ;YJLX+7Yj?1Gi^po!cHouBRCMUL}yuF$}rWe1G3Cqm9Sf zFaNB5-Qn2SBtg9gGSYpG6Wfh_;Q@Y0le^5}&e>8r`%h!NjTuT@_JILzcjpfQUiv1{K!Vb&0xL0rkG_&|E()cismtrP|aMRJ^^sNE(2(I-g z?b%OB*w%<_YOzNpDi0}(Jjzs@PUKTLo?>VCkl+*UnjK`xx`8u_D+Lr-%=w_37YS5~ zT@y&fg+wEZ5>;y#L@>4S?{a51v{DmCNn^w!yeM*3FIv$6x*kYcYiX5YJ%$b*_Aj?R z%?7Zu>4XvY_e`BC+NB1iwQ1TZgDyuj6pI%PZMu}zH|JAYp^OQ7lGH!%8!p|nHwK@N zjZ=YW@Ab??FPB_PZq|?ww65wN^qdw}2tRuDAQgMZ7>$u74L`uIQtu-SrS-jt7MZic z;>+W(5nJ4TTy2}dNmYHT`->m7M!ucA>iyjc9BVJFg zFRu!aH$3H`U|9`HM7J`o5lUh5grr}O8pK!oMr!8ECHtBd?5(6c6I7rn^o+MZ5@%x=i2&qf{|b*ow@Dpi;Ro)w~j|% zx}Q6qjuPiVipyS>n1C&px5rmsP=|`JDJmM)eS=wItyJ-qWL?u*7VH<(VlrYIF)i)V zXit3$RNn(7FknODzj=jMo{9!)OTC^PMm(3W~8@1)Z06}U~KC)))^#W-*u4}?E<^k z1_!;VxJYDFy`sE0%pG?hX~?Z#^ofm-xhqTyxYxD2*2*GC;M7@B&MBXa;te2PgOIR; zE{XBBUt6CSmb`g+a@0Zz{f=n@)UTpN2lc zQ$4rNJ2asw$BqoJef%6{Q~!3aV~+&^Js509ZL4Q;)^mdJ zLl7pjFSLw&Q?l8Jp z>5!TU8A;rRXDBzezpi{apy;dLwv6Dr&5v{*IrWmACHj2n?TUA|gYJ`%3pUA?5aT%( zd+@!;&Paepy5oar;9jGo&BJ9D_Ck;0v^b`2oG|u5W16>pLEb0%GC3vF6(K!q35TQKM3nC zq^k?^$E&~D{`hjf6>K;V8r?4Qof~zDOSMHpj+Aw~p#*5md+s1w#49_Hd1*r;ET$ys>K|a65-P0fr1|IOURtrf;o}t;_J1 zjzj5wj)%0)5fM2{>XYUA=*&DLFxGeynUhrgMvI6E_G}!sPdQJG-L&uK z${-2bLo@Pq<~|%Hv+s)aoznXmflDVvuG<;xz-ZFsR=W@5po+&# za>)&!gdf{+10y711TL%rGRO7>JCDfp$c67eo>vReXy2m9 z`(X}m8>AIwRt?YA+P`^Qymn4kNZb3mMY+mglJdT;60aDI@kFM7W$V4n-kNfW zfwOcc=G+i6FvdMGEzAu%p7r&MP(-nTp0~u$^@_#>`n`xf57ydZzZhrq?FIoC^qwa- zuA)yEmMd%KlCk+8v2UY=_~@mMGnsxII#Zuw|CAeV>|Q6I%Fm}FSwI<{1Q$k;4fnf8 z19dhKyiaF0^4@QazYNMfc|*OT{zglGs=Dzb-by;Zo}KjKTP0_I-}0-BT1PI-jEz=* z;2-0L6|21q zY?T{X+0dx;T4t!2t~)OnlwE&cP*na+Pi%4hwDV*pOGs9I(SWqmA)TcRvR7u8y2q%V ze3j*4cX>uEOoPc^R}Vzo8hsNKfB4c)A7C`xtA&2xV;~wtO};J@wB016*M%*B>xrSL zil4@HjrC>>WF$lDq)lwg$?>&kDCbL%6tP=hRErfwKSuqIeA0paScne+LHOnT7 zeVUd2nE*=PRoLI`+s$y)?Ch0&)Vz`45XQRFAq49*81B9DeHi2m`%sd9)~qDzp}93K zZrcR_iqu739;!i}PHIy*ah_S|IWKkaKZY7i@78;O&%h$wo*?2a7WvS)C)@KCn8@tz zAK;f56P-akGNcx2VLLL-9@fjcj(`T#+2oQoL+azy^k}6}x+=t^Ippz_S5j#3#zGbi zAG3<|%+3spI*;SaYg%A#^%XDkUfi&jq?zvF$i#U~*@`hJ3P4WGO=7Xj;MrTKEoWBXpJAXw8{}V%teS zyXlUh1|XyJLLWE0Bh0&dBj#{iCh&#YS7~00>Hz};v!wzJ{`9GgLk-2BJzo?bbQ5^e zA(n4~i%Vxz`-IlW2MrkXm^T>p&Ri95?ALN(S=a6NmAS`EziUnDT|lx4Io8UW7fpa@ zOzZ=H%%F#4U8Rf4UIALM=boHG7yjL@hosk>2i~BJcH^;2`0%icY>5HudhsLcI^JFb zj-^20^xbS(C)Tj*j7m<#B?4Xl+XsVR`BFAo{N%Xx&U??(OP4|z1hKapIGlMmNgl3* zyB$l$MO=9m^yVR5M-&~ydV*vhF@8-^t6)yQ1)jYSH!3%%Upz1LQ#*$FS^adgb~23j z+}e>tkr(~c%%tmEqjOzIJ~I%3R~Yxb{k?R>{UDVC5HD(vMf7b%MZ@iu{K2{IwkVH| zVJw$Zg1T-myZH`>JV}w;+k|^rA)s&hMd3y5Gt^W5NXz7no0J#G&@?gU?CI#q9yb!w6qD2}%~_02Isz6=#a z=H@kyU4EqaS6W<}(#c*G4*gM^mdJ}kXqf`iH?8zC{zZ@LIK>wjM|$-RdddtOix6Cg z4w&JJ;#qw=p={fLL9XWGY~j|c_3@m9%|(e?1Di6HVSQ&+Mp$jqr-#H$2aIEbPKxPi z)ftT!^x&+;%7k!dS68;--1VNFo%+nSv&*#D)*A@Fp-k>O(h`@QnCa-P(Q(-pJCeA$ zKKGE@W(>65;l@(S=6A4Jg|^&iNLz4ZM3XgsC`=N7*P&lf+nL(e7@4is=jxtTGW z;Ka@{I7Y?KV|y1gj7x)^d%m5r8vxt9I|I{eoUiyC)CltMlP?_XmW}VK{0JVzPM+IS zob=h&7~=GKQ{mls2iuN#+;`5Yj3fofJ2B1IBFgP34)XE8wK9(q2i55`K7@l#7Xlqt z=qJzn?NV>s3O*3AT*Edk#32jp{(#D>f;j4)U$}D%F0RYr@(%ij$wIYN{#7RE z-QOaqPVXmVb~SH2rLRgm3h91=KgA*W!f!0^o&cYFG^;-zxgJmoMp2`{v&$cHg+oei zYtRf%rQruOnq6w)V{Afx zVqY>JJFVK&r14mRJM3ohFqQ~7kiWUC&!E_fy41AXUhNs~wVu}@5gI}N@>BL)FMGBdcSMg+49A|I1)S`CJ*Q7T|0c$qw=G->LGN23y5N|5(-fwzP7fuJero6Z zC9$3VMN4aegd?vqQ=$Vak7A=R>)8ztI`#{Vv!)34+tB+=nI^W0sgx1y- zpPL?CB)mx3ZdNO#@cglzg2P<({;FDKF}{q6;PfHErM&cncsJom7%Na@ERP2UJTNqX zIw7uVmNW9KN00RE3*X}#fdgx%wDsTKO`HEEP<8MLLp8MZxa9psEn8R{uuPRBQ8LA?L&kf=kJyj;|wQMqQIW z{EQK+fXt59Om8?{zu_<6M6%v1zN=Xh`9@deVh<`O`SIh&ea!BAre8iQfY%@r-GgUZ zD?P_?=AP5~pPy`$ol`h(k3YORv5A?aVAu%goLSx?hd5&$5jysUynI7}O-s9D;AP(J z&&SV(DJ(#Y<8AW>vRfh6>7zk>t+B7+m@hQv)+V{HCXx_Rpue#{T5Wfj)%CJ(d~Kih zAbf6>{mA>L*x0x8hzn(rfXV?naJ2d80S?PaRZOy{`cubeej)nvQzW65blkMMoy(x*7Q^X`CN#)nnl$W!#;~VJCz=aWR3`zTnuKhR>l6RgO@C zTOWT`LErbRAQ2^*Pw!&*fkwTdq24!yo^X#q>5T4GQK4*7?L%H{3iPMeTcQ*Teu)a8bXS`Yjpwh~cPAdyj zP|S|xhq_&u{Om?WOLBX{qZJj6M5L4hgxJqtxZ87Wf;0D3bRe%;q_$1ePVdWKyZg8r z2w_(Kl?DG<^8rZX7u*JHYuBkF0KC)<0%F-+@t>kriz#(aeVC1jY1*~Gd@5I+5rtL<{6JU# zRXx^YL_^yiHg_!{{&ihfowETQule z)flqQ{Hz4%6msngy6P}2>oC2>9raTe%pPv{ijv41hUQL9^{ zcTr7eG@Xn@_jq)|%Va%vgt>! z3Usp5y~Pt;X3m)|4`%x9oY$%i8_#+X8>&Np6ckKAwpYWlN`#33kqGhdLPJ8(Ft!N- z^dnftd}2l}6hFp=8OlHH49`AUF@#8K7Y>qO`csvSlEyXKVF?B-hNFM?xck`sb93F1 zmD#EuD6XOVMGRV68sW^h>*}sthLxFk;mjR~R#1fEY7w7PEV?{V^S!ef$ygOlVyurm zMpNp9LdqI`^dV2#Cti_iXl5C+EG!XYTdy|>KTNBdaN~i7I(9MPuhKc9(1pMd5;_k$ z0@uuej$Rq)9B{@0y10Jvjpj|g;W#18hn?-RnWBt`kmM)Gw$k7ok!z>i`AOz*xxsI;uN z!0_naOfo7>YiNs#Tkn0DPIL5q;X%z4N%;JmnLTP8`?E_(UsT2m8BWH&S*cJZrCMwm zjy!|uDAO-)TBVPLBcDReMB--7e?GX%$SBf>gAeF2=vbCMBBxeEv3ky7i8od2s?klI zi*8BzQWPQM$H91k%4-bHv!JBx$p=a|*@akUQW(e?c8H-hD*40pm&lQnsh`;`=-zFs z6S;QMHrCjr{3s|wdr7HKe~#@VHaT-9!x^4!=0QZ?-XgaC%F(;T3@bG-t?yo?X8c(5jJr7*}_BO_rRGq&0QiDBY` zeG&Wk9a;-WCnCJ!?1#4=mG^14e%PwN|E&m&G|1e|Bp)BXIOMta`0p&~?Ng=OqGaak?))qs~cNu)%S5 zOY#jkFw(pJ6znShaHp>PS+>2^KBKD-@>qn}?sTjoxUpdnR9WG~)1SgAPxCU)rq7&p zvUFpZ#Rj%%$mtQY8ylwvbD$R{Ue>I0M9^IzavuifqN(1a@V^I$_bP@WO*+m?5@A}f zVaa63mqpeQMIQ)4XofSc!sub9uK;h`0g;RRiH9HXq){v?$2Fdwr48l|tq|;W^2mrn ziOYf$3EU3S6<2u7>%q4BH!+Lfu$hUVH);~}EsE>bt$G`H>ojkRF5_Hg@-GQbzcEoC zIAOm@KVxM-5mGIO-iBQ1beZTVLw%Yw!M;489HHLj6h9f)^*LH;=3{M7`NBVcv9=dw z5b-;4SjY=HMHUilv*Ph=kW+8$^36Bfj5l^K&+8iKOwOhWgCZ}oT-sYI?$@b&6(`PL z`ZfH*yfqVJIv0DAY;N?7$`?p&HEk}d-Z@^tm1B9Y(3-FMB<#~Hpna!?JVF+m1mGs6 zCHZia@5{tiX4I?N`u#C2aYAjb4?`RkKNe2ZN;VE`-W$LAZ6m&m8|aVC4#g8I=M9PL86b%Yp;lj~5f>~Iu>al5e^JdE z^&sR5!P^alzctkXTELfJ!h1IMH2vL9mPsM3gaQX^9}a60pYgVk#Io4maLHDMYnI-f z|9Jj%aC-a0&GA>2?%TNiR=&;3YJ7@TP+iAC!1oEl8C-%Y_0~S1awVbpZO&n`vtjB6 z?l4nwddX=$`#q0=f(G~WaB{ZO5g?#LU1}gKam|IjRIERx25BpzlqJ<@NuVrWM**;| zhw=|-uU*!mwYGXRqRn;=BncA3yEiek38B;YzDerbspn99J{@TuFyXRleeoC?(4smS z)e4%7W5?#IB0xHMkk(0H5in!(FLt=wLwNbuD2kafQ5Q(_bhn@fD2B9y7}cbD z^0=BNb)LGgf%;xP5j~1!&ZNXCtExEDg~_1VbSHZU|Kvfj35m29+wr?e*_(QMaa zYlb(8Mm(fYQCFAIUJHtd@E!XeP}XP8teTV4tfo^#nVn;Zy2B8Krq;ZiIM@YCns-cK z#U!n5gUsI$_24E>d{#D(m2qiSu0`UxBKG< z{ENDZjy_hV!RqJl5A7I`@)1%Uh_#>=7PlEZA`Tq_*bgB zLGm|r|N7{yhz{Z`7sX>w{0Z??1O&q)%NF(b*vt|tf(P-VC#A#o{z2@47(`Q;9r_gfAc8ZCa(_?s{19`EPkSpUgJ6AC91Ue z{4N-M5d?+`UW#+gN%FrLC|nW5)UKSAi{~l%p#C;q2Tb3@7;gJqF{bb_o!cJfbB%^r zMRBoGA+&vSGRJSnVwk2uNc*>ayVy40TG3-#jgetc!UOkdB_<*RsRqc2n?WgRYQzP2 z5n0!mrfG56i~Sx<9N_uYl`4;^>=vI7z(L-J7x_XujnH;(_H-f0@efKMT%4c-te=z( z5UvN>QpAfDVXr_f=}F+DjWlBi|CR&&>pG?+5ZQ`%>LDb2Dg&e{LLxn}d%vr?co&eP zpn;kXX^M3&{^{EgAo&xo_EZ+}-^ZOLH2NAxyCHt?Ie+*flnyBRyg7}-{%~OLtk;+w z#e_!}{oN86a6dpE3}HQh{b#Verv$;sqD7+!`s4Y4;{2*JupGzyCwL!u5RCWgWU?rK z#`EcGWd5Kw{M{Vj2vF%D7(Nw}Nko5+dG%G1!CARi@=x$QuP{DEGrj+F%J@~&(_n^iApoz+64cdC# zLdh`?qOdfw-EE&NLN!x-D_i;_gR~DlmwO(X3FAPsh-W&BLc^}jnOGnUp(rU{1!GMO0NrKD&!_GZy5AEfOPJ$`oL zgPI6dc2suW4%OQ>Ct7E@OG0 zS!Pa6mdlh1{s6X5h=g@tG%W1etbDA33=a%XE*p_s18m`D<@GAGsh|EF?>TRzmTY}> z(H*l2ocuH;9*qRXURiX zyozAX{fUzA4Xf^MPLqUt#xuwgH}cbWnoPz^FAFL`^AVhelG2ocw{c_2R1e#ThjUs8 zHE41VsWuDY@C^E1=atKS^&hfkj+{t{f0aLyq95bS21_%H0g0i--*QM z_wMLGDpm%K@lhRpNJdALem?uNERAOEWrk0UATV&FR6yusrc~o)_8J_o1Ilp4*Jpa? z(6!6st0K2++db}8+W$2B-BVs6Q=0sL=Nbs=)eln$Mw8x=2SeYNZchr1K4cyQ0B0P<;_`Hw z>^u$&`DgEjU#iX~C2W zvece)c~`u25;?nOGTnRt0xLn&woXOym#plVR7*7kEunR|;n}~E)8ShLTmXXoV&g&6 z@Vn#8gv^%nP0*%agD*N^oji)vo=NAgJK8TmsRo*DubptkV@9`Gn@r2Qo^he`a<(YZ z+Gc$9PZQ8%Yjs?;p0Ge#`kv{R$<|nKr;j?$#LXWEE`72EaZO{poz^IVXau;7OclNggtc$7P zRR@tI>-&0@kF?yO9r=vqV&zTjBnO~ZgxMo%_^JXZ$#-CH(v5QWHt$nEn6x}qew}c` zcfV$DcgE6uHp9<}K}VUEZC-zAM5j!6BAoIB60j%J=7$l`%3I}{--;%*;?;b>SEqfM zA>K!3)sy^zQP{TNvv0kS`z^NgQOm}l11^b!PI92{>9D0!TCh0` z%=#-gcB(CNTaCx_gV|{i*HYX*FILOGF;5aGp2m1hEaj@t3rta!AJrF}s?deA!!S2tJB8^P~eW(0OCV8%1eNcKpXAE{rq z5iHG%ubZBkfLbEBU{9ur*Sxc|-MZq;wYNB;TefrHd{(a__$;MW^Eo=mdTb07X5*tT|hso=ej9)!&f%gh-# z$TG)ta*J<*1nAOGrWK`kBj`Piw7nhcn_6J+3{%gUqi=g(3VY&rp3D8Pp{DXw1Ew_b z;zd==1$y%Y-M9QGnUDwr6PvepE?{~#Dl2+pYN6Gz(XX*bt<-e;ZPM+||I36ri9t81 zDZ5M1*D1wj;uaYN2P{%^jyCTSPW7&81s6cSoj&~1m|aW)OyBLNK6>8iY;z|CHcv9l z+n1wscn1~Ll)jf@mHdRfYE-m($=MDsly}ip&EIE5za$byD+O@R;uEASn{K~Zq9Ih+ zndR7b=*`_QbKx7EFld<1WpT&IHxuH>1~=9f?Ue5as>DdEmTY^jxT+SHV+Ebq1-GDUlRV;wqroM{_9>o73CVm;PV z_dA=z5Am&ZK9so{5@-%4F__SNS$Q(E5na)(ho6$ZZ7au~qul|Iml!?mQ-6P8pTu(C zb-lSDIseEyS?&r|*X2ZHX~e@VKI#8W^CUCSZz416+m85k=ohkg&tQ8pj>kdD3%n2U z5=Vxf77LJ=rngsvri(%{m>hA%dhlt38Ghxk;C-g9QzquRpSlDtihFzFINt=vz9TUN zj#)*AS44bLov)4b%h|G#A6@ZDNYkE0SRm;;3_XtBtb%yvW+bxzrAQzB(1oS=ko|VA zO*0+?IF?1v^@#aOG`9!ylaYde0jpRu8UHf>pFbNE8L2JU! zFVFj%l+#EbgG;vrcRDXUMS;VKaNnvM2?d8+U{VIEB#!F>4sU^)qv@wMjIEaORppV( zApb)|w?wmnpxL=WRbnD2KQ9y%2w@>OZDemnsXLePKF06{1miR<0nk|Ej^+YNx&^SE zD0h-q1RxCqu0_mGQlq=((`NiSv8T>;I_9d?+B4t-n;#N1C(lR63o9ueOXIdLbrjDF zOWy}ic#%5M9RJwi#kRjt%o9a2Vr|>NSofwgn#WVJz2l=PNvU-pcqw|bZ)n2vLu@dDKqYLj z8TT%y4a)eT&ZI7n&lARgh)B#5xJ3*kl1Vj1w-b4|w66OZgeN+)&E#m-DWIRzz27u~ zF?I@6)LVkqIC(|CMMw_!5sPsL_N>tK_B1FXA@`+%olUIG5~u82*aV6qG+U=NqnG2e z^z7$%ql=#O`yTbnr=_D%C*Pk`kS2SmGCSSmb;+*xrQm%m#U{>r-&$wa%Qpxq#M`-W@r^yfv~mV}57@kqL{zw|o~V z%YhVEodM>Fs2;h3k*m@po8nQ6@MAMcFLKMKsMXMH|TH(mNBZ@5`005kGk!JF8r{TfUzKK7=o#)`RwGu>LIo!_$gN+ z+lnS1ey*N7r3$w2Xv`GvUJ|}LLs&F6-X!Sae+3Ag1SsDMKEqTn+#})6*zb2_ z44djSpw$85Is{${6=6n(wTgxe;VK7($(TmAXA*MvHtdqDb;Sn>5F`PWqF1~;PNOm8 zgqDEPw6@}-J19;*RssfumqttYhXMCf0%wA{P__1QZFAAR(4r-Oglim5|CjD$7r;fL z2g1mfc3fai47XKkt*FJPCQc6A1rL#U^m`g-&KH|* z-14?E9+#}^;9vB&ihU!N0jMXTLb%T>Yq=*e)AP8`V-mroDJNm=Vx*NH4}FyGGLBW@ z4u&-DTMmN(i#D0$9XUo4aB$%NilSRj1+SbLPSV?y{k1jcuLTo+)tb2Mk&XUH+mlgB z9AEZZVlq2$lJT`Jls*LGnu=9frgHdrPVA!2AKHwP=>~7=7xN82%I1F{N{W=idr~nL z#jS71FKb^**Ycr`v8T+Ann2Al`)FPgH%D%%HUZJ-!d+PmG3kTw5_XiUv) z`H5X>^g6cBv*p>r;a}vaCG+Pj@)Te;%o90)tbyzm1&<_oAieB+$F}!_zKk8U8*Ovj zLgzlNYo2vb&-@Rg_qWbunitV`p^0HXu-f;3AlIE(1uWFTT{9&qg^YZI!x7XRrGOg6 zNyH77p}Hp=-+{FhbKWMtM_@X4w&5r_X+@;h)mejgC!1`{u|$iR&7h7XHrykjXI#nq z5?4w0esBwB*40nTzwzZUWqJjl(G8}Mqv2WUp28XBE#L(|9PzUaVRgRmeOjRiu;F8G zSO3SGxMRu=SK5IF#i$cICfV3wDNTff$4nwiu5yZZ7}@*JO=$-2L%mw;e4FNUp4rD? z&YIuRC|(R`9{b06z8n>~1R=d!xkdkgxZTnEgfVOqGN+KDbhB^Xo9zvw>t$`Q%M{8Mw=aQG3nPF&lL7TO9klyw)*gGGnP}&PTo(o)~wCdLjqxo!-BLH zBu)&YA*W`>ub*r1R(aZ$USOxQb~>eg2y*P*b`)hLdpz~VR{h#9I-)jdt5I_mKV&=< zD&aWl4s8~(&Mq!Sw+B5(<%6lkdqUz>&iT9t993-IVUiv(YpR@z^PGfgV)EYF?vF$^ z<=$6UJ}w-{+5?{6JZj&tGI>TP1ioCJ)IKPrjhGQ#NLcKY{gSwQ1d3!k=_GlE$ZIU| z#(lp1FibPX1q=Cu^&jWR-!q&0a(BPq<`6DW`{|4GUfoc%!C4f>9NKB@q$H`cQ zZfQ}qVVr*}>%1y=4V~`qWB^Z->6$J*8e8?fP3Es@;R+&Yc~mR)#%THmsF z5#A8BL*Gt`w;fZaz!w$-7~`%@i}vDAskXN%p}gLb%dW>ku;uEpS@NVeQ$HJYGR(C>I9T zFN6s{DHGY?NLl0@Gty1QHZ<=8oDfWBiycUmzzh3kDl-WCwjCl)wm!kux_yrY?5kg) z4j2|nCHh#Hc1O7%`DXML5G(iR_9zP^lP75`hNWNGwGv zF~L>?q}Y|tlMgjF3`>#Vsl+=ic@qxS!S*hqZ}Z`boG!aHmL4sqgdLQC&4@XFtn-82 zu8p@QfIE0ouwaKl$SCoIgBB3EdSccnqYBdcd!Cv*bxCo#+-MTgDmi!~{t4|qd<;WR z2h`k@8jR(#8CpVZW8zxH?2|p<;Kvd5=@e}~{)xvTm1U_1nl(_>)yi$EBUSX{!UeU} zTE|Nz;9S!!dGB`;|YE#9;vF?Du3&*z#* z+kon7`&A=Z{CC)xCM<@Mg0k6qVV!{*(4wt4pTZpSJ}WU*x2MH<6O*1}FAS3-@ZJY0 zH}NoAP4m6k`SCnGA3NK86-7}bLGM$Z7jG~kq-oBRHm?h~9QyfQzQFg!2GjMq+V{)u zArmPUH@CZBFIE&77;=u3=zA3(1plJ9ZuDkseI9Acin+7|o%?fkm?@4nA7ZS2>It!$ zk;rKc>G98}DngNxm#jSi?ezvXC~ra$$Fv8`z*p#Vgv<+STEAlmtEz1EA1u_Otx8n8 zD4b)GsW^$HDFPLJPjE65*KOm{z zIoCf7l$7!<7P-<2q$E8z-}+ulYU3l_E^5^DR`I2vZd#jGy1D=ts^1N{$kh}A~JsShO>8b>foP5 zA229FnF)x|N&6H!XM>e*3+pGM1*2{TBgM(T=0_%lcLq0*wCN$tm)A=8izbbUCXVl_ z{@fS*s4S#C+m>mbFe=o8kUm@dy?@C2iG8m3%M>P4HlIq!pb5h%Cu(sq_#mRA8uC3X zOQG=PhaVqy(_MpYxAe&r;O=s)s3=KYwgq~}^fh5FAA6J?(j=^xCjxNJaxJ;kXKw3f z1nNK0&r5u*ot^*2L!r`)Fjy_O``rP4{9VN;20HUZcXQG7+nN0+pFC!ac3c6`&~YuC z4*OlNdJ{YGJ=ULdOcQ$TFURI=@i?3lLI;6DFuFI>DJ56nE89=RPqh%oZD|Hticy9& zDYtI-4JZ2PFzuS{PxK>MRwp>MY8m+}V1&AS2sg`DrZmP1R4Hx*onO-CpPTPLhQYwq zyKCXE#P8SphRCGX=Dtl(Ql2x}rPZ6jAtiWFPVyLoWz5|B<@+`wxu(u^d7^^hMy#!1 zmf5aBbZU7Q6~f)PD>FA_GQl;Gk_DlDijkP<#B+28Xm`(Pul5*?_A#AhY%jT7nO^;XXY;_%c7t9J&O(h{F zCR-XkHd1PKZ!tB0P)$UKjV7*AY1w{qFq*+|@3?Q_b8}#>l}1sMb|8?{)jU~3#xSnT znrk36(-i`?X>%na5|>GD7bRis{hYeQUZl4gxYW1)9X2RT*<{Eu#yz-l)aQ_+%qe{^ zoas+o-u5c(?E)CBdtJmVwP}3a$}06#O$k0m1|1?8AE;_0pD0DnP$j>k6VAj2m>l0I zH3Z)XkYUpARG9A7A)APBAmxoVsIT1*FEBCQag=TJ=G-lzO;)tQUkj+3n&JD_nz@u! zMe}U@Jas$OYIJc69rRbV%V642x>nlq>zRt}yKN2I@7op3(x(}&ctKAgs`lXC$9jST znwV+W+(S-QzF_og{oF%R$-?e^vu1o5V817%l3>M`g9Hr+IA^*Xj1<2Z;3ba)ZnP@qtA*0Z55jzOIFg$ey$wNo|QjPjY*uYhCT9 z?6o)ss_i}1BAy?pu5Bd}Z42APf?Tb^GrN3Mk7K&+)z0u`kPl#v`KCFr9+)u*R>Cpi z!nS3=ApI1`Uj=UwmEzB6xdJG=+;^drZzcvg=V{A;C6z;fP+T6bGM9kJp+#Y`$&9R+ zY7{f4VR5vRw){;7mH5g4Llwa7uaoV%h3L;^ELo}%f(5@mLX&*8O&z_l;xa*c&tEvN zBH#fL;pqmqt%9hDd~7jDT=tUh@CZzrXruS&&T!!@%Cao~WVj;;B#;Z#IE`N_Vx-pJ zCq6{Xt#jM_-*O8Df-|L^Qxd#gt6|4rVCfzH`~^3nae@EWqWX9-m<0fq3b(T3l+b5DA0MmX@>90($0X%|nZ3T`pF0P62=uZ(#A~u7%SMD+6HCM^6~X z*$|+SRB8dV!{hb~$Evci>!hPhm_~HFw$@-wAJll1*pwwLAD1Kb3NG5pkR#e%qu+t) zMCjcNc%5{b{few_=c#@&N9(BWS1t~E#6gW8L)w_UR{7k0XgI%AO;DM86mP)vRL80G zG)ZczQIk|NsEUm!aW-gUItaF}^U!sl6B5HmsL}QWVEb`{s>zVh!KR1wU<2>2x7%5u zaDgc7ue)37|8sHxryx$*rcy&5FH5Lje0<$AFcygreN;*}&pq~{&|>v&&435>QNSmb z=L5nOHC-^l%nZ*9dmdX6uyZG{6u(F>XG3t5hwMpkS#-EYPzW)zWBzKMTqiZ>#P8{A zr*tUZT%|}xOVy7_Z=8sHYvSw~MsELIdNyE@psNcTLsv-w5p)Ls#*_ZRt~;s-xZa1S zNkV4{hfbugWCf${?cQjUX9|ea%F&OP7Y_I(fPuCXcc=z;~0+3{u$p_dK!O9uPS+)y)mQ8 zj&-1^P{=oyT)hn7$X4K;x&pZ1T3;1_I&UiK4YNfSer_-LWxv@LyINW9HImSyigFo5 zuhm4i5^ABpVGd!|rL1_}^D-_?hPrW_>?8QwIKJlmLGc8V%Jc~I;*SRWZ8kJ1mB*b zARq6E#T@BJ`yO(Z%YD2n{9LbOl!? zDezVRsE&vV&h#gtr*Yo79}gehGF12{TZXz{T*>~Es)AP5s|RGK;i_P6>5635#HTls zS$pwrlkWIRtSJ*W&i2qfu$&QYmjVoV5q)Ky-l);*uDgYXg8_nNV(8`Q!gZnMO*LN( zn`&;ScT;s!UTzN>n>(?|k(vnl2DPQ_qTs@bC5_bon;C;HM+5_|1lH|En&{WQf)1`b zhst&=7&4tg!+_qWiq+_r<~zaYGmT$+YPuE|^HB}w3mj-X;oo~`e{C5!AcC&tfcTYK1 z!9&3!Z)lapQT%uB`fqj-g6od;q5@l&(i%W}-PZoUz5@L-DhDMBJ}S4G|M73>+W&rZ zMn;6-78ic|L^Vk|3L-~^8X+5-~H$R@w@y8n1Gx@KK#ba Q2nPC-5|bCL5Z3egKc0{eI{*Lx literal 0 HcmV?d00001 diff --git a/public/images/screenshots/fields/edit.png b/public/images/screenshots/fields/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7f3289fc107b5fb7c3cfdea525e5746c16940f GIT binary patch literal 138970 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%0D?LqBo=Q7rt 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 literal 0 HcmV?d00001 diff --git a/public/images/screenshots/fields/view.png b/public/images/screenshots/fields/view.png new file mode 100644 index 0000000000000000000000000000000000000000..92d9eefaacaab7c9c453b88ab92d6c674d87f275 GIT binary patch literal 92594 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 literal 0 HcmV?d00001 diff --git a/public/images/screenshots/grapejs/editor-1.png b/public/images/screenshots/grapejs/editor-1.png new file mode 100644 index 0000000000000000000000000000000000000000..75799a4b7fb96ba929026af5257cd748df3dd5d0 GIT binary patch literal 416823 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 z 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 sl9O6{?K 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�m;M^Uq_Eqleg3K$^uLPoI&E8 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%0AR7L%12MEC$0!^-4>t%Zc-o#k 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

    97L#1{RT_Ey)~>9oUv_V9eKq!7G3X^CA%jJ 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⪪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 Bk$wOG literal 0 HcmV?d00001 diff --git a/public/images/screenshots/grapejs/editor-2.png b/public/images/screenshots/grapejs/editor-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6a98c2988147e37a97955a7b1e9ebbe4e5c6581a GIT binary patch literal 180986 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%0A%~(&L=GTyZ5kGuj%< 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 literal 0 HcmV?d00001 diff --git a/public/images/screenshots/lists/lists.png b/public/images/screenshots/lists/lists.png new file mode 100644 index 0000000000000000000000000000000000000000..aa3aaa38a49470486fee6b0d07e8000e398d2223 GIT binary patch literal 83111 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 literal 0 HcmV?d00001 diff --git a/public/images/screenshots/lists/subscription/edit.png b/public/images/screenshots/lists/subscription/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..b6b08fac92557d7abf30222f6780e05c44eadf19 GIT binary patch literal 125769 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
    h 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 literal 0 HcmV?d00001 diff --git a/public/images/screenshots/lists/view.png b/public/images/screenshots/lists/view.png new file mode 100644 index 0000000000000000000000000000000000000000..243abca41b69c34650bcfec431093f243050115a GIT binary patch literal 115640 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 z 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 UUvAoK4iJuOCNSgbtDX=41?*-t$^ZZW literal 0 HcmV?d00001 diff --git a/public/images/screenshots/mosaico/editor-1.png b/public/images/screenshots/mosaico/editor-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9e82adfdc8789740e62be620e725203dc6e4c426 GIT binary patch literal 612362 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%0A067^l{_ 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Ɨg&el$AL%hxuO?tZ zuAFUPX1N0+%<)>aFoGG~#p|!6^O)H-9;Eb@U$~yOU~+F^R(bx-H`3U~gY@l(^Xb?A z%{MqQYd8Jb|NYIhG5ZDf)Xt}SAKp!qmrti|jhv^^Qwp3?;HRVji*;$THIZg{PyNa- zyqW&xAN)aD#kpSxM*i#!C#8-cl!vp^uOlC9PVby)yRsCBy`|}il zih-kwVLN^4wbwDTf0RZr>mN|qByW^G;d*XgLBQSI-NdQ@0URN} zivZHVRKAU4K|N%TVKqR*X?b-6kNx{`?A<0_+pnBIldjG#q}k82qB+oI#dsop_|b=H z72L-<%e26`^!OywfLHK^++S|Ji% zG-LnUKF7b=o*7f3WRlIL_Nv@>>^st*PrO8Tkah-8Q+L+ zM69GH6%fv045SHEdQm=ItYOp`0+=f#Jj{|8F2{YOVmI)rP5?)3stVi(g?&JFdZ_9o z_DfLyw~^z?>##SLX{)EV8$jRh++i>wuDx{!;3Hh(>N0>jM0kuTSE*dBV@x2^ z{-~cmoSdZngB^f941)Gels7zl`c-7NzaY$EZ=FzzMH1gt$Rogg3os1M#*3-J-?Sde zV2<|nZ2Nag1#}VSgshJ6T%lw-F1^zJn^)09FvjTLBg>T{z`sO@2tc$3lcR`|*}TIG z1&Fj7K@pkv0K145#T8{W01@DpMg*Am%8`2*sxia})h0Ay5#vpLb2;_yZ_<U zF5}}%z%6Y8xM`lZ0y~s-zPAtR`hrJaRl_v^2!6FW(7OPAA<#IP3*uzvmoaBx7#0L; zFRyU?-<%QNE17@7oB`Y$nRo+Z%A+sHf2{EX<=(#MrWpgkK5NLxj2VDzK|KhXWZhq1L!fVeHKf@W*ALT+j5+wuv3Y0|h<-XY&!c^NnL$F{`>prn)nuwM zMy`qZk85o^1Cie)ihTG!I?Hw5%k!iChimxw`!;Nx&p&0g`2DAc*RxvVqu;)_7iWjp z&tztMzk662!E0rxWMBXGIKI0!E_BfRaAYs8g{;lry}#GZe&YOp+|z;gQtHDMt~s%)~Vkh`}`D-@~B0O{pMC$CpN#?%E0>? z28As^<~xiE9a#!c%|{pq4)^ytZ;fpJgjfx)^i8MZ_wNFxi#Z7t)KZRbs{~X?NwD)F3ZF3C4jsRu|)h;Rsu6s{s8@ z>ce6v<9SyZy1u%j-CEjOUri^lxT;XjH>r;Bo1gsOunOL%97*?bczvr-@Si_ zP66x1*C;JmPfynt0o-RGV1O4&?9KHNzv}rerp@|VTCLzY<=!`xQ5?vez*9aYTr4LY zp79m%+_xxcIBYf2^B2$48vQ!lejLi5H2MNu_YPqI%b>^(r4H-R{#D-2PR}B_)5Z>S z{`M_w4?H}8ygcVWIv^(lp56}gXP8H^w!oYnfwzi`8Fm0(oMN2k=y(1b7NU)jSJmvJ)5t0=g+}n)FayWO6?# z&b3;NHc;|WE`43#+yP!FK@{qKfSZvBiiW|HXta2-c^PUbAn9U(3KDwQ1*bLSAU$7z znJMh{BU6MmNvI6V3J|bM%a7Q7UbFX{$8E%~8VfuG==X*=@Hbj{d(6PJpjL0WUTqIO zaVpfV$xLZiVW%<$a#dHKeU|ktE{V@_B$S+i3(tvg1n+AvX90ByOF7)_e3J997?2YW;Ufg$xamaJM--z|s=@Zt2 zp{qdHNEvXTa7w&7ZsoR!QP3(30(4{j1*RkBWXLrm7#qTSnqx08H|)(kYuVC?5lVr~ z4XtoOJFF+$93fv{gOx#h%F!_ntg*?M>|^#BA3huz_{!#LCPTma{&&8!5sr}O!|#4S z`^kWJEZ#VerS$#by5sWM9sSPVXYGG_uKkOH4>L&TiP>l0pYNKOwU(Xkzq59NI?wyr zIGz8jpRA*}j_d7%{qj6N6C z{Y*ZwQ8O6HJ!A7d+?ze@e|*HQWWR6`d){^FYxdsVYhNGQdidS`dCWfdb=F^h|E=R; zoVGMOe|D{}|KPfZ%d?lbdt5hbb9S%U>+JL2=XG|kf9%|U&~Hwfv0gm?)9-BuX~k#$ zZZCcRyX`Aizl`&}#&aKJ<*Ok#G3OctJvW|;yvBQTa`+sg73YO(d1CPD1Hl6p5C%Q> zaaNJVwJ^ajenYh#%bijg=kg@o5*pX%c`Q56^DPbfIUjQaz~?-Bf5d%XS>H=_=%UXa z*V5a!XX*CjDwKyVbk#n}$b=`Q1j~PP`}oi$qjRx)gaWorrso05H;jShTslL!`0DE~ z)8G7GKjESM_>Wiu^RCS$Fqgm|vjqOvzkQYd&HwmU>Er2}bn*5>`pX}Gou=1kl$9H# z|M{=~O}fJSTLsvCy}z4kdRr;SC&*m_s8#@$=O@K_OOwb ziOFBZQ{U|Z)-gy73awB^)cvcQo8%#=CJPUM8Pn_cP}!FNO?qMhJw9LW0pe{GqAum~ z@+);Rxa%*3#)$IM!Aoo|t}fZ)hh@G&3s|Hd1;!w7-Px!?zaL_}W&C)4m!UaV@SLsI zR?;CJf2r?KxjPxY#TfifKaTcX%*SAc{*uo>5op;l?Awgb~?Cl3Aa98QWyLV}Yx!YdD zLyi}>#hjF3fZXHZ-GH?=fNcQk3Sij5;Bm0Ooth+gyM?(hhTX71*oO2_e=ni{mSKuK zA`eY(xJohM|085t_ z*oi0f@*6+y_0FGKwJ(MM=p_$8PP;11f_ar|fvB%J0XEm!P7x!Hz|134*7>^~9@h9s z7!-ia>t^0Lfr~jTRQbKec1_qgJF<3W@3M9gDgDE^!1GdBWG_lhH%k{d&LFB1N8 zPmTsdKW1YJMg^<}L1vVSe84R+C*1G5tm<)p=ft^wn49m#%Tm$+_5BCZt~oJ&98cDs zSJR_xIJEWs5$nv$8S}$%vuhsC^?DDl&3=1$GdtOKXXiY;#s#1JGg|}Emj@s%fYyu? z#+!$JW=$f9hyG`y^{r#i?*1Sq`YPCCO|yEHVfH`gFn-tR>{SoE>p`IJ=gP#_S$j^Q zYnToCTd(1z=49pb&>c^7@FA+`j+e#wdG&YxnE}wO&)kdt#Q2r3S4SK1Yy4Aq_}njM zeTr8tOB`Wnh~F|fe@Cf*=nH3L-#)Z6llAO1+W6$AvwOt%(dVpRpPnBLe)5lJ%&z<7 zV>ScdcwfgIljoWKWW92Yd)>^~s7&KNd>-e!7ChI9{;vOwoB!jRkiXZs7oA6*4a}u1 z0iOd=MwGR0a!}j-E-4^qW{0etVLHKBe2$ktGrpPQgq$({9pSlexRJSJyx)+&?Xys# zhXy{om$?DpvzxNdpu_CYLHjBl-QoE@7Kr+P{nwFXAz@=lA_5zS#K zveU~fXj3v!s&yfHw(R6(7^V>uzjppSRy|tsE;Rr zV->C!&%eMknkVibK)kXTr36dl4nSq1O_gxHmqmKgO~)VKr}eed3DPrT@p@e4Rd?d}J<+>(9d^ zC`FEiDPG;PtE=?WqmM8KzNGBmCfW9v0d(zju(O}u9v!7Ozy4L)+#odK;88lexr=0w z6Tsgw?cI|w&O~^%rE+@u!>`kz3G;)#yx6Rft-l-j7x3AqbyxxGD{C;*281pQDZOXh zDDvR1nabi!VO{{(hesV2iQsTqmIdImOPGc-vn*ecAF>1n_^1Fxvm{smMikiv#x`M| zd^ORd08u({UQc_>`4Ghwkm*f%Z|3~~-x`N_@BD>VRaYfSu#|Oa^0uS$Z9n}{(bXdz z6m|^@0w?b2k845YIRiV{`Jtlw8UKyVsPDaKPbFFb1r_5`<%-B%3;dfe@gVFULV zwI=j)g3Rq=jE%V(k>GJkZj2#%h==>uac1%Vf^}t%QHpuC&%*&p11;fz(M^L<7}A(y z+p`jZeJd00$S8xM;XsNDGF6-pypkYFc4^4dxi_rBHLEAG0HXxBpY1)yq%^#KDi{t> zl#NfgGewTBBN~mo8p2w^>!(M^P>^J1LXMER(;%o--tKR%cmAEn_&&~y)4zKk-_uyM z!kl=oti|m5X#3&&SsU>gZ3hLy?*hbeos$_I&02`{lHD%;on1eB{f+|vaE`#v@3Q&J zytei));#mhD(4XN(Kl{oZj0!xYlF{c?fUAEb1Nf6nS_aq{)NYwSKp7xN2M{xz3X|i zR~vUI#+%3W58s=Na>4U$&!Il__tX163?=KSGWz70o##i6>-RlkJe>Sn*L!jF;bG6x zo^8(BjcY!+|EJgbyL)_g#QWdrkL}E^`LxaNukkn6fIqWOzki)w<0sB1|7Lx&kFI~7 z$zf=TCYU{B8(nZOcyF)qZyytpJyZB~b{~Gxq!T412_y4-*G7zkzsJ71_C9?0klws~ z8_z@gpoiaQpx@~;I5hY!w7Ik3BL)TqXyl-3jN)3f0x9sw{E7C>?@{&?RD}5Ow-5fHZ*yF3INEu z=pc>M9&{qPn+fp-c()hx#3#!3yU{tXNTmAr@Y*<)tAArxzp`yutvmih>ISMw?nx+gc_I z{R*CR#-NwA1~?iZkJj}C2?r_Pw~SYxe&qpKYshUtdA$OFXPGwt{NQnbq$zRri-I%& zouFp~*xFuQj*x^q+EGP6+}}(?vgpgO5c~|gWdA3up|H1s@~1a<0wAY+BH8+vk=xld z9$WfRBvhgRIA34GV@!U7RhSb~3@ClPJ4>LFfA#D|c+4w=0c@|9(+znRZZTNMB={xN zY`y#SWy!#2d>OVt%9=opFsQ?dh8YNON};vC8Xz(BH&@u`ih#;nUo`iB&v#3JD#u3cf6 zYUzme6&_ya0;N_8x(cky?7fOBpQ%JgsX3M4_?;V~&{_pRMO!bo08J&?AHk@hD<kH7`%dA_klf9?6+_ILI%d@gWACI?5{7i6Z-=ym6or|`R zlU`8eWXZ)6ITB3lr{X>K96n#L6a!v;=N-Xym;R>{=f**#Bhx-mmTC8{0e%Y2u`s}M?8V&$?^x11F{%PYTtHSAvo zJ96ai;DHnGoe$~jbj(Bazj9PjO` z-`jbhzu5`&$)Q&75mx zsEms|BkZsHTu`lXL{^mvI|mrD_2m0Z@fl{GjRodC!e!_-Qx$8oPe@zVHik9N#i-{V za$e{d+hiIb-h0ujFtnLpMIlaU(<(hHwL0r@n11ogZ-W(<$=WTJJ=+|gzdPMNe_{fB z@jkqM&d1yU@Hx-kzfj-Z^q;fmZjpT)ukadRqf9A06?|ipRZnYxoB&e99Ip}YKPDbLfEP-O zist}D2B?;b0Fw)h7a!i8k|+)xMkR?Pf@6#jIr{U}7thm#+yfs!z9mGfmnNqp61rB> z&gN=*0ucT3@w4>wD=H08{x6h%*a+x;snrk^Z{f}EMIS56HTuv;Hp}VD$_q-{;pHZK z`Z~E?u20V~7LbzwO>P0@bwNcLC2film*aP1>(9^cX40V_Yk6{k9Tm1m~%5ZT5+CTHv0j%z= z0iM=2(%awsGX2G${0Sax0@E-`Y(ed3Xkn<>Wn7n+Ev7Y>?nnYTg~`w*Pt5}15E>jh zjUJ&BJJ3Y?p;YdWl<*D(7A%-*jQ<>FfpN(NO592t?cr%QlYE!T1AUS{7ND(HU{-Vp zb+AQeCQ!F>%1Vuzk7ng5wb8JfQqyL zPla1B(`9V~4PXw?LC*C)d4V?T#H5Ac{YSy|p0+D!Fvivj1BNa5dj;c;?FlqSpdSI0 z%J`Vv7G>lTAdh=$5L;mmWCnByeJNlV(-3Z-Q4*_Wj=7aMeRCnepA#=cW zVX)wQ`=rcR5Miv5x#XG{@jUW5VR=O^3b0ot`KtF;=H{O8JlD46CI##MczBNODidF! zB!zKIhK_AIf67_|g}FlnjRI9ZjZg{Y>Dsp)0h_;j&oRI{WJsI#-)9E550GgYQo~YW z-Wek^8HOA4OCSp5LH1Yxi~vufVDqQcYsmVeLIII{Z9VlGpfS8_q93 z9)9n5qOW}Kd%yE;!SIOt**Bi!4>Hk^WjRvc`(s#>Eh|gUo3-Wdwr7~w{e#SAvh#E2 z&2wWex!za5_n3X}d!Gffu$Nfl4>Itx*|lCXGvs*R+2P!}-`)EYWMU{)^v~xCYrx+v zx#x33L#<%j&$N|Ji0=bo;GvFGqy?T{Pi z2DY9RYRtQHd~}?CarR@d%Id<{EVI#%0PAVzB|O;OK3-)#;loyX z`e+~8do|iQr<%YJKwIWM%f!3uUG4$4M|x8Duixqc)&N?xKR}ThptP1ScBnwTBXj=y zOS2dQ%Jjwn@`Gm1^HT6PMPaX#L4N|%>OGeFA6A|KlcE!hL9K73Uw!gtApf7kAWD8gX*v_?pzz_phT$FRCtYQqg=Nf+(EOB$jppK6hn+g|#vmqeH@X9m=u&%1Uz`X)ZGd9EMq9sBfrQ#TtJ2%vOVvv%>@@;fD@4?|Z=bTERss+>Dzl*> zH2gjg&@k5;Jp>&YaFOYdB_nh$&37TIpvPWutjcIa_|O!i<$b;rAl#&p8Uh7KMLgSE1Om0 zh2cu>X$>o`4fhxyNB#r>nYkBS7bW(O28>`EAasqAdU@@utdN>}mh;E1b?2L7%=+oG z7EClbW&e7_I%O~Tte7PO^fSkI4>dnWUoGz`Cey&?cYS2%^V&nBQkiq?yZ!Th$oRpq z(P7@ljV$>IHog)~kJon7ZOw!@ zLu|*1uS9eQY98Tgkl4w1xc@t58CiRb1k&^)QI zu3_yn@@b0|94EKcipr`lvA_Ag?OaUXk9`RgA9;;!DWPVDBXNiNyLz=; ztW`HJDNRI}r>FbYh4Rk11OUJBx@(R}PYWu6>TDwd-MyU~3vs_8QP|T%d~@`9$A6(f zX9Dumqe(!rftRU{`w}bKz$FxBlmi&-B~$-`8t;SQ0X6Re&v1>Loror0VH^RmB*3gv zcZeio55xN>b32q!M)_&Me`dup44+o7>35HUeO43)_V5uE`EocXz zuGTj~eJF55Q_8r4mmbRw%*BPosxB4kwUe$}%M!ts&MZ~;?Yt~j6`Y&jyQ2V8h+;NE)$mU@dN zYZG`q5F-uZtkoc8u%rYFo^24XDX@li>2Q?E<$xpap`KJDpy_mb^PhGv<13cDQop?% zHFL0KnBZa}JfBoCX)knV1T^r|XbiMIpMc>0!IWSf$pbJjS>LGWs|-IRi1H5gKppzF z*Fw;gR7ERKL)K0fRqaoBxPs7Ye7L3JnbJ!LgP*3XtS*vpL6Cv9( z<5*+~BtQ7jwMa(!&5&cW#@JH)LMKf(9k78+g3wjVYGslpGm}k0q`|jL!f||yVGAH2 zrI4d(lD43`Dfx8)I^26-5*B)(+E(2Q%S56vr#om{TWB8#diSo`3} zG`}x|p+x%@QhWT}cwKmp=ZQ{;JIEkDkrtb^0wgsHnFx@=?#m$EtFmoT-BUp{$l)dd zi?#mqJmOi%4&(_vy)Po9QKx7?d}r?hsB#&2dkqqTCMYN86Fw+aBHi0bsO+$I5mjt*F9?%T&c2!mHxrMWBO8X8oG?Oy=J2My ziAxB-Y8$sdERw?uteuEnFoQjwQr_E8G;FWiG#r;B-sIi*?U3a8i?@ou=g2hcU40C= zO8!YhOBI~phCrC%@GvZ)6+XNd}pQttq!;>PyagQFnCu_7!<;O;k|&1OT3|y_#WAZ>$g%kB&7!MBBK`|4y@ElycfAB7M7h4i zjf1}BTqPLn7|x{IC)5Sb@kOs)zt@JnonsIHhLJ%+<)5UXkUlbKqzHG zEh(Zew-DmGLMP{wd8(~3S;euSvOrC~ToW&~dhkAE|;ar#M}iQ_{@ z42j~6Uw?Ep&ONxCBso!1OH{<$KFfV;Pg6NQv%m3HSWHNj!`M&pR<6r5^0e6XLm|7P znPF2)tCc8RU-U^xsrMDA=S#J6>oK_N8{=CCPXJIJ__T>3`!CeY4{k$Ng!L{)4yhMZ zfSGS6$>y@csF^@g-J$FV`i41#KF?sb#TQ9h6~BkKQieJZ2F(wxGDW#)3P^3vELoXi z8YTx7RKGHGOZLmEN6vxVUV`NJkN2|=4j@*$^6~Zh=8vGpOc677UY9)h*ZX(T;?7b)?E`xvsn=q=Zc!R_6e#kV_F*$G^rKf_|{e$LupocK?NbfG$rphLNRU_i+Iy%mJrlV zU$4J-lC;haawZp5tzVEBAmo^q$6+PnzMa_p!(_?!rHz%f_(yRC+1JYkF=WFF&?HG< zppw|*=_imyhHLF9Nc-`KWV2uEtJEt==appwKwk=E!&kOA<={$lACX>ztw6lBVmkkV zj>zYY@(vnnu}D_}9gWpBwLeKQ{}2=5Z*o8k#A>J2wLY%`Wht|rs^tFU#}^Z?<7(sV z`eTXd2UFRDdk0{lF!{1eYfQ_P&fV5T#$-9TgFVAJ$wog=ms;?Gf)o`Imt$&t-o*38 zBfcr!5KXKMTxSLMBO$-mQ-2hPE>o$%Si7cxNH<=?ZRds^AqhK(l1D zrq3;VB(t^V^Q$aeaMzOy+akB>ly&z3;?4#QpFaQ*qE!AkSZ~283P)uO5TJ}$2^USt z*_`wGQTv0`O$d2RUSAb$-;Y)oN12I`o9)AWC4oHo%g)L*8ir&uDrk_r&sg)12^;s% zBb@BSG2cltK#6jbat@jI1O8q#T<00ghZ!a!bE2WOqOUG`uTf@8-HzfdegWGDhxnos zl1)W3w42w^H0+O%nRpC)Esq}0kCSK%+*o7jYdXDw+?n++Z6^SqM2*)^9w+T`pia;4 zEi1hF5Q}56pE{eDn%{#f^-(=$rKeIB&C##D^XavG!_txWYO-nL{NCmt#CX_oSlRr)f875NQ#p*Xu7h>%fQCMk%YUWK zx?Zr^eDUON>f>E{bka7o-4aVmI3y)$#LIk%N)-OvN0_CA>XQA>CJF!MBlk$C@hnQ) z@1Q50u5T4RR!P_xG4Fwp#T{YAYtsB@Phf8{r=W&R3H~N!jzh!s;`P&xZs(hWps};@u6To&C&Qc{GB)qs( zVjvZ*gyAoGVDHs?7tC!+9!kMfzd+kSA^Ci<$B^{5{-gxNs7Yzh*saxE;w?I$N-WHM zzlqukF$QZF9B!_g0QvC%HVaMsFi$lOumTWggt&yds-*9)?)}Wd+gqqB{i=Kv#BT<9 zRd)C97aSjCG{w9uWp#9NOXg+!RUQ6z{tY=LnDh+j(mjroz7=Qo=u{Yz_DTnSkw}9a zhxa)+%aByEN=w&2Q5J1oWyy3Q|9S#-%D{}e&I5uD{+d($|11FdX18jxmGcbcwsW=w zff+fU>r?dGLrJYreUKhCD2jg;Lh-}By@i3e|D!AM1t)Zw%hTGcQ^cvaWC=Td6F)wk z);)7VeoQ^bo1LK!{Vy%?8dSZ-3SYjMh)g@%2owB$JpY=g7fG580Bd)lK~SvesCIx1 z?;j}^aIh3JGg5NeSNHpN%oe4Nf715}Pp-1VGw)Dw9Z>VM;}=2-FfETXW&jpLs1BhV z*!}3sTXy)2g_B=x-uGlYsifwXTBT<(;C%lM(^P#=Ms(k*2jgPdWTSaz_wDw%@PV9D z!vI<=iELLNz6KjrKm?ryP{w+3ScC_%-2!-CY%at7wIYS6s!>a;4UyrakZs;ynGtV; zqr>pdRUpx#zaw-5fA;!Yg&#U-`D7gXR50}__;}s5dU1?i$opJyqf(+mQEA0u{M*K& z>_Ng0;M(bEI}<()Vn|h&LRc^1xlXyJcQAMUh!jKanJX@`kHei;mFAbhyGzQdOMO${ zu=`*C;)^~e?alVjJu z$ezhxuA?4{rB9Y|s(75a=Kx&Cb2!ARuZ)Bnj1BJT0Ri0i)%#u-PZUZ-*ZJzkPTMG^ z+VES-E|cC^Q~(E=VP|pr!;VS@71R_tY2;6h2iM(jS{ZWJxaj=K#98u{)+R~01iYDB z23a&6676rsH!8|DV{Pe<5I$!~@fK9IRQ{)j>2i-0I$P+j?H+0YTYyo4`#P1giHP^5 z5?3!Kf*RaQU3TK?;LD$5R+q6x3>#wZf97Q{>{NsW_V&8G?7R`bqB%2ro$a)A<%hR) zdTnYS(q=UA8spjl^(~)xe@5oq!l#iD|3vaIZto9UcD=@0YAZ_(Hjj1R^-T`5&OBCl ziRVks?K|UsKM#)-Z0vxv6e3Os$=h|3^?~ zBkFx#Iq@G6+<$@WIis_GC|F6l+4_mCtyaJbGE)EDJ$8B(N~X#0sM(_BgZ+4NAg?|% zT%PxZ1+9Fq7{jZb?#XYHma5aA$PDSzNS_$&0bN61m1UCHDe`e;u}4{5?xFmgh;XOi z26*@k#^GL6COPKM|5=!z@&fD1(kUF-tJyt-Fj(&M2UgQ^fKW_7$l@hw_Macq1Xd5E zr%BpaquIfwnEhoUaxPMV#|5UT8pgT;{L`nGIPrgkEu@Ky-dmv zRI7iXmHWDep&s#~j_*vVLe4PZ-EP__=(+qSqQ}B8^CydQ9O)EMRu45UZD#7dSQQw|r-KIgzwN8nTNK=}Ii8dr~6L`II{FFI- zgJbOwyBySlHr7mCArAarM$2cfJPQqt-Vojy+_D^KJJ{iVm!S+`1IXAQs0Do;A0|gJ zS&Ru>Nm^5>MIx~S1Nq!5zLaR5eCQq9jqt8AhmXcSc^2_Lo80%;wW;G0mdidwFa12R zRCTXHv5_+I!9Rq}NbQHD)ob&sqp`n{xY`1|7o_&uJa&0&`8KTRkH)=3wi^wv=YB+P zQgcVpZEm~5*)H5;#Dye#k&6s{rJEJ8wZW~T=jECObG!5snVe~&zlt!+nEcELdc))z z`Bg}^r+e;gk7C5_O*Ye4BxMBWje%~dTBySP6}Jx8)7msLwgo!UFAuxbhWo8T=T~x} zNRU_Dw7fv3t@D%yB?SDBziuSlteILB%#R!(1%B1{QehMj9mP$!EaS|52%4C2j=w0)F zP1GzZ89)vRKEx(TFao&+t-dl@&^;Q96=UU^gTANqwT_uS|EZUu^=5|~TPDa%H{i(I zClbY7+*hT6c{dxx3G?&|n!-f9Y(=HsB%Zi*|E^_J;f3I%exQ8IQx;;?W1&rNo_+YG!UW>05RXGHaXLX&o zRs9vDhCTRS83*@Qy!vOsHnY2B|5&q{ic<8i1eiU|Y#Qmop3?bw68EFMLrYV0jQ5xx z@zR#C3M8$%L1d2<9&Ujl*ce3?h$+%rHx%cD9 z`QOry?lG^q=Dbrx#q4(Qn(UBHdLgt{l;1>*&oQw21+AsU*Enz;bR>QI4p~EWK(`?NzICaaF$2u_z9@^g zIDVQ}z)S}FB+NTchkG5%$KXP~s*^^4OdNnC(y}~S1cxS zcb4u%sOXTwOfE=E!95FfC$*?snuQ zl&%3(DdX5Ed}gd{!VONyAMo9vT_`19Bcr$BfZLre>{55{_kr&E3%R_1t3EGKSxH^Y zV20M{JRjH1E(u?Uw#KyeA#><^10A{kA2JG|##KCQ^oB&xn&$REFqUBLK9X^buo*I6 zk7#l8=dMYi3NG5W-y-lnC??Rmrd2Y;gKH zh0EWYHWh6HcqG={qksQcRS;M)m?nQ%0f{<(JaS&aecFyUL59c?YM|`~dknt7DZWFb!PjMrg~B1U z+8h>%{9o2qtK(C202*oGCV~o-_WXyaLsv#bTTnm+LX_Y`u=_5Dm7v);`fFZx^r7Mx z=>Q{9fFMJUIy7eHnt*JgMRPnTI^T>(m%4)na?kO0hx37XyZ|Ws+d5D@CenF*&A4Vc zj?8Q>w5|Y`0+Qs=;#W~W04m3$mry9Z5GC0NIxy_YDSyFt*S{Rfl6Mbynm=a@y>69n z=s*ssQ5O=3$F`hVCVb1VNhjHPF7wQbZuMvtXFEZIFh+`|9b2tC=lVvBaT>v8b%w97 z68yuT={K!EQABeJsN;xlz)o7G0maqQ$cNfq*%X3Ga}|4_HMy{z`Dfc;E|yz|9||VU z?-6!Jr%46f$6daOKoqL%#DzvLkcOkK0|v$v3d4GnvJuMR;LnT%mw!XTUYTQ9_f` zztrHBOHIpsTF)p?J2a+Jg^jjhG5wJx2JT7S>C;<%AC$7HL>v<*81BT(C{f#e-|sA| zhppY9iVenju&9`KEn29{XWT256@E2&ufOt^{U%K;-m{DctpkC5_nKJwE-`~yde+H* z{U6Qqp2(V3KMA+?6GhSgqUT!Jd2NO<`C50jafS>nerD;~##X>Osr0$;P+;#l;bw)R z>@k(?aqwkR^;7yn`QCAdV_-&;Ns;KVc@BN-px0jc5~&=xzE zSoB4{ky`J?`rMe-+(IlDb?Q#8bWehcODtkLz3cE*g}YB&j$E0dCy-W+H;-CurTfM? zIahQMY3oW6{Zr0>Hk5UUUh=mC=rgItFG~qgm=DCCM!K$%c!^vHk}CnrjdMg<;zW)@ z+jE9dgwjOaS&Q+V08UOvn{;T5D|4sS*E9Q10Y3g0S?=$dPfgkrJWOROik4sJJMc#Y zuPz(N>GO8Kf6Zs0Z3QqwZ8{oSvMPZ@loq0&km*bU8BMty?5;CSUB#k`{_h6ye2LD`h znVjOm@Y5M-N+RJG=Fv-4)RMTUNUu zFnajc?^$kuWH>@kMwdV)%f4KsM_CP`h6XpoO*p}&r|51)RGJS(^mzhFz7o9BXcnCQz3g!lu^x06c8^-y!J{|>o9SRxc%yXk6O^m>fY1T*Z{AqTj z89r4nYb_ysjG;oS?F@TU$ZkBTdw%~Fd)$N12VkG9AW{9qHU9Q%svd*sB<_K=pS%~! zGdVN96*38-%T`^i8h;TvSHBU*+GgOCsBTjoz`Yz1$+u3)1B3pRZA6 zFZJiQl*FI>^&Wfo9aH&QjtL81pyE---M)9WmV7}jII1#&%Kzce+iPgGpp0J;`3uWr zLYM{oY5*0L3VwWbhZ^;g`iC7~4_@W_z8ue!sCAc?5tB7<*#eY|6@p&ar~Ae&2ikb> zBae1LJpa?q1Ftkwp|%OoE61Al9uhP%Y8}W?I$HjI9%&Sg3J4F`A}9Poc_>fe*o+kQ z4@ZlsX94D3+M2geEBCwPnrIBKonW}VvH;=*&i#CRh=~L2#&KdOWQkYl0I#eltVT}R zn0OSnQ27=ljaM#z=@I*Nwb`E)FUK4l{XCDGXt!J*sU~`=@dKExpMIAD zUiF5l#`nUg3SSjHDRkjx0|O#ouWX<9?lwZMeaOG4$vh8men}E5anga?DmFwV5BWDL zlzc6$)EzI5%Ey^fg!m#CDu;NZ?|$~|+n?!_y&3?>^*5ZpjJGfYp0VDmJDy_yOaeHf zr5a~{Tq^2tcE&C(p3wasW1{N^nkcH-*@^7*r#OK2jWci5e<~OjmL(l0=9SrUQ zi09FSfUnJX6+tz~WyEcn+Uf?k^bVNaIk|)M7~FqobYd)-cPL#PV{bPYwotl|D%eeJ zTNzkFQnpC29o7To!`?OFw`!YJqVKZXlgd#`CMc4Ar#8i|hr7J7BIw4q78|kSb}~E; zn8GiTs*M^uKQse1MiOAqo2oG4A*ZyKTFt#7mm4^S^4TcuM6zh+3W49@XmS+?KlXKe z!clzb8F2Z-9?qGtSR2A{HsR+|3s+iTAIw96@r z9A59VktJ4(cGi>3Lo_#o3w@%IWkibGtFCn1_&x3cDhnH&(289IF_J2z5a_IYHCGa5 zv|t)NR*>+gW8{XDcZ*Wy=n@Cx8q#{JY#DCBj*R4Q{(k zAn0gd2p*6pI%CIAaW@qx_r`tr0d)tizTExtrikRTb0xxyiY)BLirL!_b7%89e8OgR z;d()+V?1DEW8&h!S7c6;cjNzFk++0pM855s%jj?)f8Q`+vmo~Nt&}hkKU8$aUV+T{ zvLZ=SNZO?7orKJLyLPk+`s)g*3*SHJM=_tG35Ci20; z=kNUPPVUm}oSewngx3HoR}23aqDGhRa;Y$Za)_PA z2agu2bc6rpVr|cWZId9T$sKr>1W?KxEZFtv-^1cG_Fp(4lllJa_{s`kn|4X6tiTuP>bp=k3xq%*fL)qJfryGDgL>B{U=n=+v z_L;2Fy~a~?ol`)2A3hcCDbK+`>S=G!^v6l^@3z5l{Ogg2gmXBfcc@@(X;nvl7q-IhV0<( zf}2>M#KP|6t$|ygsX%^dIq@oznojo5D(7(Bs&_2QMQ$L@Llm5M!WBp+-K~Z_%IN13 zXQUMxvf%a{aoTv?RMHdUtOQj&b}VuZp)Mj)DNs?Iw%>Y`X#sana5TM%nd+#XMv3N2 zYHuh}d81x@&H!rNT$Y&8;&)SBi)3EE&&ckOXRHJ-jS!dF^%qu8c5Ol3_5^rsOrue4 z9NZnCumVDAmr>|zZknL%NcMUCiB9~g@2#03pX27Hv44^4HksN_fSV4Nm^wy<7KsAv4r}G0>5_y z1oLe#{1g4bihY5hXE_jU17d@6x&YmeS# z&?+v^!Z$PWAViol$S9?ZqV~E7u+J;ESBUKd8cy>S32>{RC}_dH#4Mly`K}J z)C94vzih_H2#c?{ONrbM#*wEL+M7f@T3V7IEmm`IZTs2aLay0p-1Ui|@X`wJ_P^qY z_N)noOeS~KGCWR%VH&Z8oHa!Mh->Kfu-a z$<`i@j2Z5x*}HXpe3xI%q~J8DD3xyhUR9X|T{@I#dEPhPlx>%7t76u9E?6CTIa%$( zM-#U2&JqwF(Wo6LPi`o^ZrH!H5crOR z0Tkd4Y%!&iZq|RUe^I7?Dvap6qJa3O)JVbL0=fg79BJTN_>%ui< zocn(Epwr0|4j}A9m<+RXk$-wwTmvYi6M~W^U7uyhCH!G24Go^s!?4FIst@`v+L`X3 zpSmqRxc~yR$X2@Xr{ZCm=9Q|2T~@oxDfLM3&uxye38<+@x*RYybbwcTcM^$2i`YYK zHjOR&GaOUa9r1#^8}vm8_*ujf9wMH-`FK!bqn=j+cI{|tk)*Z<FpNYPqW#`a@ zqiGAJo;pKK{A8$ubv7RIM3>|X!iQ@j=#Ov6_!IJ!8sK5%G8EJ@gvkZzG zS6AHjsC?R0%#Zt5Cm|bO`ATKNPf)ctf!xMMvczJ|qTr|>a>U?N}Hp-?2z=# zD^*JC_iWEZyUWu)v0+t6(?=OZ?QuF~qcYeeKD+53;B>Q*KNer)8U*Gtalh&%lMG@E z1CK{Zs-J|HrWnHQ@Z<*ArRLBRu03JbT08c5cn=;vZJoWjdr9+z48NfNKoQ&D_82m~ zg*MpbE4eu4U%q!ibC-umhotOK&uUXde(pWw3w@?Q+{1j#mfGth<}?GJ0zEnEqz<#i)wU z$i1JgLdGz=yXob)^0-O|SweD`HN#@taCLfc=FyHYcyjY{4Q2HLQ`}--rIR5ba?tMG z$r~5dx0=dKvk5X;d>+2u%6dR5X>}H_cL_U@wOK{;wL4xj?m!6JaMWbkX8CVyUN$=o z_W+f5P_CIESg!m#?}P$#9V8i5dR)WL027Rb_uitAsQqQ zf{XT^^M2$w1g93<;Ud{yXth)|wB0lgeUvv1Xko9hRhLPz_wlyNd0?%zl=RTxxH#kq zjERh*+S*D;bae^nMpVeozAC4~RwfvYrE?geo}9Ph*4j2hhaa2nU@;{r?N=!v%#|cItu-`9@eB98EghFvx0%& zoQ3pm4vh{vrY(4U*X(ZA5>~-_3tb2+T>f7086TNqT6l1#v!nMrQoRZHa6~p>m@sbB zQCs=AR4U6E@849ousQYU1>@$U-U5bZ#sKK;BHo^G@VD6bGF?H#FV;L5a5ub zU}ODwLu1-wYg_o-@JMx1LOxe$@!5Yzh@b=>bJ%*Es(TT+Dz^K{uTpfwZ+7I66Qf9; z6OCH@B70$-uN$1BtK=d*&ixOd=tBD+8AQ*fy{LOlF8GU31c zr&qDd=5Ng1Re0-Yn-x<&?ic9~MmLzb`OLH?jU%K=7sOx6a819jQ(;etWFGr6QXH(y zE+Xlbr)a#S{dn|%vYM6fF@}r+kc_OU>Ig`z1b!T^v?(PI`U17Ci!YGe;o|AQ4U_~) zo3XM|ZAt^MXmLeyj-6)9-=8XabPu$7INN7EUs2J}K6S2=&TAYqEGqIOcjBRLV5UCF z?Sh1Q1%?C#=UOc)fu3S}I z(P!z%6r+MDNK?*Q2(E$DazmI$VeTAR+A-dKm%@!Kl+TG|014k-QW;=n$VZM|`{tkX z`YUPy{q5CZgd2p#;z^-DT#RrO=Y@bZYrn9)Z7m$(80Z{F#U^dINr!UdQLsM|@<1@~mFF*NE z!THWO)I_Pu)X=7o*EyL3Q>Aq4TY}Nrt$&xG77=C>*P&I6VrA;OX=FX-dlZ?JF6qz( zF&^s<*CFk19VrOTX~65kaR1LQt=+}QjQ3lc=M@+?Br(IR7)U@Ls@uDebX<*MY{PP$ zGgTE%2km(diTeeZ%E7_=z1t@;FR}@*>?@*qk#I<6vEpAL*kqJ>2 z?qsQ7v8gkd3D(uZBWevylCMb}cVq6pCM?3vV#fQ~p^!z(C%Ohp6|UxUxI0~Qb~&nx-y6s9bT?KYWP7INR|z=Ad7#ExQO_BWXfomgc5h*Xt2e| z$)8P0BqLf*bVj2W*ljbS_K`$1mubVk3zsviy)Bz`0)-hZf5NTj(*$Kh^MGqq^q34q znrb-V2X2Srd=4{H)&%*UPsO0IKTByVxbT_L*RgGCwlQwe$wIkW4D-NIB6xyzbZ?lk z`M3rbxDbQ?4JpnL7f>ZM7|d@DkvB<;BVRIU_em9}Y`4Ll`OzB96;r=#miJmyTBmEZ zL`()P3M<12B2Q+q%k2PBXM=IeJyBm_rtGCfG|#7_{T_Cl%a zD*1sU#@p6F9I0n3s5Z8US!c6Jn)k{|0-oH}o6514LBR&4l~~mK<)1&yy|wZ_0$Y4{ z1ygU1C9aau2@VLD3#IzsCiJN3t5|KBqX(&c29geC^o1OdAykzFxsjqXmg8QwDyD@Q zc(bnAp^3;0q1?LGW5{%%ppQ4iLk1Sdgs2$z#6qHAUBF;dFL1w z;-`%qCpjeikbmjgILPMf?MQc?gCE!7&EPSgT#K4DnE5sOoi6(~ ziNh1W>JGo#Gd$m9?}Psbp^oW5Jm*gZc;8opV0rc8Ziqn|WAH%Hx9T)f4TA!C$BK2F zmQE=}9&4XO$jM8%F;XbJ*4yiv#VeB;_`?LWWu}*Ez`i&uVU2+Z`B{$zWHlGxV2It^ zVM$5_XPj9Ze1&>CHhdtK-~CCxJ18RjQM$BU(cTx$YcOU?Zb7P`IS{up>0&#YtN__V z#FKR+NK-W3hpeDrf4jAqf!# z3vdoxOUT3Jowu*lG|S_DG9h?Aoc6tXAi#9wYY#YwqM$hu8UJg`df=NYxIs$$0N=*t z-ODOjSP1u070@8mPyb@O?vrfRGKoT)0)6y>+>9n|)ESG}mB}D5JPv^a!|WwGCYT76kOe zP!eX4*I1R4kIAc+C1+RtF6n`zCC_8dlV9EXP^f}wIJaN$x|yd918WBb1m#H6Im?Ts zm9cM;aal&z%^nE|d}@+hzN$mK=eqV0EeB%qvko53sq+s1%0K^$)R2@4KvCYn4@R@c zI<_x(^Hzc|uKB4r)!yB!oYTiADyLEMH%|I_x7_@$ z0^8;21@D?id~(>Yr%_if_+4!ilh>w-SoSDp|4sy4em2C}`dgOdfMb!9`#`7?PEG8) zx!-AOf;%8~1zroYsa*IoVRl?Lq|5hEBj2wW4P?v|ZMw^61SvvZ_3tgVF;q!922o}d zQ-2f``1H+pnV{z_O4s{bC-{1|hZH;|g@HIsXx=K`(OwYQ!o7JgHS;V{K7}3W#ty0505N-_V-%P`PcPFFU!!v_|o3^Qt6Mnh6l zm1me(x;|bR&>PevJ%g+@`3}8jSP8MY++UQdNF_MuiR$y$mIo#slk(o&4iP$6rVokL zgni1#pePu-=Vk}XxMSmS->xoT9N0hO%M74aB))^Z3}^J`WiR^2n_>&C=Ni8ggnc0h z8vxP|iIk~Zo<;q_NH|yQ)?ye_Aw<}b5r|ywl2ty!vc*}xu);+!lNk9kjyhh@1 z=gG8*K>7lXTwbcge*tPziI=4yHPWaN3?#eG@B$QXs81nRKceQheeo*A z-CEr!VX^r8?+%-OP>;1W?DP}kr^g6U;!64ftNIMR@(LOgo}r&mOC0}^fb2l~>xEKU zU)1r(dqEMswC;q@{sOHYSM61K4Fq#{k{3@8H^Nr_HZ(tdh-qMReHDN8-#^cbb%@;Z z+->Lm;>{s`!9N|cuQ9hX_#c}8Ul$Jyh7mFsf%sbrLw~+swOZLw0h18dGiUZuOm^v1 ze`8EE0RQ;5yHdal9W>UbN4n*vuDwE$44i+TQYN=4EV^t|)@+rOczLS!)$&i#!!KnG zCe7-!;i!&E!U!Aiub7SKQk?r92ugJ{O9gOaNQc{+(Uj{POn91S`rUo5Lz!afeh<-k zlL)Hoa1Q-|Hi!rOfptET2qS2kv%8yWGI*N*GE zqS!Bd>V^wppMEQ_0FaDz%jO0TcRJ!d{xyX!A5|r>n?8Um45lwNPr?d?wU5Gq2^lNsB4f-g5?g1Ig3(Z|r6jYKAU(V#VkT(ZHRrilGc;sgMHCi2`bhRzE(9cftb-6rA!Jh zK|M~JxzS^rn816vH;%viB5dp~mAh>?u1?Sf>O0%hF-;`YIaV#$Y4s_jBlK**i(08| zSXuQS326y^@%lTltc=w6vUFJv>)6)(82n>hx=wOXQA2gQ8HKpT|J5k<7UT48>5Ec0 za$)NX%}n-GGu})g*}n@2U`Pik?j>Ym5b{AWZ0$qjc)0@nM1^c{xvOqZ!v)|n0AH`b zv3!%6_om<8*CYJ6xBWw5eIOe^&eeHnE20l}xS(@X6>gv|TFR-ryDKV+dHJZ%)~fe@IG-+Nferkws8wvCt?EzX?HbFr$Z4A7}(Ch9-P@iqP}FI*|V7 ze5$QLM+60~xmAw3={AJla#PCS6y;SgOYMI=XLb#D-y;iVuK9AgpGYG&gjw)@6Bzra zg4g?+JVvCSu^o_j%m-Q4C^wF8(&1W`r<(O9pVigYHl@jwc#{@3%rH16tH1VY+|q%8 zIveZIhG&dNvm%k*%p5x#F^}v){zae%U&}n^oq(xyElr+pwUS(R@GT3^3J~*CYR#=M zsJlQxV%g^DyJ=nD=OV5Zd%Z6Fq0HrwdNX5OJ+d7Mvyb+>{2i-8zvm|h1gFd${h94- z4b~o%V-i)dRdxa)%^5i)G2!O>oUcJEDC1#*H}zrI`nYx6p|w`LwB^@L9yUJlz@OFj zS>5~HbcX2(meZ$Q~jI0bwP14OX(@|D}n>L zmw%715Hsfz;j7PzNbq21q+1Jz!T((W{0qErONVEU4yI6!tjm%kt&Dov@eAnQ5}8Q4 zFuvr8vLpy~{`iT2HttNROj6m|?}7RITI7oUpEnpS(sm{xZ#yzp(7^@F*N!J+x)=CT zohXOP1u2d1m086tE9D4`LQ8!AZ2@(moAo_ee2#^JMc7EJmm|hVYH0;SxkTz!XjAOJ zrz7U_g%9evO0K~&lDWmOLEvl!jy+rDSRh>PMbRjtD!|y#8oX1k}>|D?N~$ulY(PGPUjxUEU^B zY5Vo^_}IZveJz>N|j$T|b*aOE$WD|MCo~46!-?fw|ib(X3r^qT;`p*Z@W_Q4y&07&~g12OxD zdsuZJHbp~vFK6hL(&s2lt2Q&&K&?nV4lLOqAMg;?Ai;4Z2OSDub)jFk_bW}s7<~WW zJ)($?kr4M;c`RB@V9+r(zHNS^>KU7^bn8P+`oI5UpkELL?p?8^`qp%#W;!HWj>S>Fj`&@M~^PP9YeA=IC1)X~%KY2hPo45yfFgPX3N zPJaToKNCoy1Beer-pk)ZRY%Ocqb?O*X}11S7Sd^})Kvbi)ygy#_T2?96*dIbK*bUF z0HSr$_`0MWi9HTsqr|Tuf7r&Z(1A-6zn-<^Khga3+P%s+~5qBN|`QddAN^Yix+gR5z#qI?KDcNqd_lr{k&fdhHL z52$6s=O2>h;Rv#3C%zxo_VdWG6`M@5)Xi_mK4|vNf9H zN+{;RF4D+|=eA+(E_bu!y?Z}BP6hOShA!z7Od6rSHYVJ`+6HV>Bp}Y2UwS=0&MgtU z1JB`M6bL=7;}N)f>d<{fZHTfM)&ucedtJ&dDsiPgwP|UsmFO#@51yH!;kQ<+IOC&t z99lxAo^0>@Is<7nutMAH%{3)P-olwsS_$MWG~pT$-u$VKoh}=dL}#vkgug_Lmp?~< zM_i1luEEy*4YcdrrG%|i44k{{ap1nj4kxa~z|f*I1M)qHf+5zg#yF0sxhc9(W~UAp z*6(hZKRcs3NC)bfwNM{59?CNioOtb^j9KUTjlb?qDeCe&+Q9suHYTp!tpr;9q}+Vu z6E5+KUqd-|)hE#C8&d&xLpv>9>To&4&*83?8|Ic4?~}EQJv-+=Tsy+fEr)92{yhJ2 z|8bwcb9`Z= z?VWrwgyA;b&rm>;0{mai(L8-Iipf$X>=CgfJ&OA0ft@u@a^8DF>f6tBQKxqw4Zg*> z4ex8g)hk~^Bu$jqwT~0|sNUX4rGBCf*Qi$;NVU`})B+|hQ>s}*g8@Z>GHNu>o_=r# z5|8j!fAVRf3r6OJ1MG^J;trrkk^TQrIy{bCv&?aA$~&6*$N3z@(6xU^`U#jd%Tag3 z^w{d>7V@g&p_%rX_OjdO5m%vLXUQ`~7Le);v>7JGk>GvLeC2@Na^U-*Y?S7{$5n)%V# zHhwTdoT|1Dc(`EeneZWHEx*UV;HJ#{T{pFnTyP<``~g$~p@@LL8aU$te!F6gfbxb9 zosfr>2P}N9-*{0zgwe0N;XKA*Zh<}|VE5?W2f$`IXO5!XXJhrq zTNgQBGMq^*Xn`d9sqJE+V<~h`?1R8q1i2Z$s8VDb`CIPLUb3(MA~hnA2%t_tf;OxI zHB<&c((iwH49i-`;^+Pzl7v@$1ZoCDT(3CDIdo`DGtpEkxmr&gPc{iZSc460^zqoW|3Ag*oME8YlPS+ z!n^i5(|sM)zFz(pmanFbJ2HzP?4qe73J9O^!0w)yF-&0IGQP-VSrsz_=Q>E77fcf*>! z0nX@q`c!~OFLs<0i^=pK_5FY63p&;xQhG6HI_~T9fFS+rS!c%-VvD|~N}Q+*tC$&R z0^2;n?P_SQ3^NFW>!b{yz_soO=%bY>XO2?p=OM$^>YALM+5N6`5D(gP1Du)N z*|jf+9jyz@zHO|3w|uO_gy>3;`2wPXgR-<3Hbyo4#)hNHY_UDBOVlF0MlNIgy%OjL zOzM9M`qw$W>LI-%#J7)Vqe|#XGCS(@9gi1EQ@BP7`d%_&(Pj}e1{In`@x|{Wz$pfo z=vWdwRZMPQpM_&3+!L^V?6z_UVY_k1-qDS}C0!7We>OCoZ)MeO2v28lMXd@ zAFW*`xR!{t7i;8DKK|4Q526Kz;X+*}Nc=qvn-DV@K(W`mK9~iTjoy7w87zXQL;-%y zMA35}C@j&MwKFa86ev4hHDhVQE%A+JadaJtNXv(Ns^GcAUGdoXb=Ea$WD5?e$Ck!~ z%LR9_GdK#wyRwA~p`o7Dq)b!H;n)_8^obIA#ELyr5*sK2O$EDUPG^08ZT24%`QfBe z>oyTsV>H$j!+p7q^6Ecdg7K?uoAkpQjc5N?0cyg#|GevegM^$72kZyYl7DN^dI@=W zufMlYa4`Rqxd#G=^no4(f2O#hi4A7Z(<`VoDgG|YZa=8*I`Y-+4y`p?K%Yi0T(q*a zom2U3L!U-3C20X;Nqcw=Gqjm8^wx!%S0H0X_XEeQsviqutKTi$|L%{k>8tJQu_0+p zz%`2nZ0o|xryZ7|Pf#B21luwwC;nvJcLZH`tzGeCTdfAkXrYTMyfmh?LGhUT5>8tE z0-X_4*zi5RUUM``c{e>J@H9fKhe0jJL5!laoEp=Z;dPIT{s*asuUGgpc#r*6iyKSJ z;S0LGvLoHnIM15*nIfLi7#6nyEujbZcw=q?AvH1ZYY&Sao$Kk*-1tlKvLcJSx;r;y!dqbKV4)_re7zWJ&hZYK@8l&(rbg ztdrN%7RQpK_!Ysd3iI4SmrFw+qlvTZ7VfAs6H%%F4?i>|0#PAY46dun;llV3C`x;x zY^q|pda8x=s2nA1)PX__kcGv_sV0O~z!g5xEZ`C96`=xWvv;Aj$tmTHLQSsfR|vW% zYkQOvl|=?^nkme1M@a&aWWD@U9`-M|dLyd@=BOi=xV^M&B#LW^9(^e>157?$Xp)0| z^Cwr?XY3ML_%OHS-{er=X8C+ffgOJGO{~!e?xa=A9AYFMK;hO+>dMUv;S7iBL=3wQ z9yEwn;1Bzc8x~G_B-?0H*u^P8$q=L_*~U%1^IoQ*HpJF6b@w(G8U-C3-8$S{{Naez z$f1Sg=+fOsXXhqT7K!@?RWy-%1N9evnmPFTp?4QjGkCB=M(L0bu?+IP&EL3s9H849 zR5t|g3mtB>F5*qgVC#9qwoDM)MK8nkXJ~C|M!i9IW4*oB7=}#g#Jru6ZnN8*My)aG zupOUZ+IwK+qzpygv7BItacw-aLM=hw z%H(189bI3wR_TC-8ki(dEJ2~Zo?iT&v9_#?7B*yT&=`(&P)y}7kz%2&!-wMM7Mz<7 z6R;|!gBXVLIxjV71z5n>nD)BZ(ibIy@4#acZ6Jbs(*ZBKU0t7EWkqBy%h{cawCK){m;jdY|-ZA=mu&wf4dShye_(#QbX zVK8lnnO+y*@8^T;Alp0#o5a)%T=N>3(KQ`rquGB{o=AR!#*V$Cv53yew%0+1=}pKJ zj>a?Qw6C+DNv|he8e;d7KK1nU#Ej5G7iH`7zYsnr>p+@}WI!9@ycdIy`~_Lz5uwWZfLpv-xLl9E(+39H**MQr{p&rQTi^0X2&-N#!R!qP2-M6u?i}agKu}E!0B_>PA5w~bwx3;!_@Qarknun|GiY@&=q|)H>A;D9`oP%!ZT+?D+{La9_N0X zqnC-C2@i=>oL3F}b3_K-Dx=*VIlfI9!O%ODZ`D@05njwu_!K7JLCsJpSQ1{+6-j?2 z=kr3uAXiIJf;Y;dWS2%1nVv@}3R?NHLLu@3#qfB=UI_q~_$>FVIdq=Qo!FE!?pJ-5 zpfQGIvh@35Y--A3@3;(2Ap2Ut$&2o0WtJ` zH^r0h3T2E5z{fu`*aE)P%y(qqbBsu)YJ(}1$3nVGZ6$6fH|G0l|%x|C6^X{kzA zCNk2wfT576VlYJ#+V$~-iQIm+S zmzfB30CDeyqs%%1zWtXM&;6qBxxfA5jB!D?rSnn-<7zM4_xe~W*z#$dNoW!dwPIID z8Ikl2SXA&+qYDhuSH#2~!eZ5_f=xkv$QI!cgc7~D5Qwb%WtJG6L&?$wRA5BTf(q-} z9;}F>yD}(IIpY*RQ_a_D2czf`h;}R(%dlYzHMYeTBXO#t8ywxH}3i=Ha2_Z zR0uVR+hDASK&FdQjRKGFytN~989Ba>5p1p%;6zN-<*GrRnEbjJc-^AcN6?XhehMz) z(_?&1xbFXMmdPugYn;pKxQuW>xntsi=d@7?+>AuQU4*im?J7-CO?yCDodKKjN2-=dA;R>(%kR4ls({8U{OA!=55DJRWtE~u`RPvkx!me@~p9jvWSF$TC>cj}<)`on+`==-A#``19`4CMUm)So7q<4`$Ps!ZKB}`IQ z{E>jSbrcTK;6J%=Zb)>e_xZ;(%k{2cN1HD?Ga-i~uf*FKjI17Uvg&PsOkb;yG<$oL zg!)X69oituXEd!%uO}0HnPod5uYqq*b`BE<32)`51sA1i+%XsXU)#NS-aY1z91xh4 zqdeE~F63Gvh?h$+*c5<|<@*c0gc{sMGam8bSPpq#JO7a_E(EGe_&(ZqLXStjdPyHG z;&TVX-jZ;Bz!Sy3d}6Xx7Q$pV%B%XoVWLrdhoA;H zneCIvyfbGFtA}($acdQxZ3^dIDRnhYY_LOkO%UH;gJPKi#2qvQsz#5GQq$Qmo4nV`jD{l6%2KasxMqZ-zx@wCC@uMIJ=dOS`*>lvS8`N2LIje1d{fkOO9Iz6gd zIn>|I`b*2VdaWDp(+=}(4u^+aOEr!Gi7J>++#hTHfWWS5`z`m}e)~SBzHhZFF#HI9 zWP$j1?)F=&m(8`Wi@kv_-hSYX=g9oNW5;Ktu0JB{v?osX`4r<+_X!EP7PWDUz0STV zHOJrkwx2xSSKgnxha!Bc_eCC4M7*nC1BWNE;d;;yn?{6FNHhL}ST79jA<}P=k<&~w zgafg)!_Q2jN#8JoJ{imEC-2+UT0!^lG|BgWttdo#x<6Z`HcXbiK%iiY9TJfAtz#`= zD2<_O>B76hjqAwP)&<<$ow0KAPE3thjBhBn;N4y9O=Db)z9vKQVoA+P5}D{^=f9J2 zw?u}E^9>$wPHF$O8^@w+E~S$xvG8?{NOrL$2$Up>VrVgMaf@Yrk7LTlnc9#0hLS zV-*%zpd8CE?{)G}5kI_sA_&Ky^x8p>6Jy($AUyJITehL=8F$9yALCce!om!#w+Agt z29-6~Xi)5L>ijM3_pKF~s=!zv7wgN^UBx8CDjSz-K5|9!(C{@B1?~_FbL3TG{t*2R zU_QVWT!Z!d7Vd!JEAV=M`!}H{iRju8 z)^yR-7NB#JPiD1eZ?UjJfIIK#b1{@5<55QE3{Xt?ykB>FmMqKlG*@l<xTPplRF<4wib!Gb>Q)wEA-*CfWCx^?xJvda9BD; zZjpp0sJixGS`~(?Z#hH;0}rFp2rMGQpi}LzB8Tb3)DV6!joePGSPV5@#kudmf#&8n zvAL@jST=H=f~%mFo}THcg#mFM@TrRYrbr8iXsaAOMN?iD`412^nuUJfCM7pz2cA$gjE=uBx}}PLm{K$H0$4+br=;ANMB?ZO zD6PXXzl&B6a4Ui zcruc|pNAM?#hevx;&*pfL@GxV$#VP}3Di>j<%b?UcO59{-CN;91j^{oI1jc^00=GGgj?O^6%pTF!nC*Y$xd$QDcR^DusC7+|Ic6 zA008=NhD=x@x>mygMK~n@3(e3#~e#5Wm`Rw6XZzRfSw6~*xnqtp(ERltK9H*J=^0U z#tb|Le$!jj$H|HfK2^=SwuHprXT6BZ!BFAU?#nEnKoE@&M#Qe=Ts}f2Gq&{qN^>X! zaF)jSq5!dD|oa$>ks~2u{)C4Y|VB@3kJ!L^ZuS zpVdzmgSn1jWf{UkWZ8y?nDfE*ZBKu(b!a6!+idr`p4;0zv4F<#fBoRSg;1$gJ;a&9 zyxq|TxgaK|hIxkZC>NfmfgP%NTQuhDN_5n`9Yl>UA0^L$4_|E?N5kZ|Z5bJ7PVM(c z4d$Wyd3Y_-5zbf>B*LA|CrJkRN3Zo9 zlb;#Hep$Uk^)$i)Hhq#=L7B#l+PxB>qtjdx;K;)5=3$=|r1BNs>o&6+x2V@va)sCm zUofCKCdE9Cj)@-BkOkOha*BIIVtTX*>%xX`x>|eZwm}zA!x|Yhi(%(t?1?)SCA!q3 z6!^8>$0TZZH+K$%d+gCA!5XM%*z zwRbHmnnu^Jt&GDS?9yi^3GG5kQXS0J1PBs&QRIGSl;&!w5)c?K@NtiI(n}h?T|s0y zT%m6R6lPCX+xD5kKZ(?kb5>?sg)AO+)(>7V6_F`necZv63MC9W-hHMuDF%tzUtb5n zrg8jyeqq=_Y-qCgo9dGi78W}>0Xqb9thuu_RQ^jO+EpvAb_U70{V#pR)=$6015o{A zB^G9X6qGss`82eMg9brLQv~-B*V8i>KJFV^;5u6fy&k!O@oFlqRKQ?xcmVsrZpd@~ zbVA?3#RH{H!`WL$G_TDgo~E2Eya}_A&tq~x>8Zbk$nnm=jBaZA@`%)VsE3kF;KR>% zHlN7iL!{2LMyk;jV2L$<(jS; z2k=g6^HUT=$I==t{5KKWfP@aZX`&!fo#Sdp+~6-^(;B>wGoOxmtIQ21*yHtnFtBbg zn9CcmYlpLbwBdy|v#a34mJjmzZ6~tL)62HoX~y=~vkHItua4PYi;NBr`e&h?70+6h z=CHb7RPnpV2+qX(jDBPxPXuOT{1-nqg^l(v-!8uk{-fS^Uzi^r_Ey1k!p-?ZbvxHj z;P=N@PqK$!Ua<*;OSA?ieySU54?^DW8@s@TbSwFRW|rXpP^ka&+F!eeGztZROS_av zyI)B&pqxS@k$M&rm%xujR4Dki?fDqD!$j1e`o9GQHXkZ$x*lfMD*+-(HfY(T1Dliwo#(b zTvt7=1Wg5+l;QvZ<>(%xt*mxou7OdFHV7Fh@-N%zH9)e%&Oj+Zhns71os(UR9xN4g@2b=VNqCelNlXii$UmfbCNE}#v%6i=kHG` zRPh)Ta7{)cmcs36@PH@3c$u6ztIbz9uf1V+&9x0dzp?ttr`N0BpiMMin4Nic3$@&A zy@aF&aHBp|H&Vd_HsU8}l_wqho<6Iue5DyV(t63mK4IG(;DdFF+^1>Yhz0 zKExwL&B>B>Xr~dD^5tuAwwPm20E;?t04wECwue3x3i0k1vNfNgJkr9$>!T-$iCZwv3-1GW`gw%sY_6lMw z`NnqROLai`Q(7$U)y-qJOz1Rw+G*B|R7Jllgv-SvTV)BE7cX`XdACHsa-wr^#L3Br z^n^do&%wU6+X$tHwyC#mA1VgCXll*j+E+@&h@(TZyg^l!zxRWiZ$r8PwdKp*Ok~lb zxxG_eE)NC25SE~rKg+CE@~5IU!7L=y<=?@TJ??iEUG<6qt!+IF2a8TO6_kO>q;6sF zF5@G7kn-yiA35L5pS9`HjZFfuXQ+*qPyUh9JBhNTvB{vMA>C2c^%8?an`8}Q3@%#1k)`7yzrSBWXdj7 zT?vTiEr0V2LZ)d4gjz=pr{#xV;n5o(7?+`T&XSjO)Y1}U2i{rzE~p=Lyb^2@AdWaB zF$*)^`!)Ey!}%nZYI~<4vri2E8>$)ypv=zi0$y>+u6k35@T}!&!~bDt`ZP4tmgFZ* zx0qdUVxDr7;hG~GJyZEy_*FK@>g6qe-ttlVKRuNHRQ2a&6bB~f6V?n<%ktmffU%TY|AzIXsnpV>tLjKJl+43znJu>>O^@S?lU%>xOx$ zgNLx-ACp|qKdGsDzgIXw;@hwn3ILF%iH=hey>7GPKB@#XD>2pN>gxHse~ zceK{d8py-erQ0l=$E2rS9)V7TWzges?)H@bv8{7uf)iTh=f!{ZO8blXuTM{GwcU%o zm;$sfg2L594+|c38$&~AhF#_FFVgT361z_6w2u=4Q35YQo$GQx{vUn%l6?#c^m@U( zhc|5Bza=XQbd7r@D-q-B$-cP;Z988}{;h&Mm{Ph`kurvRfFKFsB~XBPb0lyN%DdhT zU#tVn2$tRH>g|7NkI~iT=jod)VNQS|yLtVkBv05H6#zEA3$@lM0|N{S$|`7tvCBm` z0^E{FXq+a87YgMIU9>(f)HFfFi@5?kjkKs6TGmO2_4Pp`cmk6Nq)0yX&P}$T30mr1+0EreEngy) z#<4L3q!-LC_+i#ZY5g1(O^7)|kmz-IU;T+B_r z_nr;2C%_?hl7vT(8*@N|11gi2W0a(J&mz422yIv0DBv4qMXIWwLcqku9VWI)0p-9M z5K7_WBI^C`GjIh7K6!&_tN;eP2tB2s!4oX>U<5xjLOp1mPRG6-E1B(DLOK1dB9JPB z%QE-cdH$mNWkRIqsui)5D2cD9m+W;&B)aS2YQGneJ+Amen5xK5*lZTj=+)iDx}iSHNZ7w0xsOnyRgOca0YC7%G7!(Eh=>h@%+dTIBf$%KZQoD+R`g;`HzJbcZal z<1#A8gIa-I7|6HDR(a=qm=7d9EzOq*5eg9pxotn?S{J2X-TC<@5pJO_FgVOG5ISm< zd;f;zyfN=LVTJ9?SFoJn4f5lDT*_0}UV=EjXkyQCDHT0%FRqp`4 zz>`0j%1Q`QetG8{V*k*EU`35Xs=8%zeCmfECZ_H&Wm}@qjS9cDbY^D*3iU|#znh4X zl+PnfH~FQ=@~Li-qA{r+qR@Zfo7Ic1G;njwe(`Xl`n*3hy@)LKDx~3TG)W+r+xtj; z45X{wJZ$05z~2i)D2lkDUeQm#V7549anA<&tMQa*e6bhbFSs9%^vl&dPY`}$+HE$> z%U4k{W@~re(YpElqa55s=KpY6K9jp5pjxds$z@t3-K`bXUS+`i?P)UixmU~$v2VD; z=MP$$pdKk{=myNdDwqRFBa7RZ8tz#RPMkdo4&K#f^avJM&=V_1^9TC+vFw!Sjv5S( zfZuv(7zqI*n#ZZWK?s}FwirCxa52i_4kSG@biyY{3%^u;p$ah;(8w)%`q8~ctxf#vD5f^N*lgXL`D?vylgFwYcBB|Fn<7LrdzqVwc?TZ z=&LE;B}_9LO-|I~30o>xG6njC6EIT7N(?5Nj=RJ(5WC&o-ZREhRaw@*Bgkk++*FoQ zFObr`*3Nn7hz^zRSh@Og$ZNLc^P(htHXl^QNz;vyCYdYG_PIRlE)&dO$4KH`cMvQD7KG$p>NU z%2**08%JNZ%Q0lc=Oe>HoAX{ia^zqsErd}jR+dM)jIJ~EyLC3_-f(M z9~mK=I{TTn?m1zpz+lR@RG_Sv?EtQEoib^LhqjA46)72O2l6_o;y%1HzX{kTFlj#HPHZFOmaj>FHsYavA zTo`~|G1!s5d_I*@Kb4h{CkoG!_goyXPM>c7Xiv+V?2t$0*^H!K_?dBwsnB22{Fq>R zcJ)~D^hmPT7gLB_-O?fD@Kp5KDg5g7ncMpjNwU2yO= zQ#wS-V;znsu{biHg`kU2M0cRKMnEY^;vb7V9jud_eYC@{tHs%|gOw4D@YSVNTc>1c zk&2cl)Q?8#3FOz5k;D`esWl}vzZYZ2ew})sJLhotC-heQ(o+dislonZ{~MT|?m~Qv zxULk;+iFiP0ex^rLSRqV#s?BuDXcz`l&i%&+Zu+vha&1_-xyq{WRfAE9H}5YzCt+0 z_6SKxol&E8k@Pr#IJ`qfcFt&oM`~vnLSq)7)(jd4dAgL4F@7X&B^yE%Gzpu{ststw z@QQ2Z4MD++0Ky<{D7`7i$)Cz?<_uH_UGM-SRkF~NRZtf%?ea#%f>2y>SxAba`$N-j z+$AK|Pbx{>-^1)jE%$IuF)r9JCZ>9|kLcPAUG>-8!Oa805Q1x_b4&jclN!i0Qo;KL%1?lG0?3}-|E4@`ZWxrOYFs=L z?ZdC-!y5Ik0qdh^3-wAv>N!&}?4~UV%9WL3FFh#Ky#qEO^d1*Z?n)0n%N|PpuyV6< zPR$B)0g0OEdK{j_ZBjd-FzXeN++H=SN(gc<9eJWx8Pxro6*89u4nGLJN`oc%@}q{M zENGk+joDZeCG-3%0!i=Jq;K0VgaxW9q3s6A-V{cb0iLR_Q<$fpCVR?^C+{+=tuw&j z=*MU@s7aaDr!_cqdfzLs^6-{~f zkDcTAXM&b@rRAV~{|&P484&sF#_;ehmeQ)D+nluWdFZC;TkYha!y&p7_rM9A;mBFQ=j8}-bWi2DZQgRKw&-*c%kAD2 zMH*nkGkVWV>h|MxXv&I@j}%lsB@4x}=31UTf@b-if$L@42!yD~s!R32KmL&vpF>2k zRh-2wnv#g^N&KD3~BM?~t{%;>5hQO-WbK|0xXD9qeH?WJ*r-7aK=KjWrPm z_@|U5p?=+q3|HRKs4xnJP5^v33jK^Im0*&&EBJ+A-5+zXJc^C!dHHN46-3@HB&uL# z3q{It^0&iO!U_kpY$bB&5E@FaA!bFz(xg!+xR`q>pNTLZuYFh!?Z*1$JhdoR)FOg6 zDk6G$KjDJ=krVVG1^*F&DwVx^y zkMHLoLDcZ?I;V}oot40P(J~B9h2-F*od$Nu#VPUFOvHR!oz|TyrHBlDK#Ci5M&5M^ z5}@*FaweU8)LSc9YaL)!L317U@8%Mk5@Je{7K2$ta1FN&{_Kb}jsQQDI!O&##0hre zN0R6LD2)hkn(D&!Vg%a2+e2kyaOgHNxIhx0tU1voXkb%zGjL)KAJYy{RMaU(^~{y# z|FETm<^HlApjD5pBkEz8(g8CFBk&HJeEXuXjfYktjL<;k8uaYs7nUUi@T`^JY#{lg zB8Uij;rU;HI6WKTKYzpWkD!54U8Dv>|6B8&#P~vQmInh$T+7JofsX5$Lpir`e?lk% zZRZD)B9IeEUCg<^e5#ugmL|ef6e6*)DQc5njM>nD>EHVJJTvunSx#Y2gSb*455txF zZzi@HbL}n5H;B{AH%hf@j6+D*>GE06mQ@|1`H&Ub!kT~=bm)E=UFBks zRF6AsRdXyt;uq}8q28Q$I0DSSYZZR8p===+G^(c(3tsxQhIRI%3Gthbf7*aaKWTzMk}C*pPC@%0Z!O; zjbPZ$mm3T-uAw%(=YZic{D=GOSnD3UPIl1~_n0O`3bjMznoqvIAya9<4SUf8A3aXpsM;me{mWMw-yq6@$mYobm(-7(t{t7k3NRt!(_zv zeyDPh3la325aA5&-h96#==!_G=B5>w3+ybOk;LD%3$bmIp7*qYwNHvYM?H>ikcO_z z_~A3Eh288P2#&n2w!XZ%&G*McC6EjfKf?||JrBD?i*-)zls&Ob(h5ra6C_MD&2)Q= z`@THHp#gOhX#YRg`w#Y}G~KnVbT1~K09Mn31QE@vg8;{osfLw<18zvrFuleY$UEcx*71#~ur(XFvOd_&55-cJ zZo&Zxlne7;@?QykY-^UmNgnnlrs%HAkFXktL@LpVz(N;F8Psy+ev_U)79Sd7ow>;T zWkmwC6YVD0;24i$#s#4%b6QymyRsUU!z+*Dzfi!0? z)@vB-%-U0LZ$dykQirL(OdY6Y{>Y?y!y$Rvyof161tk*b%9SMnoREpg_+dm0#I3YI z_XrE}7k%1XFrlU=vg98_D)3sjqP0&e>U4JfXoEUDu(pQoJ#^v0mPlW1*-z@@jPDQQ z`W=-!6FT6%*B|9GFVt@HzWV~el%38}#8q@}84;n4X6%#Id@H&b0+ zBD3l%IwCkr5cu|6o5E4|Ge?HNQ|HF3km65|n~Q200J{fI^|$3NH4F1cNq@>vp@Vv8 zQ8TpqObVn9Wuk#Ih5jetBfs|5oE1UM#GFX#wz%2E!S`VI+57u@bZFVmUruBmo9Gzd zMR>QKA{&l22|=t+tM7^y!jc~8Oo-uWK2icx0Af|Xw&>-0anmdOjGF_vO#$`16>hh0t%C5AGIcB9e1?)V$Nw5VoqF9kL1&b=dUJd5`;AcbmC__aGju{x74kU!(~LNWxTGdSYeoiT zM$ec;ZZ4LuHyALTrU^#HHl8m(F@ak^Qk}#!HJi|Y2iE?%Cf)xK{~kNQE6N3b51EdXEpOXyr@^)=PL^GCSl3>6h6p}M*RnM ztkF0_3uo>?fGJc3OJ!3aR=Cv{zrX{8Y|LL$8Y}CoE2%P#Wm_m{gWk)1@JNCe40k%2 zWPriuAR2V@2SVopNpStuMS>AW zYin|X0eMXQK$L4l>0svwUlyN*$k3JW9j|jT3y&NlcN7U{;TurXdcO{TmHLZ+lZeaA zPxg`YpXlFhNHK}LWJv6Z(s6;dau?}SnM7#jnemsPbY-Q_h$&KAT0Ja7_=|0O`e{yP z;wkB{oKAU8=igkC#+Z6aSdsEd8jr*X{-ON5m@!-4Yp3Y#;UFaJ1w=+l9U3;kpjHy} zFH)@ookKQam+3g&_3ZIY_}V?`ptA;NkTBVQu-_K<$VuxdED}irz@6c@zSE&vHOa^vDV#BP$VXSMC9ip&ro;s zC%?ueF^ul+H!#`zljZr`aiz%f50Ph)0R5019H5f?{WH20Cl1Y}_tpQZw>FC5=Y^Br z&ab-{B(e%QFTO`#buZ`!K6t-fvAnZSyS(}*e#Ao_^yxnqsTX-c>2BZ8e>=>7JBkq5 zOwstO5MYWi#gIaV{I^?K<0*LgNNsi>PrKkUkm#sJfvT(1H3EFDtzv|U7c$87Te$ap z4hMM8i7ZVuJl79LNV?7Bu(OQ&OQb60I>4c#8Tj_tcK|zo!8~Y+n)s2pKrP56j$+9U z3Sgc6Nl;IMbLh)U^x4lMJBuLhl@vna+qA(`B(cs-u9L{CrM56l=m`lguSAu;nNMwX zzP4Z$<$@{2gO_K53k=)wz?x2ED~MY<9wz5Tl9ipy3%G$Y@;0a~PEL>jE`R*}J)si# zLO`w+@{~nQMj#7c@ey<~A_upt6*;>Ysn+z-x>&VNYwNR(3+|}6mMK`p(@Xj$>%cQc_Cg)lhEct`vu6FL z3l&&_3iGbEW~^^&LKN`zLSh*#$dN~dfMci^lJQUU^HWJiS3Wlk3vqj&8I>4eCKbNk z;iH)?#6?u65*G7N9qNJz==~RsZz1-h@M>6zFZY;eN!As;gtg{1+sa+S5UR1IWbPN2 zgqO7sGa{2K{S-;Sa5_d26AnFol)5=~gi`RZ_3=@%u##&+K?1gY`c<`$f6zf|DY6U- zn5tc_XANZ%MS%q`eHxy?NpJpmQOiP3L`<~C15{y^yeHlcy_Vb0#?i;iTx7~RCN#FG zQxpmFcLt*=JIq9B@)>oO`)yOiPm%Nr_EkbMMYd$qDO$Gp)pp&Rh~EQBCY<_dIX1U& z5!FlHwT>yIO|itA2wuHH7SQ=3AzKIavl!{QKj(@G(=y2-8oCRhz8kl?bIgu!R$Hi!QsMB?GSQgSEv{JAX7U zJd1O*e$LsC1=df-)fGHOQ363>*Q!sAGs{GaD@B22rNK$glCv?9WMgDyknwB%b#BbG|d|mqBqxQ&Nc07y7tY^jPy4@>rrwkuUQ9)`dbJ0@5;b~BAw z@r`gZ!H!+(Z>`?A!@z%GChH&dBfA8%eVW=3nd6n(%_J`BCVKz? z8;SO>vo%~kN|oWZQQjaJB|;r#o1b%?yKTmDcMs_#qyS%ZDcRq=q6W!BlQkNBM5wbd zykmiT^BXFzK|z7DOaR{3Ke(F54d6r7q)pN zn3bl^7xa}5+}Sn!yd_95q+;J0ZhDoAD^!zM?hA_4-Sti2V^@n(?^mX}2{9sCNKlKk?ARsgzSsQ3Q>lR#|0QYLMojM{evKy9hD8V-pf&X`Z` zYy&R2j|(#hhRsI>O1B+QF=2$GU}1I|kiQcB__KQsLECr zkQ(0v>{bDpS5WKMZ{Fj6Gy_H32yK@rv^0Nfgy-gL2tyRj*;keKNpjGU#XK)(moJiBobQrMYcLSny zZqDI6DR3R3Vgttqb3(<>qrX4|o5~4iq>fAzjorDqgR^Zmq#G>oJWcy&0auOS41ogA zT=dXah{*|>=nAOQ2v)NH8Z3?`(P~o%l8C@n0n~Y%88bwdGcX>knXaA!I19!EfDvcL z5{`&-v^FfoNhb#oD2Of;NDbm#=j3S50umcUr9~==-Zks!O~4d5JUGBn0Fww|ODW<5 zQxKTf>IBFlprdgLLha{1b&1v&*=`!gQWl4dbHy>_Jk`0!R11P~YoxQ7W#4DsDG)lv zeVI~6049Z^iz6IM7Fx(cBUf7>gTtyw?!S@!Ci7X5M%M`$Ck-4QOabN~v2)gu7IQ}} z5@jx=iH`xi>yEk)^d%ry;3*Jg6<|Lcm4JVxDu=9x(&cH8-h!}yV0v)x9h)jPdJQ@Z zBz3b0@Qjm#&wQ^l(r?1|B3wV`Mh@6N2vW*!;xnBw>OVMV6r~&sS`t-<@~>`%ER!PR zq{!ScRl|xdXF6NZ(Ks_jh3l4YUuHg-?vNqh-*TjvXquGxbKS8$Yg8Ioz?r80#VQP^ zg=HL49CKr1o9{M4A2|Pyt@yzFbPaQjtq{FG#kq6^>&nUi21^C$Is;c>u~g;@rVKQ_17LI z-p|kD$G6(Whu7bSWBXaW@$2V!8=u`KW=MJs{`Ot}-q+v#^DyyezIMO3ZP)h=fS=>X z+m8F_O>4roI>ug~!(+vd_t^n}KXLMy^uVMCCOt6efk_Yi`|5$S77-QzVq3sOwDw+M zHPE!rC=r%lpq?`n-x-(zD?|wE7>o)AuC6R$$mgkB zf&BV5(WMKh@zv-#f_#_-d9E1h*t`_ZOBv9fW{Qk z_|wiZ8ty}bO^SXG!&=I$QO-9a-A{5M!qdC~E?ohJfNJ4EH)fdZd~* zMkZz_`=_A8qj^C4j6^jnpahLU91|)-H$ez#SPsYJ&uhLL@ocmG;U&-?@G=50j)-V& z5+Tn5BKzkjMBJ~Uk8ghnC7*J47}*-LulCQQy*+Zx0hw1I6tn@i&z`@es}^vWTn2UeLjIDx>+R?#Kl%)jvWsX1N5}^^ zak%h04KN$vxHuy!X`!_{H#Y#nGttT3GsX&_pU4kA!qytb}AXnwy{SR=a;Cz{DM?d@7=cuR?SlBvtQvHnd4qZ_+VyH*dL*MKh#l!fL|5{M}mH8b;!wI5OBfr zzzI{jRFLp0x`%k)DjEi(!9{d?1tG%jdb9_n=`|^Yc=4`_>L)*!$7|6c2(^FALLR2y0}B7+@AaImg^QJ3a*5;$)ek zLIF-Q*9yxBc4^bm!C?TDv!oPN>ANEPv|$unk+#w%52ZLg$9lqC#bJ;HA-55~Z1zaW z$!(!|fF1`^zd?yi0sEkj11E*!03edXnbGCm3`r}{>6O3<(7~D1XWpowe{*XyIwAs{ zfI-k?t*B9wj>#3kJArcM`q)vZD!gl-&PAPd1Lho1oqTylDJ&!f2hB0p0iYu?eC`N# zZ4%YG_%H(%l{0M#2o=^a0lkg}opa{tkAd6xJ7JYTDny&j=caw%Xb13lI3msm83R+W zV+LH4$7?AXLSM}R&N&imniVaq>LGB$Nl72cA}HfjG_8W+5OhKs9BT<6ubAr;_gmpr znNy}+NYi({l)baOyov)vK}*Vr;taORLt&JQ)^;9HIe-*|{8BWiowKIAWX*y_f%755 zxG{=<3Uf>cz!XlNF3y@3Z3>khaEN+6YROm`z%sKZr)M}H&>3MZPs+%VQ9#>UthEUp zJ6s)?40FMh2-arqMTa>VQoXnr_FYib=eRyRKF~DuzuU)Y0pYuFe_Ybt%HNRjv#$fF z9e>C%yqVsaH;;JRZ?@yB_%pYPU;oPYuTSyMejiTZxyFFo?Z#;VeCELVHIM7Zbkpna z1Bk!2Z+s-#5!c%ozmA{X#n(DQe0ZGe$BNGpzI^@9^?k2@{=U7QH~`+aJ2q+Wqz5KF zFzJCw54?2`JU^%bWZFbIDep&Q@$3KV{{fWcq4>^3FApiDWZp8l>Kz2Pe)mV85^)0v zWHIstF94v!Bcf|W*njrLFNj#CqdOnmMP+`0h~ZSUF^!<#Fdseo`_H5P!{?NGRV z63uzeiEvxzUZv?ih)&~2fvgY(!x)`L$jXvaUCwVlKd}y;F_PIXlxo9RNomC!48*wA zU>qwtYhaJ*qAE>mkgB-tAMihzcx?=Swhrg=l>o?dOhH{9VI*4L-Fo!~IW^v~go2H) zsGnfp?JeguLn$%57y+?#HFV2pLzTYO239|qi?ksi1rvO4t?$ZJhQ^gExMBcL)#Z4Fz z`=382T3WSU8euo+*H$#hfEuTWa(?#UBktD)3jh1j0YIxog!H8B zc3cNJ$#c{hUng>JdAb4h!L6K7BQmQH-<`W#(ap`x=$BtUgknva$gm1fZAIHVA4OTf za~)>E$}$3nM3A$9j}d)zw)Zl+cl!>&7B>U5`VrSZA|Jj$G`m91dj;o64q#ZOiogLS z2OC5Z3y3hTtZzm=_BkpY2X+5C&W5?vEEI0^DF88<3}pp9ru1yi^K|!+-0*qwi2>U< zP=55u1I`JUqx9ax$G?nLxTYI?pB@1~Q?Ni%t!Rxr<~#S+L+QXKDK7$UNE!4iZG__O z{T6LEVSHq{k02(70s??Hwr~_cSqAhpt7q(^enU1|#D}mpn}WH4bAtU+1Dq1KsJd{Y z2#_rzmUkX~{_t^dU`-9{Tq{&^#&`-KE+yWm{*YShKl$;eIE@^`t6=~DKmbWZK~yfG zumfxnzw0*yN&sHANi#3XD%=x&y@7LJnt56)KaOtT(0O&J0z8!m5VKsvS&?F!o0}U% z)=#50f13c}^IfzOIL->X0&_SJPUj8*-Io1Q=fZTtWNX*lzu)W}mF)jEOWCG%J9mqNo?3)XpVGXi`qk@bH z&Mz~;vW>1RZsYpYgHkUOL@?*W^}&ZY)ng?7l;JGYO zXvKmN_gx32i&ozY$fiPt6Wpt8Pg(}f*#ayM&n>8SQ9LKj$CLq60Pa(bVHQWGjD|eb zE3!DI6y_ZuaCwGU-x>~_1ozjrSSY~a7ERKp8aN0PDwLI!hZ%Bod=5xI$8SX{5sprM zywJEps#6!#rNb6CEB(Xr>^jb~pwo1ra8Fs^Op&m^(l|d8T$|r3@^~GbhRzE88?PueMpw)i2k5f31JdW?b58%f8{BzIWx6e19y*cGSxBKgJdeh%*99r*fM4&PMgR2l1oL`qsK44jjcS9LsB%CQQPwcP zx<+np8pA6ArMpL-v}T~ump+Ex*f@jE&gbTd_Q@Ca5%PF3%E2FFgAsrkqC9+HNwi>0 za!eycK7xWh=MrQ{srP$xj*awbTuM{*I|a7<%V0d~IM8TL5%pJyOC|!=eV}6dx$z-v zF8+r~i*Y(d9<|iw41h{HZVPI&rSmpXzBXU~f_!?N5|(325lLU1CwfLc`x#~P(ni8C zz^mvG;QD}COcbAUw6ds==b`kIQZOL;n3VEN3c?C~|Mc05P$OIBg1NXA4D?W696&vX zp1^>}Xk!3yqB4OFfHnekAAa-!_lzj;(J|nFJZS*SM|Y{iP86?G&ajO^%5=1T<2FEt zQpcs!XdM>F(cVF{P^anvYzP6$GWqgd0B@e$@cZ}fBG&jQO08k+)Aj~Y?L-Er&dE7K zio>W()O!e!YO8t<`07;1KkrgOfa_0^yS+=T@hhB0f`x_ITr|J60K4E4@Y#tz`{eg1 z2YE`qa-Y)aFWU59hk$YnM!ya=`3sAruD22o~1fmf98yNZ7DyPp8! zk3+O}1gPzi&piaSnfB9xTCa2Hs>=MN@2q^Wy|ESa2b@=eiprBGRj%fT>7 z5_K0qs|le9o)mgZ0lMyZ3?D8(9Fg}rNd&39WzHvv+P6rdp~-xv!;Z*bmbb)wO~d4(TouL7%0{(4+n0s!8GHAVNqOo7!gt8>;D}v>`)(=x_y{b38RjSSw&US+=i^ldlU)qd@9QjkJsbDL0lW zlqq04t@dL7nucNYUq_CY8blHKOed0Skk_v!Lb#p0dEHHRQh3Bb)%Dqa`96>vf35?- z?OlVsuQDm<`LN#l-bcJ`d_UsP!k7QdKi{0w3wZsA_m}PAHGKQ=`o4bq!*AYsym1Ff+@ZTVRcWH4g zIt557%J={M^b6FzGttIs0ct2U*o%NHqLd4(8__YU_)plUM5L}TzYLHhFBEW_!`SWu zWJ4qn8nhx-MqP{&N$VsqHU^0>5T;aW2jpqo3_|Wd(Kw9P6j381VFRK;rU+>NC{U&0 ztulWw*j_si+&AQNvX4|y!M~3ThPcPlfDE)*jA#NtnnZl7F%AWvYxMl?Z-meDNiA1< zz(|>bZd&oub+dqtI!0+4z@mX(MbR94oa;;?tac7C*Qi9ykQ`%;%q)iN9-@L8EBbd6{c}C9PaN@ z-+Max$xnU)FpVhp2uopUneCwa0t&c5`Wp3ibQH>{+22I@zKlLZ1!jXz2_vd|XhujI zPC$9iL-DSV-)~NFMGXm@P3x4KD-eyW09*=0Dy{E6fTk|p_3887Xc?x-4AJNjiuDUn z=r5szADtXTA8ZoU1PGJeLjE*)_^<@#5%gO`G|@<<&Wj|&qEj#96gUY$t=q^(%ZSY> zdUi%0d7Mcb!Z2s)ODnm>hAaF_9**dToebL7XLd>AF>af|?#Yqd)R`__V3WfIoI27-kP zJ#yH~un$P5S>=7Xd=mZW{tfcer=l-@_63ZN9M=FCWBls~Q25aMPy{?zaK@;uks(UE zytW4Izm7wLsveBl65xG+xmoHPD2w6BCfpcHYV@|H@RW7{ImGwaunVE-t+Ia_4R@s|de!}bqq z^9*eqML0E}4K3jea_tx~7P<)>1ZX;t?jIuSJ%lk$3sOI%PkN5ye8^{xwJGM=EKbdS znAhaZBc?e6D<(;)y#ecy{h(9QbwNtG(P!5JSpYrSCVR(60Q3PuF?5-0Bag>_0;9kh zU@a2d>3DQql2Y$lq_a_=FKZ~ncZz!Fxz92mWG>ZMKV?Uh&Mz4IRoFyhod_KPu3!2j z>1rUYf`B+laU7WbkPxu)g~w36-_)!gjvpCRrX@AV!FN3Q(9zf?WyWeRvQ~zyndaf^ zVVGeJ(tTii)f%v-{o{uZalAq8XKs0%dHR2abO0IjM)OPO<>0`RVWSha#|<-ugJ}o* zLMN@c`?7R&Kn`^F{Q@8Z7z{$X{6?L9N=x3A-4`#OHS*~g>&>f`(N ziMNWsi{CpoXcg!3lQ-w!#9@=`Z3rKH>!0!V9`kzpeE+NGamP2u57+N?`l%=P&*Qia zufu;lJKn(}jxodB=jzL!t$tpmWin1B7(e;xhwr#}sJp6|c;|MGicU0ID5 zAHRMe{-9SQ@znckTi?YoJx1I{kN+<2wS8zC zeY}e{dXJ^$g$14Ke%r@y^FF_;YqtOVQI9EUZ`+UYebz($w#SP5|DU_hpMCaO^v8ev z$56h>FP%L8UG~7?i$_tD`+p2D`kfztg7JM7?LK=F-M)J-lmYzt=U-zKKx1!bqE`U? z3^dj|w>AMJqzgQLjxmlA%JbKcUqK}&iiAS{@qU@;IMGIg#i{@`m9eGk8)d`7#MlJ< zYB2JC!0(KPnUSNQ_>4j8`eAOWIl36QVera@je2=Muy4&^)c$o;w%v zzpuD%lU_V^1ZCpm7|Ha-O=WR!yLD&8JpPms}rq8EViQ+Cn?}cRm z2s$pdZ`}oqQ|b=32#qF( zyiNZ3r_nD+b(kaatj)ty^KmC$`Lu_RFt4C$K)T^N|!`p z=ZV0l$(ODIZX6vjmrw_! z_d2OiesYVsadV^3IdB4TuUcjF1+tXx1BeR%m!Mc5?7qawl8x@&T#nX=^nd;6B^n%D zFMX)i!Um2KH92&G+`PF>Sv=~Trv>w9H;^`SgEWj~>bQUP@ayQba}jOd-2pu18GtxO zNX5{pm0(_VnL{f5S4(H4155$#Yoy^E2Pa2jHVLbM6a)Hv%DDwtYXRiWP=x>FlRMn^ zr2rgPq2F(9-k=)8OBg`Q(az3I7y(bCc-h%_1vgwvyyt>xfU%Mr2fz$Cf4Vs5eS;HHBa zFvFN2*B!7Z>>j~5NYj@I(kyy78Ms=;u2Fr3N3%EuXTo_+73k8)rhuMtGmWDnO$6Jy z$rKMY&(l=p2nzcgLkC=+l8$NSz<_b+x+MMF=b$gbAPVaNE%uz_?p6LAJi<8&DUr0dK%%P{J&R3F8@kPT%u z5_A7AV8SRyn8iNSfji`QO`JqaluvBKaymIW04Q@sG7MNRGh9!&kF-ygRRZ>wPEn>& z=r8qAbYKq9HDO8OLzqt3+omjdjYj-+@`h``%c=%}pW)>Q+baBMWfSj3V0dX$^B)oQJ*MOFUEF8Kp?_Hn50CveZM4sPct7H?=x1+pOph1$VeIVjGmjZNynH`-{QK;I zKm7gASeK0gC&=Gkg#Len2y7RX`WHlSm&xk}h+;th=nw8k#{jBDsKzbIw!Jv-Mn_eQ zE=0?+T_R3HN}@qU2WA7dhzb$LHG18}_`_PnvKU9oGJ-#WumE2RL&KH-jJzA|GV<>< zFe*O6;CK5Fb;JlYvSt3Q#tEtO!zHiJFU=Um_r!UoInFUQ2n(| zwSGK1lz*wbATHk19>E1|3kEmy#JS?8zBdX*;BaiLLUkqNtko2*Z|E^NuE0nGeTp!0 zFjO&MHFS;ECpb_@UEoS|HW)3n4T4RTv0G4XhepME&FJP0BK0b|6ZsD6=(J-hbHPQE z1S~5-KuSIBJ9lnCCs%=;vWB$rmtJ`>8Qnq7pJFyg4v*%VCl#TX%Rg@ zY5_s9;yf%0&ZXkNEP-jF|MVsi`%A`YhA8t5?pK2Hh(|=8p&3)hyvsF&`^LDq(l&r% z+~)oyrGex0P}8B?Cz3cqM2;#KQ&WKb+9(L~T_JpzwLBf;Kx%fMu_tJoW*y$79AA^@ zeF|NHGS|`{WC8665`ttdpl_FP0v(awqT|N0kZt;R8Rr3m7Mw=X?R{__>kJNo zI?kr9z>z6*Ma7Mpx$4eK!u&b`dLz~h=8-@$q0@-*Zy8XXZYi9JIW#4**fJTS`=+`~ zg*n0)XFW;kbY#q>0Do?)Q_3~NIcfEeuwF1ajmou!GSlj+N=?Z1w^NKodd7#Q@j`{4R8P z-)9ccl_6EC)zVStiau_ur2&Urqe88AoLU7^{;gIJ*3+;h^O8kVkRO~^;l6O+yka_8 zXRK?m>wfsXppX4c@U!um*v!|j|LijzyV^Up%ZKZ*js@?vPGEl@!spx{Kl{E%{JF;+ zZ#%YcC`+Ru3>(R}(J#LX7rYnq|`1o&oJliKQ^e>)BZ*xp1Ufjla zai49A`B~p}0=!Kdy;j>P=zQCLbbpT(kHzZ%_HEke^?KcJ+dkXiF?4KsKVpZ^+q5m- zH&80c3w&4i`Ca#6+|J4K``rU;o2wyrd1G@8@v_V40ui-acOFDf_N6&@$NUSPrm`m<50u!i{F<6}S$3DtWXw^kI7Z!k02gZ%^*f`ZuaGTLk#+*n^l&=H_5 zea>auhX7XW><}q+o)RnK{Nr=56-F()vVD@i2&o4eoq+J*xp;kUQxt5642B$l&FEti zW%E2r?L{d5DHOn8zB~=rVfsJ^X%^}zZ7%u<}<^UIEqTmI+>Wb2=hR}AQ< z@3T4YA!!q)Bp_Ut0!RunN)_%2ebuJnHA)O-D4%DFL?3{W0>m_MCZzx*$oYr7Zk57w z)G!~CW}19dQhWvCiThrP5|EIw>6Nske4FKT?b#zMJy*N9^0dNHn>X9Q2 zs{w(-wGBWo)NDync@5(YEX`` zR=bGKNGq9xVbd!iG>E1^k+v^0PcJSgmqrRk1*Xkeu0{0&suIkTz5&=DU~4R5za;4| zffS((Qg{URbU+!QK0uu{;2VtFOUE2edWHthqLVO}($joS#fm$N%d|CzbGXYroFSb9 zhg~5VZILSE?_7fF9WA2wOUty6F|Uey?cyM4GF0p5Fc7$3T>mN>0D|lSY>f=jd2`%_ zcQ?0gqXj_j1rh4itwmaC4GLy`0cCiY4s|L_^bs3u0r*oeIm4qHqIq3zIdSwJr$j~%{FwUZWWh598|W%`@_JLcW+kTsIRp`)OuW5+&M+)oE& zhkHFuT20ii($9=DuQRIhjKHIwPhK1C=p>3X5XN&#o zdYa;T?OWH{a6jzK@EXw0KK>TyP_PeusEgpe;>hgJbqCOF#D45JF$KYg{pr1tamH6+ zyoWFN$9v^peBZ+fzw>##Z8(<)|DH#Dobb%|j`h%x?`-S$*B>4;e)!t)CHo;T)n2#F z?*o4Dz1uKwOi{aj&iFWP7o1x--f?+^{=R-rxAV`>;@2Mk`ZnM9I{xgt`&wDS|K8`v zd+h*-Z;UrS1~#z==xuI_#}&Zp1kl0owhxadE#8MeByqcc=yBuy1)5&_yK3Y0K8(-t zL)++nvBN`}xRd8yJYpxnySUG`M{wwMzpFkRdtNa<`4M^BK6HQk&9V3{+j!k!_Ac7! zz3_S+Z_P~Gr`IiV@bwiZ&(c{OA-(sj6zIS#B zZ5%+se^o@zf>;)jMN2=G$Rm}cS|E~NBHG(W0Lth}9V60Gc8=Fx6M%=I;{Hj1ScsAV z&NNVs3U*bPVmUP8Dg!|S)%^sHX&440fWCRX;y$CXM*HeSn}z^Lqge?+nMS#FvNg7N z6^tk6a!3!rCJB^Lej8%@#P7y)9V19X3Bz0CGt{7VJEMxU0qhwJMpFzlENxeyq;i{s z0p>Y4_lRpSO+mvpP=JkAh0}2WUvOd#TN)eIunb1N(JUkXTDh988fyb`js2`npOK); zxryijzV`MHLY}!1Y}-i!H2uag0XPZ=mdKaSOTk{ItQy_9|7;(lI15PT8ic-F)59mP zFq#n@w691Ru*SUCl%kJQ0DvxkJpkb*(d2p31SD)olAR-powX_gdGRGc;_rR-V`_`< z6S<=v{33uA2gkw7L)t=go;J-F=A(mB3FDM3bjCxte1P4R!ead1U&%5+pfHzPLc9=T zo%5Sok>*}jC@)w>xG)PyPN(Th!0Aw`E_O$gK1q|jp5l6BENO}yBh05$DXV~)p~r$A&p~glTv?Bn=^UJ#Bt6h`!6p8 zoB+!i0B{!}#)D%b)AUbamhz5_)h4g2)L54~UBj8sMS!qaY(>+}BusH#BJ z{^r&OOq@QBs6BG^sTE&sMkk~T6o@F-NIg+^A`__m)BIjZ?Izg6HRS=EO`_F<0qg>t ze=lAh!MH$61Mr_+Sq~00#q?S@Xv(Z3jS-Q3SOa~_@FAi&MKnJnvjUb$it>Uw>$pU~ zvgtM4dBA=UH4`wgMp#ZR$@nyveVofpw=v6{XVS@?`@RlSiC4}~9|Bpo8+lCTFk8|# z<`82?@Tj9v$C4%XoX^tmO)K(v!3OiVujhC;KJNp#XN+p{3BYyo1?ML7Q0G7h>3deT zwJCz%5&7;xTLEXF>w;f-{1K@zj`uP6Vt2mC;7HBW|6ST=d*U`JMi`iVv^Pzk=u-|5gcTX%{vNq!e6M&DzIU78 zpb7WTPk;5{KH*;2pzl1~|N37zKHJ3SiNE{KZr^-={d4yb{A;86yW?Mc9Jh0PIgWH> z`MHlV=zsIxz7Jc{Z+29?o!iE*eRe~#DbdmSl>4Ye$(;eePbtpi&Q+gf78C-_r1rn9kwx! zZra8l(zf{caT~Aqp~sIukGK1mK3{hNIN{z!8?QS7-sX7mwRoRn#z%a;KjgUazA^!P zm=0hc{*Yt2zsGZ5AJ@mC@89N_?tk40@HY23Zlhybhg9qY_@V8yZE-)wW6`FHsJ^ltgJ+_W_`+2q6-~TOJw} zI+-~tt2`?h1w8bWBoQ4PMQZP_O%;DUEZa*`k z#cw68n&OyVkK%YbI20l@$FmE?-{&3??mpKhsPJ4;as`hx0}utcg92X$%r)uP9C`|E zuC>CwnSmXUgraIKwW zpS2_*S3DSC^aCj7QG{PYC{L}35XAzv*AW}@vneiWL~VH)4Kf|fyI%(M&J<(;j3|Xz z=6vWlK%2MpV}{azEyoT<`@s7^KPhU6I|b@Ebbq=!1JI~chtVvNzFGRDj%Z)X@xgx~ zcbk12yE#(`ILCmx_0q~qL_P1_TnbA2tq!FH0oGSn^b>USQ)vD@sv%Ti7yQvr{xIs$ z-VU_pemxN#kV9W*eP7!qx=kd0=gw9TG;6l1XcC+C z>KGRlmT}lTKfItcA7XyweKSF#JSb|3w1gTZ4o@!2_<2&%SFiSnb_3o(NVZu)$fjds zdY%-A0iv6vv2olv!uTq-LkEd&-n$ij{*Ql)d_;wFt`Jd1EKi3BeWGYyG9yccY812S zC^zDKl}n}sqn3GOnoo}ModXUiqfJfqV_|a z0NoU{a!M$gt1r-;NdivI2iH-=SQqT41o)iGc^qIo4oIeHa1^O|VAMYe_!orYDhTu3 z85x6T*Ajtnfcr9rn3qFAkL_AE zwhPAVmP?V2NY_FqhU=db!_tykOxl{N?7Mh*j3g(Q9WsrOq^DweVLP-DV0;W=y9{v@ zSe*u5fk*=K>Bq+t>!YbVRN^AlNIW4p@h z;^O&}xs}49r&GY@`sZtp8+1{^HH-nZed^p{$-?o&evFfGj=aAg?7=np;OO*a3`~9Y z1CD_c#QWpngJZ}$^15I7X#Ab$<1y}E?g?+N=fsCEzw?jB^x;17{g2aDlp_vVVCe9(8~{>yp2F87x(!S>bXMVD0mhjz*XDX%n6JC7*f838gF&4WIbRdj7G|X*nCU_WL##?bK+wfkH*2npEFI>WjCUi> zpTpEZ8;6j}9x)z(#9tlFA#@e*F<<5T!PH>VLcp82ca%9)=1#;904}-?l0poUwD|op z;i&^ek@F0aQq8zK1jsywKPnZ(MgXQr#zDaZ=^(f@*S!FTa1Z90M5?CflKdhCxcJF1 zfm~QHm{&^l0%{hX5=}8t=rMga;8&Os^HL($y2&8Rz=xJwpJu+7_wL+J|M)MzjxE$0 zFiz+A+_$LD4%*n~FVJwGVS*0Rws-U}oq^9B5!S2vsS_-3j{tttQwaUoVom|&GqlRf z_>kYdvxq7BB31@>(-)t83G-dY{C^$4a<&)@6=nmU^eF@a2pF1&FsANEu#oo9TDP%O zsLd>=PrrDQ4(OkI5ALTiw%r>e2wa^C{^-HIh(7G`vD+D>5z4hskcCNcef{PYRTC4tQxOYB`9#H<`2?N^s+!J^?9 zANK>ykmoVW*Ue&>ai;KToUzzGBPbr@wgSU>g3CdZ@#wAqW5lND5M=QP?e*l$5*7e# zpV-`_hcWfXm0@h8#TJCqxX+{QJS7Ih;W?H7Pw;uCZn$M^>}}Jh)4_c09c3L? z;lSn|mTtrtI6Y#{Fn6k0hm21mY{U9R?WN=`5rU&C)*wc~zjbF7Q}2CkLehtKZ^jmW_ix-m=rECf{~6ow(N-agZKyUj$Jm!a zW`SXy=%UHKKuAGmz~(t7BUzE7c22_7R(UUTSi!1dn8k%R%uARb%E{6@7YOF90sz*4 zAzY9yaM5tfI=}l0;gH$zJ}YS2jDKB~+(DrN9*({8%hQ~B??h+TyZY$*<1%EL;mh9; za{;#nnOx-!x1 z(QdBMw!Feg1*Op*KCvxG>`6hG+q0^v=Qach(T3j9?>vs4h`!`Kw~^nx3Sw$Lpx`b>Q`l%^JN-ob5Dkr65b@;D-`{|J7oYtBg8wW{J-AK(q3vgz#9#jMZ_`(w{a*f#pmXCyyPr=_A8&@= zzHSwb;|^{GlW4_p0nlPeW)S9Z1c6AKOl?fi$EZu{vP~Qc@a8!!3KM%m41w`FT5sYA zv~edGL34~b3vmYUL5K05f>|HKie+II%{&aAn)S(<6-?m?T8L%AS@!@Y_ay!N#~-Bj z2@ENMmbG=Z55(vH7w`Xb9X!hKkgfEKd6D$)cp*f={a^zs39EN z-C&Ei^&?ycDrpbFz#hVpgN6dK)3ixM^;OzQA;l?WpA*Btcn!_=L~wrs86tqMSCQj?c*B3_|)aGfmwf-x>eEgk4&%{ z&>kZQzCas>G`nwHfM4r^*bZkziN}g%7-0;9nfM__f@kj1eN~xC=*6lUe=JShWkVO1 zip(@iNeTGooDWlRwd<@G3ed<+o5JuwD|NLbkz1jB*A7@7-!KyNuuxB!%IXNUk`>_{36YRz?kpW6N!dHrePFQdj~UaPnkCo{QDxgxl3 zgyj=!k?Wc8rST%5U?c?~_wMN)uwZOscY=UP-AErAVGuW;;!8viv>Qwx?G``Q*b(4c z|2l1-cW6PNV4F~9vZedCZn5*j&2;~st~tzW+&T;}dPpEhx8XcO(|@9663Uo5E(UGp z`wI>y^O^{WkZmll~vPvV&xG*I~6=ow(GKeP{W$X0IzMvd9;fS z!4Z84ZkqFJ2NbRVtlh%5-Lwv~4dt(c;pa~J#&-%1tQX0dqm)H~rSF98k(vK|UEbM- z<@mN|<(+5KI{t)R?md@$9UV}>Jq@ep1= zE>T7w0Po9T-3vcr?2D4m_r*{CWTxU!G+q=wXVPD5_9d*49Jl?|i zpVtCa_IiG{wSzzTE~dc*g@f_k-6rUqA9n5@6A8Qx#eU#^-)LR&R>#_y?VyYUfZu2k zZb1-BRLdqn7{FK$!8FSlNK`_PK;&e?NYX*#Si(&6(kj|?v*;S2)=C22pjVo%YaU-= zn=Xkx06_3S@L3kub$y$GX;f*CvM%J}NgMwxjei*du1v@?QIsGIq7xwiM33(veWYh3 zBf&*8U`$_u?^~@0Bx0?jnno2>M)9toc{d+b1b3{SAYc_N2xS;NjedOr^M8TX%;1Rb zWYD4>X9mc_q}VM8wThs{_|6~$)6X8~gmwDI=^TNr19d{I{_I>lCgM>_<=TmK5C89dHr ziPFzneRB~jk12K}I7m;QZlzhQ2kNzh^pl@{ls^8=e`0pe4mW6}Tcr6Kzwl!M5OlV- zqTLj@*yoynpW!9|r^h!r@4B-7>;+Z;x6(XY!tG&VZ`AWAkG>>HJKbJcfLY$6u53$& z8^8oYlRAv!IU4gW@dN4zUY6P7(AGXgOJ2b|T%iix1ha_M2K5<3kh2Z*-NKZ=ItjCa z@WSAIx(YOC+hLee1JKpbV&A{HK)YAc*N>k7fIxr0)1KRC$=UXjF=fEByJ);+#*f*u zZgaC4jI5R^Ei4E|XeUj;k6`*6^xr(D_ooPK_6U}!Fi0Qw<)xblIo65H-c29Ae?J1R z{lEY8Db@wYsf#cpw9g30h7_F9zcQZZ^ve+fhYOw^5`1%u9XBSKXE$aSu@2ZvAANX- z;D2=l6{G2|e)>V$c#cqw9)0)0Ef{(j@q_o%_Oq{I>quQGW)K3c!Ms-x=Cz2?5cCFa z4#o-C#?ohaXf$@}s3H(~kD#C1hs>=m(mdL?4Rhws6IJG4jW`V#O)NVIOn9`9iv?p) z;od%iiTboA;|OEG0|N~NObBk!5?2WkwZc~Sl zOvV(!K^KdXAsAA^(K*eqR>3L&X3^LJ3ZF)>B&cDLV03@i5BHRJ3_Ir(vZ+~*gSn?L zP9{)IyYq+7Y*`2g2Y_tSzh+n#sHH@R)Ss&bnaPtPwm3c%mVOu^RE1+jtiO0G~406>xS~ zk4@*e(X2k)7)%Y!qG5L(H5P(fkq$*LJdj|0RUt8~5QV(D2Pi<%eMjL44MraR$YcX< znHUr|iTJNTP9c{8vga}XH)hPEufI-Teg0Wk0=Viw{>u0ON372XgBTwQY!!^Uu4nfy z`jj@b4nr)yT9Y~7EKkcTkHCqu>#5cZ!CzW0k>Myp0vev$=e1gafZv=Uz6(@2j;s;4 zU0?p<^V9nVMccDxI)40>!_+~azI;?(+1YXZYMzpyz_~p0BIht`zVe)VHy7Z2KfHXM z)5o|VnPV>>YX0dgzj;*DZ zDh{Dv;p42&zW&s0f}1sA+-gTMJ+(9m6pKnIZzNr_3T znj;AhNEPz>(s7*E6hKHgf=>t%ATnjvh23#)ZHOtzP3hcV>?LTr5IzdRjLzp+^qE16_AHa~sHECc)*kc_A6}S?;qiEaC;DW>FR6GzORAKgM zoFKHrr&|FBntIKoWi0CW#6ElW9D$0$>xuNihaaX#kG{sQd<#U;cd=#N2HWIm0Z?NL zxe8IZb%B_w)7JP$FR#qO6u$u96Bxp~>Eg>LFxW83oklv`JqD*ym}pF{VW7s)(AC<9 zX_+YcW5dVk-u)ROx-X>-Ox4{6?x**bQFWr>CHUH}K0Z$S$1sxk>pyUZ0GRfPF(cwP z(mVHHND(qTQ&T%S&DMT(nBPPCk~YEI`;+IyiGXp~8=6Ve2#)HQTc5MF;nwC_`rw0m z2${Aq>pn;0%dQfb+Sl;YABACU6CiSqV3YUm-wfeHi!oC}Yi=BX_wOyF2IH-Uuxb`J zfoIRz1z?16!}U=2I1R(3%%OH|ps{Qb^zNNi+G@PP7IVZ(IDSFkzn|j!e-qRCEdtr$ zMnYfKD~sVPZ!kZc9qGHF^vP#u>6l3S^YrEB6ShEO>%Vsv7t<8hF>@0uX?1obeYw7o zb`VzR0%K%;HUmhVgOgOna$#|WXVoLNw`1&$?WOaP-E`*z1QlrgvE)xLkH>on4biAO0*2-6t3)!i;Wn z9pPL%EiEuVPsdUNVbS8sa;kUtpb1)O>gH^ENZns-??Av0!+6tfCq&_AcY)wLqb?Jgb>CE@`SJpK^PM;U4&mhYYNQ2Yk+fS z*ttmikCT3!>l%VBcjYkthy0+L?sDX9HCcgNhoI(VvSeh+A@3c&{nEg^^DnF^XXY%| z-e*Ao>k#wJoh(9NspXIK9*n%E>{wh$Bg&w=E+K&M zJgz$?K)(<`_?Gi(U3~thj)Ge`|E2qiD+F+nyiQ+ng#gyOXm($>4NLo$Hk83ubAJ_g zfLF^F=5+`G3U1=+N1@;-?5iC8czSJrcnl&0C^&kykHt~AuZv?pZvA!ZpU<|zA4}Jt z=k4{|7WlRnkg=U$`=(KdfJ3x5V+bWBBi$cbqEd}gFuz>8-}eR7iRPfJ(D?9TLJ9+| z_P|4}PBxFt#6g(Y2Xz4P2czTocP(+uy3Lrxi*v+#PC;yEAe4iV&0h60fAW-zfs7w4gQK8GoSWFpQDj4#?IcQTM!(z4+k-0NY+>{f>7 zX?|{jHZ?+jGu^zoN?Ubc-e%CW8(RV57Dl?w&H!yqS|R#!fIZm<1tc)IhY)q3aLV>< z#s^qjx{V({gf;oxW4r_7oy}m;uhQSppac^LhLnR8sGouy>#)(Q#97?v_K^HRCyfuwqPPgVE7Wk5VoC9 z=lI5-p(&iC{3YTIG||8xU^d)6VefI;Qf>JNK?G+gYYRqpetaR!``>xz0g>|2B%^hn zf{8RbxzY4n>>w~PIu9c}mUhSR)5mS45?fJr(*t4*RCEu3S@_vI_tU?8{QI=A^*nuW z@2_#Cm}2(=b|8S+I6K>;zHD!Z1%m$R?xVg;e1kgU`o-3>h_bKhc7)&;3ar*PpTk(Q z&plfNx?lb0DbkPt06+jqL_t(3>h4jPo7;EpriTb0wurrO8x84sV;`Z#D5lekSawi9 znC3Ym;Ge+2SGzF0@H|xnOm}YGAZ7y|?+rBIJDcpGj_*A4X=(z-95ee>TriLTr9Z5_ zz=VD^`uSMP3Vi3EKYfAA!79V-AU%4xmL}%M7+nZw)}DhOt}_HGG#IDj*lqk$6?Xv` zC3N8g`#Xxd8EfMZ0m0NbZO8aC9>pPJ>d7 zIWe{*Y{T3b)qe;s-uM8<4Kbjcf&h002?mdK%K6Jg;E(Hp%v5G@nEl+kmT*r$!s&4> z!SepVA5PPr%9R-&%bH2#SA3y|bfyp0*&>&FoU4AcK z!S<8DD)b)#+Nb>2cA*^hXa3o~nHjY1VToY5`~qJAL|XE)uI4nWa5#Ymbt*ywCYdu6*Zr*28a# zgD3J>Kc0sW!1we?NCvz%c@I(H_8<0jX8v>iY@>ox#-WUfJjQ5#4h3O|!Ys2lC;DOf z4OP@#>f$?LS;su4UXIuPd~eG2)i{SYrFP)yASxQ-OehV8yaS;yURPlbUoG9iq=}kG zu>^QE&FkEkfm(dUuM5Xw2~gm_4o7cADix#*$>1Rg)fbRS%y@C>!-!Vlxs1!Gl)BwEm=kxCm`mBryT+A)gEL zFVP#YC2D{vVePljBj_d>0)zm@2FO~zjJpI`{Dj!ctL1!zv-t>pJED* zCYkoOHrB6#2HbiWqd`{$H9)!w3}Ld}LTkH2P`+uj<}H}ar_Xli!ztQs66W$O-NHIR zpL~Nr)rcFQDX#*YZOqY^$8KN_-bw%Y`F~44XPdtU4E_$L=NDKctl&dGyHrcJ@1iAU z3${AJ=I-1dNAu3!@GyyP?>0G)wEz|fZu8cmZ2!$+!Ek3DKYJL#HMHb=)a7u03o8&z zx*_UEMiqdd^+uDs$Nuya%WUt)?f~nLpJSzfK$qZ>NBG9?9bj&}a+mG>Fw1AWOv6xq z{@D}O(q;q|G!WxLn<)ASPVSfUe@64+fjTWAm z>-0r8y?cvT24{zZM9?xzyoMe8vA4DmE?^<@?Ab=Tb?Z(#TR=FZ`2oyz zjka&FWo-)!p9b^Xc{ECSnrrK~9$R0s6`vL{YRDDj_ziPD8xWHTfZsl3Gh;Fs2*!Zp zv4Y@X3~P`v`f3bc|0;g|n)18tA3ht*IZeQ|dO^dFA4-?;Ut_M-a1+p7rsW`4rAylz zyFpX(QB42UPRdU?bF)7@noH`-^o{46Y+(gV#1Us356E_Z-elDdiJY0vo zF8A@U_s4hv9{w$9VvSY!;aa8eGS;QcETYfNaC-2JXW~)HaLF@Y2rWrd7*5j!zLpnw z=lkG8<7N3H?$k@Lq%#1ifkmG`XXguc12|y!i&5Qmm@meUkj5cLz|Qbrhyw%U4sE5_XrUVTC0MJYqa)5n$aZLzF<@`U$(Vm*-Od z@{P#}T~(jjeDQ<9X|6%$?>$5Rm$<9bu7=L?mY9p95%E0T`L1# z@6~0VfRS-BkKa4%?N|@kJTs?tj$hoH@|%Zgty`%dQ!L~M5ktW-)WazPN79yVahkhV zOA5Y|ym!oNX;bPatQvE&z;sL&INvP&&AR*E3jj)Y6d^$A!1DYmX9w7I`(YPLfa{70 zV7xR=`MEVqc91MJ%2L&Wj=fFwPU@wJURA#?pY#H zVnjmDBg0Tzfyp}zBDqNiVHnrGmuPv}A92}xAU@`oG%BXPSzsxz-dm@6UvLtNxcL)~ z#Fa#+QIdm*^qKRNp8^sikE_`_hiQ^>G@n7jnzYm05@xWsm(vuQ(x1L}kMx+2H#RV} zR$~sq1mOy|69EC6a1b(I5}M*EVXFVWZKUsXOLJSQu@2*GG;Ga9ZKrw=yqLhEId?B| zeXtEQR)?u{n>V*j>kv3jcZBWjW0()zHV{-?q@ZCKt@Z&X z>%%n!1(;*6t?i^1J3MrV*nUJnx<&St-;-g*RQCvG+#MkrC$;qA7`Ftjr@~!Is|Eb< zVX!A)^cshIFr#emHd{%5^U+7?=E{8fzyIN%G1Umn{D-Qk$}$t z55_6&e0GQc0+=^vg?Sj;@~uCAoNl>Y9}Mh1b$hmVoZgwgoo?K`4U>umh`ZHQ&(c1^ z23XoOd1pC&@ZJ(zViJqtkN|}zFiQk-Tw+%NP2V4_pAc(fg00jLU=Y#2gE_vt6?BYq zz<95)RpA{hD>jI8pi70(?G09VLf^POVwVVr^K&aO+EbYR!{jrT49qrRa5d)S_U=jQ z%3zPqU`sM`7kkN61>tTV?z)xRgi@0QW8JTf|)gf>)ALCo%-?7ORGXaYq;K~3R z|AHYM^Sl)%

    -&h02pGiDUbm@>Ts;qsyte25KA@*9%{3Xldw>NgCQ z$JJMmUuYrA#g9}l;Mmm78j_h00Nb93N<0)`@!HvC7JzApmvi3XS7v31pSZ19@<<-X zFtDbr=!uiZ)-lV@UF1_P$Xf1;koE~5Q|{0+Mle$1nTF5&B*>p?57aL6XBhmr03#3Z z6E}fe-uZ=Q`4qz(-cXYEExst-)Q8&quh6Be!6E&Qlq<)%tV9m}bUyf0tZDZ;Z4<0aE?a{+1;ufY$ zSZqofsKfUt&wQV_%O7V9s0cgdzK+kc*PRWAOv$&N%OkU6gK-+Z^4BI)2~^Neooyl? zxh*V9!only(qAWDo$Wc`>JgTT!(Ao_hgW~N{&Y9L?DpYzgq zHR-<*s;&4c4L7A6+E7#ubvEYe)UHmd@x^0fl1A}g*NLNN0*LpzG>T)o9N@b28Q;b_ zrSZBrrBNe*YsGJhhi&k%gBJgFoMm8LwA1-jEoW(LBfw4V31C^Y5#YK!l>g$m$@YAm zGJPHQSC<29z>NaWZp1WOTdoRB1VRNtJltzqfqYZJM5zZs=?n#BiST~LF6Ae)I|z*m zLChfI{NqiO|7~{vpD_c#se%dz86j1mMmX`WrmljEunT?e*XO>b z(HdrY@8>Dp^m!UCz3ndeo8A~u{=O+mN|-l(SF8sk47EuU^ zOcYC_N+kI4M|=xjAd?ar7s-rDhUtw?L3*{Ozdel;^1K6!PzZtCy-+4bTEvHTm{;n=3aycDW>M!iT~Q zwCM{Q5AWkc-y7kGn_^2j$nmKQ{UAv>$#>%0&t?{j3Wo{=0(4EKHdzpfYrMrL$|-(~ zqRIC*PDo1162V{L-;qHTn@k5sz#mv$pOJk=6VGT@XHic0Rx(|8iNYey?%A=yo&uJv zNB7OGcNC@ZDojNN^9Hz&G+2P&+L-n}(pfA)^(ZFfj_QF@#HgrM1-wf};{(T<>rFa| zU6khyW(OQII%%EUMj7AQamEnXcTg%=Mlft?1bCZj_a^-XupIk0$A}QxDV%M1;d$s$ zG^l?nW+_*dcIt@=y9#do)yTeW#hThn8|0@svP^`pozSa}W%qVMby4cmmUwmv0E*y= zeUoKsS%D{X$RFR0L&_>-39|y|nL;x}8Z=f)r%EAH)={)#0D#xlBAd^uolS0Ze2`6HZKjD?JU6I!Yz?`jJu`1W8jbwJ8YT zp(FbOfLle>QFo2Sj&wWHE`QS<8J`Dd2{=dCWh(M0v`9C8OX9?MH^QDV{oUj8baM<^ znfy*Vx*mLqf{d4I=-qsg57(;f%r6ZcXv)pT6~$=MO>G1|@?@`pL522SZOUE*)SsTzt+s*79>rC1TCb6*|Rhd}-NSD0p zQokx|l`c4s!I8Z#=pTVxR9Hl$cK;=XP< zi??UDv=QJYXq*}Wu7gkdj6ZG9*C}W5y>?$c4xBQQ;Evf&2`zz;_KdKlu;O}1*Td4w zt}=e+lzun)+q%tlYgq0e)MrG35zAZmhHZ8X-eN5xLpKp%991g=0D_cgkS)%TLP-vh zP+@f{7*?H4Vv+Dx$>t%VJUFb^eXVxq#xG(^hjmom$H?Qo;EZ4Xmb}S#opA0d zH43~=12z2_ilY9_i^4?|QS*{Ka<|<(j+>FeO#L=5jEYf4j^rrFW<#+krx0XZ6Nqv! z=6lRbiM->>m|#E!$4&XP%Kr$Cp7ljH;`m~~xlflze3UrbS&1f2MPdbeF(`SOfbv-U z5uJGr+VF{XVBzr}Bgz<-k$CH*?-sYSDl8A_9~FNM0JRohf6Lhv1-8D+IXFrh#9%)@ z0;6P`ekp(|7AK6Z=eVvI6jUCW22D9_XpJ*%m1{=)V*pTTU2HMB&#VAP6-j@FG0rLa zXcSpj@2s6oJa#B!wI-(*dokyiSL%+2grp)-T>gYW`Qy7}`rxJFMIKRZoyxrH=>_23 zGC}H5^g$!=x@3Cv>Y}({oNM=4 z_0NU!Mb?k`IffvOl?j9Y;U({BTVb<3m9m4Qp(u)>Sbn<>8h^6@|FKI{7&x_c*&liO zfTQXrpY`WFTfJ;MxrmxJ&E5DGht)ynZ3$sihoo_g(s%-Y9C0>XNegUfBrlI~UQVkVM3PoX;d?-D_{@kMY1dh`%^2Tf@^w;5nKg zLaVb=iY~%|G0Z=RPQ8{s-hx9U34@r%nQ|e#V9dk#Qcw76Xn;&Aj4%aB{5+5F)C)GgHIX^b3X}Z544V;LCX<(X9Q?e&`6aHCzA%mgUEi{ zy#tgL(?;}`N#mtKKp0CQG*zb&er_^5XMg_|`VOP=l+S|t5JjFmnRW~z(CsV~6?y3} zgKofg>}&+`DW5g$Xrz;eZq(>R9P58(Pvx1q1sxkFR$PrtDB-qkoV02n(4b=(oA=t- zvg*6vk2$mnE}XL*q|qaP-9P5&37dVg98i4CJJ1^{`klBojX$a58x9mdNSNOc6&;8Yr}vm9WW{&Wg*kKj+kU$ovdecszpaZ_u> zTRC*ZRCgWaQ2M-7G`&xa056)?b^eG)K28l4`mMvgD1PI5_4)DU|0-^pzBt+l(4*s5 zq0u-x@0LTaXTJ#=<)L+^4Kz1V&TRy+oL`p4DgQdp;J@~<%OHNW-NFjshCG;j0P9Rx3?4I)Jc zp7z^q%#m*@WAU4G6#W#9h0}GrFMxQg9)0NWuG1^Ov5v3aC$K@?X$pXw;_2}AD~J-L zd{%&JH$~HV3greQ5Z);*gEUHEyyd4}@Aca6qh z2~b0d>1Gqfk(f<{Kdb@~O2?FvTtAzh%7gh(#GhF%%;k=<&-)oO^v+mo>M?3A?ND%a zEwCk%f1bk|5#i)UJyr_qd|Q7{q%ZlIuHj#gJMA0g*Xn(wMYOT0Oz|6bndk$*R`DnB zrD#<-qzr*GXVnZUjxe&j_)zuL_ZYPREdR00N!w|+GD^WZ5kq?+wJgLSP8C}>rZFxl#6R+_!m(BE5%T&*&e+i=@k)I+UX~ z9T8OdQ3;{`I3jHMZZQgPT51@kt5T-x5!(fMQ=yj`(wz7Z?&!ISmPSLHv>O<1p_tCj z5Tn6&!p`fu0~Lc){Mp(3WP?6~BLh!ZE&wrOKjN$fE(+1vF)DXfsdpMFq~0(~QcC(|F|4dXTP2<&$SeY0qdEGZ+JlfB`q@ zZ{P>@nfYK^UiO9F9gX%`zNG!iQObKY13*I#G`JJHdC*y&XeB|eeOhv|h}o;8AnMx%4- zV3j!yZIzIHg#hq8L`rMX8+haRpc6?dl+V^FXd~3{5&bzVA<|;mWUz*~>JG{=+40`G zoOG=V;7a|4e!f8#;(}@ED%8?a)BjoHpZ<;Zhq2o7Q_eEoT8d+tQs%zXAWc)=IQ8CU zY<63Cw{Z;XIcmMPZ=`Y-{Z4W8bQ#7^_;HJv?CV6>aP<$u_@Gc0yFu83>6^VYCUUwn!ZFlV>&n!>1n=RO&Tcys}_vj|t*S8Z-w5367i zH|Z*XBGTwBf{82TdK7L9sssS9IDPLZtMv2$WIAIYUQ?RJNFAr|C8C;x%FDUGX|^yc zdh)`%%0LO!MW-}IC@47Kcxr?_)QJ@9kd z6RJPB9i?LlfTMoYoy;(>Zg?7iqkkUdhH|i#G8T;QE@7vfMSe#3nInaaB%XlNQAC&T zIAXpDlg!fwJHl%Ka4oe?V_@iDJ^v~Ff$u89>XGgX;wEQ~o@zMU9?t{cLNSqAjS^^T zaDybRJDa!2I=hIY{BLocVQg4Hi|YK`smJ_@+bZeQb6KZ>BGdKBugj7$)g4?h0>Gad z{in7vX0b&*HQyfL=Mn`+crAO|isffp^OORO6$|mp1O5UdmA-SS{AYOulv&?FVZo=3 zC@(}w7mhT9*Z89Wfd9J2`r&>hHf7tMJIT{*^DG>RL6^U=kH*I~Cw$G2A{^Y|y=ia} z1b?J>q>IQ_t*(QGw|+&K@`NYlj6LEPUvL!dB1swrm;oyO91u0#mExdG% zeU8wDLHrdez#dGde}>f=Lat^i4y zySb$b{NjlA08QKbyVOsXl@QY@>e&R5I$-~*a=g#XG?xH8L8(ppz__HqXJIVg6YA%j zb`iy#G~5L9kQoKSqU$f*Sf90%y^ z9{1zO@;Ks|Z`bp?_eAm4?=Go9kL_C{lC2VT!uN>iF~E>S_$-_!6*z<7n3+b6YfSi+ zyS>r|fG$8sAgz=N`VlCuSqv7cxKu>MdtE1vHUenPYr3zB*Z9(?5#T0iTpwk>Dt*SY z98`qUVCV$AU)T9TYUS`I%2^y50eU&Wb?NK8isz<{05?UWb+L^A)}iaxMR{nQ)`|P3 z+Kc6E8@!1QRvNoKTZdk|*Bp=or~?Qdj*T%@m}iw4rwuApD=9|+WTfuY5fpYGKSk(Y zvccbC_ug>In*Sv`cq<_&04kJ3LRIo5zSs!DRlnzN1Qdi4zbLjl9xrWw>us`Ov&oeL zpz%~d`&nG$a{|Yo3x0+tO2rS3N&MiN^wBFpG=7x_h0o+Q8ADhzJ_4H~jK;5#VQ7K2 zUY8l#>1R~l6~-Ke2?YpvY6*_oII^U`cgng-kBh3Qq8L%YqrfI36>?Q7WvL2C(j+t^ z`U=<3nKin(OO7L-PFZCnizYuqc%-L7>2vf~1db-6Sc-!sZ~zBkHr>FCJ!Mx zuk~ZzM|XkG_^rR6!=*yxHB#X4olW>0k4G!Z>p2gs73)mhfZw=Rfb*Y4n{3{&Ni%|xvj>@!Um1)1` zW;6g;C(!Isv{7uqe|F?(`A8RKYCWvo;Hd}JDcYdZtgR>V#dhrxo*Icft}h$30Yhsi zEvXO}zZQ`*R@7+mlY9+@?$p1#<2mbF8SUKLyFKh}qvX>s00Dloyv6Jl`jhQVlrEMD z%`gJY+3A17eGH@-W!^mm9Ids?RN8BA0SxIVN$N9l06ndg9~EhNk20bH61^QRx*?!S zUF}W4vIrC~jV3y0N{~HxfI`GyMsV?Ws=sx^k!M`Qe13hAFu@uln>19oPE@acQNn^`7C z!X@c?Ow3jQP3!y;hk3Bf3%Jq~rs*G%a9jC}z!&PhG>G6db9k*^lm&XO#-ZEXEHekFkiRT!a zP}&zL(uSK)tCSH_LjI?ZzGuvrkM7Rs7xGL*t&xdknw^gNWiG9=NzA@8qQn87kwX zOPeyyBfb&dPpRiy7;x>g>bOe~blHegJmewY99{r3v-+moB=bn)24#8zzR*HC@=ODt z5z-eB!(2uVwUOgAMrZ&qPw|iMtNHUv8vv}tI`57?s$@IzY@v4Jyh^c%&w^FKRw?c@ zyk7;c_*6VJRHRaZ+k4ZW1YY9Dc+w$_=2wNT{jP&k8k>iba~&ExJB|=bla|1nqS0j^ zmd$m`SsKOBvnl+@HUF+!&c^R@Ze!0?a7kP9%W~+tcpds0r{!#UXrvJLb;`MEwBr=t zP3{TMby51R%0u(4Grny_oc0yIzjnXg9N4lSMiSU&s<0cFDUu=oAfE7DVQ21BrtqG6 z41i~m=LoOc!x4i2ag_ht?Ci}b$E<{D6`EW~GAf^nw^lKyRr-*%x+4r8`B&y?H?5D; zXTzf`5m)#QTQ>k)h9`asKb@Wg;Tnf@(aG4+N5HPofXIQkjLP;K@WOZ%&T5z9iK3Xk z1b%1$fS+!(RMYmskAknF-vX06y5o_)M+N7M(G;gBrr%q!+^{?iqt^^n+uO_aP zjpkB?or7G2T}5kfJtp|OPhY_$_=`BAOizKv=Z>HJ%P09jT4Hd-_Y01+o#NbXrTELt zm9wmQ7goRX%tc@~0soSa-%UV;GhNtNj(bi0UcH7W!v&G2Ns=E$^V!UG^SUujAIG{h zqwXw@g<`EgO0?_#qa5R3=4bPaV$24e%Ps4R?G8nSa=L&<0}TN9W2HFe+j*h|fd2(FxC|jiIPUpA+s$CKvTs^C zbAh;L*6oppIXVtMdE)myN4Y`OLSskzqp$-V%J;!$is)Wt2X^44#JjcMrv7b^gS z7L{>z!e|6ox$$|`r&lKj9q@aMCC!$3W_65FcaYcQdp=P3QdI=pY=ZM;W+jpL;Rzlgsu0_Rle}7@s~^C4HZLZB*J1J_9%X^?r88 zCq3${n*^rkG>_6w97p4qEY~pK&S)V?>cC>SjUnL}yiZ(eOr3WL%n39}qxrSYrrwa2 zyi`U@*&3hrGI&1w2QMO?gIS5>^4KJUG(z`S3D#wmT~dCEiaU6n?0 zNuL6rilI)$cs;!Ye96x`yf~YWD#bee*5SSc<%J;QS{6DRwH?t_+%$c0ba`~%uR^17 zbWNjmQ5vsO&f=NU*yY^xUA3H>M&ox~w0vHc#wl%`=Pqa4v-q#VLviVvhvKn4zjm)V zFn0q#>I0HHBWCmg_9KXIuH97;aCojZAfive;=j~@OWk%9<&@CmCEx7%wdqf+;N{sC`B(4k3!JudPN2K#P9sxGW#W-W1k$?mSAg{rlE+q&f zL=`sZl;D5{0Gx$)Y5=H^is2@Sj`%Bx#V5)GweTHxRTE z<`AuZjQC{a76C4!NTULzXxpPC z7=NbtMhw&7)$;|o3;B}^yqvYb9(Ou!-Z)9F9wBl z^X^*|6<|xrF|vW+))>ST4%;O<0}3o@aaOr)Q;#Ln{G$+r3`Z|femR0OYO z)X`D#fz**n6DO`kx#2F{!7Kk( zt~#xJ2lVUotuw`a(?f1%8b~(K8~Kr0&V(F9A*JqNc-llUKH=NrHwIHQeW3Y;b&=bv z-&N^Xxo<;&l_2Zqsl(}?!P)i2P4ABAr+3|GlR9-mJ=?@6D_xG>3m=2Ix&{U~`)uJ> zbVf-pC40vm{-ufj{Dj#9^F0h<&b|`YC}STW*KIS}UIQ}JW74v`<=C8k1yoKo*!pcc z!e9)lDCKguzA-nN;+v^!;cfE_3Ac*x!D(iZ<9t}^KJRM{{JrD_1(Q) zj#_+>jTBSGfRVOad$(d(a3;{>r%!^@x|^9jHi}o+z0wAN%lO`kjY>l|uFK$F)UTDp z>lgv1X{8~L9a1Yy)9{ylHjjvF!15n!60<irkRAUIc7Ag> z+xv}S!PI}J7|)eR5LcAEY@eqm?4XQ~B0)`C)ga)ArQtp!%m^0<6@}6cka4PiFrrer zcW<<(dhs_vyyL*(YiVDEi9a6t2{3WOM%YJ40qtrW|DqT3? z0xL~KHXktvm>xT>N3?}T+kMt&BMdH`rtLe%mE1K9;O{7q`Pm$`5CucyMexOMrlElJ z6xB1WUlJ7Z)Y8KSnG!PKh5iVahVw0*QD#vpQT%4EN6lu9j#ToDBIMogn3p5cLCx%q z6|2TDd8mS;K;7RxX-ct#han+9GYuCb23cIL9(+fYEH7|_umM(&dXq?HXcan%0&jHI znog%_^4;chRtne z%3Qm#C^0+1%LpTMdh{P> zghIy=Ra*tvfd}YJ=~<(&}ub4LKpa|ObJi_0u1F@w3%1ne97G$;ec!9(ma{Acml=`JqbV+ zH{iCmAOZL2y3fd~4aE3CARYB?!_iN}k?wSC6KK>`Ht@zano(|-k!-P_1T)XJFg`mC zUcSmdFl2Vs0qfO6C-qVKEeGq7W#&}+ZH}arZ27T^BCfLSJ`x(CRA!ZnRF047w~uHi zr_BD)2(iUC%}x2{F3kex9oES^`^M#3GUwQl^aUk~vDFcDYG?9<`knUdtN}_HL!IOh zUjw=WZp7Vnb{#|svnze@Qp2$u{%!5;=XlJg2Tz7W{A`D|@iH_*cWP1b-0uKc$V`Ro zxd5zn({BR|hu$q_@9YfsNLyo}#yE@7nGH`5o`QE{`0VpX!vhD{7#x~&Jz;S1kZ|kf z0^`~?ej2ge+%vqf&w(%Qlkh6LubctE!f3_jri}nD2dKt=y&_k6YeR*KNPldviq-fk zUfyqtMhz7@mBR>l;J%J)BY^z7%1nUE(ry}W+6Zt{#vb$9b@3*YY|FP5S82S7y4XCt zsdBciv=KmK%1zSPGXXBE3oqkmUA&2Q_cCd|hW*v!z)_~0D;PUfmt&F`Ra-bJhYB!9 ziQGoOXLlubjK4jcZF4c|zeIp{1E!KNN_w+h<{E`Lg-@M+3OJcfuzEM7onhzwYCreg zsk$}Qyx}GaZC1r*EElA?Ri5K5e=3 zC5}o@QMk^*R#C2SM^_cJN_aYT{^EuP*!%<^j9$zEJMd$lP_?~Uie6#HR zcWQFyJG2@VWujf;>8I;_O!BHisOvIO^->8@`HumBd+Gs3mY^By;f(tnLx8h!Bt(8j zZDn+P10_PN#@nDS%$PN>bjrMnI!G)|l`UI>Mj=n;h;d2fhWfIpq7Dr@HxHDKC4SpX zul9^`6@&d<#?we+V3a3QRvB~25E@oCowP2JPt_mWpGK2be3?Fwu+(4t zqr93fu(TZhoJ!3vVScMrkirkjEPVr+Ifd2*ijJe5hcp&iLX=Y#!)$Ag24s06kVH0k;< zai*(tCX@AXllwNy(PnH0D2L>U%Dw$&mMVZ(ebf!bw_cjBEZZQG`PA@}jW2Dd(CjxMry!W0 z&<;m@w%(Dhajkcz6F$H@@9vwiNP5Vrw4EGzh~eUt&f%2f3sc5VG3aH`j{e43KH&7| z!VL@~WHxwZnsmw6SJ~MXzY;Euo}AcdEa+CSZ_)_xtmOcm_KPr5*uGSdbT^@lm~Zi{ zPZNI`+M52R&qnQYD_-3pHQdYI{g`!mIJL%d(!C6g4cq113ieGK0WO;f&}ly}-wh{? zcHCVTZ^{TTRj`|fFU!Y9dTkTh3D>fVi8+=F9W=*R)OHnulE%r(rMqZ2tOs z*|@Lazd9T^VYCCiSNVw@kP%?`*dMyy59M*o4gcKa3&sBw1Hf{Jv%DFZP|SAPY=kK5 zQA;ejD|(y@f2($c)atXLD?i{P)Fwv#bXecZ0H7FkF}&XuR)RMI`#J88KgJ5JE9GB` zm9xln31_r-N8>g0GA)0}H>5}LZO0{CNrR$uDHY<))J*f7wuB%DtfQ(u6F@;Jy}S7y zg|encT%kuo#F2OX`n^T_is5hf9Z@c{4xoV9w>t8qfUMGol*%jL72n72i_>0b(hT&I!yEHdH8;3Rgu8d|sdVV-BXSzI3CHkx46V4Uy?8QeK!gKSt|Y)7tOT zd(j8}&{qQOG`ycHS%IX*-=?QXlf2NNcb@exn2fICDer_4i-v%J`mO?4py8|ZW^+ZD z6536YZ@>7w`uuSPb`=d13?E3qa21N+piFr{&!&8ZA|0o`yY5$}QO$7HMY!#(gvb}- zDCJ%p*5NbaTVEX|CopU2qhN`bck55qGA}U#VgT6NL-9g!(O9klKqKHO^^ZyhIrInO zAdMJ4RFJ3b#JrDJsx9H0**gTfM)}8``gPu%g_HIF@TiP%womhPjwkuD&5~bic*g9^ zrySBQ!0iTcGw27a1(bYgk_e-qxl-j7`cjDUW~8;SHiXf~XXtR24B5?Svc>}IP82yK z31&v*hiT@H!sf_3G-(JS72fsZDN35#sJWqx3Jr-D-F}IhIyI0m0Z^UBc;xyh=ITW{z z=BoIlOM03{6<90qb!k+A6GtnDrgI&qf+;TZ+REWoXq@s%JUW#_@lV69LhF==meEz{ zGu@`cd)LLzdxu?xKI5z#0j^4;xTK|dD1CN**L9X}&q^`x*QtxmtETZLi~!fo-|P6V zJ_nWv8VUs`Oq*OV#qx-Cm4{9zXQtQjXaJaD1X!~1-;y1@J1P?wnwmY5m zy+>8sPyajvlJ=>`%1s1%{5nqG1*_?+qf|4dvx=TL3Lhmrcf7uz!zoBsTBK5fnYg%A z*fjzy5$aBkI6=q$laY=x0H|P)Cxkt5)~Ibnr4oJVGZcm+z!9z>?iE2&{DyN!2Uzuk z`n9u7H?7HM2XIe%+|%wSJnnbVsAH%UxW+unr-GgWGFJpe?_78UPjRvNFiC9k*!0B9 zJY3?=Vb1f?VADLcU*F}$r7oE{4@({aJomXY){1uxFO;+y&r(XkjDCh)bZfK|$(U1I zc@_-%BvF*D1fItp`3XRkb%g{xk&IsDOx56pAJdY^ksp2+NT~P+^Sg4sIz{t!ei?sHFU{xfKo)IjWm)0GzD;-Ccbh4^n(vg2VGue00RK; z>LX_?kC8+b{wLF%gDt!ZlRH znGJXoW!f@=&(dm1p1UfuewU8quRXZyH+9qZ4zb?22S&FK;jOpQ3^yvXl##C*z}$6y zi#m8<{e>v9PJJQ=+^ZakjqF=#5l`AdmXUvQv4!H>`H|r8;eW!c zzr#_+-FAr%bhw9x?bFi$bS?+-JCgnZ{NWLI)3p7#0pfxg7AF`r>bqDeyo$eHIRn6Y zAy~jx8b^q`LaxKS%=@}>DDLaHzeyuN8!E0tpK)99x=ABIcRZ~e-V}|0Q$~R6mb3BA ztL|^Y2w*+BuIuFh;<-s9fcV-V<@0r1*TvUHfa`GabzC{%)O@G>FWAj{!ASoRM|T~t zi})!9fGu`EK12DRvHo(ve~E$M%=5ev`ZEO)K_fz|cv?t6h~P2Tl*3M`$2S7mxxa#i z;$^w+5512vlyce%S%kb1Hn&bQFA6;-eA%}sq8`GPFo;LwSRHE+0s?(am$>c2yrjAWpH>4T0;J~OFkf|}qJfBvP`UEOTV4o>P{}P%qu?#I zm5#mz<2y09#8h~Uo{{}vk)HB5Jn<2LFFM}~r+E@O_e$a-sA1>iUI+NQ&STsaV0fz*-2bA6IWd2#2L?I5~u7bm#bVenzEg- zJTqFX#gZ-27A2FSBx>Qlf%^i2Bmk};2oS*AU;e-Ux#xTLJuCw7AlXm4{oeO=-|o|A z>+buV)7`hP>NO0SKgpkyRde|X*9a|IHnz!B7LK9YPqFz^eQc>L6b>3gWrWnN(s;_y z%xp*0NWD>qDoq{0m678i+YS6U!2WogBu(&R=wqDs$$_LEhCP5&dS#$|jHXlJ5Xgza zNrDglag3GL+Ni)~)$*J)(zkF!Lvo9jHzf#;Rc39Xm!p8=Pg*;NBpJ_X zbK*D-P|7QQ$YaciHx6p!FtyOz3Gm+7WivD@(_7@B;Z;giwMvmsc$wUyuaOprS3Xf5 z;>i!OdK+TOW0kf2Cjh*E=>)boRMT|KlWO5XLQFLD?>2*1PvA)g#&-7Krtw4*TF_?9 z@!CZCgID)qt`$IyKTSK^ITHaKRh>C!oCa4JwV=UDwNhNDeTca4z&br}E&wIW`Ut2A zIf|7dr1RKl@B@}|Kmm$OI*^h+xK<_Ke?*FYfv(_z=kbkCIx43*Ytvl-;vX1tj~*DI zgo35N`YaXIZBGIKV_uCC8X`i!RiHgsf$!(=S?OSk9ca>rI%!Ddmme?28VM zUE#FaK}M+(mS*R7%a3gd-V_vjd@FxaZxZO2Q_q2w^_oe}*kBSuU@@fefDVUkZ>Ie0 zLZGkmNC%5PKDR@Y71o__A{URGVgKUza|kEmxxEok7dYnR^$X4uQ820uPsn*}iC5+E zYEM6cqVYJO@z2zjUz@12wNu^hx8VPpFQ52MP4q zS&dC50||`4DSi)?@7E2AVl$5=8reS#xJ18x=qCVZmvS1|9)B_dlK>28I&{ty5OTve|oDo*w!0FGAc0;5 zni^RhlbQ&a(geViCIEs*0JJ+G2ITx}+it%M1Kv@N#f1ThgG`|Rxev;y$i66;Cchoq zDt1YJ3EGM3zZJ7m(hlTTSvy~ud1*d$Z>q~CKaEZ@_0fNgXN(+HBiYK!YX7uOX`a&d zOdbKi`IprwV6Bh}FE%I`z{Q`PL0zW?L{s@li(#7~rJ|neaLb%yt$`t;pz7$#M95EU zmJJZX99UlKJ8>sK%9%w__n+iTi#{tmucgP*XT^oMjjQsGCoX&yA5zzCBW~c2aG2i| zIELRWZj?YhU|qiyV~|6>+O!WVkE=KI52<}93BXI=g%5|p{YbItiLb(#y&uGl?p0Pi zRsD*|KU^8*Ug4E<;Xn09Pe?H~)GzIb(IYj4SxNWfEGonCv87KQ_CFpe;{)qo4iHHU zejFN28R&5U@h``vpGQSx^y9=Zao`Cq@xZ}mIHeQnpk8ekdaZ|wCpiZ41g2EZ+d$-w zNJ*01d~5trSARIaRt#f`optOW5^eN{+|Z#KPOJ~Igl}QPsiNF)unrt5)faCr!9VtR zR+jbduLc0`8(^Gz;o$(l4D>1-PZdF1a*1e@2Erp;Jc(!VlObc;!)>OrY`ZE?D4`Q> zmBCw6*Kl%FbrgdROigD=8n;aFS0v1f^i&g~T+_FFzl0utbSfrg#B+~6lMzNTpBFf) z`6pp<|3GHC1NT((WYqH=J*7FWefEkZHDVCULx zBlN~CaOrbclM@3v`JbH$WBSeUE-lex!iN!4fp(y+B&q|GN?fzcL4@-07R9s~EBI47 z9Mh_!&nrP%;G)Tg)BHsf`PB<}T*q<=*R;+%$VU%EOZe*S8`_+Efp=0EM*7s_0!%LO zYE1$>4i6pDf-YMsUq7@H05l+h&Oo{*0Zx{4h*JaZ!#Q3>`&c>wu;8f~Ck6{E#N?f5 zsJd?wL} z9*&kScyLx<>?Q$@rm?Q)y>(cTOc^;F zdFU601Ge;ljLZ+5! zdEj(#J!7+>$yRC$;JPxH?ELE#XKnGE$R1Vmqawm+PELThZ=64zC$$0t74^GNF9-0#JuqeC>MnWK8 zf{I6~ib11NX34Hx^GUl^XqQ#_Tv^ujM1cCstokRx-BWE`T6eCTo&mjc4`&Gmm=wrY zd8%dX3CQ^8^`7**W*mE)y2iI9QAhIg)pBkIwbF_+&S9UqkS<3-jt^l#^>O-*gGYz- zdp<2Vul7qP=$vPZ!OFyd+=}duayEE#!Hf>#>w`(5%bg5@$2n8I-ULADj6O^UQ6sPo z+OM`0?;Hv^tyNi{Q=noyOX3YsLhnAH49XDMUyKX!BVuYhTH?+XXL{F8ODP6&fCrQi)dMKSJ zLlXiB?QyI64nk@k6*ulIw}O;IRp89KN6d@TLV;G`lYR+L^lAEr8ryO(`9dG`q)@Bx zmJWyo-H@+Tld&M8J&+N7rF5C@fvLJDeU!mu3G%UPi`^>p&tW~9)~B;-CY3jXBdWmw zMeYpv!>X;5`Q;?5t%p@7ZEAMM2$x{l5id#H_9}Etee)wZ%08RX!~(iOHXgHL46*Hf zP-iC$=nzZrbI>1l-NYD=2x$D_K#N~E@|hUQvu?<1KB|I(J;CKkE;z=~77ah@124#p zmJpu``j;erMd7UI`!&5Pqdl-sX*b4)$BOb9d;BR&L3ou147ZPbWvDVFyLSR`7J%@~ za=@S3oC$zg?IdChx&Np#XlN5AR%Un;hw8X5E3Y0KfYMS7KeQ77)fjZF3OEgPm~y<@ zWd(CQF%C8z0msW7n9kCocdWRo4g-iZot1&bpsBKB#npzRK0JcA9HzzKgqOAs+q6zJ zjjW}|ay(Cj$F`n|$8z4=WhcTXv!&pot@)e?f6y&HN{`?Nme|qp&r~dQE4z4Y$ zg8Wos5@5mPc%V1~2HK(7LqI(r}3h zgb#rgr2ni3Zk%SE2;KmYhNQ|cl2m46N>x(c2EXM8TVl2$ZAz|Gsd;>0>{f=icD9&Y zC@-KDpfLB#UAYyfQO8d$zaJ99_tri+X*hj$Y_v_AXR~?Ndma#mOh}WuAWjOjCtON5 ztT0MZn0~SpozIq2wxxROsbU{yN9-q;sh4nbaRbi^oZ;s1r(=e$kSyt=&D65Yatu(M zG|FkP1+llKyMZJ}GqYe*_Xsveum7kVkeY7YI*ijmY((&F5Wf(4BALUiZui~)~;a=2}%*9*X{ zXVKE>-c}|2X9pLoFsQGjGpK%|mC#`h|75jOzbmtHvfOVNGa4gPld4Hy6Ai5=rZXTu zITIw;U=a$QWg}?^0h1IsLA7#EzSXX;ezrT~$VmUz5qY*Nk_L_y`2_1pUYld#6qvR; zs|>*fLr+vneB{c$D^ct=5x;QS6R6xSQqG6fXD`3blGt4_CZGK5yNwZYP-57 z2Bu=;)`hyCLroHL;rlbRz^y87#{?4(^6=HSW|>%`-*K&NE*u;Q9G?l-OIvW(M`MYa z@`ttRj(s@I4ljk|C+n3QoQRJzZknoNm`1)F>zer13O;rh_U6F@2L+@4t^+a$#n+Vj zbv`%fY5;!c-=e1~6o?hp33YxxPUT8i2!-pGy{;NQH@`wX==^&FF z3ibHG0D5sd2uj-qm|Wvf(R@rycWeE|4dB3QY*C-~M8Da7(i@X=s?Sb@d{9>tFiL}y zNkeqEe{8?x*3JoyKkgIcBlA)YKlBp-3mb51W~S~V%dbvcJscA{~$GdhIF#kLE02*~c6 z$0FJUJneQqS$(l~w=j!~yo;5&y;I?2v@xu8hIaQ}nFm^5&p0ULhs}RQF^X2kO5V+-xb71!lv_rVjnihJp+T#~9t% zFfursK3RRU#v}%#S5I5ag3E9XuBtBC{1SiyK2D;p@~R(B)|i>oWVEsFzjS3 z%HUx|XGVuIna8?cC`M+GnZAro2WKT!WB`X;YZGd~4QA(CDGYxIr|Fg`8cvMYtFoDG zdL;r*X`WY*2B^Ma#liQq6ed}0>RU4I@fhsZogz7H5J$%tn|2$JMT$h1Z0pX~8PZnb zOl@j1@(8SNw=w1?OazmckpYv~5Z(&g~44|xbuvE39LaMAHfHS~4u z2>`qf;m#GuCiXRSp~*M-a7-SUGq}x~wCOsXa7jP;q8~uRf5ro}AZ&;WUU|kZzS9+h zR~%N_M>LU9y7kTrbllLiQv+%~4GwexU*IR0<6fEQH26FrMLsKp!pVu?tjOs?m9jQ! z_3817fyu4^@Buv*P*{-{Ew#DKf74^jKl3@sqois0lc>@{%E#7$8BOx>hJaa31k4DR z+##=~PN;KEiZ3RCvTraZWIF2^V5I`yj9lnKIRv@|`HKOf`@ zJ{2j-dk3}EE_pa#>NO{6s4jd8J~UD>uQRM*zIwC(nm-``oW~Lg>Ct_-^29b{rZ)*7 zy!2)6pLrjVLoR$1Jl9T{9z`1%(YxwL56bx**RE78YO)i6-zZNUamSLJy1%26LCG^H zN7(){g!PZp3O|$D-ZG?^e#&8gOr-F5iSK9P4`<$e37t!4!x|gt3MU!y*%1qUXQEZr zXKcbp)%B!9L(k(7zEoFiaXV2ht;Fj$$dgeLoPJNpwiZ6o@NNubLm=c7KTKS+72jtQ zD39&>UcDE{hz|F&?%-R*dnFqq^$6f#*8<~|ZT)>3gS0jBdZCK@fOv!-zmia6 ze`+QV{WIUv<$xX^vi!!lG{1i2CIDzAoCa<>2PZ3u;noI2KxyjrW4|5!XusW zWQ6a>Bmi*8K z>ly>o&mxn;LQtSj*GGjm0I8aWY?d3afn`kAsulGdnz-=v^1-LTcQ3EW5ogZl%jM38 zV|^+Ey!xa=ssixwkzwQKE`g(l{*ls7r=1m7lX05$fdY>J=JBCR2ODse&a8RgjjHC= zod-}C4Gue-`c1%CZ-<5VGc=G6q*8K#`n2*dQ%$vS_F)%?RjkYKPUkws=e_aSs$h^K zB?FHQ+x(JcjABxDAkrv?m&_**x?EMR+e5l_t_mnm<6b%NB6%>*y**t_@jNs2g*>HX zQi5x*VS=~t&&BYk-lGyUg9R-Na;|3aApDP^tYji;^bK)=fsel6a?&^n!h=Oiz{!JQ z^7Q-0PW9~fR1iG<24@->kwqWJDuX;#;h`5mB?RfnP}l?|s~zEm0AH-`Str8F?+q)G zw9*DxbBGAblkO*q`W-^ENgdUE$Cw^q`<5AOh%Ym3>bx;|#ou94$ zxk3B7S;T>1jeyee&y(h-5YiZcZ%@Ty-*c5mqxCMFi# z2Lwdy_7Mzr6*MW&(J%bUfj>gtQ;{I)(m|=w4nE0We9_7|))*-Wq5ncu%#o?m{7(Kg zD&#n-ZNv+@&$w5?q^!e+Xz|~U=R+r8%7|=cMX_i!k~L~`yU_l~$Db4@`H@8*rDuH( zfPSY&^eBLA?`cf}aG+(swypQ+u@FD1AU%50K&#&DYMRkR)u8$e69Gf)a$)z2#tV+W z+ZH+sTn}qyo743f=Q!`?S^bE`1VKtce^jc=wES#sq`=n%WgR zbXx7sEBlOt!v!@KRAf5H4J`FN){$L>*$?0<+l2d!`EIU!CA27z?JMp=U8wogrP1s0Gvb8Z61r>!a7H~E_m?J&V+KX7sDfXioeamO8R>PcN>*51SDaeJ5NY~uGag*7D#Qt!^~<;=PgQ#KT$&(r4FiAz+5S*R39>Qh zN#i`#$InB`&;i);$)M6N574TkS`yxdwy`O@6}+koLPH8xzok9nTDg?;zRi2X9Jwm2 zs~W!vPaV;OvVlOGIU6$IiK4=cl?}-P5@gymQ>E zjj0^VBXPk7a?6vcYy-P_Vw*V2wW>D=Z)#D?hs=yw!Kk0mEqHAiGUfyT&bwCh<m7RV9b~emiSkMb#JM!V?Lit2N1{opt}xLwv; zoHV6)M9w`p*qP$z+AR-d@P=H1Rb8Hc&j|vxh@9_njZ^qze1k0~1lT#Cam*yEaN?*> zGf7|uQc~pcgd*4*@hPW2LCX`?NZ<4^NFX2lpnA6<{S(sU$v#C_OiECfv4M<3%IAJH zuE!2M5hwVX=xXmmGfm3iK|CiP&HYRGv402jr~{Ot!6XLbrY(~Smt6RfnEIkE3@YH$vrL+5DIJ65b!hYnT~3N=wtWygwZA>6`AfD`2ryzqi^2##`$ z7t%Z4>zV|hUO9&+%46xO-Ok6$&*9)}GNC2`7Rw)eRy&s-i}%CPKbAb4bwW+joG6dr zfR}vcDcc!CWHI=_$#|>rve$ zV<1zIJ-KX;moZ`E9|K7DW7#}_D5Rl4e`|jzQ56UB2^BXLRWk#Izsm&2cp!}}gmGk( znBS0g{RQbBqC_|E5*{#~lb1BMFt}!TP9DQ)n%}%;#YpuzWGanSj9Yk?{BoB19b<0I z$zq)P!jMcSP6))S{!^ZYpNfE|e%4FAD64xMbTQ=WnliC2c;$)*U*JuV2N6QWq@_Dn z$N&K-jY}DeM4t1zo931sL`DW&mJ>hkUg^ z()Z13Y?A>F;p}6Quc^o5JgkKCE_tu=i#0v&ALD{Ms4d20`mLLg)8kc7@y!Z6hy3As zFn-lC`oo!m59v+1Oov%*s7&_-sf#xfm>cnq%(Q{)pbP0;XnpP76=qHhrjWu*hAvgd z_X+xu>g8dB=ukaFFy2CMSaMSOeyt7aIQ11xW`GCh(0Zf~xW4en$$=IQ@f7zz zkySJJ@IvYU$%*R=Cji{esZrxLugNmWc>(?lOgRG7*wZZCA(k0dpPO5;Rd>p%U3JreF(;&4b#&aBz|N` zT+_#}*RyZ2@}CFfVJl+O(Z8_qhU_du2h0%%*`-PXndoz(TmBb)nEnOc-fv>lj#9AU z{U!mWJ(0~BXL=lFa99gel-yJ#u4RY-qRh$r!ZdWOAd+ElrE#5gDtUksTfvEBC@lfW_kD z#$MrMO#&?BvGAX0OgkfI>F`AHboGAtH89n$?f?Cwti5GiT+h}e+&BbHa3>*naEC?` z65JAk25$%+92$3b5AG1$-5R&x?$Wq7(6|i$`^>#F&&>SZPw)5B)u*cVsakvQwb$ly zlKQkuzQkDBJxnA`s)6sy&k+dmPxJQ_VLaS@oWGkR;W8HIRy*{YwWPNhGd~HaXXOwg zLZ-0Adc77!avDF(+=*WOdU4upu7bywwD>!>6D@$QPZM-H(CC9p!AQZ3<5P_xI|#trVBnmz;_2V zG8#K&9U{=v*=5)&<93L3c^VIX-QCQ-JC=v7F5*yEg!3VqxL^7fPFnxsY%fzc>!oHEcr{-gA zaKzTtpYUl{mA3!Gu$>puwh*7vF9*Z`Q2#3F!EM(rE9mSo&B0&W)491Uno-(fZjZ-n zqqq+Dz@h)lw(_Zm`oT!EuAx_5u=NcPr?(Iut0`R?B^>!io(~dUPFRX`aU%EGhV8+v z`qMYzzXMgsae(ktw-0tV1u--ym;?E8-Qs~+SYT)6&n_K{gd|Z2c8u0H(hI+lr8U-9 z%D(F|%IS8ad(&sHz6J6;?9j?$i`F1!>Z@_2yYEoXWFaZ_O9xX<4F#LCftriUFKRbtZQ3452gt#>ZQ6V!V;f561Eo(S+(;63S-lNw6da;E zb2r%bPmwq4(F%9199D=Q&+1B&wU;; z+{*t&J~o(!EPj=uukqmppf~5HV}#9s6c8b_HMI=1-}UlvSrf%>GzDVpxWGp?4=*^q zK&j$+3K`;`ahut-*<}OajGN#P7A%_~re#IPUSgpn zQLY@wGbS1mEQ5=j7PRjHA zlDj>weldECp2(VuQ+$NVlplkfMxNeM z_;w1Os;6!o{egW6k`Xmiiu4@!@Jg z#+UfH#JTV^-vZ8kjZKg6S?hel(Ob%z%ww_xuZS%QxFz6+>hT`#y-eXGwKuqHVH1j* zk46@>>dK9KhAS*j@V3R&l;XYO;%l|NxCN?ki>>@XN}=ss2?}xwUa?_T1PwSmwDhi% zAWozBn|s$`gykhw{cI%t-)OG=Wwt-)=B0JyI``+HVxyJo1s9=kJtj9Ll zdOBzA+PlnuZdH6hnTfV&eA}R^sORI=fM1$DmKUJB1^xTd_GBQAyq40@LC3?}6*vIFCe z{dnkesweTh70Rk@1U9%QhI*?CZzKD71NWMEIX71xuyunHDWSG67B@tTH86YWi43)p`lGF#UcP%rI#UYLk)_R6Gx}tTo73WrcP;}t)*^?2Q zU%%W(0->oY2?x_*KBiYiV8y<>B@#UmnT-ON`I&S7b`W;KLWGnb%4c;B!VY3NJon_` z;mA*ZG)uK3E^+`KOmC8XwW4g-cefE+Ir4Fm#Wf z(j;Z?lF$zSxF-)nxUVcKPnn)&`1-~km(T0&os(7|iE*2La&}s+Hn@z(;N2wHjP3FQrgtQZKmQ@c6s`@WLkCHhJhiZC>Nhfbx?vZ1y1~ZB|bQq zt&*n+fW13axG5(g0G9T6F`Cn$B2=9}Y_;OCc3BdKL|Y0r!YTEyg_FLCo*AB4EtfD0 zb1~}~i!O&dWw(9zQ5~8j*8a{Yk)F^KI|e4#{-wS_9v>$mxO4xZg;(Q|+p4epyi`t& zqo}M($vQsQA_)*AeSSv)7^6U!d}SoRXoiQMW{E2_-e?^bsML@oys7H2HG`J^7I$gq zzBUf98zA+SM9(ySMwKEtHo*N8H=#+}_)~lm5hS#RPIUoit0(Mj@J%i;L3Kjvpsc~h z1l^WCzl3LPstixRnb)CE)zyCc&(@s<lWrVsu~xsr^xFyLr><@=V$(gz?KoF@8lJS) z!F`t!DS~WXHs_udoYqxyq}btvSJI)&Pgk>$lKDUdYTdq1iQx3x?8pA3#)lVfY|F&1 z2nDIa$Jzr_r74XjRUa5m&&pr^J8;&8%jVwHKA@`pSLN8mp9h;`uEUqwJ+l#yP& z<$K8hd+`W?T)rz3S|V-H^PH+tjku$|$McvFijR_O-H# zC!D^#Imu=kT?T`SfKu%yuJVp2SFgm%C*fIPYzMMEo^iAF(~n3G(Mq?s5~MA6RlCHV zYN!*XXH;Cg2&(6fpnW+${7x#AE349v?hUNh{~=aHC7EQFMo1rG_)>>gwMUc6U~Vcs82Oqd z+6CBU?ePjX&}@Iry}Lyec{8?ZvltEeW(k4hj1YTsnJ&6Aph2e)OHP|R?hD4NeW?Mw zt6%<3*!lQIAAkNNRvLG5WA@|m2_`tUSamR9h>|DH0VQB`915^I79c{A{2DG;*d7~& z0LW}9evpH_>w>9`7Q0J z6x*^lce<$RjFGgE&`$+mp1iaW@y^y~He2?EXam^_Hhj86^As5j*aUx>s#0gAmT+VZ zyWpj1E#)((;N8G>g4RpJQOcb-d;W7LD_8{LxhNBbL3ibt1_zymIi*Nc2Ye3h_M=2*&=1SUjcJWSHk`1(9|`0{MpKZ#u42X(6eXp_ z*G=jpMcopgCVpwXOYnQsHP?)GUF&1HV4*E37?p!3y-Pw6E`)#W_mPO;i+(Sc$aQ&0 zE@?WdV1XxJxo3?!J~Dpk3Ac}wN2g!NAZE$eYf)>>{%kbrN1euVAj#yk%Gh_(^E*{= z@xXzQVhi!QLj-i}1o8AcWRM7VnIDYhjX|q_i{3WQ8_ShgcfdZ~MVq7&#a4N6djBO? z?97KDH7VrPBHu@ScvdP1zK;G9J1?Ofu z+}RTqcRb+?bXiK#RPI!f=Q7;3F>yrk`_#JV10VC+Uu1duFd<}SiVvuL_s5TP{y3A!Rwnd zpdf-LKObtiy)h3@A7WpiA2#rO>i65RK7+)oa13%oRViB)1qfGTXH-Ni`V{9kDuM^? zI&U2@RtCmBq5Tc<{EIRBXD$*>(WMvpgUZFPEUX2+%psz;LVV${t?c@aB@BOJ($pr` z#5A}O#HI#obG#&f6V2ztce07^#3nY(O|fWgo9?<0P7C?UEd)%Zk3Vzas3HJ}xK^HP zXAqx(MqFVv0%>OxoH*r`@p4mR5u<;(?+jtxQD{lBBeDor6r%OCUyTK~jqn(lQYq^aysB8|?~ zY4%{mjQR&9e6q$yo%MQWG=Bt&W+p9*LoL`HC|N!ajkJAzh~abjX**-t(-AT-IzS9QhSO0ly5#EukajmTjFw1TQOO0qYJA&H)X zV`tD1Zo#DW@t-LBNZn%n`ILk$bDIe4KemC~N0gM|lxq3gJljNG^8{}q2-5^9tc}PC zl%~dGYWT2Ur}6a{SIoP9{ri$*4!VHWfAdhg^f(DHyXy5cQdxH+deYJ3$muTL&2!>W zFg=1c-nP?GnK-7oM@t;d zO>_nh7e5^Cadt9M1qE=vSeN`tWg{zkdsI5{&g%mJ4_RLNchRyzG8UhHK8iPEM%_wZ z2`V=PquH0f{n-L@jkd;p8LPjJVpFG{Tw=Oh7OtqIJQc&6aur#7zjQs3v^bB?Z{=zTHxpY*af8A-7=-A-hcO}wXR7ZM-kPW<-U<`>tT^ECuy(||_(gzeQK=>SzZ4=`>b2oai@=YTuog`Xc3Fre67SWG)0kexshH7$6H3C)Gvin*)4z z>BNuQb-(d1qF1h<=Uj9N>i)Wo3C&TUEZmp@lYf#eTy_17tqy;sC$pC@=K`EWMd1}= ztNY%x{aPB=nXvX;d}6noJmz`M|`jX6H{#utCIPvR@mISeq8vf++?~zav^|+L+#Fl9*FIW5H!2D zb~%xQ;oV;wzav8<=mVMBD51_7PARo%p0Ga;TfH&O@fJF&jgjcx3R%NaUgQpM!nfA? zIwpDE_zCZ35mRx1rC17m|Lp?v1Y>5m!_T$lm)65{AF6U z%r&f2{%mv!kg^B~D91^jZLU#p_gd5A;}m61`_T(s{@~7?Q#${N0M20p+DG~`^wxp^ z{TY<>%U-Mu4$9Fsow;6KpOIGo$gRGQLv~FKb0$Xr^*!p{r3F7AYBh2X?k*q9WxLOh z#8JYvZf#*X5u?dYQ9GLd%2ES9+tMluR7245ovIVH{r%4y$|abZq}dx zS1u=XW1d6_O`MPh9=`4RxJo{)PE;3r9RXL)TM|jWpGFV!99_Y*Qz%;X=2-a9k=h91 z&Y#LusHA=P3?#$oJm0*A0r9{$Lw0Y;8xQ@a;`3q)WWQrF4gE>*ZIvx{$1Hq@5}Wq> zNFv3ZRbcP86b+X~T-Fv8eR1#_QCVGyQJJo4Gs%6oj@g*&weZToZ28n|o9(d6;eLCk zYAqxCB}&a%THsHE@jo}k%_ygcZ+%L>B{?4ZKBS;64HZtg%rwLxVU-T6de4T3FC17` z2hQ*quVWU|MLE*2{guh}5>7-!qD8HauqopyG1(KcC1maIl6nTPJN|W+=-xgP?9Zq< z7>;)?I{2t2sR4s9AO#dCscoNf7?V^X(ZnCh+GkEXCV zkbg_GkVWh8>D18j2O`jjx6 zEcU8i6dpF4)ZAkh+KWf|X<#duuy|Hyyf><+7n<;(NqA{kT%)$XOGE(a$h z+s)~6JABGn!zXhRhk$-EnZ�b(^geAvuo!5-S3oh18mC7><>)JEtyPu*(~ajhRTk zjp?!K`ezGg-#15)-xO1cUK7dVM*Kkq zXyrERT%bli{A2dRp$P%X}#C79fChp^qeM%FnCQlO) zm2jo(QuGAx*zPB+siBhJ*t%l7j7aqA-i#6i>&PMY3=)CfuhkJAAjy#~1#cV)-n5z^ z+pc8UIG*{w+QqQP(EU(&J_O^?KV&gxWB7tnumC`BVkd7dGavNpEZcILXmucUOT+}r z{J_LsyY-&^?F%p{W zM@%hFc=&kZqfjEspy7V_w%#Kc=V#nf}?0sjBAwf_qdurqg^h!88*hPI#o&>bU1ocPipTK>RE211GHy`Tfa>{ zGzSdxG?@kjz{7rSX2un&<|pyAXZ-c$)f@D4{eoMbZn~SZc91#EtQ%Z+vRYo?aAn+# zRS}qn5jag8c$w;hKOE7;a$ zpfp_Z6q9Ecdv9iRu}FdNgbzK+#&*R{1($bKuNoNyAU`~~q#S#KhVJ2aid3D+DU%zc zDQS95c1<{R(~3wDX1am`^b6qpx2@;%2)j&Mr{v*WZ1&Dta5^WB8^?@VLcG{00IN-O zP}-eh-R@-EIskts8+~Ev4C2)ZOY6I4EMn*HL z1#iUqh)6cjm_2!^ali8iQVB4Xd2=2`qa^6`?3PDG`?dwB;uDa$^K{aB^H>hbf+`j% z@fI_pBYBDhpWMHA+&JGGY3{c@bZEPvHOB-Qv3&n!z~<=+PI*$lRjt!ee5sUAWb^+p zViC*u$px6Xgi~7)u9>8=%wqA45m(Be3l?26Dj!_*44KkK@j-Ch0uTmGHf#joKgRa^ z`vMx}cko?wi-GJl;nuM9yDa&DFC9Mi�>SB>by}QByf%rD`%B5aKw%opQ&e3}In! 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 G=Rd>bxI&MkHJd zZ6ZWIfdmoH2^Kcj6%3Rli~?puS;*%Dzq{X-ffj26$lhK=59B=83we~E#TGq~&$Y<3 z7`me`)qu??hh-Md#;e|RKc4Ba>B=9IZP2dGmsUeAiC$?JCYA}?ub}wCNRHCWwz0ER zn_Z2b@dkH#-jOJr`CPRfY!9bwJ{zuvT@t>MG|r2*dPc5;WIqvl+g-l4cHH|wx;SlH z0Nw7!k*_H z@4m>3s(BOim1VaqxW@U1-M2MB^;c6f7B46TK1tXf0m_Cp^Y5<$Zx?O!z&UL<*ZU41 z(F_M_!m0!Ds%0)og8qyMG)?5>-Q$vXOu^Q@b>JWrp8V@Nn(NImA>YI6z{*R8#ohH} zlyS^N#-PVkXLMe_cB!o?WT)1B_~!3#bbJ!mfaoka>(+!0;6>;zkI(OiA?rgsafwBW zz)->P=45YWSmPlU^41CFov_c+)kLc_s~ioN4m~xKxqeartz--6(siHMS>&FO_u<|^ zpT{)qP^RjEL!uJXAyL5K&a>IM&lB~_`TI)P`^%L?Wao{xXBPDZVaH{Kx(~m@Hh)x& zz%{xv|AX912>{@KQeJP#8AR(Z6bzS`nADq!f2i?@*#DiNd@{=xA{LaE=U_FBkt^@eUp%nBm2MIn~o(5kHT0 z_38seOc!`IZLKii4q6l$zsdURb&c{e2+mQoec2VAu179f z5nDcvICw;NzU|_?|+b*naH%UU!AUD-`c#UTC#?sC3 zzz4YR-j4FbgG1*483?QMgc=Qq4sF=p>s$HNE81cJ(U)HDUmBsi!*t)=&Nh5Q z$|it1z|TuOLv{D9DgLhwi#ffR`wd*f-544e1wBocq#W0yzgGkS%K|CQ!Nwl2c;#Uo~KZ-F`VtIrjzr%40aQoi6&bqVs$ zb%;PEKBMtjkoJR8CeJ#o)qFpXqWskR+Jr0QLrKoyn&jm`Jr8ox)?A&gM`!PJ55Y(Z z_D4>t1=@v6-cdJCq#-$R%QEcu=a`5g@*n$$;Zbm-EZ9XxC%sWNHJb~c&%R>X(ImV z`AN#$^sKDOjhFRNUMaA@Uv>ZtK93_zo}$z>QpAt}ieP^LZNeDUmcg#d%f_hv-O()G zDt^8&)OrDLa}vX(4BPG)m1iGSq$*|5NRVdp>o%(A@lb&4n`C3{lmE<3d*=C##v!JL z`kQwAD@^?6;%~GjwX?k&xvI5-WrM3|D0V>?4H}2a2ucOEc-|4WB4Up(ZA-6enE_fJ zHtlMkgsYL|k20QXe^sv{_rVMHO7`5KdA=U@3|`QNryA2RxR|900N1?z-=7cN@t?*6 zR_SpkG_Hb>eIPZvUmae!lhE5f-7&L*CdJ5~HgzJ|Hw|grF&_ceYZ$9Lvn?<$r~qI7 zJonWbMXk^Ko2Ec-#oO!V&GR^(^xw@P1$K!8N(z~i3DQ%Dra_uH#hLSEka{6%it6H8 z9_~G2ylINQx@E(I{<-dRGJRE@0a1#o=6z1}&^7_0bx_;4wbtP_i%p*)ZuL5T`Xp)E z$)o&Prq|t;w_mib)gc#m&q(?s>#at!i>oc;cYS7H^0VUm1$!x1kLS*vPp_tJD#mDU zg+GoFw^WI+HWif=>7QPlw{)i2ZA!GiOa3#dKEX&q_TJkisQvXQpJ6>gV9~8!NeC-S z$2C-HaNnDzv{h8R6Cn;@&C)XU=pU*!!x&#y`DMBkw;)LkCn>MaT;Q+wa^9h=tVGqH zA8U3P2|I}pW%l1)?4aGs{uwGi$UnD$R4%0@ye9uOlk-ztd9Q$75t1ghr2PG*_?Y4S zkeU2`8^HTMflp{6Y5#qDLjQ9B_M*hX`65p!kNf?njsKaJ{yKQZ!gf|+gOn*thaJ)7 z^Ny2zm=qs>*zUppngjX4mW~H#wN(0_GC%vZD1#Kvn~N1FL4bjhFD3x#{vF~`q`9gU z`WzYh4Xb)AX`coDE$@$|@>hKuW?(jDASkLn#4if6vKvPpH7nTzJ3?}Dh~JpTY@29B z;wk@FF2$d&m<5|h_WWGCFvMT7FvLsdg=>}p;hH}^{we66gJ&;HXHnXh*7uNs9b{}w zZmkc)G#0{|AN0CK^<^?i{C{q}6$fJLE9hryn$0&GDEHOkznWVHcC@ES#%)yL|JyJh zmQ`}^`d5&R70sVZe;L7l*;N1k_T5%R`)FNFIjt>)|EcJoi(Qfbj1~_N?X9o>?+aQN zAqv4hib?sM@SlGDV_g5IvMunB43}4gLMbhY|L+T|*+I{%y7M}7{vJ9XZ&!zqP@(qO z>1n|7Y0@#4O>dwX8*Zx>!@|;1zaYjEC8Y`6+ibP5lCv$0;{WDXk}qaGY8Q%3)`d+WG8 zi4iBl^-J6b0E~Ai6Z=TLs|~}z{d6H1>C$4z5kJf>)qR=)ST^J3gsS zEXWZ?SibQSf2Mo?3hd!Nf>i5M!~Aa-0XIo&-7!Fpx%&OS0}Y(d)|%kgTde&C3N_+v z!*!(?2zbN%izSX!E1e7#Chl~_-dl-gjS*xMz(ujKvBi`(zE*_{><7+UYZQZj0luJ_ zb;Z82U?2wDzNFWQhsvCj%D5ZY@oY0t z2kVc`T6jqj<6?_gxO`H9Y{sB5i48;CzAM810e4Qj@cr@X)QCr@*~*AVuK75rLgzOQ z07xd^ef6pMP*c&OiK>)pz`mgyNI_FhdY2A^)Z>~Qvf3cTsl(%apK^+=<8#jjnV#v` zT^e-6wZ*jzt*MVn*LnC;VJzPw+3l2opntm;1nj4K^xke8CW0JM`dpZacy}E z2$_LC!oAB*Cn;<}1x!oTm!0?LYX#5(!nFJS)>4Rm-s)=eG`M=e$ z^5!by=r*I~dfgC4q;0Rh{T2?5N}!j#l8r#_TgCBoHKhg{dXD|^$Sk`q7*)2kr>^N!zM3We->hSZ2J5E<5nzT|oIxjBhDP730f;F^W7wTn=J|6}0~(2OMg zCU3;h6O2t?62vPA=Gg5!tB%^t`Qu8uf@o`;pw&e%NLF861@d}A@SWGK93^~RZ+1pB zPmk6)3BqpohAiKX{o%X{JR~q`5vtM6AT-7)&J7NYm0B6&$1xnPUs*0xTrUU|gRam| z708G+e-cB8VO&mmLT+f6IJCz_O~q8~L0AP4BuzpAXWMrSNMROC(aRx+qay<0XXxsi_$mct3ADJCVPPKt8x zvHicbQ~5lQ@E$HkjMka?1O>Z8-i~|?CeH-#!KQ}BYXxmEr*$9tIQavnUw5p@;?3E5 z?%>h|x{(iacq3gMk;39PU2Opp>XAIMEd(RuR`b~SSwoWEHmnTVcb`!+gNv*=Ik-g8 z?@VVs>#$TTmJ38GqqY(J!_e8LzA7iF0dhHoN{GZEW)aj2$#y7|+n`#L zX{%Z#GDW=2(wfqt=BiUAH8sen?;$(#$OpkCb#E8E-zhaKEo&A`giP#F!unYdbWU<} z6MEHui_0nuZ&Ou^lx@O9xu82VOGmn`q2O4F%I+0gJxo3&wj-|BbubfU`^n=MU~ow2 z+j+X82Xqxs(NzemcoQ!u2^N#;yOx;8Nq>XUYJhy`g`hB@%%j=#=WVv})j7@%H+0Oe zug68aH=a3`Q}4Lu-~#(r$s4)M7$s~Yzq>F#xw?i!&> z!sklfF_Wt(vgf#3n`?a|!sDU?I^*_&&NXV^ ztuP4}xGiqMVG}SZ#k`#?_yeW-yi z4WVCQ^_^Ap#x?Bm@x{4VBxPD)-5#gNb#OJZFq4`POU+lp*M@Nu)f=T05Dm%jMWr<( zqnyOiZx$=Rg`5PRGbtTmIIOwn6S(jJK_qztyI0X)zVIV$IDpJ5qC8)2A`@Y-h&l}+lWj`-Oms3B5jYC|TwA>$9|We@ zYC@Wci73I-j*1l0YDF3uYhyBtZGn;*UQphSyFcUxQgsy7(M-(F8pJ)ddHi5k>d2hQ zz2vVq2rs9hAP$BBxoQksH5Iv@fzP#$*IRahbEcsd_>GdMITjkfH&c1$&jRQp2TUa#G}EQo z(>scif=OWW>K&(|RQnG3HKk%In>@cx(NeD=^%%wkVhl13XBX&K+nEK)Z~oWRRCj_< zZ2}V#Kh0armfWd=31WaZU43hh!S-azdNxb_9ErJKbS1&t2l4 zF_YVAa(FG()P)D9FH=iV)(8?KgUOPIjwk>*U9#$Lma|Zj^;?mxC|)$lx0R=~fm1kc zM8c(E#z&8BGcwG+ zFKvZbqpNA$CsXCn+Mybv>uy%Y$Vq||Js=V#LY5bd-9rk1^9t^yGAeGZ@u)*DTEy0C z(ioLT&e()V6?hcJRjWmy$xp%(%=DnXgV#kRSwJWo-)>^r;%eg(blpE^j0#c!hTwlV~ zu`XPc3URnpDav$uf+H8X!o*LUn(&h`XHTn^z$_hKKQ@|xRnN<;AHrwBf9H|oYnBbd zrE`5(wPGn4>R~*56Y7O%_fn9d8=wMztVU-{J?UMW-OUIqEeq!f-FZPV+bH^7VHV&i zCC}T#qaippWRlD>2}Jv7$PieYy@1jdr}iY4v%+?gtM{#(VVZ|fH+nk{{jBsS~tqL+}18k&E#WSnv&=_op{bb5dl|bRTlmY!Ls1@w)0C?}BN-ldE;yii>L(tH|Jj$g z#~f2G(1+V6(Wz>oct^uHA}-*^e#6H&+q$~mq!qgiWh^X{!}+YM;G+6$2*zwU_td#95I(?XqnA2NC$`t)9^qa>DK$rTR7GL%@?bNOBJokf)dqdau* ze4H{CBMiI_yS0-&epnjQAP@c2u_rWeT`|oZTlT(frL#GcEE@%jwUPDphtm0{wk^CL z9loq~>7Yg7V>3}(s6Kw*YHU=GhSuw^chY& zw|mZhdE2(W<3s6I>dszJYD_#`xEOEDqsaItlfhhZ9T8YMx=qnR^T}QvIB$MSj`@B= zSPc?j@GF$|z`^P1Pm!(EsnOCSsr~Ldw!#>nu_2I9!2p~TOiCD4o4n5O{nhqjEbM7RVP$(Ubc244 zAdv^9nLf)Ysk*J;;NLEAJFu(paAn4kbZ_%E@R|i;wmeU0x-anX1`j1P1tg_XKQ_Y6 zb-_D0fvGv9t>fQR)Q(Fko?(6X)M@2NlA_6R7V-vv^d9Aiw0hgiSO`R&DeGw@7*L(z zbdoYg+v!>;R>a7AJr-;IU@9B2Kc~0;fm~Qpg7CM^`e}*TkRJ0I)ZG+oOHJiaO-5bY zXaE4&rfDsss7B#W~Q@E95A}b1s5H(k@2tptpCyEZY?%8 z6SG*Z33V;!oR#pegns0^7AaSY@2?ofej2HLi@QXCT8$m|V_f%v-kmHBu51sIMO`jE z5jPP-wDj2k5Uw~AFtIOdDDxB-cYIR3hDV%fn29=Lrs(+KkHfdw2l=hk&`JRHnD|4~ zM(Ha=on=UY>M(7s&6XwMtxY9_eT|?k*T)`UVu?9a0=21{g>{<>*%3r3l$;Kva|M$* zgHbVrqx6owyieq;^HDJd=&Pd0==3Km3Rf8tGpF*yncw41a_88)v zaai&;Q$%fRsQISX5nJ7kaWI1^qwi=tXsSOw+3_?AGGbQrG(rm|97@STW%HMm4ZV*r zj{-toK1uYuhm@F5ij}#yfOl;(-><^i&u_gPr1|Q9q`;~#9LW5~y;M7+SLpLzsK)P( zDqCf0dfxK|j}k4)*gTYJBY&3T+t#WYQbb6w4q}$#2?xGnX%Yrgn7j5Wcvu))EX-R* zepp(#rUb|`9zx@!rCgTLVUr|yK_AJvbv`Q7q&k9ix%KFh%y40&G+az69xr*-(k)91 z#tjEn@US(gwZ?Sz%C97D&qJ0HIIg+NOwrVp5P&^x7#e!j9l}*^B)KA`gzl=Jw^62q z4P~hn=o|HVsXUias84W#0OJ@x0xAI$gK>&X*t1A;Z*dD+J0V9Ct?YpxR2`s5l!w5+tF7qp9y&FA+qTm;hn719Owx&=1hF zTwK!**D+RbW%;T#ZjXeLo{`6Sf#^xKM64p0by52m}G zD?6ds>Ub$dJ~qAJYD`ZF^*|Ly*}HyJBx()o=!zUcVA?7u*g8gnFsf#F(@;cz?R5q$ z`0;TZoJ4s|F&?+mgu5P*qQ#io3=|>LE=z&T!G@V0`!*pEE^A?_c%m*+#;r1sGL@l; z9`5N?YIs@vY})wf)l2IFQ;p=82S|QjbAo4nH{$5i*kt{3)9wg+=F2glCPA)G{<{l5ckIgvn??iZ94*4z)Z2I@lh=@7E z%!c?w)A2;&T>@`CYMZo2m%U0xIL1b)Pk@z}bMLL5fX_#Ls+xaM~!nO5vr zx_}I&a5Hh6))5?lYpo)A2VS1`g_)OW8?JB7eEbj4Tq$#~8~DdGuikP@`ecMX-bKc@ z?Tx`?v=U`mA_PN^*5i7+N?XhIIibdpDlflZM0*;NS%)G>Pm*M6H?68_v)U|lfHdbF z=ly|+*Y(a~^KFRQ$u|Sl#>dLtox{v3v;VOmt{8m4`slXm>^ls=-tHRWrG?zLtIV>9 zRo_q2kQB~sh1W=OiHybT9r~p-?d?xBh~85r`0$3)@loz=DP+L=U?Fg-U%2JcYBi14 z?PE6X^To=OEz+i$!VmoZyUzN^pN0Rdq^o*)coy?IjYw-R4P}YShnltH850$B55Je;{wFsIq5?=WuUsT}@DCt-BCd(Yn z5&FC1l$%hiqv|T~Qrh#TNuv_IMk2+~;%8 z(8O)m%kO|zzEbj|jPI=ncqeMxt~z@?cFf&(Bc21rn-_wcTlcJguZ-dkq-G3y1KtlU zB>+|IZ0-a-++9TR7g<^|`e!jNnt%VrO8yrX@Jt)zJ?4%X7w0=sD%F0wj$d^HAbT&r z&++7s#4ylcem};s{4+FSq4#ahpt_FB|CSy&r|>#Iw*rvSvM_OOBYQV;?^Ab#e;w{b zXdFS8-}2m3WiFt-@+wU<<~eN;1HbWtVv)f1aJZX^yL6k;sA77R_Pn}rV~!)R)pJws zPWd17+lv_{a!Rno%F}Dd zZH543WOH}8NPaoWZ#XktJY3%5^A#a5v%&HIsA7ppz$%u(Nw8q^PgL2apTvzj3X!_f zbZ?TJ@MT*zWAF}G;<}Gb{{9i&Y+H-X{kTKmyl5kYJ$591q^!HzeygjC+?l4ajro`@ zALWkgUYCezAS8ZM2KRrI#m^d(K~RvG^_uxu?KigkrU5eL*cm>zk7q6RrJvx6aAqhP zkjl{78ZdVM5Njw~^F?k}$D;QwUD#CHdLLF{&z(2Ep2iC;gFWS0nG{%E!Xe1)6P98o zxbM5_L=UmH+--~=esrqbOB>!?<)?${V=H_+w1r`{HaS|J8c*Z?SO>o`@&k1)QRiDi z?QM?@v*vlX^uG>K@gJrDLBe-Tb+)}4x*LP1XwPOtDC9_t#`X?w2E0;4@nqb-F22*gf^e zOPJzeG*{uQL2&yz+A!5bUZumAv4ap;AE22JG@CXk#)>y3&zmRNqRFe_Ji*e<2H&Jdt-j8fQT%oSrVi(=N*UBVg zM*jpy)3g3a_AO}~S+W;`)tWeLk;O7*qNo+2Wcj-X~%dOM}# zxa-@C8Yl<=McyMs|6p5dtG0!$I7K#Ta`(Wv}AQ8Tx}t(+N~1S3;0 zqQKb8nIubZ;~>dIdp1dE+gwEezAzP>v$-28XmE4_*h1ciP!Bjk?YSXiU{EaN2L`hq zmJ|@3&cNhNxW$Xb)T-hCkt(4ZcYaU;KmutLKTkjVY670*?DW5MS=COT_@zNBeS7-~ zP^I2hP<~y%{cY&l&Yt7%{Mw-rER~`!Atm@eK|GCKcn$xqHE=(_t(;UjEma*#{Rc%u zNbPjc9kBU3=vRiUlDI>>0!d|kK_x|eZdDlrv+#obPt-&ISN8k*4w~9D>=Q9F#{Oeo zd>?2k6rBPbgnOQFH<8T-n0TGLWTWrdC{#S<`0H zc<*jPBtAP2{N>mQak_p{GHrIn)UK1)2s>hT+kS>_Ngv;@%>N@ zNWda$5mx5vPL=Mt2&<#>4>hR?8l-U!3X+2Khmxb!HTS1zYqlP!xS=oR(*;^T&jIBL z^x3?1fpE{-7W0|wHMnV5U#)U?l)O186L#7mr>m?8D!QZ{(CoR zVuRK}8rOcH`SfE!-N=!$uf?7i5~(~Lrrmu0s556AcS4)__z)s}EPqoz=QJ)jr^rEd z$3tdyn3}&m4hE?%!qL9!^gRh#^*!#{e?k6BZ+Z1WfmB%q0w(5l*=9A{e*@wxc>hLI zxG2>6py`Hf-A|so8SE&u(9b5D+*@HgI`i+O@I~_qlKmI&m<2%yx%)1f#7cO40iSih z{Sh_R!_vmY!bV_?J_bu#4XJ zM~-Og(XUotQ9we^EF|31e&WT_TJ~RA^!px$&7Pi@`}bA2`bPz*aNB9jLOt(N&*@Tr zb}L6yI)>?`-HH@cc=LbDL@^--17d$9&FmS4p?>d9uG)!#M%vDHAK}v6ZwPpOdwC}Q zKuR2h=A~uIR21j^7|A* z4zJz0coQoHhjV=Vp5M6%wjbc!tII(rx;5QN?+pJ|7JO+(xWIm`t?8IV8`g>APzIQr zL*&mcIfT(0-c>7cx3+YZlt3w-bgKWY)=NhG?_=p^8s^1Mu;lnbxO4lLX`QyRrY2O9 zP2I0s&8?5@os-#ovGLDvC+HG+H@`pRacUY#k`B|F`a_R0X>p z`W)A|1g(`l(ecpxpTOD$mlam>to_N9Xp2+3?6Pou2bwLyWB2c5X6%lxP0(cR9xwi6 z_)jGMzx4^46eO4+^aVfuOG)t`N`iks1wA8!mVnkM z`CH=k+xPIJmw&ylN&oe>b`=}-8{@yUAzKjoOe^k2^vr&?V2RgyY>6EI{B&@jI!Gt> z;*r3=NTh8wu%@P_*>4sEn?C`t!4ciNw~W!C9rjjw2pSTP^A9gDTDPxU|vbOBa1sZiC=G%);ea^;Xv> zk9R8#qSnx7p{qoWmEK>zqLg1;42k_ykL5U?NzHLD!Ltk;eI;cM5VUQGoJeq@z)0Xo zhc)=JxLL4K^aJ5-_B^BApQyEv15KeqF0&>08*Er?&Z!; z^%iEBU%>jBP$Zh3GDV&QC$7^*f8vp1!0p>WS5?*lJhx{ZW`PJM)UhR>M%@Cw8M#El4VUx(vqVG3 z@$Bz^ZS>n$qY{6^!F^c+6Hbr3;!(e|`CBt`YAfJ{o&>{;ptEe;8!uDPNJHn%n z11N(B9}__Up@r{r{(S0GT8@llilCTnr~q4#nbk+@wHRMsVKn{kN1EL0ZIhw4R9bBy z?ja^tUzvhYh8f?9Qt`N8-rOz$*bkboiDvSd7%Mt~lMM&*;%zx(fYVl{N+=Gp$uq*( zQWND77H)RPCIB+xWASWll^b1@6H70T8Yw#B?p>Sf?6RYjz#Ff?g~(6pV0#5g3w@*t zILE!&7u>=xD|vYa)d1av-d((ec5 z-QgXv;l)uJ*SC|*dV33TF#dpwA^a^KDVtAmvIs?9^CjOxff#(z z_x}1z#Q;$W5#~#pXFcUnWTTON>L_sy!I;@d;kc?F!PdhAC#OIQS*K!GHJazn9yU9P zyA+WTZsI}I%G<&Tx-25vl64zw*yvGAFu->89T z$$!W^7`8?hMB~93sYN0o^c`FdPIqkpoXTUt6bROX@hD0nl{ zjoskfTa;riY-~p{Lx)Xn<+v$^uPdhspN?X;91gE_oq@^{+KC8v*HG8?nsYq^+xOO> zkyA2bDG((qA9yW6LwG<^J}vE4Y?~`aA~Rzu0u!6Ekv8>Uf=!}BvhwCxq>p0*-B|>g zHXsr)utyy(S)2`f>opuVWk*^*OM0eEcY;AV<&s{8% z$pkO-bPn;*U*BU)kZu)!qQ2_bbHJ)lAgU+MM+5$xakk{Omu$v?eTQeS38!!h-0Zx6 z6kH7Z10>zy5HtV{1k6>Xa%(>FET42x%YRO1{-q$x2%|g&hizqbGtC640$5P1@IOdf}uCY*c_~DR`qqiLS;z=iR=Hl zlmAZ-2{8+poPuwK-3^xRm@Qt#kG$Qp`xz4tAGB<%nLJxBoa{6v)98NRTq_K3Z|~D@ z_L9BV11vL5xqLCVJj6awV6_W!#?cP5g=Qa{vb#ZJb_KO|q9^6(r$mI3w)fuhz$cYf zAlZzJoawYYf-biLm9~yn)p)P4?W>)mkYBz^r}Ht|)=|gY_F8Ny$g$@UwhN{I9X~7(V3!B zrO=)l+e-mynHJ+`vA- z2h#DcrDm)HiJ-p$5#pQ>E+fmE(r;gFWROV2&MN|ZaKH~7ITVR8Q9N`I;9UfR_UIxI-_>xQR8Nao`xe*=wDD6O3$T`* z*+z_mr;r@M0jnNNFpmkHQ z_0(sN19f2W6enD2=zcY(Z^AxsAoeT{NnYuBZ(o`~;t#J|puYn%-i!HA=TQXql&-<9jXD&?SO=Afkt zki4Zd7iRfsvPJcjz5=*{5jI7+0BO`lcZ~JKM!j$L9vHm$Hn>G33R?C>ZCw0B8k_ZD zF`h(WnxtQ|Wjy(&i1DkMd~|ojHi=M5mGevC>zvMJlzV3;JnIOTIyuy#V}`{0ay89T zP%SWzM%m77U}MP%;z)<}%4xHbwNgohK?BH&f|DGMB`<@)gc;~#_Mftwa^{caE52)^ zKColJsYR>j>iK=MZnR8JOX(FMWouc`pYn+dcB#}^i2U77H~8JZUBqg)$hJv=8+7&v zUy?5i(py@MluR~J)2m^75Ja0U{er1k#-G5`+k&!jGlxWfoeg6U$1m_|1$PLOZ^k6w zDK&gr9@~Kxz?*f!xb@Wb%twSsI%JQ@S<2QiL^@Rk{@})Vn8lzzAnW)R!j;(OEDwI@(@2FB05=%of;E>)(N6-%98x19CXc_ zH2cGGj9SZkr=qKifY?HzJ;+aIt2HD=#%GD23!Szl58rVxzDf0xHRS#2<|C*GGLmxK zT5yO`x=%_zoI!6ougx{RLL-1PcwdyyT2i~HV0iC3<~{0^Bf1w_kJMz|rtBqv8-q2} zoXwuA#$;G6C#cuB8snaNyxHDL1;ItwLKk^StAd&q{3u}uc}q}gy7qLbPQ>#9gmVP4 zVDdW)w(VyWbu0b{=lkEP@m+8k<3|V3JOV7`KE|>$HvMo2=Ha@}>$|j{ZNg7~_naM0;kn{0Zc_wp|==JQ@Q$E%f%SSy+opRnS9f7IE+wP!din80z^TR)Ecw z@Um(G%#=n!C3$CkpUQ=iStXHW1LfeNRjKKxDG%zq`yqa7F9A$yjB)g28$>92N81R1 z7cLt*6UL&(z<3qvIJngGH##KX!$IU1dRCpxYUvq-{s@Vm{8&+la?TpHB>D-Z`^@U;;BRcrtM7k?lC~ZbK567;m8;uEveq-l} z0W1oI`p+ON+c}#olt3k8tR>W?_Q?-LF#Lm?{kLqX7y3uwHxG}e%%@suiUNpAc!2O` z6&(`PK}C6aP!iUWZ3;q|-{&NTWCZUr;sHRMz2274T8-O)P@OI%F}S+Q z9(_Mq$)*sr7_HiZxmA@0xXc|)UkN5Ww=HL&DJ%s6uTxO$BmVNC&kKB8Tia>Dv0}-x zoRvThW1Pg6cwSJ;@SdB`pxx*E;1E%eOJEu|ht zk+oLV7B%4_2#q=y^HLN)(_rObg|l_$vG`39!ut)Eo)j`oZ0ZthV74P#Stn~kEk`8O zkm7qG0&7`|3aGFW;x}R+UEjPT0suPBWN`68gNsAhdtKQ-9QxYc~VpdsYB}PnI9X%D`0AAFLosEUK1yP$3 zVHZa#l0p3;I0M(T1e`nsht;bvXM+#{s!#XzQ4A*U62Rtm5Miz##LzF45=*ef6OG=f`@Vx)r;V`dbxg-y z9r!NU@zWpV%@LL1E~m4klqBZq+Y$hup)c=dIABT2T4xqjeqFn zua++X^8fA$^uN}q0%_%BgwsLDS@G+}_jTBDzWl{?dl6a+o_%0qr%m4pb}De=&rl9C zo#hqcyZ?REaWmSz2@@kh!tVK;nReJ6$AK@VK}@}9_0D;un^4_r^v)0kCR!f!K^tX* zrn+>qw(amKnY_m*NYAX1X3d3~Q=<*DCidu+eaW53@j+2V#cDYF&9h(TXq%7mtM_Vo z@T)_s3U>_eKXXW>_->an2o2E~y}PwLu@)e)`=CAS(+!BVj#4$m)DEQge_N3nIHnt_ zR)so=sj$YCbKUuP{|m}V{q$p@JbN47t*)p0xaR&BL?@dY09%hl8w|k`+jN~{FU+{H zHF+^;0+FY`H;T?ukA(>@WIk{>bmNLQuXF0}ILi?}8@W?W_YVM$xPF)?uOQ-cGxnUs zXOO!h6uti9!`IN8XmO4MaELBJoO_(Yy~34wx6EIHhY~CdTQP076d;6Yl@or*>hY~dboedlFV3C5+!nPrJoiSd&9_~#m9ko= zUwO{>NSsW5sn`Ff-2VFP;|@<6(ZSWlu*W~K`$lOp&BM^)mYh*BfD%Qj=sZ`L(CY1I zF@atxQ1Ivuldy*5f^1Z)^%nI942Il3P$KQw%uF)d%;Td@z}V75Z|vu|s9p<%zto09 zUE+j$a6gR$8*+|gfXUk-uE5BvpA%4f=)vlV?jLMyldeJ&c{VmBSck|)Y6!JhR=G(R z+TkMi`vsTu*%%w3^$yMZ%Hct41^aC0kp-J+X0r9M>0X#3YpaFaJJe-v4L1MY)wX(DAW~bu=uIR&TS-xfy2?lpaE0j+Pypd+2GgGgq-oyIg`((`x7xb*G(JPGQ8i#vw%1++__kt%z);QcTs7 zWfj))FR?Ac?@Tirjpd(+=ZB#06XF~xd#hX-vV(U!xaJQ)9Z*w)x%Zp?&X*m@61xY% zW(n+H*ofKg23QD&dA4Xrv~m3GXsP!YT0e{rPJBkS^)w;0oUu@0YLMh9l?|xDTiNG9 z-yHltFsdkKpRFAmT=>BmDp&Vayl_tbSB}-fpj-_j zV*ZUDE{;7a1KJ=*PPWIhd{_k_se9imW_PCbugG+LBrme#L@nqg+603Bk`h0=;?FK> zPlJ53m&Sd^!P8k?;pf8|To(EZu8u$N^;8}(csdL>2yRnJ%htz+B@y(azm+Tcs@g%F z>#`pv1Vl1}=xf|oIKq9ml(h|#vryZp=X>OK;sG8(jcS&EI`3?R%+Qvt3E#d2k~6dC_hYIdaLjcGMzhQGa&lri&+|35L3~vp6A{$U%F07~0#KTNlK~BX3nz+@HTht};XVe?Bm`!{C9rD2nW=%= zRnrtnL8cJL3|q%5<|Wx0&E&<}{;o&|6fc(n45g^~hoW;F~pOd1ZfN0xY^6{u>R-p+cMZK4?m5H!O(-8!OKlwe_Dg=TCZR!=!Gs~rhJ z*r)^4=Bgd3Etgq$ba#iIw}zag-+dhrc5^Bg`cPduIz2hnNEEG{telqBd1Um->}oQo zq6P~-6eZAmD=B${Hs(*DeY*emA}NffEpPlt2Qu#rm5x7n)=*XU%cXCDGY-yOsG!=N zMQNsYPkyh3xx3%ZO_72+v2}_!_;{O}iZ|0_EC8j)Zx2Jz#g|CYlVbK}b{+?GF2nFa zg3-&VfsmP~2iTO`i7t5@3LVV-{T)MX4A*$FH9_c|j;RzskH~EL_Kq>qOE=H`r11LP z!kTu`i;Qv^ zeFKdEH=Jb+<165`SA5_4*39qb7U8TFg?-{fc7yCLrgg&-#~*;>`Q3{vu6r>K92(E* zX%fXF?ZvrIY0uj_A?Wwjz>kBpTC0w1tlJ~F5SY|+7B;r%dn@p=w_14W=@;e9Gtovb zfsheMW!#^Aby|jIZr^?AF)BkmUeFd(CTnK}AhH*#Awnl+qjQSFj8>Z#CTVw87Q(&^ znAw5pLL8Xl2HmUQjEBmvbO=^QPj6JH`_nS_s+mTza>{YT3IZu57H%&dAo$4*aLQK$ z%V8~9SB+xSPWUh(K|YYJNwK%V8y(bOveJuK{4XHJmyhrUIQK+7YJ~r3)a;kpiCg?6nlNPGXk$WwXHe$&Pm~lr zSGJ_nD+(zh&tIL^&n{D{zdcg?2o&A3a=-+*JvzU-BzWhRaR;dypws;1DbI3)u7V7> z{o64&IFtLa8_Z1KTk9pslgyk_`6Iaud7}E^s3n&WLb;tKanr&-e%Ve+-Iw1_a-xh_ ze6s&8^tpt6_Bfie^o@yds&sGBWz+oAj|=s#N=L+H4J z_O?xq)pNzD@QPCWP-qNds`xlrqqgVCAkHW}82|&PWHBA$t8k7I*E{Y+J;_CPZ*-B7q>FC|SKa zWD+X%R1-hUhoUc~aSt2Ke240N|L`ap?i+g4r)KqCH*H-v-J$VKobxEARw+&>zK)%7 z%Z^0bWfagvkx4|eaR)(2qkuou;k(`+Y`W zMdns|KRe*IMQIt*DW?H@v+(XpSda*n+OwNYZlcb2Ve1YmiUM+K=((nB!005H zoMbNy4k)=X1TYYl1?=l#Q{MP?8suiI-}{b^voTx3SFSsyOj_5Was{Sk zvXL6Q+TDd#6_UaIx?Dli@f;Fqo3_#&l|GuR6*TtSnKfHb#xQ<4EWee(eC%!9qCjvv zDFZCvrekKT;~=PG=N+IJgEEQUcZ^Rc>gNFPs2(5WV{H4X`S&q^7e#{IwqAD6Cd`8p?nJA>FD#eQt&%^AOQXHfLZz-*t{|Qq;`AoWbKC{;`;#!YW1Dm- zUfCISZw6Ckpmme-;Nu?xBBsu@jK7G*Z0d-jPWk&(%zbLe5_NjNBnv=WU}fjk#H3^* zgb7s5c=B^4L8Y!%+|x8tMi(GhpyI>p+6PRK4Kx)Tw&&S4sE8RTXfrX_ocA}bjkbpC-jA1TTZelzm+U8o9S!^Y| za^N(PR&Ix;+eJ$GGdBJ-sbCXI#zA%@v31{AiOD9p+G$7lNUb6m&cmCFC%xu`8F}&D zc>8`ZJFvJ~JiN31NBOO4$R;YW)Y&Us5yfa0w9f30?+W*>?`XZZ&`#aWGDHyxBZP+p z*mH%_&oMoaHssuH#i-{;_G#|e)dguW=dcyiwy~{lO;}NW1_xejOgS~Eb-sk>^qhrH zKnO%h$EUiUF07^J%i)aN4}vW;Y2!d@#aB`dBIi+*zMb{?Fjd&b8;uD3Us`)jTKKn< z20Aaq)CV_3ffLe%5+Gv4e(?1Cs z&?LtcQFz;w2J*KIO9-H%9*^xOotcFfNGCPjy;vSRC*xL^A z?h>U`jFh7ZGr+wL`~;%!qzHPx?BFWu!zIDv^a%%&o-0L8oMD?G29a>@An~sUZl3=d zQPlXu*zB_b^jQBZeEuVrb}hkRjsA>l{e3uISg`WKZq>qq!cXDLZJ{eJDjLmRCD0iP zP&E&;OCwXe>Mn@^!HJ$2%n{(L{bf$MUTr8LDFeBTQIlMLDD0ZXf8S#vARFyEx9mrF zeznf%c^f04Z9c(w*|0Y=CfVLe-l=7XojQiSA_vl&s}liOIE_lUE*zt=Qf`lX@G*uTL1_|Vieh6i4uLUs+DNwj&?!R;qir0Cu( zo=R+XDb{x|M53dMF(>U)tlVmr%aLL39rvpf(d>VYaXRAETd!PihBQcHBGV{2OB=gC z9`g5&^J6FUj53~T+cVSkVCBu+m|b8C73g`88=aU;2^>V>MRQR$FpOs0;L5KkMy01a zQhcIoi^*Z0xo$x$Fn2F^wc?So8~gFxXC?Qu9PJ`9saHC)@~=_nFBA#NidwQ6<^mV6 zHAqVBo_yJhnWU5681r#IT1^Z%{0vJXoF9+Ki7s`n8$RBO+3QAE$rG6%QMc&xxoD%b zX=jhDN%_ru=*W)ruHoXH5JvUzF6JLWfJ)Tq!;I_$DaAgzWDDxu#7g^GZ@s2X&@@+X ziFu^8;+XHrkptYmq9v`RmU}tS#7=foj6ZbX?{IpZTu6UaMAzAmaNc&n3I=p8lFFGtZJ5sKGph?KIK3$9Whd+VDOc8 zsalhB&1BgfXJCml@ECj43}LI4Dqhm>Ca5FdU*l>$go8D;ez<)uO_wZQ7(-6jvdItG z#o~CFdzwfv+CE+=h+jvjzXAjVTjQ_-q^(PXRwfvrqr*xrX4uh+Gr!&Cn;n4vat)3R zaWvws7m8B@FYR+VQY!ReQ&Z9S`tK9)D}vglkqWnm|s(PAI8JoSCttqw@)#7|33!)@+3+kO5 zq=w!pgYo(J_^61|`xEb^no>Z3kh1<*>er;X4#L@=lU&cg_BaVroG-)B{#3+-nSS;Z zAs~j(VB1~?u|t8wcI^KoquwkCBL9~?o_nwCJw+8k!#B)k!EUq}>V-z|`gGkyd9_?w z7i>>!bJ3ilG~Yazt;1!E3_fEith*!~T&3>?i(-1LH$RNLCkI|T%jgtKrcU_wbDM@H zGLdbs-pa5sna_CXnz!SltK`-tT&Mpt0rtXpi3U~#GyWc28v8>d@OiqZ#yj{?&Zopx zecQEH`rH-9sUv)8cgZp0c#MBCF={dN@clY#;Ao-rD9TTB@ zeoHU*Px1qtt7{3{6%f^nl;iasE2r4Yp0L(@rMN^_*wW@e>&8dz#8&$?y0pn8~r}U09FW zZij|PE;#;K&3~0iUw?~5!T1&mWH@|Q-4pEdPLj}LrvV9jn-6I2Euk~No=tPb8`L0h zhSTbTa_;{JzV$UGKvFimQq|}Yv}hFL^T)Jq=j(!pU)eAG8pAB%`*L!xtLK1){Q6Jg zPuLCrPa)%-&-W;XVUDT>C0ryrte~zWr>C_9MugVc#{qC-Favg06FagabaYAG~XL=lVoOhO}*3l2&f1?^Gs1VBsH<%?#$6c=S9!d90 zZcS`z(Du z+IR8{Zz%H=Afu*j%^y=783#$Z?{XCODJv)p8tGR#^PBAE*jT|^9xGNq zI#*gdMs?_}A8M7kUeB9cT3QwOIXuY>ss5i*SDJ_Sdm!q8=C~(ze%nH&5(92x_WzSJ zB6s!2Z2??x5&>A`Ut;^0t1l>dpUA%Lr#M8Ng`{=)&Gn1F)= za!Uh?;^eyDvkMT5@V{<39sEUF(fv2tt3jU4vk6~?Xt@6Y12>$ywCph`yt?k9F z;lE-V)BAYm>)*#Wj_wNxjP(lg^7}@=cjj{vp_Ak780&8Eq+D z<2O?L!u@Vq;%|ql{w4hP0$abeJh|w2^5_w^va<3%>YDI%(1i7GKIorfv0Yu<8h8Fc`PC$FPLbrh@=L@a^z0nWvW* zA207B7Un%PE_m!WyGjl5JK^vL+}y-TNl8l2pJPXJquZbUjcOPr_yaV6MI*oPTlBGE z&^h<%%PU_=4i1i(loSTRXrn*ER<4Hu#l?@ur>25t3}Vl3U*>dn$~}DaXfB+ki1_a> z3$Ro$9h_19b~7Y)8~>-pH+_x2e_M6sSN!Pje?(7=3~QYTP^t;WG41_R=I+I#h0y)= z#jBmaeV+a<7Bc~W3!=2%@;`~$rG_SEL=)~0-+#XTKVL{rRtk{9is6d*fAH|We9T7F z!06am5M&;T8$t?lH`W&B;|r**txdFluA&k&Box*aA&QHOOOA&{PuEl$?Ut33<7s2= z=ht$ydw|+&0g*~x@!q|Ax7|hD^O()|Ai~7ovT?EF!}7`s1FX`B=a&wwF)u#`|bPyNhO?Ec##gmMmgl?vM2baWjq1i`G5;_8=TNXA$sTz+f!_FDK z9Gdc?-MPoloRO17gZgKvYrF1G|0I+9cyl0*gSzi%LD z8X3`44+K=oV+-7&ESpwXU>iT*+SzgIq&u@x>FDU7rlG;O!wbwg=Fz3oPhExu#?9y> zwPBZ+m*NxymCD!^h}@Z<9>MiFAA6$$2%=Vg-aQf^t*e0PM{Q)-o6ML&3G9e5_q{9K zzN-_tbFZH9y+Vy!m1p|UGL0VnTYL8hv}X8W`75h3JVN3V9v(@(c>yLf#LIk-RUJ-GFYjf(@im3DCI z>PG*Qdg#upjha7d5Wnbl^2sup4z;$e$yz!2p1IOs?LT`r>`091Vfmmd8>Qw{`&eh4 zaEZcaDaE10J0p^w>QYHj7{)B2zVH-}%sQ#=P`+c%7DkP=&#@@)cj1%ObIPHybaECu z(3B`4ptpc<`=|6f<&vY_2Ea{>)p9&UoBiWE7Jq}hK`K#X=BAVS{VCCm{DhN(OaY9y z=1)%YhzldutTVkhT)EtA=3MQ63Tl_C+l(2mbr?+@0yB&+vIK3MlxFa(WV1GCuomBW z3pt+oW}OVMg6ypbPQx}D-zE<<9fk?w3}J?O9*R_t29|y{byPK*YW3K#f$(0 z(gH(M)=7S|by=$4xt|Fjk9&4<<&6`HfOGGdlQD^i{HznBeePpt(C=K(&W5m_bwJgE ztVdmbQCN|7-ksK0g1s%k2{9|v{5hsejOkPzhya_okL>I2{-W3`clB!)thKj%S))#` zeN;4LPj!|=jis?$Hl0^p3$I6PpFa5HQ^ahmJ_@m=Dt1O8 zkrBG;C-&)bb>fAWORlVK@rL!}PFT@otE}@n{;vn8Mm0Wo4i;#>Nn~pI2!UH(4K0hcy~*_zyG@u|ThV z#+m#RR+wpbb^mU+(ci`;h^Zn7SX>k6*?xh8aW4Fu%unmiPG$`a2$<)ubM@T`*Wdm! zGboI8w9gdqg= z7}}<)=xb=PLMK^kd~7mtFsSi{s{`#rR}(ESUX%Gp-x;1Xhz;~%w&n3z*0&;)qQd#c zlWB_T=`7gGHIw z0B@s343F&bkoO?+Y^1=M4_3`x@-L>_VR=XVSbV#kjb};LD)B}9t7qj$0=r4&5lY(( zK(_vyLm8=hbfo#XRS+cEJ8KJLJEWf8?_)*uG_2P*%N8;xto`&;WoKtk#d^2i@eSH^ zsvHD3j=bKIFO|DP+2_*?#@U!+^4D8ouJsiY{Ou-iaRr!ppP&}no06oM^6s0U_qQ5M z+NVsc3F`Tw=hGlxToaEpjY)g_=55)bWBs;+^>#Cx=E4!#CUdNlC~9fL zRJ@nKchzni)!!BEL%DF--gGFBw~GgJy519VMi)R9IzK24#pj9u0OSefL&Wf;q$wg2 zUqf+#Pw>**Gr<5_BRv*pN>q*8|cTo?Tc8~@P=0pUPL(~TBC6=JRslf6=!^f zVHriyH>GNnnW7E;10G;R=OHcD@Xg1r?hC}ysWP^EA$Y_$N}1)9758N=vauOI<9%7XcT9-iV>%)DOS|12I9qjxcV&QFJo9Qk$W$rg$Ka)N6EeddU;yKPqC3?Jm*q*E&sYxY)m{V2V4_5yMgKH znfvq=-2_RMW>-;a^yG$8f1MAr>tz<<9nT%@EJ5rI*BK?g@9nx>_D(k!^sa{cKL9nZ z&jFWN(O)`$QNW2MiR^}XE`=6W*MIo1AU03VMkFR3Cp=(0g#C`ceQ!J#UfOpZ0_UE! zE9eAWlo^wu^w404khj8&3mG`qs$0%zq|KbFBc402FcFI0_Oc@?T4O!3v};A5kR0(s zk8((SNwogmRVZ?kWZEdS`D^wd&5D`JT}vfAfy3Z|*Q{tQ6B^h0i5T$yj#N4vGFgC! zpTIME1e8N7i^>7Ji?>w4$>B9W4;5S@nU(B6D%8r4b{j&evC<@Iu@X6N4X3EuS)&LM zN@d$!)214sfl08Lt`u+`_Nk%aM!g!0dVJC2@R{Ml)&jgPar!?-R{sji=4>jB=OZ0^ z*My6rpQw&RGhxM+-ymTvYGiHA_zD%7mpQ}Im1uhwJ zaF}aPk%`)vb1ye)>fbK@>^{tTk^&ylO3*@u(Fjlch8xSA4c*ZkPQ{3MwX~Wz3y1~Lp0)CRN*HHc?=oX*{Be;w zoXltG>H5UgK;}x!$x(g0D+t|H>+qG6mciSK1`?cKmBgn{cOH%{%ApeV;G#zyu9u4r z$*BK?Fs*p16vCmdKVWlVH&$}w zQun(7{saI@1t5@9x6n!VeXhS*M$gu-U+q=4Q}og@n(gYZ5;j7K2`DHZO_i8H z?%mJi)d^q_e_UxKv3E~YJa-Cee4Q34{zj}Y!QORA`V4y6dCKll$+*tW#r4iRW3Mm> z?Dp)^0DVs2H<}}`%Glra+LclDH?PNL&%i%`dqg2$p!Rw9>`4Y z?CcDBWN@o)Q$&#>zMGjGeG=QT@M#ki4bHq;sZJ97rEleiPQGfJy@ZQiKX83alrQLF z$mV(}^Z07NA#>$txqKN0}PzUEvsMlvtD-OKQ!35($qnb)uI@{Wi>}E3)ri&^Rp7Ir;LOxK(9Tuag<0 z9C?D>Ns<{*MLu;SA!+sz>{qGm;@YE)(fHZk`iJ)8}*ePJ>T~UrxR)>5oUY) zb-Lm@nzR{Nq}gD#`ArQn24c%Bv? z_~=S+e*`7eYZgzSbeUU3vv<3_cTfd7>FXd#r+WTQNQhVb!mH0`@D#24_EY_RRhmjJ z1Sj$W1I>7agr>+XfNVe-pt-}6G(}Q$p#56km#8k_mw_Qypf*>gSsZ+AZEX-rK;(PO z4FEo-dTi(<7fV1r*^$*AvK*mo??htg_XL)jk+&>D@RU*nC=V2<{CuLxwAN4122|!a zXUlradTqtHZfSHJW>#HXJXpcxk5GlZO~6rlVR$G$qX$cZUGzjW@5|EZ*j0$zKQste zUC*974zct|m5DKnzA3vMOcC4o#wtXNnP)Wns~M5zJ!kM^<;~y~5m77;GCLC3y6uYi z!QI6M$2}Sy939nytF31ii8d$Jq^G~;z>{h*Q?8t{=iIqZ%HUe5c)b>X@soAc;Khqo zr|iT@@B`P$soB}>{p_aWU~m~%lC5!+2n$Y1&--im0sK(4Ppifzg0bO97<)DPvfXo< zq$L^~8#_vp$mzhV#~m7_%46KPxog@g920MA<71kD$@*|b9BWd5%?hPB`F1?ohA2ggZA?5Hf zSDm57lIDw-cKxIeU|roGx0zq;t!`*~m#^_QAJp;4K7qX0+C*&xu*wLq&+Br#F?PyE z+ePoIRg)$&eh~qnjN4A17jNJOautZ(s|2Jef~j;JW!>cEHEdm`g+e872mLyNCU&jv zW|c%tF6CQEegG*0n2u2_4#hUV1|}EU7j8|4(vNc-KHbFf9WPe+eT4amlabftK-4mk z5n{4~iJP_#$u^_zXrmn(DfQ&mrE_u_GeMVJrc8-kYDwxq2BSzh7_SCM52OR)0>3pD zsHDFzG!%c7h(I9dHDzPFMA^S3Ml(mlJvY9ry*M8sxz+%TFxuRhPjJvTPT59b=yG)DN0y4R$!<=vNFg#$fwO8;Ik^sVlpXha4~X|&NI+)W9fDL zxv)2Wc8j!RjAgfidvaxc(DrH*66;pZ_4$;rq{2i*p>F74pscUHCwV1kB_}((>vcX_ z4_b>|XQ&T!*bbB|m`uXG|1>iZVXgI6w}kT^lbjKtcF4`ikcPw=*C`G0x}Ib}%XP>T z?`5GDLB9au%$y#Q@2MBAS0_{;BCiec7u@XfVh2{YhotB8R(=#b@_aOD8*>70J2Dql zsDiW=4n(b9p;C7~3q=H$gor*y)T^kq1V$FLw>fm=KNxeF(S|9u&nge)-8%sFy;?kv zzHzwmF}O1DxG)$Bwpe%Q5_-zn>LWOQGq7N`OV6M;R7+~VfX*3H<8l200J?Co3H+vQ zm&joRm5tOLsT{~S zw~NJ8cG=@%KSHLlt%qPn28L&Z2x>Cf&;czQyRE0ihqz0uGg3Il+20F~N$q{FD1M$S zD3TGL5w`rNm%nVV&nC{=+sw2XSZ)p?=UI8ep=jOI zV~j0~H1k^hzMR|^)}O#5_Klru3lv1TDhGN?cd;*i6e~oL3;8T2QtFrp3)>lETpI*u zE@nOFDybe8oL_oFx2-;@xG)=r1}v`Ed7gZyFdgw_QAEg>^^smL$Gaas7DZ+;6b7Bd z$Hl2eKCSxVtMGODG4i#T>g@NXS*sRTK}>m`AU!*S5&=n{G@sSp(_R@kjr|)xC-Ksc z1aA?FEn9>oWn43_B|LLe+z&dCs;g>rJt=D!468;SEC}?WCp+e7iyk;9;k!u)$E_Lg zySakq?&+uA#Im+j(63a&46bi}sglL737dk-U@u{p&rtd$4bT4@o*d&_EEV|OUNv^z z0uwTD4~iVcgRE{g*YdRq%eB#_Z%w@Gwvs{KW4ELw2*KLSbcWnW@|+vxGjoIA8PF8p2-f)j9!JiTBtcI zJMXC#eg;*ASiX#c>{#DHNd-N$7>sUM7&ktxiK1yLp6ZD_)dsq9IrWpySj>D)RNOK5 z8*`)_pnXX2Cf{<-fI+1V3LUs%#YJSD{?bLJ%~`Z^?~FM2I7=1xeJb>bY%X;$et^qR zL94W6M}f!+gHAx!Uz>(+=(o7!?lnFbI%?cyjDAI0(>D7>q=XO9*6bARHVH2qEMh_Y z@aF2@y93=!Wb%U;bDJCdP6W1Uv1nY4gL;Y1c+Fm<4uh}y&i23XT;m&iSK%zp*QK^> zjGcQ=$Y_0H>VjQ;ZB*j%ru~JKF{!0Qz2wTKHM#n(+5&^vwC5vw7nFslezc|Lf@Jeh zw*l2hdDi&yTy&%o*LVbuUuh*@dM$hz6JpG-O#!PTM)$i_jz|;juEiNmsJiQtF}gk8 z;JGC{d3D!ZM|T#jF+v%8>&*Gk90=zoxChCIS&F_jy}vrx;S9dz6*jXPWpoc2c0C+f|-0kf)^e6BfFBE{e4=MzzV^Q(^vX|fH z0n&WoQ}WcjBY=q^qgS5`pY^Ht^&_BwUvshM4{{TXC=K|5j%Q>{lY#! z^^pce>jCJNviW+9(fb(UN2P90cw#Eg_M}SKvy4!z2K!8!74hcA4o_!#5UnrB?gu!f zFXBZkG}~RS7-Qe_8`fspyr|>S#*otN$ddWSoaCnQM59*2ZgPBFc=^M{G!C{fHmK_-IZJi=svCj)t?0v%F@f^)N8zE46qUn^y9%c=XHPp^sTwKzm3=Xa?-$P>sz; zEmX!+P^NOm(6$YIRYk$7;4n|s~p8Ude48(|p&%MbjZ&Z7O0E-Mu6061Vbcten z+S?a>PH;O)%=jXxbzVUd|HunR@kNh73Cm@tH+pZYQB9In*4TW}-*V2bl50qF`=~?k z91jVR^h!cU6%uL?o zfPfoBc>4!;CwoslQWr4R%^Sqw?mtNzyM4#R_H1C6o#s)tzR}a_+uHGK)Nf4qU}CXJ zlWn5CDUBCKnMQUn^OTbj(&`^sV0Or4I;wHd=SPP*TAU90ZU1yV`h%qM3y(qFW9hEv zVWECEGrUQj!c~2P4{zd1D){O?6QSq7?NZfnwk^R1@1FwZtB96v=FVygv&~3QYR4|?Y>w=_a z-thnd&BwdKMqxW>`AEYGyb;RD-McEf@z{trlfq_~$MM_OHhr7=v+*@!IL>674&sD_ zXV1{Z`AN8Bio-x7P!Y)6c;^{k57KtB&{>Won0yF1=UGFoS=QB%%TfE5YGx(nMYt5D zluZd^g%JTOfiA(*aP{y9l;uEG&ycUst%z{pqKJ(-872Ew=yQ(m$HKF^{du8Ud;?bw zu#PVq&?4DuGox*>%iM@{&2wv?%E)MQje*aPaJ$fWiWD8m*Om_tJK)l zF-g7Od6sYFp1n$mEhFUR+?1_dw1B~;ODS)O~kXc4tL(vFw zo5BiiW2@1_!GLSNKQhT~m^u?|ghB>lmUPW0-E^@OJ^Nw-0l|0x@zN%)j|@K3sLZLr z;-^cBk`mDpL&b!mLmfb%?lUR#<`SMli4QsHR^&Es#8}PxBrl}%vG+7KP8-AOTQl>V zOdzKnau}FDguTsU0}Xavr!=qTB7ZVU4-O!CMMicC8{Sg+9(-0lD6wimjT)R+NqR90 zyJsX=*^x4SdPyxU0Khb|FU1E4@cs-S4-J#5b#zqyG9T4`C0!y72*;)bwpHgTEkeUF z2wtyGHAIOI)eBdBlL?XuhMeiVD-*{iM`yU$7j=lV@@grN&NJzOFT3zdoMFtLP?hi$ zlP&_}DtN}Mp)zC*?L{Q0Md;E&Q^A_z))^r2Nztc(w5iOwQAU=@l4{oiRAUYtAt+BL zDXzZjsb_%Ah|P}7WSVHjd#MF<>F;y_1`*wj!9~9DK?lB{HE-A+@Q>L7hwOsjs-E*A zF_H*KWmp?_wY0DJkZ+njuH6B4|3#hpOz$@VcD7%=8W&}ZLbCC!V)5FHvk=#fG8Tx0 z_)shH9hYqrgnV~pPyonS?-rVRondZdKWsj!-Y|D!oBZeIDi;pshTk!zH~MHQBgiIe z(Hkbz(L$^k`t-Xko-(IrnkAz$-0;cCAFbYbVqJ&2sp54n#KwX!phZTT4+(|z;`+0D z8@AJr-ivyXZF~(WEnZ%K8+N7r&ecZ5eWfZ0weQGy)y^Ql@%S-1rXkkIKPCvL$@5^+yfm<@~usK~D=4n04)(`liWW+ExEWaEY}Lg*V-^O{{$cKeL4 zH{z>@b&Uz%?A|*Z=s%EGP#sVid_^U4l)2+%LNT)lWl3cf0~fc~_oRdk^nQlQK1#Jp zrY|roK%7;C=QgL>JMyRrelV?R&MO<0#|YwEwJPe$0SaceojW?^y^dN}(z4 zggo$|H?W%gO^Rc+w;$WV(5p))x4W{PIwZ&PR5`-l4u|%#u}{XGwp-(P=gxM&D1{3{ z>jz<}9FPK^X76MDPIrZbGSVr>Uz`^y)UPe8aHEwShg5xjL<*=+$D*0WM~=tv^<#eD zj6ovidzp{z5i)_xA5a`G*pAr=*hoCiVjz<2f^1B}6Uj2cfgv&}Yi!1B<%tQm`&w}? zbamB=!0PF3E`=~m&EU@lyw+a8bh`+d7)V9kTAU4m-0o3F^{g^B@s2^2&6fwIn|F3{ zQYu5>z-Qv{>e_6LQGTL(G1y(y$joS921m^7j(mf@ayzVy&Ljd{ZE#K?bhbC zZ4!r{I71=Nj)MlQCG8hia4RFKONXXex*pkEiOr7sA>`?L_2Ia1Y`D79?FSnOcw-ue z=2J>}&h1r<$j%!0+M>nvDnF9rdvD-Mkl-)sEE7@RP1b8x+(97P8{8=eeG!{kY_9$x zc>Yx(e(5YQ+R^FiprKt6uP2~!Hq0{VEn)v*A~;6uOk{G4)n|!%1CnBZ=seYz1f7^B z+XWf$=N1k0i;f#Z8mj-;im9!@=Zc%vEosr6jG^-V*(?N<8O(EfS8aP#75^s$L=ww=|ydvXM%&?S7v95dy%0LLAj^! z^Ujj1bDVrSx{I3G-z$5bT;Bx)kdaQ75wq$wKPPz!^{XU86|pTM$ibq%zr3`W1~v&=Jj;$UhY(`CuY0k~jdNE<=1W^1GB@!E1%gtp;q zwJ43*c_wqp$HcfMM89jjFJ>@J@Wbm7-(@$1va=GXHXD%Tkwx0*I^a9n*$9NJ4rVo@ zBR^E~O$9x2IU^95GBD%`rGj1mu(il@6BauRaT_C9H-~Az<#dfA4p%=VM8&xA4rhS3 zj2zZCLZoqUeBLHh%Yuy`^1pVH`|M)U;9k_>zoDKgzICof_Y(yC0lZPIRK5dT?YLR- z$l%!?J3&r~T|6ndEQXv+u>R;gByx|XL9Tc_0IjJ-T@@cBu4qyq(|5Q!_Au&fVVsc3 z4mZKXgaAxLtNCR|nlu!8F|Kbl?+ML*xMSJ$Dx})#Bd{%|G8svb<~+14n?KWe!Q2W#)C;_~le!GgFyuAWb8)^WB7 zjPu8~2ElGw7-!C~U(##ZAg-ZTxw$!hnFFsN2aZcHzjJz-BBcJ&a>9P_9xSn{)(8#C zW#Y$F;Ri@fU1XXBKk>UNV9Rhyk!_mlO{8X=}z%7=0oj3CBU9 zeZUQ1svXSmgajW>7|pKmQ<0W>kvc@U85Q>{T-S@Y zX<2XjouE#89rK}Cpo}XBkKXn8OPCvPnFN2fQ|_&WT=6Pgd{up9$P{~Ld3x0iV#c5< zs`j%wiukg}y*DKcgCIvG;jzd~1vtv@a8Y6aCIOlOwk_ykH6xg%G#gsj~^+`J!UReHY;surNIcYql z7{6-E%xk_N_l6pcsd*zOTHwgrBdSe~*(ej=cgb8QRH7#n+g+TWZ(qD0uB967jQAmUw(``-O`5;fde`icrq zZ_Z78qj*k;MOtQC(MAzmM z1TJgIW9+SK8NM~ETfFj&T7I7~&dpN!n7hOvJ{=(HdsUn2Vz&%sLHA|l4)-NcV1XDR zSY|Rx)BRTz?X~GD!4B*nJ*>W-aNJqfHhEeyrvK4zoJ3a^^o|7+`+?+f?_BDPaZ@sq z#DlkFa_e!fPanT$ihcdd1APjg>@*3dMgP>VuW?HbPNL|k>_Y5bDo_mNa|6q--ZnUZ zo=64(#MNVwg9TG_&6{=l)i#94w7m613pBjtwxQ&x(PbHmP`rJb4|AY9p@-8Vt)R~f zgL+d;qI+YdDQZfmyt&|eH1c&g!12f2L*kc9`pY43o9OkG_^{^k=ixq(#datCV+8?04$a8Zb ze4}gJMa7>Tw>)AcNqIPW+$(sscpG}U=3bbMpKH@lYDIG2?_lS8?D_n(m(>D|xAR77 z@?e8Hkx@SWtNwkp{h#))-=m)MES=P=FK;E^1CJk$*)nYK{SRVGi= z6<6sgGR0^W`vydC?7uMGfy~dnuQSZFbdS!znj`}fI<4$o2wqz`0RRre%gJb=QI9wlOm}=UA$z6L(gHt zw?^GlqE;>3ZEd$$<*dpcVz7I8QoqjXis)HU63&m@8@O{7-4Z}`D(_|M6Q5(0VAFEzbv|;? z8*FZr`(R$;Y8kd-ImK`qN?6a&DDLyq4QNwC7;-w_*ex~I4B@@-x60%HyixqE4ocoE z*0!;KFQnyg=XS$SzOmNi{MB|i+RWB`ZT&h+g|WJJfFDad5P@(=*|Itf{RR-kA<_dR~>p+?gkzMBu?J zXKp_-E$iH1D_~Tcgz+&+BkG&B(oLyDmEurWx!cTlH&+$E9wT@QqR77P8lO=yJ&I=E zY+v5TC1FamZo++BQDVKy)S%ZW2+%mVTC8^#G=$`{*Yxrjyr#yF4*GnE4|atA21Epi z1xW2{c^Ur%HqIK1ahh}_7>m~oqNcD*cJ>^cJ^jEd7WHwzlN7ulOcf5m;yvQ`X_#_;R}FjRoDY9w!e_th zkJzHm{x+Y3L};?gzW1xVS={!V`W7f+s6{u<0s%MW7_2X;0%}a%H_psp_SRm7Lrp{G z;o`)N`@)FTVj)^s4>LU^Dq@idu=B1)Bw=p1k%)+oEN!Sb$salZiVsjboC#^ z>ylyG4*a#;x~X(N^^=(N{cV$fI>vhr=rYQryTo@3yYb}%!m>eZw&9Ta702b0mSfKI zSs_`~YZ!FMtiC#V;8QZjn4Z;kaKUnRi4P8`U%Y$udv4?l;HJzEB+qgMx~DHsqn23a zZXT&k^im&})2paPR#JlZ&m^W%^Q-Nh>BY>$A3M@dT0YNl!f-#xo?KLYR+e?3h zEI=gO;I&+`O3KJm8ymSfE~|hph)!!l7%^n$KHGxj$4)J1P`2naxHo=huj}6DUxKR2 z;SY>dIaTissk<(f5WHmj7!ek%;%$68p=Z*SE*sKri4RQ;420~R(5%KJtvi2Oen0dC zX|xLk5+{Fw)SvJLl_oLQF5Xi!r0^d*aKn+yTLz&^*bY`dtE=HpX+TeRW;UEQY7^C& z9c$Q9)n7v9O<{3frLFH0!rs9KtRHA|o#aQZK3A*w*&_(@yK)x4+V47_3u+Q5tV)& zQHNzxE6VA{z$gfs=8L`Va`BxDXgVHe~1?z6pUWY)Pk z^j|R86jjro*nmm_HgPu5Sx64_F+$Ec%NA44K+#Er7*m7SHoRMb(xFfm_IbVT?Jq5{ zj5#zM^p)Zh_hH}X$6=T=oG@VusUU#e16q{6n*DeZ0F86222ax1yWk4yD{={oraxm8M*Q#+LHMjlyrA{!}F%Vb!cqrdFS4PAOP+DVPM15-_d7(y`QX6pJ1~0)r&H3 zu>t9L_7(7p0*XfD9fz$1x}#y$7G#U=k#0QH1`PkCT`M7Ggdjj_WNAX6hvWT=cl(JT zpU4SsDecx_K?n9@G|ax54_5!ABtBb$2-BmCHx04rOYbi@^yOH`mt%ar542l6i;$n_CU+`D!E^5g>5S|nGA z07hKR6j{k=r~szdu-x`zM&0vdvWe!~SG zq1gg#qK)1-N$rstLG43?D7JC7`Nm4kAV93k82g0r1$txEXEX_594c_RdeZK13?`A9 zdAs6GeHe*Le`Fl#MvPgy&}7=2*c=@j<<@WY_o2}K3g-Dn|L z=d1LWt5s8Q;2T$fh ze)LMlJChHXR-?C{YkrN{Su!_ui}o6VoI@vACl%)##~6|Nxuk_dXfW-gGxX_q{~|*v zHQxEXpxAV~W7PF|k0Lmb)bG4w(6Z*O^IixC-IfTY!R}T1U|q>j)n1hczNLDetLx7$ zB+%Y}#X-?$Q5?k0{#96Ekd>|Pn}#GvfLd=B?JNLK=I858?* znm65l$;62**^xqgi{H$;*PU%}2+f>mRKFJ$GGOqG9N1VchT5ZT?O&3I76*a=c{;!% zsUJaR9Trk+3!NV(HTU)MY_DBl+@1W6c0~V1T>WQQW-y+XxVMQsf4lqFU*g$*7fOyq zJ+1l282`Pf#n%V4KJWMqhWqQ8|Nh9OiFps8pTS`3fcC`xu{{2`aH1#$_$PnZq5EGy z>Sv%8OR1dLoK!|uo=RfRcwcC=;@|qCr>6rbd+8&6-GW=oh=BG(!bp>HS{$bsDCzaowlMwag zUDRI3$ylytsSl@?f+)Hn${i6)I!&XmVqa$5*Hui>?QDt9`%7-HU*&X*BH7yYZVw~Q zb8k`dSEqiL3;UC#H)7Sk%R;0m|(0~Tea zM`*>blNJO7}@rMBBu7|Z|VK8@}7g0(y<$Lnq0?~^6) z95>s=4!~DB+SpWDsUayzg?g_t=CGOq3cl%A(I)g_Ar+A+O3^SW*M2v<9a1#&e`dz;(jOFVrhS{rpW`#YeP z$nZ~;!oK@P#}d~sw~brwD&q^}kPAb1{#DwBKF$Ny`so`;{IN_+ZZ1e98>!ixfd^S= zYTN29Yen1pBOC>J)schR5r;>aHG}0PEYAk7n7A5(u3*kG^Zr-pvN>UHA>-!v zoW#V`5h`&~ZFsa6x6@k@HJ#tH7kaQn5n_ux1qv^X!R|Y=q3_@KHeBts9N~OmxoepQ zzwexZE-fE7ed}Sd^?;A`-|HVw*_3<;fVVYttV}M^o1fI9q^98Reou6jVDIDU@p1c} zNhE$y|QsaWN&XYMSf*00z{O&>)}UeT)>#t+tyBya$~P%-=vz5=B4i$*TeQ z-|75UUxxroB~$zXKui@tYfRI)?p3^OvTAdu#fI=BcJeRC$&Bo(JNdy~Y>`6>TYX+m zXJ77o;v@N4FlnYOf5X4+&SR)1<@^$#UrXCjsqZ|0Wx|%jxmnDgj~tz95a}6sEamWw zzMIEL-rE~TH||SDW6xeNd4F+~$IC^RAD+c^Y3#3md302B*N)DIt+q4Aby{U)*-^Pa z?P;KuJF=qGdo2sSf7hN|3j5D2^j~_sbQ@0<87hzTq<1-r*dNX$z5nw-8WYpncSD%- z5kmvW=k5<9bGA>|8~iKfF)5!vnE3D$KR3Fg)c?2>!A}T~n>taRuCfv;x5U2ewSG7T z4{iYa&rV`I%N5`VvUEM z*-SL#7bgmCYm-jmUkJUqx#1OQl-xN(X=-ZTAKFzfcHQ+M)Xn@YDyHt3Mn*A3hnf#9)J>oC0c5b}C@}FiT)YPr}`=v+tSeS#JoGXWYI>ikcj@h+3L`4jLw`>9X zSn=nyfF*_+&i`#qDSlhi+<8Hhe=nHdv-o)zUG-kR?P#k&NrUcDMdAi|f*US4V%D^5(!e=L|1;{&S*^6(J5*JN0kVwvAJt`r^~i!iNoW{=Q_G7XSTQUzuX!w4$n+x^6ui;*-b^T69{lR~-5*!%dM9#|lVa2B>XatvfBKgZbCdx z!21&KHBLX#WKQo~S4T%41w}=x{`IXYw8~svUG<+SRerxYK?vVJRG;rUufa$1Yc`c-1kW*6?gO6;cQaD}5um}BJAN)-uQdY~1 zd3kv`N7X_2a4*j~TJ{?cJ`H===%jz6b|WbUxuu>uOxmb}vNH^(9B{u9@-Bkmfzn69 zG{;goANPoH_jqDy&-jW4=Y!|NO&5mVm)QHyLt}P#$Xk||@TBoII#G9H$s_|l zXz#83xT842N-yw!U+%*Bs+@D-fk2~zpQ6#l|X@YKS=YOY%@WW;uD|v zaI`SiFk&(Q4U5m}j(%;*#i-n#tJwX<#pRF)cj)>`{u^U~ock#CsCIUvlQnWv_L(Qg zY145uwSiHf$5JxwRETz!QO~n*3eAO(`8Lh0XGV9Lj5fDh0`+d!9)6$vqI`WI?7E5P zx$G_6aLaJ~h?PmLTg@h8=%7Zgdo)xI`YDSv$II`7G9Tkd^V%Jv=A#-(*+9omd`t@} zJ&YiR&COp)d{H8kE3B9vXE5JTp<<#;!){L)@7I_EF))9qF%7ag&f=ldw?2JG`#oTb z;``G)tjzay-d31OF=?N%6tYrxcNs6h#Jv!^LzE;VRdj0}R+Zd1>fEw67Dv>;>2x1# zn4%w6xQhR?GON#HVTEeO!r(!;|dzXXx62^8RA3m(2 z5ZLH+)w5^MWOQ}!-CetV6mfrNu3_q;Cg2wAq`EKg`1(huY4$(*M4&s9v>x-Ei}e?W z7Ah+}lh%Am=|0;;gU{Uaf7m+5AWwpJ%eQTt)1J0%+qP|M+ICOdwr$(C@o(GOc{gG= z?%uoce5p?rRS}hy=Va#dJD(B49M3!6faJ}>anFl{dHt}RHoQwO3knqRcLnEX9O_)! zzGCB>d|Lyo@eu9!ZGQqrh&;mn?#%o7+-C4YSNp!!6Gaz& zu2@-X7>Cy*)5k|R!&%+Rd7k)?&K2~7*YSUGHTANA7|g?f=E~GL&u-|o9%$j}7z?X2 zf%ixhnKAt1*cr1X!koU00=!?PCI!v;z^io6dAh$G6X`*<|FQOtK5hz?%^-#f6{-$x z{@CI9e-No*RtXuH0G-NZ3w#MMU4IC$&JgkjuJkxot$QM_V7!wWVab-rSb9&cOiRp8 ziP*_;oy*~i8%v{(e5u|-a?LZd#KLp87821&4q0)FG!oOzMKO!h8*wlaVvk3J6DD?E zoQbYE&SDfrO8^z!ksvIw5K9&?WUgQoaM$Bm@cap0Ml`yefL2L9-s_8ixa0o=>8`e? z4&~k$z0F6w8d!gc%X99+1SRDXGy`iMjT_&KH<-O8f~e6E5#DCqYHY+g z{Mv4F$w!Fr9M)*{qrG1+fBumT74;;c<0Igtp{X+-MG(KmG>twS>ls|wMe)$8N9Fu7 z&vNWKo#!1RxEYl+Y(GDIk&hS3w2{@eKv4)Wc&0Km6)CAU&{l-KR{8?toI6Khg;Gq z;|#rfhN~*46dqhx2H-y#nl5jg)oM@V z?tes-HR!Sd&1Apm34B+W?l1e^C}9fg>~tW~v3@h;vzu;Tv{fr>g*MMps1J@`zfKD( zd|26RsfB*h2)Qex9B-=&EjZrkBCk7kk$-~cwzk4uH*dt12BE_VhVB-d+nnA&=yW@R zVN)~b$X99DuY|0;dASah9Ii#+A-L!dt(56Oh)>=>qNo*9wn8>KVAuQ`z=ugHI12N= z7fjRB<3V?U<`$LWywbJ&?xr-G^gAPyv!tSR_=0Fqh}!r7qyJ%v`l?7e-jbOZHoq#W zHY>5L#X~hTV|6&7sDIS%E67r`R7;O)+h@5s(J$rBkRxB*bj5t#WQ(}RO@(5~_J^{P zwP~&X*&q#z?`eShhT~5}QA)_v4vx7{i}08dHWVa25DRlS-!pV+W+^b(HYPu77l{C(%RSaE|wHAV*dx{4ICQ5Y5HZd_xT~txaEzmjzcjH z_K~4q5B}GVR>*TaN>|!^OrL%Z!Thr^rSnxn`t=mS&zkCB(ZW zdH?H0uJHORXiT?L)QsmBH#53cZPb{4?=<#gb|LVRP8W6Dl8(T3aTJGtJMt6ka)($>-h~{#51H&}YzR6>yNS@$}p6{Erhfl)vg%4Jc)aok4*L~7hwCD*= z&#u2xeULzPn>{W7@^g9=2bB3hG>P(3nG}kCFUGfI6OVv9=vSRqQqE>hRytVSdrDDr zW!@dYUA{x}7S${jnqw9>C(tot@OW~pNxE210RygG9O~)xy7TNvZSG< zHV#cl0THJHdcsO|^Ze&{MB@W>6TRY9zrc^t8vz;v-^L$eJQniaRXXFlGRO&iC85?>Yly%A|n^(Qpw}IAD;(P z6X+UIl@f>-w^@ZS=;N5-qOuPU{m@d6@`?osbmRGsJ5XHBYmA;otZZs!+&QnV?0kGc zCR(?`^u13&lh6^H_Xf&?P=JtO52Z{$ypbcK6iPZEA(9nfD7T1Y{Ukc}k*YDemLP8{#2bEV_2NLI`+^2g{GA93l4 zs-0k^CMUDbcCym*ly6Z@_;m^RC1Hvt>HvMmji(GKfYFNO<-TES_7STEcm`;csR?mO zN9qofjgK-Owu8x;J`F2sCi|m3ay~YJE}*7Uz(a^fFVDOyai8U2 zWyW=o&C@q=BxCaCE0H~xHAAYoS>sMhN{{IXein{9IW!^TiQ#{xYtiY1beuUc?+L(K zFx~j@@Pjxwe*5ueJ3Zj$w;yzV8IJ^BwVvP84!IAM`9(gq{eHx=|qZuQw0`xq=T_mnwZ-Vp2QCyY;VuM2Q)NWG8Hjh(&2sTMmkD;UItzU);y2 zVoNjS8w)ja$nOe0_x0~@rVe8RsDQR#MWv-gx+R;XMY6TZ4AkzqA6{YcR9i|WyO?7F zj&dYEBrKgZxgzr$O8b6T=>t5T66b_*qczi>uPd2@uN$NhfDWag3o2EO-oOWFlTaTk z^4M!{aPv^@yGQe!lyy8z1_oq`I8BK?K?3c)hnwp%D-KN^I==Z3z*v(CD`|ms0wLPrr2NI^=bJf9%>D*+G#L zYF6YB8dS%}J@6w_SwDH@_UVeg>+0f$y}h!<(kyIa%QvKdG*R}HxW<$6|GQjNR|Nf^ zz2Vla-nQ7-SWR^+oMghM7$)?#Ui}*-`mPv1WH5Ae^s$)~?lyO)#O04p`tC4&9l25C zm+CNiGe{jA8c|in4pgAFBw78bmb+O0%{TWuF=t@Es{~gpn~MJ7HfkHX9Mk!+;mg}> zgU;UowlzQOQo3eh(LmYdkVA{J1OwRtu&MG^DVx45l91VsTw*wJjf*!403u)nSQ+u3P+HPb(s{=LQCp zazg(iVd0%%UIZI9i*WEQ-ZDOMH|LCWT(Si8&!8vv~tT=OqgFy`Pc&eq|+IK^h< zL{n;w3=wKfn;pj_J1RLEuPTX^jia$-h*y0#h`b8s{}oUMU>GTV(c+<)E#=(#ZkiN% z6psat^BS1(#i0DJlZb^1B}4MELMfWSqzzU-KG$A%%bqj%Ea?k)c3dMvuW3B*ziTU! z${+XdgP-<8Wq$^I5C@XVqR#Un8fM6C#X1^Ix#BI{W<5t; zxd(k@TzFghLtC<+nR8vW2-gTN1arW#1@#-DK_Lkd1H4W_&2oLhME$Z@gZYl&k+7yT-n`;Ye!%G;z&ALbhZdc zH$s`63K+oZwm5{x+CPlE)c|<>_BE~C!@~ZN&^+D%wVAPe!G%LygEPkFUIGwciq)24;TE9*2kyv zEKW~8$ntCb^%2-U4_K&PRH*1?m5sDC z58|rYY9)Z~5UV#1`)OgJ+u+{&NhJ!u3|M|G7DtPX--{9_wc*UKt~7JX2r;HKq236m zI#dR((3NfFU?HD(&6xx_TPf3Pe$p5dTSHME^u;@F3B%A>U{fsuHWk*ug1&FJM>780 z-bF*8*{(%&k9mcN0o5`jKq#R5_J@`M^P`uQSL;k?)Ewu4K6X1p?3ccz7=$iRBoX8A zz&ZZ~UETcMDk%d-H16HS{teES=(m#gdhO-mrL?345(xMK-Mi3q1N@eKPKqwsQ>vIS zTtp@m*K@$eQtATy1Aj`Yn+v@g9#@>1D@D5KfxuKqoOg^0BwM0mgAsz!Y(5s6Dyu{e zj7aD77bQUcTzv%d36&oo+YkA@8Q-G3GLJn7WGUJ7aP5qxCFaSb#g`?r44Hb7J*3m@ z&kDHNwoPxJ){^RDK*Eam+`6)u7C&vfEZP(D7x_{nc#M?GUhv;A!0;1c;HBj-jNx+xY{WkQx( za7_saUUX0Jdnm>@0|jtksO|h*-d+sU>C{t7+<*Vxm_Yc!z^*rGfx2;6GtQ~=)!qwg z%duJn6#+F9LI!n^2eYO9-UBRCucz?6A^wiiN_@JaGBpF;&g7IP~r%J z>}&CJa<7Awq1ERFg92-RXG@W{A^v@HNi8WCPZ~jvqxFHRF4i0)E@Uz7H->_L1ivc5 z4$9B8Tcw_x+W|#%1!X!s%aN-b2oA>v*wc{>nudiDWQMhraQ)Jw9eF(+-9I>Ec7V-> zQ`IJ((E4Efxg!&h#c5bi!FaF8Jp(mqrM}yEkhUmOh;z~kxVVMPCQFWP{jRk|YZ<6L*n=&07naiP3o_?`W_v zV}-Pf&T+jDl+q|DBTi-6{EIYSRth>OKBCsU!XV1&lbv(Y&<>K%D=JryF)lBWb63)Xu8%0ZnV5WmB`&Q zaAczLyi}-q8brwdL&-!pl$WO$N1^wP43Y(L^)0*^*d`4QqA$;^f63hsTMy>d1UIrNf`a=?Gop;tyC$i4t;!43P*L zA;OJPPS7nD!GF*6}1MGl{!o6%Vct81HgPLx>V`PgU4VwpvP6XBr*jQDE-+-1Yd zXva8iaMq?w847|6H$F`%G=hFwR8I&lGSdr*@sz5JGK;!a)%b40RKb;%gs&dyP(M95 z7?ollg8)1(*2hwY@A+WT1w8$CjP`uWdXIn^>TTh%bY8*cNJar1UR=q1UoKsVc>q@y zpJqf^F%8oGZWwIoAyDmI8n-z$k7cj|!v7q5h&Ujtr>{Mw;cE-DnK^L#$4fTvX!7D_ zg2)RCjR}75cmo*xK{e4FN6jrnwL(Fj0r+h?XTg}KVg=hv1QF%b<07T2GBV4>B;uT) zhWM5eRP+Pom0DGPhSah6vEtXql`i|{0*+c-TAk;P3k=n#@|_z zxA4%R6SQc|gI!4OB(XBaj38#Tfl)E|S=&Jj-sdJ$X_sMLQnV$IPbAH4g!0pfBMCv~ z^AhUr+c^nPtEPntoY=%y>0=g`r9ZA6aZ%v{M^m0Inq@?d6~nl*GNbO|DDidHh=IAD z=(6gwc@5T&SCBz}!F4Rn={Xyb-aM(6T!@rY)Ptqx#rFx=VBMzC%gX45rP6T@b(VC_ z*!sq)kPQ3z7|zvzwoRh7z2Fqu-uuM$qr4Qbg!ZS73#3$7HjUNNXnHo?G04(2EsD(q zB+an9jJMX#OtC^DwU! zao{0N>|m+>fwJ9+pdXRG&?9z-H|vwpTIv_ZEOhcl6Ne5z1NqApU(CorCBP+a=tvK> z+Wm;Aa-LEFCYuErnfa6?dDV`A_Z?(*Ja+7V&CE-Y)6aR z+Cp>g!r*q(xBVsk{>04gY+TI{UQuCZ7_XNWU}1U{l1tp31E&K(9ee(v0?V$zngP4g zG=~p^+u`F(q;6K2hZHDdC$G&sgU21bG$2(WoyiF+|N1t+oJX@gxc+J=m`qrs7a?q= z$Evk#(jxl?uYeE&H@#dOo%Bb8so)RqW!viZwsT*{A2iiht(W`zPSns!Nm9JR-23#v|`f=4<&X(pv zVWe$jwO<0KY^dGnnhG23!qyk?;$eKR9#odVSwbM{9g1jHk5dw7$C6Pe)a5+RJ# z#(W40gsZ~|x2PpHZQe+vDVEYN0bV!*&Vbd0_WS@l`0V}b>ycdUuI_CB%v{Q*a5PzX z!Mh~kK!LXdfTKgIDTuaN*s5|O!RrmANv^1y_%HTxU=2QgAbCOUBb*Dt!+fSA7Q(+r zyLJu^Gp6_Py_zq+KAk7*4qW*cWiYo0dR?R_eSUZM96)-d`uhGlFt`ZZ5o@=`pjV4( z*^`eFnj#L}%zb4OYf}u>J^^UVm~U(kI4ML4nec zAW1G%?$EcTU*>`!=XuM^K+d|rbtHp<56;bHm2$+2y%qD<2!WU|=Es~GM@e!}^q>D$ zeL-P;zMuFqKL>0kW?KN|EE!9}7ajRX7;%p@*q%-2Kv^`r$Z*dBa*j$LyL|6_q zUj$wiR5nQ5V&1R#q^~-j_t3%aZzhD#W1=pznSzXF?gDpwF+W?#bbRp3t1?j8(5YB) z`WwF@9V!7)Nq8HT76+GlvRdOu)LNIiFeHYx#4}|8w*xCLq3)K|-ho9}&o#u-l1hI1 zR5%oy2@W_j)g@GuOA>O6q7vo2xr}v1RiG!;)zuhfy$vKfHaq`Xvfe=Xp!q(xH^Kvv zGiMhqioD3O3pYg*CRtuX(o^cj>|YInQ(A4Hzas=HQhBv*Y?CS}PoQ7Jn@@e*J{Wg^ zpj{7sk!e^_t533_)3SXr;NVQui&J9Bx@U5o2|;ZFlz`+qib~YY?cZM<7fl2sK6Q&*d>1%M`TGT&aNU!NTf#h;mJIG?=!5^&ZUWzwMN^ zOlNDfYR#cUYz?!?4|#c07*jjEPKG8iPJv=*s*^_(`P z#bSx;3=V>$W5)omT{3Z+?yx)8|uzu2jcI z=^^##uFT`kpS4h@XGbS7PPj)-f98Bbc#bZ93|7@?_N339;(3k(T@C8kC1UB9yU{R!Tl%={4qguhL7+OvYA->n_(YbyHF?Vt05YhD)` zD#hqexa8jzBly2Z_b-ML2`8b({zpZF2Yh(J3doDoFeTCFwTvP-6Z%5vy-VR0)4TMR zKioP5(>PJPq_NEqoDK6joLLHZij#Gq1*GLy^j{mRLVcFz64C6#;C%*KMC2e0j~fwu zUkG}L&<-b-L63Dgz*!bs@!T!YK$X-Bg4?e1^Nzx&K5*SGx!4z_Sk}8F&{Q^ZO+A{Wy_Cp+t9xJ>@3!9`N;#lMC3Aj7) z>GfFD(1?-5Jb{bT7BF&iAL+FJX;8!EsdobRv3%Z5$N|QXbrn;xgG`Ze5ztCUpy$1b zz6?&1pt%`PrqRa(BB8zJ=8*G*;PosGw}map@$lSBH^Hy#M(LE-$x96r=&C<(Tw83* zh2o5e*4GKUZI|y?)s4$YQEGbp*bgClP)tgVUOIf@w-YEM>49e*hHdKW3G9nV6&sZ;t=nT{1!|&Iz?zSQK!Bu_+ZZg7FRU z#?EjcZiSRC;o65`1v+s5hBvJ33VDA8)nTj|dONcFd|me}tF|Y&CFVbzFI7xQfzmbR z^5QM+7u64Qrn2H`Wx*?r(+}3F7L?>sf7ia;zmkmlapUuNpVy?ErWcbYO~=;FY(mLN zQiqWLxl6+V#Kd+;Em;pySEN){d$qmG4SkLQ4H3kNx@r>Ob(slFF0T}v@Guq3co@oY z*s1yNnL!U{)%21Q)^k4A_V_^KjU|)&eBf^l6z19d7S)u6-o{gNFzrR~1pkXR^DAFh zoZZjMyl)P47rT*>xDS?A_NvT+$skdkKas8|f6oe{Yn{;5l5xzsLexxrydEtExT9noB%BLSI~p=)RK>bpt(K$W@zo9_5rM z`o|jyID#{|%%6$rh;CMT~! zo|AH}NzXds43(BZnpRZuI?2%?w7I?197IGlLGg5X^XFVhNUNb_hq1>BFDAG;k-)s? zwf{u8(bwzG*B-uBid$)6XJ~KMy^dqsTXiwW&T#g<#o0}cHx|>6eSon*f zNNF`Va_th-(q}|sl(XIQ|2JFoADa}QExOl(4)l2D!rl0;VYA?N{CaqSWza8Zt_C$n{6^QMBi6Y<9FCF)H`-ps$Wt0khzE zyQaCsieS3_ltE{r-yQCJN?%aZyr}`HHG6GmCvsoxkrgga9QW(9@`EH?y4o!|zmV05 z`v-{Q{T+)H8p6u&Mb4!vw>lLQO%6B>2OFkrYyaFPis-$-{Hb`?z*c8}|784IL6Yux z>P0t8ckk?sO!xc=LL~)*^zA^iW+Ex#5pMXPU2g5+i7%Ng<5`gsU^e55hqpP2?9Yep zoa+U}mYuEe4k@%RxBHA%0mUBi3`{V$q&z0X?h0OxdAk~9J|&8P*Q`^`=e2huvA+Tu z)W1}^wV;^ci|suYT+taE*-0oAn6-aUL~^(d7ZL@l-UYg6XddTXz$9#a-jPC1DOuSv z^R2;P4x;6azkgFhWXq9PxE;7sobqn06V99kNK_;)=f%prIXt9kr$tl0!ngW`_XAPw z5Rh$zmqHIM;=r9&$$ zRPe+up_o+tm;&G5{~~z)k05EI0=w1*{u5J(tD@&;(dz>AZwm|)uU92BJc9c2ebG;+ z+<73_amQkUFXF3|Uh?A!a$eCvbqCrty}m47jRZ3Hw+0^}+m^-7a!nyn9xz2&L)GeL z0yJSX=}b<}X;>kdKwBrw^S7bG@~^|aT(^EZB`}+_HC~sABq&wZ{Gu)-&*c~eYcEa6 znhNS6J1b)gYrDd}e0Vklosg3bCQQBd_ll5`O8n*N?75e_(1A7-8YPJ<_y__2cgIU^ zkMkT$AdcYaP-jgNgwLm!*K-9BpHF;;Gn3!3`nI7__Cz)r%nmHizt1zZ!Vc^zh0LAN zDD6Vjxxv4#Oq{3~&Mat0&)QhL{;2o&gSd-BYENaK1l2aer(N8DIM4*x zD*k@{KEw5xHSJxeMrOMJ4?eFUs?WnCd#VO3Co#61F@o5=>-XD2L3H|6G+MVK>QxCb zTW~APuSt!heia%VqXoHv;0>7dw-Y0lB8V2&^_=Zk0IgBxXE30;X^z%C$oG!cBzbDE z>=JVGZw54)B7~>$5NwA~)F*+!>E1BlgF~_}nP&@XYSaIoCKRDf2miYRyp7*ocVjJL zv!z;NX-D+ zljOr-n6(+3evDck{^ncbT1y&TxwC+zRrkgB*p>$M3p|^5TwaWw z?CkbpBK^{lbyG-GMD~1$JD+uHVY9HX_;V|`J=r~pbFWG5O%|ml;To?YsR-Hd@MR+Q z0S~bfL31#btN2T7G4yT2=~#sl_3^G9%C{;trkd79Gc;xZz^#pC(O8e%fX!4fCDPyU zG5(7xxkbfw^{xi~#gTh|oFa8#_2qgKWNv=7H5hi&dU6A>4)NU|n|4tiDL*7Soo^s) zn_Sf!F#tC-GNz5gh_re0WU{c%0}%aKqa(XJTYf^=vzz?S=5w3JU4aRZf;AEw@a3M~Hq%hCh^@Vm>u3}~#xCskpzAIgs*DvAN#xd8(>=*cLpo8mvm@5En4 zCc8LeZ5xS{a4NP8R(~k#4EjMtM1q~cbpR$?+YI5{%XhSv*)COuD?u@NN!rD(f`dhk zD=8TN0>|dB1xZ6-F2zr5DFAUASmD`$k5o;tMR&u6dG5rVb1yi*Em9eOWuQ0Bd>irv z^!DjKR?fj8wPjlB9#QVgZrO%+?kx5C`m%X^znSmL0}pM(*`m$;{rguC??%nR%}va~ zfnl_Dyl-He`jvcgy~#4^(GGBZZKiKkoSVZ!a&p3FRTEzLx;;a5V!-+Ts{KzSr2p-= z>_>R#EqZjT(WY9vkC_;;CFsx)!NQ1Vqg(%)q=+b#x8aQwrTyfKpDlRUYk2kB^nTt? z1|eVHt#=y;i6(^^%~-?YU0%`F{wBCx3Ka_2@1GLi)aJp-`FXuNL`Fkn;W^`NS5vYw zG|{;6yAyWA7P}z#YN=YTp6e(rrO5GnKiiz?(pVZu|c@I(M*ZYv8_Z z2z3+=4MT?;H(!F}dy}mjKY7?G(~^(tL%P)e&&Z%aW}x%m9Y?t~*wM9}Zu9um{(P(D zzCC{Kb?D_~zui5{%O`xYc~?|tCt@y5Jf9a+{YH)|cI@~ppf0nfQ&Y%Fj5Vu}%l(|(RWN0Jp5~vD<_O{Se%Xt%-E`n1i@S!e zHgI?thAS!BXbX0?BZKE>TZr>L-fK*lVTozW&=iz*Z(r-V7?5DB@xHm-eJLm_$FsaN zc1;bL4@6dCQ(r9z{YrKv16P0Rywf8fUNmfdFH_6*dS`I^{G$0BHUAN8^>!~vHVnx) zOKnmgWLtp&jVcW3(JRBI@2x{?Cd1}%qIPadE8M}P{-OA3Ks7Z!Gd>})=>E$>D6Bm^ol{CChP z?ru1Ib}D^)3$LU$iZHFv&f0rwxg+7w^@KO!ZwVD7WQ%{`%PWD`VT@~*H)7r#3+9f5 z;_gS=JDZ9cPOH_uLMmF+b|+#%03lw8$(E6E?{NRxq!OWt z9)}qJg?GH#LhwN48He`?Lr;vXh~$Xq<@OWpgym(G`lYQYb{Hc5&^5praE?7exsqzK zKh|$?q*kw2-OSV`&g%<|&dN$TEi0@ufc`IvgP55Sfx@zF?i1zW z<|0*R>uFxV08tmm>_l~5F97Gv#1FfGw}rt%( z&N+f=OIVKZZXEjc`iL`Gg}t!21npD~Z}2YdA8T2Sl;(~^ZiHa)t+Jh^XDx7O?WXQ$ zkJ#id8!`JCliaY_A)x&i+OOQvfS}R&GR8iEfIooAZSQBJ-EnE93)&x56TP9`pBBO= zG#Nm~#MfpRY)>8TpKhh@dcLd>Y;rTBq7TRa202e>TXSnC<^`Nc{gvVx8!`&Wx z2QDi0hFXOzq0eW0Ax~-c$i)UEcQ%|bBl-gE!b05M#x;3+%!qWdG5Oiy5a-c5T^k-= zGrdFrdu>Aw0o(iB>LU5m@inOUSw#W}MikLThU3}qSbY94vuns&x+2E0q*BH0`LLWC zF1%fTBz4NZ`8qvwPI6JrK);tOZcd3LFnuWCU|S&FRLO8*HR5Bd6R5|@o=-3O8S;~Y zQt_awC`Jyk)u4eC5m$m3Cxi?6sEUcwe=WgaEVSVy z5fOrlqfk%tM|-K2D+dM%cQIDgpYxmE_Bj^k%#xXq0Fu|8Wc%hN!#1s`&BPwz^9N+F zQLP3>e&tiVz7l*!fguu+khcY&+v%_@-=A1rNmD3Y7EHwi_wk+uhTk_7IQW5&b#8E; zBT<5!zo{mb6#z+$qOzwCnpTDz67Ub7M8Ic)mQcZ zItB?fGhfmqlyPE?D|h-&JB{`@o}hUcS2GW9ovZxcFeSRY&0@r=zpuRW`UCX4qS3?Iz9a7ZpO{6EKy^g_nJhv7$R>C=2Zaj$Q&RAS>?Dh*#FJUFz8Vjs zDm&7#L35_Y3Lw8jJ*Ha%2r;AY5*qjHS7WxeV6@(A`=UkV2fG@jmWZG3HCriWZNa?+9JAYgzYqWKPIu2M>zKZ{a9LIvxT_r4ld|s1sORgDt7%E z_X?CovAN=wE23)%UqynBd^1W2@HIOCX{0n z?HHY9zbOn$22AbTfG_@xd6U7th`EW*c%h<1J;}9z@n7KZUkKj;&vmZ%fAWhlWlgci zY-_OF`KJwHpCkm6gtno>;*mD09R37(Gw70u?M+>GLwTR5mLsGoJ=8{xM^|>?Ra?S(YwSNIkUCS{(c0RO>qSK!gC<0;0gH zt69I-PmEW9f+^m0-`y`nM{W%b=)u9HO4n_E+r6C+T~P6Q`9CaxRwOqXo$>1Be?&<) z&@BMDYA~+hB|!2oJ!psOUlat{GbUSJxm=DIPnUb96{6!jr-DN@M$|YY8DE>4%I14< z314~p@+>eUmqjmmYeuR4K?i)Y6c_Jjdbz{L_9vV1Y-lOyJR+ahi@4j# z>`W9ex7Ig13cOPTQv*l6cO`AMoPPaoA?wekUVVWQyLTCaR*~#pusezQ%;#69+Nwa> zhnjz=lV7lW@2B-cKP`DO@nCwAU-;yS_%2YoDOlr16FlrWg8Y08uamvn(!96Oo-{^R z5t_nx1(_1BNn=Q*+g6GidIAa(w0C|+tXZ_`;+7v@`Ca@M9nk0+$jonmXDQfQoe!g_ z$tgi!R_e_weMW{&yDuoP|HrY0T4$=FzeoWR2DPF5Oab_Z2(f%oGy3RsTa8KOG$sO- z*FgT_3ZiBUMnur*oyp$Nq^m(b;%VeHAF1j!gjM9)gVTV2`fttrAnkM;QEUL2&AWyl2A zQZ6j22R=%C+f3A!aPzOvb;P#oDCW2!%w1hwdl!Q~?=Ap4Ypi1au$7m0^&+-|9c5+n z$chuSARQL>^}gJu>zi@`NcD}c&!9Y#MZ3x6_p)P}xeO;9^8-5Nk6;k;7S)0$0xL*> zuBFO6yc~5;eRFr&Z>dq}kxF|j((9Vr2j`$l=58gZ4YCxm8?+^cvoj$@HR{CLl7jl` z&BP_iOEdv!IIP_S2x!nCVFQY23#Z?#ODiN~cW@o}Jo!dE?CywGs7=z3-q%vlAVNH0 zLPRXq?^ldT#(N${oMxgOaT2|3MbKoEDt)kqNnLp;c05hlWt20x|K13LRDT>wLp%?< zev?16ZiePdt!8lMRf#I12~J(CH1g7o0A8Z zw{`$jMgQA_hR;Vhxe;Z470?%#sHPt-uU0eU_TUEYiokdB^yj>x46^p+s4Tx+dIYni zBeJE+$DStf;uU*6B^pulWahD-jM#OCpi1YRIL&6sKz@hvY>u!l){}R7wxRdqnq?kwvx9d{>>Y5 zt%c35`gJaNQ|j~FU7tz#Q2ff^>>&EeXd|xo733zO>9hLd2xy`GSj2#&X4k+!{2E=5 zere;M_bc~!-dOT+Cc{;pt8ZfH!dKM=3n z?3G=;qDZg%YkIE6-dz~J?ND&vg<#jR^NIcLC2g%`e)^d}ME0L@z#xD}dGRqSq8G#jkzeG%>&CA_JcSM@w6niPKx2b{)EuK;)LU-mybqN-5=XA9ukbF>`pt3&p2nCqV3Q4Nbq>Kl)d z`{y-_jbjl$2vzr5lB1zIn{}CzmbOrfL-&l+tFNXO7W~xMk&zGHE{VK8C(zUEV|?w! zrKO;t1^nuq;2CoJtsZ`Xxusv=#RVQbqD*bEJ5Aw%j#fOiC#uaUq;s_I3Kcu3Xo}Bj zEJj$>oL_gfzE%^FBc!AX zz%j5*hO{`+Iarg*GW4wyPbcEw01)-Hg{Pj#ED!1DN>UT?@9+TEx|+=|)@V24l!}8A zX-__g^WP2Q|IV$QJ3R?lZ}fGv80FKcao(%oIgB^Ne8MzQOG*)nNk-_}ooUah+)kOJni*MP~-k4hwY5lY1N2=4U zs=k_EQ?sJs_?!@{_4{eK++qbu`+zPUt%i;CG*nnxHae%qkMz38)_ayH!q0nSQ>;jm zI9&5qf`e(|gOSSPApG&-WCAfO7!M{GEs;n7N8gS(yyzsL`MW8w=@S4fEKsK|+GL4B zh&xGZaNrJ79}%)p;dZd1y4FR5eq*;DTide{+KTCFJX+!}$km(m$or(iSt}?e2DYQu z2@@BpT?Shzbk|60P4+9bs~h`v6Uq-Y(?)s8UfJx9c~jUMCSr88Tt-H}JDNf8eZ}PY8al?ND&Eh0pD{ zqXiE+(N;Amw;M%<+WnKn`@6JDu(%;!`saKgZvahX#K?f`X4)CG17hfV4DCVyrGC_}L`;I4K@$SgIRzF7Rt+h9x7tg~usMN`b*-)EZ(&4936 zTIl09z_E7ii$M!r&tZE;cJQL6SS&xU7o>H3F!Pxhu)$G%@*4MAy+)M-UnbNOuHfT zT)UyF*k3jqNz}`(x4X?6T7`d*^1E z>yS@IHS>#s(!%ZKVZjwWUUIqYJ_lw8=fRloidjCi-Z#G&R}kVsN49yWukRMzn_Ek+ z^P4{X%C?NWW$di}5_}GqX6G&?c`qJ09Hft{b*E)tANzM_SCGz09Y)J+R0Q@Hlu;h7 z8?3F7GPO1QUNJ?X-kSHeb#4%H7pHRf@Ow6T4Lq9l6u=hSfm|P(z;HrGFQ$>dkU}NypM8jy+Mj(E^`nvNnC*j;HuCg*!B&i2DWyn+5%GNbsB4T5%=n?vUhOIfS~ zmFOSjzPcx436X*3zi832(CeFE4ywJ3W&-fY_)$TVK?Ss%){)1a>{u>X+r3bPXa${m z{dl7Xh~s~ISno9maa8h|2TTTp-)jqsBo%1hQ<-A=g*R^Uf6g1tOuvf}dy+?TG!6~| z6UXOWZ+Y{}_Og;>F#Wu$0)JF=fPl&>qM&BCbyVGzn1U5b%#8J>GyT;}=V?D-zN|Dh zknOeC?d|dPl`7*Gh^mY2=Y7<5t0W4onavUQJIyq6%@0JagC2U(lJ4~mf;c%}fCvi8 znbB-XwbllM*pm)}9!BJPPOJK$1zMeT0`jzxT_&9?0H^pz^)vh6U=_Q*TZ!Ey*0@km zwcFi`Vl60f-4Ut(l#1#t^CSsP^+Eo_HTHPFV^PyDM0AXQyGzT zvIbZ5iDDPvohyUj2#Rxdn?Wt5BSW0Tfz?%#8YAdGv6>R((~vZq0Acc78%ZUGAzq_B zhIfD6niuRc>b1DhgETAkuX)xaE_kg*G`)pEzTsa2e&>9m4vTB*cl~ITBS4+Emk{Tg zUFgsQ=Cn!6Zz{`=Gi7=zjBXoc%dw8L^Qy$Y2YBYKC?T>QK2byc9Ov~u{c#L?(?758 zP!X;NsXbfugA#^b85)VrUU*1e*@%hE8}IEXUx~*hf-)4x)b`pF-R0A*h~aNi{M1^E zuU}HNE!A0pkHCj|{-pFTd=$Iekp;sHr(@*rj(;6)pg+%5sfn2PYNbzSqJ~stXZCo= zcZ|Z@yqoGgP%SJT-IT+xsbTb3O_+eDSg-wxPUc8^O<fu)p`dYs( z6-`Fn(i!tEn80{6>qpW~RM1WCq#MKHl0T+=rf35sXax@su-t4tc?UU3$(K1oB_ie- zgR|&x9x`Nw0R6_@#7bO@qC@jyo>g~%4(;Z(CjDS$!@4t(5X?60-{c((+BT!9tByV( z(&>CSB_O*9?X_8CNIt&bXz=NK1$8?=87i=Fuo{%h7wj3~Lt_Wu$zJ4x1W53KsFe>= zuQIKCHF1`wKT$^lqDYR|GuB4znhm~7H>ylyUJHEIgX=?gOk-%|hnW;MFMYOof58_* zGcAf@^=oFYzSkwz#WM_KNTkmpM-v+=BVgBExd{Y~sFZSX8Z{y>Z6n zi?p)Fax0hWU93gfPh{KP;VP?nDmzecf3@%A;tqZ>F5n#sev@o25kA`cOGLzN#BMAR z*vn}twiQV?HG}-RBY^#RV82zrys&^C!~e*cTDb$W{Zt7p-r&IeOZY(pjQN4S^4nc% zKQQup-Zr8eI28C11YT5Mq$OOq+Owk3nujL@V{N1>W@}%wPENF8pv|$TE7{}3#Mz3y z7m2o%vOD-GAtt6j2euXH+ZF^>Nk1r`>X#30bm&2h4TI|)qx z9;PQ6L2W{=rw!RfsXypQwmxxheu<07Vb~kH8!dhoJt;DjQR95;gY9R5Y`R;)mW{vj z9qz=Mzi<7w%KL+x9YdoCwnZ5={W@?nMVfB^B^ zJwjgmDUyNDA3NinB}4#Cc(sfaPra*APqUvE{pR4a^Qz`5-_AuE!_8|10D%{iLW~Pt z92jWpr|~>18b%C(|2E4s9ev91z>1uBBkCz6Yp1#9J*YD3P0Gm%n;ZNI(IB zRq%-?>D>lW7-8a2;^pI1(1mCPjv}@l1YTOkeC}DuRi7;E2_Fzz0$X6K)P}bC7$e5* zT?UUp9qNZh{2YrBI4S-_C2l5Bi%}l}tLpi|zIO8nvltS=Zjk`OvD|vLjK#=n?4gX7 z%UL_9Bvn)8a9YzYsPs)wH%ScJJY%@4lsBpAG(FpZ=A7RMqrPJ5AJk&BD5Tz`tokn# zEbd?W{ogIIADjkPUl%w8A%S6U*hA)%C0MvZAoUP~?8evym_$ukSD#VmBq39Mkg4x1 zR*vRE(;i+HBM+wcq6)C3*R`^rc!y+-(3M(#q=oo#&8wd^_8RRwd64#Ax;ylldR_Qu zzgxpfd3PXdaikSw3&GZ$07@S0H(reEd2I+Vdyb_+prbc)^=aJ@WN&hG;G?77$`AZs zYs4uUQ`ZgrGXY8)Uyq~0#r4x{!iAfo|r8HShG&`QU^bLT( z!{2RnKcn3mG(``F#wCB!*)wHD|ERJ+NwwCdpi|3Ny90f`+xkqp>8r6i$;a}6TYmj~ zn|(-X0bWOJg|y(f>g{bvzsY8p@QVq7jq6emL!?g&SCH+~qFJv#Ver|H;;f{#5$bp9 zgbVboD#=4ix!)tuWwmlF$E)%iqm&b?u%s z-3oMD=#C((p{7ZOB56drx+f0W^UD@`khK580NT!T)K%Kdgt&rz6X%&>_7wtQRStOx zp!^SD+Z(^W%+~8@Otk(dAF|jXK;p{z?)#OpD1oYC`^sy5QlemJKD(Q8L z5BY{`PG!Pl6oPm3RMRJdbk;JTao?Y%!Uv|s-;8MkScIfW0cJMW=kBbd=k89j?_FR# zlOH(xMdvhgsEUhc0vS`NqiC$%yu)bFn9k`w*&&2gD9{qc&`gayfy}{Fj?*cR4XNqb z(YEcnJe4eq^NBCtx<>DMSb_d*KZl%=aw0J^OzX*+-OB;7$IDdjEiy=$-e5GR=DPI4 z2wt3ivtl?`v%_?Nb@-9%7VdSp4deJj~(O0NW{j#+$Lg!W?d_ zk^+yg;p+*16$;?%Bl2G6oRnc=nCwLhkwgx6Z?q@UH;sNVdRnvd845HmW?&i#09remi%r7qFGeZ)Zel=8qs^t^4Jj-5>oWA8#ogH~qma@C+$3^2`67vEb^_D1HQPfk0k6UAR zM^1+OB4^B|sTGpUeEU!^K=Z68;N3+L+bEre)b%mNSh*L4wAIWTnMVU%Vu=C>BZ*Z0 zR6n(nq5CM_{w>yw{1_Bt?~yWw#@k~YQGH$rJ}Y%zFfesXjnlP45JTR86I27xQ-afX zxA+?b)2!hynohs&qg!{@6e?FGs-?sId96j-@iR60c`C!XKV()m`9wZm2dvTa8M}jI zW?YXdRd7blI>xu?*Yk`F$uVb`Qaxar%+zy_ezTq^61m18fw-AHM!#I$z}juHT_$(8 z|LVGjM?k_+4wV;Vh;&(EzAtR;v{^X48B)t-P`YgW@VPH0X>S&%B4+)o&!O${wN+i} zr?~Z+o;4{ip?@J84mdd-dOcyt)*O+sPC8EEh{yHe8*U9%&5AG)xs-zt8g#wkmyNCO zeStO2KqLXzn#ZOA5~ z`tdav;U_%!Bd&K=HA+^xkgvS#fVc`1OZG><9ua+{4zqDf8ry?zmeO$xb|p?NR)L=N zNEf}U0|tdvpy0E~-1LP?DB5kfr_zVSrrirtc=o1KjUrF8=)LLog~XohvLjGIiYnd{)*5b*%^N=HGl(10;k3$@+xXhy9CllY5;@({Az( z`$IiPe_v4cuwSS1Wn}j3$;Hu-r*<}e%qVLBU{^H^Q-aWGjAyzxRg_IPdsz`|RF+XL z7eDZ3ge-1Ss?BoDdZ-#3BG30u#d=*gp@>Ux)0a9eJq2aMF1{X1>lHX{KG-dfpM6hr zEzH1suv9JAgBR8VvK+h%8gcBDrRW0s>ge4xlRf{aS&|f*-2H z-*C0BL}o}fv(bMWlq=t=g)RdFOfW{QG4i{y`J0%VrO)RKXAHKmzhiD*<{Sk)Z6!RW zNkfb0GO=I`at_j|1-NNw)AU^nbgjZoe6>Mem4~y7BLal-9lH|FQNYTd(UZiw`j`R9 zS#;VpaMm;R4m~txj*&?(Q>noQVUL|IyiMp^&`wQi}Fz7ShOcIu6^7|bW4$YJ?#beOS~ML z_|e~{!zoN%R;0kZU7iQBN-3IDcskDI=Bg`a+FCuO!yA^J^_Oh={e8>5B?h~-4`Qwq zW*O^EZ`J0YA7W?!t4f|P(RiL7O#nSr6aYB?Y3pHCKdgA6#yAKem~F=OZ)CScS+7}W zC2$!a94C~y@rI%wN2+}J9-F@XnVCb7Vvod}O}~d(%Jy;Zg9GLN^eAlI|rE3%RQt2>%cN$pq^SoH0V0uFAI^Xu(dN8tuWoOuH1=0Ap zpU~%vgVyVY$;d>_A=?nWh@T}w7q!`=lo~%;=_se68f^|UO2VrQICxUd@#%Qyl8qpS zK3o)|1Dw_L;W{D%%No-dPor`Lytrg#_J z4@a!P`vS7cHqB>yt$M6o4|g@Igwi!ZF}*3)&6m`Teb&ybN{fHF24e@%E-cGaKh9y1 zXsNEBwq%ucn;)MrnHG2k#Y*#Gi{uj9&+V{Jmr!bnwC?;d>_UJUU@dffYHGv|nf#a) z_At0l(=2?LiI2JobD|we8L1G%&7s1aO?cpEnY~lsjSA8-3!(brVRx3TXkuR!&kINg zu>vZqi4yo5nVx%q`_qBcE`(!sKC5QRF|EMbu~C6~PfE_}yO5dbfw} zh$lRJWm`o`1?{yc6O*~q#&{Oq_7i)XQ&wg2;@pBdNK`^SU|-v^FYTjUBrZ@zfw>~W7?mk)SoYhfuQqr|4G&?C3zT8F?vcS4dGy(U&0 zxgfJ(@8U9cZ)L$sL#~Z3}=30dzm3BPpv7fpX!f;2t!03Q4CFD#&326NInRI-|x@ z(X?i#veJ19H`(82uNG=n=wJDar-DNUpzj|KAyM#bh$aE{IM%ZNvnoZCJQYlIcq|sU z;zCMS2vuiQrZE0-mdRR1wSIz*j%m=_3~glk9Z0MvG^ZXk_nn&3F$HPuEc{~_FO-Pm zd}Y=uJI;Gk#i^oXoLX2u8?~1L8yjEClA31=dq9`a}6iZSLuAWH03Bl#<_I zUQgrGnshxqoZ;$>M1#_YTL#aSuUyAocb1Qu34SfJ6cQ5`+HdTMdU!op9Sh=Gt&5uT znV*uJ$#8(xDN5=R!LA65gN6oEvortA>6qJa=4M5ry}iBZyG z@+MWhL7MUS&U5~zWPd-B5Xf;Jm2JsJ4psj^Cb>L<7zK^69*A8^z{VhvGfH zYJPKt1$qLVJrD&=wbw#VRj6F&!C|$%b|z+7fkju7Q1RxUW@YVR>c*{5X{fGg%I$KO zFo$qel$?%f3^u=C_UP7Hh#17U%*o&G9$JEir{l)SsVOd$ro&z*FvT8<8jYvp)8_gi zf`%nLHmYOJIk%Cbp6XTY54`XjU1518Z)+0#asBIRTqT7b-tPFM2&N0u5g)(0crj2e zKhgG-wC?Ks9LA+m(4viddPSuCLfN){CbvRIzDe#L@oL|f;Pj(~b9L6B2BXrsV|t~n zr?3l`F3r1AaIKqRIysFXQ@fD;^4ar`?bX$p*l#ngglOvBONc~O_+&vBR*uJBp)L62 zKSU*E=G!tA$&IJnk1-&tx;Uo96|gu~HYNVSC+m2xrcFCvwNLzdin?l_&l320{dS^a z{*=@(iecgG2V{*n3Cc{kb4G7i^A_@#I0m6huDweE4rmF;ku z`IPZ?bkU*f$gWtN527(CoJ=%t{1>*$41C9og@Fit50((aB6%sz;&<&cd{bl^l}--(vl101g${K>}8j+iZv_ZO6&fh8>|kCHSYE z?Z8S~OPvdPZqTD?ZT-@6G^E6Uh_y6@W<`~_c?JC-y}K8d3S0Sp*c5VXi0+hf(uFRj zb0)k995#JlPH%+$KYORAOwtVsl>f^r!|dNX*^P{a0dgpA86n+UHZgwEv@PoPgP(iK zADDw7b;>hxl$un%;ShG{xLKK#02^VvWVsbs>$6yc$Yp1bLqWycU>O+b4tub8xQ->8 zlqBW_Zj_p4X8k}I6M@^Ia%0UwLc5)A;Lh%!*|+6{^ptHtT#G6F#(Ms<3mn+MuTN)1 z)C-@MQ+D?3W-3vxGA53v@9ep_y_wg#X6PQpkR4n6LF{U>AXeRc27i;m;Bq_E)KN50s9?A30uSl<7-&pYqJn4Itf z_B6^(5BC8odt#-;43lCmT?>K8?ZfzdxkjToS!G7F@1=rrEs^%HkeTN;@)!xa<%7Km z>t;CS-n8H;N6n~WD0~p zS-URSbuDr?O;roOs7Pd3(HxLiV4tOE(=&r#i&2rVqu zg`n;xJubOMJ)V%J?Tn^UZ-ia+X zzp}S?n1~fiS3H94bNX}AqU7`!u|NCSebVE7p+$Eiyvk6KaJHvFR7qVbkd%t#DSPg6yhHw+McKxRn7y`#FW#%Pw^z}_851tTaMO}YaQ_L#OiY;W^NBL*S?R;(JvR>O6HdCT^f9fG`JTU=99fwq z9|;{%09BMyq#M+Sz{6=+UGu6>f*3(1Lfu{%tz{bwRk0gXFs-`fhIOIyyS~er!&feV@$~Rx^~2E^m_M z8&kQZDgY*9m;C`urB0i(Rs^&4I;Tt~H~Qyn+oiRIH6P1RHNVFr?fBu&<<3P*R=Qns zgWt`*5f}u70bECPJVkUjoly5IMQfK=x$F#pnCpm1k>#Qs>a&ai?Qo7$2!U_)QGf2~ zY2|88(P0l$5UmX@`ed%ZOUYpgoLF8(7pC+!P~>b0MZco!J$!Ai`|XdUoKp`CA(2~j z)%HEbhX?Dp&bUUAy1!aI9nu%}TlqpY)R5>}xL2K{M)R04B&$f%?*O){hoNlolFT5Y=|hz=Mm1Srpw@%FBHf%JejZ^iOq%kig1AON z%jEbG#I!V->em?QwA!JNr260@QZf|E2#T-8PY z_mKbHU@(w;cA##&Jn3Zm8JcL#o{X6_E~XF)PEIVTLKJUr`X=_)%oUgIitohcV)<-w z6O*G7D4=TJfpU#HJR__qij9qp=i4y`{k(^se7>4TBqSsvuzvOQ?J!bXY2<5tc1rFb z^M(nLhPr}`;MDy;B@#{0Mkd=o*8Ih+7wi#7sCf2O1*U!MXP#RT zbk7Zy8&Kj>rJlHl>BnhrpC}c;rY~AlO8K0QFIWSrZ}JRu(WMg<+9c?&{4Q0mlM+DD z_{{fT+ZhP~CVpY-2mlaHW()YN@qCR#saNN9bbLf(b#&P7_#?TtY)E`zU#eB<4jg6s zOd?1)#To0YLr)4Q1){YZHuj@RY$p*5=8w>_b$uad@)V4msWNO1qB$smR?DCYJFM54 z&9!5|^g3<-5rVDI4dG@FyhunuE~`$e#Ln^tcB;r^Y*^ZBk(kR_!nGT@Jm5||^}(rr z*Uy_1uUfYdaU4WMlGK2Z&S_&)QuX`!I)95LuEj&H+F8KY3vz}TJ}Vs-1-ji&}YH#d)h&OHfT zrENT(W6^a7l?ccu0jx3bL_=WvxCC{OD#+J3U0^If9^?8c^Ul6GL&L^w@1g z!dVpyC+yqsvJLtG+rA%N|9dm7;rI#hMz8DIGZve&a^|9#N2(3pnabzOB4B`FU6|Fc zv~swzq+Wt;xRTOLIi!>1q=CxT7bi5t`n`Kj20sq7+M-zEqfIsPV*PX`NN zixJlfeP;YI-dn=!fK!MTIrMatcT^)|Wc?S7p)^02;RRi|khT%Pp2v`+0#!8~KL$bkc zV1It+JSs8)j|-ii>zEePXXQ|nK|mRAFwI{xkYXQ(TX-44NK`HE(>nliWG8v=m;E+2 z8J@I+?kf2{bYe+t&KF&tX`Ij=G-)Jy*>zn%I(@Pb)XEFye_o!pVB**yhNftf`D&v@ zOWE8`Fv$$kq+}er!i~E8w6roQc!+Fij+ z-rpU|THp@$N3Mw}_Gi@q`sc2I`&19x!XunP8ZRb@r5O=>8q>_$n5wwjhn%)2?!nsI z`{>=DqfDj(4$w*gMcpPcgxs=AIjU4B-Gg37aLWliQ;uleV`gb7!Xlw783P$W$f7#zlLI*@PA!`wushvi_Lmeqr1{XZ(6>uUST+Ilw z3D@(x>B zg~PyF9cl0}ZTbWkZeb-pr*=IXK~IY=VW22&aP|o=H@$AR`j;K&gBT>Z3%TB?D8La= z@V8f}XI^|T?oI&Pfy8*GRQKC+bin|DvEK)UAVzU8wo$%KYZN~DIA%M5ufDqc?lGf# z$4K;JlySKAfDEz>Gq)U-UTU^tNsD!u=4j|YZ_95#?>E%?3NX;G!Q~p(QZ6pZ6h+&I zTeEqeO{>g%(GildT=-=(Vp9!7;yirf9#UzjEPt%r>*7IE-WL6}S?@gi{@z$N%e^dPakI)wATlmbMUWG^ImA_0TyX@xURm(r9VA~Oqi zz-p}lX8hx#&(Rk`RYA@#mkr%MvuJ_islhk=@yEG3QEimN4tX`0@n(zBX~tlbo}SHj zR~5ak{Qte5|D)U8vZCA3PkEI(b=zeQ#kTLR43$r*wmM89x_si^vFJu8OLT{aW6ebw zl6T90k$$j6MeBBYW+p+(1l?+4wzdv!uL8*>X|1|k!_N&McslLi(F5*tPxe0d|I`Md zKavSF0vZUIc+E~*eR*^Y=H^uP%wXOUYpx%@8O>F{w!6`J?}2CVoU?Z`&)c626F|*y z592@Txn9)R*LCy>I63ezqrJjk59<_4iw%A$5Upx52%>WQa3N?Pa=j6*x^>jxtYxVY#65Id1JKA3!T@yA-D4WwZr0OzI@v+<)%YnCAB^ zK&6#_o(#d)le^z$>cNsy2e^+q%E07w;0aUY6c*wG8l0xHfR?6ZNhgi%$*N|@;TrXN z?dIrcVDHnKnMQwp=W@nv-XaC^YpQv^;7nkpNO~|#bKkWcNo)r^otb{TT(o(6iuT}v z)%;~S-1&UNoVG-7JOi<9--uD|bleN?LUdnt_reIxWgF+KhXjo<%lx{fEfNzYqP->X zTzLlOdM>to&BN|g<1bYF;&=44gZWIZ>i(+yt1x#q(Q2CQcS&%h0FwSF0Iollemtff1BhJO62U4ouQUCRC{m^)yB zB5r*&kq-H|b8<+$Es}msr`>#gs4{G^`wtTKFC_JUu*gf!Z?6Q!mq!j&o9O>E2><+Q zT@cI_XdA+R?5D#&aNa+E{|~ac?JV?-Xjo&)+VcP3Sm*x$x3-|j+rYlKQ1lcN{{T$? zGw{Ed=o&aM0Z_9JYtPGn_2Qo;{9~NqMgKJqQF8|Cez$SY>gEUyONqca+OOjwu`6-Qx1=8z^Iv7mC$CTLA_=HO)cOXlhxu0f~5sKR+7}i z?dVla*T7Sd&_$)3J#gnOx-Xd$7d0oD0{~R01|GIXg9$cr%Fe|EUFF zlW;C_)%?Ex_a*PYn4z#ep;=WYnO0L+ktrh93qVk7N7D*wZT$cDH4|qg_8R&aIByk zUfYb<-cDz%Uas@}3?FBgNK|F7p3qJwbDN-+M?(&OW}Sf2@%uN}T`B|P8ZG`bJKtJ$ zeg|SOU(ChSdZ?A1nR?0_4s#OZ_V)%e#x;+ekp-k{(=(*w(B!ZvlkhszB?Zd{tWVxV}1}eY;u9(}~VN(8dAn;ygvd zs;;PpR4V)h4FCXS(pb&rp@*>#|9u|wfq@U7>pqhhK%0NAGPCtbPWqHD`fjMkm}%W2 z)>!Dki~=f!?Z?GKAXn4-RldwUmw%wYL%ug%0+dgt@U+muP~@6C+NiE`8z(RCZVKCk zuABIK>Tbq~m5-DI_Wmjat*YhVHarj^SSv-UJ_}>*DC?( zRRd$T^xL}~EZH2_;9NTtp5tnsME$4?m+9#N{i!hAA+4r@px1}+cv;%sW|6f@$cADr zuAqe*-3^mT$OQ4>tv0Kw=}82K*M8{)n>fBrTNa|>7Y|f5R)_$}sU+2R5bkQiun;7!TNiPZqTGA2BJ+dE%;$#O)+8E zntf0HrA^^CnwvUGu?TzAH0;!zF^7}$BC$oEQs}r3beLk^deI=Wr5sN<-Y(nhM4#&z zz$fay={qIj4fi^tYqI|nQ>lEiF^J%>Y1bumXbihd-<%uFE0~}`1}=_5C^;r!;UlE! zhdaa7O6VMVn}V%9Fh(|=$X^AY zDBeIM#I`WVnT;Ap_TKCFIm!wHy*Pky>vC$PQ1!(~sanChVu%h8^9)+7pMUl%5lsi4 zgJE&rEafSc+#6Yv&jU>TTfc*>I07@PfkJO4K9v@Np4O}Mbv7s~Ydx{MN2ki1!9m4> z*zj!Pt}cx2@A7nU=iH`MaANGro_MYkb%GM#!hC`kP5j6SGNKh7$7zlFNy+{z7Z%!) zLELx7hLKRsG^$wrXTtTR2aaS{R^&@6YbWfpM*J|Km98M?A7u_9{KyAgX5C#~?ON3o z>=XRbCO{$?6YJ1?U&Q2m?{LoJhOF9a*IX1HCeFL2Y51J`R&RCathu{2tbQ@G^-jrAPNN{@K8PcxAS&H?v{Z}(jWTn{{1 z=QHcNA((a9B3vt=(x*QPjxq~Om?a_k=J;v^UfB`2MyfsXP1itxU+qoyO6A9{KUiyQ zq%>Lx{su9SZmw=m$fC=ABq4MLu0h&#hT@wYnCi91%DC6|P}cVJ==FhcrJPEeO8xXh zhZYEd0PNCRv^i|q{FyAdvPx-01I$=53`#t&es@pBSdP~qT2;2B&YBy5wOZ!OV$CNz z!+a*=#knXfbau06Vf@neSxJBB613U%34KmUQ+QA3V^n{$Iq?ztVH47y?5K0D@23wbFIuYYG0ZXDkW#K`T43sjpXx2%khkHZwk4Iw@rJ0e$b_VkyA4>`NEtq|;`CBdFtJGL z&=*BRGm;THZ!#3q+8W_|bq$m&fWY~nq1gDiuvWS5b>&Dh`_GSfN5*poA!~6w^D&3( ztp~^WxW9j~;rHLGWMzeWIZX2T8KN`3NSCve$mZj5zSHV2u{}{Tg7$*i=_nR$@BcW4InjmTE;tSl?D=H#I>G7DP@e0n zrRLIeZ6EdEx9-0xa3P}h{A;|HOX|_R zFrNmKUv%jPHpSt~{&q#`Mx3uKB<_UL+r)A(ukfjR)*C8a>E2W)DLgL@WxrrBC&96y zsZwN|<}K;CM%t@L$&~T3PfI9_l6F+AH;x^vekyhYNB=V(YiTm8*xft`+P~gy&gnyHmG} zTDp**toS!AsU7-nT5^1Z;(8>?GOa$=l7aB&40&zGhTb6`7MwbxnDnI2xbvxtB*0=S zu9N)(aJq;iEHRfb2#;SUN^4)=#bnirN25%wdBDkM1zp?r`~Y1K zP}e}+6-&TJ|2*fdxk3CweRhCg9@cU-mf;Og_>WoUs`V$N&=%@ZImq8TBE^l&TFw4n z1f-5lH&3<(zG{E0Ll;7B4|3>Mg#=WT;3BJwFw;eL&eGBD-~NUAM{j21$#mJhC04#Q zYEoQG)u96eEl-kPyCWL9@gkF3S2axJaPbrn#P&BN#3tEdL1NN}vv!=FcYqi#aPdV-cy^7}yvcuwLORF-I(%zMc! zaG}QgCNc>$uu>T1M&C6t%5(0}*QP`Gat`JF+E35(RUA9YJ9ztO1W|wW`9{4UOakwK z&gbvwrCvl}`BrCb9cTNW8su2yv6|l=DEW~Q`wBc1xuPQI;bWr;+S-xfvr@!kD@hEL z=fIw?huJ4uBKbQvp>Xhhr=s}Gc~qteU*wZb?V#)oMr}Jw>X_)kP@2pn+Zzggh~Rfn zWB^-2f|Wnf5KefbUvYknZ82aMpP8Xyk^LfP171kX&V_SsXx`89kYVPKttUI~L_B$s z(@Doj+0F22B|m#9EyQ}{`cEQRNpp}G3i_d1*`9QBGssy91;S|dFt@iTDOJ7+RRz{g z;^99vA+BLieYa6OvHAK*)Bun?p~*=!GV2J5E1t_6#HCXWiEu`12S=wNm*$jV!rqx|E^sPg#}#RaA=Sl*6GT# zr$m-ao2Bp?@*8NJUmLYe>$+pV#8X_~jMSyH(-OQP-3=fW7aJed=Nef68tVlPGBRlSyG-M}-IdTl+T?4+ZAB`8j z6{X(_9a5KY-Uqvx1~~f>yqy;OHnBouq#DO~jT}Y~W1Rkyf7d3gk$1=?)Y4Fc1id~k zg=%A0=<2l``21o;wMk@06+id+5&o&RxFc|jN*VIp#f-FB&Yxv154KPD__+VaVc;L% z*$-K~dv+x{$w6=*#$CNw9wJK2sh(iqbIT}CIXwzecP$$AzIrgDS$1pdNWtTqkaqRu z0}7IF;F?mH>~0!%aeo>uRe*^Y)g)8k@3=wd72Hq$uOLT{ke>I{-)rm^0yN>FM$R3 zUfIN!3nqGKwjzk}BSt=R3cCFZce?Fn$IuV0OPD;;lu>gE+%*i`j^0&~sUso}LZQhMqfINa0V_L5=5T3>|!k5=Q@Vhy~OSL3u5X-a@4(n-# z$n#PBTklMSpoNKvR-5p~Z`V||2E3gdjGGBOb$(9P;^AVfaSK%BoU#UaWcp&6?p$^b z8GIEwcAvY-d9LhN12!iE!KgGCjZCYM#mW zn`#K?d{%)*u9`+w$9`oh-2J$X)BE=)7{@?z!#;5{Mjxp#b?U8ic`VQKx^-8!(8h!}O(n&?B=Siiov#Ta$T-(hi*tt`wz%_2gwaGoV_-l1D zXy}N=rGd~p>xDW);gtaX3i$zedhgqIqpE&QFeh*S?W3;VY z{H^E1vx$*C>g^dP_WG&E=7PO2oX@-e_ZGzkm%s5WqR3IoH2c9Vub>r^jg9S>pn7Pf zRWXl16YAD)7}gmTOcUOp);a*LDH$UqwgxY5r>4qS9$<6Q|){E?28iu)d{nexM3qPSdqMuc&EB0eu!>7Yc69 zzpzBBWY?!t7~>Oqfjia_H2P6J;0*2C>I6^oamrFfy@JHHSh-hg;DuYQCv5C-NxOZeNzVM`jOLW1jBI+*k=W z`Ch=PELfyIt3A-(sAMyq%VLc1x4)cF8H4tZtMgUZCigDN1Wh;7(t$cK0nS4m)B7;tK79YY__K653tBl>#9yXvsidC-ycSP2>V=Y9a9y|I zurJx)JdIna24mBrFSY*&Zz%p^h;xM^h)~jlV{q$P$LDzaX zPE(KVQ~cyl$AG$~q)8Z+GPX;1G^&6uD|xQ+vHFXd7tkKX4$vLrXk`Shyv1-c`Pqih-HgJ$~9pE(oVxQT3$75{+z-5=cnW>;eL~NCoWEI z6?OcV@)Ul-&jQO})>m;@cbV__ILh+y3UZ~cW0`~1=1jD1f;lV4%w3eF459=hEeX+U z7Z^p=I`9n*yEFARN~`6u(#tu~dmF z9!0cROe(onI);=Xz(OMPG&gw^vS#b`Y>XE1z^+y)DTP@YQuW>)bu_QJ0@Yxz$){P~ zC=>$+!ZEj_SmZ*MWoT|ab+Q82@i}deNbgBL0=Gc0f|B@%)Usf1(PDDvzF2R!hK$I} zBO+aj3wNwo#iv=z7*Z?eT)Di8ugbOI|=z zMrapyBKqYJVoUnb|bFvtW<6Nf~}bv11S{#fg6|c zr)Qjz%yXYpbur)2KrCVG8)*9N?OpiSXXV|^cc^})g-QFeZ0{I;k5TV+-^@7K-CtD7 z07gU52&=q}1NmPytMs~|MzhJaH8un|p}m8}^I=zbkuq25x&v{(0%VTHE@)(V5< zM8bcwU|_w@xqvy5Y!He}=SARo&j-sa8?);fY!aD%$s||u%5^s)Pq;d7WhF76f!9Qn zZTq9D{8F-2M#wEAT;AT1RE-WEukHd{tkq?l<#F5M@rM zmF?w>b}RB~7`|NAi@LQILO@hMuM#H~8RR{`1jq9t=k>SH&~61$6Ef&F6B#t#k1F(( z!R{jXX}baFES#`VY-06ly=b1D1CEbk@TM?*y3&db%M9uk8)cbEm0Ey*HC}OFW3O?g zuTUmwuf%N3`di};3hG7*4u~M;)-L-EETmPHE!jAaDs^|dnb^ZrURW4oGt)|SA+IJ| zH%E&bw!(~-t*r`p%N_lk)QmQeYS-H|XS^8IVMeQT2kT@ABpxaDSVY-kOFcPpX?NNi z&ir`l|Mmzris65=7@veI$V{SF%m}Wj;Xpt@NgTFQt86FvXUY^Ho0mvhk;tGteQlQ^ z>HQw}#6tV>;v%4$J#y~Kr5;|7GUN{YNUo?tz z)!%R24ETE*U%4SfEF@`ahMm7M=+|_J5P|xcFM6v})5R(-UR6VExz}$umAf<(VIlyM z^yHZdhX)ek(`o8ci4RW zgq84vm?XC9B*AhSn4BiIVw3XirBe32rS6nDQ526Evqq%!C8z_ZXT^YBv~>yvod^an z^R_f7`k&Ls!Q>w(7tR0D<%z~&p$@MoblkZOb_v4XE$8s7YcwPhhfMf`bs})ye)vdk zw#y32xh;R*oi3nrbY3#A+t~zjX~D0}1N)B$yFO?gO@3kNXCl~9)7w?APvwB6O(#YGNS3!?Gsn%9~lId!o59d(2yi2#ubhA$#}iwOLAOj za1NZ1alyfVgoO@PIa`2E;fmCWEr@l{0tOwIBPScm<%t{->~7Iv=(~d7z2`9LM>itw z3P*E+M_Ff*hp~g<$)f#lYy^EZ1i(U-c=9kZ0}?Z^`8&k_9}WMXkLSTKSTG(EVH-RD zQUL@A;=-cbE8n9uj2IMK^vu->52ys$u{`G|);pvb1yzD#{5<#egh*$s zKaJGc!}MoIGY&5YjGgf9@I4u}Ao}(WF2%GIBC=(pZ|2XK3Xny-I?mqK^9_#+r8Twb zI-%=AVfjl!+jCIMX@x}_1U>Ypa5X$IMX5o@ko!b0wj=n2Mvy|X*=Ql@;rlzNXdo_b z6Z9V{*eKrRvu~oVLG0-FD`s#3sVtM_SJ^8D9ubQXkLk`!Or~ygdlMSNy2ST~cT_Nx zqA3SQK%4H1%dgKn*5>N_+yj7$-(Bf`-8^W}`qWazwWt(6=K<$stn7WAq-@*sV2K@- zZQ6Zq#_|d&=Y>Ju)qc$!Nh`>g;QrOf!7mne;u~UG@em&gax;?< zsMrKM`SW2qLi5TvW%yv-@&k8aYIw-6m%g?@bn%*u=JQ+9X3RsBrJ5)V#J$%p_QBD%zD)s zJBoGNvX7E=!O0b?Vp>ZqZqB9xKU06VVrR!=Wy?gH_vTI>bCpMwEL$wy>*i*K37lj( zgl1Y_j3%`1&N_p~`geA*p zNDIF{|K)9$5U}v6Q1~d(7LC`z#mP>bd4)NJe|LXd$}~fmOp0Q1#}zM}P~{F;izL(V zOsr>7G1N3_uGcrKiLkemP9NoU+a(?{E}muT1qzd|)W_OsQCt_ZVuE}zEsRdM@)%y4 zk~;(G16OMG!@2AXKxm2@iPn`kD?KFJ-dFSJUO2=6Z`I$rB45@kOic;#mv+tE)YwV> zz>7wkY0Ggo!0JEMIQjC5oWyVN=9jRpnA5Nf<^0wyL)6WP>&RI)i2mMNA_FeCYKNb1 zvb4h;*M3U9CxncyHxF7H4Rqqkmia=OC02~<=o3YBh>@~g2MgQ`SWVVvwL))L>a)yM z<3?kP18BvqmIc7S?-lYq!DEDo=<^lY?_l9q9?_KDEdSDoPNQ9CGS@|<3YprP+gb`o zDV>xAKP^cQt{B;yAZO^oDEhRV2p$p${Hm_Iv(B{jttq|j86HaXej$tCaJJX1ryW?q!~TmX}d+9hvA ze;f>@$L6opWYdc}g>-3Y5p-{pByb@25ifQ7G?(`FVP%$fVdH-X>r}SW)7&L|zht7#p zmD~822jQ zB|eMrQzwWTwHC{^DC+yYvm&rXC)(?9L^q#}wcAe;Gv(8V_y@}}Y^@{iYzfI?SlJ*o z6|G;A4P~g04GN@@^VFi6k#zcvlgVUM%WR8{Oz-#BHY7Up5kh^~_Ia?g!62`WJAX#| z44|Js0NU2S#@@gKo}D>%W>qe=`2L5H#T?VCxv5>3p$La)ue@?$0qh z7M@d>2^(>&7NKa-!N_1ii_6iDLOv3*XhX97{-pAXHf6a^mHA7;2h{4-#WZ2-= zD#pa~YU#kLxYOdiAkW<(1?QB0l?V;JB3^oX!l084mFoF)bm>ff_bwNI%fZ zC+TKqS$w?r>+gKHndRkc(+qSq(%Q(xO&N|RC~!@o&Fw(um0x9kuzp}RMC*7BLrKC= zk+*Bv`&2SmqQeOs#wf2g!r0oPIFLuh|Foiordn6D z>#97J`W~Vh{?x|fsbRn;_n`g$Ir^X6mAl)LH*Wll9{r~iw-h=mCaQ~2qchaVDUNI- z^=HBbZp@}-wg7>)ug_%4Wxxuy=Ve%pG`CWE=#{$Yqfks%lEN&1AB@lq+2QA4*|KVZ zPL3~! zzHbyvsr^+J7Ax->Extkf_);;;JtMN~2RRhv#VCeA@&8H`85hkKkjLUlr%t{@(qFG) z@}EzvK8)WkDy%l&!SOA`8?xOO`Rn)Z9`CabA~3XGDE#rh6^&1H!6K;E!b~0tzPK{4*Y0mZ z77}oYz;8R{cijZ2;$!Fh?4xavxKY+ZgC91eZ!sp_ZY?mdu!lkSvLbEY_1BVT){pKCy5ol+Uv~vqf{1mmdyR2kZcLFe! zb0ut3M*561f8I&YNB*4rE{8f4v^A$gD^n?RqFb%vVDipQG_Pla!Zr4c^&|sNP_c|) zz)Uf~nm^(nG?I+aH*q*4%B%_h5`S%OZ43ENi~b(}Lf`b(`XP`q zpyXp`s>3W^5Dng-3d1gqnJevHjFi#%!D61TCgTZYp+Vay=|*x1mvsJP5iL14qX_?C zO7P-MdR;SiYzRL;Y569=?AVWz|xD{{(CZ4qkG_bf`bN&*{kN(sZ?n<%WgAA)^l z%{M!Lp=goNX)j-B!Vi7r;o^xxsC=hx+2}FhGX5$-wefuV*QWYOz^oUn>ow`@+U*BmBvfMXHvE#6Ol5m zwNTeNpBLh3DYmd?)p;JzhHVUJ-?#I8b!a!2SqrNXLwmKGd*FqI->ePhDk6qf6^DAD z_lGbc0@zH}arNAY0laqESZOhTc?m$eSTsiJGpiAZc>Zw-#u-nYg%|b}hLIsg%G5Vf zrr%d`WH$b~bJ#yi$NI>~4Ed9Gy-JI0pG)-1h{v?7B>pn=mPC@UGDuW_kUoh5D$-Ty#qyo=S7BuEgE=K@~);0B>ShdY}zt zK?c*%VM4sz8pu53WFwH;-V4^(JQ0)`k&7g+u?Y)ZfNehe=yl{-i*`oIFgxW9%6^!myK! z2)kHaFQRv`c|@`ka>3ZxwslTF*Lyu`$(7wU&0P=s&b|!&?WL7E??2dBAj&j!Br6dc zVL3-tJx!kcj4n_f>^htFF_NYXJ}8aikp7EuZ_dfJQLmf+foW`FzSdW)Zv%+Gqhz?F zCF~q3dN*i4S6vS9G6lWF8U!H9_aaK9ii*l$t#19XuTta)u3QY~;C0oOrCa%j-+F1* z&ijYmGu%(_z{!X8tHr#Lh7E_$PSMGd1cVGJDa=WA-TE1!9Y)0!>!HS^c0i(&K!}=@ zjSns{L#~8D0OlTIR9c3N<&E3|$3Tjw(0emjq5)?|E`dsjCW6@76K78NOuWfQ`K|3% z;8HRyW-q62MmC?fIX?L_e+Y+*8Bg-dKf!e)eHi(Z@(xHl#O@sNeZcj0Mv2rKMnC+J zlv@ky^G6mOe7K>QGku|6uPVIpbp6b>k0=YjFV$3%EjrkqSpz2aCN2n$n9M(ZBC%GB zN{wlM6Mnf+rQ)6m`?SARS2Ia4X=0By+@fV<3nYIqot0Zp`<1TbqJPq?to6d$Xk{Ir zgLa>V`HAJ%nA{is4_Iot6_z5go4Gz=tjdu<9^P$Q>6z^Y9iNQEpo~Ya231x%jXRj6 z-vIDD9UyhxUm+vCN9}%D9qh$Qp05<$n0o&*|59I+k(WWjNXqRKNO8}pElm>D2uVA7 z`c0(pSmLpv;ZLSjk#Jq>XjUh0fsO!-<>1KekAQ`!6pSvbnT>v5?TE@VRx zy;Axe;l!hSg!_hU>v1JQD`pc-KJ7e_Pc>naokTsy#Bj(f7?{WQDk^9+ z>O_CcQ2MN=O=qCMqc&iplktvHpW>K3^PvmZxh^ac>QXjMSzeR77z`v=INiGBQ;+g! znF^QTq)l1HQ@3?S1~-5k_uRRlh_tBL1I(K)eps5|>urgK5<8|h+G z+9U3b7U?8qvWmyckVibAtcy)df4S}iV1F%lB@aB>BCF;9oP|S^6i^KR>H7fZryn0l zorHDdD0$lE=v|8bHHhmjw8u zx_U3rTl#E0S!$~ z%l$3BKIv1oM*CM-oM2k2tf&kHT{&C^)J&-ajHjh+c@q0K{~A37I-$!iuOr?`vXxD| zGPOUueV-KZ%*Tn!Gvjg18bwF=d2o9<(U{_JIfyT|#JXpc->*5~RXy{Xzll<^3+sQL zXyGFw_{K7>{D&eW>|5TUWnb9$2J}1t#cTU5m5r{FZ!|0CY$oU)wI=3ACOd9_5(42@ z;s~i_KJmM-jj3ejjAXHH+IJjOsWYiq&YMyUqjX5aRtAgt?-i9xp^^syuG~J==_#n< zp#;}BFAN{50q9U)y(aS=yMM210|utpwO8QWmN={(yvN4{TXN4-|8jS3)(1(TUBF3x zV23}Pn0<^`5pjADQ5tnlTdT+ zm3iFKCdEIXi6lachYHU)vAhwOtv&dDI~%H^kjqK-)l0MK zqNNlOSt)IJ$j(!)vcVHz;OP3sbbGyAnremcy>clE-zXmi!z>pNEF%(pZ+VF}Y*qi6 zH_uAZkaRIWs~3C7GR_-HfY^;`LgA zn^#bK^DX?0ZG`% zEZnjxW_49pCae{BV`}k}W>>AYhZpzBWk>DS!#HW1zd?R)RLwt*nRD`z8&UKxvP9;JeA|)d#LC8+(>`hF-r? z{fco!_k%gZBw9tZmbCaaa-zw(GDf@OEipo>)KmE7SveV^_)n*A@-GL5zZ8~44dg@b zdu$if1Cw*JR!ks1P*e%eiFld%^8ApztEZ%7jw~}n^rpO5%E5&TYjUceeQ-roQv)f0 z_Iiu8{BIir|Js^~8J)M$6TMtR=r9AzM4%2U%s`-Of(UKv>Aiz%c5?iET(e+`X6xzi ztWs-Sic4aN-bO3sn+xwk3|QXv{;VjK=Qv)e^3kDQq!XWm#m^YCdorXC74IXV(!D9- zcv@4sK2Oo^!OtoPpaJeYc`An3l0ccnGrbiy5g6aIT6J~PQ^~KS!hpTA$42% zQ$Z^J7FW&5CEP>=znG3^PuSZe*deP^6j}eRKsuv~B05EeVXIk+L0vUGs!AbaJ434c zysv1AfLcW1UF7~j_{TXaZo6y;8mL3AV9xee^71uzQelzG3poNk7N-!VuD1w(3Obb7N9mcPYK<680r*ImH-7}3kh=W+Kz*MWv? z1x1poefj6u4_VbDh+MGFJS zLHGYkD7;*GuIWJ3Bi|``c4Flq1yifnY#Ptn1hS-mB~X7!Shd0*DUY<9TcbwIi={qu zSHxiBzc2Gdw~n@wvQLbo(Wxi+K?CU)xA;BifoIl0MW;M+`qPk zfzn@Y zgc`M;&R+^3!NO6ivq+|=BY%zL|K;bKh* zbVKBr9*w~7$$5VnIBzodUx@;pFhqv(=DV5!eJSIwJ2yEq(&Z$nk&9+7cCuuNAlj%) z!!Fci#VMEhn7uXfN6cb#nj7mV#gw|S6da}Gqo zK%Qe7mD?fEoW9tm#_czib^P1Nr&%sMhmC`8iy`#4!K^KCzF)KCIP`*gY})*m`T{tT zR%#etx+VXSsLIE3uF2MWmgYVAnM^!6kJ#g;o9_Ik^YbX_A9ZKiwHo|Se`=vERTzph zQ#_P;fV-ekw%4`UManyvdDh{CPZFZ1Ax!3*}%BCc%Vi;sC_O4ciY0=h8AP^qm~+G_@V)2m1|nSQ*>aBn@yabESXy#ocHCHnW>$=3(FppPdY(3a zvJK$di^pMp7zflj%_I*poFB*%@=TE75qMf_Qzg_g0x}6zN~P}|%vw{; zpE+~^Zru*%poHis^^OXRjW|=@{2814Pi?R&%N?>4-_vz#?k?UWW|hcnu?JDL0i!yS zO7R59ca!}p6%Bn+N{LIK^r7ZFUX9JA1)uztG8~H6u^YJ(#m1C-ZA7o$B7faFzj>Gh~Xy#`&>_Ue-v{JvO#ZSeC&V_!z z);s*VkaG`~wMHS7(#PnXx3P8D z$(xPRBjakCJ-fi6(d8tv;%+0$gFrIR=?%H-_?SkF%cyhHm-6XHR=&Y$1B<)hfCVW# zqyFS;oxhpcdN+l9nPE7UvHZQ$gQs!|u@+d>m#Q;cTqC5!`{?zw5E)U@jOid=v{|{f zGpsOjmJyF64$_D)cNxiycN_^PyTwx%TZ1e^!!AP8bzH*om|zFbBvUe`OmoakXKcV{ zAufJmVHx*7LSMb&JV=?))1AkbBTOTE<5N>R;BhD|c)MPO_Ot!3vAn7R4A7d6@U{~) z@=k(K)u*3#gID+57()2xPf^;+zI{pT`(echd4deYxm1(Pg*s)ZwIS$Qj0A4y911v} zak58Gx4vs)8DvVCV=O%GjAEU^5LL$o27OQG{wCqj`>?Gj@Q-C9BKnfPx`edjKzm|z zEi{K1%PSrUcLI-6Gv+S^jts}205#J&soduDBn+3RcLT4MuxC5>98c6j;+u!27-<$$)L1)J5v#j z35s>8u#K|_?sIsuwEuBE&)c4V<2vL#fC!VeOk~d{8<%QdswUqybKP_?X0d zUr7E-@fS(Ki%7^_;QN`O(tBsQ=PkQLKP$oAmY3oLmnidQ~E0Cb|u5JIEX8ypgWFVIB6<2jWd0c;xZ z_nkOTy(xkY4ToodzWa{iR)|++`r`%{AseH*f^NoZhi3F~u( z_@7z;qwUuMSDA0l$2bACZb$YFGE63mG#)J%-^BoOZ>VBFkqNJk#52i}DN7XtB$*c$ zxavp|488hYDIe7+E+WN(33nqzu(K1W4!Q5=z;DMN%y1vX2w~KGt7Qz2Oxm7)w+Ws5=Iy}R4LV^1xDD}YX66@?wq?_c zq+!lUf5l#6`05~Z4Fufs-Mj~-OTAN5hfCdZ5OdX-34%Eb|A5wTpAS-`GJ#1CjMTeE@maDSAt!Q^kEV7bEV@1&QHyohQo0hrE(@0;Z_B0(p_n2(#&m^xcmBw|$z|E4s>HzZ zsbsw?GNR-XJ{qz8pRw>zPv-pkqk3>s*G~=8<_D2OO+%^+S{v>>MX(Huh5m3GoXxX2 zj(=AbS$7iwtjBYHwn$S?Gw3>hQj-7{$?HIp468o~F}-`0Uu|JX&+b4XgaFnc_NsXO zPHzG_jM1j*S3X^zgX0>QnwKL%iI(Q4P9*BY+HvT2|DKe*Gn6cBG#G>m(xYq`1fd|s zRe{O@*dpsZuZvhgSdWN|Qw^f1kEZ9y#v=u{sE6+?1vKM&(ngiNQK{gNo`{6 ztM5982Y9;dklmsX*{u~^i}zjuk+Gv@KBVBR{*RB>pJ5_l$_%YqL`BTkp$oA&Cken4 z_23=?V)WJXz1*(3-TCs}J{Hsj47Pg-4`y)xXT3O{v5A_{U{K?dxLuOo0p7_lV$oZQ zrARi@m9K9wQNIm-0Uus|?gIFzgLc2whx~lKPk#(I^r{y&TRM&v@t~6(r-pHdL*I=- z-I_Ois=UvU_eDuAY^PX4thv*v_K7lbJREFpEJglihp)vxCVkod93V zO&w>UE8tpNN6~icl^M4cj5C%Mkt?$!Zr!UcK1gT}s9d;u`F5H5ZYweOC8{I#cB5s? zZ{p>7d1mVU>QWmxbN!ZBw?qkFSnDEtVg)0&V@%}A=VSzC7Fseb^mHY^Xmc#6ntKNzkKToaZ48VI$*mci%n_c-7ul(ydYR{7#aYV8@{!!J=Qia^4Ybl zcRmy4LwKK#fvr=gT0-k~uaSaaw^C8BgUZ{BYPR}Mk*|Xyd$8xOe7;kiuQw|YnwitO zOwoH}DwvI$LxQ%waSXRBh+(t+nq#?som0H;V{_-0__YDlb0umP+5Z;md!y^VtZDxs zH+eS@IltJAZ&-gq=-1b82%0>-pI?AP^7&FWyy)ZXp6S<4r?C3XRy{1<+{U{b*c>P< z+qyr$&}`lP855;=39DW_t^e56^8N!9wXV-KK~1dQd(jlNC!*(6g7$xdgsc6B=0F09<#Lh7nl~S`PZgojpe#1Tl)% zmD>A&Dz_rd^6Dt-HiE+Qcxjk^qK-}ev|!AAax|fg$e^jP3IgWc9l*^N&4I&XcsIb+ z{NX)TK*+{pmOlT?lke-<;&(%B8}AsGB{b3J5=hew_|E=bI#Z--#9aT5>Zz-s4LlCg zx8ckBv_jBf>h=Q3ZML3Zs51b#uX0W0G}5?j7z+Pzn;HPqoCz!l`0l(dh&U$t?)0yK zyT5xwj(d@_+^Z|~I_JkdpF(bd-eN$>gCqy}XCr`N+j5R>Ti?3ZP#9R(5Hv4Ps?a=M z<-W|;tOp=8@GMijHgqR;-xtccsKyUd%abNIq8un2-$Tr6jeBxH=g`x*Br>2lew?$9f*Uth+qm%P|o0CLKsF6MPOY%TJP|7 z|1+jDTrB@;94QDZ2R-yMO&>Ex>&6=}f!Lhm)AZ$$jg>6n%Qb7MP7buy*}~(emIhOk)vr1EaidH}@+! zM|sj@ID8k)o8jvZaGc8$7e&5GloaP{2cU@lDe_`+1_Tw7188)c*+m}{3Nv51n(l+D zT73xurUhyLLD#>YS$WWmBCHyYz=}SsViF0w@relSy%fy;9ZEW z?ahH*(~8|~c(%(je$)8`!E&3j=#bm%E@Vi!ri zX5%aaTrjAM1UuW){jDy2vGdFL9^icPdWu$%XfvPmb)d+KTWh37vTbP!dZe#J`>8`Z zQH>qn2^Qn;jSul2ojc#kQfM8%(j8UYSNR94;UiOj`*NW6-&+qC+&j2lH(38oe}I2b zmkm?|X9g(V4CaMPv6?AaN@3HrS!;DQ>yi=^ckp^VDoqXeDUtU#5H5fu zU?+;0TcSoHE{H5paF-v&1I1j+LoP@lsk;=xUXTEGvQP?ylHoG)*<~qR#Mi3}g#u5d zI}&77AUZgSY^ntVV{(Jz2M6s9?|HTFuXqf9@6To;aW01)uC!aCludHaXSYg3fIFMA z4E!{5|HY6AcyKhG zTe51?(4!zo8rBAMt=4X;i+(4qsnqXUBL$nqg`6ju$S2ienz}dKFpx-S$Z|^P3KL7 zJe1otKG}K6Cmk=F$FdsOm9`(Due5D>X5K^s!M2IER~f~(o9-Y}!&V5I+g#ggSoU+> z67YU|?Y5;>(6+BWcIoYop?R4N*f6N%cSe21fC{Du&Ti@-u%2f>o84|%i=H-zOSf%d z`hS^|2#yxs@VjdL(sW+^HVk3EZG*RKtbaP!>@0m%s(I31uv=;B&7I06N`|aA^^Lra zXIwbOKR&L!_4#qHVr-$!ucRymDW5facD7DpZ^}x6Cx6;6-!%L5R{eP;csc`lMJQ$p zO_4ucK7nVj@X;0P0tR_h6Tke=o%S=_+}tHca1cx=AfW4~n0NqwKmZ(KAW7i$QoTi3 z7XmS+$7ZR%5P}Ek`AMD9$grCnXPYt^EBvq;RVvB@ zXY1ysT_eWO{Sl1}0k9Y^{J6%t#bC>tg`L)eH9k2d`*uj!%@Ob+AP3jB4jIe#m{1@X zV<(`~ty5QA4AbuQwZi|j8($0YvMJ7hT9T~jb z$im72pdgFF@*5&ts=Py9yH9@9KR8m(mPR08`&<)IU7GEt^SPR_)YtrZnwH{%IJXNO z-DP|-CU-FZWR!aX{ZWl#PjMSANDGfAf5c!Y*eRKB02XI$+jtkZ; zzGi~(9H4NaX}{KfSyt4wp3P?$|AY6VnaoM*>)~6Y*~;xQFHn0kcg?F5s*Y;acU!YE zj});t^frxVN3yT?KK-*~*J+k7yx)vp@zzZUo}qYS(`~THRLuD_VXkbluy$5;bnOn~ z^Jw1oI^(|hGspyTT|dsVVaO-A2Eyw3`S*y|`j+*>O5+m2%R_Exp4Z;*N(a2Mi#^ZO zmq&ZA-Ht^9?`z+kY6IpH`iHGc{+FCb!H4I&(AV`x;JPtZg_cR|0~&(8LBody+tH=7 zI%~ZvGT`F|q!vTa_H4ftG66i1;IQCu;BXP~ z5Gq#RQ5wLZBdQ{pfbVgI%Avqs(m(grPXLw{_Co}(Tlc#|xkXBVYFsD~td~$T$BaWc zrL?Ie#=9sbsuhMh4 zHk$quOfzp%CcR%>~gxAj}s3ZtL z+>&Z|TiHSVPWF7-C+|yZS0pDuZ*i&wJ$f_c0Ri*AKN~+mvPnCT5dD*3jc{79kgqXV zOGT2eiJ0$MeRE?N(__2sezMW^WIivkiJu%jt}s;=;m-%zcisZIHH}_3$No4woc8PO z{y2~*1U^E2(!ARExiox_t-i9zV$dX!@As`#!=i zAU#@X>X~RNcny*Jf<1wMfUQFtJ?ew~AO8%)-?A?i%v3eADBHV|dw?wN3jrYj`IphF^CyQ8Cr&=#uUfrpEz_@ly8kiG8|=F561WQL-HD$^n zAbQCE<^(3;;mBSq++yQlyHQ{>0%yrx8Y?5jjJg96sTM7ZlQxe}+s>LSa(#IbWKgTr z{NV85RNznp(E^d-Sk~OIqO;8dNpJ&}B(a3??&E|{D(ZWb7|e343|n2SHow^Nuo${6 znNh*?Gq}BaN{PWz2yQRZOy+0vvI(d_HLr5bbDWJ3<-7yGAcXyYhbPgQ~3?&zx)6G@Ez7(d+oKJ z=UIC}U%<~%I}>6yD$&pwH(%jU>}rZLVpDA<8~b{|A|-CV(V?;L8a3GJ^{fXw*Jvum zsOCjuw6ydDFg*E%dwG&<5+(cw?fCl7PROar7Yq^Xhw4{SG-p$KuXJn86>zps!X@zH zbG{=?Xpx1fwby{?a%@~{;&JQA>J9 zFe;+!=j#b_RWbFwru8t+;ZqYn!u!DhzzX?b9F$hr83vjUA{0nmYe%ey-}jm6B<@Jm zd7?Ge+st6y?b%gnXFB0U=$Svovs&v8`tVE7(o{VpP#ASNf>anRI_Yz@G^64ozP~48 zDSAa;H(En(x2_xXlk61Sad+fjIa<>ZPY3Y+NtNB>MHf;-&Z=*Ckkd$aZg&#uyYH3X zuYL1uDe>j0G*x_?O_0wv;IlyM_5Nj$4Q|hEY}&=u>eJgZ;9X?QX$uP zlWu%!y~Tg1?S6f4Bx&5@y=GVI2RwgHx7a#qd^6+b>rC{f2-IPo^)FPaO&f=#=k9y_ zgX`n>L!xP1cha4Tn0tKUpZ5vOBEKbvUeuR zw!edI7Dn%FU5E{Y60YnLKd|R?sa}vjzFOVzSD|Yk?BW!=*)gJUCA{2{;W&{;D#n1ipIdZeFgR7s+)er<+ zv;;OiC@$P1+zxnzPGdnv@39`gHFQH7KCyE}3E02`1W8iqr?!gzwMiKaT@etF zb53%g6yF7TChRmcVGrl)Iy(K$5D(`Kj&1b_4_`xWjm=2K74tk!#GWtZ-s?_wGaZm> zKG0{*<&B&VdD3h=wVwm~n?TP|IMbat|J7d~@&jbvS>pTfHQP~ii%~3H6FzWBj zs+RGq9?SI|D!xH<?Qh>y*+ZD zev7*g0T2;8W-9iC6MW+-EFeA*QS=9|6_KhbXM$jYSvifi!YZ3gvkaYj{ObPbSLmMu zz9FaJH9xw9aNk_I9S-?u4qgu$^Xi3~j zBA}`aayj8fpIeiBHz`rfs`MZ#u>Mh2iE2?5lR>+&L9=v*2uze4JP%=*qLq(-$Uz z342Aqq-o5Cz14wG;{aYWNEJrzN&JgTvCe2ZvRQs3lhLMl7{0F{)jvcAc~g zG48dqK^N`Ar_gIi=c0C1vr^2+5+U5|fj0_n(qRge^i(_02Or;S83IG)rNcdSa%r$tk6#% zUI&ngHs6%KLMzh}5-f-}_z1V+O}>%R7Z1=&I{_)Xq?;7w2os)72@MIB+YoGWO49`h z-2;@*+P6+PNe>i>>*^{}jnI@_M<`ABS7r%yq~3O(yt`KdU`!xuJrbt`Q4lk}ujkt! zLy!6EA<>&Km6LuQi0Aeb1+%Z;ZG(f?16?7WcP2!6As%R*MiV%kPGQ$^Sf^HxLHIZ3 zA^f4Vz;Ok=w%nS_aof>?y9su_yPzV2w$kjAA{WF*Y~Q_z7q4tcr9Ag8&4qUUEhGIO zzd#>hBh1VYS}ZL61aNDmCZ)5gE+wTRRj`wdYlK6F1D$15j)&k{a^bMSnW*Dc zTy5sIf&fdkfhx}NNL1#U6-S*{KAmV6@0YSfLA;5Q@9TIwDh!ycRNC@3w{2Pp!9(#O zM?U!D(DeSSc3GozF`c*~M$~zF8>^o4%gGS>@u7O0oG;qx2ld069a^gGW9v)<#{H4k z-EFzV5!@iC8EHsu+)XI$p8$y$K-_sfC?j7q4s<-^^P03VT*o^8%X5DKaf9U!LnuAR zPzW4uF8%FV(UhpxviBK=7-Gy@0g#)c<~(QAhuvSe`aIhPX#JH_aev1r-c)#X3>}lDq2o zpG36~bXUbWL*+pHd7KOiXLbaO?z3-9{+bMhjW^_Q#sRyV#W>lq9CzZ<6HLem=-k}*^eSTt6a%ZCStoNlH*id<@}lFr z_kwx6hR5@3=W`1~UHb#yIPmzes~Z2D=oyu8|4lCa!p+zJ#o>w54we~*p7}|Di1f?* zkITH;yXj~3@LmXsQ{ZZb2dbpqV$xXK8zLIGNu>$!ag}kGh}^+4N#hPyC5j}{(m)xk z2X`A)XzN|8vj9DJjg?KW7kb`>V>8z`&-viD%v|x&OeaHast!OFa97u zz82D>rE1t|zS^a8qNXP@xa+4_9MM@yXf7;3H(4?~>dOa$ZB<=qz;8#p>O`#4W#!ZeohOgd1Np#O0#ezcw^0sZCYA7Gk12S^lZ0{Xs- zR+^#(jRSx5e+xTSA0J3}HDjLIzC4Ds_Wh^*PL+$Mj>39Q-j z2c~V)@WXalaWnB8Jb;*gP<$Os$8ij&^xRFe;tEtjl@#0p4G1XxpIA)nIV?_xPaV9) zr-dK|q!3zVKQEVNC5TDF3Feo$*7u2{N<;u5umhFx{*~;h;po+r|xXK@NsNwW3%*&QS}j02S~9APfu!V-;&@Yt%860R0UXGfC3 zB7F8iwv_nJ)jX4I*XhFW2eQG~^5eRIFHfPkPR=o__oHp`-8lYK)+O|2>2;=xw5c`{K+_g z9?*pi{{~%deOC=?&*i(8lDlCjHz-#6DjeErl6o`fA&-V_8-O3mui!Ea|3qu4 zbW7AO(O8N+i@yMw_EYK4w;3KvKqKz_-2dc)|3wY+(vto~H4;z(5EzUY!UvGJCd3Sn zHv==!N=nNAD{X55k{iu@!yv17lfzhyA}}qTjwU%yi4v+(4N+~!X1b8~Ww4D06S`V~uOUmBMTi*K95QnXb;J zs-7jq0d4(sv?qFhNJJNr?Gz<1RBA)HsfcdU%sZ>@QbGS^nJH50q+=9V4hb7FfSXk! z5n_L725FOAsYF*aoOv80oEF5j1mqQ27sLoISKZx>5&&}EY-*?RIiTXKhDx~3x_o3M z7eN&X0PxTDQyos>_Ev{y#6jqG*XR5&Cl>qs4ev~ZlHVB5VLty*MNcBF>5of{7&P94 zcVmCZH_2*&pEv<9XQj+?-}t=2c3BJd;ROfFwD#0Hv>Wsfy&1_+e@*Q46%2+EOM(&$ zzBh+u97RY~-Nh1ZMR2+4k(2$e72i)L=Pcg{FSx&K%+>N)*74q+`%O98YNh9 zDu~nxD*`rfEh7m-CwAUc_+>@rG9Me5En}w(4D^|}W?zBCQ2~9{tQgaV{ww%1 zhC{23P#D-4s~MoHkZgv4)!Ty~W1odh(gp4CKqgGD71ppUM#b8 zx*pCmsCs$QxIFzeE{KGVpvA-xIXEq|uV5643gYzk;yls>UyO|$V?q@IK9B(jVwAm) zkz!3DTg3%J^f$Xu9%K8cyty0(iLbA$w`WZ|c(D`{JW!3xdl9GI5;tGRcJFeG-&?+p zMl-t^PGO(@6zk7NmNjek%gQ3_R72qe190#~?ROrT>(}^xg+Kloz3#iQfDr)I)9RkK zZdNi+0pkLt7AtVDlXR%>nh-8$soH%*IO~L7_!3?7H=s?uuEKYFnS0ci=FWjP6^fge6|CUBTgFMk<9*{M2u*z?iG3#y^Q=Thxir zV3!HuU@5^g;Ek%|+!e3+Z&cAgofSqG@Szh$3ibw;3zb6Nuw>x0RYvMS6$fdCZlqvk z3PS<5#u!VUQY{)v;8IWeodj;xn7#Ve4&ws`7vc>`(b5;^B2-?N&1wZ?9W1_ik>q|M z+r@Z;6DL1dO`U_B28qC}+8jJhG!Q`SDRjg$RXsQ=2@9aPUw`A0fY71piKhf+)7hdS z`}1(nf;d}nwa3es3=m#t6-WCf`-q?wM8f>@9Q$DMhjk%bgB0TP>^>kBN=z;>ZG>nz zMz^vv;)&=yZdR(zEE3E$crApl{3~6H^$;O7@eE~S)E&p`po{5oTuHKKXtAgY5hmsu z!`hYKp$?`OKSO;lK4dXoDC0&+QZi{wMPFU|2H1s_T^-Njd^Y)QwZ}lIhIE@NVsNH~ zxU}-$$@Kpb8D$LOXz8r>kYJ*rL0E|5&{!QIv}hFqv;M{|TNvdS%O@PrXHbS5#-`i| z9waqFO(w931C24W$S}daA9NsTnnI_XqX4$Rl%;var{xS=|IBJb zc6N)iiQesM>WhPuoi&o^T_aBk?=e1|(Q&cG@3lNvRl_cNitU^iE=%gJk?un0@;I+P zfECV(_j=mck-Nl_5ycCkqZ+|^c3{pV^C*u|_3Oz9=}m-~%lQl67A6cX;T)zAm2Gm| zr?`6D8EQKIBi@Yi#y>tO2l@?uDKP6^Cw7<7F)jd#GxxvYpW3A{4wG(^ zLrI$-1B6#Qm2~zaUx7rX8jDUCjRL}V*sJLF1Lb+4Itzmqw19!E6+=R?)W>q7>e6$R zdyUzN@=z9uITfm53dbKa%-to?Z5S~Vx6{{lI;O`f8U^fZoHtnjSm*5rvIk1_oE-3 zj@{Kd`SaRj8IQ1e@DgfMqUcRJPPt3g2@X57$As7Gl08R$my@b1Byu!%D za7Nd|unZ1`sGMl2{f?-r5^%-=595*Cay(j}5e9YCGUTJQ(rt91N&OH7Vuk&nLe-tM z4)H_e3P*Ni{3{{*JBU9C*v83#;iEvl%A%kZxniar$Tv8V`um6GsED?ndGR(Ib^osP z$6a{^t)_dm4tQ0oHqHaY4%FcgrMM{*j$ApUCZ*S}8V=ym|5MOsUcJ$4?1e$y4w#hJ2tc{9gHtSa=ya_F7hP zzp5i4+dnEl%GmGjtq-aw6~{>pox(6>qj@4rCBJSdU18M%Y!ZY3i0Lp|#{4LFtKspLigRx-Z zOy*yWlY^o!f*rrFg0i$6Ss8Hi&5wBrmxRL(!H_cf3}p{%ALzRm71jlp5zGWlVW&?a z#e(wZE)4h6x^+LQ_R`U8r?J%M4JctnYEtd89QYIJYx;IcV{16LKNaGXvcpyK{_KEI4_Pqx;;L=v9v;W)4TYgl{)+|a^DeJ30 zlZU>n{zn)LC%wjW_jGuNO&stkCj3L3J$EhX){V31Hc5pCMw#l;E2?vFi2KLe=>yKr z->|5T^$nAoGKpegRKX2tMIQ+Fd*SnG{p%Uq$EQ*M464aT9nIlnDq(U*u4GjkN zo*MmeBQ`76E^E|+1!3x7FANvIA5Yw)KJuZ|zR18t;YNe~2Ht5HcE@2dEv52N`%FYi zX1E<@OzvJm4mQR9GtqZ=_78X4Lzh#_3-=jDN9IfIyU$QWC=mr>_v}A#V58ZZO8?kv zpK+v6_Ljq70=YpqC9RZLFGg84j9=0t6|18C`47~iCjIEZ{csdG(01bLwWu@U?_{p* ze*i;&J2vv$?iD1|cZnA^TORnW7yBEfN;G(pO8HD@Sb_Z(rgg64Mw4BCS#9%&>mO#k5IIJ= zdbR`b_2Ylz2QrueAAX?39GR0voZQuADSsZoeC+VK9Y#s_e*^Zze($??ZN-g7&=2-r zQ$e|hbV>PW8gJ%jN$X@@2Hb?Ia;aI8n&e3Q_7UDKh{w8UJ)Z#kSBT6z5?|s>itBg(?J;#FPZ{vz3)@h_&MMp(Ph(|@KG_-&?QRgzgdqf#s zrZWIre%1d>z*aAUq1AdQB-Jg|tTUCR^H}NRyjD8N{$9Mek4BNAs3+>J2ZtwoeQL8r zMJw+yR%cM<(J%NeWbr8jPs=5YHSW=;m4L`l>}ISdfDEwb_>ayzgHi)%;%6bED9)@X z=dR31)v|E$ALO>lJ>UNexcj&Lp$@}wCXy{aP4y4Vl*=kUW*=8kd+YE5w$!5~>51bA zE6-uIJGM_nMrB^2L&r-Ua3*r`fo@xt+(66mG08la3BKY}nm z_UW_OrkDQGiVTTFw(!;?d8=S$KTE`*8P?%hZ1ccuy^YF-aqG=I(173mzsynp=C3%E z;e9rA`Lpxx=bAe=>aT_nA~buSef>zL|1Ewp{pHgK^r){$vH7lq|I^|BzGB)LV*n_g zGHi|i1)u!W946EZ$Q8j|4BI^akBR=xVmU$>XJ}IPI9r$h89x6Oo)e%WS3r5Gdl!TL ze@o7TrHoMEgt?1Z|9M#c{?Z43qNC|0I$E@%V*<~fni(#CUY6)C_>*$o zxe+oV7gb9-0M;K+2MBNPUq5sPe)M?@6x{}rhhUa0bof8 zteX^^P;OFrOfHKQ$&V@-YhFsmqFGi;Y1mk{I1Oqm`RTigkD&05T@Y!1q^6hFAEcRv zMvf5aNF5DgV$JnA#oggmz&YaJOktHd#WPcHjQGcs6(7gDJLVIAR_HX159ZtZi_L_TJEvM-*jeH%)X`0i;&$4RrHSk_cMH5Y5k>{ri z-T99I!F633@jlWHw5S|VRyJ7a0ZY8FuV7Us?FL{A7-=77vDPA3k)9U#!nGv%@{&=~ zs7K}51tWQ88>?iGZZHv*6AS4Z9y*&n5&H`twOyV~%>WZIb+~ND%R~;nVv4|m8XL=a z|DBs)kwZD^NIXWNQasXEci=DK-v5WbrZ2!$ZCW;pB9|3m?(O@x%Ex|&;Iaf66` z2`hkO;C_8yS0~wpPRx>NAfhI;ILn#~jdsIx=sN1Q55@=agm89}(7)U^7xkP4pc;%; zWr$JJ@3#4NVMPCN`-;!PLux4a2D}#5Z)4CuZuF;w`Ax_B@;^+)6hTU)u?vZ<>#O`X zc=^v8s0qVq#&rw8ET;vA_?{ZC*Ye$E>J`A2RlR9u8YO$0zxUQVx}vGl(oPcqZQSOb z&y=zuGg=2&rg51Nfv+-2*3^s!%a%<|HA_+vzxBBRqQJX-{_W;|pO!J#Ky$_(n8hw% z#cT7+*D%@e9&nUy^5cCtKH;6-AHl~gx8E`5oWCc=wgokbhD%jBLXfW_sS5TP&j?TL zd!U+>M4Mbn{xe$52m3$F?nnET>H?lASNc5HJY&H;)MY8qeM5{5U@+Kn_dO^9q0x$O zwgSNiDZq`Qw+%hmS94v4t(ntq1!Ax(PL`ETYO98yfxcr=(Wc2eDaT2)Q2E`-@UGfKAWo`_2r7EB2I>afSN48;!)czKq*Xp(2bysFvo6-{K~PjRK@ zVqS6EMT2Mic4(SU)<6xRTTp@)$oUWGtk5hBxK(MvLDQ=rE&lz35$2Oq%30SRG%3T; zvx{Xy&-LHo+@oK0M{PTfMDfbTBWAn5j;)FM^)_ zRnnl23Ljrg*Ogq!Jxp#C1{$J=sGzA=`*r!zw$=lj%B_>o4cd#AuW3HS0{hX35J!ox z02HD*CspnS$?K_|!$Q+GQQHLNbdT8kQ)AzWhuzMHiX}w0q}A2RsoQ1JO8a<&-*MGp z?5Nx9@!dp_j7MATaiG*{Q@dq0Vk>&?%;)w_o2Rh(Qs?o^_yG8L?loy_-=fTb#eAad#$l3Z5Un)Fv5Y$NzAr~9gX((sq^1^fPky0}hR(anyNbB5)7 z??#ly(7Y+%_eu6!89e6uV(T_)h6BY$_9jO(ST2%j^A)>x+K~@0&~LK$e2RHGO=*6V zwU-)t?sqhv@o(91HO5&=__h;x1lCTe%)`R6&hEYsqn|!cRQTzVZN>R|5k}#Daj#>+ zvnRe=9$wI9^+aNt#<8)Y#d&%^4|$fmjud#jw=Nwx_7*uhSMl?=uAYX!c)1{5RHP}v z2J$%`34qj`%ivoVLVjbKx6Ij$Jha$9>BdJfJ6H^_s_8Vo`>cP_t#RA`cxQ3j`PtAi z{w_h(-K4R7qpWfE_l~bAF}I=V?a_6pp#}kFqk5(1p0AhtoSeSHspugcVAN-cSi`ki z9LIT<_V%pvp`3HU&hLCk|1jPdVV2JK`MWWYzOH=bUS)s&JVX5S?#1QVQuMq&7|0R% z+331X{AS8Y@YA;NGXBTzo?%TrDdqd##078J%ADZRPztm{g z4YXo(FIzZ|Nz&XH%(9J8xrx%|hw~#R)jGTl($F_!Oti8MeJNK^RoXSizzm{!S>SD@ zXTZ+QT`oRiMI6rh;TH-6D&t44;r87?WijQka4m}wE%xLyimloH&lW)n@50`GAuUla zb&g9O`^d_bYv@GvvYpUU;GMT(?3rA2_phtwIh(WQvDe!3jjM7soD~xC#4e-0^w0Am zZo2}hI&{uP_ag>lIa&m+K*tIl#e&~Yo{~@Cbl#^^+ycW+^ZPuCkByc_pjSB>1YGz& zn9WCE@aa9dz3@zv0=gR-#Wp@y4SD$HatcCLJVJ(#wRH~fj?|{E=x`7GQLiveGEw0p zQ~RFVm7s_^g0nuW92n!zO(4z8VjxYnyJ}xec4IK7844aNbF2$>PJ86(!alpxt@$A z+(nG@=s(6ke)Kz=S!wJEA)0UZyM3H(=X8B}vN;_34f?@rcIPM0%9nCKR$H%ap4NMs zaNFtrip$=shvg#=+vYJ9$F;AfARiFD02yj*ebp3XGMf9)?!z;j|!& z3CYhige@nLex=cs+$Sx#LorTYnJ3{Ojjd#IYv=kQIgWh6@d<-FcGdSP9_dM^`LEJ; z6+ce6CQe>@HiLZSRnhGsgd&<*bq0;ezx$FWJUPORJu-Ei&m;<;W^Wc?({YqnsCs&t zJdMbjNG7=hGv%o({d8okPfnU%R#Z6`Q2luGK1p@N_G;?4qGYjc<7y|R6S;_VXB6xg z?TJi>e1V>!-KMpDQn~onaYaPdvIapEZp=mB^gOY1VTXbnr>Ki(J3W<>=PBO>=t8~0 zYpmS2u>i_=*dFlJaWcZtStt!pL+d z)3?RYWqJ%V#iOe?pIF@d$Gz)t?1Sr8Y4O|YzHq;@r^M2NkDgNg&3rBovaZ|Tgt($ z-WJfOIMEwp(klJ7i{@~$=SjD$#UQ@qbIm>Hmf@C@SVH6=14MUvD)@#Dg=s*!y65(C zp>hPIpA7nx&2L{6ne7_q5^;I*IB3-AE;9J@+A!O%8fR6XMY^~XoniS>l?H^rSy?=8 z^ufOHm3OYcMM*mSLDZL}wDSonKw8%C>W|^u-KKoDr>py;DGN33q{Tgv-t1< z+Ab2sBMDJ>V<>rRy{7g=_+d6=@kL6k^l#0Q4S;CTvUZG&ekdP5^A4_KfY4D+e{e}L zEt3T}$@8AXPfe$;cq;+u*FqPBHm7(|%0*Yk321-E)A6a<+!EiR#w%&{DO|xXZP!vx z=|a#()oPtiU2HzKVfv?7awh$S>+VDXzFRi)r0U_p-3!(dA?DLCxY)@q4!OSqYzM>s z_>PW=&P}pA@MP%E{n8!h!QSFW*f9SNj?bA4`;oSc$&P>(8#RRid$Pd~TB}Ua;mJP+ z0$UaHdo3?nU^0H-n=2#K)cL_Vn%`YccOp6JzhCDliLRegubD)g@PqGo99oD!-Fp+e z#(sIY>8c|z)|1uWwK(<3ec&a#+s}e_)K*tfg)Fgz*)qOkku-&m&-^@2ew&?u1ljKl941?r&A!Ryd zWHlt>eI|?yckvi6O!beWp5r!X35xV)J zo6o4z2z_o-y(SX1`mNWn`hBjQbC{MD1MMKHW>Ua^;h!v!=%AMN@Obk!sr!d zp#u5(IusXG@yJ|m72~xO0PBJ$1V8SmSEO*jQ)tP6^vlH>JG{8Ew=V{y=!#H!bYIRi z#>N4tJP1W*KD6sM%sm(m*zO(7xlSaoH`wgEKKA*GkGk~&@fn)HpqnxS5Y~C;H{UOm zKKiD&ObyeGL%$%I#i4ZdVzKF&hl`iHA_l8)wozmrAQxqNjIE2M=D{Mh7>> zM;Jm=7`~e^CxT0u{)$shACikcZ^Q_)Y<>1Ftm2g|TyiJ7)|Pdh!+NHZTsosaw;#G} zfIT=PwXdKM->~h;WcH)sQyq)77xT1>a}{9ygAuPz3h=yMmSg@K5G%eq7E9h|`rTE9 z(Q$Yd+vKe-QEz9*>@i5SQQ~)hi0k!yWFs#X{H1W3=cejMa-$)(;}JpYRZ_oq#Zy@|9)vzdzp1$xyJId+;L&M`L%k8*f zG|d&t2~B*m@t4%4i={2sn?8KopL-S+Hoqx*%$S`(^MO(WoUSXK*WSAk#4!f0*M*mN z?LT{z8i|hH+lL@0qxM|m`d^x4)|+D(DPhchxT1LNzZoXiN+RBZs0f6Y=cR9o_cq3)i`ge3Y6|h)4B+DSCl}EY-s6W;WNKQ>Sq& zg&tYd&!3NoZhSOU+l@So#f>~q^Tqzz^`;5)l>u!nF~$49DEBXeqwiu32n^7O1@C~O zc_~Dt)ihe+gQJG>iR}=Q+6mQ}g0CW&frWLqtVXAW9`i{_$jfChteDa#rxwyI^|B;% z%)h)7jd-x!(YmVG(MP4Y%{q`}iJiM0pP^6*90KxJP!TB^xO)4QolMt7(dO6GjGB&6 zp#YoXGaqh@pJ4f3CR)W;ri>S|--pd;9yken$*m+AJZo%P8D}eK`WeVUu(tT-@OAG-`AC2rSU167d8!Y zUQGcqOL+z6{mFbvZge_wkuPPFsBZ4WQ@BjGbKdrT?kp~&FWUmks@^MI=RZnAF@~CnoVQ%AZ-czrG zRAdkNqMHwF`8G<3;9mWgIGhzN|1h)DAu-azjaxpdq4D}IbrXc)edTi82-ZGqjNdjk z0Yr<8s2HEH+`<)p9F%UAAI?5GuHme5|B)%;;VpUi@h{|X)g?sgOYTa!F(ClZ?sye0 z4FD9zEQGBn81xGm^(Kl@G!Y$8o8_xMwF_}OtdDHfo-NSRwEO*}c!BXTG5!$LZX0q1 ztl@iTJZV~)b3VtB1i{^~Bc9T^KKkqr%z(lqAERX4A12WKs9wrNJf+O)(_+}vks>UT zd0trfu}yW3J;e1m+<1@_5t2;H!XNwmXu)XsZp|xc1WYd z#tjoFvwf(}+Ftg!vhg)ARoijP;kW2JHe2LVA;(|oodqTrTK4&cpI}R$55$)Lec}qQWw3j(y%8S4J=}*UzW+wQM zv8q%@UsK1rSH!;E$n3aYMEANSprp#L^#QJC^6Q&}zHe$=p5=&lu=00nR$^>B*?e~x z<#kvW+s#8pnctf8!o@Xmsg!jY4b*!D366wmeK2)Rdb{AzhmKk1T zS>2Vy78B73`PR;?JaN4PHQntT68hG>7|v!-+uy%py6;|%b2G95+>GLg(r5PZz|`oV z2Uk)gCsL2e%XHh|1bUle@3D8t;}B{8V{T{Qx?9uiSMrNx_vR7N$DKQ+p8c)7E~$f0 zseie~1w^W*1~yM;_#8g`#zmp7i6O?w@RhuQ=`d+B-f3B+f#@^#NJp4)8*mj)>i5>9 zV1;m1GN5(8@9@DA>gva3(lR1?Y`f5I)@bK-`cc$#HN_<=8(!0He0S}I=FJXG^lJLW z*|@6-+j7H3;HTiAHd`=Y%)Xi#zAivrnck@dmu5i9NP=!nWolZrF}DzbD2!r_C*anW zY2bYTy>qRURM=pU;0*9A&*zOUts08@BJQeP3XUKt@g-ZYR@1gKsmWUE2J>@%rYY7m za?frWa za$$MEk^0(6y5wB&HQ@IB$V&@1?K#eYvKr1&<_Pn~&4|lk1@)95%O=b5+CHISnYhH^DI{xD|aN)z;@o zj;t?(V@tDUdHBOSl?V72y06bhK$9|ME}~>+N*YBeCetu7$|3L;9#($FP3GoWE4r+@ zk&{wceMyO@6nJz3)2A_1n^*htqR8_D$-wt1o%r%ARnJ~kdaJ~ax(e&!sWjHa+_BRy z$uRvdn=9hp1`~DK2DT# z7JpJEQKk1B@jqFK(9(c=HG3mF;hi+l9reF@E}^_~Qaa4C02f9WiNoFZ79fv9Sb4%! z(PUtH8{c)wqn6dRw%?T=7}U8{XfVPPLt>{t_IF&ry@;A>>|j$92_zOE{#Pr9mjeRvqHl+09^Jc;IEX3=3y7}pO=t|?_gAk zpKtUHv-+`8<63KAsYuP@7d~Se7O) zNR001=ewZgUcVXY&~@&z2|dBzc!w}bBr?lmJSVCe905Y(>J+UX zE-a3%dLoXDtjzCpmP;zi>XBhj)kWw1jd9t&eaQ=7@efzd3n~1a!Csn7Ff3b5g0@O;C1UAR6 z9M5vG#DHS8SW9b;xpE_g#8&lZTFsKn$I`9(XPod2`Z?g0=)CD$@zLzZ?9~e%uia~a zUGHq9>kZ9V?XDB3!G%+2b~)L&M%|2MR=#uO5s4+|Ji9xeP+v(kC51*;i)y&$vBebL zU#Rr@PI)qAIeY}BHbLYE}ZKTh1w}&54lS=d@be?;Ku_PW*4Vz)#3 zNez)xqeFItY`vn}d%5DqVmF32lbD@j{#ttD+GBY~-8n)UGmB41set(DYvC-3Q9D+O zxwN->@bYNoZrVe~WzJIjP>{8vqt>wGmxlM}6|Vh#Pbg&`{sF~!=;Z* za;i~|^ykINBOgd}+GaW0p4)7tdn+#V9nZWy=R4OFE;I1^_8dY0Foms#pP$J(_@2Jw zp~T2ypuO;@A-D_7YV!9NeV!RsEHYZL_q-hjDAc@mC)GU*%}u)cZDd9~-SN|3^93Pp z1tz*+H;nl^Lw3>fT}k7N^7Mk{65-aHYMx0u(r(OsvC_&BEBDtR1B8Q!W>} z_O%W=I|H9yyno@z1T-^_OdjU5r_1>UI^e;cYB2q zXqqahqrry0;Lb|VvvoXjmEJ2(K+vfSkanJE`w|e>)xYXgP87lTU?5C*wBw?2_<=D@qCp4^oF+U;srj`gryHp5)O~h9$m?Kr)Jr z-{FqgA6w_-9is1dk978AggoruTAc&3-*fxEJQ3teY`FTAOt+2W_J(m-JHWz#IzCB` zUVT#Rz*??B{&MtuAX_7OTS|d#Y8vjcbXxIHik=Ah-1gGY!Fs22R7pRRs&`2XJ+sS( zk0oZZh@ooeFo{!K`3@BM&Tfq;6Du+oy=k61v4!(XBewpQxtMZ63%-A_8Q+WSbcxX<{reVch?D=_j7bG+g z?ZM!;$AWvwP^FyeY))XPHaGeIHReuUS&2fK%|{!c7>GrKR|MKcJ1% z!Iq%#ARt1?6Nk4#a~HU@yT%3@U4NHhSwaK|JyECfD*=nPOecg(K{P&l1y?DyK)E){ zgVo6FIn)IxGNuy?-It`S@_BU5C?+mErH`C`r+eEU5(YnY2z5Ufbi2*(jFPo(P0jjL zr^Uh@-k8;sFHypsxL>*mB^JEsi>pRV&6YE0Du?EDOlXd*WF3@M#F0ObQg~NBL*qkg zY#6;a?6slkC0_M&WbcC?(FSn22@Xwfkn> zDJnG50k>XH^n9u!7XZ5HWgTDo_!^U(^!bNs9#(^BX?;I-&fK4H_L6cv%^7N(Td%l+ zo3Qr2Aba=xX7$lS<^|ZDMHdjXtZj=WthC1I2s7L6d;NqzNacpyZ-Gv;28lG#QlIIm<9Ocwxc>$C=0T+mx1$|DzSYAY&Hp*OK?mtH4r7eu@3M z4aHcb@wI*zwO3!-+kCsBpTP!+^y7Uy+IjE!vLps zd0Vz7H%ykTEAT|taFp$JxzRXlreE5v2KfcBag@yKy+Kif%_5BJ!&o$K)Kfn~79pB@ zDT>Z~-2(NQTR@q_^xft0^O17P4(k1GzM)-JxzLxtN~~WAWx~vV_1G$3yW0nD8>A=& zb$)9dwiNLNYF$8zPw@Xd4B-3;kZiyzYo#eS;KrHxSA6;}9FUivN@8#|rl6 zNn$pv!uIq;Ws)0PQwEX66>aym(C@W8ecfG7c-ai&sEP|KXPMpeB(wRL{)b}5hSHC5 zAc&yLt|^AcW%o4&`nVOrhep$m)OrI?5Q4V5PeZ)I~f5Q^WvqQd&XPu^E;Jw>}9M4VaSsjOv z;>+I}Pu`alBVIZVq?yBgDZdxk?e<2Cr0-hEa$W#X@x9rVw-T}@(CD7vDaW}}!V9=^ zD}r)1HGGFF;1!5fPzNDL5|tolaF){jMedDCr04UMSB~Nf1@9aaywZhErZhQJ_1leh zblOWRSavcHG>!uz*G18SHi!-Ef~UeIxOSlxP{1B(do6Jg(Hzh2MA}0n?puuQmvkzz zrHV#RTX#-H8L<%WnI}>dJD#{&?^o93O?gaszQ|16-0!3y^}4^ETk82g0AoO$zoQ3i z{j!Jc&;RRR*|)#_ZTsK<@~^gOkA}QE`?0Pg_RJ6e(f;Q@|JeLV$)8DD|JV=g@fSAP zp2OYEt$Olld+Nz0wuh#p`)%{4&9-^V?(U3s*fwuoVL$rbPeWVR;Ul(o=`!28cc0z& zkKeV;O(X_GdisPF_eJQcW@^Ra{`z8CE zFa4!0S+lK2&K?_gue2}T`j_?(|L_lC&aCx*ww^I&EAL-qfAigYZ0*)vJ@WNvvmcE| z4(_$(_uXkvZSL+B<9_eoeal{wzC+vWsiiNf){q~!P4*9ecaI%8>@NxPv}VaOw$pe0 z?)Uk!*5^&Jr`8}d(8|VTOYHG`@3Qs#y8GOJoxcBfV4FSj+{SLAoG*>Ds2fX-u-E?n zuWq+TpIKvvyV^3FYx;9_s3Q=9G6HQK>JV2RIz+4GJ?(zV6z)P zpp}Qq^A`2QTqr{eF1ieI?9dQUc+nH6uv_POp>rfU;VF*bU*Ip~d{+i}HfQiJ@CApW zZ)l~Dk`K1sH{lU52~5Ey2~EgC)=)3r`dv8Q|yK3m)qHApJk)nC#9}K`|X7# zkJ{RGv+U~2FR)`f*4vZIH{0}i^K9gy!}j8ftL$axIcw&rHr8*?-0|`z+rECeZQ8fn z#+^LRE z!qR~2sgow#nBxa*_ty3H_){;~0e_*@8!x%cM($dGv=RbZ@FNeV6?772W-V- z57?@02kmXgcG;cZx!*=jnPb0l#XNiPk!Nk(>~rn1b7z(<)^=bvA>>tDS4c6ng`;61kK)aiEZ+umsF zmi{!1>6O>M!}jjnX-_|Lk3DNM?V5|H+udxXWAmquu`Nf&*|A;gZQIuEHhS88n>AySZT7c_kDoN&4jnyc&px`uI{jzG zrd*CK_kYhed)9s0bKs~=nK{e0tlwZ~UHT52Gj@;T`GlQv_J#K5c@tg#VLNNqXj{JS zpiMZu&HM0@?e~72GxjC>_FXU8sW<&c+qT5};<%pwmTSWKa@-d^e)7mNTfcRSUG(<% z+F9fG*rNM>;-~8Q_RfpXvh?=9bx%HM%U|4S=lL?z55E7ec6iiO`=z&@VJlu(WBWU& z*#+m!vq|H9U~)QP5$JZY(8I+;H;~GUByUOO((8znjsmW*(v-B*qT5`>(%@gh8`=?Y z8W)1yu9O0ai!ZLYoRK5=%LO@gNCe*co`(cKn!`unhZep zq+nBeoyJA7w})Hj{mMDGAzl|qitZOWD&3)$FoZxcT8W>bt@2d3DHm(pB|;nangnWr z9-52q&cv@uePAecx1vWip&KeHM>d^44V^ETO8s6>{iZo>E7%(|*Pp=E&?b7HbOgy- z2b~rW41I`gsjjHsIlO}@y}^m1GT3(1q&m`aGkc+=C&wV~NZzd>JFY2sJe)}kQ2&6;~^OZof4r{Jt5Z_W2QU%lSa zelner=}9itk(Qg`ulBy^tMjDwv@D%z-pzJ`OOQ?am&%1QytVd5driJKnoK3hXrVxL z2eV=3mGo|oL_*pg%EjNP@VCWvsjubSpgrktGqsU7c2Zqc-i#lb^w-;EUv&A~ieG#~ zDR2H)aESEa(1E?S@|mC5_kVP+-S_zOJ~#H;L7Qrqoj={~{^5^p-BSNEcf7Vt(|-6)i!3+QhV7~2Y>SLlXhs=I(uf>i+1=>_r28#(@wV; zUF&VhbI;n{kH6$W;wU??bE_?1=KhYEXot2Qv@PqNvlV^^z_KSEw-;AEXUE2#Zo8iQ zslBjuovqnA$}XHc-S!6ee9dy?$u|46)9j41PW9EaJ$8K5eB1HlL$=xjs0W|kW|vg-4JFvxm^vF(o@7w0scfY+j^ncP$(1&FEKdjOlsRM%{rDNX;PP|q{_j6v=U+I_o_h3gTl}4WvdQOOYF!&w*}6@u z?djzkY|r+W?fK_7*z%t&w*4O99$f#T9oo0cCeB@8Gp0^-ogH@CtXX#a&>s8g1CQB; z=by6;+cw*Z4ZG~D8Ds6w^;%~j)Y1@UHpwIQ4*!X)IWy+k6zGpV) zZMOf3hdqdX&KAFL#NK+wX|~UI7vm^Sw3#zz+8fTDYokW*vW|&o+n%SNw2iyh+5Jy% z@r9Z3w)pO+Y~OzFiy38WSFf;*E0)-!OJA@Tmi^SW`XbsR&+Ks9qwUC^?e^pE-EDgh z9r8t=1GazvF`G4Su1)Yok(iG8!ozl3wR)4yoIA~){pmCI#*63M{olLC9=qp0oBqbj zY{%pOW-DIVVoRP~XNUJ}wa1@aWh)=M*N&fhsU3Lsr*`c0**0s=**0bLUVG)xWS^%C zJb?H4?RU%UKDgDs_sDv?_UC5X{SQ8CkKXk!HvNJt?c}5Te7A|V7wzDMc;D^B9ewD|lOE0+%y_Py zeBOTVuL`u0f#&ZKbe$ZXE*RQ8r`+jEIpAY=m^S5fwbMU3JAF~X893P4!H@Ew?gxKc z$U~WWa>PA05b=cxPp&q=7=4Zxm*JD(((RRpGjegpZohW?1KzGX?o7MRVrxvhufag= z13OC5rt5W44iYwWL`ow~7l^cBH`o@V=MA!@fy$`bQ$2{Mb(P~Bj5cB)ozd|QhpWWp z`T?NPFK=v?aHZ@pV^DM)a@u!%Pic&YAD9o~MH@WL5(_-+x@oskd6-+STHR=sr*j%+ z<{wAB$0@{VSv!8hGR`-4I+<7A=VF(y!*h22)4oe4rC~YH3+%)ry6VcI*As1Nzd{)r zj(e(d%8U!+qXQ17Yrwrs5T&^u7TwBzRsDe#4uVRfiT2 z+F`06PAGZA8!<_BP)<{&w~~RzZoLk6@Ow+;cYTeqbr7goTNChVJ)ndGv>FkES|xl= zlXl6&*fFM_;9yRN@eh>v0bSp<4RQ^PamPLG{4>6uTri#sKwse(8>7bx{v)ma36JJx zmGjfJ*wNA9?{{GlnuA^c_$~mxOWbbpox;0ZROW9aV-|buIpdk&!}}ACyUtRR>j;?p zJ1^opW};uh6!c+QIEx?9pd`WLs9Ow;4Y_ z-NqgEpl<0NJJol_JI8k4Q9NbZbUXF%PFuBmx2=BR1>3)4oK2m*z{XFU>^s8K!+A2| z$X+|*Kf!e9aHox&G}dO!Jjph{aM*YI_t=P2rrVV1oi=`r2VwNX|Bdo~j2=7II(=7j z!Gcq4&67v%;NESv?Ad31w|TxzopW*E<*R7kn1lAipYE_rryjHaz5I~<#x;j*`N`94 z;;fl=bo)v>a(tpqpEJRpyX%0xX~sm`JL8mqRZ!p`qsC9L$tO*=i6{Fm?^O5q$n&;s z_hCD8+63#I+~GcV+5Urm>2|EkZ?!(^yY*vj`l*xc*xFA2iE96C>d~Y80`s`-+`Pe- zKDXR+09((2BabJwM$VxQ*Bp>B> zR=~f1+a`PH@in$<-OF~mpYRhVO|>z;o8Q-T>KPZ>HP`qZ0OQ8`T-a-CpMT0WZtSuh zJEz%{uJJZ))&yT<2{R_(Jl1_*z3v5DyYCg-w0nxp^8QWszK&IeYR@pQd{PW zA9K!{|Npc1o=ut^*O}lc@4an{wrDiGAwW=~D2U?9t+WxdGqJm|8~brT&F+W&0sIZ~ z6LvmLXd*@`|g3%JKNq`s+1mhhlu$Kg<4r%Z1wXZfgr{tXx$X>UO%yS-W3+B#s1 zIhg_c#r|g5Y21=I@L1o#PUSnBvbM1;o13_gkG9Ja%DDoAJ=Lf)xH;wKrE@YmR)PDV z5BKRB9_(0E(A6)^9WAoGIxWxs)nCYaZ@nWQ+!~j|FFYfSkYSE_uCA+>jk#$#H}ESN z#{Js!>hsXOMH*1{_7X7segF5+0>1HJ&;Ak%M2!okCDA+}W@3Edv&o^Ibk96j?@AaZ zLX2k-9{GW}HbO{-&adOm2Ad@^zzz%%_~t->3b`m6jd+Fuq{;e=1hk0AGdOl6LdQ^a^V^#{Myhz_DNa2O}s#W;e4JTdFZ@7sVWoBu{xm>&)-00}1IF@Gcw8QA& zp^Oawe!lU0P`vxeN%_U`IBfD_m_Da0A@<|)jp06QJZKYh1}hgQJjF5G)Hl4Ce~R;O z5jVLH&D+~6qYq{YtQ4mx!J(ukCojh@Pm{?|GMAQz1(6miN+*o>l-bzc7Z9psM#Cu6 zJlI(7>N{G0$9gX&VEQ)xOopYIE{w-%h2h97ak}x^i@tkv??uhEz|g6$Z;)nmNSe^W z*;t;F+e4Ewx442@wvH-F`teWY*Oz9csk0Xo)0gE}?|mQ>GyGN_`g10RdBSH6OEV)f!VdK4 zv<%~0`c*9F=N`m#%y(54yOAPmi}Nywj`Us3kndoaZ+&AOOY6TVn)J9+#=vWehZ878~V3TTq|Op{$3;reu5? zo!?F3pur2h4QFn8RwgGWu(LMm!#2ucb5mN|+i~tzBRZ*5(t5C0Mu&!E89Hy_Q0}JM zS~=L=ARi2@%JUd_ni;w#ccyFx9d^Kg!mob%WBG@Vhvda)o(pAK#eu9Uon_1F3zbCu zt=1X03aLGcPVn7N|zs+?IiNe|m?RVNmB^fBB(Yxfk|j zpk+81#~oL-?!Z=cwUzS3k$U;3zx|1Pi2<;K_*7#0+S~Gz_s+3xuleGj3mfa(H4QRx z<<~MeJ|{P@nqmek4frXFxoXrGAo5>^&!3a))AJ}7r~Ac=U%o2#&E)DVD=Q8z!#Da89-fZ7b(42 zuN5?sqq1$fBJ%leQ&#YC>nK0^yf-r6sq91msI&8iqYWbJho?4Ryp$I7>>+FCogMh- z;w(Mml$(VaC!Di88b(7)`MLX)aE^4l!GJ*Pa2e+XTxP*+1!YtXs^VeUssjj*XSQs1 zi%mScIJm)!vrRnXz+Jri-DUYK=cAN?>B#fhU~)i2W^3s4njNRJoEP#qP4=&np+-`OJ6RqAYZpzqSjo@MPWmSK#O!vnd} z0LNzc>03T6Pnl1(R3-!7IR=PC@&Ti6e3BPE%~M;mCdFp3nSS$46n&-j^(eDVM9f*r zm{}Zm_6ppB9<))g_pbR5Rc>dX-GyX~&F)Ii<{g`LkHZRNBJ6{(J z-}2(<0%J{&>agWA=Ue?u{lF#(1-s?t27Qb5cXZBXw41vEbK@HzMIn2hm~S{~85rDV zx1-0j&N5rv@XWVoYq*Cj#nnZNW%84{ANacb7@j>7GkT?SWz94`4^>yxOT`5vyC1Z? zyd3wqare5r=Y92Ox|VfB$NNU>l9S3RW%nq3%Hhg|Ob*b%C3|%8KIJo>?*QGS#_Qnf z9V-m=hs6+#_g&C9lc7&MSZ(-LKU4>(5Nzi7Q6F|AOfTwT7yD=yHa@9OIeXPrOixeq zPAcnGR#q@WIwVU=OJ#8$cS2iRn;buWT-w=@D(i5R5oQVJ(LdvCh~sGL5~ zBDHwat;|ix^b%%iH#VfJr$;vN$-+9m{jWslkd?3&I;g|9>6;bMXK@Xy6wr}tZIyMb z7^uc~){B$VsO)IUR5warPn(|cJUcNeYc(xc-n=69z1^}pJ_)~57RSfYwMK`lsZ%bsg{W(orv7!=vY68Sp(Hg|VPLtQN_jfv`oIa$EH zv4%mNx<-_HH6FppFE5_OU4t3Qlr_t=wy{I734k;n><0}7r4F>o)C6Q=qea%=#e2i> z`()0lMhb`15UW^+MSd2jK4?d_FS z9FN|C`-*!&+|SKo&xPB!Zwvk3lxxCZ=AlD}uu8!V;{B%NKB}A_{_uzTZdhJkmNk4D z!fO+QV0_;4OlJD=DEp(ziRs>Y>#aEY$l)jckB^nM+zYUujek1U-`K@E z8}I|%VXDc}!jA383XA`g&g7K(&UU-u@0OPGtH6F!&Lw5ybxdu?4r}USd2yI{6==i7 zu#{ivb1mf_;xV7NPSU*Wl;)kclLzK#GyA);Bc*%3`#?k!(-F*0zd5Gaz0R=Kn@EkM z8mW#^vf^j&Og=Mw9;hBKilR@K>Ooj6n{j&s8Lm4*G3ZMimlp01!eXcSNFF54Hck=a zO`0@+gi)ve_pkdH{Mzn~H{ST#JRX+89v%RA*sT5=;Nx5M_ul$cI-hwFo&HX##L9tX zX~1fPqH*be1NpzhEO}!sEG$SX219;l90o~dM~CFgt3z_^rI+MzTfJ`bSk;6^Txw7vAFK* z?7A0B>vDh~wFzbGEH`+DG^d}&wJ7rX8lLl!7S&yfBRqhVfoh>}4TT@eO28+5oE}92 zID6Dttv8*_mKN8Q3=y4`m2tIq08xxa(fOYBFoV-K-7**^nk=jYp637gD|{OL7~F4T z0HDm>@ECIQ`@jOT@=u{7*V@^xn;;1`_2XKEefRY(z#Hv%s`F2iVD!1EqgS4NzFk@{ zLrzztRprQk-3bEX`DPB1eV9i=S|ZhP>dVj=RsD4OdwoLqZKotM|wASgQIz`ibF%3&Sj+3S+&dz^W;Y6(9Vtn%BrboP7stZl=BJFAN2bN;aX7`_ zOYudo}Nvx6Pjr{rIM_ErS5 z;I?ec-jsj**#*s`J3YYC9?t*r7ypc-_wc>Fzrk;x|4@F49rXY9zy7U!b$eV^)@>o< z!|{D^Y~*EmS_W>9IUmOrem%D&|NTGzXSs-DA8iKbLHSwPoqzjXxjiw7P3a!RVKYPQ zS<&9Dt}eNC|L8(o^7l&?N`SBCLf2OU3;xctGJ^5cL0XZgFo{}JqF zIlC{bM@PVho1wm--tZHYeYbCc0t@IF+w5twVa|>&!i5(aS)4tvG{a9D0gA&08Cy2F z)(!86=;AC6FYOSxFgyPG9X()dNb%yn7`mSdzlTR}UYGA0YxvxSpN%$l^xfrY@jBwS z)`SHd*Z8xB43e}Pr9OWG6WznZvOt;cd(5DhTXO74NE%(5Pw;az!4zz_>ZSacA0Lm2 z5oU2{k${KOA+j56WO`-!06@#Z2oqoXi+~wEXO}fhSbS+CJmk^Jzk!+R9WJ|QbLPVhy!o>5WlVFpy21c(s2i@FZ9T2pg7u#D*2CmC4^4xWzoHXfPny?&Gv>YFQT2V;K0+h4A%iE9^A5d(r=0LSA+@qmNF zbie6t|8bgz{e4fKyPfP1-)9!q`_9)9)06hmFgyMTxu~o6?xX=cKTsd+QXTf_&z@ZY zu!irUuYd6=j#?X+#zO-#eq%#U;_Uc~pIpMO=4a%YV{LNn;+ML?TmK1c-go`F9DV+E zInmdQ@0n-im;e3m<;ef|A7lyNPOqMSPp(U^eD}rEIOF_+oF7<_@8aC`Y&IYG@4WK~ zj(64Ah7R0aY<4#(hfbfCE5G=a)Sh}) zP94H#e&hI-A2sPnX9srQACA;G=qL_- zaZ$ETV`u)6L0Q5#+^ch=@}cJMNjceHC1dzTeRXD7&fT7um$0GS+n-&=z5)I6y;GIg zxDLmkb#CeD0zAg><`_0AeDS;3tkCCbaZG;t?&l)S{qloXj>wfuw`F*8Qcl18T{%|2 zB)|OVf((6r8Rw;cSB~;VUA`;tUYeHgeCHXd-C2;~xdqv1tB}i|U&np~9rEnS9vL4R zl|ks#fASeQ(N!aN@7_bcu}da_R3M*Y*mZxSqFoN`49h=#GAsZ4|MthSxQx9LW{2e$A6-N~56Ta|^V~z- zc6Tp+AfMvM!lu)AWp;2tp8xh!a^d}RQrCY#Qq6K zPs)?17dNkbB{Lhfa{8&KWMgJh8nJi7BKFp3KF}^VFW!(@?7eX4_zC&wNBZ@Baf&C($ z`qp>lK*hBD^5d^yv!~?cCl6u(>zrH~T#(nk|9x2;xFVyABRCGTSHAz+GqBl*GB7+R z$DaMR)Xk4$|B4Y=*y)rf8z$r*e|1m(=YRi4GQW&hCr$==`@$8M&u>4cdpA5(rP)XR zowfiQjON%((bkax9>kC6Q(EKA&XYN|o%kN0Z|T}PV_Z8fXr;lCt<7pWJR;!Vc`jWM z31&mZ<%7%qH3SB1lo`I`NzC9(enx{N!n8xl79||06+jqL_t((6I>>x_=f%3#J;1podyY6i^nx4PgM zWGf01eoD*dDn47vp08PbijXPa>p+?eMd9JuuR8ifM;+=0_w6xfx|&b8@yx+Ixy_Ut z{e${p5FqH`WO?lZ!h^Cb!E^fN`KL&6p3<~9p0{|MviHLFmfdrj*WjqI-oAb;6YrLd z;j1|Q?4VqK?_H_wKPF?Jzb7}baoH!Id?o!)bjmOO@hzMq-z^`!<2HS&sKBvvbq&&U zuoL-4N3-g%jC}BG8C^$b;gfrE_GpFt^rz>u*~1Th{xfMpr=%I*YcH-3$*(^hmE-+& z@*d8Tzx3WGGJ}o%ZhU@0rsqfGS2&{XcxRG*aO_kLjVh|@rKPDuI%Q6-jxEW^*o+**Ai@_} z{@$12wJmJUHY&gPsy z{>x9ZavmMJBmJjdkj1awm7CDxUq8AbPxaTz`yXAEcYgJ+(t6}6sj1*e3hseWfnx?& zvAJLmY<}d}899ry=I?%SPB!Y>W$xBBxjT9b=gQxf&blq+{jPla_FEWyS-^~UEB0d> zm4Q3MIN5Do=Aq|@Z@w*eu3nVI?G_ooa#6;xVcYsvt#meR%R6s=AUDpxFUz$DWa`WF zvX0Ly>Kogoc4Jnq4UEY6*s#mzl@H|h;_f$emRTR@?rKNp{smdR`o2{59+%6%{JGR3 zpA+Za!|4OF^6U4`%YozF^6Q_!Fa6la@%*P3uxT83ps$ts>Uu59nz|L)s%)2uOIKxd z>b86tmF2*|s7e~dK*IPG_AfZ_gw(9g$jH=?T)#CZ?e&}T=FdNtJD0AY)4L!y&V4T9 zD8u)^xGTrIs^r5@2XQ(NRl#1R{GJf@{%&m;chv$b;=eFhNKmA<3c>8D4 zaP$Ri+&C$=nxv-Xh@7mRk~>S=a_-!Ky!!2@<-(i42>FBUw>IWbuiulFj&_-uLL2l1u<2DrY1O~BYu(D(Vc0JmUqaiQd!10I+ny1D2Ih+ZJQvtBaW4p*#fBp?@%cGfr4dR==4MDhT&ZvaWPvJK;Il2655zx!-ca5@R+O}azyCsj0@hrI;+Sy z!=wXWopnc;Vr+&d^MS{3JPTFh3J;0|u%aJ6D|D^EApw zc>x!|_+na^86u6lpn>BFgsefO$l#54iP^wrwan+{cy5C{;yD{RT*t?3YCMgP`LS*c zhZ6~Cf5_!UzWyq~_xc9@L4U$hd?=YXTsBUe`T|3NGZ)zhL-U*(hT4OEZ>rP z02mu|#TV1UWwJBATAs8#?H^oG*4PIbbo5u6&)nP%bv>sP+r- z49=Sem(AMK*P9A_=v&;%*5Zm|JiW}gPFb1iJxHT@eiqMsy9B z{;*4J<9RYnxIQ3!J_$2twv6K@gPqZAMT_YOpZApB|5P^1Kke@G0pH3+%Me)RyE0=u zx>(l!G9Ip`_;P>@uvGrk({R*RyAsb`hL_!@u?-N`=PRosY+-fH>Wt0Elc$v>R~BR|2T&&AS?5+1q^l4t@5W2t5ztrTEK}Ay zwHHi4IZ@o+5411KM$OK=`is0dco6eu*vX{rl#s+ZM-(f2ts}rQTuZaEgfPs&^L_-8 zUO84esLDYCyKqN9yKpHLek|SmJeLrQ-`)ED&XRl?BhFlzzF9H?e6IFinF&~P%kG&W*pwXG4gqeYILIwUnXQD6;ci+_3XvV1u(gjx9Tt=Y}N zN$fJ-D`%cQElta_GGEmqT}KbdGIrfx!p3787&Tj2L}zCUJEGUMqLbVy8>^d`Ij)hG zmL_bhUMX$Z`CM=e+$QKphwsXlmv71hX3;y29+AfSD!Fy>g51F_=+>cY$1M3V3|@Tx z#emFWNB6#lYMdP(@`qFDWF8&2#g$nM7T`EJY%X`{ODy|GM|+8D_EEu?v5DR~cHX~z zhma$Tk|%WICi%U`;9UhZHPcVTT6dZTlUjSLrN7v<*dDLH(kR}S`cU>T~bB0IHp zvN6BtHm0iFkfFOHa%T`T)E#Zo-Mod){idA(%su3HS4R$2abHZeod|n+>zPoMI5hKCB27wvBNzEAQ~H_5j&$- z!FG!{x^W%@0GiL+$mc_L<{H4Kv85fe!WGhUtV>2m=B4jwpLEqM$s9V)YdATgucr?; z_>S}*I3R1-y`MYt$BBzva1QY z&1L!H{V+Gbfqc&37{n%7#wvtsmoCcfn}aw>V?!U;tJDkiW%S-1Y*ct%hDRoFWTi9m z8g|hix;Y@%uU(VLsTmA{)JSWG`}}1RNA^u($NytT`lJ)}RvjLaTUdX)fq^(wM%l!w zh&w2=P=^;~7AIuX)OScsZ4`eKyw7Sg6#-1G-Omf4O*Q#JlDEp>b}F7mDGN zg_kwDtOKT}fcVE1x`X(z;hJwe zVzS2(CjUphOs7YsCtYgq2g#Gp=6k(k9kMXmkET-wqbz-j2MIc$fNrun?ZhXxKtfUd z(T+XROh)QEh9RBtIIr=*lHsyXk#@>m9Nl;>iDxTPpY<8V!v)IF7QHhblri&UuAB{u z(u-h5Z)v{^{+|5=ATvIe#c*fO#>PrH&|fd_{L9-?xl|*6fX(BtW5$w=ml`ao*PB?o zIiN%cmNI@*_IcIP&Z%-Y0pgG(|oc27oeo_RlJ^{szW)6^o(?On3;{@Zfs`~R!7HCHG3 ztCUV0E%@!1pOl~f>>W9SPtil7mTjqocDn{L(;$1gnWmi#fER+m5KEx zS;5H#n;Y9W7OfunJ!!%jzF?qWAy!^{Aekt2)vvTCrt8(yYyIeVU zPNvb3ex04-dgM_XwiU8GHYyVf^Oz-{lis5^T5lTz5$C>?+TO#`(A5iDY{FK2Ok(h4 zenxI$K%o_%KgdoSU^RM7AnmwaSuIny&dbCre=J)#UTpZzUF5S~RyUSqeRUfvB(BSu zC!cZ!^}xS1QiJ3APMz+Q_kZ#WS)QnrKW*aicC}h=tS?o}hw^i_Y>dkit52%Y*{`U_ zaf|IMSy@(9*C<6_4`#YAU6-Hy_^0^Xp%$~>IHvE$`||m6w{$;wL~539%3Hs9Uuq^7 z1{~Ft9K&h0bz=%;EEefzdG>!-rY+ zD9=4-Uz3^t^q-{d_5V}qakSydD1U#Bet8p4RQUd@PsoSweFSR3;DY!|K&$GICETRNV4LF6kO$%vB@^gdl(Kz$jK&XrmmHAnhttxNjSs%?_lJMYTa3$F{e zLm0!ch~t|+pX)nv8=rO@$5D?Q0Ni)K=N2gHeAq)jF%4h-{1!2GxhNyJ8MVRTXVDSE zADoe~^Ua92MsR}fWhtj5tq3>cp9S)>R<5DUL>h~- z5_yC~ayajli<`b4FP~S>5@~d5GqWutW#lQc|1tf1jew1Pqh87Lx>B#W(HrZT=b5LA z(}Eog8gOI&#@qC=xKYtJ-D8-82cB`7@rYCN9sM|kn&!(Q=2cn_pv{vjI%O7sv$U9J zmLDZ>cYvjv?u=WQt4CsIaD&->Y;p4gp3}_Yc+JBFx$%8!w6V|G=GdX;$I&RvPM9-~ z$+E=V<909Qf@jNWczo8^P`IOw7UX4iIgepW$p8!D!gw8Ce zC1m2C$%VKi%<52HckTn=-eEcJ1raaJD;#r)Wm?!y7b#%0XF+>+001+PEu9DCl~0_8@Q#cRPe?V+bf2HNCs&p?Wg6?37cp~N3;l<0 z+>q+}8X3oo`NGUN&S0;=g-&EQzQwy38%0gN9EP z8r$x{PMBfE)bbi$kfS5h_=I6cZs42kHOwdvEiGWyADw&%S->~mE12tEUc*v<%=Xuy z^EkJTCFwVB$Rco-@!fp`W~HmEs-+6c}3i?ILDz%b677rA+B7&rA2_6czL ztij;N0ycqM$EN`g?CN{umFF9!aj8+-VVlk;pOZzFYk$9VW5DG_Utg@=IA6c&mxE`{ zO7%8Yo9t4SU9E0_rL*UNoH&K;6|nz7b0a=&=<1W_UU(XPVyr;uMj1o?_SBBloxpww zEq(IBvmIJzzV&jGbYS0ux%w_?YIs?7eDYhbpsuvbxBuu5v8n*42=pLreMMe=xnIyj z7j%Es4PYOMMeK`FiGiH$J~_W4^V8E(h2AktAT8a! zGCevam6#gG77Q|sy2A%?HR@U$+VExCumEYz1fqf&u9&Z5(A`COU0hnpXtJ7AT{zT3Az&H}y>5X0=nAHx`q zQ8OF>L!;0&C9*U&YXBltX*~mLaH!98!imZ-aVgB=0PDBP5MzQ0@oCWDFNooATFmsnuNS`RM1eAaUBRyN0`PFc8CT&?w?kK8>^k#h8&A%Sd$5l zb5V#JGmq3ud0ITpt-&MGTrg!{q`!8Sz?i&KerY_%JdIG8)%{3t2&USn3?5HB=QGd$er|>jxdYFH|bi+&i z%(gy(d}3RqI>vJH;lSD8^owj4F!xTVVtRTyDeAoP?2Ha!v$7@3RR5+NkMlZy{J6BY zxBsR@exu~L0f0fFzwe4Iz?-nSxfz{3Y#eyxNHNmy5!4L;Jji(gzeh$%vdUS10K7m$ zzt)!n_`E|`T_ovgbar-DZr{Ew^nX*X37@GPI&?@HuouK$a6kOv5B1%!jL%2b)-V`@ zYZHTdd_i(UA^MN|W%<@yZ#@>%9R0sOXKN+!vPMFrvwP`>Sr;O^Sr^WV`_`5B4X)pS z0#6%6>ib5Lt_*NA{M7*i_~t?bBj}_u7**Z8JWpV=G=VOk9=CW>9AaiOq2yl0?)rpYqbhkWZf=nOyhMT4_UOp}8kf#f_Dxxid<>^Cy zVt5f<3S)eGE0z!aqsqW^vro*MVdG`KrN_2*t@ogxmXDiucIX(q$&Q&c28r+ZlZWGz z%JYoSL5k(LJjJ@_=sa!?7RfDz=kGg1bw>eOEZ8JK99^VZNMgt@zs>_gEa>6+r~%`2 zo98V~519E-xZk3}&ZB57E-IH?YKNdBFp$wWZsEfGvxqc5{{Cdt-^Wf?@(XNfmX7jZ3YeAV8*-dURAS=@ZWGrHJtOvpLBlhy7yAY@}@rGF2S zkF#WvJu&F)!IW+9H{%xTV=(&pf$MzTXBN{zmK?3OfrAB|R90eZv#sf&drE*%KgWPi z$(H8$gi-<(H>MmZRDTX4hDRvLz@5iS3QBz*9g7w#v5OQ`q4=D?h1fM%kQ3` zV&nhJnKOGr*L@|w85ZD43;S;00{a$tNDD*_41Lk#r5>6YY`lP9G}X>#k2Vz8^7IV= zN_2P{Ld3`E6Qm9y<>Md$o}~hr+{xB8=oQE7XAP8?F4tg*@Epg|U&HsPr3fBkcx4gp zlc4mmq7nY1^4^WED6I$5#!9{t<}_mNBS1&aMPI17!J+&7Gw_c)(UJ zkRp8tQ3mr6+k|*&oUqgd{dQL{<|eeO2jNHWJ43;^M$oa3Zy!Rp9_SP155dTDGH<$3;^ZjS}riQSSJqrB# zC;09iJOA%i-KGaG$=!*0!DszALTyGaU%e~$Zrzn7&}|mzIX5~iL-(-M8cUYB6SL+G z%lpeaj8EZv>ru$qcMoU*l=JWyHXvLXm(RYqBU}7P{2|>Sckst27bBDNvc6tal7Zm{ z%6evE0-NtG$Su(AR+`(~U4P(nxi|01e`{$>KD}^9Sm(kFT>>`y2<*4gVmWs|JjR`6>$yBDX_7e3R>WQI1}W z<3h5Ri!kE_7x!{CI2&K8gO^VoI7?y|XL;;0Sn9hx0FSz`VTp6uX)A2Up~TrB2GTTN zK(dAwYYt^<-YE-VsO$z&mIlmvu|Fjl3`q#Py5znYcJ-e)v17g0 zPdlKqs~|BCD(jr(%?dTd4WpROQcV}?XD;ZPuNMx7@A3G`^WTlu(oD|%{JgyTVOzTC zX7OU*?zwzkO4}%=v(v@#iec%!L<~z0l3_>Qc_^K zs&m94zjBWBSqD(}3J82COP^~9*z=Ekc5n~HSE{eY^$RO~$O0cK*cI!N$p&yYJu@1$ zHMBx`x~n*Eglg?T-LQ8M*LFd{!>o z*omD30QE0Efz84uS?lFcf3pk^O-d8K6&@U4m6Ok$mPXwPe@#C8+0Ui_PyS4XKlu#b zj8{rKHVr(D(*c$-0C9J8S&p7LE-ly~j&AlYc5TOIc|HAyZSCymU5h$_*TOSJj5i_PXok-n~)TX~eGm6^k-Fv5KPs4@*aLqdxxb zq9fm4e;OwMV1I`t?EBEw%!(wdIM#7_38z3bw@F`rH_n;Z!jXp~^2vMWr0vvGGI!}b z_ME7e?z&Dn)Y*iMCNbE95iV8gw$EmGCf zBBO(2*sXs>4xczHoz+Wn9^b)VfBV<+)Uj_#A2tG*yLVZB^46IAhyUfzrE*~yd{(sX z&J5m=wnHanec}!VA|~bC^ON%DfBA-B^8*>1S;PHuTH0{3K=G^K->fM18Sh)*w{HQC z>Tjb_%T@v#MT|o$ov8qb9XkTzHXs{8Y{0n25S!2-W!$#~?Av!X;>m~n=-3D(mHvYv zqsCX|D3&5>$fX0%Be}*Dr8!5w#@ma|a5EeeK-?%y!7)AYbLqyw`*E7dBo8`EbIUl< zFd`iPY2(Q7JWJ%?43=@Uq(|~g_}_O#}x`8d3s9CkjwhRgF$<&`qd#w^n@DD%^|?XNr$p{8T#r;x)N;aR9rnZ(|igrM&j+ajC-&>~za3t1@xxq6}Zj!MPp`<4N-e;0#w_{v z&S9CtMtD1m74p#+t@2d;h>YSyg!xl8Lr9f#H2Kw-oj4% zn4!NjDYL70rQ)U2GJrB|#-@SiFV)GnpVocz@y#^LdqzfpIMsl4_u%%h+?>Eh zkyB%GqOS(^WfsR(&dHabUX`xyW*M33M;>t;q&(eB%6sfvh}bQ6BOb zjJd(I7;Z9R7;?@5J;=AZXsPj?XE5heK2nukuye?R!%E|M9xnf`^Aqxu;>2;D6`#8M z$;jdRx@^ymvb0%QdOc^iSg4v7RpD zgRt43aI*`;bS3#AFrNiNN?gX@>+KMzZy*jfr3Ow5%V)+g(%@?~w*<^IhB2E>9lqlxttzl6frud4+s@{uVZ~a=6^gN-$5`+0`wF z5BF$A>OFW;s%9oID?28ie|1Mzu^fMFWC}Fy+;j@)>OU$^;D~{dY3zuP9oy&88C=4# zd~?__y#+_I)uEnUx-@`Y%q!*i6Nhk&o*R$J^48fVo6zaWCitedbviPIoT^WuiukTKL1M2ynrM1+UyJfk@oIxtTsX3 zwx>|fL*4B|y}J3yJ2JM`EQb&EN-y%?g5&h+d0gfCtPJAQmrZ}vqv^5l?_1#a!2)a$ z@Exy9=n>&kWiEL%I2(!DkU+zL4GcEac_bJ&Oyb2x9_iHwF6ne>KYcVk+yyw&s{C4c zcKqGK0?OmDt6X{Da8(w<>LbnKN&|k{ps{q)5r-E>r}bi*!6JI{0khoYc;`SVipvX5 zmmw+GX*{rDg9>S=D0(S-hMXgRcJi5TUYZBO{AGDdeJ6}EAJ1j_&{v+cBmW+de?}MK ztB#19Bd@ZKX=SdgtdLGy;on~HE?B0`?Z>S77hr@)zvSZ)DY28!{E!>)N5 zr)9)RAjV<1oJ;W@C0@ka_@rsO>5}5capmU$acyfxzywT|9;`y|&OlNnvT6IJ|aqmY>~liqb6KOiS|zD`g~xx0|0KBarH2 zaq|r~9waf|OtWx`Z*-||cyaj{kCdOmjV9%_SK{soy;ro&=~*G0_=bBCM|<%Yu+B~# z?S*6HYH^NOOBZI@zq%~TJB^r`uarg{@rLu|q<(W2OYw)Lt&0c$rLIc8{rq8h`{JBD zjpNyxcIM>rwR_Us-jY?shWZWc3Onr=_vA zQHFqb@Hm!@qq9G>uz}A5?#SYDC1#kX6>yERNs8 zEc}*qb#&o-)f!>3bRO)K;j33=ZjJS)Qkro5VMTQ)*9r`-RM(`7Wvb-ti5}Uiz$YCz zKkraSjm(UX%RD{o3_e|zDI5#9g8DMEguN*+;IQxZE%5td z0sW?#9bEL>wezlRW!JF>7@c!APSJt4ju{qqRq}gk`gm|yXTOT{#sm1cMU__Rjh1}S zgI5@QhIN+6`y6~=W5Na?R4#du&ePgA{N}q60Vj_#$-`jgD_`a9LT>OQ3s@Fr+8We=;N{>c3dX0E^2GfFY^+84c}zPyz=4l@-yDK0P}?Vk;PGXad0rYSnr8vz7Lxn z>|V(0M56%_S7vvVm_7%P#Cs*ir+SuVa8=oEkevRCOa>%^V}}s33LJS+n63=r?6hvyKVq0FD-nfhiUqfdP+SLRoD zk+-}>b@JYteb?l`~In zNK0qGJpc3t&Qhdq35{Hm7D_HKFkIV{s|?vo$<#UJA=b#(Chx-_4a zSUGU!^;e~>u2)`tu~`m2*(lG?cT0P7ulyOllV*RszPDE!cO*FZt(RpQZ|(!|JL~G? z)Jyn&y!D`b?@#^^GsWvt*V8XGIE$RF{m4^tq-I%Gpwp>ihp~E~N-CddmEP`7sc)*1 zdfp@8-__ZUPsmqgv~Es1`wmDu&M?Pe?k;bqcck;cae3qW-<6%(2B~f9lI`hPdFcX{f%ti1Y1tq@%r0UU-IesaO68<+_Y=t?k6IY;|sLha*ovB@Nw;@(i9{PxMqv zD?SC0>IP}9UdNz9r&Km|p-wcaaT{A&f6HR4q%}W*hb>=!2eZs_&~WwaBTie);O&njC%M zTheQb0P1_>HSA@i%8~PT_MJj1Kd~uV#eSkaq+jaXQLV5GDAs$urpc#ojb z!v@Aq#g;ZUc;mPR25_}OghmL-@k9O;!TkmJW>B~?bBz=QC@xdHQ{fgNEgMmc(~t3} zOceJqyNwOkd~(P;V6wGDr)+#!Ut!SOrBG4lfJ1Aze}-b&W&?+6vnWA!j0+ZQ=@+!Q zXyQzm1=Y{A33>q@_~(#IB3jHI8ta|Xr|}X-1faZK$0(#4&vNwT;Ko6BrVm-n@>N7< zwk54g&k?GA#`i&dr+dUBB8uh5VMB?lBVp977|+VTINkWsPwBNo7bEzv;n@=ZEUujb zljn4b$qmn7Y256a!qd3X@8&-an%#IXE#wrMWCdd78B!TC=-1QPxCGwh$5r$fH^7-+iyK|4PlyK|PAcfh z1Ns*^<7a7cTXhki{P(h7F+Dw9Y(<|do<%=2G^A%e|E4n9hS|>J z$B$#iwEZ_Fa$nBA1@BgNnn^Q1H2v8Cj#J{ zfZ#69IuU^%YwRdJemF3&ZJqs$ADcVQ7KR7zz;(S{<8OXp&lrTH$#AF|Iy#JJ7nvh& z_Res<&@}GBN@L+7oD{}5^UYkD3pi{}z%K0I@8kP-xBHU7ou^JfEmErw( zSbCr{NT9bgtCJ3cbv9rAhR1ZyqCSwz^vz@Q{BH7#*~I+w*dZ2hb}s{-h_Rasd^}dH z2thU)<>4v5#f{8XJs2D}monzFrqr_qL0bX%P1{d${;Rf zn7o|vJp-pLo(&c+D8Gz86Y8FESu_cx_-Vd)c0ufRbUBfOkTy+^apQ0*$I^n0oE%#L zOnjyB2$^05dCt)dmcwy!^fNq5R6p2?(U@Nj%||Nz z3fUCzKmKK35&A>J-gx7UhoFc(`~7%X#wSIO8#{40#>>NDtNV5SV`7B!^e$0h96U;J8MQP` ziu5l)eIQVg{35~_&&s6;kFXe*apFG+jJS{670E7=;qZ!5LWeQU1F;{Jzj01^q;YPB z%X^F|&l0I>cq4(L{KrX8`TO5J&;v;n{|XgctD-eD_Xhe*j?bl-0hb`xe-@ zz`h0cE%2Buz;E~2LSe&$%L#R|;gse}ajqRwh?2~;u^vxP`^FJ%o#ti40v2BzkU1_bi6ya6|(@w24)CZwgpFR+WIW&<&$Ix*dJ;R!1i)=Hqn z#XrTiD8_wws5QugzQqm9yp8g)`%5k6nbNUNInE)^c^pe8G{$)_{&`-;!)Ca%R5eAg z2jQ&0`k4eHRyR=Au?|d1T|V7xZ8xXof$-fen&*>BF+Lt1Jr@Wmq4nu0JhOu@1JfwQ z<4*d772g}6iumi3!84+#L4WVqE#%OV0=X)y;6Y+K5LcfiO62i1+sfIAR{Fpz>zJWP zvreAZ(d=%zFmAGxt)Ia+*bd6x!g0C_d)+Lee!d>L4+e4w4$CVL*Y7+Q>j-)IL06Yu z#H~){vE2&-*cl$5&sdw{)k*Icg7f)G_R^QsC1@yPO{}Eu6qtM z;OBXTe1-f)xUf6xJ^8VoI9jHMdXQBWK*>Y*EW5`8}y|=>q0|0xgy!N%-x4^yy_ARh)fyZD0HaFO0&<2AxKH^Rx;b=TW z4Nh%d_#ZYdEbeCbUBgsi;F&dg$)7C+BzP}0^n6DKsR5>8Lh>*NNq+rIyYe-`QL7}@ zA)|DyqAXezum)67S`kbePHI1w8h8E);fyXfNsOJTnTJLg+KE8CEJB1E1<5p>W;H5Nb%g2m}^=b!K*e8SR!0lr|1aE*5; zLZ_iUuR?n9^EcypAO6N?FZufe0DGyl_I2I2z`h0cEwFEa$6^8QBFxrr+%Rx2do%_$ ziHT^Aph2z6{xhi@7(m3gK&+!;4FxtYT)HP908VEtf-vRnQV{ew7I%I!QxPKpKmLx| zWXFvfqqa2TZJl46EYILEe*;E-%v-ac!-q|hPJTpMFi%DfMYA|D71AAA9;k$tJC~H^ zF(z<&xwy8{ir04|&J@oefe++$mk1RaA@mN&!t%5+Bc(bZF6IKGkJ`Lfw_|A+B*X zq%0BlO}=cILVS~1c1Aw1C>vt^B(G3U9cs`gRyF7mr|V!a^D_r2x;ja}|0>p0{a$t3>L7Ly0Ov~0T%I%ON;8DfVKBIWQ>cp6XGwJ7%ua0h%1Ig1YU~LmB3kp}fF5&XL^_ zdHfh74HxtASW%^m@v?A~p7OQ0;nKHno$dL-dL6qMSK-ObzoiEn%P%3WEXYx3pJ_uz z==mVAylEL!7sok!N*Q@MfU#r83og~!eg33Lxpd~1m(`67Lv7}G#meMmQco&R$2@v` zjpIq2rBNTO)>8O`{lv6I6qX+AZ7|}y)gu}z&07(}4CczpW#8Kp`LLXs4D*ewBHByE zVCKiTAza=XYBo(a`#Vl)HFl|{nMo`4wTz>(U}+S&Ot&bRuvBj8>J93^I^?)!e7q1V zBh%DQCSbi{UFJKx{IjA+Q-kq7VAw0n2!xn?I|;!9jc8B$dwKwX$4o6PEy>o_);HSt ztT^@c^-^0~n^mH3w8Fo`%CWxKF=gM>Z0f@ib%sa5)zs8{Q`OwpYu^HU+ybuYU@vyQ zllLrTiEN{7) zeof?0-WjezO(*jW9{ancawGA(_b(#Y;?(O659!IsFg` zcYZ?8lXbdvn=qjwnWvAu%4O_K5fXl3>r&JwD>$) zi-vqn5W+57`ONX#(_Dtxnad2|_*vt#C?A<{`(V=pQe2zU%-hN}z%m~931~;tGqQ$! zdfqqN52=iN+>GmOmD$G>clI$X(pvaF>Z#nkby){fY9G(!rW8d|K;tW|@v}TRKa!EL z&+`p<0oQm0i6Je(5Tb0)F2yh&%ns{Gy7D9D!?V;Ko0N--b0>H@<7qR8*(#lwSrR4< zXH^}o`3@peVx?fQ7wP8J;}`ZS*Mgh(xfx~X0nJ<@vs+R-g*7EQJADr4FOZ%;-o+#r4a7$U{wSR zuQGmS^EqnIP$03hsryzSUpsz<46{hRw|%d%iqBCp!;j`CD+^b~_6#M4Ix3+K_%Mb$ zmew?6f-+Ozg)FW_`lCffo9CX{KHbUya`K(!OmM^qL9cH}4f2>DU9z8n92ViKC-i4X zS5Z(Oz%@nFeVR%m173`!wfmxCr}%wq?*`)2X%^Kk z-1~#T+k-nNH^O`M|b^#ffJf-MCF+u+V_=9Cy(r=IOB`FV0<%lgjO_PuZlj#+LA$o|XV#@41u_;L3~e zNVf4e-#Qj#=lBFhhQqYr&`H$}BRhp&f1eL0#{I^$+Gz=F%hy@*iSUBVB*ZfCoxQlW zxD5hx*;PX7VjX+xuDW@8?MpEyJ`Y9WEidKl2KYrY002M$NkldT)BAZ9A)t3 zp2-D3pK-`LC>2p868Wp*M= z^G@S~joaW6Qp_Mkh#hhC4?rJ|lU>-PxL64<@CK=um&YM4shQ6FxXw8S%4l;A%IM$# zQ!KZnS8hJfjK^t6^?9*6qj{w69&R0fQqtwhPU8xO6yLLV;v5jaI*6kp@uNJQd^Kr; zn-T4?z@8ldV4;80m;T3ffx22njp6&@-<$>ZQW@;E`u&?L#eGTp7I-`su!e$hOXHX- z)FgwWz2+MNM&W(m;9wh%?E=HM9iO$WP|{!^GtNd?0vbo;W6@ZIhgtKhqAE^wVXs0i zfzJ@9i)*;#5|fB)97PSp90?*NQ)=Ly!wC#6{|W(;{RNEOLpk~c)dn@vqXuI%#qnhq z8i7TIbyRtIE>n3}%-x5RG6|hLM{i{n;G~NUmgtj4iwZPV12o~A5ImHz>-LI&quOR_<_OnOZsq z?jAO+*;Uar_$4*~4P`oYot!j}4|Xp)K7l{uE;q){@iEe#+=yvq3vB<_cVYemHI&E4DpWek*YJn zRp0?qrADBNgBeI9hf4Ui`oz^CLWv27pvtC?KUPoQtpo;SAyMNPO;E8=O!aUIDi`X2 zez5ydJ`5tD`p~uA`dNAQ7D$M-#xEoo+{x!R{*=W51wy#uhtJu{Y~>Jnx_p@qf#==|?b!i<2Q~A~_NFW^uS-=m zZa)@UO`TM1tVuP#ujUQ8zOn*Xm27Qp;oI;XsjjX<#o5vC#4D?-L05yyupt|ptWcz{ zl{(z1i;HX0*i0VVvbw%4b+t8RZ>|T`bsz5=U;#XkSYImfBG9LJb*)rxZAul&w+c%W zH`dnlVal_uH#a#_kB0@|JKGrGf%=uGFI9MY>}+id{`J9MQGqF>4uNm#)g^Sjx^o>az}d&N+B-#9=yBLPspJ2PgnZOP|@i^>3J$0~+5Z_r=JxpEdO{C0GcgiIPwpGbFL(Z@mP&>jm z>Z}|T=AmjkViV87XaYJNXUK_X0%ZZyBe6S8h`Zc?2sI-P$3fVFrVU+(n^=j1d_P{I z`i4}8t9(^QmQ6@?p`b@daY$Khx6Dvy@S!6gH&EfI;`(g)aw&WB_jkJo!p_|EE&0*U zF3E}GJtAw1vfcZPGz?vqqkr}T>Db(qFW!7x>Yq9)3wQ6x<-t`sd+H!=uWh+=>56om zIgKUQPe|STEx9vWEsZRfAT;5sT^onkdHo}m)BlCB@Ola8@BDu z+aS_W-FazjY?9v2 zW|_z51sEET-eV`Fy?RsTX6IyKwNe^uE2ZUNpS15R$wwE)<tU7vtPw?o*B=gfcsCxL+SU=Actf3G2YlnkR4=*R{fS7pqEV6X^qzz?fDmZ%6 zmQbgDuz+E@OvacYMd^ILv$D{5z){^pw6qQ(jU+)bWjT4Y1!vIn((^H^LotmL$1)^W z`o@nb2t%OVKW-HTEJQFeL4NFf^D)MH$ui`VgB?8nk`y648QlI2PyLIFzqA z__6!dY@+mln+`^u>E?}4U1EDDLGhJ8^Xr_+(y}myNTThmdRXh(vXx>--)N?+5Tpk+g_0G zeCHWWt(uvWBd@^IpF5<`>~4ue)OObIlD0tj${-JO}9X+OW`IVUr#`u5BU02LveEQyZe(m(bALwC}BKr34|JLcx z|INQUed{;>-s!*k{coRs`lEk;`oX{Y=cmtp?>{fA?p9dHVQ+Roc-$B5*|D zml6SIH&Zho=1Bnp+q8GIP~5`{fP~I7NZv>!I!S>3t`@$ueZ`5o5}T$I$mLCa+gb*Y z+@33g{|tWM&M^ws$x)nXk0$Yz?}uFllfbH9plu|@w`^u0r8$w@?bW8%cn$|Y+EPME zZ{?5OMY2>Ing#CW7~|G1=zvXP%kbDv*uFLWm#jrb!`u4FhtB)ZhwPp3l~2+a5uLh zC+ej)bXp7u-f>?Zw!mMK=4}_I;kRZ3b^8InyrsMBR8Gt*_sA($`F~Es&XN&@oil z$qf-#wZrK}KH~^^9U`Y;s^RIc5vY?sV-1g<1E7{?80yfe|8-zw{TL83I{IP@X zH5Nt-h4 z*+4I=^DDmr@LIQ9|K$(=&FNqK(I=<7mp?n*-F(OMr^mAE2Z!y`Pfo9&eS?`|l5c+a z==8}acc;f6{Ko11+aI5P^7D`KRsBfANKy8 zi@-K{=QLkG)W>P>#{Dy&ykxI)!wC+ZyiIL)IQO0x86rP}6NgcJWyk1$%MnPlKlnFa@9J!5+FjBK`Ze zPr9vqGzj;=xZy@zf~GC4`89kEeCkA3>l1A^%koKA04na#s91Ia-`Le&RKnk?-5Vh*&>+xU~5c-_GgW70YkLv%F=ub3oi^k#$6)?JAAi=?9ZP>LaU1J z+NY&z6krsnyTpc!u{n*m9iRZ2ghOcg`kW)LZX^ZX{)_O9W%?lg8k})HwqaerQPR7O z{FPsY%sT+Sce;J?qtpNVzx>tE`L?caQpgadbB5g2y>JpTFVfBk3w z_QWFo#b+;0pXqrK&-Hflb-f|%-=>F)TKIEPz5MK_qJRJN>E|y`FCINTee}Vj(~A#2 zIQ`~tym$KJfBpZQu0Q;}!E!W?2pkdk>Lb7h`}!H)AM`71wF)?C1o;4*o#L^8<RHG>c72c|J6my+Yu{?S_V9hb={nV!{f11A#x-QgaShtzo3874yx3oFh=$1L?UlUd zx?hjQ{|@yw{Y~B$^d<>O9|ilmv`y|e_O=SKuQY$#g7j$Z0+zlSi-}>anf`=(7U!L1&G3JfN(SqbM+y6nyyBI7}o+c0(6wz@Dn4^ zY4v`stKP4)fX~yoxcyy^{?i0O3X8zZl^Enr3fl;t_nnS4SGN(LT21#^52Ubg4MhQ5 zwY(K3rK5ZOy5%oF^(Zaa#AbwLYRs7<{BA0!+ z!=Pn%Jt$k^8*0T5ABicy* zTp|U^*uK&PdU?k_8!pfCFK992`|}_Fzo$R?7eCWi06shY-uM5}>DyO7J^i!){eL?B z`G-$WuRi+S6W3#T)aUvg{wI1!Aa6jYC*M4M@7s?~fAr7)_;mC7`RU2;{)5xEo<2Ig z|K9EC>bDBeer|(=p)$Lxl`bo#f-W0-@YdtX1-%YxH|Mc-U-`7w0{n_dN z_}_kbdiwO{^wIBr@AR$rUY>sX-i>Yy`0(`c*WNq*)$stpcXkRKhW*`$013iObnsap z79=n0C;bu%C!Y(CzlN?4m`)n{JEr5aK)3sY<9Ekh`ZJ;xG#r^^k8em$M#6$1(`Atj zyv4DgSPKb?H81dy%#^N`{#<+NU4)1*S7TPw;bW1ES=Oq>wXJe~i?UBRqo*$$@PhMi&zJoyX7$Z( z`vWK7aZCDEoqDx!E)`>gv1IM_ts4_lR56Pu=YpPas;ac;hy6{+FokG(8&V^?T3W&Ks)Z<_goa- zYW04P9oXuBD~}yh7m963+17m)yZAugP1jKRB{1U%y5kcmCCzwZtiIa%huS>!+*Z6C zQ%i;-rN`HN4+RDp#9akh{O?O?DV@Ta<_w_`WxXdU@|b7Y0DzIP)MK{gtF(y}pS=m9 zHf8{i0{E~*bPA4}#-Nwiq=O&OYo4zlOmN5xZ@;gA>2}Klc8TRzdjmj=xo6+{?&*K{ zAHTaBn{S-{=|BCwE$sc@KK+ybW`h3VfBR2H=eNK2U!H#Zd!y^dKmIS$|E>S@AD@0} zi#mFj9D%35dHV1E``^6h!GHa0d)WJ@@Be3duw<3r`0jVQc{+Xk+oyl1*S>te$p4dn zv`n-;(a}F5a75rMi$FfeXYxV@RXLV#xg>j-InP2T3!QLHWESzjlX1`(ei)`K1<1g6 zCRtP=pFGVRxH6NakVHn#7QT?UIdrK<+sUUBpV$)msdJ^@%cB1fo;c3ranFg3(a|9p z8b@Qt(}V)A9=84w_Js}!N&GtL!(O2Gm9!kNzgQ`&5Zx07K}5X+TO|OuHk>iJCfhaH zHCdBAGugJiv)kF2Y)#(Twr$(mao(Quob!GEVO`f+>!vB1v#~Yb@V8zunX8)0<7Pm&#d zv0~rzXIW(V@sE?(^`xM)by8_1I+|jn;h=S8K%ZB{{W+NI66)GXwYJMxyqA_QDPL`b zXy1n~L?Ig^2}k1C>imt!KmXu8rG~d0oY%GVa`$;{vsl;D;Y@%n`R9Il#BtdC>MJg= z(GL$Wm_{9X;@pM`0=+XRzXfeAhW?%EO4)Z_Pg?HY5C`|iGjZ7NSr`iW)YoQ=-KzL4 zX`SirWGY_TeBG}{_3q1Ao~M(+c^{q%%(2)hj3hGLGzdA0jmp)#`dzPoQIpPm=TJ)s zf!1--KGx?D!QC}>^CoH2mc-WlmESL(jn^Xvp&bbWFJ~)x{+e9L(mZ7K|5~!=!Csu0z7lS zT8}mONJega)0!M%H7tS$c2(ytD$0OwBq9u(`vBkWr^L`Ar)^pDNi>Re1~heFfo zj}NPjfM$ErIQf$|`DRKo3G3%8!#&s+p*wqCJ9s(H^s+hX7@UhWGLQ<~gz$I+*TP9c zH)IQ39mffH-u8n!3l872SSyak+JwyCL`yLYCy5TiyD;d&`{X5_$PNBB+Ki zkUfRbfPqkO@J{V0hrnIR*e_?E>mwgKM!pS;thUTHU`00!Wzp1K8zTT)Bf$A9frSB#+Wg$vSe(gCmwt8cxtR$R~VOEx>=N`nC5NB zOiUbq3w}B5i8^OCS|JS%O2)g2#BL{OweSK@Nu2*qhoW>rg?%rWgc5dIBLOHdY85LJ8|k$-@^Lr4ItVkbPWom+;|$Bwl7YC<#||SDQ+f2%K9cF89usiE;5hR& z7ZG`unzAcSgQ%V=lT{tNcU%;Z-kRosb{ib_w;5xDhNESl1)OP6ggkH)g}xTM8~Ag1 zev%@+g^3iN>w|sL2EtSk1Grgeg@T{BkYejCWNe6}WN+1nD!UuQ)J(@j@^6s_k8I83 zD9qM4?}+7ob=seuv-&IlKq5b6>A`iD6*q+PKzucfa{UeDc%4BpQ-}LUGK3$w1p169 zOp)bJxvloL!pm%tSlo{e3~tT1SmIP2W;ba6ftl)mFV$xeZ#jQ_AM0~E=8PSDe0*NA zww|-*UcLTytN40i7<9hv(+cywgNKA4342+l5}K^deE;>3zV)mjqD4|dNx}H$A-Jdx zR|Q#HHrL0Ze9Ka_`(p~WA{xPtfS?b+tl_Fx@2Y0bKh$Yuy|4NqFugf<`O2`?@zb%S zok!?*HkCNx@bUQmb0_H|fR^+Jt;qq`g{GTmIj_5o`shf(?-|Em;ky-647F>LCXwIg z@t%~;3%eEg7d2u)L+;q~w)9rUBl~R|$MC1*O_)#c!*JmCWky=Kcmg%M*G<@qyxs)H(hezodACyyPs6F&4#5&}!Cvb`HdL#Q1%`G3Yv!0kn!6>_00uR;${! zHRdt(mD7lf9*!FUFgh=W3-ve7J%VLJ917`j9PaI*S&qHQbkCWUF2;4w4nktMRLZwL znz&f%A8X1$w#^*|oC*5Yw6Rmh?EtXv7=gPvO83oJsB?BI2gm)8w$}1lj4TuW=2`ZR zVUVJeZ0My{sq-KvKsv)(8YXzM-%P|ev}gWBt1lc8?|m#dim%ZH3)7Eu^Uu2;2GW}g zU|Ctsy(TZTSv%~h(XsCN$)BJK~N2DRGX%THylaD%4f@n27=W%Lrw8pk6 zhG&Lb!6-TH-lEe|1yf-S?~vTRS31x1{A+oimDC;t^P527(P+ZdiDJ($_3(p&c>=^){tAJ-+Rn{+c}w9Rpt-_`_JDUlP72b$~2 zRG&LUfkmdl;1tj6MUBZ3w~r1(D_$Fqq+=6-Z5Fvcfx{oQyd)c&OSL7r&Z?5JFP*Q@ zJ_#2$DKp?haO6ZSt{x4ZT@Gs*jlZ8ixm_B(LM;h}$5-L|(!DlTbQpziV?{X%JQ@-u zys$qU;>3lyu|xJ`3I%XO#xyLWrt#gzn)~}C?ICoGy3sOYKd~6z|G~RS13GWJWOP_7 zFvAoh-;(T{px;&gwA1f(y7r={VZ4gd;ts%jEi{6jDqlac7iAPy_$-!8VAd0YMUCZf z320x);G+7EApPJtRFq+?$RWH(#oMVA#YM4VUqpR^b^$@bHmib`T6!$oT1|8S9>G3oaX!zuEx` z(*4rKRwGHB{1_ItJK8##lD}a**tlnxl5;tXiJBDOS`>~~-H40+4*SF(u{m=ijKsr= zrMnzD&8*+h{M95%xu3UA^XsFAoBYn1GoDHwjyy_Xx~P1qTZE;RSedGCp?H%~zE=bJ z91xajzuzVbscD2mZ<R(w_4&=|iH+)?XS{y9yi-ttq zLVVagB5GA!|GJ}ueM1DL+aX{i3)vH`*Xu-m;fnMcBD#iE%Uq#uSR|)x+#J$WJIxS{ zL}mCAh2TZ^rTrEzUJ$Ez-)pk`qT+>sb1ZcXf%ve8add@r__B-7e(kgg)D+@cBDWwW8dG843!fif8Yp!YQb?4Ri9g zS*3C|m5=8{wJ74~u^BF}KVG*Aw>6(J`Tp%R~Od@BYWxVfVKMK$8>H)l@Q}Y4Mb1%zKD*^1oS3_mD#m(| zL&}W}h+<{R%_y73;X>q*IX z^%Y2dqd6-3(6YG|^o7(QlTsTw?1K;rMsRkWO&I%*&jMXg!dP09Hdx1qrH38gmk}o2 zs}0myqX>QhX*TkpIY14h<Gh^gy6AxZSq z$7IEGwW=;=5?z=w4H75qaD&(C$Mox7v>~|e5VUQ>4~&5S991z0Z(&koTc3fXSsuvY zSdFLjlnzci%t#k7jSP_!~-%|1D;bewd>cXnu8*MkqDG^uVmNa7^f=tM+cycup zGvk+0u%!CNpUxeAv=y~f9|#1Sa3DJF;09$S$eu?%e7-2Hq9T4%gCV_LH|^6@5!oca0Fb`|21d_qSKLlBXQ&br$21J!cd*W-T%mC%Xa(dZfWS13A(rrQ)SYJAf ztBUm4zaFaX1qrZu-WZYRXX?(i$n!uEt~yo~ze=qrCYc6Ak}ej~=lM%|O&I6)AGqdzZZ8`pm!{|UU~0Ikyb(|GhNL5c+kqUcy3 zmy@AsvSMP59&!Y9$M9haxG%qzCmTa=tJ_MT`Td8c_@C8S^@&;>$>l?;(b^~DBJ*`v z$Z>H938ajE%I|;t@D-?h~cq%>oc=opA8;9Rs5v2P~-X z(}v1B&~L2FjoOEec2sk%*6SN*COoGe5z+v!BKM8rWvkaI_CJhieUc0uUVe{g!TkIF z!%hs#!!CzgZXe4TWn@Fg(Kw5T^|1xx*1s zEGa?~Eu-UuF7vS1AA0>$8rX}jf&SI-R)lu~Q~A4u>SmX0bA_HskE~3N7LhzG5J~uA zDH3JJp72{C>rZ@?rxRG!jP@3z84!}mu9};95i_28!A+hG?mA7rvhmiHQpe4p2y?5EP%*vbZ?_ME zoaKdxzevv3tF}Lw+%?jAhgQUJ{)tRi3lXS!8bkh3LQ?Bjn)a}EuBn#YcVlVf(U({T zq1w=&u%WFFB4Yyo!g|Ki-Y@T`iJvHZ-E1+l;UE0#-KSEhykI9Up{-Uq+1~vG=CBGW zlIv^rD|@JgbSR^AU-psM{?E>%gz9pDSwwSOmGS+Kn1Lw5KnBmDbi}7O4WT_pOx}j3 z!BW1DSw-%z^I0@Q_s2is{8vtEVy85^9Z>%Q_txf_f|K>~LSlS|1>CSG8je<=o97# zuY%<1e)RAe#6m2d*<|i@_G! zA%$V)(Vyj;cOso%Gdf6I4j|f`UUR-N3kYt$P`kfuF8`%gt8GHfAffeS#d*)KXo?pT zr6L1$i%1gIoN~H8EapywnyCc`C!1vA_OJx%m zwT`z=01A#jjRReGSl|9TI{)2lk_I$HiD-B-eOlkpN`sAi_zaKe7hUC8zfz8AQ~zw^ zMn29PLX^-)VXv;+yKJKwQ%>2XdY1S3G4LhQ57?nyXp`peT${H1TGcd{vm~dw+Fs#1 zTh@(Rz-<*T1>osk;e+RS=Ib}n*0x>BG&r)z?SdCBa6`(tIoT)1S8!G&L5ugUVmRBc z()^as=d^uZ*nqpGMgVt9dNTcsdF`Br6@)yz{1cvQVcZCaz26|*V6D&Loqkr+=J5c( zG2WiFTwPZ=i|lP!h@{(6N)&3bOAX zV}`(vNJ{N%M_XZ8NLde%wx4ZVKsp?r1Q__`+E{&d-4f9gvt(}>-0-3>*;^x3@Ib&Y z%Nd!EkU1HagG-n01s8SuX4$oPyq3{T439LofANftK{(IntCgqq3P{H|AN+P+()ZIa ziXg437Eh5jD*4jhiB&dn(?OWm!o08Gap+vXH4G;% zYSH$7UM?6fa@BU_Ujrtqt zu7S%0{3^1l;!v|`%42)8hFif09MMLZ$v{T=6J(f0BbP&R5D5Tcz zjDpF_so{vY$)TakcfBH7CjvX!(yaE+GCly|{i7u|=2iyn6KvdcVxTdIYWe6m!?)>D z6N^$`b6$)=KwEHlY(Ztjjq%x$_ud-rC9*Ju3KLhaG*f7w5$}bHAUYA`&J#@kOcm0*X0t|PHKcj8^50!3eGn8(x?QT8|TM^mM^n~sxb)XwE!FLZ0O z4OM(fMO6PV@)S*q2a)tzLJ0A8r=feLAnv(+S6Kowdp*=FUGSK1oM791T1dkfjiSRA z+wahuxgj|H8POXz6R{JjUK(jVSLjm6y_bPRfb_+dst=sv2_qeG&=DiRW$)@teMMf8 zrCAidX7e5eOIUZ+NBxVi>qV!j*P>A}>haMq{2=G0JJ<--Ibn3D5xWN9~(xyLxn zxSH>9$?k!=zhe{imBsI1_E=F!Ec7T9Tb`%rK&4N;ja{SMdSTBc_k^nmA{ zb1+A*@j)(Bu}NEwnMV;Gl6Zt#dJAyH8|ps%`wDzAn3VgE*uxTHNKj>DH>6wth#4Zl z!Ihm^8&1(fMuLS3?dvPu3&ZtA$RgFijoLaCPa|@|8*CSd;ygrt_Ltq=@9I865oUtb z+b6#Lj_WDEAw$Eyf+Cb58Gt8WY924ARMsd176(4F_yXBl2c<)MemGCNU&=88e;E;F zLZ5%?o5~B6DN~?km`@ftEXN?M&!e*p_?Z6$Xy2B$L`+3{@=j9ZF|`Mc%(xcJayc>$glmy#_ZZ zqWf@;(Pb&|rB2&^1ERU5h0h1P6ZUvJrzHGs3L82E}KErHAYfy{$+$)bwYf%A!dLI$&Yg1J972eIMfLXjaazua)!s zH~I)kqbR?5G8{yj+?qCtQ%l8Dqf>eW2+YOo*ZFws;?0P^SNfa}9a7CQB5UZxc`&=) zAT)fviCC--1XV1mvCbZsp~0aG+N;a%hhUQasRY_F<8OZpNl}<(ls4@&W6G)*Yw{pr z-1ZniwNMA1uS>8T$(#>m`?N28Sa}b&;4lLfj)O`r#yyPTfw^~}E%>m%9Tv2h)m3-P z0nBTg!9ga~_G?#M$dBJI2d=bJZ^VP9@9^Ve%%kc;^;lttCnJfpC9y&; z$Gz+PR zWL*g9Bjm82MHRN6JDJ$-YAQtAR$GgCjn%Ukl88Swi7IjF{N(6J4PuG1wT#r3nT;GG zYTqE&yJZ4L^a|jKhcmeqPBPOTFk63PGlpI!XW7b_$m!o@Dt#{@Xt0;CbrejI%Q z5tdfu`fxUVZ~S|G^V5FF_$FEa`y{h9K}}$|7iHx>_gBNL%NDCkipmd}P9{4+7k|W) z{p_Hl?XM=YP-s0?_a3o@xCHOyPAMt%A>2ZgrP;2bp_DqN`FmLdyvEgR@zKs4#U7(W zkFLW_aR)k3Pm&bW6VpPCG5$`GW}C*BO-=9LdN9+%J;QP=ok>>VG`LqWm| zUG5m(oO6aK+d_liM{J|*d5Brjb1(CB$1Pu&`0=VFRU2XTO?rhsN%N~^i|6Gp*wmPo ze5h5zza>i2dd^C++dM=Iv(#@d;FdOAK!t==0~74cCt;n;9BGuyIy!- zS1aWLlvU*kNul?Ili;LfmXGe=12-q2Gmz=x^tR+##P{nN?elsqn-HTSCv9%Nkz{#a zC8D`dVhV_T-t)5r(^Wj|*0Pn>L!G#ZN75?HMOfm7kf4<1^COMKMcB#9@*~y+VV)&Ta3NC5{FJ#uVn&`5|bD5^HpDspM!Z9dQ%+WG2(cst3PI% zaT7v$2@@5nP1ZAX4;lu76a;Q*#VuYjAoLFPbkNOkcuZxgNiy>OGkmuuWqRFk4;L-h zUCFDotoCngT|gBtHaRBv%a=}1H49A`=v8p6yh%@m`lVe2%j25I3zL!pqDX;lli~v` zhamg?7uf3;R3VRkg9HTdv+z=-LH?Dm$a!(DI3eLUq$tyPEh#qZoke2r)L#SWAXlAN(-;q1zCZO&`A4{? z$R&`r(1qlV!6Ga_d9nvuKd4~CcK~9CaNZrXPL9z0ru;(Pms%1lF#fRK69k=?2n}|@ zqP0Geee)6PNu2CB0t@;_5w_V54$tCbndr6I1SosV!Vf!PIHWg0Y)?9Lwy7FEc_{vJ zF6TAR|NjRmfCuU0e;2Sxo%8&>ZLe`^LX`+&|H>hf*SQ9Z+b=UD-A}VV4|~Pn)7?s? zDPwO-SXZ0M85|r;eUwB>XpBZv#cP7x{+bseRdc94#?|i`j|~?1x!B%oH)(mr+^Y1mKw0HY~x?vkn_%UCT1dc2b-)=DMg z{ywd~8v(9_R6FVheVGu787@hhJ6_|32wg4`IiOnE4+yKbOvz|I+1e2m5(4G^4Zxrr z!ZJwG=R=L@e7C!upE0a_);bbAp;5Zk$7C(2;#JanG$UGtY9`MyhAVt9lfUjW-g8A% zfvz@=e}D?>^kIInBn_U`aPvI3sqVr0YlrJ`C2U;$6({~;(Cb5T>MTQFGMDMKdrgrT zKP;L5oiPrbEakcd5_b>Q!D(Z`y}q6fx17tPGT(N3iNFq8!C!(RJz4}Al#(H}I^pq? z5R_u7Plg+`(u+Whq;R=E5}4>XU}iNlFSfF$Rq?^UB$hYk5n+;zll?sPh^V^w^d`gt z`}@y$6dW6EvA^D#&-STeY}@?XA!qWDEBI zjC!UvX#4w=o^Z20w^6>{Igj~_h{TLi+U<~%h1ZessKV#qLS<&%B(n+88mRuOMZb~b zxl1J`@!Roy-4?{wUg_Vhpc$^+5-Rn%TQ-(2#j~D6^M+~fcCvxc+0G@VA^k6q8s5Fd z2&HJ2#U#)7TxoAmN0C4vdjQFSXeqHH?W-$2PZwQ+RBr9??Re|!&cuq#>#D#GnIy8X z%rvN9@%m^~KJpRR?L3b{*oicKYwXJp>YmZ5l{WI;OmMCvO!22DKf}Wbgo)W@SZFBP zjL;h}?w16JpLMW4Zie1lyH+Gc{ z+_*mEV`=hSEg82*lF=bUXVBIY)SJ^I|3YeHgOocpR!r^KL^S=axUcZkJt~^BCy-O{ zU9%TQ<4gq7%4358h0$kOOosZRMQI&~Of=A`$2c3Kzf9bDN!jgzQ>&#@>k+&^s83Eu zZARf+MTB3Ef~OnfnCEYrD8(Lp*HDKRF~1+%~Ujeq{Yh z;W=@@aF*|?YYeO$wg+3R>9Ks-y9Hqj05!M;#DMrgb1(8m(6^o=ufyuz@2BBB>arCN#?B*JLy_>$ zj^;$4EGM|4gQmkmJMCQ%K>^Mtn%VU*wj1=l}zQ$K#Y?PQD3K`*wae@L%b7XIEs3m%=q+5ZN6UQ zuX9^5N+f*i7+;N6eHp_V(~LbFq5D_{51Nc5TS-%ozPROemr|?D#qZ$F@bIV3&*i|?^km_uLAtbH=$o3%;znJk%0Y$F-emE?z`>%1*$-X5Go0nDwlBilYA^Kou%{BPyjbSo&eWR(+}8UCcf5xJC8(ET zN7=n6XF>Rws1?DzdWvI`ANSk-s-23rOd>xEEsbRao`m62lds(Q|tzcdyRkH-C1{d(L?)B9?%Pd??@^*a%w zuq>SZ7zXRj4^?c9pT9}J{A`%OI`jDAJBRv=fx#C!QVz{yQxMZjXNJGQb=;}NARwIQ z>HRc&g;cG1{3#Z0-0TSn`dfXdodSi;%c1ayp_Z90S>83x0&&-SX3?nMHR*gHJ{*YC zciRYM^<&@>+D?sl%;gf03dJTZjAZM$f;iIU?d$cp^9njBB1xGvSK7tc>VRm9_Zp&3 z>924ZwOUE%0G(Dtywh-(A9j#^69;~RRxLwn@+A%2pK;qWE>;H0_ zpWYZr${Kw#dNi^oO+o1&4`AO+#I3 z*;UC=x^}(jk}DYEPTiHXmcAL?8-~{}v8|67YmxRU=1ZXv=zP|9?YuE}z-s=fkkLk1-%VBC4fa&%FYSX*6sHIp~k0Ue*VW!T#|{=+qZ_d!Y6 zraE{TCAd*}p%${ckVj_5gPfeACSnG}-DM1^J`h|iySp~Zj#lEdk5Cd4KgD4bPGp@w z$+wPlwH);}{8z?|7`E1D!>o3f;w47d6%E^0<#1t+5jhjIH?wAna+Sds8>|QBSqHMi zco&Fa7y#xQ1?#8beE2%yD7!la?z-P%40wDR$@3RHuZ=y7IyQBaP?;_9e(0! z?gX;ggyZVwpkZ;RKk-Uj6MN%4HM^^$@p9^x)%x{19s#y>OmS7!7dajyv4vtKd7`uc zPG9xkCU$>qXhtES>RraW=5ZO8jk};9pD;xM^gDA4o{t-o29p9b-6|x|I^lx@7Nj#vvBvW z;wDt*@;~B@^;&+$|Iz*b=a$rGg#z5uMx;UgspO?hWBpWqaVB+Ei*V;A1Q+5!Ce*Cc zTRJ3^!BCIT$iRm%Qdx#4s?xGEa&AM}YvT*uFk#V}!E#BL$-lbd5`E_J&TE?WqTg~v?U!r5>BdpLk7F^ys zaK-Y)TaM@2hfF29T2}hCgiyJv2^ag>ZeJpN2HTDV{Uuk@_<^}>oB7W2t4-7Q%gsYD z#FfJeY!m*tTV_NO@YP2~IHsDs&{rSm=vs4>`W|@%Yj=MA4d{GZV_I`TBIXDHJxaTK zBs&e%fN-NmU0ajb0ht-?TQT^~XD2in1e8>moIs=UqBH{Ow9n4O7J$9hS)ktWcp~Vh z5kgLDrqG(%_V)~!v@xrqBo7@b=lB@>i+ z*?NBVr=y*sgDA60;aTuYX7%?@BA+DI+n^pefqn4c|34^ z)r13WcWl8Uox%kTX>h-sU+>4BvZC?Ll1Ce68`i)$m$ebJh|n`CSM4Bn(n^~Ow3HvW zEhB5@FRsVV3H`VE7>x5c6>E$sT>`ye+>YFtm794_ohQSn76cZR$DCDgppAy=UG7k; zTAx#hKU@}_y63=QLPiXW>#OOxDM{xv97Mp*;velTC#UonlHdP(HR{HQ{6pS;5990@ z`>p@i_D)vkITy{9mgspNH%`g#lis7V)JT9V7^LpvO6S4|9G?oDSAY2>m0kXAL|r;} zyXD`P_UGRMP#M+1Srx21@;y@8d~aW8vVY^xLabmrBU}1AMKh8O*%~loklW$xt3C%3CG7@Pv5QP)(oS%hheR?P+(rk|J)yZ(OIpMK`mDv;)D9O z;mc?vcSpfilDN_6jV@=!d$mQ}aQb^|avNE3&sM=l9hMRX&jcZwqdX9n<#{6opeZG* zXth_iXXc8BMHC2}j~u^G8|)|l!RJ%1OYdb{qMd%fza z4mK%<@blI}m9d6t7Q0fF3BE&QCpZ7z8%H)QeC>KdmjI~VcTnK(7vN>KdiIbYT zAr$4krL`(-y_gcwQKe%U&SE;$AePwzAbe0bg+!hM0o<#L>NN4_R{mQ?@h~O4_MX ztN>>l9Y0Lm2_})Ht1?e?NKp{i2e1)4()Il=uR4#gB=tuRJhYuz`E%kKMN;(2dXmih zBhb^(N&Ox~$=lt0UJ)eT(*Ozh0#eHEesu8$++~*;>JBc*w2f#TcH%rwZ}A$iO4?ha zMR^t(%{J7tcI!h*&NrPurM=?Vd;DCKgrO+*`SCjKv>I%vH!+qyh6g#p@Rtf0u4dz* ze1{UCBTCHffmN!A(<(hj>O9fNCt-BqA}=f!8OT14q>U2*8;MNLWL*o3|IHA%jx&`X z-zA~~>o{FV z?9QkC`^IXYi~F6WP2o?QsqqHNbuX^X3c|21Y}9k>8`BDxXib2|T^$N<=p})CFVY{% zGcUEG_&Fq@S7?Rh^=)OsgAZ(IBv=F=7jo_^&;ZctUd^gt0ptiTf&H{#S0~ZtIuvW! z$tYEP%)b~ulE(Gxx|=@5q>TcrJ6dR7prnXXzePmpnB@WdIgT`Vz<*s}U>A54@OE4f ztGM-k>8`W|9^~m{&kD=`?6MvEXM|Xs^)b_IA}~}ug?UiG_&9v z1yh+|ai+Uwsy8>p{H!dqFI`Fc1<(T8VbMsqCs}{=SiE-0=iRLf{W2?Q@4_j18m%|X zpCU%s)L&WM8h>m~OqKt(#47^p2dFZut{gUBH|%5ii(TBX46mWkki7Qiwl1ybF8Hyr zP>!hhVtMC?3Qto#D2(@#V8$YeJimdLMRgu#v$<>tp~n;mAJJK3D48L%vln174SAEs z@;G~BelTwC`{TEmL}C&DEpE&5ZkOuOlK_I2#35YV9}L6LFh5zlHWux0m2M$!;&z%R z3OVk`n2+X(P1}v)iJ-l4MAVgHC&KHA1>>E70|Lk0JfVM&AuTYSF`|fJzfP||4APZ{ ze-l;=C(XnY|LKEEJzlHGUJFNv<;_Q>v4rU9@{py;Wd_%e25kzUhhNGnwYp;vvw7db zn5~p(|MPns(a+iR&JWuV^i(2*R3gq?!(~yN(ieCNh46a+Mf?wtdl>$*zHq6kuX~Kt z4(>CDbk48d--BO$6H9^D$@XYc_jf{gRSS0J_puY%2KmVX&Uwig&l8t&BXuVjvssj3 zTOaPQu3a~FSa-D=(q(KmCD69n6w$2}s|lsf`3$J%`#XirpU3mMjks5)St*&XuRo{O z?%&bqKb8MaST`08an)$!PjWC8D?&?Hz?__1P|A~-9L<#|LY23&oy?70(Zkeb+3FWl z@2KGYmxR+C2Kf&j50LyJNKMvx&`d&7rzF$6)wT<()KcFWepZ#Hb6ea!p{!8TyL@Hq zb=oWb>W@!?oz|02RA;F3!_Wn{ao>2>o}s)L#jgAA9f#k&Bpp`>Q}>?BbryQa}xjT+ZG!JIW?W_y&$s zXNmkrl}n$fM7yK|qOoQQzYUZHhBe^n&f0oAYUZ>5$8GWV_+W9uN-joGvKjGJ}yE@!}{*5~cmvoll`DSShztR&)Wza?CGOxXFnjDg0Ko9(wH`Z3%-+`onz%o1C z^>35kNlDJ{pzLk_47}EAlK(BPb^YGo=_dWQ%hj=e(dB0PR5XsZ!+^ANUemAv`rS>K zBqlx#2VWO)iA`Es=%jtkMu3iA?MlbQCX;;1@k5c99{rFD}D!&`ELUI-)!W4oT zDcup5SGuC*7ahIll!|oZ^kyJv40M&ZmlP+J8hnopc4mK0%;!c`%@%21|)KE zIWgNs=O>Wb$i%E}2_cDid&PeDSo2Fn%k+>b=RwWQ($I?WB=|uFP5P?N{^Ao#%_VG@ z`V2vtG`)kw)EuY(1&apdm_M#eW+!YR;v9DB%QW%263N!Fb;y+B z*304+zfbuQbPfKsSSHMH+incv*?tKLSEr+TIrR$hNit()|NoIiZ83# z8<2L5h^Arlc5xqY;h5}Rt=s>HBYKRFr%(%(w`(1E0cGJF%>R+5gfS0#6o=)1+FgR` zzNyQ;#m1k&BG&en+mQUFZvnlXFYrC;e;MNcXr=5UL}<+w4h2g2t#!i{A2VX!&J_km z`owCO3n989h>5GrF={P^hOb~`-o_Rv@c2FRP_9P1Ks~XlBU9I=RN|^)?2-?mbx(OG znN^9kE2|qF_2K_hx7L+40qmV2sUQaO}Ism3rMdW8>Xb-c&r)H-ZeS)f~lEKzw9&>}HQ8$jM z@NjYhYMgV$qU%o0mHIoU&n7m{qY>J`V;QjqXB6M;>bdvM_(F_H=xd2S5)}tkl4D?J zfZ4357K}Mynct`&2=;-&hif~88&c@~t)-LXdh_IDuB5~|n>3eUz52ca(&vCw>-@7S zD&+Z14RC6XO2z$-1$=Tf#^Ekv#jc^usm8;~tZhD0vQdb7bB*0mmxJW-kvN>k;H|rr z<3CY)YqzlV$q%B?-|)N`0zu_eAD`<(ZadGp8y#C?q-b_NG#lZw*vHV@{ntlIT=}17 zp%T*fW2sc4e|?Yt;|fK@0E72pm9{<}n_{n4|6v;an=Ji_Ic=&yLQt&qZ>BI_!Ywf2 z_qgwvM*sgK>Khy?jk|77uE{zlyUCqwV{%PXGugIn+qUf{+n8)O*|z8Q-uHgr{TrVB z+t1!>?X?!(%9VU(TX&Mc{J zn`earrcG?HmkSMivtmb#OtP-A;r+#@=fU8yHui7h$=Zni4M(fjyu0ZJq%KJbvUn_V z^Sj+}jDL74G9GjBtp(9aOVB%kY2Ah4R*WHx1dNTZtL*8OZF_GT?i%D+P5O z(X~x5dP!vQOS6r>S8S~z|8=4Y4E}!lUc&2NZA||}^+f~@15+oPQA#%iYhdt{tVkY2?KaSzKQwNFebzE>hrH90*K%oD`|9ky;NBv^)ZV%Dh7n_ z@wvrr-w#EY_Lc>I&|np5WA>(UVD?{4e88WOwP#FMchL>5LyDPpWHMLd5|@MYto||b z9h?Pn5@qGJP?dPvxU7t{T6&0&+ibVc*s+$yHeKqLr+;@-fX}-Bn9PqW-91gCPzG-1nhhRdU61c zZa1#z7|t4clE#NQ>2+1phXm+%!mHgp5kA7^uNa3#@9*Ais`9lrHqHD>(>Yv-b3i;f;^oo}~R+FysV7k)0sJ}M?2TC*Itn`qG!OVUYZSY47U zV<0NQ)2rxiQBO?4eUvfbfaGC0arGIY#N()5h+6x4FFob*y%xs;H9a>v4b)h#kiiFL zABt(nJ#2+oa)<3{>>|tE0I#7m=B)G(#L5EupRxVMQ_w?hN*GN4;Uwr01)Rj=tt1BP zGart_r`7c~Kf>6v>jxpBS9%_q^cS2TJ!W1gJ*sG+4OwPo5Z(<;t((5y=gzE!BM3P% z!-XX@qm@$r=6sBG3)|P{1h`5+xOCkTb~7?xg-rbCw*5bHnyayho)4f~JapHwG)97Q zkXV1tOaF*GH6T_X!Le^^bu^=fRnj*e3K7GHvIJe07-pWKsZp*o*=FO>3{PY>p5^(t zIm&`%t@ePV;MlNrpADHM6TayK!)6nh+me>r{B=ICvD!3^=u+s z<|8L1!+z3-d*Cxo*|T#>o;lVp+i_a|qY$I80;d)6jisv{mB279fFO|K2Z7pbkn}x0wY01W|uk)Y60w3b;pp{>$s?R@m4a2sCx9GL6v2Cwz zW+@W?+M6}ME>;LPy~wZzTm?0o8WC~T6G45 zz1(>6Q}KcS#2lc?UK?x;_HWQ*9n2zMQf+{`)|znfI+u}LJ#U}x?%t_NKvRN`5zl&v zXKRtEzR7-)<3gB+pxeClAPRUH)I@j_%d}x!N(Hz)IYnB3QK3n&`ngUsae1Cc>7G~K zVMG^EZ%152O{xToZ_ZTW*XJQoK!wd3+n1ZmA~A@Suo3R}lOmj}72-Wr(AVtmF**7@(;UoRrG8!@kEV+sdUT5inl#CcccB^N-Jkwxc- zIvl7?QWj~3Eh1t9X^FHb;CpggQ0Z?v}_c`v-&t~jU*v-o&)#t5foP!r{Ak1$avz}=q`#J z=CA+Qey1Pc7cif5d7CMKRq?&-$c3Zw`9s9Eu4R|y8ePVTr%H$zjMVj`7Z%XaWguM2 zTfIK^oy?!}iIr4}{F88a^}K2H-K2V1?n zfYsC;Ii7}&VUP0^{J%fj61=Dq4Vn6=F{Q%g>_z@aL-a;SJ8A7Z?Nr5x zgSW&a*EO;U3nmWWEH}!Bu*p3J7BvW#Xeo7@xIEh$f`W$2XrOmVX&0*^KmOZ zZAWx&fC?8#F=;5Y*c^S^(g7W%eH|Qv&)_C_)hmknr&FOYx;Bj6U%#B_IDJNGUf?6w zBjYMb-9+QG*Cg|*hD1(wSRGZfD%$7Q%?Xm8eyXfnFfujCe_v`lV^NyZ%ZcxS7ZI(d zmq@{0g^DCuv;r&o4mU%rg~o56;dzMBwJ1)PZy9*@+JLu}CBE97yHS&ve%$604w1$L zL5$iAkvo2MPAzOs?KI7|;vdP2N?HCUfmF_aFcdmu>l6;OeVYE7!(LPM?P*b`QcbL~ z5*skb&}&QoJ=SMofS%bN%5Q=W`cU55Allp1KuO<>n%LA+cBhWy%_f2w)EE588 za6oL(f?L_H_lZDyn-|b%xXc3RqRr->Fl3xNaCS zn$@RIu{iT6Hh`bqA8h-^7O;J)w}po@v!UdL>U-E*q5f>4uD{%;^9=_wbLmS)=fUa- zy?Nh==)dAA_<3H1VHF;;8(%4DHlxj%L;m~0!?u@yJI}{Z91xpJGVJdPg0E@j@5;Gf z^$#S6fLd{wW0e)MOTV!6CG;%c()vAoN778jiyp9~>N-g$+AcXgHJWoQUhD80832gacOl9-)dfkjt zfsQuyZvLxhVx)rXSh~sfNCXQ)QV>sSCzhJ%<@5)hB%&*&<^AX zH_52!XkWENR1IUd5`b}Ep2Nw_vkc)Gfj~&D1dB?q(;f=T{3h@CQeW7v*Vudzq=~-_ zL*%HVF7q)#i7u-_^n_&Z#S?x$t_&_2G#9X?j{l~<6ur}_qG?8}UxFo_r`|4H1ewnY zC?bDCo6$9!MA;Q{Jc#iS0i2C?J7sRau9st%Q5;q#@A;`86Lh*_QpdX;DgLtDe2qJo zTrXv~U(>zX^F`)u*$?$#7~Fk85V=oJ1oFFT$w&>-{)bP7B5o?#lx!6w`Y-og{eAggpOCN>G-=XFxA@G;G zq#;HNKX`CZrdzY%7)51`d&vR2Q=iVQrwzI!8zk$O4#z8Y2!i&249WK!}zZaY{Z=pzm$u?#5_HV*^;*?1oB-%tOEmX_~+ivCQKelbxLi`l~JcBm&QM*{| zlJ!+-j67~u2Zd3{2Hh^7rhL{L#}*WAGGcTh-aJ<&g0FjbX~2)EO%DZBL{HC`myo~H zSpcx7gzqpS@BLr99`LHbPemAO)l^t~gKS(fv0xo>D67f3r!mdU5-$q7XcZFW6i1=- z--!=pr}w0xTQ-9>xCg=*-^fDLu{o|)@--x4(79B(n;mWG*w4r4|09B#c?|w!4Mja3 zk4th+Ci42P_qoTR-+EEKul8xUDE=PP&NXD`V*hyX^B10_D;l{h4)@wnMJNS9wk49a+4PAA0|ICe= zY`yMy|61x=Uue#yhf98B!%H*Fli?JJqtt}zk9vR%KJU0865JWeB+00xriiYFFlx)u z3^~z(tOXLgan-t?JCv>^P)~SmN%QxCXW;&=?}q|XDuGT&C<@4~S- z_o}A^zhg3~CVPGF;H>h)){nwcEpAqUfIe9Bz*GIosW=S%&c>@@aL?9t0LO#C?D^X? zj1(bpEb<#RvTI$}J0`pnk;86Kyjlln1ruQ^>7UqK6BMQb$km~-fmF-DWF{OIp(Y)@ z^Qeac+eV;la!B{!hfVyJ_!{TIv@TmS&hiLJ_D_%BWPe~$3u#s7@m+T}2{ukTfi_fV zs@k+s6GWjyWm^d)NAQ~1l9nz|%H$@f77YfaldaF2Y!;nytP9l?qAJ6=7NPE%{k2-% z!ov}83i@nQysfP>b5{!{Rl_QPrv+<_!*unn9VXRSo#Cj=c@%4J9d?GFhV(Yn zyxPt!J70xt7j2yC9~B!c79G)$jTF_*bhG$Wdwh7*jn_{;l5u9Z|KPu1L&q(;?)KE{ z`8B(5jcMuKirnVhD7E@1OeSh9Nh~usNEycciULJyC<(fU9B@xN1*#lKsA!;IDrAw) zjxBJm*1z5=rxt-7bQ&e_+Ipwui3EIO*`-(;AW+^CROyG-q2#YlUyOW2701&mW(ekJ zQRRW1e{@6y>XOP?ijplIZK+yvC-<>w=<{9E_o;jB>*M!R_8P=ZfC{N!IB1*1PQ%H)TQIg>6Fo>lkOsE#D zNi_|d#SvvpgO2P!&ve)~VS?QtX}h&`R3(R}KI7x$Z6F-I)ks(LXdD6T4h*&noOnVs zwKA>))_ggZU@h*ypP~2yj>o1>Ic@-6fh;-(lbvFE0hhL=w>qwD`Rt-bPim{7d@FiS z+vR~V#U}iTIqq-6p?)Sa6E)%;-jwcEi8v*hfpQrN_X_~a_U&gh!WtIDh4G^KYu~AY z?DjP4uk}coi`|FmQ*-gG1032-l-YwrxK&$qHjOg|)Eq?UNtn@|eiR{M-18IyFG?ZzlIBj5>BxtRI^i6ynaY9Swx;x4k;U}t205#w z1XlQ;mfsd22FRLEZBg}wR-*sy-~O4iDv-rIpJblsmejh2%t>hWWAFC=C&^3sfm>4@ zmbhDvW9r9s<^MS4Rp+{yYMEtKw=x$-jg&6gSg%Xt(*u8*SaYOlmZ{p3Nk@@--UkHJ z^xZ=i*k!{YIgC#6Q1n5SHx;^DMxb~zb@dg)s;lKjU(SO3KovXaw6v)PN4q`PU@y+p z9N6E<@RiOSFze_YR->9QJ%Svhh#h!c{>Ix7K!T0LWjw*m&?Qy%R^cmH z1F-6MU)^CI`of*pMxhY+1q*+Jq@qOihol&$t_QLs;#*h4lG6B-NAup*Ay2%p54;n? zix26$Bpp0|(tVJD)Oh|>w`eIWP{rZ^)WIGTdAy%TRybL-#phioOD`X-m*3I)(0^rd z8~riHcM9@(s1q;RWk)Mu-rq|3xmNN;EJ_aih1B$RYj0uKChnn=2Dn;ZP;=1Cua(1G zG9dTL(NLrhg)d@E-sI%-$9$y6gONm;`8$3qEJFPf`i}`(cGF$;O`02Q1Y<;@hR#_q zRL7!9HFZ~oOqGwW`Ea9W#a~O1;O--;cu0Y!&vl*!E@A z#@u_Ec78EkZ*el6ZUo}%9#p=dKk}zuqMbKC7rzLMA!{Wx5qg8tph3$oBA=M-(bE4+ zwEuw_T$vy#c(A}D?|D-tykX&JTlU1%6d6A({jt3eX~lM>*d(JrO=Ba9dUidfy{;}c zc>&p@O4FY?kLcJMAcQOjc7DUEPo8>t@d3AZvzU$buFomnr1N0?`{kAKDw?X`_|Gc_ zL`up74%L^GHjq;EHRR=oel~@*RZNxDZ*!{rs#fzMQA;B8CHgSs!~xjsQ1L2W7GWM}yW1u1-)ISixQ76(Kd!?3$A zPR7wU#){$i^D-%_7o6L{C0*>la_cyt)VU1G11|pr<3F#RT{!Z}7Ab z!26g@d0iQSnKDERi5cG_i3Yu$7rSF$C-G|@^9Li~#u&&f?RTay5+P=m;ineNs;h>1 zI8yf#o_9F$5&3*CoV>jHKJ-GMe9zRsEBkc5tg+26;lZ6i^!uht%NU4DFzd}&X)N>$ z3~MCX{*gHj@2Aex&RH*P4Y?LnWOfFEBw-Q>zYa;n@gx}Rb zjoO{IqHTybG?Y_!F#f#Vle#jpi}goHxI=qa>25%AL@X(!7W80)?e9>~gR~#_F>GF% zX7-bJ>vX}z41HZu9WXqev-1X4Yw5%H@{|5!`Oc6Xrso%4!Ww3%5mC^?_+*2^^|2eb zRtpwfaV(wY-4dl_`Qw7UYU4V8HD4#i#!qkzg~5P-cwFF*1;5~@+Y;lDaz_AbLtUMU zgaE2OzJnl&GctOH1Pn^d!PQIBonHla2wmbjbD*3h;AjdHL}5_XTHVFR*V*AAWz%7D zD}aG_03^Id98p1ErnW8JJ0xI#gl)LZ@Uo)r!6sfM1Kv&l-C_ftxm63yd0 zi;QQVVlA&S&4NULr&s!0;k*cf{B{QbEwEl;oUERvf7*ODASCc04`Wk4l+5Q3E5Qeb zyS#jVdNF%k2aJTfO3{Al1=HDcuBKj`Ff>hgvk?iptc-k?xLLnaO?_-FI4kxQ4;evw zW!X{X4c?=ypWObN=^?By^=q=}472?-^MmU2eJmY`t%Nwl!PFg~A`0Q6?{5Np!yjWg zs&WSPdc*!{7*WJkHpSRfKN})Rx0SEn7t)5&zMa|DE^zO(2; zN?l>;f;a?7%{Xv_!m&#j7aUgrq)Yfp`GfOkKB={p{DOUnqRXAGF}XLyjl&>3~- z$mTNn(`lvju$lD^Ye=R7-o)=rcwfoGf>b6>TiKC42USp&V^{E{Bt@OW8)BTv=A3;xK`>)xhx;vd-#qF|{IL68oc{%t=8UP^;?N1>>R_`BsgS~$#OGc@a zPa$IO?~g?@Kn9IL-zx>cKU}UO93D1d^!Pe;>9$y2e(^rp8jXzaGI3U2?xa&u{;KtJ z!>0S{su7mm>=^t*()0E8&`P6*SXGiF9x`Mb`8%<|+LSahj{+`Ru~@|_lYL24E2`G0 zEv5EfWXy#94D8evh7lzF0(l5o+77yDgOD#0ldSZ0mURLtms40KA4b<CQ{&!rEBckfy&xi?9>%O*4=k~OQ7JPWiL=6^35Ar2Ol>?Rxi;7QCc>SKwnF4< zgu}Gz)Dd4d5J7%GUOqgZPhw?KF^byeMpXKMLju(m>Lfcsr&}FyM=!}v`vj`k&O5v= zBPscN2>oF~GkzSJ7zs9*+f@w@D)1f79a4vaWej4}slgEs7W&k))|!u$iw9Z}1Yo`9 zX&)+0r6udHM8sCOduFRn_SIv&R?TeD`@_)rghZpXlxbVOC+6Hz97@A_yzsum8541D zss70>ZYnX>Po@TtIvcSzFd3i6uvaxtKE<1rPy7aw!T$Vr{)g==z!%1w%Rl^B83qyXMGS}#Sd!5-Y}9S7WR z@#2Aa3Cp1Ra@;AvQS+oW7DveCj44_B%%_FxE%#;IN}!^unlAsxHj}OL`CZiht7X7IZ%BwFw~YTZgMpCyb3}?yRH13kTxTA>xowy&8ER@0m0&&ECvnq zBn0V4S@Tdn&QD(U4XP^h?#uy|iqIz7xk<~mD!*kcg=r12k8VqDSbIUazPZcrxL4EF z!w+C)YI$y7XdB2-&TKPM(f%S!3G19`F0DFJz!CI(5N}m3p$~*GGo@)OKd@}ui7yT{ z0lovNo?+l8;2ngelKrl20ECl&_Z0cXb_G0;=)+rkDO9ydSPI_l4iFW36 z>$1>a2gbIN_+AS+X6+iRelrT@Bc^Pnmw2Ot4BNVmaYU#``Zyy-G!^H9>P#38yHKx= zP_uVxY6Ar<^YR#oxTO6x1aLxii{>fD*z#ETcel^6AM=`ZeksqAI7{_sV2ea?|8TXL zq=z-mn;Um;>-jQg!nX|2CE(*|D40xV(cU64B`O%|Efo<}F?{&_e3*(bMb?;#1p55o ztZ8@`*4#(W6l=YtON$LT9JTrfe&JO_U{{LL98-NFtXAD8px4SxS?e@UswfV+T|GYB z!ag3nLoaFm>2oONIH{yYoY08g?=i!2iNE@2czT^_B9XO!?dP{8UNKUp{g(c*!x6oIbX{PZI=WBj!I;ueq%=^6z>O%M)W0NK~=E1jz@hf%~p0`tg#E2e?zMtaFhwT zCQw(5bC*4LsQ#5#(MqnzKeap(={h8?j7I?c@T?YsBEE$!|FHJi>ScB=E~COwuMP@# zVeqbj23+GPRM|Irp7#IOT!nF9AtoH+>_z8~^6DFZ|*BF1w_CKzlcCrEM(r?`ukPBSg<7@l94- ziGmy25xoiY@Bu2qGR$U_^>7^LMG2SMR&N$07x6dGkrP>JO$p ztUU?}RxrJlDJC^8sh7rB7bkPFmAjp?Jx3jdaLTrv0nt-f+EZB_hmTxP=1Q@X6sSov zxMq=VhG*F=Y?w!Nh0*9iU-t3V+X4N{I)d@6*XBgzSBp)BF>{%!<0yrak; zH0=IK^an6j^ejngw4@V+{fk1YBl?k8Z)G3zLx36QQg@|8qBdw4l&E7d)E??;bQIeO z49aHh`7xqGUWG?MFL+l!w@}en@)sPr5FzCl;$yLmm_~}XWw^L=`^d;(T%>quKhec} zT02Dky>awO!Tg1Tgy3$(9Tqs%-SS+<0O*;S{4aiQfFFUU8~@T&9U?;3^`U;|P?8Zb z{3lcfY^_I&h5qlbIr~pPkDK1R%=6at*1*UkYpyY5>BpKzh$mJ*w`s(OCLJ`+nU<6| z0lu`Hdn?I5w#E6QD{LRT*-bJRP^I~rZykM)LOB(EIquA5e0=J0 ztD(RUcRmQcsHcQCunt>}yOruGW1e`>$cdZEl9#h~Nuw%C+R8Y)GDq*rI)^&@hjffH z)3&!MQ%jCZnht2}t`ks%%<_VWzjWV~Ro9@2B0S}$U2D0MY7nuzNxbribjbZB9H6on z@c&5zxKw+th}&gCrgC;Zv(VPP(;#*OC-~ozGpH!UD)rYwI@+w^wM!z@SA-}iHX{e| zt7Le^-0CHN!EXt=R#X-99lH0xlHx{2yQL(~ZCgkODTqf)6oW2(!bqdd;T{i$mYWhyeL zhLd6s{HYhIY}zm07dNFJp!UWX*y9Lx0RXrzrNo4losh0)JjV&|X*nKN+Wg4I#Bg?Z zq~UfZ$mrO5@0sl|A?%6;bu+xnIOewla7o(hC{=4kS6P>3w*jpZ*hoU4k~>L^g!dbDe?5$uVX!VS|n zQ_l+!cMoqSC>mc4X%%X+(=kY{{J>;|Ey_v13wgew;lI0OFL0$;g++2XT2U-EKeYn& zSJ;=X>fJf1@~?-8{@O$Nwtvunbbs8}{F}~vn+_3Z@VaowSrd5MM*TPKm>vG#_F4OF zYwh#S^x>qU#(G{bvd<~m{&KVP{Nw#q5GhG;mPb-VBEMKtnUP!fUATL;L#<~s+?s;= zXtvv;NJwgkhrRt9JHP`Wu4^^6;RL3QVt;k0FP1(#>xx3L;ta~Ko>`v;Vz8xv(7t5a zTa%kQes1dk$Cs3pj>yPEZjP@kW_S@jLkfc?fz!9n)PV!Rvbd0Fv?lS878hL`Vfz%j$*d;3UgD}f0DjCEIAVH0aM_$&Wmo+g>_+eEmeiV?5Tm{VELL)dB7w4SF7Vy^Y_9k+|8 z#)?{U(=EF?rVf!N9;e&lN(>Qb52<-Ja5r13PGb1n7bFp$5Q(PXl&xiRhlR$hD{e z?e!T(YyKcvgj^EQ`3e5<1vCXm6vT=)Lv7=zKbFksm2&lUO~X*Lim>W$lzvD~!&a}v zGe7DVW>w0TyI(fTGw;3H<~ICeOSlQf^*B-(sX+<$!d*4$0{t0J#_O?e{~qS}m{-FZ zOgjNTaxT|4yF57an5OgTVYK%I4o%?A7LSaP{NNdbTuw}GGJDD|qoAtfb4%XCujIEH zA-3?+mMi<%{uI=;nG{u~i8IDj-n`yyrlK+EaGng>Y+8{(Vi*o4?YRbnQU|43ZzDp= z^N=fJ$h!dH5E@de?^zlPO-e`YL>0DsBV2G`E8u7p=f$G?^8^9fGMJ7$I~y}Epk){d zcO(J{$ir`v2ZKih#PiO?r3ypdSqNUbWE>F!c6tKx^zDT$R?tao$t&p8%LoT|Io-{; zhHRrqOxCx^AKt|DEo%nTclXm2<98$?2v5W$#ydUZm`Y>Kro!RZ-aXDmnz9ChI4hNE z2cGgTgVdK|(TQ%=Avh{(py<;sW|#ZW%V+U1cwLVhESVpdtjDJvB<*|1CmZ8#(b|uw zf-!G7G>k-*bk>-d$m)7SEdjx8CMi%1vBQ@48XOtft>U(y_8_bxka#N4#Vq@#Ge-_o zyBV%MOZITghu<7Eeygp%^23-rxRXD&cPlvP7LiPI6u6a6e)P=5={bB;%|xQT*P zX`ASIj9pKWnZhi>o>w7UR?}qa+&RlP6SM5_M5(?Xz(R!aRTvf2+_7>@8U6LgRwz7V z!zwaBM-e=pd4q)L{JFGbCXCSCyP#nW*vb$@vZ+ldIsWei+Jb=2Rnz$SJod19R)R3% z_MkipXwB@^g&qKkltdQ(uRDe#$ANCYdZnW4Z4o+@qRhlhk5n*9lP|}e{>(p2H)k0U zfBp5h3_D-ut=8>{{kze(hGIo-qRzk2k}~7qe{2=7 z@9T8TAs^?aHNY#vA=`L+f2##;Y6YBf zaLO|U?WF~AgM0quXNq6no-;#A3Gt3D667QBTi_D8G!F9^qUbZIx;C9Vg~3hvsq%)g z3pySkbr{BXWXPX+N2=oENRGLf8Nfc=f?5_F=QXEhVq_SY>N zZapN*A#e|B2~G{_>((V+l3LIc;O~v#J;fCqE?utc8;HN8h>*p&4`*MIthqm52x34R zz76yz03%`UHVGg~sgSHsIeXrZYS6TC04jQ|;9tY^OcJ1_H>WFT! zPj|fUh!3UZNZpa|^?ArwxsxkLve}EZ8MP9(*!?!+erok4Q6x=Y25JIxzdcPepOx+$ z)(OpB8Jyuo2RGqCHCmCo@?MhhcY6r$qIJ}}%ImC$*u`=hot{hhB` zlA$yERv00jN$nPJ20+;@G6YQc(l)8+bEEX1xcd$#13{%-`T)7rY{QP6%+k&#rz zXedm61Vn1e5rl?|_zD)DI3ybELKuwkEIOq}xzmRU3SxCa@G(+mK(~K>36-lx&|jFX zI`Pt>1%v)4k@a6?YDSa(!Rv1?R#t#@Pfi8Y|LvoZJ(0dTkZkQz(({J}fBznTHTz*A z2aw|ZrsKLQFF#7EIq==8oE|1l9J=MUoVX08UAr%K-0d``pz`1)_0V~Ma8(U(b(JZ@`)rIx-^a)S1V zPL`?uD96h$rq!Y9#R+0aSRVbcam(na7C*A7+rO(;{N4lr-enaKW2vg&{vI|li_Wo8gg%pB>^v6?K$sgf;66phdE^crzL_L+A0>-8z7Ld*5NIh0&k< zAG$y8&i$NCF4l!>KlCeihZEqQ>~u1yX6PJYkaS{Ww1MKDl>V%@)!DHvE|&s$w>#hX zVeDk;pUvqsNM=aiSqMGcZVse1A2sBM zO*;)dBA%(;DRvRqp7%qa4pqMx|I-c_Sjj7od2ukC?+iMN`t48IthOg8HVjy^FPlqhcfQ% ztxG}s{UIV;d#r}YceoSZ849~q=*SaZdK=H)4K(6x{tvw5awb3azwnaQH(yZG zezcHzm&$QqaG@AWfX@xZ z!Cx4xL|fw9oL;|!$}qu(J9BuPuc0HI<7Jm5Q-!z%3td!=zA;=wkUBUp@x#Z65#)V* zm&Otw3lBZ>mLJPl#5klo>46D_*!nnY(6L zavm9;H22YsdTj)K%9XVvxPbumt<8nLA!f8)r7pU>VWDhkYPkSebHMy56n{5 zXNF-1MR#F3KM<$5`VHh4n53x``Mw1$bgJAo~V)-E->>ynS+?R}j>HvXa;ZFwado}Hzz2bX32&8tG);|pF!?gfC! zd-7lIf{2whoZ`V<=9A^sQ!pcaYP-Ae^z-IlSyE$tY8_?!sdQLvf!)x&DNTA@#u3+m=i(~EA`c(CEVwtl>p0U=ny(D9zF zy1OmLa|13p|4!__x`_%oPNkimhz{~Hd3M%$0Rbg{8aU^p`iVa&{(J>NRt$vNvVtysmP99VfS3AJyq zQDWGFB_Zw2f2z{HXh|lv<6R8^|cv)VP%}R3pWEzo#S`hOY+G;vL`-^L2hu#h|>?Nqg$m1)ESJzhda+16$ zjFvxAM$u#tE;#CV3-_-dMoz|`xz&vl5uzSBguE^Yb05tqylg; z2J=SCiL}_;tR`5p?Rp?F>_hTW6V8^Xae*0m69)ko1N;+NTo*U!+iRab-O@rItQ?O) zwM#oxX~Vw+uXDM3vn;z#$H)L~s(w})rM|I~k5bfJMc#I6#r z10cJVR*7>ht|9Bf0(Iqwt6->Ivs?1NJ?!AOl!?E2MFAl*k5h>D-n{vI_#Qm z3$@#sF}MBTyLSV3rVNZEQ?WnL%SyymoI^d7$oem@UkwyZokSwM{luI0TG)CS4dr1S zast$EV|LK_q;1J9&Q4#87C*1b<`DC5LSO`pL*0o^LHg7{zSD&JhO)FFV>0|JMAE9_ zUA`kULDxkMYO&R3joB)g(s)-oJY}|IbY~s?ekL5kCIhz=ay9I{*G!Njc(R7@Gco(I zAq#(5*h%}0x{$N@KdsidR9^IdTdmPIU-52`czG6*3>P;5LBe~MAxmB?61yIgQSawg zu49%qMtbt6Ev2bB1{rmxW}qR#>%|w}MY!=X60mQHz?t|z<}j8PlswYyI+s6sFL4sT zgUiLf?x)|VaGOz;rC*U-J+@o_IjQJ#So>i`9Xv&$nj+on->2^6brMe^)Iqe$fbu4v&3!JH?X#!pwgmy2*|OHrUy3t!T!cysIRC7{wWLD zT~{UMz=xZ1g%hsX7K#-LjwoVyPIt; z#NyjI6h$4ALGv08^#{GThU(F`z+J=9)SHYKRgc|@C@!*?cbuj7vsRn_w<->gY_6D6P>w$$^QhKS!dY0?z#xn82E0yk z_)XU@7Jl;83vWCMd^9HMWwxodFhbO<66h6<%7I%H>$pXn{R^v3XobJ#AX8pbteC}16i)$6odk4VK@YGgU4!cy3bNC7*)k{0gr9cui8LDhL-m7# zz{}_y#X+Y#cXbBM)Kr;FCu@QF>Mrj%UH%bbuIm@1Sg}N-;n3cw&|cKxDvd!av_(}l zOxL806Q6|GW>-NlGMwwv`t5q7<#qWtS?L%47+jNKxx<=>^B)ziP?|AwL#^Cs+pVx; z{>gTR_#Bm?8FK=ky!)hTR&w_L@a{6qbqa0^v(4(Pu{bscv8Ypb;i!YP zK|44PImW+{Ht;^eP@4sU4vKZ|Ofbr(NUCe>{?g0gzw}mDeucJoT;%+ybDr}ZaErQ# zrKHnH?pWfB-9QRApMtQVWonW(W~X|)M~T5ipupg-m|v{&Wmi})%obLfYUEo1q6f&232);HFJ2H?fo+f=dT<>F4=@)Mgsc47!kUuDif0isehk|@a)m9~@{S*Qq z2pn(ezU)d)ZN5BF7&GO7Wb;;O3-CM*V-qyFo`OaHRZETDF$54_=6RiMPZa*jvsUg9 zh|#`b|Mvs9?mIIS*SMv*GskzgBGMYqVtiFwl&EySag|Me^->0D37WE+kb7x;LF0PA z->ZuW`{{_j8i^&bneiQJXW3&N^m~{YOI*D`<=*f_5sY1LW}zuu~hm@R~tV2vI)`7N)zseduhRGHVUcQG?UH3+#> z+KQdrmg!B;Hn%8N-*GStY9SeK6&Cfh(A#(LfwO5x0nYemUPU)D!^1JfeT@UP=c^`W zdhm)KK`N7D&ZCA=hfFO4v7!C#&upYb=1y3^H|}_D0Nl7CyIBVFyXIf}+Sj&ke)F3b z9?!a2zPy#SeDHqkV;|c-`N>ai4<9~!EAkV6M&OLVUtt9N@~eY>5?YceCvfVJr;rAa zhmjLhp6Y~RB%96=I4DVQ24TQRIx5$(CNNH4oM42m5v0pIej!NkAT_xUP$%Ks|E4rF z(2_1G`8miR2~fjHiWc=qb%9;w5)S!Y5R){lAeCUDn=-nEhI%dG4Gdl5QQuW@32EC` ze(ue-68k+&YyFX(IEZtVOLu!5QyJ_-0W@?L-u_}wk>9gz3Kof~7W7WsqtbJSN0IZQ zDrOH$Eoun7lxZL5M4BOSp+Q_Jh-=hvUzp zRK9!B9b37!=-CTVGg|PJPW47XhWPP@I3agjGX-ViNg80sxEgoC)%SH$@eOZuT5bS@ z&HR!))a8V*GQ%8$iM`l5(!}@3?07XSv6wg>MW^(b(B8=_pD_`5HUj3DFxOLvH=9e7 zKjRX~(FkSJt4WYn-$7SF4yA2b{V)Pnm8OfF0GlTi6T>-ZjWQ`UN~UFlehO{Ss8`u| zW(lnNReF)nw>P*vqpzjUmPtcj$d);3TZilr_}u7m5GQo}tz(J6)@9*3FtUkA#~ccK z?z-g@#3Qc=Ze%$(0B+>4-5jI8^{sDhfBBbxsTb=!xj9C^2TSqul~-OlHvry43{TcG z0zZrh_%Yi4jBkbN`@>y_Ubs75(T9H0mU?19c|pEEYwG59qS2kE?>==WErvOvE3A}} zEOu$St~;Rv?_{P@m8S31rE9EO#1&a3GxCL!$Jh&1)$m64wC<)@ZD`>uP1@JBHvd|O zc4(70^ogPpWZ$7IQG1E$VY|7-1Z2j#@Jnplu2l{{v$oofZOHQ&s6jGrm{xzoZ$J`) zof)f0?1iUmTcby`$!gV}cUfU3u~f|>$N1=sw2@y`m8PQ(XDnhZ=rY%#J+OGDexWX)4*#4|8zAe1p0+LdTWf`aS? zCipC9Q`^IW5yjqU<8fi6;D5&j%YYGQ^g7=6@}~QH+C8|Z1^ffQ>0fVRc>dTw|9ACN z?*Pyf0+yp4k}D~>rzZiPc_qRESUACZvn5YU;D;2kXiGTMnZ@z0F7t)I-FOPu3!ceU zV_Gq4ct?twJEk?$-($MIy&SlziQwx7>P6@`Z0XS}&%oYW| zWaZr;@?T$zz~=bFhJdKONNWpGi8T~pW_B<7ZJzPnM^;K=ghC*ZqIum<#z-zD^F6fz zrOi0gz$scLhsu=i?mV=-t|#Vt3!0+q4H1a2lXp!}uxpg1J@De6v4J7fnvO2E6B+A z;6+LV;cM~%Zc$Ub=fV+x6Z_`|z)c*r8)P#JVt#Y?N2TEFkIH7pkII;ye!e&Ye2A`p zO?mypwK0Ev>bre+r9Rk6kh<8X?pM-KWFtXvvf4lxX-^R?%5}$sY*tWLlEHXnzmLM5Q{-%CO?XLiUCob5bO8*^c z`>%Fj^d^QS%dP$bwfT$CZR``?i83#-1BZ^(xg}2?U3bTgJQy#S7oWvKmHVO%z}EPa zdD8II%oX5Bb=!3tpbqS2qz-)87ZD<15t)vC@3siJU!P@L@q3!`WDh)>f z)6DA-$>DK&-x2p>4{5Rudge~)BFgnO|CU~0$VaZ6pO!3QM83k)ds__0Q7Z-)>_sLJkP}yc|+Uh2EYv+xSM2lE;2XC z;&*TBkCLzNK1wI&-;@Y2-}~=}<NA$E=JVEbN-8E6S} zA_suv*$5q!_42*z6l#>FkG0rABJKr=xPUqNQiE5ZF%r-8Tkd`XymauEa@bjD@yNR$ zy%%Lk9^*DOXyhf_i5@masm*|iJ}(i>Pc)L8BeZJZ8t5eMGNns|cQ5v;*KVSM5;yCd zv1bAbnXxj7q2u?)1G;{cKA#6I_&||6wE<$Jt>{5Ofln2Gib1~T9eS`7045pl+6Ph~c6M8=9DXoxdTdJ?(BLn7ikvYIm9PI&qjX)?ul zbwOxo;eNBvwISWK>Dl+TNA=h|iAuDoWc-lrMKT*+h80cgH7$oGa(jQ6 zv=VfXWy&Jp93jS2H`u;r(9*oF3oI;Cu3EEW9(N1O8F4I`(SiD$+D(uc$rCRr*gX}* zzEx^D1+kiK|C^0l3I1zaof`muZHMMG?2Nz}finU(D*}8d^4A}V{UP}>y=d9*RVE36 zKhjy$VRvO0-AW>oUi?@yHxg}2~c#)L&veo9WVA(7;+>9DBaL2+)H zv52Im&*Rg4KYA_G|M(6rFm$G5Tq@bLAB}0++3)yI$f0%M2b%?e{4Ua-2lN|OD8;*5 z)QUv|SV5{xp6QPf#tFOQXZ#vF>r1eSr4`xM^`^vqMuodcdjl&Adt@;mG)DTB0BR4r z7CiWtF=UK2W3Jh{_wh=1{o(QAnX%UI3GlSfQ&w(zq~n=l#9Zm(xg_0KX&%W3-!aV< zMD{S>1m~_YJ}`xD*H0GS*0gw{g+Ch&ujuCsnb&yZCt0{YiP3LLpjJm)U`Vo`+3-Rq za(S#D-Qdw2-)dL|lM8w>!3!+nP=B@yB?bXZu@4n67LYyddcNDI28yNO5sZu}iyopn zF2>eiu20kee{qS8;E}_IPnX!*y{;!7i04d!%wJ?Zm#{x_s%|k&=bf5Mezu-m8`|r{ zM`IxXVVdzlV5kf$_C5ZfT;0s|f=l37^aGL%!Wnstze)gUiav|o%tNEwY*WlbSth_r z5a^^jw3e}G47NC)00@BOam>tQ{!W=bcZ|!~m8l_`TD1FXS&&OWq!b+&YGhAQB2pJn zNZdE0wO7~YP`9aDfEaxi0joIDG#*?TVHm1`z4tQW^xj2Xlkg%N&kcZUp*jI)1kMPY z5jZ38b|SzB%kjg74>A(wAJhlh_@3z7G4M@kxTB>HbARrWsHo}B@_eAX?_?Vxf|)J? z2iqclK`&4>orz4)rF>z=Y916Htm>%V5bd%2w zMDrkTm5Hv{x!OzHHq-(=?^7tBY*^umooJ9~em8j3RjVflQgqBg3F8%Iq-)eJEc)#e zO!||o*r2797Fvi7n8jXj-c&%p`m`aq4J~~ZfY4FbqDTb0`QPV4`?o(pb-%#KY5Jkuer= zFxr(YgnBX9Ie*L5kZE2-CtCx%Ym}IwEAC0(qJ~jM-iSQbX|-Hma%DEzXT8r8y$vYdhzzt9EfQi z+H-udyGNuouXw28_0jDY9j44spsyFijazMis^OPpLL0X^YvMZ=roG07=L_i*Ztetd(a^_2#`xe3;VKx7~&jXe$%xUY{_Vupuw)ub8q#^jOacSp*WhCS z31G_xhXiVpkF_7TZ2{v&XyY-C_ADbgnxK8FGN8!YTRr^Tb4(R8dm0pb2?7_5(@fd6 zvhdw_>s7-w@fA($%}e-zMJjJ|_nlVyUi8FoC#7n#z+)ljJNT+ECB`?#d%nUk6|Vh$Sa>u5)cX zHKMuU1-Un3BoD#JX2QU$K4&!j*2QE(oqwuOUkzX*;f*Jca%Wo$f95<>jhOMyfR=B$ zGQv8r9e{N~t40@W7uGsOfZn`7GBogmg;z+&!fkc2*MENQrRWjo(mIN_!PLlUA=Jd7 zO6HXv3Zym%dW@PbPdKz$b|Rf2SCshTs_drS0;q+zZt5=m?vBw89{A9A@DBi?4 zK1^5kTpe;Y7AdWA(zo!`jsrv?HxSz9D`yY3iN5SEDIOo%&4-Nq#ojs3!ofToFvP(d zQWG!^eIuVygcdY(CTrSOSU8w>z7_*j7e4K5zGN7#!-{t>B*fQw^pvhv$)*!8=SA)u@wWK34WU+gQu5^zNB}Yt$wu1 zmsPjyoPSg5xdAX^akkC~oDn!9a7N%AM1T(#{_f~57Uk~UyM75KH6J$XTa@2{*f%A8 zc`w=I<)llxP>Y%*=}8@8h(74~+=rHWBtM=OQs zWHf^y-$LNnOB7O^d~x^GB})zT5f-SS>7$z$4t&4gHd;*I_0r;z1-|VdZh4d(cI2}7 zw>EW>L|zbVT5M_ipy|avOGlihp7{1{m9{2om+;VH)9w-AMF6;tL1Jdj@fnl?ojB3K zx8Qd`!NWUa3~j%2fp(YT?(VgE=g;nzdyx_rH?!!tCZGTr2hl*x+^~Uahgpqhe(~ar z3zjiji3noG0@)KLGGOnynDY#}5^EhifUhyr*m*%NVm6T|d9Ru@ph6&D_lPIgKcB@eh)$0kb0lRGrg$r>9faPd^uKG4)e1z$iI$T3TT1am=d)Xe&C% z3%r~7-Dk{oez;TG=1~iL^rvxfxZUiIQ^^_8NZ+&y8c`bj4z6U3MIsldS-RKgj>u3q zN%t)gHVt+3HH3}IeYx@m2GS?ZNqq_An`*+Y7^Ne_lHi! zWjXhPYb%Ne>8+}C@v=&P1k%?W>nYH+B|sp2W@sB)wS35?clp9~M3XX`3NWQV6k|h# zy0y~-1b~5zwPv6{i+{a+e*&xZVEc{V z`ls7Zedzx7fBxc6w%_|Nzqftuo8Qwp{e1hWFZ|;6OTYB@wvT?`-gfKJYums2mtWdG z`zyb`ec>lRzCFC3OYxU~=eM^Hef}4>pZvs+Z}r)tu=ZU1JrEM zGek`tIzLXVCSHa%_%^kLH`mi@*cTmqS8h?+KDI4gFC=cZJck0~T4CRs5*72+FN$*< znq&HVTu>f$&~LHCX%=~FXGtbCr^@K2opk%wil^NcwQNOW&p=P05t9+SrUNj5J6@nr zt?~0bL|#!E*Q;g2N><@VW$*=@csX~F*I3%jg_&>TxXPyP<2j(+^l4<(X3@c8eBj@a z7H(RMyNaO9%TG7%sIB)|-9aB>(NkpDWOvFv+GA`7Z1Ekw^1nYJb{aidO8OWSjTNB6 z(Zqhw+iI`pz)^0rbLLNsZEX8AiT!hYrIzu}yBnal;^FUM=#2NdpcZ_N2eyT6oC9=^ zbFig59>dr8hB)i4U&TmYkg~BV1ALzNBpPRo$dQiEza~hA6gXqAGfVKkHsXir zMdX<`lmSO&$s5;y^~dLNXnZ6deveF@_dJP!ovL3}K63Bgy+z^6ZT9)zHBV;pcWwZ@ z+&G`o-cbaeZEw8sXnXYR;r46)`0sBI#QXjK_nqy}|Kz`KU;g92wf*YnKe~PQTi@88 zefY_c%C+Um>)+n~_qRT<-F^6(?bp8eMK3m9{e%Cwef`1T+5X|reL}Q%wvRmgNO0=? z&o6&z``Rl%yZ!3V{Dc#`kH7!k_PwuvW&1b({>$5^fBL7lU;l-V=tA&l`?Ej#G1Y3??Vhfa- z(=1Kic>Kg9*yC%b8jx{kpBQ8Trv|`yNJC~6jCF?{H+VS|a7DtS((|{82RjW&RGYMH zi3lN9SulH2(O6390CLo`P`SxwXpbqa_!s|=v^!aGBP7H4bSKQ;0zk#NDy6j$AAQ4xQb|0;$5=_$j8E{UiAFVBKJ~r; z8P_khdJa>+tbBz0=?77c=K)_?=$!1_0Qf;f{FM2&BfyFN%EKSqKK)&~8 zd-U3$Zh!iXZ*QA60N$+Jy8Ax!J$w3Od;QP<>-PPJpV&StIbHsCwZH%Bf8M_L{!eV5 z`OK&N6FlJm+gJW@d+^auZJ+=A7q(A)^v85@c(UEsUCXcj?w7T>@C(}qdEh{s2tT&{ z-|f%7`nB!jANk<+V-N4Q=(9c}a7I88;6t?^|0f`{@87>aK4AQz+u6-air6>4@r{=v z>Gsp_Sq`a07xD`FP8>!aP>q!k8j=r+6Pp7Puwrwm08T>D3NF)K;%!)I?(V*}-XwaB zxMs>VKvSl!G;9yt^|1Y|?H+0lq=)WK@`~#SCHcyN3u02gE-#96<6W;p1?an*lQ$B( z-+EyqX`Imv=GK!$Xs5%SHN_OS7fg&+l2!ZRNp>*kx}fWjg~fK+6b?a*SQlqwVsU`b zTwVeMZyp`Ih(c^cm&BzKO=P8>n9E7Fl$suai6=`DERh2JXI<6rZ}1&F#fW7--?;BS zbQC1CSst}EgfL5vk*=YO9{7yVwTQ2IWck%{=2*6MhWI244sjks+0}Cdh*e5|hFMhL z1!R%ePbxsy2D9j64tT*d{Aq7YDZK2$rxo0OAxg4$W$ngLp+{qo!iG1t6==)Ee*MdM zg#0>piSw9BKy@>HQZ-a`_vbHcKh5{eqRgzZ)~4_|AXz;gAZ-L@^?SJ{n4v`vi+}*et7$t&wT1#xp*?2 z5%`-L0TLGO_V*qCABLZ=z4qEmQFHHkzC45v$vHadNbd2hzR)?77!r|LW-6-IB$@;- zXjzwVduc`7NV+S*3KuHf6&T{TYsbo2n)ek1h+OOHLO62Q6)*ZX55r2F_HnU*>=cxj zPs50Y2nBnUP|;a{jeJ4fdMEF6b!D-i0GhB=bk~TZ(?SkDu^z30m!-$l2nEn%4OJE% zqb?E_$49v$9?BxEYca9>jf(oUAG3AUa24i5)@RqsufH)1*B1>P~F|l=V@<@%aaOW_L0LOz>Dae zOs{QPXA@OD^)zCzUTa+PoETD$+>v{U<64NW=@|eCMee$RVcbqxI;InHt=ECrkKxep zf<{H9<`A*ZX39}M?2ASQ)N^31_ax)7@g^A-EOH!E`jW27{;NIbKPUz5u8Kj_#oL4T<44LB=8#00000NkvXXu0mjfvzZ*L literal 0 HcmV?d00001 diff --git a/public/images/screenshots/mosaico/editor-2.png b/public/images/screenshots/mosaico/editor-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b2603dda1c8e00ab809d1a75ef0cca08413fd010 GIT binary patch literal 469736 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 Tyq(;_truUZBY5W4dXOS@-u_5`zrlo)%LWj+! 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®$=rEnN(T;*`p}cBk?Ax*&YtIw@r_@KViE{ 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�Yp&5~04iZ4` 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.dX|YM%1&H-t-J?8dE2!Iy8Ovtxf79 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 D!&dKi literal 0 HcmV?d00001 diff --git a/public/images/screenshots/mosaico/editor-3.png b/public/images/screenshots/mosaico/editor-3.png new file mode 100644 index 0000000000000000000000000000000000000000..4b92d3b63234daae44444a0905769bca94c904bd GIT binary patch literal 532234 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

        ~cA|%aWb1ex%IoJX0Q;C!puiW;xuv&QhLB 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

        E;}VmpgNe#Qupp@37|_1jOMAk@F6=4 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 -R(FyN~?LW$eY0oo{ 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

        n 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«zVHuMI8Xn*7hTj`!lk70aNT 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

        S+;KMOC04H&y{Q=S@Ko&7)_mXE|Zcf=L1wc1Npj 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

        uc&Z@YiB4l@4JDlU8 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%0DVos0NJHW3^QP6xz&}3qg9uE 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

        *EmWnwt+VGe8Tq(SZ~gX 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 K|nMR-sG`31fP(Tn-s|nk) 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⪰jyWsaCXZiD}5u8%UxI|x}k(%^3? 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 I{3>@o0{XK`QJj}4u{p+JzquB7DWu9rGoZkUg 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�zabyhS!&_}iCZ#Fu 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%0DD20x?`>x(bsQe{`xZc~lxKy-+&Qa;Y@ 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� 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 literal 0 HcmV?d00001 diff --git a/public/images/screenshots/subscription/create.png b/public/images/screenshots/subscription/create.png new file mode 100644 index 0000000000000000000000000000000000000000..f3f924cc794c7c4cbdfc130059ce0fadcd616129 GIT binary patch literal 65942 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 kKE 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 literal 0 HcmV?d00001 diff --git a/public/images/screenshots/templates/create.png b/public/images/screenshots/templates/create.png new file mode 100644 index 0000000000000000000000000000000000000000..8817037dea567fa3360308cd0d2267f6996e0d17 GIT binary patch literal 92043 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 z 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 O?irZtm)w2y;(r1C(j1xq literal 0 HcmV?d00001 diff --git a/public/images/screenshots/templates/edit/grapejs.png b/public/images/screenshots/templates/edit/grapejs.png new file mode 100644 index 0000000000000000000000000000000000000000..fca765875b07ed28780a67450f6122c0f37bacee GIT binary patch literal 238522 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

        >NiX7*`QjaL~Pi)%AWgpL}uF~|3Z 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 z

        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 z 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∾OM!G#Zve3?sedmwDxJ4 z&)3<{;^bV(3w$ZA&8AItYRlCPX4fs#2m~6JpiuT^JQ;7{;7}sH{oUFTO*$Loltw_-m^* zYQk_C{41CjsFico)e>zmP+bT_1JxO6zs7affKna&y&+6$FnCq8xa0U{TYmQ(#xP9p zVK#6FKzRw%pea8l?4T#9H8!FjKijw=EHFa<_Mwre348|AQb&t?2!n2nfkSZUNVJ0E zFjfO6hX<4kF*&t@DL**T777dw@fF|OJWOAGxrQ0~Tsnd&pT<>S;{X$Ih|Ujw^iewb z>}#n}*W>>%i zV*7NDm;jjbgLfNqe%G=|wxw$!aFN)PXx)Q>Zi27-b<3DuARJK$B2n2!>o!8asNvNd zeFKwsgOn{0)1ZO2zD5AJVVL0qH0VECyaC;9?3s}W_%%LE8Q4#zNo|{K`+#!t#x@dgp$6Mx_2D1W6-f;6NYJZD|x?Qx)c6ZR0p~zFGtJXxc{5 zQtj;1HpA)p^Uc&o^S*%D|2Unyyu1*?m{XTcBkD z0fJ%F>sU-2(I#3*9NLbI&ndM36671(Tf_p`i@<(EFzuS_cZp{ZgtqIgbAYohC?Lal z(`5xBR{<~MWSH?>)jEKE^lJPn)V+&fh!$u3!&EbNEk}XU8BC3uea-*b4H97h78ful zX9#B8>Mw$@QC4P76#y_Uoi4%T3lDtw$?P}{oJ+7Wc}_B(WSlOLgvpLYr(?yV$* zx{Up{0st9!^7vPVkQ8Yc0i9#k`RY8-9Y(jEY!1VjF>gxAeuD>^Mb^O#v+bm%K79jvG_-(v|OYDb>;=5IwHZsQU9=JMT`7(=jj5Nh5 zTbMpudq!R8cPw?ftWR12*glG(ScsT2;6mN3qw9e}u!?oH9c|B!E@X@^+Ra@cq|Fo% zbe&f;lHy|NzcAxBpM#h~+>0>4M)W)2xY7bFx_}l?Nau_(OZ2&!IP8bqIz1fhK+-y< zMM-!8({|{=HGdvc8HO~k_gQ#EnL;$Pc}xokE$qapj5mQtN|Qu+)~8^?8APM6DN_di z-0xr@BtGW!Bn+T4xtwG9@SdOf<3aClMkP@4b;duRqnyA~7`=K6*|y*a%LPXfYgiU! z_>}i{axekW2;AlU);11d^rJsu>z@YHVU&i8f2m$Pz{`u@U z8uZXA!*-01o*$>T#}Bpzs&iAJWoZ(TxeYTr0yEP=b8h@4_h^^lIbmD0qs9RQ2tr%N z&IH=nwpJveiP2Xd0)TPk{@j|iN0e~jxZPbFqQz~M^sm$>T623Y(aNahgt#Nv-D#6R za4psc#@?EMG*R&(=FipM!$em>dTM+$jk5=R zMaF&a7-3;E&EH&*X5%1YJ`8mg#=nb|!Q^-~-CmkccUD(`-%7vv>{++qYw6waEo;=%3YiQYDoY&J{=Kv|= z4)tf-KA6WUS|Bx0S|)U1=+9unM!=zpTD7f476QD2kU=YeVKnczZ!V#oJ;k(r4cuX< zXofR_+?~U~UC@`=u&?~6T~Y(dyC*hf~-X&8^hrcMtTV8M*~ZMQJ8S&d=;Ss z%}Ow?ZknDUup`2rY0UK%Nc?y9-t611w&&YK$Y<^UXkm?=2Pgw!(12b4BJ z1WZGtFk=wGE9D_Ljn*+jU<9~u@gng6R$`ipoPpOzkp^ zDRmn|w<&$m_1OJk4f;35^I@t71Rfew_)iakvHcD_75H^0ww}&tKUX|LBb5^ItLMzz zQ=WQ*HS`=6*b0cTbyC~4_LN`O6>}fBru5y5kM>5G?Wj=O-3!i1ASU&wSyhLt(&smu z|2aHWnZ>ckN3$1Pd#`HN(zbVETp#*Qde=8*R|(V*>Nb^_lJf2lt=D!;T8$9^?4wl0 z0ATy^PUDPth-0g3H2^q{n%}Z`%g=IxC4ZVrczYMG60m6BdW|_6Yvl#9&VKTSH4{!f z&zcH&mA~?IR*1$#mw-4+Z{J>KtUtvw<(&m4XYBu4Ty5KZjDOi`6)ZJm8P}rESgMgr zPZeFtH4GXbME;`E7zLy~in2?&02Pj)|5#JK5B!Ei`3JYORT_Y-(pyGU$@ZJXPlJFo z%vt!3qw=4LRc583{R{p!FrZNC?lk1{K6NHB?=4His&vx;Ax*_DGwrz+eT@LNdOaH5 zD^K|z7{L_KT3DMJb@QHi z0|HHU*Z}2s0VTsF07!gD6Egvcyb7$#D2Wrdgd)wD*=L2}Bb2mbJPw>O(O`hn zI)ti$`xJQ2o;zLs$N%ovd3Yx*vuF9m3s<86-MIc$*2I7E$;Zr~ zKjj-UW?lX#xUH@-<9)a6ZxHAWgTN(R&o2^XerBrgM-z@(PGx;k7p8N9l-SXwlM`i6a`&SQ{g(hPB`i1k<_h#ALaOR6yZE#g#8sI0s z{{)`^W{mr|b&t{Jhs@xQfjP!=;5?D!T`#X|{sL>;UHY)b+VmlQ`Zw;}gk}ng1gm?x ziCh16JP4-y6QXFlyAFmHgl+|AwFqaHcX4SSQ>L~Nx7Zr!MS(CkPnnRHHsTp;y`70a z(6fW4ImK+=^*{e}Idg8V{L2?#5zO#O6u}3~&fk5!&9hr&2Y^Fd^q&z6U^M3%cmnsK z5I=bMq%7WjST>pJ-lM_BxaRL5?9XF>aV@vAi#y=k!>8PKQVCrr@6=@qcw9vBSGb0O z`p{r9*~4g{dp|+;)>km<;HB~G8T>&2LtOY*FlM;(fIpW`7;(GTUv@gX?7(LV>KZ!T zI#O;MbFb2JsG^19GNECdQG?6MP+o^FDk$!Hky$$EBfI*|9^hTzESO#_186-$K|W@i z!XA9l!y8~qIdlYgn>;8%2N-;IFsA6{KE_aS2)}zh!8>Kb)(aX=vMnDS%duEd8q~5( z#=e-X_>?#J=UlvMqjxI(Di5HAjiZ_iqJY>ls8eQ@sYAZo^vz=oZqzb{a*cE;3HW{c zwJ3wP>-veJ2ta-)a>t%A26;9Pz!3(I7#pCmK?1AdgreXKt?WkGDrG7T*1<9?$uT3d zr@Z0O^XF=_N#`^3Ll=)a%b1+G_Zu48NY~C`9%=2V9o_5pEQNl3!&Mg!Sb|4W3N6cD zJsR%c$o%|9oIFgPt69D%i#~@ab*7Z|LB_(I8x>4TKr z1Bgpt^p2P^M)*Adgp7gl6a`&NmWnt>pMI!8Lsx%mEIw}KH7iSqtVLuE{ zHQV`z)VSplj!dqlFH9{XzQ&Q69r8Ejzm?O@-v@L{+Zb6KoBR3q$^Wu6DzBEI;&t+9 zWuJWhqI=Vdqe6*i>DcQ3qV(VAS+|`PRJ!eK{vU#0H@$F#t@7IN{yzA;D2;IZsleLK zU8VDf;MdX$%WI7Z&4}c)*F9Q0zsN|@%6?fHEuHwZerG#31IWwrf7g3q3a1&OT3Id6 z$@}*FMd#Mvg!S(DaZ|uq)FTwdumVC0Q=)u0P&p914pH7z&{QgGBw>UZlwvf6C_@TT zbIgP~o1XRg>@~lL(xIECv(B0AXU5oV($)y@rd#{7Cv5eG=YRqaqD9=&RYDF}2Yzb6 zOudqliZ?UarH*VYB_y|E%6ZA##3hE@kn_8+Izqpp@=>! zH*eph|KZk+AZWO$uWo;d7Xuy)XnLpCP~zr~SQF2l^K5B2VtRjsa=*m7?p37Mzx~za zvhn^wxpilw+!*$}=A_aB${E?s4b#5p`BcKPjR3%>`qZkNw* zZIs<@(v2}@pa8qV^$6pNLCsuFu#fWU4DuL36#133y9mRSzxw`cJVT^LA=}z}hLPeC zo&(T=anreBnk7QqDQ2t3D9A%&8z3O=?D9gvlVMO#i$i9gx16@;;Q~t#+7%OD(-?%3sz-^l)IHMbPCv{yxL;QA@L1&f6u?F(v~w!WDg`hxxwC}f zP&ox2Rw)`26JP`m3i^9^x$u7^!1%f7WJwRF3@FhcMUGm7CG~mqv+fbswjKNFe%w(v7fhP=YJ;hiQ!I^Rt@}Ump zLYA4qLU;T+MyuqQhIjsjKF$Ez&LG1Rl>@$q!B=IER;Au53Ik|-+-LR`ST$gviQohB zO=AF{OoMJ}yig_?Vbs95aSU%B;|b8yD?k|V*MuJ!Q7+g5MqH$&n0xqFbw!1=eTy?& z=yTJN$#ulhjcgDO+rT5UrPK*2A@>;-ysw~VCCpx#-um;?Gol?TC*31=4FE3!nLIxC zugNouo@<`?PPnEeaUj>*;BVc8kvftt@c2`UsJI3%(m5u!HgV?Pi1x`Lz7>eWDMu|} zR%$ILfNL_9H`~%er1dO0?Lt4mcxYSKb?IKH5PPN`q<3pm+sHbptf|E1o^(EQ$Au_y zV&Qx8g}*c~@GpiDQRHX_fXt4Q&XGu-a`xUn7x{+%6Jrl;tI=q{5~an}DVuT<+hm@t zMezzam~G2?gaL2VcS}~jJC?`pCu7Dj`$NS z0Ig-v_Kfi<$Flh^&-WQq!|V1-Sl@cf6Q2P_I@2tSH=)#sf=aN8W}De;ox$@DIlAe^ z(ZjmGPJLVXjfUd*s`v@3;ppHaENSTPb#XL*n`wSi?JR!6ZFO(7c-3>)DASApuTt+u zL-AmPv+;{{_k;2(_*rhlLl})`8tnG&Rq!)U^T2r%?fj}Zyvz5OLje^9 zB@jwfKj?>!AP+PzYDorseKe_fd}7NdV7`)idYI@BZ{v zSv!9PO$-()^N6vOXOKDQ3U7?qHZS|wGX-x@LZxnHS9d?q z7BOO)%H1D^v{jUN6m|`5D{MIptJvU_ut1T5YZSMq#YI-@IjcxaDi=!KzQ=H3NcC!!n^bv-~}=y zCPKFV<5~}eqA_ZoWdrcI9vBM9@o>Q_qBqzrJ(h^{vDge0#C2hz!UhyPcJc%~vZk5u zYnzo-!E!6i5xlGr?@Xt&s;UX-d{qFqlY$!$sRK1qM&iH9o3B&?65NY&rvp3_{K-p{ zCmg?L0OvVIC1j9^OBX2f7~)Sc2B57$YYceQM+4pj+S8SxlY%}aVn|XU5idP`EM8oi zk|{n>M1z;Sn#`6AUR4QsuDGkjh))i#`S*Obk^J7DJlglzb9)~YNb33Iw^a!KK($@~ z*EAGOVkn>!8xE(m>^`Dr&85Y8~Y@ z%Xc2W)}f}C+G#rx=NPFKb5L5&-c<$L?*!inmn*6C^E?IsJF)bP;wtSJs~CIfr7@WG z39dOp#@~k*2Tm$YF?uo%xr4>zm~RP7w*rg%@bauN#7Sd@hw)pa?F8O+{|<OoQBM z4T&NREu^a+JSy#JYx0O=rMRW|qsG!cATW-Adg_Cxl=&$(c{!1;(!U1dBQNmMcC&Y! zI9$d+ADcCx0LL&A>~+l z=v3P%uqd#;v#eHsi-Qjt&$!BSE;8194M+M}wrQmk_%MEjs`WP4J{O;Qc$QLc@9`IF z0I*49{-(s`qbhU0=FwHW8l$`pNIQ=>il54HW60Nm*>HSQidUmyQ|Mk7N9*Ze>hW)3 z1Zc2dhlbYGqtWnnV41gT1ZWEE>%wg9{HBZm!trQEfY)tj+um8ee2&?3cMGW7Mv)$&D?%+Al!4O5%yJ$b zpo}R5BBU%ZJG#Ic{UQ66AM84NgMflJ!FUgW3IT11vc8HE`Ux=zKKtb-7!W3`CI1{@ z=qy4A0r*e+fd23I`f zdw9qO^sd);me%$Biz8;LDS!R+GJDjolvNbCLzLYEe(XKKmVzko2$1_I!^)EfD8K`j z5P06k)4(xzCJQH4!vcZvj#+}>47)}k4JL;KS$xVG`zzefq2M|TK1CsX$~KTa@LOb; z11rA3P6h|OyMO0lc}!c3mgAu%!_nqD8yE|Z&nTW96OIXh&~w+y`2#}mQj3B7sT zuen#@5|1bd)N>j|pSGg>A)UZF^!5Cst)1})GIkNxX{&S44mkNlF0&kQu0p@Gwd$mf z0to$7Qu${JPG+Va701l@QXk(%ZcP1XThp7i`wIYJ&z@7??sv|*=LjyLL|~fcdD%0~ zSx=I97LiB83Ed00@J3`|(vu;1JX_$5wmwYMbqeymZ4g}RO>pyl0@~5S@NeH~)( z5RN$T3%1U9%O^7#yvfduUfJ@FwC2f}iV;9QIhOx99DC(~N%(}e#7OE|`r0PImd=!9 zeOwOWKaCrfrz^Nfc+wo?;d6)Uc5NOHY_{a%H=|ElhNB#VAT_h_l$kV7!D1LYJUt$7@VZI+f-`I5HsV; z4CqH1uqH8jkW#}G-<2a8l_Eon0sYfSrfefYCm->p+2OueVtL)qp7*<1g9(V58W`ZHD+w8UbX0H>Di#^Qc>Owu9Z%&@9NQZ2*MVo=*3Jrh!hhYPDX&ezeqDGD9?h8Yri}m%?(5=c zU0XX#!`E$R^S5?>Q@q%1XY2dAIKD2;-sOKgDKKCLMp;Wi#MyI|p|N|7BTXHld>$eE zkC}l#X8pVh%F^m8O3xw+O+NwlcK1>K7{dmPi3VC$OL6@|7#^qcjg$3hUbmlb?QAhHPzj>z>{V>v#%0V}=d^kos@1%-|;`6MszfN|2Pni!=~Go!d+>-Leg-JypI!`oX0F{*(un%b;2!|k zHT=iG9zc^J{G*Y?Nc00FUkx%-lmiVPyOf~;!d)Hu@PXeLBl;`wD?}?O=c|pd?a~Zq zRCRSvQCUYze0WoNzunjKM-(486fI)Wp7xIq!R)l;o!owL)5|n@N(FmYHOTk{{Wk_48 z7%6PKou=L)SsnqGAhPE>pYcCJI?GPj90u3I`4E-(rG`5UlbD})u0 zSyBpT%ktiO=Grq4qOfyLP(11Dk3=fOp3Ni}>tNYwYX}9$1-50kBk=Mx*#gVi;HtdR zZlNFPne{iW$`O1*H}JO79(qdSCh=KT?tR8J!#ee?B_8o0N~bVYpt-jX+GOT8EyF&~ z>%G0$e`#Zl8}f`*;E!j}q(-LT;7?>G`h-fdhL(|vEq!f@>pz`4fkdY)H9KNg526G( zxUh>%3@a+uWJn#jPRW+ZSOD+Zf83rBYcpe{M6l0@8;DNp z?05J+JZ*pQxoGo`?vhkK^iAbQ&-u~WC_Viz6qXFO8~@T5f#+FaX#(U8SKl zemi$t??sK;P1mkfYP@bnfEVTK!fn^)Ihoe`W(1HS{cykP(S?8N)T!q@kAU;|*NL2@E)0 zV3rm>cV=3JW0@Jxx?LDs2BJjIqcDzeS3h-@8F#J+Y`vCs!Q|;>Y8N3%!3TLRGmJ=i zj&*YiX>V<5v&&ll?VHcad#wMzi^6&D_RX@qa)p`hDM9FNqg*nBergL*<5@x$1mBD=B8?CrDTa^cEanc%HZraNVoNc7X=eb&TpqGTgPPUi4xAQ0hM;sc;W zZ*4Cy6TV&k=Cfav3#(_!Z*N@35Wu>Aj2!P@zED0mcdo3go-O};?`ip`KYd;%yEn@J z^dCMefBnmA=d92{{eL9p}_7Nu#kGY3jjcwk;Z6E+bH-s{wka^ct9h9^fAk= zl7B>djG)^b^x1f}$?}Eme20}w-BJ!>Www4FLqwlhJ!kY)0F1Y=M}3{egJKcFRsM4* zXk$FEtp04Ngg#a(g9aZ{xtN3RhA1@)DC&AT@B*Rz^&%OnRH2Cv;pGuQ z2M6q`Fu;K1If_3^9(ow1U?BdxB%m5Cs0c7o%%z3&N4arn%@6~CMgXSe;_iGLBN%B% z-0Lj>Uff}fQecPf2<~&xVGiZVEjW2ZKf%C4y;L?00OxX-h~|`8#q&DWx9^5CmPhmO z_yPIpClg>#i90Yhwuf}#opK zc@dh)|EWiyc?m3dPu})gMc0xX9ayCP}oi&4#3G{&!xzntke2&~F} z_z$|q^8^Dy*20Tb6!BmIbovT;`qaf>p95g~9jG(y@*?F^u9%E44$LwB`(2oz*wgv~ z$yo)M4wJU9T6466hGHMM3r*_Etwv61cf>Pc*S6(_bP6n!^4+lkX$RYsYR$$Y@>!1j zNnY3~{J<&cY+c8X(Ar@%78U@Tp4%M2i;;=(&psdcrk!cC)tFFITMv26m^lN!F9sU* zXkN&E6SAc*wDygBTulf`R{I7ptdD&p1|F{Ei3BFJVsG*B7jFP)ZDZq|Gy?cc=4prb zZ3f1)uLjF=_o&RzAjwCjeaO4-+qL;x8uJKO9Ga5obvt}-`UX!X zZnNko%Wq1YIKHet4Sx45yhfvji}&4Y(=>b-(3#S%4=!by=BSYT^{#c zYctDLn2bO<<7wN*GFmwe*2%MFnWmNLxz(waDUQ;x@nN@I>)DK8!fx#gxvL6Tr1u`Cgs%`NZ-C~p&k zIiW+cU$Hc<+n zJ;sZG^`Y-wy;REWae4BnR~|i{WN-E!{qzyW0Fpp$zX*d2Zm~sN)*u(o%pki*eYS!^ zw@Ls(`srL0nMt|*)txAlW7e7*5YO!mvpWF_*AxX-S;alvmr-_(2&CsM4wK0!-K(XC z!pq8h3?I1S6IgGs&AL@0(H|YJmh-s2ugtHqMd1<454Ph{`>RiW!c6```OQCl#SHIW zIk$qLWNEcL*qSd_*RPQFusqp(Q2yJW|8@DtfB1d*mmBxX4u*u$7&lnxsQ1P40%HdB zJrG|c5rh7%5|nRcajkrH;||*zu9V#!m0twSDRn{Fo<~?7vAp5lgB#gn{&i% z4}e1jLh9f+GD4~Ki2Eq@c08G)=wvn*>C$UcIAiI2vkH@vfV#eh0|iXo(Une}*;mm( zJcQ<+5hN9G6-p6iEhEq zRbrz!a&1}uR8A-GxPm@lgHK`}&{v~;^IUpT67VpTVYC1}oDx)C51EJ{_#}K}s?a!P z*tQysz?&EOE(;-La={ULTX#E`_a>yS1|ri2C?8aeW{Qt#WHb)j!xSF%yXiF$fnSey zp56L3JXY`PH_{wpQNO){OgsA&oOB%z@B2RgXe$EAr6geaE`3D2Em!z?TgxB|@98)4 zn(*W|3h?Y&eV;`sCtZav7_d=kavT(7`VnQq!$W4JUAiI-RPt<=;6nOZ3vr{($fJw@ z5W|`%>8$}oVAJP-FE51$X0lS~LJIqA-LjGT0$6u>xl$PRC~*+BF-3%>T50<@>tB~e zI41gThEI^Iv~UQpO+8w9VsBdiR9>_qwG9KG+hh8ihTu%Xi-mp7Mxx)jem`4L(nlaB zeFdew{V-A;`JA78RhJGBLx8L~sn8R(t_R=6A zQ;WNJt8~Y;p9YaeX&ft>Qus^%vmGtPGD2tjcj`@g4rx5XfOix^L2t^?z#+eAZ1g*& zOxWa4fK~8hG#|A}dt}VQGid#G}WMCxy>*j%onv`x1Af`nO6AAM31)IHC%Q*+kQUxXo|n(Y@-O+hF;rO{8{&g zUoyPlPq)5aOLGklmScJHvv4facc!si>t!9cwzd$wH*;-&YVbUN*Kx8xzbyTC!Fu=Z z$3=m|CpXJ4u6Gu!Im31P@zjwO)?)n{s7L;rR!XuQmdEA@_2oaefW_rb_=7_@x zru0Xy7f_V8;M=)V&gSq2p{fd(%*f!{*>gKQ6pRC+z8ehAS!ZFWK;7LYTKvHdX*O~H z$C%JxVFnkWP+>GPQS?y+v%MXa6x`cgihwYrH~EC9@(RK#y*&jb1z~1@7E#JEA4jRy z{ZrvfEmH5&zQPgX3sZIg00`&B;Zixfy2f$<>V=ZC}YMohP@M9)x z{uD~3UIr*06M|v&nLXcl`mkKOe72l9v&tI#Efh>5_2Us?AjTs+4fYA{_Y|*#4WjAy zpyMGlTg3HzdFc$h2N3@N7yOOA+X#+$3HXghSVMfyY@{=YnK||e(d}IGuCSS4R|tX5 zS{Z>`#oMvgF+%}T$=ccS9Re3B0p{7G8T0XcrtEQ0XOtmo|5+IATDzs)WI9Y?0 zAYG)DL|$s)9bX?$`U-KAP;;JE40V8pYgiS z7M6Xt{4EqXu6d7r1 zarJv2&m`o51r0gD)#?gM{sy_=Uh%d@;d}Xt_Kqu(K9^cmU=@B zAM&I8pfuY0kVYhB8BI*_!jTU-;`;x*-YSG*DPLBeGnHftscIIUh)KPvf2&N>>Q!kh zEhrOQ#7Exg!IRe6@mnvHEL93{@P{8$XX#Db9WzcH<7uT4ZOYF$E7E+z_$`d^3V0f; zLh8gw23n2*{%c6vN8OIoT`>~umT#4OC9W#-wVmp0e&xTK-{)ywYYSbE;1RzyZlkG} zQ9JxTC-}s6kyi3@Jf=9)q;K`{qcQ-rmO804wC8q)W&p7B$`mgE>zeEFHg3TXyrl==z5k0g)zG z@Bjcn07*naR8F?BdDjuRq@&7z7oSE)%k;VU`m+t?NBQQ-lP6JwK{pI`Sdl9U6&we}|@rmKPq2*ejNrUm>T=hyKnsx zZiQ>C?cX5!eAfE2KAlbsFFR|^@}VBeG0QR;p3BDlrzpVAn&GC-@VtN$x%mts2Vrm6 zH*U0n?Jz7%cIh*SjZBeFaSiREL_1r&!tD4SaRH8wP|PUXJ?xzc(p6fW!ajC@&;&U8 zKJAF0rUp`gNoTILDI2ZpV0H+=hlbZ1d+53KblMQzLJyNK_G6!C9ABw)jI~H9(%9LIpMH zlc0PEl|!x#>Xn%#+M(}vheiTij3)};3Vlvfk0VT@?C?w_Nnz62@(94xsr};xWoi^a z*ayCJuRs6V96$V2>JZ;?ZG|AW4?sgRaBDy-fyf z>I+V3b1_Xy{w5)CNjs}Y1<~Gnm+FTn1k}E1p6j(RYWnBX($CY01Eo<{jVI3d%IDVC zE$8SNQGjZiij8uIZKZM}de7w(@>d)y4wh{^5s(O5+C^kfZutqrej$xH(}sFexU|IW zDu?{$`R4oFG9*z|;_0Kay2wLP)!yu-MkCAD5SRL>L}$5;{7OHAj{p_(fFQgUaPoTz zklOESJz8DdZnDy`KG(s(b`mGO3*=h+qA=6O0_Hx=#j_-YzB#AV2H!EJ_65rl=VXN* zmN^7xpC368%ZsF)IxQ_oO49I{_wc-Z!=)R%Sc#i7@tKF`cI|x^UiZ20zUydd%`Yvx3hZ~~`#$f4*^DktIqc?Z zWp|%_+jUE8I|;WA8sBW6me;h69-gg}Mx75n_#lIh&-^u*^`qBve@)xQTjrPkp6}kh zoA&!U^}oI{o$$?n?b@~QR2QdK?#Y}!7Z(RcjRwNGe*Jok02;b{FU)o{m<^t1fAU$w zx20|U$@`YCUAHvS_8Rz_|4)DVQ)t{x+tR)0Y&(0j_UWb(#=GMk1x`}nw>KW*QvMW? zgl+3E0vsTSjM*aZC+Dx>`ErDkH6##Tue=9eUPNg5^p_u%OUwQ8C0pK&7FIJ0aqirD zW|F`7;!$~@wdqT1Zn?M1HgBaodbnHe68LV8S?Ve41g@T0D|hZbL4d=907YnCcjzcU zDES$eodsshLg77k5x9)$cZgBo8vhU8yIel`IqT+er+@hHX@an608qGA-Wz#F@ZM+7 zX$5}AyA=$LDs`Kik9mfhGcMMsv-RHf?*wJrXM4c$;TiBy`9C5JN;6vo68D`g0oTjw z@)8049+f3_7}z&P0*+s&@QfH;I8z?sy>N={_OK_QSR4QgA(t8BpMCrZ#*?RsaQ&2J z4`Y;g=4H$J+0$herR)$R#cd2OkBQFzbc?`xcm*6P5MzM+>h7bmLV!7Z9axURQUqu} z(Ez}EXLhG3|3=n6%9c*d(geyiBUm1fVu?+R8Gj+QShXKY2BK|NJ{fhFtT!mSt|z&JyRF$+dJ>sg+dHOT!VO zA08Aa&+@m8%6m8!g;03`TmuPOp?IrQ)qmhZ{Y_ifmID)5$^t`o4v`2PrdLr^In)im zo^5XAQ($A$lpMh`3MJ63sY<@^#1rNZu1Mf;m~C#Q_}PuPc4dsl7bu!?4eFz0Z`hBHk+eIv)hJ7%6O(& zmL6T)8)G5MYSOoA8wVGN8@f?oGyH_Elxdah+wtnasF2xh9$N3r=#$2O@%Ax)lxpzR zKt|abpY;wh(5Y=`KX>?AV)DoBX~8ZYT~1W`P1D0@fh9M({p&qHLkIn2V1=L{q>25Qeu*FAi$(&Fs8N|OxSJ%rIc#6=v<*RH$og{7i- z^XARW8vCvbLjys!hT=5S=vMjkvuov}%ct2g52XlpH8MLo z75msfDgW-;`EvQ{I^F=N&ZF}%-v~p&lkz*<{=d4#4EuDx{PNRZmIY>IfA`z#1Ye^c zvZP>@9RNQ1-~tK{(e(+y_s8qknE{zE=W)wFU|ND1e zvSY!`%&r)*e#`g+>}o)$DhvhWpPQ6Dj0>y)h=6K5Hxs$ECsx5*!wJ@e2#rdz%G#s`7I1_nTvbyh{eJZLqUZKvL@e|A|3 zDjeg!f$=l~sKkL63VIA5$_<%aN6CgKdd!$j;T@Mx9AgwXLJ^*_rQh*7TTQN>BM2b8 z0nd$@{bOW>rYLwSV&Nbviy*G@&INS?7yn5^>1j*`DWX#76=_x0qP#dOnWqZh%vdHR zmGHa6&-5zy@svPm=%f6&G({z19;I!LdOBMiou2ZKnTbDwPSQ692%Z_RQrfpj|}6&LA3TI=XP8ZXLjA6|30#;x18%07JgKm5o47{Q+6p*JbPrTdE_4Q*r= z@gP~o01X&1P=H^$GjBvgj`gAZ-?fh;%VZ2}T^bCuQJDOUMwOZ#W6F!qrftaj5dY@9lE= zkx4q*2R-|f)kh3O;hW$>DZDUFK)6D<;>LY7xRI7TU(<^8+-LSRxT?Ux7kFcM)|jVE zWdF=TnUyxO9wk^cp1GS#3>V;@ej_aDM?LuaJa3FdaCPX#n@U$H14o;Ol)|gE<|4Ha zmY}2wXBmQ58ed{eA%k@Aj~)#kLKI#&N_h4)(jVa!mE9^_Duf{*#t02<{Caeb0Uk9{ zE;G@L2~kKn#{l4flOO$*y1PARwxOgiNq-e$`=Uk@F|T#>j51F%Lz)--~3M1XvWe*xWHBN$@?G*!-V-&nC91Q^;QQ+Y}%Y#|K6T=-y_VKcq z5Ua-JP6jtLzg{uZ>0W}5S|6X;aPnA;AHa>WuOWsy&#|N}{Q-l)5QF$4W2}K&-{#|+ z+UDC_lUKl9M(QeuVaUcvGPgaP!?QorXR!DlWu=46(wWEm7v+`lbqiNXJgNM*vdt$0 zw)~#W=izl1&vx&6{T3G>2|IsYW(2UThW}Yyd34XVyav0K*FgIGO&-Gkw=e>Tr^=!5 zPuAgw;;$m?p@N!$;{^b0PnC8R@kY;XvPREt+lp7?l^5Zt71d<`dU<@;VVj*J0=H$f z_H5;u&u9L+v}pGYuJy7!4O1=$(5plvfHZ8pYJTB*XzZ}e=E2h5wX;t2AdE5L&hm%C(AK7L7{8@N> zSXQR{{GQV=Z%n@DvHlLK!1Xr6IER;*D({lFweEHSS*4Pg4LizH~Tjk5^ z|IBuROBf1>#*RXFo?vYccORAQCp+cI-De4m#Yl{v$_xa{3ycMTScdY5d$&RpW6qd0 z)=H?mX!zT%uScj+=;_hUeRNnhcDKsI zV`CHGu1!5Q@Cew&Sn=rI<8qcjeiMYI@g6il@qYZ&b)E{2M{HL}KkYBG)!$~h`;aXQ znGw2t;e1(GUMUapif~4M1>tppZ^@Y8aAUUr(=)<#rOvKy5nDiob+Uue0-CvYd7roh z#9bt^zpA)1F7suJNc=+{Dz6=2h+qgtU}ISZF$9nq5pexhA-w1F%^$}o{zcJ%&Aro2 zT!V;0t^1B6IYxP*$OymgMGxUf%q%g6g(GLGRW@jQL{VnQS!xl%u+6d|fRfzxwJI@f z{W_$tGiyAH>hE@7pfvA23b%qeVJ1<4$>D4nv^+vGKf*&mY@DNNNy? z1Wy`qH10zW&j|)+24cL_I3MG_p8#Xf%m99cpo(SXTsdZm%b_#^c26N%Lh(O}A#fFP z9XtDK0??%@{!)!wA4w|`sW_;;WK8E$gM`Y9h80i^OwXB#wXu8zT;l}9wHH1Zab1<8 z`VOcOzO7MOOSle(sk#xxUnsn+r7Bme=^R!q3&pMb^7BWL6hIVXlrb;tY9jo2z&SD9_DP?@cdWltdwtT-l?~Y_4TX zwPSe5HT2K(lh^!$OG|PwD>X<`1rFW>UVBr^u_C#$LXIEYg*M!44AkpO{&%~{vMNK zAceICmiXC!YJIJ6JdL4?L0;SXYIvegmH3&l5d~1{CO1XUA)-#_K*>|XYi$L6@U1SbL2+L=asZg zJCH7Yo;tc?OZC#K-$I8lcSkWMiuH8H-nv+phEyl<1_bIAj>>*^Pa(|+nmN|kc8kP9 zna8Ml`ZT+uK;wDFSB>lQc+|}o+Pv@3+hVn^-@J)6IIE@B>=idEt?)0Gi^wST^gALZVBM_{eLRml=US1lp zE!|`K#|DB70?lNVHSkZ%?i1F@ZyjSKm}iV%CCdGL`NQ-8WqDH0on0zFxwODGf0Ody z)}P8{w!b^SJ}%cTy0#y|da#9JiUEL~2o%Vcm)FV`TTE^3Fa}_FSX*9?@_v9|d5nU2d^A_?;yLlvoyXvQ zh<5~@TnM34ghh=2D)w_4<_MU0_t_YafLrC>qi2j21cG9=e~N#vbyu-E0w>1>qnJ-n z{&h*#(6A3K$IQU&kzR#a!O!PoW~H5(R>@H~^fMl%0}a$|_Y|sCN}}NKLU;2-z9)TV z(ka(3zq5}~UJ&%$(otHp7|1FJ^*bdm zseD8sNbU1hYJtDXoC)|*z07bYx%n}9sEkwpEH40t%E}S5ahYj!CX{xdX(fDwX=f8P zRB5nsw$z!p_WhEn!HD;?=TJqKe!}*V?$|*w7{}lt{%NF9xpfwPK;2ZeR7~+#mx3f_ zSqVypYyK~sy-*g$+rWf3-C=_MKXQo+S^_EryrjZ_0zo_RDnFGbud`bKGLnbwQr)}3 zfOk2lLk{xRb3Mr;^}b%n1Nl+cdY&bqp>uEI8H~IU7s>6jG|nuYJey~pDLZM%OTVHU z(>H_z?VyNKpWo@g1BU->n}&Q^l!{Q(I-b~;DJwwW8TnRY2~9^?LuaMQe+(a)!u;Ya z-1;BB<)2D@3`fFBr!jraBkoB*%WFRl9Pejo^i~jVo^aA&V45TO*Lu*rrnQ~X->6P) z1Np#QZj~CN(ASONDi_&1^bjq7_PNv-AW@X9C=l!uj!zjUypJ)Y!nWjUOsjP~wmoD9 zvWl|xW6qed0o*F0si6F?=a7oBe99^?_zk{e3@~t@9#2NIk1S(-p_{*qTh!Cp^6W4` zMGQQeV4*6nyps}EE?d?y#!cBGRXp;XdPwnl)Gv6jHh_#toRMT2I^ilV{Us;NXRdhzu;eblwiWrgH$*0HD&>-nYEM zRr!B_U~0L-@k6LkB%XE#U8PmdgyrGcpXn^K1)DorAJbZn zyzb)H?pxY+7Ds>GI<$A@d6h#2QRP^;4Mv0C#pC3=Z!61o_Gm_cmaYq{`>b7`Jh$>1 z&)C-8cD8+*GH>37bAzKIZQEYIe*HQ9+dK1p^2sOR4WG5LS{pRJdHC?*ziJoL%MFD(TZYog^1VO#)BuxDpAyInezCsI6TtTlh^A@6TDQJl zoA1t@JJ0)1gKs{UzsRe?X@}Rs^4*{R{O5l~zn1RX&hm_9e4BCM+w#48{^Oy*XP2Lp z%kQ5nzyBP=7VhkiA8#>JzgBt(1_#Vu3{aAs#a=zlj456KAH9FIEaRTO%Qk7Jnf*6b z@m&G~q7#?%A6_k|FPui0!5GMl`3OPD8G@%zZ`1kt%<}9f^sj5@=F8K)#q!|E?ef9m zYWeW;HQrCk0Y-%js|)3S{qH}*g>t^!xV3{)jkxV%sJ9Uk-u_BSlIpRr>NMhRzovi2Ty=MiKl2(*Hg5fj&%BJAP_AEm-sDR*q(bBcfoUHE4}#d(zi{vGly%nUwsigf^*EEuhy z_Y{zECu_ukwm`X5Gc!f(PKW?Grs-7hnVll-93BZ-ZooE=kcL?#lzZqnLHX1G(!;Ak z1%HTu>x{3_tPc=WRY;tv*Hgpo?(`&?L-98*gG)`E6&vXNfF^5t!uUdGekz}ok+u11 zxylj<%M8r9g@O)h9`J%nqO+p%ku!L%4c7lcK66Yx=01`<{H1>7Sj}U82=744I8NJx zI?2c*&gP>&dKoByLuTSISP$9}1;OBO6WU`APm(!!d!(!bZqCRLY%A_vuA?I7?hR1@ zQ0QUXGGgXYLybz3k?H$tyUrqBgGH}=3L0V-El4&Zrs z2|B5;jo_!AhPtsvHWVCYEsrU`e%ticnDsqyOVB(tIP0fc;TiNfS4AY=58U`X3N7bj z41fkFvn{*dJW`P{;p`Dw+pjean3l5I46`$zs&=-54db2kry$Poq#1ZN zq757qG&1E72+uvl(^NpOKg*}x;tEZ>AKHFo69su^4g->b(MGg|3f+)4RpB$xpYG$) z{on;^n-Zi!W_GDN1m$UkWxcB6nc9*VeCq#Pi&KbZW!tJ+f6tcaEIVYX z`BlUn8^FcG{OyRBhHVHi>#rQAks?aDb?13ihIvo@&CBB`w?c|x(KA2Y)blKjjT~-5 z@U@JL*Yc*sm>sP=%ZwKT@O@@n1C37ZK9eo~;NN&PfxkwGiA=^j*2mB`lpI49I0Hwj zN?OkjabQIn;Gzg09q!aRP=>T?{1-A=Z;b@}^P6Nl4X95~g&D=!zM#>$hlg3;@lD8# zVST-q>^Ig^dTH3x1z)ctK=pySAP-mvjcUyD59XjL-<3U#?E8D_AQ%O~(f9%L8bmeN zz^?M@s&vyx;oxQ; zo0D>H@9|a}0Ga}#LXw7&qhI4_vzuKI4Q^BJeAhZnH(mF-y>~{{{K7SVJAChRXSh}N z{IGc6Jxs6CWH7X5bnsc5DK@Qc*(x|HPbc%M0GdzuFN)0HaBQ9c%?Kb|-x8HWLnfxwJrji5TTsJU)wfipYmt8krw2ycQqrrb!-goc+@+okQZR|#9B0vA> zh4Sdx-Ll4d%MGIJ&&{1JOBc_Sr>ujYLlHi=zFaO5!0+tob!NYxuua@9Qa3wve#V6NPF^q*0tcgvKr4tM&v$uon2(5Ir< z*Cms4_*!v~z88TLKCk05?+{WFgpBUwjL{(qtvyr&hXK$KJF^B-W!Rs=0-1*aR-JLD z0Pd?`xr0#+l@KLM*G-K9B*UJG7HDJ)jK7ZNC}TJFvh{ zeMUE272;?V&RU^d=n;^>ce?-Q$304#Tk}zIXrR#oV~y4eDkJ?No74rC7mkt8mHJwL zcbL%CK3)jmW1GlxruQd*gf2XnL>^HncVcRva5oE;B)mj+@l@eu_`n&~5z0y- z=;C06!3c%u&-BqVpRJcqKD}0M?VMuQ0|HRe4|Kgwus947S&OZq1oXi+v{ad+a_=Pf|M>A9zs5q9{HFTF5Ssfiu(EhP87cSBucUQQ?k}l%nSj8ww|EgX-g3v>NwBRBSd6qx@w&V~8?yYmiKxWx3L)bmW zHw~PcoHaM-#_#O^z%;;3ObN=PSEnCkCkV^~e7zW(r~%`iWsNZ!_o;7R?<&R!S!-^d0EF=95=Q*xC1g%;seu9+wS?iA>^RC8$qV4}pKq7#<=7&vY`QVu zGRN?@{dlWu;KxP9L4~O)hhKNBAKo<1MtZymh79{{@ABeX{;0fqG~%`)X_5Bb6RcJnm&;-t~Qv_5;$Ax@@I**|$$ zPYn_-d1&=KndZChyG8)Z|27=H3&y*5f0-2c@WNS?tWvI`;4jSmv^+zZ{iokwFBdV-MfQr;EOR!gogntotek1N9;Ow9@Z)+SLMM1uO`yPV-DHOmFuJIe?4(sdp zCU}t{RK;a^ei@-lWf27xLFE|NWffRP5Pp0&(!Jnu1RxbGg;pOb*eH+Lf8x%p&_!BA zusX&gNDUWINEKd@1S2d{FK2x=7vj>4?MJ@lF&H20ZdOVK3NkibrnnfW)0 zwJHen+@YVkcyEmNb%l2;6aU2uUwNS_jwM3lN<=7u4zpZR`xlt zd}>dN5dwbAJMMWM8nt_SiH9@Rvtsi^2(n(z;ZJxCdE*d1HK?2Y$Qk9d5*fSS#*^Pj z`$F2^_N9^1R+JY!xi>Dr5o^{p#0d9@_Nr^C!44jChY~BK@y378qtSD1->m(u@r-RG zKJ~fzteE-Ii>y>A$9vOIW`Oh8bH%MvH8LvC950d$7%uTj%1Sn}SeiL4lPh4V#KTk= zG}zA7Q82U;10KV-mGOv9S+ALX>aX-~JQNn$%we zgC6xDUw&LhCYImf7mQ~1Pq+2d`$bBR?9Y^uWjD}AV`{u)K)^A@NpkyYzrTl99Lv}E zChoHT>jBHoG~5a26uSbfVML#!Ztk%%ALsp8Bk+#pYh0TY9-s;93|7A_wbyX z(8rgMdzV&+d~@6thJH)HzZHV@E+UtoCeZEzo&Xvt0#AblW68)J77VgTJG(~4I0V^R zQG@M;|?( z%@uY8F3#@J-o?}BU7Q;%&*EoZ@oRPMzW=UkVVc*UZK4~vMh@@0<$14B;J3g1ZCuiY z>9ZFd=Ch8!`qi(3Q%mb}e|{YGl(3Gr$*UY10feQ}nU4?G8f&aW!>hfwEU&-q@SQx+ zX7f*`>%z3G2H!e*cz+VUWjY%!A2#Dd7q00w68OFu7`pG}WAlrbY5g@=KJS*<@R61p zGQR6DtxHi}WB@RqMi31E*7H>k+e2JiU-A0g@s0vRXTT8_4%v79gA2I-J=rZkzjnHu zCz}5jYx*}I+%3nu>;Ules9gH1UnBc49wTflGkf6dh}#*d#BXoWuO=gmZ+My@O!$0` zpnCHQxLdC-;RUdP+dH%PJz@u(J}mbUel~Wt**;)gmbaG5P4>2*;F|e#6M^E^HnWz) z^5-v~mK*no4KmdQa+F!&KC_W=i9|ASO{6Zi5!li#{KL2z>CQ7hJ~a`s<##lzM3^QE zBdfYBN@PS>@*Oktf-r<|D9mgrhaj50s)0!;CnE8?ilGYZR6fF#0%6>PfvJL!DEbto ztc2Ve9Na3Z{nMpZVcMA;l_X^>vT**X^oHyPAWpWyf*du8U888pdn-K5ZC@bZmV7oFgo@4-u9IVFc2N-0bxU{m`Ee&-Xk`H6x%h1g6$8z zRooPC71lM7X9k)a($7|Kylia+wz*C{(|Ek&Wo8&v5O^jp2ovz>C-qxk%hhj&Z7V$2 zQJXi$D$XiLE)6(L{`y|L9QMUQ-WZ@vvI+;PDnnTY?^XP52xym83@SpbnYj`UBF-uJH zv>&;n^r^rJ&GA4Q#b99V(!YcNVA2@J!f&z5H{4z>xq=kAExY~lCP2C3%yVgcL`D7n z>OyasG0F*=wu~o7s_hn>$ha7Fj-fS-Tl*XMxI9ER{knEO7}G|!lh?rYFE`>5ew?9@ zalpDzzsyKeK5P@bD($%pjQq)%mnw5Bj@DnEt<{2__P2VMztSxAG80Fop%~Ft6kuPV zaQb9z9821M(Z?#S4ivwa)`!45cr;w%vBNl^M@<4;iYMBK%MmYJv;{Q-L<=iJk2+3 zjsc|4*zcCMXV}^26#LfN&owl-pN{;O@n;`iHJ~B=ISqvtZ(zvm;sVanKYT&Hc#}{& zdJuK1lZYA+u*#QbOqiX$@GN&p-b>b#L@(a2g%F|M=sNLucW)be{c5&#s$#d*5(**}0WxJDOKoIe1xb z+qIp&w(Z-@^o!s&SlzZ0X7?~nOXqXnTZYE47ahKDMwyd+r3+hw#fyvsrjh=Q-z-C# ziG$_(u8U8@!F!ur1f^_otvq{*@nCDeEU|Wc7olUcxLWpz z!hdgvU}O(A5NZ%w=FgW~j|fP3AA`Xj9tAyO51`qq)KB}k91^5#ksSnjLxS?{?!>j* zSs{8pWvc}6Lr}@R&k%&1{bzK`EDjeOJVTcC61ft=2;mhW$60;_$06>W&MdoyoB_R@ zC3F^S4W zo{u*#^gwvDX;N2khc=pAv{u9e9|5*TRYyp6$pXsl6#Bb*^$aqE8{Apuu&gA1ia3x-)jnq^g zS3z|Rbkkyj&N0k+4N)sE0ze+4v?yy_SIU{TrZ-#(edcBo#kiX^aGLkPZFoYhYGhiM(S1`OI+~I><8v+QHE%ioLX%(Mq1s zTi_dq@8t>p)e38@2&T{;zOkNU^sMnsrM|BDhtnxqk0pDMh+-au_fVw0wJqUI1Mo58 zFzleD)8@{g+rIO72rM)8udBXBV0Q`7sJe)fzD|&p0fGM*o{$?^GJ@0e*Rt9$clIl@RjB6w;amng9~Lg79>a%@DQ$Kz?2ae5iU-53Mk9y`D+u{Eq7C?m$e zCD!=Q^G!X*YwwtC1Pd`grXykvfV9mV=r`aiCcEpfe^~GL&glf&Kxd{ z^Rfu8w&N}_3tS?k%&Km3_R7Ei2Fc&1o448kkWOO<=J2|!*w|1$`>w+@-9zQfJU+Mc zc{DfbVk}& z;r7?fcQQ?PHr;eBt!;b#`t{VW(XPE~Fn-8cB~#;vKk5H{>f7LV%WcZ`$^72i?w(t_ zH@Y-MybDLzwnGyne5ad#HvnWSU%29J+6L2i=FvFh&+CSh*S2fJwZZXhn%4d;efPb2 zTRP9CZ3=o`@W(Xb+UnV!zsk8Soe@{@d3XG{DX_J_Q$~kIPRFGk_d;iVR+)7uM|-Rr zB+~pv0<cX_1yXL^x*+Biu9YcGvyR%4^d9G2{_oBUoVHNME9p`qaeHH@$AxSd4y5o z2J0A0-ym+_LV6@0Ff(`&%gGQ(>~98*b5D3@B^2&`PG{lA80)o%+7wEfV&gP!xZbOf zAmeg51b7&W9y3?`JZ$2gbZfl$`jG-q5T%$Nc&17I6K*yWMN zh8hhYSkN=B`{3pN?^#C+Xhns%4NF^<35a22Y=inmQOT4k2`xW#Mp#a9E}yV<6ufn9 z2S;3Chb|u>#speD%~=h~M{a|NaBCe@><4(5j0~pb47UO-_0wpeaI7)FnQsN*s{DhC z?F`=Lm*$Dotvfx>hwz5utBRO2>_fg^BaIL~hnK`J1`ucg)wCekSl}bQZD)BxeszrJ2@g~PGh>OcFAqr@VS^2XAw5?r?J88k(Z~Gc29*@)Dx)#~nb}Wy*Z`Iz z%a$MIMKTngou0h|Lq%z?J>n;z+g9Eh9lVuXX z22+$cc!{eR0wfrR^bnS{vEruhgM0dl&p71w82UI%+wiV*NuM{rc!i=#FAiZg3CU~Q zS$-YT_MtHxVVaap4%?Ar^&n6EPFhY~A|xBd07tskhntIh;HQkJo59nuChpWgOwD~T zgB$$8TNiK*HkKR1jtJ5|j$bhxKupI5t1^Pu!>1^<&M14GT{WOZ<+T~^oMfYT9XS?( zujOWp2`y@R^Qfmw!u$cA^zhd5%D|}_}ra_tZ-nNh{=@Vnt(rbVkXe5Maa{yT)gE3)@fg>1O zavp>AGDahJo*Cn9w2cRxo=>i* zG+ksY++=P497fH347R&`Xcrby#wp|R7BK--^YoDV!mmPX?>Pb`Tg^IIv(?_=BJU-T`jO;QDPRfwjB6 z5&2tvV;>LXxB2j^@E3E~nSZDepjF<6KB;{8%%5;oPBK_H;P7*%Rb{IwwN2r3W;Y+h zS>6WUyu#85V4jw)z5l-F21i(ayj^GR;k}1ti=T(e+=~JL=H(0iIP>3TkS(Vjw{G2v zt9>&zw6fa!mz^8!VpWSE^0FM?d~cnshcoJWAarpvrS&yxzG*B={Cw8%v|XM3_gSM~ zJDbMfcN!Q>=dZmxS z8$AhL_mB=wz% zkH*i+0bBgBpr2&`yXE|urE=@;eFPoW^4m|>nepG)L8vI@=EK`%o23P#RRjt8%7nl{ zBi8=A&5%*_opIRRdPszK1d(NUeF3o;C3{Ij08!kZ^>)j)N*uGlDhjSYK33r)pRV~6 zv>pQt>Q1gBvqpfdc|@?O>&rQ-6(Arf$WDo%9_1Ec2Z;yi9mS5f4ii&n^%O)E$|%$I zks3pELqA|`q-#INxM^+?bbt*A%BGS2oj#%5A;MeMgdzn)g1}SA9uizlTDr!3%r9$> z5x$%)PM|!_jy^G3WEiSrQE&ynIy6yd;4)e(cFq)j($)WD_ELdV!IkeZ&xKb7^4a%V zm((b0D1Qj41_$dwQ)hG4CB~VhRsBAwK@g#{<;6Xp`Z}8}Jsk&Q#09=Cw;BMVV9nNp z3U@^NsElMSa|CnS4j~z3#c8g5NogMiaT*f5FbL`H?-CRQ&M4O^SO~Bqx1u^l92d?s z3PQRD0Qi6afd&*z%R+D!{do+TQTV+_=^r=_Gixpq2aBTKFA|3u9H-&z9z)rUs3EBKk-8Lm3}Pl=Q(j*jR413(n{+)H#b=ZCsPnz-50#!-xFzL=A_Ky24ILXFCcwcv2<5C|2My&f3XV#Gl{4(A_-h% z2yiqKx*V6~!q6v1fs~{fs^VG|v04wmYyQH!)JD$=mz8LUunP*!`uW~vIhl#)QAp)G zY03LAv}e-Adxhso<11hqyewW4T+6H0+q^1{v)(T>p5=d4_#_W>lpj2&n54GIioZ&= zN2^Dk1JhuR?(<#)35vb-G@ZNw?Y-uoI69*&9KW^JFD) z>dZO7#7myzC+#e2fPu!X;@nT|i#z}TKmbWZK~$o14*u=o>iz$+_hwC&CC7nY+`PH( zRhhLfU0uDP!S03#aKMo$(lkSjjrbs$WG1~x^RM(I)2n2r2bt+f(wNNy#UY0vIV1*P z1KsGY_C2$5-)`o;c~jr#aXssFB6|byFa=a(o_o%T#UsLFIqn`F9tr@gH`9>(c=RI~ zddDLeXWS?ra=xN`%*PhSas`78-qfJ5Znm|Ichtjjliuq+`b$j5CRtDCEQ z7hvvT{`W8#J3`tAj~@aDVLV6l_Lz%zI~#mEhsx~28CsF{8y_i~)MJym6K{kB6U5^? zOXJUS(#amodIzijlW6n}Q>JcboznnD;9;1nnHNVm=GS@H6K?u^-!KcvT*}UmnWLUpR>zK}u zrLInlb#Ushvt!7dc*I(+BxhJe;KxB`p2@7rur$k%@sr8+9V;;i|b*o$nmCt^T?UcWcA_`}d=MGV8+4_KAqU#*h6e8P{e%I1QxvdRZ>hc^se2 zcDgKgzNbON?6dmk>VL**-ZTHqBg0M#0n8`c%D7Eum~H1}oP2MVGvjAI*>6skKjZ1& zjGO*>&oJBfHz5EJuH#NYz?YRN^L};z?Z&_!tF%+t7J2mKVVU5Z`h^SEIG%46f*o=X z0%d+4A>Q14*<(fi#`UWh!9x(azE)=D#><&mR0LrXoj)|lH^&A>wpT+)OoU3J!pdHM zs+>J{vGm3lS=pTnqer6?(`CLjjk+OL-dWu(aX$QB*@swqN}pWAs&)?sP&M{kZI%QL z6;)SdO{3Z~1eSaWY#}5O@4*bP63pBoaa6ohH4;FDg}S*`ucc(sRJ<%cN;S4Vtv`ZD(bY@vNJ z!iv_!EJyTBbAk+Qq9#F<7cCGZE0%&>Wtzl0{S%s`B`gF0qtFAx2m#a#7{MT*M_3KZ z%rlS6?1WK2gsfqRkus5^)v$XIM>K*f>gdX|xDSLz48m*^Jk8%@3H`JxB0;Eje*B~zcaMg1ocv|M9-sfse>9A zGOFZxaD?S=>~0)^M^*dBX}=DJI=fxR3IdewPMJB}Ekh4)mG4jg%kpqlDj-YQR54-j@?baP@J0T>0Q&f{1lZ>b$bySbWA$z$a+a7SJmxlG|me9J65 zX~mbC3)Bd~QSI)&`yaM4#0jp_D&m_qiu%|e9q+zFlkyxI8r*}iC(p{~8xG^lyPcmD z@fQdeHjx~2j*H4rSK7inC37>cz`adLe1#FoSQ^i;7@NYgA?@2dOLJ5sg4N$RUe?7c znb!~ixJpmrYMX?3_9Nniy$q8_2O)c&YaV0(lBrz;X8%zOCj=-YP>aX;tViYGKVuHE zJ{q%gS}}jn8TFwzg9An{%;umZ+^we>ns4pb)=Mu14%#3Hp$r|@{%*fN?)wqXK2K!x z;Loih_Hl8||G=3a4tRsw5oR0sPRL+v1b+1apdsQaT`=k9VR@_*R~<|l12EzsUk4AC ziLL=tu3$x>TumG8!Z*uPHWcLAA3f!+#cF&TCVr&FRd$(|_PBO9h7;i_3^X+)9=Ppp zvUQDmF&_5R0s^P|7@}2^N^^<(2n9ybJZixhYZTXZk{Ng2bLD>rmHq?Z9x#_3Q8tfq z-R1kTwT*FazJoms3|gO!oh`<@M|ZB5#WM?K7@Iq7<}KTDI}0M^r*Iz%!YAgGQFo-auZfQC(M&~ z%i!v;d*5aH(pmS6D_rwF>0%N&;c2}uU%p&F3WO!o=0q)Xd=iJ5#|bcB`D(t+)!-%` zzY3mVS!T=OYW-Vpy>;9UnbtTm&05#btpJ8;SWaB&5>BR(z)gWc7G5UPc;YqVXIQ4o z_bvA%l@0m}tpJjZ*blL$>sF#9=@ccD?vRuCg zh*wEpatwU@V5z+S-tU!NR!a6+;+~jh<&>4z=j=b6WsiRcV??tE;hg)&Suxz*>6J%M zAIA#DEXVmNl-gR~EKeRjDvK8`L)h23A5yfepsX^&YWw^Qs~9tvVd&1WcM!q~700o~ ztE`0d%kw?w{|)#V_9V1k|G%W%804<+42}C zR*wU(3QS0+h622FFq6XQ2BRU92IegXE>=WkkoZ$0Lt6*hPoRa#2L>Cp+hOWHOn$Dq zg#bW13gaG2M|)WZ^Mj$+XrC+e?k`n!{&1KRRp=LCv7UZ5I=g_O$g^c)W{y>Ewt0}Y z2QJlIIHc`BF8L~Op?u7{YMDgaLr=tBTKc4x?`8g-t3%L3nW=O<>ldE_kgH(jKt`Is zz_AFHlfmV@>pUF7C)!m%uQ&oRfYk4mh6K%m|3N$0vcAM!CAC=Z_LqH`2L8Z!z_yR}53CFA*WL>?Z6sGP1Zeb-{TasVb9);w z=KH(l`q*I^N1%6Z{b_lNF?nxkjl3Ci`_PEyqfi*Z*CCu!utxM%)sy>#YbT?R>hTc! zid`v%Ac`h+e90Kfs3`~#H?iNDHj3e9{p^SKf9uHI@1!%i5sRXE#+13at^X1OgewiFcGmd#{6FzAKjh+@`7A3Rzmh5hBm+M!ql!c2I z%1-Bg+1N(=mpQQur+??s{SaVWzHkvZXyzeg7-nvHwy{}eInifo3JomAyb7agP1&#A z5&%NVv*&AN744w&m#!nsK*JA%y!MS?`1xLW1mFxpdJ$(iHKw}9{G!lS;qBVm^D@() z!(d@Gw(ZF{zfAqw3NMFynah4EhGWnW;{D|6W`;Er#-!~)V$htnl9_Rv7RsG?V(>Yb zxtffa@eT7stGc?3zLw=BsEnJ=IELw`fFK!?W*KFy6eLK1>V#<;nIVbKlP=+#mwWbw z*@S0&-;I}d{VbY!~Cotm{&^V%%oh2>b>=nZ|Oe36Mg7>_2%=P{y~d zEpy_=u!Q5YWs&*!xIX)L_Sr9E#7(2KFMOF3ep3jLeeq;`^9};Wi63V=%jtC*j`XvR zy3@i`|rFmV_# zI=fhA*~@=~Tz2>f?Sb(#?DaoahG))~(J59gAuzN`+>x2a+W*$}df7u2d5^6ISkfRK z7ux_-TMb6tu@=k#Og2JEnLCHfPzP8r{AG+)6Fi&;V)dW+EKK)=a$L>JD?Zfo!LpXI<%{RIHA&G<7bj7d|l@Nq* zLNdgCs7cQNH$TUyN8?F=NilMXamngK#E@{@o6H>G{yO~x<`3j(iLB?Q(O?K8rO3%iuN-BNQ5qn$&GgL>C~ ztcHm~0P(9_BN%Y{ru}k=eitkCAVHfOp&>zlVG2^z$cb?zzUik5o5m3m=@hJlAP4wy zS;4Ox>eD6Aq%B-@I2*5b=Non8-c0l#qE9JD9O0p(Tu< zGrvJQdt|8fcHev00kFIgsrCcQqOg!#^cCkpXR|1QtNiSvk3In--D1W5h%GO@o%M2v zJ&XeLAC~f&)|~1TmL8yO(_!VlL%iWJ<|_o{?uqYqC?{i-Ud(vw@Qv7JC7q-E@X{8* z{yq#ilDHmo*BAzGyOd*NgKrjf>mY=9%6PqUaR~ceuQ8VP>K0ta`N|r{<#J5m^aR`7 zm~&P()({Hpvi)qO9Fgbjm9u5#-UG%3Mm!g>-^2J`Us-2vEWlhY*N(0-1`*CP*7o_n zAApN{&mWh$h52&f+#=t!{W!G;4vF&4lr1y}uF{YbV;&ROF4G+M>yd>ah#75_TOWUf z&|s_^6jn%y+05?ovQURZ8E>cYdRTW-DyGq8Ar7VT%AvsdF8wJgz4(2 zjN#q8cY`oEtv;FFI_qToHKLdAd3Uu{SP~1?Aq~c5cqIN6f5d}uWr|NLV-sxFOXn$EaQ=et+pQka=l?Up>FVz-bs*-Cz|1Mr;y^znaOfy>Tswa9NZC zR=$^>?QlHch4LK2LP6{rDugnEuxe!+gMTBgl(5q49`Mz5Y=;kw5N)ops^6L_XI{IC z!J^r+#wzeIVI0zq+NwkqL>Q|kgFpPWb!MA;3g2!1g>bpe)hJ2LvZqql!g<1v@zQdG5<9-te0Mq~&qHTJ_ z?+sz}5jQ?PTPEff%G5jpc`VcmTZX7jTepW{{waei-@$Om94gdM0Dym}!{c{6H-qu=KyLSuKUFwU0uIZV6dHap?!)OrjC+yj<*V zlp8eD5PO3U;T$^bJ)Y#-*PfbWcS5(EWp#9n(F{w2L=`fr zj9&Yr5hE_Ymaon;FwL|>2w5Bpj7bX_TOhbAP_V5mXW)di*1P6ros3Sn9;S=?pjM{y z0=^LHZU)Jg>TvlDez=&x|q8oNPx!W zC5mKk7}UeG%%S3zZpN6RZ~1+o&$##hpo0oN+hIcR7jqw5&sbUC+jw4Dd+TKqVfWai z0t6Ck@t$wM&ejfU{Mad>Z|?Qb5@nVAh>sSEI(%Cw0w~sU{x%w79lkqrXaLNi9XHmV zW?WU{dE02Yt-C1KM~xpr%sPzu9&_3j`}Ehhm&(Pf3uO}l#M07g+1%P?d)++D`I+*; zFYYiF`tU!C2)>8Q3iNJ>{uoF0w565D@^Dva*1O^UIo;B94NwanA6(6=jV8_T6Tj?fQ{0FMtGLPN{%?&jKR`Rvvw z)Sr18;mNH#x68`>e~)kY7is2bte5ELw^{&TJ2=2)8gk{Z**0~u zWE2gYAJeaMez3e^;$Xm4!t1M3$*9Wos-E6lNzYU%1dzEq$&h9~8Q1rwbFz^URP9~( zGV1!7pUi#2&NR*RKD(0M^fR8!)x(DmzfjKjb$|cY3Z^)-ZMP!%`l(EXZD%X;+RKXhFgvxK=D7#8OJg< z;To@5*3OAN(_@6>g&PKaIhlbLSQyVqj`vfG4NVmgn~$ zmWON;IO52?%a^XiYQz|6T<%_4T4(+!5Ikqu6L_X&%)TxFU*x4h>YpE z>tzpW1rjxwBbhc=#yyrzW@=c*9@S#?9*<<4AU+OU8FqzUf{*bfQ=qk@HgVysg4lJr zerOuT(p5y~5J)0dPWNG?c3E{9f?4TN?j!C;sF}Bz4<#&zA#jD~@l8V=R{3FoRe3&u zS#{Z`uihtuiZTk}Xdc2sm>{Fed=)s^#{c$S5A;ciQl@gTE1_tCKf&rLna00JM z`4Bo-5BweLGSz+5t%Jgj8}*}H{s~G#T^g8Q;@3NmP8v0iwFQr%nhvE~_cGEv$rf!A%#UvCFYeht$Wk?x|Nm;C!kP#6JFEIb25D z6@4}DWb6P6B}O*P45@zw;#Z*65h7IY%o9 z@EaFGQz>>=55chvn%fXeXDZXkXvzacokc#(X%(z+$3Gl?$Me3776HC%MAGuOHKEOY zgubed8#~pyiz7F{h)Lw7s|7> zm0;p~Q)-VemZ*;my$F+OjlJOZb$Yt>SK}mXJ-D0-10yr+(VE_M(NYA(m=H%I9()B; zSsw#Gc4hmsa)KNIrnfmFw*IygX#=C+)v#zV@(Osq^W@5Xv?pbc__l%VTvHHcb?|GB zKjCx5cbXiWj-u?OvdG78GMYlNi+Sg=ruKnQ!5{cWed*6S)0;+odc3IC*F8PN{^}MT z=PCsu)*}9`4+#{UO0C0=GEQauL*FOT86J5Pmuf~CEVG&@hIq52mca5we8z-%*ap5k zj0~&d2I+kp!8ndL(g4JZ9)Lgdq&Hm5a*+=&05UgfGiY=Bz4I_Z^p6)>3bq09XouWt zV3P!%A~HXCRN;hWv1HZHLYPCe4f&ehy4uct#*zXp$JP#-lWWhHxj%_|xxK})CG)?( zxm+eG*EB|Hr$(kj`$eJKfk(|UzBT%%QP*LF0-g$>-|jA2vXtWpfwISnD##dNfVP?Q zHZh1h$#=|?OZIk+-{xrBt+LWVqlxg1^(QRUwaVE`iwK+fHth_d@ibFb?>=Tlo$>D9 z&<-p0Sow#EFQc8X3E(%g$F@060}TE~for#mKmnEhHRkZixykZ$?Mb<`jy#+vON_v=(*{M0C+u=GG5XT!l;u+|SLxW{y{}Pph!; zWHP*;=7cAMF5{?yr)0c@D}(Qq0)!@voMdJ2R899Itjls`Ub*TkmVHL)J%k!3PX^Vzu8*S4{a8Rk7T0ra;_SuVqx&&@RYH^a>@<0c&a zn$GZy)AaZGH2-FPwzKce{&O--#y<(W3EwovQwY$s@$pq@PlNZ$?-d5FUOWdg!74Ya z`9}wb<_f;y#A__*+0t|NEF#ci58x7e8v8JCU6|SV zh4baJhtFB<-7ROC>s^KJY$E_*U***7g|fk3$ri+w1Oy};L@GAi6x3je!=-r2AgSCS{(O^B|@rS~a>i%+-RiWJ$9eA*>jMc~^a0 z^<)WuR|JE=h4?$l941J4j86#}p zm{_=2CSkDKwBG5DL8aD(N1=tFfj;31yNra+_6?(8wlRLO@(B(kTm^$Iu!+~{#O$+5GL##gb*^@jDTvsp0={v4u9&mJ~eeLd}+oe4-Rjz#JZO#}! zEbEUyDWCtt-^5D(&?VZIEj%*xKl*q7x;(!75K|cl=1BX0|McVXbaSVC|DErY?=HZ= z*jJ#Nu>BqTnbi~-p}jATqcZ%nzb(Tncgy)RS22!;QM4g63@{kBgT?^s^VsNMe1Q{2 z3HVpQA!ALG*iMdR{?t&gy*yRHu@&5>_<)gbxnCx*0T}T_yG0uS(Q#VEMT4<#IIFE{ zQ^bO{d2xwzozHX$+9e7EZ0^CVMiDJ0f#8_F9T4qzf%6zemC>i{#2}o@KIFTPk)qzo z(9%V`dLKmR774tYhD*qlHp*7ZYB|9JWt2g7#XkF0;6$pq5+eNg;NePxG@+KK`U9=bFaaOS<1SPPb9LY0;R>TJc zWgtJ=%rPXgGz1xS5~n5{%v0jPejV+Aw_$Z$2t$ub_opz8s!&hHuKgqOL9j~&4j7jT z9b$`s39Sreit!m`6qpxTbGLjTHr{Ra9E&1j$ax(#{~Z>*o;`Y4mY+UkKmSskKr%hW z`~>K|jTO}T*O-G~Zqbk$ADPGg4H~~3N4vo_gZ-@evuE69PuX_S2|$1W{%6>#)@A$K zqh(g@`5v@bl^>mBp_RS+V~pp?F*M&`;Fq4UzaPQr^EHHO2oy${L#cQ9(rV9BgFn64~_2}WlM`eMddS&8cYX;wF zwHti9D2$YMe;DY0DSsFuzuhh; zN^9BF1c(6@Blt!Ao6Jf2W;_|epa1;l!4SseMFbfTpJlq$Fp%k#k9 z-gH?;^OpcKFDHY9)4XT8^fNz=#-*V<87+krxqn|+)?2tb)A6L!|^tKj>=v~F&#Xl{`>Elt9+{I_r4{z4m`7XPH5I5Dm5 zlQ{AIZCtYq;@|ozWJ%^f>z?qNuuUuDf9KAfXgl8%Ud9s_!V@pT|F-2zINpVQn$tgt zMZ>eK>33S53ClR*(Xyqm=VTqeEKmJSpYZekb>sOoc(43kVIVP}h2z8B!*cV=Rki{! z?{0S>d{B{uE5CR9URhwimVm!-aUoW;7Z%Ty2YmcjHnz&^XBSv$-(baJ8)gDxa|+AA zFz|b*NDi}t9?Ukx(#Fc8(w<;1GOK}X3TJG=NMg!NVztkaM=cBoN*KolVd4rboxL(m z5R|d6Sdu*$J&5PH8=vto3^7Y(++*y5sjK3yERQo!l@9ai1Pm-pymPDsxn+vGv@C?< z0jt{wF!Wkfm#B4IwqdA^rSZN48AYw48wWwaAxwXleUJwT7>>9fu{RVwPZ$vLfU)f( z6zMas4Z{Q#joS^gO2nqw7Uda5h-w|3qu4MCW48js&U}RcqsPkcAw;C=-$C3{w&N)X ze8@J){J82p1dgaM-wM=BfjQ!LgS@TdAuBp0+B1j=n;m_!q&Zw z)Mki%?}xO#tBo3?Lh|qhMn-{?n34hWE(1hCfB}Bv7p8(E8smfmnC&(;5X5B9S$bFbqJB3tjjA9;ku!{jBIE(g+mc8#|#eex{|4`P?o-3DG=^tlX#Lxf3 z-<2J<-<(Ha*Fn|yF5j5jcOI7ex9*kiUcN+I4znT&J=GsA>!02)e|h_H`Lp*fmjCX5 z{8wf2|NU|4J$?jEuw=f!Tv{+nL(89**6OYD#sbG~vRb-8|2jHie>8aC*?U5t#cs#h zw}ScdJo7G{t=hdnbVa`(5;wHfDENtX5<%2U<8XbLK*t@!JDj)z+tKG0Rv9KLL+BOB zz?%L( z;zTrau^eIFg2D?WV%e_7^Gy$)g%d^Q$2leD8w%syei?luQdAhGGtU?K@OG>d0?P^PiZfss&k--a`UprPGxBHrr}j<= zD=BY>I2x3!b|e5BaGd{ZCRIZ~cGbGq%QA^UvgMb8ICj;dfidnf$F1l zptZ%8FJkQ@KxO!KnZMnVvPUI%P|F|k+rhZrX5Q04X4zqmLMzF+d*ku5a&wN=^)u(n z1mCie$$8|s`(+v0^oTwCyByDFzMIVXs|d-v{SgfFAvE4lg`RH{T4l%T^vh<`Zuj~X5b%4-dugwZRc|Aek zaP9T$*dAC2!-ES5P-plqEU#>pxii=SVO#Ce+EVFma;nV&TG)KMwas!y%^z%iY_IP{ zU7TZkj86r@ZlRN(>obm#jIc$3lMATR_TE~#$d*8j7EU1~b`E^-@R1Gk(mKDDzf;Z? z``ixTfYimnWKd{0FDBdpM)Xg{%p>SdW8P)FOylal%&7b6GtB@@+=S)IuXzU%)X29P z&$Kd!3D>ZkNHSitj2V`7QOKYXIT_23KKdwDy3JE&N#eu!5=O7T{(6)%(`7#HjZZ)C z#?SZ6|2KWNJk~db0L}WH%qz>1<#OADb(`ZjFTU^`vCdNs}!6;_7lbJoMV{p#b7KaMQLReoH;WAG!~>{kgZ?+LT{p75J6^fOLg z&9H=V($DwPU}bz^Ww>R`c1|Hc6JE1?>7RZHBmMJk+q>;WC;W_`;jiwmFz{s#?sDqJu6S?-F2rh+Ea^p-`E-VR$v<1Vd1n0*FQlK$&C|^j~2lQgx9bts63nZeuv}Uhz@!v zuS7Cs9Z=TQZUKdLH5H~h_LzgSKFs$x8V*zJm2b1sb4VGw`!J=f_GsX+4e=WW@5B$9 z2}9$o-lO{O3Y5p}9dIhc=r{~L-`WW@0`?IAIDfVg7K}sO$=G{>!g!auvQOM*8dWm@ z8v?ZqAR7YE)oaBoGAv;`!2D>xSe2B*CY_9vhR^EUL^^=EGVUtU8119bM{SVNK^=1r z3!-1f0yw0mjchgMIMV~zlLKPkuwjFX1=5-iFok2k^)v%vsYTEuZ7@FEU7@yrMCw7G zFn;tu>dpgj2at(xALK?&VQwjV3IL2#(+tw8!Qy2b0MAm8Iv6dP;34N}0Wn6};3k@y zpEh}p&?iS&U0rzwy~WtsUVc)po|`MzFP$&@&mNQ^RxJPUzx~p;2A4|rCgZ0TFziu{Gp6^5i!*cXj4@NzNV zsiD4BJQ^Y12XX2%zr+nDl~5VlXj5R@2kO=WyWOCDXxhL(8Q>Fb7k$O}`wR^l&;+PIa~${RpT;r{cTx)`!sF&6&LRmk z;u9e((bI?g_8+1JkTihf%_A@s0_gM?zvHx#H1-(UPM$R%tNE4#2G}|&@b%P%QRkXS z=lsbPWhMU*!db<-7$RKjL5oLywQ4VY78hgC%H(*8J1Xne+2=~fDNvy8EI*egPN*g3 zk(YsR>R>!lL>UwUYG;CJm3LOOz1vGFD!~EvLWti3K^g$uVGdqiUMgG6*J?jtY%IE; z8Zgc`lL$JeV7ObT;wvg#f}Y;oV4Ljv5*kS!W6D1Ib;cI3uzpfzoL|{8cfj_q)h;Jd zaWw4r-g&1iGmf?q*bO15TU$ryz%@R1o-r}T3O}V}Tp+V!?87hd{oBM2Ko6T8!)W+0 zk;FW)4U85a-UBpk%2W$J<`TkYPN3PvegJdu#ufq+wDbHH^*v4y9F0+SB!Qrrtq0Fm zN*C+BXWsfwd4%D=Cm8Qj+e&0zoLyv$50{R(Y>gspokA!vQa-!?8FN2Y{;>tH0IYT9 zoVVV*3GOD#{ikcp5ojnJaS{M35dEP8P9xaHQ1B&e4%`jn=`T*hpdnsD_d6#5u#Hj( zkZRz`u)Dw7!FJL)$YT&PXmfHjj)T~DH34K^-5Ma{T?aPP9AP=og`p~W=9Otr=H+`+ z2q5FK*gAXEHCMi|;O)KMMIb&iR)I&xyg&gJ= zlN;s9yiY6ZZ^|!)0G2Uv^i5%_@sMizS^s8Q%P-^k`RAVp!P5-;HqT8Vz-j&D%V3$m zNbWbpH4_!pje zXTLc4-h`3QC-XI}ZE;#VpNyL@yxTv%%%u>(^1O1dFz`(=FvW_+E>`ko%(s#JUp{{p zHA5Ib$dL(%k~5q?++k&6jB)7x#zVM)H(^9(Ae_cw5LWhF36?BUU6GX!R3tqEc~>F{ zLT_Rp6-F52q0Ta@&75ZpnQ?^HK^q34#cIbm-PIloty-Btn4>)yr=xwCS^B$brxJO@ zFl8_n?w^+Wl|NH~RR&8HdK_5eIeN;|Wx%X`4KB}8kh^j)cK?Hl& zea}6n%$=@|AC9v6#H#+$SyV~MlN4HRg-}G2V7VzLg^&E<+W6?h0HUSQ;>>7|c9Jhp za8TNFAd7D(jC~tIRmROTp}hwaL%qX(f~%OMLuwEVd0jdLzv2~qf;Eu~hAX2Z!wb^L z-*7TB$hh7>it!^lFx?uUpNxJ_p#cosh^vw^+$6NEZD;#|D$+-2oVdyx#uf2m);EL| z<`?ZuV3glJ5YC3c#T+XSVpYJYjD^A`OIDej@CiSkbk3_0$4u-y;p;E?!jK5lmEEeg zOuwPPVHd*k3xZ2Q1?(|!nEzoC#&{p6k7*-ei1?Eb@gvk}8isn~-kq}a(Z4U-Wk ztE}YxpsWMr5epe>tj@L8w#%nK`Z2;E1T?f^XX1dd#~I|aS2=#OSKdE+t-N*VY?<15 zTwcF4U*7wJvGR~KcUg_R{^t4e&bx1w<<-q{<@Kv>1?W^h>@KZ`{0DHda^4N33X%v$d&*+Wk4y z_}inbtamnGd^gMd*j%~eIeo19_h9@L6e|P;6z`1d4z@Scv_W%hmvVGF7M$_Q&F_}q zvVBgJS$nb+cpGId?H^%Cm%AE9YOD43_!jZ4aGTw=YgajD_nLoyu88pZifB* zPs`&+9N+tNwX7_!l=pw|J#45UxTg#)zWI+41}|`8zz$jmyKH59`}e+sR`va|@|Z2$ zoZNG9fpV>CALK!qN3j1gyWdFxfD=gy0b)=x_+rxWLpGSCnvEJCO+37tHeEBWOpQ)q zfDE3_xW;j?dv`B>!t%YDJ`yy3j3<*M++==)CsXK&0UEONIK1oEuZIeJmdm^{53R~y zyLK%s-V0h-$$U1;<+EX~kY}0mZdg7yiuW6TG#~4k!j#iih?|*anM`9^?I3)WAw2Px zafM_0U&SdP(TT^z^Vh-2vRY0FZnrGhHt90F`EGe-{55u%ZII#Sds_KZpmh?S>6&Fd zEj(d+Kbc=M%>E@F6Nb0KDv&Q1Fi8Q1hD>z8?${-iT*3IQ_S$vCgx zUt!=R2DVXSUwXF89D0?Nk0p)+oG9}c1#%_w0>`i&u-ZMve&Y_p({Zeb4>NYBU^o`$ zXIV{UbswV0J=Np0sF-6!a19IOS}WE7UWX%##@JRc0E9q$zlQp9FV0!!yks;AJsyhA z4PnG_SP&f0c`yr%X9!U(T?f$*(Ha))A=Tv7Bwmd>1T2QWJ^=#GBF2f#uf$-B^d^Xv zHwkNp3JJonl`mwLqetdo1Ohbn!?GHGBw;VHO5Vn4VH?4`qKvGp^&p~phru;sAsR!W zFwCdhYXw@RiYbk9*{ap)?H$T2|-EQHV;%t}F8%VR*z!yQdR$VfcFpU)q}( zO`KRMZB~0UTm|<8;|q~&nSkxqgs`|DD|eiEkNWADWkB<5gm#nY4dDVp2e$$6K?`O} z;RX9U*w;VHHVuT{F#AxO)Z6)=xd=5}Y7T)4GvK$AGFr|!Qql54j4R~Pg`dI*5M#U5 zMgZ?VQ&0c%9&MqQZOs*T;6&cddAou#U96D`QabDQMNu>E}wpWt8`)VG_LuxPal-~_x{gv!0O+h{qgq@ zMjVy9pMF%{`Qe|GAN~2?mgSwp^6{-(<=ykcf~e3hZbSZ`lX*wx6a`frK4ulhMCTW86X7EQRk;M&jF-UW60fS_sEEFEpIMkrnXfeCV9z z%KjKkyyH`?dxe>G4iknR;+(PTcyN9N8Xz$I2yU5A#-PQ6UKFS!4BUzrwSL?J5DYzO z>b3_;PgsGy&9lWC5 zg$#*2_z~yCRaKuM812ua$f)hWo$MGl3Whb%$5T@2v$w&?rq z0~X1#y5HTTMkGXYYz$$lb^w-OeD}y>k9o6C+0lVQBTKCZ1X^_K-N&n}z_ay>Zx}jK zW!UX* zh&c>_ncs*pz7bQyQwaUm!6O24z7hTY3fs|`Z@{z1$!;Q8?!f#{qP;cADIspR+1|uH z4an;s4zpU%cX@TYJX=9qP3^KnPBX*y$L&WL1AOoxG)9h?YbN;?gwb>~)yDab4Dax5 zU=desiY=ro6Chr#v1j)mmyvt7q1i8jjJ%-q>> z_wFO4|7)lL?v`0p*j4F21JgeWanadw_cY%G2#+p=%t(uU;Y?#4n3O42j1BA3FZ&1* zT-BLF#d?Hm3<1D6eOmo@jSi_~U5P#BW*A6ShBZzHbtJ_XuBul{c)C}TG3d(GKtKQ$ z$vYRsEZI0nfy*^`m#C9?4N%UrGI0{Yjt&0IB*OF?O!1aIC|RjE|>ORm5BB^{@64meAphiE`}vVeR4 zdl(ZOQ@x(=SQz7zfrkMOq?xU_oQ z$f}ZQ+Yo#s7}ujv;Ene{Bq$)Ad)rk_&N(jUl$clehI%*5`AOpbg{#j4Py_E8H<;l- zVx2clpU$?^s(8Z9u*^TdU&asPZ`|!gs`S2awpm`aDNX;vua+&|j}ws|?xpsIW<6>I z{cUTV>C)Bs`9?pfpY-?^xX<4-;w2$_Qh_UyE>mhHza0W51zdIBw~srot5&O!Y<+dP z{OBM4s=WL58)(YxmDPK9IBj9N>~bX7vnAAwF~B!@=6snu>k)~w<;Nd?$ksVlCh1#; zFxLApQ>*L+-rjpkd%FPR@nf3>+u)k0VCC;#7=0XuDf#1n^8NBxE8X(J&;Aju6715D z_R;g5vW4--y$4UQIq<{s`ofL!q<4oEzRmK}pMPE^7tYcEd*zPhUz{yx3oDoRAC?Q< zf5iCbN?DjaS03+AmraZV?#m#_ozdStvEUHKr!_Lkcy&w7VW^$UWQMajLGu9P!BE-) zUWei{n*fA|aX&R$7=osDE|70^oYS3bu;3eC^nnVS-`Xd9z!{ZR2|<8qWoFG$SULp( zls=qsg&T>O18sMC(_?`m0UD|dhS;crv8={1k4WJ7VLrphKBd4&Z4sZHdgwScJ{ceT z6IR2yN5P^b5zlIe0Dx6|)$~Wfb?oUkp84SdZO)%Q1uW;=T8$~@U2!MPVV{+SPQ#Rn z2|S@hTMG&ZEi;n`2`#ThwLCog7jOY@T@@G%=4hV{BX-OgKIz<^6~a0MMhY71iai0Q zXD$sv3c!#<#5Y5+kmJR+vb_o6$J`YpQ3mR*k<1=*C0WMvD#lEIix*4)06+jqL_t)y z_Jja#|d`27N zs$&Sj71;LBM0>u1U5u!Uf^3Y9Q+Kx+m9sGCi#+EcVy?C!>-Rao#g!!cPX)aNWs! z#&e=dn*d1|WSDpTv<{y}025B;=YX<~+5s@W>i?&?H{Rgm%S>W=ugv4LxF_>4j(*xd z@M=1>3bd^tv-eG%#DT&T>z&NuX=yF5OtnWD>MXNqy=NWr-Eg%f)SOsH!l=LLbzfE2 zh;YhJ3ISwr6HYT)mLYNF%Ku5`KjY-x^sB3@vE?I~`6kS-dlttD%ez;))9{!$$~bvH zEpEcHzct5-?}>|ylW-)ML&`oV$I1L`0|jQbv+bC|0@Ekngz2;6>LmQkr+K%piwDct zZ2M-MSI@67AOAu2g6>gkL~tyuuEXTWAloV8TWrV2@lqg|L$tH&a*fV&A>1^#cJwpZRnc z+^YWX>T0Y4!uTmT@Fal#1V^R11%bVzay90`J_K-yCIjWJtDu&<&M!Pr{yJwm-{kz0 z{@$DZCopF4u``}Rk%Uq2^_wb=BIIKeMxeuv zjy>#jtfL7z#UjowO#l6lKQD{(7s5WpE@zvsZyc1BwR;#rdycls5yt{9l@%C>D_0iT zf`EE7>0e{a-+Az;Y_O_`S_{GhPt-vr`GS_v7t0fvfJ;|iEBBTjl|TK{KPnxpsGqrU zrF5UHl^!a}t*xJx$#YN2)QvZ=lzzS3Wq^;foj~~&ySd90%oH}!L#yTh*zQzTvnLEJ z4*Hs{Ak!%BKwY@l_9FfVacbK;ptm)nT}wl zdDkz(i5EQ%koZJ+Fm*~C2F^TX{#}7)+6e)`SO@@Q;|XM}M1MU_P#=UJ0s!g|jQSu? z>ti1N#i6IyvQAFS;=~!v`bAWrT4oxG{9csa+)(ki z3AuWt@z}^7W!A#ITL5Hc-PbMy?OjGwO@Y`l5TL0g{X)a3NA%?uEB`}i$#~q~6Bh99 zKDf)Cb&S_x)qnJGlPxQ5kwJJiHO>Oz6twRsC!ox+0)LrB!KbW%Z!#RIJ$-U{nN@y- zu?h#;)7onp4y}L|eRzoZb%#~-4*UMC@+kA?DkpY!&;av95;1kiUjHK|VTXMu1Oru@ zDz>p{QwKGF$Csy%Jj4!{8W;-;i)`-i+ylmHxt$kxC(e zj7>V@czqcImhoI2*GOTygl}4((%C2zmqN*ar4af%6rDmwn_oO$#Bb+^|9W<@@}5qo9$#; zF9jc8<}yFq*|bdoK&CNH!cV`iyW3|J0{kY%^Vj9|D*WZez&I+vXXYj_+&5Mh&?0*N z6l=k#G!8)+oL@j45`t)G1e+wNPs*R~b+8uBeR`UG{unUwcs3|FjtpcUFwEu>=LV~a zI!^zy-;Y9^?6OMUgTUH@5IMl={{ch{WDv0!Hze;v$VlW#>`8p;BrS&^rh<8v@Q!gt z0P!UrWwBxpE>x}MGL?kAe0Zo7*Cc~?#=AgqM`RM`h4XCu5CE7u{`m>L@JhZK?)VNt zf+`9$_Bb@zXW- z84t0TF<&OwO7m#L@ibI+)>zHQ=EULLOxfh<%`R5^TdfIJ`nqi0SpgOd6f2Oe>0X&< zmG0@|C*|zeWhnY~x&3&%oLQVf7_eO)t)mgp`>=ev#PNZAyT?{HV2&2bm1``DFpei+ z3`Wn)mZ>Y}%6lWfU(Q{>QD#5*u$;fMP&S?`^y4I_&FS*tqx)rMc)PrHVXoYm-7AZ$ zcgq}msn1MZE2|hOyZz`6+9q@5!p--~!-H{b4|K}(Y`>=PDAE$I_Q}em$%xuk zsa0U2SKw=h<=pvM=v7qZ5pc^?_t@UmWj@_QRi@9l99kGhc(x03uTem- z1ilV2*1FGregzbMm(&7VWtIH^wSTwE*ft7#)x-#4GGoa(-1)!anZ5(|b`jW3py}n7 zw&#q!1?;yR@?G3TwO(9@&{Uk#j{9f_jUW{6ph?ih`0hU6Wlai9FusS`24*`DgpgO^ zyXpOmU?&5cH)_jqo-0%T0SljOGvhllfpGcvzyDpf^37rk?6cTXc8EYj4I*bm-6x+v ziZLK=6xex!jN5$n&?MudQ=UBIcv3WzmY$<&hE&Oug#+J|_btgXOdP{O@9v&@?d_;-6*o3CX!?QfTXWG-^W&FHn+d4T=1-J zESU1Fv)n#=H=SYTFHZAr``oy3qujc6D~OOROQy^BZ+cHAvnd2HfAjP%Q>$S}w;<@6 zW%OBR**tntBaD{A`nodSZ0CshH9w|R)59$hJ~y300sDdF(wTRbCFA*S-!pFFqY1}V zc-z)+gQZvF?<_H_SD}a#L4mkXnr=<)x@Mpk7&ei$GFP5d#$5b-!QqmHJVQ7qJ znVvAfCzA@X*$%uA8+;HIM=N9wvJCpcJVc#gN+I4_tQKj{A&64a$@sTf zan_KT<#vt<{O}TSYU$(GyiWRAM@wwlxb*l^SHlwjHL5tQ30^F0R-B0$gDg{A1GxGA zBAd+9R-_yWu)cla-L$&A`&{EEj4y^Y;~DofXPjtf`a>}IgZu*`VdBlUHlBYx4Eh!A zCqVjjdl)7KHRFwKjOC$~F^z@&N%oe{!2CainYs4*n`q!1aVGc{#CNxxIe!UFj$V1B zaGdm0FacA1$M^PNypG1tI7S6`%Xz-v|I7dS zznAAbE$js#lt6Ge3{&(F=HgE$M#{~r2>PCUQZ}Fe0-+wOjt_5@_x|`lFY{gOPV{Hl zmwdLY_c+!J%ibTv3l+%a{nGk%P#CsPPv4 zho=|q2$1MigUG(oUNQa*vL#6rrv}hY3Tw!y&Jh+N+R&m9$#&+S(Pxtm`cVLkeh`d2 z5v+w5qft=C9<2ELUKwnwEezo%?A%rm@CPuguYD}a;oaEI4Tgv0Q$O&bpnxYyn;!im zU=qiXYO!_E?|HGlmQTS;^v?(b{{#q`Vnu$&i9&kE1(+y<;u-odnW^ILd>XT@4T0;y zz>7xn^NJO4=%auS5DuA*=&txz0YF{x?=tsR#vevI!iYw_Voo;+?Qdm{21fPzSo_~( z1$_0{qw?_1=VcY`lnz$(Jzb@ZFm;%I*keh1WqTcFf4}UYI^W?A_sSSr!)V?XG%|)W z`KIl<@Cm~$bHB^6xSovTO1%PD8E-WN+Azw}bGAtr+b+8p$JJQi5qWuxt7RKv&K3(Q z{is1Eu1CfYyn@VKR?eLlw$ZjxgJX~T=olvf5buEWj^6{+2mA)Ag0Hanh%GxC*w-*$ z!+($XE~A%& zmO%&O2O7pyYr%f%sXD?oKfilpQxjza`e2IFg5G%R^|JZkF?N2`WX4_s^&LaI;@i^b zB>s=ey|e-VnI;(!8^F%sV0$s~eRCXVy0oe<4B;iiBm?u)pZ@gNI(`#!GL`9PTA6gy z>xA8OGEnI!Q>5B{T7u7bSqJMSQz;{>OaEjJ%{%>bl{M=U0gWI1GvAZ#blw4a;(P zcQt-xWhGYJjsNSqR8P0PvhKq4*?sAjvzdQ0Kl68+gjYJ_nog|^>wmJ28Sk{a0)Xar zkj&S(3Ph4=KP|0(3Z!BJq+HFkmce?OUVrT;}bU6m{{p;>o?i?$QCGnX4Uzh$>`0oY=o;`S4reV%IteT9mFMSh=bqL19bBLck zd0ftLq}U|;#t*SN9LCO=*M}f7Mj=cjGbdezW>uw!Dr5^w^NWj@%dH1bP{-UT`&bWN z#)iPUXN=Eq)Y9R(GCLvh!Z!fM)m1n6mmnY|CY;SBnB@EEu0bp@YvT_wVmN*h?tE3a zWU3?vA(V_`_~7CejJ*Wo@fgz2l+bx~W)=c|F;5#PEQmH@3CF-lOI;;|e3srePxCj5 z1ay51AD&_CBY<#X`Qy8cfiPlajx-YV62%%dvkWEya3pX)G2(AL3FEnK-iA~vyT&(> z_M>e4$j^C9ebg(?+{%k(|K5%49{7YS*<(1%5+NHfVn$Rk%Wo zu@SK%kK@;xar_F;B&M=`y$inj*?{`t3;ddecm0H0pCgP!j_mM{D$$n%7=8%udcd(y zE6~t6ADG@TBQ4QSlvx9ao zngBzbFf;Bkv*2)_tt`*Cx7g#)w}@>}9Ws$GQQJ~m6!QFvGBm_D#y9W)rr!5`ga$|0 z+;IGA4@aT!IOAvUV4J+5ArYiH|JKuJdeDDt*>aJRdTXO31)GlbAsW6l?sox(A3E^> zX559I3F&0i7^J~x7*o#GBhw6Q;_o6Du-`k6$jsYTZR~`&8ZV{^2*!R7W1wya3Zc39 zCBHGg)#9ESR686XT1^D;tKfJIV}aX@!&ZBS6A=_V&>m>=A;pN!pzui6ZHOawZ6vIe zAOsj@9=d=40!^Ze7s@`i1RhBnaQv+8pk0EO*&TldU&cz<=(*CHO!v2~M+{;HmQ0!q zobNjCF~MmOovV!*pJ*hNh9iWXOzb zy!01VzGqm%Yu?Q_o$+;fPyf6(%bkAT^qw$%l&HNJHH@RoJ#IcNVmdpNh9wR6AlO`TAjdxf6 zPcr`*u8`x~2mwr|Wm9b(_}t9Xx>&aCb0@>Ht}@MER$c`FUg;E)>BP0R71I8Ld3%Wm zFUQuG2>>#lX-_M&C8$43(wFOXZ#Keura` z&Xr}x&-T_j#01A1jSYu!AV~q$0(V%A7}ttC=Lbtw*e_>LX&gqCd56`-EsU1kf%$*D z#>yo`#V*HvZLxYXhDv6Oyhb3ddI$!zXn)9@a3JRd0Vshik?zXBOm-55!9)(4NJ7VQ zm_(;Kc{g706~-XUH4^B!h}VbUl7M0;a<5}jy4#sm(o)OrjHn=v5s?KPVTT{^Wln=h ziScZnrmT0ejCcL2FY|qr(Fi;mQQ9gfLgEk>L_hOEFeDJN=Hu5W1P8>E#H;1R_ZY5p zI2978epG;x`A9V@EMZtLYvsx+H{z&5O`dua!Tr~kCssQpzKu;;B9LF%p)p5S^(E8@*_`*Xq@J}cAREVCQFdv zkq7w6cbTPH0%Hx_0G{*VY0mh;>~Ie_zz~iu@;1F;1Nb*~4}Vt{`Ft}`|{v}ze9_FRveMO+Aja}yO+y5 z?_VbmwD>sY?0^2h{=U5a&du`Q{!jm^ym1z$<`zQyPk&Yxt}m2L@;o{kL&Na1@`LYO zDMQrr(#!%U81%|AS_WzebkPJ5OI>j_7{k6tU!@+y%pIzKJE~=D!F2r9epuT)d1L8eWDv>b{1LL1} zBQsUi`8d3t60!ZF@QeJ(!eA1j`C;}RsoLjqX?0YSy%?=cye`agV9GFraXIe zw>-Z0DK;)P=-2CEgJzN~XXA3PNE{qz`)pZLwcoy^0AP%5HO_65;oH65yTgst8fpaX{BB_5WWmu_;REL+Ra;MpOJ6f7M4@^)LiUmEvP3jiEQe#De&$#^$a zh`(tIIKYJA%Bd@)x)^l8_O5fEx$4>GqcdNxrju!U?X}k!3>Bpgl#G+lGD*p_%ZS-g zy_+WE3e$Y`Q=lM`DU+II$-9i2d|7`oV(-zZ5m|7M3{7_g{*Lhd7d{ z%5oUT_`bUeY+lJ|SvTvfu;bTpSr6-Ly){@Ub1i(!oaGhI&33X)Wr$V5Kk3Bpn{U2Z zKKkgRXp@9-GTyg&R|p^+%O;Lo5pN2Wny|9pKH-=@T@#F8fnX%{fzolsUh2wm z3W9iK zC=DDLbGKUN?Oi!Qq=6wcif6wYPl8Q#UUT!`FbQlPrN;(-0;_e!2PTh;uwX#(ukfKZ zc@|FATY}cyYTh-TtAwslyP_oCny&fYd~VLYiGxbkHdBA`IfNRN#k%OSewqFYu_$LLy1y{j@mygGA0;vP|g9H_OVh|LII^dmjnZ6lPQxH>_1KgY#| z&2nz;5<)*{0hp_a)%)cJb_nipDnRE*X6hW{8DSvxvIiV*T)E$uG1`}a=ogOJL+Uuewx3Dh#&$U1x%c0BC+b5*Ldy@{VF&g7dNKuh z_yKl2IiRSo?KFlE!M*`)=p)lg)hwa-+#Y+_St6rZ=9KX}x@wd32@wDONL0n{b6;ncVAbxJ+B7$$Y)*XD2m}bnbm` z;waN4Oc^*CI`cox$;`=wpXOxLWVn;z7q))F{&k(O#G7@^{q(-4%e-7o_c@&c0ox^+ z+VnTAs`A&aT?_3F%h*hp@xJZdx{F`i)b`N{_ar{WOEUkbg=fBor4Zno;?X*re-l3m z&utMNF(`p!JEv11;3|AF@cNs#m(IT0?1LF*9@b4*3VWLABOyP+R@mbBvEJ!SV>uP* zH2Y+Rdsj`&yv!rZ(hUD5&!#gUg$WY#zbc$>lGm#^FAoMZO0fBQjB!>C zR0~{t3S+MtI;$ogW8{A0?ifUidizjko7)FvX-&caf?gFujL$v6GWZfI#9Kt^vk`I# zCZ#=w?G1?d9xD;<|23{eJ+w@a`1O2m2}FoLiAw$?o*j0EEY&m0^} z&p2OP=7@3GS$fK;lAZFwPdnxNKlnc9ogYExt(2Q@&2ePdET;u5aAAj~Cr=p=MJUdlB_{TeRJ&pjp&i-rmE02Pc%?F>CGYgl? zjk)=<3!Qn?q8#AKv(CFRkAXKCCPpk}laZC34dEMiSVG1Pcfv>pPGpKfwam~7=XcUL zwQXt}872G))8FTaM8}D|!Ef{-kR5$3I#mT6?Mr?!7sZPhA0!tHm(gu=O3b@$Qo{!$ zu?j5+QV+DV{LQ*bFrkXfs>Rv1!;uO$$sc?(pywLF%9zCy>~K!;#Ds}+BEIfMam z%pY`#%&3V>?>tm7Q|A!pAp>I-IG~BE!JLf0W%s>eoabl{J$O>+C@x7?1tWub2_KKe zi*$z5XSDKf@y#pR#PW!+fzz+n*79*t=4cZVMOzKxxiZcE8SGkYmKBU#Zm^xD2Tj&T zk39_T0aMyap>@o;q%&VE(ohFsRzU!KZG2DK?2Grb6}}F!ieKkg!W6hLH(KKmd=AQ? z4VZdrOzn$)XL?=A8^S7Uz#nw4g0?s^7eTs$xE>7hKKzG$7CAu(B5YrU9Wwt16iC5^ zwl1X66)1EN2<#$skVe&DpzZ)ee4~6z%|raywju06P&lF1t?-y*M5n@^Bjy_6+pqcv zK0M8*6=&IsV+v0k%hWyKG!M$70BMBn6F%?mYzNIcrJWMC^w`Fp4zx*J?H&Z3zyqEUp1qbkwRiO?X+L0E^X9;`>eVK_EJhtYSxJ;MvT)kCIIho5$7Lz3}GB)qN z`))81GCIkO8DECj&YLhZjWBY>U#3hUgUpbOk7bmhQZOLwCbQ;qmdlTxtL`#jA#tL| z8D^gPC*zcPW;*k>jE^}UkG+o9^<|=Wczj*OoA%y9gV2T{we9<8_Dz2o0qBhwKsTz`=JB0%*Xf z-+_^Fg}_w@#`G$CE7$1f>o70(SJAG5sc_Xu(;6CNl+nM5DnTxB41EG^5`KpeEAU0p|4kvK9%}if=CwI4 zoRuYNf>CQJxos>Wguiw-_3 z6TJU2^AyDZSK(fuslK214W=agYW!%M<2Yt8fRneu-O?M>m>wgp>8qM^t)nYYI@`#V zxRXwQQIufwejJZ*t01pIjsQ9isSi}6(d%t`4Hs7BWRtmdiYE0N#^mgYn?e7XPbw9wahNnBYU1o0|O-E`w zIgN%UeOjg+aROUtD(mFBxP}0GXxg+|lYEC(QEg`LKXSbT7>PIExCZ1_`RQN(JtqXT z%gm+gk=~WWNmPv2Ryp=-xL2NY4B`DV_sZqhu9thCJTJ@ZY$ZUuXNS`RZod6``4C~n zjrVSp%NYOK?JSo&cRwtD|FaLu7F!p7ara@l#473yjs@G~=)w;^`?&n~|IHtjl}Go> z{46!wc~-7qV_*eiYfm_yZ5L)uW~1-v0{nNb@J{49hGg1_OL#ED_y)sgBx)Vgg5lyuArsGz8~2-6TM3o% z*JevF>XAZv+DQ~V3V^)oEWtC5T1Fnx|E&;nmx2o2|IgmL{n(aecUmjWZuP;8N{j**{_&~Kjp{FlSe ze)9hCh*@e&3b5_6is6`jEc>i)>!~YR~e(69Y8} zQY$rlcv66Ozk!e$mp;i469i~{aR!QVl?H&NG|-;58MRm0pEKIO#f$;Ji>B)?{m$xf zR@;ICQTg8B`)fHE!Ob^kEZbSo5A3kVj)`gjaq~bp7v5ODd+1Wik@hiB{>9DZ5)gTo zIDD5E%py32wk?%@vd0Y>)o(LK0>U&HZMl4au!a2yhK*ef_rSPW;U?|U{LYXEw$ard zP!0P=bAE*HQDl`x-)-paeAl?5Qrl_wT^Rl4 zg~pWj_ij9Ss}aDm5ynnT|LZt$dUYC|<`k!X!d%rg4>}F;`0Qob|M9Ogz?u4hsN3;xkMdyi2=xFJ}x` z7p?b}zkV<4*6Fox(6I2@z2?9syZgTV&2J1JBE0|n)BD5Qx8B0YwWPj39q!(`jd7OQ zJnRFo!H55hk%lMiko*Lt;4}IY&mq45NC7}05rG_~;1S0P9i4GTvDK7Oha5?S^6v&? zr(5h4t^vT&6@(wBc`EKJBvP>>U@6f0q@2`kKvY(H1xiEx_fkMrK#$jXlcoJs+wrb~ zk-J8LT!s;UbknxcZ7abeP(OP&KCQK*MoDQJ?E8gp+uF^K592Da>1m^Tvu2%^m}{qZW8HF4I6Q)P)%J% z=O=Lz7LbCo?zGFN7Fh9G1W{**H6#65!EhSpoyrCEu76(r^Z^b;}9K&Yto7 z@Q3XDf6P*XV}y9L5ccXm9KQS8-)05?3OM=s{eSy!4aW~LCNQ=49X9m(H^2QRO33!`{U81aV*&emEHNN|^l13@_kL&i z(?9uNhYvpd83u)K4!`$r{lT!$DCNoH2Tb!{4*&kY`)>|UIP-5~4`T&#&++|V3~z1z z*6OCPdnUN5 z?m`y%6AknU0#4zj$DQKAT6H*Kq%zVL2qP2jGtA;5F1Yn^+0>jeMa{&oX1JvHAbmAK=~y0e#d35ejyvglQcDcd z^3QUU$CNh+Q;)W&J1w^@SkrGCHCJxns`7rs)cJj6zHQ(R(aTOV_{nz>1A*{!=$O&Q zx7g%QL*I<{XS#d0F#36F0m}x|;*RJKRNxU@tK6Z~|DFY4zD#S!QwiV~$3}oq#9`lLKf7dKfMfRZ+2MQb?3&UApfv`J&EcVgN8o=9U56MnZ9|XP zXz^8cU#=y;VmYfu?vWEuV+81t#ph+iMr3DUfxpkud*A);cUJ}k{ikmF?sIiS)W(U^ zzr&oq-|L?nL`6xbLgc8kqoUHPg1YWHPx?2`slqmeH(X~NmF@3;|NB&WTkgxdo(b?g zL&}R{R)Nz=*ECNr5?>nJhoKEGozIRd4;}SxfAROTFuq$38d}8FomRt$SB2P))_mW@ zOn|1X)9ClV$@`SA)+uKPxGzQL*R-1+@BQ5V)A&uN3cUstEvoB$ZJ55xKVhxcz5JoW z`rc_yaW#GI=lw@N`q9eh&@*2wKf|u;G$^!D>bkgI$A5J>@ae3j}QC#1+9#<-q4$KATRZHA0pU&Wmlb+g0C3bofW|liC%GVG7X-xG%k2|wkDqE>5s%4&kNWnPvp?|mEsk} zrC{)0efQ7tOoqI?yAa=aikw*%_{}T+yZ!^Q}jXjq6e1t)7movZ-^hw|K|IYZ?;X9z2 z;O-l&_5J1N!x_tZj+yHF6obRo-pTOG#~%-W>pSlb4>vd=}8y>f6Sn zUkrDj&WGRF`#LigFl3-4ZEbTh05qLIlYIhNB4@OHTM2zl>|#~mfXCN>_}6n3dAzJuD!sy)EQ7g}SsMUC z^;i#65J}f**gDZw9g!aC;3qW~|3Ki!z4{ZMsW;M|T#z39tboE=*E5Zr45d#ImH41t zj`gT~i~u3G>TLD10+Um78&cN$n+KPug@@D?m2(Mlj|Lix1x64! z%p>t#ZX;VZ3AavIA83vlZI=cWWT){vUEd@A9%CWjrVL3%=;9f8q}kIZoXw_D#^oH# z1C}KCp#zU2`YyrSX6et8{vv$}dCm+N(j+^{Z|QF2-TdHfKhph}VU`|9nStOE2+K$s z#0ifGasxw0`e%H%Eesa34%@yHPkDC6Oumx^vjB*Hu-F_Pf95h$@=oN`apZ$n*?px9 z02V|SzD58?v7a}}nvRkR-**+jAOHBrQ8-mNbmt$@bNuOaZ3&a`#^K${(p5kOjnRS9(_z&g#HzIdOd{EOFcowE%bJ?%8&d4->wHUhLk=4Ffk=GSTBPHAsG zn3d+Wja(jAM?i@7?k<4_$|Zy^gbuH4WFn z^E&RU%K?R<`}CE&Z0h%v_5TMPr?fNYNF=7^K4Pu^qhtCL)&M#J@x-J4P(nOk*-eQv zO&KG>;*^b%sGl21R2mYTs>_yC>;b@f!rgnr?ADvZ#_hL;W7Z}s*ei_8xX?Th{NWw) zmi609=Z(-j#7le#OA23!&btb}v@6gU!MMtqX-mS!yZkeP6pu>BcSTD@*8rN90-i9q zzUO82{>88nJUA3wc}SFwuK*pm z%O}b3V~&9qNfE$JfsgzdKe_b5r-*YA>NU&UB%s^_;6TooSFVhj>|kee8eVr zTeS=mrD5S{CWbZhyI{7!2}kfDxes@D?qoV}aARE9Vpr~HA_(hC6%=LPS-{V9A)BxJ$9Sjr?SmN`P zHh;jwC%gQ!_nrg z;R(hL_psQE5`_|In{<>}=B21D6V*BS>9fri82(b$c$9LD&J9O8)+63C(hn^fTT%}INYgVNltkhEwXCAVr?7f!om{paOdi{02>)P@h6~+loBQsH~d`}Z#wBqLREsoJFO~J zZws%_$rB)ES68)89C}!nrIq}VZj2b*&24(#0!h04E^Ru?VMLktGJyD4W!E_ulTpO! zvMtNs85oYLTX1fE>Bzdv8kjQz9T>+>Iff1e`V@uRPnYFbMl%cm*bagtGk++%oO%Ep;Hev~r!S))?ajJLU0pC+#ePIns#D@;jJ9jo z@`%G*%t&xa%SH?lgaN1VP@;&%I^is9Hd>NljZE* zE%H?7k|OK#Cf{Y{Im=N)mw8ZDG))cb;V1dCVK}|toefit8kc}EgVs||1MvMZ`-a@c zU^wSEQ7P6y@aW+qjBfXsnQ+9chP@a{PQblI*sJVbZR#)Kd^J)^6X(dGqkUaDx{({! zaP8N3E0Kzzo8@_g+xiA_4JVH7M5caLTt`72aaNJ+ihQw?sSc+{njMYQNMIbNviEvv zD{-gOY4yAJPS?BP;!w$TG+c$L!-dr~T)jR2SNP_k7O-c7`@}MohrK~x=U4b?{+d4PrF&L5{a%IqMcg!P%htN= zT_b??`&q8j_ilO~w`sd+TKaB$+okQG#+7*Bp3J4xnocZ?W6|;+SK%*qFAIF8Q?mpW4qs%1^gZ{dKvkxEt4h=@?zo4o>5h zXAA+-P3lD>-z({kYo(y+mrepYPn{{fDnfoeIY4fDa~e0P5d~mqNfhr%1BHo*3WiY_ zfR_rz?{(MtGk&J8uLDfpi<1)%@Qoy|Jc}=Wo274(5#L7UD3``ff~C(oaM6v-Bp;Q7 z!f2NDq86r38b>-vwHP+y6{oP7H3AGWeq5CZxe0isS@j40)oTM*LcE2|`WimTbYAsO zI^+z-M`=-xQK8Q~T3~{D`&oCnz`{vA@R-8wB2E zL$CWEvne0P`+eh1DZvM9_NDTF{DioC=G;yE7)9LC_3yBBV1J9#J=iGiDW`jEZtUg6 zfNe$$|HaRKF#Oi{zBjxx|Jv~B=bsE8eDv|~_x`(WPmk^oA3gkR`1sHNba>}?et&p(|IOip#S>0;V-#_=PuX}pn!BT0 zKVbj`YfXs4ZoQ>IW++203GjQ1SCs|+sbTOWWe=V%?^F)ptpDxuL}8`A=S9Pb?bE)d zE|s**m=Tj{QHJ82(bl50GxKSQpECgrj~@wmPkXbm8SY=wGCdO$Pg-m6`K~dLm^NL~ zv_+)$icG*Uk9L*N7Ufi2t{FGq)mFUQrzHQ=-+O%QBU7MiGZsGn8sJ)`$_n zG7?I2t!KJxh!&E;F$7P1{*b7MEr7D!X$@`c=-wg!cZ3dslE#`Dx{F0+z>V z!|X8qjAwimk-o@a002M$NklRmd;*LCPJJk}A7LMqkf zNdt&?>s61YORsR|*UNW#)#X3EcRtqBYX0f(vox8m1{!IU=cem(8-awe?#d_2x6^JM z)3n6t^&;iGPTTaoarS*0_WJqPivy>O_}ymb?$7Vj4kp598BMt|ZusO}97-+_o14m9gCr zaTF|pL)cPmQAqMn!Iz&^8m29tcD_4`B3NSJp&(QOJ$?d+z+awyO<3SXoREaCe#{Sl z&W1>Ea7arDR0?N0v!{dP2yzO2BAlI$YhDE>P-TVxkP*R_h#5UiD#j@UhAHnRKZGgn zn%VG4Fq}zLp7MJ6Pv|`ls@IXYV{=+}4sl3dZ6mv{+s@f*YYMH&is@+rN=ro@Q? zLFQf4x^j)Lq9s!?9)*AAzXFo~X{0@y z#4@S}eM|xNd#GSPr)u4Plg$DD`e(xdyQ**By2C6Vb}Zjw#1#eRn_oK_-kco{|Kv~p z$?zwC`qN?O4Q86sH_W$Ahrjs#KOdfawiy2CKm4QNfBf(Nm*Ic;!i?Trj#fz zsV5_t%5Q(~QetD-CwP3etW`Jd%bZD*wgiCj5+B9OxJX_6@C?sgOHMF;;-`-!l8RW# zh8kliH80zziTMMJc=BuH#MYyIHMQ2ORb1TBJL9W-Y%L<3zRl3o#LzAP^@34Z4FM{( zfdtrOu&HpD&Wa_p&U~kyhqlVs7+_!?1D79ogo3D(E}c|})Hi?o>Ac^9#t}_msC#jA zaK0yx{)`=788Jc(yenNq`SS<^*;6*deEReu# zSJdvXFP%=oxBv9}p%uw;)sKXz_ryu}0YGS}{v<{KycVQoPd$gP)=&9wT<;$BcfctA z*T4C#;oWb)$I=?Uc`#s!aqfU60FT|Uknp|vBg%o}q#u{uzd`+xH(3VYJ_hWup)qg4 zai6sm0Mg_aK+2~YeSDwF<0Yq}gMnw0Lf)c(sPAdbBG{pSuw9?HkhPA)oolYxFQ#^J$)A!5LYz0nb zSNv9R6(cVdCS7;n)A-`;tJ7{cl`Ux&*L9s~G!MN?*ShOGdT$!mVW#iq%Q6w)WsRu$ zW*$`f)?J6I1h;D%n`iCcu-?VBK0Bhrg_mEQ7e||g@At;{yu19-Fd^P`r}D2s>bgb% zaZ9T_)O8)2rq^X5Tr2q+0!+JU>%4jIXTz11 zKSzu*KJhprMikX6W^O~Se1ed1HoL=m<-3ET+0$)~Wo6|5?pxm-&i3EsI3(U#$2dPi z5Ti}es}m0+St8r+nxgJ6sx3xIGl{WnmU0bE(nUL{v$W5@0b&t zONzjjYZ@wC-}A4=xlkKea7645?t&`vNBnT3;Oe`#N`ZLoq-g_TPB-l{LgGkMkKh^K zt7DfkT z{??F2uYRrA#2=$}EI8YcA-N1B=lBimxAcvsF~*qQ(kJVYky7a-H%8=|6eszr9F&@2 z1nM3zf+nOaDS07(RtoUu&CZzG$6oozkI=6MfU%P$sjJ>|RP#+pdxsnex|@_xcn z9F1{k0jCuHlBEOYQGaEFyuXXxG~&1-Wz_pdo&!pk3rz{8z}!Dan#_$;iC_K%=+w4 zhNFM&!SL?AJHx;DKmKP<7?}@$?~nd-HWU4P_#gi1pA28Ww>$jp?|pOl&2KPryLq2! z(j0%tz6YpJER7%!XY5EW-x$qxgEZG$`;JL**oMYU@@~CaFnXDKN`X?{sadusu4+=e z6EC&gyb-}G_ab2AY7O;N-nvN4U2B82S^KaC3ZZ)uL;$mXct2{fCI zhaZWPr z+_%DG?sb_(mQ+~pPWjh{gXD{u76?$o{15{*`&1mW27SH&#x}(a0QumzX@}Wq8V{Tu z;?DZgs}X62!s~AME*G&4E-15^1!!4wbDjMen{cY&pHkl($)7RbUK}UX3uh{6)bYG~ zY9BZRIAN+7Q zdiW9FN!lI;@TcIkZeYR#-wE|boe0_8tU`m zAx9(9Ke)VLpAAGe?Q`twm>RTP(l0>rf_skmWv`Ke(S7$BcubrPX7`=27 z(w|fM6#K6e(mpuBNMPRt<2GDwWIJ>D(JSoeHNV=f1q_u2mEspsyy_!H?H!#sriy0! zTOrpKmvko7;!d~k9p|#UFkP|R2+(+@_}lL?9QsW=HlNL}qpA@ApB3o^{Y_gQ>U!k( zSy88SJPSsD%c6|{QyPu$dn=2V@qUU|c7&GFXx)OqT=bP01A+%(_PC-0}_+&I?r^kwhjG@f^HX@u~3 zn%1-8e_49g4Gl9d+Mb`4#%upyZw@$O;ArDh*83kZviJEDKJx5BUdQ}B7&bZQcg_c1 z!DLGX!%sfaNk*h1fKay)4x-q&3o}QGZEUcEFl+xe*c|L^?>2`4)G=RCI1##*8C|h| zLl6O<%4fHeuJhLKZX?}Z0yDOq_(h0AFykIr!gQlvmuCVHWC#~u;4ikl={on|FqZHY zd-dyk`-KkP6_9(U{{jSJqycd&@VSqEjlc0Iptf*d@f%C^7oDO4bcxOt-io(ty)Qa= z5f4+us@Mxa+(zW26?t-+AW?eY>Imb~? zsZZ2z<4DR%i6U5fQUxJb1ti8PzA>Bow}-uZ?+j1we$Gi6yG*&=9JWwMHg^tC8eAq= z27c@BF;|ouzG0yY1;^PoON8_}3P(y4m^}=1PA|5Nx#^$Eg6-T9YZ-y50cD4i16(HH zegKR<5{i=TI$)*)(-(OB*v2-~@)-#{z)0`}Mg5asd^~*bz3&Vkd~z`S;G-WfYk?!0 zQTE*|^Z}cM{_b~wd-(X5Pls>+#y5w*{}29X_~Fk!AO6ul{@;c--*|WUFaPWRh9lg5 zIQ-%#KOA783f&JVGvG3#toG@AQAH3iuQ&EngUGk+jxB_13gkl~|*19ArXFXYV$pdug zZ>zOF*e?q!dF7-*%;n^TYv8+|ZGZ2{B5_yn;t55v4}@cTpSJtrE%+@05*0+FtjQae z{BrN~LZjtlxP(qz87YN@zhG$NuH%BMtkppa9+}^D@&JFe<@rRBNEM zVB7kUq)Zn-@R(NWmpS7b=*bfH<<6dP1U#GMnSb#L<894cl>W{TSh7iC>Kl3blp{UKZg6QVJEl)kZ*h}Dc5^|hgmsY&)zcu z)^SW}c+uw`eQo8iadw)%x8L({8fQ8apaoz3r}+AL9bc!@cf-Y@ayT^tOv4+8IQ5^p z_4iKKa@J`CSTE;k{ONPYo%%H$ma#?!JCL5O&|y>f=RJ2E>!SH>W6wH`P0O?LXF5}U z7+?Bymh&`zKPT`xKW)GS^2PMvZKRbg)(R?~Z!#KZ*KxqLKuB0J z%HR(FgB$;C?xVzT#21Rq7NZvm(+Vk=in%jdfl#9m>FA{U2SflT-0JIyrq1?fJ&wr6 z-RE3{t)3O+5J>O{e(x8Yug06i2`sqdOmAW>P$63d@L)RKru46H+pOaD_`aTIL|^b4 zo@+P2HFZUX8T!V?K0WAQdVr3^*beTf|cN zYXQC4vf|H(USYCvCxI9EnZmF5a!EXsh+sSRX$=y;7C1*nI2xt9(03ZIGd$v`bIeEL z6XPQP>YHIe!Axll_~hpcVJ2rx(+pkKP5Cd6%ipjj$x+-WsvZHxxAhhqA0Iy96rM-4 zEtJPIM)5b;X@9nja?Z}@DgY@L>T5PB>q-EAM?tgc7x{FQQ+6CNQkS#Er2v6{n^8Lz z0%^^&k><$O>Zw-I;mp>YQ{@`r*=(7)pzxeZi zIs8}u*&hvm_wT$n{N(-jhd=-G9}XXEuvGNkZ!-u#fjk+GiFSh?fiX2akO9s`g_Wrz~U||Mp8cS`8&k zuk-dlwiU~n29dT)gsFkYYGxc2%MAAuZu~3>AixNiJnP%4CB}KDcvzd zfJa|pRLEnH;9dM`$8+i$UpY?D;N!{cn{R*nz2T=n`;ZwcEL32|+%8PtzfGIN@MXE3 zV$@sEZv8g8qrP3mf($VspA!R^DTfkn+Q|`Z-K9+#xWYIg?3{i>XZ=w2wLWIHf_(6@ zAE0iypTGuj=N!eGBL|6lg6wI3v9m3VONq*$5-lGJ($AY;;wtYeWA5!S{okWV$?GwG zyWn>j>x>x+M0us%SKa_%L(=u#0(I266|eQun>OtAuzqhCE1I}eICWM?!#b^of8M>} zy|;3>K0@4SuH%~ePoISopMKL#?b>f0&x^b_ooxh=hwEvszpvw64;SaNi~yZp-`8>Z z-eG;$&vLL#x|~gOnr=V$-8j1S_wp_Omo)-R>1jOP+kaZl=D#|;DddYkH{Cts!lsd9@hTi>-N%y3jGXkI{LnjWBq*!C$6cnXC3zS`)dw7 zivv%X!vERRli?vFfsYvG` zJ^EEx!E~5@F(82B9Cl3-K~hv1@K2|(Ua)z^!*nXW(I>a5U&SN?3VXN5#@uvf(elPG$cM+$uF?GnGm%5RRxo3{` zh(tjX6{X{BmEUhp`nHlODXXws`ZljbD;s@$6KW|nK!uY)8t8o!3Mo>bi%@g@$@B#P+XR6{oW z?lDbw_x9c4_8XkSL%anW{wcK27(txvQD@n8d&#=tnVWAC*Aa81a}*e-084941vXDz zxC;51*-yGE!iNi#1aL~!u*63kJM6&!8Ece(>$kp@J!@{=Vj0g<*8T4; zvx%9CjZ^SX=p){G<81{0z2W_je>QyMYqy85zxx)77Ds_HrTCa-2>ktN<>oPR$b-*+Im`|}8UFsp9}nMn?>+Vl`1&yaoTG04pZm-{V*i1AOf`ln z8I6VZ9i~XDM7v7H4c<^`pdF>oky_|+&2%>HBaRBQ#tvDm^ShrrkbZCZ#bAjKu&KZO z3^P^2Q;sAdEFghvqf$VFcUrc^X1z^Go{B>%Ra8}=v#iE<{&Z1jMb4`<=&PUW#H}mR zuAlW|t_H`yxHH;Mew-eEg3@MOehHyGbNAhtjTdFodTk#o8u3DyQQZ8E<$Xxnlx;=|^*Cj*b zJ((thrzq(1Fny4QJ@O{J>-pINApX_QSz7W#+Tk%U8VMYPwO&{TE(dUCflCqG0ML4_ zaY9|dncBwjdX?Q*-T*Kyoc=(y0^6h5Q<#^1wo<5osBkv^m&GxKPeU6=h^=VPGE_|C zJnvZ=TRH58^Sn4;7A}qQQ2M4L#9tQYd0|r{fQ|CH&W73Ld{aDZBS0_LxDJi-P#RUT zn~&GQXWVHy-&9>}Bfxcy6rDE(jjoF~QO@Rbea1(p_4@vr17F60Ck)}EUvQlbzx?C@ zXMI0qgb+ar0sQ#MAybK6v&=g}kY^ibdaMcu%0Ds!YaN}6$Qnx&|C71bKFg6Y0B{YA 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

    @@ -87,33 +60,20 @@ {{> modal_carousel title='GPG Encryption' cls='modal-gpg-encryption' - img01='/images/img01.png' - img02='/images/img02.png' - img03='/images/img03.png' - img04='/images/img04.png' - img05='/images/img05.png' - img06='/images/img06.png' - img07='/images/img07.png' - img08='/images/img08.png' - img09='/images/img09.png' + img01='/images/screenshots/subscription/create.png' + img02='/images/screenshots/settings.png' }}
    -

    {{#translate}}Click stats{{/translate}}

    +

    {{#translate}}Click Stats{{/translate}}

    {{#translate}}After a campaign is sent, check individual click statistics for every link included in the message.{{/translate}}

    {{> modal_carousel - title='Click stats' + title='Click Stats' cls='modal-click-stats' - img01='/images/img01.png' - img02='/images/img02.png' - img03='/images/img03.png' - img04='/images/img04.png' - img05='/images/img05.png' - img06='/images/img06.png' - img07='/images/img07.png' - img08='/images/img08.png' - img09='/images/img09.png' + img01='/images/screenshots/campaigns/view.png' + img02='/images/screenshots/campaigns/view-links.png' + img03='/images/screenshots/campaigns/clicked/view.png' }}
    @@ -122,57 +82,43 @@
    -

    {{#translate}}Open source{{/translate}}

    -

    {{#translate}}Mailtrain is available under GPLv3 license and completely open source.{{/translate}}

    - +

    {{#translate}}Template Editors{{/translate}}

    +

    {{#translate}}Mailtrain ships with GrapeJS and Mosaico built in, two advanced template editors. Mailtrain also offers a code editor if you prefer to handcraft the HTML yourself.{{/translate}}

    + {{> modal_carousel - title='Open source' - cls='modal-open-source' - img01='/images/img01.png' - img02='/images/img02.png' - img03='/images/img03.png' - img04='/images/img04.png' - img05='/images/img05.png' - img06='/images/img06.png' - img07='/images/img07.png' - img08='/images/img08.png' - img09='/images/img09.png' + title='Template Editors' + cls='modal-editors' + img01='/images/screenshots/templates/create.png' + img02='/images/screenshots/templates/edit/grapejs.png' + img03='/images/screenshots/grapejs/editor-1.png' + img04='/images/screenshots/grapejs/editor-2.png' + img05='/images/screenshots/grapejs/editor-3.png' + img06='/images/screenshots/templates/edit/mosaico.png' + img07='/images/screenshots/mosaico/editor-1.png' + img08='/images/screenshots/mosaico/editor-2.png' + img09='/images/screenshots/mosaico/editor-3.png' }}
    -

    {{#translate}}Send via any provider{{/translate}}

    +

    {{#translate}}Send via Any Provider{{/translate}}

    {{#translate}}Mailtrain recommends SendPulse even though you can use any provider that supports SMTP protocol to send out your newsletters. Bounce and complaints handling via webhooks is supported for SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA.{{/translate}}

    {{> modal_carousel - title='Send via any provider' + title='Send via Any Provider' cls='modal-send-via-any-provider' - img01='/images/img01.png' - img02='/images/img02.png' - img03='/images/img03.png' - img04='/images/img04.png' - img05='/images/img05.png' - img06='/images/img06.png' - img07='/images/img07.png' - img08='/images/img08.png' - img09='/images/img09.png' + img01='/images/screenshots/settings.png' }}
    -

    {{#translate}}Trigger based automation{{/translate}}

    +

    {{#translate}}Automation{{/translate}}

    {{#translate}}Define automation triggers to send specific messages when a user activates the trigger.{{/translate}}

    - + {{> modal_carousel - title='Trigger based automation' - cls='modal-trigger-based-automation' - img01='/images/img01.png' - img02='/images/img02.png' - img03='/images/img03.png' - img04='/images/img04.png' - img05='/images/img05.png' - img06='/images/img06.png' - img07='/images/img07.png' - img08='/images/img08.png' - img09='/images/img09.png' + title='Automation' + cls='modal-automation' + img01='/images/screenshots/triggers/create-select.png' + img02='/images/screenshots/triggers/create.png' + img03='/images/screenshots/users/api.png' }}
    @@ -181,9 +127,10 @@
    -

    {{#translate}}Donate to author{{/translate}}

    -

    {{#translate}}If you really like Mailtrain or your business benefits from it financially then I would really appreciate a small donation to keep the Mailtrain development engines running. You can either use Bitcoin or PayPal for donations. My Bitcoin wallet is{{/translate}} 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM

    -

    {{#translate}}or donate using PayPal{{/translate}}

    +

    {{#translate}}Donate to Author{{/translate}}

    +

    {{#translate}}Mailtrain is available under GPLv3 license and completely open source.{{/translate}}

    +

    {{#translate}}If you really like Mailtrain or your business benefits from it financially then I would really appreciate a small donation to keep the Mailtrain development engines running. You can either use Bitcoin or PayPal for donations. My Bitcoin wallet is{{/translate}}: 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM

    +

    {{#translate}}Or Donate Using Paypal{{/translate}}

    diff --git a/views/layout.hbs b/views/layout.hbs index e5077360..ad8ae9bf 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -122,11 +122,11 @@

    -

    {{#translate}}Self hosted newsletter app built on top of Nodemailer{{/translate}}

    +

    {{#translate}}Self Hosted Newsletter App Built on Top of Nodemailer{{/translate}}

    {{#translate}}Source on GitHub{{/translate}} - {{#translate}}Subscribe to our newsletter{{/translate}} + {{#translate}}Subscribe to Our Newsletter{{/translate}}

    diff --git a/views/partials/modal-carousel.hbs b/views/partials/modal-carousel.hbs index b831068f..e5500c82 100644 --- a/views/partials/modal-carousel.hbs +++ b/views/partials/modal-carousel.hbs @@ -1,11 +1,27 @@ + + - +
    +

    {{#translate}}Official Mailtrain Partners{{/translate}}

    +
    +
    +
    +

    + + SendPulse + +

    +

    {{#translate}}A reliable SMTP server, easy integration, and 12,000 messages a month free{{/translate}}

    +
    +
    +

    + + iRedMail + +

    +

    {{#translate}}Free, open source mail server solution{{/translate}}

    -
    -

    +




    From 3aaf9bc6bf2244a4fe94b4265456599498c62d39 Mon Sep 17 00:00:00 2001 From: witzig Date: Sun, 12 Mar 2017 01:13:24 +0100 Subject: [PATCH 195/483] Fixed title case --- routes/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/index.js b/routes/index.js index bf995165..5d33e176 100644 --- a/routes/index.js +++ b/routes/index.js @@ -8,7 +8,7 @@ let _ = require('../lib/translate')._; router.get('/', (req, res) => { res.render('index', { indexPage: true, - title: _('Self hosted email newsletter app') + title: _('Self Hosted Newsletter App') }); }); From 9ed2b1b9bb85ae9401d5630ccec144b298f80618 Mon Sep 17 00:00:00 2001 From: witzig Date: Sun, 12 Mar 2017 01:22:33 +0100 Subject: [PATCH 196/483] Updated mailtrain.pot --- languages/mailtrain.pot | 150 +++++++++++++++++++++++----------------- 1 file changed, 85 insertions(+), 65 deletions(-) diff --git a/languages/mailtrain.pot b/languages/mailtrain.pot index 4f142a5c..5da70af6 100644 --- a/languages/mailtrain.pot +++ b/languages/mailtrain.pot @@ -8,12 +8,11 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2017-03-11 12:28+0000\n" +"POT-Creation-Date: 2017-03-12 00:22+0000\n" #: views/archive/layout.hbs:1 #: views/layout.hbs:1 #: views/subscription/layout.hbs:1 -#: routes/index.js:11 msgid "Self hosted email newsletter app" msgstr "" @@ -1035,22 +1034,10 @@ msgid "Subscribe" msgstr "" #: views/index.hbs:1 -msgid "Official Mailtrain Partners" +msgid "List Management" msgstr "" #: views/index.hbs:2 -msgid "Free, open source mail server solution" -msgstr "" - -#: views/index.hbs:3 -msgid "A reliable SMTP server, easy integration, and 12,000 messages a month free" -msgstr "" - -#: views/index.hbs:4 -msgid "List management" -msgstr "" - -#: views/index.hbs:5 msgid "" "Mailtrain allows you to easily manage even very large lists. Million " "subscribers? Not a problem. You can add subscribers manually, through the " @@ -1058,87 +1045,91 @@ msgid "" "fields and merge tags as well." msgstr "" +#: views/index.hbs:3 #: views/index.hbs:6 -msgid "Custom fields" +#: views/index.hbs:9 +#: views/index.hbs:12 +#: views/index.hbs:15 +#: views/index.hbs:18 +#: views/index.hbs:21 +#: views/index.hbs:24 +#: views/index.hbs:27 +msgid "Show more" msgstr "" -#: views/index.hbs:7 +#: views/index.hbs:4 +#: views/lists/fields/create.hbs:3 +#: views/lists/fields/edit.hbs:3 +#: views/lists/fields/fields.hbs:3 +#: views/lists/fields/fields.hbs:5 +#: views/lists/view.hbs:5 +msgid "Custom Fields" +msgstr "" + +#: views/index.hbs:5 msgid "" "Text fields, numbers, drop downs or checkboxes, Mailtrain has them all. " "Every custom field can be included in the generated newsletters through " "merge tags." msgstr "" -#: views/index.hbs:8 -msgid "List segmentation" +#: views/index.hbs:7 +msgid "List Segmentation" msgstr "" -#: views/index.hbs:9 +#: views/index.hbs:8 msgid "" "Send messages only to list subscribers that match predefined segmentation " "rules. No need to create separate lists with small differences." msgstr "" #: views/index.hbs:10 -msgid "Donate to author" -msgstr "" - -#: views/index.hbs:11 -msgid "" -"If you really like Mailtrain or your business benefits from it financially " -"then I would really appreciate a small donation to keep the Mailtrain " -"development engines running. You can either use Bitcoin or PayPal for " -"donations. My Bitcoin wallet is" -msgstr "" - -#: views/index.hbs:12 -msgid "or donate using PayPal" -msgstr "" - -#: views/index.hbs:13 msgid "RSS Campaigns" msgstr "" -#: views/index.hbs:14 +#: views/index.hbs:11 msgid "" "Setup Mailtrain to track RSS feeds and if a new entry is detected in a feed " "then Mailtrain auto-generates a new campaign using entry data as message " "contents and sends it to selected subscribers." msgstr "" -#: views/index.hbs:15 +#: views/index.hbs:13 msgid "GPG Encryption" msgstr "" -#: views/index.hbs:16 +#: views/index.hbs:14 msgid "" "If a list has a custom field for a GPG Public Key set then subscribers can " "upload their GPG public key to receive encrypted messages from the list." msgstr "" -#: views/index.hbs:17 -msgid "Click stats" +#: views/index.hbs:16 +msgid "Click Stats" msgstr "" -#: views/index.hbs:18 +#: views/index.hbs:17 msgid "" "After a campaign is sent, check individual click statistics for every link " "included in the message." msgstr "" #: views/index.hbs:19 -msgid "Open source" +msgid "Template Editors" msgstr "" #: views/index.hbs:20 -msgid "Mailtrain is available under GPLv3 license and completely open source." -msgstr "" - -#: views/index.hbs:21 -msgid "Send via any provider" +msgid "" +"Mailtrain ships with GrapeJS and Mosaico built in, two advanced template " +"editors. Mailtrain also offers a code editor if you prefer to handcraft the " +"HTML yourself." msgstr "" #: views/index.hbs:22 +msgid "Send via Any Provider" +msgstr "" + +#: views/index.hbs:23 msgid "" "Mailtrain recommends TAG_NAME is empty." msgstr "" +#: views/partials/modal-carousel.hbs:1 +msgid "{{title}}" +msgstr "" + #: views/partials/mosaico.hbs:2 msgid "Open Mosaico" msgstr "" @@ -3433,10 +3453,6 @@ msgstr "" msgid "Incorrect username or password" msgstr "" -#: lib/tools.js:123 -msgid "Automation" -msgstr "" - #: lib/tools.js:133 msgid "Blocked email address \"%s\"" msgstr "" @@ -3657,6 +3673,10 @@ msgstr "" msgid "Could not delete specified field" msgstr "" +#: routes/index.js:11 +msgid "Self Hosted Newsletter App" +msgstr "" + #: routes/links.js:40 msgid "Oops, we couldn't find a link for the URL you clicked" msgstr "" From 82cac028b8e953daa391cfddec5168af39db8b7b Mon Sep 17 00:00:00 2001 From: witzig Date: Sun, 12 Mar 2017 03:06:51 +0100 Subject: [PATCH 197/483] Fixed position of API screenshot --- views/index.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/index.hbs b/views/index.hbs index 25ef0a8f..68f05f2f 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -10,6 +10,7 @@ img02='/images/screenshots/lists/view.png' img03='/images/screenshots/lists/subscription/edit.png' img04='/images/screenshots/subscription/create.png' + img05='/images/screenshots/users/api.png' }}
    @@ -118,7 +119,6 @@ cls='modal-automation' img01='/images/screenshots/triggers/create-select.png' img02='/images/screenshots/triggers/create.png' - img03='/images/screenshots/users/api.png' }}
    From 6c7a31dcb460a3c93daf807ecaa48a72512bd0d0 Mon Sep 17 00:00:00 2001 From: witzig Date: Sun, 12 Mar 2017 12:37:56 +0100 Subject: [PATCH 198/483] Updated some screenshots --- .../screenshots/campaigns/campaigns.png | Bin 90601 -> 83843 bytes .../images/screenshots/fields/edit-option.png | Bin 0 -> 115353 bytes .../images/screenshots/grapejs/editor-1.png | Bin 416823 -> 422268 bytes .../images/screenshots/mosaico/editor-1.png | Bin 612362 -> 551550 bytes .../images/screenshots/mosaico/editor-2.png | Bin 469736 -> 466041 bytes .../images/screenshots/mosaico/editor-3.png | Bin 532234 -> 505405 bytes views/index.hbs | 11 ++++++----- 7 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 public/images/screenshots/fields/edit-option.png diff --git a/public/images/screenshots/campaigns/campaigns.png b/public/images/screenshots/campaigns/campaigns.png index 298735bed8883fc252f9fafdc6d100e2c628296a..c2ef40885e5c5b56c39596d0f318f4d25375dd60 100644 GIT binary patch delta 52270 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%0DdnfMejAgl`N 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%0A+qdw0hYg6kst;U_%T9VV@f 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�mNNuHeM!#$2cKumfNd3M*mgv{UNKUDVk* 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 H=)M0RZXnp% literal 416823 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 z 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 sl9O6{?K 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�m;M^Uq_Eqleg3K$^uLPoI&E8 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%0AR7L%12MEC$0!^-4>t%Zc-o#k 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

    97L#1{RT_Ey)~>9oUv_V9eKq!7G3X^CA%jJ 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⪪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 Bk$wOG diff --git a/public/images/screenshots/mosaico/editor-1.png b/public/images/screenshots/mosaico/editor-1.png index 9e82adfdc8789740e62be620e725203dc6e4c426..d680b26e6b26d3b3656c08cd293a36071440372b 100644 GIT binary patch delta 532649 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 z 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≷94+Vw5;f-pOE+`OCvmG^XT)u4pBV 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�AHplAw#~BBnxNNkP7(fAEU+P{P5x; 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%0AqM<* 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 #Pj(%hH^V37@}% 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

     
    + + + + + + + + {{#each customForms}} + + + + + + + {{/each}} + {{#unless customForms}} + + + + {{/unless}} + +
    + # + + {{#translate}}Name{{/translate}} + + {{#translate}}Description{{/translate}} + +   +
    + {{index}} + + {{#if isDefaultForm}} + + {{else}} + + {{/if}} + {{name}} + + {{description}} + + + {{#translate}}Edit{{/translate}} + +
    + {{#translate}}No data available in table{{/translate}} +
    + + + +
    + + + + +
    + +   + + +
    +
    + + +


    diff --git a/views/lists/lists.hbs b/views/lists/lists.hbs index 94b1e897..64886833 100644 --- a/views/lists/lists.hbs +++ b/views/lists/lists.hbs @@ -14,34 +14,33 @@
    - - - - {{#if rows}} - {{#each rows}} - -
    + # {{#translate}}Name{{/translate}} + {{#translate}}ID{{/translate}} + {{#translate}}Subscribers{{/translate}} {{#translate}}Description{{/translate}} +  
    {{index}} + {{name}} @@ -53,11 +52,10 @@ {{subscribers}} + {{description}} - {{#translate}}Edit{{/translate}} diff --git a/views/lists/view.hbs b/views/lists/view.hbs index 40f39a9d..69a00e3c 100644 --- a/views/lists/view.hbs +++ b/views/lists/view.hbs @@ -13,6 +13,7 @@ {{#translate}}List Actions{{/translate}} diff --git a/views/reports/partials/report-fields.hbs b/views/reports/partials/report-fields.hbs index ba24828b..df53d9bb 100644 --- a/views/reports/partials/report-fields.hbs +++ b/views/reports/partials/report-fields.hbs @@ -44,6 +44,30 @@ {{/case}} + {{#case "list"}} +
    + +
    +
    + + + + + + +
    + # + + {{#translate}}Name{{/translate}} + + {{#translate}}Subscribers{{/translate}} +
    + +
    + {{#translate}}Select a campaign in the table above by clicking on the respective row number.{{/translate}} +
    +
    + {{/case}} {{/switch}} {{/each}} From e7d12f1dbccd62a18b15bbfe4ce08728802fa013 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Mon, 17 Apr 2017 18:31:01 -0400 Subject: [PATCH 262/483] Halfway through in refactoring the report generation to a separate process running asynchronously of the Express server. --- app.js | 118 ++++++++--------------- lib/fs-tools.js | 14 +++ lib/handlebars-helpers.js | 46 +++++++++ lib/models/reports.js | 4 +- protected/reports/.gitignore | 3 + protected/reports/README.md | 1 + routes/report-templates.js | 8 +- routes/reports.js | 182 ++++++++++++----------------------- services/reports.js | 146 ++++++++++++++++++++++++++++ setup/sql/upgrade-00027.sql | 3 + 10 files changed, 319 insertions(+), 206 deletions(-) create mode 100644 lib/fs-tools.js create mode 100644 lib/handlebars-helpers.js create mode 100644 protected/reports/.gitignore create mode 100644 protected/reports/README.md create mode 100644 services/reports.js diff --git a/app.js b/app.js index a7082983..715180a9 100644 --- a/app.js +++ b/app.js @@ -1,49 +1,50 @@ 'use strict'; -let config = require('config'); -let log = require('npmlog'); +const config = require('config'); +const log = require('npmlog'); -let _ = require('./lib/translate')._; -let util = require('util'); +const _ = require('./lib/translate')._; +const util = require('util'); -let express = require('express'); -let bodyParser = require('body-parser'); -let path = require('path'); -let favicon = require('serve-favicon'); -let logger = require('morgan'); -let cookieParser = require('cookie-parser'); -let session = require('express-session'); -let RedisStore = require('connect-redis')(session); -let flash = require('connect-flash'); -let hbs = require('hbs'); -let compression = require('compression'); -let passport = require('./lib/passport'); -let tools = require('./lib/tools'); +const express = require('express'); +const bodyParser = require('body-parser'); +const path = require('path'); +const favicon = require('serve-favicon'); +const logger = require('morgan'); +const cookieParser = require('cookie-parser'); +const session = require('express-session'); +const RedisStore = require('connect-redis')(session); +const flash = require('connect-flash'); +const hbs = require('hbs'); +const handlebarsHelpers = require('./lib/handlebars-helpers'); +const compression = require('compression'); +const passport = require('./lib/passport'); +const tools = require('./lib/tools'); -let routes = require('./routes/index'); -let users = require('./routes/users'); -let lists = require('./routes/lists'); -let settings = require('./routes/settings'); -let settingsModel = require('./lib/models/settings'); -let templates = require('./routes/templates'); -let campaigns = require('./routes/campaigns'); -let links = require('./routes/links'); -let fields = require('./routes/fields'); -let forms = require('./routes/forms'); -let segments = require('./routes/segments'); -let triggers = require('./routes/triggers'); -let webhooks = require('./routes/webhooks'); -let subscription = require('./routes/subscription'); -let archive = require('./routes/archive'); -let api = require('./routes/api'); -let blacklist = require('./routes/blacklist'); -let editorapi = require('./routes/editorapi'); -let grapejs = require('./routes/grapejs'); -let mosaico = require('./routes/mosaico'); -let reports = require('./routes/reports'); -let reportsTemplates = require('./routes/report-templates'); +const routes = require('./routes/index'); +const users = require('./routes/users'); +const lists = require('./routes/lists'); +const settings = require('./routes/settings'); +const settingsModel = require('./lib/models/settings'); +const templates = require('./routes/templates'); +const campaigns = require('./routes/campaigns'); +const links = require('./routes/links'); +const fields = require('./routes/fields'); +const forms = require('./routes/forms'); +const segments = require('./routes/segments'); +const triggers = require('./routes/triggers'); +const webhooks = require('./routes/webhooks'); +const subscription = require('./routes/subscription'); +const archive = require('./routes/archive'); +const api = require('./routes/api'); +const blacklist = require('./routes/blacklist'); +const editorapi = require('./routes/editorapi'); +const grapejs = require('./routes/grapejs'); +const mosaico = require('./routes/mosaico'); +const reports = require('./routes/reports'); +const reportsTemplates = require('./routes/report-templates'); -let app = express(); +const app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); @@ -108,43 +109,8 @@ hbs.registerHelper('flash_messages', function () { // eslint-disable-line prefer ); }); -// {{#translate}}abc{{/translate}} -hbs.registerHelper('translate', function (context, options) { // eslint-disable-line prefer-arrow-callback - if (typeof options === 'undefined' && context) { - options = context; - context = false; - } +handlebarsHelpers.registerHelpers(hbs.handlebars); - let result = _(options.fn(this)); // eslint-disable-line no-invalid-this - - if (Array.isArray(context)) { - result = util.format(result, ...context); - } - return new hbs.handlebars.SafeString(result); -}); - -/* Credits to http://chrismontrois.net/2016/01/30/handlebars-switch/ - - {{#switch letter}} - {{#case "a"}} - A is for alpaca - {{/case}} - {{#case "b"}} - B is for bluebird - {{/case}} - {{/switch}} - */ -hbs.registerHelper("switch", function(value, options) { - this._switch_value_ = value; - var html = options.fn(this); // Process the body of the switch block - delete this._switch_value_; - return html; -}); -hbs.registerHelper("case", function(value, options) { - if (value == this._switch_value_) { - return options.fn(this); - } -}); app.use(compression()); app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); diff --git a/lib/fs-tools.js b/lib/fs-tools.js new file mode 100644 index 00000000..59f126e6 --- /dev/null +++ b/lib/fs-tools.js @@ -0,0 +1,14 @@ +'use strict'; + +module.exports = { + nameToFileName, +}; + +function nameToFileName(name) { + return name. + trim(). + toLowerCase(). + replace(/[ .+/]/g, '-'). + replace(/[^a-z0-9\-_]/gi, ''). + replace(/--*/g, '-'); +} diff --git a/lib/handlebars-helpers.js b/lib/handlebars-helpers.js new file mode 100644 index 00000000..9ee22109 --- /dev/null +++ b/lib/handlebars-helpers.js @@ -0,0 +1,46 @@ +'use strict'; + +const _ = require('../lib/translate')._; + +module.exports.registerHelpers = (handlebars) => { + // {{#translate}}abc{{/translate}} + handlebars.registerHelper('translate', function (context, options) { // eslint-disable-line prefer-arrow-callback + if (typeof options === 'undefined' && context) { + options = context; + context = false; + } + + let result = _(options.fn(this)); // eslint-disable-line no-invalid-this + + if (Array.isArray(context)) { + result = util.format(result, ...context); + } + return new handlebars.SafeString(result); + }); + + + /* Credits to http://chrismontrois.net/2016/01/30/handlebars-switch/ + + {{#switch letter}} + {{#case "a"}} + A is for alpaca + {{/case}} + {{#case "b"}} + B is for bluebird + {{/case}} + {{/switch}} + */ + handlebars.registerHelper("switch", function(value, options) { + this._switch_value_ = value; + var html = options.fn(this); // Process the body of the switch block + delete this._switch_value_; + return html; + }); + + handlebars.registerHelper("case", function(value, options) { + if (value == this._switch_value_) { + return options.fn(this); + } + }); + +}; diff --git a/lib/models/reports.js b/lib/models/reports.js index d9dd3098..2d972f36 100644 --- a/lib/models/reports.js +++ b/lib/models/reports.js @@ -8,7 +8,7 @@ const tools = require('../tools'); const _ = require('../translate')._; const log = require('npmlog'); -const allowedKeys = ['name', 'description', 'report_template', 'params']; +const allowedKeys = ['name', 'description', 'report_template', 'params', 'filename']; module.exports.list = (start, limit, callback) => { tableHelpers.list('reports', ['*'], 'name', start, limit, callback); @@ -16,7 +16,7 @@ module.exports.list = (start, limit, callback) => { module.exports.filter = (request, callback) => { tableHelpers.filter('reports JOIN report_templates ON reports.report_template = report_templates.id', - ['reports.id AS id', 'reports.name AS name', 'reports.description AS description', 'reports.report_template AS report_template', 'reports.params AS params', 'reports.created AS created', 'report_templates.name AS report_template_name', 'report_templates.mime_type AS mime_type' ], + ['reports.id AS id', 'reports.name AS name', 'reports.description AS description', 'reports.state AS state', 'reports.filename AS filename', 'reports.report_template AS report_template', 'reports.params AS params', 'reports.created AS created', 'report_templates.name AS report_template_name', 'report_templates.mime_type AS mime_type' ], request, ['#', 'name', 'report_templates.name', 'description', 'created'], ['name'], 'created DESC', null, callback); }; diff --git a/protected/reports/.gitignore b/protected/reports/.gitignore new file mode 100644 index 00000000..d5b76284 --- /dev/null +++ b/protected/reports/.gitignore @@ -0,0 +1,3 @@ +* +!.gitignore +!README.md \ No newline at end of file diff --git a/protected/reports/README.md b/protected/reports/README.md new file mode 100644 index 00000000..0420f4d0 --- /dev/null +++ b/protected/reports/README.md @@ -0,0 +1 @@ +This directory serves for generated reports. \ No newline at end of file diff --git a/routes/report-templates.js b/routes/report-templates.js index 72c74f1f..638502fd 100644 --- a/routes/report-templates.js +++ b/routes/report-templates.js @@ -55,10 +55,7 @@ router.post('/ajax', (req, res) => { }); router.get('/create', passport.csrfProtection, (req, res) => { - const data = tools.convertKeys(req.query, { - skip: ['layout'] - }); - + const data = req.query; const wizard = req.query['type'] || ''; if (wizard == 'subscribers-all') { @@ -86,7 +83,6 @@ router.get('/create', passport.csrfProtection, (req, res) => { ' }\n' + '\n' + ' const data = {\n' + - ' title: "Sample Report on " + inputs.campaign.name,\n' + ' results: results\n' + ' };\n' + '\n' + @@ -152,7 +148,6 @@ router.get('/create', passport.csrfProtection, (req, res) => { ' }\n' + '\n' + ' let data = {\n' + - ' title: "Sample Report on " + inputs.campaign.name,\n' + ' results: results\n' + ' };\n' + '\n' + @@ -226,7 +221,6 @@ router.get('/create', passport.csrfProtection, (req, res) => { ' }\n' + '\n' + ' let data = {\n' + - ' title: "Sample Export of " + inputs.list.name,\n' + ' results: results\n' + ' };\n' + '\n' + diff --git a/routes/reports.js b/routes/reports.js index 645c7bc9..5006668c 100644 --- a/routes/reports.js +++ b/routes/reports.js @@ -12,8 +12,8 @@ const tools = require('../lib/tools'); const util = require('util'); const htmlescape = require('escape-html'); const striptags = require('striptags'); -const hbs = require('hbs'); -const vm = require('vm'); +const fs = require('fs'); +const fsTools = require('../lib/fs-tools'); router.all('/*', (req, res, next) => { if (!req.user) { @@ -31,10 +31,23 @@ router.get('/', (req, res) => { }); router.post('/ajax', (req, res) => { - function getViewIcon(mimeType) { - let icon = 'search'; - if (mimeType == 'text/csv') icon = 'download-alt'; - return icon; + function getViewLink(row) { + if (row.state == 0) { + // TODO: Render waiting + // TODO: Add error output + return ' '; + } else if (row.state == 1) { + let icon = 'eye-open'; + if (row.mimeType == 'text/csv') icon = 'download-alt'; + + // TODO: Add error output + return ' '; + } else if (row.state == 2) { + // TODO: Add error output + return ' '; + } + + return ''; } reports.filter(req.body, (err, data, total, filteredTotal) => { @@ -55,7 +68,7 @@ router.post('/ajax', (req, res) => { htmlescape(row.reportTemplateName || ''), htmlescape(striptags(row.description) || ''), '' + row.created.toISOString() + '', - ' ' + + getViewLink(row) + ''] ) }); @@ -63,10 +76,7 @@ router.post('/ajax', (req, res) => { }); router.get('/create', passport.csrfProtection, (req, res) => { - const reqData = tools.convertKeys(req.query, { - skip: ['layout'] - }); - + const reqData = req.query; reqData.csrfToken = req.csrfToken(); reqData.title = _('Create Report'); reqData.useEditor = true; @@ -106,6 +116,8 @@ router.get('/create', passport.csrfProtection, (req, res) => { router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) => { const reqData = req.body; + delete reqData.filename; // This is to make sure no one inserts a fake filename when editing the report. + const reportTemplateId = Number(reqData.reportTemplate); addParamsObject(reportTemplateId, reqData, (err, data) => { @@ -126,10 +138,7 @@ router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) = }); router.get('/edit/:id', passport.csrfProtection, (req, res) => { - const reqData = tools.convertKeys(req.query, { - skip: ['layout'] - }); - + const reqData = req.query; reports.get(req.params.id, (err, report) => { if (err || !report) { req.flash('danger', err && err.message || err || _('Could not find report with specified ID')); @@ -170,6 +179,8 @@ router.get('/edit/:id', passport.csrfProtection, (req, res) => { router.post('/edit', passport.parseForm, passport.csrfProtection, (req, res) => { const reqData = req.body; + delete reqData.filename; // This is to make sure no one inserts a fake filename when editing the report. + const reportTemplateId = Number(reqData.reportTemplate); addParamsObject(reportTemplateId, reqData, (err, data) => { @@ -216,120 +227,49 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { reportTemplates.get(report.reportTemplate, (err, reportTemplate) => { if (err) { - return callback(err); + req.flash('danger', err && err.message || err || _('Could not find report template')); + return res.redirect('/reports'); } - resolveUserFields(reportTemplate.userFieldsObject, report.paramsObject, (err, inputs) => { - if (err) { - req.flash('danger', err.message || err); - return res.redirect('/reports'); + if (report.state == 1) { + if (reportTemplate.mimeType == 'text/html') { + + fs.readFile(path.join(__dirname, '../protected/reports', report.filename + '.report'), (err, reportContent) => { + if (err) { + req.flash('danger', err && err.message || err || _('Could not find report with specified ID')); + return res.redirect('/reports'); + } + + const data = { + csrfToken: req.csrfToken(), + report: new hbs.handlebars.SafeString(reportContent), + title: report.name + }; + + res.render('reports/view', data); + }); + + } else if (reportTemplate.mimeType == 'text/csv') { + const headers = { + 'Content-Disposition': 'attachment;filename=' + fsTools.nameToFileName(report.name) + '.csv', + 'Content-Type': 'text/csv' + }; + + res.sendFile(path.join(__dirname, '../protected/reports', report.filename + '.report'), {headers: headers}); + + } else { + req.flash('danger', _('Unknown type of template')); + res.redirect('/reports'); } - const sandbox = { - require: require, - inputs: inputs, - callback: (err, outputs) => { - if (err) { - req.flash('danger', err.message || err); - return res.redirect('/reports'); - } - - const hbsTmpl = hbs.handlebars.compile(reportTemplate.hbs); - const reportText = hbsTmpl(outputs); - - if (reportTemplate.mimeType == 'text/html') { - const data = { - csrfToken: req.csrfToken(), - report: new hbs.handlebars.SafeString(reportText), - title: outputs.title - }; - - res.render('reports/view', data); - - } else if (reportTemplate.mimeType == 'text/csv') { - res.set('Content-Disposition', 'attachment;filename=' + toFileName(report.name) + '.csv'); - res.set('Content-Type', 'text/csv'); - res.send(new Buffer(reportText)); - - } else { - req.flash('danger', _('Unknown type of template')); - return res.redirect('/reports'); - } - } - }; - - const script = new vm.Script(reportTemplate.js); - script.runInNewContext(sandbox, { displayErrors: true, timeout: 10000 }); - }); + } else { + req.flash('danger', err && err.message || err || _('Could not find report with specified ID')); + return res.redirect('/reports'); + } }); }); }); -function toFileName(name) { - return name. - trim(). - toLowerCase(). - replace(/[ .+/]/g, '-'). - replace(/[^a-z0-9\-_]/gi, ''); -} - -function resolveEntities(getter, ids, callback) { - const idsRemaining = ids.slice(); - const resolved = []; - - function doWork() { - if (idsRemaining.length == 0) { - return callback(null, resolved); - } - - getter(idsRemaining.shift(), (err, entity) => { - if (err) { - return callback(err); - } - - resolved.push(entity); - return doWork(); - }); - } - - setImmediate(doWork); -} - -const userFieldTypeToGetter = { - 'campaign': (id, callback) => campaigns.get(id, false, callback), - 'list': lists.get -}; - -function resolveUserFields(userFields, params, callback) { - const userFieldsRemaining = userFields.slice(); - const resolved = {}; - - function doWork() { - if (userFieldsRemaining.length == 0) { - return callback(null, resolved); - } - - const spec = userFieldsRemaining.shift(); - const getter = userFieldTypeToGetter[spec.type]; - - if (getter) { - return resolveEntities(getter, params[spec.id], (err, entities) => { - if (spec.minOccurences == 1 && spec.maxOccurences == 1) { - resolved[spec.id] = entities[0]; - } else { - resolved[spec.id] = entities; - } - - doWork(); - }); - } else { - return callback(new Error(_('Unknown user field type "' + spec.type + '".'))); - } - } - - setImmediate(doWork); -} - function addUserFields(reportTemplateId, reqData, report, callback) { reportTemplates.get(reportTemplateId, (err, reportTemplate) => { if (err) { diff --git a/services/reports.js b/services/reports.js new file mode 100644 index 00000000..866badc8 --- /dev/null +++ b/services/reports.js @@ -0,0 +1,146 @@ +'use strict'; + +const reports = require('../lib/models/reports'); +const reportTemplates = require('../lib/models/report-templates'); +const lists = require('../lib/models/lists'); +const campaigns = require('../lib/models/campaigns'); +const handlebars = require('handlebars'); +const handlebarsHelpers = require('../lib/handlebars-helpers'); +const _ = require('../lib/translate')._; +const hbs = require('hbs'); +const vm = require('vm'); +const log = require('npmlog'); +const fs = require('fs'); +const path = require('path'); +const fsTools = require('../lib/fs-tools'); + +handlebarsHelpers.registerHelpers(handlebars); + +function resolveEntities(getter, ids, callback) { + const idsRemaining = ids.slice(); + const resolved = []; + + function doWork() { + if (idsRemaining.length == 0) { + return callback(null, resolved); + } + + getter(idsRemaining.shift(), (err, entity) => { + if (err) { + return callback(err); + } + + resolved.push(entity); + return doWork(); + }); + } + + setImmediate(doWork); +} + +const userFieldTypeToGetter = { + 'campaign': (id, callback) => campaigns.get(id, false, callback), + 'list': lists.get +}; + +function resolveUserFields(userFields, params, callback) { + const userFieldsRemaining = userFields.slice(); + const resolved = {}; + + function doWork() { + if (userFieldsRemaining.length == 0) { + return callback(null, resolved); + } + + const spec = userFieldsRemaining.shift(); + const getter = userFieldTypeToGetter[spec.type]; + + if (getter) { + return resolveEntities(getter, params[spec.id], (err, entities) => { + if (spec.minOccurences == 1 && spec.maxOccurences == 1) { + resolved[spec.id] = entities[0]; + } else { + resolved[spec.id] = entities; + } + + doWork(); + }); + } else { + return callback(new Error(_('Unknown user field type "' + spec.type + '".'))); + } + } + + setImmediate(doWork); +} + +function doneSuccess(id) { + // TODO: Mark in the DB as completed + update the date/time + // TODO update the report filename in the DB + + process.exit(0); +} + +function doneFail(id) { + // TODO: Mark in the DB as failed + process.exit(1); +} + +function start(id) { + // TODO: Mark in the DB as running +} + +// TODO: Retrieve report task from the DB and run it + +function processReport(reportId) { + reports.get(reportId, (err, report) => { + if (err || !report) { + log.error('reports', err && err.message || err || _('Could not find report with specified ID')); + doneFail(reportId); + } + + reportTemplates.get(report.reportTemplate, (err, reportTemplate) => { + if (err) { + log.error('reports', err && err.message || err || _('Could not find report template')); + doneFail(reportId); + } + + resolveUserFields(reportTemplate.userFieldsObject, report.paramsObject, (err, inputs) => { + if (err) { + log.error('reports', err.message || err); + doneFail(reportId); + } + + const filename = fsTools.nameToFileName(report.name); + + const sandbox = { + require: require, + inputs: inputs, + callback: (err, outputs) => { + if (err) { + log.error('reports', err.message || err); + doneFail(reportId); + } + + const hbsTmpl = handlebars.compile(reportTemplate.hbs); + const reportText = hbsTmpl(outputs); + + fs.writeFile(path.join(__dirname, '../protected/reports', filename + '.report'), reportText, (err, reportContent) => { + if (err) { + log.error('reports', err && err.message || err || _('Could not find report with specified ID')); + doneFail(reportId); + } + + doneSuccess(reportId, filename); + process + }); + } + }; + + const script = new vm.Script(reportTemplate.js); + script.runInNewContext(sandbox, {displayErrors: true, timeout: 120000}); + }); + }); + }); +} + +processReport(1); diff --git a/setup/sql/upgrade-00027.sql b/setup/sql/upgrade-00027.sql index 628d6335..2721dcdc 100644 --- a/setup/sql/upgrade-00027.sql +++ b/setup/sql/upgrade-00027.sql @@ -22,6 +22,9 @@ CREATE TABLE `reports` ( `description` text, `report_template` int(11) unsigned NOT NULL, `params` longtext, + `filename` varchar(255) DEFAULT NULL, + `state` int(11) unsigned NOT NULL DEFAULT 0, + `last_run` DATETIME DEFAULT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `report_template` (`report_template`), From 8237dd5d77d5164587d53c073ea7470fef7da244 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Thu, 20 Apr 2017 19:42:01 -0400 Subject: [PATCH 263/483] The "Reports" feature seems functional. Some small refactoring (column widths) of rendering tables in Lists, Templates, and Campaigns so that it is the same as Reports. --- index.js | 33 +- lib/fs-tools.js | 14 - lib/models/campaigns.js | 2 +- lib/models/lists.js | 2 +- lib/models/report-templates.js | 2 +- lib/models/reports.js | 66 +++- lib/models/subscriptions.js | 2 +- lib/models/templates.js | 2 +- lib/table-helpers.js | 12 +- lib/tools.js | 10 + public/css/mailtrain.css | 8 + public/javascript/tables.js | 314 +++++++++++------- routes/report-templates.js | 2 +- routes/reports.js | 138 ++++++-- ...{reports.js => report-processor-worker.js} | 33 +- services/report-processor.js | 154 +++++++++ setup/sql/upgrade-00027.sql | 1 - views/campaigns/campaigns.hbs | 4 +- views/lists/lists.hbs | 4 +- views/reports/output.hbs | 8 + views/reports/reports.hbs | 5 +- views/templates/templates.hbs | 4 +- 22 files changed, 584 insertions(+), 236 deletions(-) delete mode 100644 lib/fs-tools.js rename services/{reports.js => report-processor-worker.js} (80%) create mode 100644 services/report-processor.js create mode 100644 views/reports/output.hbs diff --git a/index.js b/index.js index 1ef2340f..57b9d482 100644 --- a/index.js +++ b/index.js @@ -18,6 +18,7 @@ let tzupdate = require('./services/tzupdate'); let feedcheck = require('./services/feedcheck'); let dbcheck = require('./lib/dbcheck'); let tools = require('./lib/tools'); +let reportProcessor = require('./services/report-processor'); let port = config.www.port; let host = config.www.host; @@ -120,23 +121,25 @@ server.on('listening', () => { spawnSenders(() => { feedcheck(() => { postfixBounceServer(() => { - log.info('Service', 'All services started'); - if (config.group) { - try { - process.setgid(config.group); - log.info('Service', 'Changed group to "%s" (%s)', config.group, process.getgid()); - } catch (E) { - log.info('Service', 'Failed to change group to "%s" (%s)', config.group, E.message); + reportProcessor.init(() => { + log.info('Service', 'All services started'); + if (config.group) { + try { + process.setgid(config.group); + log.info('Service', 'Changed group to "%s" (%s)', config.group, process.getgid()); + } catch (E) { + log.info('Service', 'Failed to change group to "%s" (%s)', config.group, E.message); + } } - } - if (config.user) { - try { - process.setuid(config.user); - log.info('Service', 'Changed user to "%s" (%s)', config.user, process.getuid()); - } catch (E) { - log.info('Service', 'Failed to change user to "%s" (%s)', config.user, E.message); + if (config.user) { + try { + process.setuid(config.user); + log.info('Service', 'Changed user to "%s" (%s)', config.user, process.getuid()); + } catch (E) { + log.info('Service', 'Failed to change user to "%s" (%s)', config.user, E.message); + } } - } + }); }); }); }); diff --git a/lib/fs-tools.js b/lib/fs-tools.js deleted file mode 100644 index 59f126e6..00000000 --- a/lib/fs-tools.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -module.exports = { - nameToFileName, -}; - -function nameToFileName(name) { - return name. - trim(). - toLowerCase(). - replace(/[ .+/]/g, '-'). - replace(/[^a-z0-9\-_]/gi, ''). - replace(/--*/g, '-'); -} diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index e9007dcf..1291cd78 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -19,7 +19,7 @@ let tableHelpers = require('../table-helpers'); let allowedKeys = ['description', 'from', 'address', 'reply_to', 'subject', 'editor_name', 'editor_data', 'template', 'source_url', 'list', 'segment', 'html', 'text', 'tracking_disabled']; module.exports.list = (start, limit, callback) => { - tableHelpers.list('campaigns', ['*'], 'scheduled', start, limit, callback); + tableHelpers.list('campaigns', ['*'], 'scheduled', null, start, limit, callback); }; module.exports.filter = (request, parent, callback) => { diff --git a/lib/models/lists.js b/lib/models/lists.js index 772a5820..28304722 100644 --- a/lib/models/lists.js +++ b/lib/models/lists.js @@ -10,7 +10,7 @@ let tableHelpers = require('../table-helpers'); let allowedKeys = ['description', 'default_form', 'public_subscribe']; module.exports.list = (start, limit, callback) => { - tableHelpers.list('lists', ['*'], 'name', start, limit, callback); + tableHelpers.list('lists', ['*'], 'name', null, start, limit, callback); }; module.exports.filter = (request, parent, callback) => { diff --git a/lib/models/report-templates.js b/lib/models/report-templates.js index 195472a3..e43bd7d8 100644 --- a/lib/models/report-templates.js +++ b/lib/models/report-templates.js @@ -8,7 +8,7 @@ const _ = require('../translate')._; const allowedKeys = ['name', 'description', 'mime_type', 'user_fields', 'js', 'hbs']; module.exports.list = (start, limit, callback) => { - tableHelpers.list('report_templates', ['*'], 'name', start, limit, callback); + tableHelpers.list('report_templates', ['*'], 'name', null, start, limit, callback); }; module.exports.quicklist = callback => { diff --git a/lib/models/reports.js b/lib/models/reports.js index 2d972f36..31a53c4f 100644 --- a/lib/models/reports.js +++ b/lib/models/reports.js @@ -8,16 +8,29 @@ const tools = require('../tools'); const _ = require('../translate')._; const log = require('npmlog'); -const allowedKeys = ['name', 'description', 'report_template', 'params', 'filename']; +const allowedKeys = ['name', 'description', 'report_template', 'params']; + +const ReportState = { + SCHEDULED: 0, + PROCESSING: 1, + FINISHED: 2, + FAILED: 3 +}; + +module.exports.ReportState = ReportState; module.exports.list = (start, limit, callback) => { - tableHelpers.list('reports', ['*'], 'name', start, limit, callback); + tableHelpers.list('reports', ['*'], 'name', null, start, limit, callback); }; +module.exports.listWithState = (state, start, limit, callback) => { + tableHelpers.list('reports', ['*'], 'name', { where: 'state=?', values: [state] }, start, limit, callback); +} + module.exports.filter = (request, callback) => { tableHelpers.filter('reports JOIN report_templates ON reports.report_template = report_templates.id', - ['reports.id AS id', 'reports.name AS name', 'reports.description AS description', 'reports.state AS state', 'reports.filename AS filename', 'reports.report_template AS report_template', 'reports.params AS params', 'reports.created AS created', 'report_templates.name AS report_template_name', 'report_templates.mime_type AS mime_type' ], - request, ['#', 'name', 'report_templates.name', 'description', 'created'], ['name'], 'created DESC', null, callback); + ['reports.id AS id', 'reports.name AS name', 'reports.description AS description', 'reports.state AS state', 'reports.report_template AS report_template', 'reports.params AS params', 'reports.last_run AS last_run', 'report_templates.name AS report_template_name', 'report_templates.mime_type AS mime_type' ], + request, ['#', 'name', 'report_templates.name', 'description', 'last_run'], ['name'], 'name ASC', null, callback); }; module.exports.get = (id, callback) => { @@ -60,29 +73,56 @@ module.exports.get = (id, callback) => { }); }; -module.exports.createOrUpdate = (createMode, data, callback) => { - data = data || {}; +// This method is not supposed to be used for unsanitized inputs. It does not do any checks. +module.exports.updateFields = (id, fieldValueMap, callback) => { + db.getConnection((err, connection) => { + if (err) { + return next(err); + } - const id = 'id' in data ? Number(data.id) : 0; + const clauses = []; + const values = []; + for (let key of Object.keys(fieldValueMap)) { + clauses.push(tools.toDbKey(key) + '=?'); + values.push(fieldValueMap[key]); + } + + values.push(id); + + const query = 'UPDATE reports SET ' + clauses.join(', ') + ' WHERE id=? LIMIT 1'; + connection.query(query, values, (err, result) => { + connection.release(); + if (err) { + return callback(err); + } + + return callback(null, result && result.affectedRows || false) + }); + }); +}; + +module.exports.createOrUpdate = (createMode, report, callback) => { + report = report || {}; + + const id = 'id' in report ? Number(report.id) : 0; if (!createMode && id < 1) { return callback(new Error(_('Missing report ID'))); } - const template = tools.convertKeys(data); - const name = (template.name || '').toString().trim(); + const name = (report.name || '').toString().trim(); if (!name) { return callback(new Error(_('Report name must be set'))); } - const reportTemplateId = Number(template.reportTemplate); + const reportTemplateId = Number(report.reportTemplate); reportTemplates.get(reportTemplateId, (err, reportTemplate) => { if (err) { callback(err); } - const params = data.paramsObject; + const params = report.paramsObject; for (const spec of reportTemplate.userFieldsObject) { if (params[spec.id].length < spec.minOccurences) { return callback(new Error(_('At least ' + spec.minOccurences + ' rows in "' + spec.name + '" have to be selected.'))); @@ -97,8 +137,8 @@ module.exports.createOrUpdate = (createMode, data, callback) => { const values = [name, JSON.stringify(params)]; - Object.keys(template).forEach(key => { - let value = typeof template[key] === 'number' ? template[key] : (template[key] || '').toString().trim(); + Object.keys(report).forEach(key => { + let value = typeof report[key] === 'number' ? report[key] : (report[key] || '').toString().trim(); key = tools.toDbKey(key); if (key === 'description') { diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index f5fb5f84..99d32be0 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -21,7 +21,7 @@ module.exports.list = (listId, start, limit, callback) => { return callback(new Error('Missing List ID')); } - tableHelpers.list('subscription__' + listId, ['*'], 'email', start, limit, (err, rows, total) => { + tableHelpers.list('subscription__' + listId, ['*'], 'email', null, start, limit, (err, rows, total) => { if (!err) { rows = rows.map(row => tools.convertKeys(row)); } diff --git a/lib/models/templates.js b/lib/models/templates.js index 09f0abb3..a6723eef 100644 --- a/lib/models/templates.js +++ b/lib/models/templates.js @@ -8,7 +8,7 @@ let tableHelpers = require('../table-helpers'); let allowedKeys = ['description', 'editor_name', 'editor_data', 'html', 'text']; module.exports.list = (start, limit, callback) => { - tableHelpers.list('templates', ['*'], 'name', start, limit, callback); + tableHelpers.list('templates', ['*'], 'name', null, start, limit, callback); }; module.exports.filter = (request, parent, callback) => { diff --git a/lib/table-helpers.js b/lib/table-helpers.js index f5c2e6bc..2c082c2c 100644 --- a/lib/table-helpers.js +++ b/lib/table-helpers.js @@ -4,7 +4,7 @@ let db = require('./db'); let tools = require('./tools'); let log = require('npmlog'); -module.exports.list = (source, fields, orderBy, start, limit, callback) => { +module.exports.list = (source, fields, orderBy, queryData, start, limit, callback) => { db.getConnection((err, connection) => { if (err) { return callback(err); @@ -22,7 +22,15 @@ module.exports.list = (source, fields, orderBy, start, limit, callback) => { } } - connection.query('SELECT SQL_CALC_FOUND_ROWS ' + fields.join(', ') + ' FROM ' + source + ' ORDER BY ' + orderBy + ' DESC' + limitQuery, limitValues, (err, rows) => { + let whereClause = ''; + let whereValues = []; + + if (queryData) { + whereClause = ' WHERE ' + queryData.where; + whereValues = queryData.values; + } + + connection.query('SELECT SQL_CALC_FOUND_ROWS ' + fields.join(', ') + ' FROM ' + source + whereClause + ' ORDER BY ' + orderBy + ' DESC' + limitQuery, whereValues.concat(limitValues), (err, rows) => { if (err) { connection.release(); return callback(err); diff --git a/lib/tools.js b/lib/tools.js index 080afdcb..7b3074a2 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -28,6 +28,7 @@ module.exports = { prepareHtml, purifyHTML, mergeTemplateIntoLayout, + nameToFileName, workers: new Set() }; @@ -300,3 +301,12 @@ function mergeTemplateIntoLayout(template, layout, callback) { return done(template, layout); } } + +function nameToFileName(name) { + return name. + trim(). + toLowerCase(). + replace(/[ .+/]/g, '-'). + replace(/[^a-z0-9\-_]/gi, ''). + replace(/--*/g, '-'); +} diff --git a/public/css/mailtrain.css b/public/css/mailtrain.css index f8a82266..f4bf6f2f 100644 --- a/public/css/mailtrain.css +++ b/public/css/mailtrain.css @@ -38,4 +38,12 @@ tbody>tr.selected { .table-hover>tbody>tr.selected:hover { background-color: rgb(205, 212, 226); +} + +.row-actions .row-action { + padding-right: 15px; +} + +.row-actions .row-action:last-child { + padding-right: 0px; } \ No newline at end of file diff --git a/public/javascript/tables.js b/public/javascript/tables.js index 3660e2db..be91079e 100644 --- a/public/javascript/tables.js +++ b/public/javascript/tables.js @@ -4,7 +4,62 @@ 'use strict'; -(function(){ +(function() { + function refreshTargets(data) { + for (var target in data) { + var newContent = $(data[target]); + + $(target).replaceWith(newContent); + installHandlers(newContent.parent()); + } + } + + function getAjaxUrl(self) { + var topicId = self.data('topicId'); + var topicUrl = self.data('topicUrl'); + + return topicUrl + '/ajax/' + topicId; + } + + function setupAjaxRefresh() { + var self = $(this); + var ajaxUrl = getAjaxUrl(self); + + var interval = Number(self.data('interval')) || 60; + + setTimeout(function () { + $.get(ajaxUrl, function(data) { + refreshTargets(data); + }); + + }, interval * 1000); + } + + function setupAjaxAction() { + var self = $(this); + var ajaxUrl = getAjaxUrl(self); + + var processing = false; + + self.click(function () { + if (!processing) { + $.get(ajaxUrl, function (data) { + refreshTargets(data); + }); + + processing = true; + } + + return false; + }); + } + + function setupDatestring() { + var self = $(this); + self.html(moment(self.data('date')).fromNow()); + } + + function getDataTableOptions(elem) { var rowSort = $(elem).data('rowSort') || false; @@ -92,6 +147,15 @@ return opts; } + + function installHandlers(elem) { + $('.ajax-refresh', elem).each(setupAjaxRefresh); + $('.ajax-action', elem).each(setupAjaxAction); + $('.datestring', elem).each(setupDatestring); + } + + installHandlers($(document)); + $('.data-table').each(function () { var opts = getDataTableOptions(this); $(this).DataTable(opts); @@ -112,131 +176,135 @@ opts.serverSide = true; opts.processing = true; + opts.createdRow = function( row, data, dataIndex ) { + installHandlers($(row)); + } + $(this).DataTable(opts).on('draw', function () { - $('.datestring').each(function () { - $(this).html(moment($(this).data('date')).fromNow()); - }); + $('.datestring').each(setupDatestring); }); }); + $('.data-stats-pie-chart').each(function () { + var column = $(this).data('column') || 'country'; + var limit = $(this).data('limit') || 20; + var topicId = $(this).data('topicId'); + var topicUrl = $(this).data('topicUrl') || '/campaigns/clicked'; + var ajaxUrl = topicUrl + '/ajax/' + topicId + '/stats'; + var self = $(this); + + $.post(ajaxUrl, {column: column, limit: limit}, function(data) { + google.charts.load('current', {'packages':['corechart']}); + google.charts.setOnLoadCallback(drawChart); + + function drawChart() { + var gTable = new google.visualization.DataTable(); + gTable.addColumn('string', 'Column'); + gTable.addColumn('number', 'Value'); + gTable.addRows(data.data); + + var options = {'width':500, 'height':400}; + var chart = new google.visualization.PieChart(self[0]); + chart.draw(gTable, options); + } + }); + }); + + $('.datestring').each(function () { + $(this).html(moment($(this).data('date')).fromNow()); + }); + + $('.delete-form,.confirm-submit').on('submit', function (e) { + if (!confirm($(this).data('confirmMessage') || 'Are you sure? This action can not be undone')) { + e.preventDefault(); + } + }); + + $('.fm-date-us.date').datepicker({ + format: 'mm/dd/yyyy', + weekStart: 0, + autoclose: true + }); + + $('.fm-date-eur.date').datepicker({ + format: 'dd/mm/yyyy', + weekStart: 1, + autoclose: true + }); + + $('.fm-date-generic.date').datepicker({ + format: 'yyyy-mm-dd', + weekStart: 1, + autoclose: true + }); + + $('.fm-birthday-us.date').datepicker({ + format: 'mm/dd', + weekStart: 0, + autoclose: true + }); + + $('.fm-birthday-eur.date').datepicker({ + format: 'dd/mm', + weekStart: 1, + autoclose: true + }); + + $('.fm-birthday-generic.date').datepicker({ + format: 'mm-dd', + weekStart: 1, + autoclose: true + }); + + $('.page-refresh').each(function () { + var interval = Number($(this).data('interval')) || 60; + setTimeout(function () { + window.location.reload(); + }, interval * 1000); + }); + + + $('.click-select').on('click', function () { + $(this).select(); + }); + + if (typeof moment.tz !== 'undefined') { + (function () { + var tz = moment.tz.guess(); + if (tz) { + $('.tz-detect').val(tz); + } + })(); + } + + // setup SMTP check + var smtpForm = document.querySelector('form#smtp-verify'); + if (smtpForm) { + smtpForm.addEventListener('submit', function (e) { + e.preventDefault(); + + var form = document.getElementById('settings-form'); + var formData = new FormData(form); + var result = fetch('/settings/smtp-verify', { + method: 'POST', + body: formData, + credentials: 'same-origin' + }); + + var $btn = $('#verify-button').button('loading'); + + result.then(function (res) { + return res.json(); + }).then(function (data) { + alert(data.error ? 'Invalid Mailer settings\n' + data.error : data.message); + $btn.button('reset'); + }).catch(function (err) { + alert(err.message); + $btn.button('reset'); + }); + + }); + } + })(); -$('.data-stats-pie-chart').each(function () { - var column = $(this).data('column') || 'country'; - var limit = $(this).data('limit') || 20; - var topicId = $(this).data('topicId'); - var topicUrl = $(this).data('topicUrl') || '/campaigns/clicked'; - var ajaxUrl = topicUrl + '/ajax/' + topicId + '/stats'; - var self = $(this); - - $.post(ajaxUrl, {column: column, limit: limit}, function(data) { - google.charts.load('current', {'packages':['corechart']}); - google.charts.setOnLoadCallback(drawChart); - - function drawChart() { - var gTable = new google.visualization.DataTable(); - gTable.addColumn('string', 'Column'); - gTable.addColumn('number', 'Value'); - gTable.addRows(data.data); - - var options = {'width':500, 'height':400}; - var chart = new google.visualization.PieChart(self[0]); - chart.draw(gTable, options); - } - }); -}); - -$('.datestring').each(function () { - $(this).html(moment($(this).data('date')).fromNow()); -}); - -$('.delete-form,.confirm-submit').on('submit', function (e) { - if (!confirm($(this).data('confirmMessage') || 'Are you sure? This action can not be undone')) { - e.preventDefault(); - } -}); - -$('.fm-date-us.date').datepicker({ - format: 'mm/dd/yyyy', - weekStart: 0, - autoclose: true -}); - -$('.fm-date-eur.date').datepicker({ - format: 'dd/mm/yyyy', - weekStart: 1, - autoclose: true -}); - -$('.fm-date-generic.date').datepicker({ - format: 'yyyy-mm-dd', - weekStart: 1, - autoclose: true -}); - -$('.fm-birthday-us.date').datepicker({ - format: 'mm/dd', - weekStart: 0, - autoclose: true -}); - -$('.fm-birthday-eur.date').datepicker({ - format: 'dd/mm', - weekStart: 1, - autoclose: true -}); - -$('.fm-birthday-generic.date').datepicker({ - format: 'mm-dd', - weekStart: 1, - autoclose: true -}); - -$('.page-refresh').each(function () { - var interval = Number($(this).data('interval')) || 60; - setTimeout(function () { - window.location.reload(); - }, interval * 1000); -}); - -$('.click-select').on('click', function () { - $(this).select(); -}); - -if (typeof moment.tz !== 'undefined') { - (function () { - var tz = moment.tz.guess(); - if (tz) { - $('.tz-detect').val(tz); - } - })(); -} - -// setup SMTP check -var smtpForm = document.querySelector('form#smtp-verify'); -if (smtpForm) { - smtpForm.addEventListener('submit', function (e) { - e.preventDefault(); - - var form = document.getElementById('settings-form'); - var formData = new FormData(form); - var result = fetch('/settings/smtp-verify', { - method: 'POST', - body: formData, - credentials: 'same-origin' - }); - - var $btn = $('#verify-button').button('loading'); - - result.then(function (res) { - return res.json(); - }).then(function (data) { - alert(data.error ? 'Invalid Mailer settings\n' + data.error : data.message); - $btn.button('reset'); - }).catch(function (err) { - alert(err.message); - $btn.button('reset'); - }); - - }); -} diff --git a/routes/report-templates.js b/routes/report-templates.js index 638502fd..5393ccb4 100644 --- a/routes/report-templates.js +++ b/routes/report-templates.js @@ -93,7 +93,7 @@ router.get('/create', passport.csrfProtection, (req, res) => { '

    {{title}}

    \n' + '\n' + '
    \n' + - ' \n' + + '
    \n' + ' \n' + '
    \n' + ' {{#translate}}Email{{/translate}}\n' + diff --git a/routes/reports.js b/routes/reports.js index 5006668c..af15abce 100644 --- a/routes/reports.js +++ b/routes/reports.js @@ -6,6 +6,7 @@ const router = new express.Router(); const _ = require('../lib/translate')._; const reportTemplates = require('../lib/models/report-templates'); const reports = require('../lib/models/reports'); +const reportProcessor = require('../services/report-processor'); const campaigns = require('../lib/models/campaigns'); const lists = require('../lib/models/lists'); const tools = require('../lib/tools'); @@ -13,7 +14,7 @@ const util = require('util'); const htmlescape = require('escape-html'); const striptags = require('striptags'); const fs = require('fs'); -const fsTools = require('../lib/fs-tools'); +const hbs = require('hbs'); router.all('/*', (req, res, next) => { if (!req.user) { @@ -30,26 +31,9 @@ router.get('/', (req, res) => { }); }); + + router.post('/ajax', (req, res) => { - function getViewLink(row) { - if (row.state == 0) { - // TODO: Render waiting - // TODO: Add error output - return ' '; - } else if (row.state == 1) { - let icon = 'eye-open'; - if (row.mimeType == 'text/csv') icon = 'download-alt'; - - // TODO: Add error output - return ' '; - } else if (row.state == 2) { - // TODO: Add error output - return ' '; - } - - return ''; - } - reports.filter(req.body, (err, data, total, filteredTotal) => { if (err) { return res.json({ @@ -67,14 +51,29 @@ router.post('/ajax', (req, res) => { htmlescape(row.name || ''), htmlescape(row.reportTemplateName || ''), htmlescape(striptags(row.description) || ''), - '' + row.created.toISOString() + '', - getViewLink(row) + - ''] - ) + getRowLastRun(row), + getRowActions(row) + ]) }); }); }); +router.get('/row/ajax/:id', (req, res) => { + respondRowActions(req.params.id, res); +}); + +router.get('/start/ajax/:id', (req, res) => { + reportProcessor.start(req.params.id, () => { + respondRowActions(req.params.id, res); + }); +}); + +router.get('/stop/ajax/:id', (req, res) => { + reportProcessor.stop(req.params.id, () => { + respondRowActions(req.params.id, res); + }); +}); + router.get('/create', passport.csrfProtection, (req, res) => { const reqData = req.query; reqData.csrfToken = req.csrfToken(); @@ -116,7 +115,6 @@ router.get('/create', passport.csrfProtection, (req, res) => { router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) => { const reqData = req.body; - delete reqData.filename; // This is to make sure no one inserts a fake filename when editing the report. const reportTemplateId = Number(reqData.reportTemplate); @@ -131,6 +129,9 @@ router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) = req.flash('danger', err && err.message || err || _('Could not create report')); return res.redirect('/reports/create?' + tools.queryParams(data)); } + + reportProcessor.start(id); + req.flash('success', util.format(_('Report “%s” created'), data.name)); res.redirect('/reports'); }); @@ -179,8 +180,6 @@ router.get('/edit/:id', passport.csrfProtection, (req, res) => { router.post('/edit', passport.parseForm, passport.csrfProtection, (req, res) => { const reqData = req.body; - delete reqData.filename; // This is to make sure no one inserts a fake filename when editing the report. - const reportTemplateId = Number(reqData.reportTemplate); addParamsObject(reportTemplateId, reqData, (err, data) => { @@ -231,10 +230,10 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { return res.redirect('/reports'); } - if (report.state == 1) { + if (report.state == reports.ReportState.FINISHED) { if (reportTemplate.mimeType == 'text/html') { - fs.readFile(path.join(__dirname, '../protected/reports', report.filename + '.report'), (err, reportContent) => { + fs.readFile(reportProcessor.getFileName(report, 'report'), (err, reportContent) => { if (err) { req.flash('danger', err && err.message || err || _('Could not find report with specified ID')); return res.redirect('/reports'); @@ -251,11 +250,11 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { } else if (reportTemplate.mimeType == 'text/csv') { const headers = { - 'Content-Disposition': 'attachment;filename=' + fsTools.nameToFileName(report.name) + '.csv', + 'Content-Disposition': 'attachment;filename=' + tools.nameToFileName(report.name) + '.csv', 'Content-Type': 'text/csv' }; - res.sendFile(path.join(__dirname, '../protected/reports', report.filename + '.report'), {headers: headers}); + res.sendFile(reportProcessor.getFileName(report, 'report'), {headers: headers}); } else { req.flash('danger', _('Unknown type of template')); @@ -270,6 +269,83 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { }); }); +router.get('/output/:id', passport.csrfProtection, (req, res) => { + reports.get(req.params.id, (err, report) => { + if (err || !report) { + req.flash('danger', err && err.message || err || _('Could not find report with specified ID')); + return res.redirect('/reports'); + } + + fs.readFile(reportProcessor.getFileName(report, 'output'), (err, output) => { + let data = { + csrfToken: req.csrfToken(), + title: 'Output for report ' + report.name + }; + + if (err) { + data.error = 'No output.'; + } else { + data.output = output; + } + + res.render('reports/output', data); + }); + }); +}); + +function getRowLastRun(row) { + return '' + (row.lastRun ? '' + row.lastRun.toISOString() + '' : '') + ''; +} + +function getRowActions(row) { + let requestRefresh = false; + let view, startStop; + let topic = 'data-topic-id="' + row.id + '"'; + + if (row.state == reports.ReportState.PROCESSING || row.state == reports.ReportState.SCHEDULED) { + view = ''; + startStop = ''; + requestRefresh = true; + + } else if (row.state == reports.ReportState.FINISHED) { + let icon = 'eye-open'; + if (row.mimeType == 'text/csv') icon = 'download-alt'; + + view = ''; + startStop = ''; + + } else if (row.state == reports.ReportState.FAILED) { + view = ''; + startStop = ''; + } + + let actions = view; + actions += ''; + actions += startStop; + actions += ''; + + return '' + + actions + + ''; +} + +function respondRowActions(id, res) { + reports.get(id, (err, report) => { + if (err) { + return res.json({ + error: err, + }); + } + + const data = {}; + data['#row-last-run-' + id] = getRowLastRun(report); + data['#row-actions-' + id] = getRowActions(report); + + res.json(data); + }); +} + + function addUserFields(reportTemplateId, reqData, report, callback) { reportTemplates.get(reportTemplateId, (err, reportTemplate) => { if (err) { diff --git a/services/reports.js b/services/report-processor-worker.js similarity index 80% rename from services/reports.js rename to services/report-processor-worker.js index 866badc8..d4141bd6 100644 --- a/services/reports.js +++ b/services/report-processor-worker.js @@ -11,8 +11,7 @@ const hbs = require('hbs'); const vm = require('vm'); const log = require('npmlog'); const fs = require('fs'); -const path = require('path'); -const fsTools = require('../lib/fs-tools'); +const reportProcessor = require('./report-processor'); handlebarsHelpers.registerHelpers(handlebars); @@ -74,64 +73,52 @@ function resolveUserFields(userFields, params, callback) { } function doneSuccess(id) { - // TODO: Mark in the DB as completed + update the date/time - // TODO update the report filename in the DB - process.exit(0); } function doneFail(id) { - // TODO: Mark in the DB as failed process.exit(1); } -function start(id) { - // TODO: Mark in the DB as running -} - -// TODO: Retrieve report task from the DB and run it - function processReport(reportId) { reports.get(reportId, (err, report) => { if (err || !report) { log.error('reports', err && err.message || err || _('Could not find report with specified ID')); - doneFail(reportId); + doneFail(); } reportTemplates.get(report.reportTemplate, (err, reportTemplate) => { if (err) { log.error('reports', err && err.message || err || _('Could not find report template')); - doneFail(reportId); + doneFail(); } resolveUserFields(reportTemplate.userFieldsObject, report.paramsObject, (err, inputs) => { if (err) { log.error('reports', err.message || err); - doneFail(reportId); + doneFail(); } - const filename = fsTools.nameToFileName(report.name); - const sandbox = { require: require, inputs: inputs, + console: console, callback: (err, outputs) => { if (err) { log.error('reports', err.message || err); - doneFail(reportId); + doneFail(); } const hbsTmpl = handlebars.compile(reportTemplate.hbs); const reportText = hbsTmpl(outputs); - fs.writeFile(path.join(__dirname, '../protected/reports', filename + '.report'), reportText, (err, reportContent) => { + fs.writeFile(reportProcessor.getFileName(report, 'report'), reportText, (err, reportContent) => { if (err) { log.error('reports', err && err.message || err || _('Could not find report with specified ID')); - doneFail(reportId); + doneFail(); } - doneSuccess(reportId, filename); - process + doneSuccess(); }); } }; @@ -143,4 +130,4 @@ function processReport(reportId) { }); } -processReport(1); +processReport(Number(process.argv[2])); diff --git a/services/report-processor.js b/services/report-processor.js new file mode 100644 index 00000000..be6cadf1 --- /dev/null +++ b/services/report-processor.js @@ -0,0 +1,154 @@ +'use strict'; + +const log = require('npmlog'); +const db = require('../lib/db'); +const reports = require('../lib/models/reports'); +const _ = require('../lib/translate')._; +const path = require('path'); +const tools = require('../lib/tools'); +const fs = require('fs'); +const fork = require('child_process').fork; + +let runningWorkersCount = 0; +let maxWorkersCount = 1; + +let workers = {}; + +function getFileName(report, suffix) { + return path.join(__dirname, '..', 'protected', 'reports', report.id + '-' + tools.nameToFileName(report.name) + '.' + suffix); +} + +module.exports.getFileName = getFileName; + +function spawnWorker(report) { + + fs.open(getFileName(report, 'output'), 'w', (err, outFd) => { + if (err) { + log.error('ReportProcessor', err); + return; + } + + runningWorkersCount++; + + const options = { + stdio: ['ignore', outFd, outFd, 'ipc'], + cwd: path.join(__dirname, '..') + }; + + let child = fork(path.join(__dirname, 'report-processor-worker.js'), [report.id], options); + let pid = child.pid; + workers[report.id] = child; + + log.info('ReportProcessor', 'Worker process for "%s" started with pid %s. Current worker count is %s.', report.name, pid, runningWorkersCount); + + child.on('close', (code, signal) => { + runningWorkersCount--; + + delete workers[report.id]; + log.info('ReportProcessor', 'Worker process for "%s" (pid %s) exited with code %s signal %s. Current worker count is %s.', report.name, pid, code, signal, runningWorkersCount); + + fs.close(outFd, (err) => { + if (err) { + log.error('ReportProcessor', err); + } + + const fields = {}; + if (code ===0 ) { + fields.state = reports.ReportState.FINISHED; + fields.lastRun = new Date(); + } else { + fields.state = reports.ReportState.FAILED; + } + + reports.updateFields(report.id, fields, (err) => { + if (err) { + log.error('ReportProcessor', err); + } + + setImmediate(worker); + }); + }); + }); + }); +}; + +function worker() { + reports.listWithState(reports.ReportState.SCHEDULED, 0, maxWorkersCount - runningWorkersCount, (err, reportList) => { + if (err) { + log.error('ReportProcessor', err); + return; + } + + for (let report of reportList) { + reports.updateFields(report.id, { state: reports.ReportState.PROCESSING }, (err) => { + if (err) { + log.error('ReportProcessor', err); + return; + } + + spawnWorker(report); + }); + } + }); +} + +module.exports.start = (reportId, callback) => { + if (!workers[reportId]) { + log.info('ReportProcessor', 'Scheduling report id: %s', reportId); + reports.updateFields(reportId, { state: reports.ReportState.SCHEDULED, lastRun: null}, (err) => { + if (err) { + return callback(err); + } + + if (runningWorkersCount < maxWorkersCount) { + log.info('ReportProcessor', 'Starting worker because runningWorkersCount=%s maxWorkersCount=%s', runningWorkersCount, maxWorkersCount); + + worker(); + } else { + log.info('ReportProcessor', 'Not starting worker because runningWorkersCount=%s maxWorkersCount=%s', runningWorkersCount, maxWorkersCount); + } + + callback(null); + }); + } else { + log.info('ReportProcessor', 'Worker for report id: %s is already running.', reportId); + } +}; + +module.exports.stop = (reportId, callback) => { + const child = workers[reportId]; + if (child) { + log.info('ReportProcessor', 'Killing worker for report id: %s', reportId); + child.kill(); + reports.updateFields(reportId, { state: reports.ReportState.FAILED}, callback); + } else { + log.info('ReportProcessor', 'No running worker found for report id: %s', reportId); + } +}; + +module.exports.init = (callback) => { + reports.listWithState(reports.ReportState.PROCESSING, 0, 0, (err, reportList) => { + if (err) { + log.error('ReportProcessor', err); + } + + function scheduleReport() { + if (reportList.length > 0) { + const report = reportList.shift(); + + reports.updateFields(report.id, { state: reports.ReportState.SCHEDULED}, (err) => { + if (err) { + log.error('ReportProcessor', err); + } + + scheduleReport(); + }); + } + + worker(); + callback(); + } + + scheduleReport(); + }); +}; diff --git a/setup/sql/upgrade-00027.sql b/setup/sql/upgrade-00027.sql index 2721dcdc..0f098534 100644 --- a/setup/sql/upgrade-00027.sql +++ b/setup/sql/upgrade-00027.sql @@ -22,7 +22,6 @@ CREATE TABLE `reports` ( `description` text, `report_template` int(11) unsigned NOT NULL, `params` longtext, - `filename` varchar(255) DEFAULT NULL, `state` int(11) unsigned NOT NULL DEFAULT 0, `last_run` DATETIME DEFAULT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, diff --git a/views/campaigns/campaigns.hbs b/views/campaigns/campaigns.hbs index 9ac302ea..39a01fb6 100644 --- a/views/campaigns/campaigns.hbs +++ b/views/campaigns/campaigns.hbs @@ -23,7 +23,7 @@
    - - diff --git a/views/lists/lists.hbs b/views/lists/lists.hbs index 93cc4918..82a935d1 100644 --- a/views/lists/lists.hbs +++ b/views/lists/lists.hbs @@ -14,7 +14,7 @@
    + # @@ -38,7 +38,7 @@ {{#translate}}Created{{/translate}} +  
    - - diff --git a/views/reports/output.hbs b/views/reports/output.hbs new file mode 100644 index 00000000..3da8d65f --- /dev/null +++ b/views/reports/output.hbs @@ -0,0 +1,8 @@ + + +{{error}} +
    {{output}}
    diff --git a/views/reports/reports.hbs b/views/reports/reports.hbs index 6998a8d2..99d2c40b 100644 --- a/views/reports/reports.hbs +++ b/views/reports/reports.hbs @@ -16,7 +16,7 @@
    + # @@ -29,7 +29,7 @@ {{#translate}}Description{{/translate}} +  
    - -
    + # @@ -31,9 +31,10 @@ {{#translate}}Created{{/translate}} +  
    + diff --git a/views/templates/templates.hbs b/views/templates/templates.hbs index 0314eb3e..e88aac21 100644 --- a/views/templates/templates.hbs +++ b/views/templates/templates.hbs @@ -14,7 +14,7 @@
    - - From bb4eb3832f5c7353431c829e5e4140419d20045b Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Thu, 20 Apr 2017 19:57:55 -0400 Subject: [PATCH 264/483] Some bugfixes to the previous commit. --- routes/reports.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/routes/reports.js b/routes/reports.js index af15abce..8e660ba4 100644 --- a/routes/reports.js +++ b/routes/reports.js @@ -130,10 +130,10 @@ router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) = return res.redirect('/reports/create?' + tools.queryParams(data)); } - reportProcessor.start(id); - - req.flash('success', util.format(_('Report “%s” created'), data.name)); - res.redirect('/reports'); + reportProcessor.start(id, () => { + req.flash('success', util.format(_('Report “%s” created'), data.name)); + res.redirect('/reports'); + }); }); }); }); From 3072632d8d5a59e4c1b4ddda95c5de7aa833b3b2 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Sun, 23 Apr 2017 15:24:31 -0400 Subject: [PATCH 265/483] Fixed eslint errors --- app.js | 1 - lib/handlebars-helpers.js | 95 ++++++++++++------------ lib/models/report-templates.js | 8 +- lib/models/reports.js | 31 ++++---- lib/table-helpers.js | 7 +- routes/reports.js | 4 +- views/reports/create-select-template.hbs | 1 - 7 files changed, 73 insertions(+), 74 deletions(-) diff --git a/app.js b/app.js index 715180a9..91af1fc0 100644 --- a/app.js +++ b/app.js @@ -4,7 +4,6 @@ const config = require('config'); const log = require('npmlog'); const _ = require('./lib/translate')._; -const util = require('util'); const express = require('express'); const bodyParser = require('body-parser'); diff --git a/lib/handlebars-helpers.js b/lib/handlebars-helpers.js index 9ee22109..10a38741 100644 --- a/lib/handlebars-helpers.js +++ b/lib/handlebars-helpers.js @@ -1,46 +1,49 @@ -'use strict'; - -const _ = require('../lib/translate')._; - -module.exports.registerHelpers = (handlebars) => { - // {{#translate}}abc{{/translate}} - handlebars.registerHelper('translate', function (context, options) { // eslint-disable-line prefer-arrow-callback - if (typeof options === 'undefined' && context) { - options = context; - context = false; - } - - let result = _(options.fn(this)); // eslint-disable-line no-invalid-this - - if (Array.isArray(context)) { - result = util.format(result, ...context); - } - return new handlebars.SafeString(result); - }); - - - /* Credits to http://chrismontrois.net/2016/01/30/handlebars-switch/ - - {{#switch letter}} - {{#case "a"}} - A is for alpaca - {{/case}} - {{#case "b"}} - B is for bluebird - {{/case}} - {{/switch}} - */ - handlebars.registerHelper("switch", function(value, options) { - this._switch_value_ = value; - var html = options.fn(this); // Process the body of the switch block - delete this._switch_value_; - return html; - }); - - handlebars.registerHelper("case", function(value, options) { - if (value == this._switch_value_) { - return options.fn(this); - } - }); - -}; +'use strict'; + +const util = require('util'); + +const _ = require('../lib/translate')._; + +module.exports.registerHelpers = handlebars => { + // {{#translate}}abc{{/translate}} + handlebars.registerHelper('translate', function (context, options) { // eslint-disable-line prefer-arrow-callback + if (typeof options === 'undefined' && context) { + options = context; + context = false; + } + + let result = _(options.fn(this)); // eslint-disable-line no-invalid-this + + if (Array.isArray(context)) { + result = util.format(result, ...context); + } + return new handlebars.SafeString(result); + }); + + + /* Credits to http://chrismontrois.net/2016/01/30/handlebars-switch/ + + {{#switch letter}} + {{#case "a"}} + A is for alpaca + {{/case}} + {{#case "b"}} + B is for bluebird + {{/case}} + {{/switch}} + */ + /* eslint no-invalid-this: "off" */ + handlebars.registerHelper('switch', function(value, options) { + this._switch_value_ = value; + const html = options.fn(this); // Process the body of the switch block + delete this._switch_value_; + return html; + }); + + handlebars.registerHelper('case', function(value, options) { + if (value === this._switch_value_) { + return options.fn(this); + } + }); + +}; diff --git a/lib/models/report-templates.js b/lib/models/report-templates.js index e43bd7d8..6dcb2c70 100644 --- a/lib/models/report-templates.js +++ b/lib/models/report-templates.js @@ -44,13 +44,13 @@ module.exports.get = (id, callback) => { const template = tools.convertKeys(rows[0]); const userFields = template.userFields.trim(); - if (userFields != '') { + if (userFields !== '') { try { template.userFieldsObject = JSON.parse(userFields); } catch (err) { // This is to handle situation when for some reason we get corrupted JSON in the DB. template.userFieldsObject = {}; - template.userFields = "{}"; + template.userFields = '{}'; } } else { template.userFieldsObject = {}; @@ -91,7 +91,7 @@ module.exports.createOrUpdate = (createMode, data, callback) => { if (key === 'user_fields') { value = value.trim(); - if (value != '') { + if (value !== '') { try { JSON.parse(value); } catch (err) { @@ -129,7 +129,7 @@ module.exports.createOrUpdate = (createMode, data, callback) => { if (createMode) { return callback(null, result && result.insertId || false); } else { - return callback(null, result && result.affectedRows || false) + return callback(null, result && result.affectedRows || false); } }); }); diff --git a/lib/models/reports.js b/lib/models/reports.js index 31a53c4f..0c6a91f9 100644 --- a/lib/models/reports.js +++ b/lib/models/reports.js @@ -6,7 +6,6 @@ const fields = require('./fields'); const reportTemplates = require('./report-templates'); const tools = require('../tools'); const _ = require('../translate')._; -const log = require('npmlog'); const allowedKeys = ['name', 'description', 'report_template', 'params']; @@ -25,7 +24,7 @@ module.exports.list = (start, limit, callback) => { module.exports.listWithState = (state, start, limit, callback) => { tableHelpers.list('reports', ['*'], 'name', { where: 'state=?', values: [state] }, start, limit, callback); -} +}; module.exports.filter = (request, callback) => { tableHelpers.filter('reports JOIN report_templates ON reports.report_template = report_templates.id', @@ -58,7 +57,7 @@ module.exports.get = (id, callback) => { const template = tools.convertKeys(rows[0]); const params = template.params.trim(); - if (params != '') { + if (params !== '') { try { template.paramsObject = JSON.parse(params); } catch (err) { @@ -77,7 +76,7 @@ module.exports.get = (id, callback) => { module.exports.updateFields = (id, fieldValueMap, callback) => { db.getConnection((err, connection) => { if (err) { - return next(err); + return callback(err); } const clauses = []; @@ -96,7 +95,7 @@ module.exports.updateFields = (id, fieldValueMap, callback) => { return callback(err); } - return callback(null, result && result.affectedRows || false) + return callback(null, result && result.affectedRows || false); }); }); }; @@ -119,7 +118,7 @@ module.exports.createOrUpdate = (createMode, report, callback) => { const reportTemplateId = Number(report.reportTemplate); reportTemplates.get(reportTemplateId, (err, reportTemplate) => { if (err) { - callback(err); + return callback(err); } const params = report.paramsObject; @@ -153,7 +152,7 @@ module.exports.createOrUpdate = (createMode, report, callback) => { db.getConnection((err, connection) => { if (err) { - return next(err); + return callback(err); } let query; @@ -174,7 +173,7 @@ module.exports.createOrUpdate = (createMode, report, callback) => { if (createMode) { return callback(null, result && result.insertId || false); } else { - return callback(null, result && result.affectedRows || false) + return callback(null, result && result.affectedRows || false); } }); }); @@ -206,13 +205,13 @@ module.exports.delete = (id, callback) => { }; const campaignFieldsMapping = { - 'tracker_count': 'tracker.count', - 'country': 'tracker.country', - 'device_type': 'tracker.device_type', - 'status': 'campaign.status', - 'first_name': 'subscribers.first_name', - 'last_name': 'subscribers.last_name', - 'email': 'subscribers.email' + tracker_count: 'tracker.count', + country: 'tracker.country', + device_type: 'tracker.device_type', + status: 'campaign.status', + first_name: 'subscribers.first_name', + last_name: 'subscribers.last_name', + email: 'subscribers.email' }; module.exports.getCampaignResults = (campaign, select, clause, callback) => { @@ -236,7 +235,7 @@ module.exports.getCampaignResults = (campaign, select, clause, callback) => { const item = select[idx]; if (item in fieldsMapping) { selFields.push(fieldsMapping[item] + ' AS ' + item); - } else if (item == '*') { + } else if (item === '*') { selFields = selFields.concat(Object.keys(fieldsMapping).map(item => fieldsMapping[item] + ' AS ' + item)); } else { selFields.push(item); diff --git a/lib/table-helpers.js b/lib/table-helpers.js index 2c082c2c..1176eba2 100644 --- a/lib/table-helpers.js +++ b/lib/table-helpers.js @@ -1,8 +1,7 @@ 'use strict'; -let db = require('./db'); -let tools = require('./tools'); -let log = require('npmlog'); +const db = require('./db'); +const tools = require('./tools'); module.exports.list = (source, fields, orderBy, queryData, start, limit, callback) => { db.getConnection((err, connection) => { @@ -107,7 +106,7 @@ module.exports.filter = (source, fields, request, columns, searchFields, default let searchVal = '%' + request.search.value.replace(/\\/g, '\\\\').replace(/([%_])/g, '\\$1') + '%'; searchWhere = searchFields.map(field => field + ' LIKE ?').join(' OR '); - searchArgs = searchFields.map(field => searchVal) + searchArgs = searchFields.map(() => searchVal); } let query = 'SELECT SQL_CALC_FOUND_ROWS ' + fields.join(', ') + ' FROM ' + source +' WHERE ' + (searchWhere ? '(' + searchWhere + ')': '1') + (queryData ? ' AND (' + queryData.where + ')' : '') + ' ORDER BY ' + ordering.join(', ') + ' LIMIT ? OFFSET ?'; diff --git a/routes/reports.js b/routes/reports.js index 8e660ba4..ecb2db0a 100644 --- a/routes/reports.js +++ b/routes/reports.js @@ -217,7 +217,7 @@ router.post('/delete', passport.parseForm, passport.csrfProtection, (req, res) = }); }); -router.get('/view/:id', passport.csrfProtection, (req, res) => { +router.get('/view/:id', (req, res) => { reports.get(req.params.id, (err, report) => { if (err || !report) { req.flash('danger', err && err.message || err || _('Could not find report with specified ID')); @@ -269,7 +269,7 @@ router.get('/view/:id', passport.csrfProtection, (req, res) => { }); }); -router.get('/output/:id', passport.csrfProtection, (req, res) => { +router.get('/output/:id', (req, res) => { reports.get(req.params.id, (err, report) => { if (err || !report) { req.flash('danger', err && err.message || err || _('Could not find report with specified ID')); diff --git a/views/reports/create-select-template.hbs b/views/reports/create-select-template.hbs index 8d868b5b..f3a64793 100644 --- a/views/reports/create-select-template.hbs +++ b/views/reports/create-select-template.hbs @@ -9,7 +9,6 @@
    - {{> report_select_template }} From 418dba7b9fdf3b626285bce92a7504bdf7adb3e0 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Tue, 25 Apr 2017 22:49:31 +0000 Subject: [PATCH 266/483] Work in progress on securing reports. --- app.js | 7 +- config/default.toml | 20 ++ index.js | 81 ++++---- lib/executor.js | 74 +++++++ lib/file-helpers.js | 33 ++++ lib/privilege-helpers.js | 131 +++++++++++++ lib/report-processor.js | 129 +++++++++++++ lib/tools.js | 22 +-- package.json | 9 +- routes/report-templates.js | 10 +- routes/reports.js | 15 +- services/executor.js | 89 +++++++++ services/report-processor-worker.js | 133 ------------- services/report-processor.js | 287 ++++++++++++++++------------ 14 files changed, 709 insertions(+), 331 deletions(-) create mode 100644 lib/executor.js create mode 100644 lib/file-helpers.js create mode 100644 lib/privilege-helpers.js create mode 100644 lib/report-processor.js create mode 100644 services/executor.js delete mode 100644 services/report-processor-worker.js diff --git a/app.js b/app.js index 91af1fc0..f8bad1bf 100644 --- a/app.js +++ b/app.js @@ -213,8 +213,11 @@ app.use('/api', api); app.use('/editorapi', editorapi); app.use('/grapejs', grapejs); app.use('/mosaico', mosaico); -app.use('/reports', reports); -app.use('/report-templates', reportsTemplates); + +if (config.reports && config.reports.enabled === true) { + app.use('/reports', reports); + app.use('/report-templates', reportsTemplates); +} // catch 404 and forward to error handler app.use((req, res, next) => { diff --git a/config/default.toml b/config/default.toml index 6293d407..54fe11c0 100644 --- a/config/default.toml +++ b/config/default.toml @@ -74,6 +74,11 @@ postsize="2MB" host="localhost" user="mailtrain" password="mailtrain" +# If more security is desired when running reports (which use user-defined JS scripts located in DB), +# one can specify a DB user with read-only permissions. If these are not specified, Mailtrain uses the +# regular DB user (which has also write permissions). +# userRO="mailtrain-ro" +# passwordRO="mailtrain-ro" database="mailtrain" # Some installations, eg. MAMP can use a different port (8889) # MAMP users should also turn on "Allow network access to MySQL" otherwise MySQL might not be accessible @@ -150,3 +155,18 @@ templates=[["versafix-1", "Versafix One"]] [grapejs] # Installed templates templates=[["demo", "Demo Template"]] + +[reports] +# The whole reporting functionality can be disabled below if the they are not needed and the DB cannot be +# properly protected. +# Reports rely on custom user defined Javascript snippets defined in the report template. The snippets are run on the +# server when generating a report. As these snippets are stored in the DB, they pose a security risk because they can +# help gaining access to the server if the DB cannot +# be properly protected (e.g. if it is shared with another application with security weaknesses). +# Mailtrain mitigates this problem by running the custom Javascript snippets in a chrooted environment and under a +# DB user that cannot modify the database (see userRO in [mysql] above). However the chrooted environment is available +# only if Mailtrain is started as root. The chrooted environment still does not prevent the custom JS script in +# performing network operations and in generating XSS attacks as part of the report. +# The bottom line is that if people who are creating report templates or have write access to the DB cannot be trusted, +# then it's safer to switch off the reporting functionality below. +enabled=false diff --git a/index.js b/index.js index 57b9d482..6893ff3e 100644 --- a/index.js +++ b/index.js @@ -4,21 +4,23 @@ * Module dependencies. */ -let config = require('config'); -let log = require('npmlog'); -let app = require('./app'); -let http = require('http'); -let fork = require('child_process').fork; -let triggers = require('./services/triggers'); -let importer = require('./services/importer'); -let verpServer = require('./services/verp-server'); -let testServer = require('./services/test-server'); -let postfixBounceServer = require('./services/postfix-bounce-server'); -let tzupdate = require('./services/tzupdate'); -let feedcheck = require('./services/feedcheck'); -let dbcheck = require('./lib/dbcheck'); -let tools = require('./lib/tools'); -let reportProcessor = require('./services/report-processor'); +const config = require('config'); +const log = require('npmlog'); +const app = require('./app'); +const http = require('http'); +const fork = require('child_process').fork; +const triggers = require('./services/triggers'); +const importer = require('./services/importer'); +const verpServer = require('./services/verp-server'); +const testServer = require('./services/test-server'); +const postfixBounceServer = require('./services/postfix-bounce-server'); +const tzupdate = require('./services/tzupdate'); +const feedcheck = require('./services/feedcheck'); +const dbcheck = require('./lib/dbcheck'); +const tools = require('./lib/tools'); +const reportProcessor = require('./lib/report-processor'); +const executor = require('./lib/executor'); +const privilegeHelpers = require('./lib/privilege-helpers'); let port = config.www.port; let host = config.www.host; @@ -113,32 +115,21 @@ server.on('listening', () => { log.info('Express', 'WWW server listening on %s', bind); // start additional services - testServer(() => { - verpServer(() => { - tzupdate(() => { - importer(() => { - triggers(() => { - spawnSenders(() => { - feedcheck(() => { - postfixBounceServer(() => { - reportProcessor.init(() => { - log.info('Service', 'All services started'); - if (config.group) { - try { - process.setgid(config.group); - log.info('Service', 'Changed group to "%s" (%s)', config.group, process.getgid()); - } catch (E) { - log.info('Service', 'Failed to change group to "%s" (%s)', config.group, E.message); - } - } - if (config.user) { - try { - process.setuid(config.user); - log.info('Service', 'Changed user to "%s" (%s)', config.user, process.getuid()); - } catch (E) { - log.info('Service', 'Failed to change user to "%s" (%s)', config.user, E.message); - } - } + function startNextServices() { + testServer(() => { + verpServer(() => { + + privilegeHelpers.dropRootPrivileges(); + + tzupdate(() => { + importer(() => { + triggers(() => { + spawnSenders(() => { + feedcheck(() => { + postfixBounceServer(() => { + reportProcessor.init(() => { + log.info('Service', 'All services started'); + }); }); }); }); @@ -147,5 +138,11 @@ server.on('listening', () => { }); }); }); - }); + } + + if (config.reports && config.reports.enabled === true) { + executor.spawn(() => startNextServices); + } else { + startNextServices(); + } }); diff --git a/lib/executor.js b/lib/executor.js new file mode 100644 index 00000000..80db9b6b --- /dev/null +++ b/lib/executor.js @@ -0,0 +1,74 @@ +'use strict'; + +const fork = require('child_process').fork; +const log = require('npmlog'); +const path = require('path'); + +const requestCallbacks = {}; +let messageTid = 0; +let executorProcess; + +module.exports = { + spawn, + start, + stop +}; + +function spawn(callback) { + log.info('Executor', 'Spawning executor process.'); + + executorProcess = fork(path.join(__dirname, '..', 'services', 'executor.js'), [], { + cwd: path.join(__dirname, '..'), + env: {NODE_ENV: process.env.NODE_ENV} + }); + + executorProcess.on('message', msg => { + if (msg) { + if (msg.type === 'process-started') { + let requestCallback = requestCallbacks[msg.tid]; + if (requestCallback && requestCallback.startedCallback) { + requestCallback.startedCallback(msg.tid); + } + + } else if (msg.type === 'process-finished') { + let requestCallback = requestCallbacks[msg.tid]; + if (requestCallback && requestCallback.startedCallback) { + requestCallback.finishedCallback(msg.code, msg.signal); + } + + delete requestCallbacks[msg.tid]; + + } else if (msg.type === 'executor-started') { + log.info('Executor', 'Executor process started.'); + return callback(); + } + } + }); + + executorProcess.on('close', (code, signal) => { + log.info('Executor', 'Executor process exited with code %s signal %s.', code, signal); + }); +} + +function start(type, data, startedCallback, finishedCallback) { + requestCallbacks[messageTid] = { + startedCallback, + finishedCallback + }; + + executorProcess.send({ + type: 'start-' + type, + data, + tid: messageTid + }); + + messageTid++; +} + +function stop(tid) { + executorProcess.send({ + type: 'stop-process', + tid + }); +} + diff --git a/lib/file-helpers.js b/lib/file-helpers.js new file mode 100644 index 00000000..aca70e02 --- /dev/null +++ b/lib/file-helpers.js @@ -0,0 +1,33 @@ +'use strict'; + +const path = require('path'); + +function nameToFileName(name) { + return name. + trim(). + toLowerCase(). + replace(/[ .+/]/g, '-'). + replace(/[^a-z0-9\-_]/gi, ''). + replace(/--*/g, '-'); +} + + +function getReportDir(report) { + return path.join(__dirname, '..', 'protected', 'reports', report.id + '-' + nameToFileName(report.name)); +} + +function getReportContentFile(report) { + return path.join(getReportDir(report), 'report'); +} + +function getReportOutputFile(report) { + return getReportDir(report) + '.output'; +} + + +module.exports = { + getReportContentFile, + getReportDir, + getReportOutputFile, + nameToFileName +}; diff --git a/lib/privilege-helpers.js b/lib/privilege-helpers.js new file mode 100644 index 00000000..ce648d70 --- /dev/null +++ b/lib/privilege-helpers.js @@ -0,0 +1,131 @@ +'use strict'; + +const log = require('npmlog'); +const config = require('config'); +const path = require('path'); + +const promise = require('bluebird'); +const fsExtra = promise.promisifyAll(require('fs-extra')); +const fs = promise.promisifyAll(require('fs')); +const walk = require('walk'); + +const tryRequire = require('try-require'); +const posix = tryRequire('posix'); + + +function ensureMailtrainOwner(file, callback) { + try { + const uid = config.user ? posix.getpwnam(config.user).uid : 0; + const gid = config.group ? posix.getgrnam(config.group).gid : 0; + + fs.chown(file, uid, gid, callback); + + } catch (err) { + return callback(err); + } +} + +function ensureMailtrainOwnerRecursive(dir, callback) { + try { + const uid = config.user ? posix.getpwnam(config.user).uid : 0; + const gid = config.group ? posix.getgrnam(config.group).gid : 0; + + fs.chown(dir, uid, gid, err => { + if (err) { + return callback(err); + } + + walk.walk(dir) + .on('node', (root, stat, next) => { + fs.chown(path.join(root, stat.name), uid, gid, next); + }) + .on('end', callback); + }); + } catch (err) { + return callback(err); + } +} + +const ensureMailtrainOwnerRecursiveAsync = promise.promisify(ensureMailtrainOwnerRecursive); + +function dropRootPrivileges() { + if (config.group) { + try { + process.setgid(config.group); + log.info('PrivilegeHelpers', 'Changed group to "%s" (%s)', config.group, process.getgid()); + } catch (E) { + log.info('PrivilegeHelpers', 'Failed to change group to "%s" (%s)', config.group, E.message); + } + } + + if (config.user) { + try { + process.setuid(config.user); + log.info('PrivilegeHelpers', 'Changed user to "%s" (%s)', config.user, process.getuid()); + } catch (E) { + log.info('PrivilegeHelpers', 'Failed to change user to "%s" (%s)', config.user, E.message); + } + } +} + +function setupChrootDir(newRoot, callback) { + try { + fsExtra.emptyDirAsync(newRoot) + .then(() => fsExtra.ensureDirAsync(path.join(newRoot, 'etc'))) + .then(() => fsExtra.copyAsync('/etc/hosts', path.join(newRoot, 'etc', 'hosts'))) + .then(() => ensureMailtrainOwnerRecursiveAsync(newRoot)) + .then(() => { + log.info('PrivilegeHelpers', 'Chroot directory "%s" set up', newRoot); + callback(); + }) + .catch(err => { + log.info('PrivilegeHelpers', 'Failed to setup chroot directory "%s"', newRoot); + callback(err); + }); + + } catch(err) { + log.info('PrivilegeHelpers', 'Failed to setup chroot directory "%s"', newRoot); + } +} + +function tearDownChrootDir(root, callback) { + if (posix) { + fsExtra.removeAsync(path.join('/', 'etc')) + .then(() => { + log.info('PrivilegeHelpers', 'Chroot directory "%s" torn down', root); + callback(); + }) + .catch(err => { + log.info('PrivilegeHelpers', 'Failed to tear down chroot directory "%s"', root); + callback(err); + }); + } +} + +function chrootAndDropRootPrivileges(newRoot) { + + try { + const uid = config.user ? posix.getpwnam(config.user).uid : 0; + const gid = config.group ? posix.getgrnam(config.group).gid : 0; + + posix.chroot(newRoot); + process.chdir('/'); + + process.setgid(gid); + process.setuid(uid); + + log.info('PrivilegeHelpers', 'Changed root to "%s" and privileges to %s.%s', newRoot, uid, gid); + } catch(err) { + log.info('PrivilegeHelpers', 'Failed to change root to "%s" and set privileges', newRoot); + } + +} + +module.exports = { + dropRootPrivileges, + chrootAndDropRootPrivileges, + setupChrootDir, + tearDownChrootDir, + ensureMailtrainOwner, + ensureMailtrainOwnerRecursive +}; diff --git a/lib/report-processor.js b/lib/report-processor.js new file mode 100644 index 00000000..09308d37 --- /dev/null +++ b/lib/report-processor.js @@ -0,0 +1,129 @@ +'use strict'; + +const log = require('npmlog'); +const reports = require('./models/reports'); +const executor = require('./executor'); + +let runningWorkersCount = 0; +let maxWorkersCount = 1; + +let workers = {}; + +function startWorker(report) { + + function onStarted(tid) { + log.info('ReportProcessor', 'Worker process for "%s" started with tid %s. Current worker count is %s.', report.name, tid, runningWorkersCount); + workers[report.id] = tid; + } + + function onFinished(code, signal) { + runningWorkersCount--; + log.info('ReportProcessor', 'Worker process for "%s" (tid %s) exited with code %s signal %s. Current worker count is %s.', report.name, workers[report.id], code, signal, runningWorkersCount); + delete workers[report.id]; + + const fields = {}; + if (code === 0) { + fields.state = reports.ReportState.FINISHED; + fields.lastRun = new Date(); + } else { + fields.state = reports.ReportState.FAILED; + } + + reports.updateFields(report.id, fields, err => { + if (err) { + log.error('ReportProcessor', err); + } + + setImmediate(startWorkers); + }); + } + + const reportData = { + id: report.id, + name: report.name + }; + + runningWorkersCount++; + executor.start('report-processor-worker', reportData, onStarted, onFinished); +} + +function startWorkers() { + reports.listWithState(reports.ReportState.SCHEDULED, 0, maxWorkersCount - runningWorkersCount, (err, reportList) => { + if (err) { + log.error('ReportProcessor', err); + return; + } + + for (let report of reportList) { + reports.updateFields(report.id, { state: reports.ReportState.PROCESSING }, err => { + if (err) { + log.error('ReportProcessor', err); + return; + } + + startWorker(report); + }); + } + }); +} + +module.exports.start = (reportId, callback) => { + if (!workers[reportId]) { + log.info('ReportProcessor', 'Scheduling report id: %s', reportId); + reports.updateFields(reportId, { state: reports.ReportState.SCHEDULED, lastRun: null}, err => { + if (err) { + return callback(err); + } + + if (runningWorkersCount < maxWorkersCount) { + log.info('ReportProcessor', 'Starting worker because runningWorkersCount=%s maxWorkersCount=%s', runningWorkersCount, maxWorkersCount); + + startWorkers(); + } else { + log.info('ReportProcessor', 'Not starting worker because runningWorkersCount=%s maxWorkersCount=%s', runningWorkersCount, maxWorkersCount); + } + + callback(null); + }); + } else { + log.info('ReportProcessor', 'Worker for report id: %s is already running.', reportId); + } +}; + +module.exports.stop = (reportId, callback) => { + const tid = workers[reportId]; + if (tid) { + log.info('ReportProcessor', 'Killing worker for report id: %s', reportId); + executor.stop(tid); + reports.updateFields(reportId, { state: reports.ReportState.FAILED}, callback); + } else { + log.info('ReportProcessor', 'No running worker found for report id: %s', reportId); + } +}; + +module.exports.init = callback => { + reports.listWithState(reports.ReportState.PROCESSING, 0, 0, (err, reportList) => { + if (err) { + log.error('ReportProcessor', err); + } + + function scheduleReport() { + if (reportList.length > 0) { + const report = reportList.shift(); + + reports.updateFields(report.id, { state: reports.ReportState.SCHEDULED}, err => { + if (err) { + log.error('ReportProcessor', err); + } + + scheduleReport(); + }); + } + + startWorkers(); + return callback(); + } + + scheduleReport(); + }); +}; diff --git a/lib/tools.js b/lib/tools.js index 7b3074a2..2c508917 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -1,5 +1,6 @@ 'use strict'; +const config = require('config'); let fs = require('fs'); let path = require('path'); let db = require('./db'); @@ -28,7 +29,6 @@ module.exports = { prepareHtml, purifyHTML, mergeTemplateIntoLayout, - nameToFileName, workers: new Set() }; @@ -130,11 +130,15 @@ function updateMenu(res) { title: _('Automation'), url: '/triggers', key: 'triggers' - }, { - title: _('Reports'), - url: '/reports', - key: 'reports' }); + + if (config.reports && config.reports.enabled === true) { + res.locals.menu.push({ + title: _('Reports'), + url: '/reports', + key: 'reports' + }); + } } function validateEmail(address, checkBlocked, callback) { @@ -302,11 +306,3 @@ function mergeTemplateIntoLayout(template, layout, callback) { } } -function nameToFileName(name) { - return name. - trim(). - toLowerCase(). - replace(/[ .+/]/g, '-'). - replace(/[^a-z0-9\-_]/gi, ''). - replace(/--*/g, '-'); -} diff --git a/package.json b/package.json index 4d95835d..80a97843 100644 --- a/package.json +++ b/package.json @@ -33,10 +33,14 @@ "grunt-eslint": "^19.0.0", "jsxgettext-andris": "^0.9.0-patch.1" }, + "optionalDependencies": { + "posix": "^4.1.1" + }, "dependencies": { "async": "^2.3.0", "aws-sdk": "^2.37.0", "bcrypt-nodejs": "0.0.3", + "bluebird": "^3.5.0", "body-parser": "^1.17.1", "bounce-handler": "^7.3.2-fork.2", "compression": "^1.6.2", @@ -56,6 +60,7 @@ "faker": "^4.1.0", "feedparser": "^2.1.0", "file-type": "^4.1.0", + "fs-extra": "^2.1.2", "geoip-ultralight": "^0.1.5", "gettext-parser": "^1.2.2", "gm": "^1.23.0", @@ -97,6 +102,8 @@ "slugify": "^1.1.0", "smtp-server": "^2.0.3", "striptags": "^3.0.1", - "toml": "^2.3.2" + "toml": "^2.3.2", + "try-require": "^1.2.1", + "walk": "^2.3.9" } } diff --git a/routes/report-templates.js b/routes/report-templates.js index 5393ccb4..f411dd47 100644 --- a/routes/report-templates.js +++ b/routes/report-templates.js @@ -75,9 +75,7 @@ router.get('/create', passport.csrfProtection, (req, res) => { ']'; if (!('js' in data)) data.js = - 'const reports = require("../lib/models/reports");\n' + - '\n' + - 'reports.getCampaignResults(inputs.campaign, ["*"], "", (err, results) => {\n' + + 'campaigns.results(inputs.campaign, ["*"], "", (err, results) => {\n' + ' if (err) {\n' + ' return callback(err);\n' + ' }\n' + @@ -136,9 +134,7 @@ router.get('/create', passport.csrfProtection, (req, res) => { ']'; if (!('js' in data)) data.js = - 'const reports = require("../lib/models/reports");\n' + - '\n' + - 'reports.getCampaignResults(inputs.campaign, ["custom_country", "count(*) AS count_all", "SUM(IF(tracker.count IS NULL, 0, 1)) AS count_opened"], "GROUP BY custom_country", (err, results) => {\n' + + 'campaigns.results(inputs.campaign, ["custom_country", "count(*) AS count_all", "SUM(IF(tracker.count IS NULL, 0, 1)) AS count_opened"], "GROUP BY custom_country", (err, results) => {\n' + ' if (err) {\n' + ' return callback(err);\n' + ' }\n' + @@ -213,8 +209,6 @@ router.get('/create', passport.csrfProtection, (req, res) => { ']'; if (!('js' in data)) data.js = - 'const subscriptions = require("../lib/models/subscriptions");\n' + - '\n' + 'subscriptions.list(inputs.list.id,0,0, (err, results) => {\n' + ' if (err) {\n' + ' return callback(err);\n' + diff --git a/routes/reports.js b/routes/reports.js index ecb2db0a..f1d52e9f 100644 --- a/routes/reports.js +++ b/routes/reports.js @@ -6,10 +6,11 @@ const router = new express.Router(); const _ = require('../lib/translate')._; const reportTemplates = require('../lib/models/report-templates'); const reports = require('../lib/models/reports'); -const reportProcessor = require('../services/report-processor'); +const reportProcessor = require('../lib/report-processor'); const campaigns = require('../lib/models/campaigns'); const lists = require('../lib/models/lists'); const tools = require('../lib/tools'); +const fileHelpers = require('../lib/file-helpers'); const util = require('util'); const htmlescape = require('escape-html'); const striptags = require('striptags'); @@ -233,14 +234,13 @@ router.get('/view/:id', (req, res) => { if (report.state == reports.ReportState.FINISHED) { if (reportTemplate.mimeType == 'text/html') { - fs.readFile(reportProcessor.getFileName(report, 'report'), (err, reportContent) => { + fs.readFile(fileHelpers.getReportContentFile(report), (err, reportContent) => { if (err) { req.flash('danger', err && err.message || err || _('Could not find report with specified ID')); return res.redirect('/reports'); } const data = { - csrfToken: req.csrfToken(), report: new hbs.handlebars.SafeString(reportContent), title: report.name }; @@ -250,11 +250,11 @@ router.get('/view/:id', (req, res) => { } else if (reportTemplate.mimeType == 'text/csv') { const headers = { - 'Content-Disposition': 'attachment;filename=' + tools.nameToFileName(report.name) + '.csv', + 'Content-Disposition': 'attachment;filename=' + fileHelpers.nameToFileName(report.name) + '.csv', 'Content-Type': 'text/csv' }; - res.sendFile(reportProcessor.getFileName(report, 'report'), {headers: headers}); + res.sendFile(fileHelpers.getReportContentFile(report), {headers: headers}); } else { req.flash('danger', _('Unknown type of template')); @@ -276,9 +276,8 @@ router.get('/output/:id', (req, res) => { return res.redirect('/reports'); } - fs.readFile(reportProcessor.getFileName(report, 'output'), (err, output) => { + fs.readFile(fileHelpers.getReportOutputFile(report), (err, output) => { let data = { - csrfToken: req.csrfToken(), title: 'Output for report ' + report.name }; @@ -298,6 +297,8 @@ function getRowLastRun(row) { } function getRowActions(row) { + /* FIXME: add csrf protection to stop and refresh actions */ + let requestRefresh = false; let view, startStop; let topic = 'data-topic-id="' + row.id + '"'; diff --git a/services/executor.js b/services/executor.js new file mode 100644 index 00000000..8873a66b --- /dev/null +++ b/services/executor.js @@ -0,0 +1,89 @@ +'use strict'; + +/* Privileged executor. If Mailtrain is started as root, this process keeps the root privilege to be able to spawn workers + that can chroot. + */ + +const fileHelpers = require('../lib/file-helpers'); +const fork = require('child_process').fork; +const path = require('path'); +const log = require('npmlog'); +const fs = require('fs'); +const privilegeHelpers = require('../lib/privilege-helpers'); + +let processes = {}; + +function spawnProcess(tid, executable, args, outputFile, cwd) { + + fs.open(outputFile, 'w', (err, outFd) => { + if (err) { + log.error('Executor', err); + return; + } + + privilegeHelpers.ensureMailtrainOwner(outputFile, (err) => { + if (err) { + log.info('Executor', 'Cannot change owner of output file of process tid:%s.', tid) + } + + const options = { + stdio: ['ignore', outFd, outFd, 'ipc'], + cwd: cwd, + env: {NODE_ENV: process.env.NODE_ENV} + }; + + const child = fork(executable, args, options); + const pid = child.pid; + processes[tid] = child; + + log.info('Executor', 'Process started with tid:%s pid:%s.', tid, pid); + process.send({ + type: 'process-started', + tid + }); + + child.on('close', (code, signal) => { + + delete processes[tid]; + log.info('Executor', 'Process tid:%s pid:%s exited with code %s signal %s.', tid, pid, code, signal); + + fs.close(outFd, (err) => { + if (err) { + log.error('Executor', err); + } + + process.send({ + type: 'process-finished', + tid, + code, + signal + }); + }); + }); + }); + }); +} + +process.on('message', msg => { + if (msg) { + const type = msg.type; + + if (type === 'start-report-processor-worker') { + spawnProcess(msg.tid, path.join(__dirname, 'report-processor.js'), [msg.data.id], fileHelpers.getReportOutputFile(msg.data), path.join(__dirname, '..')); + + } else if (type === 'stop-process') { + const child = processes[msg.tid]; + + if (child) { + log.info('Executor', 'Killing process tid:%s pid:%s', msg.tid, child.pid); + child.kill(); + } else { + log.info('Executor', 'No running process found with tid:%s pid:%s', msg.tid, child.pid); + } + } + } +}); + +process.send({ + type: 'executor-started' +}); diff --git a/services/report-processor-worker.js b/services/report-processor-worker.js deleted file mode 100644 index d4141bd6..00000000 --- a/services/report-processor-worker.js +++ /dev/null @@ -1,133 +0,0 @@ -'use strict'; - -const reports = require('../lib/models/reports'); -const reportTemplates = require('../lib/models/report-templates'); -const lists = require('../lib/models/lists'); -const campaigns = require('../lib/models/campaigns'); -const handlebars = require('handlebars'); -const handlebarsHelpers = require('../lib/handlebars-helpers'); -const _ = require('../lib/translate')._; -const hbs = require('hbs'); -const vm = require('vm'); -const log = require('npmlog'); -const fs = require('fs'); -const reportProcessor = require('./report-processor'); - -handlebarsHelpers.registerHelpers(handlebars); - -function resolveEntities(getter, ids, callback) { - const idsRemaining = ids.slice(); - const resolved = []; - - function doWork() { - if (idsRemaining.length == 0) { - return callback(null, resolved); - } - - getter(idsRemaining.shift(), (err, entity) => { - if (err) { - return callback(err); - } - - resolved.push(entity); - return doWork(); - }); - } - - setImmediate(doWork); -} - -const userFieldTypeToGetter = { - 'campaign': (id, callback) => campaigns.get(id, false, callback), - 'list': lists.get -}; - -function resolveUserFields(userFields, params, callback) { - const userFieldsRemaining = userFields.slice(); - const resolved = {}; - - function doWork() { - if (userFieldsRemaining.length == 0) { - return callback(null, resolved); - } - - const spec = userFieldsRemaining.shift(); - const getter = userFieldTypeToGetter[spec.type]; - - if (getter) { - return resolveEntities(getter, params[spec.id], (err, entities) => { - if (spec.minOccurences == 1 && spec.maxOccurences == 1) { - resolved[spec.id] = entities[0]; - } else { - resolved[spec.id] = entities; - } - - doWork(); - }); - } else { - return callback(new Error(_('Unknown user field type "' + spec.type + '".'))); - } - } - - setImmediate(doWork); -} - -function doneSuccess(id) { - process.exit(0); -} - -function doneFail(id) { - process.exit(1); -} - -function processReport(reportId) { - reports.get(reportId, (err, report) => { - if (err || !report) { - log.error('reports', err && err.message || err || _('Could not find report with specified ID')); - doneFail(); - } - - reportTemplates.get(report.reportTemplate, (err, reportTemplate) => { - if (err) { - log.error('reports', err && err.message || err || _('Could not find report template')); - doneFail(); - } - - resolveUserFields(reportTemplate.userFieldsObject, report.paramsObject, (err, inputs) => { - if (err) { - log.error('reports', err.message || err); - doneFail(); - } - - const sandbox = { - require: require, - inputs: inputs, - console: console, - callback: (err, outputs) => { - if (err) { - log.error('reports', err.message || err); - doneFail(); - } - - const hbsTmpl = handlebars.compile(reportTemplate.hbs); - const reportText = hbsTmpl(outputs); - - fs.writeFile(reportProcessor.getFileName(report, 'report'), reportText, (err, reportContent) => { - if (err) { - log.error('reports', err && err.message || err || _('Could not find report with specified ID')); - doneFail(); - } - - doneSuccess(); - }); - } - }; - - const script = new vm.Script(reportTemplate.js); - script.runInNewContext(sandbox, {displayErrors: true, timeout: 120000}); - }); - }); - }); -} - -processReport(Number(process.argv[2])); diff --git a/services/report-processor.js b/services/report-processor.js index be6cadf1..8318008a 100644 --- a/services/report-processor.js +++ b/services/report-processor.js @@ -1,154 +1,191 @@ 'use strict'; -const log = require('npmlog'); -const db = require('../lib/db'); const reports = require('../lib/models/reports'); +const reportTemplates = require('../lib/models/report-templates'); +const lists = require('../lib/models/lists'); +const subscriptions = require('../lib/models/subscriptions'); +const campaigns = require('../lib/models/campaigns'); +const handlebars = require('handlebars'); +const handlebarsHelpers = require('../lib/handlebars-helpers'); const _ = require('../lib/translate')._; -const path = require('path'); -const tools = require('../lib/tools'); +const hbs = require('hbs'); +const vm = require('vm'); +const log = require('npmlog'); const fs = require('fs'); -const fork = require('child_process').fork; +const fileHelpers = require('../lib/file-helpers'); +const path = require('path'); +const privilegeHelpers = require('../lib/privilege-helpers'); -let runningWorkersCount = 0; -let maxWorkersCount = 1; +handlebarsHelpers.registerHelpers(handlebars); -let workers = {}; +let reportId = Number(process.argv[2]); +let reportDir; -function getFileName(report, suffix) { - return path.join(__dirname, '..', 'protected', 'reports', report.id + '-' + tools.nameToFileName(report.name) + '.' + suffix); -} +function resolveEntities(getter, ids, callback) { + const idsRemaining = ids.slice(); + const resolved = []; -module.exports.getFileName = getFileName; - -function spawnWorker(report) { - - fs.open(getFileName(report, 'output'), 'w', (err, outFd) => { - if (err) { - log.error('ReportProcessor', err); - return; + function doWork() { + if (idsRemaining.length == 0) { + return callback(null, resolved); } - runningWorkersCount++; - - const options = { - stdio: ['ignore', outFd, outFd, 'ipc'], - cwd: path.join(__dirname, '..') - }; - - let child = fork(path.join(__dirname, 'report-processor-worker.js'), [report.id], options); - let pid = child.pid; - workers[report.id] = child; - - log.info('ReportProcessor', 'Worker process for "%s" started with pid %s. Current worker count is %s.', report.name, pid, runningWorkersCount); - - child.on('close', (code, signal) => { - runningWorkersCount--; - - delete workers[report.id]; - log.info('ReportProcessor', 'Worker process for "%s" (pid %s) exited with code %s signal %s. Current worker count is %s.', report.name, pid, code, signal, runningWorkersCount); - - fs.close(outFd, (err) => { - if (err) { - log.error('ReportProcessor', err); - } - - const fields = {}; - if (code ===0 ) { - fields.state = reports.ReportState.FINISHED; - fields.lastRun = new Date(); - } else { - fields.state = reports.ReportState.FAILED; - } - - reports.updateFields(report.id, fields, (err) => { - if (err) { - log.error('ReportProcessor', err); - } - - setImmediate(worker); - }); - }); - }); - }); -}; - -function worker() { - reports.listWithState(reports.ReportState.SCHEDULED, 0, maxWorkersCount - runningWorkersCount, (err, reportList) => { - if (err) { - log.error('ReportProcessor', err); - return; - } - - for (let report of reportList) { - reports.updateFields(report.id, { state: reports.ReportState.PROCESSING }, (err) => { - if (err) { - log.error('ReportProcessor', err); - return; - } - - spawnWorker(report); - }); - } - }); -} - -module.exports.start = (reportId, callback) => { - if (!workers[reportId]) { - log.info('ReportProcessor', 'Scheduling report id: %s', reportId); - reports.updateFields(reportId, { state: reports.ReportState.SCHEDULED, lastRun: null}, (err) => { + getter(idsRemaining.shift(), (err, entity) => { if (err) { return callback(err); } - if (runningWorkersCount < maxWorkersCount) { - log.info('ReportProcessor', 'Starting worker because runningWorkersCount=%s maxWorkersCount=%s', runningWorkersCount, maxWorkersCount); - - worker(); - } else { - log.info('ReportProcessor', 'Not starting worker because runningWorkersCount=%s maxWorkersCount=%s', runningWorkersCount, maxWorkersCount); - } - - callback(null); + resolved.push(entity); + return doWork(); }); - } else { - log.info('ReportProcessor', 'Worker for report id: %s is already running.', reportId); } + + setImmediate(doWork); +} + +const userFieldTypeToGetter = { + 'campaign': (id, callback) => campaigns.get(id, false, callback), + 'list': lists.get }; -module.exports.stop = (reportId, callback) => { - const child = workers[reportId]; - if (child) { - log.info('ReportProcessor', 'Killing worker for report id: %s', reportId); - child.kill(); - reports.updateFields(reportId, { state: reports.ReportState.FAILED}, callback); - } else { - log.info('ReportProcessor', 'No running worker found for report id: %s', reportId); - } -}; +function resolveUserFields(userFields, params, callback) { + const userFieldsRemaining = userFields.slice(); + const resolved = {}; -module.exports.init = (callback) => { - reports.listWithState(reports.ReportState.PROCESSING, 0, 0, (err, reportList) => { - if (err) { - log.error('ReportProcessor', err); + function doWork() { + if (userFieldsRemaining.length == 0) { + return callback(null, resolved); } - function scheduleReport() { - if (reportList.length > 0) { - const report = reportList.shift(); + const spec = userFieldsRemaining.shift(); + const getter = userFieldTypeToGetter[spec.type]; - reports.updateFields(report.id, { state: reports.ReportState.SCHEDULED}, (err) => { + if (getter) { + return resolveEntities(getter, params[spec.id], (err, entities) => { + if (spec.minOccurences == 1 && spec.maxOccurences == 1) { + resolved[spec.id] = entities[0]; + } else { + resolved[spec.id] = entities; + } + + doWork(); + }); + } else { + return callback(new Error(_('Unknown user field type "' + spec.type + '".'))); + } + } + + setImmediate(doWork); +} + +function tearDownChrootDir(callback) { + if (reportDir) { + privilegeHelpers.tearDownChrootDir(reportDir, callback); + } else { + callback(); + } +} + +function doneSuccess() { + tearDownChrootDir((err) => { + if (err) + process.exit(1) + else + process.exit(0); + }); +} + +function doneFail() { + tearDownChrootDir((err) => { + process.exit(1) + }); +} + + + +reports.get(reportId, (err, report) => { + if (err || !report) { + log.error('reports', err && err.message || err || _('Could not find report with specified ID')); + doneFail(); + return; + } + + reportTemplates.get(report.reportTemplate, (err, reportTemplate) => { + if (err) { + log.error('reports', err && err.message || err || _('Could not find report template')); + doneFail(); + return; + } + + resolveUserFields(reportTemplate.userFieldsObject, report.paramsObject, (err, inputs) => { + if (err) { + log.error('reports', err.message || err); + doneFail(); + return; + } + + const campaignsProxy = { + results: reports.getCampaignResults, + list: campaigns.list, + get: campaigns.get + }; + + const subscriptionsProxy = { + list: subscriptions.list + }; + + const reportFile = fileHelpers.getReportContentFile(report); + + const sandbox = { + console, + campaigns: campaignsProxy, + subscriptions: subscriptionsProxy, + inputs, + + callback: (err, outputs) => { if (err) { - log.error('ReportProcessor', err); + log.error('reports', err.message || err); + doneFail(); + return; } - scheduleReport(); - }); - } + const hbsTmpl = handlebars.compile(reportTemplate.hbs); + const reportText = hbsTmpl(outputs); - worker(); - callback(); - } + fs.writeFile(path.basename(reportFile), reportText, (err, reportContent) => { + if (err) { + log.error('reports', err && err.message || err || _('Could not find report with specified ID')); + doneFail(); + return; + } - scheduleReport(); + doneSuccess(); + return; + }); + } + }; + + const script = new vm.Script(reportTemplate.js); + + reportDir = fileHelpers.getReportDir(report); + privilegeHelpers.setupChrootDir(reportDir, (err) => { + if (err) { + doneFail(); + return; + } + + privilegeHelpers.chrootAndDropRootPrivileges(reportDir); + + try { + script.runInNewContext(sandbox, {displayErrors: true, timeout: 120000}); + } catch (err) { + console.log(err); + + doneFail(); + return; + } + }); + }); }); -}; +}); + From c3edf42ada1dc4c5cc67b4003c31611d9e603bfd Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Wed, 26 Apr 2017 05:20:29 -0400 Subject: [PATCH 267/483] Fixes in install script on CentOS 7 --- setup/install-centos7.sh | 11 ++++++++--- setup/mailtrain-centos7.service | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) mode change 100644 => 100755 setup/install-centos7.sh create mode 100644 setup/mailtrain-centos7.service diff --git a/setup/install-centos7.sh b/setup/install-centos7.sh old mode 100644 new mode 100755 index be9ea6dc..524d0310 --- a/setup/install-centos7.sh +++ b/setup/install-centos7.sh @@ -13,7 +13,7 @@ set -e yum -y install epel-release curl --silent --location https://rpm.nodesource.com/setup_6.x | bash - -yum -y install mariadb-server nodejs ImageMagick git python redis pwgen bind-utils +yum -y install mariadb-server nodejs ImageMagick git python redis pwgen bind-utils gcc-c++ make systemctl start mariadb systemctl enable mariadb @@ -45,7 +45,8 @@ firewall-cmd --reload # Fetch Mailtrain files mkdir -p /opt/mailtrain cd /opt/mailtrain -git clone git://github.com/Mailtrain-org/mailtrain.git . +#git clone git://github.com/Mailtrain-org/mailtrain.git . +git clone git://github.com/bures/mailtrain.git . # Normally we would let Mailtrain itself to import the initial SQL data but in this case # we need to modify it, before we start Mailtrain @@ -84,6 +85,8 @@ password="$MYSQL_PASSWORD" enabled=true [queue] processes=5 +[reports] +enabled=true EOT # Install required node packages @@ -105,7 +108,7 @@ cat < /etc/logrotate.d/mailtrain EOM # Set up systemd service script -cp setup/mailtrain.service /etc/systemd/system/ +cp setup/mailtrain-centos7.service /etc/systemd/system/mailtrain.service systemctl enable mailtrain.service # Fetch ZoneMTA files @@ -204,7 +207,9 @@ systemctl enable zone-mta.service # Start the service systemctl daemon-reload + systemctl start zone-mta.service systemctl start mailtrain.service echo "Success! Open http://$HOSTNAME/ and log in as admin:test"; + diff --git a/setup/mailtrain-centos7.service b/setup/mailtrain-centos7.service new file mode 100644 index 00000000..9fcd5b1a --- /dev/null +++ b/setup/mailtrain-centos7.service @@ -0,0 +1,16 @@ +[Unit] +Description=Mailtrain server +Requires=mariadb.service +After=syslog.target network.target + +[Service] +Environment="NODE_ENV=production" +WorkingDirectory=/opt/mailtrain +ExecStart=/usr/bin/node index.js +Type=simple +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target +# Alias=mailtrain.service From 2ac89f3365e971f09517108e268640b09bcd0a51 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 27 Apr 2017 16:35:53 -0400 Subject: [PATCH 268/483] Report processor worker refactored to run under another user (nobody) and have its own mysql credentials. --- config/default.toml | 15 +- config/reports.toml | 7 + index.js | 2 +- lib/db.js | 2 +- lib/file-helpers.js | 7 +- lib/privilege-helpers.js | 133 +++++------------- package.json | 5 +- routes/report-templates.js | 2 +- services/executor.js | 85 +++++++---- setup/install-centos7.sh | 2 + workers/reports/config/default.toml | 18 +++ workers/reports/config/production.toml | 7 + .../reports}/report-processor.js | 78 +++------- 13 files changed, 159 insertions(+), 204 deletions(-) create mode 100644 config/reports.toml create mode 100644 workers/reports/config/default.toml create mode 100644 workers/reports/config/production.toml rename {services => workers/reports}/report-processor.js (61%) diff --git a/config/default.toml b/config/default.toml index 54fe11c0..abcc128e 100644 --- a/config/default.toml +++ b/config/default.toml @@ -43,8 +43,14 @@ language="en" # If you start out as a root user (eg. if you want to use ports lower than 1000) # then you can downgrade the user once all services are up and running -#user="nobody" -#group="nogroup" +#user="mailtrain" +#group="mailtrain" + +# If Mailtrain is started as root, "Reports" feature drops the privileges of script generating the report to disallow +# any modifications of Mailtrain code and even prohibits reading the production configuration (which contains the MySQL +# password for read/write operations). The rouser/rogroup determines the user to be used +#rouser="nobody" +#rogroup="nogroup" [log] # silly|verbose|info|http|warn|error|silent @@ -74,11 +80,6 @@ postsize="2MB" host="localhost" user="mailtrain" password="mailtrain" -# If more security is desired when running reports (which use user-defined JS scripts located in DB), -# one can specify a DB user with read-only permissions. If these are not specified, Mailtrain uses the -# regular DB user (which has also write permissions). -# userRO="mailtrain-ro" -# passwordRO="mailtrain-ro" database="mailtrain" # Some installations, eg. MAMP can use a different port (8889) # MAMP users should also turn on "Allow network access to MySQL" otherwise MySQL might not be accessible diff --git a/config/reports.toml b/config/reports.toml new file mode 100644 index 00000000..53d2315e --- /dev/null +++ b/config/reports.toml @@ -0,0 +1,7 @@ +[log] +level="verbose" + +[mysql] +user="mailtrain_ro" +password="S6Woc9hwWiV9RsWt" + diff --git a/index.js b/index.js index 6893ff3e..305ec2ad 100644 --- a/index.js +++ b/index.js @@ -141,7 +141,7 @@ server.on('listening', () => { } if (config.reports && config.reports.enabled === true) { - executor.spawn(() => startNextServices); + executor.spawn(startNextServices); } else { startNextServices(); } diff --git a/lib/db.js b/lib/db.js index 095608ae..2f221d44 100644 --- a/lib/db.js +++ b/lib/db.js @@ -6,7 +6,7 @@ let redis = require('redis'); let Lock = require('redfour'); module.exports = mysql.createPool(config.mysql); -if (config.redis.enabled) { +if (config.redis && config.redis.enabled) { module.exports.redis = redis.createClient(config.redis); diff --git a/lib/file-helpers.js b/lib/file-helpers.js index aca70e02..fdad5caf 100644 --- a/lib/file-helpers.js +++ b/lib/file-helpers.js @@ -12,22 +12,21 @@ function nameToFileName(name) { } -function getReportDir(report) { +function getReportFileBase(report) { return path.join(__dirname, '..', 'protected', 'reports', report.id + '-' + nameToFileName(report.name)); } function getReportContentFile(report) { - return path.join(getReportDir(report), 'report'); + return getReportFileBase(report) + '.out'; } function getReportOutputFile(report) { - return getReportDir(report) + '.output'; + return getReportFileBase(report) + '.err'; } module.exports = { getReportContentFile, - getReportDir, getReportOutputFile, nameToFileName }; diff --git a/lib/privilege-helpers.js b/lib/privilege-helpers.js index ce648d70..708c70bc 100644 --- a/lib/privilege-helpers.js +++ b/lib/privilege-helpers.js @@ -2,52 +2,52 @@ const log = require('npmlog'); const config = require('config'); -const path = require('path'); -const promise = require('bluebird'); -const fsExtra = promise.promisifyAll(require('fs-extra')); -const fs = promise.promisifyAll(require('fs')); -const walk = require('walk'); +const fs = require('fs'); const tryRequire = require('try-require'); const posix = tryRequire('posix'); +function _getConfigUidGid(prefix) { + let uid = process.getuid(); + let gid = process.getgid(); + + if (posix) { + try { + if (config.user) { + uid = posix.getpwnam(config[prefix + 'user']).uid; + } + } catch (err) { + log.info('PrivilegeHelpers', 'Failed to resolve user id "%s"', config[prefix + 'user']); + } + + try { + if (config.user) { + gid = posix.getpwnam(config[prefix + 'group']).gid; + } + } catch (err) { + log.info('PrivilegeHelpers', 'Failed to resolve group id "%s"', config[prefix + 'group']); + } + } else { + log.info('PrivilegeHelpers', 'Posix module not installed. Cannot resolve uid/gid'); + } + + return { uid, gid }; +} + +function getConfigUidGid() { + return _getConfigUidGid(''); +} + +function getConfigROUidGid() { + return _getConfigUidGid('ro'); +} function ensureMailtrainOwner(file, callback) { - try { - const uid = config.user ? posix.getpwnam(config.user).uid : 0; - const gid = config.group ? posix.getgrnam(config.group).gid : 0; - - fs.chown(file, uid, gid, callback); - - } catch (err) { - return callback(err); - } + const ids = getConfigUidGid(); + fs.chown(file, ids.uid, ids.gid, callback); } -function ensureMailtrainOwnerRecursive(dir, callback) { - try { - const uid = config.user ? posix.getpwnam(config.user).uid : 0; - const gid = config.group ? posix.getgrnam(config.group).gid : 0; - - fs.chown(dir, uid, gid, err => { - if (err) { - return callback(err); - } - - walk.walk(dir) - .on('node', (root, stat, next) => { - fs.chown(path.join(root, stat.name), uid, gid, next); - }) - .on('end', callback); - }); - } catch (err) { - return callback(err); - } -} - -const ensureMailtrainOwnerRecursiveAsync = promise.promisify(ensureMailtrainOwnerRecursive); - function dropRootPrivileges() { if (config.group) { try { @@ -68,64 +68,9 @@ function dropRootPrivileges() { } } -function setupChrootDir(newRoot, callback) { - try { - fsExtra.emptyDirAsync(newRoot) - .then(() => fsExtra.ensureDirAsync(path.join(newRoot, 'etc'))) - .then(() => fsExtra.copyAsync('/etc/hosts', path.join(newRoot, 'etc', 'hosts'))) - .then(() => ensureMailtrainOwnerRecursiveAsync(newRoot)) - .then(() => { - log.info('PrivilegeHelpers', 'Chroot directory "%s" set up', newRoot); - callback(); - }) - .catch(err => { - log.info('PrivilegeHelpers', 'Failed to setup chroot directory "%s"', newRoot); - callback(err); - }); - - } catch(err) { - log.info('PrivilegeHelpers', 'Failed to setup chroot directory "%s"', newRoot); - } -} - -function tearDownChrootDir(root, callback) { - if (posix) { - fsExtra.removeAsync(path.join('/', 'etc')) - .then(() => { - log.info('PrivilegeHelpers', 'Chroot directory "%s" torn down', root); - callback(); - }) - .catch(err => { - log.info('PrivilegeHelpers', 'Failed to tear down chroot directory "%s"', root); - callback(err); - }); - } -} - -function chrootAndDropRootPrivileges(newRoot) { - - try { - const uid = config.user ? posix.getpwnam(config.user).uid : 0; - const gid = config.group ? posix.getgrnam(config.group).gid : 0; - - posix.chroot(newRoot); - process.chdir('/'); - - process.setgid(gid); - process.setuid(uid); - - log.info('PrivilegeHelpers', 'Changed root to "%s" and privileges to %s.%s', newRoot, uid, gid); - } catch(err) { - log.info('PrivilegeHelpers', 'Failed to change root to "%s" and set privileges', newRoot); - } - -} - module.exports = { dropRootPrivileges, - chrootAndDropRootPrivileges, - setupChrootDir, - tearDownChrootDir, ensureMailtrainOwner, - ensureMailtrainOwnerRecursive + getConfigUidGid, + getConfigROUidGid }; diff --git a/package.json b/package.json index 80a97843..7d82f7cd 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,6 @@ "async": "^2.3.0", "aws-sdk": "^2.37.0", "bcrypt-nodejs": "0.0.3", - "bluebird": "^3.5.0", "body-parser": "^1.17.1", "bounce-handler": "^7.3.2-fork.2", "compression": "^1.6.2", @@ -60,7 +59,6 @@ "faker": "^4.1.0", "feedparser": "^2.1.0", "file-type": "^4.1.0", - "fs-extra": "^2.1.2", "geoip-ultralight": "^0.1.5", "gettext-parser": "^1.2.2", "gm": "^1.23.0", @@ -103,7 +101,6 @@ "smtp-server": "^2.0.3", "striptags": "^3.0.1", "toml": "^2.3.2", - "try-require": "^1.2.1", - "walk": "^2.3.9" + "try-require": "^1.2.1" } } diff --git a/routes/report-templates.js b/routes/report-templates.js index f411dd47..7fdc4fbc 100644 --- a/routes/report-templates.js +++ b/routes/report-templates.js @@ -174,7 +174,7 @@ router.get('/create', passport.csrfProtection, (req, res) => { ' {{#each results}}\n' + '
    \n' + ' \n' + '
    + # @@ -23,7 +23,7 @@ {{#translate}}Description{{/translate}} +  
    \n' + - ' {{custom_zone}}\n' + + ' {{custom_country}}\n' + ' \n' + ' {{count_opened}}\n' + diff --git a/services/executor.js b/services/executor.js index 8873a66b..fa001578 100644 --- a/services/executor.js +++ b/services/executor.js @@ -13,50 +13,71 @@ const privilegeHelpers = require('../lib/privilege-helpers'); let processes = {}; -function spawnProcess(tid, executable, args, outputFile, cwd) { +function spawnProcess(tid, executable, args, outFile, errFile, cwd, uid, gid) { - fs.open(outputFile, 'w', (err, outFd) => { + fs.open(outFile, 'w', (err, outFd) => { if (err) { log.error('Executor', err); return; } - privilegeHelpers.ensureMailtrainOwner(outputFile, (err) => { + fs.open(errFile, 'w', (err, errFd) => { if (err) { - log.info('Executor', 'Cannot change owner of output file of process tid:%s.', tid) + log.error('Executor', err); + return; } - const options = { - stdio: ['ignore', outFd, outFd, 'ipc'], - cwd: cwd, - env: {NODE_ENV: process.env.NODE_ENV} - }; + privilegeHelpers.ensureMailtrainOwner(outFile, (err) => { + if (err) { + log.info('Executor', 'Cannot change owner of output file of process tid:%s.', tid) + } - const child = fork(executable, args, options); - const pid = child.pid; - processes[tid] = child; - - log.info('Executor', 'Process started with tid:%s pid:%s.', tid, pid); - process.send({ - type: 'process-started', - tid - }); - - child.on('close', (code, signal) => { - - delete processes[tid]; - log.info('Executor', 'Process tid:%s pid:%s exited with code %s signal %s.', tid, pid, code, signal); - - fs.close(outFd, (err) => { + privilegeHelpers.ensureMailtrainOwner(errFile, (err) => { if (err) { - log.error('Executor', err); + log.info('Executor', 'Cannot change owner of error output file of process tid:%s.', tid) } + const options = { + stdio: ['ignore', outFd, errFd, 'ipc'], + cwd, + env: {NODE_ENV: process.env.NODE_ENV}, + uid, + gid + }; + + const child = fork(executable, args, options); + const pid = child.pid; + processes[tid] = child; + + log.info('Executor', 'Process started with tid:%s pid:%s.', tid, pid); process.send({ - type: 'process-finished', - tid, - code, - signal + type: 'process-started', + tid + }); + + child.on('close', (code, signal) => { + + delete processes[tid]; + log.info('Executor', 'Process tid:%s pid:%s exited with code %s signal %s.', tid, pid, code, signal); + + fs.close(outFd, (err) => { + if (err) { + log.error('Executor', err); + } + + fs.close(errFd, (err) => { + if (err) { + log.error('Executor', err); + } + + process.send({ + type: 'process-finished', + tid, + code, + signal + }); + }); + }); }); }); }); @@ -69,7 +90,9 @@ process.on('message', msg => { const type = msg.type; if (type === 'start-report-processor-worker') { - spawnProcess(msg.tid, path.join(__dirname, 'report-processor.js'), [msg.data.id], fileHelpers.getReportOutputFile(msg.data), path.join(__dirname, '..')); + + const ids = privilegeHelpers.getConfigROUidGid(); + spawnProcess(msg.tid, path.join(__dirname, '..', 'workers', 'reports', 'report-processor.js'), [msg.data.id], fileHelpers.getReportContentFile(msg.data), fileHelpers.getReportOutputFile(msg.data), path.join(__dirname, '..', 'workers', 'reports'), ids.uid, ids.gid); } else if (type === 'stop-process') { const child = processes[msg.tid]; diff --git a/setup/install-centos7.sh b/setup/install-centos7.sh index 524d0310..938f43db 100755 --- a/setup/install-centos7.sh +++ b/setup/install-centos7.sh @@ -36,6 +36,8 @@ SMTP_PASS=`pwgen 12 -1` # Setup MySQL user for Mailtrain mysql -u root -e "CREATE USER 'mailtrain'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';" mysql -u root -e "GRANT ALL PRIVILEGES ON mailtrain.* TO 'mailtrain'@'localhost';" +mysql -u root -e "CREATE USER 'mailtrain_ro'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';" +mysql -u root -e "GRANT SELECT ON mailtrain.* TO 'mailtrain_ro'@'localhost';" mysql -u mailtrain --password="$MYSQL_PASSWORD" -e "CREATE database mailtrain;" # Enable firewall, allow connections to SSH, HTTP, HTTPS and SMTP diff --git a/workers/reports/config/default.toml b/workers/reports/config/default.toml new file mode 100644 index 00000000..9e7fb70d --- /dev/null +++ b/workers/reports/config/default.toml @@ -0,0 +1,18 @@ +# Process title visible in monitoring logs and process listing +title="mailtrain" + +# Default language to use +language="en" + +[log] +# silly|verbose|info|http|warn|error|silent +level="verbose" + +[mysql] +host="localhost" +user="mailtrain" +password="mailtrain" +database="mailtrain" +port=3306 +charset="utf8mb4" +timezone="local" diff --git a/workers/reports/config/production.toml b/workers/reports/config/production.toml new file mode 100644 index 00000000..53d2315e --- /dev/null +++ b/workers/reports/config/production.toml @@ -0,0 +1,7 @@ +[log] +level="verbose" + +[mysql] +user="mailtrain_ro" +password="S6Woc9hwWiV9RsWt" + diff --git a/services/report-processor.js b/workers/reports/report-processor.js similarity index 61% rename from services/report-processor.js rename to workers/reports/report-processor.js index 8318008a..f1c95c8d 100644 --- a/services/report-processor.js +++ b/workers/reports/report-processor.js @@ -1,20 +1,17 @@ 'use strict'; -const reports = require('../lib/models/reports'); -const reportTemplates = require('../lib/models/report-templates'); -const lists = require('../lib/models/lists'); -const subscriptions = require('../lib/models/subscriptions'); -const campaigns = require('../lib/models/campaigns'); +const reports = require('../../lib/models/reports'); +const reportTemplates = require('../../lib/models/report-templates'); +const lists = require('../../lib/models/lists'); +const subscriptions = require('../../lib/models/subscriptions'); +const campaigns = require('../../lib/models/campaigns'); const handlebars = require('handlebars'); -const handlebarsHelpers = require('../lib/handlebars-helpers'); -const _ = require('../lib/translate')._; +const handlebarsHelpers = require('../../lib/handlebars-helpers'); +const _ = require('../../lib/translate')._; const hbs = require('hbs'); const vm = require('vm'); const log = require('npmlog'); const fs = require('fs'); -const fileHelpers = require('../lib/file-helpers'); -const path = require('path'); -const privilegeHelpers = require('../lib/privilege-helpers'); handlebarsHelpers.registerHelpers(handlebars); @@ -78,27 +75,12 @@ function resolveUserFields(userFields, params, callback) { setImmediate(doWork); } -function tearDownChrootDir(callback) { - if (reportDir) { - privilegeHelpers.tearDownChrootDir(reportDir, callback); - } else { - callback(); - } -} - function doneSuccess() { - tearDownChrootDir((err) => { - if (err) - process.exit(1) - else - process.exit(0); - }); + process.exit(0); } function doneFail() { - tearDownChrootDir((err) => { - process.exit(1) - }); + process.exit(1) } @@ -107,21 +89,18 @@ reports.get(reportId, (err, report) => { if (err || !report) { log.error('reports', err && err.message || err || _('Could not find report with specified ID')); doneFail(); - return; } reportTemplates.get(report.reportTemplate, (err, reportTemplate) => { if (err) { log.error('reports', err && err.message || err || _('Could not find report template')); doneFail(); - return; } resolveUserFields(reportTemplate.userFieldsObject, report.paramsObject, (err, inputs) => { if (err) { log.error('reports', err.message || err); doneFail(); - return; } const campaignsProxy = { @@ -134,8 +113,6 @@ reports.get(reportId, (err, report) => { list: subscriptions.list }; - const reportFile = fileHelpers.getReportContentFile(report); - const sandbox = { console, campaigns: campaignsProxy, @@ -146,45 +123,24 @@ reports.get(reportId, (err, report) => { if (err) { log.error('reports', err.message || err); doneFail(); - return; } const hbsTmpl = handlebars.compile(reportTemplate.hbs); const reportText = hbsTmpl(outputs); - fs.writeFile(path.basename(reportFile), reportText, (err, reportContent) => { - if (err) { - log.error('reports', err && err.message || err || _('Could not find report with specified ID')); - doneFail(); - return; - } - - doneSuccess(); - return; - }); + process.stdout.write(reportText); + doneSuccess(); } }; const script = new vm.Script(reportTemplate.js); - reportDir = fileHelpers.getReportDir(report); - privilegeHelpers.setupChrootDir(reportDir, (err) => { - if (err) { - doneFail(); - return; - } - - privilegeHelpers.chrootAndDropRootPrivileges(reportDir); - - try { - script.runInNewContext(sandbox, {displayErrors: true, timeout: 120000}); - } catch (err) { - console.log(err); - - doneFail(); - return; - } - }); + try { + script.runInNewContext(sandbox, {displayErrors: true, timeout: 120000}); + } catch (err) { + console.error(err); + doneFail(); + } }); }); }); From 7a08ffa596b62acb7ed208d03996fab30dea34e6 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Thu, 27 Apr 2017 18:14:15 -0400 Subject: [PATCH 269/483] Fix - reports crashed if the user could not be switched (because mailtrain was not run under root). Now an error is reported. --- config/reports.toml | 7 ------- lib/executor.js | 13 +++++++++++-- lib/report-processor.js | 20 +++++++++++++++++++- services/executor.js | 25 ++++++++++++++++++++++--- 4 files changed, 52 insertions(+), 13 deletions(-) delete mode 100644 config/reports.toml diff --git a/config/reports.toml b/config/reports.toml deleted file mode 100644 index 53d2315e..00000000 --- a/config/reports.toml +++ /dev/null @@ -1,7 +0,0 @@ -[log] -level="verbose" - -[mysql] -user="mailtrain_ro" -password="S6Woc9hwWiV9RsWt" - diff --git a/lib/executor.js b/lib/executor.js index 80db9b6b..1cf1d959 100644 --- a/lib/executor.js +++ b/lib/executor.js @@ -30,6 +30,14 @@ function spawn(callback) { requestCallback.startedCallback(msg.tid); } + } else if (msg.type === 'process-failed') { + let requestCallback = requestCallbacks[msg.tid]; + if (requestCallback && requestCallback.failedCallback) { + requestCallback.failedCallback(msg.msg); + } + + delete requestCallbacks[msg.tid]; + } else if (msg.type === 'process-finished') { let requestCallback = requestCallbacks[msg.tid]; if (requestCallback && requestCallback.startedCallback) { @@ -50,10 +58,11 @@ function spawn(callback) { }); } -function start(type, data, startedCallback, finishedCallback) { +function start(type, data, startedCallback, finishedCallback, failedCallback) { requestCallbacks[messageTid] = { startedCallback, - finishedCallback + finishedCallback, + failedCallback }; executorProcess.send({ diff --git a/lib/report-processor.js b/lib/report-processor.js index 09308d37..82653849 100644 --- a/lib/report-processor.js +++ b/lib/report-processor.js @@ -38,13 +38,31 @@ function startWorker(report) { }); } + function onFailed(msg) { + runningWorkersCount--; + log.error('ReportProcessor', 'Executing worker process for "%s" (tid %s) failed with message "%s". Current worker count is %s.', report.name, workers[report.id], msg, runningWorkersCount); + delete workers[report.id]; + + const fields = { + state: reports.ReportState.FAILED + }; + + reports.updateFields(report.id, fields, err => { + if (err) { + log.error('ReportProcessor', err); + } + + setImmediate(startWorkers); + }); + } + const reportData = { id: report.id, name: report.name }; runningWorkersCount++; - executor.start('report-processor-worker', reportData, onStarted, onFinished); + executor.start('report-processor-worker', reportData, onStarted, onFinished, onFailed); } function startWorkers() { diff --git a/services/executor.js b/services/executor.js index fa001578..99a01028 100644 --- a/services/executor.js +++ b/services/executor.js @@ -15,26 +15,36 @@ let processes = {}; function spawnProcess(tid, executable, args, outFile, errFile, cwd, uid, gid) { + function reportFail(msg) { + process.send({ + type: 'process-failed', + msg, + tid + }); + } + fs.open(outFile, 'w', (err, outFd) => { if (err) { log.error('Executor', err); + reportFail('Cannot create standard output file.'); return; } fs.open(errFile, 'w', (err, errFd) => { if (err) { log.error('Executor', err); + reportFail('Cannot create standard error file.'); return; } privilegeHelpers.ensureMailtrainOwner(outFile, (err) => { if (err) { - log.info('Executor', 'Cannot change owner of output file of process tid:%s.', tid) + log.warn('Executor', 'Cannot change owner of output file of process tid:%s.', tid) } privilegeHelpers.ensureMailtrainOwner(errFile, (err) => { if (err) { - log.info('Executor', 'Cannot change owner of error output file of process tid:%s.', tid) + log.warn('Executor', 'Cannot change owner of error output file of process tid:%s.', tid) } const options = { @@ -45,7 +55,16 @@ function spawnProcess(tid, executable, args, outFile, errFile, cwd, uid, gid) { gid }; - const child = fork(executable, args, options); + let child; + + try { + child = fork(executable, args, options); + } catch (err) { + log.error('Executor', 'Cannot start process with tid:%s.', tid); + reportFail('Cannot start process.'); + return; + } + const pid = child.pid; processes[tid] = child; From 92df915a7ec6bd9df5d6c04fb685413b5132d04b Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Thu, 27 Apr 2017 18:25:05 -0400 Subject: [PATCH 270/483] config.user/group used if config.rouser/rogroup is not set --- lib/privilege-helpers.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/privilege-helpers.js b/lib/privilege-helpers.js index 708c70bc..07d39844 100644 --- a/lib/privilege-helpers.js +++ b/lib/privilege-helpers.js @@ -8,9 +8,9 @@ const fs = require('fs'); const tryRequire = require('try-require'); const posix = tryRequire('posix'); -function _getConfigUidGid(prefix) { - let uid = process.getuid(); - let gid = process.getgid(); +function _getConfigUidGid(prefix, defaultUid, defaultGid) { + let uid = defaultUid; + let gid = defaultGid; if (posix) { try { @@ -36,11 +36,12 @@ function _getConfigUidGid(prefix) { } function getConfigUidGid() { - return _getConfigUidGid(''); + return _getConfigUidGid('', process.getuid(), process.getgid()); } function getConfigROUidGid() { - return _getConfigUidGid('ro'); + let rwIds = getConfigUidGid(); + return _getConfigUidGid('ro', rwIds.uid, rwIds.gid); } function ensureMailtrainOwner(file, callback) { From 540c9044aeb7d86f7744faf3bbf4832c74b067f5 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Thu, 27 Apr 2017 18:41:03 -0400 Subject: [PATCH 271/483] Updated setup scripts --- setup/install-centos7.sh | 11 ++++++++++- setup/install.sh | 11 +++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/setup/install-centos7.sh b/setup/install-centos7.sh index 938f43db..5aa6bcee 100755 --- a/setup/install-centos7.sh +++ b/setup/install-centos7.sh @@ -30,13 +30,14 @@ fi HOSTNAME="${HOSTNAME:-`hostname`}" MYSQL_PASSWORD=`pwgen 12 -1` +MYSQL_RO_PASSWORD=`pwgen 12 -1` DKIM_API_KEY=`pwgen 12 -1` SMTP_PASS=`pwgen 12 -1` # Setup MySQL user for Mailtrain mysql -u root -e "CREATE USER 'mailtrain'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';" mysql -u root -e "GRANT ALL PRIVILEGES ON mailtrain.* TO 'mailtrain'@'localhost';" -mysql -u root -e "CREATE USER 'mailtrain_ro'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';" +mysql -u root -e "CREATE USER 'mailtrain_ro'@'localhost' IDENTIFIED BY '$MYSQL_RO_PASSWORD';" mysql -u root -e "GRANT SELECT ON mailtrain.* TO 'mailtrain_ro'@'localhost';" mysql -u mailtrain --password="$MYSQL_PASSWORD" -e "CREATE database mailtrain;" @@ -91,6 +92,14 @@ processes=5 enabled=true EOT +cat >> workers/reports/config/production.toml <> workers/reports/config/production.toml < Date: Thu, 27 Apr 2017 19:30:11 -0400 Subject: [PATCH 272/483] Additions to the install scripts --- setup/install-centos7.sh | 6 ++++-- setup/install.sh | 1 + workers/reports/config/production.toml | 7 ------- 3 files changed, 5 insertions(+), 9 deletions(-) delete mode 100644 workers/reports/config/production.toml diff --git a/setup/install-centos7.sh b/setup/install-centos7.sh index 5aa6bcee..9ec03089 100755 --- a/setup/install-centos7.sh +++ b/setup/install-centos7.sh @@ -48,8 +48,7 @@ firewall-cmd --reload # Fetch Mailtrain files mkdir -p /opt/mailtrain cd /opt/mailtrain -#git clone git://github.com/Mailtrain-org/mailtrain.git . -git clone git://github.com/bures/mailtrain.git . +git clone git://github.com/Mailtrain-org/mailtrain.git . # Normally we would let Mailtrain itself to import the initial SQL data but in this case # we need to modify it, before we start Mailtrain @@ -77,6 +76,8 @@ useradd zone-mta || true cat >> config/production.toml < /etc/logrotate.d/mailtrain diff --git a/setup/install.sh b/setup/install.sh index 649b8d3e..8feadcfb 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -101,6 +101,7 @@ EOT # Install required node packages npm install --no-progress --production chown -R mailtrain:mailtrain . +chmod o-rwx config # Setup log rotation to not spend up entire storage on logs cat < /etc/logrotate.d/mailtrain diff --git a/workers/reports/config/production.toml b/workers/reports/config/production.toml deleted file mode 100644 index 53d2315e..00000000 --- a/workers/reports/config/production.toml +++ /dev/null @@ -1,7 +0,0 @@ -[log] -level="verbose" - -[mysql] -user="mailtrain_ro" -password="S6Woc9hwWiV9RsWt" - From b0d51c7dadbe3c34982a85b2d2b433a5a0afcfc4 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Thu, 27 Apr 2017 19:31:39 -0400 Subject: [PATCH 273/483] Updated .gitignore to ignore custom configs in worker/reports --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 5f408652..710ec373 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ npm-debug.log .DS_Store config/development.* config/production.* +workers/reports/config/development.* +workers/reports/config/production.* dump.rdb # generate POT file every time you want to update your PO file From 3783d7c2cece94abc8622ed99422648697849c5f Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Sun, 30 Apr 2017 10:51:47 -0400 Subject: [PATCH 274/483] Halfway through extending subscriptions by selectable unsubscription process. Also contains changes towards better handling of scenarios when address is already subscribed. --- lib/models/forms.js | 28 +- lib/models/lists.js | 116 +++--- lib/models/subscriptions.js | 337 ++++++++++----- lib/tools.js | 10 +- routes/api.js | 2 + routes/forms.js | 57 ++- routes/lists.js | 28 ++ routes/subscription.js | 385 +++++++----------- setup/sql/upgrade-00028.sql | 24 ++ views/lists/create.hbs | 26 +- views/lists/edit.hbs | 26 +- views/lists/forms/edit.hbs | 8 +- views/lists/forms/forms.hbs | 2 +- .../mail-already-subscribed-html.mjml.hbs | 24 ++ .../mail-already-subscribed-text.hbs | 18 + .../mail-confirm-address-change-html.mjml.hbs | 17 + .../mail-confirm-address-change-text.hbs | 10 + ...> mail-confirm-subscription-html.mjml.hbs} | 0 ...hbs => mail-confirm-subscription-text.hbs} | 0 .../mail-confirm-unsubscription-html.mjml.hbs | 17 + .../mail-confirm-unsubscription-text.hbs | 10 + ...il-unsubscription-confirmed-html.mjml.hbs} | 0 ...=> mail-unsubscription-confirmed-text.hbs} | 0 ... web-confirm-subscription-notice.mjml.hbs} | 0 ...web-confirm-unsubscription-notice.mjml.hbs | 13 + ...jml.hbs => web-subscribed-notice.mjml.hbs} | 0 ...l.hbs => web-unsubscribed-notice.mjml.hbs} | 0 27 files changed, 727 insertions(+), 431 deletions(-) create mode 100644 setup/sql/upgrade-00028.sql create mode 100644 views/subscription/mail-already-subscribed-html.mjml.hbs create mode 100644 views/subscription/mail-already-subscribed-text.hbs create mode 100644 views/subscription/mail-confirm-address-change-html.mjml.hbs create mode 100644 views/subscription/mail-confirm-address-change-text.hbs rename views/subscription/{mail-confirm-html.mjml.hbs => mail-confirm-subscription-html.mjml.hbs} (100%) rename views/subscription/{mail-confirm-text.hbs => mail-confirm-subscription-text.hbs} (100%) create mode 100644 views/subscription/mail-confirm-unsubscription-html.mjml.hbs create mode 100644 views/subscription/mail-confirm-unsubscription-text.hbs rename views/subscription/{mail-unsubscribe-confirmed-html.mjml.hbs => mail-unsubscription-confirmed-html.mjml.hbs} (100%) rename views/subscription/{mail-unsubscribe-confirmed-text.hbs => mail-unsubscription-confirmed-text.hbs} (100%) rename views/subscription/{web-confirm-notice.mjml.hbs => web-confirm-subscription-notice.mjml.hbs} (100%) create mode 100644 views/subscription/web-confirm-unsubscription-notice.mjml.hbs rename views/subscription/{web-subscribed.mjml.hbs => web-subscribed-notice.mjml.hbs} (100%) rename views/subscription/{web-unsubscribe-notice.mjml.hbs => web-unsubscribed-notice.mjml.hbs} (100%) diff --git a/lib/models/forms.js b/lib/models/forms.js index 940f5483..802e5706 100644 --- a/lib/models/forms.js +++ b/lib/models/forms.js @@ -14,22 +14,30 @@ let allowedKeys = [ 'fields_shown_on_manage', 'layout', 'form_input_style', - 'mail_confirm_html', - 'mail_confirm_text', + 'web_subscribe', + 'web_confirm_subscription_notice', + 'mail_confirm_subscription_html', + 'mail_confirm_subscription_text', + 'mail_already_subscribed_html', + 'mail_already_subscribed_text', + 'web_subscribed_notice', 'mail_subscription_confirmed_html', 'mail_subscription_confirmed_text', - 'mail_unsubscribe_confirmed_html', - 'mail_unsubscribe_confirmed_text', - 'web_confirm_notice', - 'web_manage_address', 'web_manage', - 'web_subscribe', - 'web_subscribed', - 'web_unsubscribe_notice', + 'web_manage_address', + 'web_updated_notice', 'web_unsubscribe', - 'web_updated_notice' + 'web_confirm_unsubscription_notice', + 'mail_confirm_unsubscription_html', + 'mail_confirm_unsubscription_text', + 'mail_confirm_address_change_html', + 'mail_confirm_address_change_text', + 'web_unsubscribed_notice', + 'mail_unsubscription_confirmed_html', + 'mail_unsubscription_confirmed_text' ]; + module.exports.list = (listId, callback) => { listId = Number(listId) || 0; diff --git a/lib/models/lists.js b/lib/models/lists.js index 28304722..7ee7dcc6 100644 --- a/lib/models/lists.js +++ b/lib/models/lists.js @@ -7,7 +7,16 @@ let segments = require('./segments'); let _ = require('../translate')._; let tableHelpers = require('../table-helpers'); -let allowedKeys = ['description', 'default_form', 'public_subscribe']; +const UnsubscriptionMode = { + ONE_STEP: 0, + TWO_STEP: 1, + MANUAL: 2, + MAX: 3 +}; + +module.exports.UnsubscriptionMode = UnsubscriptionMode; + +let allowedKeys = ['description', 'default_form', 'public_subscribe', 'unsubscription_mode']; module.exports.list = (start, limit, callback) => { tableHelpers.list('lists', ['*'], 'name', null, start, limit, callback); @@ -99,6 +108,63 @@ module.exports.get = (id, callback) => { }); }; +module.exports.update = (id, updates, callback) => { + updates = updates || {}; + id = Number(id) || 0; + + if (id < 1) { + return callback(new Error(_('Missing List ID'))); + } + + const data = tools.convertKeys(updates); + + const keys = []; + const values = []; + + // The update can be only partial when executed from forms/:list + if (!data.customFormChangeOnly) { + data.publicSubscribe = data.publicSubscribe ? 1 : 0; + data.unsubscriptionMode = Number(data.unsubscriptionMode); + + let name = (data.name || '').toString().trim(); + + if (!name) { + return callback(new Error(_('List Name must be set'))); + } + + keys.push('name'); + values.push(name); + } + + Object.keys(data).forEach(key => { + let value = data[key].toString().trim(); + key = tools.toDbKey(key); + if (key === 'description') { + value = tools.purifyHTML(value); + } + if (allowedKeys.indexOf(key) >= 0) { + keys.push(key); + values.push(value); + } + }); + + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + values.push(id); + + connection.query('UPDATE lists SET ' + keys.map(key => key + '=?').join(', ') + ' WHERE id=? LIMIT 1', values, (err, result) => { + connection.release(); + if (err) { + return callback(err); + } + return callback(null, result && result.affectedRows || false); + }); + }); +}; + module.exports.create = (list, callback) => { let data = tools.convertKeys(list); @@ -157,54 +223,6 @@ module.exports.create = (list, callback) => { }); }; -module.exports.update = (id, updates, callback) => { - updates = updates || {}; - id = Number(id) || 0; - - let data = tools.convertKeys(updates); - data.publicSubscribe = data.publicSubscribe ? 1 : 0; - - let name = (data.name || '').toString().trim(); - let keys = ['name']; - let values = [name]; - - if (id < 1) { - return callback(new Error(_('Missing List ID'))); - } - - if (!name) { - return callback(new Error(_('List Name must be set'))); - } - - Object.keys(data).forEach(key => { - let value = data[key].toString().trim(); - key = tools.toDbKey(key); - if (key === 'description') { - value = tools.purifyHTML(value); - } - if (allowedKeys.indexOf(key) >= 0) { - keys.push(key); - values.push(value); - } - }); - - db.getConnection((err, connection) => { - if (err) { - return callback(err); - } - - values.push(id); - - connection.query('UPDATE lists SET ' + keys.map(key => key + '=?').join(', ') + ' WHERE id=? LIMIT 1', values, (err, result) => { - connection.release(); - if (err) { - return callback(err); - } - return callback(null, result && result.affectedRows || false); - }); - }); -}; - module.exports.delete = (id, callback) => { id = Number(id) || 0; diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 99d32be0..57169257 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -88,108 +88,109 @@ module.exports.filter = (listId, request, columns, segmentId, callback) => { }; -module.exports.addConfirmation = (list, email, optInIp, data, callback) => { +module.exports.addConfirmation = (list, email, ip, data, callback) => { let cid = shortid.generate(); - tools.validateEmail(email, false, err => { + db.getConnection((err, connection) => { if (err) { return callback(err); } - db.getConnection((err, connection) => { + let query = 'INSERT INTO confirmations (cid, list, email, ip, data) VALUES (?,?,?,?,?)'; + connection.query(query, [cid, list.id, email, ip, JSON.stringify(data || {})], (err, result) => { + connection.release(); if (err) { return callback(err); } - let query = 'INSERT INTO confirmations (cid, list, email, opt_in_ip, data) VALUES (?,?,?,?,?)'; - connection.query(query, [cid, list.id, email, optInIp, JSON.stringify(data || {})], (err, result) => { - connection.release(); + if (!result || !result.affectedRows) { + return callback(null, false); + } + + fields.list(list.id, (err, fieldList) => { if (err) { return callback(err); } - if (!result || !result.affectedRows) { - return callback(null, false); - } + let encryptionKeys = []; + fields.getRow(fieldList, data).forEach(field => { + if (field.type === 'gpg' && field.value) { + encryptionKeys.push(field.value.trim()); + } + }); - fields.list(list.id, (err, fieldList) => { + settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'defaultPostaddress', 'serviceUrl'], (err, configItems) => { if (err) { return callback(err); } - let encryptionKeys = []; - fields.getRow(fieldList, data).forEach(field => { - if (field.type === 'gpg' && field.value) { - encryptionKeys.push(field.value.trim()); - } - }); - - settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'defaultPostaddress', 'serviceUrl'], (err, configItems) => { - if (err) { - return callback(err); + setImmediate(() => { + if (data._skip) { + log.info('Subscription', 'Confirmation message for %s marked to be skipped (%s)', email, JSON.stringify(data)); + return; } - setImmediate(() => { - if (data._skip) { - log.info('Subscription', 'Confirmation message for %s marked to be skipped (%s)', email, JSON.stringify(data)); - return; + // FIXME - move to router + const mailOpts = { + subject: _('%s: Please Confirm Subscription'), + confirmUrlRoute: '/subscription/confirm/', + templateType: 'subscription' + }; + + let sendMail = (html, text) => { + mailer.sendMail({ + from: { + name: configItems.defaultFrom, + address: configItems.defaultAddress + }, + to: { + name: [].concat(data.firstName || []).concat(data.lastName || []).join(' '), + address: email + }, + subject: util.format(mailOpts.subject, list.name), + encryptionKeys + }, { + html, + text, + data: { + title: list.name, + contactAddress: configItems.defaultAddress, + defaultPostaddress: configItems.defaultPostaddress, + confirmUrl: urllib.resolve(configItems.serviceUrl, mailOpts.confirmUrlRoute + cid) + } + }, err => { + if (err) { + log.error('Subscription', err); + } + }); + }; + + let text = { + template: 'subscription/mail-confirm-' + mailOpts.templateType + '-text.hbs' + }; + + let html = { + template: 'subscription/mail-confirm-' + mailOpts.templateType + '-html.mjml.hbs', + layout: 'subscription/layout.mjml.hbs', + type: 'mjml' + }; + + helpers.injectCustomFormTemplates(list.defaultForm, { text, html }, (err, tmpl) => { + if (err) { + return sendMail(html, text); } - let sendMail = (html, text) => { - mailer.sendMail({ - from: { - name: configItems.defaultFrom, - address: configItems.defaultAddress - }, - to: { - name: [].concat(data.firstName || []).concat(data.lastName || []).join(' '), - address: email - }, - subject: util.format(_('%s: Please Confirm Subscription'), list.name), - encryptionKeys - }, { - html, - text, - data: { - title: list.name, - contactAddress: configItems.defaultAddress, - defaultPostaddress: configItems.defaultPostaddress, - confirmUrl: urllib.resolve(configItems.serviceUrl, '/subscription/subscribe/' + cid) - } - }, err => { - if (err) { - log.error('Subscription', err); - } - }); - }; - - let text = { - template: 'subscription/mail-confirm-text.hbs' - }; - - let html = { - template: 'subscription/mail-confirm-html.mjml.hbs', - layout: 'subscription/layout.mjml.hbs', - type: 'mjml' - }; - - helpers.injectCustomFormTemplates(list.defaultForm, { text, html }, (err, tmpl) => { - if (err) { - return sendMail(html, text); - } - - sendMail(tmpl.html, tmpl.text); - }); + sendMail(tmpl.html, tmpl.text); }); - return callback(null, cid); }); + return callback(null, cid); }); }); }); }); }; -module.exports.subscribe = (cid, optInIp, callback) => { +module.exports.processConfirmation = (cid, ip, callback) => { db.getConnection((err, connection) => { if (err) { return callback(err); @@ -215,7 +216,11 @@ module.exports.subscribe = (cid, optInIp, callback) => { subscription = {}; } - if (subscription.action === 'update' && subscription.subscriber) { + if (subscription._action === 'update') { + if (!subscription.subscriber) { // Something went terribly wrong and we don't have data that we have originally provided + return callback(new Error(_('Subscriber info corrupted or missing'))); + } + // update email address instead of adding new db.getConnection((err, connection) => { if (err) { @@ -230,45 +235,57 @@ module.exports.subscribe = (cid, optInIp, callback) => { } connection.query('DELETE FROM confirmations WHERE `cid`=? LIMIT 1', [cid], () => { connection.release(); - // reload full data from db in case it was an update, not insert - return module.exports.getById(listId, subscription.subscriber, callback); + return module.exports.getById(listId, subscription.subscriber, (err, subscriptionData) => { + return callback(err, subscriptionData, subscription._action); + }); }); }); }); return; - } - subscription.cid = cid; - subscription.list = listId; - subscription.email = email; + } else if (subscription._action === 'unsubscribe') { + // TODO + return; - let optInCountry = geoip.lookupCountry(optInIp) || null; - module.exports.insert(listId, { - email, - cid, - optInIp, - optInCountry, - status: 1 - }, subscription, (err, result) => { - if (err) { - return callback(err); - } + } else if (subscription._action === 'subscribe') { + subscription.cid = cid; + subscription.list = listId; + subscription.email = email; - if (!result.entryId) { - return callback(new Error(_('Could not save subscription'))); - } - - db.getConnection((err, connection) => { + let optInCountry = geoip.lookupCountry(ip) || null; + module.exports.insert(listId, { + email, + cid, + optInIp: ip, + optInCountry, + status: 1 + }, subscription, (err, result) => { if (err) { return callback(err); } - connection.query('DELETE FROM confirmations WHERE `cid`=? LIMIT 1', [cid], () => { - connection.release(); - // reload full data from db in case it was an update, not insert - return module.exports.getById(listId, result.entryId, callback); + + if (!result.entryId) { + return callback(new Error(_('Could not save subscription'))); + } + + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + connection.query('DELETE FROM confirmations WHERE `cid`=? LIMIT 1', [cid], () => { + connection.release(); + // reload full data from db in case it was an update, not insert + return module.exports.getById(listId, result.entryId, (err, subscriptionData) => { + return callback(err, subscriptionData, subscription._action); + }); + }); }); }); - }); + + } else { + return callback(new Error(util.format(_('Subscription request corrupted - action: %s'), subscription._action))); + } + }); }); }; @@ -307,6 +324,7 @@ module.exports.insert = (listId, meta, subscription, callback) => { } }); + // FIXME - see issue #218 fields.getValues(fields.getRow(fieldList, subscription, true, true, !!meta.partial), true).forEach(field => { keys.push(field.key); values.push(field.value); @@ -377,6 +395,8 @@ module.exports.insert = (listId, meta, subscription, callback) => { queryArgs = values.concat(existing.id); query = 'UPDATE `subscription__' + listId + '` SET ' + keys.map(key => '`' + key + '`=?') + ' WHERE id=? LIMIT 1'; } + console.log(query); + console.log(queryArgs); connection.query(query, queryArgs, (err, result) => { if (err) { @@ -1076,7 +1096,7 @@ module.exports.listImports = (listId, callback) => { }; -module.exports.updateAddress = (list, cid, updates, optInIp, callback) => { +module.exports.updateAddress = (list, cid, updates, ip, callback) => { updates = tools.convertKeys(updates); cid = (cid || '').toString().trim(); @@ -1128,11 +1148,13 @@ module.exports.updateAddress = (list, cid, updates, optInIp, callback) => { } if (rows && rows[0] && rows[0].id) { + + return callback(new Error(_('This address is already registered by someone else'))); } - module.exports.addConfirmation(list, emailNew, optInIp, { - action: 'update', + module.exports.addConfirmation(list, emailNew, ip, { + _action: 'update', cid, subscriber: old.id, emailOld: old.email @@ -1142,3 +1164,114 @@ module.exports.updateAddress = (list, cid, updates, optInIp, callback) => { }); }); }; + + +module.exports.sendMail = (listId, email, template, subject, mailOpts, subscription, callback) => { + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + lists.get(listId, (err, list) => { + if (!err && !list) { + err = new Error(_('Selected list not found')); + err.status = 404; + } + + if (err) { + return next(err); + } + + fields.list(list.id, (err, fieldList) => { + if (err) { + return callback(err); + } + + let encryptionKeys = []; + fields.getRow(fieldList, subscription).forEach(field => { + if (field.type === 'gpg' && field.value) { + encryptionKeys.push(field.value.trim()); + } + }); + + settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'defaultPostaddress', 'serviceUrl'], (err, configItems) => { + if (err) { + return callback(err); + } + + const data = { + title: list.name, + contactAddress: configItems.defaultAddress, + defaultPostaddress: configItems.defaultPostaddress, + }; + + if (mailOpts.confirmUrlRoute) { + data.confirmUrl = urllib.resolve(configItems.serviceUrl, mailOpts.confirmUrlRoute + cid) + } + + function sendMail(html, text) { + mailer.sendMail({ + from: { + name: configItems.defaultFrom, + address: configItems.defaultAddress + }, + to: { + name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), + address: email + }, + subject: util.format(subject, list.name), + encryptionKeys + }, { + html, + text, + data + }, err => { + if (err) { + log.error('Subscription', err); + } + }); + } + + let text = { + template: 'subscription/mail-' + template + '-text.hbs' + }; + + let html = { + template: 'subscription/mail-' + template + '-html.mjml.hbs', + layout: 'subscription/layout.mjml.hbs', + type: 'mjml' + }; + + helpers.injectCustomFormTemplates(list.defaultForm, { text, html }, (err, tmpl) => { + if (err) { + return sendMail(html, text); + } + + sendMail(tmpl.html, tmpl.text); + }); + + return callback(null, cid); + }); + }); + }); + }); +}; + + +/* +FIXME +function getUnsubscriptionMode = (listId, start, limit, callback) => { + listId = Number(listId) || 0; + if (!listId) { + return callback(new Error('Missing List ID')); + } + + tableHelpers.list('subscription__' + listId, ['*'], 'email', null, start, limit, (err, rows, total) => { + if (!err) { + rows = rows.map(row => tools.convertKeys(row)); + } + return callback(err, rows, total); + }); +}; + +*/ \ No newline at end of file diff --git a/lib/tools.js b/lib/tools.js index 2c508917..49d17e44 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -43,7 +43,13 @@ function toDbKey(key) { } function fromDbKey(key) { - return key.replace(/[_\-]([a-z])/g, (m, c) => c.toUpperCase()); + let prefix = ''; + if (key.startsWith('_')) { + key = key.substring(1); + prefix = '_'; + + } + return prefix + key.replace(/[_\-]([a-z])/g, (m, c) => c.toUpperCase()); } function convertKeys(obj, options) { @@ -54,7 +60,7 @@ function convertKeys(obj, options) { if (options.skip && options.skip.indexOf(lKey) >= 0) { return; } - if (options.keep && options.skip.indexOf(lKey) < 0) { + if (options.keep && options.keep.indexOf(lKey) < 0) { return; } response[lKey] = obj[key]; diff --git a/routes/api.js b/routes/api.js index ce71a7c1..671bac8f 100644 --- a/routes/api.js +++ b/routes/api.js @@ -93,6 +93,8 @@ router.post('/subscribe/:listId', (req, res) => { subscription.tz = (input.TIMEZONE || '').toString().trim(); } + subscription._action = 'subscribe'; + fields.list(list.id, (err, fieldList) => { if (err && !fieldList) { fieldList = []; diff --git a/routes/forms.js b/routes/forms.js index 17c5e896..6c3935ac 100644 --- a/routes/forms.js +++ b/routes/forms.js @@ -161,22 +161,32 @@ router.get('/:list/edit/:form', passport.csrfProtection, (req, res) => { type: 'mjml', help: helpMjmlGeneral }, { - name: 'web_confirm_notice', - label: _('Web - Confirm Notice'), + name: 'web_confirm_subscription_notice', + label: _('Web - Confirm Subscription Notice'), type: 'mjml', help: helpMjmlGeneral }, { - name: 'mail_confirm_html', + name: 'mail_confirm_subscription_html', label: _('Mail - Confirm Subscription (MJML)'), type: 'mjml', help: helpMjmlGeneral }, { - name: 'mail_confirm_text', + name: 'mail_confirm_subscription_text', label: _('Mail - Confirm Subscription (Text)'), type: 'text', help: helpEmailText }, { - name: 'web_subscribed', + name: 'mail_already_subscribed_html', + label: _('Mail - Already Subscribed (MJML)'), + type: 'mjml', + help: helpMjmlGeneral + }, { + name: 'mail_already_subscribed_text', + label: _('Mail - Already Subscribed (Text)'), + type: 'text', + help: helpEmailText + }, { + name: 'web_subscribed_notice', label: _('Web - Subscribed Notice'), type: 'mjml', help: helpMjmlGeneral @@ -217,18 +227,43 @@ router.get('/:list/edit/:form', passport.csrfProtection, (req, res) => { type: 'mjml', help: helpMjmlGeneral }, { - name: 'web_unsubscribe_notice', - label: _('Web - Unsubscribe Notice'), + name: 'web_confirm_unsubscription_notice', + label: _('Web - Confirm Unsubscription Notice'), type: 'mjml', help: helpMjmlGeneral }, { - name: 'mail_unsubscribe_confirmed_html', - label: _('Mail - Unsubscribe Confirmed (MJML)'), + name: 'mail_confirm_unsubscription_html', + label: _('Mail - Confirm Unsubscription (MJML)'), type: 'mjml', help: helpMjmlGeneral }, { - name: 'mail_unsubscribe_confirmed_text', - label: _('Mail - Unsubscribe Confirmed (Text)'), + name: 'mail_confirm_unsubscription_text', + label: _('Mail - Confirm Unsubscription (Text)'), + type: 'text', + help: helpEmailText + }, { + name: 'mail_confirm_address_change_html', + label: _('Mail - Confirm Address Change (MJML)'), + type: 'mjml', + help: helpMjmlGeneral + }, { + name: 'mail_confirm_address_change_text', + label: _('Mail - Confirm Address Change (Text)'), + type: 'text', + help: helpEmailText + }, { + name: 'web_unsubscribed_notice', + label: _('Web - Unsubscribed Notice'), + type: 'mjml', + help: helpMjmlGeneral + }, { + name: 'mail_unsubscription_confirmed_html', + label: _('Mail - Unsubscription Confirmed (MJML)'), + type: 'mjml', + help: helpMjmlGeneral + }, { + name: 'mail_unsubscription_confirmed_text', + label: _('Mail - Unsubscription Confirmed (Text)'), type: 'text', help: helpEmailText }] diff --git a/routes/lists.js b/routes/lists.js index 64c1352f..4618c683 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -71,6 +71,8 @@ router.get('/create', passport.csrfProtection, (req, res) => { data.publicSubscribe = true; } + data.unsubscriptionModeOptions = getUnsubscriptionModeOptions(data.unsubscriptionMode || lists.UnsubscriptionMode.ONE_STEP); + res.render('lists/create', data); }); @@ -103,6 +105,8 @@ router.get('/edit/:id', passport.csrfProtection, (req, res) => { return row; }); + list.unsubscriptionModeOptions = getUnsubscriptionModeOptions(list.unsubscriptionMode); + list.csrfToken = req.csrfToken(); res.render('lists/edit', list); }); @@ -771,4 +775,28 @@ router.post('/quicklist/ajax', (req, res) => { }); }); +function getUnsubscriptionModeOptions(unsubscriptionMode) { + const options = []; + + options[lists.UnsubscriptionMode.ONE_STEP] = { + value: lists.UnsubscriptionMode.ONE_STEP, + selected: unsubscriptionMode === lists.UnsubscriptionMode.ONE_STEP, + label: _('One-step (i.e. no email with confirmation link)') + }; + + options[lists.UnsubscriptionMode.TWO_STEP] = { + value: lists.UnsubscriptionMode.TWO_STEP, + selected: unsubscriptionMode === lists.UnsubscriptionMode.TWO_STEP, + label: _('Two-step (i.e. an email with confirmation link will be sent)') + }; + + options[lists.UnsubscriptionMode.MANUAL] = { + value: lists.UnsubscriptionMode.MANUAL, + selected: unsubscriptionMode === lists.UnsubscriptionMode.MANUAL, + label: _('Manual (i.e. unsubscription has to be performed by the list administrator)') + }; + + return options; +} + module.exports = router; diff --git a/routes/subscription.js b/routes/subscription.js index 0e91eb98..e8f2c5f4 100644 --- a/routes/subscription.js +++ b/routes/subscription.js @@ -44,8 +44,8 @@ let corsOrCsrfProtection = (req, res, next) => { } }; -router.get('/subscribe/:cid', (req, res, next) => { - subscriptions.subscribe(req.params.cid, req.ip, (err, subscription) => { +router.get('/confirm/:cid', (req, res, next) => { + subscriptions.processConfirmation(req.params.cid, req.ip, (err, subscription, action) => { if (!err && !subscription) { err = new Error(_('Selected subscription not found')); err.status = 404; @@ -70,40 +70,9 @@ router.get('/subscribe/:cid', (req, res, next) => { return next(err); } - let data = { - title: list.name, - homepage: configItems.defaultHomepage || configItems.serviceUrl, - preferences: '/subscription/' + list.cid + '/manage/' + subscription.cid, - hasPubkey: !!configItems.pgpPrivateKey, - defaultAddress: configItems.defaultAddress, - defaultPostaddress: configItems.defaultPostaddress, - template: { - template: 'subscription/web-subscribed.mjml.hbs', - layout: 'subscription/layout.mjml.hbs' - } - }; + // FIXME - split decision based on action - helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-subscribed', data, (err, data) => { - if (err) { - return next(err); - } - - helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { - if (err) { - return next(err); - } - - helpers.captureFlashMessages(req, res, (err, flash) => { - if (err) { - return next(err); - } - - data.isWeb = true; - data.flashMessages = flash; - res.send(htmlRenderer(data)); - }); - }); - }); + res.redirect('/subscription/' + list.cid + '/subscribed-notice'); if (configItems.disableConfirmations) { return; @@ -318,164 +287,6 @@ router.get('/:cid/widget', cors(corsOptions), (req, res, next) => { }); }); -router.get('/:cid/confirm-notice', (req, res, next) => { - lists.getByCid(req.params.cid, (err, list) => { - if (!err && !list) { - err = new Error(_('Selected list not found')); - err.status = 404; - } - - if (err) { - return next(err); - } - - settings.list(['defaultHomepage', 'serviceUrl', 'defaultAddress', 'defaultPostaddress'], (err, configItems) => { - if (err) { - return next(err); - } - - let data = { - title: list.name, - homepage: configItems.defaultHomepage || configItems.serviceUrl, - defaultAddress: configItems.defaultAddress, - defaultPostaddress: configItems.defaultPostaddress, - template: { - template: 'subscription/web-confirm-notice.mjml.hbs', - layout: 'subscription/layout.mjml.hbs' - } - }; - - helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-confirm-notice', data, (err, data) => { - if (err) { - return next(err); - } - - helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { - if (err) { - return next(err); - } - - helpers.captureFlashMessages(req, res, (err, flash) => { - if (err) { - return next(err); - } - - data.isWeb = true; - data.isConfirmNotice = true; - data.flashMessages = flash; - res.send(htmlRenderer(data)); - }); - }); - }); - }); - }); -}); - -router.get('/:cid/updated-notice', (req, res, next) => { - lists.getByCid(req.params.cid, (err, list) => { - if (!err && !list) { - err = new Error(_('Selected list not found')); - err.status = 404; - } - - if (err) { - return next(err); - } - - settings.list(['defaultHomepage', 'serviceUrl', 'defaultAddress', 'defaultPostaddress'], (err, configItems) => { - if (err) { - return next(err); - } - - let data = { - title: list.name, - homepage: configItems.defaultHomepage || configItems.serviceUrl, - defaultAddress: configItems.defaultAddress, - defaultPostaddress: configItems.defaultPostaddress, - template: { - template: 'subscription/web-updated-notice.mjml.hbs', - layout: 'subscription/layout.mjml.hbs' - } - }; - - helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-updated-notice', data, (err, data) => { - if (err) { - return next(err); - } - - helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { - if (err) { - return next(err); - } - - helpers.captureFlashMessages(req, res, (err, flash) => { - if (err) { - return next(err); - } - - data.isWeb = true; - data.flashMessages = flash; - res.send(htmlRenderer(data)); - }); - }); - }); - }); - }); -}); - -router.get('/:cid/unsubscribe-notice', (req, res, next) => { - lists.getByCid(req.params.cid, (err, list) => { - if (!err && !list) { - err = new Error(_('Selected list not found')); - err.status = 404; - } - - if (err) { - return next(err); - } - - settings.list(['defaultHomepage', 'serviceUrl', 'defaultAddress', 'defaultPostaddress'], (err, configItems) => { - if (err) { - return next(err); - } - - let data = { - title: list.name, - layout: 'subscription/layout', - homepage: configItems.defaultHomepage || configItems.serviceUrl, - defaultAddress: configItems.defaultAddress, - defaultPostaddress: configItems.defaultPostaddress, - template: { - template: 'subscription/web-unsubscribe-notice.mjml.hbs', - layout: 'subscription/layout.mjml.hbs' - } - }; - - helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-unsubscribe-notice', data, (err, data) => { - if (err) { - return next(err); - } - - helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { - if (err) { - return next(err); - } - - helpers.captureFlashMessages(req, res, (err, flash) => { - if (err) { - return next(err); - } - - data.isWeb = true; - data.flashMessages = flash; - res.send(htmlRenderer(data)); - }); - }); - }); - }); - }); -}); - router.options('/:cid/subscribe', cors(corsOptions)); router.post('/:cid/subscribe', passport.parseForm, corsOrCsrfProtection, (req, res, next) => { @@ -496,62 +307,73 @@ router.post('/:cid/subscribe', passport.parseForm, corsOrCsrfProtection, (req, r return res.redirect('/subscription/' + encodeURIComponent(req.params.cid) + '?' + tools.queryParams(req.body)); } - // Check if the subscriber seems legit. This is a really simple check, the only requirement is that - // the subsciber has JavaScript turned on and thats it. If Mailtrain gets more targeted then this - // simple check should be replaced with an actual captcha - let subTime = Number(req.body.sub) || 0; - // allow clock skew 24h in the past and 24h to the future - let subTimeTest = !!(subTime > Date.now() - 24 * 3600 * 1000 && subTime < Date.now() + 24 * 3600 * 1000); - let addressTest = !req.body.address; - let testsPass = subTimeTest && addressTest; - - lists.getByCid(req.params.cid, (err, list) => { - if (!err) { - if (!list) { - err = new Error(_('Selected list not found')); - err.status = 404; - } else if (!list.publicSubscribe) { - err = new Error(_('The list does not allow public subscriptions.')); - err.status = 403; - } - } - + tools.validateEmail(email, false, err => { if (err) { - return req.xhr ? sendJsonError(err) : next(err); + if (req.xhr) { + return sendJsonError(err.message, 400); + } + req.flash('danger', err.message); + return res.redirect('/subscription/' + encodeURIComponent(req.params.cid) + '?' + tools.queryParams(req.body)); } - let data = {}; - Object.keys(req.body).forEach(key => { - if (key !== 'email' && key.charAt(0) !== '_') { - data[key] = (req.body[key] || '').toString().trim(); - } - }); + // Check if the subscriber seems legit. This is a really simple check, the only requirement is that + // the subsciber has JavaScript turned on and thats it. If Mailtrain gets more targeted then this + // simple check should be replaced with an actual captcha + let subTime = Number(req.body.sub) || 0; + // allow clock skew 24h in the past and 24h to the future + let subTimeTest = !!(subTime > Date.now() - 24 * 3600 * 1000 && subTime < Date.now() + 24 * 3600 * 1000); + let addressTest = !req.body.address; + let testsPass = subTimeTest && addressTest; - data = tools.convertKeys(data); - - data._address = req.body.address; - data._sub = req.body.sub; - data._skip = !testsPass; - - subscriptions.addConfirmation(list, email, req.ip, data, (err, confirmCid) => { - if (!err && !confirmCid) { - err = new Error(_('Could not store confirmation data')); + lists.getByCid(req.params.cid, (err, list) => { + if (!err) { + if (!list) { + err = new Error(_('Selected list not found')); + err.status = 404; + } else if (!list.publicSubscribe) { + err = new Error(_('The list does not allow public subscriptions.')); + err.status = 403; + } } if (err) { - if (req.xhr) { - return sendJsonError(err); - } - req.flash('danger', err.message || err); - return res.redirect('/subscription/' + encodeURIComponent(req.params.cid) + '?' + tools.queryParams(req.body)); + return req.xhr ? sendJsonError(err) : next(err); } - if (req.xhr) { - return res.status(200).json({ - msg: _('Please Confirm Subscription') - }); - } - res.redirect('/subscription/' + req.params.cid + '/confirm-notice'); + let data = {}; + Object.keys(req.body).forEach(key => { + if (key !== 'email' && key.charAt(0) !== '_') { + data[key] = (req.body[key] || '').toString().trim(); + } + }); + + data = tools.convertKeys(data); + + data._address = req.body.address; + data._sub = req.body.sub; + data._skip = !testsPass; + data._action = 'subscribe'; + + subscriptions.addConfirmation(list, email, req.ip, data, (err, confirmCid) => { + if (!err && !confirmCid) { + err = new Error(_('Could not store confirmation data')); + } + + if (err) { + if (req.xhr) { + return sendJsonError(err); + } + req.flash('danger', err.message || err); + return res.redirect('/subscription/' + encodeURIComponent(req.params.cid) + '?' + tools.queryParams(req.body)); + } + + if (req.xhr) { + return res.status(200).json({ + msg: _('Please Confirm Subscription') + }); + } + res.redirect('/subscription/' + req.params.cid + '/confirm-subscription-notice'); + }); }); }); }); @@ -732,7 +554,7 @@ router.post('/:lcid/manage-address', passport.parseForm, passport.csrfProtection return res.redirect('/subscription/' + encodeURIComponent(req.params.lcid) + '/manage-address/' + encodeURIComponent(req.body.cid) + '?' + tools.queryParams(req.body)); } - req.flash('info', _('Email address updated, check your mailbox for verification instructions')); + req.flash('info', _('An email with further instructions has been sent to the provided address')); res.redirect('/subscription/' + req.params.lcid + '/manage/' + req.body.cid); }); }); @@ -822,7 +644,7 @@ router.post('/:lcid/unsubscribe', passport.parseForm, passport.csrfProtection, ( log.error('Subscription', err); return res.redirect('/subscription/' + encodeURIComponent(req.params.lcid) + '/unsubscribe/' + encodeURIComponent(req.body.cid) + '?' + tools.queryParams(req.body)); } - res.redirect('/subscription/' + req.params.lcid + '/unsubscribe-notice'); + res.redirect('/subscription/' + req.params.lcid + '/unsubscribed-notice'); fields.list(list.id, (err, fieldList) => { if (err) { @@ -874,11 +696,11 @@ router.post('/:lcid/unsubscribe', passport.parseForm, passport.csrfProtection, ( }; let text = { - template: 'subscription/mail-unsubscribe-confirmed-text.hbs' + template: 'subscription/mail-unsubscription-confirmed-text.hbs' }; let html = { - template: 'subscription/mail-unsubscribe-confirmed-html.mjml.hbs', + template: 'subscription/mail-unsubscription-confirmed-html.mjml.hbs', layout: 'subscription/layout.mjml.hbs', type: 'mjml' }; @@ -896,6 +718,26 @@ router.post('/:lcid/unsubscribe', passport.parseForm, passport.csrfProtection, ( }); }); +router.get('/:cid/confirm-subscription-notice', (req, res, next) => { + notice('confirm-subscription', req, res, next); +}); + +router.get('/:cid/confirm-unsubscription-notice', (req, res, next) => { + notice('confirm-unsubscription', req, res, next); +}); + +router.get('/:cid/subscribed-notice', (req, res, next) => { + notice('subscribed', req, res, next); +}); + +router.get('/:cid/updated-notice', (req, res, next) => { + notice('updated', req, res, next); +}); + +router.get('/:cid/unsubscribed-notice', (req, res, next) => { + notice('unsubscribed', req, res, next); +}); + router.post('/publickey', passport.parseForm, (req, res, next) => { settings.list(['pgpPassphrase', 'pgpPrivateKey'], (err, configItems) => { if (err) { @@ -934,4 +776,59 @@ router.post('/publickey', passport.parseForm, (req, res, next) => { }); }); + +function notice(type, req, res, next) { + lists.getByCid(req.params.cid, (err, list) => { + if (!err && !list) { + err = new Error(_('Selected list not found')); + err.status = 404; + } + + if (err) { + return next(err); + } + + settings.list(['defaultHomepage', 'serviceUrl', 'defaultAddress', 'defaultPostaddress'], (err, configItems) => { + if (err) { + return next(err); + } + + let data = { + title: list.name, + homepage: configItems.defaultHomepage || configItems.serviceUrl, + defaultAddress: configItems.defaultAddress, + defaultPostaddress: configItems.defaultPostaddress, + template: { + template: 'subscription/web-' + type + '-notice.mjml.hbs', + layout: 'subscription/layout.mjml.hbs' + } + }; + + helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-' + type + '-notice', data, (err, data) => { + if (err) { + return next(err); + } + + helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { + if (err) { + return next(err); + } + + helpers.captureFlashMessages(req, res, (err, flash) => { + if (err) { + return next(err); + } + + data.isWeb = true; + data.isConfirmNotice = true; + data.flashMessages = flash; + res.send(htmlRenderer(data)); + }); + }); + }); + }); + }); +} + + module.exports = router; diff --git a/setup/sql/upgrade-00028.sql b/setup/sql/upgrade-00028.sql new file mode 100644 index 00000000..8ea8bdbc --- /dev/null +++ b/setup/sql/upgrade-00028.sql @@ -0,0 +1,24 @@ +# Header section +# Define incrementing schema version number +SET @schema_version = '28'; + +# Add unsubscription mode field to lists +ALTER TABLE `lists` ADD COLUMN `unsubscription_mode` int(11) unsigned DEFAULT 0 NOT NULL AFTER `public_subscribe`; + +# Change the name of the column to better reflect that confirmations are also used for unsubscription and email address update +ALTER TABLE `confirmations` CHANGE `opt_in_ip` `ip` varchar(100) DEFAULT NULL; + +# Rename affected forms in custom_forms_data +update custom_forms_data set data_key="mail_confirm_subscription_html" where data_key="mail_confirm_html"; +update custom_forms_data set data_key="mail_confirm_subscription_text" where data_key="mail_confirm_text"; +update custom_forms_data set data_key="mail_unsubscription_confirmed_html" where data_key="mail_unsubscribe_confirmed_html"; +update custom_forms_data set data_key="mail_unsubscription_confirmed_text" where data_key="mail_unsubscribe_confirmed_text"; +update custom_forms_data set data_key="web_confirm_subscription_notice" where data_key="web_confirm_notice"; +update custom_forms_data set data_key="web_subscribed_notice" where data_key="web_subscribed"; +update custom_forms_data set data_key="web_unsubscribed_notice" where data_key="web_unsubscribe_notice"; + + +# Footer section +LOCK TABLES `settings` WRITE; +INSERT INTO `settings` (`key`, `value`) VALUES('db_schema_version', @schema_version) ON DUPLICATE KEY UPDATE `value`=@schema_version; +UNLOCK TABLES; diff --git a/views/lists/create.hbs b/views/lists/create.hbs index 6cfaa7b8..ba37f4e3 100644 --- a/views/lists/create.hbs +++ b/views/lists/create.hbs @@ -26,11 +26,27 @@
    -
    -
    - +
    + +
    +
    + +
    +
    +
    + + +
    + +
    + + {{#translate}}Select how an unsuscription request by subscriber is handled.{{/translate}}
    diff --git a/views/lists/edit.hbs b/views/lists/edit.hbs index 5d206b50..cbe0b6cc 100644 --- a/views/lists/edit.hbs +++ b/views/lists/edit.hbs @@ -56,11 +56,27 @@
    -
    -
    - +
    + +
    +
    + +
    +
    +
    + + +
    + +
    + + {{#translate}}Select how an unsuscription request by subscriber is handled.{{/translate}}
    diff --git a/views/lists/forms/edit.hbs b/views/lists/forms/edit.hbs index 0ee5acdf..5b91dcfb 100644 --- a/views/lists/forms/edit.hbs +++ b/views/lists/forms/edit.hbs @@ -46,11 +46,15 @@

    {{#translate}}Subscribe{{/translate}} | - {{#translate}}Confirm Notice{{/translate}} + {{#translate}}Confirm Subscription Notice{{/translate}} + | + {{#translate}}Confirm Unsubscription Notice{{/translate}} + | + {{#translate}}Subscribed Notice{{/translate}} | {{#translate}}Updated Notice{{/translate}} | - {{#translate}}Unsubscribed Notice{{/translate}} + {{#translate}}Unsubscribed Notice{{/translate}} {{#if testUsers}} | {{#translate}}Manage{{/translate}} diff --git a/views/lists/forms/forms.hbs b/views/lists/forms/forms.hbs index 9bc3ab92..367d0ebf 100644 --- a/views/lists/forms/forms.hbs +++ b/views/lists/forms/forms.hbs @@ -68,7 +68,7 @@ - +

    diff --git a/views/subscription/mail-already-subscribed-html.mjml.hbs b/views/subscription/mail-already-subscribed-html.mjml.hbs new file mode 100644 index 00000000..d4a9b20e --- /dev/null +++ b/views/subscription/mail-already-subscribed-html.mjml.hbs @@ -0,0 +1,24 @@ + + + + {{#translate}}Email address already subscribed{{/translate}} + + + {{#translate}}We have received a subscription request. Your email address is however already registered.{{/translate}}. + + + {{#translate}}If you received this email by mistake, simply delete it. Your existing subscription won't be affected.{{/translate}} + + + {{#translate}}If you want to modify your subscription then you can {{/translate}} + {{#translate}}manage your preferences{{/translate}} {{#translate}}or{{/translate}} {{#translate}}unsubscribe here{{/translate}}. + + + {{#translate}}Return to our website{{/translate}} + + + {{#translate}}For questions about this list, please contact:{{/translate}} +
    {{contactAddress}} +
    +
    +
    diff --git a/views/subscription/mail-already-subscribed-text.hbs b/views/subscription/mail-already-subscribed-text.hbs new file mode 100644 index 00000000..fe982896 --- /dev/null +++ b/views/subscription/mail-already-subscribed-text.hbs @@ -0,0 +1,18 @@ +{{{title}}} +{{#translate}}Email address already subscribed{{/translate}} +================================ + +{{#translate}}We have received a subscription request. Your email address is however already registered.{{/translate}} + +{{#translate}}If you received this email by mistake, simply delete it. Your existing subscription won't be affected.{{/translate}} + +{{#translate}}If you want to modify your subscription then you can:{{/translate}} + +{{#translate}}manage your preferences{{/translate}}: {{preferencesUrl}} + +- {{#translate}}or{{/translate}} - + +{{#translate}}unsubscribe here{{/translate}}: {{unsubscribeUrl}} + +{{#translate}}For questions about this list, please contact:{{/translate}} +{{{contactAddress}}} diff --git a/views/subscription/mail-confirm-address-change-html.mjml.hbs b/views/subscription/mail-confirm-address-change-html.mjml.hbs new file mode 100644 index 00000000..a144fe33 --- /dev/null +++ b/views/subscription/mail-confirm-address-change-html.mjml.hbs @@ -0,0 +1,17 @@ + + + + {{#translate}}Please Confirm Subscription Address Change{{/translate}} + + + {{#translate}}Yes, subscribe this email address to the list{{/translate}} + + + {{#translate}}If you received this email by mistake, simply delete it. You won't be subscribed if you don't click the confirmation link above.{{/translate}} + + + {{#translate}}For questions about this list, please contact:{{/translate}} +
    {{contactAddress}} +
    +
    +
    diff --git a/views/subscription/mail-confirm-address-change-text.hbs b/views/subscription/mail-confirm-address-change-text.hbs new file mode 100644 index 00000000..baca9209 --- /dev/null +++ b/views/subscription/mail-confirm-address-change-text.hbs @@ -0,0 +1,10 @@ +{{{title}}} +{{#translate}}Please Confirm Subscription Address Change{{/translate}} +========================================== + +{{#translate}}Yes, subscribe this email address to the list{{/translate}}: {{{confirmUrl}}} + +{{#translate}}If you received this email by mistake, simply delete it. You won't be subscribed unless you click the confirmation link above.{{/translate}} + +{{#translate}}For questions about this list, please contact:{{/translate}} +{{{contactAddress}}} diff --git a/views/subscription/mail-confirm-html.mjml.hbs b/views/subscription/mail-confirm-subscription-html.mjml.hbs similarity index 100% rename from views/subscription/mail-confirm-html.mjml.hbs rename to views/subscription/mail-confirm-subscription-html.mjml.hbs diff --git a/views/subscription/mail-confirm-text.hbs b/views/subscription/mail-confirm-subscription-text.hbs similarity index 100% rename from views/subscription/mail-confirm-text.hbs rename to views/subscription/mail-confirm-subscription-text.hbs diff --git a/views/subscription/mail-confirm-unsubscription-html.mjml.hbs b/views/subscription/mail-confirm-unsubscription-html.mjml.hbs new file mode 100644 index 00000000..89f6bbce --- /dev/null +++ b/views/subscription/mail-confirm-unsubscription-html.mjml.hbs @@ -0,0 +1,17 @@ + + + + {{#translate}}Please Confirm Unsubscription{{/translate}} + + + {{#translate}}Yes, unsubscribe me from this list{{/translate}} + + + {{#translate}}If you received this email by mistake, simply delete it. You won't be unsubscribed if you don't click the confirmation link above.{{/translate}} + + + {{#translate}}For questions about this list, please contact:{{/translate}} +
    {{contactAddress}} +
    +
    +
    diff --git a/views/subscription/mail-confirm-unsubscription-text.hbs b/views/subscription/mail-confirm-unsubscription-text.hbs new file mode 100644 index 00000000..2dd2dd4f --- /dev/null +++ b/views/subscription/mail-confirm-unsubscription-text.hbs @@ -0,0 +1,10 @@ +{{{title}}} +{{#translate}}Please Confirm Subscription{{/translate}} +=========================== + +{{#translate}}Yes, unsubscribe me from this list{{/translate}}: {{{confirmUrl}}} + +{{#translate}}If you received this email by mistake, simply delete it. You won't be unsubscribed unless you click the confirmation link above.{{/translate}} + +{{#translate}}For questions about this list, please contact:{{/translate}} +{{{contactAddress}}} diff --git a/views/subscription/mail-unsubscribe-confirmed-html.mjml.hbs b/views/subscription/mail-unsubscription-confirmed-html.mjml.hbs similarity index 100% rename from views/subscription/mail-unsubscribe-confirmed-html.mjml.hbs rename to views/subscription/mail-unsubscription-confirmed-html.mjml.hbs diff --git a/views/subscription/mail-unsubscribe-confirmed-text.hbs b/views/subscription/mail-unsubscription-confirmed-text.hbs similarity index 100% rename from views/subscription/mail-unsubscribe-confirmed-text.hbs rename to views/subscription/mail-unsubscription-confirmed-text.hbs diff --git a/views/subscription/web-confirm-notice.mjml.hbs b/views/subscription/web-confirm-subscription-notice.mjml.hbs similarity index 100% rename from views/subscription/web-confirm-notice.mjml.hbs rename to views/subscription/web-confirm-subscription-notice.mjml.hbs diff --git a/views/subscription/web-confirm-unsubscription-notice.mjml.hbs b/views/subscription/web-confirm-unsubscription-notice.mjml.hbs new file mode 100644 index 00000000..5fc2537e --- /dev/null +++ b/views/subscription/web-confirm-unsubscription-notice.mjml.hbs @@ -0,0 +1,13 @@ + + + + {{#translate}}Almost Finished{{/translate}} + + + {{#translate}}We need to confirm your email address. To complete the unsubscription process, please click the link in the email we just sent you.{{/translate}} + + + {{#translate}}Return to our website{{/translate}} + + + diff --git a/views/subscription/web-subscribed.mjml.hbs b/views/subscription/web-subscribed-notice.mjml.hbs similarity index 100% rename from views/subscription/web-subscribed.mjml.hbs rename to views/subscription/web-subscribed-notice.mjml.hbs diff --git a/views/subscription/web-unsubscribe-notice.mjml.hbs b/views/subscription/web-unsubscribed-notice.mjml.hbs similarity index 100% rename from views/subscription/web-unsubscribe-notice.mjml.hbs rename to views/subscription/web-unsubscribed-notice.mjml.hbs From 32e2e61789128cecccafb84006dd794e6de05fca Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Sun, 30 Apr 2017 13:01:22 -0400 Subject: [PATCH 275/483] Unsubscription is identified by subscriber cid. This effectivelly allows only the recipient of the email to unsubscribe. This addresses issue #221. I also scraped the "auto" parameter which automatically submits the unsubscription form when the link is clicked in a campaign email. Instead, I introduced the unsubscription options ONE_STEP, ONE_STEP_WITH_FORM, TWO_STEP, TWO_STEP_WITH_FORM. The options without "_WITH_FORM" shall behave like when called with "auto". This functionality is to come. Currently it behaves as ONE_STEP_WITH_FORM. --- lib/models/lists.js | 8 +- lib/models/subscriptions.js | 227 ++++++------------ lib/tools.js | 2 +- routes/lists.js | 12 + routes/subscription.js | 168 +++---------- services/sender.js | 2 +- .../subscription-unsubscribe-form.hbs | 11 +- views/subscription/web-unsubscribe.mjml.hbs | 3 - 8 files changed, 126 insertions(+), 307 deletions(-) diff --git a/lib/models/lists.js b/lib/models/lists.js index 7ee7dcc6..839fefe1 100644 --- a/lib/models/lists.js +++ b/lib/models/lists.js @@ -9,9 +9,11 @@ let tableHelpers = require('../table-helpers'); const UnsubscriptionMode = { ONE_STEP: 0, - TWO_STEP: 1, - MANUAL: 2, - MAX: 3 + ONE_STEP_WITH_FORM: 1, + TWO_STEP: 2, + TWO_STEP_WITH_FORM: 3, + MANUAL: 4, + MAX: 5 }; module.exports.UnsubscriptionMode = UnsubscriptionMode; diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 57169257..24158ffd 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -107,84 +107,20 @@ module.exports.addConfirmation = (list, email, ip, data, callback) => { return callback(null, false); } - fields.list(list.id, (err, fieldList) => { - if (err) { - return callback(err); - } + if (data._skip) { + log.info('Subscription', 'Confirmation message for %s marked to be skipped (%s)', email, JSON.stringify(data)); + return callback(null, cid); + } - let encryptionKeys = []; - fields.getRow(fieldList, data).forEach(field => { - if (field.type === 'gpg' && field.value) { - encryptionKeys.push(field.value.trim()); - } - }); - - settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'defaultPostaddress', 'serviceUrl'], (err, configItems) => { - if (err) { - return callback(err); - } - - setImmediate(() => { - if (data._skip) { - log.info('Subscription', 'Confirmation message for %s marked to be skipped (%s)', email, JSON.stringify(data)); - return; - } - - // FIXME - move to router - const mailOpts = { - subject: _('%s: Please Confirm Subscription'), - confirmUrlRoute: '/subscription/confirm/', - templateType: 'subscription' - }; - - let sendMail = (html, text) => { - mailer.sendMail({ - from: { - name: configItems.defaultFrom, - address: configItems.defaultAddress - }, - to: { - name: [].concat(data.firstName || []).concat(data.lastName || []).join(' '), - address: email - }, - subject: util.format(mailOpts.subject, list.name), - encryptionKeys - }, { - html, - text, - data: { - title: list.name, - contactAddress: configItems.defaultAddress, - defaultPostaddress: configItems.defaultPostaddress, - confirmUrl: urllib.resolve(configItems.serviceUrl, mailOpts.confirmUrlRoute + cid) - } - }, err => { - if (err) { - log.error('Subscription', err); - } - }); - }; - - let text = { - template: 'subscription/mail-confirm-' + mailOpts.templateType + '-text.hbs' - }; - - let html = { - template: 'subscription/mail-confirm-' + mailOpts.templateType + '-html.mjml.hbs', - layout: 'subscription/layout.mjml.hbs', - type: 'mjml' - }; - - helpers.injectCustomFormTemplates(list.defaultForm, { text, html }, (err, tmpl) => { - if (err) { - return sendMail(html, text); - } - - sendMail(tmpl.html, tmpl.text); - }); - }); - return callback(null, cid); - }); + // FIXME - customize from the router + const mailOpts = { + ignoreDisableConfirmations: true + }; + const relativeUrls = { + confirmUrl: '/subscription/confirm/' + cid + }; + module.exports.sendMail(list, email, 'confirm-subscription', _('%s: Please Confirm Subscription'), relativeUrls, mailOpts, data, (err) => { + return callback(err, cid); }); }); }); @@ -395,8 +331,6 @@ module.exports.insert = (listId, meta, subscription, callback) => { queryArgs = values.concat(existing.id); query = 'UPDATE `subscription__' + listId + '` SET ' + keys.map(key => '`' + key + '`=?') + ' WHERE id=? LIMIT 1'; } - console.log(query); - console.log(queryArgs); connection.query(query, queryArgs, (err, result) => { if (err) { @@ -647,9 +581,8 @@ module.exports.update = (listId, cid, updates, allowEmail, callback) => { }); }; -module.exports.unsubscribe = (listId, email, campaignId, callback) => { +module.exports.unsubscribe = (listId, subscriberCid, campaignId, callback) => { listId = Number(listId) || 0; - email = (email || '').toString().trim(); campaignId = (campaignId || '').toString().trim() || false; @@ -657,8 +590,8 @@ module.exports.unsubscribe = (listId, email, campaignId, callback) => { return callback(new Error(_('Missing List ID'))); } - if (!email) { - return callback(new Error(_('Missing email address'))); + if (!subscriberCid) { + return callback(new Error(_('Missing subscriber cid'))); } db.getConnection((err, connection) => { @@ -666,7 +599,7 @@ module.exports.unsubscribe = (listId, email, campaignId, callback) => { return callback(err); } - connection.query('SELECT * FROM `subscription__' + listId + '` WHERE `email`=?', [email], (err, rows) => { + connection.query('SELECT * FROM `subscription__' + listId + '` WHERE `cid`=?', [subscriberCid], (err, rows) => { connection.release(); if (err) { return callback(err); @@ -1166,92 +1099,86 @@ module.exports.updateAddress = (list, cid, updates, ip, callback) => { }; -module.exports.sendMail = (listId, email, template, subject, mailOpts, subscription, callback) => { +module.exports.sendMail = (list, email, template, subject, relativeUrls, mailOpts, subscription, callback) => { db.getConnection((err, connection) => { if (err) { return callback(err); } - lists.get(listId, (err, list) => { - if (!err && !list) { - err = new Error(_('Selected list not found')); - err.status = 404; - } - + fields.list(list.id, (err, fieldList) => { if (err) { - return next(err); + return callback(err); } - fields.list(list.id, (err, fieldList) => { + let encryptionKeys = []; + fields.getRow(fieldList, subscription).forEach(field => { + if (field.type === 'gpg' && field.value) { + encryptionKeys.push(field.value.trim()); + } + }); + + settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'defaultPostaddress', 'serviceUrl', 'disableConfirmations'], (err, configItems) => { if (err) { return callback(err); } - let encryptionKeys = []; - fields.getRow(fieldList, subscription).forEach(field => { - if (field.type === 'gpg' && field.value) { - encryptionKeys.push(field.value.trim()); - } - }); + if (!mailOpts.ignoreDisableConfirmations && configItems.disableConfirmations) { + return; + } - settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'defaultPostaddress', 'serviceUrl'], (err, configItems) => { - if (err) { - return callback(err); - } + const data = { + title: list.name, + homepage: configItems.defaultHomepage || configItems.serviceUrl, + contactAddress: configItems.defaultAddress, + defaultPostaddress: configItems.defaultPostaddress, + }; - const data = { - title: list.name, - contactAddress: configItems.defaultAddress, - defaultPostaddress: configItems.defaultPostaddress, - }; + for (let relativeUrlKey in relativeUrls) { + data[relativeUrlKey] = urllib.resolve(configItems.serviceUrl, relativeUrls[relativeUrlKey]); + } - if (mailOpts.confirmUrlRoute) { - data.confirmUrl = urllib.resolve(configItems.serviceUrl, mailOpts.confirmUrlRoute + cid) - } - - function sendMail(html, text) { - mailer.sendMail({ - from: { - name: configItems.defaultFrom, - address: configItems.defaultAddress - }, - to: { - name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), - address: email - }, - subject: util.format(subject, list.name), - encryptionKeys - }, { - html, - text, - data - }, err => { - if (err) { - log.error('Subscription', err); - } - }); - } - - let text = { - template: 'subscription/mail-' + template + '-text.hbs' - }; - - let html = { - template: 'subscription/mail-' + template + '-html.mjml.hbs', - layout: 'subscription/layout.mjml.hbs', - type: 'mjml' - }; - - helpers.injectCustomFormTemplates(list.defaultForm, { text, html }, (err, tmpl) => { + function sendMail(html, text) { + mailer.sendMail({ + from: { + name: configItems.defaultFrom, + address: configItems.defaultAddress + }, + to: { + name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), + address: email + }, + subject: util.format(subject, list.name), + encryptionKeys + }, { + html, + text, + data + }, err => { if (err) { - return sendMail(html, text); + log.error('Subscription', err); } - - sendMail(tmpl.html, tmpl.text); }); + } - return callback(null, cid); + let text = { + template: 'subscription/mail-' + template + '-text.hbs' + }; + + let html = { + template: 'subscription/mail-' + template + '-html.mjml.hbs', + layout: 'subscription/layout.mjml.hbs', + type: 'mjml' + }; + + helpers.injectCustomFormTemplates(list.defaultForm, { text, html }, (err, tmpl) => { + if (err) { + return sendMail(html, text); + } + + sendMail(tmpl.html, tmpl.text); }); + + return callback(); }); }); }); diff --git a/lib/tools.js b/lib/tools.js index 49d17e44..901ad0df 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -181,7 +181,7 @@ function validateEmail(address, checkBlocked, callback) { function getMessageLinks(serviceUrl, campaign, list, subscription) { return { - LINK_UNSUBSCRIBE: urllib.resolve(serviceUrl, '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid + '?auto=yes&c=' + campaign.cid), + LINK_UNSUBSCRIBE: urllib.resolve(serviceUrl, '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid + '?c=' + campaign.cid), LINK_PREFERENCES: urllib.resolve(serviceUrl, '/subscription/' + list.cid + '/manage/' + subscription.cid), LINK_BROWSER: urllib.resolve(serviceUrl, '/archive/' + campaign.cid + '/' + list.cid + '/' + subscription.cid), CAMPAIGN_ID: campaign.cid, diff --git a/routes/lists.js b/routes/lists.js index 4618c683..402c9095 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -784,12 +784,24 @@ function getUnsubscriptionModeOptions(unsubscriptionMode) { label: _('One-step (i.e. no email with confirmation link)') }; + options[lists.UnsubscriptionMode.ONE_STEP_WITH_FORM] = { + value: lists.UnsubscriptionMode.ONE_STEP_WITH_FORM, + selected: unsubscriptionMode === lists.UnsubscriptionMode.ONE_STEP_WITH_FORM, + label: _('One-step with unsubscription form (i.e. no email with confirmation link)') + }; + options[lists.UnsubscriptionMode.TWO_STEP] = { value: lists.UnsubscriptionMode.TWO_STEP, selected: unsubscriptionMode === lists.UnsubscriptionMode.TWO_STEP, label: _('Two-step (i.e. an email with confirmation link will be sent)') }; + options[lists.UnsubscriptionMode.TWO_STEP_WITH_FORM] = { + value: lists.UnsubscriptionMode.TWO_STEP_WITH_FORM, + selected: unsubscriptionMode === lists.UnsubscriptionMode.TWO_STEP_WITH_FORM, + label: _('Two-step with unsubscription form (i.e. an email with confirmation link will be sent)') + }; + options[lists.UnsubscriptionMode.MANUAL] = { value: lists.UnsubscriptionMode.MANUAL, selected: unsubscriptionMode === lists.UnsubscriptionMode.MANUAL, diff --git a/routes/subscription.js b/routes/subscription.js index e8f2c5f4..193ff63f 100644 --- a/routes/subscription.js +++ b/routes/subscription.js @@ -65,80 +65,23 @@ router.get('/confirm/:cid', (req, res, next) => { return next(err); } - settings.list(['defaultHomepage', 'serviceUrl', 'pgpPrivateKey', 'defaultAddress', 'defaultPostaddress', 'defaultFrom', 'disableConfirmations'], (err, configItems) => { - if (err) { - return next(err); - } + // FIXME - differentiate email based on action - // FIXME - split decision based on action + const relativeUrls = { + preferencesUrl: '/subscription/' + list.cid + '/manage/' + subscription.cid, + unsubscribeUrl: '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid + }; + + subscriptions.sendMail(list, subscription.email, 'subscription-confirmed', _('%s: Subscription Confirmed'), relativeUrls, {}, subscription, (err) => { + if (err) { + req.flash('danger', err.message || err); + log.error('Subscription', err); + return res.redirect('/subscription/' + encodeURIComponent(req.params.lcid) + '/unsubscribe/' + encodeURIComponent(req.body.cid) + '?' + tools.queryParams(req.body)); + } res.redirect('/subscription/' + list.cid + '/subscribed-notice'); - - if (configItems.disableConfirmations) { - return; - } - - fields.list(list.id, (err, fieldList) => { - if (err) { - return log.error('Fields', err); - } - - let encryptionKeys = []; - fields.getRow(fieldList, subscription).forEach(field => { - if (field.type === 'gpg' && field.value) { - encryptionKeys.push(field.value.trim()); - } - }); - - let sendMail = (html, text) => { - mailer.sendMail({ - from: { - name: configItems.defaultFrom, - address: configItems.defaultAddress - }, - to: { - name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), - address: subscription.email - }, - subject: util.format(_('%s: Subscription Confirmed'), list.name), - encryptionKeys - }, { - html, - text, - data: { - title: list.name, - homepage: configItems.defaultHomepage || configItems.serviceUrl, - contactAddress: configItems.defaultAddress, - defaultPostaddress: configItems.defaultPostaddress, - preferencesUrl: urllib.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '/manage/' + subscription.cid), - unsubscribeUrl: urllib.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid) - } - }, err => { - if (err) { - log.error('Subscription', err); - } - }); - }; - - let text = { - template: 'subscription/mail-subscription-confirmed-text.hbs' - }; - - let html = { - template: 'subscription/mail-subscription-confirmed-html.mjml.hbs', - layout: 'subscription/layout.mjml.hbs', - type: 'mjml' - }; - - helpers.injectCustomFormTemplates(req.query.fid || list.defaultForm, { text, html }, (err, tmpl) => { - if (err) { - return sendMail(html, text); - } - - sendMail(tmpl.html, tmpl.text); - }); - }); }); + }); }); }); @@ -159,6 +102,8 @@ router.get('/:cid', passport.csrfProtection, (req, res, next) => { return next(err); } + // FIXME: process subscriber cid param for resubscription requests + let data = tools.convertKeys(req.query, { skip: ['layout'] }); @@ -561,6 +506,8 @@ router.post('/:lcid/manage-address', passport.parseForm, passport.csrfProtection }); router.get('/:lcid/unsubscribe/:ucid', passport.csrfProtection, (req, res, next) => { + // FIXME: handle different subscription options. The one below is currently "One-step with unsubscribe form" + lists.getByCid(req.params.lcid, (err, list) => { if (!err && !list) { err = new Error(_('Selected list not found')); @@ -587,9 +534,9 @@ router.get('/:lcid/unsubscribe/:ucid', passport.csrfProtection, (req, res, next) } subscription.lcid = req.params.lcid; + subscription.ucid = req.params.ucid; subscription.title = list.name; subscription.csrfToken = req.csrfToken(); - subscription.autosubmit = !!req.query.auto; subscription.campaign = req.query.c; subscription.defaultAddress = configItems.defaultAddress; subscription.defaultPostaddress = configItems.defaultPostaddress; @@ -636,83 +583,24 @@ router.post('/:lcid/unsubscribe', passport.parseForm, passport.csrfProtection, ( return next(err); } - let email = req.body.email; - - subscriptions.unsubscribe(list.id, email, req.body.campaign, (err, subscription) => { + subscriptions.unsubscribe(list.id, req.body.ucid, req.body.campaign, (err, subscription) => { if (err) { req.flash('danger', err.message || err); log.error('Subscription', err); - return res.redirect('/subscription/' + encodeURIComponent(req.params.lcid) + '/unsubscribe/' + encodeURIComponent(req.body.cid) + '?' + tools.queryParams(req.body)); + return res.redirect('/subscription/' + encodeURIComponent(req.params.lcid) + '/unsubscribe/' + encodeURIComponent(req.body.ucid) + '?' + tools.queryParams(req.body)); } - res.redirect('/subscription/' + req.params.lcid + '/unsubscribed-notice'); - fields.list(list.id, (err, fieldList) => { + const relativeUrls = { + subscribeUrl: '/subscription/' + list.cid + '?cid=' + subscription.cid + }; + subscriptions.sendMail(list, subscription.email, 'unsubscription-confirmed', _('%s: Unsubscribe Confirmed'), relativeUrls, {}, subscription, (err) => { if (err) { - return log.error('Fields', err); + req.flash('danger', err.message || err); + log.error('Subscription', err); + return res.redirect('/subscription/' + encodeURIComponent(list.cid) + '/unsubscribe/' + encodeURIComponent(subscription.cid) + '?' + tools.queryParams(req.body)); } - let encryptionKeys = []; - fields.getRow(fieldList, subscription).forEach(field => { - if (field.type === 'gpg' && field.value) { - encryptionKeys.push(field.value.trim()); - } - }); - - settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'defaultPostaddress', 'serviceUrl', 'disableConfirmations'], (err, configItems) => { - if (err) { - return log.error('Settings', err); - } - - if (configItems.disableConfirmations) { - return; - } - - let sendMail = (html, text) => { - mailer.sendMail({ - from: { - name: configItems.defaultFrom, - address: configItems.defaultAddress - }, - to: { - name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), - address: subscription.email - }, - subject: util.format(_('%s: Unsubscribe Confirmed'), list.name), - encryptionKeys - }, { - html, - text, - data: { - title: list.name, - contactAddress: configItems.defaultAddress, - defaultPostaddress: configItems.defaultPostaddress, - subscribeUrl: urllib.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '?cid=' + subscription.cid) - } - }, err => { - if (err) { - log.error('Subscription', err); - } - }); - }; - - let text = { - template: 'subscription/mail-unsubscription-confirmed-text.hbs' - }; - - let html = { - template: 'subscription/mail-unsubscription-confirmed-html.mjml.hbs', - layout: 'subscription/layout.mjml.hbs', - type: 'mjml' - }; - - helpers.injectCustomFormTemplates(req.query.fid || list.defaultForm, { text, html }, (err, tmpl) => { - if (err) { - return sendMail(html, text); - } - - sendMail(tmpl.html, tmpl.text); - }); - }); + res.redirect('/subscription/' + req.params.lcid + '/unsubscribed-notice'); }); }); }); diff --git a/services/sender.js b/services/sender.js index 0610a7bb..ea3e05de 100644 --- a/services/sender.js +++ b/services/sender.js @@ -418,7 +418,7 @@ function formatMessage(message, callback) { } }, list: { - unsubscribe: url.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '/unsubscribe/' + message.subscription.cid + '?auto=yes') + unsubscribe: url.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '/unsubscribe/' + message.subscription.cid) }, subject: tools.formatMessage(configItems.serviceUrl, campaign, list, message.subscription, campaign.subject), html: renderedHtml, diff --git a/views/subscription/partials/subscription-unsubscribe-form.hbs b/views/subscription/partials/subscription-unsubscribe-form.hbs index 8a11ebe2..4f40dcdc 100644 --- a/views/subscription/partials/subscription-unsubscribe-form.hbs +++ b/views/subscription/partials/subscription-unsubscribe-form.hbs @@ -1,20 +1,13 @@ - +
    - +
    -{{#if email}} - {{#if autosubmit}} - - {{/if}} -{{/if}} diff --git a/views/subscription/web-unsubscribe.mjml.hbs b/views/subscription/web-unsubscribe.mjml.hbs index a34892d4..4ea3c4fa 100644 --- a/views/subscription/web-unsubscribe.mjml.hbs +++ b/views/subscription/web-unsubscribe.mjml.hbs @@ -3,9 +3,6 @@ {{#translate}}Unsubscribe{{/translate}} - - {{#translate}}Enter your email address to unsubscribe from:{{/translate}} {{title}} - {{> subscription_unsubscribe_form}} From 92bffd78de23699d7bb5ae0cf1b8de0443da2b4b Mon Sep 17 00:00:00 2001 From: Alejandro Fanjul Date: Tue, 2 May 2017 18:38:54 +0200 Subject: [PATCH 276/483] RSS Improvements to allow more template Tags like ([RSS_ENTRY_TITLE], [RSS_ENTRY_DATE], [RSS_ENTRY_LINK], [RSS_ENTRY_CONTENT], [RSS_ENTRY_SUMMARY], [RSS_ENTRY_IMAGE_URL]) --- lib/feed.js | 4 +++- services/feedcheck.js | 7 +++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/feed.js b/lib/feed.js index 6758f798..10611eb2 100644 --- a/lib/feed.js +++ b/lib/feed.js @@ -50,7 +50,9 @@ module.exports.fetch = (url, callback) => { date: item.date || item.pubdate || item.pubDate || new Date(), guid: item.guid || item.link, link: item.link, - content: item.description || item.summary + content: item.description || item.summary, + summary: item.summary || item.description, + image_url: item.image.url, }; entries.push(entry); } diff --git a/services/feedcheck.js b/services/feedcheck.js index 3c506154..5f43c479 100644 --- a/services/feedcheck.js +++ b/services/feedcheck.js @@ -132,8 +132,11 @@ function checkEntries(parent, entries, callback) { let entryId = result.insertId; let html = (parent.html || '').toString().trim(); - if (/\[RSS_ENTRY\]/i.test(html)) { - html = html.replace(/\[RSS_ENTRY\]/, entry.content); + if (/\[RSS_ENTRY[\w]*\]/i.test(html)) { + html = html.replace(/\[RSS_ENTRY\]/, entry.content); //for backward compatibility + Object.keys(entry).forEach(key => { + html = html.replace('\[RSS_ENTRY_'+key.toUpperCase()+'\]', entry[key]) + }); } else { html = entry.content + html; } From 85cefc14e8aeed3457b896be6f8063d44a01e9d6 Mon Sep 17 00:00:00 2001 From: witzig Date: Tue, 2 May 2017 23:51:55 +0200 Subject: [PATCH 277/483] Added option to disable the sender header when using VERP --- config/default.toml | 6 ++++++ services/sender.js | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/config/default.toml b/config/default.toml index abcc128e..64d45fbe 100644 --- a/config/default.toml +++ b/config/default.toml @@ -103,6 +103,12 @@ db=5 enabled=false port=2525 host="0.0.0.0" +# With DMARC, the Return-Path and From address must match the same domain. +# By default we get around this by using the VERP address in the Sender header, +# with the side effect that some email clients diplay an ugly "on behalf of" message. +# You can safely disable this Sender header if you're not using DMARC or your +# VERP hostname is in the same domain as the From address. +# disablesenderheader=true [testserver] # Starts a vanity server that redirects all mail to /dev/null diff --git a/services/sender.js b/services/sender.js index 0610a7bb..bd0c72cd 100644 --- a/services/sender.js +++ b/services/sender.js @@ -318,6 +318,7 @@ function formatMessage(message, callback) { } let useVerp = config.verp.enabled && configItems.verpUse && configItems.verpHostname; + let useVerpSenderHeader = useVerp && config.verp.disablesenderheader !== true; fields.list(list.id, (err, fieldList) => { if (err) { return callback(err); @@ -389,7 +390,7 @@ function formatMessage(message, callback) { name: [].concat(message.subscription.firstName || []).concat(message.subscription.lastName || []).join(' '), address: message.subscription.email }, - sender: useVerp ? campaignAddress + '@' + configItems.verpHostname : false, + sender: useVerpSenderHeader ? campaignAddress + '@' + configItems.verpHostname : false, envelope: useVerp ? { from: campaignAddress + '@' + configItems.verpHostname, From bd4961366fa21b79b39cf3769579493c25836051 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Wed, 3 May 2017 15:46:49 -0400 Subject: [PATCH 278/483] More or less all the functionality for selectable unsubscription process. Not tested yet! Sending emails moved completely to controller. It felt strange to have some emails sent from the controller and some of them from the model. Confirmations refactored to an independent model that can be potentially used also for other actions that need an email confirmation. --- lib/helpers.js | 10 +- lib/models/campaigns.js | 2 +- lib/models/confirmations.js | 90 ++++ lib/models/forms.js | 3 +- lib/models/reports.js | 2 +- lib/models/subscriptions.js | 498 ++++-------------- lib/subscription-mail-helpers.js | 166 ++++++ routes/forms.js | 5 + routes/subscription.js | 358 +++++++++---- setup/sql/upgrade-00028.sql | 9 + .../mail-already-subscribed-html.mjml.hbs | 2 +- .../mail-already-subscribed-text.hbs | 2 +- .../web-manual-unsubscribe-notice.mjml.hbs | 13 + 13 files changed, 672 insertions(+), 488 deletions(-) create mode 100644 lib/models/confirmations.js create mode 100644 lib/subscription-mail-helpers.js create mode 100644 views/subscription/web-manual-unsubscribe-notice.mjml.hbs diff --git a/lib/helpers.js b/lib/helpers.js index 2cac3dbb..8324a811 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -21,7 +21,8 @@ module.exports = { injectCustomFormData, injectCustomFormTemplates, filterCustomFields, - getMjmlTemplate + getMjmlTemplate, + rollbackAndReleaseConnection }; function getDefaultMergeTags(callback) { @@ -258,3 +259,10 @@ function captureFlashMessages(req, res, callback) { callback(null, flash); }); } + +function rollbackAndReleaseConnection(connection, callback) { + connection.rollback(() => { + connection.release(); + return callback(); + }); +} diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index 1291cd78..c25c57ee 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -1074,7 +1074,7 @@ module.exports.updateMessage = (message, status, updateSubscription, callback) = } if (updateSubscription) { - subscriptions.changeStatus(message.subscription, message.list, statusCode === 2 ? message.campaign : false, statusCode, callback); + subscriptions.changeStatus(message.list, message.subscription, statusCode === 2 ? message.campaign : false, statusCode, callback); } else { return callback(null, true); } diff --git a/lib/models/confirmations.js b/lib/models/confirmations.js new file mode 100644 index 00000000..66025ed1 --- /dev/null +++ b/lib/models/confirmations.js @@ -0,0 +1,90 @@ +'use strict'; + +let db = require('../db'); +let shortid = require('shortid'); +let helpers = require('../helpers'); + +/* + Adds new entry to the confirmations tables. Generates confirmation cid, which it returns. + */ +module.exports.addConfirmation = (listId, action, ip, data, callback) => { + let cid = shortid.generate(); + + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + let query = 'INSERT INTO confirmations (cid, list, action, ip, data) VALUES (?,?,?,?,?)'; + connection.query(query, [cid, list, action, ip, JSON.stringify(data || {})], (err, result) => { + connection.release(); + if (err) { + return callback(err); + } + + if (!result || !result.affectedRows) { + return callback(null, false); + } + + return callback(null, cid); + }); + }); +}; + +/* + Atomically retrieves confirmation from the database, removes it from the database and returns it. + */ +module.exports.takeConfirmation = (cid, callback) => { + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + connection.beginTransaction(err => { + if (err) { + connection.release(); + return callback(err); + } + + let query = 'SELECT cid, list, action, ip, data FROM confirmations WHERE cid=? LIMIT 1'; + connection.query(query, [cid], (err, rows) => { + if (err) { + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); + } + + if (!rows || !rows.length) { + return helpers.rollbackAndReleaseConnection(connection, () => callback(null, false)); + } + + connection.query('DELETE FROM confirmations WHERE `cid`=? LIMIT 1', [cid], () => { + if (err) { + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); + } + + connection.commit(err => { + if (err) { + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); + } + connection.release(); + + let data; + try { + data = JSON.parse(rows[0].data); + } catch (E) { + data = {}; + } + + const result = { + listId: rows[0].list, + action: rows[0].action, + ip: rows[0].ip, + data + }; + + return callback(null, result); + }); + }); + }); + }); + }); +}; diff --git a/lib/models/forms.js b/lib/models/forms.js index 802e5706..9550077b 100644 --- a/lib/models/forms.js +++ b/lib/models/forms.js @@ -34,7 +34,8 @@ let allowedKeys = [ 'mail_confirm_address_change_text', 'web_unsubscribed_notice', 'mail_unsubscription_confirmed_html', - 'mail_unsubscription_confirmed_text' + 'mail_unsubscription_confirmed_text', + 'web_manual_unsubscribe_notice' ]; diff --git a/lib/models/reports.js b/lib/models/reports.js index 0c6a91f9..aac2d967 100644 --- a/lib/models/reports.js +++ b/lib/models/reports.js @@ -245,8 +245,8 @@ module.exports.getCampaignResults = (campaign, select, clause, callback) => { const query = 'SELECT ' + selFields.join(', ') + ' FROM `subscription__' + campaign.list + '` subscribers INNER JOIN `campaign__' + campaign.id + '` campaign on subscribers.id=campaign.subscription LEFT JOIN `campaign_tracker__' + campaign.id + '` tracker on subscribers.id=tracker.subscriber ' + clause; connection.query(query, (err, results) => { + connection.release(); if (err) { - connection.release(); return callback(err); } diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 24158ffd..08f2cbac 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -5,12 +5,9 @@ let shortid = require('shortid'); let tools = require('../tools'); let helpers = require('../helpers'); let fields = require('./fields'); -let geoip = require('geoip-ultralight'); let segments = require('./segments'); let settings = require('./settings'); let mailer = require('../mailer'); -let urllib = require('url'); -let log = require('npmlog'); let _ = require('../translate')._; let util = require('util'); let tableHelpers = require('../table-helpers'); @@ -88,150 +85,17 @@ module.exports.filter = (listId, request, columns, segmentId, callback) => { }; -module.exports.addConfirmation = (list, email, ip, data, callback) => { - let cid = shortid.generate(); - - db.getConnection((err, connection) => { - if (err) { - return callback(err); - } - - let query = 'INSERT INTO confirmations (cid, list, email, ip, data) VALUES (?,?,?,?,?)'; - connection.query(query, [cid, list.id, email, ip, JSON.stringify(data || {})], (err, result) => { - connection.release(); - if (err) { - return callback(err); - } - - if (!result || !result.affectedRows) { - return callback(null, false); - } - - if (data._skip) { - log.info('Subscription', 'Confirmation message for %s marked to be skipped (%s)', email, JSON.stringify(data)); - return callback(null, cid); - } - - // FIXME - customize from the router - const mailOpts = { - ignoreDisableConfirmations: true - }; - const relativeUrls = { - confirmUrl: '/subscription/confirm/' + cid - }; - module.exports.sendMail(list, email, 'confirm-subscription', _('%s: Please Confirm Subscription'), relativeUrls, mailOpts, data, (err) => { - return callback(err, cid); - }); - }); - }); -}; - -module.exports.processConfirmation = (cid, ip, callback) => { - db.getConnection((err, connection) => { - if (err) { - return callback(err); - } - - let query = 'SELECT * FROM confirmations WHERE cid=? LIMIT 1'; - connection.query(query, [cid], (err, rows) => { - connection.release(); - if (err) { - return callback(err); - } - - if (!rows || !rows.length) { - return callback(null, false); - } - - let subscription; - let listId = rows[0].list; - let email = rows[0].email; - try { - subscription = JSON.parse(rows[0].data); - } catch (E) { - subscription = {}; - } - - if (subscription._action === 'update') { - if (!subscription.subscriber) { // Something went terribly wrong and we don't have data that we have originally provided - return callback(new Error(_('Subscriber info corrupted or missing'))); - } - - // update email address instead of adding new - db.getConnection((err, connection) => { - if (err) { - return callback(err); - } - let query = 'UPDATE `subscription__' + listId + '` SET `email`=? WHERE `id`=? LIMIT 1'; - let args = [email, subscription.subscriber]; - connection.query(query, args, err => { - if (err) { - connection.release(); - return callback(err); - } - connection.query('DELETE FROM confirmations WHERE `cid`=? LIMIT 1', [cid], () => { - connection.release(); - return module.exports.getById(listId, subscription.subscriber, (err, subscriptionData) => { - return callback(err, subscriptionData, subscription._action); - }); - }); - }); - }); - return; - - } else if (subscription._action === 'unsubscribe') { - // TODO - return; - - } else if (subscription._action === 'subscribe') { - subscription.cid = cid; - subscription.list = listId; - subscription.email = email; - - let optInCountry = geoip.lookupCountry(ip) || null; - module.exports.insert(listId, { - email, - cid, - optInIp: ip, - optInCountry, - status: 1 - }, subscription, (err, result) => { - if (err) { - return callback(err); - } - - if (!result.entryId) { - return callback(new Error(_('Could not save subscription'))); - } - - db.getConnection((err, connection) => { - if (err) { - return callback(err); - } - connection.query('DELETE FROM confirmations WHERE `cid`=? LIMIT 1', [cid], () => { - connection.release(); - // reload full data from db in case it was an update, not insert - return module.exports.getById(listId, result.entryId, (err, subscriptionData) => { - return callback(err, subscriptionData, subscription._action); - }); - }); - }); - }); - - } else { - return callback(new Error(util.format(_('Subscription request corrupted - action: %s'), subscription._action))); - } - - }); - }); -}; - -module.exports.insert = (listId, meta, subscription, callback) => { +/* + Adds a new subscription. Returns error if a subscription with the same email address is already present and is not unsubscribed. + If it is unsubscribed, the existing subscription is changed based on the provided data. + If meta.partial is true, it updates even an active subscription. + */ +module.exports.insert = (listId, meta, subscriptionData, callback) => { meta = tools.convertKeys(meta); - subscription = tools.convertKeys(subscription); + subscriptionData = tools.convertKeys(subscriptionData); - meta.email = meta.email || subscription.email; + meta.email = meta.email || subscriptionData.email; meta.cid = meta.cid || shortid.generate(); fields.list(listId, (err, fieldList) => { @@ -245,8 +109,8 @@ module.exports.insert = (listId, meta, subscription, callback) => { let values = []; let allowedKeys = ['first_name', 'last_name', 'tz', 'is_test']; - Object.keys(subscription).forEach(key => { - let value = subscription[key]; + Object.keys(subscriptionData).forEach(key => { + let value = subscriptionData[key]; key = tools.toDbKey(key); if (key === 'tz') { value = (value || '').toString().toLowerCase().trim(); @@ -260,8 +124,7 @@ module.exports.insert = (listId, meta, subscription, callback) => { } }); - // FIXME - see issue #218 - fields.getValues(fields.getRow(fieldList, subscription, true, true, !!meta.partial), true).forEach(field => { + fields.getValues(fields.getRow(fieldList, subscriptionData, true, true, !!meta.partial), true).forEach(field => { keys.push(field.key); values.push(field.value); }); @@ -280,10 +143,7 @@ module.exports.insert = (listId, meta, subscription, callback) => { let query = 'SELECT `id`, `status`, `cid` FROM `subscription__' + listId + '` WHERE `email`=? OR `cid`=? LIMIT 1'; connection.query(query, [meta.email, meta.cid], (err, rows) => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } let query; @@ -297,6 +157,10 @@ module.exports.insert = (listId, meta, subscription, callback) => { let statusChange = !existing || existing.status !== meta.status; let statusDirection; + if (existing && !meta.partial) { + return helpers.rollbackAndReleaseConnection(connection, new Error(_('Email address already registered')), callback); + } + if (statusChange) { keys.push('status', 'status_change'); values.push(meta.status, new Date()); @@ -307,10 +171,7 @@ module.exports.insert = (listId, meta, subscription, callback) => { // nothing to update return connection.commit(err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } connection.release(); return callback(null, { @@ -334,10 +195,7 @@ module.exports.insert = (listId, meta, subscription, callback) => { connection.query(query, queryArgs, (err, result) => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } entryId = result.insertId || entryId; @@ -345,17 +203,11 @@ module.exports.insert = (listId, meta, subscription, callback) => { if (statusChange && statusDirection) { connection.query('UPDATE lists SET `subscribers`=`subscribers`' + statusDirection + '1 WHERE id=?', [listId], err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } connection.commit(err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } connection.release(); return callback(null, { @@ -368,10 +220,7 @@ module.exports.insert = (listId, meta, subscription, callback) => { } else { connection.commit(err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } connection.release(); return callback(null, { @@ -529,7 +378,7 @@ module.exports.update = (listId, cid, updates, allowEmail, callback) => { } if (!cid) { - return callback(new Error(_('Missing subscription ID'))); + return callback(new Error(_('Missing Subscription ID'))); } fields.list(listId, (err, fieldList) => { @@ -581,45 +430,7 @@ module.exports.update = (listId, cid, updates, allowEmail, callback) => { }); }; -module.exports.unsubscribe = (listId, subscriberCid, campaignId, callback) => { - listId = Number(listId) || 0; - - campaignId = (campaignId || '').toString().trim() || false; - - if (listId < 1) { - return callback(new Error(_('Missing List ID'))); - } - - if (!subscriberCid) { - return callback(new Error(_('Missing subscriber cid'))); - } - - db.getConnection((err, connection) => { - if (err) { - return callback(err); - } - - connection.query('SELECT * FROM `subscription__' + listId + '` WHERE `cid`=?', [subscriberCid], (err, rows) => { - connection.release(); - if (err) { - return callback(err); - } - if (!rows || !rows.length || rows[0].status !== 1) { - return callback(null, false); - } - - let subscription = tools.convertKeys(rows[0]); - module.exports.changeStatus(subscription.id, listId, campaignId, 2, err => { - if (err) { - return callback(err); - } - return callback(null, subscription); - }); - }); - }); -}; - -module.exports.changeStatus = (id, listId, campaignId, status, callback) => { +module.exports.changeStatus = (listId, id, campaignId, status, callback) => { db.getConnection((err, connection) => { if (err) { return callback(err); @@ -632,17 +443,11 @@ module.exports.changeStatus = (id, listId, campaignId, status, callback) => { connection.query('SELECT `status` FROM `subscription__' + listId + '` WHERE id=? LIMIT 1', [id], (err, rows) => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } if (!rows || !rows.length) { - return connection.rollback(() => { - connection.release(); - return callback(null, false); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(null, false)); } let oldStatus = rows[0].status; @@ -650,10 +455,7 @@ module.exports.changeStatus = (id, listId, campaignId, status, callback) => { let statusDirection; if (!statusChange) { - return connection.rollback(() => { - connection.release(); - return callback(null, true); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(null, true)); } if (statusChange && oldStatus === 1 || status === 1) { @@ -662,19 +464,13 @@ module.exports.changeStatus = (id, listId, campaignId, status, callback) => { connection.query('UPDATE `subscription__' + listId + '` SET `status`=?, `status_change`=NOW() WHERE id=? LIMIT 1', [status, id], err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } if (!statusDirection) { return connection.commit(err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } connection.release(); return callback(null, true); @@ -683,20 +479,14 @@ module.exports.changeStatus = (id, listId, campaignId, status, callback) => { connection.query('UPDATE `lists` SET `subscribers`=`subscribers`' + statusDirection + '1 WHERE id=? LIMIT 1', [listId], err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } // status change is not related to a campaign or it marks message as bounced etc. if (!campaignId || status > 2) { return connection.commit(err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } connection.release(); return callback(null, true); @@ -705,10 +495,7 @@ module.exports.changeStatus = (id, listId, campaignId, status, callback) => { connection.query('SELECT `id` FROM `campaigns` WHERE `cid`=? LIMIT 1', [campaignId], (err, rows) => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } let campaign = rows && rows[0] || false; @@ -717,10 +504,7 @@ module.exports.changeStatus = (id, listId, campaignId, status, callback) => { // should not happend return connection.commit(err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } connection.release(); return callback(null, true); @@ -730,10 +514,7 @@ module.exports.changeStatus = (id, listId, campaignId, status, callback) => { // we should see only unsubscribe events here but you never know connection.query('UPDATE `campaigns` SET `unsubscribed`=`unsubscribed`' + (status === 2 ? '+' : '-') + '1 WHERE `cid`=? LIMIT 1', [campaignId], err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } let query = 'UPDATE `campaign__' + campaign.id + '` SET `status`=? WHERE `list`=? AND `subscription`=? LIMIT 1'; @@ -742,18 +523,12 @@ module.exports.changeStatus = (id, listId, campaignId, status, callback) => { // Updated tracker status connection.query(query, values, err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } return connection.commit(err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } connection.release(); return callback(null, true); @@ -805,19 +580,13 @@ module.exports.delete = (listId, cid, callback) => { connection.query('DELETE FROM `subscription__' + listId + '` WHERE cid=? LIMIT 1', [cid], err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } if (subscription.status !== 1) { return connection.commit(err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } connection.release(); return callback(null, subscription.email); @@ -826,17 +595,11 @@ module.exports.delete = (listId, cid, callback) => { connection.query('UPDATE lists SET subscribers=subscribers-1 WHERE id=? LIMIT 1', [listId], err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } connection.commit(err => { if (err) { - return connection.rollback(() => { - connection.release(); - return callback(err); - }); + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } connection.release(); return callback(null, subscription.email); @@ -1028,13 +791,13 @@ module.exports.listImports = (listId, callback) => { }); }; - -module.exports.updateAddress = (list, cid, updates, ip, callback) => { - updates = tools.convertKeys(updates); +/* +Performs checks before update of an address. This includes finding the existing subscriber, validating the new email +and checking whether the new email does not conflict with other subscribers. + */ +module.exports.updateAddressCheck = (list, cid, emailNew, ip, callback) => { cid = (cid || '').toString().trim(); - let emailNew = (updates.emailNew || '').toString().trim(); - if (!list || !list.id) { return callback(new Error(_('Missing List ID'))); } @@ -1053,7 +816,7 @@ module.exports.updateAddress = (list, cid, updates, ip, callback) => { return callback(err); } - let query = 'SELECT `id`, `email` FROM `subscription__' + list.id + '` WHERE `cid`=? LIMIT 1'; + let query = 'SELECT * FROM `subscription__' + list.id + '` WHERE `cid`=? LIMIT 1'; let args = [cid]; connection.query(query, args, (err, rows) => { if (err) { @@ -1072,7 +835,7 @@ module.exports.updateAddress = (list, cid, updates, ip, callback) => { let old = rows[0]; - let query = 'SELECT `id` FROM `subscription__' + list.id + '` WHERE `email`=? AND `cid`<>? LIMIT 1'; + let query = 'SELECT `id` FROM `subscription__' + list.id + '` WHERE `email`=? AND `cid`<>? AND `status`=1 LIMIT 1'; let args = [emailNew, cid]; connection.query(query, args, (err, rows) => { connection.release(); @@ -1080,18 +843,11 @@ module.exports.updateAddress = (list, cid, updates, ip, callback) => { return callback(err); } - if (rows && rows[0] && rows[0].id) { - - - return callback(new Error(_('This address is already registered by someone else'))); + if (rows && rows.length > 0) { + return callback(null, old, false); + } else { + return callback(null, old, true); } - - module.exports.addConfirmation(list, emailNew, ip, { - _action: 'update', - cid, - subscriber: old.id, - emailOld: old.email - }, callback); }); }); }); @@ -1099,106 +855,64 @@ module.exports.updateAddress = (list, cid, updates, ip, callback) => { }; -module.exports.sendMail = (list, email, template, subject, relativeUrls, mailOpts, subscription, callback) => { - db.getConnection((err, connection) => { - if (err) { - return callback(err); - } - - fields.list(list.id, (err, fieldList) => { - if (err) { - return callback(err); - } - - let encryptionKeys = []; - fields.getRow(fieldList, subscription).forEach(field => { - if (field.type === 'gpg' && field.value) { - encryptionKeys.push(field.value.trim()); - } - }); - - settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'defaultPostaddress', 'serviceUrl', 'disableConfirmations'], (err, configItems) => { - if (err) { - return callback(err); - } - - if (!mailOpts.ignoreDisableConfirmations && configItems.disableConfirmations) { - return; - } - - const data = { - title: list.name, - homepage: configItems.defaultHomepage || configItems.serviceUrl, - contactAddress: configItems.defaultAddress, - defaultPostaddress: configItems.defaultPostaddress, - }; - - for (let relativeUrlKey in relativeUrls) { - data[relativeUrlKey] = urllib.resolve(configItems.serviceUrl, relativeUrls[relativeUrlKey]); - } - - function sendMail(html, text) { - mailer.sendMail({ - from: { - name: configItems.defaultFrom, - address: configItems.defaultAddress - }, - to: { - name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), - address: email - }, - subject: util.format(subject, list.name), - encryptionKeys - }, { - html, - text, - data - }, err => { - if (err) { - log.error('Subscription', err); - } - }); - } - - let text = { - template: 'subscription/mail-' + template + '-text.hbs' - }; - - let html = { - template: 'subscription/mail-' + template + '-html.mjml.hbs', - layout: 'subscription/layout.mjml.hbs', - type: 'mjml' - }; - - helpers.injectCustomFormTemplates(list.defaultForm, { text, html }, (err, tmpl) => { - if (err) { - return sendMail(html, text); - } - - sendMail(tmpl.html, tmpl.text); - }); - - return callback(); - }); - }); - }); -}; - - /* -FIXME -function getUnsubscriptionMode = (listId, start, limit, callback) => { - listId = Number(listId) || 0; - if (!listId) { - return callback(new Error('Missing List ID')); - } - - tableHelpers.list('subscription__' + listId, ['*'], 'email', null, start, limit, (err, rows, total) => { - if (!err) { - rows = rows.map(row => tools.convertKeys(row)); + Updates address in subscription__xxx + */ +module.exports.updateAddress = (listId, subscriptionId, emailNew, callback) => { + // update email address instead of adding new + db.getConnection((err, connection) => { + if (err) { + return callback(err); } - return callback(err, rows, total); + connection.beginTransaction(err => { + if (err) { + connection.release(); + return callback(err); + } + + let query = 'SELECT `id` FROM `subscription__' + listId + '` WHERE `email`=? AND `id`<>? AND `status`=1 LIMIT 1'; + let args = [emailNew, subscriptionId]; + connection.query(query, args, (err, rows) => { + if (err) { + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); + } + + if (rows && rows.length > 0) { + return helpers.rollbackAndReleaseConnection(connection, new Error(_('Email address already registered')), callback); + } + + let query = 'DELETE FROM `subscription__' + listId + '` WHERE `email`=? AND `id`<>?'; + let args = [emailNew, subscriptionId]; + connection.query(query, args, (err, rows) => { + if (err) { + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); + } + + let query = 'UPDATE `subscription__' + listId + '` SET `email`=? WHERE `id`=? LIMIT 1'; + let args = [emailNew, subscriptionId]; + connection.query(query, args, err => { + if (err) { + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); + } + + return connection.commit(err => { + if (err) { + return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); + } + connection.release(); + + return callback(); + }); + }); + }); + }); + }); }); + +}; + +module.exports.getUnsubscriptionMode = (list, subscriptionId) => { + // TODO: Once the unsubscription mode is customizable per segment, then this will be a good place to process it. + return list.unsubscriptionMode; }; -*/ \ No newline at end of file diff --git a/lib/subscription-mail-helpers.js b/lib/subscription-mail-helpers.js new file mode 100644 index 00000000..3211a6b9 --- /dev/null +++ b/lib/subscription-mail-helpers.js @@ -0,0 +1,166 @@ +'use strict'; + +const log = require('npmlog'); +const config = require('config'); +let db = require('./db'); +let fields = require('./models/fields'); +let settings = require('./models/settings'); +let mailer = require('./mailer'); +let urllib = require('url'); +let helpers = require('./helpers'); +let tools = require('./tools'); +let _ = require('./translate')._; +let util = require('util'); + + +module.exports = { + sendAlreadySubscribed, + sendConfirmAddressChange, + sendConfirmSubscription, + sendConfirmUnsubscription, + sendSubscriptionConfirmed, + sendUnsubscriptionConfirmed +}; + +function sendSubscriptionConfirmed(list, email, subscription, callback) { + const relativeUrls = { + preferencesUrl: '/subscription/' + list.cid + '/manage/' + subscription.cid, + unsubscribeUrl: '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid + }; + + subscriptions.sendMail(list, email, 'subscription-confirmed', _('%s: Subscription Confirmed'), relativeUrls, {}, data.subscriptionData, callback); +} + +function sendAlreadySubscribed(list, email, subscription, callback) { + const mailOpts = { + ignoreDisableConfirmations: true + }; + const relativeUrls = { + preferencesUrl: '/subscription/' + list.cid + '/manage/' + subscription.cid, + unsubscribeUrl: '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid + }; + module.exports.sendMail(list, email, 'already-subscribed', _('%s: Email Address Already Registered'), relativeUrls, mailOpts, subscription, callback); +} + +function sendConfirmAddressChange(list, email, cid, subscription, callback) { + const mailOpts = { + ignoreDisableConfirmations: true + }; + const relativeUrls = { + confirmUrl: '/subscription/confirm/' + cid + }; + module.exports.sendMail(list, email, 'confirm-address-change', _('%s: Please Confirm Email Change in Subscription'), relativeUrls, mailOpts, subscription, callback); +} + +function sendConfirmSubscription(list, email, cid, subscription, callback) { + const mailOpts = { + ignoreDisableConfirmations: true + }; + const relativeUrls = { + confirmUrl: '/subscription/confirm/' + cid + }; + module.exports.sendMail(list, email, 'confirm-subscription', _('%s: Please Confirm Subscription'), relativeUrls, mailOpts, subscription, callback); +} + +function sendConfirmUnsubscription(list, email, cid, subscription, callback) { + const mailOpts = { + ignoreDisableConfirmations: true + }; + const relativeUrls = { + confirmUrl: '/subscription/confirm/' + cid + }; + module.exports.sendMail(list, email, 'confirm-unsubscription', _('%s: Please Confirm Unsubscription'), relativeUrls, mailOpts, subscription, callback); +} + +function sendUnsubscriptionConfirmed(list, email, subscription, callback) { + const relativeUrls = { + subscribeUrl: '/subscription/' + list.cid + '?cid=' + subscription.cid + }; + subscriptions.sendMail(list, email, 'unsubscription-confirmed', _('%s: Unsubscribe Confirmed'), relativeUrls, {}, subscription, callback); +} + + +function sendMail(list, email, template, subject, relativeUrls, mailOpts, subscription, callback) { + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + fields.list(list.id, (err, fieldList) => { + if (err) { + return callback(err); + } + + let encryptionKeys = []; + fields.getRow(fieldList, subscription).forEach(field => { + if (field.type === 'gpg' && field.value) { + encryptionKeys.push(field.value.trim()); + } + }); + + settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'defaultPostaddress', 'serviceUrl', 'disableConfirmations'], (err, configItems) => { + if (err) { + return callback(err); + } + + if (!mailOpts.ignoreDisableConfirmations && configItems.disableConfirmations) { + return; + } + + const data = { + title: list.name, + homepage: configItems.defaultHomepage || configItems.serviceUrl, + contactAddress: configItems.defaultAddress, + defaultPostaddress: configItems.defaultPostaddress, + }; + + for (let relativeUrlKey in relativeUrls) { + data[relativeUrlKey] = urllib.resolve(configItems.serviceUrl, relativeUrls[relativeUrlKey]); + } + + function sendMail(html, text) { + mailer.sendMail({ + from: { + name: configItems.defaultFrom, + address: configItems.defaultAddress + }, + to: { + name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), + address: email + }, + subject: util.format(subject, list.name), + encryptionKeys + }, { + html, + text, + data + }, err => { + if (err) { + log.error('Subscription', err); + } + }); + } + + let text = { + template: 'subscription/mail-' + template + '-text.hbs' + }; + + let html = { + template: 'subscription/mail-' + template + '-html.mjml.hbs', + layout: 'subscription/layout.mjml.hbs', + type: 'mjml' + }; + + helpers.injectCustomFormTemplates(list.defaultForm, { text, html }, (err, tmpl) => { + if (err) { + return sendMail(html, text); + } + + sendMail(tmpl.html, tmpl.text); + }); + + return callback(); + }); + }); + }); +} diff --git a/routes/forms.js b/routes/forms.js index 6c3935ac..ef10bd9a 100644 --- a/routes/forms.js +++ b/routes/forms.js @@ -266,6 +266,11 @@ router.get('/:list/edit/:form', passport.csrfProtection, (req, res) => { label: _('Mail - Unsubscription Confirmed (Text)'), type: 'text', help: helpEmailText + }, { + name: 'web_manual_unsubscribe_notice', + label: _('Web - Manual Unsubscribe Notice'), + type: 'mjml', + help: helpMjmlGeneral }] } ]; diff --git a/routes/subscription.js b/routes/subscription.js index 193ff63f..d3e712e9 100644 --- a/routes/subscription.js +++ b/routes/subscription.js @@ -4,10 +4,8 @@ let log = require('npmlog'); let config = require('config'); let tools = require('../lib/tools'); let helpers = require('../lib/helpers'); -let mailer = require('../lib/mailer'); let passport = require('../lib/passport'); let express = require('express'); -let urllib = require('url'); let router = new express.Router(); let lists = require('../lib/models/lists'); let fields = require('../lib/models/fields'); @@ -18,6 +16,9 @@ let _ = require('../lib/translate')._; let util = require('util'); let cors = require('cors'); let cache = require('memory-cache'); +let geoip = require('geoip-ultralight'); +let confirmations = require('../lib/models/confirmations'); +let mailHelpers = require('../lib/subscription-mail-helpers'); let originWhitelist = config.cors && config.cors.origins || []; @@ -45,7 +46,7 @@ let corsOrCsrfProtection = (req, res, next) => { }; router.get('/confirm/:cid', (req, res, next) => { - subscriptions.processConfirmation(req.params.cid, req.ip, (err, subscription, action) => { + confirmations.takeConfirmation(req.params.cid, (err, confirmation) => { if (!err && !subscription) { err = new Error(_('Selected subscription not found')); err.status = 404; @@ -55,7 +56,9 @@ router.get('/confirm/:cid', (req, res, next) => { return next(err); } - lists.get(subscription.list, (err, list) => { + const data = confirmation.data; + + lists.get(confirmation.listId, (err, list) => { if (!err && !list) { err = new Error(_('Selected list not found')); err.status = 404; @@ -65,23 +68,89 @@ router.get('/confirm/:cid', (req, res, next) => { return next(err); } - // FIXME - differentiate email based on action - const relativeUrls = { - preferencesUrl: '/subscription/' + list.cid + '/manage/' + subscription.cid, - unsubscribeUrl: '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid - }; - - subscriptions.sendMail(list, subscription.email, 'subscription-confirmed', _('%s: Subscription Confirmed'), relativeUrls, {}, subscription, (err) => { - if (err) { - req.flash('danger', err.message || err); - log.error('Subscription', err); - return res.redirect('/subscription/' + encodeURIComponent(req.params.lcid) + '/unsubscribe/' + encodeURIComponent(req.body.cid) + '?' + tools.queryParams(req.body)); + if (confirmation.action === 'change-address') { + if (!data.subscriptionId) { // Something went terribly wrong and we don't have data that we have originally provided + return next(new Error(_('Subscriber info corrupted or missing'))); } - res.redirect('/subscription/' + list.cid + '/subscribed-notice'); - }); + subscriptions.updateAddress(list.id, data.subscriptionId, data.emailNew, err => { + if (err) { + return next(err); + } + subscriptions.getById(list.id, subscriptionId, (err, subscription) => { + if (err) { + return next(err); + } + + mailHelpers.sendSubscriptionConfirmed(list, data.emailNew, subscription, err => { + if (err) { + return next(err); + } + + res.redirect('/subscription/' + list.cid + '/manage-address/' + subscription.cid); + }); + }); + }); + + } else if (confirmation.action === 'subscribe') { + let optInCountry = geoip.lookupCountry(confirmation.ip) || null; + + const meta = { + email: data.email, + optInIp: confirmation.ip, + optInCountry, + status: 1 + }; + + subscriptions.insert(list.id, meta, data.subscriptionData, (err, result) => { + if (err) { + return next(err); + } + + if (!result.entryId) { + return next(new Error(_('Could not save subscription'))); + } + + subscriptions.getById(list.id, result.entryId, (err, subscription) => { + if (err) { + return next(err); + } + + mailHelpers.sendSubscriptionConfirmed(list, data.email, subscription, err => { + if (err) { + return next(err); + } + + res.redirect('/subscription/' + list.cid + '/subscribed-notice'); + }); + }); + }); + + } else if (confirmation.action === 'unsubscribe') { + subscriptions.changeStatus(list.id, confirmation.data.subscriptionId, confirmation.data.campaignId, 2, (err, found) => { + if (err) { + return next(err); + } + + // TODO: Shall we do anything with "found"? + + subscriptions.getById(list.id, confirmation.data.subscriptionId, (err, subscription) => { + if (err) { + return next(err); + } + + mailHelpers.sendUnsubscriptionConfirmed(list, subscription.email, subscription, err => { + if (err) { + return next(err); + } + + res.redirect('/subscription/' + req.params.lcid + '/unsubscribed-notice'); + }); + }); + }); + } }); }); }); @@ -262,7 +331,7 @@ router.post('/:cid/subscribe', passport.parseForm, corsOrCsrfProtection, (req, r } // Check if the subscriber seems legit. This is a really simple check, the only requirement is that - // the subsciber has JavaScript turned on and thats it. If Mailtrain gets more targeted then this + // the subscriber has JavaScript turned on and thats it. If Mailtrain gets more targeted then this // simple check should be replaced with an actual captcha let subTime = Number(req.body.sub) || 0; // allow clock skew 24h in the past and 24h to the future @@ -285,39 +354,67 @@ router.post('/:cid/subscribe', passport.parseForm, corsOrCsrfProtection, (req, r return req.xhr ? sendJsonError(err) : next(err); } - let data = {}; + let subscriptionData = {}; Object.keys(req.body).forEach(key => { if (key !== 'email' && key.charAt(0) !== '_') { - data[key] = (req.body[key] || '').toString().trim(); + subscriptionData[key] = (req.body[key] || '').toString().trim(); } }); + subscriptionData = tools.convertKeys(data); - data = tools.convertKeys(data); - - data._address = req.body.address; - data._sub = req.body.sub; - data._skip = !testsPass; - data._action = 'subscribe'; - - subscriptions.addConfirmation(list, email, req.ip, data, (err, confirmCid) => { - if (!err && !confirmCid) { - err = new Error(_('Could not store confirmation data')); - } - + subscriptions.getByEmail(list.id, email, (err, subscription) => { if (err) { - if (req.xhr) { - return sendJsonError(err); - } - req.flash('danger', err.message || err); - return res.redirect('/subscription/' + encodeURIComponent(req.params.cid) + '?' + tools.queryParams(req.body)); + return req.xhr ? sendJsonError(err) : next(err); } - if (req.xhr) { - return res.status(200).json({ - msg: _('Please Confirm Subscription') + if (subscription) { + mailHelpers.sendAlreadySubscribed(list, email, subscription, (err) => { + if (err) { + return req.xhr ? sendJsonError(err) : next(err); + } + res.redirect('/subscription/' + req.params.cid + '/confirm-subscription-notice'); + }); + } else { + const data = { + email, + subscriptionData + }; + + confirmations.addConfirmation(list.id, 'subscribe', req.ip, data, (err, confirmCid) => { + if (!err && !confirmCid) { + err = new Error(_('Could not store confirmation data')); + } + + if (err) { + if (req.xhr) { + return sendJsonError(err); + } + req.flash('danger', err.message || err); + return res.redirect('/subscription/' + encodeURIComponent(req.params.cid) + '?' + tools.queryParams(req.body)); + } + + function sendWebResponse() { + if (req.xhr) { + return res.status(200).json({ + msg: _('Please Confirm Subscription') + }); + } + res.redirect('/subscription/' + req.params.cid + '/confirm-subscription-notice'); + } + + if (!testsPass) { + log.info('Subscription', 'Confirmation message for %s marked to be skipped (%s)', email, JSON.stringify(data)); + sendWebResponse(); + } else { + sendConfirmSubscription(list, email, confirmCid, data, (err) => { + if (err) { + return req.xhr ? sendJsonError(err) : sendWebResponse(err); + } + sendWebResponse(); + }) + } }); } - res.redirect('/subscription/' + req.params.cid + '/confirm-subscription-notice'); }); }); }); @@ -492,15 +589,41 @@ router.post('/:lcid/manage-address', passport.parseForm, passport.csrfProtection return next(err); } - subscriptions.updateAddress(list, req.body.cid, req.body, req.ip, err => { + const emailNew = (req.body.emailNew || '').toString().trim(); + + subscriptions.updateAddressCheck(list, req.body.cid, emailNew, req.ip, (err, subscription, newEmailAvailable) => { if (err) { req.flash('danger', err.message || err); log.error('Subscription', err); return res.redirect('/subscription/' + encodeURIComponent(req.params.lcid) + '/manage-address/' + encodeURIComponent(req.body.cid) + '?' + tools.queryParams(req.body)); } - req.flash('info', _('An email with further instructions has been sent to the provided address')); - res.redirect('/subscription/' + req.params.lcid + '/manage/' + req.body.cid); + function sendWebResponse(err) { + if (err) { + return next(err); + } + + req.flash('info', _('An email with further instructions has been sent to the provided address')); + res.redirect('/subscription/' + req.params.lcid + '/manage/' + req.body.cid); + } + + if (newEmailAvailable) { + const data = { + subscriptionId: subscription.id, + emailNew + }; + + confirmations.addConfirmation(list.id, 'change-address', req.ip, data, err => { + if (err) { + return next(err); + } + + mailHelpers.sendConfirmAddressChange(list, emailNew, subscription, sendWebResponse); + }); + + } else { + mailHelpers.sendAlreadySubscribed(list, emailNew, subscription, sendWebResponse); + } }); }); }); @@ -525,7 +648,7 @@ router.get('/:lcid/unsubscribe/:ucid', passport.csrfProtection, (req, res, next) subscriptions.get(list.id, req.params.ucid, (err, subscription) => { if (!err && !subscription) { - err = new Error(_('Subscription not found from this list')); + err = new Error(_('Subscription not found in this list')); err.status = 404; } @@ -533,40 +656,47 @@ router.get('/:lcid/unsubscribe/:ucid', passport.csrfProtection, (req, res, next) return next(err); } - subscription.lcid = req.params.lcid; - subscription.ucid = req.params.ucid; - subscription.title = list.name; - subscription.csrfToken = req.csrfToken(); - subscription.campaign = req.query.c; - subscription.defaultAddress = configItems.defaultAddress; - subscription.defaultPostaddress = configItems.defaultPostaddress; - subscription.template = { - template: 'subscription/web-unsubscribe.mjml.hbs', - layout: 'subscription/layout.mjml.hbs' - }; + if (list.unsubscriptionMode === lists.UnsubscriptionMode.ONE_STEP_WITH_FORM || + list.unsubscriptionMode === lists.UnsubscriptionMode.TWO_STEP_WITH_FORM) { - helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-unsubscribe', subscription, (err, data) => { - if (err) { - return next(err); - } + subscription.lcid = req.params.lcid; + subscription.ucid = req.params.ucid; + subscription.title = list.name; + subscription.csrfToken = req.csrfToken(); + subscription.campaign = req.query.c; + subscription.defaultAddress = configItems.defaultAddress; + subscription.defaultPostaddress = configItems.defaultPostaddress; - helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { + subscription.template = { + template: 'subscription/web-unsubscribe.mjml.hbs', + layout: 'subscription/layout.mjml.hbs' + }; + + helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-unsubscribe', subscription, (err, data) => { if (err) { return next(err); } - helpers.captureFlashMessages(req, res, (err, flash) => { + helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { if (err) { return next(err); } - data.isWeb = true; - data.flashMessages = flash; - res.send(htmlRenderer(data)); + helpers.captureFlashMessages(req, res, (err, flash) => { + if (err) { + return next(err); + } + + data.isWeb = true; + data.flashMessages = flash; + res.send(htmlRenderer(data)); + }); }); }); - }); + } else { // UnsubscriptionMode.ONE_STEP || UnsubscriptionMode.TWO_STEP || UnsubscriptionMode.MANUAL + handleUnsubscribe(list, subscription, res); + } }); }); }); @@ -583,47 +713,95 @@ router.post('/:lcid/unsubscribe', passport.parseForm, passport.csrfProtection, ( return next(err); } - subscriptions.unsubscribe(list.id, req.body.ucid, req.body.campaign, (err, subscription) => { - if (err) { - req.flash('danger', err.message || err); - log.error('Subscription', err); - return res.redirect('/subscription/' + encodeURIComponent(req.params.lcid) + '/unsubscribe/' + encodeURIComponent(req.body.ucid) + '?' + tools.queryParams(req.body)); + const campaignId = (req.body.campaign || '').toString().trim() || false; + + subscriptions.get(list.id, req.body.ucid, (err, subscription) => { + if (!err && !subscription) { + err = new Error(_('Subscription not found in this list')); + err.status = 404; } - const relativeUrls = { - subscribeUrl: '/subscription/' + list.cid + '?cid=' + subscription.cid - }; - subscriptions.sendMail(list, subscription.email, 'unsubscription-confirmed', _('%s: Unsubscribe Confirmed'), relativeUrls, {}, subscription, (err) => { - if (err) { - req.flash('danger', err.message || err); - log.error('Subscription', err); - return res.redirect('/subscription/' + encodeURIComponent(list.cid) + '/unsubscribe/' + encodeURIComponent(subscription.cid) + '?' + tools.queryParams(req.body)); - } + if (err) { + return next(err); + } - res.redirect('/subscription/' + req.params.lcid + '/unsubscribed-notice'); - }); + handleUnsubscribe(list, subscription, res); }); }); }); +function handleUnsubscribe(list, subscription, res) { + if (list.unsubscriptionMode === lists.UnsubscriptionMode.TWO_STEP || + list.unsubscriptionMode === lists.UnsubscriptionMode.TWO_STEP_WITH_FORM) { + + const data = { + subscriptionId: subscription.id, + campaignId + }; + + confirmations.addConfirmation(list.id, 'unsubscribe', req.ip, data, (err, confirmCid) => { + if (!err && !confirmCid) { + err = new Error(_('Could not store confirmation data')); + } + + if (err) { + return next(err); + } + + mailHelpers.sendConfirmUnsubscription(list, subscription.email, subscription, err => { + if (err) { + return next(err); + } + + res.redirect('/subscription/' + list.cid + '/unsubscribed-notice'); + }); + }); + + } else if (list.unsubscriptionMode === lists.UnsubscriptionMode.ONE_STEP || + list.unsubscriptionMode === lists.UnsubscriptionMode.ONE_STEP_WITH_FORM) { + + subscriptions.changeStatus(subscription.id, list.id, campaignId, 2, (err, found) => { + if (err) { + return next(err); + } + + // TODO: Shall we do anything with "found"? + + mailHelpers.sendUnsubscriptionConfirmed(list, subscription.email, subscription, err => { + if (err) { + return next(err); + } + + res.redirect('/subscription/' + list.cid + '/unsubscribed-notice'); + }); + }); + } else { // UnsubscriptionMode.MANUAL + res.redirect('/subscription/' + list.cid + '/manual-unsubscribe-notice'); + } +} + router.get('/:cid/confirm-subscription-notice', (req, res, next) => { - notice('confirm-subscription', req, res, next); + webNotice('confirm-subscription', req, res, next); }); router.get('/:cid/confirm-unsubscription-notice', (req, res, next) => { - notice('confirm-unsubscription', req, res, next); + webNotice('confirm-unsubscription', req, res, next); }); router.get('/:cid/subscribed-notice', (req, res, next) => { - notice('subscribed', req, res, next); + webNotice('subscribed', req, res, next); }); router.get('/:cid/updated-notice', (req, res, next) => { - notice('updated', req, res, next); + webNotice('updated', req, res, next); }); router.get('/:cid/unsubscribed-notice', (req, res, next) => { - notice('unsubscribed', req, res, next); + webNotice('unsubscribed', req, res, next); +}); + +router.get('/:cid/manual-unsubscribe-notice', (req, res, next) => { + webNotice('manual-unsubscribe', req, res, next); }); router.post('/publickey', passport.parseForm, (req, res, next) => { @@ -665,7 +843,7 @@ router.post('/publickey', passport.parseForm, (req, res, next) => { }); -function notice(type, req, res, next) { +function webNotice(type, req, res, next) { lists.getByCid(req.params.cid, (err, list) => { if (!err && !list) { err = new Error(_('Selected list not found')); @@ -676,7 +854,7 @@ function notice(type, req, res, next) { return next(err); } - settings.list(['defaultHomepage', 'serviceUrl', 'defaultAddress', 'defaultPostaddress'], (err, configItems) => { + settings.list(['defaultHomepage', 'serviceUrl', 'defaultAddress', 'defaultPostaddress', 'adminEmail'], (err, configItems) => { if (err) { return next(err); } @@ -686,6 +864,7 @@ function notice(type, req, res, next) { homepage: configItems.defaultHomepage || configItems.serviceUrl, defaultAddress: configItems.defaultAddress, defaultPostaddress: configItems.defaultPostaddress, + contactAddress: configItems.defaultAddress, template: { template: 'subscription/web-' + type + '-notice.mjml.hbs', layout: 'subscription/layout.mjml.hbs' @@ -718,5 +897,4 @@ function notice(type, req, res, next) { }); } - module.exports = router; diff --git a/setup/sql/upgrade-00028.sql b/setup/sql/upgrade-00028.sql index 8ea8bdbc..82d38d21 100644 --- a/setup/sql/upgrade-00028.sql +++ b/setup/sql/upgrade-00028.sql @@ -5,8 +5,17 @@ SET @schema_version = '28'; # Add unsubscription mode field to lists ALTER TABLE `lists` ADD COLUMN `unsubscription_mode` int(11) unsigned DEFAULT 0 NOT NULL AFTER `public_subscribe`; +# Delete all confirmations as we use different structure in "data". +DELETE FROM `confirmations`; + # Change the name of the column to better reflect that confirmations are also used for unsubscription and email address update +# Drop email field as this does not have a clear semantics in change address. Since email is not used to search in the table, +# it can be stored in data +# Create field action to distinguish between different confirmation types (subscribe, unsubscribe, change-address) ALTER TABLE `confirmations` CHANGE `opt_in_ip` `ip` varchar(100) DEFAULT NULL; +ALTER TABLE `confirmations` DROP `email`; +ALTER TABLE `confirmations` ADD COLUMN `action` varchar(100) NOT NULL AFTER `list`; + # Rename affected forms in custom_forms_data update custom_forms_data set data_key="mail_confirm_subscription_html" where data_key="mail_confirm_html"; diff --git a/views/subscription/mail-already-subscribed-html.mjml.hbs b/views/subscription/mail-already-subscribed-html.mjml.hbs index d4a9b20e..83e7eb1a 100644 --- a/views/subscription/mail-already-subscribed-html.mjml.hbs +++ b/views/subscription/mail-already-subscribed-html.mjml.hbs @@ -1,7 +1,7 @@ - {{#translate}}Email address already subscribed{{/translate}} + {{#translate}}Email address already registered{{/translate}} {{#translate}}We have received a subscription request. Your email address is however already registered.{{/translate}}. diff --git a/views/subscription/mail-already-subscribed-text.hbs b/views/subscription/mail-already-subscribed-text.hbs index fe982896..5c273dfe 100644 --- a/views/subscription/mail-already-subscribed-text.hbs +++ b/views/subscription/mail-already-subscribed-text.hbs @@ -1,5 +1,5 @@ {{{title}}} -{{#translate}}Email address already subscribed{{/translate}} +{{#translate}}Email address already registered{{/translate}} ================================ {{#translate}}We have received a subscription request. Your email address is however already registered.{{/translate}} diff --git a/views/subscription/web-manual-unsubscribe-notice.mjml.hbs b/views/subscription/web-manual-unsubscribe-notice.mjml.hbs new file mode 100644 index 00000000..7dfe1609 --- /dev/null +++ b/views/subscription/web-manual-unsubscribe-notice.mjml.hbs @@ -0,0 +1,13 @@ + + + + {{#translate}}Online Unsubscription Is Not Possible{{/translate}} + + + {{#translate}}Please contact us at{{/translate}} {{contactAddress}} {{#translate}}to get removed from the list{{/translate}}. + + + {{#translate}}Return to our website{{/translate}} + + + From 408db13fd45442adb3ada69dc6d59e5d34cc77fd Mon Sep 17 00:00:00 2001 From: witzig Date: Wed, 3 May 2017 23:13:05 +0200 Subject: [PATCH 279/483] Updated RSS merge tag reference --- lib/editor-helpers.js | 17 ++++++++++++++--- lib/feed.js | 2 +- lib/helpers.js | 27 +++++++++++++++++++++++++++ routes/campaigns.js | 19 ++++--------------- views/campaigns/edit-rss.hbs | 4 ++-- 5 files changed, 48 insertions(+), 21 deletions(-) diff --git a/lib/editor-helpers.js b/lib/editor-helpers.js index c81eebad..e4c4e79f 100644 --- a/lib/editor-helpers.js +++ b/lib/editor-helpers.js @@ -6,7 +6,8 @@ let templates = require('../lib/models/templates'); let campaigns = require('../lib/models/campaigns'); module.exports = { - getResource + getResource, + getMergeTagsForResource }; function getResource(type, id, callback) { @@ -53,7 +54,7 @@ function getMergeTagsForResource(resource, callback) { return callback(err.message || err); } - if (!resource.list) { + if (!Number(resource.list)) { return callback(null, defaultMergeTags); } @@ -62,7 +63,17 @@ function getMergeTagsForResource(resource, callback) { return callback(err.message || err); } - callback(null, defaultMergeTags.concat(listMergeTags)); + if (resource.type !== 2) { + return callback(null, defaultMergeTags.concat(listMergeTags)); + } + + helpers.getRSSMergeTags((err, rssMergeTags) => { + if (err) { + return callback(err.message || err); + } + + callback(null, defaultMergeTags.concat(listMergeTags, rssMergeTags)); + }); }); }); } diff --git a/lib/feed.js b/lib/feed.js index 10611eb2..66bd2f20 100644 --- a/lib/feed.js +++ b/lib/feed.js @@ -52,7 +52,7 @@ module.exports.fetch = (url, callback) => { link: item.link, content: item.description || item.summary, summary: item.summary || item.description, - image_url: item.image.url, + image_url: item.image.url }; entries.push(entry); } diff --git a/lib/helpers.js b/lib/helpers.js index 2cac3dbb..597c36d8 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -16,6 +16,7 @@ let hbs = require('hbs'); module.exports = { getDefaultMergeTags, + getRSSMergeTags, getListMergeTags, captureFlashMessages, injectCustomFormData, @@ -59,6 +60,32 @@ function getDefaultMergeTags(callback) { }]); } +function getRSSMergeTags(callback) { + // Using a callback for the sake of future-proofness + callback(null, [{ + key: 'RSS_ENTRY', + value: _('content from an RSS entry') + }, { + key: 'RSS_ENTRY_TITLE', + value: _('RSS entry title') + }, { + key: 'RSS_ENTRY_DATE', + value: _('RSS entry date') + }, { + key: 'RSS_ENTRY_LINK', + value: _('RSS entry link') + }, { + key: 'RSS_ENTRY_CONTENT', + value: _('content from an RSS entry') + }, { + key: 'RSS_ENTRY_SUMMARY', + value: _('RSS entry summary') + }, { + key: 'RSS_ENTRY_IMAGE_URL', + value: _('RSS entry image URL') + }]); +} + function getListMergeTags(listId, callback) { lists.get(listId, (err, list) => { if (err) { diff --git a/routes/campaigns.js b/routes/campaigns.js index f239bdd6..424aebbb 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -9,7 +9,7 @@ let campaigns = require('../lib/models/campaigns'); let subscriptions = require('../lib/models/subscriptions'); let settings = require('../lib/models/settings'); let tools = require('../lib/tools'); -let helpers = require('../lib/helpers'); +let editorHelpers = require('../lib/editor-helpers.js'); let striptags = require('striptags'); let passport = require('../lib/passport'); let htmlescape = require('escape-html'); @@ -186,25 +186,14 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { view = 'campaigns/edit'; } - helpers.getDefaultMergeTags((err, defaultMergeTags) => { + editorHelpers.getMergeTagsForResource(campaign, (err, mergeTags) => { if (err) { req.flash('danger', err.message || err); return res.redirect('/'); } - helpers.getListMergeTags(campaign.list, (err, listMergeTags) => { - if (err) { - req.flash('danger', err.message || err); - return res.redirect('/'); - } - - campaign.mergeTags = defaultMergeTags.concat(listMergeTags); - campaign.type === 2 && campaign.mergeTags.push({ - key: 'RSS_ENTRY', - value: _('content from an RSS entry') - }); - res.render(view, campaign); - }); + campaign.mergeTags = mergeTags; + res.render(view, campaign); }); }); }); diff --git a/views/campaigns/edit-rss.hbs b/views/campaigns/edit-rss.hbs index d9080534..3c13c859 100644 --- a/views/campaigns/edit-rss.hbs +++ b/views/campaigns/edit-rss.hbs @@ -71,8 +71,6 @@
    - {{> merge_tag_reference}} -
    @@ -81,6 +79,8 @@
    + {{> merge_tag_reference}} + {{#if disableWysiwyg}} {{> codeeditor}} {{else}} From ecc777931279f51dccef5dbf64b401f5903f7e6b Mon Sep 17 00:00:00 2001 From: witzig Date: Thu, 4 May 2017 00:47:08 +0200 Subject: [PATCH 280/483] Updated de_DE translation --- languages/de_DE.mo | Bin 79765 -> 83283 bytes languages/de_DE.po | 1016 +++++++++++++++++++++++++++++--------------- 2 files changed, 679 insertions(+), 337 deletions(-) diff --git a/languages/de_DE.mo b/languages/de_DE.mo index bd4ae3497909b24920caf17ee0e07165e3bb8c41..fafb242bf05166f0bfcff4b00b1bd27de327f0fb 100644 GIT binary patch delta 22196 zcmZ|W2YeL8|Nrs5Kq#SwUJ~HwJ%nDRBOU2oFy#Uvm0UuH1Ee>>pcLuF3ZfiMP*8#h z3Zfu_N)bd*5d{k>i2h&in+c-7?|&aop7WWRot>ST-Mauj^JC7_^MidCi{yO9;h2%b zal)}SKVHx2I4zs1l%t#D}mU#A4VA%VJ-wies=QuE4sOh2`;QEQ3Y6 zJ5FiG@i`G>YEaM_yJ8yV!ncqyIfwCiJc@-erHA9>#_3ob=V1u0!&3M%mcuO6z^8N%KtjjPT@fs|MFJTGXiyG)j zTYecsiEm*rx*iMMxsw}nbA6`*8I7z4>JGY~I*zt+GR6?kL3Mls3*mhnf(3e+I~|3Z z@+qhpcoEg^Jsgc^ZGF4mj#Gy?34Kk-JV&Mop2h-r4Ijl{P)pLHkK-ibY*hKr7>UjM zIu5JiBp}P`>_xT9+0Wd_7*xOWQA@D~wP$vqZtzGy=Dz`%QxvqpT>Z^jc0x7mg9R}T zHLwiKk56JKF2TaM!Nz{n1rMVxa2B;>U)lQat@lw&T5tgKuZE=tm<}tW)~FF`m$pD2 z24?`O-B8qK8i^W63ab5N)P-iC2D-q;D{Z_H+3n72r~$u^x`FdPG8*ws)Z^m}G!4t4 z8Z@igHtT+@iic2B{4Hwc{=(u|WRRKB>Zk!WK;1w~EQP)fWOQebTjNm; zGEf(of?Cs=s5`rjdffg-ZLW~PCN6^-Ko!)IHAme*7p#p#kpG-H{OE$0kpcOfT5Msx zcp9Rnytg$GOX~#G%xpllJ7~+#qweqymc;x+9mkE8QRN-66b?o8lWyb17)Ja8R?_pI zMaE6Rb<|^+XPB`%Rv_+-daOp<@@KFj@h+@{=WP5Z)*vqbxVhslScP~j>Tz6+k+>hL z;rAHM^_^nF9j6x7Lv`>tR>wK0J9`avM@MaZ5p`#GP18Q^iMqMZlHGnConOTaJ@debTJC3@; z3#fj6MLl+|Xwy$o)MH&e+Gi^2P@ofAqZ;-?H%6l_^dxEk%TWW^YRy93;paB~4s~G{ z@9TkB8g)ZsQ0;uE8+r;gu+=J1=0#M)oi;v%n!*oJ1Gs?d;I=Jy#hSGZMb+2Fyx0bH zURP9qgHipD#5(B3RNR2t8@?hQb4L+ao`R03-R?oXFqWXEcqKB6&UWmLh2zZQ7=x{e zr=e!>ZLEYJqXzUV2HqE#lQ?9g8CW4?rhQIXGCHv?s$m<{iQTOIQA;ucbthv`OECpC zl~1GYbe)a2p_X7DYQ|1sFkV6R^9}0!yI6|rJB3D>g6gP_9zpHWZZ`IyX26S`a2{%) zA7fcOkGb)#Ef0z}o3Q{!P+lK(UKDBxUP84$i@{vqxnv8zMs2Q}s5{L$+B|NdsJIg5 z!n&xnYmAz?J~oa)4cv!$a3yLlY{U?J9o7GvHa?BMG8A026@Q>E5Sn1#a3xV|*&Hk2 za9chNwU(Pu?O#M)a65+JUev&{Z2XD!66OtZobOOG^Gg!*uZES9%^fyG#cePz_C`(p zP}EwFLEYh0TfPFT6Tgbuyl1g0{)QT0xfJtsR6@0Df(7vjEQBd3%)bhJ6y(FjsI^&z z8puY}0Q|_nonxrYbR5<06zcK&9CiK=7>ReW5Y|dHeNY2T@{!ThrJ*h` z$;MMrQ#%LS<6_LjQ@9x8#+c{$S6r(&jYk)Qy^hlpyI~Vtg|FZ#q^UDCozD%th11Y? zJ%d6rqsH>O#p~Dz-Q$b{Q1ASO7>esqGxi$lX*p=?PoS3UOVrGKhq|$!P0FXpMwB@%@PfxzNroIyD{Pw6#-50CkAgqf%ADMb&wxc?_ zjGCgKu@^e?%$@f}br6RdKmuybXQQV2CCrPvP;a_}sF`{n)!#+bKyKhPyl3it&gA*# zd0v9KsMu;_Kei=4i3M4T!VBz+X`$(GfHeknUaF19p$0V5mM_8D#LH1re;6y^1+1dy z|8FvtDX6l@yhyrYbK)q}W?GGTa3g97Ua|2p)MIxFb!V4RFQVJ1^YSb<11pFsFOFeY z8^f_P=J#=D9y0M1q&;P(_&nAizKpt)d`rw!mPB<_3w6PEsHNzG+AB$@0X~WOaRU~> zS8e+lcsso~0{X3d^Qo$xwpN)Mto*%2FG!%*Uzs5|%zHNdc^%>b*RHgOA7 zc~8_phoH_IjRkQMYLm`?n)xq6W}_|Gg>K>#sHytFmWO1T@`|Vq+M_z?gSl}uY9`W9 zQ@;p{U?!^l^VVIc_rYP*d7ovn{<_o46le;+L5=(`d;vq2nI+kQnyEe3!x%#RF_y;j zsPpfjo|62}n0^bR;!>!YEsJ@v78b@vJ~Ha46K=ph*cN|5jj-{v=EAK|Q`yZr6xBfj zYAL3mcK0gOX7!_P>`m;6S*X2HWVxA{NK`vtdont)JC;NbYAUDLc!l*fR0l_G{Wa9y zaIG*)RRJF%egt*?By5Dwq8pE+X5c3B=sWkY7}s}Ztuz;2g~h4Zfm(v2SRFq>&BT3M z9=yujd12JrRzh`LA2ma5Y<({qN2B&q8mj-rs5{?`p?dzek;$Uq0BUV!JZCPr5VhvZ zus&`;UGNjsntp{^f^Sf}`!1Hke5=g`E2GYDgF3GVs@*W;&YdL8#r2&TWOU(qs17qR z47b?$9n>BVCu1ct3Ke}2#v^-3O#Rd6NN!-J?7+->ZDCDxjy9EySGe*&2j zRLn*VV2zEpqdGc*74Um3iv`!2DX)!c-yEA`cht_xXc}q;SD|KVGio5)kyUYaVj1kU!OTbk zYDU&<@R=z)M8R|lzQ$-AxzUurk9CM|;sgxaWKMhrn-K4_@lSY?xa4NDSFU4s;xb#z z430$Yp+(pQ-^O$d@jY)php{IG+fi%#7uLeMyoKU$C??_|9IWye&7ICe-RUyaRIfzU zZ_`4fv04|v%u)o9cnnvA*8H^-)XF4RwBhRKKH8kKcII^%f%o_c?3G)4m;JA27!D)VnQ9o0Y$pgrou zUbcJ?79viw&OqJC(>NPnvE}t&GXrmjx}gE6y^(|(_*m3{7oe{anJu>B7%m~ch+{D2 zbsiC)87L7t7(_sD8@rGH=o*sIT*V@iEF{c5CPH zDY=`UTH^+L%v5#4TExRqn{7Vo4t8NZyoSZF)Lyd*>!9||NYt+PqLyw7YKrIMK-`QP z;Gd}Wt~bmK7Vwc#MHp&|-B=Qkmr$?ZeOMXKVG+EK>NxaG zGb6RICsW@DH8V5cGE2D>*_=LS6B(Vj&sLm3P5mXTgCPfuO|5ZQo$_T^8s9=)@GREH zpKt_LIcNqv3-x|kfIJ}1Q>eYv`fbgyk3VE0qc_uF48asEj}y_2t56r(k6My5r~zES zikRyi^Nz29I{z`$ObtQJ;1j3|CZc9;Drza8QaRUmHj~ks?zR>0qnr2=hM{xFoDhzB zp6j8eva^l*qXw3UT8eZmiz`v>_MmR)Fiys+s2PvSV*d4*rIXR-n29>^7HZcQJZw5_ zjk=RqoP(*@1b@dC82PSwMJJ*zv<-EqCvXs6#L?K~h&g{F#t_$hkNIy;X7PJW6Q062 zY;cs{cySd5Hq$ZFVJ!@&yd~-m24fyf#4ebDz3?FF#zNmW?*TVz=9;0Vz87jqJnu9A zn)-1R$OYDQwt*jY=kH<&evG>CdFzjumpJGH(=I>i&P!oVtbv-*2pe}tUAQ-D$zptD zv_=W23yeo~_#~>MMW{Pmi~8_*0n6cTR7Yn}1Ge#IJq4Tu+FOMDw6 z@IE%i+Mk+%$Dpn=7uEj`^l2m)Y(el@^QTggs2S;pO>h#{K|g9QT(%ZGX9m;)i%>oi z3*tl@&$IDr8^3~us6T)u@xybhe+e?zCxwWN2kD3<-4`PT*OeQrk76*WcCr~xgsZ8#KIa!EE`ge{8dwYmpq`cl)C|n?kqINS0W~#m*@_d^uQ7x2`=|?h&l_i9 z0pjI0-h!I?J*a+;*!WY_jeL!|<2yDExnRnDVPy1J)J8SviF(eXZG$A#g{ESDT!@;X zm6(WGSP3I9nj7hd#feiGf z7g~ziR9jFTY(=f<0W6KDQSEM`2JE_GJ`F=raU_OgYaEKhFdx@<_L8Z9hf%xq8tMYK zup9<`WjxX;GjRtsGp?(~5Y(L(McsKV)BszemT~}UK(XknOvXz_Pr(X| z#MiMVUO{zS;A=C*B~Sybis~>Db7NPmf_<<&jz`VZ3apOnP%o~dsQ1b*s67;Rjrk8I z)A5>phg$CLck~>@ci> z$=@>nmB_51KzIBmD!z^yalY@&m&YbphPVaR#{sCdpNG2OTGW)jYJCeebH`CLdj|EQ z`vG%c@C|drd3|K^QV@!IY|3ChjKpf#619f0sK+k@bw@K$n`sH=#BHbx?m#BS*^ipR z1DFesU{5@O?_&7(>^JmXAv2%M3pe>=60HA&`LMZ;al{pVG$+o*GsI_c7H+%6gYKrDzK3tEwgRRz` zs5^cWwM3tx&byCVf_%U7n=OW63ONx5i$3kz zwPbYSHY|p3VO2bZZu|pFW0|{VRf*sBT!R1z&a7tey#N#)PS#|*7grsCLOqseurD25Lrr<} zoW>5Q7gbNJM12(M#%2Y(%x_4j`V&4fTKg|i7ybdY6izO4flyRj0ku^1Y#C>*J+Kr$j=I2D)X3+fF0cc&s}Ey! zJcjl0C+vV#@|g2RqXs+``{N?iK)yoliQkd)ea_!xT2N4(zmU}lu~si?Kr^reK8+f{ zOQ?bE$LH`Qs$D{exsgez3v9%2duf5<^RE;3P>>rx!U}i}bq9A*QnX*dO=BN&Pqn0KKb?0MI z?Wdy#xEkNUZK#*03vT z6M9e=Oh>KxOw#~8+fk3zyQm8vN8QL-)RO#wY8UD@Gf)+^WRd7=MW!Vg zjcgLu#g|cQ^f}hS+!b7bKX7P-k;LiP7q_4r|3F>1Oht2{DyYY+1?sVU4E22>9&6$T z)C=r*MV^0+Ql06HCNz&W*LmS9{>KzeELck_E{o~9RfnSldi>ADl-#4i}-Tjw|pj+4mF~t=-?KI}M32Gf)V} z5tqU!2DAh<#Xr?GYn(UIY@+h0rKyFQu?DCmYG>_-+I(@SrJ0QCXCATyK4(1{-TAAi zDLISUG)+FpgJO*pveyoaL+w%PNU4cJM8-U&Q z{4XJ+sk(rAK@@0U22c{!K|Rza8jAX?7>9b^m!Jmx3bw%yQFm6Tq1huWRYADN*P3`cF2eW*2k z*Lo7QCqBb;yn`BGLR-^56?I3GQ04PckKq%iHSw|_y@NOga?(cJfSX9+wv!xOuq8=H1Wx8e zm#x!Nuj2$|74SQ3VcY&h{3Y$a#KDw5NB$#H9O*D+Uz2*1UJv5>Su_ac#3lF<$!9w$ zirsCVwt=G$aT(H0qGZx&+TW+s@+3ETz92dt>OY}Q@5#c%IzlM>4NGH9+SMcJsH*#4 zMerPV#%Hiy%LlvRgQj zvgwqqCBL5Z9OYl*Kzu96$;@h6+*j51F`9Ojsar?dK$=IJ?@75yI_^>b1QxdK^~~xB zBTk{cj?E-JyBW0A>vK0L`*_~A$&UM*etga%D%NmG=PYS2`I1vMYB))Vw z&)CM7iN7#?1b*ubBR_z$AksEl{uN#(y~H_NNS$o?Z{&X@m10nQ7&$dKrw~a;4gCo0 z0Suw=d(yMye<%G+dW@51kh*i?GLnZfedRa?Z_+lAyk72=Nppz9NILFgS?X?(U&47u z@G{1$@}c8>@;<(PIhAQVoTTGd;_^6>PTG>(KFaM3?%aQkz53v^}8#oFQ z>l11>{y@8}B)4sokNh4|cj_O-ZKMy#>w|(nhH;)H*71|pe;z>{(kTi$aWNeo@iWTS z)A$haRN~{r`nGZhU$+-JMqbAaYYEE7&~}`yH?@3eBwlKRZshq)aq4o;daZv0dr{RV zQ+R{Q4{?(1ROL;`KSsHZO0?fW+=DoQ{2a=%NIuHW**3N9xwnY>Qg@ShtF6;76vc>V z5(oBQ4O>CEGl=}JRF0?P(Zv0504bC5BevaP>SIX1lTsf#S0C^?-XWc$PRCfBPO4Fm#-{kHMTn7~Q;t~J{>{FAbJ3_wRgyi5Fw37z7^DK;W4^b&1qsE+(T zQY0xC^{-LB3LlY_UDan$2^ub>U={+{-Ht| zUZ<=Sd42&2d_OOieI?3jkq@TaL;8fak%6=MqjTad_I+fB6DLs-^Z#Z=&$$vyu74pMKI!^25 zp<@H-f^9sB{O6=5)P<2=AU~9p+qQk$wkv4|@(JbBD9d5Xqi7pT*<4aj+KfaUV+{{} zj;796kIGgQ^|2?9!@nsjVoy@*u9PJcmm_^cDrMWMu08oQJCJaEj<^=(r)`^W$)|D7 zn`+FFk2c**)``*jw;?!S8{2Z{ZyVRgnw;E~lSbhS#DCN18(Y8Bs`GAAKP9^Ze4f)3AFx3{srO6{b47O63174d7^W(aW%`A;c3jJ{Dc?nkBz1+8tPqvU@f?V|1} zoJKlNz9RMI@Mltf%1V-Syhiyh(i+Njd`x~i7aB#HKv^9AKv_l1g{iog@^AF7D&C~v zandvjbp&U=-m;``xb5l-YIIyQ1b#NREsGItf2ds9mbAZv9?l<6I!n4l*%Hde;!F6U z?USsNo4!^O&$8E3S!aDMSz!y>(%`mAIf~e_w@l~+abkB{mY;UDDGw#J)&QyNLR|yW zQ>2y@{Xkky%3%jEnRX|LL#eMySvsj}ppI>MlFXA-tPK?K%N))o*6}j=*5rRAU)|Pc z+PWFUjmh7|H>h7lz9K1}c!6!x+&Yu`=A=hS>quVPSKwozD2*0T(4X`z>7cEwVoxqk ze2vt`miM89&q#}jGf~HK@_D(-M@grN8wE#ja3RfwFJuAV29VQgPCDQcl{8wHSz@=~Vb zB4w!>!+R!nir9`6o}|%o(iIw&CMDUrJmfQM2NNheMVw~ihQvv>uWbIHexeNu;}^DV zU&C$ox#OW!0?HT>j)oy*V;3bm>;alN1%7=uS^@ zM<+(bBqYXr)BR1mHgJXX&4~8Kq{T;j(lR~W##c_wh)#@;ac6ivX>q@M|qOG zp2V>pum96-@xe81FHXDc{yeb{=iTwiaVaWDPVl$veZdv#j!#NWNlW*{x&uS;`iu7c zEvTwTWlsB)jKo-Xa!R^8Ce0I-?s2CD%H8Rnq|`)W|8M=>uHZmfX4Js&T&6m6(7-C0 zB?jKB@}JfZbr%<(9BVtv96YF2aG<6Chk>8CN<6q^Mr!Oom&|;7@WOCAC^M8kW+?r# zhtht?OjqG3cWPQnjK}MZPaf%xNs0CNvxYw7%BiNAJs%%f%*=LNT1wJG^S$QrZaKnC zcTUIH_;mMwy3V}v!~lQ&s2V{Rfy#l2Nq2YY;Pi+$cV$bmmw+mNiRp)3g`yG@Q^qld=n3xjkM-&6KQrTM?wnEH zl;q6a^T+#=V?Ak_lkC$RdyhS%l04b@?5X^3?9DES^(1=ODA{2$=emZ;A&&4*Ui@cJj);f|f6CG}LHXE4sVUz0^mx|imCW_!|9M!|<;cX8=%~bh zwrF#Ivt=&@Wq$JPD*uV)%YtfXgScZ;Jl?>w8CZF@eM8t6L#lfAMr00KbK_Mt_GlX1hY#MyDhv zdy>;>czEA}h_;D|o@BQtEio!1+LO$f<2_za;Gx$xPmE^nC-MyIq9{*qO-R>SvD12ymP|d8>?26R1tT*F4x`2HP(;uU7o1xZe8<{nHH*@#LPn5EY6P4j*i#)tQ`A;3s zQQnM@*No}pzgNlp;LK!yn@^VpmDZbCuhzi3+3g9uu9;I$vj3xV@8&ArDJ>&4H898S zf7aZ;?9#TJ{uNh0&E2}A*X@n>j7oQVQ``)tcA%$GS)0?fD1DjKhqnUj#|?QOYy@7} zN#74ERNYQzmk#bY)gx1ya8Pja2?3jfi2m4ZUeHcNMp-*AyR%Qvp5BMv+yAXHyW+tdxkq{uvvzx9MrDsA^X&^IbD2T1hQ+eSYft+> z&9l2t)_KMLwO2guaT#f`+6l#c|EY*dNY9AkHKoaRI{bG#dfX4*xPcyc*aF)pdx-9T zoo>4R=am06_Bb8W;`VIK?W&ive>c6VM<(+)B?tCVN_0Grzq?;lv^J+%Q@(n5k^-w4 zl@S+s_C|ZgdEygk=^lcfWM0`xY(l<`#Uyx=Bldid&$S^(fwoCJ{hXW3NS@!5P{=ha zC~sQ2eTy%@QP{P;vKCR>*Sx=J`QT;1rQ=u#w&(I!i@3t}tSaKlna2@T-E7{t>)$dO^ot#e@@$fR?gP( zX%`>8r)xFWu%NO7_~z8klbn%0k&ee@Z61{v9mSWKNBKbTr0v;K!*w-p>3_Yw_&8t> yIDL8YW0(Kkz*VDr_J_ekFMDq~A2v~GvH$*9cu@NA=fZ=+zz4&gZVg>sbNoNs)-P26 delta 19363 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 diff --git a/languages/de_DE.po b/languages/de_DE.po index 69020cc7..4ee3db99 100644 --- a/languages/de_DE.po +++ b/languages/de_DE.po @@ -2,21 +2,22 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-03-21 13:18+0100\n" -"PO-Revision-Date: 2017-03-21 14:21+0100\n" +"POT-Creation-Date: 2017-05-04 00:45+0200\n" +"PO-Revision-Date: 2017-05-04 00:46+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.12\n" +"X-Generator: Poedit 2.0.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: views/archive/layout.hbs:1 views/layout.hbs:1 msgid "Self hosted email newsletter app" msgstr "Selbst gehostete Newsletter-App" +#: views/blacklist.hbs:1 views/campaigns/blacklisted.hbs:1 #: views/campaigns/bounced.hbs:1 views/campaigns/campaigns.hbs:1 #: views/campaigns/clicked.hbs:1 views/campaigns/complained.hbs:1 #: views/campaigns/create-rss.hbs:1 views/campaigns/create-triggered.hbs:1 @@ -36,71 +37,113 @@ msgstr "Selbst gehostete Newsletter-App" #: views/lists/subscription/import-failed.hbs:1 #: views/lists/subscription/import-preview.hbs:1 #: views/lists/subscription/import.hbs:1 views/lists/view.hbs:1 -#: views/settings.hbs:1 views/templates/create.hbs:1 views/templates/edit.hbs:1 +#: views/report-templates/create.hbs:1 views/report-templates/edit.hbs:1 +#: views/report-templates/report-templates.hbs:1 +#: views/reports/create-select-template.hbs:1 views/reports/create.hbs:1 +#: views/reports/edit.hbs:1 views/reports/output.hbs:1 +#: views/reports/reports.hbs:1 views/reports/view.hbs:1 views/settings.hbs:1 +#: views/templates/create.hbs:1 views/templates/edit.hbs:1 #: views/templates/templates.hbs:1 views/triggers/create-select.hbs:1 #: views/triggers/create.hbs:1 views/triggers/edit.hbs:1 #: views/triggers/triggered.hbs:1 views/triggers/triggers.hbs:1 #: views/users/account.hbs:1 views/users/api.hbs:1 views/users/forgot.hbs:1 -#: views/users/login.hbs:1 views/users/reset.hbs:1 app.js:176 +#: views/users/login.hbs:1 views/users/reset.hbs:1 app.js:169 msgid "Home" msgstr "Home" -#: views/campaigns/bounced.hbs:2 views/campaigns/campaigns.hbs:2 -#: views/campaigns/campaigns.hbs:7 views/campaigns/clicked.hbs:2 -#: views/campaigns/complained.hbs:2 views/campaigns/create-rss.hbs:2 -#: views/campaigns/create-triggered.hbs:2 views/campaigns/create.hbs:2 -#: views/campaigns/delivered.hbs:2 views/campaigns/edit-rss.hbs:2 -#: views/campaigns/edit-triggered.hbs:2 views/campaigns/edit.hbs:2 -#: views/campaigns/opened.hbs:2 views/campaigns/unsubscribed.hbs:2 -#: views/campaigns/upload-attachment.hbs:2 views/campaigns/view.hbs:2 -#: lib/tools.js:125 routes/campaigns.js:35 +#: views/blacklist.hbs:2 views/blacklist.hbs:3 views/layout.hbs:7 +#: views/lists/subscription/edit.hbs:15 +msgid "Blacklist" +msgstr "Blacklist" + +#: views/blacklist.hbs:4 views/users/api.hbs:55 +msgid "Add email to blacklist" +msgstr "E-Mail zur Blacklist hinzufügen" + +#: views/blacklist.hbs:5 +msgid "Add" +msgstr "Hinzufügen" + +#: views/blacklist.hbs:6 +msgid "Email" +msgstr "E-Mail" + +#: views/campaigns/blacklisted.hbs:2 views/campaigns/bounced.hbs:2 +#: views/campaigns/campaigns.hbs:2 views/campaigns/campaigns.hbs:7 +#: views/campaigns/clicked.hbs:2 views/campaigns/complained.hbs:2 +#: views/campaigns/create-rss.hbs:2 views/campaigns/create-triggered.hbs:2 +#: views/campaigns/create.hbs:2 views/campaigns/delivered.hbs:2 +#: views/campaigns/edit-rss.hbs:2 views/campaigns/edit-triggered.hbs:2 +#: views/campaigns/edit.hbs:2 views/campaigns/opened.hbs:2 +#: views/campaigns/unsubscribed.hbs:2 views/campaigns/upload-attachment.hbs:2 +#: views/campaigns/view.hbs:2 lib/tools.js:126 routes/campaigns.js:35 msgid "Campaigns" msgstr "Kampagnen" -#: views/campaigns/bounced.hbs:3 views/campaigns/bounced.hbs:4 -msgid "Bounced info" -msgstr "Bounced Info" +#: views/campaigns/blacklisted.hbs:3 views/campaigns/blacklisted.hbs:4 +msgid "Blacklisted info" +msgstr "Blacklisted info" -#: views/campaigns/bounced.hbs:5 views/campaigns/clicked.hbs:5 -#: views/campaigns/complained.hbs:5 views/campaigns/delivered.hbs:5 -#: views/campaigns/edit-rss.hbs:5 views/campaigns/edit-triggered.hbs:5 -#: views/campaigns/edit.hbs:5 views/campaigns/opened.hbs:5 -#: views/campaigns/unsubscribed.hbs:5 views/campaigns/upload-attachment.hbs:6 +#: views/campaigns/blacklisted.hbs:5 views/campaigns/bounced.hbs:5 +#: views/campaigns/clicked.hbs:5 views/campaigns/complained.hbs:5 +#: views/campaigns/delivered.hbs:5 views/campaigns/edit-rss.hbs:5 +#: views/campaigns/edit-triggered.hbs:5 views/campaigns/edit.hbs:5 +#: views/campaigns/opened.hbs:5 views/campaigns/unsubscribed.hbs:5 +#: views/campaigns/upload-attachment.hbs:6 msgid "View campaign" msgstr "Kampagne ansehen" -#: views/campaigns/bounced.hbs:6 -msgid "Subscribers who bounced and were unsubscribed:" -msgstr "Abonnenten, die bounced und abgemeldet wurden:" +#: views/campaigns/blacklisted.hbs:6 +msgid "Subscribers who blacklisted by global blacklist:" +msgstr "Abonnenten, die von der globalen Blacklist aufgelistet wurden:" -#: views/campaigns/bounced.hbs:7 views/campaigns/clicked.hbs:15 -#: views/campaigns/complained.hbs:7 views/campaigns/delivered.hbs:7 -#: views/campaigns/opened.hbs:9 views/campaigns/unsubscribed.hbs:7 +#: views/campaigns/blacklisted.hbs:7 views/campaigns/bounced.hbs:7 +#: views/campaigns/clicked.hbs:15 views/campaigns/complained.hbs:7 +#: views/campaigns/delivered.hbs:7 views/campaigns/opened.hbs:9 +#: views/campaigns/unsubscribed.hbs:7 #: views/lists/subscription/import-failed.hbs:8 views/lists/view.hbs:19 #: views/triggers/triggered.hbs:6 msgid "Address" msgstr "Adresse" -#: views/campaigns/bounced.hbs:8 views/campaigns/clicked.hbs:16 -#: views/campaigns/complained.hbs:8 views/campaigns/delivered.hbs:8 -#: views/campaigns/opened.hbs:10 views/campaigns/unsubscribed.hbs:8 -#: views/lists/subscription/add.hbs:6 views/lists/subscription/edit.hbs:7 +#: views/campaigns/blacklisted.hbs:8 views/campaigns/bounced.hbs:8 +#: views/campaigns/clicked.hbs:16 views/campaigns/complained.hbs:8 +#: views/campaigns/delivered.hbs:8 views/campaigns/opened.hbs:10 +#: views/campaigns/unsubscribed.hbs:8 views/lists/subscription/add.hbs:6 +#: views/lists/subscription/edit.hbs:7 #: views/lists/subscription/import-preview.hbs:7 views/lists/view.hbs:20 #: views/subscription/partials/subscription-custom-fields.hbs:3 #: views/triggers/triggered.hbs:7 msgid "First Name" msgstr "Vorname" -#: views/campaigns/bounced.hbs:9 views/campaigns/clicked.hbs:17 -#: views/campaigns/complained.hbs:9 views/campaigns/delivered.hbs:9 -#: views/campaigns/opened.hbs:11 views/campaigns/unsubscribed.hbs:9 -#: views/lists/subscription/add.hbs:7 views/lists/subscription/edit.hbs:8 +#: views/campaigns/blacklisted.hbs:9 views/campaigns/bounced.hbs:9 +#: views/campaigns/clicked.hbs:17 views/campaigns/complained.hbs:9 +#: views/campaigns/delivered.hbs:9 views/campaigns/opened.hbs:11 +#: views/campaigns/unsubscribed.hbs:9 views/lists/subscription/add.hbs:7 +#: views/lists/subscription/edit.hbs:8 #: views/lists/subscription/import-preview.hbs:8 views/lists/view.hbs:21 #: views/subscription/partials/subscription-custom-fields.hbs:4 #: views/triggers/triggered.hbs:8 msgid "Last Name" msgstr "Nachname" +#: views/campaigns/blacklisted.hbs:10 +msgid "Reason" +msgstr "Grund" + +#: views/campaigns/blacklisted.hbs:11 +msgid "Time" +msgstr "Zeit" + +#: views/campaigns/bounced.hbs:3 views/campaigns/bounced.hbs:4 +msgid "Bounced info" +msgstr "Bounced Info" + +#: views/campaigns/bounced.hbs:6 +msgid "Subscribers who bounced and were unsubscribed:" +msgstr "Abonnenten, die bounced und abgemeldet wurden:" + #: views/campaigns/bounced.hbs:10 views/campaigns/complained.hbs:10 #: views/campaigns/delivered.hbs:10 views/campaigns/unsubscribed.hbs:10 msgid "SMTP response" @@ -131,10 +174,15 @@ msgstr "Trigger-Kampagne" #: views/campaigns/campaigns.hbs:8 views/campaigns/create-rss.hbs:6 #: views/campaigns/create-triggered.hbs:5 views/campaigns/create.hbs:5 #: views/campaigns/edit-rss.hbs:8 views/campaigns/edit-triggered.hbs:9 -#: views/campaigns/edit.hbs:10 views/campaigns/view.hbs:71 +#: views/campaigns/edit.hbs:10 views/campaigns/view.hbs:73 #: views/lists/create.hbs:5 views/lists/edit.hbs:6 #: views/lists/fields/fields.hbs:6 views/lists/forms/forms.hbs:6 #: views/lists/lists.hbs:5 views/lists/segments/segments.hbs:6 +#: views/report-templates/partials/report-template-fields.hbs:1 +#: views/report-templates/report-templates.hbs:10 +#: views/reports/partials/report-fields.hbs:1 +#: views/reports/partials/report-fields.hbs:5 +#: views/reports/partials/report-fields.hbs:9 views/reports/reports.hbs:6 #: views/templates/templates.hbs:5 views/triggers/triggers.hbs:5 msgid "Name" msgstr "Name" @@ -142,25 +190,31 @@ msgstr "Name" #: views/campaigns/campaigns.hbs:9 views/campaigns/create-rss.hbs:8 #: views/campaigns/create-triggered.hbs:7 views/campaigns/create.hbs:7 #: views/campaigns/edit-rss.hbs:10 views/campaigns/edit-triggered.hbs:11 -#: views/campaigns/edit.hbs:12 views/campaigns/view.hbs:72 +#: views/campaigns/edit.hbs:12 views/campaigns/view.hbs:74 #: views/lists/create.hbs:7 views/lists/edit.hbs:10 #: views/lists/forms/edit.hbs:9 views/lists/forms/forms.hbs:7 #: views/lists/lists.hbs:8 views/mosaico/editor.hbs:3 -#: views/partials/merge-tag-reference.hbs:4 views/templates/create.hbs:9 -#: views/templates/edit.hbs:8 views/templates/templates.hbs:6 -#: views/triggers/create.hbs:7 views/triggers/edit.hbs:8 -#: views/triggers/triggers.hbs:7 +#: views/partials/merge-tag-reference.hbs:4 +#: views/report-templates/partials/report-template-fields.hbs:3 +#: views/report-templates/report-templates.hbs:11 +#: views/reports/partials/report-fields.hbs:3 +#: views/reports/partials/report-fields.hbs:6 views/reports/reports.hbs:8 +#: views/templates/create.hbs:9 views/templates/edit.hbs:8 +#: views/templates/templates.hbs:6 views/triggers/create.hbs:7 +#: views/triggers/edit.hbs:8 views/triggers/triggers.hbs:7 msgid "Description" msgstr "Beschreibung" -#: views/campaigns/campaigns.hbs:10 views/campaigns/view.hbs:73 +#: views/campaigns/campaigns.hbs:10 views/campaigns/view.hbs:75 #: views/lists/view.hbs:22 views/lists/view.hbs:30 #: views/triggers/triggers.hbs:6 msgid "Status" msgstr "Status" -#: views/campaigns/campaigns.hbs:11 views/campaigns/view.hbs:74 +#: views/campaigns/campaigns.hbs:11 views/campaigns/view.hbs:76 #: views/lists/view.hbs:23 views/lists/view.hbs:24 +#: views/report-templates/report-templates.hbs:12 +#: views/reports/partials/report-fields.hbs:7 views/reports/reports.hbs:9 msgid "Created" msgstr "Erstellt" @@ -168,23 +222,23 @@ msgstr "Erstellt" msgid "Link info" msgstr "Link Info" -#: views/campaigns/clicked.hbs:6 views/campaigns/view.hbs:61 +#: views/campaigns/clicked.hbs:6 views/campaigns/view.hbs:63 msgid "URL" msgstr "URL" -#: views/campaigns/clicked.hbs:7 views/campaigns/view.hbs:62 +#: views/campaigns/clicked.hbs:7 views/campaigns/view.hbs:64 msgid "Clicks" msgstr "Klicks" -#: views/campaigns/clicked.hbs:8 views/campaigns/view.hbs:63 +#: views/campaigns/clicked.hbs:8 views/campaigns/view.hbs:65 msgid "% of clicks" msgstr "% der Klicks" -#: views/campaigns/clicked.hbs:9 views/campaigns/view.hbs:64 +#: views/campaigns/clicked.hbs:9 views/campaigns/view.hbs:66 msgid "% of messages" msgstr "% der Nachrichten" -#: views/campaigns/clicked.hbs:10 views/campaigns/view.hbs:67 +#: views/campaigns/clicked.hbs:10 views/campaigns/view.hbs:69 msgid "Aggregated clicks" msgstr "Aggregierte Klicks" @@ -249,8 +303,10 @@ msgstr "Kampagnen Name" #: views/campaigns/create.hbs:8 views/campaigns/edit-rss.hbs:11 #: views/campaigns/edit-triggered.hbs:12 views/campaigns/edit.hbs:13 #: views/lists/create.hbs:8 views/lists/edit.hbs:11 -#: views/templates/create.hbs:11 views/templates/edit.hbs:10 -#: views/triggers/create.hbs:9 views/triggers/edit.hbs:10 +#: views/report-templates/partials/report-template-fields.hbs:4 +#: views/reports/partials/report-fields.hbs:4 views/templates/create.hbs:11 +#: views/templates/edit.hbs:10 views/triggers/create.hbs:9 +#: views/triggers/edit.hbs:10 msgid "HTML is allowed" msgstr "HTML ist erlaubt" @@ -272,6 +328,7 @@ msgstr "Liste" #: views/lists/segments/rule-create.hbs:7 views/lists/subscription/add.hbs:10 #: views/lists/subscription/add.hbs:12 views/lists/subscription/edit.hbs:11 #: views/lists/subscription/import-preview.hbs:5 +#: views/reports/partials/report-select-template.hbs:2 #: views/subscription/partials/subscription-custom-fields.hbs:9 #: views/templates/create.hbs:8 views/triggers/create-select.hbs:7 #: views/triggers/create.hbs:17 views/triggers/create.hbs:20 @@ -342,7 +399,7 @@ msgstr "Trigger-Kampagne erstellen" #: views/campaigns/create-triggered.hbs:12 views/campaigns/create.hbs:12 #: views/campaigns/edit-triggered.hbs:7 views/campaigns/edit.hbs:7 #: views/lists/fields/create.hbs:31 views/lists/fields/edit.hbs:33 -#: views/templates/create.hbs:13 +#: views/reports/reports.hbs:7 views/templates/create.hbs:13 msgid "Template" msgstr "Vorlage" @@ -439,12 +496,12 @@ msgid "Delete Campaign" msgstr "Kampagne löschen" #: views/campaigns/edit-rss.hbs:24 views/campaigns/edit-triggered.hbs:27 -#: views/campaigns/edit.hbs:35 views/lists/edit.hbs:16 +#: views/campaigns/edit.hbs:35 views/lists/edit.hbs:17 #: views/lists/fields/edit.hbs:39 views/lists/forms/edit.hbs:29 #: views/lists/forms/forms.hbs:12 views/lists/segments/edit.hbs:14 -#: views/lists/segments/rule-edit.hbs:38 views/lists/subscription/edit.hbs:17 -#: views/settings.hbs:99 views/templates/edit.hbs:12 views/triggers/edit.hbs:30 -#: views/users/account.hbs:18 +#: views/lists/segments/rule-edit.hbs:38 views/lists/subscription/edit.hbs:18 +#: views/reports/edit.hbs:6 views/settings.hbs:99 views/templates/edit.hbs:12 +#: views/triggers/edit.hbs:30 views/users/account.hbs:18 msgid "Update" msgstr "Aktualisieren" @@ -483,7 +540,7 @@ msgstr "Datei" msgid "Size" msgstr "Grösse" -#: views/campaigns/edit.hbs:32 views/campaigns/view.hbs:66 +#: views/campaigns/edit.hbs:32 views/campaigns/view.hbs:68 #: views/lists/fields/fields.hbs:12 views/lists/forms/forms.hbs:9 #: views/lists/view.hbs:33 msgid "No data available in table" @@ -517,8 +574,8 @@ msgstr "Abmeldungs-Info" msgid "Subscribers who unsubscribed:" msgstr "Abonnenten welche deabonnierten:" -#: views/campaigns/unsubscribed.hbs:11 views/campaigns/view.hbs:26 -#: views/lists/subscription/import.hbs:10 routes/lists.js:187 +#: views/campaigns/unsubscribed.hbs:11 views/campaigns/view.hbs:28 +#: views/lists/subscription/import.hbs:10 routes/lists.js:202 msgid "Unsubscribed" msgstr "Abbestellt" @@ -572,7 +629,7 @@ msgstr "Noch keine Testbenutzer vorhanden, erstellen Sie einen hier" msgid "Go" msgstr "Los" -#: views/campaigns/view.hbs:20 lib/models/triggers.js:25 +#: views/campaigns/view.hbs:20 lib/models/triggers.js:26 msgid "Delivered" msgstr "Zugestellt" @@ -580,111 +637,119 @@ msgstr "Zugestellt" msgid "List subscribers who received this message" msgstr "Abonnenten dieser Liste, die diese Nachricht erhalten haben" -#: views/campaigns/view.hbs:22 routes/lists.js:187 +#: views/campaigns/view.hbs:22 +msgid "Blacklisted" +msgstr "Blacklisted" + +#: views/campaigns/view.hbs:23 +msgid "List subscribers who blacklisted by global blacklist" +msgstr "" + +#: views/campaigns/view.hbs:24 routes/lists.js:202 msgid "Bounced" msgstr "Bounced" -#: views/campaigns/view.hbs:23 +#: views/campaigns/view.hbs:25 msgid "List subscribers who bounced" msgstr "Bounced Listen Abonnenten" -#: views/campaigns/view.hbs:24 +#: views/campaigns/view.hbs:26 msgid "Complaints" msgstr "Beschwerden" -#: views/campaigns/view.hbs:25 +#: views/campaigns/view.hbs:27 msgid "List subscribers who complained for this message" msgstr "Abonnenten, die sich über diese Nachricht beschwert haben" -#: views/campaigns/view.hbs:27 +#: views/campaigns/view.hbs:29 msgid "List subscribers who unsubscribed after this message" msgstr "Abonnenten, die sich nach dieser Nachricht abgemeldet haben" -#: views/campaigns/view.hbs:28 +#: views/campaigns/view.hbs:30 msgid "Opened" msgstr "Geöffnet" -#: views/campaigns/view.hbs:29 +#: views/campaigns/view.hbs:31 msgid "List subscribers who opened this message" msgstr "Abonnenten, die diese Nachricht geöffnet haben" -#: views/campaigns/view.hbs:30 +#: views/campaigns/view.hbs:32 msgid "Clicked" msgstr "Geklickt" -#: views/campaigns/view.hbs:31 views/campaigns/view.hbs:68 +#: views/campaigns/view.hbs:33 views/campaigns/view.hbs:70 msgid "List subscribers who clicked on a link" msgstr "Abonnenten, die auf einen Link geklickt haben" -#: views/campaigns/view.hbs:32 +#: views/campaigns/view.hbs:34 msgid "" "Are you sure? This action would start sending messages to the selected list" msgstr "" "Sind Sie sicher? Diese Aktion würde mit dem Senden von Nachrichten an die " "ausgewählte Liste beginnen" -#: views/campaigns/view.hbs:33 +#: views/campaigns/view.hbs:35 msgid "Delay sending" msgstr "Senden verzögern" -#: views/campaigns/view.hbs:34 +#: views/campaigns/view.hbs:36 msgid "hours" msgstr "Stunden" -#: views/campaigns/view.hbs:35 +#: views/campaigns/view.hbs:37 msgid "minutes" msgstr "Minuten" -#: views/campaigns/view.hbs:36 +#: views/campaigns/view.hbs:38 msgid "Send to subscribers:" msgstr "An Abonnenten senden:" -#: views/campaigns/view.hbs:37 +#: views/campaigns/view.hbs:39 msgid "Are you sure? This action would reset scheduling" msgstr "Sind Sie sicher? Diese Aktion würde die Terminierung zurücksetzen" -#: views/campaigns/view.hbs:38 +#: views/campaigns/view.hbs:40 msgid "Cancel" msgstr "Abbrechen" -#: views/campaigns/view.hbs:39 +#: views/campaigns/view.hbs:41 msgid "Sending scheduled" msgstr "Senden geplant" -#: views/campaigns/view.hbs:40 views/campaigns/view.hbs:52 +#: views/campaigns/view.hbs:42 views/campaigns/view.hbs:54 msgid "Pause" msgstr "Pause" -#: views/campaigns/view.hbs:41 routes/campaigns.js:264 +#: views/campaigns/view.hbs:43 routes/campaigns.js:253 msgid "Sending" msgstr "Am senden" -#: views/campaigns/view.hbs:42 views/campaigns/view.hbs:46 +#: views/campaigns/view.hbs:44 views/campaigns/view.hbs:48 msgid "" "Are you sure? This action would resume sending messages to the selected list" msgstr "" "Sind Sie sicher? Diese Aktion würde das Senden von E-Mails an die " "ausgewählte Liste fortsetzen" -#: views/campaigns/view.hbs:43 views/campaigns/view.hbs:47 +#: views/campaigns/view.hbs:45 views/campaigns/view.hbs:49 msgid "Are you sure? This action would reset all stats about current progress" msgstr "" "Sind Sie sicher? Diese Aktion würde alle Statistiken über den aktuellen " "Fortschritt zurücksetzen" -#: views/campaigns/view.hbs:44 +#: views/campaigns/view.hbs:46 msgid "Resume" msgstr "Fortsetzen" -#: views/campaigns/view.hbs:45 views/campaigns/view.hbs:49 +#: views/campaigns/view.hbs:47 views/campaigns/view.hbs:51 msgid "Reset" msgstr "Zurücksetzen" -#: views/campaigns/view.hbs:48 +#: views/campaigns/view.hbs:50 msgid "Continue" msgstr "Weiter" -#: views/campaigns/view.hbs:50 +#: views/campaigns/view.hbs:52 msgid "" "All messages sent! Hit \"Continue\" if you you want to send this campaign to " "new subscribers" @@ -692,7 +757,7 @@ msgstr "" "Alle E-Mails gesendet! Klicken Sie auf \"Weiter\", wenn Sie diese Kampagne " "an neue Abonnenten senden möchten" -#: views/campaigns/view.hbs:51 +#: views/campaigns/view.hbs:53 msgid "" "Are you sure? This action would pause sending new entries in RSS feed as " "email messages to the selected list" @@ -700,15 +765,15 @@ msgstr "" "Sind Sie sicher? Diese Aktion würde das Senden neuer Einträge des RSS-Feed " "als E-Mail-Nachrichten an die ausgewählte Liste pausieren" -#: views/campaigns/view.hbs:53 views/campaigns/view.hbs:57 +#: views/campaigns/view.hbs:55 views/campaigns/view.hbs:59 msgid "Campaign status:" msgstr "Kampagnen Status:" -#: views/campaigns/view.hbs:54 +#: views/campaigns/view.hbs:56 msgid "ACTIVE" msgstr "AKTIV" -#: views/campaigns/view.hbs:55 +#: views/campaigns/view.hbs:57 msgid "" "Are you sure? This action would start sending new entries in RSS feed as " "email messages to the selected list" @@ -716,15 +781,15 @@ msgstr "" "Sind Sie sicher? Diese Aktion würde neue RSS Feed Einträge als E-Mail-" "Nachrichten der ausgewählten Liste zustellen" -#: views/campaigns/view.hbs:56 +#: views/campaigns/view.hbs:58 msgid "Activate" msgstr "Aktivieren" -#: views/campaigns/view.hbs:58 +#: views/campaigns/view.hbs:60 msgid "INACTIVE" msgstr "INAKTIV" -#: views/campaigns/view.hbs:59 +#: views/campaigns/view.hbs:61 msgid "" "This is a triggered campaign. Messages are only sent to subscribers that hit " "some trigger that invokes this campaign" @@ -732,15 +797,15 @@ msgstr "" "Dies ist eine Trigger-Kampagne. Nachrichten werden nur an Abonnenten " "gesendet, die einen Trigger auslösen, der diese Kampagne aufruft" -#: views/campaigns/view.hbs:60 +#: views/campaigns/view.hbs:62 msgid "see more" msgstr "mehr anzeigen" -#: views/campaigns/view.hbs:65 +#: views/campaigns/view.hbs:67 msgid "List subscribers who clicked this link" msgstr "Abonnenten dieser Liste, die diesen Link geklickt haben" -#: views/campaigns/view.hbs:69 +#: views/campaigns/view.hbs:71 msgid "" "Clicks are counted as unique subscribers that clicked on a specific link or " "on any link (in aggregated view)" @@ -748,7 +813,7 @@ msgstr "" "Klicks werden als eindeutige Abonnenten gezählt, die auf einen bestimmten " "Link oder auf irgendeinen Link geklickt haben (in der aggregierter Ansicht)" -#: views/campaigns/view.hbs:70 +#: views/campaigns/view.hbs:72 msgid "" "If a new entry is found from campaign feed a new subcampaign is created of " "that entry and it will be listed here" @@ -787,12 +852,12 @@ msgid "Preferences" msgstr "Persönliche Einstellungen" #: views/emails/rss-html.hbs:2 views/emails/stationery-html.hbs:4 -#: views/emails/stationery-text.hbs:4 views/lists/subscription/edit.hbs:15 +#: views/emails/stationery-text.hbs:4 views/lists/subscription/edit.hbs:16 #: views/subscription/partials/subscription-unsubscribe-form.hbs:2 #: views/subscription/web-manage.mjml.hbs:3 #: views/subscription/web-unsubscribe.mjml.hbs:1 #: views/subscription/web-unsubscribe.mjml.hbs:3 routes/forms.js:213 -#: routes/lists.js:269 +#: routes/lists.js:284 msgid "Unsubscribe" msgstr "Newsletter abbestellen" @@ -936,7 +1001,7 @@ msgstr "" "Webhooks für SES, SparkPost, SendGrid und Mailgun unterstützt, auch für " "Postfix und ZoneMTA." -#: views/index.hbs:26 lib/tools.js:129 +#: views/index.hbs:26 lib/tools.js:130 msgid "Automation" msgstr "Automatisierung" @@ -1007,28 +1072,28 @@ msgstr "Account" msgid "Settings" msgstr "Einstellungen" -#: views/layout.hbs:7 views/users/api.hbs:2 views/users/api.hbs:3 +#: views/layout.hbs:8 views/users/api.hbs:2 views/users/api.hbs:3 msgid "API" msgstr "API" -#: views/layout.hbs:8 +#: views/layout.hbs:9 msgid "Log out" msgstr "Abmelden" -#: views/layout.hbs:9 views/users/forgot.hbs:2 views/users/login.hbs:2 +#: views/layout.hbs:10 views/users/forgot.hbs:2 views/users/login.hbs:2 #: views/users/login.hbs:3 views/users/login.hbs:9 views/users/reset.hbs:2 msgid "Sign in" msgstr "Anmelden" -#: views/layout.hbs:10 +#: views/layout.hbs:11 msgid "Self Hosted Newsletter App Built on Top of Nodemailer" msgstr "Selbst gehostete Newsletter-App basierend auf Nodemailer" -#: views/layout.hbs:11 views/layout.hbs:13 +#: views/layout.hbs:12 views/layout.hbs:14 msgid "Source on GitHub" msgstr "Quellcode auf Github" -#: views/layout.hbs:12 +#: views/layout.hbs:13 msgid "Subscribe to Our Newsletter" msgstr "Abonnieren Sie unseren Newsletter" @@ -1045,11 +1110,11 @@ msgstr "Abonnieren Sie unseren Newsletter" #: views/lists/subscription/import-failed.hbs:2 #: views/lists/subscription/import-preview.hbs:2 #: views/lists/subscription/import.hbs:2 views/lists/view.hbs:2 -#: lib/tools.js:117 +#: lib/tools.js:118 routes/lists.js:59 msgid "Lists" msgstr "Listen" -#: views/lists/create.hbs:3 views/lists/create.hbs:4 views/lists/create.hbs:9 +#: views/lists/create.hbs:3 views/lists/create.hbs:4 views/lists/create.hbs:10 #: views/lists/lists.hbs:3 msgid "Create List" msgstr "Liste erstellen" @@ -1058,6 +1123,10 @@ msgstr "Liste erstellen" msgid "List Name" msgstr "Linstennamen" +#: views/lists/create.hbs:9 views/lists/edit.hbs:15 +msgid "Allow public users to subscribe themselves" +msgstr "Allen erlauben, diese Liste selbst zu abonnieren" + #: views/lists/edit.hbs:3 views/lists/edit.hbs:4 views/lists/view.hbs:8 msgid "Edit List" msgstr "Liste bearbeiten" @@ -1090,7 +1159,7 @@ msgstr "" "Das Standard-Formular dieser Liste. Wenn Sie ein Formular erstellt möchten, " "klicken Sie hier." -#: views/lists/edit.hbs:15 +#: views/lists/edit.hbs:16 msgid "Delete List" msgstr "Liste löschen" @@ -1260,16 +1329,17 @@ msgid "Delete Field" msgstr "Feld löschen" #: views/lists/fields/fields.hbs:7 views/lists/view.hbs:26 +#: views/report-templates/partials/report-template-fields.hbs:5 msgid "Type" msgstr "Typ" #: views/lists/fields/fields.hbs:10 views/lists/fields/fields.hbs:11 #: views/lists/forms/edit.hbs:22 views/lists/forms/forms.hbs:8 -#: views/lists/lists.hbs:9 views/lists/segments/segments.hbs:8 -#: views/lists/segments/view.hbs:12 views/templates/templates.hbs:7 -#: views/triggers/triggers.hbs:14 routes/campaigns.js:287 -#: routes/campaigns.js:576 routes/campaigns.js:665 routes/lists.js:238 -#: routes/triggers.js:297 +#: views/lists/segments/segments.hbs:8 views/lists/segments/view.hbs:12 +#: views/triggers/triggers.hbs:14 routes/campaigns.js:276 +#: routes/campaigns.js:568 routes/campaigns.js:657 routes/campaigns.js:706 +#: routes/lists.js:166 routes/lists.js:253 routes/report-templates.js:51 +#: routes/templates.js:170 routes/triggers.js:297 msgid "Edit" msgstr "Bearbeiten" @@ -1328,7 +1398,7 @@ msgstr "" #: views/lists/forms/edit.hbs:13 views/lists/subscription/add.hbs:16 #: views/subscription/mail-unsubscribe-confirmed-html.mjml.hbs:4 #: views/subscription/mail-unsubscribe-confirmed-text.hbs:4 routes/forms.js:157 -#: routes/lists.js:269 +#: routes/lists.js:284 msgid "Subscribe" msgstr "Abonnieren" @@ -1356,9 +1426,11 @@ msgstr "Adresse Verwalten" msgid "Create a test user for additional options" msgstr "Erstellen Sie einen Testbenutzer für zusätzliche Optionen" -#: views/lists/forms/edit.hbs:20 views/templates/create.hbs:2 +#: views/lists/forms/edit.hbs:20 views/report-templates/create.hbs:3 +#: views/report-templates/edit.hbs:3 +#: views/report-templates/report-templates.hbs:3 views/templates/create.hbs:2 #: views/templates/edit.hbs:2 views/templates/templates.hbs:2 -#: views/templates/templates.hbs:4 lib/tools.js:121 +#: views/templates/templates.hbs:4 lib/tools.js:122 routes/templates.js:27 msgid "Templates" msgstr "Vorlagen" @@ -1398,7 +1470,7 @@ msgstr "Das Standard-Formular für diese Liste ist:" msgid "ID" msgstr "ID" -#: views/lists/lists.hbs:7 +#: views/lists/lists.hbs:7 views/reports/partials/report-fields.hbs:10 msgid "Subscribers" msgstr "Abonnenten " @@ -1556,7 +1628,9 @@ msgid "Add Rule" msgstr "Regel hinzufügen" #: views/lists/segments/rule-create.hbs:8 -#: views/lists/subscription/import.hbs:12 views/triggers/create-select.hbs:9 +#: views/lists/subscription/import.hbs:15 +#: views/reports/create-select-template.hbs:5 +#: views/triggers/create-select.hbs:9 msgid "Next" msgstr "Weiter" @@ -1645,11 +1719,11 @@ msgstr "Zurück zur Liste" #: views/lists/subscription/edit.hbs:6 #: views/lists/subscription/import-preview.hbs:6 #: views/subscription/partials/subscription-unsubscribe-form.hbs:1 -#: lib/helpers.js:40 lib/models/segments.js:11 +#: lib/helpers.js:41 lib/models/segments.js:11 msgid "Email address" msgstr "E-Mail-Adresse" -#: views/lists/subscription/edit.hbs:16 +#: views/lists/subscription/edit.hbs:17 msgid "Delete Subscription" msgstr "Abonnement löschen" @@ -1686,7 +1760,8 @@ msgid "Import subscribers" msgstr "Abonnenten importieren" #: views/lists/subscription/import-preview.hbs:10 views/users/api.hbs:27 -#: views/users/api.hbs:35 views/users/api.hbs:43 views/users/api.hbs:55 +#: views/users/api.hbs:35 views/users/api.hbs:43 views/users/api.hbs:54 +#: views/users/api.hbs:62 views/users/api.hbs:70 msgid "Example" msgstr "Beispiel" @@ -1706,7 +1781,7 @@ msgstr "CSV-Trennzeichen" msgid "Categorize the imported subscribers as" msgstr "Kategorisiere die importierten Abonnenten als" -#: views/lists/subscription/import.hbs:8 routes/lists.js:187 +#: views/lists/subscription/import.hbs:8 routes/lists.js:202 msgid "Subscribed" msgstr "Abonniert" @@ -1718,6 +1793,18 @@ msgstr "Normale Abonnenten-Adressen" msgid "Suppressed emails that will be unsubscribed from your list" msgstr "Unterdrückte E-Mail-Adressen, die von Ihrer Liste abgemeldet werden" +#: views/lists/subscription/import.hbs:12 +msgid "Check imported emails" +msgstr "Überprüfe die importierten E-Mail-Adressen" + +#: views/lists/subscription/import.hbs:13 views/triggers/triggers.hbs:12 +msgid "Enabled" +msgstr "Aktiviert" + +#: views/lists/subscription/import.hbs:14 views/triggers/triggers.hbs:13 +msgid "Disabled" +msgstr "Deaktiviert" + #: views/lists/view.hbs:3 msgid "Subscription Form" msgstr "Abonnement-Formular" @@ -1757,7 +1844,7 @@ msgstr "Abonnemente" msgid "Imports" msgstr "Importe" -#: views/lists/view.hbs:25 routes/campaigns.js:266 routes/lists.js:281 +#: views/lists/view.hbs:25 routes/campaigns.js:255 routes/lists.js:296 msgid "Finished" msgstr "Fertig" @@ -1881,6 +1968,116 @@ msgstr "Mosaico öffnen" msgid "Template content (plaintext)" msgstr "Vorlagen-Inhalt (Klartext) " +#: views/report-templates/create.hbs:2 views/report-templates/edit.hbs:2 +#: views/report-templates/report-templates.hbs:2 +#: views/reports/create-select-template.hbs:2 views/reports/create.hbs:2 +#: views/reports/edit.hbs:2 views/reports/output.hbs:2 +#: views/reports/reports.hbs:2 views/reports/reports.hbs:5 +#: views/reports/view.hbs:2 lib/tools.js:137 routes/reports.js:31 +msgid "Reports" +msgstr "Reporte" + +#: views/report-templates/create.hbs:4 views/report-templates/create.hbs:6 +#: views/report-templates/report-templates.hbs:4 views/templates/create.hbs:3 +#: views/templates/create.hbs:4 views/templates/create.hbs:12 +#: views/templates/templates.hbs:3 +msgid "Create Template" +msgstr "Vorlage erstellen" + +#: views/report-templates/create.hbs:5 routes/report-templates.js:231 +msgid "Create Report Template" +msgstr "Report-Vorlage erstellen" + +#: views/report-templates/edit.hbs:4 views/templates/edit.hbs:3 +#: views/templates/edit.hbs:4 +msgid "Edit Template" +msgstr "Vorlage bearbeiten" + +#: views/report-templates/edit.hbs:5 routes/report-templates.js:262 +msgid "Edit Report Template" +msgstr "Report-Vorlage bearbeiten" + +#: views/report-templates/edit.hbs:6 views/templates/edit.hbs:11 +msgid "Delete Template" +msgstr "Vorlage löschen" + +#: views/report-templates/edit.hbs:7 +msgid "Update and Stay" +msgstr "Aktualisieren und bleiben" + +#: views/report-templates/edit.hbs:8 +msgid "Update and Leave" +msgstr "Aktualisieren und verlassen" + +#: views/report-templates/partials/report-template-fields.hbs:2 +msgid "Template Name" +msgstr "Vorlagen-Name" + +#: views/report-templates/partials/report-template-fields.hbs:6 +msgid "User selectable fields" +msgstr "Vom Benutzer wählbare Felder" + +#: views/report-templates/partials/report-template-fields.hbs:7 +msgid "Data processing code" +msgstr "Datenverarbeitungs-Code" + +#: views/report-templates/partials/report-template-fields.hbs:8 +msgid "Rendering template" +msgstr "Render-Vorlage" + +#: views/report-templates/report-templates.hbs:5 +msgid "Blank" +msgstr "Leer" + +#: views/report-templates/report-templates.hbs:6 +msgid "All Subscribers" +msgstr "Alle Abonnenten" + +#: views/report-templates/report-templates.hbs:7 +msgid "Grouped Subscribers" +msgstr "Gruppierte Abonnenten" + +#: views/report-templates/report-templates.hbs:8 +msgid "Export List as CSV" +msgstr "Liste als CSV exportieren" + +#: views/report-templates/report-templates.hbs:9 views/reports/reports.hbs:4 +#: routes/report-templates.js:29 +msgid "Report Templates" +msgstr "Report-Vorlagen" + +#: views/reports/create-select-template.hbs:3 +#: views/reports/create-select-template.hbs:4 views/reports/create.hbs:3 +#: views/reports/create.hbs:4 views/reports/create.hbs:5 +#: views/reports/reports.hbs:3 routes/reports.js:81 +msgid "Create Report" +msgstr "Report erstellen" + +#: views/reports/edit.hbs:3 views/reports/edit.hbs:4 routes/reports.js:151 +msgid "Edit Report" +msgstr "Report bearbeiten" + +#: views/reports/edit.hbs:5 +msgid "Delete Report" +msgstr "Report löschen" + +#: views/reports/partials/report-fields.hbs:2 +msgid "Report Name" +msgstr "Report-Name" + +#: views/reports/partials/report-fields.hbs:8 +#: views/reports/partials/report-fields.hbs:11 +msgid "" +"Select a campaign in the table above by clicking on the respective row " +"number." +msgstr "" +"Wählen Sie eine Kampagne in der obigen Tabelle aus, indem Sie auf die " +"jeweilige Zeilennummer klicken." + +#: views/reports/partials/report-select-template.hbs:1 +msgid "Report Template" +msgstr "Report-Vorlage" + #: views/settings.hbs:5 msgid "Service Address (URL)" msgstr "Service Adresse (URL)" @@ -2337,7 +2534,7 @@ msgstr "" "werden Nachrichten nicht signiert." #: views/subscription/mail-confirm-html.mjml.hbs:1 -#: views/subscription/mail-confirm-text.hbs:1 +#: views/subscription/mail-confirm-text.hbs:1 routes/subscription.js:551 msgid "Please Confirm Subscription" msgstr "Bitte bestätigen Sie ihr Abonnement" @@ -2505,14 +2702,17 @@ msgstr "Einstellungen aktualisieren" #: views/subscription/partials/subscription-subscribe-form.hbs:1 #: views/subscription/web-subscribe.mjml.hbs:2 +#: views/subscription/widget-subscribe.hbs:1 msgid "Subscribe to list" msgstr "Newsletter abonnieren" #: views/subscription/web-confirm-notice.mjml.hbs:1 +#: views/subscription/widget-subscribe.hbs:4 msgid "Almost Finished" msgstr "Fast Fertig" #: views/subscription/web-confirm-notice.mjml.hbs:2 +#: views/subscription/widget-subscribe.hbs:5 msgid "" "We need to confirm your email address. To complete the subscription process, " "please click the link in the email we just sent you." @@ -2557,10 +2757,13 @@ msgstr "Einstellungen aktualisiert" msgid "Your profile information has been updated." msgstr "Ihre Profilinformationen wurden aktualisiert." -#: views/templates/create.hbs:3 views/templates/create.hbs:4 -#: views/templates/create.hbs:12 views/templates/templates.hbs:3 -msgid "Create Template" -msgstr "Vorlage erstellen" +#: views/subscription/widget-subscribe.hbs:2 +msgid "Sending ..." +msgstr "Am senden …" + +#: views/subscription/widget-subscribe.hbs:3 +msgid "It looks like you are already subscribed to this list." +msgstr "Es sieht so aus, als hätten Sie diese Liste bereits abonniert." #: views/templates/create.hbs:5 views/templates/edit.hbs:6 msgid "Template name" @@ -2578,18 +2781,10 @@ msgstr "HTML Editor" msgid "Optional comments about this template" msgstr "Optionale Kommentare zu dieser Vorlage" -#: views/templates/edit.hbs:3 views/templates/edit.hbs:4 -msgid "Edit Template" -msgstr "Vorlage bearbeiten" - #: views/templates/edit.hbs:5 msgid "Back to templates" msgstr "Zurück zu Vorlagen" -#: views/templates/edit.hbs:11 -msgid "Delete Template" -msgstr "Vorlage löschen" - #: views/triggers/create-select.hbs:2 views/triggers/create.hbs:2 #: views/triggers/edit.hbs:2 views/triggers/triggered.hbs:2 #: views/triggers/triggers.hbs:2 views/triggers/triggers.hbs:4 @@ -2691,14 +2886,6 @@ msgstr "Ziel-Kampagne" msgid "Triggered count" msgstr "Anzahl Auslösungen" -#: views/triggers/triggers.hbs:12 -msgid "Enabled" -msgstr "Aktiviert" - -#: views/triggers/triggers.hbs:13 -msgid "Disabled" -msgstr "Deaktiviert" - #: views/users/account.hbs:4 msgid "This account is managed through LDAP." msgstr "Dieses Konto wird über LDAP verwaltet." @@ -2817,12 +3004,13 @@ msgstr "" #: views/users/api.hbs:15 views/users/api.hbs:17 views/users/api.hbs:30 #: views/users/api.hbs:32 views/users/api.hbs:38 views/users/api.hbs:40 -#: views/users/api.hbs:46 views/users/api.hbs:48 +#: views/users/api.hbs:46 views/users/api.hbs:57 views/users/api.hbs:59 +#: views/users/api.hbs:65 views/users/api.hbs:67 msgid "arguments" msgstr "Argumente" #: views/users/api.hbs:16 views/users/api.hbs:31 views/users/api.hbs:39 -#: views/users/api.hbs:47 +#: views/users/api.hbs:47 views/users/api.hbs:58 views/users/api.hbs:66 msgid "your personal access token" msgstr "Ihr persönlicher Access Token" @@ -2831,7 +3019,7 @@ msgid "subscriber's email address" msgstr "E-Mail-Adresse des Abonnenten" #: views/users/api.hbs:19 views/users/api.hbs:34 views/users/api.hbs:42 -#: views/users/api.hbs:50 +#: views/users/api.hbs:61 views/users/api.hbs:69 msgid "required" msgstr "erforderlich" @@ -2899,44 +3087,52 @@ msgid "This API call deletes a subscription" msgstr "Dieser API-Aufruf löscht ein Abonnement" #: views/users/api.hbs:44 -msgid "Add new custom field" -msgstr "Neues benutzerdefiniertes Feld hinzufügen" +msgid "Get list of blacklisted emails" +msgstr "" #: views/users/api.hbs:45 -msgid "This API call creates a new custom field for a list." +msgid "This API call get list of blacklisted emails." msgstr "" -"Dieser API-Aufruf erstellt ein neues benutzerdefiniertes Feld für eine Liste." + +#: views/users/api.hbs:48 +msgid "Start position" +msgstr "Startposition" #: views/users/api.hbs:49 -msgid "field name" -msgstr "Feldname" +msgid "optional, default 0" +msgstr "optional, standard 0" + +#: views/users/api.hbs:50 +msgid "limit emails count in response" +msgstr "" #: views/users/api.hbs:51 -msgid "one of the following types:" -msgstr "Einer der folgenden Typen:" +msgid "optional, default 10000" +msgstr "optional, standard 10000" #: views/users/api.hbs:52 -msgid "" -"If the type is 'option' then you also need to specify the parent element ID" +msgid "filter by part of email" msgstr "" -"Wenn der Typ 'Option' ist, dann müssen Sie auch die übergeordnete Element-ID " -"angeben" #: views/users/api.hbs:53 -msgid "" -"Template for the group element. If not set, then values of the elements are " -"joined with commas" -msgstr "" -"Vorlage für das Gruppenelement. Wenn nicht gesetzt, dann werden die Werte " -"der Elemente mit Kommas verbunden" +msgid "optional, default ''" +msgstr "optional, standard ''" -#: views/users/api.hbs:54 -msgid "" -"if not visible then the subscriber can not view or modify this value at the " -"profile page" +#: views/users/api.hbs:56 +msgid "This API call either add emails to blacklist" +msgstr "" + +#: views/users/api.hbs:60 views/users/api.hbs:68 +msgid "email address" +msgstr "E-Mail-Adresse" + +#: views/users/api.hbs:63 +msgid "Delete email from blacklist" +msgstr "E-Mail aus der Blacklist löschen" + +#: views/users/api.hbs:64 +msgid "This API call either delete emails from blacklist" msgstr "" -"Wenn nicht sichtbar, kann der Abonnent diesen Wert auf der Profilseite weder " -"sehen noch bearbeiten" #: views/users/forgot.hbs:3 views/users/reset.hbs:3 msgid "Password Reset" @@ -2991,18 +3187,18 @@ msgstr "Wähle Sie Ihr neues Passwort" msgid "Please enter a new password." msgstr "Bitte geben Sie ein neues Passwort ein" -#: lib/editor-helpers.js:16 routes/templates.js:109 +#: lib/editor-helpers.js:17 routes/templates.js:95 msgid "Could not find template with specified ID" msgstr "Konnte keine Vorlage mit angegebener ID finden" -#: lib/editor-helpers.js:32 routes/archive.js:145 routes/campaigns.js:131 -#: routes/campaigns.js:295 routes/campaigns.js:390 routes/campaigns.js:435 -#: routes/campaigns.js:475 routes/campaigns.js:778 routes/campaigns.js:801 -#: routes/campaigns.js:820 routes/campaigns.js:842 routes/triggers.js:146 +#: lib/editor-helpers.js:33 routes/archive.js:145 routes/campaigns.js:131 +#: routes/campaigns.js:284 routes/campaigns.js:379 routes/campaigns.js:427 +#: routes/campaigns.js:467 routes/campaigns.js:844 routes/campaigns.js:867 +#: routes/campaigns.js:886 routes/campaigns.js:908 routes/triggers.js:146 msgid "Could not find campaign with specified ID" msgstr "Konnte keine Kampagne mit dieser ID finden" -#: lib/editor-helpers.js:46 routes/editorapi.js:308 +#: lib/editor-helpers.js:47 routes/editorapi.js:308 msgid "Invalid resource type" msgstr "Ungültiger Ressourcentyp" @@ -3010,71 +3206,95 @@ msgstr "Ungültiger Ressourcentyp" msgid "Bad status code %s" msgstr "Bad Statuscode %s" -#: lib/helpers.js:31 +#: lib/helpers.js:32 msgid "URL that points to the unsubscribe page" msgstr "URL, die auf die Abmeldungsseite verweist" -#: lib/helpers.js:34 +#: lib/helpers.js:35 msgid "URL that points to the preferences page of the subscriber" msgstr "" "URL, die auf die Persönliche-Einstellungs-Seite des Teilnehmers verweist" -#: lib/helpers.js:37 +#: lib/helpers.js:38 msgid "URL to preview the message in a browser" msgstr "URL zur Vorschau der E-Mail im Browser" -#: lib/helpers.js:43 lib/models/segments.js:31 +#: lib/helpers.js:44 lib/models/segments.js:31 msgid "First name" msgstr "Vorname" -#: lib/helpers.js:46 lib/models/segments.js:35 +#: lib/helpers.js:47 lib/models/segments.js:35 msgid "Last name" msgstr "Nachname" -#: lib/helpers.js:49 +#: lib/helpers.js:50 msgid "Full name (first and last name combined)" msgstr "Vollständiger Name (Vor- und Nachname kombiniert)" -#: lib/helpers.js:52 +#: lib/helpers.js:53 msgid "Unique ID that identifies the recipient" msgstr "Eindeutige ID, die den Empfänger identifiziert" -#: lib/helpers.js:55 +#: lib/helpers.js:56 msgid "Unique ID that identifies the list used for this campaign" msgstr "" "Eindeutige ID, welche die für diese Kampagne verwendete Liste identifiziert" -#: lib/helpers.js:58 +#: lib/helpers.js:59 msgid "Unique ID that identifies current campaign" msgstr "Eindeutige ID, welche die aktuelle Kampagne identifiziert" +#: lib/helpers.js:67 lib/helpers.js:79 +msgid "content from an RSS entry" +msgstr "Inhalt aus einem RSS-Eintrag" + +#: lib/helpers.js:70 +msgid "RSS entry title" +msgstr "" + +#: lib/helpers.js:73 +msgid "RSS entry date" +msgstr "" + +#: lib/helpers.js:76 +msgid "RSS entry link" +msgstr "" + +#: lib/helpers.js:82 +msgid "RSS entry summary" +msgstr "" + +#: lib/helpers.js:85 +msgid "RSS entry image URL" +msgstr "" + #: lib/mailer.js:245 msgid "Invalid mail transport" msgstr "Ungültiger Mail-Transport" -#: lib/models/campaigns.js:308 lib/models/campaigns.js:335 -#: lib/models/campaigns.js:408 lib/models/campaigns.js:531 -#: lib/models/campaigns.js:792 lib/models/campaigns.js:924 +#: lib/models/campaigns.js:105 lib/models/campaigns.js:132 +#: lib/models/campaigns.js:205 lib/models/campaigns.js:328 +#: lib/models/campaigns.js:589 lib/models/campaigns.js:721 msgid "Missing Campaign ID" msgstr "Kampagnen-ID fehlt" -#: lib/models/campaigns.js:444 +#: lib/models/campaigns.js:241 msgid "Emtpy or too large attahcment" msgstr "Leere oder zu große Anhangsdatei" -#: lib/models/campaigns.js:610 lib/models/campaigns.js:801 +#: lib/models/campaigns.js:407 lib/models/campaigns.js:598 msgid "Campaign Name must be set" msgstr "Kampagnenname ist erforderlich" -#: lib/models/campaigns.js:614 +#: lib/models/campaigns.js:411 msgid "RSS URL must be set and needs to be a valid URL" msgstr "RSS URL ist erforderlich und muss eine gültige URL sein" -#: lib/models/campaigns.js:770 +#: lib/models/campaigns.js:567 msgid "Selected template not found" msgstr "Ausgewählte Vorlage nicht gefunden" -#: lib/models/campaigns.js:1125 +#: lib/models/campaigns.js:922 msgid "Invalid or missing message ID" msgstr "Ungültige oder fehlende Nachrichten-ID" @@ -3095,12 +3315,12 @@ msgid "Option" msgstr "Option" #: lib/models/fields.js:53 lib/models/fields.js:98 lib/models/fields.js:123 -#: lib/models/forms.js:37 lib/models/lists.js:81 lib/models/lists.js:178 -#: lib/models/lists.js:218 lib/models/segments.js:43 lib/models/segments.js:176 -#: lib/models/subscriptions.js:89 lib/models/subscriptions.js:661 -#: lib/models/subscriptions.js:724 lib/models/subscriptions.js:910 -#: lib/models/subscriptions.js:1013 lib/models/subscriptions.js:1067 -#: lib/models/subscriptions.js:1130 lib/models/subscriptions.js:1173 +#: lib/models/forms.js:37 lib/models/lists.js:72 lib/models/lists.js:172 +#: lib/models/lists.js:212 lib/models/segments.js:43 lib/models/segments.js:176 +#: lib/models/subscriptions.js:74 lib/models/subscriptions.js:574 +#: lib/models/subscriptions.js:637 lib/models/subscriptions.js:823 +#: lib/models/subscriptions.js:926 lib/models/subscriptions.js:980 +#: lib/models/subscriptions.js:1043 lib/models/subscriptions.js:1086 msgid "Missing List ID" msgstr "Listen-ID fehlt" @@ -3150,12 +3370,12 @@ msgstr "Formular-Name ist erforderlich" msgid "Custom form not found" msgstr "Formular nicht gefunden" -#: lib/models/links.js:329 routes/campaigns.js:541 routes/campaigns.js:589 -#: routes/campaigns.js:629 services/sender.js:304 +#: lib/models/links.js:329 routes/campaigns.js:533 routes/campaigns.js:581 +#: routes/campaigns.js:621 routes/campaigns.js:671 services/sender.js:305 msgid "Campaign not found" msgstr "Kampagne nicht gefunden" -#: lib/models/links.js:337 routes/lists.js:162 services/sender.js:311 +#: lib/models/links.js:337 routes/lists.js:177 services/sender.js:312 msgid "List not found" msgstr "Liste nicht gefunden" @@ -3163,27 +3383,44 @@ msgstr "Liste nicht gefunden" msgid "Subscription not found" msgstr "Abonnement nicht gefunden" -#: lib/models/lists.js:117 lib/models/lists.js:182 +#: lib/models/lists.js:110 lib/models/lists.js:176 msgid "List Name must be set" msgstr "Listennamen ist erforderlich" -#: lib/models/lists.js:247 +#: lib/models/lists.js:241 msgid "Missing List CID" msgstr "Listen CID fehlt" +#: lib/models/report-templates.js:26 lib/models/report-templates.js:70 +#: lib/models/report-templates.js:142 +msgid "Missing report template ID" +msgstr "Report-Vorlagen-ID fehlt" + +#: lib/models/report-templates.js:77 +msgid "Report template name must be set" +msgstr "Report-Vorlagen-Name ist erforderlich" + +#: lib/models/reports.js:39 lib/models/reports.js:109 lib/models/reports.js:187 +msgid "Missing report ID" +msgstr "Report-ID fehlt" + +#: lib/models/reports.js:115 +msgid "Report name must be set" +msgstr "Report-Name ist erforderlich" + #: lib/models/segments.js:15 msgid "Signup country" msgstr "Anmeldungs-Land" -#: lib/models/segments.js:19 lib/models/triggers.js:11 +#: lib/models/segments.js:19 lib/models/triggers.js:12 msgid "Sign up date" msgstr "Anmeldungs-Datum" -#: lib/models/segments.js:23 lib/models/triggers.js:15 +#: lib/models/segments.js:23 lib/models/triggers.js:16 msgid "Latest open" msgstr "Letzte Öffnung" -#: lib/models/segments.js:27 lib/models/triggers.js:19 +#: lib/models/segments.js:27 lib/models/triggers.js:20 msgid "Latest click" msgstr "Letzter Klick" @@ -3242,107 +3479,107 @@ msgstr "Das Segment wurde nicht gefunden" msgid "Selected rule not found" msgstr "Ausgewählte Regel nicht gefunden" -#: lib/models/subscriptions.js:235 +#: lib/models/subscriptions.js:148 msgid "%s: Please Confirm Subscription" msgstr "%s: Bitte bestätigen Sie Ihr Abonnement" -#: lib/models/subscriptions.js:345 +#: lib/models/subscriptions.js:258 msgid "Could not save subscription" msgstr "Abonnement konnte nicht gespeichert werden" -#: lib/models/subscriptions.js:528 lib/models/subscriptions.js:558 +#: lib/models/subscriptions.js:441 lib/models/subscriptions.js:471 msgid "Missing Subbscription ID" msgstr "Abonnement-ID fehlt" -#: lib/models/subscriptions.js:586 +#: lib/models/subscriptions.js:499 msgid "Missing Subbscription email address" msgstr "Abonnement-E-Mail-Adresse fehlt" -#: lib/models/subscriptions.js:665 lib/models/subscriptions.js:914 -#: lib/models/subscriptions.js:1177 +#: lib/models/subscriptions.js:578 lib/models/subscriptions.js:827 +#: lib/models/subscriptions.js:1090 msgid "Missing subscription ID" msgstr "Abonnement-ID fehlt" -#: lib/models/subscriptions.js:728 +#: lib/models/subscriptions.js:641 msgid "Missing email address" msgstr "E-Mail-Adresse fehlt" -#: lib/models/subscriptions.js:1017 lib/models/subscriptions.js:1071 -#: lib/models/subscriptions.js:1107 +#: lib/models/subscriptions.js:930 lib/models/subscriptions.js:984 +#: lib/models/subscriptions.js:1020 msgid "Missing Import ID" msgstr "Import-ID fehlt" -#: lib/models/subscriptions.js:1199 +#: lib/models/subscriptions.js:1112 msgid "Unknown subscription ID" msgstr "Unbekannte Abonnement-ID" -#: lib/models/subscriptions.js:1204 +#: lib/models/subscriptions.js:1117 msgid "Nothing seems to be changed" msgstr "Nichts scheint sich geändert zu haben" -#: lib/models/subscriptions.js:1218 +#: lib/models/subscriptions.js:1131 msgid "This address is already registered by someone else" msgstr "Diese Adresse ist bereits von jemand anderem registriert" -#: lib/models/templates.js:51 lib/models/templates.js:125 -#: lib/models/templates.js:169 +#: lib/models/templates.js:26 lib/models/templates.js:100 +#: lib/models/templates.js:144 msgid "Missing Template ID" msgstr "Vorlagen ID fehlt" -#: lib/models/templates.js:80 lib/models/templates.js:129 +#: lib/models/templates.js:55 lib/models/templates.js:104 msgid "Template Name must be set" msgstr "Vorlagen-Name ist erforderlich" -#: lib/models/triggers.js:28 +#: lib/models/triggers.js:29 msgid "Has Opened" msgstr "Hat geöffnet" -#: lib/models/triggers.js:31 +#: lib/models/triggers.js:32 msgid "Has Clicked" msgstr "Hat geklickt" -#: lib/models/triggers.js:34 +#: lib/models/triggers.js:35 msgid "Not Opened" msgstr "Nicht geöffnet" -#: lib/models/triggers.js:37 +#: lib/models/triggers.js:38 msgid "Not Clicked" msgstr "Nicht geklickt" -#: lib/models/triggers.js:174 lib/models/triggers.js:211 +#: lib/models/triggers.js:175 lib/models/triggers.js:212 msgid "Missing or invalid list ID" msgstr "Fehlende oder ungültige Listen ID" -#: lib/models/triggers.js:178 lib/models/triggers.js:263 +#: lib/models/triggers.js:179 lib/models/triggers.js:264 msgid "Days in the past are not allowed" msgstr "Tage in der Vergangenheit sind nicht erlaubt" -#: lib/models/triggers.js:182 lib/models/triggers.js:203 -#: lib/models/triggers.js:267 lib/models/triggers.js:288 +#: lib/models/triggers.js:183 lib/models/triggers.js:204 +#: lib/models/triggers.js:268 lib/models/triggers.js:289 msgid "Missing or invalid trigger rule" msgstr "Fehlende oder ungültige Trigger-Regel" -#: lib/models/triggers.js:189 lib/models/triggers.js:274 +#: lib/models/triggers.js:190 lib/models/triggers.js:275 msgid "Invalid subscription configuration" msgstr "Ungültige Abonnement-Konfiguration" -#: lib/models/triggers.js:196 lib/models/triggers.js:281 +#: lib/models/triggers.js:197 lib/models/triggers.js:282 msgid "Invalid campaign configuration" msgstr "Kampagnen Konfiguration ungültig" -#: lib/models/triggers.js:199 lib/models/triggers.js:284 +#: lib/models/triggers.js:200 lib/models/triggers.js:285 msgid "A campaing can not be a target for itself" msgstr "Eine Kampagne kann kein Ziel für sich selbst sein" -#: lib/models/triggers.js:232 +#: lib/models/triggers.js:233 msgid "Could not store trigger row" msgstr "Trigger-Zeile konnte nicht gespeichert werden" -#: lib/models/triggers.js:249 +#: lib/models/triggers.js:250 msgid "Missing or invalid Trigger ID" msgstr "Trigger-ID fehlt oder ist ungültig" -#: lib/models/triggers.js:316 +#: lib/models/triggers.js:317 msgid "Missing Trigger ID" msgstr "Trigger-ID fehlt" @@ -3413,42 +3650,43 @@ msgstr "Eingeloggt als %s" msgid "Incorrect username or password" msgstr "Falscher Benutzername oder Passwort" -#: lib/tools.js:139 +#: lib/tools.js:148 msgid "Blocked email address \"%s\"" msgstr "Gesperrte E-Mail-Adresse \"%s\"" -#: lib/tools.js:148 +#: lib/tools.js:157 msgid "Invalid email address \"%s\"." msgstr "Ungültige E-Mail-Adresse \"%s\"." -#: lib/tools.js:151 +#: lib/tools.js:160 msgid "MX record not found for domain" msgstr "MX-Record für die Domäne nicht gefunden" -#: lib/tools.js:154 +#: lib/tools.js:163 msgid "Address domain not found" msgstr "Address-Domain nicht gefunden" -#: lib/tools.js:157 +#: lib/tools.js:166 msgid "Address domain name is required" msgstr "Address-Domain-Name ist erforderlich" -#: routes/archive.js:31 routes/archive.js:43 routes/archive.js:55 app.js:225 +#: routes/archive.js:31 routes/archive.js:43 routes/archive.js:55 app.js:224 msgid "Not Found" msgstr "Nicht gefunden" -#: routes/archive.js:121 services/sender.js:447 +#: routes/archive.js:121 services/sender.js:449 msgid "Received status code %s from %s" msgstr "Empfangener Statuscode %s von %s" -#: routes/archive.js:153 routes/campaigns.js:828 +#: routes/archive.js:153 routes/campaigns.js:894 msgid "Attachment not found" msgstr "Anhangs-Datei nicht gefunden" -#: routes/campaigns.js:26 routes/editorapi.js:35 routes/fields.js:13 -#: routes/forms.js:16 routes/grapejs.js:13 routes/lists.js:50 -#: routes/mosaico.js:14 routes/segments.js:13 routes/settings.js:23 -#: routes/templates.js:17 routes/triggers.js:18 routes/users.js:75 +#: routes/blacklist.js:13 routes/campaigns.js:26 routes/editorapi.js:35 +#: routes/fields.js:13 routes/forms.js:16 routes/grapejs.js:13 +#: routes/lists.js:50 routes/mosaico.js:14 routes/report-templates.js:20 +#: routes/reports.js:22 routes/segments.js:13 routes/settings.js:23 +#: routes/templates.js:18 routes/triggers.js:18 routes/users.js:75 #: routes/users.js:120 msgid "Need to be logged in to access restricted content" msgstr "Sie müssen angemeldet sein, um auf geschützte Inhalte zuzugreifen." @@ -3461,107 +3699,103 @@ msgstr "Kampagne konnte nicht erstellt werden" msgid "Campaign “%s” created" msgstr "Die Kampagne “%s” wurde erstellt" -#: routes/campaigns.js:204 -msgid "content from an RSS entry" -msgstr "Inhalt aus einem RSS-Eintrag" - -#: routes/campaigns.js:220 +#: routes/campaigns.js:209 msgid "Campaign settings updated" msgstr "Kampagnen-Einstellungen aktualisiert" -#: routes/campaigns.js:222 +#: routes/campaigns.js:211 msgid "Campaign settings not updated" msgstr "Kampagnen-Einstellungen nicht aktualisiert" -#: routes/campaigns.js:238 routes/campaigns.js:678 +#: routes/campaigns.js:227 routes/campaigns.js:744 msgid "Campaign deleted" msgstr "Kampagne gelöscht" -#: routes/campaigns.js:240 routes/campaigns.js:680 +#: routes/campaigns.js:229 routes/campaigns.js:746 msgid "Could not delete specified campaign" msgstr "Die Kampagne konnte nicht gelöscht werden" -#: routes/campaigns.js:259 +#: routes/campaigns.js:248 msgid "Idling" msgstr "Ruhend" -#: routes/campaigns.js:262 +#: routes/campaigns.js:251 msgid "Scheduled" msgstr "Geplant" -#: routes/campaigns.js:268 +#: routes/campaigns.js:257 msgid "Paused" msgstr "Pausiert" -#: routes/campaigns.js:270 +#: routes/campaigns.js:259 msgid "Inactive" msgstr "Inaktiv" -#: routes/campaigns.js:272 +#: routes/campaigns.js:261 msgid "Active" msgstr "Aktiv" -#: routes/campaigns.js:274 +#: routes/campaigns.js:263 msgid "Other" msgstr "Andere" -#: routes/campaigns.js:429 +#: routes/campaigns.js:421 msgid "Unknown status selector" msgstr "Unbekannter Status-Selektor" -#: routes/campaigns.js:696 +#: routes/campaigns.js:762 msgid "Scheduled sending" msgstr "Senden geplant" -#: routes/campaigns.js:698 +#: routes/campaigns.js:764 msgid "Could not schedule sending" msgstr "Versand konnte nicht geplant werden" -#: routes/campaigns.js:710 +#: routes/campaigns.js:776 msgid "Sending resumed" msgstr "Versand wieder aufgenommen" -#: routes/campaigns.js:712 +#: routes/campaigns.js:778 msgid "Could not resume sending" msgstr "Versand konnte nicht fortgesetzt werden" -#: routes/campaigns.js:724 +#: routes/campaigns.js:790 msgid "Sending reset" msgstr "Versand zurückgesetzt" -#: routes/campaigns.js:726 +#: routes/campaigns.js:792 msgid "Could not reset sending" msgstr "Versand konnte nicht zurückgesetzt werden" -#: routes/campaigns.js:738 routes/campaigns.js:766 +#: routes/campaigns.js:804 routes/campaigns.js:832 msgid "Sending paused" msgstr "Versand pausiert" -#: routes/campaigns.js:740 routes/campaigns.js:768 +#: routes/campaigns.js:806 routes/campaigns.js:834 msgid "Could not pause sending" msgstr "Versand konnte nicht pausiert werden" -#: routes/campaigns.js:752 +#: routes/campaigns.js:818 msgid "Sending activated" msgstr "Versand aktiviert" -#: routes/campaigns.js:754 +#: routes/campaigns.js:820 msgid "Could not activate sending" msgstr "Versand konnte nicht aktiviert werden" -#: routes/campaigns.js:789 +#: routes/campaigns.js:855 msgid "Attachment uploaded" msgstr "Anhang hochgeladen" -#: routes/campaigns.js:791 +#: routes/campaigns.js:857 msgid "Could not store attachment" msgstr "Anhang konnte nicht gespeichert werden" -#: routes/campaigns.js:808 +#: routes/campaigns.js:874 msgid "Attachment deleted" msgstr "Anhang gelöscht" -#: routes/campaigns.js:810 +#: routes/campaigns.js:876 msgid "Could not delete attachment" msgstr "Anhang konnte nicht gelöscht werden" @@ -3726,138 +3960,207 @@ msgid "Oops, we couldn't find a link for the URL you clicked" msgstr "" "Ups, wir konnten keinen Link für die URL finden, die Sie geklickt haben" -#: routes/lists.js:91 +#: routes/lists.js:80 msgid "Could not create list" msgstr "Die Liste konnte nicht erstellt werden" -#: routes/lists.js:94 +#: routes/lists.js:83 msgid "List created" msgstr "Liste erstellt" -#: routes/lists.js:102 routes/lists.js:252 routes/lists.js:317 -#: routes/lists.js:356 routes/lists.js:425 routes/lists.js:450 -#: routes/lists.js:495 routes/lists.js:517 routes/lists.js:546 -#: routes/lists.js:625 routes/lists.js:682 routes/lists.js:709 +#: routes/lists.js:91 routes/lists.js:267 routes/lists.js:332 +#: routes/lists.js:371 routes/lists.js:440 routes/lists.js:465 +#: routes/lists.js:510 routes/lists.js:532 routes/lists.js:561 +#: routes/lists.js:640 routes/lists.js:697 routes/lists.js:724 msgid "Could not find list with specified ID" msgstr "Die Liste mit angegebener ID konnte nicht gefunden werden" -#: routes/lists.js:129 +#: routes/lists.js:118 msgid "List settings updated" msgstr "Listeneinstellungen aktualisiert" -#: routes/lists.js:131 +#: routes/lists.js:120 msgid "List settings not updated" msgstr "Listeneinstellungen nicht aktualisiert" -#: routes/lists.js:149 +#: routes/lists.js:138 msgid "List deleted" msgstr "Liste gelöscht" -#: routes/lists.js:151 +#: routes/lists.js:140 msgid "Could not delete specified list" msgstr "Die Liste konnte nicht gelöscht werden" -#: routes/lists.js:187 +#: routes/lists.js:202 msgid "Unknown" msgstr "Unbekannt" -#: routes/lists.js:187 +#: routes/lists.js:202 msgid "Complained" msgstr "Beschwert" -#: routes/lists.js:218 +#: routes/lists.js:233 msgid "Invalid key" msgstr "Ungültiger Key" -#: routes/lists.js:220 +#: routes/lists.js:235 msgid "Expired key" msgstr "Abgelaufener Key" -#: routes/lists.js:222 +#: routes/lists.js:237 msgid "Revoked key" msgstr "Widerrufener Key" -#: routes/lists.js:272 +#: routes/lists.js:287 msgid "Initializing" msgstr "Initialisierung" -#: routes/lists.js:275 +#: routes/lists.js:290 msgid "Initialized" msgstr "Initialisiert" -#: routes/lists.js:278 +#: routes/lists.js:293 msgid "Importing" msgstr "Importieren" -#: routes/lists.js:284 +#: routes/lists.js:299 msgid "Errored" msgstr "Fehlerhaft" -#: routes/lists.js:362 routes/lists.js:431 routes/lists.js:456 +#: routes/lists.js:377 routes/lists.js:446 routes/lists.js:471 msgid "Could not find subscriber with specified ID" msgstr "Der Abonnent mit angegebenen ID konnte nicht gefunden werden" -#: routes/lists.js:408 +#: routes/lists.js:423 msgid "Could not add subscription" msgstr "Das Abonnement konnte nicht hinzugefügt werden" -#: routes/lists.js:413 +#: routes/lists.js:428 msgid "%s was successfully added to your list" msgstr "%s wurde Ihrer Liste erfolgreich hinzugefügt" -#: routes/lists.js:415 +#: routes/lists.js:430 msgid "%s was not added to your list" msgstr "%s wurde nicht zu Ihrer Liste hinzugefügt" -#: routes/lists.js:437 +#: routes/lists.js:452 msgid "Could not unsubscribe user" msgstr "Der Benutzer konnte nicht deabonniert werden" -#: routes/lists.js:440 +#: routes/lists.js:455 msgid "%s was successfully unsubscribed from your list" msgstr "%s wurde erfolgreich von Ihrer Liste entfernt" -#: routes/lists.js:460 +#: routes/lists.js:475 msgid "%s was successfully removed from your list" msgstr "%s wurde erfolgreich aus Ihrer Liste entfernt" -#: routes/lists.js:472 +#: routes/lists.js:487 msgid "Another subscriber with email address %s already exists" msgstr "Ein anderer Abonnent mit der E-Mail-Adresse %s existiert bereits" -#: routes/lists.js:479 +#: routes/lists.js:494 msgid "Subscription settings updated" msgstr "Abonnementeinstellungen aktualisiert" -#: routes/lists.js:481 +#: routes/lists.js:496 msgid "Subscription settings not updated" msgstr "Abonnementeinstellungen nicht aktualisiert" -#: routes/lists.js:523 routes/lists.js:631 routes/lists.js:667 -#: routes/lists.js:695 routes/lists.js:715 +#: routes/lists.js:538 routes/lists.js:646 routes/lists.js:682 +#: routes/lists.js:710 routes/lists.js:730 msgid "Could not find import data with specified ID" msgstr "Keine Importdaten für diese ID gefunden" -#: routes/lists.js:554 +#: routes/lists.js:569 msgid "Could not process CSV" msgstr "CSV-Datei konnte nicht verarbeitet werden" -#: routes/lists.js:563 +#: routes/lists.js:578 msgid "Could not create importer" msgstr "Importer konnte nicht erstellt werden" -#: routes/lists.js:614 +#: routes/lists.js:629 msgid "Empty file" msgstr "Leere Datei" -#: routes/lists.js:671 +#: routes/lists.js:686 msgid "Import started" msgstr "Import gestartet" -#: routes/lists.js:699 +#: routes/lists.js:714 msgid "Import restarted" msgstr "Import neu gestartet" +#: routes/report-templates.js:246 +msgid "Could not create report template" +msgstr "Report-Vorlage konnte nicht erstellt werden" + +#: routes/report-templates.js:249 +msgid "Report template “%s” created" +msgstr "Die Report-Vorlage “%s” wurde erstellt" + +#: routes/report-templates.js:257 +msgid "Could not find report template with specified ID" +msgstr "Report-Vorlage mit angegebener ID konnte nicht gefunden werden" + +#: routes/report-templates.js:280 +msgid "Report template updated" +msgstr "Report-Vorlage aktualisiert" + +#: routes/report-templates.js:282 +msgid "Report template not updated" +msgstr "Report-Vorlage wurde nicht aktualisiert" + +#: routes/report-templates.js:298 +msgid "Report template deleted" +msgstr "Report-Vorlage gelöscht" + +#: routes/report-templates.js:300 +msgid "Could not delete specified report template" +msgstr "Die Report-Vorlage konnte nicht gelöscht werden" + +#: routes/reports.js:124 routes/reports.js:130 +msgid "Could not create report" +msgstr "Der Report konnte nicht erstellt werden" + +#: routes/reports.js:135 +msgid "Report “%s” created" +msgstr "Report “%s” erstellt" + +#: routes/reports.js:146 routes/reports.js:224 routes/reports.js:239 +#: routes/reports.js:265 routes/reports.js:275 +msgid "Could not find report with specified ID" +msgstr "Der Report mit dieser ID konnte nicht gefunden werden" + +#: routes/reports.js:188 routes/reports.js:194 +msgid "Could not update report" +msgstr "Der Report konnte nicht aktualisiert werden" + +#: routes/reports.js:197 +msgid "Report updated" +msgstr "Report aktualisiert" + +#: routes/reports.js:199 +msgid "Report not updated" +msgstr "Report nicht aktualisiert" + +#: routes/reports.js:212 +msgid "Report deleted" +msgstr "Report gelöscht" + +#: routes/reports.js:214 +msgid "Could not delete specified report" +msgstr "Der Report konnte nicht gelöscht werden" + +#: routes/reports.js:230 +msgid "Could not find report template" +msgstr "Report-Vorlage konnte nicht gefunden werden" + +#: routes/reports.js:260 +msgid "Unknown type of template" +msgstr "Unbekannter Mime-Type des Template" + #: routes/segments.js:86 msgid "Could not create segment" msgstr "Segment konnte nicht erstellt werden" @@ -3993,71 +4296,80 @@ msgstr "Server antwortete mit: \"%s\"" msgid "Mailer settings verified, ready to send some mail!" msgstr "Mailer-Einstellungen überprüft, bereit zum Senden!" -#: routes/subscription.js:25 +#: routes/subscription.js:32 +msgid "Not allowed by CORS" +msgstr "Nicht erlaubt von CORS" + +#: routes/subscription.js:50 msgid "Selected subscription not found" msgstr "Ausgewähltes Abonnement nicht gefunden" -#: routes/subscription.js:35 routes/subscription.js:155 -#: routes/subscription.js:222 routes/subscription.js:275 -#: routes/subscription.js:327 routes/subscription.js:396 -#: routes/subscription.js:434 routes/subscription.js:510 -#: routes/subscription.js:532 routes/subscription.js:592 -#: routes/subscription.js:616 routes/subscription.js:681 +#: routes/subscription.js:60 routes/subscription.js:181 +#: routes/subscription.js:266 routes/subscription.js:324 +#: routes/subscription.js:377 routes/subscription.js:429 +#: routes/subscription.js:511 routes/subscription.js:562 +#: routes/subscription.js:638 routes/subscription.js:660 +#: routes/subscription.js:720 routes/subscription.js:744 +#: routes/subscription.js:809 msgid "Selected list not found" msgstr "Ausgewählte Liste nicht gefunden" -#: routes/subscription.js:109 +#: routes/subscription.js:134 msgid "%s: Subscription Confirmed" msgstr "%s: Abonnement bestätigt" -#: routes/subscription.js:381 +#: routes/subscription.js:184 routes/subscription.js:514 +msgid "The list does not allow public subscriptions." +msgstr "Die Liste erlaubt keine öffentlichen Abonnements." + +#: routes/subscription.js:493 routes/subscription.js:495 msgid "Email address not set" msgstr "E-Mail-Adresse nicht gesetzt" -#: routes/subscription.js:419 +#: routes/subscription.js:538 msgid "Could not store confirmation data" msgstr "Die Bestätigungsdaten konnten nicht gespeichert werden" -#: routes/subscription.js:448 routes/subscription.js:547 -#: routes/subscription.js:631 +#: routes/subscription.js:576 routes/subscription.js:675 +#: routes/subscription.js:759 msgid "Subscription not found from this list" msgstr "Abonnement konnte in dieser Liste nicht gefunden werden" -#: routes/subscription.js:607 +#: routes/subscription.js:735 msgid "Email address updated, check your mailbox for verification instructions" msgstr "" "Die E-Mail-Adresse wurde aktualisiert. Bitte überprüfen Sie Ihre Mailbox zur " "Bestätigung" -#: routes/subscription.js:730 +#: routes/subscription.js:858 msgid "%s: Unsubscribe Confirmed" msgstr "%s: Abmeldungen Bestätigt" -#: routes/subscription.js:777 routes/subscription.js:793 +#: routes/subscription.js:905 routes/subscription.js:921 msgid "Public key is not set" msgstr "Public-Key ist nicht gesetzt" -#: routes/templates.js:98 +#: routes/templates.js:84 msgid "Could not create template" msgstr "Vorlage konnte nicht erstellt werden" -#: routes/templates.js:101 +#: routes/templates.js:87 msgid "Template created" msgstr "Vorlage erstellt" -#: routes/templates.js:140 +#: routes/templates.js:126 msgid "Template settings updated" msgstr "Vorlageneinstellungen aktualisiert" -#: routes/templates.js:142 +#: routes/templates.js:128 msgid "Template settings not updated" msgstr "Template Einstellungen wurden nicht aktualisiert" -#: routes/templates.js:158 +#: routes/templates.js:144 msgid "Template deleted" msgstr "Vorlage gelöscht" -#: routes/templates.js:160 +#: routes/templates.js:146 msgid "Could not delete specified template" msgstr "Die Vorlage konnte nicht gelöscht werden" @@ -4145,11 +4457,11 @@ msgstr "Fand %s neue Kampagnen-Nachrichten im Feed" msgid "Found nothing new from the feed" msgstr "Im Feed wurde nichts neues gefunden" -#: services/feedcheck.js:143 +#: services/feedcheck.js:146 msgid "RSS entry %s" msgstr "RSS Eintrag %s" -#: services/importer.js:243 +#: services/importer.js:249 msgid "Could not access import file" msgstr "Auf die Importdatei konnte nicht zugegriffen werden" @@ -4157,6 +4469,36 @@ msgstr "Auf die Importdatei konnte nicht zugegriffen werden" msgid "Unknown trigger type %s" msgstr "Unbekannter Trigger-Typ %s" +#~ msgid "Add new custom field" +#~ msgstr "Neues benutzerdefiniertes Feld hinzufügen" + +#~ msgid "field name" +#~ msgstr "Feldname" + +#~ msgid "one of the following types:" +#~ msgstr "Einer der folgenden Typen:" + +#~ msgid "" +#~ "If the type is 'option' then you also need to specify the parent element " +#~ "ID" +#~ msgstr "" +#~ "Wenn der Typ 'Option' ist, dann müssen Sie auch die übergeordnete Element-" +#~ "ID angeben" + +#~ msgid "" +#~ "Template for the group element. If not set, then values of the elements " +#~ "are joined with commas" +#~ msgstr "" +#~ "Vorlage für das Gruppenelement. Wenn nicht gesetzt, dann werden die Werte " +#~ "der Elemente mit Kommas verbunden" + +#~ msgid "" +#~ "if not visible then the subscriber can not view or modify this value at " +#~ "the profile page" +#~ msgstr "" +#~ "Wenn nicht sichtbar, kann der Abonnent diesen Wert auf der Profilseite " +#~ "weder sehen noch bearbeiten" + #~ msgid "You are now unsubscribed" #~ msgstr "Sie sind jetzt aus dieser Liste ausgetragen" From a6d25e668b6d9a31b90b05bb9bfe7d65f1d619a1 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Thu, 4 May 2017 17:42:46 -0400 Subject: [PATCH 281/483] Release candidate of the selectable unsubscription Implemented the resubscription process - i.e. pre-filling in the form when the subscription link is clicked in the unsubscription notice. --- languages/de_DE.po | 2 +- lib/helpers.js | 2 +- lib/models/campaigns.js | 16 +- lib/models/confirmations.js | 4 +- lib/models/reports.js | 3 +- lib/models/settings.js | 2 + lib/models/subscriptions.js | 51 +++-- lib/subscription-mail-helpers.js | 135 ++++++----- routes/subscription.js | 210 ++++++++++-------- views/lists/forms/edit.hbs | 4 + .../partials/subscription-custom-fields.hbs | 2 +- .../partials/subscription-subscribe-form.hbs | 1 + 12 files changed, 238 insertions(+), 194 deletions(-) diff --git a/languages/de_DE.po b/languages/de_DE.po index 69020cc7..73774df1 100644 --- a/languages/de_DE.po +++ b/languages/de_DE.po @@ -4030,7 +4030,7 @@ msgstr "" "Bestätigung" #: routes/subscription.js:730 -msgid "%s: Unsubscribe Confirmed" +msgid "%s: Unsubscription Confirmed" msgstr "%s: Abmeldungen Bestätigt" #: routes/subscription.js:777 routes/subscription.js:793 diff --git a/lib/helpers.js b/lib/helpers.js index 8324a811..70a9b232 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -98,7 +98,7 @@ function filterCustomFields(customFieldsIn = [], fieldIds = [], method = 'includ id: 'email', name: 'Email Address', type: 'Email', - typeSubsciptionEmail: true + typeSubscriptionEmail: true }, { id: 'firstname', name: 'First Name', diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index c25c57ee..bec512bb 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -1054,13 +1054,13 @@ module.exports.updateMessage = (message, status, updateSubscription, callback) = let statusCode; if (status === 'unsubscribed') { - statusCode = 2; - } - if (status === 'bounced') { - statusCode = 3; - } - if (status === 'complained') { - statusCode = 4; + statusCode = subscriptions.Status.UNSUBSCRIBED; + } else if (status === 'bounced') { + statusCode = subscriptions.Status.BOUNCED; + } else if (status === 'complained') { + statusCode = subscriptions.Status.COMPLAINED; + } else { + return callback(new Error(_('Unrecognized message status'))); } let query = 'UPDATE `campaigns` SET `' + status + '`=`' + status + '`+1 WHERE id=? LIMIT 1'; @@ -1074,7 +1074,7 @@ module.exports.updateMessage = (message, status, updateSubscription, callback) = } if (updateSubscription) { - subscriptions.changeStatus(message.list, message.subscription, statusCode === 2 ? message.campaign : false, statusCode, callback); + subscriptions.changeStatus(message.list, message.subscription, statusCode === subscriptions.Status.UNSUBSCRIBED ? message.campaign : false, statusCode, callback); } else { return callback(null, true); } diff --git a/lib/models/confirmations.js b/lib/models/confirmations.js index 66025ed1..dbac8497 100644 --- a/lib/models/confirmations.js +++ b/lib/models/confirmations.js @@ -16,14 +16,14 @@ module.exports.addConfirmation = (listId, action, ip, data, callback) => { } let query = 'INSERT INTO confirmations (cid, list, action, ip, data) VALUES (?,?,?,?,?)'; - connection.query(query, [cid, list, action, ip, JSON.stringify(data || {})], (err, result) => { + connection.query(query, [cid, listId, action, ip, JSON.stringify(data || {})], (err, result) => { connection.release(); if (err) { return callback(err); } if (!result || !result.affectedRows) { - return callback(null, false); + return callback(new Error(_('Could not store confirmation data'))); } return callback(null, cid); diff --git a/lib/models/reports.js b/lib/models/reports.js index aac2d967..edfe665f 100644 --- a/lib/models/reports.js +++ b/lib/models/reports.js @@ -13,7 +13,8 @@ const ReportState = { SCHEDULED: 0, PROCESSING: 1, FINISHED: 2, - FAILED: 3 + FAILED: 3, + MAX: 4 }; module.exports.ReportState = ReportState; diff --git a/lib/models/settings.js b/lib/models/settings.js index 77b9f391..9655ebd7 100644 --- a/lib/models/settings.js +++ b/lib/models/settings.js @@ -15,6 +15,8 @@ function listValues(filter, callback) { filter = false; } + // TODO: It would be good to cache the settings. It feels awkward to always go to DB to retrieve something what is essentially a constant + filter = [].concat(filter || []).map(key => tools.toDbKey(key)); db.getConnection((err, connection) => { diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 08f2cbac..34147901 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -12,6 +12,16 @@ let _ = require('../translate')._; let util = require('util'); let tableHelpers = require('../table-helpers'); +const Status = { + SUBSCRIBED: 1, + UNSUBSCRIBED: 2, + BOUNCED: 3, + COMPLAINED: 4, + MAX: 5 +}; + +module.exports.Status = Status; + module.exports.list = (listId, start, limit, callback) => { listId = Number(listId) || 0; if (!listId) { @@ -152,19 +162,19 @@ module.exports.insert = (listId, meta, subscriptionData, callback) => { let entryId = existing ? existing.id : false; meta.cid = existing ? rows[0].cid : meta.cid; - meta.status = meta.status || (existing ? existing.status : 1); + meta.status = meta.status || (existing ? existing.status : Status.SUBSCRIBED); let statusChange = !existing || existing.status !== meta.status; let statusDirection; - if (existing && !meta.partial) { - return helpers.rollbackAndReleaseConnection(connection, new Error(_('Email address already registered')), callback); + if (existing && existing.status === Status.SUBSCRIBED && !meta.partial) { + return helpers.rollbackAndReleaseConnection(connection, () => callback(new Error(_('Email address already registered')))); } if (statusChange) { keys.push('status', 'status_change'); values.push(meta.status, new Date()); - statusDirection = !existing ? (meta.status === 1 ? '+' : false) : (existing.status === 1 ? '-' : '+'); + statusDirection = !existing ? (meta.status === Status.SUBSCRIBED ? '+' : false) : (existing.status === Status.SUBSCRIBED ? '-' : '+'); } if (!keys.length) { @@ -458,8 +468,8 @@ module.exports.changeStatus = (listId, id, campaignId, status, callback) => { return helpers.rollbackAndReleaseConnection(connection, () => callback(null, true)); } - if (statusChange && oldStatus === 1 || status === 1) { - statusDirection = status === 1 ? '+' : '-'; + if (statusChange && oldStatus === Status.SUBSCRIBED || status === Status.SUBSCRIBED) { + statusDirection = status === Status.SUBSCRIBED ? '+' : '-'; } connection.query('UPDATE `subscription__' + listId + '` SET `status`=?, `status_change`=NOW() WHERE id=? LIMIT 1', [status, id], err => { @@ -483,7 +493,7 @@ module.exports.changeStatus = (listId, id, campaignId, status, callback) => { } // status change is not related to a campaign or it marks message as bounced etc. - if (!campaignId || status > 2) { + if (!campaignId || status !== Status.SUBSCRIBED) { return connection.commit(err => { if (err) { return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); @@ -512,7 +522,7 @@ module.exports.changeStatus = (listId, id, campaignId, status, callback) => { } // we should see only unsubscribe events here but you never know - connection.query('UPDATE `campaigns` SET `unsubscribed`=`unsubscribed`' + (status === 2 ? '+' : '-') + '1 WHERE `cid`=? LIMIT 1', [campaignId], err => { + connection.query('UPDATE `campaigns` SET `unsubscribed`=`unsubscribed`' + (status === Status.UNSUBSCRIBED ? '+' : '-') + '1 WHERE `cid`=? LIMIT 1', [campaignId], err => { if (err) { return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } @@ -583,7 +593,7 @@ module.exports.delete = (listId, cid, callback) => { return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } - if (subscription.status !== 1) { + if (subscription.status !== Status.SUBSCRIBED) { return connection.commit(err => { if (err) { return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); @@ -679,11 +689,10 @@ module.exports.updateImport = (listId, importId, data, callback) => { connection.release(); return callback(null, affected); }); - return; + } else { + connection.release(); + return callback(null, affected); } - - connection.release(); - return callback(null, affected); }); }); }; @@ -816,7 +825,7 @@ module.exports.updateAddressCheck = (list, cid, emailNew, ip, callback) => { return callback(err); } - let query = 'SELECT * FROM `subscription__' + list.id + '` WHERE `cid`=? LIMIT 1'; + let query = 'SELECT * FROM `subscription__' + list.id + '` WHERE `cid`=? AND `status`=' + Status.SUBSCRIBED + ' LIMIT 1'; let args = [cid]; connection.query(query, args, (err, rows) => { if (err) { @@ -835,7 +844,7 @@ module.exports.updateAddressCheck = (list, cid, emailNew, ip, callback) => { let old = rows[0]; - let query = 'SELECT `id` FROM `subscription__' + list.id + '` WHERE `email`=? AND `cid`<>? AND `status`=1 LIMIT 1'; + let query = 'SELECT `id` FROM `subscription__' + list.id + '` WHERE `email`=? AND `cid`<>? AND `status`=' + Status.SUBSCRIBED + ' LIMIT 1'; let args = [emailNew, cid]; connection.query(query, args, (err, rows) => { connection.release(); @@ -870,7 +879,7 @@ module.exports.updateAddress = (listId, subscriptionId, emailNew, callback) => { return callback(err); } - let query = 'SELECT `id` FROM `subscription__' + listId + '` WHERE `email`=? AND `id`<>? AND `status`=1 LIMIT 1'; + let query = 'SELECT `id` FROM `subscription__' + listId + '` WHERE `email`=? AND `id`<>? AND `status`=' + Status.SUBSCRIBED + ' LIMIT 1'; let args = [emailNew, subscriptionId]; connection.query(query, args, (err, rows) => { if (err) { @@ -878,7 +887,7 @@ module.exports.updateAddress = (listId, subscriptionId, emailNew, callback) => { } if (rows && rows.length > 0) { - return helpers.rollbackAndReleaseConnection(connection, new Error(_('Email address already registered')), callback); + return helpers.rollbackAndReleaseConnection(connection, () => callback(new Error(_('Email address already registered')))); } let query = 'DELETE FROM `subscription__' + listId + '` WHERE `email`=? AND `id`<>?'; @@ -888,13 +897,17 @@ module.exports.updateAddress = (listId, subscriptionId, emailNew, callback) => { return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } - let query = 'UPDATE `subscription__' + listId + '` SET `email`=? WHERE `id`=? LIMIT 1'; + let query = 'UPDATE `subscription__' + listId + '` SET `email`=? WHERE `id`=? AND `status`=' + Status.SUBSCRIBED + ' LIMIT 1'; let args = [emailNew, subscriptionId]; - connection.query(query, args, err => { + connection.query(query, args, (err, result) => { if (err) { return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); } + if (!result || !result.affectedRows) { + return helpers.rollbackAndReleaseConnection(connection, () => callback(new Error(_('Subscription not found in this list')))); + } + return connection.commit(err => { if (err) { return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); diff --git a/lib/subscription-mail-helpers.js b/lib/subscription-mail-helpers.js index 3211a6b9..96beb978 100644 --- a/lib/subscription-mail-helpers.js +++ b/lib/subscription-mail-helpers.js @@ -2,7 +2,6 @@ const log = require('npmlog'); const config = require('config'); -let db = require('./db'); let fields = require('./models/fields'); let settings = require('./models/settings'); let mailer = require('./mailer'); @@ -28,7 +27,7 @@ function sendSubscriptionConfirmed(list, email, subscription, callback) { unsubscribeUrl: '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid }; - subscriptions.sendMail(list, email, 'subscription-confirmed', _('%s: Subscription Confirmed'), relativeUrls, {}, data.subscriptionData, callback); + sendMail(list, email, 'subscription-confirmed', _('%s: Subscription Confirmed'), relativeUrls, {}, subscription, callback); } function sendAlreadySubscribed(list, email, subscription, callback) { @@ -39,7 +38,7 @@ function sendAlreadySubscribed(list, email, subscription, callback) { preferencesUrl: '/subscription/' + list.cid + '/manage/' + subscription.cid, unsubscribeUrl: '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid }; - module.exports.sendMail(list, email, 'already-subscribed', _('%s: Email Address Already Registered'), relativeUrls, mailOpts, subscription, callback); + sendMail(list, email, 'already-subscribed', _('%s: Email Address Already Registered'), relativeUrls, mailOpts, subscription, callback); } function sendConfirmAddressChange(list, email, cid, subscription, callback) { @@ -49,7 +48,7 @@ function sendConfirmAddressChange(list, email, cid, subscription, callback) { const relativeUrls = { confirmUrl: '/subscription/confirm/' + cid }; - module.exports.sendMail(list, email, 'confirm-address-change', _('%s: Please Confirm Email Change in Subscription'), relativeUrls, mailOpts, subscription, callback); + sendMail(list, email, 'confirm-address-change', _('%s: Please Confirm Email Change in Subscription'), relativeUrls, mailOpts, subscription, callback); } function sendConfirmSubscription(list, email, cid, subscription, callback) { @@ -59,7 +58,7 @@ function sendConfirmSubscription(list, email, cid, subscription, callback) { const relativeUrls = { confirmUrl: '/subscription/confirm/' + cid }; - module.exports.sendMail(list, email, 'confirm-subscription', _('%s: Please Confirm Subscription'), relativeUrls, mailOpts, subscription, callback); + sendMail(list, email, 'confirm-subscription', _('%s: Please Confirm Subscription'), relativeUrls, mailOpts, subscription, callback); } function sendConfirmUnsubscription(list, email, cid, subscription, callback) { @@ -69,98 +68,92 @@ function sendConfirmUnsubscription(list, email, cid, subscription, callback) { const relativeUrls = { confirmUrl: '/subscription/confirm/' + cid }; - module.exports.sendMail(list, email, 'confirm-unsubscription', _('%s: Please Confirm Unsubscription'), relativeUrls, mailOpts, subscription, callback); + sendMail(list, email, 'confirm-unsubscription', _('%s: Please Confirm Unsubscription'), relativeUrls, mailOpts, subscription, callback); } function sendUnsubscriptionConfirmed(list, email, subscription, callback) { const relativeUrls = { subscribeUrl: '/subscription/' + list.cid + '?cid=' + subscription.cid }; - subscriptions.sendMail(list, email, 'unsubscription-confirmed', _('%s: Unsubscribe Confirmed'), relativeUrls, {}, subscription, callback); + sendMail(list, email, 'unsubscription-confirmed', _('%s: Unsubscription Confirmed'), relativeUrls, {}, subscription, callback); } function sendMail(list, email, template, subject, relativeUrls, mailOpts, subscription, callback) { - db.getConnection((err, connection) => { + fields.list(list.id, (err, fieldList) => { if (err) { return callback(err); } - fields.list(list.id, (err, fieldList) => { + let encryptionKeys = []; + fields.getRow(fieldList, subscription).forEach(field => { + if (field.type === 'gpg' && field.value) { + encryptionKeys.push(field.value.trim()); + } + }); + + settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'defaultPostaddress', 'serviceUrl', 'disableConfirmations'], (err, configItems) => { if (err) { return callback(err); } - let encryptionKeys = []; - fields.getRow(fieldList, subscription).forEach(field => { - if (field.type === 'gpg' && field.value) { - encryptionKeys.push(field.value.trim()); - } - }); + if (!mailOpts.ignoreDisableConfirmations && configItems.disableConfirmations) { + return; + } - settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'defaultPostaddress', 'serviceUrl', 'disableConfirmations'], (err, configItems) => { - if (err) { - return callback(err); - } + const data = { + title: list.name, + homepage: configItems.defaultHomepage || configItems.serviceUrl, + contactAddress: configItems.defaultAddress, + defaultPostaddress: configItems.defaultPostaddress, + }; - if (!mailOpts.ignoreDisableConfirmations && configItems.disableConfirmations) { - return; - } + for (let relativeUrlKey in relativeUrls) { + data[relativeUrlKey] = urllib.resolve(configItems.serviceUrl, relativeUrls[relativeUrlKey]); + } - const data = { - title: list.name, - homepage: configItems.defaultHomepage || configItems.serviceUrl, - contactAddress: configItems.defaultAddress, - defaultPostaddress: configItems.defaultPostaddress, - }; - - for (let relativeUrlKey in relativeUrls) { - data[relativeUrlKey] = urllib.resolve(configItems.serviceUrl, relativeUrls[relativeUrlKey]); - } - - function sendMail(html, text) { - mailer.sendMail({ - from: { - name: configItems.defaultFrom, - address: configItems.defaultAddress - }, - to: { - name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), - address: email - }, - subject: util.format(subject, list.name), - encryptionKeys - }, { - html, - text, - data - }, err => { - if (err) { - log.error('Subscription', err); - } - }); - } - - let text = { - template: 'subscription/mail-' + template + '-text.hbs' - }; - - let html = { - template: 'subscription/mail-' + template + '-html.mjml.hbs', - layout: 'subscription/layout.mjml.hbs', - type: 'mjml' - }; - - helpers.injectCustomFormTemplates(list.defaultForm, { text, html }, (err, tmpl) => { + function sendMail(html, text) { + mailer.sendMail({ + from: { + name: configItems.defaultFrom, + address: configItems.defaultAddress + }, + to: { + name: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '), + address: email + }, + subject: util.format(subject, list.name), + encryptionKeys + }, { + html, + text, + data + }, err => { if (err) { - return sendMail(html, text); + log.error('Subscription', err); } - - sendMail(tmpl.html, tmpl.text); }); + } - return callback(); + let text = { + template: 'subscription/mail-' + template + '-text.hbs' + }; + + let html = { + template: 'subscription/mail-' + template + '-html.mjml.hbs', + layout: 'subscription/layout.mjml.hbs', + type: 'mjml' + }; + + helpers.injectCustomFormTemplates(list.defaultForm, { text, html }, (err, tmpl) => { + if (err) { + return sendMail(html, text); + } + + sendMail(tmpl.html, tmpl.text); }); + + return callback(); }); }); } diff --git a/routes/subscription.js b/routes/subscription.js index d3e712e9..9790eb72 100644 --- a/routes/subscription.js +++ b/routes/subscription.js @@ -47,7 +47,7 @@ let corsOrCsrfProtection = (req, res, next) => { router.get('/confirm/:cid', (req, res, next) => { confirmations.takeConfirmation(req.params.cid, (err, confirmation) => { - if (!err && !subscription) { + if (!err && !confirmation) { err = new Error(_('Selected subscription not found')); err.status = 404; } @@ -79,7 +79,7 @@ router.get('/confirm/:cid', (req, res, next) => { return next(err); } - subscriptions.getById(list.id, subscriptionId, (err, subscription) => { + subscriptions.getById(list.id, data.subscriptionId, (err, subscription) => { if (err) { return next(err); } @@ -89,7 +89,8 @@ router.get('/confirm/:cid', (req, res, next) => { return next(err); } - res.redirect('/subscription/' + list.cid + '/manage-address/' + subscription.cid); + req.flash('info', _('Email address changed')); + res.redirect('/subscription/' + list.cid + '/manage/' + subscription.cid); }); }); }); @@ -101,7 +102,7 @@ router.get('/confirm/:cid', (req, res, next) => { email: data.email, optInIp: confirmation.ip, optInCountry, - status: 1 + status: subscriptions.Status.SUBSCRIBED }; subscriptions.insert(list.id, meta, data.subscriptionData, (err, result) => { @@ -129,7 +130,7 @@ router.get('/confirm/:cid', (req, res, next) => { }); } else if (confirmation.action === 'unsubscribe') { - subscriptions.changeStatus(list.id, confirmation.data.subscriptionId, confirmation.data.campaignId, 2, (err, found) => { + subscriptions.changeStatus(list.id, confirmation.data.subscriptionId, confirmation.data.campaignId, subscriptions.Status.UNSUBSCRIBED, (err, found) => { if (err) { return next(err); } @@ -146,7 +147,7 @@ router.get('/confirm/:cid', (req, res, next) => { return next(err); } - res.redirect('/subscription/' + req.params.lcid + '/unsubscribed-notice'); + res.redirect('/subscription/' + list.cid + '/unsubscribed-notice'); }); }); }); @@ -171,7 +172,7 @@ router.get('/:cid', passport.csrfProtection, (req, res, next) => { return next(err); } - // FIXME: process subscriber cid param for resubscription requests + // TODO: process subscriber cid param for resubscription requests let data = tools.convertKeys(req.query, { skip: ['layout'] @@ -181,51 +182,74 @@ router.get('/:cid', passport.csrfProtection, (req, res, next) => { data.cid = list.cid; data.csrfToken = req.csrfToken(); - fields.list(list.id, (err, fieldList) => { - if (err && !fieldList) { - fieldList = []; - } - data.customFields = fields.getRow(fieldList, data); - data.useEditor = true; - - settings.list(['pgpPrivateKey', 'defaultAddress', 'defaultPostaddress'], (err, configItems) => { - if (err) { - return next(err); + function nextStep() { + fields.list(list.id, (err, fieldList) => { + if (err && !fieldList) { + fieldList = []; } - data.hasPubkey = !!configItems.pgpPrivateKey; - data.defaultAddress = configItems.defaultAddress; - data.defaultPostaddress = configItems.defaultPostaddress; - data.template = { - template: 'subscription/web-subscribe.mjml.hbs', - layout: 'subscription/layout.mjml.hbs' - }; + data.customFields = fields.getRow(fieldList, data); + data.useEditor = true; - helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-subscribe', data, (err, data) => { + settings.list(['pgpPrivateKey', 'defaultAddress', 'defaultPostaddress'], (err, configItems) => { if (err) { return next(err); } + data.hasPubkey = !!configItems.pgpPrivateKey; + data.defaultAddress = configItems.defaultAddress; + data.defaultPostaddress = configItems.defaultPostaddress; - helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { + data.template = { + template: 'subscription/web-subscribe.mjml.hbs', + layout: 'subscription/layout.mjml.hbs' + }; + + helpers.injectCustomFormData(req.query.fid || list.defaultForm, 'subscription/web-subscribe', data, (err, data) => { if (err) { return next(err); } - helpers.captureFlashMessages(req, res, (err, flash) => { + helpers.getMjmlTemplate(data.template, (err, htmlRenderer) => { if (err) { return next(err); } - data.isWeb = true; - data.needsJsWarning = true; - data.flashMessages = flash; - res.send(htmlRenderer(data)); + helpers.captureFlashMessages(req, res, (err, flash) => { + if (err) { + return next(err); + } + + data.isWeb = true; + data.needsJsWarning = true; + data.flashMessages = flash; + res.send(htmlRenderer(data)); + }); }); }); }); }); - }); + } + + + const ucid = req.query.cid; + if (ucid) { + subscriptions.get(list.id, ucid, (err, subscription) => { + if (err) { + return next(err); + } + + for (let key in subscription) { + if (!(key in data)) { + data[key] = subscription[key]; + } + } + + nextStep(); + }); + } else { + nextStep(); + } }); }); @@ -360,14 +384,14 @@ router.post('/:cid/subscribe', passport.parseForm, corsOrCsrfProtection, (req, r subscriptionData[key] = (req.body[key] || '').toString().trim(); } }); - subscriptionData = tools.convertKeys(data); + subscriptionData = tools.convertKeys(subscriptionData); subscriptions.getByEmail(list.id, email, (err, subscription) => { if (err) { return req.xhr ? sendJsonError(err) : next(err); } - if (subscription) { + if (subscription && subscription.status === subscriptions.Status.SUBSCRIBED) { mailHelpers.sendAlreadySubscribed(list, email, subscription, (err) => { if (err) { return req.xhr ? sendJsonError(err) : next(err); @@ -381,10 +405,6 @@ router.post('/:cid/subscribe', passport.parseForm, corsOrCsrfProtection, (req, r }; confirmations.addConfirmation(list.id, 'subscribe', req.ip, data, (err, confirmCid) => { - if (!err && !confirmCid) { - err = new Error(_('Could not store confirmation data')); - } - if (err) { if (req.xhr) { return sendJsonError(err); @@ -406,7 +426,7 @@ router.post('/:cid/subscribe', passport.parseForm, corsOrCsrfProtection, (req, r log.info('Subscription', 'Confirmation message for %s marked to be skipped (%s)', email, JSON.stringify(data)); sendWebResponse(); } else { - sendConfirmSubscription(list, email, confirmCid, data, (err) => { + mailHelpers.sendConfirmSubscription(list, email, confirmCid, data, (err) => { if (err) { return req.xhr ? sendJsonError(err) : sendWebResponse(err); } @@ -436,8 +456,8 @@ router.get('/:lcid/manage/:ucid', passport.csrfProtection, (req, res, next) => { return next(err); } subscriptions.get(list.id, req.params.ucid, (err, subscription) => { - if (!err && !subscription) { - err = new Error(_('Subscription not found from this list')); + if (!err && (!subscription || subscription.status !== subscriptions.Status.SUBSCRIBED)) { + err = new Error(_('Subscription not found in this list')); err.status = 404; } @@ -507,13 +527,22 @@ router.post('/:lcid/manage', passport.parseForm, passport.csrfProtection, (req, return next(err); } - subscriptions.update(list.id, req.body.cid, req.body, false, err => { - if (err) { - req.flash('danger', err.message || err); - log.error('Subscription', err); - return res.redirect('/subscription/' + encodeURIComponent(req.params.lcid) + '/manage/' + encodeURIComponent(req.body.cid) + '?' + tools.queryParams(req.body)); + subscriptions.get(list.id, req.body.cid, (err, subscription) => { + if (!err && (!subscription || subscription.status !== subscriptions.Status.SUBSCRIBED)) { + err = new Error(_('Subscription not found in this list')); + err.status = 404; } - res.redirect('/subscription/' + req.params.lcid + '/updated-notice'); + + if (err) { + return next(err); + } + + subscriptions.update(list.id, subscription.cid, req.body, false, err => { + if (err) { + return next(err); + } + res.redirect('/subscription/' + req.params.lcid + '/updated-notice'); + }); }); }); }); @@ -535,8 +564,8 @@ router.get('/:lcid/manage-address/:ucid', passport.csrfProtection, (req, res, ne } subscriptions.get(list.id, req.params.ucid, (err, subscription) => { - if (!err && !subscription) { - err = new Error(_('Subscription not found from this list')); + if (!err && (!subscription || subscription.status !== subscriptions.Status.SUBSCRIBED)) { + err = new Error(_('Subscription not found in this list')); err.status = 404; } @@ -589,48 +618,52 @@ router.post('/:lcid/manage-address', passport.parseForm, passport.csrfProtection return next(err); } - const emailNew = (req.body.emailNew || '').toString().trim(); + let bodyData = tools.convertKeys(req.body); // This is here to convert "email-new" to "emailNew" + const emailOld = (bodyData.email || '').toString().trim(); + const emailNew = (bodyData.emailNew || '').toString().trim(); - subscriptions.updateAddressCheck(list, req.body.cid, emailNew, req.ip, (err, subscription, newEmailAvailable) => { - if (err) { - req.flash('danger', err.message || err); - log.error('Subscription', err); - return res.redirect('/subscription/' + encodeURIComponent(req.params.lcid) + '/manage-address/' + encodeURIComponent(req.body.cid) + '?' + tools.queryParams(req.body)); - } + if (emailOld === emailNew) { + req.flash('info', _('Nothing seems to be changed')); + res.redirect('/subscription/' + req.params.lcid + '/manage/' + req.body.cid); - function sendWebResponse(err) { + } else { + subscriptions.updateAddressCheck(list, req.body.cid, emailNew, req.ip, (err, subscription, newEmailAvailable) => { if (err) { return next(err); } - req.flash('info', _('An email with further instructions has been sent to the provided address')); - res.redirect('/subscription/' + req.params.lcid + '/manage/' + req.body.cid); - } - - if (newEmailAvailable) { - const data = { - subscriptionId: subscription.id, - emailNew - }; - - confirmations.addConfirmation(list.id, 'change-address', req.ip, data, err => { + function sendWebResponse(err) { if (err) { return next(err); } - mailHelpers.sendConfirmAddressChange(list, emailNew, subscription, sendWebResponse); - }); + req.flash('info', _('An email with further instructions has been sent to the provided address')); + res.redirect('/subscription/' + req.params.lcid + '/manage/' + req.body.cid); + } - } else { - mailHelpers.sendAlreadySubscribed(list, emailNew, subscription, sendWebResponse); - } - }); + if (newEmailAvailable) { + const data = { + subscriptionId: subscription.id, + emailNew + }; + + confirmations.addConfirmation(list.id, 'change-address', req.ip, data, (err, confirmCid) => { + if (err) { + return next(err); + } + + mailHelpers.sendConfirmAddressChange(list, emailNew, confirmCid, subscription, sendWebResponse); + }); + + } else { + mailHelpers.sendAlreadySubscribed(list, emailNew, subscription, sendWebResponse); + } + }); + } }); }); router.get('/:lcid/unsubscribe/:ucid', passport.csrfProtection, (req, res, next) => { - // FIXME: handle different subscription options. The one below is currently "One-step with unsubscribe form" - lists.getByCid(req.params.lcid, (err, list) => { if (!err && !list) { err = new Error(_('Selected list not found')); @@ -647,7 +680,7 @@ router.get('/:lcid/unsubscribe/:ucid', passport.csrfProtection, (req, res, next) } subscriptions.get(list.id, req.params.ucid, (err, subscription) => { - if (!err && !subscription) { + if (!err && (!subscription || subscription.status !== subscriptions.Status.SUBSCRIBED)) { err = new Error(_('Subscription not found in this list')); err.status = 404; } @@ -657,7 +690,8 @@ router.get('/:lcid/unsubscribe/:ucid', passport.csrfProtection, (req, res, next) } - if (list.unsubscriptionMode === lists.UnsubscriptionMode.ONE_STEP_WITH_FORM || + if (req.query.formTest || + list.unsubscriptionMode === lists.UnsubscriptionMode.ONE_STEP_WITH_FORM || list.unsubscriptionMode === lists.UnsubscriptionMode.TWO_STEP_WITH_FORM) { subscription.lcid = req.params.lcid; @@ -695,7 +729,7 @@ router.get('/:lcid/unsubscribe/:ucid', passport.csrfProtection, (req, res, next) }); }); } else { // UnsubscriptionMode.ONE_STEP || UnsubscriptionMode.TWO_STEP || UnsubscriptionMode.MANUAL - handleUnsubscribe(list, subscription, res); + handleUnsubscribe(list, subscription, req.query.c, req.ip, res, next); } }); }); @@ -716,7 +750,7 @@ router.post('/:lcid/unsubscribe', passport.parseForm, passport.csrfProtection, ( const campaignId = (req.body.campaign || '').toString().trim() || false; subscriptions.get(list.id, req.body.ucid, (err, subscription) => { - if (!err && !subscription) { + if (!err && (!subscription || subscription.status !== subscriptions.Status.SUBSCRIBED)) { err = new Error(_('Subscription not found in this list')); err.status = 404; } @@ -725,12 +759,12 @@ router.post('/:lcid/unsubscribe', passport.parseForm, passport.csrfProtection, ( return next(err); } - handleUnsubscribe(list, subscription, res); + handleUnsubscribe(list, subscription, campaignId, req.ip, res, next); }); }); }); -function handleUnsubscribe(list, subscription, res) { +function handleUnsubscribe(list, subscription, campaignId, ip, res, next) { if (list.unsubscriptionMode === lists.UnsubscriptionMode.TWO_STEP || list.unsubscriptionMode === lists.UnsubscriptionMode.TWO_STEP_WITH_FORM) { @@ -739,28 +773,24 @@ function handleUnsubscribe(list, subscription, res) { campaignId }; - confirmations.addConfirmation(list.id, 'unsubscribe', req.ip, data, (err, confirmCid) => { - if (!err && !confirmCid) { - err = new Error(_('Could not store confirmation data')); - } - + confirmations.addConfirmation(list.id, 'unsubscribe', ip, data, (err, confirmCid) => { if (err) { return next(err); } - mailHelpers.sendConfirmUnsubscription(list, subscription.email, subscription, err => { + mailHelpers.sendConfirmUnsubscription(list, subscription.email, confirmCid, subscription, err => { if (err) { return next(err); } - res.redirect('/subscription/' + list.cid + '/unsubscribed-notice'); + res.redirect('/subscription/' + list.cid + '/confirm-unsubscription-notice'); }); }); } else if (list.unsubscriptionMode === lists.UnsubscriptionMode.ONE_STEP || list.unsubscriptionMode === lists.UnsubscriptionMode.ONE_STEP_WITH_FORM) { - subscriptions.changeStatus(subscription.id, list.id, campaignId, 2, (err, found) => { + subscriptions.changeStatus(list.id, subscription.id, campaignId, subscriptions.Status.UNSUBSCRIBED, (err, found) => { if (err) { return next(err); } diff --git a/views/lists/forms/edit.hbs b/views/lists/forms/edit.hbs index 5b91dcfb..da199096 100644 --- a/views/lists/forms/edit.hbs +++ b/views/lists/forms/edit.hbs @@ -55,7 +55,11 @@ {{#translate}}Updated Notice{{/translate}} | {{#translate}}Unsubscribed Notice{{/translate}} + | + {{#translate}}Manual Unsubscribe Notice{{/translate}} {{#if testUsers}} + | + {{#translate}}Unsubscribe{{/translate}} | {{#translate}}Manage{{/translate}} | diff --git a/views/subscription/partials/subscription-custom-fields.hbs b/views/subscription/partials/subscription-custom-fields.hbs index 847a169e..9e679b03 100644 --- a/views/subscription/partials/subscription-custom-fields.hbs +++ b/views/subscription/partials/subscription-custom-fields.hbs @@ -1,6 +1,6 @@ {{#each customFields}} - {{#if typeSubsciptionEmail}} + {{#if typeSubscriptionEmail}}
    - + {{/unless}} + {{#unless clickTrackingDisabled}}
    {{#translate}}Clicked{{/translate}}
    From 1e3fe9682552cfe6de38aa7eeb94320b93366e72 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 27 May 2017 14:14:32 +0200 Subject: [PATCH 300/483] [bugfix] Blacklisted emails counter not set to 0 on campaign reset --- lib/models/campaigns.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index 7ef662c6..0fb4323d 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -829,7 +829,7 @@ module.exports.reset = (id, callback) => { return callback(err); } - connection.query('UPDATE campaigns SET `status`=1, `status_change`=NULL, `delivered`=0, `opened`=0, `clicks`=0, `bounced`=0, `complained`=0, `unsubscribed`=0 WHERE id=? LIMIT 1', [id], err => { + connection.query('UPDATE campaigns SET `status`=1, `status_change`=NULL, `delivered`=0, `opened`=0, `clicks`=0, `bounced`=0, `complained`=0, `unsubscribed`=0, `blacklisted`=0 WHERE id=? LIMIT 1', [id], err => { if (err) { connection.release(); return callback(err); From a9285e11811f9aacd0f52844ec06c37708418c98 Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 27 May 2017 14:24:08 +0200 Subject: [PATCH 301/483] Fixed eslint errors --- test/e2e/.eslintrc | 5 +++-- test/e2e/index.js | 4 +--- test/e2e/lib/mail.js | 2 +- test/e2e/lib/mocha-e2e.js | 4 ++-- test/e2e/lib/page.js | 5 ++--- test/e2e/lib/semaphore.js | 4 ++-- test/e2e/lib/web.js | 2 +- test/e2e/page-objects/user.js | 2 +- test/e2e/tests/login.js | 2 +- test/e2e/tests/subscription.js | 2 +- 10 files changed, 15 insertions(+), 17 deletions(-) diff --git a/test/e2e/.eslintrc b/test/e2e/.eslintrc index 836bac9a..a5157382 100644 --- a/test/e2e/.eslintrc +++ b/test/e2e/.eslintrc @@ -2,8 +2,9 @@ "parser": "babel-eslint", "rules": { "strict": 0, - "no-invalid-this": 0, - "no-unused-expressions": 0 + "no-console": 0, + "comma-dangle": 0, + "arrow-body-style": 0 }, "env": { "mocha": true diff --git a/test/e2e/index.js b/test/e2e/index.js index 5dd54d00..dce40875 100644 --- a/test/e2e/index.js +++ b/test/e2e/index.js @@ -1,11 +1,9 @@ 'use strict'; require('./lib/exit-unless-test'); -const { mocha, driver } = require('./lib/mocha-e2e'); +const mocha = require('./lib/mocha-e2e').mocha; const path = require('path'); -global.USE_SHARED_DRIVER = true; - const only = 'only'; const skip = 'skip'; diff --git a/test/e2e/lib/mail.js b/test/e2e/lib/mail.js index b0f41872..47d5a631 100644 --- a/test/e2e/lib/mail.js +++ b/test/e2e/lib/mail.js @@ -12,7 +12,7 @@ module.exports = (...extras) => page({ await this.waitUntilVisible(); }, - async ensureUrl(path) { + async ensureUrl(path) { // eslint-disable-line no-unused-vars throw new Error('Unsupported method.'); }, diff --git a/test/e2e/lib/mocha-e2e.js b/test/e2e/lib/mocha-e2e.js index 96c557a2..4ea1f66d 100644 --- a/test/e2e/lib/mocha-e2e.js +++ b/test/e2e/lib/mocha-e2e.js @@ -25,7 +25,7 @@ function UseCaseReporter(runner) { return Array(indents).join(' '); } - runner.on('start', function () { + runner.on('start', () => { console.log(); }); @@ -104,7 +104,7 @@ function UseCaseReporter(runner) { console.log(); console.log(err); console.log(); - console.log(`Snaphot of and info about the current page are in last-failed-e2e-test.*`); + console.log('Snaphot of and info about the current page are in last-failed-e2e-test.*'); }); runner.on('end', () => { diff --git a/test/e2e/lib/page.js b/test/e2e/lib/page.js index 07064af7..3026f671 100644 --- a/test/e2e/lib/page.js +++ b/test/e2e/lib/page.js @@ -1,6 +1,5 @@ 'use strict'; -const config = require('./config'); const webdriver = require('selenium-webdriver'); const By = webdriver.By; const until = webdriver.until; @@ -45,7 +44,7 @@ module.exports = (...extras) => Object.assign({ } for (const text of (this.textsToWaitFor || [])) { - await driver.wait(new webdriver.Condition(`for text "${text}"`, async (driver) => { + await driver.wait(new webdriver.Condition(`for text "${text}"`, async () => { return await this.containsText(text); }), waitTimeout); } @@ -58,7 +57,7 @@ module.exports = (...extras) => Object.assign({ }, async waitUntilVisibleAfterRefresh(selector) { - await driver.wait(new webdriver.Condition('for refresh', async (driver) => { + await driver.wait(new webdriver.Condition('for refresh', async () => { const val = await driver.executeScript('return document.mailTrainRefreshAcknowledged;'); return !val; }), waitTimeout); diff --git a/test/e2e/lib/semaphore.js b/test/e2e/lib/semaphore.js index d22b8f71..89366b3e 100644 --- a/test/e2e/lib/semaphore.js +++ b/test/e2e/lib/semaphore.js @@ -19,7 +19,7 @@ class Semaphore { const self = this; function wait(resolve) { - if (self.counter == 0) { + if (self.counter === 0) { resolve(); } else { setTimeout(wait, 500, resolve); @@ -28,7 +28,7 @@ class Semaphore { return new Promise(resolve => { setTimeout(wait, 500, resolve); - }) + }); } } diff --git a/test/e2e/lib/web.js b/test/e2e/lib/web.js index 692c0214..9e345219 100644 --- a/test/e2e/lib/web.js +++ b/test/e2e/lib/web.js @@ -15,7 +15,7 @@ module.exports = (...extras) => page({ path = pathOrParams; } else { const urlPattern = new UrlPattern(this.requestUrl || this.url); - path = urlPattern.stringify(pathOrParams) + path = urlPattern.stringify(pathOrParams); } const parsedUrl = url.parse(path); diff --git a/test/e2e/page-objects/user.js b/test/e2e/page-objects/user.js index 52f8377f..2facc345 100644 --- a/test/e2e/page-objects/user.js +++ b/test/e2e/page-objects/user.js @@ -22,7 +22,7 @@ module.exports = { url: '/users/account', elementsToWaitFor: ['form'], elements: { - form: `form[action="/users/account"]`, + form: 'form[action="/users/account"]', emailInput: 'form[action="/users/account"] input[name="email"]' } }), diff --git a/test/e2e/tests/login.js b/test/e2e/tests/login.js index 571389be..c4f47d35 100644 --- a/test/e2e/tests/login.js +++ b/test/e2e/tests/login.js @@ -7,7 +7,7 @@ const expect = require('chai').expect; const page = require('../page-objects/user'); const home = require('../page-objects/home'); -suite('Login use-cases', function() { +suite('Login use-cases', () => { before(() => driver.manage().deleteAllCookies()); test('User can access home page', async () => { diff --git a/test/e2e/tests/subscription.js b/test/e2e/tests/subscription.js index fec05937..dabdc914 100644 --- a/test/e2e/tests/subscription.js +++ b/test/e2e/tests/subscription.js @@ -67,7 +67,7 @@ async function subscriptionExistsPrecondition(subscription) { return subscription; } -suite('Subscription use-cases', function() { +suite('Subscription use-cases', () => { before(() => driver.manage().deleteAllCookies()); useCase('Subscription to a public list (main scenario)', async () => { From b1eebd980490fcefcec14b51425f5d708221aa04 Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 27 May 2017 14:29:16 +0200 Subject: [PATCH 302/483] Fixed waitUntilVisible should wait for selector, if present. This is used by waitForFlash. --- test/e2e/lib/page.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/e2e/lib/page.js b/test/e2e/lib/page.js index 3026f671..d455d895 100644 --- a/test/e2e/lib/page.js +++ b/test/e2e/lib/page.js @@ -35,6 +35,10 @@ module.exports = (...extras) => Object.assign({ async waitUntilVisible(selector) { await driver.wait(until.elementLocated(By.css('body')), waitTimeout); + if (selector) { + await driver.wait(until.elementLocated(By.css(selector)), waitTimeout); + } + for (const elem of (this.elementsToWaitFor || [])) { const sel = this.elements[elem]; if (!sel) { From 2c930c60d2f9ec29d0f685dbd6784c3f7682a49d Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 27 May 2017 20:15:01 +0200 Subject: [PATCH 303/483] Fixed ER_DUP_FIELDNAME during sqlinit --- setup/sql/mailtrain-test.sql | 3 +-- setup/sql/mailtrain.sql | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/setup/sql/mailtrain-test.sql b/setup/sql/mailtrain-test.sql index 6533f3a4..8ae97db9 100644 --- a/setup/sql/mailtrain-test.sql +++ b/setup/sql/mailtrain-test.sql @@ -69,8 +69,7 @@ CREATE TABLE `campaigns` ( `html_prepared` longtext, `text` longtext, `status` tinyint(4) unsigned NOT NULL DEFAULT '1', - `open_tracking_disabled` tinyint(4) unsigned NOT NULL DEFAULT '0', - `click_tracking_disabled` tinyint(4) unsigned NOT NULL DEFAULT '0', + `tracking_disabled` tinyint(4) unsigned NOT NULL DEFAULT '0', `scheduled` timestamp NULL DEFAULT NULL, `status_change` timestamp NULL DEFAULT NULL, `delivered` int(11) unsigned NOT NULL DEFAULT '0', diff --git a/setup/sql/mailtrain.sql b/setup/sql/mailtrain.sql index 02817a37..d56c9806 100644 --- a/setup/sql/mailtrain.sql +++ b/setup/sql/mailtrain.sql @@ -65,8 +65,7 @@ CREATE TABLE `campaigns` ( `html_prepared` longtext, `text` longtext, `status` tinyint(4) unsigned NOT NULL DEFAULT '1', - `click_tracking_disabled` tinyint(4) unsigned NOT NULL DEFAULT '0', - `open_tracking_disabled` tinyint(4) unsigned NOT NULL DEFAULT '0', + `tracking_disabled` tinyint(4) unsigned NOT NULL DEFAULT '0', `scheduled` timestamp NULL DEFAULT NULL, `status_change` timestamp NULL DEFAULT NULL, `delivered` int(11) unsigned NOT NULL DEFAULT '0', From 19a563bc6a82c1102411bdc37431abed287f9cd1 Mon Sep 17 00:00:00 2001 From: witzig Date: Sun, 28 May 2017 00:11:30 +0200 Subject: [PATCH 304/483] Remaining e2e subscription tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @bures, I’m not too happy with switchToList(). Suggestions? If we keep it, it should probably be added to every useCase. --- setup/sql/mailtrain-test.sql | 173 +++++++++++++++++++++-- test/e2e/lib/config.js | 37 ++++- test/e2e/page-objects/subscription.js | 32 ++++- test/e2e/tests/subscription.js | 195 +++++++++++++++++++++++++- 4 files changed, 410 insertions(+), 27 deletions(-) diff --git a/setup/sql/mailtrain-test.sql b/setup/sql/mailtrain-test.sql index 8ae97db9..11dc6681 100644 --- a/setup/sql/mailtrain-test.sql +++ b/setup/sql/mailtrain-test.sql @@ -69,7 +69,6 @@ CREATE TABLE `campaigns` ( `html_prepared` longtext, `text` longtext, `status` tinyint(4) unsigned NOT NULL DEFAULT '1', - `tracking_disabled` tinyint(4) unsigned NOT NULL DEFAULT '0', `scheduled` timestamp NULL DEFAULT NULL, `status_change` timestamp NULL DEFAULT NULL, `delivered` int(11) unsigned NOT NULL DEFAULT '0', @@ -80,6 +79,8 @@ CREATE TABLE `campaigns` ( `bounced` int(1) unsigned NOT NULL DEFAULT '0', `complained` int(1) unsigned NOT NULL DEFAULT '0', `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `open_tracking_disabled` tinyint(4) unsigned NOT NULL DEFAULT '0', + `click_tracking_disabled` tinyint(4) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `cid` (`cid`), KEY `name` (`name`(191)), @@ -93,8 +94,8 @@ CREATE TABLE `confirmations` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL, `list` int(11) unsigned NOT NULL, - `email` varchar(255) NOT NULL, - `opt_in_ip` varchar(100) DEFAULT NULL, + `action` varchar(100) NOT NULL, + `ip` varchar(100) DEFAULT NULL, `data` text NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), @@ -193,11 +194,17 @@ CREATE TABLE `lists` ( `subscribers` int(11) unsigned DEFAULT '0', `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `public_subscribe` tinyint(1) unsigned NOT NULL DEFAULT '1', + `unsubscription_mode` int(11) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `cid` (`cid`), KEY `name` (`name`(191)) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; -INSERT INTO `lists` (`id`, `cid`, `default_form`, `name`, `description`, `subscribers`, `created`, `public_subscribe`) VALUES (1,'Hkj1vCoJb',NULL,'01 Testlist - Public Subscribe','',0,NOW(),1); +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4; +INSERT INTO `lists` (`id`, `cid`, `default_form`, `name`, `description`, `subscribers`, `created`, `public_subscribe`, `unsubscription_mode`) VALUES (1,'Hkj1vCoJb',0,'#1 (one-step, no form)','',0,NOW(),1,0); +INSERT INTO `lists` (`id`, `cid`, `default_form`, `name`, `description`, `subscribers`, `created`, `public_subscribe`, `unsubscription_mode`) VALUES (2,'SktV4HDZ-',NULL,'#2 (one-step, with form)','',0,NOW(),1,1); +INSERT INTO `lists` (`id`, `cid`, `default_form`, `name`, `description`, `subscribers`, `created`, `public_subscribe`, `unsubscription_mode`) VALUES (3,'BkdvNBw-W',NULL,'#3 (two-step, no form)','',0,NOW(),1,2); +INSERT INTO `lists` (`id`, `cid`, `default_form`, `name`, `description`, `subscribers`, `created`, `public_subscribe`, `unsubscription_mode`) VALUES (4,'rJMKVrDZ-',NULL,'#4 (two-step, with form)','',0,NOW(),1,3); +INSERT INTO `lists` (`id`, `cid`, `default_form`, `name`, `description`, `subscribers`, `created`, `public_subscribe`, `unsubscription_mode`) VALUES (5,'SJgoNSw-W',NULL,'#5 (manual unsubscribe)','',0,NOW(),1,4); +INSERT INTO `lists` (`id`, `cid`, `default_form`, `name`, `description`, `subscribers`, `created`, `public_subscribe`, `unsubscription_mode`) VALUES (6,'HyveEPvWW',NULL,'#6 non-public','',0,NOW(),0,0); CREATE TABLE `queued` ( `campaign` int(11) unsigned NOT NULL, `list` int(11) unsigned NOT NULL, @@ -269,7 +276,7 @@ CREATE TABLE `settings` ( `value` text NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key` (`key`) -) ENGINE=InnoDB AUTO_INCREMENT=112 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=114 DEFAULT CHARSET=utf8mb4; INSERT INTO `settings` (`id`, `key`, `value`) VALUES (1,'smtp_hostname','localhost'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (2,'smtp_port','5587'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (3,'smtp_encryption','NONE'); @@ -286,7 +293,7 @@ INSERT INTO `settings` (`id`, `key`, `value`) VALUES (13,'default_from','My Awes INSERT INTO `settings` (`id`, `key`, `value`) VALUES (14,'default_address','admin@example.com'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (15,'default_subject','Test message'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (16,'default_homepage','https://mailtrain.org'); -INSERT INTO `settings` (`id`, `key`, `value`) VALUES (17,'db_schema_version','27'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (17,'db_schema_version','29'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (46,'ua_code',''); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (47,'shoutout',''); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (54,'mail_transport','smtp'); @@ -361,6 +368,146 @@ CREATE TABLE `subscription__1` ( KEY `latest_click` (`latest_click`), KEY `created` (`created`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE `subscription__2` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `cid` varchar(255) CHARACTER SET ascii NOT NULL, + `email` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '', + `opt_in_ip` varchar(100) DEFAULT NULL, + `opt_in_country` varchar(2) DEFAULT NULL, + `tz` varchar(100) CHARACTER SET ascii DEFAULT NULL, + `imported` int(11) unsigned DEFAULT NULL, + `status` tinyint(4) unsigned NOT NULL DEFAULT '1', + `is_test` tinyint(4) unsigned NOT NULL DEFAULT '0', + `status_change` timestamp NULL DEFAULT NULL, + `latest_open` timestamp NULL DEFAULT NULL, + `latest_click` timestamp NULL DEFAULT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `first_name` varchar(255) DEFAULT NULL, + `last_name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `email` (`email`), + UNIQUE KEY `cid` (`cid`), + KEY `status` (`status`), + KEY `first_name` (`first_name`(191)), + KEY `last_name` (`last_name`(191)), + KEY `subscriber_tz` (`tz`), + KEY `is_test` (`is_test`), + KEY `latest_open` (`latest_open`), + KEY `latest_click` (`latest_click`), + KEY `created` (`created`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE `subscription__3` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `cid` varchar(255) CHARACTER SET ascii NOT NULL, + `email` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '', + `opt_in_ip` varchar(100) DEFAULT NULL, + `opt_in_country` varchar(2) DEFAULT NULL, + `tz` varchar(100) CHARACTER SET ascii DEFAULT NULL, + `imported` int(11) unsigned DEFAULT NULL, + `status` tinyint(4) unsigned NOT NULL DEFAULT '1', + `is_test` tinyint(4) unsigned NOT NULL DEFAULT '0', + `status_change` timestamp NULL DEFAULT NULL, + `latest_open` timestamp NULL DEFAULT NULL, + `latest_click` timestamp NULL DEFAULT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `first_name` varchar(255) DEFAULT NULL, + `last_name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `email` (`email`), + UNIQUE KEY `cid` (`cid`), + KEY `status` (`status`), + KEY `first_name` (`first_name`(191)), + KEY `last_name` (`last_name`(191)), + KEY `subscriber_tz` (`tz`), + KEY `is_test` (`is_test`), + KEY `latest_open` (`latest_open`), + KEY `latest_click` (`latest_click`), + KEY `created` (`created`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE `subscription__4` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `cid` varchar(255) CHARACTER SET ascii NOT NULL, + `email` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '', + `opt_in_ip` varchar(100) DEFAULT NULL, + `opt_in_country` varchar(2) DEFAULT NULL, + `tz` varchar(100) CHARACTER SET ascii DEFAULT NULL, + `imported` int(11) unsigned DEFAULT NULL, + `status` tinyint(4) unsigned NOT NULL DEFAULT '1', + `is_test` tinyint(4) unsigned NOT NULL DEFAULT '0', + `status_change` timestamp NULL DEFAULT NULL, + `latest_open` timestamp NULL DEFAULT NULL, + `latest_click` timestamp NULL DEFAULT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `first_name` varchar(255) DEFAULT NULL, + `last_name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `email` (`email`), + UNIQUE KEY `cid` (`cid`), + KEY `status` (`status`), + KEY `first_name` (`first_name`(191)), + KEY `last_name` (`last_name`(191)), + KEY `subscriber_tz` (`tz`), + KEY `is_test` (`is_test`), + KEY `latest_open` (`latest_open`), + KEY `latest_click` (`latest_click`), + KEY `created` (`created`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE `subscription__5` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `cid` varchar(255) CHARACTER SET ascii NOT NULL, + `email` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '', + `opt_in_ip` varchar(100) DEFAULT NULL, + `opt_in_country` varchar(2) DEFAULT NULL, + `tz` varchar(100) CHARACTER SET ascii DEFAULT NULL, + `imported` int(11) unsigned DEFAULT NULL, + `status` tinyint(4) unsigned NOT NULL DEFAULT '1', + `is_test` tinyint(4) unsigned NOT NULL DEFAULT '0', + `status_change` timestamp NULL DEFAULT NULL, + `latest_open` timestamp NULL DEFAULT NULL, + `latest_click` timestamp NULL DEFAULT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `first_name` varchar(255) DEFAULT NULL, + `last_name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `email` (`email`), + UNIQUE KEY `cid` (`cid`), + KEY `status` (`status`), + KEY `first_name` (`first_name`(191)), + KEY `last_name` (`last_name`(191)), + KEY `subscriber_tz` (`tz`), + KEY `is_test` (`is_test`), + KEY `latest_open` (`latest_open`), + KEY `latest_click` (`latest_click`), + KEY `created` (`created`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE `subscription__6` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `cid` varchar(255) CHARACTER SET ascii NOT NULL, + `email` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '', + `opt_in_ip` varchar(100) DEFAULT NULL, + `opt_in_country` varchar(2) DEFAULT NULL, + `tz` varchar(100) CHARACTER SET ascii DEFAULT NULL, + `imported` int(11) unsigned DEFAULT NULL, + `status` tinyint(4) unsigned NOT NULL DEFAULT '1', + `is_test` tinyint(4) unsigned NOT NULL DEFAULT '0', + `status_change` timestamp NULL DEFAULT NULL, + `latest_open` timestamp NULL DEFAULT NULL, + `latest_click` timestamp NULL DEFAULT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `first_name` varchar(255) DEFAULT NULL, + `last_name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `email` (`email`), + UNIQUE KEY `cid` (`cid`), + KEY `status` (`status`), + KEY `first_name` (`first_name`(191)), + KEY `last_name` (`last_name`(191)), + KEY `subscriber_tz` (`tz`), + KEY `is_test` (`is_test`), + KEY `latest_open` (`latest_open`), + KEY `latest_click` (`latest_click`), + KEY `created` (`created`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `templates` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL DEFAULT '', @@ -422,14 +569,14 @@ INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/blantyre',120); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/brazzaville',60); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/bujumbura',120); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/cairo',120); -INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/casablanca',60); +INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/casablanca',0); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/ceuta',120); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/conakry',0); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/dakar',0); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/dar_es_salaam',180); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/djibouti',180); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/douala',60); -INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/el_aaiun',60); +INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/el_aaiun',0); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/freetown',0); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/gaborone',120); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('africa/harare',120); @@ -603,7 +750,7 @@ INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('america/rio_branco',-300); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('america/rosario',-180); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('america/santarem',-180); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('america/santa_isabel',-420); -INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('america/santiago',-180); +INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('america/santiago',-240); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('america/santo_domingo',-240); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('america/sao_paulo',-180); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('america/scoresbysund',0); @@ -788,8 +935,8 @@ INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('canada/pacific',-420); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('canada/saskatchewan',-360); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('canada/yukon',-420); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('cet',120); -INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('chile/continental',-180); -INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('chile/easterisland',-300); +INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('chile/continental',-240); +INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('chile/easterisland',-360); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('cst6cdt',-300); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('cuba',-240); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('eet',180); @@ -936,7 +1083,7 @@ INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('pacific/auckland',720); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('pacific/bougainville',660); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('pacific/chatham',765); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('pacific/chuuk',600); -INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('pacific/easter',-300); +INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('pacific/easter',-360); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('pacific/efate',660); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('pacific/enderbury',780); INSERT INTO `tzoffset` (`tz`, `offset`) VALUES ('pacific/fakaofo',780); diff --git a/test/e2e/lib/config.js b/test/e2e/lib/config.js index a9d191be..223d2103 100644 --- a/test/e2e/lib/config.js +++ b/test/e2e/lib/config.js @@ -13,15 +13,46 @@ module.exports = { } }, lists: { - one: { + l1: { id: 1, cid: 'Hkj1vCoJb', publicSubscribe: 1, - unsubscriptionMode: 0 + unsubscriptionMode: 0, // (one-step, no form) + }, + l2: { + id: 2, + cid: 'SktV4HDZ-', + publicSubscribe: 1, + unsubscriptionMode: 1, // (one-step, with form) + }, + l3: { + id: 3, + cid: 'BkdvNBw-W', + publicSubscribe: 1, + unsubscriptionMode: 2, // (two-step, no form) + }, + l4: { + id: 4, + cid: 'rJMKVrDZ-', + publicSubscribe: 1, + unsubscriptionMode: 3, // (two-step, with form) + }, + l5: { + id: 5, + cid: 'SJgoNSw-W', + publicSubscribe: 1, + unsubscriptionMode: 4, // (manual unsubscribe) + }, + l6: { + id: 6, + cid: 'HyveEPvWW', + publicSubscribe: 0, + unsubscriptionMode: 0, // (one-step, no form) } }, settings: { - 'service-url' : 'http://localhost:' + config.www.port + '/', + 'service-url': 'http://localhost:' + config.www.port + '/', + 'admin-email': 'admin@example.com', 'default-homepage': 'https://mailtrain.org', 'smtp-hostname': config.testserver.host, 'smtp-port': config.testserver.port, diff --git a/test/e2e/page-objects/subscription.js b/test/e2e/page-objects/subscription.js index 1d431b49..6d3d98d9 100644 --- a/test/e2e/page-objects/subscription.js +++ b/test/e2e/page-objects/subscription.js @@ -19,6 +19,11 @@ module.exports = list => ({ } }), + webSubscribeNonPublic: web({ + url: `/subscription/${list.cid}`, + textsToWaitFor: ['The list does not allow public subscriptions'], + }), + webConfirmSubscriptionNotice: web({ url: `/subscription/${list.cid}/confirm-subscription-notice`, textsToWaitFor: ['We need to confirm your email address'] @@ -118,15 +123,34 @@ module.exports = list => ({ } }), - /* - webUnsubscribe: web({ // FIXME + webUnsubscribe: web({ elementsToWaitFor: ['submitButton'], + textsToWaitFor: ['Unsubscribe'], elements: { submitButton: 'a[href="#submit"]' } }), -*/ + webConfirmUnsubscriptionNotice: web({ + url: `/subscription/${list.cid}/confirm-unsubscription-notice`, + textsToWaitFor: ['We need to confirm your email address'] + }), + + mailConfirmUnsubscription: mail({ + elementsToWaitFor: ['confirmLink'], + textsToWaitFor: ['Please Confirm Unsubscription'], + elements: { + confirmLink: `a[href^="${config.settings['service-url']}subscription/confirm/unsubscribe/"]` + } + }), + + webManualUnsubscribeNotice: web({ + url: `/subscription/${list.cid}/manual-unsubscribe-notice`, + elementsToWaitFor: ['contactLink'], + textsToWaitFor: ['Online Unsubscription Is Not Possible', config.settings['admin-email']], + elements: { + contactLink: `a[href^="mailto:${config.settings['admin-email']}"]` + } + }), }); - diff --git a/test/e2e/tests/subscription.js b/test/e2e/tests/subscription.js index dabdc914..7e2ab262 100644 --- a/test/e2e/tests/subscription.js +++ b/test/e2e/tests/subscription.js @@ -4,8 +4,13 @@ const config = require('../lib/config'); const { useCase, step, precondition, driver } = require('../lib/mocha-e2e'); const shortid = require('shortid'); const expect = require('chai').expect; +const createPage = require('../page-objects/subscription'); -const page = require('../page-objects/subscription')(config.lists.one); +let page = createPage(config.lists.l1); + +function switchToList(list) { + page = createPage(config.lists[list]); +} function generateEmail() { return 'keep.' + shortid.generate() + '@mailtrain.org'; @@ -116,9 +121,17 @@ suite('Subscription use-cases', () => { }); - useCase('Subscription to a non-public list'); + useCase('Subscription to a non-public list', async () => { + switchToList('l6'); + + await step('User navigates to list subscription page and sees message that this list does not allow public subscriptions.', async () => { + await page.webSubscribeNonPublic.navigate(); + }); + }); useCase('Change profile info', async () => { + switchToList('l1'); + const subscription = await subscriptionExistsPrecondition({ email: generateEmail(), firstName: 'John', @@ -236,13 +249,181 @@ suite('Subscription use-cases', () => { }); }); - useCase('Unsubscription from list #2 (one-step, with form).'); + useCase('Unsubscription from list #2 (one-step, with form).', async () => { + switchToList('l2'); - useCase('Unsubscription from list #3 (two-step, no form).'); + const subscription = await subscriptionExistsPrecondition({ + email: generateEmail() + }); - useCase('Unsubscription from list #4 (two-step, with form).'); + await step('User clicks the unsubscribe button.', async () => { + await page.mailSubscriptionConfirmed.click('unsubscribeLink'); + }); - useCase('Unsubscription from list #5 (manual unsubscribe).'); + await step('Systems shows a form to unsubscribe.', async () => { + await page.webUnsubscribe.waitUntilVisibleAfterRefresh(); + }); + + await step('User confirms unsubscribe and clicks the unsubscribe button.', async () => { + await page.webUnsubscribe.submit(); + }); + + await step('System shows a notice that confirms unsubscription.', async () => { + await page.webUnsubscribedNotice.waitUntilVisibleAfterRefresh(); + }); + + await step('System sends an email that confirms unsubscription.', async () => { + await page.mailUnsubscriptionConfirmed.fetchMail(subscription.email); + }); + }); + + useCase('Unsubscription from list #3 (two-step, no form).', async () => { + switchToList('l3'); + + const subscription = await subscriptionExistsPrecondition({ + email: generateEmail() + }); + + await step('User clicks the unsubscribe button.', async () => { + await page.mailSubscriptionConfirmed.click('unsubscribeLink'); + }); + + await step('System shows a notice that further instructions are in the email.', async () => { + await page.webConfirmUnsubscriptionNotice.waitUntilVisibleAfterRefresh(); + }); + + await step('System sends an email with a link to confirm unsubscription.', async () => { + await page.mailConfirmUnsubscription.fetchMail(subscription.email); + }); + + await step('User clicks the confirm unsubscribe button in the email.', async () => { + await page.mailConfirmUnsubscription.click('confirmLink'); + }); + + await step('System shows a notice that confirms unsubscription.', async () => { + await page.webUnsubscribedNotice.waitUntilVisibleAfterRefresh(); + }); + + await step('System sends an email that confirms unsubscription.', async () => { + await page.mailUnsubscriptionConfirmed.fetchMail(subscription.email); + }); + }); + + useCase('Unsubscription from list #4 (two-step, with form).', async () => { + switchToList('l4'); + + const subscription = await subscriptionExistsPrecondition({ + email: generateEmail() + }); + + await step('User clicks the unsubscribe button.', async () => { + await page.mailSubscriptionConfirmed.click('unsubscribeLink'); + }); + + await step('Systems shows a form to unsubscribe.', async () => { + await page.webUnsubscribe.waitUntilVisibleAfterRefresh(); + }); + + await step('User confirms unsubscribe and clicks the unsubscribe button.', async () => { + await page.webUnsubscribe.submit(); + }); + + await step('System shows a notice that further instructions are in the email.', async () => { + await page.webConfirmUnsubscriptionNotice.waitUntilVisibleAfterRefresh(); + }); + + await step('System sends an email with a link to confirm unsubscription.', async () => { + await page.mailConfirmUnsubscription.fetchMail(subscription.email); + }); + + await step('User clicks the confirm unsubscribe button in the email.', async () => { + await page.mailConfirmUnsubscription.click('confirmLink'); + }); + + await step('System shows a notice that confirms unsubscription.', async () => { + await page.webUnsubscribedNotice.waitUntilVisibleAfterRefresh(); + }); + + await step('System sends an email that confirms unsubscription.', async () => { + await page.mailUnsubscriptionConfirmed.fetchMail(subscription.email); + }); + }); + + useCase('Unsubscription from list #5 (manual unsubscribe).', async () => { + switchToList('l5'); + + await subscriptionExistsPrecondition({ + email: generateEmail() + }); + + await step('User clicks the unsubscribe button.', async () => { + await page.mailSubscriptionConfirmed.click('unsubscribeLink'); + }); + + await step('Systems shows a notice that online unsubscription is not possible.', async () => { + await page.webManualUnsubscribeNotice.waitUntilVisibleAfterRefresh(); + }); + }); + + useCase('Resubscription.', async () => { + switchToList('l1'); + + const subscription = await subscriptionExistsPrecondition({ + email: generateEmail(), + firstName: 'John', + lastName: 'Doe' + }); + + await step('User clicks the unsubscribe button.', async () => { + await page.mailSubscriptionConfirmed.click('unsubscribeLink'); + }); + + await step('System shows a notice that confirms unsubscription.', async () => { + await page.webUnsubscribedNotice.waitUntilVisibleAfterRefresh(); + }); + + await step('System sends an email that confirms unsubscription.', async () => { + await page.mailUnsubscriptionConfirmed.fetchMail(subscription.email); + }); + + await step('User clicks the resubscribe button.', async () => { + await page.mailUnsubscriptionConfirmed.click('resubscribeLink'); + }); + + await step('Systems shows the subscription form. The form contains data entered during initial subscription.', async () => { + await page.webSubscribe.waitUntilVisibleAfterRefresh(); + expect(await page.webSubscribe.getValue('emailInput')).to.equal(subscription.email); + expect(await page.webSubscribe.getValue('firstNameInput')).to.equal(subscription.firstName); + expect(await page.webSubscribe.getValue('lastNameInput')).to.equal(subscription.lastName); + }); + + await step('User submits the subscription form.', async () => { + await page.webSubscribe.submit(); + }); + + await step('System shows a notice that further instructions are in the email.', async () => { + await page.webConfirmSubscriptionNotice.waitUntilVisibleAfterRefresh(); + }); + + await step('System sends an email with a link to confirm the subscription.', async () => { + await page.mailConfirmSubscription.fetchMail(subscription.email); + }); + + await step('User clicks confirm subscription in the email', async () => { + await page.mailConfirmSubscription.click('confirmLink'); + }); + + await step('System shows a notice that subscription has been confirmed.', async () => { + await page.webSubscribedNotice.waitUntilVisibleAfterRefresh(); + }); + + await step('System sends an email with subscription confirmation. The manage and unsubscribe links are identical with the initial subscription.', async () => { + await page.mailSubscriptionConfirmed.fetchMail(subscription.email); + const unsubscribeLink = await page.mailSubscriptionConfirmed.getHref('unsubscribeLink'); + const manageLink = await page.mailSubscriptionConfirmed.getHref('manageLink'); + expect(subscription.unsubscribeLink).to.equal(unsubscribeLink); + expect(subscription.manageLink).to.equal(manageLink); + }); + }); - useCase('Resubscription.'); // This one is supposed to check that values pre-filled in resubscription (i.e. the re-subscribe link in unsubscription confirmation) are the same as the ones used before. }); From c17bc9f2cfdfe9cc7a3ad7d6a6282d2a6c36dcff Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Sun, 28 May 2017 18:55:01 +0200 Subject: [PATCH 305/483] Fixed eslint errors. --- test/e2e/index.js | 2 +- test/e2e/lib/mail.js | 4 +- test/e2e/lib/mocha-e2e.js | 430 +++++++++--------- test/e2e/lib/page.js | 13 +- test/e2e/lib/web.js | 2 +- .../lib/{semaphore.js => worker-counter.js} | 70 +-- test/e2e/page-objects/subscription.js | 19 +- test/e2e/page-objects/user.js | 4 +- test/e2e/tests/login.js | 2 + test/e2e/tests/subscription.js | 2 + 10 files changed, 268 insertions(+), 280 deletions(-) rename test/e2e/lib/{semaphore.js => worker-counter.js} (79%) diff --git a/test/e2e/index.js b/test/e2e/index.js index 5dd54d00..429d38bd 100644 --- a/test/e2e/index.js +++ b/test/e2e/index.js @@ -1,7 +1,7 @@ 'use strict'; require('./lib/exit-unless-test'); -const { mocha, driver } = require('./lib/mocha-e2e'); +const { mocha } = require('./lib/mocha-e2e'); const path = require('path'); global.USE_SHARED_DRIVER = true; diff --git a/test/e2e/lib/mail.js b/test/e2e/lib/mail.js index b0f41872..08eb073d 100644 --- a/test/e2e/lib/mail.js +++ b/test/e2e/lib/mail.js @@ -12,8 +12,8 @@ module.exports = (...extras) => page({ await this.waitUntilVisible(); }, - async ensureUrl(path) { + async ensureUrl() { throw new Error('Unsupported method.'); - }, + } }, ...extras); diff --git a/test/e2e/lib/mocha-e2e.js b/test/e2e/lib/mocha-e2e.js index 16aeba06..47b68199 100644 --- a/test/e2e/lib/mocha-e2e.js +++ b/test/e2e/lib/mocha-e2e.js @@ -1,217 +1,215 @@ -'use strict'; - -const Mocha = require('mocha'); -const color = Mocha.reporters.Base.color; -const Semaphore = require('./semaphore'); -const fs = require('fs-extra'); -const config = require('./config'); -const webdriver = require('selenium-webdriver'); - -const driver = new webdriver.Builder() - .forBrowser(config.app.seleniumwebdriver.browser || 'phantomjs') - .build(); - - -const failHandlerRunning = new Semaphore(); - - -function UseCaseReporter(runner) { - Mocha.reporters.Base.call(this, runner); - - const self = this; - let indents = 0; - - function indent () { - return Array(indents).join(' '); - } - - runner.on('start', function () { - console.log(); - }); - - runner.on('suite', suite => { - ++indents; - console.log(color('suite', '%s%s'), indent(), suite.title); - }); - - runner.on('suite end', () => { - --indents; - if (indents === 1) { - console.log(); - } - }); - - runner.on('use-case', useCase => { - ++indents; - console.log(); - console.log(color('suite', '%sUse case: %s'), indent(), useCase.title); - }); - - runner.on('use-case end', () => { - --indents; - }); - - runner.on('steps', useCase => { - ++indents; - console.log(color('pass', '%s%s'), indent(), useCase.title); - }); - - runner.on('steps end', () => { - --indents; - }); - - runner.on('step pass', step => { - console.log(indent() + color('checkmark', ' ' + Mocha.reporters.Base.symbols.ok) + color('pass', ' %s'), step.title); - }); - - runner.on('step fail', step => { - console.log(indent() + color('fail', ' %s'), step.title); - }); - - runner.on('pending', test => { - const fmt = indent() + color('pending', ' - %s'); - console.log(fmt, test.title); - }); - - runner.on('pass', test => { - let fmt; - if (test.speed === 'fast') { - fmt = indent() + - color('checkmark', ' ' + Mocha.reporters.Base.symbols.ok) + - color('pass', ' %s'); - console.log(fmt, test.title); - } else { - fmt = indent() + - color('checkmark', ' ' + Mocha.reporters.Base.symbols.ok) + - color('pass', ' %s') + - color(test.speed, ' (%dms)'); - console.log(fmt, test.title, test.duration); - } - }); - - runner.on('fail', (test, err) => { - failHandlerRunning.enter(); - (async () => { - const currentUrl = await driver.getCurrentUrl(); - const info = `URL: ${currentUrl}`; - await fs.writeFile('last-failed-e2e-test.info', info); - await fs.writeFile('last-failed-e2e-test.html', await driver.getPageSource()); - await fs.writeFile('last-failed-e2e-test.png', new Buffer(await driver.takeScreenshot(), 'base64')); - failHandlerRunning.exit(); - })(); - - console.log(indent() + color('fail', ' %s'), test.title); - console.log(); - console.log(err); - console.log(); - console.log(`Snaphot of and info about the current page are in last-failed-e2e-test.*`); - }); - - runner.on('end', () => { - const stats = self.stats; - let fmt; - - console.log(); - - // passes - fmt = color('bright pass', ' ') + color('green', ' %d passing'); - console.log(fmt, stats.passes); - - // pending - if (stats.pending) { - fmt = color('pending', ' ') + color('pending', ' %d pending'); - console.log(fmt, stats.pending); - } - - // failures - if (stats.failures) { - fmt = color('fail', ' %d failing'); - console.log(fmt, stats.failures); - } - - console.log(); - }); -} - - -const mocha = new Mocha() - .timeout(120000) - .reporter(UseCaseReporter) - .ui('tdd'); - -mocha._originalRun = mocha.run; - - -let runner; -mocha.run = fn => { - runner = mocha._originalRun(async () => { - await failHandlerRunning.waitForEmpty(); - await driver.quit(); - - fn(); - }); -}; - - -async function useCaseExec(name, asyncFn) { - runner.emit('use-case', {title: name}); - - try { - await asyncFn(); - runner.emit('use-case end'); - } catch (err) { - runner.emit('use-case end'); - throw err; - } -} - -function useCase(name, asyncFn) { - if (asyncFn) { - return test('Use case: ' + name, () => useCaseExec(name, asyncFn)); - } else { - // Pending test - return test('Use case: ' + name); - } -} - -useCase.only = (name, asyncFn) => { - return test.only('Use case: ' + name, () => useCaseExec(name, asyncFn)); -}; - -useCase.skip = (name, asyncFn) => { - return test.skip('Use case: ' + name, () => useCaseExec(name, asyncFn)); -}; - -async function step(name, asyncFn) { - try { - await asyncFn(); - runner.emit('step pass', {title: name}); - } catch (err) { - runner.emit('step fail', {title: name}); - throw err; - } -} - -async function steps(name, asyncFn) { - try { - runner.emit('steps', {title: name}); - await asyncFn(); - runner.emit('steps end'); - } catch (err) { - runner.emit('step end'); - throw err; - } -} - -async function precondition(preConditionName, useCaseName, asyncFn) { - await steps(`Including use case "${useCaseName}" to satisfy precondition "${preConditionName}"`, asyncFn); -} - -module.exports = { - mocha, - useCase, - step, - steps, - precondition, - driver +'use strict'; + +/* eslint-disable no-console */ + +const Mocha = require('mocha'); +const color = Mocha.reporters.Base.color; +const WorkerCounter = require('./worker-counter'); +const fs = require('fs-extra'); +const config = require('./config'); +const webdriver = require('selenium-webdriver'); + +const driver = new webdriver.Builder() + .forBrowser(config.app.seleniumwebdriver.browser || 'phantomjs') + .build(); + + +const failHandlerRunning = new WorkerCounter(); + + +function UseCaseReporter(runner) { + Mocha.reporters.Base.call(this, runner); + + const self = this; + let indents = 0; + + function indent () { + return Array(indents).join(' '); + } + + runner.on('start', () => { + console.log(); + }); + + runner.on('suite', suite => { + ++indents; + console.log(color('suite', '%s%s'), indent(), suite.title); + }); + + runner.on('suite end', () => { + --indents; + if (indents === 1) { + console.log(); + } + }); + + runner.on('use-case', useCase => { + ++indents; + console.log(); + console.log(color('suite', '%sUse case: %s'), indent(), useCase.title); + }); + + runner.on('use-case end', () => { + --indents; + }); + + runner.on('steps', useCase => { + ++indents; + console.log(color('pass', '%s%s'), indent(), useCase.title); + }); + + runner.on('steps end', () => { + --indents; + }); + + runner.on('step pass', step => { + console.log(indent() + color('checkmark', ' ' + Mocha.reporters.Base.symbols.ok) + color('pass', ' %s'), step.title); + }); + + runner.on('step fail', step => { + console.log(indent() + color('fail', ' %s'), step.title); + }); + + runner.on('pending', test => { + const fmt = indent() + color('pending', ' - %s'); + console.log(fmt, test.title); + }); + + runner.on('pass', test => { + let fmt; + if (test.speed === 'fast') { + fmt = indent() + + color('checkmark', ' ' + Mocha.reporters.Base.symbols.ok) + + color('pass', ' %s'); + console.log(fmt, test.title); + } else { + fmt = indent() + + color('checkmark', ' ' + Mocha.reporters.Base.symbols.ok) + + color('pass', ' %s') + + color(test.speed, ' (%dms)'); + console.log(fmt, test.title, test.duration); + } + }); + + runner.on('fail', (test, err) => { + failHandlerRunning.enter(); + (async () => { + const currentUrl = await driver.getCurrentUrl(); + const info = `URL: ${currentUrl}`; + await fs.writeFile('last-failed-e2e-test.info', info); + await fs.writeFile('last-failed-e2e-test.html', await driver.getPageSource()); + await fs.writeFile('last-failed-e2e-test.png', new Buffer(await driver.takeScreenshot(), 'base64')); + failHandlerRunning.exit(); + })(); + + console.log(indent() + color('fail', ' %s'), test.title); + console.log(); + console.log(err); + console.log(); + console.log('Snaphot of and info about the current page are in last-failed-e2e-test.*'); + }); + + runner.on('end', () => { + const stats = self.stats; + let fmt; + + console.log(); + + // passes + fmt = color('bright pass', ' ') + color('green', ' %d passing'); + console.log(fmt, stats.passes); + + // pending + if (stats.pending) { + fmt = color('pending', ' ') + color('pending', ' %d pending'); + console.log(fmt, stats.pending); + } + + // failures + if (stats.failures) { + fmt = color('fail', ' %d failing'); + console.log(fmt, stats.failures); + } + + console.log(); + }); +} + + +const mocha = new Mocha() + .timeout(120000) + .reporter(UseCaseReporter) + .ui('tdd'); + +mocha._originalRun = mocha.run; + + +let runner; +mocha.run = fn => { + runner = mocha._originalRun(async () => { + await failHandlerRunning.waitForEmpty(); + await driver.quit(); + + fn(); + }); +}; + + +async function useCaseExec(name, asyncFn) { + runner.emit('use-case', {title: name}); + + try { + await asyncFn(); + runner.emit('use-case end'); + } catch (err) { + runner.emit('use-case end'); + throw err; + } +} + +function useCase(name, asyncFn) { + if (asyncFn) { + return test('Use case: ' + name, () => useCaseExec(name, asyncFn)); + } else { + // Pending test + return test('Use case: ' + name); + } +} + +useCase.only = (name, asyncFn) => test.only('Use case: ' + name, () => useCaseExec(name, asyncFn)); + +useCase.skip = (name, asyncFn) => test.skip('Use case: ' + name, () => useCaseExec(name, asyncFn)); + +async function step(name, asyncFn) { + try { + await asyncFn(); + runner.emit('step pass', {title: name}); + } catch (err) { + runner.emit('step fail', {title: name}); + throw err; + } +} + +async function steps(name, asyncFn) { + try { + runner.emit('steps', {title: name}); + await asyncFn(); + runner.emit('steps end'); + } catch (err) { + runner.emit('step end'); + throw err; + } +} + +async function precondition(preConditionName, useCaseName, asyncFn) { + await steps(`Including use case "${useCaseName}" to satisfy precondition "${preConditionName}"`, asyncFn); +} + +module.exports = { + mocha, + useCase, + step, + steps, + precondition, + driver }; \ No newline at end of file diff --git a/test/e2e/lib/page.js b/test/e2e/lib/page.js index 07064af7..5f54cadb 100644 --- a/test/e2e/lib/page.js +++ b/test/e2e/lib/page.js @@ -1,6 +1,5 @@ 'use strict'; -const config = require('./config'); const webdriver = require('selenium-webdriver'); const By = webdriver.By; const until = webdriver.until; @@ -33,7 +32,7 @@ module.exports = (...extras) => Object.assign({ return params; }, - async waitUntilVisible(selector) { + async waitUntilVisible() { await driver.wait(until.elementLocated(By.css('body')), waitTimeout); for (const elem of (this.elementsToWaitFor || [])) { @@ -45,9 +44,7 @@ module.exports = (...extras) => Object.assign({ } for (const text of (this.textsToWaitFor || [])) { - await driver.wait(new webdriver.Condition(`for text "${text}"`, async (driver) => { - return await this.containsText(text); - }), waitTimeout); + await driver.wait(new webdriver.Condition(`for text "${text}"`, async () => await this.containsText(text)), waitTimeout); } if (this.url) { @@ -57,13 +54,13 @@ module.exports = (...extras) => Object.assign({ await driver.executeScript('document.mailTrainRefreshAcknowledged = true;'); }, - async waitUntilVisibleAfterRefresh(selector) { - await driver.wait(new webdriver.Condition('for refresh', async (driver) => { + async waitUntilVisibleAfterRefresh() { + await driver.wait(new webdriver.Condition('for refresh', async driver => { const val = await driver.executeScript('return document.mailTrainRefreshAcknowledged;'); return !val; }), waitTimeout); - await this.waitUntilVisible(selector); + await this.waitUntilVisible(); }, async click(key) { diff --git a/test/e2e/lib/web.js b/test/e2e/lib/web.js index 692c0214..9e345219 100644 --- a/test/e2e/lib/web.js +++ b/test/e2e/lib/web.js @@ -15,7 +15,7 @@ module.exports = (...extras) => page({ path = pathOrParams; } else { const urlPattern = new UrlPattern(this.requestUrl || this.url); - path = urlPattern.stringify(pathOrParams) + path = urlPattern.stringify(pathOrParams); } const parsedUrl = url.parse(path); diff --git a/test/e2e/lib/semaphore.js b/test/e2e/lib/worker-counter.js similarity index 79% rename from test/e2e/lib/semaphore.js rename to test/e2e/lib/worker-counter.js index 7c30c900..4debeda6 100644 --- a/test/e2e/lib/semaphore.js +++ b/test/e2e/lib/worker-counter.js @@ -1,35 +1,35 @@ -'use strict'; - -const Promise = require('bluebird'); - -class Semaphore { - constructor() { - this.counter = 0; - } - - enter() { - this.counter++; - } - - exit() { - this.counter--; - } - - async waitForEmpty() { - const self = this; - - function wait(resolve) { - if (self.counter == 0) { - resolve(); - } else { - setTimeout(wait, 500, resolve); - } - } - - return new Promise(resolve => { - setTimeout(wait, 500, resolve); - }) - } -} - -module.exports = Semaphore; \ No newline at end of file +'use strict'; + +const Promise = require('bluebird'); + +class WorkerCounter { + constructor() { + this.counter = 0; + } + + enter() { + this.counter++; + } + + exit() { + this.counter--; + } + + async waitForEmpty() { + const self = this; + + function wait(resolve) { + if (self.counter === 0) { + resolve(); + } else { + setTimeout(wait, 500, resolve); + } + } + + return new Promise(resolve => { + setTimeout(wait, 500, resolve); + }); + } +} + +module.exports = WorkerCounter; diff --git a/test/e2e/page-objects/subscription.js b/test/e2e/page-objects/subscription.js index 1d431b49..070b1005 100644 --- a/test/e2e/page-objects/subscription.js +++ b/test/e2e/page-objects/subscription.js @@ -88,7 +88,7 @@ module.exports = list => ({ form: `form[action="/subscription/${list.cid}/manage-address"]`, emailInput: '#main-form input[name="email"]', emailNewInput: '#main-form input[name="email-new"]', - submitButton: 'a[href="#submit"]', + submitButton: 'a[href="#submit"]' } }), @@ -102,12 +102,12 @@ module.exports = list => ({ webUpdatedNotice: web({ url: `/subscription/${list.cid}/updated-notice`, - textsToWaitFor: ['Profile Updated'], + textsToWaitFor: ['Profile Updated'] }), webUnsubscribedNotice: web({ url: `/subscription/${list.cid}/unsubscribed-notice`, - textsToWaitFor: ['Unsubscribe Successful'], + textsToWaitFor: ['Unsubscribe Successful'] }), mailUnsubscriptionConfirmed: mail({ @@ -116,17 +116,6 @@ module.exports = list => ({ elements: { resubscribeLink: `a[href^="${config.settings['service-url']}subscription/${list.cid}"]` } - }), - - /* - webUnsubscribe: web({ // FIXME - elementsToWaitFor: ['submitButton'], - elements: { - submitButton: 'a[href="#submit"]' - } - }), - -*/ - + }) }); diff --git a/test/e2e/page-objects/user.js b/test/e2e/page-objects/user.js index 52f8377f..736377da 100644 --- a/test/e2e/page-objects/user.js +++ b/test/e2e/page-objects/user.js @@ -22,8 +22,8 @@ module.exports = { url: '/users/account', elementsToWaitFor: ['form'], elements: { - form: `form[action="/users/account"]`, + form: 'form[action="/users/account"]', emailInput: 'form[action="/users/account"] input[name="email"]' } - }), + }) }; diff --git a/test/e2e/tests/login.js b/test/e2e/tests/login.js index 571389be..93b4cbdf 100644 --- a/test/e2e/tests/login.js +++ b/test/e2e/tests/login.js @@ -1,5 +1,7 @@ 'use strict'; +/* eslint-disable prefer-arrow-callback */ + const config = require('../lib/config'); const { useCase, step, driver } = require('../lib/mocha-e2e'); const expect = require('chai').expect; diff --git a/test/e2e/tests/subscription.js b/test/e2e/tests/subscription.js index fec05937..df5dc167 100644 --- a/test/e2e/tests/subscription.js +++ b/test/e2e/tests/subscription.js @@ -1,5 +1,7 @@ 'use strict'; +/* eslint-disable prefer-arrow-callback */ + const config = require('../lib/config'); const { useCase, step, precondition, driver } = require('../lib/mocha-e2e'); const shortid = require('shortid'); From aeb5bf18be8dbd3b0ef0f3b4781fbc2128374649 Mon Sep 17 00:00:00 2001 From: witzig Date: Mon, 29 May 2017 00:54:04 +0200 Subject: [PATCH 306/483] Basic Travis CI integration --- .travis.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..0a827b44 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,18 @@ +dist: trusty +sudo: required +language: node_js +node_js: + - 7 +services: + - mysql +before_install: + - sudo apt-get -q -y install pwgen imagemagick +install: + - sudo bash test/e2e/install.sh + - npm install +before_script: + - npm run starttest > /dev/null 2>&1 & + - sleep 10 +script: + - grunt + - npm run _e2e From 0f91533210b5701762045f21b95851e1a2c3e65f Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 27 May 2017 13:15:47 +0200 Subject: [PATCH 307/483] GrapeJS v0.5.41 GrapesJS Preset Newsletter v0.2.3 GrapeJS MJML v0.0.7 ... --- public/grapejs/dist/css/grapes.min.css | 2 +- public/grapejs/dist/css/grapesjs-mjml.css | 248 ++++++++++++++++++ .../dist/css/grapesjs-preset-newsletter.css | 14 +- public/grapejs/dist/js/grapes.min.js | 34 +-- public/grapejs/dist/js/grapesjs-mjml.min.js | 108 ++++++++ .../grapejs/dist/js/grapesjs-preset-mjml.js | 124 +++++++++ .../dist/js/grapesjs-preset-newsletter.min.js | 18 +- public/grapejs/dist/js/toastr.min.js | 1 - 8 files changed, 512 insertions(+), 37 deletions(-) create mode 100644 public/grapejs/dist/css/grapesjs-mjml.css create mode 100644 public/grapejs/dist/js/grapesjs-mjml.min.js create mode 100644 public/grapejs/dist/js/grapesjs-preset-mjml.js diff --git a/public/grapejs/dist/css/grapes.min.css b/public/grapejs/dist/css/grapes.min.css index d4134c45..e8cce15b 100755 --- a/public/grapejs/dist/css/grapes.min.css +++ b/public/grapejs/dist/css/grapes.min.css @@ -3,4 +3,4 @@ @charset "UTF-8";.sp-alpha-handle,.sp-slider{opacity:.8;background-color:#ccc}.fa-fw,.fa-li,.sp-container button{text-align:center}.fa,.gjs-fonts::before{text-rendering:auto;-moz-osx-font-smoothing:grayscale}.gjs-cv-canvas,.gjs-grabbing,.sp-container,.sp-replacer{overflow:hidden}.sp-container{position:absolute;top:0;left:0;display:inline-block;z-index:9999994}.sp-container.sp-flat,.sp-top{position:relative}.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.sp-top{width:100%;display:inline-block}.sp-alpha-handle,.sp-color,.sp-dragger,.sp-hue,.sp-sat,.sp-slider,.sp-top-inner,.sp-val{position:absolute}.sp-top-inner{top:0;left:0;bottom:0;right:0}.sp-color{top:0;left:0;bottom:0}.sp-hue{top:0;right:0;bottom:0;height:100%}.sp-clear-enabled .sp-hue{top:33px;height:77.5%}.sp-fill{padding-top:80%}.sp-sat,.sp-val{top:0;left:0;right:0;bottom:0}.sp-alpha-enabled .sp-top{margin-bottom:18px}.sp-alpha-enabled .sp-alpha{display:block}.sp-alpha,.sp-clear{display:none}.sp-alpha-handle{top:-4px;bottom:-4px;left:50%;background:#fff;opacity:.8}.sp-alpha{bottom:-14px;right:0;left:0;height:8px}.sp-alpha-inner{border:1px solid #333}.sp-clear.sp-clear-display{background-position:center}.sp-clear-enabled .sp-clear{display:block;position:absolute;top:0;right:0;bottom:0;left:84%;height:28px}.sp-alpha,.sp-alpha-handle,.sp-clear,.sp-container,.sp-container button,.sp-container.sp-dragging .sp-input,.sp-dragger,.sp-preview,.sp-replacer,.sp-slider{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}.sp-container.sp-buttons-disabled .sp-button-container,.sp-container.sp-input-disabled .sp-input-container,.sp-container.sp-palette-buttons-disabled .sp-palette-button-container,.sp-initial-disabled .sp-initial,.sp-palette-disabled .sp-palette-container,.sp-palette-only .sp-picker-container{display:none}.sp-sat{background-image:-webkit-gradient(linear,0 0,100% 0,from(#FFF),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left,#FFF,rgba(204,154,129,0));background-image:-moz-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-o-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-ms-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:linear-gradient(to right,#fff,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81')}.sp-val{background-image:-webkit-gradient(linear,0 100%,0 0,from(#000),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-o-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:linear-gradient(to top,#000,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000')}.sp-hue{background:-moz-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-ms-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-o-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(.17,#ff0),color-stop(.33,#0f0),color-stop(.5,#0ff),color-stop(.67,#00f),color-stop(.83,#f0f),to(red));background:-webkit-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.sp-1{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00')}.sp-2{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00')}.sp-3{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff')}.sp-4{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff')}.sp-5{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff')}.sp-6{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000')}.sp-hidden{display:none!important}.sp-cf:after,.sp-cf:before{content:"";display:table}.sp-cf:after{clear:both}@media (max-device-width:480px){.sp-color{right:40%}.sp-hue{left:63%}.sp-fill{padding-top:60%}}.sp-dragger{border-radius:5px;height:5px;width:5px;border:1px solid #fff;top:0;left:0}.sp-slider{top:0;right:-1px;background:#fff;opacity:.8}.sp-container{border:1px solid #f0c49B;padding:0}.sp-clear,.sp-color,.sp-container,.sp-container button,.sp-container input,.sp-hue{font:400 12px "Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.gjs-btnt,.gjs-com-dashed *,.gjs-cv-canvas,.gjs-cv-canvas *,.gjs-editor,.gjs-input,.gjs-pn-btn,.gjs-pn-panel,.gjs-select{box-sizing:border-box}.sp-top{margin-bottom:3px}.sp-clear,.sp-color,.sp-hue{border:1px solid #666}.sp-input-container{float:right;width:100px;margin-bottom:4px}.sp-initial-disabled .sp-input-container,.sp-input{width:100%}.sp-input{font-size:12px!important;border:1px inset;padding:4px 5px;margin:0;background:0 0;border-radius:3px;color:#222}.sp-input:focus{border:1px solid orange}.sp-input.sp-validation-error{border:1px solid red;background:#fdd}.sp-palette-container,.sp-picker-container{float:left;position:relative;padding:10px 10px 300px;margin-bottom:-290px}.sp-picker-container{width:172px}.sp-palette-only .sp-palette-container{border:0}.sp-palette .sp-thumb-el{display:block;position:relative;float:left;cursor:pointer}.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:orange}.sp-thumb-el{position:relative}.sp-initial{float:left;border:1px solid #333}.sp-initial span{width:30px;height:25px;border:none;display:block;float:left;margin:0}.sp-initial .sp-clear-display{background-position:center}.sp-button-container,.sp-palette-button-container{float:right}.sp-replacer{margin:0;cursor:pointer;padding:4px;display:inline-block;border:1px solid #91765d;background:#eee;color:#333;vertical-align:middle}.sp-replacer.sp-active,.sp-replacer:hover{border-color:#F0C49B;color:#111}.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}.sp-dd{padding:2px 0;height:16px;line-height:16px;float:left;font-size:10px}.sp-preview{width:25px;height:20px;border:1px solid #222;margin-right:5px;float:left;z-index:0}.sp-palette{max-width:220px}.sp-palette .sp-thumb-el{width:16px;height:16px;margin:2px 1px;border:1px solid #d0d0d0}.sp-container{padding-bottom:0}.sp-container button{background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#ccc);background-image:-moz-linear-gradient(top,#eee,#ccc);background-image:-ms-linear-gradient(top,#eee,#ccc);background-image:-o-linear-gradient(top,#eee,#ccc);background-image:linear-gradient(to bottom,#eee,#ccc);border:1px solid #ccc;border-bottom:1px solid #bbb;border-radius:3px;font-size:14px;line-height:1;vertical-align:middle}.sp-container button:hover{background-color:#ddd;background-image:-webkit-linear-gradient(top,#ddd,#bbb);background-image:-moz-linear-gradient(top,#ddd,#bbb);background-image:-ms-linear-gradient(top,#ddd,#bbb);background-image:-o-linear-gradient(top,#ddd,#bbb);background-image:linear-gradient(to bottom,#ddd,#bbb);border:1px solid #bbb;border-bottom:1px solid #999;cursor:pointer}.sp-container button:active{border:1px solid #aaa;border-bottom:1px solid #888;-webkit-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-moz-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-ms-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-o-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee}.sp-cancel{margin:0 5px 0 0;padding:2px;vertical-align:middle}.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}.sp-palette span.sp-thumb-active,.sp-palette span:hover{border-color:#000}.sp-alpha,.sp-preview,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-alpha-inner,.sp-preview-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}.fa,.fa-stack{display:inline-block}.sp-palette .sp-thumb-inner{background-position:50% 50%;background-repeat:no-repeat}.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==)}/*! * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.5.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2?v=4.5.0) format("woff2"),url(../fonts/fontawesome-webfont.woff?v=4.5.0) format("woff"),url(../fonts/fontawesome-webfont.ttf?v=4.5.0) format("truetype"),url(../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;-webkit-font-smoothing:antialiased}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right,.pull-right{float:right}.pull-left{float:left}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.gjs-clm-tags #gjs-clm-close,.gjs-freezed,.gjs-nv-freezed,.opac50{opacity:.5;filter:alpha(opacity=50)}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}@font-face{font-family:font3336;src:url(../fonts/main-fonts.eot?v=20);src:url(../fonts/main-fonts.woff?v=20) format("woff"),url(../fonts/main-fonts.ttf?v=20) format("truetype"),url(../fonts/main-fonts.svg?v=20) format("svg"),url(../fonts/main-fonts.eot?v=20) format("embedded-opentype");font-weight:400;font-style:normal}.gjs-fonts::before{display:block;font:normal normal normal 14px font3336;-webkit-font-smoothing:antialiased;font-size:5em}.gjs-block-label,.gjs-editor,.gjs-mdl-container{font-family:Helvetica,sans-serif}.gjs-f-b1::before{content:'Q'}.gjs-f-b2::before{content:'W'}.gjs-f-b3::before{content:'E'}.gjs-f-b37::before{content:'R'}.gjs-f-hero::before{content:'T'}.gjs-f-h1p::before{content:'y'}.gjs-f-3ba::before{content:'u'}.gjs-f-image::before{content:'I'}.gjs-f-text::before{content:'o'}.gjs-f-quo::before{content:'p'}.gjs-f-button::before{content:'B'}.gjs-f-divider::before{content:'D'}.gjs-clm-tags #gjs-clm-new,.gjs-invis-invis,.gjs-no-app{background-color:transparent;border:none;color:inherit}.gjs-no-app{height:10px}.gjs-test::btn{color:'#fff'}.checker-bg,.gjs-checker-bg,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.gjs-grabbing,.gjs-grabbing *,.gjs-nav-comp-name,.gjs-no-user-select{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el,.gjs-margin-v-el,.gjs-no-pointer-events,.gjs-padding-v-el,.gjs-resizer-c{pointer-events:none}.gjs-bdrag,.gjs-drag-helper{pointer-events:none!important;position:absolute!important;z-index:10!important}#gjs-rte-toolbar,.gjs-bg-main,.gjs-block,.gjs-clm-select option,.gjs-clm-tags .gjs-sm-colorp-c,.gjs-mdl-dialog,.gjs-nv-item .gjs-nv-title-c,.gjs-off-prv,.gjs-pn-panel,.gjs-select option,.gjs-sm-sector .gjs-sm-colorp-c,.gjs-sm-select option,.gjs-sm-unit option,.sp-container{background-color:#444}#gjs-rte-toolbar .gjs-rte-btn,.gjs-btn-prim,.gjs-btnt,.gjs-clm-tags .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add,.gjs-color-main,.gjs-mdl-dialog,.gjs-off-prv,.gjs-pn-btn,.gjs-pn-panel,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add{color:#ddd}.gjs-btnt.gjs-pn-active,.gjs-color-active,.gjs-pn-btn.gjs-pn-active{color:#f8f8f8}.gjs-bdrag{width:auto}.gjs-drag-helper{background-color:#3b97e3!important;transform:scale(.3)!important;transform-origin:top left!important;-webkit-transform-origin:top left!important;margin:15px!important;transition:none!important;outline:0!important}.gjs-grabbing,.gjs-grabbing *{cursor:grabbing!important;cursor:-webkit-grabbing!important}.gjs-off-prv{position:relative;z-index:10;padding:5px;cursor:pointer}.gjs-editor-cont ::-webkit-scrollbar-track{background:rgba(0,0,0,.1)}.gjs-editor-cont ::-webkit-scrollbar-thumb{background-color:rgba(255,255,255,.2)}.gjs-editor-cont ::-webkit-scrollbar{width:8px}.clear{clear:both}.gjs-clm-tags #gjs-clm-close,.gjs-clm-tags #gjs-clm-tag-label,.gjs-com-no-select,.gjs-com-no-select img,.no-select{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-editor{background-color:#444;position:relative;height:100%}.gjs-btn-prim,.gjs-btn-prim:active{background-color:rgba(255,255,255,.1)}.gjs-freezed,.gjs-nv-freezed{pointer-events:none}.gjs-btn-prim{border-radius:2px;cursor:pointer;padding:.5em;border:none}.gjs-input,.gjs-select{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.1);border-radius:2px;box-shadow:1px 1px 0 rgba(255,255,255,.1);color:#ddd;padding:.5em 1em}div.gjs-select{padding:0}.gjs-select select{padding-right:10px}.gjs-select select:-moz-focusring,.gjs-select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,.7)}.gjs-btn-prim:focus,.gjs-button:focus,.gjs-input:focus,.gjs-select select:focus,.gjs-select:focus{outline:0}.gjs-traits-label{border-bottom:1px solid rgba(0,0,0,.3);font-size:13px;font-weight:lighter;margin-bottom:5px;padding:10px;text-align:left}.gjs-trt-trait{display:flex;justify-content:start;padding:5px 10px;font-size:.75em;font-weight:lighter}.gjs-trt-trait .gjs-label{width:30%;text-align:left}.gjs-trt-trait .gjs-field{width:70%}.gjs-cv-canvas{background-color:rgba(0,0,0,.15);position:absolute;width:85%;height:100%;bottom:0;left:0;padding-top:40px;z-index:1}.gjs-cv-canvas>iframe{height:100%;outline:0;width:100%;border:none;margin:0 auto;display:block}.gjs-cv-canvas .gjs-ghost{display:none;pointer-events:none;background-color:#5b5b5b;border:2px dashed #ccc;position:absolute;z-index:10;opacity:.55;filter:alpha(opacity=55)}.gjs-cv-canvas .gjs-highlighter,.gjs-cv-canvas .gjs-highlighter-sel{position:absolute;outline:#3b97e3 solid 1px;pointer-events:none}.gjs-cv-canvas .gjs-highlighter-warning{outline:#ffca6f solid 3px}.gjs-cv-canvas .gjs-highlighter-sel{outline:#3b97e3 solid 3px}.gjs-cv-canvas #gjs-tools{width:100%;position:absolute;top:0;left:0;outline:0}.gjs-cv-canvas>div:first-child{background-color:#fff;position:relative;height:100%;overflow:auto;width:100%}.dragged,.gjs-resizer-c,.gjs-resizer-h,.gjs-toolbar{position:absolute}.gjs-frame{transition:width .35s ease}.gjs-toolbar{background-color:#3b97e3;color:#fff;z-index:10}.gjs-toolbar-item{padding:5px 7px;font-size:.8rem;cursor:pointer}.gjs-resizer-c{z-index:9}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el,.gjs-margin-v-el,.gjs-padding-v-el{opacity:.1;filter:alpha(opacity=10);position:absolute;background-color:#ff0}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{opacity:.2;filter:alpha(opacity=20)}.gjs-fixedpadding-v-el,.gjs-padding-v-el{background-color:navy}.gjs-resizer-h{pointer-events:all;border:3px solid #3b97e3;width:10px;height:10px;background-color:#fff;margin:-5px}.gjs-resizer-h-tl{top:0;left:0;cursor:nwse-resize}.gjs-resizer-h-tr{top:0;right:0;cursor:nesw-resize}.gjs-resizer-h-tc{top:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-cl,.gjs-resizer-h-cr{margin:auto -5px;cursor:ew-resize;bottom:0;top:0}.gjs-resizer-h-cl{left:0}.gjs-resizer-h-cr{right:0}.gjs-resizer-h-bl{bottom:0;left:0;cursor:nesw-resize}.gjs-resizer-h-bc{bottom:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-br{bottom:0;right:0;cursor:nwse-resize}.gjs-resizing .gjs-badge,.gjs-resizing .gjs-highlighter{display:none!important}.gjs-resizing-tl *{cursor:nwse-resize!important}.gjs-resizing-tr *{cursor:nesw-resize!important}.gjs-resizing-tc *{cursor:ns-resize!important}.gjs-resizing-cl *,.gjs-resizing-cr *{cursor:ew-resize!important}.gjs-resizing-bl *{cursor:nesw-resize!important}.gjs-resizing-bc *{cursor:ns-resize!important}.gjs-resizing-br *{cursor:nwse-resize!important}.btn-cl,.gjs-am-assets-cont #gjs-am-close,.gjs-mdl-dialog .gjs-mdl-btn-close{opacity:.3;filter:alpha(opacity=30);font-size:25px;cursor:pointer}.btn-cl:hover,.gjs-am-assets-cont #gjs-am-close:hover,.gjs-mdl-dialog .gjs-mdl-btn-close:hover{opacity:.7;filter:alpha(opacity=70)}.dragged,.gjs-nv-opac50{opacity:.5;filter:alpha(opacity=50)}#commands.panel{min-width:35px;height:100%;z-index:3}#options.panel{z-index:4;bottom:0}#views.panel{width:16.5%;font-weight:lighter;color:#ddd;right:0;top:0;z-index:3;height:100%;padding:0}#views.panel .c{height:100%}#commands.panel,#options.panel{width:3.5%;left:0}#options .c{display:table;margin:0 auto}body.dragging,body.dragging *{cursor:move!important}.dragged{z-index:2000}ol.example li.placeholder{position:relative}ol.example li.placeholder:before{position:absolute}.no-dots,.ui-resizable-handle{border:none!important;margin:0!important;outline:0!important}.gjs-com-dashed *{outline:#888 dashed 1px;outline-offset:-2px}.gjs-cv-canvas .gjs-comp-selected{outline:#3b97e3 solid 3px!important}.gjs-com-hover,div.gjs-com-hover{outline:#3b97e3 solid 1px}.gjs-com-hover-delete,div.gjs-com-hover-delete{outline:#dd3636 solid 2px;opacity:.5;filter:alpha(opacity=50)}.gjs-com-hover-move,div.gjs-com-hover-move{outline:#ffca6f solid 3px}.gjs-badge,.gjs-com-badge,.gjs-com-badge-red{pointer-events:none;background-color:#3b97e3;color:#fff;padding:2px 5px;position:absolute;z-index:1;font-size:12px;outline:0;display:none}.gjs-com-badge-red{background-color:#dd3636}.gjs-badge-warning{background-color:#ffca6f}.gjs-com-placeholder,.gjs-nv-placeholder,.gjs-placeholder{position:absolute;z-index:10;pointer-events:none;display:none}.gjs-nv-placeholder,.gjs-placeholder{border-style:solid!important;border-color:#62c462;outline:0;box-sizing:border-box}.gjs-com-placeholder-int,.gjs-nv-placeholder-int,.gjs-placeholder-int{background-color:#62c462;box-shadow:0 0 3px rgba(0,0,0,.2);height:100%;width:100%;pointer-events:none;padding:1.5px;outline:0}.gjs-pn-panel{display:inline-block;padding:5px;position:absolute;text-align:center;z-index:3}.gjs-pn-panel#gjs-pn-commands,.gjs-pn-panel#gjs-pn-options2{width:85%;left:0;top:0;box-shadow:0 0 5px rgba(0,0,0,.3)}.gjs-pn-panel#gjs-pn-options{right:15%;top:0}.gjs-pn-panel#gjs-pn-options2{bottom:150px;height:auto}.gjs-pn-panel .icon-redo,.gjs-pn-panel .icon-undo{font-size:20px;height:30px;width:25px}.gjs-pn-panel#gjs-pn-views{border-bottom:2px solid rgba(0,0,0,.3);right:0;width:15%;z-index:4}.gjs-pn-panel#gjs-pn-views-container{height:100%;padding:42px 0 0;right:0;width:15%;overflow:auto;box-shadow:0 0 5px rgba(0,0,0,.3)}.gjs-pn-buttons{align-items:center;display:flex;justify-content:center}.gjs-btnt,.gjs-pn-btn{height:30px;width:30px;line-height:21px;background-color:transparent;border:none;font-size:18px;margin-right:5px;border-radius:2px;cursor:pointer;padding:5px;position:relative}.gjs-btnt.gjs-pn-active,.gjs-pn-btn.gjs-pn-active{background-color:rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.25) inset}.gjs-btnt>.gjs-pn-arrow-rd,.gjs-pn-btn>.gjs-pn-arrow-rd{border-bottom:5px solid rgba(255,255,255,.7);border-left:5px solid transparent;bottom:2px;right:2px;position:absolute}.gjs-btnt>.gjs-pn-buttons,.gjs-pn-btn>.gjs-pn-buttons{background-color:#444;border-radius:2px;position:absolute;display:none;left:50px;top:0;padding:5px}.gjs-btnt>.gjs-pn-buttons.gjs-pn-visible,.gjs-pn-btn>.gjs-pn-buttons.gjs-pn-visible{display:block}.gjs-btnt>.gjs-pn-buttons>.gjs-pn-arrow-l,.gjs-pn-btn>.gjs-pn-buttons>.gjs-pn-arrow-l{border-bottom:5px solid transparent;border-right:5px solid #444;border-top:5px solid transparent;left:-5px;top:15px;position:absolute}.gjs-nv-navigator{position:relative;height:100%}.gjs-nv-navigator #gjs-nv-placeholder{width:100%;position:absolute}.gjs-nv-navigator #gjs-nv-placeholder #gjs-nv-plh-int{height:100%;padding:1px}.gjs-nv-navigator #gjs-nv-placeholder #gjs-nv-plh-int.gjs-nv-insert{background-color:#62c462}.gjs-nv-navigator .gjs-nv-item{font-weight:lighter;text-align:left;position:relative;background-color:rgba(0,0,0,.1)}.gjs-nv-navigator .gjs-nv-item.gjs-nv-hide{opacity:.55;filter:alpha(opacity=55)}.gjs-nv-navigator .gjs-nv-item #gjs-nv-counter{font-size:10px;position:absolute;right:27px;top:9px}.gjs-nv-navigator .gjs-nv-item #gjs-nv-btn-eye{height:auto!important;width:auto!important;font-size:13px;left:0;top:0;padding:7px 5px 7px 10px;position:absolute;cursor:pointer;z-index:1}.gjs-nv-item #gjs-nv-caret{font-size:7px;width:8px;padding:5px;cursor:pointer;opacity:.7;filter:alpha(opacity=70)}.gjs-nv-item #gjs-nv-caret:hover{opacity:1;filter:alpha(opacity=100)}.gjs-nv-title{background-color:rgba(0,0,0,.1);font-size:11px;letter-spacing:1px;padding:3px 10px 5px 30px;border-bottom:1px solid rgba(0,0,0,.3);border-top:1px solid rgba(255,255,255,.1);display:flex;align-items:center}.gjs-nv-item .gjs-nv-children .gjs-nv-title{border-left:1px solid rgba(5,5,5,.3)}.gjs-nv-item>.gjs-nv-children{margin-left:7px;display:none}.gjs-nv-item.open>.gjs-nv-children{display:block}.gjs-nv-item>.gjs-nv-no-chld>#gjs-nv-caret::before{content:''}.gjs-nv-no-chld>#gjs-nv-caret{display:none}.gjs-nv-item>#gjs-nv-move{position:absolute;cursor:move;font-size:12px;right:0;top:0;padding:7px 10px 7px 5px}.gjs-nv-selected .gjs-nv-title{background-color:rgba(255,255,255,.1)}.gjs-nv-nav-item-edit{visibility:hidden;padding:5px;font-size:10px;opacity:.7;filter:alpha(opacity=70)}.gjs-nv-nav-item-edit:hover{opacity:1;filter:alpha(opacity=100)}.gjs-nv-title-c:hover .gjs-nv-nav-item-edit{visibility:visible;cursor:pointer}.gjs-nav-comp-name{padding:5px;box-sizing:content-box}.btn.expand,.gjs-nv-navigator .gjs-nv-item .expand#gjs-nv-btn-eye{background-image:none}.gjs-comp-image-placeholder{display:block;background-color:#f5f5f5;color:#777;height:50px;width:50px;line-height:50px;outline:#ffca6f solid 3px;outline-offset:-3px;text-align:center;font-size:16.67px;cursor:pointer}.gjs-field-checkbox input,.gjs-radio-item input{display:none}.gjs-comp-image-placeholder.fa-picture-o::after{content:"\f03e"}.gjs-label{line-height:18px}.gjs-field{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 0 rgba(255,255,255,.1);border-radius:2px;box-sizing:border-box;padding:0;position:relative}.gjs-field input,.gjs-field select,.gjs-field textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;color:rgba(255,255,255,.7);border:none;background-color:transparent;box-sizing:border-box;width:100%;position:relative;padding:3px 4px 4px;z-index:1}.gjs-field textarea{resize:vertical}.gjs-field select{height:20px;padding-right:12px}.gjs-field option{padding:3px 0}.gjs-field .gjs-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;z-index:0}.gjs-field .gjs-d-s-arrow{bottom:7px;border-top:4px solid rgba(255,255,255,.7);position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-field-color input{padding-right:22px;box-sizing:border-box}.gjs-field-colorp{border-left:1px solid rgba(0,0,0,.3);box-sizing:border-box;height:100%;padding:2px;position:absolute;right:0;top:0;width:22px;z-index:10}.gjs-field-colorp .gjs-checker-bg{height:100%;width:100%;border-radius:1px}.gjs-field-colorp-c{height:100%;position:relative;width:100%}.gjs-field-color-picker{background-color:#ddd;cursor:pointer;height:100%;width:100%;box-shadow:0 0 1px rgba(0,0,0,.3);border-radius:1px;position:absolute;top:0}.gjs-field-radio{float:left;overflow:hidden;padding:0;width:auto}.gjs-field-checkbox{padding:0;width:auto!important}.gjs-field-checkbox input:checked+.gjs-chk-icon{border-color:rgba(255,255,255,.5);border-width:0 2px 2px 0;border-style:solid}.gjs-radio-item{float:left;border-left:1px solid rgba(0,0,0,.3)}.gjs-radio-item:first-child{border:none}.gjs-radio-item:hover{background:rgba(0,0,0,.3)}.gjs-radio-item input:checked+.gjs-radio-item-label{background-color:rgba(255,255,255,.2)}.gjs-radio-item-label{cursor:pointer;display:block;padding:5px}.gjs-field-units{position:absolute;right:0;top:0}.gjs-field-units select{padding:0 12px 0 0}.gjs-field-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,.7);cursor:pointer}.gjs-field-arrows{z-index:10;cursor:ns-resize;height:100%;position:absolute;right:0;top:0;width:9px}.gjs-field-arrow-d,.gjs-field-arrow-u{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.7);bottom:4px;cursor:pointer}.gjs-field-arrow-u{border-bottom:4px solid rgba(255,255,255,.7);border-top:none;top:4px}.gjs-field-select{padding:0}.gjs-field-range{background-color:transparent;border:none;box-shadow:none;padding:0}.gjs-field-range input{margin:0}.gjs-field-range input::-moz-range-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,.3);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-5px;height:10px;width:10px;border:1px solid rgba(0,0,0,.3);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-ms-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,.3);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-moz-range-track{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.15);border-radius:1px;height:2px}.gjs-field-range input::-webkit-slider-runnable-track{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.15);border-radius:1px;height:2px}.gjs-field-range input::-ms-track{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.15);border-radius:1px;height:2px}.gjs-chk-icon{-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);box-sizing:border-box;display:block;height:14px;margin:0 5px;width:6px;cursor:pointer}.gjs-add-trasp{background:0 0;border:none;color:#ddd;cursor:pointer;font-size:1em;border-radius:2px;opacity:.75;filter:alpha(opacity=75)}.gjs-add-trasp:hover{opacity:1;filter:alpha(opacity=100)}.gjs-add-trasp:active{background-color:rgba(0,0,0,.2)}.gjs-devices-c{display:flex;align-items:center;padding:4px}.gjs-devices-c .gjs-device-label{flex-grow:2;font-size:.7em;text-align:left;margin-right:10px}.gjs-devices-c .gjs-select{flex-grow:20}.gjs-devices-c .gjs-add-trasp{flex-grow:1;margin-left:5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-sm-close-btn,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.2;filter:alpha(opacity=20)}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover,.gjs-sm-close-btn:hover,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-sm-header{font-size:11px;font-weight:lighter;padding:10px}.gjs-clm-tags,.gjs-sm-sector{clear:both;border-bottom:1px solid rgba(0,0,0,.3);font-weight:lighter;text-align:left}.gjs-clm-tags #gjs-sm-caret,.gjs-sm-sector #gjs-sm-caret{padding-right:5px;font-size:11px}.gjs-clm-tags .gjs-sm-title,.gjs-sm-sector .gjs-sm-title{background-color:rgba(0,0,0,.1);font-size:13px;letter-spacing:1px;padding:12px 10px 12px 20px;border-top:1px solid rgba(255,255,255,.1);cursor:pointer}.gjs-clm-tags .gjs-sm-label,.gjs-sm-sector .gjs-sm-label{margin:5px 5px 2px 0}.gjs-clm-tags .gjs-clm-field,.gjs-clm-tags .gjs-sm-field,.gjs-sm-sector .gjs-clm-field,.gjs-sm-sector .gjs-sm-field{width:100%;position:relative}.gjs-clm-tags .gjs-clm-field input,.gjs-clm-tags .gjs-clm-field select,.gjs-clm-tags .gjs-sm-field input,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field input,.gjs-sm-sector .gjs-clm-field select,.gjs-sm-sector .gjs-sm-field input,.gjs-sm-sector .gjs-sm-field select{background-color:transparent;color:rgba(255,255,255,.7);border:none;width:100%}.gjs-clm-tags .gjs-clm-field input,.gjs-clm-tags .gjs-sm-field input,.gjs-sm-sector .gjs-clm-field input,.gjs-sm-sector .gjs-sm-field input{box-sizing:border-box}.gjs-clm-tags .gjs-clm-field select,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field select,.gjs-sm-sector .gjs-sm-field select{position:relative;z-index:1;-webkit-appearance:none;-moz-appearance:none;appearance:none}.gjs-clm-tags .gjs-clm-field select::-ms-expand,.gjs-clm-tags .gjs-sm-field select::-ms-expand,.gjs-sm-sector .gjs-clm-field select::-ms-expand,.gjs-sm-sector .gjs-sm-field select::-ms-expand{display:none}.gjs-clm-tags .gjs-clm-field select:-moz-focusring,.gjs-clm-tags .gjs-sm-field select:-moz-focusring,.gjs-sm-sector .gjs-clm-field select:-moz-focusring,.gjs-sm-sector .gjs-sm-field select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,.7)}.gjs-clm-tags .gjs-clm-field input:focus,.gjs-clm-tags .gjs-clm-field select:focus,.gjs-clm-tags .gjs-sm-field input:focus,.gjs-clm-tags .gjs-sm-field select:focus,.gjs-sm-sector .gjs-clm-field input:focus,.gjs-sm-sector .gjs-clm-field select:focus,.gjs-sm-sector .gjs-sm-field input:focus,.gjs-sm-sector .gjs-sm-field select:focus{outline:0}.gjs-clm-tags .gjs-clm-field .gjs-sm-unit,.gjs-clm-tags .gjs-sm-field .gjs-sm-unit,.gjs-sm-sector .gjs-clm-field .gjs-sm-unit,.gjs-sm-sector .gjs-sm-field .gjs-sm-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,.7);cursor:pointer}.gjs-clm-tags .gjs-clm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;cursor:ns-resize}.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow{cursor:pointer}.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow{border-bottom:4px solid rgba(255,255,255,.7);top:4px}.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow{border-top:4px solid rgba(255,255,255,.7);bottom:4px}.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow{bottom:7px}.gjs-clm-tags .gjs-clm-select,.gjs-clm-tags .gjs-sm-color.gjs-clm-field,.gjs-clm-tags .gjs-sm-field.gjs-sm-color,.gjs-clm-tags .gjs-sm-field.gjs-sm-input,.gjs-clm-tags .gjs-sm-field.gjs-sm-integer,.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-input.gjs-clm-field,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field,.gjs-clm-tags .gjs-sm-list.gjs-clm-field,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-sm-sector .gjs-sm-color.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-color,.gjs-sm-sector .gjs-sm-field.gjs-sm-input,.gjs-sm-sector .gjs-sm-field.gjs-sm-integer,.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-input.gjs-clm-field,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field,.gjs-sm-sector .gjs-sm-list.gjs-clm-field,.gjs-sm-sector .gjs-sm-select.gjs-clm-field{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 0 rgba(255,255,255,.1);color:rgba(255,255,255,.7);border-radius:2px;box-sizing:border-box;padding:0 5px}.gjs-clm-tags .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-composite{border-radius:2px;background-color:rgba(0,0,0,.1);border:1px solid rgba(0,0,0,.25)}.gjs-clm-tags .gjs-clm-select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field{padding:0}.gjs-clm-tags .gjs-clm-select select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select select,.gjs-clm-tags .gjs-sm-select.gjs-clm-field select,.gjs-sm-sector .gjs-clm-select select,.gjs-sm-sector .gjs-sm-field.gjs-sm-select select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field select{height:20px}.gjs-clm-tags .gjs-clm-select option,.gjs-clm-tags .gjs-sm-field.gjs-sm-select option,.gjs-clm-tags .gjs-sm-select.gjs-clm-field option,.gjs-sm-sector .gjs-clm-select option,.gjs-sm-sector .gjs-sm-field.gjs-sm-select option,.gjs-sm-sector .gjs-sm-select.gjs-clm-field option{padding:3px 0}.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-list.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-list.gjs-clm-field{width:auto;padding:0;overflow:hidden;float:left}.gjs-clm-tags .gjs-sm-field.gjs-sm-list input,.gjs-clm-tags .gjs-sm-list.gjs-clm-field input,.gjs-sm-sector .gjs-sm-field.gjs-sm-list input,.gjs-sm-sector .gjs-sm-list.gjs-clm-field input{display:none}.gjs-clm-tags .gjs-sm-field.gjs-sm-list label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field label,.gjs-sm-sector .gjs-sm-field.gjs-sm-list label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field label{cursor:pointer;padding:5px;display:block}.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label,.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label{background-color:rgba(255,255,255,.2)}.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-icon,.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-icon{background-repeat:no-repeat;background-position:center;text-shadow:none;line-height:normal}.gjs-clm-tags .gjs-sm-field.gjs-sm-integer select,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field select,.gjs-sm-sector .gjs-sm-field.gjs-sm-integer select,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field select{width:auto;padding:0}.gjs-clm-tags .gjs-sm-list .gjs-sm-el,.gjs-sm-sector .gjs-sm-list .gjs-sm-el{float:left;border-left:1px solid rgba(0,0,0,.3)}.gjs-clm-tags .gjs-sm-list .gjs-sm-el:first-child,.gjs-sm-sector .gjs-sm-list .gjs-sm-el:first-child{border:none}.gjs-clm-tags .gjs-sm-list .gjs-sm-el:hover,.gjs-sm-sector .gjs-sm-list .gjs-sm-el:hover{background:rgba(0,0,0,.3)}.gjs-clm-tags .gjs-sm-properties,.gjs-sm-sector .gjs-sm-properties{font-size:11px;padding:10px 5px}.gjs-clm-tags .gjs-sm-property,.gjs-sm-sector .gjs-sm-property{box-sizing:border-box;float:left;width:50%;margin-bottom:5px;padding:0 5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-composite,.gjs-clm-tags .gjs-sm-property.gjs-sm-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-list,.gjs-clm-tags .gjs-sm-property.gjs-sm-stack,.gjs-sm-sector .gjs-sm-property.gjs-sm-composite,.gjs-sm-sector .gjs-sm-property.gjs-sm-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-list,.gjs-sm-sector .gjs-sm-property.gjs-sm-stack{width:100%}.gjs-clm-tags .gjs-sm-property .gjs-sm-btn,.gjs-sm-sector .gjs-sm-property .gjs-sm-btn{background-color:rgba(33,33,33,.3);border-radius:2px;box-shadow:1px 1px 0 rgba(5,5,5,.3),1px 1px 0 rgba(43,43,43,.3) inset;padding:5px;position:relative;text-align:center;height:auto;width:100%;cursor:pointer;color:#ddd;box-sizing:border-box;text-shadow:-1px -1px 0 rgba(0,0,0,.3);border:none;opacity:.85;filter:alpha(opacity=85)}.gjs-clm-tags .gjs-sm-property .gjs-sm-btn-c,.gjs-sm-sector .gjs-sm-property .gjs-sm-btn-c{box-sizing:border-box;float:left;width:100%;padding:0 5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box{background-color:rgba(255,255,255,.05);border-radius:2px;margin-top:5px;position:relative;overflow:hidden}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show{border:1px solid rgba(252,252,252,.05);padding:3px 5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{display:block}.gjs-clm-tags .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file{height:50px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file{background-size:auto 100%;background-repeat:no-repeat;background-position:center center}.gjs-clm-tags .gjs-sm-property .gjs-sm-layers,.gjs-sm-sector .gjs-sm-property .gjs-sm-layers{margin-top:5px;min-height:30px}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer{background-color:rgba(255,255,255,.055);border-radius:2px;box-shadow:1px 1px 0 rgba(0,0,0,.2),1px 1px 0 rgba(255,255,255,.055) inset;margin:2px;padding:7px;position:relative;cursor:pointer}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{height:15px;position:absolute;right:27px;top:6px;width:15px}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box{border-radius:2px}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.5;filter:alpha(opacity=50)}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover{opacity:.8;filter:alpha(opacity=80)}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview{background-color:#fff;height:100%;width:100%;background-size:cover!important}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-active,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-active{background-color:rgba(255,255,255,.12)}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box{display:none}.gjs-clm-tags #gjs-sm-text-shadow #gjs-sm-preview::after,.gjs-sm-sector #gjs-sm-text-shadow #gjs-sm-preview::after{color:#000;content:"T";font-weight:900;line-height:17px;padding:0 4px}.gjs-clm-tags .gjs-sm-stack .gjs-sm-properties,.gjs-sm-sector .gjs-sm-stack .gjs-sm-properties{padding-top:5px}.gjs-clm-tags .gjs-sm-stack #gjs-sm-add,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add{background:0 0;border:none;cursor:pointer;font-size:22px;line-height:10px;position:absolute;right:0;top:-20px;opacity:.75}.gjs-clm-tags .gjs-sm-stack #gjs-sm-add:hover,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add:hover{opacity:1;filter:alpha(opacity=100)}.gjs-clm-tags .gjs-sm-colorp-c,.gjs-sm-sector .gjs-sm-colorp-c{height:100%;width:20px;position:absolute;right:0;top:0;box-sizing:border-box;border-radius:2px;padding:2px}.gjs-clm-tags .gjs-sm-colorp-c .gjs-checker-bg,.gjs-sm-sector .gjs-sm-colorp-c .gjs-checker-bg{height:100%;width:100%;border-radius:1px}.gjs-clm-tags .gjs-sm-color-picker,.gjs-sm-sector .gjs-sm-color-picker{background-color:#ddd;cursor:pointer;height:16px;width:100%;margin-top:-16px;box-shadow:0 0 1px rgba(0,0,0,.3);border-radius:1px}.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-upload,.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-upload{left:0;top:0;position:absolute;width:100%;opacity:0;cursor:pointer}.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-label,.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-label{padding:2px 0}.gjs-sm-layer>#gjs-sm-move{opacity:.7;filter:alpha(opacity=70);cursor:move;font-size:12px;float:left;margin:0 5px 0 0}.gjs-sm-layer>#gjs-sm-move:hover{opacity:.9;filter:alpha(opacity=90)}.gjs-blocks-c{display:flex;flex-wrap:wrap;justify-content:flex-start}.gjs-block{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;width:45%;padding:1em;box-sizing:border-box;height:90px;cursor:all-scroll;font-size:11px;font-weight:lighter;display:flex;flex-direction:column;justify-content:flex-end;border:1px solid rgba(0,0,0,.2);border-radius:3px;margin:10px 2.5% 5px;box-shadow:0 1px 0 0 rgba(0,0,0,.15);transition:all .2s ease 0s;transition-property:box-shadow,color}.gjs-block:hover{box-shadow:0 3px 4px 0 rgba(0,0,0,.15)}.gjs-block.fa{font-size:2em;line-height:2em;padding:11px}.gjs-block-label{line-height:normal;font-size:.65rem;font-weight:400}.gjs-block.gjs-bdrag{width:auto;padding:0}.gjs-clm-tags{font-size:11px;padding:10px 5px}.gjs-clm-tags #gjs-clm-label,.gjs-clm-tags #gjs-clm-sel{padding:7px 0;float:left}.gjs-clm-tags #gjs-clm-sel{font-style:italic;margin-left:5px}.gjs-clm-tags #gjs-clm-status-c{float:right}.gjs-clm-tags #gjs-clm-tags-field{clear:both;padding:5px;margin-bottom:5px}.gjs-clm-tags #gjs-clm-tags-c{display:inline-block;vertical-align:top}.gjs-clm-tags #gjs-clm-add-tag{background-color:rgba(255,255,255,.15);border-radius:2px;padding:5px 6px;box-shadow:1px 1px 0 rgba(255,255,255,.2) inset;border:1px solid rgba(0,0,0,.15);cursor:pointer}.gjs-clm-tags #gjs-clm-new{color:#ddd;padding:5px 6px;display:none}.gjs-clm-tags .gjs-clm-tag{background-color:#804f7b;border:1px solid #5a3857;box-shadow:1px 1px #9c6196 inset;text-shadow:1px 1px #6a4166;display:inline-block;border-radius:3px;margin:0 3px 3px 0;padding:4px;cursor:default}.gjs-clm-tags #gjs-clm-close{font-size:20px;line-height:0;cursor:pointer;color:rgba(255,255,255,.9)}.gjs-clm-tags #gjs-clm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-clm-tags #gjs-clm-checkbox{color:rgba(255,255,255,.9);vertical-align:middle;cursor:pointer;font-size:9px}.gjs-clm-tags #gjs-clm-tag-label{cursor:text}.gjs-clm-tags #gjs-clm-tag-label input{width:auto;padding:0 4px}.gjs-mdl-backlayer,.gjs-mdl-container{position:absolute;top:0;left:0;width:100%;height:100%}.gjs-mdl-backlayer{background-color:#000;z-index:1;opacity:.5;filter:alpha(opacity=50)}.gjs-mdl-container{z-index:10}.gjs-mdl-dialog{text-shadow:-1px -1px 0 rgba(0,0,0,.05);animation:gjs-slide-down 215ms;margin:30px auto 0;max-width:850px;width:90%;border-radius:3px;font-weight:lighter;position:relative;z-index:2}.gjs-mdl-dialog .gjs-mdl-btn-close{position:absolute;right:15px;top:5px}.gjs-mdl-active .gjs-mdl-dialog{animation:gjs-mdl-slide-down 216ms}.gjs-mdl-content,.gjs-mdl-header{padding:10px 15px;clear:both}.gjs-mdl-header{position:relative;border-bottom:1px solid rgba(0,0,0,.3);padding:15px 15px 7px}.gjs-mdl-content{border-top:1px solid rgba(255,255,255,.1)}.gjs-export-dl::after{content:"";clear:both;display:block;margin-bottom:10px}.gjs-am-assets{height:290px;overflow:auto;clear:both}.gjs-am-assets-header{padding:5px}.gjs-am-add-asset .gjs-am-add-field{width:70%;float:left}.gjs-am-add-asset button{width:25%;float:right}.gjs-am-add-field input{padding:6px}.gjs-am-assets-cont{background-color:rgba(0,0,0,.1);border-radius:3px;box-sizing:border-box;padding:10px;width:45%;float:right;height:325px;overflow:hidden}.gjs-am-assets-cont #gjs-am-preview-cont{position:relative;height:70px;width:30%;background-color:#444;border-radius:2px;float:left;overflow:hidden}.gjs-am-assets-cont #gjs-am-preview{position:absolute;background-position:center center;background-size:cover;background-repeat:no-repeat;height:100%;width:100%;z-index:1}.gjs-am-assets-cont #gjs-am-preview-bg{position:absolute;height:100%;width:100%;opacity:.5;filter:alpha(opacity=50);z-index:0}.gjs-am-assets-cont .gjs-am-highlight{background-color:rgba(255,255,255,.1)}.gjs-am-assets-cont .gjs-am-asset{border-bottom:1px solid rgba(0,0,0,.3);padding:5px;cursor:pointer;position:relative}.gjs-am-assets-cont .gjs-am-asset:hover #gjs-am-close{display:block}.gjs-am-assets-cont #gjs-am-close{position:absolute;right:5px;top:0;display:none}.gjs-am-assets-cont #gjs-am-meta{width:70%;float:left;font-size:12px;padding:5px 0 0 5px;box-sizing:border-box}.gjs-am-assets-cont #gjs-am-meta>div{margin-bottom:5px}.gjs-am-assets-cont #gjs-am-meta #gjs-am-dimensions{font-size:10px;opacity:.5;filter:alpha(opacity=50)}.gjs-am-file-uploader{width:55%;float:left}.gjs-am-file-uploader>form{background-color:rgba(0,0,0,.1);border:2px dashed;border-radius:3px;position:relative;text-align:center;margin-bottom:15px}#gjs-rte-toolbar .gjs-rte-btn.btn-info,.gjs-cm-editor #gjs-cm-title{background-color:rgba(0,0,0,.3)}.gjs-am-file-uploader>form.gjs-am-hover{border:2px solid #62c462;color:#75cb75}.gjs-am-file-uploader>form.gjs-am-disabled{border-color:red}.gjs-am-file-uploader>form #gjs-am-uploadFile{opacity:0;filter:alpha(opacity=0);padding:150px 10px;width:100%;box-sizing:border-box}.gjs-am-file-uploader #gjs-am-title{position:absolute;padding:150px 10px;width:100%}.gjs-cm-editor-c{float:left;box-sizing:border-box;width:50%}.gjs-cm-editor-c .CodeMirror{height:450px}.gjs-cm-editor{font-size:12px}.gjs-cm-editor#gjs-cm-htmlmixed{padding-right:10px;border-right:1px solid rgba(0,0,0,.3)}.gjs-cm-editor#gjs-cm-htmlmixed #gjs-cm-title{color:#a97d44}.gjs-cm-editor#gjs-cm-css{padding-left:10px;border-left:1px solid rgba(255,255,255,.1)}.gjs-cm-editor#gjs-cm-css #gjs-cm-title{color:#ddca7e}.gjs-cm-editor #gjs-cm-title{font-size:12px;padding:5px 10px 3px;text-align:right}#gjs-rte-toolbar{display:none;border:1px solid rgba(0,0,0,.3);position:absolute;border-radius:3px;overflow:hidden;z-index:10}#gjs-rte-toolbar .gjs-rte-btn{display:inline-block;padding:5px;min-width:25px;border-right:1px solid rgba(0,0,0,.3);text-align:center;cursor:pointer;outline:0}#gjs-rte-toolbar .gjs-rte-btn:last-child{border-right:none}#gjs-rte-toolbar .gjs-rte-btn:hover{background-color:rgba(255,255,255,.1)}#gjs-rte-toolbar select{height:16px}.sp-hue,.sp-slider{cursor:row-resize}.sp-color,.sp-dragger{cursor:crosshair}.sp-alpha-handle,.sp-alpha-inner{cursor:col-resize}.sp-hue{left:90%}.sp-color{right:15%}.sp-container{border:1px solid rgba(0,0,0,.3);box-shadow:0 0 7px rgba(0,0,0,.3);border-radius:3px}.sp-picker-container{border:none}.colpick_dark .colpick_color{outline:rgba(0,0,0,.3) solid 1px}.sp-cancel,.sp-cancel:hover{bottom:-8px;color:#777!important;font-size:25px;left:0;position:absolute;text-decoration:none}.sp-alpha-handle{border:1px solid #555;width:4px}.sp-color,.sp-hue{border:1px solid #333}.sp-slider{border:1px solid #555;height:3px;left:-4px;width:22px}.sp-dragger{background:0 0;box-shadow:0 0 0 1px #111}.sp-button-container{float:none;width:100%;position:relative;text-align:right}.sp-container button,.sp-container button:active,.sp-container button:hover{background:rgba(0,0,0,.3);border-color:rgba(0,0,0,.3);color:#ddd;text-shadow:none;box-shadow:none;padding:3px 5px}.sp-palette-container{border:none;float:none;margin:0;padding:5px 10px 0}.sp-palette .sp-thumb-el,.sp-palette .sp-thumb-el:hover{border:1px solid rgba(0,0,0,.9)}.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:rgba(0,0,0,.9)}.gjs-hidden{display:none}@keyframes gjs-slide-down{0%{transform:translate(0,-3rem);opacity:0}100%{transform:translate(0,0);opacity:1}}@keyframes gjs-slide-up{0%{transform:translate(0,0);opacity:1}100%{transform:translate(0,-3rem);opacity:0}} \ No newline at end of file + */@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.5.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2?v=4.5.0) format("woff2"),url(../fonts/fontawesome-webfont.woff?v=4.5.0) format("woff"),url(../fonts/fontawesome-webfont.ttf?v=4.5.0) format("truetype"),url(../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;-webkit-font-smoothing:antialiased}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right,.pull-right{float:right}.pull-left{float:left}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.gjs-clm-tags #gjs-clm-close,.gjs-freezed,.gjs-nv-freezed,.opac50{opacity:.5;filter:alpha(opacity=50)}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}@font-face{font-family:font3336;src:url(../fonts/main-fonts.eot?v=20);src:url(../fonts/main-fonts.woff?v=20) format("woff"),url(../fonts/main-fonts.ttf?v=20) format("truetype"),url(../fonts/main-fonts.svg?v=20) format("svg"),url(../fonts/main-fonts.eot?v=20) format("embedded-opentype");font-weight:400;font-style:normal}.gjs-fonts::before{display:block;font:normal normal normal 14px font3336;-webkit-font-smoothing:antialiased;font-size:5em}.gjs-block-label,.gjs-editor,.gjs-mdl-container{font-family:Helvetica,sans-serif}.gjs-f-b1::before{content:'Q'}.gjs-f-b2::before{content:'W'}.gjs-f-b3::before{content:'E'}.gjs-f-b37::before{content:'R'}.gjs-f-hero::before{content:'T'}.gjs-f-h1p::before{content:'y'}.gjs-f-3ba::before{content:'u'}.gjs-f-image::before{content:'I'}.gjs-f-text::before{content:'o'}.gjs-f-quo::before{content:'p'}.gjs-f-button::before{content:'B'}.gjs-f-divider::before{content:'D'}.gjs-clm-tags #gjs-clm-new,.gjs-invis-invis,.gjs-no-app{background-color:transparent;border:none;color:inherit}.gjs-no-app{height:10px}.gjs-test::btn{color:'#fff'}.checker-bg,.gjs-checker-bg,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-field-colorp-c,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.gjs-grabbing,.gjs-grabbing *,.gjs-nav-comp-name,.gjs-no-user-select{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el,.gjs-margin-v-el,.gjs-no-pointer-events,.gjs-padding-v-el,.gjs-resizer-c{pointer-events:none}.gjs-bdrag,.gjs-drag-helper{pointer-events:none!important;position:absolute!important;z-index:10!important}#gjs-rte-toolbar,.gjs-bg-main,.gjs-block,.gjs-clm-select option,.gjs-clm-tags .gjs-sm-colorp-c,.gjs-field-select option,.gjs-mdl-dialog,.gjs-nv-item .gjs-nv-title-c,.gjs-off-prv,.gjs-pn-panel,.gjs-select option,.gjs-sm-sector .gjs-sm-colorp-c,.gjs-sm-select option,.gjs-sm-unit option,.sp-container{background-color:#444}#gjs-rte-toolbar .gjs-rte-btn,.gjs-btn-prim,.gjs-btnt,.gjs-clm-tags .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add,.gjs-color-main,.gjs-mdl-dialog,.gjs-off-prv,.gjs-pn-btn,.gjs-pn-panel,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add{color:#ddd}.gjs-btnt.gjs-pn-active,.gjs-color-active,.gjs-pn-btn.gjs-pn-active{color:#f8f8f8}.gjs-bdrag{width:auto}.gjs-drag-helper{background-color:#3b97e3!important;transform:scale(.3)!important;transform-origin:top left!important;-webkit-transform-origin:top left!important;margin:15px!important;transition:none!important;outline:0!important}.gjs-grabbing,.gjs-grabbing *{cursor:grabbing!important;cursor:-webkit-grabbing!important}.gjs-off-prv{position:relative;z-index:10;padding:5px;cursor:pointer}.gjs-editor-cont ::-webkit-scrollbar-track{background:rgba(0,0,0,.1)}.gjs-editor-cont ::-webkit-scrollbar-thumb{background-color:rgba(255,255,255,.2)}.gjs-editor-cont ::-webkit-scrollbar{width:8px}.clear{clear:both}.gjs-clm-tags #gjs-clm-close,.gjs-clm-tags #gjs-clm-tag-label,.gjs-com-no-select,.gjs-com-no-select img,.no-select{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-editor{background-color:#444;position:relative;height:100%}.gjs-btn-prim,.gjs-btn-prim:active{background-color:rgba(255,255,255,.1)}.gjs-freezed,.gjs-nv-freezed{pointer-events:none}.gjs-btn-prim{border-radius:2px;cursor:pointer;padding:.5em;border:none}.gjs-input,.gjs-select{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.1);border-radius:2px;box-shadow:1px 1px 0 rgba(255,255,255,.1);color:#ddd;padding:.5em 1em}div.gjs-select{padding:0}.gjs-select select{padding-right:10px}.gjs-select select:-moz-focusring,.gjs-select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,.7)}.gjs-btn-prim:focus,.gjs-button:focus,.gjs-input:focus,.gjs-select select:focus,.gjs-select:focus{outline:0}.gjs-traits-label{border-bottom:1px solid rgba(0,0,0,.3);font-size:13px;font-weight:lighter;margin-bottom:5px;padding:10px;text-align:left}.gjs-trt-trait{display:flex;justify-content:start;padding:5px 10px;font-size:.75em;font-weight:lighter}.gjs-trt-trait .gjs-label{width:30%;text-align:left}.gjs-trt-trait .gjs-field{width:70%}.gjs-cv-canvas{background-color:rgba(0,0,0,.15);position:absolute;width:85%;height:100%;bottom:0;left:0;padding-top:40px;z-index:1}.gjs-cv-canvas>iframe{height:100%;outline:0;width:100%;border:none;margin:0 auto;display:block}.gjs-cv-canvas .gjs-ghost{display:none;pointer-events:none;background-color:#5b5b5b;border:2px dashed #ccc;position:absolute;z-index:10;opacity:.55;filter:alpha(opacity=55)}.gjs-cv-canvas .gjs-highlighter,.gjs-cv-canvas .gjs-highlighter-sel{position:absolute;outline:#3b97e3 solid 1px;pointer-events:none}.gjs-cv-canvas .gjs-highlighter-warning{outline:#ffca6f solid 3px}.gjs-cv-canvas .gjs-highlighter-sel{outline:#3b97e3 solid 3px}.gjs-cv-canvas #gjs-tools{width:100%;position:absolute;top:0;left:0;outline:0}.gjs-cv-canvas>div:first-child{background-color:#fff;position:relative;height:100%;overflow:auto;width:100%}.dragged,.gjs-resizer-c,.gjs-resizer-h,.gjs-toolbar{position:absolute}.gjs-frame{transition:width .35s ease}.gjs-toolbar{background-color:#3b97e3;color:#fff;z-index:10}.gjs-toolbar-item{padding:5px 7px;font-size:.8rem;cursor:pointer}.gjs-resizer-c{z-index:9}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el,.gjs-margin-v-el,.gjs-padding-v-el{opacity:.1;filter:alpha(opacity=10);position:absolute;background-color:#ff0}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{opacity:.2;filter:alpha(opacity=20)}.gjs-fixedpadding-v-el,.gjs-padding-v-el{background-color:navy}.gjs-resizer-h{pointer-events:all;border:3px solid #3b97e3;width:10px;height:10px;background-color:#fff;margin:-5px}.gjs-resizer-h-tl{top:0;left:0;cursor:nwse-resize}.gjs-resizer-h-tr{top:0;right:0;cursor:nesw-resize}.gjs-resizer-h-tc{top:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-cl,.gjs-resizer-h-cr{margin:auto -5px;cursor:ew-resize;bottom:0;top:0}.gjs-resizer-h-cl{left:0}.gjs-resizer-h-cr{right:0}.gjs-resizer-h-bl{bottom:0;left:0;cursor:nesw-resize}.gjs-resizer-h-bc{bottom:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-br{bottom:0;right:0;cursor:nwse-resize}.gjs-resizing .gjs-badge,.gjs-resizing .gjs-highlighter{display:none!important}.gjs-resizing-tl *{cursor:nwse-resize!important}.gjs-resizing-tr *{cursor:nesw-resize!important}.gjs-resizing-tc *{cursor:ns-resize!important}.gjs-resizing-cl *,.gjs-resizing-cr *{cursor:ew-resize!important}.gjs-resizing-bl *{cursor:nesw-resize!important}.gjs-resizing-bc *{cursor:ns-resize!important}.gjs-resizing-br *{cursor:nwse-resize!important}.btn-cl,.gjs-am-assets-cont #gjs-am-close,.gjs-mdl-dialog .gjs-mdl-btn-close{opacity:.3;filter:alpha(opacity=30);font-size:25px;cursor:pointer}.btn-cl:hover,.gjs-am-assets-cont #gjs-am-close:hover,.gjs-mdl-dialog .gjs-mdl-btn-close:hover{opacity:.7;filter:alpha(opacity=70)}.dragged,.gjs-nv-opac50{opacity:.5;filter:alpha(opacity=50)}#commands.panel{min-width:35px;height:100%;z-index:3}#options.panel{z-index:4;bottom:0}#views.panel{width:16.5%;font-weight:lighter;color:#ddd;right:0;top:0;z-index:3;height:100%;padding:0}#views.panel .c{height:100%}#commands.panel,#options.panel{width:3.5%;left:0}#options .c{display:table;margin:0 auto}body.dragging,body.dragging *{cursor:move!important}.dragged{z-index:2000}ol.example li.placeholder{position:relative}ol.example li.placeholder:before{position:absolute}.no-dots,.ui-resizable-handle{border:none!important;margin:0!important;outline:0!important}.gjs-com-dashed *{outline:#888 dashed 1px;outline-offset:-2px}.gjs-cv-canvas .gjs-comp-selected{outline:#3b97e3 solid 3px!important}.gjs-com-hover,div.gjs-com-hover{outline:#3b97e3 solid 1px}.gjs-com-hover-delete,div.gjs-com-hover-delete{outline:#dd3636 solid 2px;opacity:.5;filter:alpha(opacity=50)}.gjs-com-hover-move,div.gjs-com-hover-move{outline:#ffca6f solid 3px}.gjs-badge,.gjs-com-badge,.gjs-com-badge-red{pointer-events:none;background-color:#3b97e3;color:#fff;padding:2px 5px;position:absolute;z-index:1;font-size:12px;outline:0;display:none}.gjs-com-badge-red{background-color:#dd3636}.gjs-badge-warning{background-color:#ffca6f}.gjs-com-placeholder,.gjs-nv-placeholder,.gjs-placeholder{position:absolute;z-index:10;pointer-events:none;display:none}.gjs-nv-placeholder,.gjs-placeholder{border-style:solid!important;border-color:#62c462;outline:0;box-sizing:border-box}.gjs-com-placeholder-int,.gjs-nv-placeholder-int,.gjs-placeholder-int{background-color:#62c462;box-shadow:0 0 3px rgba(0,0,0,.2);height:100%;width:100%;pointer-events:none;padding:1.5px;outline:0}.gjs-pn-panel{display:inline-block;padding:5px;position:absolute;text-align:center;z-index:3}.gjs-pn-panel#gjs-pn-commands,.gjs-pn-panel#gjs-pn-options2{width:85%;left:0;top:0;box-shadow:0 0 5px rgba(0,0,0,.3)}.gjs-pn-panel#gjs-pn-options{right:15%;top:0}.gjs-pn-panel#gjs-pn-options2{bottom:150px;height:auto}.gjs-pn-panel .icon-redo,.gjs-pn-panel .icon-undo{font-size:20px;height:30px;width:25px}.gjs-pn-panel#gjs-pn-views{border-bottom:2px solid rgba(0,0,0,.3);right:0;width:15%;z-index:4}.gjs-pn-panel#gjs-pn-views-container{height:100%;padding:42px 0 0;right:0;width:15%;overflow:auto;box-shadow:0 0 5px rgba(0,0,0,.3)}.gjs-pn-buttons{align-items:center;display:flex;justify-content:center}.gjs-btnt,.gjs-pn-btn{height:30px;width:30px;line-height:21px;background-color:transparent;border:none;font-size:18px;margin-right:5px;border-radius:2px;cursor:pointer;padding:5px;position:relative}.gjs-btnt.gjs-pn-active,.gjs-pn-btn.gjs-pn-active{background-color:rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.25) inset}.gjs-btnt>.gjs-pn-arrow-rd,.gjs-pn-btn>.gjs-pn-arrow-rd{border-bottom:5px solid rgba(255,255,255,.7);border-left:5px solid transparent;bottom:2px;right:2px;position:absolute}.gjs-btnt>.gjs-pn-buttons,.gjs-pn-btn>.gjs-pn-buttons{background-color:#444;border-radius:2px;position:absolute;display:none;left:50px;top:0;padding:5px}.gjs-btnt>.gjs-pn-buttons.gjs-pn-visible,.gjs-pn-btn>.gjs-pn-buttons.gjs-pn-visible{display:block}.gjs-btnt>.gjs-pn-buttons>.gjs-pn-arrow-l,.gjs-pn-btn>.gjs-pn-buttons>.gjs-pn-arrow-l{border-bottom:5px solid transparent;border-right:5px solid #444;border-top:5px solid transparent;left:-5px;top:15px;position:absolute}.gjs-nv-navigator{position:relative;height:100%}.gjs-nv-navigator #gjs-nv-placeholder{width:100%;position:absolute}.gjs-nv-navigator #gjs-nv-placeholder #gjs-nv-plh-int{height:100%;padding:1px}.gjs-nv-navigator #gjs-nv-placeholder #gjs-nv-plh-int.gjs-nv-insert{background-color:#62c462}.gjs-nv-navigator .gjs-nv-item{font-weight:lighter;text-align:left;position:relative;background-color:rgba(0,0,0,.1)}.gjs-nv-navigator .gjs-nv-item.gjs-nv-hide{opacity:.55;filter:alpha(opacity=55)}.gjs-nv-navigator .gjs-nv-item #gjs-nv-counter{font-size:10px;position:absolute;right:27px;top:9px}.gjs-nv-navigator .gjs-nv-item #gjs-nv-btn-eye{height:auto!important;width:auto!important;font-size:13px;left:0;top:0;padding:7px 5px 7px 10px;position:absolute;cursor:pointer;z-index:1}.gjs-nv-item #gjs-nv-caret{font-size:7px;width:8px;padding:5px;cursor:pointer;opacity:.7;filter:alpha(opacity=70)}.gjs-nv-item #gjs-nv-caret:hover{opacity:1;filter:alpha(opacity=100)}.gjs-nv-title{background-color:rgba(0,0,0,.1);font-size:11px;letter-spacing:1px;padding:3px 10px 5px 30px;border-bottom:1px solid rgba(0,0,0,.3);border-top:1px solid rgba(255,255,255,.1);display:flex;align-items:center}.gjs-nv-item .gjs-nv-children .gjs-nv-title{border-left:1px solid rgba(5,5,5,.3)}.gjs-nv-item>.gjs-nv-children{margin-left:7px;display:none}.gjs-nv-item.open>.gjs-nv-children{display:block}.gjs-nv-item>.gjs-nv-no-chld>#gjs-nv-caret::before{content:''}.gjs-nv-no-chld>#gjs-nv-caret{display:none}.gjs-nv-item>#gjs-nv-move{position:absolute;cursor:move;font-size:12px;right:0;top:0;padding:7px 10px 7px 5px}.gjs-nv-selected .gjs-nv-title{background-color:rgba(255,255,255,.1)}.gjs-nv-nav-item-edit{visibility:hidden;padding:5px;font-size:10px;opacity:.7;filter:alpha(opacity=70)}.gjs-nv-nav-item-edit:hover{opacity:1;filter:alpha(opacity=100)}.gjs-nv-title-c:hover .gjs-nv-nav-item-edit{visibility:visible;cursor:pointer}.gjs-nav-comp-name{padding:5px;box-sizing:content-box}.btn.expand,.gjs-nv-navigator .gjs-nv-item .expand#gjs-nv-btn-eye{background-image:none}.gjs-comp-image-placeholder{display:block;background-color:#f5f5f5;color:#777;height:50px;width:50px;line-height:50px;outline:#ffca6f solid 3px;outline-offset:-3px;text-align:center;font-size:16.67px;cursor:pointer}.gjs-field-checkbox input,.gjs-radio-item input{display:none}.gjs-comp-image-placeholder.fa-picture-o::after{content:"\f03e"}.gjs-label{line-height:18px}.gjs-field{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 0 rgba(255,255,255,.1);border-radius:2px;box-sizing:border-box;padding:0;position:relative}.gjs-field input,.gjs-field select,.gjs-field textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;color:rgba(255,255,255,.7);border:none;background-color:transparent;box-sizing:border-box;width:100%;position:relative;padding:3px 4px 4px;z-index:1}.gjs-field textarea{resize:vertical}.gjs-field select{height:20px;padding-right:12px}.gjs-field option{padding:3px 0}.gjs-field .gjs-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;z-index:0}.gjs-field .gjs-d-s-arrow{bottom:7px;border-top:4px solid rgba(255,255,255,.7);position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-field-color input{padding-right:22px;box-sizing:border-box}.gjs-field-colorp{border-left:1px solid rgba(0,0,0,.3);box-sizing:border-box;height:100%;padding:2px;position:absolute;right:0;top:0;width:22px;z-index:10}.gjs-field-colorp .gjs-checker-bg,.gjs-field-colorp .gjs-field-colorp-c{height:100%;width:100%;border-radius:1px}.gjs-field-colorp-c{height:100%;position:relative;width:100%}.gjs-field-color-picker{background-color:#ddd;cursor:pointer;height:100%;width:100%;box-shadow:0 0 1px rgba(0,0,0,.3);border-radius:1px;position:absolute;top:0}.gjs-field-radio{float:left;overflow:hidden;padding:0;width:auto}.gjs-field-checkbox{padding:0;width:auto!important}.gjs-field-checkbox input:checked+.gjs-chk-icon{border-color:rgba(255,255,255,.5);border-width:0 2px 2px 0;border-style:solid}.gjs-radio-item{float:left;border-left:1px solid rgba(0,0,0,.3)}.gjs-radio-item:first-child{border:none}.gjs-radio-item:hover{background:rgba(0,0,0,.3)}.gjs-radio-item input:checked+.gjs-radio-item-label{background-color:rgba(255,255,255,.2)}.gjs-radio-item-label{cursor:pointer;display:block;padding:5px}.gjs-field-units{position:absolute;right:0;top:0}.gjs-field-units select{padding:0 12px 0 0}.gjs-field-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,.7);cursor:pointer}.gjs-field-arrows{z-index:10;cursor:ns-resize;height:100%;position:absolute;right:0;top:0;width:9px}.gjs-field-arrow-d,.gjs-field-arrow-u{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.7);bottom:4px;cursor:pointer}.gjs-field-arrow-u{border-bottom:4px solid rgba(255,255,255,.7);border-top:none;top:4px}.gjs-field-select{padding:0}.gjs-field-range{background-color:transparent;border:none;box-shadow:none;padding:0}.gjs-field-range input{margin:0}.gjs-field-range input::-moz-range-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,.3);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-5px;height:10px;width:10px;border:1px solid rgba(0,0,0,.3);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-ms-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,.3);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-moz-range-track{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.15);border-radius:1px;height:2px}.gjs-field-range input::-webkit-slider-runnable-track{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.15);border-radius:1px;height:2px}.gjs-field-range input::-ms-track{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.15);border-radius:1px;height:2px}.gjs-chk-icon{-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);box-sizing:border-box;display:block;height:14px;margin:0 5px;width:6px;cursor:pointer}.gjs-add-trasp{background:0 0;border:none;color:#ddd;cursor:pointer;font-size:1em;border-radius:2px;opacity:.75;filter:alpha(opacity=75)}.gjs-add-trasp:hover{opacity:1;filter:alpha(opacity=100)}.gjs-add-trasp:active{background-color:rgba(0,0,0,.2)}.gjs-devices-c{display:flex;align-items:center;padding:4px}.gjs-devices-c .gjs-device-label{flex-grow:2;font-size:.7em;text-align:left;margin-right:10px}.gjs-devices-c .gjs-select{flex-grow:20}.gjs-devices-c .gjs-add-trasp{flex-grow:1;margin-left:5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-sm-close-btn,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.2;filter:alpha(opacity=20)}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover,.gjs-sm-close-btn:hover,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-sm-header{font-size:11px;font-weight:lighter;padding:10px}.gjs-clm-tags,.gjs-sm-sector{clear:both;border-bottom:1px solid rgba(0,0,0,.3);font-weight:lighter;text-align:left}.gjs-clm-tags #gjs-sm-caret,.gjs-sm-sector #gjs-sm-caret{padding-right:5px;font-size:11px}.gjs-clm-tags .gjs-sm-title,.gjs-sm-sector .gjs-sm-title{background-color:rgba(0,0,0,.1);font-size:13px;letter-spacing:1px;padding:12px 10px 12px 20px;border-top:1px solid rgba(255,255,255,.1);cursor:pointer}.gjs-clm-tags .gjs-sm-label,.gjs-sm-sector .gjs-sm-label{margin:5px 5px 2px 0}.gjs-clm-tags .gjs-clm-field,.gjs-clm-tags .gjs-sm-field,.gjs-sm-sector .gjs-clm-field,.gjs-sm-sector .gjs-sm-field{width:100%;position:relative}.gjs-clm-tags .gjs-clm-field input,.gjs-clm-tags .gjs-clm-field select,.gjs-clm-tags .gjs-sm-field input,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field input,.gjs-sm-sector .gjs-clm-field select,.gjs-sm-sector .gjs-sm-field input,.gjs-sm-sector .gjs-sm-field select{background-color:transparent;color:rgba(255,255,255,.7);border:none;width:100%}.gjs-clm-tags .gjs-clm-field input,.gjs-clm-tags .gjs-sm-field input,.gjs-sm-sector .gjs-clm-field input,.gjs-sm-sector .gjs-sm-field input{box-sizing:border-box}.gjs-clm-tags .gjs-clm-field select,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field select,.gjs-sm-sector .gjs-sm-field select{position:relative;z-index:1;-webkit-appearance:none;-moz-appearance:none;appearance:none}.gjs-clm-tags .gjs-clm-field select::-ms-expand,.gjs-clm-tags .gjs-sm-field select::-ms-expand,.gjs-sm-sector .gjs-clm-field select::-ms-expand,.gjs-sm-sector .gjs-sm-field select::-ms-expand{display:none}.gjs-clm-tags .gjs-clm-field select:-moz-focusring,.gjs-clm-tags .gjs-sm-field select:-moz-focusring,.gjs-sm-sector .gjs-clm-field select:-moz-focusring,.gjs-sm-sector .gjs-sm-field select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,.7)}.gjs-clm-tags .gjs-clm-field input:focus,.gjs-clm-tags .gjs-clm-field select:focus,.gjs-clm-tags .gjs-sm-field input:focus,.gjs-clm-tags .gjs-sm-field select:focus,.gjs-sm-sector .gjs-clm-field input:focus,.gjs-sm-sector .gjs-clm-field select:focus,.gjs-sm-sector .gjs-sm-field input:focus,.gjs-sm-sector .gjs-sm-field select:focus{outline:0}.gjs-clm-tags .gjs-clm-field .gjs-sm-unit,.gjs-clm-tags .gjs-sm-field .gjs-sm-unit,.gjs-sm-sector .gjs-clm-field .gjs-sm-unit,.gjs-sm-sector .gjs-sm-field .gjs-sm-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,.7);cursor:pointer}.gjs-clm-tags .gjs-clm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;cursor:ns-resize}.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow{cursor:pointer}.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow{border-bottom:4px solid rgba(255,255,255,.7);top:4px}.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow{border-top:4px solid rgba(255,255,255,.7);bottom:4px}.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow{bottom:7px}.gjs-clm-tags .gjs-clm-select,.gjs-clm-tags .gjs-sm-color.gjs-clm-field,.gjs-clm-tags .gjs-sm-field.gjs-sm-color,.gjs-clm-tags .gjs-sm-field.gjs-sm-input,.gjs-clm-tags .gjs-sm-field.gjs-sm-integer,.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-input.gjs-clm-field,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field,.gjs-clm-tags .gjs-sm-list.gjs-clm-field,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-sm-sector .gjs-sm-color.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-color,.gjs-sm-sector .gjs-sm-field.gjs-sm-input,.gjs-sm-sector .gjs-sm-field.gjs-sm-integer,.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-input.gjs-clm-field,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field,.gjs-sm-sector .gjs-sm-list.gjs-clm-field,.gjs-sm-sector .gjs-sm-select.gjs-clm-field{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 0 rgba(255,255,255,.1);color:rgba(255,255,255,.7);border-radius:2px;box-sizing:border-box;padding:0 5px}.gjs-clm-tags .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-composite{border-radius:2px;background-color:rgba(0,0,0,.1);border:1px solid rgba(0,0,0,.25)}.gjs-clm-tags .gjs-clm-select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field{padding:0}.gjs-clm-tags .gjs-clm-select select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select select,.gjs-clm-tags .gjs-sm-select.gjs-clm-field select,.gjs-sm-sector .gjs-clm-select select,.gjs-sm-sector .gjs-sm-field.gjs-sm-select select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field select{height:20px}.gjs-clm-tags .gjs-clm-select option,.gjs-clm-tags .gjs-sm-field.gjs-sm-select option,.gjs-clm-tags .gjs-sm-select.gjs-clm-field option,.gjs-sm-sector .gjs-clm-select option,.gjs-sm-sector .gjs-sm-field.gjs-sm-select option,.gjs-sm-sector .gjs-sm-select.gjs-clm-field option{padding:3px 0}.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-list.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-list.gjs-clm-field{width:auto;padding:0;overflow:hidden;float:left}.gjs-clm-tags .gjs-sm-field.gjs-sm-list input,.gjs-clm-tags .gjs-sm-list.gjs-clm-field input,.gjs-sm-sector .gjs-sm-field.gjs-sm-list input,.gjs-sm-sector .gjs-sm-list.gjs-clm-field input{display:none}.gjs-clm-tags .gjs-sm-field.gjs-sm-list label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field label,.gjs-sm-sector .gjs-sm-field.gjs-sm-list label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field label{cursor:pointer;padding:5px;display:block}.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label,.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label{background-color:rgba(255,255,255,.2)}.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-icon,.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-icon{background-repeat:no-repeat;background-position:center;text-shadow:none;line-height:normal}.gjs-clm-tags .gjs-sm-field.gjs-sm-integer select,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field select,.gjs-sm-sector .gjs-sm-field.gjs-sm-integer select,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field select{width:auto;padding:0}.gjs-clm-tags .gjs-sm-list .gjs-sm-el,.gjs-sm-sector .gjs-sm-list .gjs-sm-el{float:left;border-left:1px solid rgba(0,0,0,.3)}.gjs-clm-tags .gjs-sm-list .gjs-sm-el:first-child,.gjs-sm-sector .gjs-sm-list .gjs-sm-el:first-child{border:none}.gjs-clm-tags .gjs-sm-list .gjs-sm-el:hover,.gjs-sm-sector .gjs-sm-list .gjs-sm-el:hover{background:rgba(0,0,0,.3)}.gjs-clm-tags .gjs-sm-properties,.gjs-sm-sector .gjs-sm-properties{font-size:11px;padding:10px 5px}.gjs-clm-tags .gjs-sm-property,.gjs-sm-sector .gjs-sm-property{box-sizing:border-box;float:left;width:50%;margin-bottom:5px;padding:0 5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-composite,.gjs-clm-tags .gjs-sm-property.gjs-sm-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-list,.gjs-clm-tags .gjs-sm-property.gjs-sm-stack,.gjs-sm-sector .gjs-sm-property.gjs-sm-composite,.gjs-sm-sector .gjs-sm-property.gjs-sm-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-list,.gjs-sm-sector .gjs-sm-property.gjs-sm-stack{width:100%}.gjs-clm-tags .gjs-sm-property .gjs-sm-btn,.gjs-sm-sector .gjs-sm-property .gjs-sm-btn{background-color:rgba(33,33,33,.3);border-radius:2px;box-shadow:1px 1px 0 rgba(5,5,5,.3),1px 1px 0 rgba(43,43,43,.3) inset;padding:5px;position:relative;text-align:center;height:auto;width:100%;cursor:pointer;color:#ddd;box-sizing:border-box;text-shadow:-1px -1px 0 rgba(0,0,0,.3);border:none;opacity:.85;filter:alpha(opacity=85)}.gjs-clm-tags .gjs-sm-property .gjs-sm-btn-c,.gjs-sm-sector .gjs-sm-property .gjs-sm-btn-c{box-sizing:border-box;float:left;width:100%;padding:0 5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box{background-color:rgba(255,255,255,.05);border-radius:2px;margin-top:5px;position:relative;overflow:hidden}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show{border:1px solid rgba(252,252,252,.05);padding:3px 5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{display:block}.gjs-clm-tags .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file{height:50px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file{background-size:auto 100%;background-repeat:no-repeat;background-position:center center}.gjs-clm-tags .gjs-sm-property .gjs-sm-layers,.gjs-sm-sector .gjs-sm-property .gjs-sm-layers{margin-top:5px;min-height:30px}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer{background-color:rgba(255,255,255,.055);border-radius:2px;box-shadow:1px 1px 0 rgba(0,0,0,.2),1px 1px 0 rgba(255,255,255,.055) inset;margin:2px;padding:7px;position:relative;cursor:pointer}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{height:15px;position:absolute;right:27px;top:6px;width:15px}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box{border-radius:2px}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.5;filter:alpha(opacity=50)}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover{opacity:.8;filter:alpha(opacity=80)}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview{background-color:#fff;height:100%;width:100%;background-size:cover!important}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-active,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-active{background-color:rgba(255,255,255,.12)}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box{display:none}.gjs-clm-tags #gjs-sm-text-shadow #gjs-sm-preview::after,.gjs-sm-sector #gjs-sm-text-shadow #gjs-sm-preview::after{color:#000;content:"T";font-weight:900;line-height:17px;padding:0 4px}.gjs-clm-tags .gjs-sm-stack .gjs-sm-properties,.gjs-sm-sector .gjs-sm-stack .gjs-sm-properties{padding-top:5px}.gjs-clm-tags .gjs-sm-stack #gjs-sm-add,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add{background:0 0;border:none;cursor:pointer;font-size:22px;line-height:10px;position:absolute;right:0;top:-20px;opacity:.75}.gjs-clm-tags .gjs-sm-stack #gjs-sm-add:hover,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add:hover{opacity:1;filter:alpha(opacity=100)}.gjs-clm-tags .gjs-sm-colorp-c,.gjs-sm-sector .gjs-sm-colorp-c{height:100%;width:20px;position:absolute;right:0;top:0;box-sizing:border-box;border-radius:2px;padding:2px}.gjs-clm-tags .gjs-sm-colorp-c .gjs-checker-bg,.gjs-clm-tags .gjs-sm-colorp-c .gjs-field-colorp-c,.gjs-sm-sector .gjs-sm-colorp-c .gjs-checker-bg,.gjs-sm-sector .gjs-sm-colorp-c .gjs-field-colorp-c{height:100%;width:100%;border-radius:1px}.gjs-clm-tags .gjs-sm-color-picker,.gjs-sm-sector .gjs-sm-color-picker{background-color:#ddd;cursor:pointer;height:16px;width:100%;margin-top:-16px;box-shadow:0 0 1px rgba(0,0,0,.3);border-radius:1px}.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-upload,.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-upload{left:0;top:0;position:absolute;width:100%;opacity:0;cursor:pointer}.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-label,.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-label{padding:2px 0}.gjs-sm-layer>#gjs-sm-move{opacity:.7;filter:alpha(opacity=70);cursor:move;font-size:12px;float:left;margin:0 5px 0 0}.gjs-sm-layer>#gjs-sm-move:hover{opacity:.9;filter:alpha(opacity=90)}.gjs-blocks-c{display:flex;flex-wrap:wrap;justify-content:flex-start}.gjs-block{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;width:45%;padding:1em;box-sizing:border-box;height:90px;cursor:all-scroll;font-size:11px;font-weight:lighter;display:flex;flex-direction:column;justify-content:flex-end;border:1px solid rgba(0,0,0,.2);border-radius:3px;margin:10px 2.5% 5px;box-shadow:0 1px 0 0 rgba(0,0,0,.15);transition:all .2s ease 0s;transition-property:box-shadow,color}.gjs-block:hover{box-shadow:0 3px 4px 0 rgba(0,0,0,.15)}.gjs-block.fa{font-size:2em;line-height:2em;padding:11px}.gjs-block-label{line-height:normal;font-size:.65rem;font-weight:400}.gjs-block.gjs-bdrag{width:auto;padding:0}.gjs-clm-tags{font-size:11px;padding:10px 5px}.gjs-clm-tags #gjs-clm-label,.gjs-clm-tags #gjs-clm-sel{padding:7px 0;float:left}.gjs-clm-tags #gjs-clm-sel{font-style:italic;margin-left:5px}.gjs-clm-tags #gjs-clm-status-c{float:right}.gjs-clm-tags #gjs-clm-tags-field{clear:both;padding:5px;margin-bottom:5px}.gjs-clm-tags #gjs-clm-tags-c{display:inline-block;vertical-align:top}.gjs-clm-tags #gjs-clm-add-tag{background-color:rgba(255,255,255,.15);border-radius:2px;padding:5px 6px;box-shadow:1px 1px 0 rgba(255,255,255,.2) inset;border:1px solid rgba(0,0,0,.15);cursor:pointer}.gjs-clm-tags #gjs-clm-new{color:#ddd;padding:5px 6px;display:none}.gjs-clm-tags .gjs-clm-tag{background-color:#804f7b;border:1px solid #5a3857;box-shadow:1px 1px #9c6196 inset;text-shadow:1px 1px #6a4166;display:inline-block;border-radius:3px;margin:0 3px 3px 0;padding:4px;cursor:default}.gjs-clm-tags #gjs-clm-close{font-size:20px;line-height:0;cursor:pointer;color:rgba(255,255,255,.9)}.gjs-clm-tags #gjs-clm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-clm-tags #gjs-clm-checkbox{color:rgba(255,255,255,.9);vertical-align:middle;cursor:pointer;font-size:9px}.gjs-clm-tags #gjs-clm-tag-label{cursor:text}.gjs-clm-tags #gjs-clm-tag-label input{width:auto;padding:0 4px}.gjs-mdl-backlayer,.gjs-mdl-container{position:absolute;top:0;left:0;width:100%;height:100%}.gjs-mdl-backlayer{background-color:#000;z-index:1;opacity:.5;filter:alpha(opacity=50)}.gjs-mdl-container{z-index:10}.gjs-mdl-dialog{text-shadow:-1px -1px 0 rgba(0,0,0,.05);animation:gjs-slide-down 215ms;margin:30px auto 0;max-width:850px;width:90%;border-radius:3px;font-weight:lighter;position:relative;z-index:2}.gjs-mdl-dialog .gjs-mdl-btn-close{position:absolute;right:15px;top:5px}.gjs-mdl-active .gjs-mdl-dialog{animation:gjs-mdl-slide-down 216ms}.gjs-mdl-content,.gjs-mdl-header{padding:10px 15px;clear:both}.gjs-mdl-header{position:relative;border-bottom:1px solid rgba(0,0,0,.3);padding:15px 15px 7px}.gjs-mdl-content{border-top:1px solid rgba(255,255,255,.1)}.gjs-export-dl::after{content:"";clear:both;display:block;margin-bottom:10px}.gjs-am-assets{height:290px;overflow:auto;clear:both}.gjs-am-assets-header{padding:5px}.gjs-am-add-asset .gjs-am-add-field{width:70%;float:left}.gjs-am-add-asset button{width:25%;float:right}.gjs-am-add-field input{padding:6px}.gjs-am-assets-cont{background-color:rgba(0,0,0,.1);border-radius:3px;box-sizing:border-box;padding:10px;width:45%;float:right;height:325px;overflow:hidden}.gjs-am-assets-cont #gjs-am-preview-cont{position:relative;height:70px;width:30%;background-color:#444;border-radius:2px;float:left;overflow:hidden}.gjs-am-assets-cont #gjs-am-preview{position:absolute;background-position:center center;background-size:cover;background-repeat:no-repeat;height:100%;width:100%;z-index:1}.gjs-am-assets-cont #gjs-am-preview-bg{position:absolute;height:100%;width:100%;opacity:.5;filter:alpha(opacity=50);z-index:0}.gjs-am-assets-cont .gjs-am-highlight{background-color:rgba(255,255,255,.1)}.gjs-am-assets-cont .gjs-am-asset{border-bottom:1px solid rgba(0,0,0,.3);padding:5px;cursor:pointer;position:relative}.gjs-am-assets-cont .gjs-am-asset:hover #gjs-am-close{display:block}.gjs-am-assets-cont #gjs-am-close{position:absolute;right:5px;top:0;display:none}.gjs-am-assets-cont #gjs-am-meta{width:70%;float:left;font-size:12px;padding:5px 0 0 5px;box-sizing:border-box}.gjs-am-assets-cont #gjs-am-meta>div{margin-bottom:5px}.gjs-am-assets-cont #gjs-am-meta #gjs-am-dimensions{font-size:10px;opacity:.5;filter:alpha(opacity=50)}.gjs-am-file-uploader{width:55%;float:left}.gjs-am-file-uploader>form{background-color:rgba(0,0,0,.1);border:2px dashed;border-radius:3px;position:relative;text-align:center;margin-bottom:15px}#gjs-rte-toolbar .gjs-rte-btn.btn-info,.gjs-cm-editor #gjs-cm-title{background-color:rgba(0,0,0,.3)}.gjs-am-file-uploader>form.gjs-am-hover{border:2px solid #62c462;color:#75cb75}.gjs-am-file-uploader>form.gjs-am-disabled{border-color:red}.gjs-am-file-uploader>form #gjs-am-uploadFile{opacity:0;filter:alpha(opacity=0);padding:150px 10px;width:100%;box-sizing:border-box}.gjs-am-file-uploader #gjs-am-title{position:absolute;padding:150px 10px;width:100%}.gjs-cm-editor-c{float:left;box-sizing:border-box;width:50%}.gjs-cm-editor-c .CodeMirror{height:450px}.gjs-cm-editor{font-size:12px}.gjs-cm-editor#gjs-cm-htmlmixed{padding-right:10px;border-right:1px solid rgba(0,0,0,.3)}.gjs-cm-editor#gjs-cm-htmlmixed #gjs-cm-title{color:#a97d44}.gjs-cm-editor#gjs-cm-css{padding-left:10px;border-left:1px solid rgba(255,255,255,.1)}.gjs-cm-editor#gjs-cm-css #gjs-cm-title{color:#ddca7e}.gjs-cm-editor #gjs-cm-title{font-size:12px;padding:5px 10px 3px;text-align:right}#gjs-rte-toolbar{display:none;border:1px solid rgba(0,0,0,.3);position:absolute;border-radius:3px;z-index:10}#gjs-rte-toolbar .gjs-rte-btn{display:inline-block;padding:5px;min-width:25px;border-right:1px solid rgba(0,0,0,.3);text-align:center;cursor:pointer;outline:0}#gjs-rte-toolbar .gjs-rte-btn:last-child{border-right:none}#gjs-rte-toolbar .gjs-rte-btn:hover{background-color:rgba(255,255,255,.1)}#gjs-rte-toolbar select{height:16px}.sp-hue,.sp-slider{cursor:row-resize}.sp-color,.sp-dragger{cursor:crosshair}.sp-alpha-handle,.sp-alpha-inner{cursor:col-resize}.sp-hue{left:90%}.sp-color{right:15%}.sp-container{border:1px solid rgba(0,0,0,.3);box-shadow:0 0 7px rgba(0,0,0,.3);border-radius:3px}.sp-picker-container{border:none}.colpick_dark .colpick_color{outline:rgba(0,0,0,.3) solid 1px}.sp-cancel,.sp-cancel:hover{bottom:-8px;color:#777!important;font-size:25px;left:0;position:absolute;text-decoration:none}.sp-alpha-handle{border:1px solid #555;width:4px}.sp-color,.sp-hue{border:1px solid #333}.sp-slider{border:1px solid #555;height:3px;left:-4px;width:22px}.sp-dragger{background:0 0;box-shadow:0 0 0 1px #111}.sp-button-container{float:none;width:100%;position:relative;text-align:right}.sp-container button,.sp-container button:active,.sp-container button:hover{background:rgba(0,0,0,.3);border-color:rgba(0,0,0,.3);color:#ddd;text-shadow:none;box-shadow:none;padding:3px 5px}.sp-palette-container{border:none;float:none;margin:0;padding:5px 10px 0}.sp-palette .sp-thumb-el,.sp-palette .sp-thumb-el:hover{border:1px solid rgba(0,0,0,.9)}.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:rgba(0,0,0,.9)}.gjs-hidden{display:none}@keyframes gjs-slide-down{0%{transform:translate(0,-3rem);opacity:0}100%{transform:translate(0,0);opacity:1}}@keyframes gjs-slide-up{0%{transform:translate(0,0);opacity:1}100%{transform:translate(0,-3rem);opacity:0}} diff --git a/public/grapejs/dist/css/grapesjs-mjml.css b/public/grapejs/dist/css/grapesjs-mjml.css new file mode 100644 index 00000000..206d8d50 --- /dev/null +++ b/public/grapejs/dist/css/grapesjs-mjml.css @@ -0,0 +1,248 @@ +.gjs-clm-tags .gjs-sm-title, +.gjs-sm-sector .gjs-sm-title { + border-top: none; +} + +.gjs-clm-tags .gjs-clm-tag { + /* background-color: $tag-color; */ + border: none; + box-shadow: none; + padding: 5px 8px; + text-shadow: none; +} + +.gjs-field { + background-color: rgba(0, 0, 0, 0.15); + box-shadow: none; +} + +.gjs-btnt.gjs-pn-active, +.gjs-pn-btn.gjs-pn-active { + box-shadow: none; +} + +.gjs-pn-btn:hover { + color: rgba(255, 255, 255, 0.75); +} + +.gjs-btnt.gjs-pn-active, +.gjs-color-active, +.gjs-pn-btn.gjs-pn-active, +.gjs-pn-btn:active, +.gjs-block:hover { + color: #f45e43; /* #f46d4c,#e4505d */ +} + +#gjs-rte-toolbar .gjs-rte-btn, +.gjs-btn-prim, +.gjs-btnt, +.gjs-clm-tags .gjs-sm-composite.gjs-clm-field, +.gjs-clm-tags .gjs-sm-field.gjs-sm-composite, +.gjs-clm-tags .gjs-sm-stack #gjs-sm-add, +.gjs-color-main, +.gjs-mdl-dialog, +.gjs-off-prv, +.gjs-pn-btn, +.gjs-pn-panel, +.gjs-sm-sector .gjs-sm-composite.gjs-clm-field, +.gjs-sm-sector .gjs-sm-field.gjs-sm-composite, +.gjs-sm-sector .gjs-sm-stack #gjs-sm-add { + color: #888686; +} + +#gjs-rte-toolbar, +.gjs-bg-main, +.gjs-clm-select option, +.gjs-clm-tags .gjs-sm-colorp-c, +.gjs-editor, +.gjs-mdl-dialog, +.gjs-nv-item .gjs-nv-title-c, +.gjs-off-prv, +.gjs-pn-panel, +.gjs-select option, +.gjs-sm-sector .gjs-sm-colorp-c, +.gjs-sm-select option, +.gjs-sm-unit option, +.sp-container, +.gjs-block { + background-color: #2c2e35; +} + +.gjs-import-label, +.gjs-export-label { + margin-bottom: 10px; + font-size: 13px; +} + +.gjs-mdl-dialog .gjs-btn-import { + margin-top: 10px; +} + +.CodeMirror { + border-radius: 3px; + height: 450px; + font-family: sans-serif, monospace; + letter-spacing: 0.3px; + font-size: 12px; +} + +/* Extra */ + +.gjs-block { + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 3px; + margin: 10px 2.5% 5px; + box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.15); + transition: box-shadow 0.2s ease 0s; +} + +.gjs-block:hover { + box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.15); +} + +#gjs-pn-views-container.gjs-pn-panel { + padding: 39px 0 0; +} + +#gjs-pn-views.gjs-pn-panel { + padding: 0; + border: none; +} + +#gjs-pn-views .gjs-pn-btn { + margin: 0; + height: 40px; + padding: 10px; + width: 25%; + border-bottom: 2px solid rgba(0, 0, 0, 0.3); +} + +#gjs-pn-views .gjs-pn-active { + /* + color: rgba(255, 255, 255, 0.9); + border-bottom: 2px solid #f45e43; + */ + border-radius: 0; +} + +#gjs-pn-devices-c { + padding-left: 30px; +} + +#gjs-pn-options { + padding-right: 30px; +} + +.gjs-sm-composite .gjs-sm-properties { + display: flex; + flex-flow: row wrap; + justify-content: space-between; +} + +#gjs-sm-border-top-left-radius, +#gjs-sm-border-top-right-radius, +#gjs-sm-border-bottom-left-radius, +#gjs-sm-border-bottom-right-radius, +#gjs-sm-margin-top, +#gjs-sm-margin-bottom, +#gjs-sm-margin-right, +#gjs-sm-margin-left, +#gjs-sm-padding-top, +#gjs-sm-padding-bottom, +#gjs-sm-padding-right, +#gjs-sm-padding-left { + flex: 999 1 60px; +} + +#gjs-sm-border-width, +#gjs-sm-border-style, +#gjs-sm-border-color { + flex: 999 1 80px; +} + +#gjs-sm-margin-left, +#gjs-sm-padding-left { + order: 2; +} + +#gjs-sm-margin-right, +#gjs-sm-padding-right { + order: 3; +} + +#gjs-sm-margin-bottom, +#gjs-sm-padding-bottom { + order: 4; +} + +.gjs-field-radio { + width: 100%; +} + +.gjs-field-radio #gjs-sm-input-holder { + display: flex; +} + +.gjs-radio-item { + flex: 1 0 auto; + text-align: center; +} + +.gjs-sm-sector .gjs-sm-property.gjs-sm-list { + width: 50%; +} + +.gjs-mdl-content { + border-top: none; +} + +.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-active { + background-color: rgba(255, 255, 255, 0.09); +} + +/* + +#gjs-pn-views-container, +#gjs-pn-views{ + min-width: 270px; +} +*/ + +.gjs-f-button::before { content: 'B'; } +.gjs-f-divider::before { content: 'D'; } + +.gjs-mdl-dialog-sm { + width: 300px; +} + +.gjs-mdl-dialog form .gjs-sm-property { + font-size: 12px; + margin-bottom: 15px; +} + +.gjs-mdl-dialog form .gjs-sm-label { + margin-bottom: 5px; +} + +.anim-spin { + animation: 0.5s linear 0s normal none infinite running spin; +} + +.form-status { + float: right; + font-size: 14px; +} + +.text-danger { + color: #f92929; +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} diff --git a/public/grapejs/dist/css/grapesjs-preset-newsletter.css b/public/grapejs/dist/css/grapesjs-preset-newsletter.css index 9eb4c81e..13f90f64 100644 --- a/public/grapejs/dist/css/grapesjs-preset-newsletter.css +++ b/public/grapejs/dist/css/grapesjs-preset-newsletter.css @@ -54,14 +54,13 @@ .gjs-nv-item .gjs-nv-title-c, .gjs-off-prv, .gjs-pn-panel, +.gjs-block, .gjs-select option, .gjs-sm-sector .gjs-sm-colorp-c, .gjs-sm-select option, .gjs-sm-unit option, -.sp-container, -.gjs-block { - background-color: #373d49; -} +.sp-container { + background-color: #373d49; } .gjs-import-label, .gjs-export-label { @@ -79,18 +78,15 @@ font-size: 12px; } /* Extra */ - .gjs-block { border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 3px; margin: 10px 2.5% 5px; box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.15); - transition: box-shadow 0.2s ease 0s; -} + transition: box-shadow, color 0.2s ease 0s; } .gjs-block:hover { - box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.15); -} + box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.15); } #gjs-pn-views-container.gjs-pn-panel { padding: 39px 0 0; } diff --git a/public/grapejs/dist/js/grapes.min.js b/public/grapejs/dist/js/grapes.min.js index b781c178..49d2c98b 100755 --- a/public/grapejs/dist/js/grapes.min.js +++ b/public/grapejs/dist/js/grapes.min.js @@ -1,17 +1,17 @@ -/*! grapesjs - v0.4.25 */ -!function(a,b){"function"==typeof define&&define.amd?define([],b):"object"==typeof exports&&"object"==typeof module?module.exports=b():a.grapesjs=a.GrapesJS=b()}(this,function(){var a,b,c;!function(d){function e(a,b){return v.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o=b&&b.split("/"),p=t.map,q=p&&p["*"]||{};if(a){for(a=a.split("/"),g=a.length-1,t.nodeIdCompat&&x.test(a[g])&&(a[g]=a[g].replace(x,"")),"."===a[0].charAt(0)&&o&&(n=o.slice(0,o.length-1),a=n.concat(a)),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}if((o||q)&&p){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),o)for(l=o.length;l>0;l-=1)if(e=p[o.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&q&&q[d]&&(i=q[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,b){return function(){var c=w.call(arguments,0);return"string"!=typeof c[0]&&1===c.length&&c.push(null),o.apply(d,c.concat([a,b]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){r[a]=b}}function j(a){if(e(s,a)){var b=s[a];delete s[a],u[a]=!0,n.apply(d,b)}if(!e(r,a)&&!e(u,a))throw new Error("No "+a);return r[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return a?k(a):[]}function m(a){return function(){return t&&t.config&&t.config[a]||{}}}var n,o,p,q,r={},s={},t={},u={},v=Object.prototype.hasOwnProperty,w=[].slice,x=/\.js$/;p=function(a,b){var c,d=k(a),e=d[0],g=b[1];return a=d[1],e&&(e=f(e,g),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(g)):f(a,g):(a=f(a,g),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},q={require:function(a){return g(a)},exports:function(a){var b=r[a];return"undefined"!=typeof b?b:r[a]={}},module:function(a){return{id:a,uri:"",exports:r[a],config:m(a)}}},n=function(a,b,c,f){var h,k,m,n,o,t,v,w=[],x=typeof c;if(f=f||a,t=l(f),"undefined"===x||"function"===x){for(b=!b.length&&c.length?["require","exports","module"]:b,o=0;o
    ",attributes:{"class":"gjs-fonts gjs-f-b1"}},{id:"b2",label:"2 Blocks",content:'
    ",attributes:{"class":"gjs-fonts gjs-f-b2"}},{id:"b3",label:"3 Blocks",content:'
    ",attributes:{"class":"gjs-fonts gjs-f-b3"}},{id:"b4",label:"3/7 Block",content:'
    ",attributes:{"class":"gjs-fonts gjs-f-b37"}},{id:"hero",label:"Hero section",content:'
    Build your templates without coding
    Try it now
    ',attributes:{"class":"gjs-fonts gjs-f-hero"}},{id:"h1p",label:"Text section",content:'

    Insert title here

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua

    ',attributes:{"class":"gjs-fonts gjs-f-h1p"}},{id:"3ba",label:"Badges",content:'
    Adam Smith
    CEO
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ftln
    John Black
    Software Engineer
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ftln
    Jessica White
    Web Designer
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ftln
    ',attributes:{"class":"gjs-fonts gjs-f-3ba"}},{id:"text",label:"Text",attributes:{"class":"gjs-fonts gjs-f-text"},content:{type:"text",content:"Insert your text here",style:{padding:"10px"},activeOnRender:1}},{id:"image",label:"Image",attributes:{"class":"gjs-fonts gjs-f-image"},content:{style:{color:"black"},type:"image",activeOnRender:1}},{id:"quo",label:"Quote",content:'
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ',attributes:{"class":"fa fa-quote-right"}},{id:"link",label:"Link",attributes:{"class":"fa fa-link"},content:{type:"link",content:"Link",style:{color:"#d983a6"}}},{id:"map",label:"Map",attributes:{"class":"fa fa-map-o"},content:{type:"map",style:{height:"350px"}}},{id:"video",label:"Video",attributes:{"class":"fa fa-youtube-play"},content:{type:"video",src:"img/video2.webm",style:{height:"350px",width:"615px"}}}]}}}),function(){function a(a){function b(b,c,d,e,f,g){for(;f>=0&&f0?0:h-1;return arguments.length<3&&(e=c[g?g[i]:i],i+=a),b(c,d,e,g,i,h)}}function b(a){return function(b,c,d){c=v(c,d);for(var e=A(b),f=a>0?0:e-1;f>=0&&f0?g=f>=0?f:Math.max(f+h,g):h=f>=0?Math.min(f+1,h):f+h+1;else if(c&&f&&h)return f=c(d,e),d[f]===e?f:-1;if(e!==e)return f=b(l.call(d,g,h),t.isNaN),f>=0?f+g:-1;for(f=a>0?g:h-1;f>=0&&f=0&&b<=z};t.each=t.forEach=function(a,b,c){b=u(b,c);var d,e;if(B(a))for(d=0,e=a.length;d=0},t.invoke=function(a,b){var c=l.call(arguments,2),d=t.isFunction(b);return t.map(a,function(a){var e=d?b:a[b];return null==e?e:e.apply(a,c)})},t.pluck=function(a,b){return t.map(a,t.property(b))},t.where=function(a,b){return t.filter(a,t.matcher(b))},t.findWhere=function(a,b){return t.find(a,t.matcher(b))},t.max=function(a,b,c){var d,e,f=-(1/0),g=-(1/0);if(null==b&&null!=a){a=B(a)?a:t.values(a);for(var h=0,i=a.length;hf&&(f=d)}else b=v(b,c),t.each(a,function(a,c,d){e=b(a,c,d),(e>g||e===-(1/0)&&f===-(1/0))&&(f=a,g=e)});return f},t.min=function(a,b,c){var d,e,f=1/0,g=1/0;if(null==b&&null!=a){a=B(a)?a:t.values(a);for(var h=0,i=a.length;hd||void 0===c)return 1;if(cb?(g&&(clearTimeout(g),g=null),h=j,f=a.apply(d,e),g||(d=e=null)):g||c.trailing===!1||(g=setTimeout(i,k)),f}},t.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=t.now()-g;j=0?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),d||(f=e=null)))};return function(){f=this,e=arguments,g=t.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},t.wrap=function(a,b){return t.partial(b,a)},t.negate=function(a){return function(){return!a.apply(this,arguments)}},t.compose=function(){var a=arguments,b=a.length-1;return function(){for(var c=b,d=a[b].apply(this,arguments);c--;)d=a[c].call(this,d);return d}},t.after=function(a,b){return function(){if(--a<1)return b.apply(this,arguments)}},t.before=function(a,b){var c;return function(){return--a>0&&(c=b.apply(this,arguments)),a<=1&&(b=null),c}},t.once=t.partial(t.before,2);var F=!{toString:null}.propertyIsEnumerable("toString"),G=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];t.keys=function(a){if(!t.isObject(a))return[];if(p)return p(a);var b=[];for(var c in a)t.has(a,c)&&b.push(c);return F&&e(a,b),b},t.allKeys=function(a){if(!t.isObject(a))return[];var b=[];for(var c in a)b.push(c);return F&&e(a,b),b},t.values=function(a){for(var b=t.keys(a),c=b.length,d=Array(c),e=0;e":">",'"':""","'":"'","`":"`"},J=t.invert(I),K=function(a){var b=function(b){return a[b]},c="(?:"+t.keys(a).join("|")+")",d=RegExp(c),e=RegExp(c,"g");return function(a){return a=null==a?"":""+a,d.test(a)?a.replace(e,b):a}};t.escape=K(I),t.unescape=K(J),t.result=function(a,b,c){var d=null==a?void 0:a[b];return void 0===d&&(d=c),t.isFunction(d)?d.call(a):d};var L=0;t.uniqueId=function(a){var b=++L+"";return a?a+b:b},t.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var M=/(.)^/,N={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},O=/\\|'|\r|\n|\u2028|\u2029/g,P=function(a){return"\\"+N[a]};t.template=function(a,b,c){!b&&c&&(b=c),b=t.defaults({},b,t.templateSettings);var d=RegExp([(b.escape||M).source,(b.interpolate||M).source,(b.evaluate||M).source].join("|")+"|$","g"),e=0,f="__p+='";a.replace(d,function(b,c,d,g,h){return f+=a.slice(e,h).replace(O,P),e=h+b.length,c?f+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'":d?f+="'+\n((__t=("+d+"))==null?'':__t)+\n'":g&&(f+="';\n"+g+"\n__p+='"),b}),f+="';\n",b.variable||(f="with(obj||{}){\n"+f+"}\n"),f="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+f+"return __p;\n";try{var g=new Function(b.variable||"obj","_",f)}catch(h){throw h.source=f,h}var i=function(a){return g.call(this,a,t)},j=b.variable||"obj";return i.source="function("+j+"){\n"+f+"}",i},t.chain=function(a){var b=t(a);return b._chain=!0,b};var Q=function(a,b){return a._chain?t(b).chain():b};t.mixin=function(a){t.each(t.functions(a),function(b){var c=t[b]=a[b];t.prototype[b]=function(){var a=[this._wrapped];return k.apply(a,arguments),Q(this,c.apply(t,a))}})},t.mixin(t),t.each(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=h[a];t.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!==a&&"splice"!==a||0!==c.length||delete c[0],Q(this,c)}}),t.each(["concat","join","slice"],function(a){var b=h[a];t.prototype[a]=function(){return Q(this,b.apply(this._wrapped,arguments))}}),t.prototype.value=function(){return this._wrapped},t.prototype.valueOf=t.prototype.toJSON=t.prototype.value,t.prototype.toString=function(){return""+this._wrapped},"function"==typeof c&&c.amd&&c("underscore",[],function(){return t})}.call(this),c("jquery",[],function(){return jQuery}),function(a){var d="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global;if("function"==typeof c&&c.amd)c("backbone",["underscore","jquery","exports"],function(b,c,e){d.Backbone=a(d,e,b,c)});else if("undefined"!=typeof exports){var e,f=b("underscore");try{e=b("jquery")}catch(g){}a(d,exports,f,e)}else d.Backbone=a(d,{},d._,d.jQuery||d.Zepto||d.ender||d.$)}(function(a,b,c,d){var e=a.Backbone,f=Array.prototype.slice;b.VERSION="1.3.3",b.$=d,b.noConflict=function(){return a.Backbone=e,this},b.emulateHTTP=!1,b.emulateJSON=!1;var g=function(a,b,d){switch(a){case 1:return function(){return c[b](this[d])};case 2:return function(a){return c[b](this[d],a)};case 3:return function(a,e){return c[b](this[d],i(a,this),e)};case 4:return function(a,e,f){return c[b](this[d],i(a,this),e,f)};default:return function(){var a=f.call(arguments);return a.unshift(this[d]),c[b].apply(c,a)}}},h=function(a,b,d){c.each(b,function(b,e){c[e]&&(a.prototype[e]=g(b,e,d))})},i=function(a,b){return c.isFunction(a)?a:c.isObject(a)&&!b._isModel(a)?j(a):c.isString(a)?function(b){return b.get(a)}:a},j=function(a){var b=c.matches(a);return function(a){return b(a.attributes)}},k=b.Events={},l=/\s+/,m=function(a,b,d,e,f){var g,h=0;if(d&&"object"==typeof d){void 0!==e&&"context"in f&&void 0===f.context&&(f.context=e);for(g=c.keys(d);hthis.length&&(e=this.length),e<0&&(e+=this.length+1);var f,g,h=[],i=[],j=[],k=[],l={},m=b.add,n=b.merge,o=b.remove,p=!1,q=this.comparator&&null==e&&b.sort!==!1,r=c.isString(this.comparator)?this.comparator:null;for(g=0;g7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(L,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var b=this.root.slice(0,-1)||"/";return this.location.replace(b+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var d=document.body,e=d.insertBefore(this.iframe,d.firstChild).contentWindow;e.document.open(),e.document.close(),e.location.hash="#"+this.fragment}var f=window.addEventListener||function(a,b){return attachEvent("on"+a,b)};if(this._usePushState?f("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?f("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var a=window.removeEventListener||function(a,b){return detachEvent("on"+a,b)};this._usePushState?a("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&a("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),J.started=!1},route:function(a,b){this.handlers.unshift({route:a,callback:b})},checkUrl:function(a){var b=this.getFragment();return b===this.fragment&&this.iframe&&(b=this.getHash(this.iframe.contentWindow)),b!==this.fragment&&(this.iframe&&this.navigate(b),void this.loadUrl())},loadUrl:function(a){return!!this.matchRoot()&&(a=this.fragment=this.getFragment(a),c.some(this.handlers,function(b){if(b.route.test(a))return b.callback(a),!0}))},navigate:function(a,b){if(!J.started)return!1;b&&b!==!0||(b={trigger:!!b}),a=this.getFragment(a||"");var c=this.root;""!==a&&"?"!==a.charAt(0)||(c=c.slice(0,-1)||"/");var d=c+a;if(a=this.decodeFragment(a.replace(M,"")),this.fragment!==a){if(this.fragment=a,this._usePushState)this.history[b.replace?"replaceState":"pushState"]({},document.title,d);else{if(!this._wantsHashChange)return this.location.assign(d);if(this._updateHash(this.location,a,b.replace),this.iframe&&a!==this.getHash(this.iframe.contentWindow)){var e=this.iframe.contentWindow;b.replace||(e.document.open(),e.document.close()),this._updateHash(e.location,a,b.replace)}}return b.trigger?this.loadUrl(a):void 0}},_updateHash:function(a,b,c){if(c){var d=a.href.replace(/(javascript:|#).*$/,"");a.replace(d+"#"+b)}else a.hash="#"+b}}),b.history=new J;var N=function(a,b){var d,e=this;return d=a&&c.has(a,"constructor")?a.constructor:function(){return e.apply(this,arguments)},c.extend(d,e,b),d.prototype=c.create(e.prototype,a),d.prototype.constructor=d,d.__super__=e.prototype,d};t.extend=v.extend=E.extend=A.extend=J.extend=N;var O=function(){throw new Error('A "url" property or function must be specified')},P=function(a,b){var c=b.error;b.error=function(d){c&&c.call(b.context,a,d,b),a.trigger("error",a,d,b)}};return b}),function(a){"function"==typeof c&&c.amd?c("backboneUndo",["underscore","backbone"],a):"undefined"!=typeof exports?module.exports=a(b("underscore"),b("backbone")):a(_,Backbone)}(function(a,b){function c(a,b,c){return c.length<=4?a.call(b,c[0],c[1],c[2],c[3]):a.apply(b,c)}function d(a,b){return n.call(a,b)}function e(b,c){return null!=b&&(a.isArray(c)||(c=d(arguments,1)),a.all(c,function(a){return a in b}))}function f(){this.registeredObjects=[],this.cidIndexes=[]}function g(b,c,d,e){for(var f,g=0,h=c.length;ga.maximumStackLength&&(a.shift(),a.pointer--)}}}function l(){}function m(b,c,d,f){if("object"==typeof c)return a.each(c,function(a,c){2===b?m(b,a,d,f):m(b,c,a,d)});switch(b){case 0:e(d,"undo","redo","on")&&a.all(a.pick(d,"undo","redo","on"),a.isFunction)&&(f[c]=d);break;case 1:f[c]&&a.isObject(d)&&(f[c]=a.extend({},f[c],d));break;case 2:delete f[c]}return this}var n=Array.prototype.slice,o=function(){function b(){d++,c=!0,a.defer(function(){c=!1})}var c=!1,d=-1;return function(){return c||b(),d}}();f.prototype={isRegistered:function(b){return b&&b.cid?this.registeredObjects[b.cid]:a.contains(this.registeredObjects,b)},register:function(a){return!this.isRegistered(a)&&(a&&a.cid?(this.registeredObjects[a.cid]=a,this.cidIndexes.push(a.cid)):this.registeredObjects.push(a),!0)},unregister:function(b){if(this.isRegistered(b)){if(b&&b.cid)delete this.registeredObjects[b.cid],this.cidIndexes.splice(a.indexOf(this.cidIndexes,b.cid),1);else{var c=a.indexOf(this.registeredObjects,b);this.registeredObjects.splice(c,1)}return!0}return!1},get:function(){return a.map(this.cidIndexes,function(a){return this.registeredObjects[a]},this).concat(this.registeredObjects)}};var p={add:{undo:function(a,b,c,d){a.remove(c,d)},redo:function(a,b,c,d){d.index&&(d.at=d.index),a.add(c,d)},on:function(b,c,d){return{object:c,before:void 0,after:b,options:a.clone(d)}}},remove:{undo:function(a,b,c,d){"index"in d&&(d.at=d.index),a.add(b,d)},redo:function(a,b,c,d){a.remove(b,d)},on:function(b,c,d){return{object:c,before:b,after:void 0,options:a.clone(d)}}},change:{undo:function(b,c,d,e){a.isEmpty(c)?a.each(a.keys(d),b.unset,b):(b.set(c),e&&e.unsetData&&e.unsetData.before&&e.unsetData.before.length&&a.each(e.unsetData.before,b.unset,b))},redo:function(b,c,d,e){a.isEmpty(d)?a.each(a.keys(c),b.unset,b):(b.set(d),e&&e.unsetData&&e.unsetData.after&&e.unsetData.after.length&&a.each(e.unsetData.after,b.unset,b))},on:function(b,c){var d=b.changedAttributes(),e=a.keys(d),f=a.pick(b.previousAttributes(),e),g=a.keys(f),h=(c||(c={})).unsetData={after:[],before:[]};return e.length!=g.length&&(e.length>g.length?a.each(e,function(a){a in f||h.before.push(a)},this):a.each(g,function(a){a in d||h.after.push(a)})),{object:b,before:f,after:d,options:a.clone(c)}}},reset:{undo:function(a,b,c){a.reset(b)},redo:function(a,b,c){a.reset(c)},on:function(b,c){return{object:b,before:c.previousModels,after:a.clone(b.models)}}}};l.prototype=p;var q=b.Model.extend({defaults:{type:null,object:null,before:null,after:null,magicFusionIndex:null},undo:function(a){h("undo",this.attributes)},redo:function(a){h("redo",this.attributes)}}),r=b.Collection.extend({model:q,pointer:-1,track:!1,isCurrentlyUndoRedoing:!1,maximumStackLength:1/0,setMaxLength:function(a){this.maximumStackLength=a}}),s=b.Model.extend({defaults:{maximumStackLength:1/0,track:!1},initialize:function(b){this.stack=new r,this.objectRegistry=new f,this.undoTypes=new l,this.stack.setMaxLength(this.get("maximumStackLength")),this.on("change:maximumStackLength",function(a,b){this.stack.setMaxLength(b)},this),b&&b.track&&this.startTracking(),b&&b.register&&(a.isArray(b.register)||a.isArguments(b.register)?c(this.register,this,b.register):this.register(b.register))},startTracking:function(){this.set("track",!0),this.stack.track=!0},stopTracking:function(){this.set("track",!1),this.stack.track=!1},isTracking:function(){return this.get("track")},_addToStack:function(a){k(this.stack,a,d(arguments,1),this.undoTypes)},register:function(){g("on",arguments,this._addToStack,this)},unregister:function(){g("off",arguments,this._addToStack,this)},unregisterAll:function(){c(this.unregister,this,this.objectRegistry.get())},undo:function(a){i("undo",this,this.stack,a)},undoAll:function(){i("undo",this,this.stack,!1,!0)},redo:function(a){i("redo",this,this.stack,a)},redoAll:function(){i("redo",this,this.stack,!1,!0)},isAvailable:function(a){var b=this.stack,c=b.length;switch(a){case"undo":return c>0&&b.pointer>-1;case"redo":return c>0&&b.pointer0;for(f in v)(!v[f]&&b(e.mods,+f)>-1||v[f]&&b(e.mods,+f)==-1)&&(i=!1);(0!=e.mods.length||v[16]||v[18]||v[17]||v[91])&&!i||e.method(a,e)===!1&&(a.preventDefault?a.preventDefault():a.returnValue=!1,a.stopPropagation&&a.stopPropagation(),a.cancelBubble&&(a.cancelBubble=!0))}}function f(a){var c,d=a.keyCode,e=b(A,d);if(e>=0&&A.splice(e,1),93!=d&&224!=d||(d=91),d in v){v[d]=!1;for(c in x)x[c]==d&&(h[c]=!1)}}function g(){for(t in v)v[t]=!1;for(t in x)h[t]=!1}function h(a,b,c){var d,e;d=p(a),void 0===c&&(c=b,b="all");for(var f=0;f1&&(e=q(a),a=[a[a.length-1]]),a=a[0],a=z(a),a in u||(u[a]=[]),u[a].push({shortcut:d[f],scope:b,method:c,key:d[f],mods:e})}function i(a,b){var d,e,f,g,h,i=[];for(d=p(a),g=0;g1&&(i=q(e),a=e[e.length-1]),a=z(a),void 0===b&&(b=n()),!u[a])return;for(f=0;fg||g>h+j-e||i+e>f||f>i+k-e)&&(d=1),!!d},findPosition:function(a,b,c){for(var d={index:0,method:"before"},e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=a.length;mf||h&&j>=h||e&&gg?d.h=Math.round(d.w/g):d.w=Math.round(d.h*g)}return~e.indexOf("l")&&(d.l=c.w-d.w),~e.indexOf("t")&&(d.t=c.h-d.h),d}}}}),c("Utils/main",["require","./Sorter","./Resizer"],function(a){var b=function(){var b=a("./Sorter"),c=a("./Resizer");return{name:"Utils",init:function(){return this},Sorter:b,Resizer:c}};return b}),c("Utils",["Utils/main"],function(a){return a}),c("StorageManager/config/config",[],function(){return{id:"gjs-",autosave:1,autoload:1,type:"local",stepsBeforeSave:1,storeComponents:!1,storeStyles:!1,storeHtml:!0,storeCss:!0,checkLocal:!0,params:{},urlStore:"",urlLoad:"",beforeSend:function(a,b){},onComplete:function(a,b){}}}),c("StorageManager/model/LocalStorage",["backbone"],function(a){return a.Model.extend({defaults:{checkLocal:!0},store:function(a){this.checkStorageEnvironment();for(var b in a)localStorage.setItem(b,a[b])},load:function(a){this.checkStorageEnvironment();for(var b={},c=0,d=a.length;c/im,j=/]*>\s*([\s\S]+)\s*<\/body>/im,k="undefined"!=typeof location&&location.href,l=k&&location.protocol&&location.protocol.replace(/\:/,""),m=k&&location.hostname,n=k&&(location.port||void 0),o={},p=a.config&&a.config()||{};return c={version:"2.0.12",strip:function(a){if(a){a=a.replace(i,"");var b=a.match(j);b&&(a=b[1])}else a="";return a},jsEscape:function(a){return a.replace(/(['\\])/g,"\\$1").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r").replace(/[\u2028]/g,"\\u2028").replace(/[\u2029]/g,"\\u2029")},createXhr:p.createXhr||function(){var a,b,c;if("undefined"!=typeof XMLHttpRequest)return new XMLHttpRequest;if("undefined"!=typeof ActiveXObject)for(b=0;b<3;b+=1){c=h[b];try{a=new ActiveXObject(c)}catch(d){}if(a){h=[c];break}}return a},parseName:function(a){var b,c,d,e=!1,f=a.indexOf("."),g=0===a.indexOf("./")||0===a.indexOf("../");return f!==-1&&(!g||f>1)?(b=a.substring(0,f),c=a.substring(f+1,a.length)):b=a,d=c||b,f=d.indexOf("!"),f!==-1&&(e="strip"===d.substring(f+1),d=d.substring(0,f),c?c=d:b=d),{moduleName:b,ext:c,strip:e}},xdRegExp:/^((\w+)\:)?\/\/([^\/\\]+)/,useXhr:function(a,b,d,e){var f,g,h,i=c.xdRegExp.exec(a);return!i||(f=i[2],g=i[3],g=g.split(":"),h=g[1],g=g[0],!(f&&f!==b||g&&g.toLowerCase()!==d.toLowerCase()||(h||g)&&h!==e))},finishLoad:function(a,b,d,e){d=b?c.strip(d):d,p.isBuild&&(o[a]=d),e(d)},load:function(a,b,d,e){if(e&&e.isBuild&&!e.inlineText)return void d();p.isBuild=e&&e.isBuild;var f=c.parseName(a),g=f.moduleName+(f.ext?"."+f.ext:""),h=b.toUrl(g),i=p.useXhr||c.useXhr;return 0===h.indexOf("empty:")?void d():void(!k||i(h,l,m,n)?c.get(h,function(b){c.finishLoad(a,f.strip,b,d)},function(a){d.error&&d.error(a)}):b([g],function(a){c.finishLoad(f.moduleName+"."+f.ext,f.strip,a,d)}))},write:function(a,b,d,e){if(o.hasOwnProperty(b)){var f=c.jsEscape(o[b]);d.asModule(a+"!"+b,"define(function () { return '"+f+"';});\n")}},writeFile:function(a,b,d,e,f){var g=c.parseName(b),h=g.ext?"."+g.ext:"",i=g.moduleName+h,j=d.toUrl(g.moduleName+h)+".js";c.load(i,d,function(b){var d=function(a){return e(j,a)};d.asModule=function(a,b){return e.asModule(a,j,b)},c.write(a,i,d,f)},f)}},"node"===p.env||!p.env&&"undefined"!=typeof process&&process.versions&&process.versions.node&&!process.versions["node-webkit"]?(d=b.nodeRequire("fs"),c.get=function(a,b,c){try{var e=d.readFileSync(a,"utf8");0===e.indexOf("\ufeff")&&(e=e.substring(1)),b(e)}catch(f){c&&c(f)}}):"xhr"===p.env||!p.env&&c.createXhr()?c.get=function(a,b,d,e){var f,g=c.createXhr();if(g.open("GET",a,!0),e)for(f in e)e.hasOwnProperty(f)&&g.setRequestHeader(f.toLowerCase(),e[f]);p.onXhr&&p.onXhr(g,a),g.onreadystatechange=function(c){var e,f;4===g.readyState&&(e=g.status||0,e>399&&e<600?(f=new Error(a+" HTTP status: "+e),f.xhr=g,d&&d(f)):b(g.responseText),p.onXhrComplete&&p.onXhrComplete(g,a))},g.send(null)}:"rhino"===p.env||!p.env&&"undefined"!=typeof Packages&&"undefined"!=typeof java?c.get=function(a,b){var c,d,e="utf-8",f=new java.io.File(a),g=java.lang.System.getProperty("line.separator"),h=new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(f),e)),i="";try{for(c=new java.lang.StringBuffer,d=h.readLine(),d&&d.length()&&65279===d.charAt(0)&&(d=d.substring(1)),null!==d&&c.append(d);null!==(d=h.readLine());)c.append(g),c.append(d);i=String(c.toString())}finally{h.close()}b(i)}:("xpconnect"===p.env||!p.env&&"undefined"!=typeof Components&&Components.classes&&Components.interfaces)&&(e=Components.classes,f=Components.interfaces,Components.utils["import"]("resource://gre/modules/FileUtils.jsm"),g="@mozilla.org/windows-registry-key;1"in e,c.get=function(a,b){var c,d,h,i={};g&&(a=a.replace(/\//g,"\\")),h=new FileUtils.File(a);try{c=e["@mozilla.org/network/file-input-stream;1"].createInstance(f.nsIFileInputStream),c.init(h,1,0,!1),d=e["@mozilla.org/intl/converter-input-stream;1"].createInstance(f.nsIConverterInputStream),d.init(c,"utf-8",c.available(),f.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER),d.readString(c.available(),i),d.close(),c.close(),b(i.value)}catch(j){throw new Error((h&&h.path||"")+": "+j)}}),c}),c("text!DeviceManager/template/devices.html",[],function(){return'
    <%= deviceLabel %>
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n'}),c("DeviceManager/view/DevicesView",["backbone","text!./../template/devices.html"],function(a,b){return a.View.extend({template:_.template(b),events:{change:"updateDevice"},initialize:function(a){this.config=a.config||{},this.em=this.config.em,this.ppfx=this.config.pStylePrefix||"",this.events["click ."+this.ppfx+"add-trasp"]=this.startAdd,this.listenTo(this.em,"change:device",this.updateSelect),this.delegateEvents()},startAdd:function(){},updateDevice:function(){var a=this.em;if(a){var b=this.devicesEl,c=b?b.val():"";a.set("device",c)}},updateSelect:function(){var a=this.em,b=this.devicesEl;if(a&&a.getDeviceModel&&b){var c=a.getDeviceModel(),d=c?c.get("name"):"";b.val(d)}},getOptions:function(){var a="";return this.collection.each(function(b){var c=b.get("name");a+='"}),a},render:function(){var a=this.ppfx;return this.$el.html(this.template({ppfx:a,deviceLabel:this.config.deviceLabel})),this.devicesEl=this.$el.find("."+a+"devices"),this.devicesEl.append(this.getOptions()),this.el.className=a+"devices-c",this}})}),c("DeviceManager/main",["require","./config/config","./model/Devices","./view/DevicesView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Devices"),g=a("./view/DevicesView");return{name:"DeviceManager",init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);return b=new f(d.devices),c=new g({collection:b,config:d}),this},add:function(a,c,d){var e=d||{};return e.name=a,e.width=c,b.add(e)},get:function(a){return b.get(a)},getAll:function(){return b},render:function(){return c.render().el}}}}),c("DeviceManager",["DeviceManager/main"],function(a){return a}),c("Parser/config/config",[],function(){return{textTags:["br","b","i","u"]}}),c("Parser/model/ParserCss",["require"],function(a){return function(a){return{parseSelector:function(a){for(var b=[],c=a.split(","),d=0,e=c.length;d\n
    <%= label %>
    \n
    \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    Selected
    \n
    \n
    \n
    \n'}),c("text!SelectorManager/template/classTag.html",[],function(){return'\n \n />\n \n'}),c("SelectorManager/view/ClassTagView",["backbone","text!./../template/classTag.html"],function(a,b){return a.View.extend({template:_.template(b),events:{},initialize:function(a){this.config=a.config||{},this.coll=a.coll||null,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.inputProp="readonly",this.target=this.config.em,this.className=this.pfx+"tag",this.closeId=this.pfx+"close",this.chkId=this.pfx+"checkbox",this.labelId=this.pfx+"tag-label",this.events["click #"+this.closeId]="removeTag",this.events["click #"+this.chkId]="changeStatus",this.events["dblclick #"+this.labelId]="startEditTag",this.events["keypress #"+this.labelId+" input"]="updateInputLabel",this.events["blur #"+this.labelId+" input"]="endEditTag",this.listenTo(this.model,"change:active",this.updateStatus),this.delegateEvents()},startEditTag:function(){this.$labelInput.prop(this.inputProp,!1)},endEditTag:function(){var a=this.$labelInput.val(),b=this.model.escapeName(a);if(this.target){var c=this.target.get("SelectorManager");c&&(c.get(b)?this.$labelInput.val(this.model.get("label")):this.model.set({name:b,label:a}))}this.$labelInput.prop(this.inputProp,!0)},changeStatus:function(){this.model.set("active",!this.model.get("active")),this.target.trigger("targetClassUpdated")},removeTag:function(a){var b=this.target.get("selectedComponent");b&&b.get("classes").remove(this.model),this.coll&&(this.coll.remove(this.model),this.target.trigger("targetClassRemoved")),this.remove()},updateStatus:function(){this.$chk||(this.$chk=this.$el.find("#"+this.pfx+"checkbox")),this.model.get("active")?(this.$chk.removeClass("fa-circle-o").addClass("fa-dot-circle-o"),this.$el.removeClass("opac50")):(this.$chk.removeClass("fa-dot-circle-o").addClass("fa-circle-o"),this.$el.addClass("opac50"))},updateInputLabel:function(){this.$labelInput||(this.$labelInput=this.$el.find("input"));var a=this.$labelInput.val().length-1;a=a<1?1:a,this.$labelInput.attr("size",a)},render:function(){return this.$el.html(this.template({label:this.model.get("label"),pfx:this.pfx,ppfx:this.ppfx,inputProp:this.inputProp})),this.updateStatus(),this.$el.attr("class",this.className),this.updateInputLabel(),this}})}),c("SelectorManager/view/ClassTagsView",["backbone","text!./../template/classTags.html","./ClassTagView"],function(a,b,c){return a.View.extend({template:_.template(b),events:{},initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.className=this.pfx+"tags",this.addBtnId=this.pfx+"add-tag",this.newInputId=this.pfx+"new",this.stateInputId=this.pfx+"states",this.stateInputC=this.pfx+"input-c",this.states=this.config.states||[],this.events["click #"+this.addBtnId]="startNewTag",this.events["blur #"+this.newInputId]="endNewTag",this.events["keyup #"+this.newInputId]="onInputKeyUp",this.events["change #"+this.stateInputId]="stateChanged",this.target=this.config.em,this.listenTo(this.target,"change:selectedComponent",this.componentChanged),this.listenTo(this.target,"targetClassUpdated",this.updateSelector),this.listenTo(this.collection,"add",this.addNew),this.listenTo(this.collection,"reset",this.renderClasses),this.listenTo(this.collection,"remove",this.tagRemoved),this.delegateEvents()},tagRemoved:function(a){this.updateStateVis()},getStateOptions:function(){for(var a="",b=0;b'+this.states[b].label+"";return a},addNew:function(a){this.addToClasses(a)},startNewTag:function(a){this.$addBtn.hide(),this.$input.show().focus()},endNewTag:function(a){this.$addBtn.show(),this.$input.hide().val("")},onInputKeyUp:function(a){13===a.keyCode?this.addNewTag(this.$input.val()):27===a.keyCode&&this.endNewTag()},componentChanged:function(a){this.compTarget=this.target.get("selectedComponent"),this.compTarget&&this.getStates().val(this.compTarget.get("state"));var b=this.compTarget?this.compTarget.get("classes").models:[];this.collection.reset(b),this.updateStateVis()},updateStateVis:function(){this.collection.length?this.getStatesC().css("display","block"):this.getStatesC().css("display","none"),this.updateSelector()},updateSelector:function(){if(this.compTarget=this.target.get("selectedComponent"),this.compTarget&&this.compTarget.get){var a="",b=this.compTarget.get("classes");b.each(function(b){b.get("active")&&(a+="."+b.get("name"))});var c=this.compTarget.get("state");a=c?a+":"+c:a;var d=this.el.querySelector("#"+this.pfx+"sel");d&&(d.innerHTML=a)}},stateChanged:function(a){this.compTarget&&(this.compTarget.set("state",this.$states.val()),this.target&&this.target.trigger("targetStateUpdated"),this.updateSelector())},addNewTag:function(a){if(a){if(this.target){var b=this.target.get("SelectorManager"),c=b.add(a);if(this.compTarget){var d=this.compTarget.get("classes"),e=d.length;d.add(c);var f=d.length;this.collection.add(c),f>e&&this.target.trigger("targetClassAdded"),this.updateStateVis()}}this.endNewTag()}},addToClasses:function(a,b){var d=b||null,e=new c({model:a,config:this.config,coll:this.collection}),f=e.render().el;return d?d.appendChild(f):this.getClasses().append(f),f},renderClasses:function(){var a=document.createDocumentFragment();return this.collection.each(function(b){this.addToClasses(b,a)},this),this.getClasses()&&this.getClasses().empty().append(a),this},getClasses:function(){return this.$classes||(this.$classes=this.$el.find("#"+this.pfx+"tags-c")),this.$classes},getStates:function(){return this.$states||(this.$states=this.$el.find("#"+this.stateInputId)),this.$states},getStatesC:function(){return this.$statesC||(this.$statesC=this.$el.find("#"+this.stateInputC)),this.$statesC},render:function(){return this.$el.html(this.template({label:this.config.label,statesLabel:this.config.statesLabel,pfx:this.pfx,ppfx:this.ppfx})),this.$input=this.$el.find("input#"+this.newInputId),this.$addBtn=this.$el.find("#"+this.addBtnId),this.$classes=this.$el.find("#"+this.pfx+"tags-c"),this.$states=this.$el.find("#"+this.stateInputId),this.$statesC=this.$el.find("#"+this.stateInputC),this.$states.append(this.getStateOptions()),this.renderClasses(),this.$el.attr("class",this.className),this}})}),c("SelectorManager/main",["require","./config/config","./model/Selectors","./view/ClassTagsView"],function(a){return function(b){var c=b||{},d=a("./config/config");Selectors=a("./model/Selectors"),ClassTagsView=a("./view/ClassTagsView");var e,f;return{name:"SelectorManager",init:function(a){c=a||{};for(var b in d)b in c||(c[b]=d[b]);var g=c.pStylePrefix;return g&&(c.stylePrefix=g+c.stylePrefix),e=new Selectors(c.selectors),f=new ClassTagsView({collection:e,config:c}),this},add:function(a,b){var c=b||{};return c.name=a.name||a,e.add(c)},get:function(a){return e.where({name:a})[0]},getAll:function(){return e},render:function(a){if(a){var b=new ClassTagsView({collection:new Selectors(a),config:c});return b.render().el}return f.render().el}}}}),c("SelectorManager",["SelectorManager/main"],function(a){return a}),c("ModalDialog/config/config",[],function(){return{stylePrefix:"mdl-",title:"",content:"",backdrop:!0}}),c("ModalDialog/model/Modal",["backbone"],function(a){return a.Model.extend({defaults:{title:"",content:"",open:!1}})}),c("text!ModalDialog/template/modal.html",[],function(){return'
    \n
    \n
    <%= title %>
    \n
    \n
    \n
    \n
    <%= content %>
    \n
    \n
    \n
    \n
    \n\n'}),c("ModalDialog/view/ModalView",["backbone","text!./../template/modal.html"],function(a,b){return a.View.extend({template:_.template(b),events:{},initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.listenTo(this.model,"change:open",this.updateOpen),this.listenTo(this.model,"change:title",this.updateTitle),this.listenTo(this.model,"change:content",this.updateContent), -this.events["click ."+this.pfx+"btn-close"]="hide",this.config.backdrop&&(this.events["click ."+this.pfx+"backlayer"]="hide"),this.delegateEvents()},getCollector:function(){return this.$collector||(this.$collector=this.$el.find("."+this.pfx+"collector")),this.$collector},getContent:function(){return this.$content||(this.$content=this.$el.find("."+this.pfx+"content #"+this.pfx+"c")),this.$content},getTitle:function(){return this.$title||(this.$title=this.$el.find("."+this.pfx+"title")),this.$title.get(0)},updateContent:function(){var a=this.getContent();this.getCollector().append(a.children()),a.html(this.model.get("content"))},updateTitle:function(){var a=this.getTitle();a&&(a.innerHTML=this.model.get("title"))},updateOpen:function(){this.model.get("open")?this.$el.show():this.$el.hide()},hide:function(){this.model.set("open",0)},show:function(){this.model.set("open",1)},render:function(){var a=this.model.toJSON();return a.pfx=this.pfx,this.$el.html(this.template(a)),this.$el.attr("class",this.pfx+"container"),this.updateOpen(),this}})}),c("ModalDialog/main",["require","./config/config","./model/Modal","./view/ModalView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Modal"),g=a("./view/ModalView");return{name:"Modal",init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);var i=d.pStylePrefix;return i&&(d.stylePrefix=i+d.stylePrefix),b=new f(d),c=new g({model:b,config:d}),d.em&&d.em.on("loaded",function(){this.render().appendTo(d.em.config.el||"body")},this),this},open:function(){return c.show(),this},close:function(){return c.hide(),this},isOpen:function(){return!!b.get("open")},setTitle:function(a){return b.set("title",a),this},getTitle:function(){return b.get("title")},setContent:function(a){return b.set("content"," "),b.set("content",a),this},getContent:function(){return b.get("content")},getContentEl:function(){return c.getContent().get(0)},getModel:function(){return b},render:function(){return c.render().$el}}}}),c("ModalDialog",["ModalDialog/main"],function(a){return a}),c("CodeManager/config/config",[],function(){return{stylePrefix:"cm-",inlineCss:!1}}),c("CodeManager/model/HtmlGenerator",["backbone"],function(a){return a.Model.extend({build:function(a,b){var c=a.get("components")||a,d="";return c.each(function(a){d+=a.toHTML({cssc:b})},this),d}})}),c("CodeManager/model/CssGenerator",["backbone"],function(a){return a.Model.extend({initialize:function(){this.compCls=[]},buildFromModel:function(a){var b="",c=a.get("style"),d=a.get("classes");if(d&&d.each(function(a){this.compCls.push(a.get("name"))},this),c&&0!==Object.keys(c).length){b+="#"+a.cid+"{";for(var e in c)c.hasOwnProperty(e)&&(b+=e+":"+c[e]+";");b+="}"}return b},buildFromComp:function(a){var b=a.get("components")||a,c="";return b.each(function(a){var b=a.get("components");c+=this.buildFromModel(a),b.length&&(c+=this.buildFromComp(b))},this),c},build:function(a,b){this.compCls=[];var c=this.buildFromModel(a);c+=this.buildFromComp(a);this.compCls;if(b){var d=b.getAll(),e={};d.each(function(a){var b=a.get("maxWidth");if(b){var d=e[b];return void(d?d.push(a):e[b]=[a])}c+=this.buildFromRule(a)},this);for(var f in e){for(var g=e[f],h="",i=0,j=g.length;i-1&&(g=1)}),f&&g){f+=e?":"+e:"";var i="";if(d&&0!==Object.keys(d).length)for(var j in d)d.hasOwnProperty(j)&&(i+=j+":"+d[j]+";");i&&(b+=f+"{"+i+"}")}return b}})}),c("CodeManager/model/JsonGenerator",["backbone"],function(a){return a.Model.extend({build:function(b){var c=b.toJSON();return this.beforeEach(c),_.each(c,function(b,d){var e=c[d];if(e instanceof a.Model)c[d]=this.build(e);else if(e instanceof a.Collection){var f=e;c[d]=[],f.length&&f.each(function(a,b){c[d][b]=this.build(a)},this)}},this),c},beforeEach:function(a){delete a.status}})}),function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof c&&c.amd?c("codemirror/lib/codemirror",b):a.CodeMirror=b()}(this,function(){"use strict";function a(a){return new RegExp("(^|\\s)"+a+"(?:$|\\s)\\s*")}function b(a){for(var b=a.childNodes.length;b>0;--b)a.removeChild(a.firstChild);return a}function c(a,c){return b(a).appendChild(c)}function d(a,b,c,d){var e=document.createElement(a);if(c&&(e.className=c),d&&(e.style.cssText=d),"string"==typeof b)e.appendChild(document.createTextNode(b));else if(b)for(var f=0;f=b)return g+(b-f);g+=h-f,g+=c-g%c,f=h+1}}function l(){this.id=null}function m(a,b){for(var c=0;c=b)return d+Math.min(g,b-e);if(e+=f-d,e+=c-e%c,d=f+1,e>=b)return d}}function o(a){for(;Hg.length<=a;)Hg.push(p(Hg)+" ");return Hg[a]}function p(a){return a[a.length-1]}function q(a,b){for(var c=[],d=0;d"€"&&(a.toUpperCase()!=a.toLowerCase()||Ig.test(a))}function v(a,b){return b?!!(b.source.indexOf("\\w")>-1&&u(a))||b.test(a):u(a)}function w(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function x(a){return a.charCodeAt(0)>=768&&Jg.test(a)}function y(a,b,c){var e=this;this.input=c,e.scrollbarFiller=d("div",null,"CodeMirror-scrollbar-filler"),e.scrollbarFiller.setAttribute("cm-not-content","true"),e.gutterFiller=d("div",null,"CodeMirror-gutter-filler"),e.gutterFiller.setAttribute("cm-not-content","true"),e.lineDiv=d("div",null,"CodeMirror-code"),e.selectionDiv=d("div",null,null,"position: relative; z-index: 1"),e.cursorDiv=d("div",null,"CodeMirror-cursors"),e.measure=d("div",null,"CodeMirror-measure"),e.lineMeasure=d("div",null,"CodeMirror-measure"),e.lineSpace=d("div",[e.measure,e.lineMeasure,e.selectionDiv,e.cursorDiv,e.lineDiv],null,"position: relative; outline: none"),e.mover=d("div",[d("div",[e.lineSpace],"CodeMirror-lines")],null,"position: relative"),e.sizer=d("div",[e.mover],"CodeMirror-sizer"),e.sizerWidth=null,e.heightForcer=d("div",null,null,"position: absolute; height: "+Cg+"px; width: 1px;"),e.gutters=d("div",null,"CodeMirror-gutters"),e.lineGutter=null,e.scroller=d("div",[e.sizer,e.heightForcer,e.gutters],"CodeMirror-scroll"),e.scroller.setAttribute("tabIndex","-1"),e.wrapper=d("div",[e.scrollbarFiller,e.gutterFiller,e.scroller],"CodeMirror"),gg&&hg<8&&(e.gutters.style.zIndex=-1,e.scroller.style.paddingRight=0),ig||dg&&qg||(e.scroller.draggable=!0),a&&(a.appendChild?a.appendChild(e.wrapper):a(e.wrapper)),e.viewFrom=e.viewTo=b.first,e.reportedViewFrom=e.reportedViewTo=b.first,e.view=[],e.renderedView=null,e.externalMeasured=null,e.viewOffset=0,e.lastWrapHeight=e.lastWrapWidth=0,e.updateLineNumbers=null,e.nativeBarWidth=e.barHeight=e.barWidth=0,e.scrollbarsClipped=!1,e.lineNumWidth=e.lineNumInnerWidth=e.lineNumChars=null,e.alignWidgets=!1,e.cachedCharWidth=e.cachedTextHeight=e.cachedPaddingH=null,e.maxLine=null,e.maxLineLength=0,e.maxLineChanged=!1,e.wheelDX=e.wheelDY=e.wheelStartX=e.wheelStartY=null,e.shift=!1,e.selForContextMenu=null,e.activeTouch=null,c.init(e)}function z(a,b){if(b-=a.first,b<0||b>=a.size)throw new Error("There is no line "+(b+a.first)+" in the document.");for(var c=a;!c.lines;)for(var d=0;;++d){var e=c.children[d],f=e.chunkSize();if(b=a.first&&bc?H(c,z(a,c).text.length):O(b,z(a,b.line).text.length)}function O(a,b){var c=a.ch;return null==c||c>b?H(a.line,b):c<0?H(a.line,0):a}function P(a,b){for(var c=[],d=0;d=b:f.to>b);(d||(d=[])).push(new S(g,f.from,i?null:f.to))}}return d}function X(a,b,c){var d;if(a)for(var e=0;e=b:f.to>b);if(h||f.from==b&&"bookmark"==g.type&&(!c||f.marker.insertLeft)){var i=null==f.from||(g.inclusiveLeft?f.from<=b:f.from0&&h)for(var v=0;v0)){var k=[i,1],l=I(j.from,h.from),n=I(j.to,h.to);(l<0||!g.inclusiveLeft&&!l)&&k.push({from:j.from,to:h.from}),(n>0||!g.inclusiveRight&&!n)&&k.push({from:h.to,to:j.to}),e.splice.apply(e,k),i+=k.length-1}}return e}function _(a){var b=a.markedSpans;if(b){for(var c=0;c=0&&l<=0||k<=0&&l>=0)&&(k<=0&&(i.marker.inclusiveRight&&e.inclusiveLeft?I(j.to,c)>=0:I(j.to,c)>0)||k>=0&&(i.marker.inclusiveRight&&e.inclusiveLeft?I(j.from,d)<=0:I(j.from,d)<0)))return!0}}}function ia(a){for(var b;b=fa(a);)a=b.find(-1,!0).line;return a}function ja(a){for(var b,c;b=ga(a);)a=b.find(1,!0).line,(c||(c=[])).push(a);return c}function ka(a,b){var c=z(a,b),d=ia(c);return c==d?b:D(d)}function la(a,b){if(b>a.lastLine())return b;var c,d=z(a,b);if(!ma(a,d))return b;for(;c=ga(d);)d=c.find(1,!0).line;return D(d)+1}function ma(a,b){var c=Lg&&b.markedSpans;if(c)for(var d=void 0,e=0;eb.maxLineLength&&(b.maxLineLength=c,b.maxLine=a)})}function ra(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;fb||b==c&&g.to==b)&&(d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?"rtl":"ltr"),e=!0)}e||d(b,c,"ltr")}function sa(a){return a.level%2?a.to:a.from}function ta(a){return a.level%2?a.from:a.to}function ua(a){var b=Ba(a);return b?sa(b[0]):0}function va(a){var b=Ba(a);return b?ta(p(b)):a.text.length}function wa(a,b,c){var d=a[0].level;return b==d||c!=d&&bb)return d;if(e.from==b||e.to==b){if(null!=c)return wa(a,e.level,a[c].level)?(e.from!=e.to&&(Mg=c),d):(e.from!=e.to&&(Mg=d),c);c=d}}return c}function ya(a,b,c,d){if(!d)return b+c;do b+=c;while(b>0&&x(a.text.charAt(b)));return b}function za(a,b,c,d){var e=Ba(a);if(!e)return Aa(a,b,c,d);for(var f=xa(e,b),g=e[f],h=ya(a,b,g.level%2?-c:c,d);;){if(h>g.from&&h0==g.level%2?g.to:g.from);if(g=e[f+=c],!g)return null;h=c>0==g.level%2?ya(a,g.to,-1,d):ya(a,g.from,1,d)}}function Aa(a,b,c,d){var e=b+c;if(d)for(;e>0&&x(a.text.charAt(e));)e+=c;return e<0||e>a.text.length?null:e}function Ba(a){var b=a.order;return null==b&&(b=a.order=Ng(a.text)),b}function Ca(a,b){return a._handlers&&a._handlers[b]||Og}function Da(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,!1);else if(a.detachEvent)a.detachEvent("on"+b,c);else{var d=a._handlers,e=d&&d[b];if(e){var f=m(e,c);f>-1&&(d[b]=e.slice(0,f).concat(e.slice(f+1)))}}}function Ea(a,b){var c=Ca(a,b);if(c.length)for(var d=Array.prototype.slice.call(arguments,2),e=0;e0}function Ia(a){a.prototype.on=function(a,b){Pg(this,a,b)},a.prototype.off=function(a,b){Da(this,a,b)}}function Ja(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function Ka(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function La(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.returnValue}function Ma(a){Ja(a),Ka(a)}function Na(a){return a.target||a.srcElement}function Oa(a){var b=a.which;return null==b&&(1&a.button?b=1:2&a.button?b=3:4&a.button&&(b=2)),rg&&a.ctrlKey&&1==b&&(b=3),b}function Pa(a){if(null==Ag){var b=d("span","​");c(a,d("span",[b,document.createTextNode("x")])),0!=a.firstChild.offsetHeight&&(Ag=b.offsetWidth<=1&&b.offsetHeight>2&&!(gg&&hg<8))}var e=Ag?d("span","​"):d("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return e.setAttribute("cm-text",""),e}function Qa(a){if(null!=Bg)return Bg;var d=c(a,document.createTextNode("AخA")),e=vg(d,0,1).getBoundingClientRect(),f=vg(d,1,2).getBoundingClientRect();return b(a),!(!e||e.left==e.right)&&(Bg=f.right-e.right<3)}function Ra(a){if(null!=Ug)return Ug;var b=c(a,d("span","x")),e=b.getBoundingClientRect(),f=vg(b,0,1).getBoundingClientRect();return Ug=Math.abs(e.left-f.left)>1}function Sa(a,b){arguments.length>2&&(b.dependencies=Array.prototype.slice.call(arguments,2)),Vg[a]=b}function Ta(a,b){Wg[a]=b}function Ua(a){if("string"==typeof a&&Wg.hasOwnProperty(a))a=Wg[a];else if(a&&"string"==typeof a.name&&Wg.hasOwnProperty(a.name)){var b=Wg[a.name];"string"==typeof b&&(b={name:b}),a=t(b,a),a.name=b.name}else{if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a))return Ua("application/xml");if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+json$/.test(a))return Ua("application/json")}return"string"==typeof a?{name:a}:a||{name:"null"}}function Va(a,b){b=Ua(b);var c=Vg[b.name];if(!c)return Va(a,"text/plain");var d=c(a,b);if(Xg.hasOwnProperty(b.name)){var e=Xg[b.name];for(var f in e)e.hasOwnProperty(f)&&(d.hasOwnProperty(f)&&(d["_"+f]=d[f]),d[f]=e[f])}if(d.name=b.name,b.helperType&&(d.helperType=b.helperType),b.modeProps)for(var g in b.modeProps)d[g]=b.modeProps[g];return d}function Wa(a,b){var c=Xg.hasOwnProperty(a)?Xg[a]:Xg[a]={};j(b,c)}function Xa(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c}function Ya(a,b){for(var c;a.innerMode&&(c=a.innerMode(b),c&&c.mode!=a);)b=c.state,a=c.mode;return c||{mode:a,state:b}}function Za(a,b,c){return!a.startState||a.startState(b,c)}function $a(a,b,c,d){var e=[a.state.modeGen],f={};gb(a,b.text,a.doc.mode,c,function(a,b){return e.push(a,b)},f,d);for(var g=function(c){var d=a.state.overlays[c],g=1,h=0;gb(a,b.text,d.mode,!0,function(a,b){for(var c=g;ha&&e.splice(g,1,a,e[g+1],f),g+=2,h=Math.min(a,f)}if(b)if(d.opaque)e.splice(c,g-c,a,"overlay "+b),g=c+2;else for(;ca.options.maxHighlightLength?Xa(a.doc.mode,d):d);b.stateAfter=d,b.styles=e.styles,e.classes?b.styleClasses=e.classes:b.styleClasses&&(b.styleClasses=null),c===a.doc.frontier&&a.doc.frontier++}return b.styles}function ab(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0;var f=hb(a,b,c),g=f>d.first&&z(d,f-1).stateAfter;return g=g?Xa(d.mode,g):Za(d.mode),d.iter(f,b,function(c){bb(a,c.text,g);var h=f==b-1||f%5==0||f>=e.viewFrom&&fb.start)return f}throw new Error("Mode "+a.name+" failed to advance stream.")}function eb(a,b,c,d){var e,f=function(a){return{start:l.start,end:l.pos,string:l.current(),type:e||null,state:a?Xa(g.mode,k):k}},g=a.doc,h=g.mode;b=N(g,b);var i,j=z(g,b.line),k=ab(a,b.line,c),l=new Yg(j.text,a.options.tabSize);for(d&&(i=[]);(d||l.posa.options.maxHighlightLength?(h=!1,g&&bb(a,b,d,l.pos),l.pos=b.length,i=null):i=fb(db(c,l,d,m),f),m){var n=m[0].name;n&&(i="m-"+(i?n+" "+i:n))}if(!h||k!=i){for(;jg;--h){if(h<=f.first)return f.first;var i=z(f,h-1);if(i.stateAfter&&(!c||h<=f.frontier))return h;var j=k(i.text,null,a.options.tabSize);(null==e||d>j)&&(e=h-1,d=j)}return e}function ib(a,b,c){this.text=a,aa(this,b),this.height=c?c(this):1}function jb(a,b,c,d){a.text=b,a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null),null!=a.order&&(a.order=null),_(a),aa(a,c);var e=d?d(a):1;e!=a.height&&C(a,e)}function kb(a){a.parent=null,_(a)}function lb(a,b){if(!a||/^\s*$/.test(a))return null;var c=b.addModeClass?_g:$g;return c[a]||(c[a]=a.replace(/\S+/g,"cm-$&"))}function mb(a,b){var c=d("span",null,null,ig?"padding-right: .1px":null),e={pre:d("pre",[c],"CodeMirror-line"),content:c,col:0,pos:0,cm:a,trailingSpace:!1,splitSpaces:(gg||ig)&&a.getOption("lineWrapping")};b.measure={};for(var f=0;f<=(b.rest?b.rest.length:0);f++){var g=f?b.rest[f-1]:b.line,i=void 0;e.pos=0,e.addToken=ob,Qa(a.display.measure)&&(i=Ba(g))&&(e.addToken=qb(e.addToken,i)),e.map=[];var j=b!=a.display.externalMeasured&&D(g);sb(g,e,_a(a,g,j)),g.styleClasses&&(g.styleClasses.bgClass&&(e.bgClass=h(g.styleClasses.bgClass,e.bgClass||"")),g.styleClasses.textClass&&(e.textClass=h(g.styleClasses.textClass,e.textClass||""))),0==e.map.length&&e.map.push(0,0,e.content.appendChild(Pa(a.display.measure))),0==f?(b.measure.map=e.map,b.measure.cache={}):((b.measure.maps||(b.measure.maps=[])).push(e.map),(b.measure.caches||(b.measure.caches=[])).push({}))}if(ig){var k=e.content.lastChild;(/\bcm-tab\b/.test(k.className)||k.querySelector&&k.querySelector(".cm-tab"))&&(e.content.className="cm-tab-wrap-hack")}return Ea(a,"renderLine",a,b.line,e.pre),e.pre.className&&(e.textClass=h(e.pre.className,e.textClass||"")),e}function nb(a){var b=d("span","•","cm-invalidchar");return b.title="\\u"+a.charCodeAt(0).toString(16),b.setAttribute("aria-label",b.title),b}function ob(a,b,c,e,f,g,h){if(b){var i,j=a.splitSpaces?pb(b,a.trailingSpace):b,k=a.cm.state.specialChars,l=!1;if(k.test(b)){i=document.createDocumentFragment();for(var m=0;;){k.lastIndex=m;var n=k.exec(b),p=n?n.index-m:b.length-m;if(p){var q=document.createTextNode(j.slice(m,m+p));gg&&hg<9?i.appendChild(d("span",[q])):i.appendChild(q),a.map.push(a.pos,a.pos+p,q),a.col+=p,a.pos+=p}if(!n)break;m+=p+1;var r=void 0;if("\t"==n[0]){var s=a.cm.options.tabSize,t=s-a.col%s;r=i.appendChild(d("span",o(t),"cm-tab")),r.setAttribute("role","presentation"),r.setAttribute("cm-text","\t"),a.col+=t}else"\r"==n[0]||"\n"==n[0]?(r=i.appendChild(d("span","\r"==n[0]?"␍":"␤","cm-invalidchar")),r.setAttribute("cm-text",n[0]),a.col+=1):(r=a.cm.options.specialCharPlaceholder(n[0]),r.setAttribute("cm-text",n[0]),gg&&hg<9?i.appendChild(d("span",[r])):i.appendChild(r),a.col+=1);a.map.push(a.pos,a.pos+1,r),a.pos++}}else a.col+=b.length,i=document.createTextNode(j),a.map.push(a.pos,a.pos+b.length,i),gg&&hg<9&&(l=!0),a.pos+=b.length;if(a.trailingSpace=32==j.charCodeAt(b.length-1),c||e||f||l||h){var u=c||"";e&&(u+=e),f&&(u+=f);var v=d("span",[i],u,h);return g&&(v.title=g),a.content.appendChild(v)}a.content.appendChild(i)}}function pb(a,b){if(a.length>1&&!/ /.test(a))return a;for(var c=b,d="",e=0;ej&&l.from<=j));m++);if(l.to>=k)return a(c,d,e,f,g,h,i);a(c,d.slice(0,l.to-j),e,f,null,h,i),f=null,d=d.slice(l.to-j),j=l.to}}}function rb(a,b,c,d){var e=!d&&c.widgetNode;e&&a.map.push(a.pos,a.pos+b,e),!d&&a.cm.display.input.needsContentAttribute&&(e||(e=a.content.appendChild(document.createElement("span"))),e.setAttribute("cm-marker",c.id)),e&&(a.cm.display.input.setUneditable(e),a.content.appendChild(e)),a.pos+=b,a.trailingSpace=!1}function sb(a,b,c){var d=a.markedSpans,e=a.text,f=0;if(d)for(var g,h,i,j,k,l,m,n=e.length,o=0,p=1,q="",r=0;;){if(r==o){i=j=k=l=h="",m=null,r=1/0;for(var s=[],t=void 0,u=0;uo||w.collapsed&&v.to==o&&v.from==o)?(null!=v.to&&v.to!=o&&r>v.to&&(r=v.to,j=""),w.className&&(i+=" "+w.className),w.css&&(h=(h?h+";":"")+w.css),w.startStyle&&v.from==o&&(k+=" "+w.startStyle),w.endStyle&&v.to==r&&(t||(t=[])).push(w.endStyle,v.to),w.title&&!l&&(l=w.title),w.collapsed&&(!m||da(m.marker,w)<0)&&(m=v)):v.from>o&&r>v.from&&(r=v.from)}if(t)for(var x=0;x=n)break;for(var z=Math.min(n,r);;){if(q){var A=o+q.length;if(!m){var B=A>z?q.slice(0,z-o):q;b.addToken(b,B,g?g+i:i,k,o+B.length==r?j:"",l,h)}if(A>=z){q=q.slice(z-o),o=z;break}o=A,k=""}q=e.slice(f,f=c[p++]),g=lb(c[p++],b.cm.options)}}else for(var C=1;C2&&f.push((i.bottom+j.top)/2-c.top)}}f.push(c.bottom-c.top)}}function Vb(a,b,c){if(a.line==b)return{map:a.measure.map,cache:a.measure.cache};for(var d=0;dc)return{map:a.measure.maps[e],cache:a.measure.caches[e],before:!0}}function Wb(a,b){b=ia(b);var d=D(b),e=a.display.externalMeasured=new tb(a.doc,b,d);e.lineN=d;var f=e.built=mb(a,e);return e.text=f.pre,c(a.display.lineMeasure,f.pre),e}function Xb(a,b,c,d){return $b(a,Zb(a,b),c,d)}function Yb(a,b){if(b>=a.display.viewFrom&&b=c.lineN&&bb)&&(f=i-h,e=f-1,b>=i&&(g="right")),null!=e){if(d=a[j+2],h==i&&c==(d.insertLeft?"left":"right")&&(g=c),"left"==c&&0==e)for(;j&&a[j-2]==a[j-3]&&a[j-1].insertLeft;)d=a[(j-=3)+2],g="left";if("right"==c&&e==i-h)for(;j=0&&(c=a[e]).left==c.right;e--);return c}function bc(a,b,c,d){var e,f=_b(b.map,c,d),g=f.node,h=f.start,i=f.end,j=f.collapse;if(3==g.nodeType){for(var k=0;k<4;k++){for(;h&&x(b.line.text.charAt(f.coverStart+h));)--h;for(;f.coverStart+i0&&(j=d="right");var l;e=a.options.lineWrapping&&(l=g.getClientRects()).length>1?l["right"==d?l.length-1:0]:g.getBoundingClientRect()}if(gg&&hg<9&&!h&&(!e||!e.left&&!e.right)){var m=g.parentNode.getClientRects()[0];e=m?{left:m.left,right:m.left+rc(a.display),top:m.top,bottom:m.bottom}:ch}for(var n=e.top-b.rect.top,o=e.bottom-b.rect.top,p=(n+o)/2,q=b.view.measure.heights,r=0;rc.from?g(a-1):g(a,d)}d=d||z(a.doc,b.line),e||(e=Zb(a,d));var i=Ba(d),j=b.ch;if(!i)return g(j);var k=xa(i,j),l=h(j,k);return null!=Mg&&(l.other=h(j,Mg)),l}function mc(a,b){var c=0;b=N(a.doc,b),a.options.lineWrapping||(c=rc(a.display)*b.ch);var d=z(a.doc,b.line),e=oa(d)+Ob(a.display);return{left:c,right:c,top:e,bottom:e+d.height}}function nc(a,b,c,d){var e=H(a,b);return e.xRel=d,c&&(e.outside=!0),e}function oc(a,b,c){var d=a.doc;if(c+=a.display.viewOffset,c<0)return nc(d.first,0,!0,-1);var e=E(d,c),f=d.first+d.size-1;if(e>f)return nc(d.first+d.size-1,z(d,f).text.length,!0,1);b<0&&(b=0);for(var g=z(d,e);;){var h=pc(a,g,e,b,c),i=ga(g),j=i&&i.find(0,!0);if(!i||!(h.ch>j.from.ch||h.ch==j.from.ch&&h.xRel>0))return h;e=D(g=j.to.line)}}function pc(a,b,c,d,e){function f(d){var e=lc(a,H(c,d),"line",b,j);return h=!0,g>e.bottom?e.left-i:gq)return nc(c,n,r,1);for(;;){if(k?n==m||n==za(b,m,1):n-m<=1){var s=d0&&s1){var v=$b(a,j,s,"right");g<=v.bottom&&g>=v.top&&Math.abs(d-v.right)1?1:0);return w}var y=Math.ceil(l/2),z=m+y;if(k){z=m;for(var A=0;Ad?(n=z,q=B,(r=h)&&(q+=1e3),l=y):(m=z,o=B,p=h,l-=y)}}function qc(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==Zg){Zg=d("pre");for(var e=0;e<49;++e)Zg.appendChild(document.createTextNode("x")),Zg.appendChild(d("br"));Zg.appendChild(document.createTextNode("x"))}c(a.measure,Zg);var f=Zg.offsetHeight/50;return f>3&&(a.cachedTextHeight=f),b(a.measure),f||1}function rc(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b=d("span","xxxxxxxxxx"),e=d("pre",[b]);c(a.measure,e);var f=b.getBoundingClientRect(),g=(f.right-f.left)/10;return g>2&&(a.cachedCharWidth=g),g||10}function sc(a){for(var b=a.display,c={},d={},e=b.gutters.clientLeft,f=b.gutters.firstChild,g=0;f;f=f.nextSibling,++g)c[a.options.gutters[g]]=f.offsetLeft+f.clientLeft+e,d[a.options.gutters[g]]=f.clientWidth;return{fixedPos:tc(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:c,gutterWidth:d,wrapperWidth:b.wrapper.clientWidth}}function tc(a){return a.scroller.getBoundingClientRect().left-a.sizer.getBoundingClientRect().left}function uc(a){var b=qc(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/rc(a.display)-3);return function(e){if(ma(a.doc,e))return 0;var f=0;if(e.widgets)for(var g=0;g=a.display.viewTo)return null;if(b-=a.display.viewFrom,b<0)return null;for(var c=a.display.view,d=0;d=a.display.viewTo||h.to().line3&&(e(n,p.top,null,p.bottom),n=k,p.bottomi.bottom||j.bottom==i.bottom&&j.right>i.right)&&(i=j),n0?b.blinker=setInterval(function(){return b.cursorDiv.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate):a.options.cursorBlinkRate<0&&(b.cursorDiv.style.visibility="hidden")}}function Dc(a){a.state.focused||(a.display.input.focus(),Fc(a))}function Ec(a){a.state.delayingBlurEvent=!0,setTimeout(function(){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!1,Gc(a))},100)}function Fc(a,b){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!1),"nocursor"!=a.options.readOnly&&(a.state.focused||(Ea(a,"focus",a,b),a.state.focused=!0,g(a.display.wrapper,"CodeMirror-focused"),a.curOp||a.display.selForContextMenu==a.doc.sel||(a.display.input.reset(),ig&&setTimeout(function(){return a.display.input.reset(!0)},20)),a.display.input.receivedFocus()),Cc(a))}function Gc(a,b){a.state.delayingBlurEvent||(a.state.focused&&(Ea(a,"blur",a,b),a.state.focused=!1,yg(a.display.wrapper,"CodeMirror-focused")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.display.shift=!1)},150))}function Hc(a){var b=a.display,c=b.view;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var d=tc(b)-b.scroller.scrollLeft+a.doc.scrollLeft,e=b.gutters.offsetWidth,f=d+"px",g=0;g.001||i<-.001)&&(C(e.line,f),Kc(e.line),e.rest))for(var j=0;j=g&&(f=E(b,oa(z(b,i))-a.wrapper.clientHeight),g=i)}return{from:f,to:Math.max(g,f+1)}}function Mc(a,b){Math.abs(a.doc.scrollTop-b)<2||(a.doc.scrollTop=b,dg||Ad(a,{top:b}),a.display.scroller.scrollTop!=b&&(a.display.scroller.scrollTop=b),a.display.scrollbars.setScrollTop(b),dg&&Ad(a),ud(a,100))}function Nc(a,b,c){(c?b==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-b)<2)||(b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth),a.doc.scrollLeft=b,Hc(a),a.display.scroller.scrollLeft!=b&&(a.display.scroller.scrollLeft=b),a.display.scrollbars.setScrollLeft(b))}function Oc(a){var b=a.wheelDeltaX,c=a.wheelDeltaY;return null==b&&a.detail&&a.axis==a.HORIZONTAL_AXIS&&(b=a.detail),null==c&&a.detail&&a.axis==a.VERTICAL_AXIS?c=a.detail:null==c&&(c=a.wheelDelta),{x:b,y:c}}function Pc(a){var b=Oc(a);return b.x*=eh,b.y*=eh,b}function Qc(a,b){var c=Oc(b),d=c.x,e=c.y,f=a.display,g=f.scroller,h=g.scrollWidth>g.clientWidth,i=g.scrollHeight>g.clientHeight;if(d&&h||e&&i){if(e&&rg&&ig)a:for(var j=b.target,k=f.view;j!=g;j=j.parentNode)for(var l=0;l(window.innerHeight||document.documentElement.clientHeight)&&(f=!1),null!=f&&!og){var g=d("div","​",null,"position: absolute;\n top: "+(b.top-c.viewOffset-Ob(a.display))+"px;\n height: "+(b.bottom-b.top+Rb(a)+c.barHeight)+"px;\n left: "+b.left+"px; width: 2px;");a.display.lineSpace.appendChild(g),g.scrollIntoView(f),a.display.lineSpace.removeChild(g)}}}function Yc(a,b,c,d){null==d&&(d=0);for(var e,f=0;f<5;f++){var g=!1;e=lc(a,b);var h=c&&c!=b?lc(a,c):e,i=$c(a,Math.min(e.left,h.left),Math.min(e.top,h.top)-d,Math.max(e.left,h.left),Math.max(e.bottom,h.bottom)+d),j=a.doc.scrollTop,k=a.doc.scrollLeft;if(null!=i.scrollTop&&(Mc(a,i.scrollTop),Math.abs(a.doc.scrollTop-j)>1&&(g=!0)),null!=i.scrollLeft&&(Nc(a,i.scrollLeft),Math.abs(a.doc.scrollLeft-k)>1&&(g=!0)),!g)break}return e}function Zc(a,b,c,d,e){var f=$c(a,b,c,d,e);null!=f.scrollTop&&Mc(a,f.scrollTop),null!=f.scrollLeft&&Nc(a,f.scrollLeft)}function $c(a,b,c,d,e){var f=a.display,g=qc(a.display);c<0&&(c=0);var h=a.curOp&&null!=a.curOp.scrollTop?a.curOp.scrollTop:f.scroller.scrollTop,i=Tb(a),j={};e-c>i&&(e=c+i);var k=a.doc.height+Pb(f),l=ck-g;if(ch+i){var n=Math.min(c,(m?k:e)-i);n!=h&&(j.scrollTop=n)}var o=a.curOp&&null!=a.curOp.scrollLeft?a.curOp.scrollLeft:f.scroller.scrollLeft,p=Sb(a)-(a.options.fixedGutter?f.gutters.offsetWidth:0),q=d-b>p;return q&&(d=b+p),b<10?j.scrollLeft=0:bp+o-3&&(j.scrollLeft=d+(q?0:10)-p),j}function _c(a,b,c){null==b&&null==c||bd(a),null!=b&&(a.curOp.scrollLeft=(null==a.curOp.scrollLeft?a.doc.scrollLeft:a.curOp.scrollLeft)+b),null!=c&&(a.curOp.scrollTop=(null==a.curOp.scrollTop?a.doc.scrollTop:a.curOp.scrollTop)+c)}function ad(a){bd(a);var b=a.getCursor(),c=b,d=b;a.options.lineWrapping||(c=b.ch?H(b.line,b.ch-1):b,d=H(b.line,b.ch+1)),a.curOp.scrollToPos={from:c,to:d,margin:a.options.cursorScrollMargin,isCursor:!0}}function bd(a){var b=a.curOp.scrollToPos;if(b){a.curOp.scrollToPos=null;var c=mc(a,b.from),d=mc(a,b.to),e=$c(a,Math.min(c.left,d.left),Math.min(c.top,d.top)-b.margin,Math.max(c.right,d.right),Math.max(c.bottom,d.bottom)+b.margin);a.scrollTo(e.scrollLeft,e.scrollTop)}}function cd(a){a.curOp={cm:a,viewChanged:!1,startHeight:a.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++gh},vb(a.curOp)}function dd(a){var b=a.curOp;xb(b,function(a){for(var b=0;b=c.viewTo)||c.maxLineChanged&&b.options.lineWrapping,a.update=a.mustUpdate&&new wd(b,a.mustUpdate&&{top:a.scrollTop,ensure:a.scrollToPos},a.forceUpdate)}function gd(a){a.updatedDisplay=a.mustUpdate&&yd(a.cm,a.update)}function hd(a){var b=a.cm,c=b.display;a.updatedDisplay&&Jc(b),a.barMeasure=Rc(b),c.maxLineChanged&&!b.options.lineWrapping&&(a.adjustWidthTo=Xb(b,c.maxLine,c.maxLine.text.length).left+3,b.display.sizerWidth=a.adjustWidthTo,a.barMeasure.scrollWidth=Math.max(c.scroller.clientWidth,c.sizer.offsetLeft+a.adjustWidthTo+Rb(b)+b.display.barWidth),a.maxScrollLeft=Math.max(0,c.sizer.offsetLeft+a.adjustWidthTo-Sb(b))),(a.updatedDisplay||a.selectionChanged)&&(a.preparedSelection=c.input.prepareSelection(a.focus))}function id(a){var b=a.cm;null!=a.adjustWidthTo&&(b.display.sizer.style.minWidth=a.adjustWidthTo+"px",a.maxScrollLeftb)&&(e.updateLineNumbers=b),a.curOp.viewChanged=!0,b>=e.viewTo)Lg&&ka(a.doc,b)e.viewFrom?qd(a):(e.viewFrom+=d,e.viewTo+=d);else if(b<=e.viewFrom&&c>=e.viewTo)qd(a);else if(b<=e.viewFrom){var f=rd(a,c,c+d,1);f?(e.view=e.view.slice(f.index),e.viewFrom=f.lineN,e.viewTo+=d):qd(a)}else if(c>=e.viewTo){var g=rd(a,b,b,-1);g?(e.view=e.view.slice(0,g.index),e.viewTo=g.lineN):qd(a)}else{var h=rd(a,b,b,-1),i=rd(a,c,c+d,1);h&&i?(e.view=e.view.slice(0,h.index).concat(ub(a,h.lineN,i.lineN)).concat(e.view.slice(i.index)),e.viewTo+=d):qd(a)}var j=e.externalMeasured;j&&(c=e.lineN&&b=d.viewTo)){var f=d.view[xc(a,b)];if(null!=f.node){var g=f.changes||(f.changes=[]);m(g,c)==-1&&g.push(c)}}}function qd(a){a.display.viewFrom=a.display.viewTo=a.doc.first,a.display.view=[],a.display.viewOffset=0}function rd(a,b,c,d){var e,f=xc(a,b),g=a.display.view;if(!Lg||c==a.doc.first+a.doc.size)return{index:f,lineN:c};for(var h=a.display.viewFrom,i=0;i0){if(f==g.length-1)return null;e=h+g[f].size-b,f++}else e=h-b;b+=e,c+=e}for(;ka(a.doc,c)!=c;){if(f==(d<0?0:g.length-1))return null;c+=d*g[f-(d<0?1:0)].size,f+=d}return{index:f,lineN:c}}function sd(a,b,c){var d=a.display,e=d.view;0==e.length||b>=d.viewTo||c<=d.viewFrom?(d.view=ub(a,b,c),d.viewFrom=b):(d.viewFrom>b?d.view=ub(a,b,d.viewFrom).concat(d.view):d.viewFromc&&(d.view=d.view.slice(0,xc(a,c)))),d.viewTo=c}function td(a){for(var b=a.display.view,c=0,d=0;d=a.display.viewTo)){var c=+new Date+a.options.workTime,d=Xa(b.mode,ab(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.viewTo+500),function(f){if(b.frontier>=a.display.viewFrom){var g=f.styles,h=f.text.length>a.options.maxHighlightLength,i=$a(a,f,h?Xa(b.mode,d):d,!0);f.styles=i.styles;var j=f.styleClasses,k=i.classes;k?f.styleClasses=k:j&&(f.styleClasses=null);for(var l=!g||g.length!=f.styles.length||j!=k&&(!j||!k||j.bgClass!=k.bgClass||j.textClass!=k.textClass),m=0;!l&&mc)return ud(a,a.options.workDelay),!0}),e.length&&kd(a,function(){for(var b=0;b=d.viewFrom&&c.visible.to<=d.viewTo&&(null==d.updateLineNumbers||d.updateLineNumbers>=d.viewTo)&&d.renderedView==d.view&&0==td(a))return!1;Ic(a)&&(qd(a),c.dims=sc(a));var g=e.first+e.size,h=Math.max(c.visible.from-a.options.viewportMargin,e.first),i=Math.min(g,c.visible.to+a.options.viewportMargin);d.viewFromi&&d.viewTo-i<20&&(i=Math.min(g,d.viewTo)),Lg&&(h=ka(a.doc,h),i=la(a.doc,i));var j=h!=d.viewFrom||i!=d.viewTo||d.lastWrapHeight!=c.wrapperHeight||d.lastWrapWidth!=c.wrapperWidth;sd(a,h,i),d.viewOffset=oa(z(a.doc,d.viewFrom)),a.display.mover.style.top=d.viewOffset+"px";var k=td(a);if(!j&&0==k&&!c.force&&d.renderedView==d.view&&(null==d.updateLineNumbers||d.updateLineNumbers>=d.viewTo))return!1;var l=f();return k>4&&(d.lineDiv.style.display="none"),Bd(a,d.updateLineNumbers,c.dims),k>4&&(d.lineDiv.style.display=""),d.renderedView=d.view,l&&f()!=l&&l.offsetHeight&&l.focus(),b(d.cursorDiv),b(d.selectionDiv),d.gutters.style.height=d.sizer.style.minHeight=0,j&&(d.lastWrapHeight=c.wrapperHeight,d.lastWrapWidth=c.wrapperWidth,ud(a,400)),d.updateLineNumbers=null,!0}function zd(a,b){for(var c=b.viewport,d=!0;(d&&a.options.lineWrapping&&b.oldDisplayWidth!=Sb(a)||(c&&null!=c.top&&(c={top:Math.min(a.doc.height+Pb(a.display)-Tb(a),c.top)}),b.visible=Lc(a.display,a.doc,c),!(b.visible.from>=a.display.viewFrom&&b.visible.to<=a.display.viewTo)))&&yd(a,b);d=!1){Jc(a);var e=Rc(a);yc(a),Uc(a,e),Dd(a,e)}b.signal(a,"update",a),a.display.viewFrom==a.display.reportedViewFrom&&a.display.viewTo==a.display.reportedViewTo||(b.signal(a,"viewportChange",a,a.display.viewFrom,a.display.viewTo),a.display.reportedViewFrom=a.display.viewFrom,a.display.reportedViewTo=a.display.viewTo)}function Ad(a,b){var c=new wd(a,b);if(yd(a,c)){Jc(a),zd(a,c);var d=Rc(a);yc(a),Uc(a,d),Dd(a,d),c.finish()}}function Bd(a,c,d){function e(b){var c=b.nextSibling;return ig&&rg&&a.display.currentWheelTarget==b?b.style.display="none":b.parentNode.removeChild(b),c}for(var f=a.display,g=a.options.lineNumbers,h=f.lineDiv,i=h.firstChild,j=f.view,k=f.viewFrom,l=0;l-1&&(o=!1),Ab(a,n,k,d)),o&&(b(n.lineNumber),n.lineNumber.appendChild(document.createTextNode(G(a.options,k)))), -i=n.node.nextSibling}else{var p=Ib(a,n,k,d);h.insertBefore(p,i)}k+=n.size}for(;i;)i=e(i)}function Cd(a){var b=a.display.gutters.offsetWidth;a.display.sizer.style.marginLeft=b+"px"}function Dd(a,b){a.display.sizer.style.minHeight=b.docHeight+"px",a.display.heightForcer.style.top=b.docHeight+"px",a.display.gutters.style.height=b.docHeight+a.display.barHeight+Rb(a)+"px"}function Ed(a){var c=a.display.gutters,e=a.options.gutters;b(c);for(var f=0;f-1&&!a.lineNumbers&&(a.gutters=a.gutters.slice(0),a.gutters.splice(b,1))}function Gd(a,b){this.ranges=a,this.primIndex=b}function Hd(a,b){this.anchor=a,this.head=b}function Id(a,b){var c=a[b];a.sort(function(a,b){return I(a.from(),b.from())}),b=m(a,c);for(var d=1;d=0){var g=L(f.from(),e.from()),h=K(f.to(),e.to()),i=f.empty()?e.from()==e.head:f.from()==f.head;d<=b&&--b,a.splice(--d,2,new Hd(i?h:g,i?g:h))}}return new Gd(a,b)}function Jd(a,b){return new Gd([new Hd(a,b||a)],0)}function Kd(a){return a.text?H(a.from.line+a.text.length-1,p(a.text).length+(1==a.text.length?a.from.ch:0)):a.to}function Ld(a,b){if(I(a,b.from)<0)return a;if(I(a,b.to)<=0)return Kd(b);var c=a.line+b.text.length-(b.to.line-b.from.line)-1,d=a.ch;return a.line==b.to.line&&(d+=Kd(b).ch-b.to.ch),H(c,d)}function Md(a,b){for(var c=[],d=0;d1&&a.remove(h.line+1,o-1),a.insert(h.line+1,s)}yb(a,"change",a,b)}function Td(a,b,c){function d(a,e,f){if(a.linked)for(var g=0;g1&&!a.done[a.done.length-2].ranges?(a.done.pop(),p(a.done)):void 0}function Zd(a,b,c,d){var e=a.history;e.undone.length=0;var f,g,h=+new Date;if((e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&("+"==b.origin.charAt(0)&&a.cm&&e.lastModTime>h-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0)))&&(f=Yd(e,e.lastOp==d)))g=p(f.changes),0==I(b.from,b.to)&&0==I(b.from,g.to)?g.to=Kd(b):f.changes.push(Wd(a,b));else{var i=p(e.done);for(i&&i.ranges||ae(a.sel,e.done),f={changes:[Wd(a,b)],generation:e.generation},e.done.push(f);e.done.length>e.undoDepth;)e.done.shift(),e.done[0].ranges||e.done.shift()}e.done.push(c),e.generation=++e.maxGeneration,e.lastModTime=e.lastSelTime=h,e.lastOp=e.lastSelOp=d,e.lastOrigin=e.lastSelOrigin=b.origin,g||Ea(a,"historyAdded")}function $d(a,b,c,d){var e=b.charAt(0);return"*"==e||"+"==e&&c.ranges.length==d.ranges.length&&c.somethingSelected()==d.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}function _d(a,b,c,d){var e=a.history,f=d&&d.origin;c==e.lastSelOp||f&&e.lastSelOrigin==f&&(e.lastModTime==e.lastSelTime&&e.lastOrigin==f||$d(a,f,p(e.done),b))?e.done[e.done.length-1]=b:ae(b,e.done),e.lastSelTime=+new Date,e.lastSelOrigin=f,e.lastSelOp=c,d&&d.clearRedo!==!1&&Xd(e.undone)}function ae(a,b){var c=p(b);c&&c.ranges&&c.equals(a)||b.push(a)}function be(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=c.markedSpans),++f})}function ce(a){if(!a)return null;for(var b,c=0;c-1&&(p(h)[l]=j[l],delete j[l])}}}return d}function ge(a,b,c,d){if(a.cm&&a.cm.display.shift||a.extend){var e=b.anchor;if(d){var f=I(c,e)<0;f!=I(d,e)<0?(e=c,c=d):f!=I(c,d)<0&&(c=d)}return new Hd(e,c)}return new Hd(d||c,c)}function he(a,b,c,d){ne(a,new Gd([ge(a,a.sel.primary(),b,c)],0),d)}function ie(a,b,c){for(var d=[],e=0;e=b.ch:h.to>b.ch))){if(e&&(Ea(i,"beforeCursorEnter"),i.explicitlyCleared)){if(f.markedSpans){--g;continue}break}if(!i.atomic)continue;if(c){var j=i.find(d<0?1:-1),k=void 0;if((d<0?i.inclusiveRight:i.inclusiveLeft)&&(j=ue(a,j,-d,j&&j.line==b.line?f:null)),j&&j.line==b.line&&(k=I(j,c))&&(d<0?k<0:k>0))return se(a,j,b,d,e)}var l=i.find(d<0?-1:1);return(d<0?i.inclusiveLeft:i.inclusiveRight)&&(l=ue(a,l,d,l.line==b.line?f:null)),l?se(a,l,b,d,e):null}}return b}function te(a,b,c,d,e){var f=d||1,g=se(a,b,c,f,e)||!e&&se(a,b,c,f,!0)||se(a,b,c,-f,e)||!e&&se(a,b,c,-f,!0);return g?g:(a.cantEdit=!0,H(a.first,0))}function ue(a,b,c,d){return c<0&&0==b.ch?b.line>a.first?N(a,H(b.line-1)):null:c>0&&b.ch==(d||z(a,b.line)).text.length?b.line=0;--e)ye(a,{from:d[e].from,to:d[e].to,text:e?[""]:b.text});else ye(a,b)}}function ye(a,b){if(1!=b.text.length||""!=b.text[0]||0!=I(b.from,b.to)){var c=Md(a,b);Zd(a,b,c,a.cm?a.cm.curOp.id:NaN),Be(a,b,c,Y(a,b));var d=[];Td(a,function(a,c){c||m(d,a.history)!=-1||(Ge(a.history,b),d.push(a.history)),Be(a,b,null,Y(a,b))})}}function ze(a,b,c){if(!a.cm||!a.cm.state.suppressEdits||c){for(var d,e=a.history,f=a.sel,g="undo"==b?e.done:e.undone,h="undo"==b?e.undone:e.done,i=0;i=0;--n){var o=l(n);if(o)return o.v}}}}function Ae(a,b){if(0!=b&&(a.first+=b,a.sel=new Gd(q(a.sel.ranges,function(a){return new Hd(H(a.anchor.line+b,a.anchor.ch),H(a.head.line+b,a.head.ch))}),a.sel.primIndex),a.cm)){od(a.cm,a.first,a.first-b,b);for(var c=a.cm.display,d=c.viewFrom;da.lastLine())){if(b.from.linef&&(b={from:b.from,to:H(f,z(a,f).text.length),text:[b.text[0]],origin:b.origin}),b.removed=A(a,b.from,b.to),c||(c=Md(a,b)),a.cm?Ce(a.cm,b,d):Sd(a,b,d),oe(a,c,Eg)}}function Ce(a,b,c){var d=a.doc,e=a.display,f=b.from,g=b.to,h=!1,i=f.line;a.options.lineWrapping||(i=D(ia(z(d,f.line))),d.iter(i,g.line+1,function(a){if(a==e.maxLine)return h=!0,!0})),d.sel.contains(b.from,b.to)>-1&&Ga(a),Sd(d,b,c,uc(a)),a.options.lineWrapping||(d.iter(i,f.line+b.text.length,function(a){var b=pa(a);b>e.maxLineLength&&(e.maxLine=a,e.maxLineLength=b,e.maxLineChanged=!0,h=!1)}),h&&(a.curOp.updateMaxLine=!0)),d.frontier=Math.min(d.frontier,f.line),ud(a,400);var j=b.text.length-(g.line-f.line)-1;b.full?od(a):f.line!=g.line||1!=b.text.length||Rd(a.doc,b)?od(a,f.line,g.line+1,j):pd(a,f.line,"text");var k=Ha(a,"changes"),l=Ha(a,"change");if(l||k){var m={from:f,to:g,text:b.text,removed:b.removed,origin:b.origin};l&&yb(a,"change",a,m),k&&(a.curOp.changeObjs||(a.curOp.changeObjs=[])).push(m)}a.display.selForContextMenu=null}function De(a,b,c,d,e){if(d||(d=c),I(d,c)<0){var f=d;d=c,c=f}"string"==typeof b&&(b=a.splitLines(b)),xe(a,{from:c,to:d,text:b,origin:e})}function Ee(a,b,c,d){c0||0==h&&g.clearWhenEmpty!==!1)return g;if(g.replacedWith&&(g.collapsed=!0,g.widgetNode=d("span",[g.replacedWith],"CodeMirror-widget"),e.handleMouseEvents||g.widgetNode.setAttribute("cm-ignore-events","true"),e.insertLeft&&(g.widgetNode.insertLeft=!0)),g.collapsed){if(ha(a,b.line,b,c,g)||b.line!=c.line&&ha(a,c.line,b,c,g))throw new Error("Inserting collapsed marker partially overlapping an existing one");R()}g.addToHistory&&Zd(a,{from:b,to:c,origin:"markText"},a.sel,NaN);var i,k=b.line,l=a.cm;if(a.iter(k,c.line+1,function(a){l&&g.collapsed&&!l.options.lineWrapping&&ia(a)==l.display.maxLine&&(i=!0),g.collapsed&&k!=b.line&&C(a,0),V(a,new S(g,k==b.line?b.ch:null,k==c.line?c.ch:null)),++k}),g.collapsed&&a.iter(b.line,c.line+1,function(b){ma(a,b)&&C(b,0)}),g.clearOnEnter&&Pg(g,"beforeCursorEnter",function(){return g.clear()}),g.readOnly&&(Q(),(a.history.done.length||a.history.undone.length)&&a.clearHistory()),g.collapsed&&(g.id=++hh,g.atomic=!0),l){if(i&&(l.curOp.updateMaxLine=!0),g.collapsed)od(l,b.line,c.line+1);else if(g.className||g.title||g.startStyle||g.endStyle||g.css)for(var m=b.line;m<=c.line;m++)pd(l,m,"text");g.atomic&&qe(l.doc),yb(l,"markerAdded",l,g)}return g}function Pe(a,b){var c=this;this.markers=a,this.primary=b;for(var d=0;d-1)return b.state.draggingText(a),void setTimeout(function(){return b.display.input.focus()},20);try{var j=a.dataTransfer.getData("Text");if(j){var k;if(b.state.draggingText&&!b.state.draggingText.copy&&(k=b.listSelections()),oe(b.doc,Jd(c,c)),k)for(var l=0;l=0;b--)De(a.doc,"",d[b].from,d[b].to,"+delete");ad(a)})}function hf(a,b){var c=z(a.doc,b),d=ia(c);d!=c&&(b=D(d));var e=Ba(d),f=e?e[0].level%2?va(d):ua(d):0;return H(b,f)}function jf(a,b){for(var c,d=z(a.doc,b);c=ga(d);)d=c.find(1,!0).line,b=null;var e=Ba(d),f=e?e[0].level%2?ua(d):va(d):d.text.length;return H(null==b?D(d):b,f)}function kf(a,b){var c=hf(a,b.line),d=z(a.doc,c.line),e=Ba(d);if(!e||0==e[0].level){var f=Math.max(0,d.text.search(/\S/)),g=b.line==c.line&&b.ch<=f&&b.ch;return H(c.line,g?0:f)}return c}function lf(a,b,c){if("string"==typeof b&&(b=th[b],!b))return!1;a.display.input.ensurePolled();var d=a.display.shift,e=!1;try{a.isReadOnly()&&(a.state.suppressEdits=!0),c&&(a.display.shift=!1),e=b(a)!=Dg}finally{a.display.shift=d,a.state.suppressEdits=!1}return e}function mf(a,b,c){for(var d=0;de-400&&0==I(sh.pos,c)?d="triple":rh&&rh.time>e-400&&0==I(rh.pos,c)?(d="double",sh={time:e,pos:c}):(d="single",rh={time:e,pos:c});var g,h=a.doc.sel,j=rg?b.metaKey:b.ctrlKey;a.options.dragDrop&&Qg&&!a.isReadOnly()&&"single"==d&&(g=h.contains(c))>-1&&(I((g=h.ranges[g]).from(),c)<0||c.xRel>0)&&(I(g.to(),c)>0||c.xRel<0)?wf(a,b,c,j):xf(a,b,c,d,j)}function wf(a,b,c,d){var e=a.display,f=+new Date,g=ld(a,function(h){ig&&(e.scroller.draggable=!1),a.state.draggingText=!1,Da(document,"mouseup",g),Da(e.scroller,"drop",g),Math.abs(b.clientX-h.clientX)+Math.abs(b.clientY-h.clientY)<10&&(Ja(h),!d&&+new Date-200u&&e.push(new Hd(H(q,u),H(q,n(s,j,f))))}e.length||e.push(new Hd(c,c)),ne(l,Id(p.ranges.slice(0,o).concat(e),o),{origin:"*mouse",scroll:!1}),a.scrollIntoView(b)}else{var v=m,w=v.anchor,x=b;if("single"!=d){var y;y="double"==d?a.findWordAt(b):new Hd(H(b.line,0),N(l,H(b.line+1,0))),I(y.anchor,w)>0?(x=y.head,w=L(v.from(),y.anchor)):(x=y.anchor,w=K(v.to(),y.head))}var A=p.ranges.slice(0);A[o]=new Hd(N(l,w),x),ne(l,Id(A,o),Fg)}}function h(b){var c=++v,e=wc(a,b,!0,"rect"==d);if(e)if(0!=I(e,t)){a.curOp.focus=f(),g(e);var i=Lc(j,l);(e.line>=i.to||e.lineu.bottom?20:0;k&&setTimeout(ld(a,function(){v==c&&(j.scroller.scrollTop+=k,h(b))}),50)}}function i(b){a.state.selectingText=!1,v=1/0,Ja(b),j.input.focus(),Da(document,"mousemove",w),Da(document,"mouseup",x),l.history.lastSelOrigin=null}var j=a.display,l=a.doc;Ja(b);var m,o,p=l.sel,q=p.ranges;if(e&&!b.shiftKey?(o=l.sel.contains(c),m=o>-1?q[o]:new Hd(c,c)):(m=l.sel.primary(),o=l.sel.primIndex),sg?b.shiftKey&&b.metaKey:b.altKey)d="rect",e||(m=new Hd(c,c)),c=wc(a,b,!0,!0),o=-1;else if("double"==d){var r=a.findWordAt(c);m=a.display.shift||l.extend?ge(l,m,r.anchor,r.head):r}else if("triple"==d){var s=new Hd(H(c.line,0),N(l,H(c.line+1,0)));m=a.display.shift||l.extend?ge(l,m,s.anchor,s.head):s}else m=ge(l,m,c);e?o==-1?(o=q.length,ne(l,Id(q.concat([m]),o),{scroll:!1,origin:"*mouse"})):q.length>1&&q[o].empty()&&"single"==d&&!b.shiftKey?(ne(l,Id(q.slice(0,o).concat(q.slice(o+1)),0),{scroll:!1,origin:"*mouse"}),p=l.sel):je(l,o,m,Fg):(o=0,ne(l,new Gd([m],0),Fg),p=l.sel);var t=c,u=j.wrapper.getBoundingClientRect(),v=0,w=ld(a,function(a){Oa(a)?h(a):i(a)}),x=ld(a,i);a.state.selectingText=x,Pg(document,"mousemove",w),Pg(document,"mouseup",x)}function yf(a,b,c,d){var e,f;try{e=b.clientX,f=b.clientY}catch(b){return!1}if(e>=Math.floor(a.display.gutters.getBoundingClientRect().right))return!1;d&&Ja(b);var g=a.display,h=g.lineDiv.getBoundingClientRect();if(f>h.bottom||!Ha(a,c))return La(b);f-=h.top-g.viewOffset;for(var i=0;i=e){var k=E(a.doc,f),l=a.options.gutters[i];return Ea(a,c,a,k,l,b),La(b)}}}function zf(a,b){return yf(a,b,"gutterClick",!0)}function Af(a,b){Nb(a.display,b)||Bf(a,b)||Fa(a,b,"contextmenu")||a.display.input.onContextMenu(b)}function Bf(a,b){return!!Ha(a,"gutterContextMenu")&&yf(a,b,"gutterContextMenu",!1)}function Cf(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-"),fc(a)}function Df(a){function b(b,d,e,f){a.defaults[b]=d,e&&(c[b]=f?function(a,b,c){c!=wh&&e(a,b,c)}:e)}var c=a.optionHandlers;a.defineOption=b,a.Init=wh,b("value","",function(a,b){return a.setValue(b)},!0),b("mode",null,function(a,b){a.doc.modeOption=b,Pd(a)},!0),b("indentUnit",2,Pd,!0),b("indentWithTabs",!1),b("smartIndent",!0),b("tabSize",4,function(a){Qd(a),fc(a),od(a)},!0),b("lineSeparator",null,function(a,b){if(a.doc.lineSep=b,b){var c=[],d=a.doc.first;a.doc.iter(function(a){for(var e=0;;){var f=a.text.indexOf(b,e);if(f==-1)break;e=f+b.length,c.push(H(d,f))}d++});for(var e=c.length-1;e>=0;e--)De(a.doc,b,c[e],H(c[e].line,c[e].ch+b.length))}}),b("specialChars",/[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(a,b,c){a.state.specialChars=new RegExp(b.source+(b.test("\t")?"":"|\t"),"g"),c!=wh&&a.refresh()}),b("specialCharPlaceholder",nb,function(a){return a.refresh()},!0),b("electricChars",!0),b("inputStyle",qg?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),b("spellcheck",!1,function(a,b){return a.getInputField().spellcheck=b},!0),b("rtlMoveVisually",!tg),b("wholeLineUpdateBefore",!0),b("theme","default",function(a){Cf(a),Ef(a)},!0),b("keyMap","default",function(a,b,c){var d=ff(b),e=c!=wh&&ff(c);e&&e.detach&&e.detach(a,d),d.attach&&d.attach(a,e||null)}),b("extraKeys",null),b("lineWrapping",!1,Gf,!0),b("gutters",[],function(a){Fd(a.options),Ef(a)},!0),b("fixedGutter",!0,function(a,b){a.display.gutters.style.left=b?tc(a.display)+"px":"0",a.refresh()},!0),b("coverGutterNextToScrollbar",!1,function(a){return Uc(a)},!0),b("scrollbarStyle","native",function(a){Wc(a),Uc(a),a.display.scrollbars.setScrollTop(a.doc.scrollTop),a.display.scrollbars.setScrollLeft(a.doc.scrollLeft)},!0),b("lineNumbers",!1,function(a){Fd(a.options),Ef(a)},!0),b("firstLineNumber",1,Ef,!0),b("lineNumberFormatter",function(a){return a},Ef,!0),b("showCursorWhenSelecting",!1,yc,!0),b("resetSelectionOnContextMenu",!0),b("lineWiseCopyCut",!0),b("readOnly",!1,function(a,b){"nocursor"==b?(Gc(a),a.display.input.blur(),a.display.disabled=!0):a.display.disabled=!1,a.display.input.readOnlyChanged(b)}),b("disableInput",!1,function(a,b){b||a.display.input.reset()},!0),b("dragDrop",!0,Ff),b("allowDropFileTypes",null),b("cursorBlinkRate",530),b("cursorScrollMargin",0),b("cursorHeight",1,yc,!0),b("singleCursorHeightPerLine",!0,yc,!0),b("workTime",100),b("workDelay",100),b("flattenSpans",!0,Qd,!0),b("addModeClass",!1,Qd,!0),b("pollInterval",100),b("undoDepth",200,function(a,b){return a.doc.history.undoDepth=b}),b("historyEventDelay",1250),b("viewportMargin",10,function(a){return a.refresh()},!0),b("maxHighlightLength",1e4,Qd,!0),b("moveInputWithCursor",!0,function(a,b){b||a.display.input.resetPosition()}),b("tabindex",null,function(a,b){return a.display.input.getField().tabIndex=b||""}),b("autofocus",null)}function Ef(a){Ed(a),od(a),setTimeout(function(){return Hc(a)},20)}function Ff(a,b,c){var d=c&&c!=wh;if(!b!=!d){var e=a.display.dragFunctions,f=b?Pg:Da;f(a.display.scroller,"dragstart",e.start),f(a.display.scroller,"dragenter",e.enter),f(a.display.scroller,"dragover",e.over),f(a.display.scroller,"dragleave",e.leave),f(a.display.scroller,"drop",e.drop)}}function Gf(a){a.options.lineWrapping?(g(a.display.wrapper,"CodeMirror-wrap"),a.display.sizer.style.minWidth="",a.display.sizerWidth=null):(yg(a.display.wrapper,"CodeMirror-wrap"),qa(a)),vc(a),od(a),fc(a),setTimeout(function(){return Uc(a)},100)}function Hf(a,b){ -var c=this;if(!(this instanceof Hf))return new Hf(a,b);this.options=b=b?j(b):{},j(xh,b,!1),Fd(b);var d=b.value;"string"==typeof d&&(d=new jh(d,b.mode,null,b.lineSeparator)),this.doc=d;var e=new Hf.inputStyles[b.inputStyle](this),f=this.display=new y(a,d,e);f.wrapper.CodeMirror=this,Ed(this),Cf(this),b.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),b.autofocus&&!qg&&f.input.focus(),Wc(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new l,keySeq:null,specialChars:null},gg&&hg<11&&setTimeout(function(){return c.display.input.reset(!0)},20),If(this),Ze(),cd(this),this.curOp.forceUpdate=!0,Ud(this,d),b.autofocus&&!qg||this.hasFocus()?setTimeout(i(Fc,this),20):Gc(this);for(var g in yh)yh.hasOwnProperty(g)&&yh[g](c,b[g],wh);Ic(this),b.finishInit&&b.finishInit(this);for(var h=0;h400}var e=a.display;Pg(e.scroller,"mousedown",ld(a,uf)),gg&&hg<11?Pg(e.scroller,"dblclick",ld(a,function(b){if(!Fa(a,b)){var c=wc(a,b);if(c&&!zf(a,b)&&!Nb(a.display,b)){Ja(b);var d=a.findWordAt(c);he(a.doc,d.anchor,d.head)}}})):Pg(e.scroller,"dblclick",function(b){return Fa(a,b)||Ja(b)}),xg||Pg(e.scroller,"contextmenu",function(b){return Af(a,b)});var f,g={end:0};Pg(e.scroller,"touchstart",function(b){if(!Fa(a,b)&&!c(b)){e.input.ensurePolled(),clearTimeout(f);var d=+new Date;e.activeTouch={start:d,moved:!1,prev:d-g.end<=300?g:null},1==b.touches.length&&(e.activeTouch.left=b.touches[0].pageX,e.activeTouch.top=b.touches[0].pageY)}}),Pg(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),Pg(e.scroller,"touchend",function(c){var f=e.activeTouch;if(f&&!Nb(e,c)&&null!=f.left&&!f.moved&&new Date-f.start<300){var g,h=a.coordsChar(e.activeTouch,"page");g=!f.prev||d(f,f.prev)?new Hd(h,h):!f.prev.prev||d(f,f.prev.prev)?a.findWordAt(h):new Hd(H(h.line,0),N(a.doc,H(h.line+1,0))),a.setSelection(g.anchor,g.head),a.focus(),Ja(c)}b()}),Pg(e.scroller,"touchcancel",b),Pg(e.scroller,"scroll",function(){e.scroller.clientHeight&&(Mc(a,e.scroller.scrollTop),Nc(a,e.scroller.scrollLeft,!0),Ea(a,"scroll",a))}),Pg(e.scroller,"mousewheel",function(b){return Qc(a,b)}),Pg(e.scroller,"DOMMouseScroll",function(b){return Qc(a,b)}),Pg(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(b){Fa(a,b)||Ma(b)},over:function(b){Fa(a,b)||(We(a,b),Ma(b))},start:function(b){return Ve(a,b)},drop:ld(a,Ue),leave:function(b){Fa(a,b)||Xe(a)}};var h=e.input.getField();Pg(h,"keyup",function(b){return sf.call(a,b)}),Pg(h,"keydown",ld(a,qf)),Pg(h,"keypress",ld(a,tf)),Pg(h,"focus",function(b){return Fc(a,b)}),Pg(h,"blur",function(b){return Gc(a,b)})}function Jf(a,b,c,d){var e,f=a.doc;null==c&&(c="add"),"smart"==c&&(f.mode.indent?e=ab(a,b):c="prev");var g=a.options.tabSize,h=z(f,b),i=k(h.text,null,g);h.stateAfter&&(h.stateAfter=null);var j,l=h.text.match(/^\s*/)[0];if(d||/\S/.test(h.text)){if("smart"==c&&(j=f.mode.indent(e,h.text.slice(l.length),h.text),j==Dg||j>150)){if(!d)return;c="prev"}}else j=0,c="not";"prev"==c?j=b>f.first?k(z(f,b-1).text,null,g):0:"add"==c?j=i+a.options.indentUnit:"subtract"==c?j=i-a.options.indentUnit:"number"==typeof c&&(j=i+c),j=Math.max(0,j);var m="",n=0;if(a.options.indentWithTabs)for(var p=Math.floor(j/g);p;--p)n+=g,m+="\t";if(n1)if(Ah&&Ah.text.join("\n")==b){if(d.ranges.length%Ah.text.length==0){i=[];for(var j=0;j=0;l--){var m=d.ranges[l],n=m.from(),o=m.to();m.empty()&&(c&&c>0?n=H(n.line,n.ch-c):a.state.overwrite&&!g?o=H(o.line,Math.min(z(f,o.line).text.length,o.ch+p(h).length)):Ah&&Ah.lineWise&&Ah.text.join("\n")==b&&(n=o=H(n.line,0))),k=a.curOp.updateInput;var r={from:n,to:o,text:i?i[l%i.length]:h,origin:e||(g?"paste":a.state.cutIncoming?"cut":"+input")};xe(a.doc,r),yb(a,"inputRead",a,r)}b&&!g&&Nf(a,b),ad(a),a.curOp.updateInput=k,a.curOp.typing=!0,a.state.pasteIncoming=a.state.cutIncoming=!1}function Mf(a,b){var c=a.clipboardData&&a.clipboardData.getData("Text");if(c)return a.preventDefault(),b.isReadOnly()||b.options.disableInput||kd(b,function(){return Lf(b,c,0,null,"paste")}),!0}function Nf(a,b){if(a.options.electricChars&&a.options.smartIndent)for(var c=a.doc.sel,d=c.ranges.length-1;d>=0;d--){var e=c.ranges[d];if(!(e.head.ch>100||d&&c.ranges[d-1].head.line==e.head.line)){var f=a.getModeAt(e.head),g=!1;if(f.electricChars){for(var h=0;h-1){g=Jf(a,e.head.line,"smart");break}}else f.electricInput&&f.electricInput.test(z(a.doc,e.head.line).text.slice(0,e.head.ch))&&(g=Jf(a,e.head.line,"smart"));g&&yb(a,"electricInput",a,e.head.line)}}}function Of(a){for(var b=[],c=[],d=0;dd&&(Jf(b,f.head.line,a,!0),d=f.head.line,e==b.doc.sel.primIndex&&ad(b));else{var g=f.from(),h=f.to(),i=Math.max(d,g.line);d=Math.min(b.lastLine(),h.line-(h.ch?0:1))+1;for(var j=i;j0&&je(b.doc,e,new Hd(g,k[e].to()),Eg)}}}),getTokenAt:function(a,b){return eb(this,a,b)},getLineTokens:function(a,b){return eb(this,H(a),b,!0)},getTokenTypeAt:function(a){a=N(this.doc,a);var b,c=_a(this,z(this.doc,a.line)),d=0,e=(c.length-1)/2,f=a.ch;if(0==f)b=c[2];else for(;;){var g=d+e>>1;if((g?c[2*g-1]:0)>=f)e=g;else{if(!(c[2*g+1]f&&(a=f,e=!0),d=z(this.doc,a)}else d=a;return ic(this,d,{top:0,left:0},b||"page",c).top+(e?this.doc.height-oa(d):0)},defaultTextHeight:function(){return qc(this.display)},defaultCharWidth:function(){return rc(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(a,b,c,d,e){var f=this.display;a=lc(this,N(this.doc,a));var g=a.bottom,h=a.left;if(b.style.position="absolute",b.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(b),f.sizer.appendChild(b),"over"==d)g=a.top;else if("above"==d||"near"==d){var i=Math.max(f.wrapper.clientHeight,this.doc.height),j=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);("above"==d||a.bottom+b.offsetHeight>i)&&a.top>b.offsetHeight?g=a.top-b.offsetHeight:a.bottom+b.offsetHeight<=i&&(g=a.bottom),h+b.offsetWidth>j&&(h=j-b.offsetWidth)}b.style.top=g+"px",b.style.left=b.style.right="","right"==e?(h=f.sizer.clientWidth-b.offsetWidth,b.style.right="0px"):("left"==e?h=0:"middle"==e&&(h=(f.sizer.clientWidth-b.offsetWidth)/2),b.style.left=h+"px"),c&&Zc(this,h,g,h+b.offsetWidth,g+b.offsetHeight)},triggerOnKeyDown:md(qf),triggerOnKeyPress:md(tf),triggerOnKeyUp:sf,execCommand:function(a){if(th.hasOwnProperty(a))return th[a].call(null,this)},triggerElectric:md(function(a){Nf(this,a)}),findPosH:function(a,b,c,d){var e=this,f=1;b<0&&(f=-1,b=-b);for(var g=N(this.doc,a),h=0;h0&&h(c.charAt(d-1));)--d;for(;e.5)&&vc(this),Ea(this,"refresh",this)}),swapDoc:md(function(a){var b=this.doc;return b.cm=null,Ud(this,a),fc(this),this.display.input.reset(),this.scrollTo(a.scrollLeft,a.scrollTop),this.curOp.forceScroll=!0,yb(this,"swapDoc",this,b),b}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Ia(a),a.registerHelper=function(b,d,e){c.hasOwnProperty(b)||(c[b]=a[b]={_global:[]}),c[b][d]=e},a.registerGlobalHelper=function(b,d,e,f){a.registerHelper(b,d,f),c[b]._global.push({pred:e,val:f})}}function Sf(a,b,c,d,e){function f(){var b=h+c;return!(b=a.first+a.size)&&(h=b,k=z(a,b))}function g(a){var b=(e?za:Aa)(k,i,c,!0);if(null==b){if(a||!f())return!1;i=e?(c<0?va:ua)(k):c<0?k.text.length:0}else i=b;return!0}var h=b.line,i=b.ch,j=c,k=z(a,h);if("char"==d)g();else if("column"==d)g(!0);else if("word"==d||"group"==d)for(var l=null,m="group"==d,n=a.cm&&a.cm.getHelper(b,"wordChars"),o=!0;!(c<0)||g(!o);o=!1){var p=k.text.charAt(i)||"\n",q=v(p,n)?"w":m&&"\n"==p?"n":!m||/\s/.test(p)?null:"p";if(!m||o||q||(q="s"),l&&l!=q){c<0&&(c=1,g());break}if(q&&(l=q),c>0&&!g(!o))break}var r=te(a,H(h,i),b,j,!0);return I(b,r)||(r.hitSide=!0),r}function Tf(a,b,c,d){var e,f=a.doc,g=b.left;if("page"==d){var h=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),i=Math.max(h-.5*qc(a.display),3);e=(c>0?b.bottom:b.top)+c*i}else"line"==d&&(e=c>0?b.bottom+3:b.top-3);for(var j;j=oc(a,g,e),j.outside;){if(c<0?e<=0:e>=f.height){j.hitSide=!0;break}e+=5*c}return j}function Uf(a){this.cm=a,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new l,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null}function Vf(a,b){var c=Yb(a,b.line);if(!c||c.hidden)return null;var d=z(a.doc,b.line),e=Vb(c,d,b.line),f=Ba(d),g="left";if(f){var h=xa(f,b.ch);g=h%2?"right":"left"}var i=_b(e.map,b.ch,g);return i.offset="right"==i.collapse?i.end:i.start,i}function Wf(a,b){return b&&(a.bad=!0),a}function Xf(a,b,c,d,e){function f(a){return function(b){return b.id==a}}function g(b){if(1==b.nodeType){var c=b.getAttribute("cm-text");if(null!=c)return void(h+=""==c?b.textContent.replace(/\u200b/g,""):c);var k,l=b.getAttribute("cm-marker");if(l){var m=a.findMarks(H(d,0),H(e+1,0),f(+l));return void(m.length&&(k=m[0].find())&&(h+=A(a.doc,k.from,k.to).join(j)))}if("false"==b.getAttribute("contenteditable"))return;for(var n=0;n=15&&(lg=!1,ig=!0);var vg,wg=rg&&(jg||lg&&(null==ug||ug<12.11)),xg=dg||gg&&hg>=9,yg=function(b,c){var d=b.className,e=a(c).exec(d);if(e){var f=d.slice(e.index+e[0].length);b.className=d.slice(0,e.index)+(f?e[1]+f:"")}};vg=document.createRange?function(a,b,c,d){var e=document.createRange();return e.setEnd(d||a,c),e.setStart(a,b),e}:function(a,b,c){var d=document.body.createTextRange();try{d.moveToElementText(a.parentNode)}catch(e){return d}return d.collapse(!0),d.moveEnd("character",c),d.moveStart("character",b),d};var zg=function(a){a.select()};pg?zg=function(a){a.selectionStart=0,a.selectionEnd=a.value.length}:gg&&(zg=function(a){try{a.select()}catch(b){}}),l.prototype.set=function(a,b){clearTimeout(this.id),this.id=setTimeout(b,a)};var Ag,Bg,Cg=30,Dg={toString:function(){return"CodeMirror.Pass"}},Eg={scroll:!1},Fg={origin:"*mouse"},Gg={origin:"+move"},Hg=[""],Ig=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Jg=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,Kg=!1,Lg=!1,Mg=null,Ng=function(){function a(a){return a<=247?c.charAt(a):1424<=a&&a<=1524?"R":1536<=a&&a<=1773?d.charAt(a-1536):1774<=a&&a<=2220?"r":8192<=a&&a<=8203?"w":8204==a?"b":"L"}function b(a,b,c){this.level=a,this.from=b,this.to=c}var c="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",d="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm",e=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,f=/[stwN]/,g=/[LRr]/,h=/[Lb1n]/,i=/[1n]/,j="L";return function(c){if(!e.test(c))return!1;for(var d=c.length,k=[],l=0;l=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){if(this.posb},eatSpace:function(){for(var a=this,b=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++a.pos;return this.pos>b},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);if(b>-1)return this.pos=b,!0},backUp:function(a){this.pos-=a},column:function(){return this.lastColumnPos0?null:(d&&b!==!1&&(this.pos+=d[0].length),d)}var e=function(a){return c?a.toLowerCase():a},f=this.string.substr(this.pos,a.length);if(e(f)==e(a))return b!==!1&&(this.pos+=a.length),!0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(a,b){this.lineStart+=a;try{return b()}finally{this.lineStart-=a}}},Ia(ib),ib.prototype.lineNo=function(){return D(this)};var Zg,$g={},_g={},ah=null,bh=null,ch={left:0,right:0,top:0,bottom:0},dh=0,eh=null;gg?eh=-.53:dg?eh=15:kg?eh=-.7:mg&&(eh=-1/3),Sc.prototype=j({update:function(a){var b=a.scrollWidth>a.clientWidth+1,c=a.scrollHeight>a.clientHeight+1,d=a.nativeBarWidth;if(c){this.vert.style.display="block",this.vert.style.bottom=b?d+"px":"0";var e=a.viewHeight-(b?d:0);this.vert.firstChild.style.height=Math.max(0,a.scrollHeight-a.clientHeight+e)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(b){this.horiz.style.display="block",this.horiz.style.right=c?d+"px":"0",this.horiz.style.left=a.barLeft+"px";var f=a.viewWidth-a.barLeft-(c?d:0);this.horiz.firstChild.style.width=a.scrollWidth-a.clientWidth+f+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&a.clientHeight>0&&(0==d&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:c?d:0,bottom:b?d:0}},setScrollLeft:function(a){this.horiz.scrollLeft!=a&&(this.horiz.scrollLeft=a),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz)},setScrollTop:function(a){this.vert.scrollTop!=a&&(this.vert.scrollTop=a),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert)},zeroWidthHack:function(){var a=rg&&!ng?"12px":"18px";this.horiz.style.height=this.vert.style.width=a,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new l,this.disableVert=new l},enableZeroWidthBar:function(a,b){function c(){var d=a.getBoundingClientRect(),e=document.elementFromPoint(d.left+1,d.bottom-1);e!=a?a.style.pointerEvents="none":b.set(1e3,c)}a.style.pointerEvents="auto",b.set(1e3,c)},clear:function(){var a=this.horiz.parentNode;a.removeChild(this.horiz),a.removeChild(this.vert)}},Sc.prototype),Tc.prototype=j({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},Tc.prototype);var fh={"native":Sc,"null":Tc},gh=0;wd.prototype.signal=function(a,b){Ha(a,b)&&this.events.push(arguments)},wd.prototype.finish=function(){for(var a=this,b=0;b=0&&I(a,e.to())<=0)return d}return-1}},Hd.prototype={from:function(){return L(this.anchor,this.head)},to:function(){return K(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}},Ie.prototype={chunkSize:function(){return this.lines.length},removeInner:function(a,b){ -for(var c=this,d=a,e=a+b;d1||!(this.children[0]instanceof Ie))){var i=[];this.collapse(i),this.children=[new Ie(i)],this.children[0].parent=this}},collapse:function(a){for(var b=this,c=0;c50){for(var h=f.lines.length%25+25,i=h;i10);a.parent.maybeSpill()}},iterN:function(a,b,c){for(var d=this,e=0;eb.display.maxLineLength&&(b.display.maxLine=k,b.display.maxLineLength=l,b.display.maxLineChanged=!0)}null!=e&&b&&this.collapsed&&od(b,e,f+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,b&&qe(b.doc)),b&&yb(b,"markerCleared",b,this),c&&dd(b),this.parent&&this.parent.clear()}},Ne.prototype.find=function(a,b){var c=this;null==a&&"bookmark"==this.type&&(a=1);for(var d,e,f=0;f=0;j--)xe(d,e[j]);i?me(this,i):this.cm&&ad(this.cm)}),undo:nd(function(){ze(this,"undo")}),redo:nd(function(){ze(this,"redo")}),undoSelection:nd(function(){ze(this,"undo",!0)}),redoSelection:nd(function(){ze(this,"redo",!0)}),setExtending:function(a){this.extend=a},getExtending:function(){return this.extend},historySize:function(){for(var a=this.history,b=0,c=0,d=0;d=a.ch)&&b.push(e.marker.parent||e.marker)}return b},findMarks:function(a,b,c){a=N(this,a),b=N(this,b);var d=[],e=a.line;return this.iter(a.line,b.line+1,function(f){var g=f.markedSpans;if(g)for(var h=0;h=i.to||null==i.from&&e!=a.line||null!=i.from&&e==b.line&&i.from>=b.ch||c&&!c(i.marker)||d.push(i.marker.parent||i.marker)}++e}),d},getAllMarks:function(){var a=[];return this.iter(function(b){var c=b.markedSpans;if(c)for(var d=0;da?(b=a,!0):(a-=f,void++c)}),N(this,H(c,b))},indexFromPos:function(a){a=N(this,a);var b=a.ch;if(a.lineb&&(b=a.from),null!=a.to&&a.to0)e=new H(e.line,e.ch+1),a.replaceRange(f.charAt(e.ch-1)+f.charAt(e.ch-2),H(e.line,e.ch-2),e,"+transpose");else if(e.line>a.doc.first){var g=z(a.doc,e.line-1).text;g&&(e=new H(e.line,1),a.replaceRange(f.charAt(0)+a.doc.lineSeparator()+g.charAt(g.length-1),H(e.line-1,g.length-1),e,"+transpose"))}c.push(new Hd(e,e))}a.setSelections(c)})},newlineAndIndent:function(a){return kd(a,function(){for(var b=a.listSelections(),c=b.length-1;c>=0;c--)a.replaceRange(a.doc.lineSeparator(),b[c].anchor,b[c].head,"+input");b=a.listSelections();for(var d=0;da.firstLine()&&(d=H(d.line-1,z(a.doc,d.line-1).length)),e.ch==z(a.doc,e.line).text.length&&e.lineb.viewTo-1)return!1;var f,g,h;d.line==b.viewFrom||0==(f=xc(a,d.line))?(g=D(b.view[0].line),h=b.view[0].node):(g=D(b.view[f].line),h=b.view[f-1].node.nextSibling);var i,j,k=xc(a,e.line);if(k==b.view.length-1?(i=b.viewTo-1,j=b.lineDiv.lastChild):(i=D(b.view[k+1].line)-1,j=b.view[k+1].node.previousSibling),!h)return!1;for(var l=a.doc.splitLines(Xf(a,h,j,g,i)),m=A(a.doc,H(g,0),H(i,z(a.doc,i).text.length));l.length>1&&m.length>1;)if(p(l)==p(m))l.pop(),m.pop(),i--;else{if(l[0]!=m[0])break;l.shift(),m.shift(),g++}for(var n=0,o=0,q=l[0],r=m[0],s=Math.min(q.length,r.length);n1||l[0]||I(w,x)?(De(a.doc,l,w,x,"+input"),!0):void 0},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){this.composing&&(this.composing=null,this.pollContent()||od(this.cm),this.div.blur(),this.div.focus())},readFromDOMSoon:function(){var a=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){a.readDOMTimeout=null,a.composing||!a.cm.isReadOnly()&&a.pollContent()||kd(a.cm,function(){return od(a.cm)})},80))},setUneditable:function(a){a.contentEditable="false"},onKeyPress:function(a){a.preventDefault(),this.cm.isReadOnly()||ld(this.cm,Lf)(this.cm,String.fromCharCode(null==a.charCode?a.keyCode:a.charCode),0)},readOnlyChanged:function(a){this.div.contentEditable=String("nocursor"!=a)},onContextMenu:s,resetPosition:s,needsContentAttribute:!0},Uf.prototype),$f.prototype=j({init:function(a){function b(a){if(!Fa(e,a)){if(e.somethingSelected())Kf({lineWise:!1,text:e.getSelections()}),d.inaccurateSelection&&(d.prevInput="",d.inaccurateSelection=!1,g.value=Ah.text.join("\n"),zg(g));else{if(!e.options.lineWiseCopyCut)return;var b=Of(e);Kf({lineWise:!0,text:b.text}),"cut"==a.type?e.setSelections(b.ranges,null,Eg):(d.prevInput="",g.value=b.text.join("\n"),zg(g))}"cut"==a.type&&(e.state.cutIncoming=!0)}}var c=this,d=this,e=this.cm,f=this.wrapper=Qf(),g=this.textarea=f.firstChild;a.wrapper.insertBefore(f,a.wrapper.firstChild),pg&&(g.style.width="0px"),Pg(g,"input",function(){gg&&hg>=9&&c.hasSelection&&(c.hasSelection=null),d.poll()}),Pg(g,"paste",function(a){Fa(e,a)||Mf(a,e)||(e.state.pasteIncoming=!0,d.fastPoll())}),Pg(g,"cut",b),Pg(g,"copy",b),Pg(a.scroller,"paste",function(b){Nb(a,b)||Fa(e,b)||(e.state.pasteIncoming=!0,d.focus())}),Pg(a.lineSpace,"selectstart",function(b){Nb(a,b)||Ja(b)}),Pg(g,"compositionstart",function(){var a=e.getCursor("from");d.composing&&d.composing.range.clear(),d.composing={start:a,range:e.markText(a,e.getCursor("to"),{className:"CodeMirror-composing"})}}),Pg(g,"compositionend",function(){d.composing&&(d.poll(),d.composing.range.clear(),d.composing=null)})},prepareSelection:function(){var a=this.cm,b=a.display,c=a.doc,d=zc(a);if(a.options.moveInputWithCursor){var e=lc(a,c.sel.primary().head,"div"),f=b.wrapper.getBoundingClientRect(),g=b.lineDiv.getBoundingClientRect();d.teTop=Math.max(0,Math.min(b.wrapper.clientHeight-10,e.top+g.top-f.top)),d.teLeft=Math.max(0,Math.min(b.wrapper.clientWidth-10,e.left+g.left-f.left))}return d},showSelection:function(a){var b=this.cm,d=b.display;c(d.cursorDiv,a.cursors),c(d.selectionDiv,a.selection),null!=a.teTop&&(this.wrapper.style.top=a.teTop+"px",this.wrapper.style.left=a.teLeft+"px")},reset:function(a){if(!this.contextMenuPending){var b,c,d=this.cm,e=d.doc;if(d.somethingSelected()){this.prevInput="";var f=e.sel.primary();b=Tg&&(f.to().line-f.from().line>100||(c=d.getSelection()).length>1e3);var g=b?"-":c||d.getSelection();this.textarea.value=g,d.state.focused&&zg(this.textarea),gg&&hg>=9&&(this.hasSelection=g)}else a||(this.prevInput=this.textarea.value="",gg&&hg>=9&&(this.hasSelection=null));this.inaccurateSelection=b}},getField:function(){return this.textarea},supportsTouch:function(){return!1},focus:function(){if("nocursor"!=this.cm.options.readOnly&&(!qg||f()!=this.textarea))try{this.textarea.focus()}catch(a){}},blur:function(){this.textarea.blur()},resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var a=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){a.poll(),a.cm.state.focused&&a.slowPoll()})},fastPoll:function(){function a(){var d=c.poll();d||b?(c.pollingFast=!1,c.slowPoll()):(b=!0,c.polling.set(60,a))}var b=!1,c=this;c.pollingFast=!0,c.polling.set(20,a)},poll:function(){var a=this,b=this.cm,c=this.textarea,d=this.prevInput;if(this.contextMenuPending||!b.state.focused||Sg(c)&&!d&&!this.composing||b.isReadOnly()||b.options.disableInput||b.state.keySeq)return!1;var e=c.value;if(e==d&&!b.somethingSelected())return!1;if(gg&&hg>=9&&this.hasSelection===e||rg&&/[\uf700-\uf7ff]/.test(e))return b.display.input.reset(),!1;if(b.doc.sel==b.display.selForContextMenu){var f=e.charCodeAt(0);if(8203!=f||d||(d="​"),8666==f)return this.reset(),this.cm.execCommand("undo")}for(var g=0,h=Math.min(d.length,e.length);g1e3||e.indexOf("\n")>-1?c.value=a.prevInput="":a.prevInput=e,a.composing&&(a.composing.range.clear(),a.composing.range=b.markText(a.composing.start,b.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},ensurePolled:function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},onKeyPress:function(){gg&&hg>=9&&(this.hasSelection=null),this.fastPoll()},onContextMenu:function(a){function b(){if(null!=g.selectionStart){var a=e.somethingSelected(),b="​"+(a?g.value:"");g.value="⇚",g.value=b,d.prevInput=a?"":"​",g.selectionStart=1,g.selectionEnd=b.length,f.selForContextMenu=e.doc.sel}}function c(){if(d.contextMenuPending=!1,d.wrapper.style.cssText=l,g.style.cssText=k,gg&&hg<9&&f.scrollbars.setScrollTop(f.scroller.scrollTop=i),null!=g.selectionStart){(!gg||gg&&hg<9)&&b();var a=0,c=function(){f.selForContextMenu==e.doc.sel&&0==g.selectionStart&&g.selectionEnd>0&&"​"==d.prevInput?ld(e,ve)(e):a++<10?f.detectingSelectAll=setTimeout(c,500):f.input.reset()};f.detectingSelectAll=setTimeout(c,200)}}var d=this,e=d.cm,f=e.display,g=d.textarea,h=wc(e,a),i=f.scroller.scrollTop;if(h&&!lg){ -var j=e.options.resetSelectionOnContextMenu;j&&e.doc.sel.contains(h)==-1&&ld(e,ne)(e.doc,Jd(h),Eg);var k=g.style.cssText,l=d.wrapper.style.cssText;d.wrapper.style.cssText="position: absolute";var m=d.wrapper.getBoundingClientRect();g.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(a.clientY-m.top-5)+"px; left: "+(a.clientX-m.left-5)+"px;\n z-index: 1000; background: "+(gg?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var n;if(ig&&(n=window.scrollY),f.input.focus(),ig&&window.scrollTo(null,n),f.input.reset(),e.somethingSelected()||(g.value=d.prevInput=" "),d.contextMenuPending=!0,f.selForContextMenu=e.doc.sel,clearTimeout(f.detectingSelectAll),gg&&hg>=9&&b(),xg){Ma(a);var o=function(){Da(window,"mouseup",o),setTimeout(c,20)};Pg(window,"mouseup",o)}else setTimeout(c,50)}},readOnlyChanged:function(a){a||this.reset()},setUneditable:s,needsContentAttribute:!1},$f.prototype),Df(Hf),Rf(Hf);var Bh="iter insert remove copy getEditor constructor".split(" ");for(var Ch in jh.prototype)jh.prototype.hasOwnProperty(Ch)&&m(Bh,Ch)<0&&(Hf.prototype[Ch]=function(a){return function(){return a.apply(this.doc,arguments)}}(jh.prototype[Ch]));return Ia(jh),Hf.inputStyles={textarea:$f,contenteditable:Uf},Hf.defineMode=function(a){Hf.defaults.mode||"null"==a||(Hf.defaults.mode=a),Sa.apply(this,arguments)},Hf.defineMIME=Ta,Hf.defineMode("null",function(){return{token:function(a){return a.skipToEnd()}}}),Hf.defineMIME("text/plain","null"),Hf.defineExtension=function(a,b){Hf.prototype[a]=b},Hf.defineDocExtension=function(a,b){jh.prototype[a]=b},Hf.fromTextArea=_f,ag(Hf),Hf.version="5.21.0",Hf}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("../../lib/codemirror")):"function"==typeof c&&c.amd?c("codemirror/mode/xml/xml",["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";var b={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},c={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,caseFold:!1};a.defineMode("xml",function(d,e){function f(a,b){function c(c){return b.tokenize=c,c(a,b)}var d=a.next();if("<"==d)return a.eat("!")?a.eat("[")?a.match("CDATA[")?c(i("atom","]]>")):null:a.match("--")?c(i("comment","-->")):a.match("DOCTYPE",!0,!0)?(a.eatWhile(/[\w\._\-]/),c(j(1))):null:a.eat("?")?(a.eatWhile(/[\w\._\-]/),b.tokenize=i("meta","?>"),"meta"):(A=a.eat("/")?"closeTag":"openTag",b.tokenize=g,"tag bracket");if("&"==d){var e;return e=a.eat("#")?a.eat("x")?a.eatWhile(/[a-fA-F\d]/)&&a.eat(";"):a.eatWhile(/[\d]/)&&a.eat(";"):a.eatWhile(/[\w\.\-:]/)&&a.eat(";"),e?"atom":"error"}return a.eatWhile(/[^&<]/),null}function g(a,b){var c=a.next();if(">"==c||"/"==c&&a.eat(">"))return b.tokenize=f,A=">"==c?"endTag":"selfcloseTag","tag bracket";if("="==c)return A="equals",null;if("<"==c){b.tokenize=f,b.state=n,b.tagName=b.tagStart=null;var d=b.tokenize(a,b);return d?d+" tag error":"tag error"}return/[\'\"]/.test(c)?(b.tokenize=h(c),b.stringStartCol=a.column(),b.tokenize(a,b)):(a.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function h(a){var b=function(b,c){for(;!b.eol();)if(b.next()==a){c.tokenize=g;break}return"string"};return b.isInAttribute=!0,b}function i(a,b){return function(c,d){for(;!c.eol();){if(c.match(b)){d.tokenize=f;break}c.next()}return a}}function j(a){return function(b,c){for(var d;null!=(d=b.next());){if("<"==d)return c.tokenize=j(a+1),c.tokenize(b,c);if(">"==d){if(1==a){c.tokenize=f;break}return c.tokenize=j(a-1),c.tokenize(b,c)}}return"meta"}}function k(a,b,c){this.prev=a.context,this.tagName=b,this.indent=a.indented,this.startOfLine=c,(x.doNotIndent.hasOwnProperty(b)||a.context&&a.context.noIndent)&&(this.noIndent=!0)}function l(a){a.context&&(a.context=a.context.prev)}function m(a,b){for(var c;;){if(!a.context)return;if(c=a.context.tagName,!x.contextGrabbers.hasOwnProperty(c)||!x.contextGrabbers[c].hasOwnProperty(b))return;l(a)}}function n(a,b,c){return"openTag"==a?(c.tagStart=b.column(),o):"closeTag"==a?p:n}function o(a,b,c){return"word"==a?(c.tagName=b.current(),B="tag",s):(B="error",o)}function p(a,b,c){if("word"==a){var d=b.current();return c.context&&c.context.tagName!=d&&x.implicitlyClosed.hasOwnProperty(c.context.tagName)&&l(c),c.context&&c.context.tagName==d||x.matchClosing===!1?(B="tag",q):(B="tag error",r)}return B="error",r}function q(a,b,c){return"endTag"!=a?(B="error",q):(l(c),n)}function r(a,b,c){return B="error",q(a,b,c)}function s(a,b,c){if("word"==a)return B="attribute",t;if("endTag"==a||"selfcloseTag"==a){var d=c.tagName,e=c.tagStart;return c.tagName=c.tagStart=null,"selfcloseTag"==a||x.autoSelfClosers.hasOwnProperty(d)?m(c,d):(m(c,d),c.context=new k(c,d,e==c.indented)),n}return B="error",s}function t(a,b,c){return"equals"==a?u:(x.allowMissing||(B="error"),s(a,b,c))}function u(a,b,c){return"string"==a?v:"word"==a&&x.allowUnquoted?(B="string",s):(B="error",s(a,b,c))}function v(a,b,c){return"string"==a?v:s(a,b,c)}var w=d.indentUnit,x={},y=e.htmlMode?b:c;for(var z in y)x[z]=y[z];for(var z in e)x[z]=e[z];var A,B;return f.isInText=!0,{startState:function(a){var b={tokenize:f,state:n,indented:a||0,tagName:null,tagStart:null,context:null};return null!=a&&(b.baseIndent=a),b},token:function(a,b){if(!b.tagName&&a.sol()&&(b.indented=a.indentation()),a.eatSpace())return null;A=null;var c=b.tokenize(a,b);return(c||A)&&"comment"!=c&&(B=null,b.state=b.state(A||c,a,b),B&&(c="error"==B?c+" error":B)),c},indent:function(b,c,d){var e=b.context;if(b.tokenize.isInAttribute)return b.tagStart==b.indented?b.stringStartCol+1:b.indented+w;if(e&&e.noIndent)return a.Pass;if(b.tokenize!=g&&b.tokenize!=f)return d?d.match(/^(\s*)/)[0].length:0;if(b.tagName)return x.multilineTagIndentPastTag!==!1?b.tagStart+b.tagName.length+2:b.tagStart+w*(x.multilineTagIndentFactor||1);if(x.alignCDATA&&/$/,blockCommentStart:"",configuration:x.htmlMode?"html":"xml",helperType:x.htmlMode?"html":"xml",skipAttribute:function(a){a.state==u&&(a.state=s)}}}),a.defineMIME("text/xml","xml"),a.defineMIME("application/xml","xml"),a.mimeModes.hasOwnProperty("text/html")||a.defineMIME("text/html",{name:"xml",htmlMode:!0})}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("../../lib/codemirror")):"function"==typeof c&&c.amd?c("codemirror/mode/javascript/javascript",["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";function b(a,b,c){return/^(?:operator|sof|keyword c|case|new|[\[{}\(,;:]|=>)$/.test(b.lastType)||"quasi"==b.lastType&&/\{\s*$/.test(a.string.slice(0,a.pos-(c||0)))}a.defineMode("javascript",function(c,d){function e(a){for(var b,c=!1,d=!1;null!=(b=a.next());){if(!c){if("/"==b&&!d)return;"["==b?d=!0:d&&"]"==b&&(d=!1)}c=!c&&"\\"==b}}function f(a,b,c){return xa=a,ya=c,b}function g(a,c){var d=a.next();if('"'==d||"'"==d)return c.tokenize=h(d),c.tokenize(a,c);if("."==d&&a.match(/^\d+(?:[eE][+\-]?\d+)?/))return f("number","number");if("."==d&&a.match(".."))return f("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(d))return f(d);if("="==d&&a.eat(">"))return f("=>","operator");if("0"==d&&a.eat(/x/i))return a.eatWhile(/[\da-f]/i),f("number","number");if("0"==d&&a.eat(/o/i))return a.eatWhile(/[0-7]/i),f("number","number");if("0"==d&&a.eat(/b/i))return a.eatWhile(/[01]/i),f("number","number");if(/\d/.test(d))return a.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),f("number","number");if("/"==d)return a.eat("*")?(c.tokenize=i,i(a,c)):a.eat("/")?(a.skipToEnd(),f("comment","comment")):b(a,c,1)?(e(a),a.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/),f("regexp","string-2")):(a.eatWhile(Ga),f("operator","operator",a.current()));if("`"==d)return c.tokenize=j,j(a,c);if("#"==d)return a.skipToEnd(),f("error","error");if(Ga.test(d))return a.eatWhile(Ga),f("operator","operator",a.current());if(Ea.test(d)){a.eatWhile(Ea);var g=a.current(),k=Fa.propertyIsEnumerable(g)&&Fa[g];return k&&"."!=c.lastType?f(k.type,k.style,g):f("variable","variable",g)}}function h(a){return function(b,c){var d,e=!1;if(Ba&&"@"==b.peek()&&b.match(Ha))return c.tokenize=g,f("jsonld-keyword","meta");for(;null!=(d=b.next())&&(d!=a||e);)e=!e&&"\\"==d;return e||(c.tokenize=g),f("string","string")}}function i(a,b){for(var c,d=!1;c=a.next();){if("/"==c&&d){b.tokenize=g;break}d="*"==c}return f("comment","comment")}function j(a,b){for(var c,d=!1;null!=(c=a.next());){if(!d&&("`"==c||"$"==c&&a.eat("{"))){b.tokenize=g;break}d=!d&&"\\"==c}return f("quasi","string-2",a.current())}function k(a,b){b.fatArrowAt&&(b.fatArrowAt=null);var c=a.string.indexOf("=>",a.start);if(!(c<0)){if(Da){var d=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(a.string.slice(a.start,c));d&&(c=d.index)}for(var e=0,f=!1,g=c-1;g>=0;--g){var h=a.string.charAt(g),i=Ia.indexOf(h);if(i>=0&&i<3){if(!e){++g;break}if(0==--e){"("==h&&(f=!0);break}}else if(i>=3&&i<6)++e;else if(Ea.test(h))f=!0;else{if(/["'\/]/.test(h))return;if(f&&!e){++g;break}}}f&&!e&&(b.fatArrowAt=g)}}function l(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.prev=e,this.info=f,null!=d&&(this.align=d)}function m(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0;for(var d=a.context;d;d=d.prev)for(var c=d.vars;c;c=c.next)if(c.name==b)return!0}function n(a,b,c,d,e){var f=a.cc;for(Ka.state=a,Ka.stream=e,Ka.marked=null,Ka.cc=f,Ka.style=b,a.lexical.hasOwnProperty("align")||(a.lexical.align=!0);;){var g=f.length?f.pop():Ca?x:w;if(g(c,d)){for(;f.length&&f[f.length-1].lex;)f.pop()();return Ka.marked?Ka.marked:"variable"==c&&m(a,d)?"variable-2":b}}}function o(){for(var a=arguments.length-1;a>=0;a--)Ka.cc.push(arguments[a])}function p(){return o.apply(null,arguments),!0}function q(a){function b(b){for(var c=b;c;c=c.next)if(c.name==a)return!0;return!1}var c=Ka.state;if(Ka.marked="def",c.context){if(b(c.localVars))return;c.localVars={name:a,next:c.localVars}}else{if(b(c.globalVars))return;d.globalVars&&(c.globalVars={name:a,next:c.globalVars})}}function r(){Ka.state.context={prev:Ka.state.context,vars:Ka.state.localVars},Ka.state.localVars=La}function s(){Ka.state.localVars=Ka.state.context.vars,Ka.state.context=Ka.state.context.prev}function t(a,b){var c=function(){var c=Ka.state,d=c.indented;if("stat"==c.lexical.type)d=c.lexical.indented;else for(var e=c.lexical;e&&")"==e.type&&e.align;e=e.prev)d=e.indented;c.lexical=new l(d,Ka.stream.column(),a,null,c.lexical,b)};return c.lex=!0,c}function u(){var a=Ka.state;a.lexical.prev&&(")"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function v(a){function b(c){return c==a?p():";"==a?o():p(b)}return b}function w(a,b){return"var"==a?p(t("vardef",b.length),$,v(";"),u):"keyword a"==a?p(t("form"),z,w,u):"keyword b"==a?p(t("form"),w,u):"{"==a?p(t("}"),T,u):";"==a?p():"if"==a?("else"==Ka.state.lexical.info&&Ka.state.cc[Ka.state.cc.length-1]==u&&Ka.state.cc.pop()(),p(t("form"),z,w,u,da)):"function"==a?p(ja):"for"==a?p(t("form"),ea,w,u):"variable"==a?p(t("stat"),M):"switch"==a?p(t("form"),z,t("}","switch"),v("{"),T,u,u):"case"==a?p(x,v(":")):"default"==a?p(v(":")):"catch"==a?p(t("form"),r,v("("),ka,v(")"),w,u,s):"class"==a?p(t("form"),ma,u):"export"==a?p(t("stat"),qa,u):"import"==a?p(t("stat"),ra,u):"module"==a?p(t("form"),_,t("}"),v("{"),T,u,u):"type"==a?p(V,v("operator"),V,v(";")):"async"==a?p(w):o(t("stat"),x,v(";"),u)}function x(a){return A(a,!1)}function y(a){return A(a,!0)}function z(a){return"("!=a?o():p(t(")"),x,v(")"),u)}function A(a,b){if(Ka.state.fatArrowAt==Ka.stream.start){var c=b?I:H;if("("==a)return p(r,t(")"),R(_,")"),u,v("=>"),c,s);if("variable"==a)return o(r,_,v("=>"),c,s)}var d=b?E:D;return Ja.hasOwnProperty(a)?p(d):"function"==a?p(ja,d):"class"==a?p(t("form"),la,u):"keyword c"==a||"async"==a?p(b?C:B):"("==a?p(t(")"),B,v(")"),u,d):"operator"==a||"spread"==a?p(b?y:x):"["==a?p(t("]"),va,u,d):"{"==a?S(O,"}",null,d):"quasi"==a?o(F,d):"new"==a?p(J(b)):p()}function B(a){return a.match(/[;\}\)\],]/)?o():o(x)}function C(a){return a.match(/[;\}\)\],]/)?o():o(y)}function D(a,b){return","==a?p(x):E(a,b,!1)}function E(a,b,c){var d=0==c?D:E,e=0==c?x:y;return"=>"==a?p(r,c?I:H,s):"operator"==a?/\+\+|--/.test(b)?p(d):"?"==b?p(x,v(":"),e):p(e):"quasi"==a?o(F,d):";"!=a?"("==a?S(y,")","call",d):"."==a?p(N,d):"["==a?p(t("]"),B,v("]"),u,d):void 0:void 0}function F(a,b){return"quasi"!=a?o():"${"!=b.slice(b.length-2)?p(F):p(x,G)}function G(a){if("}"==a)return Ka.marked="string-2",Ka.state.tokenize=j,p(F)}function H(a){return k(Ka.stream,Ka.state),o("{"==a?w:x)}function I(a){return k(Ka.stream,Ka.state),o("{"==a?w:y)}function J(a){return function(b){return"."==b?p(a?L:K):o(a?y:x)}}function K(a,b){if("target"==b)return Ka.marked="keyword",p(D)}function L(a,b){if("target"==b)return Ka.marked="keyword",p(E)}function M(a){return":"==a?p(u,w):o(D,v(";"),u)}function N(a){if("variable"==a)return Ka.marked="property",p()}function O(a,b){return"async"==a?(Ka.marked="property",p(O)):"variable"==a||"keyword"==Ka.style?(Ka.marked="property",p("get"==b||"set"==b?P:Q)):"number"==a||"string"==a?(Ka.marked=Ba?"property":Ka.style+" property",p(Q)):"jsonld-keyword"==a?p(Q):"modifier"==a?p(O):"["==a?p(x,v("]"),Q):"spread"==a?p(x):":"==a?o(Q):void 0}function P(a){return"variable"!=a?o(Q):(Ka.marked="property",p(ja))}function Q(a){return":"==a?p(y):"("==a?o(ja):void 0}function R(a,b){function c(d,e){if(","==d){var f=Ka.state.lexical;return"call"==f.info&&(f.pos=(f.pos||0)+1),p(function(c,d){return c==b||d==b?o():o(a)},c)}return d==b||e==b?p():p(v(b))}return function(d,e){return d==b||e==b?p():o(a,c)}}function S(a,b,c){for(var d=3;d"==a)return p(V)}function X(a){return"variable"==a||"keyword"==Ka.style?(Ka.marked="property",p(X)):":"==a?p(V):void 0}function Y(a){return"variable"==a?p(Y):":"==a?p(V):void 0}function Z(a,b){return"<"==b?p(R(V,">"),Z):"["==a?p(v("]"),Z):void 0}function $(){return o(_,U,ba,ca)}function _(a,b){return"modifier"==a?p(_):"variable"==a?(q(b),p()):"spread"==a?p(_):"["==a?S(_,"]"):"{"==a?S(aa,"}"):void 0}function aa(a,b){return"variable"!=a||Ka.stream.match(/^\s*:/,!1)?("variable"==a&&(Ka.marked="property"),"spread"==a?p(_):"}"==a?o():p(v(":"),_,ba)):(q(b),p(ba))}function ba(a,b){if("="==b)return p(y)}function ca(a){if(","==a)return p($)}function da(a,b){if("keyword b"==a&&"else"==b)return p(t("form","else"),w,u)}function ea(a){if("("==a)return p(t(")"),fa,v(")"),u)}function fa(a){return"var"==a?p($,v(";"),ha):";"==a?p(ha):"variable"==a?p(ga):o(x,v(";"),ha)}function ga(a,b){return"in"==b||"of"==b?(Ka.marked="keyword",p(x)):p(D,ha)}function ha(a,b){return";"==a?p(ia):"in"==b||"of"==b?(Ka.marked="keyword",p(x)):o(x,v(";"),ia)}function ia(a){")"!=a&&p(x)}function ja(a,b){return"*"==b?(Ka.marked="keyword",p(ja)):"variable"==a?(q(b),p(ja)):"("==a?p(r,t(")"),R(ka,")"),u,U,w,s):void 0}function ka(a){return"spread"==a?p(ka):o(_,U,ba)}function la(a,b){return"variable"==a?ma(a,b):na(a,b)}function ma(a,b){if("variable"==a)return q(b),p(na)}function na(a,b){return"extends"==b||"implements"==b?p(Da?V:x,na):"{"==a?p(t("}"),oa,u):void 0}function oa(a,b){return"variable"==a||"keyword"==Ka.style?("static"==b||"get"==b||"set"==b||Da&&("public"==b||"private"==b||"protected"==b||"readonly"==b||"abstract"==b))&&Ka.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(Ka.marked="keyword",p(oa)):(Ka.marked="property",p(Da?pa:ja,oa)):"*"==b?(Ka.marked="keyword",p(oa)):";"==a?p(oa):"}"==a?p():void 0}function pa(a,b){return"?"==b?p(pa):":"==a?p(V,ba):o(ja)}function qa(a,b){return"*"==b?(Ka.marked="keyword",p(ua,v(";"))):"default"==b?(Ka.marked="keyword",p(x,v(";"))):o(w)}function ra(a){return"string"==a?p():o(sa,ua)}function sa(a,b){return"{"==a?S(sa,"}"):("variable"==a&&q(b),"*"==b&&(Ka.marked="keyword"),p(ta))}function ta(a,b){if("as"==b)return Ka.marked="keyword",p(sa)}function ua(a,b){if("from"==b)return Ka.marked="keyword",p(x)}function va(a){return"]"==a?p():o(R(y,"]"))}function wa(a,b){return"operator"==a.lastType||","==a.lastType||Ga.test(b.charAt(0))||/[,.]/.test(b.charAt(0))}var xa,ya,za=c.indentUnit,Aa=d.statementIndent,Ba=d.jsonld,Ca=d.json||Ba,Da=d.typescript,Ea=d.wordCharacters||/[\w$\xa1-\uffff]/,Fa=function(){function a(a){return{type:a,style:"keyword"}}var b=a("keyword a"),c=a("keyword b"),d=a("keyword c"),e=a("operator"),f={type:"atom",style:"atom"},g={"if":a("if"),"while":b,"with":b,"else":c,"do":c,"try":c,"finally":c,"return":d,"break":d,"continue":d,"new":a("new"),"delete":d,"throw":d,"debugger":d,"var":a("var"),"const":a("var"),"let":a("var"),"function":a("function"),"catch":a("catch"),"for":a("for"),"switch":a("switch"),"case":a("case"),"default":a("default"),"in":e,"typeof":e,"instanceof":e,"true":f,"false":f,"null":f,undefined:f,NaN:f,Infinity:f,"this":a("this"),"class":a("class"),"super":a("atom"),"yield":d,"export":a("export"),"import":a("import"),"extends":d,await:d,async:a("async")};if(Da){var h={type:"variable",style:"variable-3"},i={"interface":a("class"),"implements":d,namespace:d,module:a("module"),"enum":a("module"),type:a("type"),"public":a("modifier"),"private":a("modifier"),"protected":a("modifier"),"abstract":a("modifier"),as:e,string:h,number:h,"boolean":h,any:h};for(var j in i)g[j]=i[j]}return g}(),Ga=/[+\-*&%=<>!?|~^]/,Ha=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/,Ia="([{}])",Ja={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,"this":!0,"jsonld-keyword":!0},Ka={state:null,column:null,marked:null,cc:null},La={name:"this",next:{name:"arguments"}};return u.lex=!0,{startState:function(a){var b={tokenize:g,lastType:"sof",cc:[],lexical:new l((a||0)-za,0,"block",(!1)),localVars:d.localVars,context:d.localVars&&{vars:d.localVars},indented:a||0};return d.globalVars&&"object"==typeof d.globalVars&&(b.globalVars=d.globalVars),b},token:function(a,b){if(a.sol()&&(b.lexical.hasOwnProperty("align")||(b.lexical.align=!1),b.indented=a.indentation(),k(a,b)),b.tokenize!=i&&a.eatSpace())return null;var c=b.tokenize(a,b);return"comment"==xa?c:(b.lastType="operator"!=xa||"++"!=ya&&"--"!=ya?xa:"incdec",n(b,c,xa,ya,a))},indent:function(b,c){if(b.tokenize==i)return a.Pass;if(b.tokenize!=g)return 0;var e,f=c&&c.charAt(0),h=b.lexical;if(!/^\s*else\b/.test(c))for(var j=b.cc.length-1;j>=0;--j){var k=b.cc[j];if(k==u)h=h.prev;else if(k!=da)break}for(;("stat"==h.type||"form"==h.type)&&("}"==f||(e=b.cc[b.cc.length-1])&&(e==D||e==E)&&!/^[,\.=+\-*:?[\(]/.test(c));)h=h.prev;Aa&&")"==h.type&&"stat"==h.prev.type&&(h=h.prev);var l=h.type,m=f==l;return"vardef"==l?h.indented+("operator"==b.lastType||","==b.lastType?h.info+1:0):"form"==l&&"{"==f?h.indented:"form"==l?h.indented+za:"stat"==l?h.indented+(wa(b,c)?Aa||za:0):"switch"!=h.info||m||0==d.doubleIndentSwitch?h.align?h.column+(m?0:1):h.indented+(m?0:za):h.indented+(/^(?:case|default)\b/.test(c)?za:2*za)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:Ca?null:"/*",blockCommentEnd:Ca?null:"*/",lineComment:Ca?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:Ca?"json":"javascript",jsonldMode:Ba,jsonMode:Ca,expressionAllowed:b,skipExpression:function(a){var b=a.cc[a.cc.length-1];b!=x&&b!=y||a.cc.pop()}}}),a.registerHelper("wordChars","javascript",/[\w$]/),a.defineMIME("text/javascript","javascript"),a.defineMIME("text/ecmascript","javascript"),a.defineMIME("application/javascript","javascript"),a.defineMIME("application/x-javascript","javascript"),a.defineMIME("application/ecmascript","javascript"),a.defineMIME("application/json",{name:"javascript",json:!0}),a.defineMIME("application/x-json",{name:"javascript",json:!0}),a.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),a.defineMIME("text/typescript",{name:"javascript",typescript:!0}),a.defineMIME("application/typescript",{name:"javascript",typescript:!0})}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("../../lib/codemirror")):"function"==typeof c&&c.amd?c("codemirror/mode/css/css",["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";function b(a){for(var b={},c=0;c*\/]/.test(c)?d(null,"select-op"):"."==c&&a.match(/^-?[_a-z][_a-z0-9-]*/i)?d("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(c)?d(null,c):"u"==c&&a.match(/rl(-prefix)?\(/)||"d"==c&&a.match("omain(")||"r"==c&&a.match("egexp(")?(a.backUp(1),b.tokenize=g,d("property","word")):/[\w\\\-]/.test(c)?(a.eatWhile(/[\w\\\-]/),d("property","word")):d(null,null):/[\d.]/.test(a.peek())?(a.eatWhile(/[\w.%]/),d("number","unit")):a.match(/^-[\w\\\-]+/)?(a.eatWhile(/[\w\\\-]/),a.match(/^\s*:/,!1)?d("variable-2","variable-definition"):d("variable-2","variable")):a.match(/^\w+-/)?d("meta","meta"):void 0}function f(a){return function(b,c){for(var e,f=!1;null!=(e=b.next());){if(e==a&&!f){")"==a&&b.backUp(1);break}f=!f&&"\\"==e}return(e==a||!f&&")"!=a)&&(c.tokenize=null),d("string","string")}}function g(a,b){return a.next(),a.match(/\s*[\"\')]/,!1)?b.tokenize=null:b.tokenize=f(")"),d(null,"(")}function h(a,b,c){this.type=a,this.indent=b,this.prev=c}function i(a,b,c,d){return a.context=new h(c,b.indentation()+(d===!1?0:q),a.context),c}function j(a){return a.context.prev&&(a.context=a.context.prev),a.context.type}function k(a,b,c){return E[c.context.type](a,b,c)}function l(a,b,c,d){for(var e=d||1;e>0;e--)c.context=c.context.prev;return k(a,b,c)}function m(a){var b=a.current().toLowerCase();p=B.hasOwnProperty(b)?"atom":A.hasOwnProperty(b)?"keyword":"variable"}var n=c.inline;c.propertyKeywords||(c=a.resolveMode("text/css"));var o,p,q=b.indentUnit,r=c.tokenHooks,s=c.documentTypes||{},t=c.mediaTypes||{},u=c.mediaFeatures||{},v=c.mediaValueKeywords||{},w=c.propertyKeywords||{},x=c.nonStandardPropertyKeywords||{},y=c.fontProperties||{},z=c.counterDescriptors||{},A=c.colorKeywords||{},B=c.valueKeywords||{},C=c.allowNested,D=c.supportsAtComponent===!0,E={};return E.top=function(a,b,c){if("{"==a)return i(c,b,"block");if("}"==a&&c.context.prev)return j(c);if(D&&/@component/.test(a))return i(c,b,"atComponentBlock");if(/^@(-moz-)?document$/.test(a))return i(c,b,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/.test(a))return i(c,b,"atBlock");if(/^@(font-face|counter-style)/.test(a))return c.stateArg=a,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(a))return"keyframes";if(a&&"@"==a.charAt(0))return i(c,b,"at");if("hash"==a)p="builtin";else if("word"==a)p="tag";else{if("variable-definition"==a)return"maybeprop";if("interpolation"==a)return i(c,b,"interpolation");if(":"==a)return"pseudo";if(C&&"("==a)return i(c,b,"parens")}return c.context.type},E.block=function(a,b,c){if("word"==a){var d=b.current().toLowerCase();return w.hasOwnProperty(d)?(p="property","maybeprop"):x.hasOwnProperty(d)?(p="string-2","maybeprop"):C?(p=b.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(p+=" error","maybeprop")}return"meta"==a?"block":C||"hash"!=a&&"qualifier"!=a?E.top(a,b,c):(p="error","block")},E.maybeprop=function(a,b,c){return":"==a?i(c,b,"prop"):k(a,b,c)},E.prop=function(a,b,c){if(";"==a)return j(c);if("{"==a&&C)return i(c,b,"propBlock");if("}"==a||"{"==a)return l(a,b,c);if("("==a)return i(c,b,"parens");if("hash"!=a||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(b.current())){if("word"==a)m(b);else if("interpolation"==a)return i(c,b,"interpolation")}else p+=" error";return"prop"},E.propBlock=function(a,b,c){return"}"==a?j(c):"word"==a?(p="property","maybeprop"):c.context.type},E.parens=function(a,b,c){return"{"==a||"}"==a?l(a,b,c):")"==a?j(c):"("==a?i(c,b,"parens"):"interpolation"==a?i(c,b,"interpolation"):("word"==a&&m(b),"parens")},E.pseudo=function(a,b,c){return"word"==a?(p="variable-3",c.context.type):k(a,b,c)},E.documentTypes=function(a,b,c){return"word"==a&&s.hasOwnProperty(b.current())?(p="tag",c.context.type):E.atBlock(a,b,c)},E.atBlock=function(a,b,c){if("("==a)return i(c,b,"atBlock_parens");if("}"==a||";"==a)return l(a,b,c);if("{"==a)return j(c)&&i(c,b,C?"block":"top");if("interpolation"==a)return i(c,b,"interpolation");if("word"==a){var d=b.current().toLowerCase();p="only"==d||"not"==d||"and"==d||"or"==d?"keyword":t.hasOwnProperty(d)?"attribute":u.hasOwnProperty(d)?"property":v.hasOwnProperty(d)?"keyword":w.hasOwnProperty(d)?"property":x.hasOwnProperty(d)?"string-2":B.hasOwnProperty(d)?"atom":A.hasOwnProperty(d)?"keyword":"error"}return c.context.type},E.atComponentBlock=function(a,b,c){return"}"==a?l(a,b,c):"{"==a?j(c)&&i(c,b,C?"block":"top",!1):("word"==a&&(p="error"),c.context.type)},E.atBlock_parens=function(a,b,c){return")"==a?j(c):"{"==a||"}"==a?l(a,b,c,2):E.atBlock(a,b,c)},E.restricted_atBlock_before=function(a,b,c){return"{"==a?i(c,b,"restricted_atBlock"):"word"==a&&"@counter-style"==c.stateArg?(p="variable","restricted_atBlock_before"):k(a,b,c)},E.restricted_atBlock=function(a,b,c){return"}"==a?(c.stateArg=null,j(c)):"word"==a?(p="@font-face"==c.stateArg&&!y.hasOwnProperty(b.current().toLowerCase())||"@counter-style"==c.stateArg&&!z.hasOwnProperty(b.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},E.keyframes=function(a,b,c){return"word"==a?(p="variable","keyframes"):"{"==a?i(c,b,"top"):k(a,b,c)},E.at=function(a,b,c){return";"==a?j(c):"{"==a||"}"==a?l(a,b,c):("word"==a?p="tag":"hash"==a&&(p="builtin"),"at")},E.interpolation=function(a,b,c){return"}"==a?j(c):"{"==a||";"==a?l(a,b,c):("word"==a?p="variable":"variable"!=a&&"("!=a&&")"!=a&&(p="error"),"interpolation")},{startState:function(a){return{tokenize:null,state:n?"block":"top",stateArg:null,context:new h(n?"block":"top",a||0,null)}},token:function(a,b){if(!b.tokenize&&a.eatSpace())return null;var c=(b.tokenize||e)(a,b);return c&&"object"==typeof c&&(o=c[1],c=c[0]),p=c,b.state=E[b.state](o,a,b),p},indent:function(a,b){var c=a.context,d=b&&b.charAt(0),e=c.indent;return"prop"!=c.type||"}"!=d&&")"!=d||(c=c.prev),c.prev&&("}"!=d||"block"!=c.type&&"top"!=c.type&&"interpolation"!=c.type&&"restricted_atBlock"!=c.type?(")"!=d||"parens"!=c.type&&"atBlock_parens"!=c.type)&&("{"!=d||"at"!=c.type&&"atBlock"!=c.type)||(e=Math.max(0,c.indent-q),c=c.prev):(c=c.prev,e=c.indent)),e},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace"}});var d=["domain","regexp","url","url-prefix"],e=b(d),f=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],g=b(f),h=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],i=b(h),j=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],k=b(j),l=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],m=b(l),n=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],o=b(n),p=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],q=b(p),r=["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"],s=b(r),t=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],u=b(t),v=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],w=b(v),x=d.concat(f).concat(h).concat(j).concat(l).concat(n).concat(t).concat(v); -a.registerHelper("hintWords","css",x),a.defineMIME("text/css",{documentTypes:e,mediaTypes:g,mediaFeatures:i,mediaValueKeywords:k,propertyKeywords:m,nonStandardPropertyKeywords:o,fontProperties:q,counterDescriptors:s,colorKeywords:u,valueKeywords:w,tokenHooks:{"/":function(a,b){return!!a.eat("*")&&(b.tokenize=c,c(a,b))}},name:"css"}),a.defineMIME("text/x-scss",{mediaTypes:g,mediaFeatures:i,mediaValueKeywords:k,propertyKeywords:m,nonStandardPropertyKeywords:o,colorKeywords:u,valueKeywords:w,fontProperties:q,allowNested:!0,tokenHooks:{"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=c,c(a,b)):["operator","operator"]},":":function(a){return!!a.match(/\s*\{/)&&[null,"{"]},$:function(a){return a.match(/^[\w-]+/),a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(a){return!!a.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),a.defineMIME("text/x-less",{mediaTypes:g,mediaFeatures:i,mediaValueKeywords:k,propertyKeywords:m,nonStandardPropertyKeywords:o,colorKeywords:u,valueKeywords:w,fontProperties:q,allowNested:!0,tokenHooks:{"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=c,c(a,b)):["operator","operator"]},"@":function(a){return a.eat("{")?[null,"interpolation"]:!a.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/,!1)&&(a.eatWhile(/[\w\\\-]/),a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),a.defineMIME("text/x-gss",{documentTypes:e,mediaTypes:g,mediaFeatures:i,propertyKeywords:m,nonStandardPropertyKeywords:o,fontProperties:q,counterDescriptors:s,colorKeywords:u,valueKeywords:w,supportsAtComponent:!0,tokenHooks:{"/":function(a,b){return!!a.eat("*")&&(b.tokenize=c,c(a,b))}},name:"css",helperType:"gss"})}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("../../lib/codemirror"),b("../xml/xml"),b("../javascript/javascript"),b("../css/css")):"function"==typeof c&&c.amd?c("codemirror/mode/htmlmixed/htmlmixed",["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],a):a(CodeMirror)}(function(a){"use strict";function b(a,b,c){var d=a.current(),e=d.search(b);return e>-1?a.backUp(d.length-e):d.match(/<\/?$/)&&(a.backUp(d.length),a.match(b,!1)||a.match(d)),c}function c(a){var b=i[a];return b?b:i[a]=new RegExp("\\s+"+a+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*")}function d(a,b){var d=a.match(c(b));return d?/^\s*(.*?)\s*$/.exec(d[2])[1]:""}function e(a,b){return new RegExp((b?"^":"")+"","i")}function f(a,b){for(var c in a)for(var d=b[c]||(b[c]=[]),e=a[c],f=e.length-1;f>=0;f--)d.unshift(e[f])}function g(a,b){for(var c=0;c\s\/]/.test(d.current())&&(h=f.htmlState.tagName&&f.htmlState.tagName.toLowerCase())&&k.hasOwnProperty(h))f.inTag=h+" ";else if(f.inTag&&m&&/>$/.test(d.current())){var n=/^([\S]+) (.*)/.exec(f.inTag);f.inTag=null;var o=">"==d.current()&&g(k[n[1]],n[2]),p=a.getMode(c,o),q=e(n[1],!0),r=e(n[1],!1);f.token=function(a,c){return a.match(q,!1)?(c.token=i,c.localState=c.localMode=null,null):b(a,r,c.localMode.token(a,c.localState))},f.localMode=p,f.localState=a.startState(p,j.indent(f.htmlState,""))}else f.inTag&&(f.inTag+=d.current(),d.eol()&&(f.inTag+=" "));return l}var j=a.getMode(c,{name:"xml",htmlMode:!0,multilineTagIndentFactor:d.multilineTagIndentFactor,multilineTagIndentPastTag:d.multilineTagIndentPastTag}),k={},l=d&&d.tags,m=d&&d.scriptTypes;if(f(h,k),l&&f(l,k),m)for(var n=m.length-1;n>=0;n--)k.script.unshift(["type",m[n].matches,m[n].mode]);return{startState:function(){var b=a.startState(j);return{token:i,inTag:null,localMode:null,localState:null,htmlState:b}},copyState:function(b){var c;return b.localState&&(c=a.copyState(b.localMode,b.localState)),{token:b.token,inTag:b.inTag,localMode:b.localMode,localState:c,htmlState:a.copyState(j,b.htmlState)}},token:function(a,b){return b.token(a,b)},indent:function(b,c){return!b.localMode||/^\s*<\//.test(c)?j.indent(b.htmlState,c):b.localMode.indent?b.localMode.indent(b.localState,c):a.Pass},innerMode:function(a){return{state:a.localState||a.htmlState,mode:a.localMode||j}}}},"xml","javascript","css"),a.defineMIME("text/html","htmlmixed")}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("codemirror/lib/codemirror")):"function"==typeof c&&c.amd?c("formatting",["codemirror/lib/codemirror"],a):a(CodeMirror)}(function(a){a.extendMode("css",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(a,b){return/^[;{}]$/.test(b)}}),a.extendMode("javascript",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(a,b,c,d){return this.jsonMode?/^[\[,{]$/.test(b)||/^}/.test(c):(";"!=b||!d.lexical||")"!=d.lexical.type)&&(/^[;{}]$/.test(b)&&!/^;/.test(c))}});var b=/^(a|abbr|acronym|area|base|bdo|big|br|button|caption|cite|code|col|colgroup|dd|del|dfn|em|frame|hr|iframe|img|input|ins|kbd|label|legend|link|map|object|optgroup|option|param|q|samp|script|select|small|span|strong|sub|sup|textarea|tt|var)$/;a.extendMode("xml",{commentStart:"",newlineAfterToken:function(a,c,d,e){var f=!1;return"html"==this.configuration&&(f=!!e.context&&b.test(e.context.tagName)),!f&&("tag"==a&&/>$/.test(c)&&e.context||/^-1&&h>-1&&h>g&&(a=a.substr(0,g)+a.substring(g+f.commentStart.length,h)+a.substr(h+f.commentEnd.length)),e.replaceRange(a,c,d)}})}),a.defineExtension("autoIndentRange",function(a,b){var c=this;this.operation(function(){for(var d=a.line;d<=b.line;d++)c.indentLine(d,"smart")})}),a.defineExtension("autoFormatRange",function(b,c){function d(){j+="\n",l=!0,++k}for(var e=this,f=e.getMode(),g=e.getRange(b,c).split("\n"),h=a.copyState(f,e.getTokenAt(b).state),i=e.getOption("tabSize"),j="",k=0,l=0===b.ch,m=0;m\n\t
    <%= label %>
    \n\t
    \n\n'}),c("CodeManager/view/EditorView",["backbone","text!./../template/editor.html"],function(a,b){return a.View.extend({template:_.template(b),initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix},render:function(){var a=this.model.toJSON();return a.pfx=this.pfx,this.$el.html(this.template(a)),this.$el.attr("class",this.pfx+"editor-c"),this.$el.find("#"+this.pfx+"code").html(this.model.get("input")),this}})}),c("CodeManager/main",["require","./config/config","./model/HtmlGenerator","./model/CssGenerator","./model/JsonGenerator","./model/CodeMirrorEditor","./view/EditorView"],function(a){var b=function(){var b={},c=a("./config/config"),d=a("./model/HtmlGenerator"),e=a("./model/CssGenerator"),f=a("./model/JsonGenerator"),g=a("./model/CodeMirrorEditor"),h=a("./view/EditorView"),i={},j={},k={},l={};return{getConfig:function(){return b},config:b,EditorView:h,name:"CodeManager",init:function(a){b=a||{};for(var h in c)h in b||(b[h]=c[h]);var i=b.pStylePrefix;return i&&(b.stylePrefix=i+b.stylePrefix),j.html=new d,j.css=new e,j.json=new f,l.CodeMirror=new g,this},onLoad:function(){this.loadDefaultGenerators().loadDefaultViewers()},addGenerator:function(a,b){return i[a]=b,this},getGenerator:function(a){return i[a]||null},getGenerators:function(){return i},addViewer:function(a,b){return k[a]=b,this},getViewer:function(a){return k[a]||null},getViewers:function(){return k},updateViewer:function(a,b){a.setContent(b)},getCode:function(a,b,c){var d=this.getGenerator(b);return d?d.build(a,c):""},loadDefaultGenerators:function(){for(var a in j)this.addGenerator(a,j[a]);return this},loadDefaultViewers:function(){for(var a in l)this.addViewer(a,l[a]);return this}}};return b}),c("CodeManager",["CodeManager/main"],function(a){return a}),c("Panels/config/config",[],function(){var a="create-comp",b="move-comp",c="sw-visibility",d="export-template",e="open-sm",f="open-tm",g="open-layers",h="open-blocks",i="fullscreen",j="preview";return{stylePrefix:"pn-",defaults:[{id:"commands",buttons:[{id:a,command:a,className:"fa fa-pencil-square-o",attributes:{title:"Create element"},stopDefaultCommand:1},{id:b,command:b,className:"fa fa-arrows",attributes:{title:"Move elements"},stopDefaultCommand:1}]},{id:"options",buttons:[{active:!0,id:c,className:"fa fa-square-o",command:c,context:c,attributes:{title:"View components"}},{id:j,className:"fa fa-eye",command:j,context:j,stopDefaultCommand:1,attributes:{title:"Preview"}},{id:i,className:"fa fa-arrows-alt",command:i,context:i,attributes:{title:"Fullscreen"}},{id:d,className:"fa fa-code",command:d,attributes:{title:"View code"}}]},{id:"views",buttons:[{id:e,className:"fa fa-paint-brush",command:e,active:!0,attributes:{title:"Open Style Manager"}},{id:f,className:"fa fa-cog",command:f,attributes:{title:"Settings"}},{id:g,className:"fa fa-bars",command:g,attributes:{title:"Open Layer Manager"}},{id:h,className:"fa fa-th-large",command:h,attributes:{title:"Open Blocks"}}]}],em:null,delayBtnsShow:300}}),c("Panels/model/Button",["backbone","require"],function(a,b){return a.Model.extend({defaults:{id:"",className:"",command:"",context:"",buttons:[],attributes:{},options:{},active:!1,dragDrop:!1,runDefaultCommand:!0,stopDefaultCommand:!1},initialize:function(a){if(this.get("buttons").length){var c=b("./Buttons");this.set("buttons",new c(this.get("buttons")))}}})}),c("Panels/model/Buttons",["backbone","./Button"],function(a,b){return a.Collection.extend({model:b,deactivateAllExceptOne:function(a,b){this.forEach(function(c,d){c!==a&&(c.set("active",!1),b&&c.get("buttons").length&&c.get("buttons").deactivateAllExceptOne(a,b))})},deactivateAll:function(a){var b=a||"";this.forEach(function(a,c){a.get("context")==b&&(a.set("active",!1),a.get("buttons").length&&a.get("buttons").deactivateAll(b))})}})}),c("Panels/model/Panel",["backbone","./Buttons"],function(a,b){return a.Model.extend({defaults:{id:"",content:"",visible:!0,buttons:[]},initialize:function(a){this.btn=this.get("buttons")||[],this.buttons=new b(this.btn),this.set("buttons",this.buttons)}})}),c("Panels/model/Panels",["backbone","./Panel"],function(a,b){return a.Collection.extend({model:b})}),c("Panels/view/ButtonView",["backbone","require"],function(a,b){return a.View.extend({tagName:"span",initialize:function(a){_.bindAll(this,"startTimer","stopTimer","showButtons","hideButtons","closeOnKeyPress","onDrop","initSorter","stopDrag");var b=this.model.get("className");this.config=a.config||{},this.em=this.config.em||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.id=this.pfx+this.model.get("id"),this.activeCls=this.pfx+"active",this.btnsVisCls=this.pfx+"visible",this.parentM=a.parentM||null,this.className=this.pfx+"btn"+(b?" "+b:""),this.listenTo(this.model,"change:active updateActive",this.updateActive),this.listenTo(this.model,"checkActive",this.checkActive),this.listenTo(this.model,"change:bntsVis",this.updateBtnsVis),this.listenTo(this.model,"change:attributes",this.updateAttributes),this.listenTo(this.model,"change:className",this.updateClassName),this.model.get("buttons").length&&(this.$el.on("mousedown",this.startTimer),this.$el.append($("
    ",{"class":this.pfx+"arrow-rd"}))),this.em&&this.em.get&&(this.commands=this.em.get("Commands")),this.events={},this.model.get("dragDrop")?(this.events.mousedown="initDrag",this.em.on("loaded",this.initSorter)):this.events.click="clicked",this.delegateEvents()},initSorter:function(){if(this.em.Canvas){var a=this.em.Canvas;this.canvasEl=a.getBody(),this.sorter=new this.em.Utils.Sorter({container:this.canvasEl,placer:a.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,onMove:this.onDrag,onEndMove:this.onDrop,document:a.getFrameEl().contentDocument,direction:"a",wmargin:1,nested:1});var b=a.getOffset();this.sorter.offTop=b.top,this.sorter.offLeft=b.left}},initDrag:function(){this.model.collection.deactivateAll(this.model.get("context")),this.sorter.startSort(this.el),this.sorter.setDropContent(this.model.get("options").content),this.canvasEl.style.cursor="grabbing",$(document).on("mouseup",this.stopDrag)},stopDrag:function(){$(document).off("mouseup",this.stopDrag),this.sorter.endMove()},onDrag:function(a){},onDrop:function(a){this.canvasEl.style.cursor="default"},updateClassName:function(){var a=this.model.get("className");this.$el.attr("class",this.pfx+"btn"+(a?" "+a:""))},updateAttributes:function(){this.$el.attr(this.model.get("attributes"))},updateBtnsVis:function(){this.$buttons&&(this.model.get("bntsVis")?this.$buttons.addClass(this.btnsVisCls):this.$buttons.removeClass(this.btnsVisCls))},startTimer:function(){this.timeout=setTimeout(this.showButtons,this.config.delayBtnsShow),$(document).on("mouseup",this.stopTimer)},stopTimer:function(){$(document).off("mouseup",this.stopTimer),this.timeout&&clearTimeout(this.timeout)},showButtons:function(){clearTimeout(this.timeout),this.model.set("bntsVis",!0),$(document).on("mousedown",this.hideButtons),$(document).on("keypress",this.closeOnKeyPress)},hideButtons:function(a){a&&$(a.target).trigger("click"),this.model.set("bntsVis",!1),$(document).off("mousedown",this.hideButtons),$(document).off("keypress",this.closeOnKeyPress)},closeOnKeyPress:function(a){var b=a.which||a.keyCode;27==b&&this.hideButtons()},updateActive:function(){var a=null,b=this.em&&this.em.get?this.em.get("Editor"):null,c=this.model.get("command");this.commands&&"string"==typeof c?a=this.commands.get(c):null!==c&&"object"==typeof c?a=c:"function"==typeof c&&(a={run:c}),this.model.get("active")?(this.model.collection.deactivateAll(this.model.get("context")),this.model.set("active",!0,{silent:!0}).trigger("checkActive"),this.parentM&&this.parentM.set("active",!0,{silent:!0}).trigger("checkActive"),a&&a.run&&(a.run(b,this.model,this.model.get("options")),b.trigger("run:"+c))):(this.$el.removeClass(this.activeCls),this.model.collection.deactivateAll(this.model.get("context")),this.parentM&&this.parentM.set("active",!1,{silent:!0}).trigger("checkActive"),a&&a.stop&&(a.stop(b,this.model,this.model.get("options")),b.trigger("stop:"+c)))},checkActive:function(){this.model.get("active")?this.$el.addClass(this.activeCls):this.$el.removeClass(this.activeCls)},clicked:function(a){if(!this.model.get("bntsVis")){this.parentM&&this.swapParent();var b=this.model.get("active");this.model.set("active",!b);this.em.get("Commands").get("select-comp");b?this.model.get("runDefaultCommand")&&this.em.runDefault():this.model.get("stopDefaultCommand")&&this.em.stopDefault()}},swapParent:function(){this.parentM.collection.deactivateAll(this.model.get("context")),this.parentM.set("attributes",this.model.get("attributes")),this.parentM.set("options",this.model.get("options")),this.parentM.set("command",this.model.get("command")),this.parentM.set("className",this.model.get("className")),this.parentM.set("active",!0,{silent:!0}).trigger("checkActive")},render:function(){if(this.updateAttributes(),this.$el.attr("class",this.className),this.model.get("buttons").length){var a=b("./ButtonsView"),c=new a({collection:this.model.get("buttons"),config:this.config,parentM:this.model});this.$buttons=c.render().$el,this.$buttons.append($("
    ",{"class":this.pfx+"arrow-l"})),this.$el.append(this.$buttons)}return this}})}),c("Panels/view/ButtonsView",["backbone","./ButtonView"],function(a,b){return a.View.extend({initialize:function(a){this.opt=a||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"",this.parentM=this.opt.parentM||null,this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset",this.render),this.className=this.pfx+"buttons"},addTo:function(a){this.addToCollection(a)},addToCollection:function(a,c){var d=c||null,e=b,f=new e({model:a,config:this.config,parentM:this.parentM}),g=f.render().el;return d?d.appendChild(g):this.$el.append(g),g},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",_.result(this,"className")),this}})}),c("Panels/view/PanelView",["backbone","./ButtonsView"],function(a,b){return a.View.extend({initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.buttons=this.model.get("buttons"),this.className=this.pfx+"panel",this.id=this.pfx+this.model.get("id"),this.listenTo(this.model,"change:appendContent",this.appendContent),this.listenTo(this.model,"change:content",this.updateContent)},appendContent:function(){this.$el.append(this.model.get("appendContent"))},updateContent:function(){this.$el.html(this.model.get("content"))},render:function(){if(this.$el.attr("class",_.result(this,"className")),this.id&&this.$el.attr("id",this.id),this.buttons.length){var a=new b({collection:this.buttons,config:this.config});this.$el.append(a.render().el)}return this.$el.append(this.model.get("content")),this}})}),c("Panels/view/PanelsView",["backbone","./PanelView"],function(a,b){return a.View.extend({initialize:function(a){this.opt=a||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"",this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset",this.render),this.className=this.pfx+"panels"},addTo:function(a){this.addToCollection(a)},addToCollection:function(a,c){var d=c||null,e=b,f=new e({model:a,config:this.config}),g=f.render().el;return d?d.appendChild(g):this.$el.append(g),g},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",_.result(this,"className")),this}})}),c("Panels/main",["require","./config/config","./model/Panel","./model/Panels","./view/PanelView","./view/PanelsView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Panel"),g=a("./model/Panels"),h=(a("./view/PanelView"),a("./view/PanelsView"));return{name:"Panels",init:function(a){d=a||{};for(var f in e)f in d||(d[f]=e[f]);var i=d.pStylePrefix;return i&&(d.stylePrefix=i+d.stylePrefix),b=new g(d.defaults),c=new h({collection:b,config:d}),this},getPanels:function(){return b},getPanelsEl:function(){return c.el},addPanel:function(a){return b.add(a)},getPanel:function(a){var c=b.where({id:a});return c.length?c[0]:null},addButton:function(a,b){var c=this.getPanel(a);return c?c.get("buttons").add(b):null},getButton:function(a,b){var c=this.getPanel(a);if(c){var d=c.get("buttons").where({id:b});return d.length?d[0]:null}return null},render:function(){return c.render().el},active:function(){this.getPanels().each(function(a){a.get("buttons").each(function(a){a.get("active")&&a.trigger("updateActive")})})},Panel:f}}}),c("Panels",["Panels/main"],function(a){return a}),c("RichTextEditor/config/config",[],function(){return{stylePrefix:"rte-",toolbarId:"toolbar",containerId:"wrapper",commands:[{command:"bold",title:"Bold","class":"fa fa-bold"},{command:"italic",title:"Italic","class":"fa fa-italic"},{command:"underline",title:"Underline","class":"fa fa-underline"},{command:"strikethrough",title:"Strikethrough","class":"fa fa-strikethrough",group:"format"},{command:"insertHTML",title:"Link","class":"fa fa-link",args:'${content}'}]}}),c("RichTextEditor/view/TextEditorView",["jquery"],function(a){var b=function(b){var c=a.Deferred(),d=new FileReader;return d.onload=function(a){c.resolve(a.target.result)},d.onerror=c.reject,d.onprogress=c.notify,d.readAsDataURL(b),c.promise()};return a.fn.cleanHtml=function(){var b=a(this).html();return b&&b.replace(/(
    |\s|

    <\/div>| )*$/,"")},a.fn.wysiwyg=function(c){var d,e,f,g=this,h=function(){var b=e.activeToolbarClass;b&&a(e.toolbarSelector).find(f).each(function(){var c=a(this),d=c.data(e.commandRole),f=g.get(0).ownerDocument;f.queryCommandState(d)?c.addClass(b):c.removeClass(b)})},i=function(a,b){var c=a.split(" "),d=c.shift(),e=c.join(" ")+(b||"");g.get(0).ownerDocument.execCommand("styleWithCSS",!1,!0),g.get(0).ownerDocument.execCommand(d,0,e),h(),g.trigger("change")},j=function(){var a=window.getSelection();if(a.getRangeAt&&a.rangeCount)return a.getRangeAt(0)},k=function(){d=j()},l=function(){var a=window.getSelection();if(d){try{a.removeAllRanges()}catch(b){document.body.createTextRange().select(),document.selection.empty()}a.addRange(d)}},m=function(c){g.focus(),a.each(c,function(c,d){/^image\//.test(d.type)?a.when(b(d)).done(function(a){i("insertimage",a)}).fail(function(a){e.fileUploadError("file-reader",a)}):e.fileUploadError("unsupported-file-type",d.type)})},n=function(a,b){l(),document.queryCommandSupported("hiliteColor")&&document.execCommand("hiliteColor",0,b||"transparent"),k(),a.data(e.selectionMarker,b)},o=function(b,c){b.find(f).unbind().click(function(){l();var b=g.get(0).ownerDocument,d=a(this),e=d.data(c.commandRole),f=d.data("args");f?(f=f.replace("${content}",b.getSelection()),i(e,f)):b.execCommand(e),k()}),b.find("[data-toggle=dropdown]").click(l);var d="[data-"+c.commandRole+"]";b.find("select"+d).on("webkitspeechchange change",function(){var b=this.value;l(),b&&(g.focus(),i(a(this).data(c.commandRole),b)),k()}),b.find("input[type=text]"+d,", select"+d).on("webkitspeechchange change",function(){var b=this.value;this.value="",l(),b&&(g.focus(),i(a(this).data(c.commandRole),b)),k()}).on("focus",function(){var b=a(this);b.data(c.selectionMarker)||(n(b,c.selectionColor),b.focus())}).on("blur",function(){var b=a(this);b.data(c.selectionMarker)&&n(b,!1)}),b.find("input[type=file][data-"+c.commandRole+"]").change(function(){l(),"file"===this.type&&this.files&&this.files.length>0&&m(this.files),k(),this.value=""})},p=function(){g.on("dragenter dragover",!1).on("drop",function(a){var b=a.originalEvent.dataTransfer;a.stopPropagation(),a.preventDefault(),b&&b.files&&b.files.length>0&&m(b.files)})};if("string"==typeof c&&"destroy"==c)return g.attr("contenteditable",!1).unbind("mouseup keyup mouseout dragenter dragover"),a(window).unbind("touchend"),this;e=a.extend({},a.fn.wysiwyg.defaults,c);var q="[data-"+e.commandRole+"]";return f="a"+q+",button"+q+",input[type=button]"+q+", select"+q,e.dragAndDropImages&&p(),o(a(e.toolbarSelector),e),g.attr("contenteditable",!0).on("mouseup keyup mouseout",function(){k(),h()}),a(window).bind("touchend",function(a){var b=g.is(a.target)||g.has(a.target).length>0,c=j(),d=c&&c.startContainer===c.endContainer&&c.startOffset===c.endOffset;d&&!b||(k(),h())}),this},a.fn.wysiwyg.defaults={toolbarSelector:"[data-role=editor-toolbar]",commandRole:"edit",activeToolbarClass:"btn-info",selectionMarker:"edit-focus-marker",selectionColor:"darkgrey",dragAndDropImages:!0,fileUploadError:function(a,b){console.log("File upload error",a,b)}},a}),c("RichTextEditor/model/CommandButton",["backbone"],function(a){return a.Model.extend({idAttribute:"command",defaults:{command:"",type:"",title:"","class":"",options:[]},initialize:function(){var a=this.get("options");a.length&&this.set("type","select")}})}),c("RichTextEditor/model/CommandButtons",["backbone","./CommandButton"],function(a,b){return a.Collection.extend({model:b})}),c("RichTextEditor/view/CommandButtonView",["backbone"],function(a){return a.View.extend({tagName:"a",initialize:function(a,b){this.config=b||{},this.ppfx=this.config.pStylePrefix||"",this.className=this.config.stylePrefix+"btn "+this.model.get("class")},render:function(){return this.$el.addClass(this.className),this}})}),c("RichTextEditor/view/CommandButtonSelectView",["backbone","./CommandButtonView"],function(a,b){return b.extend({initialize:function(a,c){b.prototype.initialize.apply(this,arguments)},getInput:function(){var a=this.model;if(!this.input){var b=a.get("command"),c='",this.input=$(c)}return this.input},getInputCont:function(){var a=this.getInput(),b=this.ppfx,c=$('
    ');return c.append(a)},render:function(){return b.prototype.render.apply(this,arguments),this.$el.html(this.getInputCont()),this}})}),c("RichTextEditor/view/CommandButtonsView",["backbone","./CommandButtonView","./CommandButtonSelectView"],function(a,b,c){return a.View.extend({attributes:{"data-role":"editor-toolbar"},initialize:function(a){this.config=a.config||{};var b=this.config.stylePrefix||"";this.id=b+this.config.toolbarId,this.listenTo(this.collection,"add",this.addTo),this.$el.data("helper",1)},addTo:function(a){this.add(a)},add:function(a,d){var e=d||null,f=b;switch(a.get("type")){case"select":f=c}var g=a.get("args"),h={title:a.get("title"),"data-edit":a.get("command")};g&&(h["data-args"]=g);var i=new f({model:a,attributes:h},this.config),j=i.render().el;e?e.appendChild(j):this.$el.append(j)},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.add(b,a)},this),this.$el.append(a),this.$el.attr("id",this.id),this}})}),c("RichTextEditor/main",["require","./config/config","./view/TextEditorView","./model/CommandButtons","./view/CommandButtonsView"],function(a){return function(){var b,c,d,e,f={},g=a("./config/config"),h=(a("./view/TextEditorView"),a("./model/CommandButtons")),i=a("./view/CommandButtonsView");return{customRte:null,name:"rte",init:function(a){e=this,f=a||{};for(var j in g)j in f||(f[j]=g[j]);var k=f.pStylePrefix;return k&&(f.stylePrefix=k+f.stylePrefix),b=f.stylePrefix,d=new h(f.commands),c=new i({collection:d,config:f}),this},add:function(a,b){var c=b||{};return c.command=a,d.add(c)},get:function(a){return d.where({command:a})[0]},getAll:function(){return d},udpatePosition:function(){var a="px",b=f.em.get("Canvas"),d=b.getTargetToElementDim(c.el,this.lastEl,{event:"rteToolbarPosUpdate"}),e=c.el.style;e.top=d.top+a,e.left=d.left+a},attach:function(a,b){this.lastEl=a.el;var d=this.customRte;return d?b=d.enable(a.el,b):a.$el.wysiwyg({}).focus(),this.show(),f.em&&(setTimeout(this.udpatePosition.bind(this),0),f.em.off("change:canvasOffset",this.udpatePosition,this),f.em.on("change:canvasOffset",this.udpatePosition,this),f.em.off("canvasScroll",this.udpatePosition,this),f.em.on("canvasScroll",this.udpatePosition,this)),c.$el.on("mousedown",this.disableProp),b},detach:function(a,b){var d=this.customRte;d?(a.model.set("content",a.el.innerHTML),d.disable(a.el,b)):a.$el.wysiwyg("destroy"),this.hide(),c.$el.off("mousedown",this.disableProp)},focus:function(a,b){var c=this.customRte;c?c.focus(a.el,b):this.attach(a)},show:function(){var a=c.el.style;a.display="block"},hide:function(){c.el.style.display="none"},disableProp:function(a){a.stopPropagation()},getToolbarEl:function(){return c.el},render:function(){return c.render().el}}}}),c("RichTextEditor",["RichTextEditor/main"],function(a){return a}),c("StyleManager/config/config",[],function(){return{stylePrefix:"sm-",sectors:[],textNoElement:"Select an element before using Style Manager"}}),c("StyleManager/model/Layer",["backbone"],function(a){return a.Model.extend({defaults:{index:"",active:!0,value:"",values:{},preview:!1},initialize:function(){var a=this.get("value");if(!a){var b="",c=this.get("values");for(var d in c)b+=" "+c[d];this.set("value",b.trim())}}})}),c("StyleManager/model/Layers",["backbone","./Layer"],function(a,b){return a.Collection.extend({model:b,initialize:function(){this.idx=1,this.on("add",this.onAdd),this.on("reset",this.onReset)},onAdd:function(a,b,c){c.noIncrement||a.set("index",this.idx++)},onReset:function(){this.idx=1}})}),c("StyleManager/model/Property",["backbone","./Layers","require"],function(a,b,c){return a.Model.extend({defaults:{name:"",property:"",type:"",units:[],unit:"",defaults:"",info:"",value:"",icon:"",preview:!1,detached:!1,functionName:"",properties:[],layers:[],list:[],fixedValues:["initial","inherit"]},initialize:function(a){var d=this.get("type"),e=this.get("name"),f=this.get("property"),g=this.get("properties");if(e||this.set("name",f.charAt(0).toUpperCase()+f.slice(1).replace(/-/g," ")),g.length){var h=c("./Properties");this.set("properties",new h(g))}switch(d){case"stack":this.set("layers",new b)}},getValue:function(){var a="",b=this.get("type");switch(b){case"integer":a=this.get("value")+this.get("unit");break;default:a=this.get("value")}return a}})}),c("StyleManager/model/Properties",["backbone","./Property"],function(a,b){return a.Collection.extend({model:b})}),c("StyleManager/model/PropertyFactory",["backbone"],function(a){return function(){return{build:function(a){var b=[];"string"==typeof a&&(a=[a]);for(var c=0,d=a.length;c\n\t
    \n\t\t<%= label %>\n\t
    \n
    '}),c("text!StyleManager/templates/propertyInput.html",[],function(){return'
    \n\tinput-holder\'>\n
    \n
    \n'}),c("StyleManager/view/PropertyView",["backbone","text!./../templates/propertyLabel.html","text!./../templates/propertyInput.html"],function(a,b,c){return a.View.extend({template:_.template(c),templateLabel:_.template(b),events:{change:"valueUpdated"},initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=a.target||{},this.propTarget=a.propTarget||{},this.onChange=a.onChange||{},this.onInputRender=a.onInputRender||{},this.customValue=a.customValue||{},this.defaultValue=this.model.get("defaults"),this.property=this.model.get("property"),this.input=this.$input=null,this.className=this.pfx+"property",this.inputHolderId="#"+this.pfx+"input-holder",this.model.get("value")||this.model.set("value",this.model.get("defaults")),this.listenTo(this.model,"destroy remove",this.remove),this.listenTo(this.propTarget,"update",this.targetUpdated),this.listenTo(this.model,"change:value",this.valueChanged),this.listenTo(this.model,"targetUpdated",this.targetUpdated)},getTarget:function(){return this.selectedComponent?this.selectedComponent:this.propTarget?this.propTarget.model:null},valueUpdated:function(){this.$input&&this.model.set("value",this.getInputValue())},targetUpdated:function(){this.selectedComponent=this.propTarget.model,this.helperComponent=this.propTarget.helper,this.getTarget()&&(this.sameValue()||this.renderInputRequest())},sameValue:function(){return this.getComponentValue()==this.model.get("value")+this.model.get("unit")},getComponentValue:function(){var a=this.getTarget();if(a){var b=a.get("style")[this.property];if(b?this.componentValue=b:this.componentValue=this.defaultValue+(this.unit||""),this.model.get("functionName")){var c=this.fetchFromFunction(this.componentValue);c&&(this.componentValue=c)}if(this.customValue&&"function"==typeof this.customValue){var d=this.model.collection.indexOf(this.model),e=this.customValue(this,d);e&&(this.componentValue=e)}return this.componentValue}},fetchFromFunction:function(a){return a.substring(a.indexOf("(")+1,a.lastIndexOf(")"))},getValueForTarget:function(){return this.model.getValue()},getInputValue:function(){return this.$input?this.$input.val():""},valueChanged:function(a,b,c){var d=this.getValueForTarget();if(this.$input&&this.setValue(d),this.getTarget()&&this.isTargetStylable()){value=this.getValueForTarget();var e=this.model.get("functionName");e&&(value=e+"("+value+")");var f=this.getTarget(),g=this.onChange;g&&"function"==typeof g?g(f,this,c):this.updateTargetStyle(value,null,c);var h=this.config.em;if(h){var i=this.model;h.trigger("component:update",i),h.trigger("component:styleUpdate",i),h.trigger("component:styleUpdate:"+i.get("property"),i)}}},updateTargetStyle:function(a,b,c){var d=b||this.property,e=a||"",f=c?c.avoidStore:0,g=this.getTarget(),h=_.clone(g.get("style"));e?h[d]=e:delete h[d],g.set("style",h,{avoidStore:f}),this.helperComponent&&this.helperComponent.set("style",h,{avoidStore:f})},isTargetStylable:function(){var a=this.getTarget().get("stylable");return a instanceof Array&&(a=_.indexOf(a,this.property)>=0),a},setValue:function(a,b){var c=0===b?0:1,d=this.model.get("defaults"),e=this.model.get("value")||d;(a||c)&&(e=a),this.$input&&this.$input.val(e),this.model.set({value:e},{silent:!0})},renderLabel:function(){this.$el.html(this.templateLabel({pfx:this.pfx,ppfx:this.ppfx,icon:this.model.get("icon"),info:this.model.get("info"),label:this.model.get("name")}))},renderField:function(){this.renderTemplate(),this.renderInput(),delete this.componentValue},renderTemplate:function(){this.$el.append(this.template({pfx:this.pfx,ppfx:this.ppfx,icon:this.model.get("icon"),info:this.model.get("info"),label:this.model.get("name")}))},renderInput:function(){this.$input||(this.$input=$("",{placeholder:this.model.get("defaults"),type:"text"}),this.$el.find(this.inputHolderId).html(this.$input)),this.setValue(this.componentValue,0)},renderInputRequest:function(){this.renderInput()},cleanValue:function(){this.setValue("")},render:function(){return this.renderLabel(),this.renderField(),this.$el.attr("class",this.className),this}})}),c("text!Abstract/ui/templates/inputNumber.html",[],function(){return'input-holder\'>\nfield-units\'>\n
    \n\t
    \n\t
    \n
    \n'}),c("Abstract/ui/InputNumber",["backbone","text!./templates/inputNumber.html"],function(a,b){return a.View.extend({events:{},template:_.template(b),initialize:function(a){_.bindAll(this,"moveIncrement","upIncrement");var b=a.ppfx||"";this.ppfx=b,this.docEl=$(document),this.inputCls=b+"input-number",this.unitCls=b+"input-unit",this.events["click ."+b+"field-arrow-u"]="upArrowClick",this.events["click ."+b+"field-arrow-d"]="downArrowClick",this.events["mousedown ."+b+"field-arrows"]="downIncrement",this.events["change ."+this.inputCls]="handleChange",this.events["change ."+this.unitCls]="handleUnitChange",this.listenTo(this.model,"change:unit change:value",this.handleModelChange),this.delegateEvents()},setValue:function(a,b){var c=b||{},d=this.validateInputValue(a,{deepCheck:1}),e={value:d.value};(d.unit||d.force)&&(e.unit=d.unit),this.model.set(e,c),c.silent&&this.handleModelChange()},handleChange:function(a){a.stopPropagation(),this.setValue(this.getInputEl().value)},handleUnitChange:function(a){a.stopPropagation();var b=this.getUnitEl().value;this.model.set("unit",b)},handleModelChange:function(){var a=this.model;this.getInputEl().value=a.get("value");var b=this.getUnitEl();b&&(b.value=a.get("unit"))},getInputEl:function(){return this.inputEl||(this.inputEl=$("",{type:"text","class":this.inputCls,placeholder:this.model.get("defaults")})),this.inputEl.get(0)},getUnitEl:function(){if(!this.unitEl){var a=this.model,b=a.get("units")||[];if(b.length){var c='",this.unitEl=$(c)}}return this.unitEl&&this.unitEl.get(0)},upArrowClick:function(){var a=this.model.get("value");a=isNaN(a)?1:parseInt(a,10)+1;var b=this.validateInputValue(a);this.model.set("value",b.value)},downArrowClick:function(){var a=this.model.get("value");a=isNaN(a)?0:parseInt(a,10)-1;var b=this.validateInputValue(a);this.model.set("value",b.value)},downIncrement:function(a){a.preventDefault(),this.moved=0;var b=this.model.get("value");b=isNaN(b)?0:parseInt(b,10);var c={y:a.pageY,val:b};this.docEl.mouseup(c,this.upIncrement),this.docEl.mousemove(c,this.moveIncrement)},moveIncrement:function(a){this.moved=1;var b=parseInt(a.data.val-a.pageY+a.data.y,10);return this.prValue=this.validateInputValue(b).value,this.model.set("value",this.prValue,{avoidStore:1}),!1},upIncrement:function(a){if(this.docEl.off("mouseup",this.upIncrement),this.docEl.off("mousemove",this.moveIncrement),this.prValue&&this.moved){var b=this.prValue-1;this.model.set("value",b,{avoidStore:1}).set("value",b+1)}},validateInputValue:function(a,b){var c=0,d=b||{},e=this.model,f=a||e.get("defaults"),g=e.get("units")||[],h=e.get("unit")||g.length&&g[0]||"",i=e.get("max"),j=e.get("min");if(d.deepCheck){var k=e.get("fixedValues")||[];if(f){var l=new RegExp("^"+k.join("|"),"g");if(k.length&&l.test(f))f=f.match(l)[0],h="",c=1;else{var m=f+"";f+="",f=parseFloat(f.replace(",",".")),f=isNaN(f)?e.get("defaults"):f;var n=m.replace(f,"");_.indexOf(g,n)>=0&&(h=n)}}}return"undefined"!=typeof i&&(f=f>i?i:f),"undefined"!=typeof j&&(f=f\n\tinput-holder\'>\n
    \n
    \n'}),c("StyleManager/view/PropertyRadioView",["backbone","./PropertyView","text!./../templates/propertyRadio.html"],function(a,b,c){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),this.list=this.model.get("list")||[],this.className=this.className+" "+this.pfx+"list"},renderInput:function(){var a=this.pfx,b=this.ppfx,c=b+"radio-item-label";this.$input||this.list&&this.list.length&&(this.input="",_.each(this.list,function(d){var e=d.className?d.className+" "+a+"icon "+c:"",f=this.property+"-"+d.value,g=d.name?d.name:d.value;titleAttr=d.title?'title="'+d.title+'"':"",this.input+='
    "},this),this.$inputEl=$(this.input),this.$el.find("#"+a+"input-holder").html(this.$inputEl),this.$input=this.$inputEl.find('input[name="'+this.property+'"]')),this.setValue(this.componentValue)},getInputValue:function(){return this.$input?this.$el.find("input:checked").val():""},setValue:function(a){var b=this.model.get("value")||this.defaultValue;a&&(b=a),this.$input&&this.$input.filter('[value="'+b+'"]').prop("checked",!0),this.model.set({value:b},{silent:!0})}})}),c("text!StyleManager/templates/propertySelect.html",[],function(){return'
    \n\tinput-holder\'>\n\t
    \n\t\t
    \n\t
    \n
    \n
    \n'}),c("StyleManager/view/PropertySelectView",["backbone","./PropertyView","text!./../templates/propertySelect.html"],function(a,b,c){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),this.list=this.model.get("list")||[]},renderInput:function(){var a=this.pfx;this.$input||(this.input="",this.$input=$(this.input),this.$el.find("#"+a+"input-holder").html(this.$input)),this.setValue(this.componentValue,0)}})}),c("text!Abstract/ui/templates/input.html",[],function(){return"\n"}),c("Abstract/ui/Input",["backbone","text!./templates/input.html"],function(a,b){return a.View.extend({events:{change:"handleChange"},template:_.template(b),initialize:function(a){var b=a||{},c=b.ppfx||"";this.target=b.target||{},this.inputClass=c+"field",this.inputHolderClass=c+"input-holder",this.ppfx=c,this.listenTo(this.model,"change:value",this.handleModelChange)},handleChange:function(a){a.stopPropagation(),this.setValue(this.getInputEl().value)},setValue:function(a,b){var c=b||{},d=this.model;d.set({value:a||d.get("defaults")},c),c.silent&&this.handleModelChange()},handleModelChange:function(){this.getInputEl().value=this.model.get("value")},getInputEl:function(){return this.inputEl||(this.inputEl=$("",{type:"text","class":this.inputCls,placeholder:this.model.get("defaults")})),this.inputEl.get(0)},render:function(){var a=this.$el;return a.addClass(this.inputClass),a.html(this.template({holderClass:this.inputHolderClass,ppfx:this.ppfx})),a.find("."+this.inputHolderClass).html(this.getInputEl()),this}})}),function(a){"use strict";"function"==typeof c&&c.amd?c("Spectrum",["jquery"],a):"object"==typeof exports&&"object"==typeof module?module.exports=a(b("jquery")):a(jQuery)}(function(a,b){"use strict";function c(b,c,d,e){for(var f=[],g=0;g')}else{var m="sp-clear-display";f.push(a("
    ").append(a('').attr("title",e.noColorSelectedText)).html())}}return"
    "+f.join("")+"
    "}function d(){for(var a=0;aMath.abs(b-e);ta=f?"x":"y"}}else ta=null;var g=!ta||"x"===ta,h=!ta||"y"===ta;g&&(ka=parseFloat(a/ba)),h&&(la=parseFloat((ca-b)/ca)),Xa=!1,U.showAlpha||(ma=1),K()},y,z),Ta?(H(Ta),L(),Va=U.preferredFormat||tinycolor(Ta).format,u(Ta)):L(),V&&C();var d=p?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Ha.delegate(".sp-thumb-el",d,b),Ia.delegate(".sp-thumb-el:nth-child(1)",d,{ignore:!0},b)}function t(){if(X&&window.localStorage){try{var b=window.localStorage[X].split(",#");b.length>1&&(delete window.localStorage[X],a.each(b,function(a,b){u(b)}))}catch(c){}try{qa=window.localStorage[X].split(";")}catch(c){}}}function u(b){if(W){var c=tinycolor(b).toRgbString();if(!pa[c]&&a.inArray(c,qa)===-1)for(qa.push(c);qa.length>ra;)qa.shift();if(X&&window.localStorage)try{window.localStorage[X]=qa.join(";")}catch(d){}}}function v(){var a=[];if(U.showPalette)for(var b=0;bj&&j>e?Math.abs(l.left+e-j):0),l.top-=Math.min(l.top,l.top+f>k&&k>f?Math.abs(f+g-d):d),l}function h(){}function i(a){a.stopPropagation()}function j(a,b){var c=Array.prototype.slice,d=c.call(arguments,2);return function(){return a.apply(b,d.concat(c.call(arguments))); -}}function k(b,c,d,e){function f(a){a.stopPropagation&&a.stopPropagation(),a.preventDefault&&a.preventDefault(),a.returnValue=!1}function g(a){if(k){if(p&&j.documentMode<9&&!a.button)return i();var d=a.originalEvent&&a.originalEvent.touches&&a.originalEvent.touches[0],e=d&&d.pageX||a.pageX,g=d&&d.pageY||a.pageY,h=Math.max(0,Math.min(e-l.left,n)),q=Math.max(0,Math.min(g-l.top,m));o&&f(a),c.apply(b,[h,q,a])}}function h(c){var e=c.which?3==c.which:2==c.button;e||k||d.apply(b,arguments)!==!1&&(k=!0,m=a(b).height(),n=a(b).width(),l=a(b).offset(),a(j).bind(q),a(j.body).addClass("sp-dragging"),g(c),f(c))}function i(){k&&(a(j).unbind(q),a(j.body).removeClass("sp-dragging"),setTimeout(function(){e.apply(b,arguments)},0)),k=!1}c=c||function(){},d=d||function(){},e=e||function(){};var j=document,k=!1,l={},m=0,n=0,o="ontouchstart"in window,q={};q.selectstart=f,q.dragstart=f,q["touchmove mousemove"]=g,q["touchend mouseup"]=i,a(b).bind("touchstart mousedown",h)}function l(a,b,c){var d;return function(){var e=this,f=arguments,g=function(){d=null,a.apply(e,f)};c&&clearTimeout(d),!c&&d||(d=setTimeout(g,b))}}function m(){return a.fn.spectrum.inputTypeColorSupport()}var n={beforeShow:h,move:h,change:h,show:h,hide:h,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",togglePaletteMoreText:"more",togglePaletteLessText:"less",clearText:"Clear Color Selection",noColorSelectedText:"No Color Selected",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,offset:null},o=[],p=!!/msie/i.exec(window.navigator.userAgent),q=function(){function a(a,b){return!!~(""+a).indexOf(b)}var b=document.createElement("div"),c=b.style;return c.cssText="background-color:rgba(0,0,0,.5)",a(c.backgroundColor,"rgba")||a(c.backgroundColor,"hsla")}(),r=["
    ","
    ","
    ","
    "].join(""),s=function(){var a="";if(p)for(var b=1;b<=6;b++)a+="
    ";return["
    ","
    ","
    ","
    ","","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ",a,"
    ","
    ","
    ","
    ","
    ","","
    ","
    ","
    ","","","
    ","
    ","
    "].join("")}(),t="spectrum.id";a.fn.spectrum=function(b,c){if("string"==typeof b){var d=this,e=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=o[a(this).data(t)];if(c){var f=c[b];if(!f)throw new Error("Spectrum: no such method: '"+b+"'");"get"==b?d=c.get():"container"==b?d=c.container:"option"==b?d=c.option.apply(c,e):"destroy"==b?(c.destroy(),a(this).removeData(t)):f.apply(c,e)}}),d}return this.spectrum("destroy").each(function(){var c=a.extend({},b,a(this).data()),d=f(this,c);a(this).data(t,d.id)})},a.fn.spectrum.load=!0,a.fn.spectrum.loadOpts={},a.fn.spectrum.draggable=k,a.fn.spectrum.defaults=n,a.fn.spectrum.inputTypeColorSupport=function u(){if("undefined"==typeof u._cachedResult){var b=a("")[0];u._cachedResult="color"===b.type&&""!==b.value}return u._cachedResult},a.spectrum={},a.spectrum.localization={},a.spectrum.palettes={},a.fn.spectrum.processNativeColorInputs=function(){var b=a("input[type=color]");b.length&&!m()&&b.spectrum({preferredFormat:"hex6"})},function(){function a(a){var c={r:0,g:0,b:0},e=1,g=!1,h=!1;return"string"==typeof a&&(a=G(a)),"object"==typeof a&&(a.hasOwnProperty("r")&&a.hasOwnProperty("g")&&a.hasOwnProperty("b")?(c=b(a.r,a.g,a.b),g=!0,h="%"===String(a.r).substr(-1)?"prgb":"rgb"):a.hasOwnProperty("h")&&a.hasOwnProperty("s")&&a.hasOwnProperty("v")?(a.s=D(a.s),a.v=D(a.v),c=f(a.h,a.s,a.v),g=!0,h="hsv"):a.hasOwnProperty("h")&&a.hasOwnProperty("s")&&a.hasOwnProperty("l")&&(a.s=D(a.s),a.l=D(a.l),c=d(a.h,a.s,a.l),g=!0,h="hsl"),a.hasOwnProperty("a")&&(e=a.a)),e=w(e),{ok:g,format:a.format||h,r:M(255,N(c.r,0)),g:M(255,N(c.g,0)),b:M(255,N(c.b,0)),a:e}}function b(a,b,c){return{r:255*x(a,255),g:255*x(b,255),b:255*x(c,255)}}function c(a,b,c){a=x(a,255),b=x(b,255),c=x(c,255);var d,e,f=N(a,b,c),g=M(a,b,c),h=(f+g)/2;if(f==g)d=e=0;else{var i=f-g;switch(e=h>.5?i/(2-f-g):i/(f+g),f){case a:d=(b-c)/i+(b1&&(c-=1),c<1/6?a+6*(b-a)*c:c<.5?b:c<2/3?a+(b-a)*(2/3-c)*6:a}var e,f,g;if(a=x(a,360),b=x(b,100),c=x(c,100),0===b)e=f=g=c;else{var h=c<.5?c*(1+b):c+b-c*b,i=2*c-h;e=d(i,h,a+1/3),f=d(i,h,a),g=d(i,h,a-1/3)}return{r:255*e,g:255*f,b:255*g}}function e(a,b,c){a=x(a,255),b=x(b,255),c=x(c,255);var d,e,f=N(a,b,c),g=M(a,b,c),h=f,i=f-g;if(e=0===f?0:i/f,f==g)d=0;else{switch(f){case a:d=(b-c)/i+(b>1)+720)%360;--b;)d.h=(d.h+e)%360,f.push(P(d));return f}function u(a,b){b=b||6;for(var c=P(a).toHsv(),d=c.h,e=c.s,f=c.v,g=[],h=1/b;b--;)g.push(P({h:d,s:e,v:f})),f=(f+h)%1;return g}function v(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[a[c]]=c);return b}function w(a){return a=parseFloat(a),(isNaN(a)||a<0||a>1)&&(a=1),a}function x(a,b){A(a)&&(a="100%");var c=B(a);return a=M(b,N(0,parseFloat(a))),c&&(a=parseInt(a*b,10)/100),K.abs(a-b)<1e-6?1:a%b/parseFloat(b)}function y(a){return M(1,N(0,a))}function z(a){return parseInt(a,16)}function A(a){return"string"==typeof a&&a.indexOf(".")!=-1&&1===parseFloat(a)}function B(a){return"string"==typeof a&&a.indexOf("%")!=-1}function C(a){return 1==a.length?"0"+a:""+a}function D(a){return a<=1&&(a=100*a+"%"),a}function E(a){return Math.round(255*parseFloat(a)).toString(16)}function F(a){return z(a)/255}function G(a){a=a.replace(H,"").replace(I,"").toLowerCase();var b=!1;if(Q[a])a=Q[a],b=!0;else if("transparent"==a)return{r:0,g:0,b:0,a:0,format:"name"};var c;return(c=S.rgb.exec(a))?{r:c[1],g:c[2],b:c[3]}:(c=S.rgba.exec(a))?{r:c[1],g:c[2],b:c[3],a:c[4]}:(c=S.hsl.exec(a))?{h:c[1],s:c[2],l:c[3]}:(c=S.hsla.exec(a))?{h:c[1],s:c[2],l:c[3],a:c[4]}:(c=S.hsv.exec(a))?{h:c[1],s:c[2],v:c[3]}:(c=S.hsva.exec(a))?{h:c[1],s:c[2],v:c[3],a:c[4]}:(c=S.hex8.exec(a))?{a:F(c[1]),r:z(c[2]),g:z(c[3]),b:z(c[4]),format:b?"name":"hex8"}:(c=S.hex6.exec(a))?{r:z(c[1]),g:z(c[2]),b:z(c[3]),format:b?"name":"hex"}:!!(c=S.hex3.exec(a))&&{r:z(c[1]+""+c[1]),g:z(c[2]+""+c[2]),b:z(c[3]+""+c[3]),format:b?"name":"hex"}}var H=/^[\s,#]+/,I=/\s+$/,J=0,K=Math,L=K.round,M=K.min,N=K.max,O=K.random,P=function(b,c){if(b=b?b:"",c=c||{},b instanceof P)return b;if(!(this instanceof P))return new P(b,c);var d=a(b);this._originalInput=b,this._r=d.r,this._g=d.g,this._b=d.b,this._a=d.a,this._roundA=L(100*this._a)/100,this._format=c.format||d.format,this._gradientType=c.gradientType,this._r<1&&(this._r=L(this._r)),this._g<1&&(this._g=L(this._g)),this._b<1&&(this._b=L(this._b)),this._ok=d.ok,this._tc_id=J++};P.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var a=this.toRgb();return(299*a.r+587*a.g+114*a.b)/1e3},setAlpha:function(a){return this._a=w(a),this._roundA=L(100*this._a)/100,this},toHsv:function(){var a=e(this._r,this._g,this._b);return{h:360*a.h,s:a.s,v:a.v,a:this._a}},toHsvString:function(){var a=e(this._r,this._g,this._b),b=L(360*a.h),c=L(100*a.s),d=L(100*a.v);return 1==this._a?"hsv("+b+", "+c+"%, "+d+"%)":"hsva("+b+", "+c+"%, "+d+"%, "+this._roundA+")"},toHsl:function(){var a=c(this._r,this._g,this._b);return{h:360*a.h,s:a.s,l:a.l,a:this._a}},toHslString:function(){var a=c(this._r,this._g,this._b),b=L(360*a.h),d=L(100*a.s),e=L(100*a.l);return 1==this._a?"hsl("+b+", "+d+"%, "+e+"%)":"hsla("+b+", "+d+"%, "+e+"%, "+this._roundA+")"},toHex:function(a){return g(this._r,this._g,this._b,a)},toHexString:function(a){return"#"+this.toHex(a)},toHex8:function(){return h(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:L(this._r),g:L(this._g),b:L(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+L(this._r)+", "+L(this._g)+", "+L(this._b)+")":"rgba("+L(this._r)+", "+L(this._g)+", "+L(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:L(100*x(this._r,255))+"%",g:L(100*x(this._g,255))+"%",b:L(100*x(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+L(100*x(this._r,255))+"%, "+L(100*x(this._g,255))+"%, "+L(100*x(this._b,255))+"%)":"rgba("+L(100*x(this._r,255))+"%, "+L(100*x(this._g,255))+"%, "+L(100*x(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(R[g(this._r,this._g,this._b,!0)]||!1)},toFilter:function(a){var b="#"+h(this._r,this._g,this._b,this._a),c=b,d=this._gradientType?"GradientType = 1, ":"";if(a){var e=P(a);c=e.toHex8String()}return"progid:DXImageTransform.Microsoft.gradient("+d+"startColorstr="+b+",endColorstr="+c+")"},toString:function(a){var b=!!a;a=a||this._format;var c=!1,d=this._a<1&&this._a>=0,e=!b&&d&&("hex"===a||"hex6"===a||"hex3"===a||"name"===a);return e?"name"===a&&0===this._a?this.toName():this.toRgbString():("rgb"===a&&(c=this.toRgbString()),"prgb"===a&&(c=this.toPercentageRgbString()),"hex"!==a&&"hex6"!==a||(c=this.toHexString()),"hex3"===a&&(c=this.toHexString(!0)),"hex8"===a&&(c=this.toHex8String()),"name"===a&&(c=this.toName()),"hsl"===a&&(c=this.toHslString()),"hsv"===a&&(c=this.toHsvString()),c||this.toHexString())},_applyModification:function(a,b){var c=a.apply(null,[this].concat([].slice.call(b)));return this._r=c._r,this._g=c._g,this._b=c._b,this.setAlpha(c._a),this},lighten:function(){return this._applyModification(l,arguments)},brighten:function(){return this._applyModification(m,arguments)},darken:function(){return this._applyModification(n,arguments)},desaturate:function(){return this._applyModification(i,arguments)},saturate:function(){return this._applyModification(j,arguments)},greyscale:function(){return this._applyModification(k,arguments)},spin:function(){return this._applyModification(o,arguments)},_applyCombination:function(a,b){return a.apply(null,[this].concat([].slice.call(b)))},analogous:function(){return this._applyCombination(t,arguments)},complement:function(){return this._applyCombination(p,arguments)},monochromatic:function(){return this._applyCombination(u,arguments)},splitcomplement:function(){return this._applyCombination(s,arguments)},triad:function(){return this._applyCombination(q,arguments)},tetrad:function(){return this._applyCombination(r,arguments)}},P.fromRatio=function(a,b){if("object"==typeof a){var c={};for(var d in a)a.hasOwnProperty(d)&&("a"===d?c[d]=a[d]:c[d]=D(a[d]));a=c}return P(a,b)},P.equals=function(a,b){return!(!a||!b)&&P(a).toRgbString()==P(b).toRgbString()},P.random=function(){return P.fromRatio({r:O(),g:O(),b:O()})},P.mix=function(a,b,c){c=0===c?0:c||50;var d,e=P(a).toRgb(),f=P(b).toRgb(),g=c/100,h=2*g-1,i=f.a-e.a;d=h*i==-1?h:(h+i)/(1+h*i),d=(d+1)/2;var j=1-d,k={r:f.r*d+e.r*j,g:f.g*d+e.g*j,b:f.b*d+e.b*j,a:f.a*g+e.a*(1-g)};return P(k)},P.readability=function(a,b){var c=P(a),d=P(b),e=c.toRgb(),f=d.toRgb(),g=c.getBrightness(),h=d.getBrightness(),i=Math.max(e.r,f.r)-Math.min(e.r,f.r)+Math.max(e.g,f.g)-Math.min(e.g,f.g)+Math.max(e.b,f.b)-Math.min(e.b,f.b);return{brightness:Math.abs(g-h),color:i}},P.isReadable=function(a,b){var c=P.readability(a,b);return c.brightness>125&&c.color>500},P.mostReadable=function(a,b){for(var c=null,d=0,e=!1,f=0;f125&&g.color>500,i=3*(g.brightness/125)+g.color/500;(h&&!e||h&&e&&i>d||!h&&!e&&i>d)&&(e=h,d=i,c=P(b[f]))}return c};var Q=P.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},R=P.hexNames=v(Q),S=function(){var a="[-\\+]?\\d+%?",b="[-\\+]?\\d*\\.\\d+%?",c="(?:"+b+")|(?:"+a+")",d="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?",e="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?";return{rgb:new RegExp("rgb"+d),rgba:new RegExp("rgba"+e),hsl:new RegExp("hsl"+d),hsla:new RegExp("hsla"+e),hsv:new RegExp("hsv"+d),hsva:new RegExp("hsva"+e),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();window.tinycolor=P}(),a(function(){a.fn.spectrum.load&&a.fn.spectrum.processNativeColorInputs()})}),c("text!Abstract/ui/templates/inputColor.html",[],function(){return'
    input-holder\'>
    \n
    \n\t
    \n\t\t
    \n\t
    \n
    \n'}),c("Abstract/ui/InputColor",["backbone","./Input","Spectrum","text!./templates/inputColor.html"],function(a,b,c,d){return b.extend({template:_.template(d),initialize:function(a){b.prototype.initialize.apply(this,arguments);var c=this.ppfx;this.colorCls=c+"field-color-picker",this.inputClass=c+"field "+c+"field-color",this.colorHolderClass=c+"field-colorp-c",this.listenTo(this.model,"change:value",this.handleModelChange)},handleModelChange:function(){b.prototype.handleModelChange.apply(this,arguments);var a=this.model.get("value"),c=this.getColorEl();a="none"===a?"#fff":a,c.spectrum("set",a),c.get(0).style.backgroundColor=a},getColorEl:function(){if(!this.colorEl){var a=this.model,b=$("
    ",{"class":this.colorCls}),c=b.get(0).style,d=this.target&&this.target.config?this.target.config.el:"";b.spectrum({appendTo:d||"body",maxSelectionSize:8,showPalette:!0,showAlpha:!0,chooseText:"Ok",cancelText:"⨯",palette:[],move:function(a){var b=1==a.getAlpha()?a.toHexString():a.toRgbString();c.backgroundColor=b},change:function(b){var d=1==b.getAlpha()?b.toHexString():b.toRgbString();d=d.replace(/ /g,""),c.backgroundColor=d,a.set("value",d)}}),this.colorEl=b}return this.colorEl},render:function(){return b.prototype.render.apply(this,arguments),this.$el.find("."+this.colorHolderClass).html(this.getColorEl()),this}})}),c("StyleManager/view/PropertyColorView",["backbone","./PropertyView","Abstract/ui/InputColor"],function(a,b,c){return b.extend({renderTemplate:function(){},renderInput:function(){if(!this.input){var a=new c({target:this.target,model:this.model,ppfx:this.ppfx});this.input=a.render(),this.$el.append(this.input.$el),this.$input=this.input.inputEl,this.$color=this.input.colorEl}this.setValue(this.componentValue)},setValue:function(a){this.input.setValue(a,{silent:1})}})}),c("text!StyleManager/templates/propertyFile.html",[],function(){return'
    \n\t
    input-holder\'>\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t
    \n\t
    \n
    \n
    '}),c("StyleManager/view/PropertyFileView",["backbone","./PropertyView","text!./../templates/propertyFile.html"],function(a,b,c){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),this.assets=this.target.get("assets"),this.modal=this.target.get("Modal"),this.am=this.target.get("AssetManager"),this.className=this.className+" "+this.pfx+"file",this.events["click #"+this.pfx+"close"]="removeFile",this.events["click #"+this.pfx+"images"]="openAssetManager",this.delegateEvents()},renderInput:function(){this.$input||(this.$input=$("",{placeholder:this.defaultValue,type:"text"})),this.$preview||(this.$preview=this.$el.find("#"+this.pfx+"preview-file")),this.$previewBox||(this.$previewBox=this.$el.find("#"+this.pfx+"preview-box")),this.componentValue&&this.componentValue!=this.defaultValue?this.setPreviewView(1):this.setPreviewView(0),this.setValue(this.componentValue,0)},setPreviewView:function(a){this.$previewBox&&(a?this.$previewBox.addClass(this.pfx+"show"):this.$previewBox.removeClass(this.pfx+"show"))},spreadUrl:function(a){this.setValue('url("'+a+'")'),this.setPreviewView(1)},setPreview:function(a){this.$preview&&this.$preview.css("background-image",a)},setValue:function(a,c){b.prototype.setValue.apply(this,arguments),this.setPreview(a)},renderTemplate:function(){this.$el.append(this.template({upload:"Upload",assets:"Images",pfx:this.pfx}))},cleanValue:function(){this.setPreviewView(0),this.model.set({value:""},{silent:!0})},removeFile:function(){this.model.set("value",this.defaultValue),b.prototype.cleanValue.apply(this,arguments),this.setPreviewView(0)},openAssetManager:function(a){var b=this;this.modal&&this.am&&(this.modal.setTitle("Select image"),this.modal.setContent(this.am.render()),this.am.setTarget(null),this.modal.open(),this.am.onSelect(function(c){b.modal.close(),b.spreadUrl(c.get("src")),b.valueChanged(a)}))}})}),c("text!StyleManager/templates/propertyComposite.html",[],function(){return'
    \n\tinput-holder\'>\n
    \n
    '}),c("StyleManager/view/PropertyCompositeView",["backbone","./PropertyView","text!./../templates/propertyComposite.html","require"],function(a,b,c,d){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),_.bindAll(this,"build"),this.config=a.config||{},this.className=this.className+" "+this.pfx+"composite"},valueUpdated:function(){this.model.get("detached")||b.prototype.valueUpdated.apply(this,arguments)},renderInput:function(){var a=this.model.get("properties");this.model.get("detached");if(a&&a.length&&(this.$input||(this.$input=$("",{value:0,type:"hidden"})),this.props||(this.props=this.model.get("properties")),!this.$props)){this.props.each(function(a,b){a&&"composite"==a.get("type")&&(this.props.remove(a),console.warn("Nested composite types not yet allowed."))},this);var b=d("./PropertiesView"),c=new b(this.getPropsConfig());this.$props=c.render().$el,this.$el.find("#"+this.pfx+"input-holder").html(this.$props)}},getPropsConfig:function(a){var b=this;return result={config:this.config,collection:this.props,target:this.target,propTarget:this.propTarget,onChange:function(a,c,d){var e=b.build();b.model.set("value",e,d)},customValue:function(a,c){return b.valueOnIndex(c,a)}},this.model.get("detached")&&delete result.onChange,result},getDefaultValue:function(){var a="";return this.props.each(function(b,c){a+=b.get("defaults")+b.get("unit")+" "}),a.replace(/ +$/,"")},valueOnIndex:function(a,b){var c=null,d=this.getComponentValue().split(" ");if(d.length&&d[a]&&(c=d[a],b&&b.model&&b.model.get("functionName"))){var e=this.fetchFromFunction(c);e&&(c=e)}return c},build:function(a,b,c){var d="";return this.model.get("properties").each(function(a){var b=a.getValue();func=a.get("functionName"),func&&(b=func+"("+b+")"),d+=b+" "}),d.replace(/ +$/,"")}})}),c("text!StyleManager/templates/propertyStack.html",[],function(){return"
    field <%= pfx %>stack\">\n\t\n\t\n
    \n
    "}),c("text!StyleManager/templates/layer.html",[],function(){return'
    \n \n
    \n
    <%= label %>
    \n
    \n\t
    \n
    \n
    \n
    \n
    '}),c("StyleManager/view/LayerView",["backbone","text!./../templates/layer.html"],function(a,b){return a.View.extend({events:{click:"updateIndex"},template:_.template(b),initialize:function(a){this.stackModel=a.stackModel||{},this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.className=this.pfx+"layer",this.sorter=a.sorter||null,this.listenTo(this.model,"destroy remove",this.remove),this.listenTo(this.model,"change:value",this.valueChanged),this.listenTo(this.model,"change:props",this.showProps),this.events["click #"+this.pfx+"close-layer"]="remove",this.events["mousedown > #"+this.pfx+"move"]="initSorter",this.model.get("preview")||this.$el.addClass(this.pfx+"no-preview"),this.$el.data("model",this.model),this.delegateEvents()},initSorter:function(a){this.sorter&&this.sorter.startSort(this.el)},getProps:function(){return this.stackModel.get?this.stackModel.get("properties"):null},valueChanged:function(){var a=this.model.get("preview");if(a){this.$preview||(this.$preview=this.$el.find("#"+this.pfx+"preview"));"function"==typeof a?a(this.getProps(),this.$preview):this.onPreview(this.getProps(),this.$preview)}},onPreview:function(a,b){var c=this.model.get("value").split(" "),d=3,e="";if(a.each(function(a,b){var f=c[b]||"";if(f&&"integer"==a.get("type")){var g=parseInt(f,10),h=f.replace(g,"");g=isNaN(g)?0:g,g>d&&(g=d),g<-d&&(g=-d),f=g+h}e+=f+" "}),this.stackModel.get){var f=this.stackModel.get("property");f&&(this.$preview.get(0).style[f]=e)}},showProps:function(){this.$props=this.model.get("props"),this.$el.find("#"+this.pfx+"inputs").html(this.$props.show()),this.model.set({props:null},{silent:!0})},remove:function(b){this.$props&&this.$props.detach(),b&&b.stopPropagation&&b.stopPropagation(),a.View.prototype.remove.apply(this,arguments),this.model.collection.contains(this.model)&&this.model.collection.remove(this.model),this.stackModel&&this.stackModel.set&&(this.stackModel.set({stackIndex:null},{silent:!0}),this.stackModel.trigger("updateValue"))},updateIndex:function(a){var b=this.getIndex();this.stackModel.set("stackIndex",b),this.model.collection&&this.model.collection.trigger("deselectAll"),this.$el.addClass(this.pfx+"active")},getIndex:function(){var a=0;return this.model.collection&&(a=this.model.collection.indexOf(this.model)),a},render:function(){return this.$el.html(this.template({label:"Layer "+this.model.get("index"),pfx:this.pfx})),this.$el.attr("class",this.className),this.valueChanged(),this}})}),c("StyleManager/view/LayersView",["backbone","./LayerView"],function(a,b){return a.View.extend({initialize:function(a){this.config=a.config||{},this.stackModel=a.stackModel,this.preview=a.preview,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.className=this.pfx+"layers "+this.ppfx+"field",this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"deselectAll",this.deselectAll),this.listenTo(this.collection,"reset",this.render);var b=this.config.em||"",c=b?b.get("Utils"):"";this.sorter=c?new c.Sorter({container:this.el,containerSel:"."+this.pfx+"layers",itemSel:"."+this.pfx+"layer",pfx:this.config.pStylePrefix}):"",this.$el.data("collection",this.collection)},addTo:function(a){var b=this.collection.indexOf(a);this.addToCollection(a,null,b)},addToCollection:function(a,c,d){var e=c||null,f=b;"undefined"!=typeof this.preview&&a.set("preview",this.preview);var g=new f({model:a,stackModel:this.stackModel,config:this.config,sorter:this.sorter}),h=g.render().el;if(e)e.appendChild(h);else if("undefined"!=typeof d){var i="before";this.$el.children().length==d&&(d--,i="after"),d<0?this.$el.append(h):this.$el.children().eq(d)[i](h)}else this.$el.append(h);return h},deselectAll:function(){this.$el.find("."+this.pfx+"layer").removeClass(this.pfx+"active")},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",this.className),this.sorter&&(this.sorter.plh=null),this}})}),c("StyleManager/view/PropertyStackView",["backbone","./PropertyCompositeView","text!./../templates/propertyStack.html","./../model/Layers","./LayersView"],function(a,b,c,d,e){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),this.model.set("stackIndex",null),this.className=this.pfx+"property "+this.pfx+"stack",this.events["click #"+this.pfx+"add"]="addLayer",this.listenTo(this.model,"change:stackIndex",this.indexChanged),this.listenTo(this.model,"updateValue",this.valueUpdated),this.delegateEvents()},targetUpdated:function(){this.model.get("detached")?this.refreshLayers():b.prototype.targetUpdated.apply(this,arguments)},getLayers:function(){return this.model.get("layers")},indexChanged:function(a){var b=this.getLayers().at(this.model.get("stackIndex"));b.set("props",this.$props),this.model.get("properties").each(function(a){a.trigger("targetUpdated")})},getStackValues:function(){return this.getLayers().pluck("value")},getPropsConfig:function(a){var c=this,d=b.prototype.getPropsConfig.apply(this,arguments);return d.onChange=function(a,b,d){var e=b.model,f=c.build();if(c.model.get("detached")){var g="";e.collection.indexOf(e);c.getLayers().each(function(a){var b=a.get("values")[e.get("property")];b&&(g+=(g?",":"")+b)}),b.updateTargetStyle(g,null,d)}else c.model.set("value",f,d)},d},valueOnIndex:function(a,b){var c=null;if(this.model.get("detached")){var d=b.componentValue.split(",");c=d[this.model.get("stackIndex")],c=c?c.trim():c}else{var e=this.getStackValues(),f=e[this.model.get("stackIndex")];if(!f)return;var g=f.split(" ");g.length&&g[a]&&(c=g[a])}return c},build:function(){var a=this.model.get("stackIndex");if(null!==a){var c=b.prototype.build.apply(this,arguments),d=this.getLayers().at(a);if(d){var e={};return this.model.get("properties").each(function(a){var b=a.getValue(),c=a.get("functionName");c&&(b=c+"("+b+")"),e[a.get("property")]=b}),d.set("values",e),d.set("value",c),this.createValue()}}},addLayer:function(a){if(this.getTarget()){var b=this.getLayers(),c=b.add({name:"test"}),d=b.indexOf(c);return c.set("value",this.getDefaultValue()),this.valueUpdated(),this.model.set("stackIndex",d),c}},valueUpdated:function(){this.model.get("detached")?this.model.get("properties").each(function(a){a.trigger("change:value")}):this.model.set("value",this.createValue())},createValue:function(){return this.getStackValues().join(", ")},renderLayers:function(){return this.$field||(this.$field=this.$el.find("> ."+this.pfx+"field")),this.$layers||(this.$layers=new e({collection:this.getLayers(),stackModel:this.model,preview:this.model.get("preview"),config:this.config -})),this.$field.append(this.$layers.render().el),this.$props.hide(),this},renderInput:function(){b.prototype.renderInput.apply(this,arguments),this.refreshLayers()},getLayersFromTarget:function(){var a=[],b=this.getTarget();if(!b)return a;var c=b.get("style");return this.model.get("properties").each(function(b){var d=c[b.get("property")];if(d)for(var e=d.split(","),f=0,g=e.length;f",{"class":"clear"})),this.$el.attr("class",this.pfx+"properties"),this}})}),c("text!StyleManager/templates/sector.html",[],function(){return'
    \n \n <%= label %>\n
    '}),c("StyleManager/view/SectorView",["backbone","./PropertiesView","text!./../templates/sector.html"],function(a,b,c){return a.View.extend({template:_.template(c),events:{},initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.target=a.target||{},this.propTarget=a.propTarget||{},this.open=this.model.get("open"),this.caretR="fa-caret-right",this.caretD="fa-caret-down",this.listenTo(this.model,"change:open",this.updateOpen),this.events["click ."+this.pfx+"title"]="toggle",this.delegateEvents()},updateOpen:function(){this.model.get("open")?this.show():this.hide()},show:function(){this.$el.addClass(this.pfx+"open"),this.$el.find("."+this.pfx+"properties").show(),this.$caret.removeClass(this.caretR).addClass(this.caretD)},hide:function(){this.$el.removeClass(this.pfx+"open"),this.$el.find("."+this.pfx+"properties").hide(),this.$caret.removeClass(this.caretD).addClass(this.caretR)},toggle:function(){var a=this.model.get("open")?0:1;this.model.set("open",a)},render:function(){return this.$el.html(this.template({pfx:this.pfx,label:this.model.get("name")})),this.$caret=this.$el.find("#"+this.pfx+"caret"),this.renderProperties(),this.$el.attr("class",this.pfx+"sector no-select"),this.updateOpen(),this},renderProperties:function(){var a=this.model.get("properties");if(a){var c=new b({collection:a,target:this.target,propTarget:this.propTarget,config:this.config});this.$el.append(c.render().el)}}})}),c("StyleManager/view/SectorsView",["backbone","./SectorView"],function(a,b){return a.View.extend({initialize:function(b){this.config=b.config||{},this.pfx=this.config.stylePrefix||"",this.target=b.target||{},this.propTarget={},_.extend(this.propTarget,a.Events),this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset",this.render),this.listenTo(this.target,"change:selectedComponent targetClassAdded targetClassRemoved targetClassUpdated targetStateUpdated targetStyleUpdated change:device",this.targetUpdated)},addTo:function(a){this.addToCollection(a)},targetUpdated:function(){var a=this.target.get("selectedComponent");if(a){var b=this.target.get("Config").devicePreviewMode,c=a.get("classes"),d=this.propTarget,e=this.target.getDeviceModel(),f=b?"":a.get("state"),g=e&&!b?e.get("width"):"";if(d.helper=null,c.length){var h=this.target.get("CssComposer"),i=_.filter(c.models,function(a){return a.get("active")}),j=h.get(i,f,g);if(j||(j=h.add(i,f,g),j.set("style",a.get("style")),a.set("style",{})),f){var k=this.target.get("SelectorManager"),l=k.add("hc-state"),m=h.get([l]);m?(h.getAll().remove(m),h.getAll().add(m)):m=h.add([l]),m.set("style",j.get("style")),d.helper=m}return d.model=j,void d.trigger("update")}d.model=a,d.trigger("update")}},addToCollection:function(a,c){var d=c||null,e=b,f=new e({model:a,id:this.pfx+a.get("name").replace(" ","_").toLowerCase(),name:a.get("name"),properties:a.get("properties"),target:this.target,propTarget:this.propTarget,config:this.config}),g=f.render().el;return d?d.appendChild(g):this.$el.append(g),g},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addToCollection(b,a)},this),this.$el.attr("id",this.pfx+"sectors"),this.$el.append(a),this}})}),c("StyleManager/main",["require","./config/config","./model/Sectors","./view/SectorsView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Sectors"),g=a("./view/SectorsView");return{name:"StyleManager",getConfig:function(){return d},init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);var i=d.pStylePrefix;return i&&(d.stylePrefix=i+d.stylePrefix),b=new f(d.sectors),c=new g({collection:b,target:d.em,config:d}),this},addSector:function(a,c){var d=this.getSector(a);return d||(c.id=a,d=b.add(c)),d},getSector:function(a){var c=b.where({id:a});return c.length?c[0]:null},getSectors:function(){return b},addProperty:function(a,b){var c=null,d=this.getSector(a);return d&&(c=d.get("properties").add(b)),c},getProperty:function(a,b){var c=null,d=this.getSector(a);return d&&(c=d.get("properties").where({property:b}),c=1==c.length?c[0]:c),c},getProperties:function(a){var b=null,c=this.getSector(a);return c&&(b=c.get("properties")),b},getModelToStyle:function(a){var b=a.get("classes");if(d.em&&b&&b.length){var c=d.em.get("Config").devicePreviewMode,e=d.em.getDeviceModel(),f=c?"":a.get("state"),g=e&&!c?e.get("width"):"",h=d.em.get("CssComposer"),i=_.filter(b.models,function(a){return a.get("active")}),j=h.get(i,f,g);if(j)return j}return a},render:function(){return c.render().el}}}}),c("StyleManager",["StyleManager/main"],function(a){return a}),c("AssetManager/model/Asset",["backbone"],function(a){return a.Model.extend({idAttribute:"src",defaults:{type:"",src:""},getFilename:function(){return this.get("src").split("/").pop()},getExtension:function(){return this.getFilename().split(".").pop()}})}),c("AssetManager/model/AssetImage",["backbone","./Asset"],function(a,b){return b.extend({defaults:_.extend({},b.prototype.defaults,{type:"image",unitDim:"px",height:0,width:0})})}),c("AssetManager/model/Assets",["backbone","./Asset","./AssetImage"],function(a,b,c){return a.Collection.extend({model:c,initialize:function(a,b){this.model=function(a,b){var d;switch(a.type){default:d=new c(a,b)}return d}},addImg:function(a,b){return this.add({type:"image",src:a},b),this},add:function(b,c){var d=[];b=b instanceof Array?b:[b];for(var e=0,f=b.length;e\n
    \n
    \n
    \n
    \n\t
    <%= name %>
    \n\t
    <%= dim %>
    \n
    \n
    \n
    '}),c("AssetManager/view/AssetImageView",["./AssetView","text!./../template/assetImage.html"],function(a,b){return a.extend({events:{click:"handleClick",dblclick:"handleDblClick"},template:_.template(b),initialize:function(b){a.prototype.initialize.apply(this,arguments),this.className+=" "+this.pfx+"asset-image",this.events["click #"+this.pfx+"close"]="removeItem",this.delegateEvents()},handleClick:function(){var a=this.config.onClick,b=this.model;b.collection.trigger("deselectAll"),this.$el.addClass(this.pfx+"highlight"),"function"==typeof a?a(b):this.updateTarget(b.get("src"))},handleDblClick:function(){var a=this.config.onDblClick,b=this.model;"function"==typeof a?a(b):this.updateTarget(b.get("src"));var c=b.collection.onSelect;"function"==typeof c&&c(this.model)},updateTarget:function(a){var b=this.model.collection.target;if(b&&b.set){var c=_.clone(b.get("attributes"));b.set("attributes",c),b.set("src",a)}},removeItem:function(a){a.stopPropagation(),this.model.collection.remove(this.model)},render:function(){var a=this.model.get("name"),b=this.model.get("width")&&this.model.get("height")?this.model.get("width")+" x "+this.model.get("height"):"";return a=a?a:this.model.get("src").split("/").pop(),a=a&&a.length>30?a.substring(0,30)+"...":a,b=b?b+(this.model.get("unitDim")?this.model.get("unitDim"):" px"):"",this.$el.html(this.template({name:a,src:this.model.get("src"),dim:b,pfx:this.pfx,ppfx:this.ppfx})),this.$el.attr("class",this.className),this}})}),c("text!AssetManager/template/fileUploader.html",[],function(){return'
    \n\t
    <%= title %>
    \n\t multiple/>\n\t
    \n
    '}),c("AssetManager/view/FileUploader",["backbone","text!./../template/fileUploader.html"],function(a,b){return a.View.extend({template:_.template(b),events:{},initialize:function(a){this.options=a||{},this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.target=this.collection||{},this.uploadId=this.pfx+"uploadFile",this.disabled=!this.config.upload,this.events["change #"+this.uploadId]="uploadFile",this.delegateEvents()},uploadFile:function(a){for(var b=a.dataTransfer?a.dataTransfer.files:a.target.files,c=new FormData,d=0;d\n
    \n
    \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n'}),c("AssetManager/view/AssetsView",["backbone","./AssetView","./AssetImageView","./FileUploader","text!./../template/assets.html"],function(a,b,c,d,e){return a.View.extend({template:_.template(e),initialize:function(a){this.options=a,this.config=a.config,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.listenTo(this.collection,"add",this.addToAsset),this.listenTo(this.collection,"deselectAll",this.deselectAll),this.className=this.pfx+"assets",this.events={},this.events.submit="addFromStr",this.delegateEvents()},addFromStr:function(a){a.preventDefault();var b=this.getInputUrl(),c=b.value.trim();if(c)return this.collection.addImg(c,{at:0}),this.getAssetsEl().scrollTop=0,b.value="",this},getAssetsEl:function(){return this.assets=this.el.querySelector("."+this.pfx+"assets"),this.assets},getInputUrl:function(){return this.inputUrl&&this.inputUrl.value||(this.inputUrl=this.el.querySelector("."+this.pfx+"add-asset input")),this.inputUrl},addToAsset:function(a){this.addAsset(a)},addAsset:function(a,d){var e=d||null,f=b;a.get("type").indexOf("image")>-1&&(f=c);var g=new f({model:a,config:this.config}),h=g.render().el;if(e)e.appendChild(h);else{var i=this.getAssetsEl();i&&i.insertBefore(h,i.firstChild)}return h},deselectAll:function(){this.$el.find("."+this.pfx+"highlight").removeClass(this.pfx+"highlight")},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addAsset(b,a)},this),this.$el.html(this.template({pfx:this.pfx,ppfx:this.ppfx,btnText:this.config.addBtnText})),this.$el.find("."+this.pfx+"assets").append(a),this}})}),c("AssetManager/config/config",[],function(){return{assets:[],stylePrefix:"am-",upload:"http://localhost/assets/upload",uploadText:"Drop files here or click to upload",addBtnText:"Add image"}}),c("AssetManager/main",["require","./model/Assets","./view/AssetsView","./view/FileUploader","./config/config"],function(a){return function(){var b,c,d,e={},f=a("./model/Assets"),g=a("./view/AssetsView"),h=a("./view/FileUploader");return{name:"AssetManager",storageKey:"assets",init:function(i){e=i||{};var j=a("./config/config");for(var k in j)k in e||(e[k]=j[k]);var l=e.pStylePrefix;l&&(e.stylePrefix=l+e.stylePrefix),b=new f(e.assets);var m={collection:b,config:e};return c=new g(m),d=new h(m),this},add:function(a){return b.add(a)},get:function(a){return b.where({src:a})[0]},getAll:function(){return b},remove:function(a){var b=this.get(a);return this.getAll().remove(b),this},store:function(a){var b={},c=JSON.stringify(this.getAll().toJSON());return b[this.storageKey]=c,!a&&e.stm&&e.stm.store(b),b},load:function(a){var b=a||"",c=this.storageKey;!b&&e.stm&&(b=e.stm.load(c));var d=[];try{d=JSON.parse(b[c])}catch(f){}return this.getAll().add(d),d},render:function(a){return this.rendered&&!a||(this.rendered=c.render().$el.add(d.render().$el)),this.rendered},setTarget:function(a){c.collection.target=a},onSelect:function(a){c.collection.onSelect=a},onClick:function(a){e.onClick=a},onDblClick:function(a){e.onDblClick=a}}}}),c("AssetManager",["AssetManager/main"],function(a){return a}),c("CssComposer/config/config",[],function(){return{stylePrefix:"css-",staticRules:"",rules:[]}}),c("CssComposer/model/Selectors",["backbone","require"],function(a,b){return a.Collection.extend({initialize:function(a,c){this.model=function(a,c){var d;return this.ClassTag||(this.ClassTag=b("SelectorManager/model/Selector")),d=new this.ClassTag(a,c)}}})}),c("CssComposer/model/CssRule",["backbone","./Selectors"],function(a,b){return a.Model.extend({defaults:{selectors:{},style:{},maxWidth:"",state:"",stylable:!0},initialize:function(a,c){if(this.config=a||{},this.sm=c?c.sm||{}:{},this.slct=this.config.selectors||[],this.sm.get){for(var d=[],e=0;e=0&&(c.css=d.em.getCss()),e.indexOf("styles")>=0&&(c.styles=JSON.stringify(b)),a||d.stm.store(c),c}},add:function(a,c,d){var e=c||"",g=d||"",h=this.get(a,e,g);return h?h:(h=new f({state:e,maxWidth:g}),h.get("selectors").add(a),b.add(h),h)},get:function(a,c,d){var e=null;return b.each(function(b){e||b.compare(a,c,d)&&(e=b)}),e},getAll:function(){return b},addCollection:function(a){for(var b=[],c=a instanceof Array?a:[a],e=0,f=c.length;e=0&&this.set("void",!0),this.opt=e,this.sm=e?e.sm||{}:{},this.config=a||{},this.defaultC=this.config.components||[],this.defaultCl=this.normalizeClasses(this.get("classes")||this.config.classes||[]),this.components=new b(this.defaultC,e),this.components.parent=this,this.set("attributes",this.get("attributes")||{}),this.set("components",this.components),this.set("classes",new c(this.defaultCl));var f=new d;f.setTarget(this),f.add(this.get("traits")),this.set("traits",f),this.initToolbar(),this.init()},init:function(){},initToolbar:function(){var a=this;if(!a.get("toolbar")){var b=[];a.get("draggable")&&b.push({attributes:{"class":"fa fa-arrows"},command:"tlb-move"}),a.get("copyable")&&b.push({attributes:{"class":"fa fa-clone"},command:"tlb-clone"}),a.get("removable")&&b.push({attributes:{"class":"fa fa-trash-o"},command:"tlb-delete"}),a.set("toolbar",b)}},loadTraits:function(a){var b=new d;b.setTarget(this),b.add(a),this.set("traits",b)},normalizeClasses:function(a){var b=[];if(this.sm.get){var c=this.sm.get("SelectorManager");if(c)return a.forEach(function(a){var d="";d="string"==typeof a?a:a.name;var e=c.add(d);b.push(e)}),b}},clone:function(a){var b=_.clone(this.attributes),c=this.get("components"),d=this.get("traits"),e=this.get("classes");return b.components=[],b.classes=[],b.traits=[],c.each(function(a,c){b.components[c]=a.clone(1)}),d.each(function(a,c){b.traits[c]=a.clone()}),e.each(function(a,c){b.classes[c]=a.get("name")}),b.status="",b.view="",a&&(this.opt.collection=null),new this.constructor(b,this.opt)},getName:function(){if(!this.name){var a=(this.cid.replace(/\D/g,""),this.get("type")),b=this.get("tagName");b="div"==b?"box":b,b=a?a:b,this.name=b.charAt(0).toUpperCase()+b.slice(1)}return this.name},toHTML:function(a){var b="",c=this,d=c.get("tagName"),e=c.get("void"),f="",g="",h=this.getAttrToHTML();for(var i in h){var j=h[i];g+=void 0!==typeof j&&""!==j?" "+i+'="'+j+'"':""}var k="";return c.get("classes").each(function(a){k+=" "+a.get("name")}),k=""!==k?' class="'+k.trim()+'"':"",_.isEmpty(c.get("style"))||(f=' id="'+c.cid+'" '),b+="<"+d+k+f+g+(e?"/":"")+">"+c.get("content"),c.get("components").each(function(a){b+=a.toHTML()}),e||(b+=""),b},getAttrToHTML:function(){var a=this.get("attributes")||{};return delete a.style,a}},{isComponent:function(a){return{tagName:a.tagName?a.tagName.toLowerCase():""}}})}),c("DomComponents/view/ComponentsView",["backbone","require"],function(a,b){return a.View.extend({initialize:function(a){this.opts=a||{},this.config=a.config||{},this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset",this.render)},addTo:function(a){var b=this.collection.indexOf(a);this.addToCollection(a,null,b),this.config.em&&this.config.em.trigger("add:component",a)},addToCollection:function(a,c,d){this.compView||(this.compView=b("./ComponentView"));for(var e=c||null,f=this.compView,g=this.opts.defaultTypes,h=this.opts.componentTypes,i=a.get("type"),j=0;j=0&&(b.html=d.em.getHtml()),c.indexOf("components")>=0&&(b.components=JSON.stringify(d.em.getComponents())),a||d.stm.store(b),b}},getComponent:function(){return b},getWrapper:function(){return this.getComponent()},getComponents:function(){return this.getWrapper().get("components")},addComponent:function(a){return this.getComponents().add(a)},render:function(){return c.render().el},clear:function(){for(var a=this.getComponents(),b=0,c=a.length;b div")},render:function(){return this.$el.attr({"class":this.ppfx+"frame"}),this}})}),c("Canvas/view/CanvasView",["backbone","./FrameView"],function(a,b){return a.View.extend({initialize:function(a){_.bindAll(this,"renderBody","onFrameScroll","clearOff"),this.config=a.config||{},this.em=this.config.em||{},this.ppfx=this.config.pStylePrefix||"",this.className=this.config.stylePrefix+"canvas",this.listenTo(this.em,"change:canvasOffset",this.clearOff),this.frame=new b({model:this.model.get("frame"),config:this.config})},onFrameScroll:function(){var a="px",b=this.frame.el.contentDocument.body;this.toolsEl.style.top="-"+b.scrollTop+a,this.toolsEl.style.left="-"+b.scrollLeft+a,this.em.trigger("canvasScroll")},renderBody:function(){var a=this.model.get("frame").get("wrapper");if(a){var b=this.ppfx,c=this.frame.$el.contents().find("body"),d=this.config.em.get("CssComposer"),e=this.config.em.get("Config");c.append(a.render()).append(d.render());var f=e.protectedCss,g="."+b+"dashed :not([contenteditable]) > *{outline: 1px dashed rgba(170,170,170,0.7); outline-offset: -2px}."+b+"comp-selected{outline: 3px solid #3b97e3 !important}."+b+"no-select{user-select: none; -webkit-user-select:none; -moz-user-select: none}."+b+"freezed{opacity: 0.5; pointer-events: none}."+b+"no-pointer{pointer-events: none}."+b+"plh-image{background:#f5f5f5; border:none; height:50px; width:50px; display:block; outline:3px solid #ffca6f; cursor:pointer}."+b+"grabbing{cursor: grabbing; cursor: -webkit-grabbing}* ::-webkit-scrollbar-track {background: rgba(0, 0, 0, 0.1)}* ::-webkit-scrollbar-thumb {background: rgba(255, 255, 255, 0.2)}* ::-webkit-scrollbar {width: 10px}"+(e.canvasCss||"");f&&c.append(""),this.config.em.trigger("loaded"),this.frame.el.contentWindow.onscroll=this.onFrameScroll,this.frame.udpateOffset();var h=document,i=this.frame.el.contentDocument;i.addEventListener("keydown",function(a){h.dispatchEvent(new KeyboardEvent(a.type,a))}),i.addEventListener("keyup",function(a){h.dispatchEvent(new KeyboardEvent(a.type,a))})}},offset:function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument.body;return{top:b.top+c.scrollTop,left:b.left+c.scrollLeft}},clearOff:function(){this.frmOff=null,this.cvsOff=null},getFrameOffset:function(){return this.frmOff||(this.frmOff=this.offset(this.frame.el)),this.frmOff},getCanvasOffset:function(){return this.cvsOff||(this.cvsOff=this.offset(this.el)),this.cvsOff},getElementPos:function(a){var b=this.getFrameOffset(),c=this.getCanvasOffset(),d=this.offset(a),e=d.top+b.top-c.top,f=d.left+b.left-c.left;return{top:e,left:f,height:a.offsetHeight,width:a.offsetWidth}},getPosition:function(){var a=this.frame.el.contentDocument.body,b=this.getFrameOffset(),c=this.getCanvasOffset();return{top:b.top+a.scrollTop-c.top,left:b.left+a.scrollLeft-c.left}},render:function(){if(this.wrapper=this.model.get("wrapper"),this.wrapper&&"function"==typeof this.wrapper.render){this.model.get("frame").set("wrapper",this.wrapper),this.$el.append(this.frame.render().el);var a=this.frame;a.el.onload=this.renderBody}var b=this.ppfx;toolsEl=$("
    ",{id:b+"tools"}).get(0),this.hlEl=$("
    ",{"class":b+"highlighter"}).get(0),this.badgeEl=$("
    ",{"class":b+"badge"}).get(0),this.placerEl=$("
    ",{"class":b+"placeholder"}).get(0),this.placerIntEl=$("
    ",{"class":b+"placeholder-int"}).get(0),this.ghostEl=$("
    ",{"class":b+"ghost"}).get(0),this.toolbarEl=$("
    ",{"class":b+"toolbar"}).get(0),this.resizerEl=$("
    ",{"class":b+"resizer"}).get(0),this.offsetEl=$("
    ",{"class":b+"offset-v"}).get(0),this.fixedOffsetEl=$("
    ",{"class":b+"offset-fixed-v"}).get(0),this.placerEl.appendChild(this.placerIntEl),toolsEl.appendChild(this.hlEl),toolsEl.appendChild(this.badgeEl),toolsEl.appendChild(this.placerEl),toolsEl.appendChild(this.ghostEl),toolsEl.appendChild(this.toolbarEl),toolsEl.appendChild(this.resizerEl),toolsEl.appendChild(this.offsetEl),toolsEl.appendChild(this.fixedOffsetEl),this.$el.append(toolsEl);var c=this.em.get("rte");return c&&toolsEl.appendChild(c.render()),this.toolsEl=toolsEl,this.$el.attr({"class":this.className}),this}})}),c("Canvas/main",["require","./config/config","./model/Canvas","./view/CanvasView"],function(a){return function(){var b,c={},d=a("./config/config"),e=a("./model/Canvas"),f=a("./view/CanvasView");return{getCanvasView:function(){return f},name:"Canvas",init:function(a){c=a||{};for(var g in d)g in c||(c[g]=d[g]);var h=c.pStylePrefix;h&&(c.stylePrefix=h+c.stylePrefix),b=new e(a),f=new f({model:b,config:c});var i=c.em.get("DomComponents");return i&&this.setWrapper(i),this},setWrapper:function(a){b.set("wrapper",a)},getElement:function(){return f.el},getFrameEl:function(){return f.frame.el},getBody:function(){return f.frame.el.contentDocument.body},getWrapperEl:function(){return this.getBody().querySelector("#wrapper")},getToolsEl:function(){return f.toolsEl},getHighlighter:function(){return f.hlEl},getBadgeEl:function(){return f.badgeEl},getPlacerEl:function(){return f.placerEl},getGhostEl:function(){return f.ghostEl},getToolbarEl:function(){return f.toolbarEl},getResizerEl:function(){return f.resizerEl},getOffsetViewerEl:function(){return f.offsetEl},getFixedOffsetViewerEl:function(){return f.fixedOffsetEl},render:function(){return f.render().el},getOffset:function(){var a=this.offset(this.getFrameEl()),b=this.offset(this.getElement());return{top:a.top-b.top,left:a.left-b.left}},offset:function(a){var b=a.getBoundingClientRect();return{top:b.top+document.body.scrollTop,left:b.left+document.body.scrollLeft}},getElementPos:function(a){return f.getElementPos(a)},getTargetToElementDim:function(a,b,d){var e=d||{},g=f.getPosition(),h=e.elPos||f.getElementPos(b),i=d.toRight||0,j=e.targetHeight||a.offsetHeight,k=e.targetWidth||a.offsetWidth,l=e.event||null,m=h.top-j,n=h.left;n+=i?h.width:0,n=i?n-k:n;var o=nh.top+h.height?h.top+h.height:p;var q={top:p,left:o,elementTop:h.top,elementLeft:h.left,elementWidth:h.width,elementHeight:h.height,targetWidth:a.offsetWidth,targetHeight:a.offsetHeight,canvasTop:g.top,canvasLeft:g.left};return l&&c.em&&c.em.trigger(l,q),q},getMouseRelativePos:function(a,b){var c=b||{},d=0,e=0,f=c.subWinOffset,g=a.target.ownerDocument,h=g.defaultView||g.parentWindow,i=h.frameElement,j=f?h.pageYOffset:0,k=f?h.pageXOffset:0;if(i){var l=i.getBoundingClientRect();d=l.top||0,e=l.left||0}return{y:a.clientY+d-j,x:a.clientX+e-k}},getFrameWrapperEl:function(){return f.frame.getWrapper()}}}}),c("Canvas",["Canvas/main"],function(a){return a}),c("Commands/config/config",[],function(){return{ESCAPE_KEY:27,stylePrefix:"com-",defaults:[],em:null,firstCentered:!0,newFixedH:!1,minComponentH:50,minComponentW:50}}),c("Commands/view/CommandAbstract",["backbone"],function(a){return a.View.extend({initialize:function(a){this.config=a||{},this.editorModel=this.em=this.config.em||{},this.pfx=this.config.stylePrefix,this.ppfx=this.config.pStylePrefix,this.hoverClass=this.pfx+"hover",this.badgeClass=this.pfx+"badge",this.plhClass=this.pfx+"placeholder",this.freezClass=this.ppfx+"freezed",this.canvas=this.em.get&&this.em.get("Canvas"),this.em.get&&this.setElement(this.getCanvas()),this.canvas&&(this.$canvas=this.$el,this.$wrapper=$(this.getCanvasWrapper()),this.frameEl=this.canvas.getFrameEl(),this.canvasTool=this.getCanvasTools(),this.bodyEl=this.getCanvasBody()),this.init(this.config)},onFrameScroll:function(a){},getCanvas:function(){return this.canvas.getElement()},getCanvasBody:function(){return this.canvas.getBody()},getCanvasWrapper:function(){return this.canvas.getWrapperEl()},getCanvasTools:function(){return this.canvas.getToolsEl()},offset:function(a){var b=a.getBoundingClientRect();return{top:b.top+a.ownerDocument.body.scrollTop,left:b.left+a.ownerDocument.body.scrollLeft}},init:function(a){},run:function(a,b){},stop:function(a,b){}})}),c("Abstract/view/DomainViews",["backbone"],function(a){return a.View.extend({itemView:"",itemsView:"",itemType:"type",initialize:function(a,b){this.config=b||{}},addTo:function(a){this.add(a)},add:function(a,b){var c=b||null,d=this.itemView,e=a.get(this.itemType);this.itemsView&&this.itemsView[e]&&(d=this.itemsView[e]);var f=new d({model:a,config:this.config},this.config),g=f.render().el;c?c.appendChild(g):this.$el.append(g)},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.length&&this.collection.each(function(b){this.add(b,a)},this),this.$el.append(a),this}})}),c("DomComponents/view/ToolbarButtonView",["backbone"],function(a){return a.View.extend({events:{mousedown:"handleClick"},attributes:function(){return this.model.get("attributes")},initialize:function(a){this.editor=a.config.editor},handleClick:function(){var a=this.model.get("command");"function"==typeof a&&a(this.editor),"string"==typeof a&&this.editor.runCommand(a)},render:function(){var a=this.editor.getConfig();return this.el.className+=" "+a.stylePrefix+"toolbar-item",this}})}),c("DomComponents/view/ToolbarView",["backbone","Abstract/view/DomainViews","./ToolbarButtonView"],function(a,b,c){return b.extend({itemView:c,initialize:function(a){this.config={editor:a.editor||""},this.listenTo(this.collection,"reset",this.render)}})}),c("DomComponents/model/ToolbarButton",["backbone"],function(a){return a.Model.extend({defaults:{command:"",attributes:{}}})}),c("DomComponents/model/Toolbar",["backbone","./ToolbarButton"],function(a,b){return a.Collection.extend({model:b})}),c("Commands/view/SelectComponent",["require","DomComponents/view/ToolbarView","DomComponents/model/Toolbar"],function(a){var b=a("DomComponents/view/ToolbarView"),c=a("DomComponents/model/Toolbar");return{init:function(a){_.bindAll(this,"onHover","onOut","onClick","onKeyPress")},enable:function(){_.bindAll(this,"copyComp","pasteComp","onFrameScroll"),this.frameOff=this.canvasOff=this.adjScroll=null;var a=this.config.em.get("Config");this.startSelectComponent(),this.toggleClipboard(a.copyPaste);var b=this.config.em;b.on("component:update",this.updateAttached,this),b.on("change:canvasOffset",this.updateAttached,this),b.on("change:selectedComponent",this.updateToolbar,this)},toggleClipboard:function(a){var b=a||0;b?(key("⌘+c, ctrl+c",this.copyComp),key("⌘+v, ctrl+v",this.pasteComp)):(key.unbind("⌘+c, ctrl+c"),key.unbind("⌘+v, ctrl+v"))},copyComp:function(){var a=this.editorModel.get("selectedComponent");a&&a.get("copyable")&&this.editorModel.set("clipboard",a)},pasteComp:function(){var a=this.editorModel.get("clipboard"),b=this.editorModel.get("selectedComponent");if(a&&b&&b.collection){var c=b.collection.indexOf(b),d=a.clone();b.collection.add(d,{at:c+1})}},getCanvasBodyEl:function(){return this.$bodyEl||(this.$bodyEl=$(this.getCanvasBody())),this.$bodyEl},startSelectComponent:function(){this.toggleSelectComponent(1)},stopSelectComponent:function(){this.toggleSelectComponent()},toggleSelectComponent:function(a){var b="*",c=a?"on":"off";this.getCanvasBodyEl()[c]("mouseover",b,this.onHover)[c]("mouseout",b,this.onOut)[c]("click",b,this.onClick);var d=this.getContentWindow();d[c]("scroll",this.onFrameScroll),d[c]("keydown",this.onKeyPress)},onKeyPress:function(a){var b=a.which||a.keyCode,c=this.editorModel.get("selectedComponent"),d="BODY"!==this.frameEl.contentDocument.activeElement.tagName;if((8==b||46==b)&&(d||a.preventDefault(),c&&!d)){if(!c.get("removable"))return;c.set("status",""),c.destroy(),this.hideBadge(),this.clean(),this.hideHighlighter(),this.editorModel.set("selectedComponent",null)}},onHover:function(a){a.stopPropagation();var b=a.target;this.adjScroll||(this.adjScroll=1,this.onFrameScroll(a),this.updateAttached());var c=this.getElementPos(b);this.updateBadge(b,c),this.updateHighlighter(b,c),this.showElementOffset(b,c)},onOut:function(a){a.stopPropagation(),this.hideBadge(),this.hideHighlighter(),this.hideElementOffset()},showElementOffset:function(a,b){var c=$(a),d=c.data("model");d&&"selected"==d.get("status")||this.editor.runCommand("show-offset",{el:a,elPos:b})},hideElementOffset:function(a,b){this.editor.stopCommand("show-offset")},showFixedElementOffset:function(a,b){this.editor.runCommand("show-offset",{el:a,elPos:b,state:"Fixed"})},hideFixedElementOffset:function(a,b){this.editor&&this.editor.stopCommand("show-offset",{state:"Fixed"})},hideHighlighter:function(){this.canvas.getHighlighter().style.display="none"},onClick:function(a){var b=$(a.target).data("model");if(b){var c=b.get("stylable");(c instanceof Array||c)&&this.onSelect(a,a.target)}},updateBadge:function(a,b){var c=$(a);this.cacheEl=a;var d=c.data("model");if(d&&d.get("badgable")){var e=this.getBadge();e.innerHTML=d.getName();var f=e.style,g="px";f.display="block";var h=this.canvas.getCanvasView().getPosition(),i=e?e.offsetHeight:0,j=e?e.offsetWidth:0,k=b.top-i"),e=this.codeMirror.clone().set({label:c,codeName:a,theme:b,input:d[0]}),f=new this.cm.EditorView({model:e,config:this.cm.getConfig()}).render().$el;return e.init(d[0]),{el:e,$el:f}},enable:function(){if(!this.$editors){var a=this.buildEditor("htmlmixed","hopscotch","HTML"),b=this.buildEditor("css","hopscotch","CSS");this.htmlEditor=a.el,this.cssEditor=b.el,this.$editors=$("
    ",{"class":this.pfx+"export-dl"}),this.$editors.append(a.$el).append(b.$el)}this.modal&&(this.modal.setTitle("Export template"),this.modal.setContent(this.$editors),this.modal.open());var c=this.protCss||"";this.htmlEditor.setContent(this.cm.getCode(this.components,"html",this.cssc)),this.cssEditor.setContent(c+this.cm.getCode(this.wrapper,"css",this.cssc)),this.sender&&this.sender.set("active",!1)},stop:function(){}}}),c("Commands/view/SwitchVisibility",[],function(){return{run:function(a){a.Canvas.getBody().className=this.ppfx+"dashed"},stop:function(a){a.Canvas.getBody().className=""}}}),c("Navigator/config/config",[],function(){return{stylePrefix:"nv-",sortable:1,hidable:1,hideTextnode:1,containerId:"navigator",itemClass:"item",itemsClass:"items"}}),c("text!Navigator/template/item.html",[],function(){return'<% if (hidable) { %>\n\t\n<% } %>\n\n
    \n
    \n \t\n\t\t\n\t\t\n
    \n
    \n\n
    <%= (count ? count : \'\') %>
    \n\n
    \n\t\n
    \n\n
    \n'}),c("Navigator/view/ItemView",["backbone","text!./../template/item.html","require"],function(a,b,c){return a.View.extend({template:_.template(b),initialize:function(a){this.opt=a,this.config=a.config,this.em=a.config.em,this.ppfx=this.em.get("Config").stylePrefix,this.sorter=a.sorter||{},this.pfx=this.config.stylePrefix,"undefined"==typeof this.model.get("open")&&this.model.set("open",!1),this.listenTo(this.model.components,"remove add change reset",this.checkChildren),this.listenTo(this.model,"destroy remove",this.remove),this.listenTo(this.model,"change:status",this.updateStatus),this.listenTo(this.model,"change:open",this.updateOpening),this.className=this.pfx+"item no-select",this.editBtnCls=this.pfx+"nav-item-edit",this.inputNameCls=this.ppfx+"nav-comp-name",this.caretCls=this.ppfx+"nav-item-caret",this.titleCls=this.pfx+"title",this.customNameProp="custom-name",this.events={},this.events["click > #"+this.pfx+"btn-eye"]="toggleVisibility",this.events["click ."+this.caretCls]="toggleOpening",this.events["click ."+this.titleCls]="handleSelect",this.events["click ."+this.editBtnCls]="handleEdit",this.events["blur ."+this.inputNameCls]="handleEditEnd",this.$el.data("model",this.model),this.$el.data("collection",this.model.get("components")),a.config.sortable&&(this.events["mousedown > #"+this.pfx+"move"]="startSort"),this.delegateEvents()},handleEdit:function(a){a.stopPropagation();var b=this.getInputName();b.readOnly=!1,b.focus()},handleEditEnd:function(a){a.stopPropagation();var b=this.getInputName();b.readOnly=!0,this.model.set(this.customNameProp,b.value)},getInputName:function(){return this.inputName||(this.inputName=this.el.querySelector("."+this.inputNameCls)),this.inputName},updateOpening:function(){var a=this.opt.opened||{},b=this.model;b.get("open")?(this.$el.addClass("open"),this.$caret.addClass("fa-chevron-down"),a[b.cid]=b):(this.$el.removeClass("open"),this.$caret.removeClass("fa-chevron-down"),delete a[b.cid])},toggleOpening:function(a){a.stopPropagation(),this.model.components.length&&this.model.set("open",!this.model.get("open"))},handleSelect:function(a){a.stopPropagation();var b=this.em;if(b){var c=b.get("selectedComponent");c&&c.set("status",""),this.model.set("status","selected"),b.set("selectedComponent",this.model)}},startSort:function(a){this.sorter&&this.sorter.startSort(a.target)},freeze:function(){this.$el.addClass(this.pfx+"opac50"),this.model.set("open",0)},unfreeze:function(){this.$el.removeClass(this.pfx+"opac50")},updateStatus:function(a){var b=this.model.get("status"),c=this.pfx+"selected",d=this.$el;switch(b){case"selected":d.addClass(c);break;case"moving":break;default:d.removeClass(c)}},toggleVisibility:function(a){this.$eye||(this.$eye=this.$el.find("> #"+this.pfx+"btn-eye"));var b=_.clone(this.model.get("style")),c=this.pfx+"hide";this.isVisible()?(this.$el.addClass(c),this.$eye.addClass("fa-eye-slash"),b.display="none"):(this.$el.removeClass(c),this.$eye.removeClass("fa-eye-slash"),delete b.display),this.model.set("style",b)},isVisible:function(){var a=this.model.get("style"),b=a.display;if(!b||"none"!=b)return 1},checkChildren:function(){var a=this.countChildren(this.model),b=this.pfx,c="> ."+b+"title-c > ."+b+"title";this.$counter||(this.$counter=this.$el.find("> #"+b+"counter")),a?(this.$el.find(c).removeClass(b+"no-chld"),this.$counter.html(a)):(this.$el.find(c).addClass(b+"no-chld"),this.$counter.empty(),this.model.set("open",0))},countChildren:function(a){var b=0;return a.components.each(function(a){var c=this.opt.isCountable,d=this.config.hideTextnode;c&&!c(a,d)||b++},this),b},render:function(){var a=this.pfx,b=this.isVisible(),d=this.countChildren(this.model);return this.$el.html(this.template({title:this.model.get(this.customNameProp)||this.model.getName(),addClass:d?"":a+"no-chld",editBtnCls:this.editBtnCls,inputNameCls:this.inputNameCls,caretCls:this.caretCls,count:d,visible:b,hidable:this.config.hidable,prefix:a,ppfx:this.ppfx})),"undefined"==typeof ItemsView&&(ItemsView=c("./ItemsView")),this.$components=new ItemsView({collection:this.model.components,config:this.config,sorter:this.sorter,opened:this.opt.opened,parent:this.model}).render().$el,this.$el.find("."+a+"children").html(this.$components),this.$caret=this.$el.find("> ."+a+"title-c > ."+a+"title > #"+a+"caret"),this.model.get("draggable")&&this.config.sortable||this.$el.find("> #"+a+"move").detach(),b||(this.className+=" "+a+"hide"),this.$el.attr("class",_.result(this,"className")),this.updateOpening(),this.updateStatus(),this}})}),c("Navigator/view/ItemsView",["backbone","./ItemView"],function(a,b){return a.View.extend({initialize:function(a){if(this.opt=a,this.config=a.config,this.preview=a.preview,this.ppfx=a.config.pStylePrefix||"",this.pfx=a.config.stylePrefix||"",this.parent=a.parent,this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset resetNavigator",this.render),this.className=this.pfx+"items",this.config.sortable&&!this.opt.sorter){var b=this.pfx,c=this.config.em.get("Utils");this.opt.sorter=new c.Sorter({container:this.el,containerSel:"."+b+"items",itemSel:"."+b+"item",ppfx:this.ppfx,pfx:b,nested:1})}this.sorter=this.opt.sorter||"",this.parent||(this.className+=" "+this.pfx+this.config.containerId),this.$el.data("collection",this.collection)},addTo:function(a){var b=this.collection.indexOf(a);this.addToCollection(a,null,b)},addToCollection:function(a,c,d){var e=c||null,f=b,g=new f({model:a,config:this.config,sorter:this.sorter,isCountable:this.isCountable,opened:this.opt.opened}),h=g.render().el;if(e)e.appendChild(h);else if("undefined"!=typeof d){var i="before";this.$el.children().length==d&&(d--,i="after"),d<0?this.$el.append(h):this.$el.children().eq(d)[i](h)}else this.$el.append(h);return h},isCountable:function(a,b){var c=a.get("type"),d=a.get("tagName");return"textnode"!=c&&"br"!=d||!b},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.isCountable(b,this.config.hideTextnode)&&this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",_.result(this,"className")),this}})}),c("Navigator/main",["require","./config/config","./view/ItemsView"],function(a){function b(b,c){var d=c,e=a("./config/config"),f=a("./view/ItemsView");for(var g in e)g in d||(d[g]=e[g]);var h={collection:b,config:d,opened:c.opened||{}};this.ItemsView=new f(h)}return b.prototype={render:function(){return this.ItemsView.render().$el}},b}),c("Navigator",["Navigator/main"],function(a){return a}),c("Commands/view/OpenLayers",["Navigator"],function(a){return{run:function(b,c){if(!this.$layers){var d=b.DomComponents.getComponent().get("components"),e=b.getConfig(),f=b.Panels,g=e.layers.stylePrefix||"nv-";e.layers.stylePrefix=e.stylePrefix+g,e.layers.pStylePrefix=e.stylePrefix,e.layers.em=b.editor,e.layers.opened=b.editor.get("opened");var h=new a(d,e.layers);this.$layers=h.render(),f.getPanel("views-container")?this.panel=f.getPanel("views-container"):this.panel=f.addPanel({id:"views-container"}),this.panel.set("appendContent",this.$layers).trigger("change:appendContent")}this.$layers.show()},stop:function(){this.$layers&&this.$layers.hide()}}}),c("Commands/view/OpenStyleManager",["StyleManager"],function(a){return{run:function(a,b){if(this.sender=b,!this.$cn){var c=a.getConfig(),d=a.Panels;this.$cn=$("
    "),this.$cn2=$("
    "),this.$cn.append(this.$cn2);var e=a.DeviceManager;if(e&&c.showDevices){var f=d.addPanel({id:"devices-c"});f.set("appendContent",e.render()).trigger("change:appendContent")}var g=a.SelectorManager;g&&this.$cn2.append(g.render([])),this.$cn2.append(a.StyleManager.render());var h=a.StyleManager.getConfig();this.$header=$("
    ",{"class":h.stylePrefix+"header",text:h.textNoElement}),this.$cn.append(this.$header),d.getPanel("views-container")?this.panel=d.getPanel("views-container"):this.panel=d.addPanel({id:"views-container"}),this.panel.set("appendContent",this.$cn).trigger("change:appendContent"),this.target=a.editor,this.listenTo(this.target,"change:selectedComponent",this.toggleSm)}this.toggleSm()},toggleSm:function(){this.sender.get("active")&&(this.target.get("selectedComponent")?(this.$cn2.show(),this.$header.hide()):(this.$cn2.hide(),this.$header.show()))},stop:function(){this.$cn2&&this.$cn2.hide(),this.$header&&this.$header.hide()}}}),c("Commands/view/OpenTraitManager",[],function(){return{run:function(a,b){var c=a.Config,d=c.stylePrefix,e=a.TraitManager;if(!this.obj){var f=e.getTraitsViewer(),g=e.getConfig();this.obj=$("
    ").append('
    '+g.labelContainer+"
    ").get(0),this.obj.appendChild(f.render().el);var h=a.Panels;h.getPanel("views-container")?panelC=h.getPanel("views-container"):panelC=h.addPanel({id:"views-container"}),panelC.set("appendContent",this.obj).trigger("change:appendContent")}this.obj.style.display="block"},stop:function(){this.obj&&(this.obj.style.display="none")}}}),c("Commands/view/OpenBlocks",[],function(){return{run:function(a,b){var c=a.Config,d=(c.stylePrefix,a.BlockManager);if(!this.blocks){this.blocks=$("
    ").get(0),this.blocks.appendChild(d.render());var e=a.Panels;e.getPanel("views-container")?panelC=e.getPanel("views-container"):panelC=e.addPanel({id:"views-container"}),panelC.set("appendContent",this.blocks).trigger("change:appendContent")}this.blocks.style.display="block"},stop:function(){this.blocks&&(this.blocks.style.display="none")}}}),c("Commands/view/OpenAssets",[],function(){return{run:function(a,b,c){var d=c||{},e=(a.getConfig(),a.Modal),f=a.AssetManager;f.onClick(d.onClick),f.onDblClick(d.onDblClick),f.setTarget(d.target),f.onSelect(d.onSelect),e.setTitle(d.modalTitle||"Select image"),e.setContent(f.render()),e.open()}}}),c("Commands/view/ShowOffset",[],function(){return{getOffsetMethod:function(a){var b=a||"";return"get"+b+"OffsetViewerEl"},run:function(a,b,c){if(a.getConfig().showOffsets){var d=a.Canvas,e=c||{},f=e.el||"",g=e.state||"",h=e.elPos||d.getElementPos(f),i=window.getComputedStyle(f),j=this.ppfx,k=g+"State",l=this.getOffsetMethod(g),m=d[l]();m.style.display="block";var n=this["marginT"+g],o=this["marginB"+g],p=this["marginL"+g],q=this["marginR"+g],r=this["padT"+g],s=this["padB"+g],t=this["padL"+g],u=this["padR"+g];if(!this[k]){var v=g.toLowerCase(),w=v+"margin-v",x=v+"padding-v",y=$("
    ",{"class":j+w}).get(0),z=$("
    ",{"class":j+x}).get(0),A=j+w+"-el",B=j+x+"-el";n=$("
    ",{"class":j+w+"-top "+A}).get(0),o=$("
    ",{"class":j+w+"-bottom "+A}).get(0),p=$("
    ",{"class":j+w+"-left "+A}).get(0),q=$("
    ",{"class":j+w+"-right "+A}).get(0),r=$("
    ",{"class":j+x+"-top "+B}).get(0),s=$("
    ",{"class":j+x+"-bottom "+B}).get(0),t=$("
    ",{"class":j+x+"-left "+B}).get(0),u=$("
    ",{"class":j+x+"-right "+B}).get(0),this["marginT"+g]=n,this["marginB"+g]=o,this["marginL"+g]=p,this["marginR"+g]=q,this["padT"+g]=r,this["padB"+g]=s,this["padL"+g]=t,this["padR"+g]=u,y.appendChild(n),y.appendChild(o),y.appendChild(p),y.appendChild(q),z.appendChild(r),z.appendChild(s),z.appendChild(t),z.appendChild(u),m.appendChild(y),m.appendChild(z),this[k]="1"}var C="px",D=i.marginLeft.replace(C,""),E=parseInt(i.marginTop.replace(C,"")),F=parseInt(i.marginBottom.replace(C,"")),G=n.style,H=o.style,I=p.style,J=q.style,K=r.style,L=s.style,M=t.style,N=u.style,O=parseInt(h.left);G.height=i.marginTop,G.width=i.width,G.top=h.top-i.marginTop.replace(C,"")+C,G.left=O+C,H.height=i.marginBottom,H.width=i.width,H.top=h.top+h.height+C,H.left=O+C;var P=h.height+E+F+C,Q=h.top-E+C;I.height=P,I.width=i.marginLeft,I.top=Q,I.left=O-D+C,J.height=P,J.width=i.marginRight,J.top=Q,J.left=O+h.width+C;var R=parseInt(i.paddingTop.replace(C,""));K.height=i.paddingTop,K.width=i.width,K.top=h.top+C,K.left=O+C;var S=parseInt(i.paddingBottom.replace(C,""));L.height=i.paddingBottom,L.width=i.width,L.top=h.top+h.height-S+C,L.left=O+C;var T=h.height-S-R+C,U=h.top+R+C;M.height=T,M.width=i.paddingLeft,M.top=U,M.left=h.left+C;var V=parseInt(i.paddingRight.replace(C,""));N.height=T,N.width=i.paddingRight,N.top=U,N.left=h.left+h.width-V+C}},stop:function(a,b,c){var d=c||{},e=d.state||"",f=this.getOffsetMethod(e),g=a.Canvas,h=g[f]();h.style.display="none"}}}),c("Commands/view/Fullscreen",[],function(){return{isEnabled:function(){var a=document;return a.fullscreenElement||a.webkitFullscreenElement||a.mozFullScreenElement?1:0},enable:function(a){var b="";return a.requestFullscreen?a.requestFullscreen():a.webkitRequestFullscreen?(b="webkit",a.webkitRequestFullscreen()):a.mozRequestFullScreen?(b="moz",a.mozRequestFullScreen()):a.msRequestFullscreen?a.msRequestFullscreen():console.warn("Fullscreen not supported"),b},disable:function(){var a=document;a.exitFullscreen?a.exitFullscreen():a.webkitExitFullscreen?a.webkitExitFullscreen():a.mozCancelFullScreen?a.mozCancelFullScreen():a.msExitFullscreen&&a.msExitFullscreen()},fsChanged:function(a,b){var c=(document,(a||"")+"fullscreenchange");this.isEnabled()||(this.stop(null,this.sender),document.removeEventListener(c,this.fsChanged))},run:function(a,b){this.sender=b;var c=this.enable(a.getContainer());this.fsChanged=this.fsChanged.bind(this,c),document.addEventListener(c+"fullscreenchange",this.fsChanged),a&&a.trigger("change:canvasOffset")},stop:function(a,b){b&&b.set&&b.set("active",!1),this.disable(),a&&a.trigger("change:canvasOffset")}}}),c("Commands/view/Preview",[],function(){return{getPanels:function(a){return this.panels||(this.panels=a.Panels.getPanelsEl()),this.panels},tglPointers:function(a,b){var c=a.Canvas.getBody().querySelectorAll("."+this.ppfx+"no-pointer");_.each(c,function(a){a.style.pointerEvents=b?"":"all"})},run:function(a,b){b&&b.set&&b.set("active",!1),a.stopCommand("sw-visibility");var c=this,d=this.getPanels(a),e=a.Canvas.getElement(),f=a.getEl(),g=a.Config.stylePrefix;this.helper||(this.helper=document.createElement("span"),this.helper.className=g+"off-prv fa fa-eye-slash",f.appendChild(this.helper),this.helper.onclick=function(){c.stop(a)}),this.helper.style.display="inline-block",this.tglPointers(a),d.style.display="none";var h=e.style;h.width="100%",h.height="100%",h.top="0",h.left="0",h.padding="0",h.margin="0",a.trigger("change:canvasOffset")},stop:function(a,b){var c=this.getPanels(a);a.runCommand("sw-visibility"),a.getModel().runDefault(),c.style.display="block";var d=a.Canvas.getElement();d.setAttribute("style",""),this.helper&&(this.helper.style.display="none"),a.trigger("change:canvasOffset"),this.tglPointers(a,1)}}}),c("Commands/view/Resize",[],function(){return{run:function(a,b,c){var d=c&&c.el||"",e=a.Canvas,f=this.canvasResizer,g=c.options||{};if(!f){var h=e.getCanvasView();g.ratioDefault=1,g.appendTo=e.getResizerEl(),g.prefix=a.getConfig().stylePrefix,g.posFetcher=h.getElementPos.bind(h),g.mousePosFetcher=e.getMouseRelativePos,this.canvasResizer=a.Utils.Resizer.init(g),f=this.canvasResizer}f.setOptions(g),f.focus(d)},stop:function(){this.canvasResizer&&this.canvasResizer.blur()}}}),c("Commands/main",["require","./config/config","./view/CommandAbstract","./view/SelectComponent","./view/CreateComponent","./view/DeleteComponent","./view/ImageComponent","./view/MoveComponent","./view/TextComponent","./view/InsertCustom","./view/ExportTemplate","./view/SwitchVisibility","./view/OpenLayers","./view/OpenStyleManager","./view/OpenTraitManager","./view/OpenBlocks","./view/OpenAssets","./view/ShowOffset","./view/Fullscreen","./view/Preview","./view/Resize"],function(a){return function(){var b={},c={},d={},e=a("./config/config"),f=a("./view/CommandAbstract"),g=function(a,b){return delete b.initialize,c[a]=f.extend(b),this};return{name:"Commands",init:function(c){b=c||{};for(var f in e)f in b||(b[f]=e[f]);var g=b.pStylePrefix;g&&(b.stylePrefix=g+b.stylePrefix);for(var h in b.defaults){var i=b.defaults[h];i.id&&this.add(i.id,i)}return d["select-comp"]=a("./view/SelectComponent"),d["create-comp"]=a("./view/CreateComponent"),d["delete-comp"]=a("./view/DeleteComponent"),d["image-comp"]=a("./view/ImageComponent"),d["move-comp"]=a("./view/MoveComponent"),d["text-comp"]=a("./view/TextComponent"),d["insert-custom"]=a("./view/InsertCustom"),d["export-template"]=a("./view/ExportTemplate"),d["sw-visibility"]=a("./view/SwitchVisibility"),d["open-layers"]=a("./view/OpenLayers"),d["open-sm"]=a("./view/OpenStyleManager"),d["open-tm"]=a("./view/OpenTraitManager"),d["open-blocks"]=a("./view/OpenBlocks"),d["open-assets"]=a("./view/OpenAssets"),d["show-offset"]=a("./view/ShowOffset"),d.fullscreen=a("./view/Fullscreen"),d.preview=a("./view/Preview"),d.resize=a("./view/Resize"),d["tlb-delete"]={run:function(a){var b=a.getSelected();return b&&b.get("removable")?(b.collection.remove(b),a.Canvas.getToolbarEl().style.display="none",a.editor.runDefault(),void a.trigger("component:update",b)):void console.warn("The element is not removable")}},d["tlb-clone"]={run:function(a){var b=a.getSelected();if(!b||!b.get("copyable"))return void console.warn("The element is not clonable");var c=b.collection,d=c.indexOf(b);c.add(b.clone(),{at:d+1}),a.trigger("component:update",b)}},d["tlb-move"]={run:function(a){var b=a.getSelected();if(!b||!b.get("draggable"))return void console.warn("The element is not draggable");var c=a.Canvas.getToolbarEl(),d=(c.style.display,a.Commands.get("move-comp"));d.onEndMoveFromModel=function(){a.editor.runDefault(),a.editor.set("selectedComponent",b),a.trigger("component:update",b)},a.editor.stopDefault(),d.initSorterFromModel(b),b.set("status","selected"),c.style.display="none"}},b.em&&(b.model=b.em.get("Canvas")),this},onLoad:function(){this.loadDefaultCommands()},add:g,get:function(a){var d=c[a];return"function"==typeof d&&(d=new d(b),c[a]=d),d},loadDefaultCommands:function(){for(var a in d)this.add(a,d[a]);return this}}}}),c("Commands",["Commands/main"],function(a){return a}),c("BlockManager/config/config",[],function(){return{blocks:[]}}),c("BlockManager/model/Block",["backbone"],function(a){return a.Model.extend({defaults:{label:"",content:"",attributes:{}}})}),c("BlockManager/model/Blocks",["backbone","./Block"],function(a,b){return a.Collection.extend({model:b})}),c("BlockManager/view/BlockView",["backbone"],function(a){return a.View.extend({events:{mousedown:"onDrag"},initialize:function(a,b){_.bindAll(this,"onDrop"),this.config=b||{},this.ppfx=this.config.pStylePrefix||"",this.listenTo(this.model,"destroy",this.remove),this.doc=$(document)},onDrag:function(a){if(this.config.getSorter){this.config.em.refreshCanvas();var b=this.config.getSorter();b.setDragHelper(this.el,a),b.startSort(this.el),b.setDropContent(this.model.get("content")),this.doc.on("mouseup",this.onDrop)}},onDrop:function(){this.doc.off("mouseup",this.onDrop), -this.config.getSorter().endMove()},render:function(){var a=this.ppfx+"block";return this.$el.addClass(a),this.el.innerHTML='
    '+this.model.get("label")+"
    ",this}})}),c("BlockManager/view/BlocksView",["backbone","./BlockView"],function(a,b){return a.View.extend({initialize:function(a,b){_.bindAll(this,"getSorter","onDrag","onDrop"),this.config=b||{},this.ppfx=this.config.pStylePrefix||"",this.listenTo(this.collection,"add",this.addTo),this.em=this.config.em,this.tac="test-tac",this.grabbingCls=this.ppfx+"grabbing",this.em&&(this.config.getSorter=this.getSorter,this.canvas=this.em.get("Canvas"))},getSorter:function(){if(this.em){if(!this.sorter){var a=this.em.get("Utils"),b=this.canvas;this.sorter=new a.Sorter({container:b.getBody(),placer:b.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,onStart:this.onDrag,onEndMove:this.onDrop,document:b.getFrameEl().contentDocument,direction:"a",wmargin:1,nested:1,em:this.em})}return this.sorter}},onDrag:function(){this.em.stopDefault()},onDrop:function(a){this.em.runDefault(),a&&a.get&&a.get("activeOnRender")&&(a.trigger("active"),a.set("activeOnRender",0))},addTo:function(a){this.add(a)},add:function(a,c){var d=c||null,e=new b({model:a,attributes:a.get("attributes")},this.config),f=e.render().el;d?d.appendChild(f):this.$el.append(f)},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.add(b,a)},this),this.$el.append(a),this.$el.addClass(this.ppfx+"blocks-c"),this}})}),c("BlockManager/main",["require","./config/config","./model/Blocks","./view/BlocksView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Blocks"),g=a("./view/BlocksView");return{name:"BlockManager",init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);return b=new f(d.blocks),c=new g({collection:b},d),this},add:function(a,c){var d=c||{};return d.id=a,b.add(d)},get:function(a){return b.get(a)},getAll:function(){return b},render:function(){return c.render().el}}}}),c("BlockManager",["BlockManager/main"],function(a){return a}),c("TraitManager/config/config",[],function(){return{stylePrefix:"trt-",labelContainer:"Component settings"}}),c("TraitManager/view/TraitView",["backbone"],function(a){return a.View.extend({events:{change:"onChange"},initialize:function(a){var b=this.model;this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=b.target,this.className=this.pfx+"trait",this.labelClass=this.ppfx+"label",this.fieldClass=this.ppfx+"field "+this.ppfx+"field-"+b.get("type"),this.inputhClass=this.ppfx+"input-holder",b.off("change:value",this.onValueChange),this.listenTo(b,"change:value",this.onValueChange),this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().value)},onValueChange:function(){var a=this.model,b=this.target,c=a.get("name"),d=a.get("value");if(a.get("changeProp"))b.set(c,d);else{var e=_.clone(b.get("attributes"));e[c]=d,b.set("attributes",e)}},renderLabel:function(){this.$el.html('
    '+this.getLabel()+"
    ")},getLabel:function(){var a=this.model,b=a.get("label")||a.get("name");return b.charAt(0).toUpperCase()+b.slice(1).replace(/-/g," ")},getInputEl:function(){if(!this.$input){var a=this.model,b=this.target,c=a.get("name"),d={placeholder:a.get("placeholder")||a.get("default"),type:a.get("type")||"text"};if(a.get("changeProp"))d.value=b.get(c);else{var e=b.get("attributes");d.value=a.get("value")||e[c]}a.get("min")&&(d.min=a.get("min")),a.get("max")&&(d.max=a.get("max")),this.$input=$("",d)}return this.$input.get(0)},renderField:function(){if(!this.$input){this.$el.append(this.tmpl);var a=this.getInputEl();this.$el.find("."+this.inputhClass).prepend(a)}},render:function(){return this.renderLabel(),this.renderField(),this.el.className=this.className,this}})}),c("TraitManager/view/TraitSelectView",["backbone","./TraitView"],function(a,b){return b.extend({initialize:function(a){b.prototype.initialize.apply(this,arguments);var c=this.ppfx;this.tmpl='
    '},getInputEl:function(){if(!this.$input){var a=this.model,b=a.get("options")||[];this.input="",this.$input=$(this.input);var c=this.target,d=a.get("name"),e=a.get("value");if(a.get("changeProp"))e=e||c.get(d);else{var f=c.get("attributes");e=f[d]}e&&this.$input.val(e)}return this.$input.get(0)}})}),c("TraitManager/view/TraitCheckboxView",["./TraitView"],function(a){return a.extend({initialize:function(b){a.prototype.initialize.apply(this,arguments);var c=this.ppfx+"chk-icon";this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().checked)},getInputEl:function(){var b;this.$input||(b=1);var c=a.prototype.getInputEl.apply(this,arguments);if(b){var d=this.model,e=d.get("name"),f=this.target;if(d.get("changeProp"))c.checked=f.get(e);else{var g=f.get("attributes");c.checked=!!g[e]}}return c}})}),c("TraitManager/view/TraitsView",["backbone","Abstract/view/DomainViews","./TraitView","./TraitSelectView","./TraitCheckboxView"],function(a,b,c,d,e){return b.extend({itemView:c,itemsView:{text:c,select:d,checkbox:e},initialize:function(a){this.config=a.config||{},this.em=a.editor,this.pfx=this.config.stylePrefix||"",this.className=this.pfx+"traits",this.listenTo(this.em,"change:selectedComponent",this.updatedCollection),this.updatedCollection()},updatedCollection:function(){this.el.className=this.className;var a=this.em.get("selectedComponent");a&&(this.collection=a.get("traits"),this.render())}})}),c("TraitManager/main",["require","./config/config","./model/Traits","./view/TraitsView"],function(a){return function(){var b,c={},d=a("./config/config"),e=(a("./model/Traits"),a("./view/TraitsView"));return{TraitsView:e,name:"TraitManager",getConfig:function(){return c},init:function(a){c=a||{};for(var f in d)f in c||(c[f]=d[f]);var g=c.pStylePrefix;return g&&(c.stylePrefix=g+c.stylePrefix),b=new e({collection:[],editor:c.em,config:c}),this},getTraitsViewer:function(){return b},addType:function(a,c){var d=b.itemView;b.itemsView[a]=d.extend(c)},getType:function(a){return b.itemsView[a]}}}}),c("TraitManager",["TraitManager/main"],function(a){return a});var d=["Utils","StorageManager","DeviceManager","Parser","SelectorManager","ModalDialog","CodeManager","Panels","RichTextEditor","StyleManager","AssetManager","CssComposer","DomComponents","Canvas","Commands","BlockManager","TraitManager"];return c("editor/model/Editor",["backbone","backboneUndo","keymaster","Utils","StorageManager","DeviceManager","Parser","SelectorManager","ModalDialog","CodeManager","Panels","RichTextEditor","StyleManager","AssetManager","CssComposer","DomComponents","Canvas","Commands","BlockManager","TraitManager"],function(){return Backbone.Model.extend({defaults:{clipboard:null,selectedComponent:null,previousModel:null,changesCount:0,storables:[],toLoad:[],opened:{},device:""},initialize:function(a){this.config=a,this.set("Config",a),a.el&&a.fromElement&&(this.config.components=a.el.innerHTML),d.forEach(function(a){this.loadModule(a)},this),this.get("toLoad").forEach(function(a){a.onLoad()}),this.initUndoManager(),this.on("change:selectedComponent",this.componentSelected,this),this.on("change:changesCount",this.updateBeforeUnload,this)},updateBeforeUnload:function(){var a=this.get("changesCount");this.config.noticeOnUnload&&a?window.onbeforeunload=function(a){return 1}:window.onbeforeunload=null},loadModule:function(a){var c=this.config,d=new b(a)(),e=d.name.charAt(0).toLowerCase()+d.name.slice(1),f=c[e]||c[d.name]||{};f.pStylePrefix=c.pStylePrefix||"";var g=this.get("StorageManager");if(d.storageKey&&d.store&&d.load&&g){f.stm=g;var h=this.get("storables");h.push(d),this.set("storables",h)}return f.em=this,d.init(Object.create(f)),d["private"]||this.set(d.name,d),d.onLoad&&this.get("toLoad").push(d),this},init:function(a){this.set("Editor",a)},listenRules:function(a){this.stopListening(a,"add remove",this.listenRule),this.listenTo(a,"add remove",this.listenRule),a.each(function(a){this.listenRule(a)},this)},listenRule:function(a){this.stopListening(a,"change:style",this.ruleUpdated),this.listenTo(a,"change:style",this.ruleUpdated)},ruleUpdated:function(a,b,c){var d=this.get("changesCount")+1,e=c?c.avoidStore:0;this.set("changesCount",d);var f=this.get("StorageManager");f.isAutosave()&&d0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}if((o||q)&&p){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),o)for(l=o.length;l>0;l-=1)if(e=p[o.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&q&&q[d]&&(i=q[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,b){return function(){var c=w.call(arguments,0);return"string"!=typeof c[0]&&1===c.length&&c.push(null),o.apply(d,c.concat([a,b]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){r[a]=b}}function j(a){if(e(s,a)){var b=s[a];delete s[a],u[a]=!0,n.apply(d,b)}if(!e(r,a)&&!e(u,a))throw new Error("No "+a);return r[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return a?k(a):[]}function m(a){return function(){return t&&t.config&&t.config[a]||{}}}var n,o,p,q,r={},s={},t={},u={},v=Object.prototype.hasOwnProperty,w=[].slice,x=/\.js$/;p=function(a,b){var c,d=k(a),e=d[0],g=b[1];return a=d[1],e&&(e=f(e,g),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(g)):f(a,g):(a=f(a,g),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},q={require:function(a){return g(a)},exports:function(a){var b=r[a];return"undefined"!=typeof b?b:r[a]={}},module:function(a){return{id:a,uri:"",exports:r[a],config:m(a)}}},n=function(a,b,c,f){var h,k,m,n,o,t,v,w=[],x=typeof c;if(f=f||a,t=l(f),"undefined"===x||"function"===x){for(b=!b.length&&c.length?["require","exports","module"]:b,o=0;o
    ",attributes:{"class":"gjs-fonts gjs-f-b1"}},{id:"b2",label:"2 Blocks",content:'
    ",attributes:{"class":"gjs-fonts gjs-f-b2"}},{id:"b3",label:"3 Blocks",content:'
    ",attributes:{"class":"gjs-fonts gjs-f-b3"}},{id:"b4",label:"3/7 Block",content:'
    ",attributes:{"class":"gjs-fonts gjs-f-b37"}},{id:"hero",label:"Hero section",content:'
    Build your templates without coding
    Try it now
    ',attributes:{"class":"gjs-fonts gjs-f-hero"}},{id:"h1p",label:"Text section",content:'

    Insert title here

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua

    ',attributes:{"class":"gjs-fonts gjs-f-h1p"}},{id:"3ba",label:"Badges",content:'
    Adam Smith
    CEO
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ftln
    John Black
    Software Engineer
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ftln
    Jessica White
    Web Designer
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ftln
    ',attributes:{"class":"gjs-fonts gjs-f-3ba"}},{id:"text",label:"Text",attributes:{"class":"gjs-fonts gjs-f-text"},content:{type:"text",content:"Insert your text here",style:{padding:"10px"},activeOnRender:1}},{id:"image",label:"Image",attributes:{"class":"gjs-fonts gjs-f-image"},content:{style:{color:"black"},type:"image",activeOnRender:1}},{id:"quo",label:"Quote",content:'
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ',attributes:{"class":"fa fa-quote-right"}},{id:"link",label:"Link",attributes:{"class":"fa fa-link"},content:{type:"link",content:"Link",style:{color:"#d983a6"}}},{id:"map",label:"Map",attributes:{"class":"fa fa-map-o"},content:{type:"map",style:{height:"350px"}}},{id:"video",label:"Video",attributes:{"class":"fa fa-youtube-play"},content:{type:"video",src:"img/video2.webm",style:{height:"350px",width:"615px"}}}]}}}),function(){function a(a){function b(b,c,d,e,f,g){for(;f>=0&&f0?0:h-1;return arguments.length<3&&(e=c[g?g[i]:i],i+=a),b(c,d,e,g,i,h)}}function b(a){return function(b,c,d){c=v(c,d);for(var e=A(b),f=a>0?0:e-1;f>=0&&f0?g=f>=0?f:Math.max(f+h,g):h=f>=0?Math.min(f+1,h):f+h+1;else if(c&&f&&h)return f=c(d,e),d[f]===e?f:-1;if(e!==e)return f=b(l.call(d,g,h),t.isNaN),f>=0?f+g:-1;for(f=a>0?g:h-1;f>=0&&f=0&&b<=z};t.each=t.forEach=function(a,b,c){b=u(b,c);var d,e;if(B(a))for(d=0,e=a.length;d=0},t.invoke=function(a,b){var c=l.call(arguments,2),d=t.isFunction(b);return t.map(a,function(a){var e=d?b:a[b];return null==e?e:e.apply(a,c)})},t.pluck=function(a,b){return t.map(a,t.property(b))},t.where=function(a,b){return t.filter(a,t.matcher(b))},t.findWhere=function(a,b){return t.find(a,t.matcher(b))},t.max=function(a,b,c){var d,e,f=-(1/0),g=-(1/0);if(null==b&&null!=a){a=B(a)?a:t.values(a);for(var h=0,i=a.length;hf&&(f=d)}else b=v(b,c),t.each(a,function(a,c,d){e=b(a,c,d),(e>g||e===-(1/0)&&f===-(1/0))&&(f=a,g=e)});return f},t.min=function(a,b,c){var d,e,f=1/0,g=1/0;if(null==b&&null!=a){a=B(a)?a:t.values(a);for(var h=0,i=a.length;hd||void 0===c)return 1;if(cb?(g&&(clearTimeout(g),g=null),h=j,f=a.apply(d,e),g||(d=e=null)):g||c.trailing===!1||(g=setTimeout(i,k)),f}},t.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=t.now()-g;j=0?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),d||(f=e=null)))};return function(){f=this,e=arguments,g=t.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},t.wrap=function(a,b){return t.partial(b,a)},t.negate=function(a){return function(){return!a.apply(this,arguments)}},t.compose=function(){var a=arguments,b=a.length-1;return function(){for(var c=b,d=a[b].apply(this,arguments);c--;)d=a[c].call(this,d);return d}},t.after=function(a,b){return function(){if(--a<1)return b.apply(this,arguments)}},t.before=function(a,b){var c;return function(){return--a>0&&(c=b.apply(this,arguments)),a<=1&&(b=null),c}},t.once=t.partial(t.before,2);var F=!{toString:null}.propertyIsEnumerable("toString"),G=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];t.keys=function(a){if(!t.isObject(a))return[];if(p)return p(a);var b=[];for(var c in a)t.has(a,c)&&b.push(c);return F&&e(a,b),b},t.allKeys=function(a){if(!t.isObject(a))return[];var b=[];for(var c in a)b.push(c);return F&&e(a,b),b},t.values=function(a){for(var b=t.keys(a),c=b.length,d=Array(c),e=0;e":">",'"':""","'":"'","`":"`"},J=t.invert(I),K=function(a){var b=function(b){return a[b]},c="(?:"+t.keys(a).join("|")+")",d=RegExp(c),e=RegExp(c,"g");return function(a){return a=null==a?"":""+a,d.test(a)?a.replace(e,b):a}};t.escape=K(I),t.unescape=K(J),t.result=function(a,b,c){var d=null==a?void 0:a[b];return void 0===d&&(d=c),t.isFunction(d)?d.call(a):d};var L=0;t.uniqueId=function(a){var b=++L+"";return a?a+b:b},t.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var M=/(.)^/,N={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},O=/\\|'|\r|\n|\u2028|\u2029/g,P=function(a){return"\\"+N[a]};t.template=function(a,b,c){!b&&c&&(b=c),b=t.defaults({},b,t.templateSettings);var d=RegExp([(b.escape||M).source,(b.interpolate||M).source,(b.evaluate||M).source].join("|")+"|$","g"),e=0,f="__p+='";a.replace(d,function(b,c,d,g,h){return f+=a.slice(e,h).replace(O,P),e=h+b.length,c?f+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'":d?f+="'+\n((__t=("+d+"))==null?'':__t)+\n'":g&&(f+="';\n"+g+"\n__p+='"),b}),f+="';\n",b.variable||(f="with(obj||{}){\n"+f+"}\n"),f="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+f+"return __p;\n";try{var g=new Function(b.variable||"obj","_",f)}catch(h){throw h.source=f,h}var i=function(a){return g.call(this,a,t)},j=b.variable||"obj";return i.source="function("+j+"){\n"+f+"}",i},t.chain=function(a){var b=t(a);return b._chain=!0,b};var Q=function(a,b){return a._chain?t(b).chain():b};t.mixin=function(a){t.each(t.functions(a),function(b){var c=t[b]=a[b];t.prototype[b]=function(){var a=[this._wrapped];return k.apply(a,arguments),Q(this,c.apply(t,a))}})},t.mixin(t),t.each(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=h[a];t.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!==a&&"splice"!==a||0!==c.length||delete c[0],Q(this,c)}}),t.each(["concat","join","slice"],function(a){var b=h[a];t.prototype[a]=function(){return Q(this,b.apply(this._wrapped,arguments))}}),t.prototype.value=function(){return this._wrapped},t.prototype.valueOf=t.prototype.toJSON=t.prototype.value,t.prototype.toString=function(){return""+this._wrapped},"function"==typeof c&&c.amd&&c("underscore",[],function(){return t})}.call(this),c("jquery",[],function(){return jQuery}),function(a){var d="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global;if("function"==typeof c&&c.amd)c("backbone",["underscore","jquery","exports"],function(b,c,e){d.Backbone=a(d,e,b,c)});else if("undefined"!=typeof exports){var e,f=b("underscore");try{e=b("jquery")}catch(g){}a(d,exports,f,e)}else d.Backbone=a(d,{},d._,d.jQuery||d.Zepto||d.ender||d.$)}(function(a,b,c,d){var e=a.Backbone,f=Array.prototype.slice;b.VERSION="1.3.3",b.$=d,b.noConflict=function(){return a.Backbone=e,this},b.emulateHTTP=!1,b.emulateJSON=!1;var g=function(a,b,d){switch(a){case 1:return function(){return c[b](this[d])};case 2:return function(a){return c[b](this[d],a)};case 3:return function(a,e){return c[b](this[d],i(a,this),e)};case 4:return function(a,e,f){return c[b](this[d],i(a,this),e,f)};default:return function(){var a=f.call(arguments);return a.unshift(this[d]),c[b].apply(c,a)}}},h=function(a,b,d){c.each(b,function(b,e){c[e]&&(a.prototype[e]=g(b,e,d))})},i=function(a,b){return c.isFunction(a)?a:c.isObject(a)&&!b._isModel(a)?j(a):c.isString(a)?function(b){return b.get(a)}:a},j=function(a){var b=c.matches(a);return function(a){return b(a.attributes)}},k=b.Events={},l=/\s+/,m=function(a,b,d,e,f){var g,h=0;if(d&&"object"==typeof d){void 0!==e&&"context"in f&&void 0===f.context&&(f.context=e);for(g=c.keys(d);hthis.length&&(e=this.length),e<0&&(e+=this.length+1);var f,g,h=[],i=[],j=[],k=[],l={},m=b.add,n=b.merge,o=b.remove,p=!1,q=this.comparator&&null==e&&b.sort!==!1,r=c.isString(this.comparator)?this.comparator:null;for(g=0;g7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(L,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var b=this.root.slice(0,-1)||"/";return this.location.replace(b+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var d=document.body,e=d.insertBefore(this.iframe,d.firstChild).contentWindow;e.document.open(),e.document.close(),e.location.hash="#"+this.fragment}var f=window.addEventListener||function(a,b){return attachEvent("on"+a,b)};if(this._usePushState?f("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?f("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var a=window.removeEventListener||function(a,b){return detachEvent("on"+a,b)};this._usePushState?a("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&a("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),J.started=!1},route:function(a,b){this.handlers.unshift({route:a,callback:b})},checkUrl:function(a){var b=this.getFragment();return b===this.fragment&&this.iframe&&(b=this.getHash(this.iframe.contentWindow)),b!==this.fragment&&(this.iframe&&this.navigate(b),void this.loadUrl())},loadUrl:function(a){return!!this.matchRoot()&&(a=this.fragment=this.getFragment(a),c.some(this.handlers,function(b){if(b.route.test(a))return b.callback(a),!0}))},navigate:function(a,b){if(!J.started)return!1;b&&b!==!0||(b={trigger:!!b}),a=this.getFragment(a||"");var c=this.root;""!==a&&"?"!==a.charAt(0)||(c=c.slice(0,-1)||"/");var d=c+a;if(a=this.decodeFragment(a.replace(M,"")),this.fragment!==a){if(this.fragment=a,this._usePushState)this.history[b.replace?"replaceState":"pushState"]({},document.title,d);else{if(!this._wantsHashChange)return this.location.assign(d);if(this._updateHash(this.location,a,b.replace),this.iframe&&a!==this.getHash(this.iframe.contentWindow)){var e=this.iframe.contentWindow;b.replace||(e.document.open(),e.document.close()),this._updateHash(e.location,a,b.replace)}}return b.trigger?this.loadUrl(a):void 0}},_updateHash:function(a,b,c){if(c){var d=a.href.replace(/(javascript:|#).*$/,"");a.replace(d+"#"+b)}else a.hash="#"+b}}),b.history=new J;var N=function(a,b){var d,e=this;return d=a&&c.has(a,"constructor")?a.constructor:function(){return e.apply(this,arguments)},c.extend(d,e,b),d.prototype=c.create(e.prototype,a),d.prototype.constructor=d,d.__super__=e.prototype,d};t.extend=v.extend=E.extend=A.extend=J.extend=N;var O=function(){throw new Error('A "url" property or function must be specified')},P=function(a,b){var c=b.error;b.error=function(d){c&&c.call(b.context,a,d,b),a.trigger("error",a,d,b)}};return b}),function(a){"function"==typeof c&&c.amd?c("backboneUndo",["underscore","backbone"],a):"undefined"!=typeof exports?module.exports=a(b("underscore"),b("backbone")):a(_,Backbone)}(function(a,b){function c(a,b,c){return c.length<=4?a.call(b,c[0],c[1],c[2],c[3]):a.apply(b,c)}function d(a,b){return n.call(a,b)}function e(b,c){return null!=b&&(a.isArray(c)||(c=d(arguments,1)),a.all(c,function(a){return a in b}))}function f(){this.registeredObjects=[],this.cidIndexes=[]}function g(b,c,d,e){for(var f,g=0,h=c.length;ga.maximumStackLength&&(a.shift(),a.pointer--)}}}function l(){}function m(b,c,d,f){if("object"==typeof c)return a.each(c,function(a,c){2===b?m(b,a,d,f):m(b,c,a,d)});switch(b){case 0:e(d,"undo","redo","on")&&a.all(a.pick(d,"undo","redo","on"),a.isFunction)&&(f[c]=d);break;case 1:f[c]&&a.isObject(d)&&(f[c]=a.extend({},f[c],d));break;case 2:delete f[c]}return this}var n=Array.prototype.slice,o=function(){function b(){d++,c=!0,a.defer(function(){c=!1})}var c=!1,d=-1;return function(){return c||b(),d}}();f.prototype={isRegistered:function(b){return b&&b.cid?this.registeredObjects[b.cid]:a.contains(this.registeredObjects,b)},register:function(a){return!this.isRegistered(a)&&(a&&a.cid?(this.registeredObjects[a.cid]=a,this.cidIndexes.push(a.cid)):this.registeredObjects.push(a),!0)},unregister:function(b){if(this.isRegistered(b)){if(b&&b.cid)delete this.registeredObjects[b.cid],this.cidIndexes.splice(a.indexOf(this.cidIndexes,b.cid),1);else{var c=a.indexOf(this.registeredObjects,b);this.registeredObjects.splice(c,1)}return!0}return!1},get:function(){return a.map(this.cidIndexes,function(a){return this.registeredObjects[a]},this).concat(this.registeredObjects)}};var p={add:{undo:function(a,b,c,d){a.remove(c,d)},redo:function(a,b,c,d){d.index&&(d.at=d.index),a.add(c,d)},on:function(b,c,d){return{object:c,before:void 0,after:b,options:a.clone(d)}}},remove:{undo:function(a,b,c,d){"index"in d&&(d.at=d.index),a.add(b,d)},redo:function(a,b,c,d){a.remove(b,d)},on:function(b,c,d){return{object:c,before:b,after:void 0,options:a.clone(d)}}},change:{undo:function(b,c,d,e){a.isEmpty(c)?a.each(a.keys(d),b.unset,b):(b.set(c),e&&e.unsetData&&e.unsetData.before&&e.unsetData.before.length&&a.each(e.unsetData.before,b.unset,b))},redo:function(b,c,d,e){a.isEmpty(d)?a.each(a.keys(c),b.unset,b):(b.set(d),e&&e.unsetData&&e.unsetData.after&&e.unsetData.after.length&&a.each(e.unsetData.after,b.unset,b))},on:function(b,c){var d=b.changedAttributes(),e=a.keys(d),f=a.pick(b.previousAttributes(),e),g=a.keys(f),h=(c||(c={})).unsetData={after:[],before:[]};return e.length!=g.length&&(e.length>g.length?a.each(e,function(a){a in f||h.before.push(a)},this):a.each(g,function(a){a in d||h.after.push(a)})),{object:b,before:f,after:d,options:a.clone(c)}}},reset:{undo:function(a,b,c){a.reset(b)},redo:function(a,b,c){a.reset(c)},on:function(b,c){return{object:b,before:c.previousModels,after:a.clone(b.models)}}}};l.prototype=p;var q=b.Model.extend({defaults:{type:null,object:null,before:null,after:null,magicFusionIndex:null},undo:function(a){h("undo",this.attributes)},redo:function(a){h("redo",this.attributes)}}),r=b.Collection.extend({model:q,pointer:-1,track:!1,isCurrentlyUndoRedoing:!1,maximumStackLength:1/0,setMaxLength:function(a){this.maximumStackLength=a}}),s=b.Model.extend({defaults:{maximumStackLength:1/0,track:!1},initialize:function(b){this.stack=new r,this.objectRegistry=new f,this.undoTypes=new l,this.stack.setMaxLength(this.get("maximumStackLength")),this.on("change:maximumStackLength",function(a,b){this.stack.setMaxLength(b)},this),b&&b.track&&this.startTracking(),b&&b.register&&(a.isArray(b.register)||a.isArguments(b.register)?c(this.register,this,b.register):this.register(b.register))},startTracking:function(){this.set("track",!0),this.stack.track=!0},stopTracking:function(){this.set("track",!1),this.stack.track=!1},isTracking:function(){return this.get("track")},_addToStack:function(a){k(this.stack,a,d(arguments,1),this.undoTypes)},register:function(){g("on",arguments,this._addToStack,this)},unregister:function(){g("off",arguments,this._addToStack,this)},unregisterAll:function(){c(this.unregister,this,this.objectRegistry.get())},undo:function(a){i("undo",this,this.stack,a)},undoAll:function(){i("undo",this,this.stack,!1,!0)},redo:function(a){i("redo",this,this.stack,a)},redoAll:function(){i("redo",this,this.stack,!1,!0)},isAvailable:function(a){var b=this.stack,c=b.length;switch(a){case"undo":return c>0&&b.pointer>-1;case"redo":return c>0&&b.pointer0;for(f in v)(!v[f]&&b(e.mods,+f)>-1||v[f]&&b(e.mods,+f)==-1)&&(i=!1);(0!=e.mods.length||v[16]||v[18]||v[17]||v[91])&&!i||e.method(a,e)===!1&&(a.preventDefault?a.preventDefault():a.returnValue=!1,a.stopPropagation&&a.stopPropagation(),a.cancelBubble&&(a.cancelBubble=!0))}}function f(a){var c,d=a.keyCode,e=b(A,d);if(e>=0&&A.splice(e,1),93!=d&&224!=d||(d=91),d in v){v[d]=!1;for(c in x)x[c]==d&&(h[c]=!1)}}function g(){for(t in v)v[t]=!1;for(t in x)h[t]=!1}function h(a,b,c){var d,e;d=p(a),void 0===c&&(c=b,b="all");for(var f=0;f1&&(e=q(a),a=[a[a.length-1]]),a=a[0],a=z(a),a in u||(u[a]=[]),u[a].push({shortcut:d[f],scope:b,method:c,key:d[f],mods:e})}function i(a,b){var d,e,f,g,h,i=[];for(d=p(a),g=0;g1&&(i=q(e),a=e[e.length-1]),a=z(a),void 0===b&&(b=n()),!u[a])return;for(f=0;fg||g>h+j-e||i+e>f||f>i+k-e)&&(d=1),!!d},findPosition:function(a,b,c){for(var d={index:0,method:"before"},e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=a.length;mf||h&&j>=h||e&&gg?d.h=Math.round(d.w/g):d.w=Math.round(d.h*g)}return~e.indexOf("l")&&(d.l=c.w-d.w),~e.indexOf("t")&&(d.t=c.h-d.h),d}}}}),c("Utils/main",["require","./Sorter","./Resizer"],function(a){var b=function(){var b=a("./Sorter"),c=a("./Resizer");return{name:"Utils",init:function(){return this},Sorter:b,Resizer:c}};return b}),c("Utils",["Utils/main"],function(a){return a}),c("StorageManager/config/config",[],function(){return{id:"gjs-",autosave:1,autoload:1,type:"local",stepsBeforeSave:1,storeComponents:!1,storeStyles:!1,storeHtml:!0,storeCss:!0,checkLocal:!0,params:{},urlStore:"",urlLoad:"",beforeSend:function(a,b){},onComplete:function(a,b){},contentTypeJson:!1}}),c("StorageManager/model/LocalStorage",["backbone"],function(a){return a.Model.extend({defaults:{checkLocal:!0},store:function(a,b){this.checkStorageEnvironment();for(var c in a)localStorage.setItem(c,a[c]);"function"==typeof b&&b()},load:function(a){this.checkStorageEnvironment();for(var b={},c=0,d=a.length;c/im,j=/]*>\s*([\s\S]+)\s*<\/body>/im,k="undefined"!=typeof location&&location.href,l=k&&location.protocol&&location.protocol.replace(/\:/,""),m=k&&location.hostname,n=k&&(location.port||void 0),o={},p=a.config&&a.config()||{};return c={version:"2.0.12",strip:function(a){if(a){a=a.replace(i,"");var b=a.match(j);b&&(a=b[1])}else a="";return a},jsEscape:function(a){return a.replace(/(['\\])/g,"\\$1").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r").replace(/[\u2028]/g,"\\u2028").replace(/[\u2029]/g,"\\u2029")},createXhr:p.createXhr||function(){var a,b,c;if("undefined"!=typeof XMLHttpRequest)return new XMLHttpRequest;if("undefined"!=typeof ActiveXObject)for(b=0;b<3;b+=1){c=h[b];try{a=new ActiveXObject(c)}catch(d){}if(a){h=[c];break}}return a},parseName:function(a){var b,c,d,e=!1,f=a.indexOf("."),g=0===a.indexOf("./")||0===a.indexOf("../");return f!==-1&&(!g||f>1)?(b=a.substring(0,f),c=a.substring(f+1,a.length)):b=a,d=c||b,f=d.indexOf("!"),f!==-1&&(e="strip"===d.substring(f+1),d=d.substring(0,f),c?c=d:b=d),{moduleName:b,ext:c,strip:e}},xdRegExp:/^((\w+)\:)?\/\/([^\/\\]+)/,useXhr:function(a,b,d,e){var f,g,h,i=c.xdRegExp.exec(a);return!i||(f=i[2],g=i[3],g=g.split(":"),h=g[1],g=g[0],!(f&&f!==b||g&&g.toLowerCase()!==d.toLowerCase()||(h||g)&&h!==e))},finishLoad:function(a,b,d,e){d=b?c.strip(d):d,p.isBuild&&(o[a]=d),e(d)},load:function(a,b,d,e){if(e&&e.isBuild&&!e.inlineText)return void d();p.isBuild=e&&e.isBuild;var f=c.parseName(a),g=f.moduleName+(f.ext?"."+f.ext:""),h=b.toUrl(g),i=p.useXhr||c.useXhr;return 0===h.indexOf("empty:")?void d():void(!k||i(h,l,m,n)?c.get(h,function(b){c.finishLoad(a,f.strip,b,d)},function(a){d.error&&d.error(a)}):b([g],function(a){c.finishLoad(f.moduleName+"."+f.ext,f.strip,a,d)}))},write:function(a,b,d,e){if(o.hasOwnProperty(b)){var f=c.jsEscape(o[b]);d.asModule(a+"!"+b,"define(function () { return '"+f+"';});\n")}},writeFile:function(a,b,d,e,f){var g=c.parseName(b),h=g.ext?"."+g.ext:"",i=g.moduleName+h,j=d.toUrl(g.moduleName+h)+".js";c.load(i,d,function(b){var d=function(a){return e(j,a)};d.asModule=function(a,b){return e.asModule(a,j,b)},c.write(a,i,d,f)},f)}},"node"===p.env||!p.env&&"undefined"!=typeof process&&process.versions&&process.versions.node&&!process.versions["node-webkit"]?(d=b.nodeRequire("fs"),c.get=function(a,b,c){try{var e=d.readFileSync(a,"utf8");0===e.indexOf("\ufeff")&&(e=e.substring(1)),b(e)}catch(f){c&&c(f)}}):"xhr"===p.env||!p.env&&c.createXhr()?c.get=function(a,b,d,e){var f,g=c.createXhr();if(g.open("GET",a,!0),e)for(f in e)e.hasOwnProperty(f)&&g.setRequestHeader(f.toLowerCase(),e[f]);p.onXhr&&p.onXhr(g,a),g.onreadystatechange=function(c){var e,f;4===g.readyState&&(e=g.status||0,e>399&&e<600?(f=new Error(a+" HTTP status: "+e),f.xhr=g,d&&d(f)):b(g.responseText),p.onXhrComplete&&p.onXhrComplete(g,a))},g.send(null)}:"rhino"===p.env||!p.env&&"undefined"!=typeof Packages&&"undefined"!=typeof java?c.get=function(a,b){var c,d,e="utf-8",f=new java.io.File(a),g=java.lang.System.getProperty("line.separator"),h=new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(f),e)),i="";try{for(c=new java.lang.StringBuffer,d=h.readLine(),d&&d.length()&&65279===d.charAt(0)&&(d=d.substring(1)),null!==d&&c.append(d);null!==(d=h.readLine());)c.append(g),c.append(d);i=String(c.toString())}finally{h.close()}b(i)}:("xpconnect"===p.env||!p.env&&"undefined"!=typeof Components&&Components.classes&&Components.interfaces)&&(e=Components.classes,f=Components.interfaces,Components.utils["import"]("resource://gre/modules/FileUtils.jsm"),g="@mozilla.org/windows-registry-key;1"in e,c.get=function(a,b){var c,d,h,i={};g&&(a=a.replace(/\//g,"\\")),h=new FileUtils.File(a);try{c=e["@mozilla.org/network/file-input-stream;1"].createInstance(f.nsIFileInputStream),c.init(h,1,0,!1),d=e["@mozilla.org/intl/converter-input-stream;1"].createInstance(f.nsIConverterInputStream),d.init(c,"utf-8",c.available(),f.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER),d.readString(c.available(),i),d.close(),c.close(),b(i.value)}catch(j){throw new Error((h&&h.path||"")+": "+j)}}),c}),c("text!DeviceManager/template/devices.html",[],function(){return'
    <%= deviceLabel %>
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n'}),c("DeviceManager/view/DevicesView",["backbone","text!./../template/devices.html"],function(a,b){return a.View.extend({template:_.template(b),events:{change:"updateDevice"},initialize:function(a){this.config=a.config||{},this.em=this.config.em,this.ppfx=this.config.pStylePrefix||"",this.events["click ."+this.ppfx+"add-trasp"]=this.startAdd,this.listenTo(this.em,"change:device",this.updateSelect),this.delegateEvents()},startAdd:function(){},updateDevice:function(){var a=this.em;if(a){var b=this.devicesEl,c=b?b.val():"";a.set("device",c)}},updateSelect:function(){var a=this.em,b=this.devicesEl;if(a&&a.getDeviceModel&&b){var c=a.getDeviceModel(),d=c?c.get("name"):"";b.val(d)}},getOptions:function(){var a="";return this.collection.each(function(b){var c=b.get("name");a+='"}),a},render:function(){var a=this.ppfx;return this.$el.html(this.template({ppfx:a,deviceLabel:this.config.deviceLabel})),this.devicesEl=this.$el.find("."+a+"devices"),this.devicesEl.append(this.getOptions()),this.el.className=a+"devices-c",this}})}),c("DeviceManager/main",["require","./config/config","./model/Devices","./view/DevicesView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Devices"),g=a("./view/DevicesView");return{name:"DeviceManager",init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);return b=new f(d.devices),c=new g({collection:b,config:d}),this},add:function(a,c,d){var e=d||{};return e.name=a,e.width=c,b.add(e)},get:function(a){return b.get(a)},getAll:function(){return b},render:function(){return c.render().el}}}}),c("DeviceManager",["DeviceManager/main"],function(a){return a}),c("Parser/config/config",[],function(){return{textTags:["br","b","i","u"]}}),c("Parser/model/ParserCss",["require"],function(a){return function(a){return{parseSelector:function(a){for(var b=[],c=[],d=a.split(","),e=0,f=d.length;e\n
    <%= label %>
    \n
    \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    Selected
    \n
    \n
    \n
    \n'}),c("text!SelectorManager/template/classTag.html",[],function(){return'\n \n />\n \n'}),c("SelectorManager/view/ClassTagView",["backbone","text!./../template/classTag.html"],function(a,b){return a.View.extend({template:_.template(b),events:{},initialize:function(a){this.config=a.config||{},this.coll=a.coll||null,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.inputProp="readonly",this.target=this.config.em,this.className=this.pfx+"tag",this.closeId=this.pfx+"close",this.chkId=this.pfx+"checkbox",this.labelId=this.pfx+"tag-label",this.events["click #"+this.closeId]="removeTag",this.events["click #"+this.chkId]="changeStatus",this.events["dblclick #"+this.labelId]="startEditTag",this.events["keypress #"+this.labelId+" input"]="updateInputLabel",this.events["blur #"+this.labelId+" input"]="endEditTag",this.listenTo(this.model,"change:active",this.updateStatus),this.delegateEvents()},startEditTag:function(){this.$labelInput.prop(this.inputProp,!1)},endEditTag:function(){var a=this.$labelInput.val(),b=this.model.escapeName(a);if(this.target){var c=this.target.get("SelectorManager");c&&(c.get(b)?this.$labelInput.val(this.model.get("label")):this.model.set({name:b,label:a}))}this.$labelInput.prop(this.inputProp,!0)},changeStatus:function(){this.model.set("active",!this.model.get("active")),this.target.trigger("targetClassUpdated")},removeTag:function(a){var b=this.target.get("selectedComponent");b&&b.get("classes").remove(this.model),this.coll&&(this.coll.remove(this.model),this.target.trigger("targetClassRemoved")),this.remove()},updateStatus:function(){this.$chk||(this.$chk=this.$el.find("#"+this.pfx+"checkbox")),this.model.get("active")?(this.$chk.removeClass("fa-circle-o").addClass("fa-dot-circle-o"),this.$el.removeClass("opac50")):(this.$chk.removeClass("fa-dot-circle-o").addClass("fa-circle-o"),this.$el.addClass("opac50"))},updateInputLabel:function(){this.$labelInput||(this.$labelInput=this.$el.find("input"));var a=this.$labelInput.val().length-1;a=a<1?1:a,this.$labelInput.attr("size",a)},render:function(){return this.$el.html(this.template({label:this.model.get("label"),pfx:this.pfx,ppfx:this.ppfx,inputProp:this.inputProp})),this.updateStatus(),this.$el.attr("class",this.className),this.updateInputLabel(),this}})}),c("SelectorManager/view/ClassTagsView",["backbone","text!./../template/classTags.html","./ClassTagView"],function(a,b,c){return a.View.extend({template:_.template(b),events:{},initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.className=this.pfx+"tags",this.addBtnId=this.pfx+"add-tag",this.newInputId=this.pfx+"new",this.stateInputId=this.pfx+"states",this.stateInputC=this.pfx+"input-c",this.states=this.config.states||[],this.events["click #"+this.addBtnId]="startNewTag",this.events["blur #"+this.newInputId]="endNewTag",this.events["keyup #"+this.newInputId]="onInputKeyUp",this.events["change #"+this.stateInputId]="stateChanged",this.target=this.config.em,this.listenTo(this.target,"change:selectedComponent",this.componentChanged),this.listenTo(this.target,"targetClassUpdated",this.updateSelector),this.listenTo(this.collection,"add",this.addNew),this.listenTo(this.collection,"reset",this.renderClasses),this.listenTo(this.collection,"remove",this.tagRemoved),this.delegateEvents()},tagRemoved:function(a){this.updateStateVis()},getStateOptions:function(){for(var a="",b=0;b'+this.states[b].label+"";return a},addNew:function(a){this.addToClasses(a)},startNewTag:function(a){this.$addBtn.hide(),this.$input.show().focus()},endNewTag:function(a){this.$addBtn.show(),this.$input.hide().val("")},onInputKeyUp:function(a){13===a.keyCode?this.addNewTag(this.$input.val()):27===a.keyCode&&this.endNewTag()},componentChanged:function(a){this.compTarget=this.target.get("selectedComponent"),this.compTarget&&this.getStates().val(this.compTarget.get("state"));var b=this.compTarget?this.compTarget.get("classes").models:[];this.collection.reset(b),this.updateStateVis()},updateStateVis:function(){this.collection.length?this.getStatesC().css("display","block"):this.getStatesC().css("display","none"),this.updateSelector()},updateSelector:function(){if(this.compTarget=this.target.get("selectedComponent"),this.compTarget&&this.compTarget.get){var a="",b=this.compTarget.get("classes");b.each(function(b){b.get("active")&&(a+="."+b.get("name"))});var c=this.compTarget.get("state");a=c?a+":"+c:a;var d=this.el.querySelector("#"+this.pfx+"sel");d&&(d.innerHTML=a)}},stateChanged:function(a){this.compTarget&&(this.compTarget.set("state",this.$states.val()),this.target&&this.target.trigger("targetStateUpdated"),this.updateSelector())},addNewTag:function(a){if(a){if(this.target){var b=this.target.get("SelectorManager"),c=b.add(a);if(this.compTarget){var d=this.compTarget.get("classes"),e=d.length;d.add(c);var f=d.length;this.collection.add(c),f>e&&this.target.trigger("targetClassAdded"),this.updateStateVis()}}this.endNewTag()}},addToClasses:function(a,b){var d=b||null,e=new c({model:a,config:this.config,coll:this.collection}),f=e.render().el;return d?d.appendChild(f):this.getClasses().append(f),f},renderClasses:function(){var a=document.createDocumentFragment();return this.collection.each(function(b){this.addToClasses(b,a)},this),this.getClasses()&&this.getClasses().empty().append(a),this},getClasses:function(){return this.$classes||(this.$classes=this.$el.find("#"+this.pfx+"tags-c")),this.$classes},getStates:function(){return this.$states||(this.$states=this.$el.find("#"+this.stateInputId)),this.$states},getStatesC:function(){return this.$statesC||(this.$statesC=this.$el.find("#"+this.stateInputC)),this.$statesC},render:function(){return this.$el.html(this.template({label:this.config.label,statesLabel:this.config.statesLabel,pfx:this.pfx,ppfx:this.ppfx})),this.$input=this.$el.find("input#"+this.newInputId),this.$addBtn=this.$el.find("#"+this.addBtnId),this.$classes=this.$el.find("#"+this.pfx+"tags-c"),this.$states=this.$el.find("#"+this.stateInputId),this.$statesC=this.$el.find("#"+this.stateInputC),this.$states.append(this.getStateOptions()),this.renderClasses(),this.$el.attr("class",this.className),this}})}),c("SelectorManager/main",["require","./config/config","./model/Selectors","./view/ClassTagsView"],function(a){return function(b){var c=b||{},d=a("./config/config");Selectors=a("./model/Selectors"),ClassTagsView=a("./view/ClassTagsView");var e,f;return{name:"SelectorManager",init:function(a){c=a||{};for(var b in d)b in c||(c[b]=d[b]);var g=c.pStylePrefix;return g&&(c.stylePrefix=g+c.stylePrefix),e=new Selectors(c.selectors,{em:c.em,config:c}),f=new ClassTagsView({collection:e,config:c}),this},add:function(a,b){var c=b||{};return c.name=a.name||a,e.add(c)},get:function(a){return e.where({name:a})[0]},getAll:function(){return e},render:function(a){if(a){var b=new ClassTagsView({collection:new Selectors(a),config:c});return b.render().el}return f.render().el}}}}),c("SelectorManager",["SelectorManager/main"],function(a){return a}),c("ModalDialog/config/config",[],function(){return{stylePrefix:"mdl-",title:"",content:"",backdrop:!0}}),c("ModalDialog/model/Modal",["backbone"],function(a){return a.Model.extend({ +defaults:{title:"",content:"",open:!1}})}),c("text!ModalDialog/template/modal.html",[],function(){return'
    \n
    \n
    <%= title %>
    \n
    \n
    \n
    \n
    <%= content %>
    \n
    \n
    \n
    \n
    \n\n'}),c("ModalDialog/view/ModalView",["backbone","text!./../template/modal.html"],function(a,b){return a.View.extend({template:_.template(b),events:{},initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.listenTo(this.model,"change:open",this.updateOpen),this.listenTo(this.model,"change:title",this.updateTitle),this.listenTo(this.model,"change:content",this.updateContent),this.events["click ."+this.pfx+"btn-close"]="hide",this.config.backdrop&&(this.events["click ."+this.pfx+"backlayer"]="hide"),this.delegateEvents()},getCollector:function(){return this.$collector||(this.$collector=this.$el.find("."+this.pfx+"collector")),this.$collector},getContent:function(){return this.$content||(this.$content=this.$el.find("."+this.pfx+"content #"+this.pfx+"c")),this.$content},getTitle:function(){return this.$title||(this.$title=this.$el.find("."+this.pfx+"title")),this.$title.get(0)},updateContent:function(){var a=this.getContent();this.getCollector().append(a.children()),a.html(this.model.get("content"))},updateTitle:function(){var a=this.getTitle();a&&(a.innerHTML=this.model.get("title"))},updateOpen:function(){this.model.get("open")?this.$el.show():this.$el.hide()},hide:function(){this.model.set("open",0)},show:function(){this.model.set("open",1)},render:function(){var a=this.model.toJSON();return a.pfx=this.pfx,this.$el.html(this.template(a)),this.$el.attr("class",this.pfx+"container"),this.updateOpen(),this}})}),c("ModalDialog/main",["require","./config/config","./model/Modal","./view/ModalView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Modal"),g=a("./view/ModalView");return{name:"Modal",init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);var i=d.pStylePrefix;return i&&(d.stylePrefix=i+d.stylePrefix),b=new f(d),c=new g({model:b,config:d}),d.em&&d.em.on("loaded",function(){this.render().appendTo(d.em.config.el||"body")},this),this},open:function(){return c.show(),this},close:function(){return c.hide(),this},isOpen:function(){return!!b.get("open")},setTitle:function(a){return b.set("title",a),this},getTitle:function(){return b.get("title")},setContent:function(a){return b.set("content"," "),b.set("content",a),this},getContent:function(){return b.get("content")},getContentEl:function(){return c.getContent().get(0)},getModel:function(){return b},render:function(){return c.render().$el}}}}),c("ModalDialog",["ModalDialog/main"],function(a){return a}),c("CodeManager/config/config",[],function(){return{stylePrefix:"cm-",inlineCss:!1}}),c("CodeManager/model/HtmlGenerator",["backbone"],function(a){return a.Model.extend({build:function(a,b){var c=a.get("components")||a,d="";return c.each(function(a){d+=a.toHTML({cssc:b})},this),d}})}),c("CodeManager/model/CssGenerator",["backbone"],function(a){return a.Model.extend({initialize:function(){this.compCls=[]},buildFromModel:function(a){var b="",c=a.get("style"),d=a.get("classes");if(d&&d.each(function(a){this.compCls.push(a.get("name"))},this),c&&0!==Object.keys(c).length){b+="#"+a.cid+"{";for(var e in c)c.hasOwnProperty(e)&&(b+=e+":"+c[e]+";");b+="}"}return b},buildFromComp:function(a){var b=a.get("components")||a,c="";return b.each(function(a){var b=a.get("components");c+=this.buildFromModel(a),b.length&&(c+=this.buildFromComp(b))},this),c},build:function(a,b){this.compCls=[];var c=this.buildFromModel(a);c+=this.buildFromComp(a);this.compCls;if(b){var d=b.getAll(),e={};d.each(function(a){var b=a.get("mediaText");if(b){var d=e[b];return void(d?d.push(a):e[b]=[a])}c+=this.buildFromRule(a)},this);for(var f in e){for(var g=e[f],h="",i=0,j=g.length;i-1&&(h=1)}),g&&h||c){g+=f?":"+f:"",g+=c?(g?", ":"")+c:"";var j="";if(e&&0!==Object.keys(e).length)for(var k in e)e.hasOwnProperty(k)&&(j+=k+":"+e[k]+";");j&&(b+=g+"{"+j+"}")}return b}})}),c("CodeManager/model/JsonGenerator",["backbone"],function(a){return a.Model.extend({build:function(b){var c=b.toJSON();return this.beforeEach(c),_.each(c,function(b,d){var e=c[d];if(e instanceof a.Model)c[d]=this.build(e);else if(e instanceof a.Collection){var f=e;c[d]=[],f.length&&f.each(function(a,b){c[d][b]=this.build(a)},this)}},this),c},beforeEach:function(a){delete a.status}})}),c("CodeManager/model/JsGenerator",["backbone"],function(a){return a.Model.extend({mapModel:function(a){var b="",c=a.get("script"),d=a.get("type"),e=a.get("components"),f=a.cid;if(c){var g=a.get("attributes");g=_.extend({},g,{id:f}),a.set("attributes",g);var h="function(){"+c+"}";if(h="function"==typeof c?c.toString():h,a.get("scriptUpdated"))this.mapJs[d+"-"+f]={ids:[f],code:h};else{var i=this.mapJs[d];i?i.ids.push(f):this.mapJs[d]={ids:[f],code:h}}}return e.each(function(a){b+=this.mapModel(a)},this),b},build:function(a){this.mapJs={},this.mapModel(a);var b="";for(var c in this.mapJs){var d=this.mapJs[c],e="#"+d.ids.join(", #");b+='var items = document.querySelectorAll("'+e+'");for (var i = 0, len = items.length; i < len; i++) {('+d.code+".bind(items[i]))();}"}return b}})}),function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof c&&c.amd?c("codemirror/lib/codemirror",b):a.CodeMirror=b()}(this,function(){"use strict";function a(a){return new RegExp("(^|\\s)"+a+"(?:$|\\s)\\s*")}function b(a){for(var b=a.childNodes.length;b>0;--b)a.removeChild(a.firstChild);return a}function c(a,c){return b(a).appendChild(c)}function d(a,b,c,d){var e=document.createElement(a);if(c&&(e.className=c),d&&(e.style.cssText=d),"string"==typeof b)e.appendChild(document.createTextNode(b));else if(b)for(var f=0;f=b)return g+(b-f);g+=h-f,g+=c-g%c,f=h+1}}function l(){this.id=null}function m(a,b){for(var c=0;c=b)return d+Math.min(g,b-e);if(e+=f-d,e+=c-e%c,d=f+1,e>=b)return d}}function o(a){for(;Hg.length<=a;)Hg.push(p(Hg)+" ");return Hg[a]}function p(a){return a[a.length-1]}function q(a,b){for(var c=[],d=0;d"€"&&(a.toUpperCase()!=a.toLowerCase()||Ig.test(a))}function v(a,b){return b?!!(b.source.indexOf("\\w")>-1&&u(a))||b.test(a):u(a)}function w(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function x(a){return a.charCodeAt(0)>=768&&Jg.test(a)}function y(a,b,c){var e=this;this.input=c,e.scrollbarFiller=d("div",null,"CodeMirror-scrollbar-filler"),e.scrollbarFiller.setAttribute("cm-not-content","true"),e.gutterFiller=d("div",null,"CodeMirror-gutter-filler"),e.gutterFiller.setAttribute("cm-not-content","true"),e.lineDiv=d("div",null,"CodeMirror-code"),e.selectionDiv=d("div",null,null,"position: relative; z-index: 1"),e.cursorDiv=d("div",null,"CodeMirror-cursors"),e.measure=d("div",null,"CodeMirror-measure"),e.lineMeasure=d("div",null,"CodeMirror-measure"),e.lineSpace=d("div",[e.measure,e.lineMeasure,e.selectionDiv,e.cursorDiv,e.lineDiv],null,"position: relative; outline: none"),e.mover=d("div",[d("div",[e.lineSpace],"CodeMirror-lines")],null,"position: relative"),e.sizer=d("div",[e.mover],"CodeMirror-sizer"),e.sizerWidth=null,e.heightForcer=d("div",null,null,"position: absolute; height: "+Cg+"px; width: 1px;"),e.gutters=d("div",null,"CodeMirror-gutters"),e.lineGutter=null,e.scroller=d("div",[e.sizer,e.heightForcer,e.gutters],"CodeMirror-scroll"),e.scroller.setAttribute("tabIndex","-1"),e.wrapper=d("div",[e.scrollbarFiller,e.gutterFiller,e.scroller],"CodeMirror"),gg&&hg<8&&(e.gutters.style.zIndex=-1,e.scroller.style.paddingRight=0),ig||dg&&qg||(e.scroller.draggable=!0),a&&(a.appendChild?a.appendChild(e.wrapper):a(e.wrapper)),e.viewFrom=e.viewTo=b.first,e.reportedViewFrom=e.reportedViewTo=b.first,e.view=[],e.renderedView=null,e.externalMeasured=null,e.viewOffset=0,e.lastWrapHeight=e.lastWrapWidth=0,e.updateLineNumbers=null,e.nativeBarWidth=e.barHeight=e.barWidth=0,e.scrollbarsClipped=!1,e.lineNumWidth=e.lineNumInnerWidth=e.lineNumChars=null,e.alignWidgets=!1,e.cachedCharWidth=e.cachedTextHeight=e.cachedPaddingH=null,e.maxLine=null,e.maxLineLength=0,e.maxLineChanged=!1,e.wheelDX=e.wheelDY=e.wheelStartX=e.wheelStartY=null,e.shift=!1,e.selForContextMenu=null,e.activeTouch=null,c.init(e)}function z(a,b){if(b-=a.first,b<0||b>=a.size)throw new Error("There is no line "+(b+a.first)+" in the document.");for(var c=a;!c.lines;)for(var d=0;;++d){var e=c.children[d],f=e.chunkSize();if(b=a.first&&bc?H(c,z(a,c).text.length):O(b,z(a,b.line).text.length)}function O(a,b){var c=a.ch;return null==c||c>b?H(a.line,b):c<0?H(a.line,0):a}function P(a,b){for(var c=[],d=0;d=b:f.to>b);(d||(d=[])).push(new S(g,f.from,i?null:f.to))}}return d}function X(a,b,c){var d;if(a)for(var e=0;e=b:f.to>b);if(h||f.from==b&&"bookmark"==g.type&&(!c||f.marker.insertLeft)){var i=null==f.from||(g.inclusiveLeft?f.from<=b:f.from0&&h)for(var v=0;v0)){var k=[i,1],l=I(j.from,h.from),n=I(j.to,h.to);(l<0||!g.inclusiveLeft&&!l)&&k.push({from:j.from,to:h.from}),(n>0||!g.inclusiveRight&&!n)&&k.push({from:h.to,to:j.to}),e.splice.apply(e,k),i+=k.length-1}}return e}function _(a){var b=a.markedSpans;if(b){for(var c=0;c=0&&l<=0||k<=0&&l>=0)&&(k<=0&&(i.marker.inclusiveRight&&e.inclusiveLeft?I(j.to,c)>=0:I(j.to,c)>0)||k>=0&&(i.marker.inclusiveRight&&e.inclusiveLeft?I(j.from,d)<=0:I(j.from,d)<0)))return!0}}}function ia(a){for(var b;b=fa(a);)a=b.find(-1,!0).line;return a}function ja(a){for(var b,c;b=ga(a);)a=b.find(1,!0).line,(c||(c=[])).push(a);return c}function ka(a,b){var c=z(a,b),d=ia(c);return c==d?b:D(d)}function la(a,b){if(b>a.lastLine())return b;var c,d=z(a,b);if(!ma(a,d))return b;for(;c=ga(d);)d=c.find(1,!0).line;return D(d)+1}function ma(a,b){var c=Lg&&b.markedSpans;if(c)for(var d=void 0,e=0;eb.maxLineLength&&(b.maxLineLength=c,b.maxLine=a)})}function ra(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;fb||b==c&&g.to==b)&&(d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?"rtl":"ltr"),e=!0)}e||d(b,c,"ltr")}function sa(a){return a.level%2?a.to:a.from}function ta(a){return a.level%2?a.from:a.to}function ua(a){var b=Ba(a);return b?sa(b[0]):0}function va(a){var b=Ba(a);return b?ta(p(b)):a.text.length}function wa(a,b,c){var d=a[0].level;return b==d||c!=d&&bb)return d;if(e.from==b||e.to==b){if(null!=c)return wa(a,e.level,a[c].level)?(e.from!=e.to&&(Mg=c),d):(e.from!=e.to&&(Mg=d),c);c=d}}return c}function ya(a,b,c,d){if(!d)return b+c;do b+=c;while(b>0&&x(a.text.charAt(b)));return b}function za(a,b,c,d){var e=Ba(a);if(!e)return Aa(a,b,c,d);for(var f=xa(e,b),g=e[f],h=ya(a,b,g.level%2?-c:c,d);;){if(h>g.from&&h0==g.level%2?g.to:g.from);if(g=e[f+=c],!g)return null;h=c>0==g.level%2?ya(a,g.to,-1,d):ya(a,g.from,1,d)}}function Aa(a,b,c,d){var e=b+c;if(d)for(;e>0&&x(a.text.charAt(e));)e+=c;return e<0||e>a.text.length?null:e}function Ba(a){var b=a.order;return null==b&&(b=a.order=Ng(a.text)),b}function Ca(a,b){return a._handlers&&a._handlers[b]||Og}function Da(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,!1);else if(a.detachEvent)a.detachEvent("on"+b,c);else{var d=a._handlers,e=d&&d[b];if(e){var f=m(e,c);f>-1&&(d[b]=e.slice(0,f).concat(e.slice(f+1)))}}}function Ea(a,b){var c=Ca(a,b);if(c.length)for(var d=Array.prototype.slice.call(arguments,2),e=0;e0}function Ia(a){a.prototype.on=function(a,b){Pg(this,a,b)},a.prototype.off=function(a,b){Da(this,a,b)}}function Ja(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function Ka(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function La(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.returnValue}function Ma(a){Ja(a),Ka(a)}function Na(a){return a.target||a.srcElement}function Oa(a){var b=a.which;return null==b&&(1&a.button?b=1:2&a.button?b=3:4&a.button&&(b=2)),rg&&a.ctrlKey&&1==b&&(b=3),b}function Pa(a){if(null==Ag){var b=d("span","​");c(a,d("span",[b,document.createTextNode("x")])),0!=a.firstChild.offsetHeight&&(Ag=b.offsetWidth<=1&&b.offsetHeight>2&&!(gg&&hg<8))}var e=Ag?d("span","​"):d("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return e.setAttribute("cm-text",""),e}function Qa(a){if(null!=Bg)return Bg;var d=c(a,document.createTextNode("AخA")),e=vg(d,0,1).getBoundingClientRect(),f=vg(d,1,2).getBoundingClientRect();return b(a),!(!e||e.left==e.right)&&(Bg=f.right-e.right<3)}function Ra(a){if(null!=Ug)return Ug;var b=c(a,d("span","x")),e=b.getBoundingClientRect(),f=vg(b,0,1).getBoundingClientRect();return Ug=Math.abs(e.left-f.left)>1}function Sa(a,b){arguments.length>2&&(b.dependencies=Array.prototype.slice.call(arguments,2)),Vg[a]=b}function Ta(a,b){Wg[a]=b}function Ua(a){if("string"==typeof a&&Wg.hasOwnProperty(a))a=Wg[a];else if(a&&"string"==typeof a.name&&Wg.hasOwnProperty(a.name)){var b=Wg[a.name];"string"==typeof b&&(b={name:b}),a=t(b,a),a.name=b.name}else{if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a))return Ua("application/xml");if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+json$/.test(a))return Ua("application/json")}return"string"==typeof a?{name:a}:a||{name:"null"}}function Va(a,b){b=Ua(b);var c=Vg[b.name];if(!c)return Va(a,"text/plain");var d=c(a,b);if(Xg.hasOwnProperty(b.name)){var e=Xg[b.name];for(var f in e)e.hasOwnProperty(f)&&(d.hasOwnProperty(f)&&(d["_"+f]=d[f]),d[f]=e[f])}if(d.name=b.name,b.helperType&&(d.helperType=b.helperType),b.modeProps)for(var g in b.modeProps)d[g]=b.modeProps[g];return d}function Wa(a,b){var c=Xg.hasOwnProperty(a)?Xg[a]:Xg[a]={};j(b,c)}function Xa(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c}function Ya(a,b){for(var c;a.innerMode&&(c=a.innerMode(b),c&&c.mode!=a);)b=c.state,a=c.mode;return c||{mode:a,state:b}}function Za(a,b,c){return!a.startState||a.startState(b,c)}function $a(a,b,c,d){var e=[a.state.modeGen],f={};gb(a,b.text,a.doc.mode,c,function(a,b){return e.push(a,b)},f,d);for(var g=function(c){var d=a.state.overlays[c],g=1,h=0;gb(a,b.text,d.mode,!0,function(a,b){for(var c=g;ha&&e.splice(g,1,a,e[g+1],f),g+=2,h=Math.min(a,f)}if(b)if(d.opaque)e.splice(c,g-c,a,"overlay "+b),g=c+2;else for(;ca.options.maxHighlightLength?Xa(a.doc.mode,d):d);b.stateAfter=d,b.styles=e.styles,e.classes?b.styleClasses=e.classes:b.styleClasses&&(b.styleClasses=null),c===a.doc.frontier&&a.doc.frontier++}return b.styles}function ab(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0;var f=hb(a,b,c),g=f>d.first&&z(d,f-1).stateAfter;return g=g?Xa(d.mode,g):Za(d.mode),d.iter(f,b,function(c){bb(a,c.text,g);var h=f==b-1||f%5==0||f>=e.viewFrom&&fb.start)return f}throw new Error("Mode "+a.name+" failed to advance stream.")}function eb(a,b,c,d){var e,f=function(a){return{start:l.start,end:l.pos,string:l.current(),type:e||null,state:a?Xa(g.mode,k):k}},g=a.doc,h=g.mode;b=N(g,b);var i,j=z(g,b.line),k=ab(a,b.line,c),l=new Yg(j.text,a.options.tabSize);for(d&&(i=[]);(d||l.posa.options.maxHighlightLength?(h=!1,g&&bb(a,b,d,l.pos),l.pos=b.length,i=null):i=fb(db(c,l,d,m),f),m){var n=m[0].name;n&&(i="m-"+(i?n+" "+i:n))}if(!h||k!=i){for(;jg;--h){if(h<=f.first)return f.first;var i=z(f,h-1);if(i.stateAfter&&(!c||h<=f.frontier))return h;var j=k(i.text,null,a.options.tabSize);(null==e||d>j)&&(e=h-1,d=j)}return e}function ib(a,b,c){this.text=a,aa(this,b),this.height=c?c(this):1}function jb(a,b,c,d){a.text=b,a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null),null!=a.order&&(a.order=null),_(a),aa(a,c);var e=d?d(a):1;e!=a.height&&C(a,e)}function kb(a){a.parent=null,_(a)}function lb(a,b){if(!a||/^\s*$/.test(a))return null;var c=b.addModeClass?_g:$g;return c[a]||(c[a]=a.replace(/\S+/g,"cm-$&"))}function mb(a,b){var c=d("span",null,null,ig?"padding-right: .1px":null),e={pre:d("pre",[c],"CodeMirror-line"),content:c,col:0,pos:0,cm:a,trailingSpace:!1,splitSpaces:(gg||ig)&&a.getOption("lineWrapping")};b.measure={};for(var f=0;f<=(b.rest?b.rest.length:0);f++){var g=f?b.rest[f-1]:b.line,i=void 0;e.pos=0,e.addToken=ob,Qa(a.display.measure)&&(i=Ba(g))&&(e.addToken=qb(e.addToken,i)),e.map=[];var j=b!=a.display.externalMeasured&&D(g);sb(g,e,_a(a,g,j)),g.styleClasses&&(g.styleClasses.bgClass&&(e.bgClass=h(g.styleClasses.bgClass,e.bgClass||"")),g.styleClasses.textClass&&(e.textClass=h(g.styleClasses.textClass,e.textClass||""))),0==e.map.length&&e.map.push(0,0,e.content.appendChild(Pa(a.display.measure))),0==f?(b.measure.map=e.map,b.measure.cache={}):((b.measure.maps||(b.measure.maps=[])).push(e.map),(b.measure.caches||(b.measure.caches=[])).push({}))}if(ig){var k=e.content.lastChild;(/\bcm-tab\b/.test(k.className)||k.querySelector&&k.querySelector(".cm-tab"))&&(e.content.className="cm-tab-wrap-hack")}return Ea(a,"renderLine",a,b.line,e.pre),e.pre.className&&(e.textClass=h(e.pre.className,e.textClass||"")),e}function nb(a){var b=d("span","•","cm-invalidchar");return b.title="\\u"+a.charCodeAt(0).toString(16),b.setAttribute("aria-label",b.title),b}function ob(a,b,c,e,f,g,h){if(b){var i,j=a.splitSpaces?pb(b,a.trailingSpace):b,k=a.cm.state.specialChars,l=!1;if(k.test(b)){i=document.createDocumentFragment();for(var m=0;;){k.lastIndex=m;var n=k.exec(b),p=n?n.index-m:b.length-m;if(p){var q=document.createTextNode(j.slice(m,m+p));gg&&hg<9?i.appendChild(d("span",[q])):i.appendChild(q),a.map.push(a.pos,a.pos+p,q),a.col+=p,a.pos+=p}if(!n)break;m+=p+1;var r=void 0;if("\t"==n[0]){var s=a.cm.options.tabSize,t=s-a.col%s;r=i.appendChild(d("span",o(t),"cm-tab")),r.setAttribute("role","presentation"),r.setAttribute("cm-text","\t"),a.col+=t}else"\r"==n[0]||"\n"==n[0]?(r=i.appendChild(d("span","\r"==n[0]?"␍":"␤","cm-invalidchar")),r.setAttribute("cm-text",n[0]),a.col+=1):(r=a.cm.options.specialCharPlaceholder(n[0]),r.setAttribute("cm-text",n[0]),gg&&hg<9?i.appendChild(d("span",[r])):i.appendChild(r),a.col+=1);a.map.push(a.pos,a.pos+1,r),a.pos++}}else a.col+=b.length,i=document.createTextNode(j),a.map.push(a.pos,a.pos+b.length,i),gg&&hg<9&&(l=!0),a.pos+=b.length;if(a.trailingSpace=32==j.charCodeAt(b.length-1),c||e||f||l||h){var u=c||"";e&&(u+=e),f&&(u+=f);var v=d("span",[i],u,h);return g&&(v.title=g),a.content.appendChild(v)}a.content.appendChild(i)}}function pb(a,b){if(a.length>1&&!/ /.test(a))return a;for(var c=b,d="",e=0;ej&&l.from<=j));m++);if(l.to>=k)return a(c,d,e,f,g,h,i);a(c,d.slice(0,l.to-j),e,f,null,h,i),f=null,d=d.slice(l.to-j),j=l.to}}}function rb(a,b,c,d){var e=!d&&c.widgetNode;e&&a.map.push(a.pos,a.pos+b,e),!d&&a.cm.display.input.needsContentAttribute&&(e||(e=a.content.appendChild(document.createElement("span"))),e.setAttribute("cm-marker",c.id)),e&&(a.cm.display.input.setUneditable(e),a.content.appendChild(e)),a.pos+=b,a.trailingSpace=!1}function sb(a,b,c){var d=a.markedSpans,e=a.text,f=0;if(d)for(var g,h,i,j,k,l,m,n=e.length,o=0,p=1,q="",r=0;;){if(r==o){i=j=k=l=h="",m=null,r=1/0;for(var s=[],t=void 0,u=0;uo||w.collapsed&&v.to==o&&v.from==o)?(null!=v.to&&v.to!=o&&r>v.to&&(r=v.to,j=""),w.className&&(i+=" "+w.className),w.css&&(h=(h?h+";":"")+w.css),w.startStyle&&v.from==o&&(k+=" "+w.startStyle),w.endStyle&&v.to==r&&(t||(t=[])).push(w.endStyle,v.to),w.title&&!l&&(l=w.title),w.collapsed&&(!m||da(m.marker,w)<0)&&(m=v)):v.from>o&&r>v.from&&(r=v.from)}if(t)for(var x=0;x=n)break;for(var z=Math.min(n,r);;){if(q){var A=o+q.length;if(!m){var B=A>z?q.slice(0,z-o):q;b.addToken(b,B,g?g+i:i,k,o+B.length==r?j:"",l,h)}if(A>=z){q=q.slice(z-o),o=z;break}o=A,k=""}q=e.slice(f,f=c[p++]),g=lb(c[p++],b.cm.options)}}else for(var C=1;C2&&f.push((i.bottom+j.top)/2-c.top)}}f.push(c.bottom-c.top)}}function Vb(a,b,c){if(a.line==b)return{map:a.measure.map,cache:a.measure.cache};for(var d=0;dc)return{map:a.measure.maps[e],cache:a.measure.caches[e],before:!0}}function Wb(a,b){b=ia(b);var d=D(b),e=a.display.externalMeasured=new tb(a.doc,b,d);e.lineN=d;var f=e.built=mb(a,e);return e.text=f.pre,c(a.display.lineMeasure,f.pre),e}function Xb(a,b,c,d){return $b(a,Zb(a,b),c,d)}function Yb(a,b){if(b>=a.display.viewFrom&&b=c.lineN&&bb)&&(f=i-h,e=f-1,b>=i&&(g="right")),null!=e){if(d=a[j+2],h==i&&c==(d.insertLeft?"left":"right")&&(g=c),"left"==c&&0==e)for(;j&&a[j-2]==a[j-3]&&a[j-1].insertLeft;)d=a[(j-=3)+2],g="left";if("right"==c&&e==i-h)for(;j=0&&(c=a[e]).left==c.right;e--);return c}function bc(a,b,c,d){var e,f=_b(b.map,c,d),g=f.node,h=f.start,i=f.end,j=f.collapse;if(3==g.nodeType){for(var k=0;k<4;k++){for(;h&&x(b.line.text.charAt(f.coverStart+h));)--h;for(;f.coverStart+i0&&(j=d="right");var l;e=a.options.lineWrapping&&(l=g.getClientRects()).length>1?l["right"==d?l.length-1:0]:g.getBoundingClientRect()}if(gg&&hg<9&&!h&&(!e||!e.left&&!e.right)){var m=g.parentNode.getClientRects()[0];e=m?{left:m.left,right:m.left+rc(a.display),top:m.top,bottom:m.bottom}:ch}for(var n=e.top-b.rect.top,o=e.bottom-b.rect.top,p=(n+o)/2,q=b.view.measure.heights,r=0;rc.from?g(a-1):g(a,d)}d=d||z(a.doc,b.line),e||(e=Zb(a,d));var i=Ba(d),j=b.ch;if(!i)return g(j);var k=xa(i,j),l=h(j,k);return null!=Mg&&(l.other=h(j,Mg)),l}function mc(a,b){var c=0;b=N(a.doc,b),a.options.lineWrapping||(c=rc(a.display)*b.ch);var d=z(a.doc,b.line),e=oa(d)+Ob(a.display);return{left:c,right:c,top:e,bottom:e+d.height}}function nc(a,b,c,d){var e=H(a,b);return e.xRel=d,c&&(e.outside=!0),e}function oc(a,b,c){var d=a.doc;if(c+=a.display.viewOffset,c<0)return nc(d.first,0,!0,-1);var e=E(d,c),f=d.first+d.size-1;if(e>f)return nc(d.first+d.size-1,z(d,f).text.length,!0,1);b<0&&(b=0);for(var g=z(d,e);;){var h=pc(a,g,e,b,c),i=ga(g),j=i&&i.find(0,!0);if(!i||!(h.ch>j.from.ch||h.ch==j.from.ch&&h.xRel>0))return h;e=D(g=j.to.line)}}function pc(a,b,c,d,e){function f(d){var e=lc(a,H(c,d),"line",b,j);return h=!0,g>e.bottom?e.left-i:gq)return nc(c,n,r,1);for(;;){if(k?n==m||n==za(b,m,1):n-m<=1){var s=d0&&s1){var v=$b(a,j,s,"right");g<=v.bottom&&g>=v.top&&Math.abs(d-v.right)1?1:0);return w}var y=Math.ceil(l/2),z=m+y;if(k){z=m;for(var A=0;Ad?(n=z,q=B,(r=h)&&(q+=1e3),l=y):(m=z,o=B,p=h,l-=y)}}function qc(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==Zg){Zg=d("pre");for(var e=0;e<49;++e)Zg.appendChild(document.createTextNode("x")),Zg.appendChild(d("br"));Zg.appendChild(document.createTextNode("x"))}c(a.measure,Zg);var f=Zg.offsetHeight/50;return f>3&&(a.cachedTextHeight=f),b(a.measure),f||1}function rc(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b=d("span","xxxxxxxxxx"),e=d("pre",[b]);c(a.measure,e);var f=b.getBoundingClientRect(),g=(f.right-f.left)/10;return g>2&&(a.cachedCharWidth=g),g||10}function sc(a){for(var b=a.display,c={},d={},e=b.gutters.clientLeft,f=b.gutters.firstChild,g=0;f;f=f.nextSibling,++g)c[a.options.gutters[g]]=f.offsetLeft+f.clientLeft+e,d[a.options.gutters[g]]=f.clientWidth;return{fixedPos:tc(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:c,gutterWidth:d,wrapperWidth:b.wrapper.clientWidth}}function tc(a){return a.scroller.getBoundingClientRect().left-a.sizer.getBoundingClientRect().left}function uc(a){var b=qc(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/rc(a.display)-3);return function(e){if(ma(a.doc,e))return 0;var f=0;if(e.widgets)for(var g=0;g=a.display.viewTo)return null;if(b-=a.display.viewFrom,b<0)return null;for(var c=a.display.view,d=0;d=a.display.viewTo||h.to().line3&&(e(n,p.top,null,p.bottom),n=k,p.bottomi.bottom||j.bottom==i.bottom&&j.right>i.right)&&(i=j),n0?b.blinker=setInterval(function(){return b.cursorDiv.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate):a.options.cursorBlinkRate<0&&(b.cursorDiv.style.visibility="hidden")}}function Dc(a){a.state.focused||(a.display.input.focus(),Fc(a))}function Ec(a){a.state.delayingBlurEvent=!0,setTimeout(function(){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!1,Gc(a))},100)}function Fc(a,b){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!1),"nocursor"!=a.options.readOnly&&(a.state.focused||(Ea(a,"focus",a,b),a.state.focused=!0,g(a.display.wrapper,"CodeMirror-focused"),a.curOp||a.display.selForContextMenu==a.doc.sel||(a.display.input.reset(),ig&&setTimeout(function(){return a.display.input.reset(!0)},20)),a.display.input.receivedFocus()),Cc(a))}function Gc(a,b){a.state.delayingBlurEvent||(a.state.focused&&(Ea(a,"blur",a,b),a.state.focused=!1,yg(a.display.wrapper,"CodeMirror-focused")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.display.shift=!1)},150))}function Hc(a){var b=a.display,c=b.view;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var d=tc(b)-b.scroller.scrollLeft+a.doc.scrollLeft,e=b.gutters.offsetWidth,f=d+"px",g=0;g.001||i<-.001)&&(C(e.line,f),Kc(e.line),e.rest))for(var j=0;j=g&&(f=E(b,oa(z(b,i))-a.wrapper.clientHeight),g=i)}return{from:f,to:Math.max(g,f+1)}}function Mc(a,b){Math.abs(a.doc.scrollTop-b)<2||(a.doc.scrollTop=b,dg||Ad(a,{top:b}),a.display.scroller.scrollTop!=b&&(a.display.scroller.scrollTop=b),a.display.scrollbars.setScrollTop(b),dg&&Ad(a),ud(a,100))}function Nc(a,b,c){(c?b==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-b)<2)||(b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth),a.doc.scrollLeft=b,Hc(a),a.display.scroller.scrollLeft!=b&&(a.display.scroller.scrollLeft=b),a.display.scrollbars.setScrollLeft(b))}function Oc(a){var b=a.wheelDeltaX,c=a.wheelDeltaY;return null==b&&a.detail&&a.axis==a.HORIZONTAL_AXIS&&(b=a.detail),null==c&&a.detail&&a.axis==a.VERTICAL_AXIS?c=a.detail:null==c&&(c=a.wheelDelta),{x:b,y:c}}function Pc(a){var b=Oc(a);return b.x*=eh,b.y*=eh,b}function Qc(a,b){var c=Oc(b),d=c.x,e=c.y,f=a.display,g=f.scroller,h=g.scrollWidth>g.clientWidth,i=g.scrollHeight>g.clientHeight;if(d&&h||e&&i){if(e&&rg&&ig)a:for(var j=b.target,k=f.view;j!=g;j=j.parentNode)for(var l=0;l(window.innerHeight||document.documentElement.clientHeight)&&(f=!1),null!=f&&!og){var g=d("div","​",null,"position: absolute;\n top: "+(b.top-c.viewOffset-Ob(a.display))+"px;\n height: "+(b.bottom-b.top+Rb(a)+c.barHeight)+"px;\n left: "+b.left+"px; width: 2px;");a.display.lineSpace.appendChild(g),g.scrollIntoView(f),a.display.lineSpace.removeChild(g)}}}function Yc(a,b,c,d){null==d&&(d=0);for(var e,f=0;f<5;f++){var g=!1;e=lc(a,b);var h=c&&c!=b?lc(a,c):e,i=$c(a,Math.min(e.left,h.left),Math.min(e.top,h.top)-d,Math.max(e.left,h.left),Math.max(e.bottom,h.bottom)+d),j=a.doc.scrollTop,k=a.doc.scrollLeft;if(null!=i.scrollTop&&(Mc(a,i.scrollTop),Math.abs(a.doc.scrollTop-j)>1&&(g=!0)),null!=i.scrollLeft&&(Nc(a,i.scrollLeft),Math.abs(a.doc.scrollLeft-k)>1&&(g=!0)),!g)break}return e}function Zc(a,b,c,d,e){var f=$c(a,b,c,d,e);null!=f.scrollTop&&Mc(a,f.scrollTop),null!=f.scrollLeft&&Nc(a,f.scrollLeft)}function $c(a,b,c,d,e){var f=a.display,g=qc(a.display);c<0&&(c=0);var h=a.curOp&&null!=a.curOp.scrollTop?a.curOp.scrollTop:f.scroller.scrollTop,i=Tb(a),j={};e-c>i&&(e=c+i);var k=a.doc.height+Pb(f),l=ck-g;if(ch+i){var n=Math.min(c,(m?k:e)-i);n!=h&&(j.scrollTop=n)}var o=a.curOp&&null!=a.curOp.scrollLeft?a.curOp.scrollLeft:f.scroller.scrollLeft,p=Sb(a)-(a.options.fixedGutter?f.gutters.offsetWidth:0),q=d-b>p;return q&&(d=b+p),b<10?j.scrollLeft=0:bp+o-3&&(j.scrollLeft=d+(q?0:10)-p),j}function _c(a,b,c){null==b&&null==c||bd(a),null!=b&&(a.curOp.scrollLeft=(null==a.curOp.scrollLeft?a.doc.scrollLeft:a.curOp.scrollLeft)+b),null!=c&&(a.curOp.scrollTop=(null==a.curOp.scrollTop?a.doc.scrollTop:a.curOp.scrollTop)+c)}function ad(a){bd(a);var b=a.getCursor(),c=b,d=b;a.options.lineWrapping||(c=b.ch?H(b.line,b.ch-1):b,d=H(b.line,b.ch+1)),a.curOp.scrollToPos={from:c,to:d,margin:a.options.cursorScrollMargin,isCursor:!0}}function bd(a){var b=a.curOp.scrollToPos;if(b){a.curOp.scrollToPos=null;var c=mc(a,b.from),d=mc(a,b.to),e=$c(a,Math.min(c.left,d.left),Math.min(c.top,d.top)-b.margin,Math.max(c.right,d.right),Math.max(c.bottom,d.bottom)+b.margin);a.scrollTo(e.scrollLeft,e.scrollTop)}}function cd(a){a.curOp={cm:a,viewChanged:!1,startHeight:a.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++gh},vb(a.curOp)}function dd(a){var b=a.curOp;xb(b,function(a){for(var b=0;b=c.viewTo)||c.maxLineChanged&&b.options.lineWrapping,a.update=a.mustUpdate&&new wd(b,a.mustUpdate&&{top:a.scrollTop,ensure:a.scrollToPos},a.forceUpdate)}function gd(a){a.updatedDisplay=a.mustUpdate&&yd(a.cm,a.update)}function hd(a){var b=a.cm,c=b.display;a.updatedDisplay&&Jc(b),a.barMeasure=Rc(b),c.maxLineChanged&&!b.options.lineWrapping&&(a.adjustWidthTo=Xb(b,c.maxLine,c.maxLine.text.length).left+3,b.display.sizerWidth=a.adjustWidthTo,a.barMeasure.scrollWidth=Math.max(c.scroller.clientWidth,c.sizer.offsetLeft+a.adjustWidthTo+Rb(b)+b.display.barWidth),a.maxScrollLeft=Math.max(0,c.sizer.offsetLeft+a.adjustWidthTo-Sb(b))),(a.updatedDisplay||a.selectionChanged)&&(a.preparedSelection=c.input.prepareSelection(a.focus))}function id(a){var b=a.cm;null!=a.adjustWidthTo&&(b.display.sizer.style.minWidth=a.adjustWidthTo+"px",a.maxScrollLeftb)&&(e.updateLineNumbers=b),a.curOp.viewChanged=!0,b>=e.viewTo)Lg&&ka(a.doc,b)e.viewFrom?qd(a):(e.viewFrom+=d,e.viewTo+=d);else if(b<=e.viewFrom&&c>=e.viewTo)qd(a);else if(b<=e.viewFrom){var f=rd(a,c,c+d,1);f?(e.view=e.view.slice(f.index),e.viewFrom=f.lineN,e.viewTo+=d):qd(a)}else if(c>=e.viewTo){var g=rd(a,b,b,-1);g?(e.view=e.view.slice(0,g.index),e.viewTo=g.lineN):qd(a)}else{var h=rd(a,b,b,-1),i=rd(a,c,c+d,1);h&&i?(e.view=e.view.slice(0,h.index).concat(ub(a,h.lineN,i.lineN)).concat(e.view.slice(i.index)),e.viewTo+=d):qd(a)}var j=e.externalMeasured;j&&(c=e.lineN&&b=d.viewTo)){var f=d.view[xc(a,b)];if(null!=f.node){var g=f.changes||(f.changes=[]);m(g,c)==-1&&g.push(c)}}}function qd(a){a.display.viewFrom=a.display.viewTo=a.doc.first,a.display.view=[],a.display.viewOffset=0}function rd(a,b,c,d){var e,f=xc(a,b),g=a.display.view;if(!Lg||c==a.doc.first+a.doc.size)return{index:f,lineN:c};for(var h=a.display.viewFrom,i=0;i0){if(f==g.length-1)return null;e=h+g[f].size-b,f++}else e=h-b;b+=e,c+=e}for(;ka(a.doc,c)!=c;){if(f==(d<0?0:g.length-1))return null;c+=d*g[f-(d<0?1:0)].size,f+=d}return{index:f,lineN:c}}function sd(a,b,c){var d=a.display,e=d.view;0==e.length||b>=d.viewTo||c<=d.viewFrom?(d.view=ub(a,b,c),d.viewFrom=b):(d.viewFrom>b?d.view=ub(a,b,d.viewFrom).concat(d.view):d.viewFromc&&(d.view=d.view.slice(0,xc(a,c)))),d.viewTo=c}function td(a){for(var b=a.display.view,c=0,d=0;d=a.display.viewTo)){var c=+new Date+a.options.workTime,d=Xa(b.mode,ab(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.viewTo+500),function(f){if(b.frontier>=a.display.viewFrom){var g=f.styles,h=f.text.length>a.options.maxHighlightLength,i=$a(a,f,h?Xa(b.mode,d):d,!0);f.styles=i.styles;var j=f.styleClasses,k=i.classes;k?f.styleClasses=k:j&&(f.styleClasses=null);for(var l=!g||g.length!=f.styles.length||j!=k&&(!j||!k||j.bgClass!=k.bgClass||j.textClass!=k.textClass),m=0;!l&&mc)return ud(a,a.options.workDelay),!0}),e.length&&kd(a,function(){for(var b=0;b=d.viewFrom&&c.visible.to<=d.viewTo&&(null==d.updateLineNumbers||d.updateLineNumbers>=d.viewTo)&&d.renderedView==d.view&&0==td(a))return!1;Ic(a)&&(qd(a),c.dims=sc(a));var g=e.first+e.size,h=Math.max(c.visible.from-a.options.viewportMargin,e.first),i=Math.min(g,c.visible.to+a.options.viewportMargin);d.viewFromi&&d.viewTo-i<20&&(i=Math.min(g,d.viewTo)),Lg&&(h=ka(a.doc,h),i=la(a.doc,i));var j=h!=d.viewFrom||i!=d.viewTo||d.lastWrapHeight!=c.wrapperHeight||d.lastWrapWidth!=c.wrapperWidth;sd(a,h,i),d.viewOffset=oa(z(a.doc,d.viewFrom)),a.display.mover.style.top=d.viewOffset+"px";var k=td(a);if(!j&&0==k&&!c.force&&d.renderedView==d.view&&(null==d.updateLineNumbers||d.updateLineNumbers>=d.viewTo))return!1; +var l=f();return k>4&&(d.lineDiv.style.display="none"),Bd(a,d.updateLineNumbers,c.dims),k>4&&(d.lineDiv.style.display=""),d.renderedView=d.view,l&&f()!=l&&l.offsetHeight&&l.focus(),b(d.cursorDiv),b(d.selectionDiv),d.gutters.style.height=d.sizer.style.minHeight=0,j&&(d.lastWrapHeight=c.wrapperHeight,d.lastWrapWidth=c.wrapperWidth,ud(a,400)),d.updateLineNumbers=null,!0}function zd(a,b){for(var c=b.viewport,d=!0;(d&&a.options.lineWrapping&&b.oldDisplayWidth!=Sb(a)||(c&&null!=c.top&&(c={top:Math.min(a.doc.height+Pb(a.display)-Tb(a),c.top)}),b.visible=Lc(a.display,a.doc,c),!(b.visible.from>=a.display.viewFrom&&b.visible.to<=a.display.viewTo)))&&yd(a,b);d=!1){Jc(a);var e=Rc(a);yc(a),Uc(a,e),Dd(a,e)}b.signal(a,"update",a),a.display.viewFrom==a.display.reportedViewFrom&&a.display.viewTo==a.display.reportedViewTo||(b.signal(a,"viewportChange",a,a.display.viewFrom,a.display.viewTo),a.display.reportedViewFrom=a.display.viewFrom,a.display.reportedViewTo=a.display.viewTo)}function Ad(a,b){var c=new wd(a,b);if(yd(a,c)){Jc(a),zd(a,c);var d=Rc(a);yc(a),Uc(a,d),Dd(a,d),c.finish()}}function Bd(a,c,d){function e(b){var c=b.nextSibling;return ig&&rg&&a.display.currentWheelTarget==b?b.style.display="none":b.parentNode.removeChild(b),c}for(var f=a.display,g=a.options.lineNumbers,h=f.lineDiv,i=h.firstChild,j=f.view,k=f.viewFrom,l=0;l-1&&(o=!1),Ab(a,n,k,d)),o&&(b(n.lineNumber),n.lineNumber.appendChild(document.createTextNode(G(a.options,k)))),i=n.node.nextSibling}else{var p=Ib(a,n,k,d);h.insertBefore(p,i)}k+=n.size}for(;i;)i=e(i)}function Cd(a){var b=a.display.gutters.offsetWidth;a.display.sizer.style.marginLeft=b+"px"}function Dd(a,b){a.display.sizer.style.minHeight=b.docHeight+"px",a.display.heightForcer.style.top=b.docHeight+"px",a.display.gutters.style.height=b.docHeight+a.display.barHeight+Rb(a)+"px"}function Ed(a){var c=a.display.gutters,e=a.options.gutters;b(c);for(var f=0;f-1&&!a.lineNumbers&&(a.gutters=a.gutters.slice(0),a.gutters.splice(b,1))}function Gd(a,b){this.ranges=a,this.primIndex=b}function Hd(a,b){this.anchor=a,this.head=b}function Id(a,b){var c=a[b];a.sort(function(a,b){return I(a.from(),b.from())}),b=m(a,c);for(var d=1;d=0){var g=L(f.from(),e.from()),h=K(f.to(),e.to()),i=f.empty()?e.from()==e.head:f.from()==f.head;d<=b&&--b,a.splice(--d,2,new Hd(i?h:g,i?g:h))}}return new Gd(a,b)}function Jd(a,b){return new Gd([new Hd(a,b||a)],0)}function Kd(a){return a.text?H(a.from.line+a.text.length-1,p(a.text).length+(1==a.text.length?a.from.ch:0)):a.to}function Ld(a,b){if(I(a,b.from)<0)return a;if(I(a,b.to)<=0)return Kd(b);var c=a.line+b.text.length-(b.to.line-b.from.line)-1,d=a.ch;return a.line==b.to.line&&(d+=Kd(b).ch-b.to.ch),H(c,d)}function Md(a,b){for(var c=[],d=0;d1&&a.remove(h.line+1,o-1),a.insert(h.line+1,s)}yb(a,"change",a,b)}function Td(a,b,c){function d(a,e,f){if(a.linked)for(var g=0;g1&&!a.done[a.done.length-2].ranges?(a.done.pop(),p(a.done)):void 0}function Zd(a,b,c,d){var e=a.history;e.undone.length=0;var f,g,h=+new Date;if((e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&("+"==b.origin.charAt(0)&&a.cm&&e.lastModTime>h-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0)))&&(f=Yd(e,e.lastOp==d)))g=p(f.changes),0==I(b.from,b.to)&&0==I(b.from,g.to)?g.to=Kd(b):f.changes.push(Wd(a,b));else{var i=p(e.done);for(i&&i.ranges||ae(a.sel,e.done),f={changes:[Wd(a,b)],generation:e.generation},e.done.push(f);e.done.length>e.undoDepth;)e.done.shift(),e.done[0].ranges||e.done.shift()}e.done.push(c),e.generation=++e.maxGeneration,e.lastModTime=e.lastSelTime=h,e.lastOp=e.lastSelOp=d,e.lastOrigin=e.lastSelOrigin=b.origin,g||Ea(a,"historyAdded")}function $d(a,b,c,d){var e=b.charAt(0);return"*"==e||"+"==e&&c.ranges.length==d.ranges.length&&c.somethingSelected()==d.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}function _d(a,b,c,d){var e=a.history,f=d&&d.origin;c==e.lastSelOp||f&&e.lastSelOrigin==f&&(e.lastModTime==e.lastSelTime&&e.lastOrigin==f||$d(a,f,p(e.done),b))?e.done[e.done.length-1]=b:ae(b,e.done),e.lastSelTime=+new Date,e.lastSelOrigin=f,e.lastSelOp=c,d&&d.clearRedo!==!1&&Xd(e.undone)}function ae(a,b){var c=p(b);c&&c.ranges&&c.equals(a)||b.push(a)}function be(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=c.markedSpans),++f})}function ce(a){if(!a)return null;for(var b,c=0;c-1&&(p(h)[l]=j[l],delete j[l])}}}return d}function ge(a,b,c,d){if(a.cm&&a.cm.display.shift||a.extend){var e=b.anchor;if(d){var f=I(c,e)<0;f!=I(d,e)<0?(e=c,c=d):f!=I(c,d)<0&&(c=d)}return new Hd(e,c)}return new Hd(d||c,c)}function he(a,b,c,d){ne(a,new Gd([ge(a,a.sel.primary(),b,c)],0),d)}function ie(a,b,c){for(var d=[],e=0;e=b.ch:h.to>b.ch))){if(e&&(Ea(i,"beforeCursorEnter"),i.explicitlyCleared)){if(f.markedSpans){--g;continue}break}if(!i.atomic)continue;if(c){var j=i.find(d<0?1:-1),k=void 0;if((d<0?i.inclusiveRight:i.inclusiveLeft)&&(j=ue(a,j,-d,j&&j.line==b.line?f:null)),j&&j.line==b.line&&(k=I(j,c))&&(d<0?k<0:k>0))return se(a,j,b,d,e)}var l=i.find(d<0?-1:1);return(d<0?i.inclusiveLeft:i.inclusiveRight)&&(l=ue(a,l,d,l.line==b.line?f:null)),l?se(a,l,b,d,e):null}}return b}function te(a,b,c,d,e){var f=d||1,g=se(a,b,c,f,e)||!e&&se(a,b,c,f,!0)||se(a,b,c,-f,e)||!e&&se(a,b,c,-f,!0);return g?g:(a.cantEdit=!0,H(a.first,0))}function ue(a,b,c,d){return c<0&&0==b.ch?b.line>a.first?N(a,H(b.line-1)):null:c>0&&b.ch==(d||z(a,b.line)).text.length?b.line=0;--e)ye(a,{from:d[e].from,to:d[e].to,text:e?[""]:b.text});else ye(a,b)}}function ye(a,b){if(1!=b.text.length||""!=b.text[0]||0!=I(b.from,b.to)){var c=Md(a,b);Zd(a,b,c,a.cm?a.cm.curOp.id:NaN),Be(a,b,c,Y(a,b));var d=[];Td(a,function(a,c){c||m(d,a.history)!=-1||(Ge(a.history,b),d.push(a.history)),Be(a,b,null,Y(a,b))})}}function ze(a,b,c){if(!a.cm||!a.cm.state.suppressEdits||c){for(var d,e=a.history,f=a.sel,g="undo"==b?e.done:e.undone,h="undo"==b?e.undone:e.done,i=0;i=0;--n){var o=l(n);if(o)return o.v}}}}function Ae(a,b){if(0!=b&&(a.first+=b,a.sel=new Gd(q(a.sel.ranges,function(a){return new Hd(H(a.anchor.line+b,a.anchor.ch),H(a.head.line+b,a.head.ch))}),a.sel.primIndex),a.cm)){od(a.cm,a.first,a.first-b,b);for(var c=a.cm.display,d=c.viewFrom;da.lastLine())){if(b.from.linef&&(b={from:b.from,to:H(f,z(a,f).text.length),text:[b.text[0]],origin:b.origin}),b.removed=A(a,b.from,b.to),c||(c=Md(a,b)),a.cm?Ce(a.cm,b,d):Sd(a,b,d),oe(a,c,Eg)}}function Ce(a,b,c){var d=a.doc,e=a.display,f=b.from,g=b.to,h=!1,i=f.line;a.options.lineWrapping||(i=D(ia(z(d,f.line))),d.iter(i,g.line+1,function(a){if(a==e.maxLine)return h=!0,!0})),d.sel.contains(b.from,b.to)>-1&&Ga(a),Sd(d,b,c,uc(a)),a.options.lineWrapping||(d.iter(i,f.line+b.text.length,function(a){var b=pa(a);b>e.maxLineLength&&(e.maxLine=a,e.maxLineLength=b,e.maxLineChanged=!0,h=!1)}),h&&(a.curOp.updateMaxLine=!0)),d.frontier=Math.min(d.frontier,f.line),ud(a,400);var j=b.text.length-(g.line-f.line)-1;b.full?od(a):f.line!=g.line||1!=b.text.length||Rd(a.doc,b)?od(a,f.line,g.line+1,j):pd(a,f.line,"text");var k=Ha(a,"changes"),l=Ha(a,"change");if(l||k){var m={from:f,to:g,text:b.text,removed:b.removed,origin:b.origin};l&&yb(a,"change",a,m),k&&(a.curOp.changeObjs||(a.curOp.changeObjs=[])).push(m)}a.display.selForContextMenu=null}function De(a,b,c,d,e){if(d||(d=c),I(d,c)<0){var f=d;d=c,c=f}"string"==typeof b&&(b=a.splitLines(b)),xe(a,{from:c,to:d,text:b,origin:e})}function Ee(a,b,c,d){c0||0==h&&g.clearWhenEmpty!==!1)return g;if(g.replacedWith&&(g.collapsed=!0,g.widgetNode=d("span",[g.replacedWith],"CodeMirror-widget"),e.handleMouseEvents||g.widgetNode.setAttribute("cm-ignore-events","true"),e.insertLeft&&(g.widgetNode.insertLeft=!0)),g.collapsed){if(ha(a,b.line,b,c,g)||b.line!=c.line&&ha(a,c.line,b,c,g))throw new Error("Inserting collapsed marker partially overlapping an existing one");R()}g.addToHistory&&Zd(a,{from:b,to:c,origin:"markText"},a.sel,NaN);var i,k=b.line,l=a.cm;if(a.iter(k,c.line+1,function(a){l&&g.collapsed&&!l.options.lineWrapping&&ia(a)==l.display.maxLine&&(i=!0),g.collapsed&&k!=b.line&&C(a,0),V(a,new S(g,k==b.line?b.ch:null,k==c.line?c.ch:null)),++k}),g.collapsed&&a.iter(b.line,c.line+1,function(b){ma(a,b)&&C(b,0)}),g.clearOnEnter&&Pg(g,"beforeCursorEnter",function(){return g.clear()}),g.readOnly&&(Q(),(a.history.done.length||a.history.undone.length)&&a.clearHistory()),g.collapsed&&(g.id=++hh,g.atomic=!0),l){if(i&&(l.curOp.updateMaxLine=!0),g.collapsed)od(l,b.line,c.line+1);else if(g.className||g.title||g.startStyle||g.endStyle||g.css)for(var m=b.line;m<=c.line;m++)pd(l,m,"text");g.atomic&&qe(l.doc),yb(l,"markerAdded",l,g)}return g}function Pe(a,b){var c=this;this.markers=a,this.primary=b;for(var d=0;d-1)return b.state.draggingText(a),void setTimeout(function(){return b.display.input.focus()},20);try{var j=a.dataTransfer.getData("Text");if(j){var k;if(b.state.draggingText&&!b.state.draggingText.copy&&(k=b.listSelections()),oe(b.doc,Jd(c,c)),k)for(var l=0;l=0;b--)De(a.doc,"",d[b].from,d[b].to,"+delete");ad(a)})}function hf(a,b){var c=z(a.doc,b),d=ia(c);d!=c&&(b=D(d));var e=Ba(d),f=e?e[0].level%2?va(d):ua(d):0;return H(b,f)}function jf(a,b){for(var c,d=z(a.doc,b);c=ga(d);)d=c.find(1,!0).line,b=null;var e=Ba(d),f=e?e[0].level%2?ua(d):va(d):d.text.length;return H(null==b?D(d):b,f)}function kf(a,b){var c=hf(a,b.line),d=z(a.doc,c.line),e=Ba(d);if(!e||0==e[0].level){var f=Math.max(0,d.text.search(/\S/)),g=b.line==c.line&&b.ch<=f&&b.ch;return H(c.line,g?0:f)}return c}function lf(a,b,c){if("string"==typeof b&&(b=th[b],!b))return!1;a.display.input.ensurePolled();var d=a.display.shift,e=!1;try{a.isReadOnly()&&(a.state.suppressEdits=!0),c&&(a.display.shift=!1),e=b(a)!=Dg}finally{a.display.shift=d,a.state.suppressEdits=!1}return e}function mf(a,b,c){for(var d=0;de-400&&0==I(sh.pos,c)?d="triple":rh&&rh.time>e-400&&0==I(rh.pos,c)?(d="double",sh={time:e,pos:c}):(d="single",rh={time:e,pos:c});var g,h=a.doc.sel,j=rg?b.metaKey:b.ctrlKey;a.options.dragDrop&&Qg&&!a.isReadOnly()&&"single"==d&&(g=h.contains(c))>-1&&(I((g=h.ranges[g]).from(),c)<0||c.xRel>0)&&(I(g.to(),c)>0||c.xRel<0)?wf(a,b,c,j):xf(a,b,c,d,j)}function wf(a,b,c,d){var e=a.display,f=+new Date,g=ld(a,function(h){ig&&(e.scroller.draggable=!1),a.state.draggingText=!1,Da(document,"mouseup",g),Da(e.scroller,"drop",g),Math.abs(b.clientX-h.clientX)+Math.abs(b.clientY-h.clientY)<10&&(Ja(h),!d&&+new Date-200u&&e.push(new Hd(H(q,u),H(q,n(s,j,f))))}e.length||e.push(new Hd(c,c)),ne(l,Id(p.ranges.slice(0,o).concat(e),o),{origin:"*mouse",scroll:!1}),a.scrollIntoView(b)}else{var v=m,w=v.anchor,x=b;if("single"!=d){var y;y="double"==d?a.findWordAt(b):new Hd(H(b.line,0),N(l,H(b.line+1,0))),I(y.anchor,w)>0?(x=y.head,w=L(v.from(),y.anchor)):(x=y.anchor,w=K(v.to(),y.head))}var A=p.ranges.slice(0);A[o]=new Hd(N(l,w),x),ne(l,Id(A,o),Fg)}}function h(b){var c=++v,e=wc(a,b,!0,"rect"==d);if(e)if(0!=I(e,t)){a.curOp.focus=f(),g(e);var i=Lc(j,l);(e.line>=i.to||e.lineu.bottom?20:0;k&&setTimeout(ld(a,function(){v==c&&(j.scroller.scrollTop+=k,h(b))}),50)}}function i(b){a.state.selectingText=!1,v=1/0,Ja(b),j.input.focus(),Da(document,"mousemove",w),Da(document,"mouseup",x),l.history.lastSelOrigin=null}var j=a.display,l=a.doc;Ja(b);var m,o,p=l.sel,q=p.ranges;if(e&&!b.shiftKey?(o=l.sel.contains(c),m=o>-1?q[o]:new Hd(c,c)):(m=l.sel.primary(),o=l.sel.primIndex),sg?b.shiftKey&&b.metaKey:b.altKey)d="rect",e||(m=new Hd(c,c)),c=wc(a,b,!0,!0),o=-1;else if("double"==d){var r=a.findWordAt(c);m=a.display.shift||l.extend?ge(l,m,r.anchor,r.head):r}else if("triple"==d){var s=new Hd(H(c.line,0),N(l,H(c.line+1,0)));m=a.display.shift||l.extend?ge(l,m,s.anchor,s.head):s}else m=ge(l,m,c);e?o==-1?(o=q.length,ne(l,Id(q.concat([m]),o),{scroll:!1,origin:"*mouse"})):q.length>1&&q[o].empty()&&"single"==d&&!b.shiftKey?(ne(l,Id(q.slice(0,o).concat(q.slice(o+1)),0),{scroll:!1,origin:"*mouse"}),p=l.sel):je(l,o,m,Fg):(o=0,ne(l,new Gd([m],0),Fg),p=l.sel);var t=c,u=j.wrapper.getBoundingClientRect(),v=0,w=ld(a,function(a){Oa(a)?h(a):i(a)}),x=ld(a,i);a.state.selectingText=x,Pg(document,"mousemove",w),Pg(document,"mouseup",x)}function yf(a,b,c,d){var e,f;try{e=b.clientX,f=b.clientY}catch(b){return!1}if(e>=Math.floor(a.display.gutters.getBoundingClientRect().right))return!1;d&&Ja(b);var g=a.display,h=g.lineDiv.getBoundingClientRect();if(f>h.bottom||!Ha(a,c))return La(b);f-=h.top-g.viewOffset;for(var i=0;i=e){var k=E(a.doc,f),l=a.options.gutters[i];return Ea(a,c,a,k,l,b),La(b)}}}function zf(a,b){return yf(a,b,"gutterClick",!0)}function Af(a,b){Nb(a.display,b)||Bf(a,b)||Fa(a,b,"contextmenu")||a.display.input.onContextMenu(b)}function Bf(a,b){return!!Ha(a,"gutterContextMenu")&&yf(a,b,"gutterContextMenu",!1)}function Cf(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-"),fc(a)}function Df(a){function b(b,d,e,f){a.defaults[b]=d,e&&(c[b]=f?function(a,b,c){c!=wh&&e(a,b,c)}:e)}var c=a.optionHandlers;a.defineOption=b,a.Init=wh,b("value","",function(a,b){return a.setValue(b)},!0),b("mode",null,function(a,b){a.doc.modeOption=b,Pd(a)},!0),b("indentUnit",2,Pd,!0),b("indentWithTabs",!1),b("smartIndent",!0),b("tabSize",4,function(a){Qd(a),fc(a),od(a)},!0),b("lineSeparator",null,function(a,b){if(a.doc.lineSep=b,b){var c=[],d=a.doc.first;a.doc.iter(function(a){for(var e=0;;){var f=a.text.indexOf(b,e);if(f==-1)break;e=f+b.length,c.push(H(d,f))}d++});for(var e=c.length-1;e>=0;e--)De(a.doc,b,c[e],H(c[e].line,c[e].ch+b.length))}}),b("specialChars",/[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(a,b,c){a.state.specialChars=new RegExp(b.source+(b.test("\t")?"":"|\t"),"g"),c!=wh&&a.refresh()}),b("specialCharPlaceholder",nb,function(a){return a.refresh()},!0),b("electricChars",!0),b("inputStyle",qg?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),b("spellcheck",!1,function(a,b){return a.getInputField().spellcheck=b},!0),b("rtlMoveVisually",!tg),b("wholeLineUpdateBefore",!0),b("theme","default",function(a){Cf(a),Ef(a)},!0),b("keyMap","default",function(a,b,c){var d=ff(b),e=c!=wh&&ff(c);e&&e.detach&&e.detach(a,d),d.attach&&d.attach(a,e||null)}),b("extraKeys",null),b("lineWrapping",!1,Gf,!0),b("gutters",[],function(a){Fd(a.options),Ef(a)},!0),b("fixedGutter",!0,function(a,b){a.display.gutters.style.left=b?tc(a.display)+"px":"0",a.refresh()},!0),b("coverGutterNextToScrollbar",!1,function(a){return Uc(a)},!0),b("scrollbarStyle","native",function(a){Wc(a),Uc(a),a.display.scrollbars.setScrollTop(a.doc.scrollTop),a.display.scrollbars.setScrollLeft(a.doc.scrollLeft)},!0),b("lineNumbers",!1,function(a){Fd(a.options),Ef(a)},!0),b("firstLineNumber",1,Ef,!0),b("lineNumberFormatter",function(a){ +return a},Ef,!0),b("showCursorWhenSelecting",!1,yc,!0),b("resetSelectionOnContextMenu",!0),b("lineWiseCopyCut",!0),b("readOnly",!1,function(a,b){"nocursor"==b?(Gc(a),a.display.input.blur(),a.display.disabled=!0):a.display.disabled=!1,a.display.input.readOnlyChanged(b)}),b("disableInput",!1,function(a,b){b||a.display.input.reset()},!0),b("dragDrop",!0,Ff),b("allowDropFileTypes",null),b("cursorBlinkRate",530),b("cursorScrollMargin",0),b("cursorHeight",1,yc,!0),b("singleCursorHeightPerLine",!0,yc,!0),b("workTime",100),b("workDelay",100),b("flattenSpans",!0,Qd,!0),b("addModeClass",!1,Qd,!0),b("pollInterval",100),b("undoDepth",200,function(a,b){return a.doc.history.undoDepth=b}),b("historyEventDelay",1250),b("viewportMargin",10,function(a){return a.refresh()},!0),b("maxHighlightLength",1e4,Qd,!0),b("moveInputWithCursor",!0,function(a,b){b||a.display.input.resetPosition()}),b("tabindex",null,function(a,b){return a.display.input.getField().tabIndex=b||""}),b("autofocus",null)}function Ef(a){Ed(a),od(a),setTimeout(function(){return Hc(a)},20)}function Ff(a,b,c){var d=c&&c!=wh;if(!b!=!d){var e=a.display.dragFunctions,f=b?Pg:Da;f(a.display.scroller,"dragstart",e.start),f(a.display.scroller,"dragenter",e.enter),f(a.display.scroller,"dragover",e.over),f(a.display.scroller,"dragleave",e.leave),f(a.display.scroller,"drop",e.drop)}}function Gf(a){a.options.lineWrapping?(g(a.display.wrapper,"CodeMirror-wrap"),a.display.sizer.style.minWidth="",a.display.sizerWidth=null):(yg(a.display.wrapper,"CodeMirror-wrap"),qa(a)),vc(a),od(a),fc(a),setTimeout(function(){return Uc(a)},100)}function Hf(a,b){var c=this;if(!(this instanceof Hf))return new Hf(a,b);this.options=b=b?j(b):{},j(xh,b,!1),Fd(b);var d=b.value;"string"==typeof d&&(d=new jh(d,b.mode,null,b.lineSeparator)),this.doc=d;var e=new Hf.inputStyles[b.inputStyle](this),f=this.display=new y(a,d,e);f.wrapper.CodeMirror=this,Ed(this),Cf(this),b.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),b.autofocus&&!qg&&f.input.focus(),Wc(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new l,keySeq:null,specialChars:null},gg&&hg<11&&setTimeout(function(){return c.display.input.reset(!0)},20),If(this),Ze(),cd(this),this.curOp.forceUpdate=!0,Ud(this,d),b.autofocus&&!qg||this.hasFocus()?setTimeout(i(Fc,this),20):Gc(this);for(var g in yh)yh.hasOwnProperty(g)&&yh[g](c,b[g],wh);Ic(this),b.finishInit&&b.finishInit(this);for(var h=0;h400}var e=a.display;Pg(e.scroller,"mousedown",ld(a,uf)),gg&&hg<11?Pg(e.scroller,"dblclick",ld(a,function(b){if(!Fa(a,b)){var c=wc(a,b);if(c&&!zf(a,b)&&!Nb(a.display,b)){Ja(b);var d=a.findWordAt(c);he(a.doc,d.anchor,d.head)}}})):Pg(e.scroller,"dblclick",function(b){return Fa(a,b)||Ja(b)}),xg||Pg(e.scroller,"contextmenu",function(b){return Af(a,b)});var f,g={end:0};Pg(e.scroller,"touchstart",function(b){if(!Fa(a,b)&&!c(b)){e.input.ensurePolled(),clearTimeout(f);var d=+new Date;e.activeTouch={start:d,moved:!1,prev:d-g.end<=300?g:null},1==b.touches.length&&(e.activeTouch.left=b.touches[0].pageX,e.activeTouch.top=b.touches[0].pageY)}}),Pg(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),Pg(e.scroller,"touchend",function(c){var f=e.activeTouch;if(f&&!Nb(e,c)&&null!=f.left&&!f.moved&&new Date-f.start<300){var g,h=a.coordsChar(e.activeTouch,"page");g=!f.prev||d(f,f.prev)?new Hd(h,h):!f.prev.prev||d(f,f.prev.prev)?a.findWordAt(h):new Hd(H(h.line,0),N(a.doc,H(h.line+1,0))),a.setSelection(g.anchor,g.head),a.focus(),Ja(c)}b()}),Pg(e.scroller,"touchcancel",b),Pg(e.scroller,"scroll",function(){e.scroller.clientHeight&&(Mc(a,e.scroller.scrollTop),Nc(a,e.scroller.scrollLeft,!0),Ea(a,"scroll",a))}),Pg(e.scroller,"mousewheel",function(b){return Qc(a,b)}),Pg(e.scroller,"DOMMouseScroll",function(b){return Qc(a,b)}),Pg(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(b){Fa(a,b)||Ma(b)},over:function(b){Fa(a,b)||(We(a,b),Ma(b))},start:function(b){return Ve(a,b)},drop:ld(a,Ue),leave:function(b){Fa(a,b)||Xe(a)}};var h=e.input.getField();Pg(h,"keyup",function(b){return sf.call(a,b)}),Pg(h,"keydown",ld(a,qf)),Pg(h,"keypress",ld(a,tf)),Pg(h,"focus",function(b){return Fc(a,b)}),Pg(h,"blur",function(b){return Gc(a,b)})}function Jf(a,b,c,d){var e,f=a.doc;null==c&&(c="add"),"smart"==c&&(f.mode.indent?e=ab(a,b):c="prev");var g=a.options.tabSize,h=z(f,b),i=k(h.text,null,g);h.stateAfter&&(h.stateAfter=null);var j,l=h.text.match(/^\s*/)[0];if(d||/\S/.test(h.text)){if("smart"==c&&(j=f.mode.indent(e,h.text.slice(l.length),h.text),j==Dg||j>150)){if(!d)return;c="prev"}}else j=0,c="not";"prev"==c?j=b>f.first?k(z(f,b-1).text,null,g):0:"add"==c?j=i+a.options.indentUnit:"subtract"==c?j=i-a.options.indentUnit:"number"==typeof c&&(j=i+c),j=Math.max(0,j);var m="",n=0;if(a.options.indentWithTabs)for(var p=Math.floor(j/g);p;--p)n+=g,m+="\t";if(n1)if(Ah&&Ah.text.join("\n")==b){if(d.ranges.length%Ah.text.length==0){i=[];for(var j=0;j=0;l--){var m=d.ranges[l],n=m.from(),o=m.to();m.empty()&&(c&&c>0?n=H(n.line,n.ch-c):a.state.overwrite&&!g?o=H(o.line,Math.min(z(f,o.line).text.length,o.ch+p(h).length)):Ah&&Ah.lineWise&&Ah.text.join("\n")==b&&(n=o=H(n.line,0))),k=a.curOp.updateInput;var r={from:n,to:o,text:i?i[l%i.length]:h,origin:e||(g?"paste":a.state.cutIncoming?"cut":"+input")};xe(a.doc,r),yb(a,"inputRead",a,r)}b&&!g&&Nf(a,b),ad(a),a.curOp.updateInput=k,a.curOp.typing=!0,a.state.pasteIncoming=a.state.cutIncoming=!1}function Mf(a,b){var c=a.clipboardData&&a.clipboardData.getData("Text");if(c)return a.preventDefault(),b.isReadOnly()||b.options.disableInput||kd(b,function(){return Lf(b,c,0,null,"paste")}),!0}function Nf(a,b){if(a.options.electricChars&&a.options.smartIndent)for(var c=a.doc.sel,d=c.ranges.length-1;d>=0;d--){var e=c.ranges[d];if(!(e.head.ch>100||d&&c.ranges[d-1].head.line==e.head.line)){var f=a.getModeAt(e.head),g=!1;if(f.electricChars){for(var h=0;h-1){g=Jf(a,e.head.line,"smart");break}}else f.electricInput&&f.electricInput.test(z(a.doc,e.head.line).text.slice(0,e.head.ch))&&(g=Jf(a,e.head.line,"smart"));g&&yb(a,"electricInput",a,e.head.line)}}}function Of(a){for(var b=[],c=[],d=0;dd&&(Jf(b,f.head.line,a,!0),d=f.head.line,e==b.doc.sel.primIndex&&ad(b));else{var g=f.from(),h=f.to(),i=Math.max(d,g.line);d=Math.min(b.lastLine(),h.line-(h.ch?0:1))+1;for(var j=i;j0&&je(b.doc,e,new Hd(g,k[e].to()),Eg)}}}),getTokenAt:function(a,b){return eb(this,a,b)},getLineTokens:function(a,b){return eb(this,H(a),b,!0)},getTokenTypeAt:function(a){a=N(this.doc,a);var b,c=_a(this,z(this.doc,a.line)),d=0,e=(c.length-1)/2,f=a.ch;if(0==f)b=c[2];else for(;;){var g=d+e>>1;if((g?c[2*g-1]:0)>=f)e=g;else{if(!(c[2*g+1]f&&(a=f,e=!0),d=z(this.doc,a)}else d=a;return ic(this,d,{top:0,left:0},b||"page",c).top+(e?this.doc.height-oa(d):0)},defaultTextHeight:function(){return qc(this.display)},defaultCharWidth:function(){return rc(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(a,b,c,d,e){var f=this.display;a=lc(this,N(this.doc,a));var g=a.bottom,h=a.left;if(b.style.position="absolute",b.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(b),f.sizer.appendChild(b),"over"==d)g=a.top;else if("above"==d||"near"==d){var i=Math.max(f.wrapper.clientHeight,this.doc.height),j=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);("above"==d||a.bottom+b.offsetHeight>i)&&a.top>b.offsetHeight?g=a.top-b.offsetHeight:a.bottom+b.offsetHeight<=i&&(g=a.bottom),h+b.offsetWidth>j&&(h=j-b.offsetWidth)}b.style.top=g+"px",b.style.left=b.style.right="","right"==e?(h=f.sizer.clientWidth-b.offsetWidth,b.style.right="0px"):("left"==e?h=0:"middle"==e&&(h=(f.sizer.clientWidth-b.offsetWidth)/2),b.style.left=h+"px"),c&&Zc(this,h,g,h+b.offsetWidth,g+b.offsetHeight)},triggerOnKeyDown:md(qf),triggerOnKeyPress:md(tf),triggerOnKeyUp:sf,execCommand:function(a){if(th.hasOwnProperty(a))return th[a].call(null,this)},triggerElectric:md(function(a){Nf(this,a)}),findPosH:function(a,b,c,d){var e=this,f=1;b<0&&(f=-1,b=-b);for(var g=N(this.doc,a),h=0;h0&&h(c.charAt(d-1));)--d;for(;e.5)&&vc(this),Ea(this,"refresh",this)}),swapDoc:md(function(a){var b=this.doc;return b.cm=null,Ud(this,a),fc(this),this.display.input.reset(),this.scrollTo(a.scrollLeft,a.scrollTop),this.curOp.forceScroll=!0,yb(this,"swapDoc",this,b),b}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Ia(a),a.registerHelper=function(b,d,e){c.hasOwnProperty(b)||(c[b]=a[b]={_global:[]}),c[b][d]=e},a.registerGlobalHelper=function(b,d,e,f){a.registerHelper(b,d,f),c[b]._global.push({pred:e,val:f})}}function Sf(a,b,c,d,e){function f(){var b=h+c;return!(b=a.first+a.size)&&(h=b,k=z(a,b))}function g(a){var b=(e?za:Aa)(k,i,c,!0);if(null==b){if(a||!f())return!1;i=e?(c<0?va:ua)(k):c<0?k.text.length:0}else i=b;return!0}var h=b.line,i=b.ch,j=c,k=z(a,h);if("char"==d)g();else if("column"==d)g(!0);else if("word"==d||"group"==d)for(var l=null,m="group"==d,n=a.cm&&a.cm.getHelper(b,"wordChars"),o=!0;!(c<0)||g(!o);o=!1){var p=k.text.charAt(i)||"\n",q=v(p,n)?"w":m&&"\n"==p?"n":!m||/\s/.test(p)?null:"p";if(!m||o||q||(q="s"),l&&l!=q){c<0&&(c=1,g());break}if(q&&(l=q),c>0&&!g(!o))break}var r=te(a,H(h,i),b,j,!0);return I(b,r)||(r.hitSide=!0),r}function Tf(a,b,c,d){var e,f=a.doc,g=b.left;if("page"==d){var h=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),i=Math.max(h-.5*qc(a.display),3);e=(c>0?b.bottom:b.top)+c*i}else"line"==d&&(e=c>0?b.bottom+3:b.top-3);for(var j;j=oc(a,g,e),j.outside;){if(c<0?e<=0:e>=f.height){j.hitSide=!0;break}e+=5*c}return j}function Uf(a){this.cm=a,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new l,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null}function Vf(a,b){var c=Yb(a,b.line);if(!c||c.hidden)return null;var d=z(a.doc,b.line),e=Vb(c,d,b.line),f=Ba(d),g="left";if(f){var h=xa(f,b.ch);g=h%2?"right":"left"}var i=_b(e.map,b.ch,g);return i.offset="right"==i.collapse?i.end:i.start,i}function Wf(a,b){return b&&(a.bad=!0),a}function Xf(a,b,c,d,e){function f(a){return function(b){return b.id==a}}function g(b){if(1==b.nodeType){var c=b.getAttribute("cm-text");if(null!=c)return void(h+=""==c?b.textContent.replace(/\u200b/g,""):c);var k,l=b.getAttribute("cm-marker");if(l){var m=a.findMarks(H(d,0),H(e+1,0),f(+l));return void(m.length&&(k=m[0].find())&&(h+=A(a.doc,k.from,k.to).join(j)))}if("false"==b.getAttribute("contenteditable"))return;for(var n=0;n=15&&(lg=!1,ig=!0);var vg,wg=rg&&(jg||lg&&(null==ug||ug<12.11)),xg=dg||gg&&hg>=9,yg=function(b,c){var d=b.className,e=a(c).exec(d);if(e){var f=d.slice(e.index+e[0].length);b.className=d.slice(0,e.index)+(f?e[1]+f:"")}};vg=document.createRange?function(a,b,c,d){var e=document.createRange();return e.setEnd(d||a,c),e.setStart(a,b),e}:function(a,b,c){var d=document.body.createTextRange();try{d.moveToElementText(a.parentNode)}catch(e){return d}return d.collapse(!0),d.moveEnd("character",c),d.moveStart("character",b),d};var zg=function(a){a.select()};pg?zg=function(a){a.selectionStart=0,a.selectionEnd=a.value.length}:gg&&(zg=function(a){try{a.select()}catch(b){}}),l.prototype.set=function(a,b){clearTimeout(this.id),this.id=setTimeout(b,a)};var Ag,Bg,Cg=30,Dg={toString:function(){return"CodeMirror.Pass"}},Eg={scroll:!1},Fg={origin:"*mouse"},Gg={origin:"+move"},Hg=[""],Ig=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Jg=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,Kg=!1,Lg=!1,Mg=null,Ng=function(){function a(a){return a<=247?c.charAt(a):1424<=a&&a<=1524?"R":1536<=a&&a<=1773?d.charAt(a-1536):1774<=a&&a<=2220?"r":8192<=a&&a<=8203?"w":8204==a?"b":"L"}function b(a,b,c){this.level=a,this.from=b,this.to=c}var c="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",d="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm",e=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,f=/[stwN]/,g=/[LRr]/,h=/[Lb1n]/,i=/[1n]/,j="L";return function(c){if(!e.test(c))return!1;for(var d=c.length,k=[],l=0;l=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){if(this.posb},eatSpace:function(){for(var a=this,b=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++a.pos;return this.pos>b},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);if(b>-1)return this.pos=b,!0},backUp:function(a){this.pos-=a},column:function(){return this.lastColumnPos0?null:(d&&b!==!1&&(this.pos+=d[0].length),d)}var e=function(a){return c?a.toLowerCase():a},f=this.string.substr(this.pos,a.length);if(e(f)==e(a))return b!==!1&&(this.pos+=a.length),!0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(a,b){this.lineStart+=a;try{return b()}finally{this.lineStart-=a}}},Ia(ib),ib.prototype.lineNo=function(){return D(this)};var Zg,$g={},_g={},ah=null,bh=null,ch={left:0,right:0,top:0,bottom:0},dh=0,eh=null;gg?eh=-.53:dg?eh=15:kg?eh=-.7:mg&&(eh=-1/3),Sc.prototype=j({update:function(a){var b=a.scrollWidth>a.clientWidth+1,c=a.scrollHeight>a.clientHeight+1,d=a.nativeBarWidth;if(c){this.vert.style.display="block",this.vert.style.bottom=b?d+"px":"0";var e=a.viewHeight-(b?d:0);this.vert.firstChild.style.height=Math.max(0,a.scrollHeight-a.clientHeight+e)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(b){this.horiz.style.display="block",this.horiz.style.right=c?d+"px":"0",this.horiz.style.left=a.barLeft+"px";var f=a.viewWidth-a.barLeft-(c?d:0);this.horiz.firstChild.style.width=a.scrollWidth-a.clientWidth+f+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&a.clientHeight>0&&(0==d&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:c?d:0,bottom:b?d:0}},setScrollLeft:function(a){this.horiz.scrollLeft!=a&&(this.horiz.scrollLeft=a),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz)},setScrollTop:function(a){this.vert.scrollTop!=a&&(this.vert.scrollTop=a),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert)},zeroWidthHack:function(){var a=rg&&!ng?"12px":"18px";this.horiz.style.height=this.vert.style.width=a,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new l,this.disableVert=new l},enableZeroWidthBar:function(a,b){function c(){var d=a.getBoundingClientRect(),e=document.elementFromPoint(d.left+1,d.bottom-1);e!=a?a.style.pointerEvents="none":b.set(1e3,c); +}a.style.pointerEvents="auto",b.set(1e3,c)},clear:function(){var a=this.horiz.parentNode;a.removeChild(this.horiz),a.removeChild(this.vert)}},Sc.prototype),Tc.prototype=j({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},Tc.prototype);var fh={"native":Sc,"null":Tc},gh=0;wd.prototype.signal=function(a,b){Ha(a,b)&&this.events.push(arguments)},wd.prototype.finish=function(){for(var a=this,b=0;b=0&&I(a,e.to())<=0)return d}return-1}},Hd.prototype={from:function(){return L(this.anchor,this.head)},to:function(){return K(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}},Ie.prototype={chunkSize:function(){return this.lines.length},removeInner:function(a,b){for(var c=this,d=a,e=a+b;d1||!(this.children[0]instanceof Ie))){var i=[];this.collapse(i),this.children=[new Ie(i)],this.children[0].parent=this}},collapse:function(a){for(var b=this,c=0;c50){for(var h=f.lines.length%25+25,i=h;i10);a.parent.maybeSpill()}},iterN:function(a,b,c){for(var d=this,e=0;eb.display.maxLineLength&&(b.display.maxLine=k,b.display.maxLineLength=l,b.display.maxLineChanged=!0)}null!=e&&b&&this.collapsed&&od(b,e,f+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,b&&qe(b.doc)),b&&yb(b,"markerCleared",b,this),c&&dd(b),this.parent&&this.parent.clear()}},Ne.prototype.find=function(a,b){var c=this;null==a&&"bookmark"==this.type&&(a=1);for(var d,e,f=0;f=0;j--)xe(d,e[j]);i?me(this,i):this.cm&&ad(this.cm)}),undo:nd(function(){ze(this,"undo")}),redo:nd(function(){ze(this,"redo")}),undoSelection:nd(function(){ze(this,"undo",!0)}),redoSelection:nd(function(){ze(this,"redo",!0)}),setExtending:function(a){this.extend=a},getExtending:function(){return this.extend},historySize:function(){for(var a=this.history,b=0,c=0,d=0;d=a.ch)&&b.push(e.marker.parent||e.marker)}return b},findMarks:function(a,b,c){a=N(this,a),b=N(this,b);var d=[],e=a.line;return this.iter(a.line,b.line+1,function(f){var g=f.markedSpans;if(g)for(var h=0;h=i.to||null==i.from&&e!=a.line||null!=i.from&&e==b.line&&i.from>=b.ch||c&&!c(i.marker)||d.push(i.marker.parent||i.marker)}++e}),d},getAllMarks:function(){var a=[];return this.iter(function(b){var c=b.markedSpans;if(c)for(var d=0;da?(b=a,!0):(a-=f,void++c)}),N(this,H(c,b))},indexFromPos:function(a){a=N(this,a);var b=a.ch;if(a.lineb&&(b=a.from),null!=a.to&&a.to0)e=new H(e.line,e.ch+1),a.replaceRange(f.charAt(e.ch-1)+f.charAt(e.ch-2),H(e.line,e.ch-2),e,"+transpose");else if(e.line>a.doc.first){var g=z(a.doc,e.line-1).text;g&&(e=new H(e.line,1),a.replaceRange(f.charAt(0)+a.doc.lineSeparator()+g.charAt(g.length-1),H(e.line-1,g.length-1),e,"+transpose"))}c.push(new Hd(e,e))}a.setSelections(c)})},newlineAndIndent:function(a){return kd(a,function(){for(var b=a.listSelections(),c=b.length-1;c>=0;c--)a.replaceRange(a.doc.lineSeparator(),b[c].anchor,b[c].head,"+input");b=a.listSelections();for(var d=0;da.firstLine()&&(d=H(d.line-1,z(a.doc,d.line-1).length)),e.ch==z(a.doc,e.line).text.length&&e.lineb.viewTo-1)return!1;var f,g,h;d.line==b.viewFrom||0==(f=xc(a,d.line))?(g=D(b.view[0].line),h=b.view[0].node):(g=D(b.view[f].line),h=b.view[f-1].node.nextSibling);var i,j,k=xc(a,e.line);if(k==b.view.length-1?(i=b.viewTo-1,j=b.lineDiv.lastChild):(i=D(b.view[k+1].line)-1,j=b.view[k+1].node.previousSibling),!h)return!1;for(var l=a.doc.splitLines(Xf(a,h,j,g,i)),m=A(a.doc,H(g,0),H(i,z(a.doc,i).text.length));l.length>1&&m.length>1;)if(p(l)==p(m))l.pop(),m.pop(),i--;else{if(l[0]!=m[0])break;l.shift(),m.shift(),g++}for(var n=0,o=0,q=l[0],r=m[0],s=Math.min(q.length,r.length);n1||l[0]||I(w,x)?(De(a.doc,l,w,x,"+input"),!0):void 0},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){this.composing&&(this.composing=null,this.pollContent()||od(this.cm),this.div.blur(),this.div.focus())},readFromDOMSoon:function(){var a=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){a.readDOMTimeout=null,a.composing||!a.cm.isReadOnly()&&a.pollContent()||kd(a.cm,function(){return od(a.cm)})},80))},setUneditable:function(a){a.contentEditable="false"},onKeyPress:function(a){a.preventDefault(),this.cm.isReadOnly()||ld(this.cm,Lf)(this.cm,String.fromCharCode(null==a.charCode?a.keyCode:a.charCode),0)},readOnlyChanged:function(a){this.div.contentEditable=String("nocursor"!=a)},onContextMenu:s,resetPosition:s,needsContentAttribute:!0},Uf.prototype),$f.prototype=j({init:function(a){function b(a){if(!Fa(e,a)){if(e.somethingSelected())Kf({lineWise:!1,text:e.getSelections()}),d.inaccurateSelection&&(d.prevInput="",d.inaccurateSelection=!1,g.value=Ah.text.join("\n"),zg(g));else{if(!e.options.lineWiseCopyCut)return;var b=Of(e);Kf({lineWise:!0,text:b.text}),"cut"==a.type?e.setSelections(b.ranges,null,Eg):(d.prevInput="",g.value=b.text.join("\n"),zg(g))}"cut"==a.type&&(e.state.cutIncoming=!0)}}var c=this,d=this,e=this.cm,f=this.wrapper=Qf(),g=this.textarea=f.firstChild;a.wrapper.insertBefore(f,a.wrapper.firstChild),pg&&(g.style.width="0px"),Pg(g,"input",function(){gg&&hg>=9&&c.hasSelection&&(c.hasSelection=null),d.poll()}),Pg(g,"paste",function(a){Fa(e,a)||Mf(a,e)||(e.state.pasteIncoming=!0,d.fastPoll())}),Pg(g,"cut",b),Pg(g,"copy",b),Pg(a.scroller,"paste",function(b){Nb(a,b)||Fa(e,b)||(e.state.pasteIncoming=!0,d.focus())}),Pg(a.lineSpace,"selectstart",function(b){Nb(a,b)||Ja(b)}),Pg(g,"compositionstart",function(){var a=e.getCursor("from");d.composing&&d.composing.range.clear(),d.composing={start:a,range:e.markText(a,e.getCursor("to"),{className:"CodeMirror-composing"})}}),Pg(g,"compositionend",function(){d.composing&&(d.poll(),d.composing.range.clear(),d.composing=null)})},prepareSelection:function(){var a=this.cm,b=a.display,c=a.doc,d=zc(a);if(a.options.moveInputWithCursor){var e=lc(a,c.sel.primary().head,"div"),f=b.wrapper.getBoundingClientRect(),g=b.lineDiv.getBoundingClientRect();d.teTop=Math.max(0,Math.min(b.wrapper.clientHeight-10,e.top+g.top-f.top)),d.teLeft=Math.max(0,Math.min(b.wrapper.clientWidth-10,e.left+g.left-f.left))}return d},showSelection:function(a){var b=this.cm,d=b.display;c(d.cursorDiv,a.cursors),c(d.selectionDiv,a.selection),null!=a.teTop&&(this.wrapper.style.top=a.teTop+"px",this.wrapper.style.left=a.teLeft+"px")},reset:function(a){if(!this.contextMenuPending){var b,c,d=this.cm,e=d.doc;if(d.somethingSelected()){this.prevInput="";var f=e.sel.primary();b=Tg&&(f.to().line-f.from().line>100||(c=d.getSelection()).length>1e3);var g=b?"-":c||d.getSelection();this.textarea.value=g,d.state.focused&&zg(this.textarea),gg&&hg>=9&&(this.hasSelection=g)}else a||(this.prevInput=this.textarea.value="",gg&&hg>=9&&(this.hasSelection=null));this.inaccurateSelection=b}},getField:function(){return this.textarea},supportsTouch:function(){return!1},focus:function(){if("nocursor"!=this.cm.options.readOnly&&(!qg||f()!=this.textarea))try{this.textarea.focus()}catch(a){}},blur:function(){this.textarea.blur()},resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var a=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){a.poll(),a.cm.state.focused&&a.slowPoll()})},fastPoll:function(){function a(){var d=c.poll();d||b?(c.pollingFast=!1,c.slowPoll()):(b=!0,c.polling.set(60,a))}var b=!1,c=this;c.pollingFast=!0,c.polling.set(20,a)},poll:function(){var a=this,b=this.cm,c=this.textarea,d=this.prevInput;if(this.contextMenuPending||!b.state.focused||Sg(c)&&!d&&!this.composing||b.isReadOnly()||b.options.disableInput||b.state.keySeq)return!1;var e=c.value; +if(e==d&&!b.somethingSelected())return!1;if(gg&&hg>=9&&this.hasSelection===e||rg&&/[\uf700-\uf7ff]/.test(e))return b.display.input.reset(),!1;if(b.doc.sel==b.display.selForContextMenu){var f=e.charCodeAt(0);if(8203!=f||d||(d="​"),8666==f)return this.reset(),this.cm.execCommand("undo")}for(var g=0,h=Math.min(d.length,e.length);g1e3||e.indexOf("\n")>-1?c.value=a.prevInput="":a.prevInput=e,a.composing&&(a.composing.range.clear(),a.composing.range=b.markText(a.composing.start,b.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},ensurePolled:function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},onKeyPress:function(){gg&&hg>=9&&(this.hasSelection=null),this.fastPoll()},onContextMenu:function(a){function b(){if(null!=g.selectionStart){var a=e.somethingSelected(),b="​"+(a?g.value:"");g.value="⇚",g.value=b,d.prevInput=a?"":"​",g.selectionStart=1,g.selectionEnd=b.length,f.selForContextMenu=e.doc.sel}}function c(){if(d.contextMenuPending=!1,d.wrapper.style.cssText=l,g.style.cssText=k,gg&&hg<9&&f.scrollbars.setScrollTop(f.scroller.scrollTop=i),null!=g.selectionStart){(!gg||gg&&hg<9)&&b();var a=0,c=function(){f.selForContextMenu==e.doc.sel&&0==g.selectionStart&&g.selectionEnd>0&&"​"==d.prevInput?ld(e,ve)(e):a++<10?f.detectingSelectAll=setTimeout(c,500):f.input.reset()};f.detectingSelectAll=setTimeout(c,200)}}var d=this,e=d.cm,f=e.display,g=d.textarea,h=wc(e,a),i=f.scroller.scrollTop;if(h&&!lg){var j=e.options.resetSelectionOnContextMenu;j&&e.doc.sel.contains(h)==-1&&ld(e,ne)(e.doc,Jd(h),Eg);var k=g.style.cssText,l=d.wrapper.style.cssText;d.wrapper.style.cssText="position: absolute";var m=d.wrapper.getBoundingClientRect();g.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(a.clientY-m.top-5)+"px; left: "+(a.clientX-m.left-5)+"px;\n z-index: 1000; background: "+(gg?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var n;if(ig&&(n=window.scrollY),f.input.focus(),ig&&window.scrollTo(null,n),f.input.reset(),e.somethingSelected()||(g.value=d.prevInput=" "),d.contextMenuPending=!0,f.selForContextMenu=e.doc.sel,clearTimeout(f.detectingSelectAll),gg&&hg>=9&&b(),xg){Ma(a);var o=function(){Da(window,"mouseup",o),setTimeout(c,20)};Pg(window,"mouseup",o)}else setTimeout(c,50)}},readOnlyChanged:function(a){a||this.reset()},setUneditable:s,needsContentAttribute:!1},$f.prototype),Df(Hf),Rf(Hf);var Bh="iter insert remove copy getEditor constructor".split(" ");for(var Ch in jh.prototype)jh.prototype.hasOwnProperty(Ch)&&m(Bh,Ch)<0&&(Hf.prototype[Ch]=function(a){return function(){return a.apply(this.doc,arguments)}}(jh.prototype[Ch]));return Ia(jh),Hf.inputStyles={textarea:$f,contenteditable:Uf},Hf.defineMode=function(a){Hf.defaults.mode||"null"==a||(Hf.defaults.mode=a),Sa.apply(this,arguments)},Hf.defineMIME=Ta,Hf.defineMode("null",function(){return{token:function(a){return a.skipToEnd()}}}),Hf.defineMIME("text/plain","null"),Hf.defineExtension=function(a,b){Hf.prototype[a]=b},Hf.defineDocExtension=function(a,b){jh.prototype[a]=b},Hf.fromTextArea=_f,ag(Hf),Hf.version="5.21.0",Hf}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("../../lib/codemirror")):"function"==typeof c&&c.amd?c("codemirror/mode/xml/xml",["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";var b={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},c={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,caseFold:!1};a.defineMode("xml",function(d,e){function f(a,b){function c(c){return b.tokenize=c,c(a,b)}var d=a.next();if("<"==d)return a.eat("!")?a.eat("[")?a.match("CDATA[")?c(i("atom","]]>")):null:a.match("--")?c(i("comment","-->")):a.match("DOCTYPE",!0,!0)?(a.eatWhile(/[\w\._\-]/),c(j(1))):null:a.eat("?")?(a.eatWhile(/[\w\._\-]/),b.tokenize=i("meta","?>"),"meta"):(A=a.eat("/")?"closeTag":"openTag",b.tokenize=g,"tag bracket");if("&"==d){var e;return e=a.eat("#")?a.eat("x")?a.eatWhile(/[a-fA-F\d]/)&&a.eat(";"):a.eatWhile(/[\d]/)&&a.eat(";"):a.eatWhile(/[\w\.\-:]/)&&a.eat(";"),e?"atom":"error"}return a.eatWhile(/[^&<]/),null}function g(a,b){var c=a.next();if(">"==c||"/"==c&&a.eat(">"))return b.tokenize=f,A=">"==c?"endTag":"selfcloseTag","tag bracket";if("="==c)return A="equals",null;if("<"==c){b.tokenize=f,b.state=n,b.tagName=b.tagStart=null;var d=b.tokenize(a,b);return d?d+" tag error":"tag error"}return/[\'\"]/.test(c)?(b.tokenize=h(c),b.stringStartCol=a.column(),b.tokenize(a,b)):(a.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function h(a){var b=function(b,c){for(;!b.eol();)if(b.next()==a){c.tokenize=g;break}return"string"};return b.isInAttribute=!0,b}function i(a,b){return function(c,d){for(;!c.eol();){if(c.match(b)){d.tokenize=f;break}c.next()}return a}}function j(a){return function(b,c){for(var d;null!=(d=b.next());){if("<"==d)return c.tokenize=j(a+1),c.tokenize(b,c);if(">"==d){if(1==a){c.tokenize=f;break}return c.tokenize=j(a-1),c.tokenize(b,c)}}return"meta"}}function k(a,b,c){this.prev=a.context,this.tagName=b,this.indent=a.indented,this.startOfLine=c,(x.doNotIndent.hasOwnProperty(b)||a.context&&a.context.noIndent)&&(this.noIndent=!0)}function l(a){a.context&&(a.context=a.context.prev)}function m(a,b){for(var c;;){if(!a.context)return;if(c=a.context.tagName,!x.contextGrabbers.hasOwnProperty(c)||!x.contextGrabbers[c].hasOwnProperty(b))return;l(a)}}function n(a,b,c){return"openTag"==a?(c.tagStart=b.column(),o):"closeTag"==a?p:n}function o(a,b,c){return"word"==a?(c.tagName=b.current(),B="tag",s):(B="error",o)}function p(a,b,c){if("word"==a){var d=b.current();return c.context&&c.context.tagName!=d&&x.implicitlyClosed.hasOwnProperty(c.context.tagName)&&l(c),c.context&&c.context.tagName==d||x.matchClosing===!1?(B="tag",q):(B="tag error",r)}return B="error",r}function q(a,b,c){return"endTag"!=a?(B="error",q):(l(c),n)}function r(a,b,c){return B="error",q(a,b,c)}function s(a,b,c){if("word"==a)return B="attribute",t;if("endTag"==a||"selfcloseTag"==a){var d=c.tagName,e=c.tagStart;return c.tagName=c.tagStart=null,"selfcloseTag"==a||x.autoSelfClosers.hasOwnProperty(d)?m(c,d):(m(c,d),c.context=new k(c,d,e==c.indented)),n}return B="error",s}function t(a,b,c){return"equals"==a?u:(x.allowMissing||(B="error"),s(a,b,c))}function u(a,b,c){return"string"==a?v:"word"==a&&x.allowUnquoted?(B="string",s):(B="error",s(a,b,c))}function v(a,b,c){return"string"==a?v:s(a,b,c)}var w=d.indentUnit,x={},y=e.htmlMode?b:c;for(var z in y)x[z]=y[z];for(var z in e)x[z]=e[z];var A,B;return f.isInText=!0,{startState:function(a){var b={tokenize:f,state:n,indented:a||0,tagName:null,tagStart:null,context:null};return null!=a&&(b.baseIndent=a),b},token:function(a,b){if(!b.tagName&&a.sol()&&(b.indented=a.indentation()),a.eatSpace())return null;A=null;var c=b.tokenize(a,b);return(c||A)&&"comment"!=c&&(B=null,b.state=b.state(A||c,a,b),B&&(c="error"==B?c+" error":B)),c},indent:function(b,c,d){var e=b.context;if(b.tokenize.isInAttribute)return b.tagStart==b.indented?b.stringStartCol+1:b.indented+w;if(e&&e.noIndent)return a.Pass;if(b.tokenize!=g&&b.tokenize!=f)return d?d.match(/^(\s*)/)[0].length:0;if(b.tagName)return x.multilineTagIndentPastTag!==!1?b.tagStart+b.tagName.length+2:b.tagStart+w*(x.multilineTagIndentFactor||1);if(x.alignCDATA&&/$/,blockCommentStart:"",configuration:x.htmlMode?"html":"xml",helperType:x.htmlMode?"html":"xml",skipAttribute:function(a){a.state==u&&(a.state=s)}}}),a.defineMIME("text/xml","xml"),a.defineMIME("application/xml","xml"),a.mimeModes.hasOwnProperty("text/html")||a.defineMIME("text/html",{name:"xml",htmlMode:!0})}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("../../lib/codemirror")):"function"==typeof c&&c.amd?c("codemirror/mode/javascript/javascript",["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";function b(a,b,c){return/^(?:operator|sof|keyword c|case|new|[\[{}\(,;:]|=>)$/.test(b.lastType)||"quasi"==b.lastType&&/\{\s*$/.test(a.string.slice(0,a.pos-(c||0)))}a.defineMode("javascript",function(c,d){function e(a){for(var b,c=!1,d=!1;null!=(b=a.next());){if(!c){if("/"==b&&!d)return;"["==b?d=!0:d&&"]"==b&&(d=!1)}c=!c&&"\\"==b}}function f(a,b,c){return xa=a,ya=c,b}function g(a,c){var d=a.next();if('"'==d||"'"==d)return c.tokenize=h(d),c.tokenize(a,c);if("."==d&&a.match(/^\d+(?:[eE][+\-]?\d+)?/))return f("number","number");if("."==d&&a.match(".."))return f("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(d))return f(d);if("="==d&&a.eat(">"))return f("=>","operator");if("0"==d&&a.eat(/x/i))return a.eatWhile(/[\da-f]/i),f("number","number");if("0"==d&&a.eat(/o/i))return a.eatWhile(/[0-7]/i),f("number","number");if("0"==d&&a.eat(/b/i))return a.eatWhile(/[01]/i),f("number","number");if(/\d/.test(d))return a.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),f("number","number");if("/"==d)return a.eat("*")?(c.tokenize=i,i(a,c)):a.eat("/")?(a.skipToEnd(),f("comment","comment")):b(a,c,1)?(e(a),a.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/),f("regexp","string-2")):(a.eatWhile(Ga),f("operator","operator",a.current()));if("`"==d)return c.tokenize=j,j(a,c);if("#"==d)return a.skipToEnd(),f("error","error");if(Ga.test(d))return a.eatWhile(Ga),f("operator","operator",a.current());if(Ea.test(d)){a.eatWhile(Ea);var g=a.current(),k=Fa.propertyIsEnumerable(g)&&Fa[g];return k&&"."!=c.lastType?f(k.type,k.style,g):f("variable","variable",g)}}function h(a){return function(b,c){var d,e=!1;if(Ba&&"@"==b.peek()&&b.match(Ha))return c.tokenize=g,f("jsonld-keyword","meta");for(;null!=(d=b.next())&&(d!=a||e);)e=!e&&"\\"==d;return e||(c.tokenize=g),f("string","string")}}function i(a,b){for(var c,d=!1;c=a.next();){if("/"==c&&d){b.tokenize=g;break}d="*"==c}return f("comment","comment")}function j(a,b){for(var c,d=!1;null!=(c=a.next());){if(!d&&("`"==c||"$"==c&&a.eat("{"))){b.tokenize=g;break}d=!d&&"\\"==c}return f("quasi","string-2",a.current())}function k(a,b){b.fatArrowAt&&(b.fatArrowAt=null);var c=a.string.indexOf("=>",a.start);if(!(c<0)){if(Da){var d=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(a.string.slice(a.start,c));d&&(c=d.index)}for(var e=0,f=!1,g=c-1;g>=0;--g){var h=a.string.charAt(g),i=Ia.indexOf(h);if(i>=0&&i<3){if(!e){++g;break}if(0==--e){"("==h&&(f=!0);break}}else if(i>=3&&i<6)++e;else if(Ea.test(h))f=!0;else{if(/["'\/]/.test(h))return;if(f&&!e){++g;break}}}f&&!e&&(b.fatArrowAt=g)}}function l(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.prev=e,this.info=f,null!=d&&(this.align=d)}function m(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0;for(var d=a.context;d;d=d.prev)for(var c=d.vars;c;c=c.next)if(c.name==b)return!0}function n(a,b,c,d,e){var f=a.cc;for(Ka.state=a,Ka.stream=e,Ka.marked=null,Ka.cc=f,Ka.style=b,a.lexical.hasOwnProperty("align")||(a.lexical.align=!0);;){var g=f.length?f.pop():Ca?x:w;if(g(c,d)){for(;f.length&&f[f.length-1].lex;)f.pop()();return Ka.marked?Ka.marked:"variable"==c&&m(a,d)?"variable-2":b}}}function o(){for(var a=arguments.length-1;a>=0;a--)Ka.cc.push(arguments[a])}function p(){return o.apply(null,arguments),!0}function q(a){function b(b){for(var c=b;c;c=c.next)if(c.name==a)return!0;return!1}var c=Ka.state;if(Ka.marked="def",c.context){if(b(c.localVars))return;c.localVars={name:a,next:c.localVars}}else{if(b(c.globalVars))return;d.globalVars&&(c.globalVars={name:a,next:c.globalVars})}}function r(){Ka.state.context={prev:Ka.state.context,vars:Ka.state.localVars},Ka.state.localVars=La}function s(){Ka.state.localVars=Ka.state.context.vars,Ka.state.context=Ka.state.context.prev}function t(a,b){var c=function(){var c=Ka.state,d=c.indented;if("stat"==c.lexical.type)d=c.lexical.indented;else for(var e=c.lexical;e&&")"==e.type&&e.align;e=e.prev)d=e.indented;c.lexical=new l(d,Ka.stream.column(),a,null,c.lexical,b)};return c.lex=!0,c}function u(){var a=Ka.state;a.lexical.prev&&(")"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function v(a){function b(c){return c==a?p():";"==a?o():p(b)}return b}function w(a,b){return"var"==a?p(t("vardef",b.length),$,v(";"),u):"keyword a"==a?p(t("form"),z,w,u):"keyword b"==a?p(t("form"),w,u):"{"==a?p(t("}"),T,u):";"==a?p():"if"==a?("else"==Ka.state.lexical.info&&Ka.state.cc[Ka.state.cc.length-1]==u&&Ka.state.cc.pop()(),p(t("form"),z,w,u,da)):"function"==a?p(ja):"for"==a?p(t("form"),ea,w,u):"variable"==a?p(t("stat"),M):"switch"==a?p(t("form"),z,t("}","switch"),v("{"),T,u,u):"case"==a?p(x,v(":")):"default"==a?p(v(":")):"catch"==a?p(t("form"),r,v("("),ka,v(")"),w,u,s):"class"==a?p(t("form"),ma,u):"export"==a?p(t("stat"),qa,u):"import"==a?p(t("stat"),ra,u):"module"==a?p(t("form"),_,t("}"),v("{"),T,u,u):"type"==a?p(V,v("operator"),V,v(";")):"async"==a?p(w):o(t("stat"),x,v(";"),u)}function x(a){return A(a,!1)}function y(a){return A(a,!0)}function z(a){return"("!=a?o():p(t(")"),x,v(")"),u)}function A(a,b){if(Ka.state.fatArrowAt==Ka.stream.start){var c=b?I:H;if("("==a)return p(r,t(")"),R(_,")"),u,v("=>"),c,s);if("variable"==a)return o(r,_,v("=>"),c,s)}var d=b?E:D;return Ja.hasOwnProperty(a)?p(d):"function"==a?p(ja,d):"class"==a?p(t("form"),la,u):"keyword c"==a||"async"==a?p(b?C:B):"("==a?p(t(")"),B,v(")"),u,d):"operator"==a||"spread"==a?p(b?y:x):"["==a?p(t("]"),va,u,d):"{"==a?S(O,"}",null,d):"quasi"==a?o(F,d):"new"==a?p(J(b)):p()}function B(a){return a.match(/[;\}\)\],]/)?o():o(x)}function C(a){return a.match(/[;\}\)\],]/)?o():o(y)}function D(a,b){return","==a?p(x):E(a,b,!1)}function E(a,b,c){var d=0==c?D:E,e=0==c?x:y;return"=>"==a?p(r,c?I:H,s):"operator"==a?/\+\+|--/.test(b)?p(d):"?"==b?p(x,v(":"),e):p(e):"quasi"==a?o(F,d):";"!=a?"("==a?S(y,")","call",d):"."==a?p(N,d):"["==a?p(t("]"),B,v("]"),u,d):void 0:void 0}function F(a,b){return"quasi"!=a?o():"${"!=b.slice(b.length-2)?p(F):p(x,G)}function G(a){if("}"==a)return Ka.marked="string-2",Ka.state.tokenize=j,p(F)}function H(a){return k(Ka.stream,Ka.state),o("{"==a?w:x)}function I(a){return k(Ka.stream,Ka.state),o("{"==a?w:y)}function J(a){return function(b){return"."==b?p(a?L:K):o(a?y:x)}}function K(a,b){if("target"==b)return Ka.marked="keyword",p(D)}function L(a,b){if("target"==b)return Ka.marked="keyword",p(E)}function M(a){return":"==a?p(u,w):o(D,v(";"),u)}function N(a){if("variable"==a)return Ka.marked="property",p()}function O(a,b){return"async"==a?(Ka.marked="property",p(O)):"variable"==a||"keyword"==Ka.style?(Ka.marked="property",p("get"==b||"set"==b?P:Q)):"number"==a||"string"==a?(Ka.marked=Ba?"property":Ka.style+" property",p(Q)):"jsonld-keyword"==a?p(Q):"modifier"==a?p(O):"["==a?p(x,v("]"),Q):"spread"==a?p(x):":"==a?o(Q):void 0}function P(a){return"variable"!=a?o(Q):(Ka.marked="property",p(ja))}function Q(a){return":"==a?p(y):"("==a?o(ja):void 0}function R(a,b){function c(d,e){if(","==d){var f=Ka.state.lexical;return"call"==f.info&&(f.pos=(f.pos||0)+1),p(function(c,d){return c==b||d==b?o():o(a)},c)}return d==b||e==b?p():p(v(b))}return function(d,e){return d==b||e==b?p():o(a,c)}}function S(a,b,c){for(var d=3;d"==a)return p(V)}function X(a){return"variable"==a||"keyword"==Ka.style?(Ka.marked="property",p(X)):":"==a?p(V):void 0}function Y(a){return"variable"==a?p(Y):":"==a?p(V):void 0}function Z(a,b){return"<"==b?p(R(V,">"),Z):"["==a?p(v("]"),Z):void 0}function $(){return o(_,U,ba,ca)}function _(a,b){return"modifier"==a?p(_):"variable"==a?(q(b),p()):"spread"==a?p(_):"["==a?S(_,"]"):"{"==a?S(aa,"}"):void 0}function aa(a,b){return"variable"!=a||Ka.stream.match(/^\s*:/,!1)?("variable"==a&&(Ka.marked="property"),"spread"==a?p(_):"}"==a?o():p(v(":"),_,ba)):(q(b),p(ba))}function ba(a,b){if("="==b)return p(y)}function ca(a){if(","==a)return p($)}function da(a,b){if("keyword b"==a&&"else"==b)return p(t("form","else"),w,u)}function ea(a){if("("==a)return p(t(")"),fa,v(")"),u)}function fa(a){return"var"==a?p($,v(";"),ha):";"==a?p(ha):"variable"==a?p(ga):o(x,v(";"),ha)}function ga(a,b){return"in"==b||"of"==b?(Ka.marked="keyword",p(x)):p(D,ha)}function ha(a,b){return";"==a?p(ia):"in"==b||"of"==b?(Ka.marked="keyword",p(x)):o(x,v(";"),ia)}function ia(a){")"!=a&&p(x)}function ja(a,b){return"*"==b?(Ka.marked="keyword",p(ja)):"variable"==a?(q(b),p(ja)):"("==a?p(r,t(")"),R(ka,")"),u,U,w,s):void 0}function ka(a){return"spread"==a?p(ka):o(_,U,ba)}function la(a,b){return"variable"==a?ma(a,b):na(a,b)}function ma(a,b){if("variable"==a)return q(b),p(na)}function na(a,b){return"extends"==b||"implements"==b?p(Da?V:x,na):"{"==a?p(t("}"),oa,u):void 0}function oa(a,b){return"variable"==a||"keyword"==Ka.style?("static"==b||"get"==b||"set"==b||Da&&("public"==b||"private"==b||"protected"==b||"readonly"==b||"abstract"==b))&&Ka.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(Ka.marked="keyword",p(oa)):(Ka.marked="property",p(Da?pa:ja,oa)):"*"==b?(Ka.marked="keyword",p(oa)):";"==a?p(oa):"}"==a?p():void 0}function pa(a,b){return"?"==b?p(pa):":"==a?p(V,ba):o(ja)}function qa(a,b){return"*"==b?(Ka.marked="keyword",p(ua,v(";"))):"default"==b?(Ka.marked="keyword",p(x,v(";"))):o(w)}function ra(a){return"string"==a?p():o(sa,ua)}function sa(a,b){return"{"==a?S(sa,"}"):("variable"==a&&q(b),"*"==b&&(Ka.marked="keyword"),p(ta))}function ta(a,b){if("as"==b)return Ka.marked="keyword",p(sa)}function ua(a,b){if("from"==b)return Ka.marked="keyword",p(x)}function va(a){return"]"==a?p():o(R(y,"]"))}function wa(a,b){return"operator"==a.lastType||","==a.lastType||Ga.test(b.charAt(0))||/[,.]/.test(b.charAt(0))}var xa,ya,za=c.indentUnit,Aa=d.statementIndent,Ba=d.jsonld,Ca=d.json||Ba,Da=d.typescript,Ea=d.wordCharacters||/[\w$\xa1-\uffff]/,Fa=function(){function a(a){return{type:a,style:"keyword"}}var b=a("keyword a"),c=a("keyword b"),d=a("keyword c"),e=a("operator"),f={type:"atom",style:"atom"},g={"if":a("if"),"while":b,"with":b,"else":c,"do":c,"try":c,"finally":c,"return":d,"break":d,"continue":d,"new":a("new"),"delete":d,"throw":d,"debugger":d,"var":a("var"),"const":a("var"),"let":a("var"),"function":a("function"),"catch":a("catch"),"for":a("for"),"switch":a("switch"),"case":a("case"),"default":a("default"),"in":e,"typeof":e,"instanceof":e,"true":f,"false":f,"null":f,undefined:f,NaN:f,Infinity:f,"this":a("this"),"class":a("class"),"super":a("atom"),"yield":d,"export":a("export"),"import":a("import"),"extends":d,await:d,async:a("async")};if(Da){var h={type:"variable",style:"variable-3"},i={"interface":a("class"),"implements":d,namespace:d,module:a("module"),"enum":a("module"),type:a("type"),"public":a("modifier"),"private":a("modifier"),"protected":a("modifier"),"abstract":a("modifier"),as:e,string:h,number:h,"boolean":h,any:h};for(var j in i)g[j]=i[j]}return g}(),Ga=/[+\-*&%=<>!?|~^]/,Ha=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/,Ia="([{}])",Ja={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,"this":!0,"jsonld-keyword":!0},Ka={state:null,column:null,marked:null,cc:null},La={name:"this",next:{name:"arguments"}};return u.lex=!0,{startState:function(a){var b={tokenize:g,lastType:"sof",cc:[],lexical:new l((a||0)-za,0,"block",(!1)),localVars:d.localVars,context:d.localVars&&{vars:d.localVars},indented:a||0};return d.globalVars&&"object"==typeof d.globalVars&&(b.globalVars=d.globalVars),b},token:function(a,b){if(a.sol()&&(b.lexical.hasOwnProperty("align")||(b.lexical.align=!1),b.indented=a.indentation(),k(a,b)),b.tokenize!=i&&a.eatSpace())return null;var c=b.tokenize(a,b);return"comment"==xa?c:(b.lastType="operator"!=xa||"++"!=ya&&"--"!=ya?xa:"incdec",n(b,c,xa,ya,a))},indent:function(b,c){if(b.tokenize==i)return a.Pass;if(b.tokenize!=g)return 0;var e,f=c&&c.charAt(0),h=b.lexical;if(!/^\s*else\b/.test(c))for(var j=b.cc.length-1;j>=0;--j){var k=b.cc[j];if(k==u)h=h.prev;else if(k!=da)break}for(;("stat"==h.type||"form"==h.type)&&("}"==f||(e=b.cc[b.cc.length-1])&&(e==D||e==E)&&!/^[,\.=+\-*:?[\(]/.test(c));)h=h.prev;Aa&&")"==h.type&&"stat"==h.prev.type&&(h=h.prev);var l=h.type,m=f==l;return"vardef"==l?h.indented+("operator"==b.lastType||","==b.lastType?h.info+1:0):"form"==l&&"{"==f?h.indented:"form"==l?h.indented+za:"stat"==l?h.indented+(wa(b,c)?Aa||za:0):"switch"!=h.info||m||0==d.doubleIndentSwitch?h.align?h.column+(m?0:1):h.indented+(m?0:za):h.indented+(/^(?:case|default)\b/.test(c)?za:2*za)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:Ca?null:"/*",blockCommentEnd:Ca?null:"*/",lineComment:Ca?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:Ca?"json":"javascript",jsonldMode:Ba,jsonMode:Ca,expressionAllowed:b,skipExpression:function(a){var b=a.cc[a.cc.length-1];b!=x&&b!=y||a.cc.pop()}}}),a.registerHelper("wordChars","javascript",/[\w$]/),a.defineMIME("text/javascript","javascript"),a.defineMIME("text/ecmascript","javascript"),a.defineMIME("application/javascript","javascript"),a.defineMIME("application/x-javascript","javascript"),a.defineMIME("application/ecmascript","javascript"),a.defineMIME("application/json",{name:"javascript",json:!0}),a.defineMIME("application/x-json",{name:"javascript",json:!0}),a.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),a.defineMIME("text/typescript",{name:"javascript",typescript:!0}),a.defineMIME("application/typescript",{name:"javascript",typescript:!0})}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("../../lib/codemirror")):"function"==typeof c&&c.amd?c("codemirror/mode/css/css",["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";function b(a){for(var b={},c=0;c*\/]/.test(c)?d(null,"select-op"):"."==c&&a.match(/^-?[_a-z][_a-z0-9-]*/i)?d("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(c)?d(null,c):"u"==c&&a.match(/rl(-prefix)?\(/)||"d"==c&&a.match("omain(")||"r"==c&&a.match("egexp(")?(a.backUp(1),b.tokenize=g,d("property","word")):/[\w\\\-]/.test(c)?(a.eatWhile(/[\w\\\-]/),d("property","word")):d(null,null):/[\d.]/.test(a.peek())?(a.eatWhile(/[\w.%]/),d("number","unit")):a.match(/^-[\w\\\-]+/)?(a.eatWhile(/[\w\\\-]/),a.match(/^\s*:/,!1)?d("variable-2","variable-definition"):d("variable-2","variable")):a.match(/^\w+-/)?d("meta","meta"):void 0}function f(a){return function(b,c){for(var e,f=!1;null!=(e=b.next());){if(e==a&&!f){")"==a&&b.backUp(1);break}f=!f&&"\\"==e}return(e==a||!f&&")"!=a)&&(c.tokenize=null),d("string","string")}}function g(a,b){return a.next(),a.match(/\s*[\"\')]/,!1)?b.tokenize=null:b.tokenize=f(")"),d(null,"(")}function h(a,b,c){this.type=a,this.indent=b,this.prev=c}function i(a,b,c,d){return a.context=new h(c,b.indentation()+(d===!1?0:q),a.context),c}function j(a){return a.context.prev&&(a.context=a.context.prev),a.context.type}function k(a,b,c){return E[c.context.type](a,b,c)}function l(a,b,c,d){for(var e=d||1;e>0;e--)c.context=c.context.prev;return k(a,b,c)}function m(a){var b=a.current().toLowerCase();p=B.hasOwnProperty(b)?"atom":A.hasOwnProperty(b)?"keyword":"variable"}var n=c.inline;c.propertyKeywords||(c=a.resolveMode("text/css"));var o,p,q=b.indentUnit,r=c.tokenHooks,s=c.documentTypes||{},t=c.mediaTypes||{},u=c.mediaFeatures||{},v=c.mediaValueKeywords||{},w=c.propertyKeywords||{},x=c.nonStandardPropertyKeywords||{},y=c.fontProperties||{},z=c.counterDescriptors||{},A=c.colorKeywords||{},B=c.valueKeywords||{},C=c.allowNested,D=c.supportsAtComponent===!0,E={};return E.top=function(a,b,c){if("{"==a)return i(c,b,"block");if("}"==a&&c.context.prev)return j(c);if(D&&/@component/.test(a))return i(c,b,"atComponentBlock");if(/^@(-moz-)?document$/.test(a))return i(c,b,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/.test(a))return i(c,b,"atBlock");if(/^@(font-face|counter-style)/.test(a))return c.stateArg=a,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(a))return"keyframes";if(a&&"@"==a.charAt(0))return i(c,b,"at");if("hash"==a)p="builtin";else if("word"==a)p="tag";else{if("variable-definition"==a)return"maybeprop";if("interpolation"==a)return i(c,b,"interpolation");if(":"==a)return"pseudo";if(C&&"("==a)return i(c,b,"parens")}return c.context.type},E.block=function(a,b,c){if("word"==a){var d=b.current().toLowerCase();return w.hasOwnProperty(d)?(p="property","maybeprop"):x.hasOwnProperty(d)?(p="string-2","maybeprop"):C?(p=b.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(p+=" error","maybeprop")}return"meta"==a?"block":C||"hash"!=a&&"qualifier"!=a?E.top(a,b,c):(p="error","block")},E.maybeprop=function(a,b,c){return":"==a?i(c,b,"prop"):k(a,b,c)},E.prop=function(a,b,c){if(";"==a)return j(c);if("{"==a&&C)return i(c,b,"propBlock");if("}"==a||"{"==a)return l(a,b,c);if("("==a)return i(c,b,"parens");if("hash"!=a||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(b.current())){if("word"==a)m(b);else if("interpolation"==a)return i(c,b,"interpolation")}else p+=" error";return"prop"},E.propBlock=function(a,b,c){return"}"==a?j(c):"word"==a?(p="property","maybeprop"):c.context.type},E.parens=function(a,b,c){return"{"==a||"}"==a?l(a,b,c):")"==a?j(c):"("==a?i(c,b,"parens"):"interpolation"==a?i(c,b,"interpolation"):("word"==a&&m(b),"parens")},E.pseudo=function(a,b,c){return"word"==a?(p="variable-3",c.context.type):k(a,b,c)},E.documentTypes=function(a,b,c){return"word"==a&&s.hasOwnProperty(b.current())?(p="tag",c.context.type):E.atBlock(a,b,c)},E.atBlock=function(a,b,c){if("("==a)return i(c,b,"atBlock_parens");if("}"==a||";"==a)return l(a,b,c);if("{"==a)return j(c)&&i(c,b,C?"block":"top");if("interpolation"==a)return i(c,b,"interpolation");if("word"==a){var d=b.current().toLowerCase();p="only"==d||"not"==d||"and"==d||"or"==d?"keyword":t.hasOwnProperty(d)?"attribute":u.hasOwnProperty(d)?"property":v.hasOwnProperty(d)?"keyword":w.hasOwnProperty(d)?"property":x.hasOwnProperty(d)?"string-2":B.hasOwnProperty(d)?"atom":A.hasOwnProperty(d)?"keyword":"error"}return c.context.type},E.atComponentBlock=function(a,b,c){return"}"==a?l(a,b,c):"{"==a?j(c)&&i(c,b,C?"block":"top",!1):("word"==a&&(p="error"),c.context.type)},E.atBlock_parens=function(a,b,c){return")"==a?j(c):"{"==a||"}"==a?l(a,b,c,2):E.atBlock(a,b,c)},E.restricted_atBlock_before=function(a,b,c){return"{"==a?i(c,b,"restricted_atBlock"):"word"==a&&"@counter-style"==c.stateArg?(p="variable","restricted_atBlock_before"):k(a,b,c)},E.restricted_atBlock=function(a,b,c){return"}"==a?(c.stateArg=null,j(c)):"word"==a?(p="@font-face"==c.stateArg&&!y.hasOwnProperty(b.current().toLowerCase())||"@counter-style"==c.stateArg&&!z.hasOwnProperty(b.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},E.keyframes=function(a,b,c){return"word"==a?(p="variable","keyframes"):"{"==a?i(c,b,"top"):k(a,b,c)},E.at=function(a,b,c){return";"==a?j(c):"{"==a||"}"==a?l(a,b,c):("word"==a?p="tag":"hash"==a&&(p="builtin"),"at")},E.interpolation=function(a,b,c){return"}"==a?j(c):"{"==a||";"==a?l(a,b,c):("word"==a?p="variable":"variable"!=a&&"("!=a&&")"!=a&&(p="error"),"interpolation")},{startState:function(a){return{tokenize:null,state:n?"block":"top",stateArg:null,context:new h(n?"block":"top",a||0,null)}},token:function(a,b){if(!b.tokenize&&a.eatSpace())return null;var c=(b.tokenize||e)(a,b);return c&&"object"==typeof c&&(o=c[1],c=c[0]),p=c,b.state=E[b.state](o,a,b),p},indent:function(a,b){var c=a.context,d=b&&b.charAt(0),e=c.indent;return"prop"!=c.type||"}"!=d&&")"!=d||(c=c.prev),c.prev&&("}"!=d||"block"!=c.type&&"top"!=c.type&&"interpolation"!=c.type&&"restricted_atBlock"!=c.type?(")"!=d||"parens"!=c.type&&"atBlock_parens"!=c.type)&&("{"!=d||"at"!=c.type&&"atBlock"!=c.type)||(e=Math.max(0,c.indent-q),c=c.prev):(c=c.prev,e=c.indent)),e},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace"}});var d=["domain","regexp","url","url-prefix"],e=b(d),f=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],g=b(f),h=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],i=b(h),j=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],k=b(j),l=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],m=b(l),n=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],o=b(n),p=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],q=b(p),r=["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"],s=b(r),t=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],u=b(t),v=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],w=b(v),x=d.concat(f).concat(h).concat(j).concat(l).concat(n).concat(t).concat(v); +a.registerHelper("hintWords","css",x),a.defineMIME("text/css",{documentTypes:e,mediaTypes:g,mediaFeatures:i,mediaValueKeywords:k,propertyKeywords:m,nonStandardPropertyKeywords:o,fontProperties:q,counterDescriptors:s,colorKeywords:u,valueKeywords:w,tokenHooks:{"/":function(a,b){return!!a.eat("*")&&(b.tokenize=c,c(a,b))}},name:"css"}),a.defineMIME("text/x-scss",{mediaTypes:g,mediaFeatures:i,mediaValueKeywords:k,propertyKeywords:m,nonStandardPropertyKeywords:o,colorKeywords:u,valueKeywords:w,fontProperties:q,allowNested:!0,tokenHooks:{"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=c,c(a,b)):["operator","operator"]},":":function(a){return!!a.match(/\s*\{/)&&[null,"{"]},$:function(a){return a.match(/^[\w-]+/),a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(a){return!!a.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),a.defineMIME("text/x-less",{mediaTypes:g,mediaFeatures:i,mediaValueKeywords:k,propertyKeywords:m,nonStandardPropertyKeywords:o,colorKeywords:u,valueKeywords:w,fontProperties:q,allowNested:!0,tokenHooks:{"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=c,c(a,b)):["operator","operator"]},"@":function(a){return a.eat("{")?[null,"interpolation"]:!a.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/,!1)&&(a.eatWhile(/[\w\\\-]/),a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),a.defineMIME("text/x-gss",{documentTypes:e,mediaTypes:g,mediaFeatures:i,propertyKeywords:m,nonStandardPropertyKeywords:o,fontProperties:q,counterDescriptors:s,colorKeywords:u,valueKeywords:w,supportsAtComponent:!0,tokenHooks:{"/":function(a,b){return!!a.eat("*")&&(b.tokenize=c,c(a,b))}},name:"css",helperType:"gss"})}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("../../lib/codemirror"),b("../xml/xml"),b("../javascript/javascript"),b("../css/css")):"function"==typeof c&&c.amd?c("codemirror/mode/htmlmixed/htmlmixed",["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],a):a(CodeMirror)}(function(a){"use strict";function b(a,b,c){var d=a.current(),e=d.search(b);return e>-1?a.backUp(d.length-e):d.match(/<\/?$/)&&(a.backUp(d.length),a.match(b,!1)||a.match(d)),c}function c(a){var b=i[a];return b?b:i[a]=new RegExp("\\s+"+a+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*")}function d(a,b){var d=a.match(c(b));return d?/^\s*(.*?)\s*$/.exec(d[2])[1]:""}function e(a,b){return new RegExp((b?"^":"")+"","i")}function f(a,b){for(var c in a)for(var d=b[c]||(b[c]=[]),e=a[c],f=e.length-1;f>=0;f--)d.unshift(e[f])}function g(a,b){for(var c=0;c\s\/]/.test(d.current())&&(h=f.htmlState.tagName&&f.htmlState.tagName.toLowerCase())&&k.hasOwnProperty(h))f.inTag=h+" ";else if(f.inTag&&m&&/>$/.test(d.current())){var n=/^([\S]+) (.*)/.exec(f.inTag);f.inTag=null;var o=">"==d.current()&&g(k[n[1]],n[2]),p=a.getMode(c,o),q=e(n[1],!0),r=e(n[1],!1);f.token=function(a,c){return a.match(q,!1)?(c.token=i,c.localState=c.localMode=null,null):b(a,r,c.localMode.token(a,c.localState))},f.localMode=p,f.localState=a.startState(p,j.indent(f.htmlState,""))}else f.inTag&&(f.inTag+=d.current(),d.eol()&&(f.inTag+=" "));return l}var j=a.getMode(c,{name:"xml",htmlMode:!0,multilineTagIndentFactor:d.multilineTagIndentFactor,multilineTagIndentPastTag:d.multilineTagIndentPastTag}),k={},l=d&&d.tags,m=d&&d.scriptTypes;if(f(h,k),l&&f(l,k),m)for(var n=m.length-1;n>=0;n--)k.script.unshift(["type",m[n].matches,m[n].mode]);return{startState:function(){var b=a.startState(j);return{token:i,inTag:null,localMode:null,localState:null,htmlState:b}},copyState:function(b){var c;return b.localState&&(c=a.copyState(b.localMode,b.localState)),{token:b.token,inTag:b.inTag,localMode:b.localMode,localState:c,htmlState:a.copyState(j,b.htmlState)}},token:function(a,b){return b.token(a,b)},indent:function(b,c){return!b.localMode||/^\s*<\//.test(c)?j.indent(b.htmlState,c):b.localMode.indent?b.localMode.indent(b.localState,c):a.Pass},innerMode:function(a){return{state:a.localState||a.htmlState,mode:a.localMode||j}}}},"xml","javascript","css"),a.defineMIME("text/html","htmlmixed")}),function(a){"object"==typeof exports&&"object"==typeof module?a(b("codemirror/lib/codemirror")):"function"==typeof c&&c.amd?c("formatting",["codemirror/lib/codemirror"],a):a(CodeMirror)}(function(a){a.extendMode("css",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(a,b){return/^[;{}]$/.test(b)}}),a.extendMode("javascript",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(a,b,c,d){return this.jsonMode?/^[\[,{]$/.test(b)||/^}/.test(c):(";"!=b||!d.lexical||")"!=d.lexical.type)&&(/^[;{}]$/.test(b)&&!/^;/.test(c))}});var b=/^(a|abbr|acronym|area|base|bdo|big|br|button|caption|cite|code|col|colgroup|dd|del|dfn|em|frame|hr|iframe|img|input|ins|kbd|label|legend|link|map|object|optgroup|option|param|q|samp|script|select|small|span|strong|sub|sup|textarea|tt|var)$/;a.extendMode("xml",{commentStart:"",newlineAfterToken:function(a,c,d,e){var f=!1;return"html"==this.configuration&&(f=!!e.context&&b.test(e.context.tagName)),!f&&("tag"==a&&/>$/.test(c)&&e.context||/^-1&&h>-1&&h>g&&(a=a.substr(0,g)+a.substring(g+f.commentStart.length,h)+a.substr(h+f.commentEnd.length)),e.replaceRange(a,c,d)}})}),a.defineExtension("autoIndentRange",function(a,b){var c=this;this.operation(function(){for(var d=a.line;d<=b.line;d++)c.indentLine(d,"smart")})}),a.defineExtension("autoFormatRange",function(b,c){function d(){j+="\n",l=!0,++k}for(var e=this,f=e.getMode(),g=e.getRange(b,c).split("\n"),h=a.copyState(f,e.getTokenAt(b).state),i=e.getOption("tabSize"),j="",k=0,l=0===b.ch,m=0;m\n\t
    <%= label %>
    \n\t
    \n
    \n'}),c("CodeManager/view/EditorView",["backbone","text!./../template/editor.html"],function(a,b){return a.View.extend({template:_.template(b),initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix},render:function(){var a=this.model.toJSON();return a.pfx=this.pfx,this.$el.html(this.template(a)),this.$el.attr("class",this.pfx+"editor-c"),this.$el.find("#"+this.pfx+"code").html(this.model.get("input")),this}})}),c("CodeManager/main",["require","./config/config","./model/HtmlGenerator","./model/CssGenerator","./model/JsonGenerator","./model/JsGenerator","./model/CodeMirrorEditor","./view/EditorView"],function(a){var b=function(){var b={},c=a("./config/config"),d=a("./model/HtmlGenerator"),e=a("./model/CssGenerator"),f=a("./model/JsonGenerator"),g=a("./model/JsGenerator"),h=a("./model/CodeMirrorEditor"),i=a("./view/EditorView"),j={},k={},l={},m={};return{getConfig:function(){return b},config:b,EditorView:i,name:"CodeManager",init:function(a){b=a||{};for(var i in c)i in b||(b[i]=c[i]);var j=b.pStylePrefix;return j&&(b.stylePrefix=j+b.stylePrefix),k.html=new d,k.css=new e,k.json=new f,k.js=new g,m.CodeMirror=new h,this},onLoad:function(){this.loadDefaultGenerators().loadDefaultViewers()},addGenerator:function(a,b){return j[a]=b,this},getGenerator:function(a){return j[a]||null},getGenerators:function(){return j},addViewer:function(a,b){return l[a]=b,this},getViewer:function(a){return l[a]||null},getViewers:function(){return l},updateViewer:function(a,b){a.setContent(b)},getCode:function(a,b,c){var d=this.getGenerator(b);return d?d.build(a,c):""},loadDefaultGenerators:function(){for(var a in k)this.addGenerator(a,k[a]);return this},loadDefaultViewers:function(){for(var a in m)this.addViewer(a,m[a]);return this}}};return b}),c("CodeManager",["CodeManager/main"],function(a){return a}),c("Panels/config/config",[],function(){var a="create-comp",b="move-comp",c="sw-visibility",d="export-template",e="open-sm",f="open-tm",g="open-layers",h="open-blocks",i="fullscreen",j="preview";return{stylePrefix:"pn-",defaults:[{id:"commands",buttons:[{id:a,command:a,className:"fa fa-pencil-square-o",attributes:{title:"Create element"},stopDefaultCommand:1},{id:b,command:b,className:"fa fa-arrows",attributes:{title:"Move elements"},stopDefaultCommand:1}]},{id:"options",buttons:[{active:!0,id:c,className:"fa fa-square-o",command:c,context:c,attributes:{title:"View components"}},{id:j,className:"fa fa-eye",command:j,context:j,stopDefaultCommand:1,attributes:{title:"Preview"}},{id:i,className:"fa fa-arrows-alt",command:i,context:i,attributes:{title:"Fullscreen"}},{id:d,className:"fa fa-code",command:d,attributes:{title:"View code"}}]},{id:"views",buttons:[{id:e,className:"fa fa-paint-brush",command:e,active:!0,attributes:{title:"Open Style Manager"}},{id:f,className:"fa fa-cog",command:f,attributes:{title:"Settings"}},{id:g,className:"fa fa-bars",command:g,attributes:{title:"Open Layer Manager"}},{id:h,className:"fa fa-th-large",command:h,attributes:{title:"Open Blocks"}}]}],em:null,delayBtnsShow:300}}),c("Panels/model/Button",["backbone","require"],function(a,b){return a.Model.extend({defaults:{id:"",className:"",command:"",context:"",buttons:[],attributes:{},options:{},active:!1,dragDrop:!1,runDefaultCommand:!0,stopDefaultCommand:!1},initialize:function(a){if(this.get("buttons").length){var c=b("./Buttons");this.set("buttons",new c(this.get("buttons")))}}})}),c("Panels/model/Buttons",["backbone","./Button"],function(a,b){return a.Collection.extend({model:b,deactivateAllExceptOne:function(a,b){this.forEach(function(c,d){c!==a&&(c.set("active",!1),b&&c.get("buttons").length&&c.get("buttons").deactivateAllExceptOne(a,b))})},deactivateAll:function(a){var b=a||"";this.forEach(function(a,c){a.get("context")==b&&(a.set("active",!1),a.get("buttons").length&&a.get("buttons").deactivateAll(b))})}})}),c("Panels/model/Panel",["backbone","./Buttons"],function(a,b){return a.Model.extend({defaults:{id:"",content:"",visible:!0,buttons:[]},initialize:function(a){this.btn=this.get("buttons")||[],this.buttons=new b(this.btn),this.set("buttons",this.buttons)}})}),c("Panels/model/Panels",["backbone","./Panel"],function(a,b){return a.Collection.extend({model:b})}),c("Panels/view/ButtonView",["backbone","require"],function(a,b){return a.View.extend({tagName:"span",initialize:function(a){_.bindAll(this,"startTimer","stopTimer","showButtons","hideButtons","closeOnKeyPress","onDrop","initSorter","stopDrag");var b=this.model.get("className");this.config=a.config||{},this.em=this.config.em||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.id=this.pfx+this.model.get("id"),this.activeCls=this.pfx+"active",this.btnsVisCls=this.pfx+"visible",this.parentM=a.parentM||null,this.className=this.pfx+"btn"+(b?" "+b:""),this.listenTo(this.model,"change:active updateActive",this.updateActive),this.listenTo(this.model,"checkActive",this.checkActive),this.listenTo(this.model,"change:bntsVis",this.updateBtnsVis),this.listenTo(this.model,"change:attributes",this.updateAttributes),this.listenTo(this.model,"change:className",this.updateClassName),this.model.get("buttons").length&&(this.$el.on("mousedown",this.startTimer),this.$el.append($("
    ",{"class":this.pfx+"arrow-rd"}))),this.em&&this.em.get&&(this.commands=this.em.get("Commands")),this.events={},this.model.get("dragDrop")?(this.events.mousedown="initDrag",this.em.on("loaded",this.initSorter)):this.events.click="clicked",this.delegateEvents()},initSorter:function(){if(this.em.Canvas){var a=this.em.Canvas;this.canvasEl=a.getBody(),this.sorter=new this.em.Utils.Sorter({container:this.canvasEl,placer:a.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,onMove:this.onDrag,onEndMove:this.onDrop,document:a.getFrameEl().contentDocument,direction:"a",wmargin:1,nested:1});var b=a.getOffset();this.sorter.offTop=b.top,this.sorter.offLeft=b.left}},initDrag:function(){this.model.collection.deactivateAll(this.model.get("context")),this.sorter.startSort(this.el),this.sorter.setDropContent(this.model.get("options").content),this.canvasEl.style.cursor="grabbing",$(document).on("mouseup",this.stopDrag)},stopDrag:function(){$(document).off("mouseup",this.stopDrag),this.sorter.endMove()},onDrag:function(a){},onDrop:function(a){this.canvasEl.style.cursor="default"},updateClassName:function(){var a=this.model.get("className");this.$el.attr("class",this.pfx+"btn"+(a?" "+a:""))},updateAttributes:function(){this.$el.attr(this.model.get("attributes"))},updateBtnsVis:function(){this.$buttons&&(this.model.get("bntsVis")?this.$buttons.addClass(this.btnsVisCls):this.$buttons.removeClass(this.btnsVisCls))},startTimer:function(){this.timeout=setTimeout(this.showButtons,this.config.delayBtnsShow),$(document).on("mouseup",this.stopTimer)},stopTimer:function(){$(document).off("mouseup",this.stopTimer),this.timeout&&clearTimeout(this.timeout)},showButtons:function(){clearTimeout(this.timeout),this.model.set("bntsVis",!0),$(document).on("mousedown",this.hideButtons),$(document).on("keypress",this.closeOnKeyPress)},hideButtons:function(a){a&&$(a.target).trigger("click"),this.model.set("bntsVis",!1),$(document).off("mousedown",this.hideButtons),$(document).off("keypress",this.closeOnKeyPress)},closeOnKeyPress:function(a){var b=a.which||a.keyCode;27==b&&this.hideButtons()},updateActive:function(){var a=null,b=this.em&&this.em.get?this.em.get("Editor"):null,c=this.model.get("command");this.commands&&"string"==typeof c?a=this.commands.get(c):null!==c&&"object"==typeof c?a=c:"function"==typeof c&&(a={run:c}),this.model.get("active")?(this.model.collection.deactivateAll(this.model.get("context")),this.model.set("active",!0,{silent:!0}).trigger("checkActive"),this.parentM&&this.parentM.set("active",!0,{silent:!0}).trigger("checkActive"),a&&a.run&&(a.run(b,this.model,this.model.get("options")),b.trigger("run:"+c))):(this.$el.removeClass(this.activeCls),this.model.collection.deactivateAll(this.model.get("context")),this.parentM&&this.parentM.set("active",!1,{silent:!0}).trigger("checkActive"),a&&a.stop&&(a.stop(b,this.model,this.model.get("options")),b.trigger("stop:"+c)))},checkActive:function(){this.model.get("active")?this.$el.addClass(this.activeCls):this.$el.removeClass(this.activeCls)},clicked:function(a){if(!this.model.get("bntsVis")){this.parentM&&this.swapParent();var b=this.model.get("active");this.model.set("active",!b);this.em.get("Commands").get("select-comp");b?this.model.get("runDefaultCommand")&&this.em.runDefault():this.model.get("stopDefaultCommand")&&this.em.stopDefault()}},swapParent:function(){this.parentM.collection.deactivateAll(this.model.get("context")),this.parentM.set("attributes",this.model.get("attributes")),this.parentM.set("options",this.model.get("options")),this.parentM.set("command",this.model.get("command")),this.parentM.set("className",this.model.get("className")),this.parentM.set("active",!0,{silent:!0}).trigger("checkActive")},render:function(){if(this.updateAttributes(),this.$el.attr("class",this.className),this.model.get("buttons").length){var a=b("./ButtonsView"),c=new a({collection:this.model.get("buttons"),config:this.config,parentM:this.model});this.$buttons=c.render().$el,this.$buttons.append($("
    ",{"class":this.pfx+"arrow-l"})),this.$el.append(this.$buttons)}return this}})}),c("Panels/view/ButtonsView",["backbone","./ButtonView"],function(a,b){return a.View.extend({initialize:function(a){this.opt=a||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"",this.parentM=this.opt.parentM||null,this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset",this.render),this.className=this.pfx+"buttons"},addTo:function(a){this.addToCollection(a)},addToCollection:function(a,c){var d=c||null,e=b,f=new e({model:a,config:this.config,parentM:this.parentM}),g=f.render().el;return d?d.appendChild(g):this.$el.append(g),g},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",_.result(this,"className")),this}})}),c("Panels/view/PanelView",["backbone","./ButtonsView"],function(a,b){return a.View.extend({initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.buttons=this.model.get("buttons"),this.className=this.pfx+"panel",this.id=this.pfx+this.model.get("id"),this.listenTo(this.model,"change:appendContent",this.appendContent),this.listenTo(this.model,"change:content",this.updateContent)},appendContent:function(){this.$el.append(this.model.get("appendContent"))},updateContent:function(){this.$el.html(this.model.get("content"))},render:function(){if(this.$el.attr("class",_.result(this,"className")),this.id&&this.$el.attr("id",this.id),this.buttons.length){var a=new b({collection:this.buttons,config:this.config});this.$el.append(a.render().el)}return this.$el.append(this.model.get("content")),this}})}),c("Panels/view/PanelsView",["backbone","./PanelView"],function(a,b){return a.View.extend({initialize:function(a){this.opt=a||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"",this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset",this.render),this.className=this.pfx+"panels"},addTo:function(a){this.addToCollection(a)},addToCollection:function(a,c){var d=c||null,e=b,f=new e({model:a,config:this.config}),g=f.render().el;return d?d.appendChild(g):this.$el.append(g),g},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",_.result(this,"className")),this}})}),c("Panels/main",["require","./config/config","./model/Panel","./model/Panels","./view/PanelView","./view/PanelsView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Panel"),g=a("./model/Panels"),h=(a("./view/PanelView"),a("./view/PanelsView"));return{name:"Panels",init:function(a){d=a||{};for(var f in e)f in d||(d[f]=e[f]);var i=d.pStylePrefix;return i&&(d.stylePrefix=i+d.stylePrefix),b=new g(d.defaults),c=new h({collection:b,config:d}),this},getPanels:function(){return b},getPanelsEl:function(){return c.el},addPanel:function(a){return b.add(a)},getPanel:function(a){var c=b.where({id:a});return c.length?c[0]:null},addButton:function(a,b){var c=this.getPanel(a);return c?c.get("buttons").add(b):null},getButton:function(a,b){var c=this.getPanel(a);if(c){var d=c.get("buttons").where({id:b});return d.length?d[0]:null}return null},render:function(){return c.render().el},active:function(){this.getPanels().each(function(a){a.get("buttons").each(function(a){a.get("active")&&a.trigger("updateActive")})})},Panel:f}}}),c("Panels",["Panels/main"],function(a){return a}),c("RichTextEditor/config/config",[],function(){return{stylePrefix:"rte-",toolbarId:"toolbar",containerId:"wrapper",commands:[{command:"bold",title:"Bold","class":"fa fa-bold"},{command:"italic",title:"Italic","class":"fa fa-italic"},{command:"underline",title:"Underline","class":"fa fa-underline"},{command:"strikethrough",title:"Strikethrough","class":"fa fa-strikethrough",group:"format"},{command:"insertHTML",title:"Link","class":"fa fa-link",args:'${content}'}]}}),c("RichTextEditor/view/TextEditorView",["jquery"],function(a){var b=function(b){var c=a.Deferred(),d=new FileReader;return d.onload=function(a){c.resolve(a.target.result)},d.onerror=c.reject,d.onprogress=c.notify,d.readAsDataURL(b),c.promise()};return a.fn.cleanHtml=function(){var b=a(this).html();return b&&b.replace(/(
    |\s|

    <\/div>| )*$/,"")},a.fn.wysiwyg=function(c){var d,e,f,g=this,h=function(){var b=e.activeToolbarClass;b&&a(e.toolbarSelector).find(f).each(function(){var c=a(this),d=c.data(e.commandRole),f=g.get(0).ownerDocument;f.queryCommandState(d)?c.addClass(b):c.removeClass(b)})},i=function(a,b){var c=a.split(" "),d=c.shift(),e=c.join(" ")+(b||"");g.get(0).ownerDocument.execCommand("styleWithCSS",!1,!0),g.get(0).ownerDocument.execCommand(d,0,e),h(),g.trigger("change")},j=function(){var a=window.getSelection();if(a.getRangeAt&&a.rangeCount)return a.getRangeAt(0)},k=function(){d=j()},l=function(){var a=window.getSelection();if(d){try{a.removeAllRanges()}catch(b){document.body.createTextRange().select(),document.selection.empty()}a.addRange(d)}},m=function(c){g.focus(),a.each(c,function(c,d){/^image\//.test(d.type)?a.when(b(d)).done(function(a){i("insertimage",a)}).fail(function(a){e.fileUploadError("file-reader",a)}):e.fileUploadError("unsupported-file-type",d.type)})},n=function(a,b){l(),document.queryCommandSupported("hiliteColor")&&document.execCommand("hiliteColor",0,b||"transparent"),k(),a.data(e.selectionMarker,b)},o=function(b,c){b.find(f).unbind().click(function(){l();var b=g.get(0).ownerDocument,d=a(this),e=d.data(c.commandRole),f=d.data("args");f?(f=f.replace("${content}",b.getSelection()),i(e,f)):b.execCommand(e),k()}),b.find("[data-toggle=dropdown]").click(l);var d="[data-"+c.commandRole+"]";b.find("select"+d).on("webkitspeechchange change",function(){var b=this.value;l(),b&&(g.focus(),i(a(this).data(c.commandRole),b)),k()}),b.find("input[type=text]"+d,", select"+d).on("webkitspeechchange change",function(){var b=this.value;this.value="",l(),b&&(g.focus(),i(a(this).data(c.commandRole),b)),k()}).on("focus",function(){var b=a(this);b.data(c.selectionMarker)||(n(b,c.selectionColor),b.focus())}).on("blur",function(){var b=a(this);b.data(c.selectionMarker)&&n(b,!1)}),b.find("input[type=file][data-"+c.commandRole+"]").change(function(){l(),"file"===this.type&&this.files&&this.files.length>0&&m(this.files),k(),this.value=""})},p=function(){g.on("dragenter dragover",!1).on("drop",function(a){var b=a.originalEvent.dataTransfer;a.stopPropagation(),a.preventDefault(),b&&b.files&&b.files.length>0&&m(b.files)})};if("string"==typeof c&&"destroy"==c)return g.attr("contenteditable",!1).unbind("mouseup keyup mouseout dragenter dragover"),a(window).unbind("touchend"),this;e=a.extend({},a.fn.wysiwyg.defaults,c);var q="[data-"+e.commandRole+"]";return f="a"+q+",button"+q+",input[type=button]"+q+", select"+q,e.dragAndDropImages&&p(),o(a(e.toolbarSelector),e),g.attr("contenteditable",!0).on("mouseup keyup mouseout",function(){k(),h()}),a(window).bind("touchend",function(a){var b=g.is(a.target)||g.has(a.target).length>0,c=j(),d=c&&c.startContainer===c.endContainer&&c.startOffset===c.endOffset;d&&!b||(k(),h())}),this},a.fn.wysiwyg.defaults={toolbarSelector:"[data-role=editor-toolbar]",commandRole:"edit",activeToolbarClass:"btn-info",selectionMarker:"edit-focus-marker",selectionColor:"darkgrey",dragAndDropImages:!0,fileUploadError:function(a,b){console.log("File upload error",a,b)}},a}),c("RichTextEditor/model/CommandButton",["backbone"],function(a){return a.Model.extend({idAttribute:"command",defaults:{command:"",type:"",title:"","class":"",options:[]},initialize:function(){var a=this.get("options");a.length&&this.set("type","select")}})}),c("RichTextEditor/model/CommandButtons",["backbone","./CommandButton"],function(a,b){return a.Collection.extend({model:b})}),c("RichTextEditor/view/CommandButtonView",["backbone"],function(a){return a.View.extend({tagName:"a",initialize:function(a,b){this.config=b||{},this.ppfx=this.config.pStylePrefix||"",this.className=this.config.stylePrefix+"btn "+this.model.get("class")},render:function(){return this.$el.addClass(this.className),this}})}),c("RichTextEditor/view/CommandButtonSelectView",["backbone","./CommandButtonView"],function(a,b){return b.extend({initialize:function(a,c){b.prototype.initialize.apply(this,arguments)},getInput:function(){var a=this.model;if(!this.input){var b=a.get("command"),c='",this.input=$(c)}return this.input},getInputCont:function(){var a=this.getInput(),b=this.ppfx,c=$('
    ');return c.append(a)},render:function(){return b.prototype.render.apply(this,arguments),this.$el.html(this.getInputCont()),this}})}),c("RichTextEditor/view/CommandButtonsView",["backbone","./CommandButtonView","./CommandButtonSelectView"],function(a,b,c){return a.View.extend({attributes:{"data-role":"editor-toolbar"},initialize:function(a){this.config=a.config||{};var b=this.config.stylePrefix||"";this.id=b+this.config.toolbarId,this.listenTo(this.collection,"add",this.addTo),this.$el.data("helper",1)},addTo:function(a){this.add(a)},add:function(a,d){var e=d||null,f=b;switch(a.get("type")){case"select":f=c}var g=a.get("args"),h={title:a.get("title"),"data-edit":a.get("command")};g&&(h["data-args"]=g);var i=new f({model:a,attributes:h},this.config),j=i.render().el;e?e.appendChild(j):this.$el.append(j)},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.add(b,a)},this),this.$el.append(a),this.$el.attr("id",this.id),this}})}),c("RichTextEditor/main",["require","./config/config","./view/TextEditorView","./model/CommandButtons","./view/CommandButtonsView"],function(a){return function(){var b,c,d,e,f={},g=a("./config/config"),h=(a("./view/TextEditorView"),a("./model/CommandButtons")),i=a("./view/CommandButtonsView");return{customRte:null,name:"rte",init:function(a){e=this,f=a||{};for(var j in g)j in f||(f[j]=g[j]);var k=f.pStylePrefix;return k&&(f.stylePrefix=k+f.stylePrefix),b=f.stylePrefix,d=new h(f.commands),c=new i({collection:d,config:f}),this},add:function(a,b){var c=b||{};return c.command=a,d.add(c)},get:function(a){return d.where({command:a})[0]},getAll:function(){return d},udpatePosition:function(){var a="px",b=f.em.get("Canvas"),d=b.getTargetToElementDim(c.el,this.lastEl,{event:"rteToolbarPosUpdate"}),e=c.el.style;e.top=d.top+a,e.left=d.left+a},attach:function(a,b){this.lastEl=a.el;var d=a.getChildrenContainer(),e=this.customRte;return e?b=e.enable(d,b):$(d).wysiwyg({}).focus(),this.show(),f.em&&(setTimeout(this.udpatePosition.bind(this),0),f.em.off("change:canvasOffset",this.udpatePosition,this),f.em.on("change:canvasOffset",this.udpatePosition,this),f.em.off("canvasScroll",this.udpatePosition,this),f.em.on("canvasScroll",this.udpatePosition,this)),c.$el.on("mousedown",this.disableProp),b},detach:function(a,b){var d=this.customRte,e=a.getChildrenContainer();d?(a.model.set("content",e.innerHTML),d.disable(e,b)):$(e).wysiwyg("destroy"),this.hide(),c.$el.off("mousedown",this.disableProp)},focus:function(a,b){var c=this.customRte,d=a.getChildrenContainer();c?c.focus&&c.focus(d,b):this.attach(a)},show:function(){var a=c.el.style;a.display="block"},hide:function(){c.el.style.display="none"},disableProp:function(a){a.stopPropagation()},getToolbarEl:function(){return c.el},render:function(){return c.render().el}}}}),c("RichTextEditor",["RichTextEditor/main"],function(a){return a}),c("StyleManager/config/config",[],function(){return{stylePrefix:"sm-",sectors:[],textNoElement:"Select an element before using Style Manager",hideNotStylable:!0}}),c("StyleManager/model/Layer",["backbone"],function(a){return a.Model.extend({defaults:{index:"",value:"",values:{},active:!0,preview:!1},initialize:function(){var a=this.get("value");if(!a){var b="",c=this.get("values");for(var d in c)b+=" "+c[d];this.set("value",b.trim())}}})}),c("StyleManager/model/Layers",["backbone","./Layer"],function(a,b){return a.Collection.extend({model:b,initialize:function(){this.idx=1,this.on("add",this.onAdd),this.on("reset",this.onReset)},onAdd:function(a,b,c){c.noIncrement||a.set("index",this.idx++)},onReset:function(){this.idx=1}})}),c("StyleManager/model/Property",["backbone","./Layers","require"],function(a,b,c){return a.Model.extend({defaults:{name:"",property:"",type:"",units:[],unit:"",defaults:"",info:"",value:"",icon:"",preview:!1,detached:!1,visible:!0,functionName:"",properties:[],layers:[],list:[],fixedValues:["initial","inherit"]},initialize:function(a){var d=this.get("type"),e=this.get("name"),f=this.get("property"),g=this.get("properties");if(e||this.set("name",f.charAt(0).toUpperCase()+f.slice(1).replace(/-/g," ")),g.length){var h=c("./Properties");this.set("properties",new h(g))}switch(d){case"stack":this.set("layers",new b)}},getValue:function(){var a="",b=this.get("type");switch(b){case"integer":a=this.get("value")+this.get("unit");break;default:a=this.get("value")}return a}})}),c("StyleManager/model/Properties",["backbone","./Property"],function(a,b){return a.Collection.extend({model:b})}),c("StyleManager/model/PropertyFactory",["backbone"],function(a){return function(){return{build:function(a){var b=[];"string"==typeof a&&(a=[a]);for(var c=0,d=a.length;c\n\t
    \n\t\t<%= label %>\n\t
    \n
    '}),c("text!StyleManager/templates/propertyInput.html",[],function(){return'
    \n\tinput-holder\'>\n
    \n
    \n'}),c("StyleManager/view/PropertyView",["backbone","text!./../templates/propertyLabel.html","text!./../templates/propertyInput.html"],function(a,b,c){return a.View.extend({template:_.template(c),templateLabel:_.template(b),events:{change:"valueUpdated"},initialize:function(a){this.config=a.config||{},this.em=this.config.em,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=a.target||{},this.propTarget=a.propTarget||{},this.onChange=a.onChange||{},this.onInputRender=a.onInputRender||{},this.customValue=a.customValue||{},this.defaultValue=this.model.get("defaults"),this.property=this.model.get("property"),this.input=this.$input=null,this.className=this.pfx+"property",this.inputHolderId="#"+this.pfx+"input-holder",this.sector=this.model.collection&&this.model.collection.sector,this.model.get("value")||this.model.set("value",this.model.get("defaults")),this.listenTo(this.propTarget,"update",this.targetUpdated),this.listenTo(this.model,"destroy remove",this.remove),this.listenTo(this.model,"change:value",this.valueChanged),this.listenTo(this.model,"targetUpdated",this.targetUpdated),this.listenTo(this.model,"change:visible",this.updateVisibility)},getTarget:function(){return this.selectedComponent?this.selectedComponent:this.propTarget?this.propTarget.model:null},valueUpdated:function(){this.$input&&this.model.set("value",this.getInputValue())},targetUpdated:function(){this.selectedComponent=this.propTarget.model,this.helperComponent=this.propTarget.helper,this.checkVisibility(),this.getTarget()&&(this.sameValue()||this.renderInputRequest())},checkVisibility:function(){this.config.hideNotStylable&&(this.isTargetStylable()&&this.isComponentStylable()?this.show():this.hide(),this.sector&&this.sector.trigger("updateVisibility"))},sameValue:function(){return this.getComponentValue()==this.getValueForTarget()},getComponentValue:function(){var a=this.model,b=this.getTarget();if(b){var c=b.get("style")[this.property];if(c?this.componentValue=c:this.componentValue=this.defaultValue+(this.unit||""),a.get("functionName")){var d=this.fetchFromFunction(this.componentValue);d&&(this.componentValue=d)}if(this.customValue&&"function"==typeof this.customValue){var e=a.collection.indexOf(a),f=this.customValue(this,e);f&&(this.componentValue=f)}return this.componentValue}},getTargetValue:function(a){var b,c=a||{},d=this.model,e=this.getTarget();return e?(b=e.get("style")[d.get("property")],b||c.ignoreDefault||(b=this.getDefaultValue()),b):b},getDefaultValue:function(){return this.model.get("defaults")},fetchFromFunction:function(a){return a.substring(a.indexOf("(")+1,a.lastIndexOf(")"))},tryFetchFromFunction:function(a){if(!this.model.get("functionName"))return a;var b=a.indexOf("(")+1,c=a.lastIndexOf(")");return a.substring(b,c)},getValueForTarget:function(){return this.model.get("value")},getInputValue:function(){return this.$input?this.$input.val():""},valueChanged:function(a,b,c){var d=this.getValueForTarget(),e=this.config.em,f=this.model;if(this.$input&&this.setValue(d),this.getTarget()&&this.isTargetStylable()&&this.isComponentStylable()){value=this.getValueForTarget();var g=f.get("functionName");g&&(value=g+"("+value+")");var h=this.getTarget(),i=this.onChange;i&&"function"==typeof i?i(h,this,c):this.updateTargetStyle(value,null,c),e&&(e.trigger("component:update",f),e.trigger("component:styleUpdate",f),e.trigger("component:styleUpdate:"+f.get("property"),f))}},updateTargetStyle:function(a,b,c){var d=b||this.property,e=a||"",f=c?c.avoidStore:0,g=this.getTarget(),h=_.clone(g.get("style"));e?h[d]=e:delete h[d],g.set("style",h,{avoidStore:f}),this.helperComponent&&this.helperComponent.set("style",h,{avoidStore:f})},isTargetStylable:function(){var a=this.getTarget().get("stylable");return a instanceof Array&&(a=_.indexOf(a,this.property)>=0),a},isComponentStylable:function(){var a=this.em,b=a&&a.get("selectedComponent");if(!b)return!0;var c=b.get("stylable");return c instanceof Array&&(c=_.indexOf(c,this.property)>=0),c},setValue:function(a,b){var c=0===b?0:1,d=this.model.get("defaults"),e=this.model.get("value")||d;(a||c)&&(e=a),this.$input&&this.$input.val(e),this.model.set({value:e},{silent:!0})},updateVisibility:function(){this.el.style.display=this.model.get("visible")?"block":"none"},show:function(){this.model.set("visible",1)},hide:function(){this.model.set("visible",0)},renderLabel:function(){this.$el.html(this.templateLabel({pfx:this.pfx,ppfx:this.ppfx,icon:this.model.get("icon"),info:this.model.get("info"),label:this.model.get("name")}))},renderField:function(){this.renderTemplate(),this.renderInput(),delete this.componentValue},renderTemplate:function(){this.$el.append(this.template({pfx:this.pfx,ppfx:this.ppfx,icon:this.model.get("icon"),info:this.model.get("info"),label:this.model.get("name")}))},renderInput:function(){this.$input||(this.$input=$("",{placeholder:this.model.get("defaults"),type:"text"}),this.$el.find(this.inputHolderId).html(this.$input)),this.setValue(this.componentValue,0)},renderInputRequest:function(){this.renderInput()},cleanValue:function(){this.setValue("")},render:function(){return this.renderLabel(),this.renderField(),this.$el.attr("class",this.className),this}})}),c("text!Abstract/ui/templates/inputNumber.html",[],function(){return'input-holder\'>\nfield-units\'>\n
    \n\t
    \n\t
    \n
    \n'}),c("Abstract/ui/InputNumber",["backbone","text!./templates/inputNumber.html"],function(a,b){return a.View.extend({events:{},template:_.template(b),initialize:function(a){_.bindAll(this,"moveIncrement","upIncrement");var b=a||{},c=b.ppfx||"",d=b.contClass||c+"field";this.ppfx=c,this.docEl=$(document),this.inputCls=c+"input-number",this.unitCls=c+"input-unit",this.contClass=d,this.events["click ."+c+"field-arrow-u"]="upArrowClick",this.events["click ."+c+"field-arrow-d"]="downArrowClick",this.events["mousedown ."+c+"field-arrows"]="downIncrement",this.events["change ."+this.inputCls]="handleChange",this.events["change ."+this.unitCls]="handleUnitChange",this.listenTo(this.model,"change:unit change:value",this.handleModelChange),this.delegateEvents()},setValue:function(a,b){var c=b||{},d=this.validateInputValue(a,{deepCheck:1}),e={value:d.value};(d.unit||d.force)&&(e.unit=d.unit),this.model.set(e,c),c.silent&&this.handleModelChange()},handleChange:function(a){a.stopPropagation(),this.setValue(this.getInputEl().value)},handleUnitChange:function(a){a.stopPropagation();var b=this.getUnitEl().value;this.model.set("unit",b)},handleModelChange:function(){var a=this.model;this.getInputEl().value=a.get("value");var b=this.getUnitEl();b&&(b.value=a.get("unit"))},getInputEl:function(){return this.inputEl||(this.inputEl=$("",{type:"text","class":this.inputCls,placeholder:this.model.get("defaults")})),this.inputEl.get(0)},getUnitEl:function(){if(!this.unitEl){var a=this.model,b=a.get("units")||[];if(b.length){var c='",this.unitEl=$(c)}}return this.unitEl&&this.unitEl.get(0)},upArrowClick:function(){var a=this.model.get("value");a=isNaN(a)?1:parseInt(a,10)+1;var b=this.validateInputValue(a);this.model.set("value",b.value)},downArrowClick:function(){var a=this.model.get("value");a=isNaN(a)?0:parseInt(a,10)-1;var b=this.validateInputValue(a);this.model.set("value",b.value)},downIncrement:function(a){a.preventDefault(),this.moved=0;var b=this.model.get("value");b=isNaN(b)?0:parseInt(b,10);var c={y:a.pageY,val:b};this.docEl.mouseup(c,this.upIncrement),this.docEl.mousemove(c,this.moveIncrement)},moveIncrement:function(a){this.moved=1;var b=parseInt(a.data.val-a.pageY+a.data.y,10);return this.prValue=this.validateInputValue(b).value,this.model.set("value",this.prValue,{avoidStore:1}),!1},upIncrement:function(a){if(this.docEl.off("mouseup",this.upIncrement),this.docEl.off("mousemove",this.moveIncrement),this.prValue&&this.moved){var b=this.prValue-1;this.model.set("value",b,{avoidStore:1}).set("value",b+1)}},validateInputValue:function(a,b){var c=0,d=b||{},e=this.model,f=a||e.get("defaults"),g=e.get("units")||[],h=e.get("unit")||g.length&&g[0]||"",i=e.get("max"),j=e.get("min");if(d.deepCheck){var k=e.get("fixedValues")||[];if(f){var l=new RegExp("^"+k.join("|"),"g");if(k.length&&l.test(f))f=f.match(l)[0],h="",c=1;else{var m=f+"";f+="",f=parseFloat(f.replace(",",".")),f=isNaN(f)?e.get("defaults"):f;var n=m.replace(f,"");_.indexOf(g,n)>=0&&(h=n)}}}return"undefined"!=typeof i&&""!==i&&(f=f>i?i:f),"undefined"!=typeof j&&""!==j&&(f=f\n\tinput-holder\'>\n
    \n
    \n'}),c("StyleManager/view/PropertyRadioView",["backbone","./PropertyView","text!./../templates/propertyRadio.html"],function(a,b,c){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),this.list=this.model.get("list")||[],this.className=this.className+" "+this.pfx+"list"},renderInput:function(){var a=this.pfx,b=this.ppfx,c=b+"radio-item-label",d=this.property;if(!this.$input&&this.list&&this.list.length){var e="";_.each(this.list,function(f){var g=f.className?f.className+" "+a+"icon "+c:"",h=d+"-"+f.value,i=f.name?f.name:f.value;titleAttr=f.title?'title="'+f.title+'"':"",e+='
    "}),this.input=e,this.$inputEl=$(this.input),this.$el.find("#"+a+"input-holder").html(this.$inputEl),this.$input=this.$inputEl.find('input[name="'+this.property+'"]')}this.setValue(this.componentValue)},getInputValue:function(){return this.$input?this.$el.find("input:checked").val():""},setValue:function(a){var b=this.model.get("value")||this.defaultValue;a&&(b=a),this.$input&&this.$input.filter('[value="'+b+'"]').prop("checked",!0),this.model.set({value:b},{silent:!0})}})}),c("text!StyleManager/templates/propertySelect.html",[],function(){return'
    \n\tinput-holder\'>\n\t
    \n\t\t
    \n\t
    \n
    \n
    \n'}),c("StyleManager/view/PropertySelectView",["backbone","./PropertyView","text!./../templates/propertySelect.html"],function(a,b,c){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),this.list=this.model.get("list")||[]},renderInput:function(){var a=this.pfx;if(!this.$input){var b="",this.input=b,this.$input=$(this.input),this.$el.find("#"+a+"input-holder").html(this.$input)}this.setValue(this.componentValue,0)}})}),c("text!Abstract/ui/templates/input.html",[],function(){return"\n"}),c("Abstract/ui/Input",["backbone","text!./templates/input.html"],function(a,b){return a.View.extend({events:{change:"handleChange"},template:_.template(b),initialize:function(a){var b=a||{},c=b.ppfx||"";this.target=b.target||{},this.inputClass=c+"field",this.inputHolderClass=c+"input-holder",this.ppfx=c,this.listenTo(this.model,"change:value",this.handleModelChange)},handleChange:function(a){a.stopPropagation(),this.setValue(this.getInputEl().value)},setValue:function(a,b){var c=b||{},d=this.model;d.set({value:a||d.get("defaults")},c),c.silent&&this.handleModelChange()},handleModelChange:function(){this.getInputEl().value=this.model.get("value")},getInputEl:function(){return this.inputEl||(this.inputEl=$("",{type:"text","class":this.inputCls,placeholder:this.model.get("defaults")})),this.inputEl.get(0)},render:function(){var a=this.$el;return a.addClass(this.inputClass),a.html(this.template({holderClass:this.inputHolderClass,ppfx:this.ppfx})),a.find("."+this.inputHolderClass).html(this.getInputEl()),this}})}),function(a){"use strict";"function"==typeof c&&c.amd?c("Spectrum",["jquery"],a):"object"==typeof exports&&"object"==typeof module?module.exports=a(b("jquery")):a(jQuery)}(function(a,b){"use strict";function c(b,c,d,e){for(var f=[],g=0;g')}else{var m="sp-clear-display";f.push(a("
    ").append(a('').attr("title",e.noColorSelectedText)).html())}}return"
    "+f.join("")+"
    "}function d(){for(var a=0;aMath.abs(b-e);ta=f?"x":"y"}}else ta=null;var g=!ta||"x"===ta,h=!ta||"y"===ta;g&&(ka=parseFloat(a/ba)),h&&(la=parseFloat((ca-b)/ca)),Xa=!1,U.showAlpha||(ma=1),K()},y,z),Ta?(H(Ta),L(),Va=U.preferredFormat||tinycolor(Ta).format,u(Ta)):L(),V&&C();var d=p?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Ha.delegate(".sp-thumb-el",d,b),Ia.delegate(".sp-thumb-el:nth-child(1)",d,{ignore:!0},b)}function t(){if(X&&window.localStorage){try{var b=window.localStorage[X].split(",#");b.length>1&&(delete window.localStorage[X],a.each(b,function(a,b){u(b)}))}catch(c){}try{qa=window.localStorage[X].split(";")}catch(c){}}}function u(b){if(W){var c=tinycolor(b).toRgbString();if(!pa[c]&&a.inArray(c,qa)===-1)for(qa.push(c);qa.length>ra;)qa.shift();if(X&&window.localStorage)try{window.localStorage[X]=qa.join(";")}catch(d){}}}function v(){var a=[];if(U.showPalette)for(var b=0;bj&&j>e?Math.abs(l.left+e-j):0),l.top-=Math.min(l.top,l.top+f>k&&k>f?Math.abs(f+g-d):d),l}function h(){}function i(a){a.stopPropagation()}function j(a,b){var c=Array.prototype.slice,d=c.call(arguments,2);return function(){return a.apply(b,d.concat(c.call(arguments)))}}function k(b,c,d,e){function f(a){a.stopPropagation&&a.stopPropagation(),a.preventDefault&&a.preventDefault(),a.returnValue=!1}function g(a){if(k){if(p&&j.documentMode<9&&!a.button)return i();var d=a.originalEvent&&a.originalEvent.touches&&a.originalEvent.touches[0],e=d&&d.pageX||a.pageX,g=d&&d.pageY||a.pageY,h=Math.max(0,Math.min(e-l.left,n)),q=Math.max(0,Math.min(g-l.top,m));o&&f(a),c.apply(b,[h,q,a])}}function h(c){var e=c.which?3==c.which:2==c.button;e||k||d.apply(b,arguments)!==!1&&(k=!0,m=a(b).height(),n=a(b).width(),l=a(b).offset(),a(j).bind(q),a(j.body).addClass("sp-dragging"),g(c),f(c))}function i(){k&&(a(j).unbind(q),a(j.body).removeClass("sp-dragging"),setTimeout(function(){e.apply(b,arguments)},0)),k=!1}c=c||function(){},d=d||function(){},e=e||function(){};var j=document,k=!1,l={},m=0,n=0,o="ontouchstart"in window,q={};q.selectstart=f,q.dragstart=f,q["touchmove mousemove"]=g,q["touchend mouseup"]=i,a(b).bind("touchstart mousedown",h)}function l(a,b,c){var d;return function(){var e=this,f=arguments,g=function(){d=null,a.apply(e,f)};c&&clearTimeout(d),!c&&d||(d=setTimeout(g,b))}}function m(){return a.fn.spectrum.inputTypeColorSupport()}var n={beforeShow:h,move:h,change:h,show:h,hide:h,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",togglePaletteMoreText:"more",togglePaletteLessText:"less",clearText:"Clear Color Selection",noColorSelectedText:"No Color Selected",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,offset:null},o=[],p=!!/msie/i.exec(window.navigator.userAgent),q=function(){function a(a,b){return!!~(""+a).indexOf(b)}var b=document.createElement("div"),c=b.style;return c.cssText="background-color:rgba(0,0,0,.5)",a(c.backgroundColor,"rgba")||a(c.backgroundColor,"hsla")}(),r=["
    ","
    ","
    ","
    "].join(""),s=function(){var a="";if(p)for(var b=1;b<=6;b++)a+="
    ";return["
    ","
    ","
    ","
    ","","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ",a,"
    ","
    ","
    ","
    ","
    ","","
    ","
    ","
    ","","","
    ","
    ","
    "].join("")}(),t="spectrum.id";a.fn.spectrum=function(b,c){if("string"==typeof b){var d=this,e=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=o[a(this).data(t)];if(c){var f=c[b];if(!f)throw new Error("Spectrum: no such method: '"+b+"'");"get"==b?d=c.get():"container"==b?d=c.container:"option"==b?d=c.option.apply(c,e):"destroy"==b?(c.destroy(),a(this).removeData(t)):f.apply(c,e)}}),d}return this.spectrum("destroy").each(function(){var c=a.extend({},b,a(this).data()),d=f(this,c);a(this).data(t,d.id)})},a.fn.spectrum.load=!0,a.fn.spectrum.loadOpts={},a.fn.spectrum.draggable=k,a.fn.spectrum.defaults=n,a.fn.spectrum.inputTypeColorSupport=function u(){if("undefined"==typeof u._cachedResult){var b=a("")[0];u._cachedResult="color"===b.type&&""!==b.value}return u._cachedResult},a.spectrum={},a.spectrum.localization={},a.spectrum.palettes={},a.fn.spectrum.processNativeColorInputs=function(){var b=a("input[type=color]");b.length&&!m()&&b.spectrum({preferredFormat:"hex6"})},function(){function a(a){var c={r:0,g:0,b:0},e=1,g=!1,h=!1;return"string"==typeof a&&(a=G(a)),"object"==typeof a&&(a.hasOwnProperty("r")&&a.hasOwnProperty("g")&&a.hasOwnProperty("b")?(c=b(a.r,a.g,a.b),g=!0,h="%"===String(a.r).substr(-1)?"prgb":"rgb"):a.hasOwnProperty("h")&&a.hasOwnProperty("s")&&a.hasOwnProperty("v")?(a.s=D(a.s),a.v=D(a.v),c=f(a.h,a.s,a.v),g=!0,h="hsv"):a.hasOwnProperty("h")&&a.hasOwnProperty("s")&&a.hasOwnProperty("l")&&(a.s=D(a.s),a.l=D(a.l),c=d(a.h,a.s,a.l),g=!0,h="hsl"),a.hasOwnProperty("a")&&(e=a.a)),e=w(e),{ok:g,format:a.format||h,r:M(255,N(c.r,0)),g:M(255,N(c.g,0)),b:M(255,N(c.b,0)),a:e}}function b(a,b,c){return{r:255*x(a,255),g:255*x(b,255),b:255*x(c,255)}}function c(a,b,c){a=x(a,255),b=x(b,255),c=x(c,255);var d,e,f=N(a,b,c),g=M(a,b,c),h=(f+g)/2;if(f==g)d=e=0;else{var i=f-g;switch(e=h>.5?i/(2-f-g):i/(f+g),f){case a:d=(b-c)/i+(b1&&(c-=1),c<1/6?a+6*(b-a)*c:c<.5?b:c<2/3?a+(b-a)*(2/3-c)*6:a}var e,f,g;if(a=x(a,360),b=x(b,100),c=x(c,100),0===b)e=f=g=c;else{var h=c<.5?c*(1+b):c+b-c*b,i=2*c-h;e=d(i,h,a+1/3),f=d(i,h,a),g=d(i,h,a-1/3)}return{r:255*e,g:255*f,b:255*g}}function e(a,b,c){a=x(a,255),b=x(b,255),c=x(c,255);var d,e,f=N(a,b,c),g=M(a,b,c),h=f,i=f-g;if(e=0===f?0:i/f,f==g)d=0;else{switch(f){case a:d=(b-c)/i+(b>1)+720)%360;--b;)d.h=(d.h+e)%360,f.push(P(d));return f}function u(a,b){b=b||6;for(var c=P(a).toHsv(),d=c.h,e=c.s,f=c.v,g=[],h=1/b;b--;)g.push(P({h:d,s:e,v:f})),f=(f+h)%1;return g}function v(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[a[c]]=c);return b}function w(a){return a=parseFloat(a),(isNaN(a)||a<0||a>1)&&(a=1),a}function x(a,b){A(a)&&(a="100%");var c=B(a);return a=M(b,N(0,parseFloat(a))),c&&(a=parseInt(a*b,10)/100),K.abs(a-b)<1e-6?1:a%b/parseFloat(b)}function y(a){return M(1,N(0,a))}function z(a){return parseInt(a,16)}function A(a){return"string"==typeof a&&a.indexOf(".")!=-1&&1===parseFloat(a)}function B(a){return"string"==typeof a&&a.indexOf("%")!=-1}function C(a){return 1==a.length?"0"+a:""+a}function D(a){return a<=1&&(a=100*a+"%"),a}function E(a){return Math.round(255*parseFloat(a)).toString(16)}function F(a){return z(a)/255}function G(a){a=a.replace(H,"").replace(I,"").toLowerCase();var b=!1;if(Q[a])a=Q[a],b=!0;else if("transparent"==a)return{r:0,g:0,b:0,a:0,format:"name"};var c;return(c=S.rgb.exec(a))?{r:c[1],g:c[2],b:c[3]}:(c=S.rgba.exec(a))?{r:c[1],g:c[2],b:c[3],a:c[4]}:(c=S.hsl.exec(a))?{h:c[1],s:c[2],l:c[3]}:(c=S.hsla.exec(a))?{h:c[1],s:c[2],l:c[3],a:c[4]}:(c=S.hsv.exec(a))?{h:c[1],s:c[2],v:c[3]}:(c=S.hsva.exec(a))?{h:c[1],s:c[2],v:c[3],a:c[4]}:(c=S.hex8.exec(a))?{a:F(c[1]),r:z(c[2]),g:z(c[3]),b:z(c[4]),format:b?"name":"hex8"}:(c=S.hex6.exec(a))?{r:z(c[1]),g:z(c[2]),b:z(c[3]),format:b?"name":"hex"}:!!(c=S.hex3.exec(a))&&{r:z(c[1]+""+c[1]),g:z(c[2]+""+c[2]),b:z(c[3]+""+c[3]),format:b?"name":"hex"}}var H=/^[\s,#]+/,I=/\s+$/,J=0,K=Math,L=K.round,M=K.min,N=K.max,O=K.random,P=function(b,c){if(b=b?b:"",c=c||{},b instanceof P)return b;if(!(this instanceof P))return new P(b,c);var d=a(b);this._originalInput=b,this._r=d.r,this._g=d.g,this._b=d.b,this._a=d.a,this._roundA=L(100*this._a)/100,this._format=c.format||d.format,this._gradientType=c.gradientType,this._r<1&&(this._r=L(this._r)),this._g<1&&(this._g=L(this._g)),this._b<1&&(this._b=L(this._b)),this._ok=d.ok,this._tc_id=J++};P.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var a=this.toRgb();return(299*a.r+587*a.g+114*a.b)/1e3},setAlpha:function(a){return this._a=w(a),this._roundA=L(100*this._a)/100,this},toHsv:function(){var a=e(this._r,this._g,this._b);return{h:360*a.h,s:a.s,v:a.v,a:this._a}},toHsvString:function(){var a=e(this._r,this._g,this._b),b=L(360*a.h),c=L(100*a.s),d=L(100*a.v);return 1==this._a?"hsv("+b+", "+c+"%, "+d+"%)":"hsva("+b+", "+c+"%, "+d+"%, "+this._roundA+")"},toHsl:function(){var a=c(this._r,this._g,this._b);return{h:360*a.h,s:a.s,l:a.l,a:this._a}},toHslString:function(){var a=c(this._r,this._g,this._b),b=L(360*a.h),d=L(100*a.s),e=L(100*a.l);return 1==this._a?"hsl("+b+", "+d+"%, "+e+"%)":"hsla("+b+", "+d+"%, "+e+"%, "+this._roundA+")"},toHex:function(a){return g(this._r,this._g,this._b,a)},toHexString:function(a){return"#"+this.toHex(a)},toHex8:function(){return h(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:L(this._r),g:L(this._g),b:L(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+L(this._r)+", "+L(this._g)+", "+L(this._b)+")":"rgba("+L(this._r)+", "+L(this._g)+", "+L(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:L(100*x(this._r,255))+"%",g:L(100*x(this._g,255))+"%",b:L(100*x(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+L(100*x(this._r,255))+"%, "+L(100*x(this._g,255))+"%, "+L(100*x(this._b,255))+"%)":"rgba("+L(100*x(this._r,255))+"%, "+L(100*x(this._g,255))+"%, "+L(100*x(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(R[g(this._r,this._g,this._b,!0)]||!1)},toFilter:function(a){var b="#"+h(this._r,this._g,this._b,this._a),c=b,d=this._gradientType?"GradientType = 1, ":"";if(a){var e=P(a);c=e.toHex8String()}return"progid:DXImageTransform.Microsoft.gradient("+d+"startColorstr="+b+",endColorstr="+c+")"},toString:function(a){var b=!!a;a=a||this._format;var c=!1,d=this._a<1&&this._a>=0,e=!b&&d&&("hex"===a||"hex6"===a||"hex3"===a||"name"===a);return e?"name"===a&&0===this._a?this.toName():this.toRgbString():("rgb"===a&&(c=this.toRgbString()),"prgb"===a&&(c=this.toPercentageRgbString()),"hex"!==a&&"hex6"!==a||(c=this.toHexString()),"hex3"===a&&(c=this.toHexString(!0)),"hex8"===a&&(c=this.toHex8String()),"name"===a&&(c=this.toName()),"hsl"===a&&(c=this.toHslString()),"hsv"===a&&(c=this.toHsvString()),c||this.toHexString())},_applyModification:function(a,b){var c=a.apply(null,[this].concat([].slice.call(b)));return this._r=c._r,this._g=c._g,this._b=c._b,this.setAlpha(c._a),this},lighten:function(){return this._applyModification(l,arguments)},brighten:function(){return this._applyModification(m,arguments)},darken:function(){return this._applyModification(n,arguments)},desaturate:function(){return this._applyModification(i,arguments)},saturate:function(){return this._applyModification(j,arguments)},greyscale:function(){return this._applyModification(k,arguments)},spin:function(){return this._applyModification(o,arguments)},_applyCombination:function(a,b){return a.apply(null,[this].concat([].slice.call(b)))},analogous:function(){return this._applyCombination(t,arguments)},complement:function(){return this._applyCombination(p,arguments)},monochromatic:function(){return this._applyCombination(u,arguments)},splitcomplement:function(){return this._applyCombination(s,arguments)},triad:function(){return this._applyCombination(q,arguments)},tetrad:function(){return this._applyCombination(r,arguments)}},P.fromRatio=function(a,b){if("object"==typeof a){var c={};for(var d in a)a.hasOwnProperty(d)&&("a"===d?c[d]=a[d]:c[d]=D(a[d]));a=c}return P(a,b)},P.equals=function(a,b){return!(!a||!b)&&P(a).toRgbString()==P(b).toRgbString()},P.random=function(){return P.fromRatio({r:O(),g:O(),b:O()})},P.mix=function(a,b,c){c=0===c?0:c||50;var d,e=P(a).toRgb(),f=P(b).toRgb(),g=c/100,h=2*g-1,i=f.a-e.a;d=h*i==-1?h:(h+i)/(1+h*i),d=(d+1)/2;var j=1-d,k={r:f.r*d+e.r*j,g:f.g*d+e.g*j,b:f.b*d+e.b*j,a:f.a*g+e.a*(1-g)};return P(k)},P.readability=function(a,b){var c=P(a),d=P(b),e=c.toRgb(),f=d.toRgb(),g=c.getBrightness(),h=d.getBrightness(),i=Math.max(e.r,f.r)-Math.min(e.r,f.r)+Math.max(e.g,f.g)-Math.min(e.g,f.g)+Math.max(e.b,f.b)-Math.min(e.b,f.b);return{brightness:Math.abs(g-h),color:i}},P.isReadable=function(a,b){var c=P.readability(a,b);return c.brightness>125&&c.color>500},P.mostReadable=function(a,b){for(var c=null,d=0,e=!1,f=0;f125&&g.color>500,i=3*(g.brightness/125)+g.color/500;(h&&!e||h&&e&&i>d||!h&&!e&&i>d)&&(e=h,d=i,c=P(b[f]))}return c};var Q=P.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},R=P.hexNames=v(Q),S=function(){var a="[-\\+]?\\d+%?",b="[-\\+]?\\d*\\.\\d+%?",c="(?:"+b+")|(?:"+a+")",d="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?",e="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?";return{rgb:new RegExp("rgb"+d),rgba:new RegExp("rgba"+e),hsl:new RegExp("hsl"+d),hsla:new RegExp("hsla"+e),hsv:new RegExp("hsv"+d),hsva:new RegExp("hsva"+e),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();window.tinycolor=P}(),a(function(){a.fn.spectrum.load&&a.fn.spectrum.processNativeColorInputs()})}),c("text!Abstract/ui/templates/inputColor.html",[],function(){return'
    input-holder\'>
    \n
    \n\t
    \n\t\t
    \n\t
    \n
    \n'}),c("Abstract/ui/InputColor",["backbone","./Input","Spectrum","text!./templates/inputColor.html"],function(a,b,c,d){return b.extend({template:_.template(d),initialize:function(a){b.prototype.initialize.apply(this,arguments);var c=this.ppfx;this.colorCls=c+"field-color-picker",this.inputClass=c+"field "+c+"field-color",this.colorHolderClass=c+"field-colorp-c",this.listenTo(this.model,"change:value",this.handleModelChange)},handleModelChange:function(){b.prototype.handleModelChange.apply(this,arguments);var a=this.model.get("value"),c=this.getColorEl();a="none"===a?"#fff":a,c.spectrum("set",a),c.get(0).style.backgroundColor=a},getColorEl:function(){if(!this.colorEl){var a=this.model,b=$("
    ",{"class":this.colorCls}),c=b.get(0).style,d=this.target&&this.target.config?this.target.config.el:"";b.spectrum({appendTo:d||"body",maxSelectionSize:8,showPalette:!0,showAlpha:!0,chooseText:"Ok",cancelText:"⨯",palette:[],move:function(a){var b=1==a.getAlpha()?a.toHexString():a.toRgbString();c.backgroundColor=b},change:function(b){var d=1==b.getAlpha()?b.toHexString():b.toRgbString();d=d.replace(/ /g,""),c.backgroundColor=d,a.set("value",d)}}),this.colorEl=b}return this.colorEl},render:function(){return b.prototype.render.apply(this,arguments),this.$el.find("."+this.colorHolderClass).html(this.getColorEl()),this}})}),c("StyleManager/view/PropertyColorView",["backbone","./PropertyView","Abstract/ui/InputColor"],function(a,b,c){return b.extend({renderTemplate:function(){},renderInput:function(){if(!this.input){var a=new c({target:this.target,model:this.model,ppfx:this.ppfx});this.input=a.render(),this.$el.append(this.input.$el),this.$input=this.input.inputEl,this.$color=this.input.colorEl}this.setValue(this.componentValue)},setValue:function(a){this.input.setValue(a,{silent:1})}})}),c("text!StyleManager/templates/propertyFile.html",[],function(){return'
    \n\t
    input-holder\'>\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t
    \n\t
    \n
    \n
    '}),c("StyleManager/view/PropertyFileView",["backbone","./PropertyView","text!./../templates/propertyFile.html"],function(a,b,c){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),this.assets=this.target.get("assets"),this.modal=this.target.get("Modal"),this.am=this.target.get("AssetManager"),this.className=this.className+" "+this.pfx+"file",this.events["click #"+this.pfx+"close"]="removeFile",this.events["click #"+this.pfx+"images"]="openAssetManager",this.delegateEvents()},renderInput:function(){this.$input||(this.$input=$("",{placeholder:this.defaultValue,type:"text"})),this.$preview||(this.$preview=this.$el.find("#"+this.pfx+"preview-file")),this.$previewBox||(this.$previewBox=this.$el.find("#"+this.pfx+"preview-box")),this.componentValue&&this.componentValue!=this.defaultValue?this.setPreviewView(1):this.setPreviewView(0),this.setValue(this.componentValue,0)},setPreviewView:function(a){this.$previewBox&&(a?this.$previewBox.addClass(this.pfx+"show"):this.$previewBox.removeClass(this.pfx+"show"))},spreadUrl:function(a){this.setValue(a),this.setPreviewView(1)},setPreview:function(a){this.$preview&&this.$preview.css("background-image","url("+a+")")},setValue:function(a,c){b.prototype.setValue.apply(this,arguments),this.setPreview(a)},renderTemplate:function(){this.$el.append(this.template({upload:"Upload",assets:"Images",pfx:this.pfx}))},cleanValue:function(){this.setPreviewView(0),this.model.set({value:""},{silent:!0})},removeFile:function(){this.model.set("value",this.defaultValue),b.prototype.cleanValue.apply(this,arguments),this.setPreviewView(0)},openAssetManager:function(a){var b=this;this.modal&&this.am&&(this.modal.setTitle("Select image"),this.modal.setContent(this.am.render()),this.am.setTarget(null),this.modal.open(),this.am.onSelect(function(c){b.modal.close(),b.spreadUrl(c.get("src")),b.valueChanged(a)}))}})}),c("text!StyleManager/templates/propertyComposite.html",[],function(){return'
    \n\tinput-holder\'>\n
    \n
    '}),c("StyleManager/view/PropertyCompositeView",["backbone","./PropertyView","text!./../templates/propertyComposite.html","require"],function(a,b,c,d){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),_.bindAll(this,"build"),this.config=a.config||{},this.className=this.className+" "+this.pfx+"composite"},valueUpdated:function(){this.model.get("detached")||b.prototype.valueUpdated.apply(this,arguments)},renderInput:function(){var a=this.model,b=a.get("properties")||[];if(b.length&&(this.$input||(this.$input=$("",{value:0,type:"hidden"})),this.props||(this.props=a.get("properties")),!this.$props)){this.props.each(function(b,c){b&&"composite"==b.get("type")&&(this.props.remove(b),console.warn("Nested composite types not yet allowed.")),b.parent=a},this);var c=d("./PropertiesView"),e=new c(this.getPropsConfig());this.$props=e.render().$el,this.$el.find("#"+this.pfx+"input-holder").html(this.$props)}},getPropsConfig:function(a){var b=this;return result={config:this.config,collection:this.props,target:this.target,propTarget:this.propTarget,onChange:function(a,c,d){var e=b.build();b.model.set("value",e,d)},customValue:function(a,c){return b.valueOnIndex(c,a)}},this.model.get("detached")&&delete result.onChange,result},getDefaultValue:function(){var a="";return this.props.each(function(b,c){a+=b.get("defaults")+b.get("unit")+" "}),a.replace(/ +$/,"")},valueOnIndex:function(a,b){var c=null,d=this.getComponentValue().split(" ");if(d.length&&d[a]&&(c=d[a],b&&b.model&&b.model.get("functionName"))){var e=this.fetchFromFunction(c);e&&(c=e)}return c},build:function(a,b,c){var d="";return this.model.get("properties").each(function(a){var b=a.getValue();func=a.get("functionName"),func&&(b=func+"("+b+")"),d+=b+" "}),d.replace(/ +$/,"")}})}),c("text!StyleManager/templates/propertyStack.html",[],function(){return"
    field <%= pfx %>stack\">\n\t\n\t\n
    \n
    "}),c("text!StyleManager/templates/layer.html",[],function(){return'
    \n \n
    \n
    <%= label %>
    \n
    \n\t
    \n
    \n
    \n
    \n
    '}),c("StyleManager/view/LayerView",["backbone","text!./../templates/layer.html"],function(a,b){return a.View.extend({events:{click:"updateIndex"},template:_.template(b),initialize:function(a){this.stackModel=a.stackModel||{},this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.className=this.pfx+"layer",this.sorter=a.sorter||null,this.listenTo(this.model,"destroy remove",this.remove),this.listenTo(this.model,"change:value",this.valueChanged),this.listenTo(this.model,"change:props",this.showProps),this.events["click #"+this.pfx+"close-layer"]="remove",this.events["mousedown > #"+this.pfx+"move"]="initSorter",this.model.get("preview")||this.$el.addClass(this.pfx+"no-preview"),this.$el.data("model",this.model),this.delegateEvents()},initSorter:function(a){this.sorter&&this.sorter.startSort(this.el)},getProps:function(){return this.stackModel.get?this.stackModel.get("properties"):null},valueChanged:function(){var a=this.model.get("preview");if(a){this.$preview||(this.$preview=this.$el.find("#"+this.pfx+"preview"));var b=this.getProps(),c=this.$preview;"function"==typeof a?a(b,c):this.onPreview(b,c)}},onPreview:function(a,b){var c=this.model.get("value").split(" "),d=3,e="";if(a.each(function(a,b){var f=c[b]||"";if(f&&"integer"==a.get("type")){var g=parseInt(f,10),h=f.replace(g,"");g=isNaN(g)?0:g,g>d&&(g=d),g<-d&&(g=-d),f=g+h}e+=f+" "}),this.stackModel.get){var f=this.stackModel.get("property");f&&(this.$preview.get(0).style[f]=e)}},showProps:function(){this.$props=this.model.get("props"),this.$el.find("#"+this.pfx+"inputs").html(this.$props.show()),this.model.set({props:null},{silent:!0})},remove:function(b){this.$props&&this.$props.detach(),b&&b.stopPropagation&&b.stopPropagation(),a.View.prototype.remove.apply(this,arguments),this.model.collection.contains(this.model)&&this.model.collection.remove(this.model),this.stackModel&&this.stackModel.set&&(this.stackModel.set({stackIndex:null},{silent:!0}),this.stackModel.trigger("updateValue"))},updateIndex:function(a){var b=this.getIndex();this.stackModel.set("stackIndex",b),this.model.collection&&this.model.collection.trigger("deselectAll"),this.$el.addClass(this.pfx+"active")},getIndex:function(){var a=0,b=this.model;return b.collection&&(a=b.collection.indexOf(b)),a},render:function(){return this.$el.html(this.template({label:"Layer "+this.model.get("index"),pfx:this.pfx})),this.$el.attr("class",this.className),this.valueChanged(),this}})}),c("StyleManager/view/LayersView",["backbone","./LayerView"],function(a,b){return a.View.extend({initialize:function(a){this.config=a.config||{},this.stackModel=a.stackModel,this.preview=a.preview,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.className=this.pfx+"layers "+this.ppfx+"field",this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"deselectAll",this.deselectAll),this.listenTo(this.collection,"reset",this.render);var b=this.config.em||"",c=b?b.get("Utils"):"";this.sorter=c?new c.Sorter({container:this.el,containerSel:"."+this.pfx+"layers",itemSel:"."+this.pfx+"layer",pfx:this.config.pStylePrefix}):"",this.$el.data("model",{}),this.$el.data("collection",this.collection)},addTo:function(a){var b=this.collection.indexOf(a);this.addToCollection(a,null,b)},addToCollection:function(a,c,d){var e=c||null,f=b;"undefined"!=typeof this.preview&&a.set("preview",this.preview);var g=new f({model:a,stackModel:this.stackModel,config:this.config,sorter:this.sorter}),h=g.render().el;if(e)e.appendChild(h);else if("undefined"!=typeof d){var i="before";this.$el.children().length==d&&(d--,i="after"),d<0?this.$el.append(h):this.$el.children().eq(d)[i](h)}else this.$el.append(h);return h},deselectAll:function(){this.$el.find("."+this.pfx+"layer").removeClass(this.pfx+"active")},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",this.className),this.sorter&&(this.sorter.plh=null),this}})}),c("StyleManager/view/PropertyStackView",["backbone","./PropertyCompositeView","text!./../templates/propertyStack.html","./../model/Layers","./LayersView"],function(a,b,c,d,e){return b.extend({template:_.template(c),initialize:function(a){b.prototype.initialize.apply(this,arguments),this.model.set("stackIndex",null),this.className=this.pfx+"property "+this.pfx+"stack",this.events["click #"+this.pfx+"add"]="addLayer",this.listenTo(this.model,"change:stackIndex",this.indexChanged),this.listenTo(this.model,"updateValue",this.valueUpdated),this.delegateEvents()},targetUpdated:function(){this.model.get("detached")?(this.checkVisibility(),this.refreshLayers()):b.prototype.targetUpdated.apply(this,arguments)},getLayers:function(){return this.model.get("layers")},indexChanged:function(a){var b=this.model,c=this.getLayers().at(b.get("stackIndex"));c.set("props",this.$props),b.get("properties").each(function(a){a.trigger("targetUpdated")})},getStackValues:function(){return this.getLayers().pluck("value")},getPropsConfig:function(a){var c=this,d=b.prototype.getPropsConfig.apply(this,arguments);return d.onChange=function(a,b,d){var e=b.model,f=c.build();if(c.model.get("detached")){var g="";e.collection.indexOf(e);c.getLayers().each(function(a){var b=a.get("values")[e.get("property")];b&&(g+=(g?",":"")+b)}),b.updateTargetStyle(g,null,d)}else c.model.set("value",f,d)},d},valueOnIndex:function(a,b){var c=null,d=this.model.get("stackIndex");if(this.model.get("detached")){var e=b.getTargetValue(),f=(e+"").split(",");c=f[d],c=c?c.trim():b.getDefaultValue(),c=b.tryFetchFromFunction(c)}else{var g=this.getStackValues(),h=g[d];if(!h)return;var i=h.split(" ");i.length&&i[a]&&(c=i[a])}return c},build:function(){var a=this.model.get("stackIndex");if(null!==a){var c=b.prototype.build.apply(this,arguments),d=this.getLayers().at(a);if(d){var e={};return this.model.get("properties").each(function(a){var b=a.getValue(),c=a.get("functionName");c&&(b=c+"("+b+")"),e[a.get("property")]=b}),d.set("values",e), +d.set("value",c),this.createValue()}}},addLayer:function(a){if(this.getTarget()){var b=this.getLayers(),c=b.add({name:"test"}),d=b.indexOf(c);return c.set("value",this.getDefaultValue()),this.valueUpdated(),this.model.set("stackIndex",d),c}},valueUpdated:function(){var a=this.model;a.get("detached")?a.get("properties").each(function(a){a.trigger("change:value")}):a.set("value",this.createValue())},createValue:function(){return this.getStackValues().join(", ")},renderLayers:function(){return this.$field||(this.$field=this.$el.find("> ."+this.pfx+"field")),this.$layers||(this.$layers=new e({collection:this.getLayers(),stackModel:this.model,preview:this.model.get("preview"),config:this.config})),this.$field.append(this.$layers.render().el),this.$props.hide(),this},renderInput:function(){b.prototype.renderInput.apply(this,arguments),this.refreshLayers()},getLayersFromTarget:function(){var a=[],b=this.getTarget();if(!b)return a;var c=b.get("style");return this.model.get("properties").each(function(b){var d=c[b.get("property")];if(d)for(var e=d.split(","),f=0,g=e.length;f",{"class":"clear"})),this.$el.attr("class",this.pfx+"properties"),this}})}),c("text!StyleManager/templates/sector.html",[],function(){return'
    \n \n <%= label %>\n
    '}),c("StyleManager/view/SectorView",["backbone","./PropertiesView","text!./../templates/sector.html"],function(a,b,c){return a.View.extend({template:_.template(c),events:{},initialize:function(a){this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.target=a.target||{},this.propTarget=a.propTarget||{},this.open=this.model.get("open"),this.caretR="fa-caret-right",this.caretD="fa-caret-down",this.listenTo(this.model,"change:open",this.updateOpen),this.listenTo(this.model,"updateVisibility",this.updateVisibility),this.events["click ."+this.pfx+"title"]="toggle",this.delegateEvents()},updateVisibility:function(){var a;this.model.get("properties").each(function(b){b.get("visible")&&(a=1)}),this.el.style.display=a?"block":"none"},updateOpen:function(){this.model.get("open")?this.show():this.hide()},show:function(){this.$el.addClass(this.pfx+"open"),this.$el.find("."+this.pfx+"properties").show(),this.$caret.removeClass(this.caretR).addClass(this.caretD)},hide:function(){this.$el.removeClass(this.pfx+"open"),this.$el.find("."+this.pfx+"properties").hide(),this.$caret.removeClass(this.caretD).addClass(this.caretR)},toggle:function(){var a=this.model.get("open")?0:1;this.model.set("open",a)},render:function(){return this.$el.html(this.template({pfx:this.pfx,label:this.model.get("name")})),this.$caret=this.$el.find("#"+this.pfx+"caret"),this.renderProperties(),this.$el.attr("class",this.pfx+"sector no-select"),this.updateOpen(),this},renderProperties:function(){var a=this.model.get("properties");if(a){var c=new b({collection:a,target:this.target,propTarget:this.propTarget,config:this.config});this.$el.append(c.render().el)}}})}),c("StyleManager/view/SectorsView",["backbone","./SectorView"],function(a,b){return a.View.extend({initialize:function(b){this.config=b.config||{},this.pfx=this.config.stylePrefix||"",this.target=b.target||{},this.propTarget={},_.extend(this.propTarget,a.Events),this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset",this.render),this.listenTo(this.target,"change:selectedComponent targetClassAdded targetClassRemoved targetClassUpdated targetStateUpdated targetStyleUpdated change:device",this.targetUpdated)},addTo:function(a){this.addToCollection(a)},targetUpdated:function(){var a=this.target.get("selectedComponent");if(a){var b=this.target.get("Config").devicePreviewMode,c=a.get("classes"),d=this.propTarget,e=this.target.getDeviceModel(),f=b?"":a.get("state"),g=e&&!b&&e.get("width")?"(max-width: "+e.get("width")+")":"";if(d.helper=null,c.length){var h=this.target.get("CssComposer"),i=_.filter(c.models,function(a){return a.get("active")}),j=h.get(i,f,g);if(j||(j=h.add(i,f,g),j.set("style",a.get("style")),a.set("style",{})),f){var k=this.target.get("SelectorManager"),l=k.add("hc-state"),m=h.get([l]);m?(h.getAll().remove(m),h.getAll().add(m)):m=h.add([l]),m.set("style",j.get("style")),d.helper=m}return d.model=j,void d.trigger("update")}d.model=a,d.trigger("update")}},addToCollection:function(a,c){var d=c||null,e=b,f=new e({model:a,id:this.pfx+a.get("name").replace(" ","_").toLowerCase(),name:a.get("name"),properties:a.get("properties"),target:this.target,propTarget:this.propTarget,config:this.config}),g=f.render().el;return d?d.appendChild(g):this.$el.append(g),g},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addToCollection(b,a)},this),this.$el.attr("id",this.pfx+"sectors"),this.$el.append(a),this}})}),c("StyleManager/main",["require","./config/config","./model/Sectors","./view/SectorsView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Sectors"),g=a("./view/SectorsView");return{name:"StyleManager",getConfig:function(){return d},init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);var i=d.pStylePrefix;return i&&(d.stylePrefix=i+d.stylePrefix),b=new f(d.sectors),c=new g({collection:b,target:d.em,config:d}),this},addSector:function(a,c){var d=this.getSector(a);return d||(c.id=a,d=b.add(c)),d},getSector:function(a){var c=b.where({id:a});return c.length?c[0]:null},getSectors:function(){return b},addProperty:function(a,b){var c=null,d=this.getSector(a);return d&&(c=d.get("properties").add(b)),c},getProperty:function(a,b){var c=null,d=this.getSector(a);return d&&(c=d.get("properties").where({property:b}),c=1==c.length?c[0]:c),c},getProperties:function(a){var b=null,c=this.getSector(a);return c&&(b=c.get("properties")),b},getModelToStyle:function(a){var b=a.get("classes");if(d.em&&b&&b.length){var c=d.em.get("Config").devicePreviewMode,e=d.em.getDeviceModel(),f=c?"":a.get("state"),g=e&&!c?e.get("width"):"",h=d.em.get("CssComposer"),i=_.filter(b.models,function(a){return a.get("active")}),j=h.get(i,f,g);if(j)return j}return a},render:function(){return c.render().el}}}}),c("StyleManager",["StyleManager/main"],function(a){return a}),c("AssetManager/model/Asset",["backbone"],function(a){return a.Model.extend({idAttribute:"src",defaults:{type:"",src:""},getFilename:function(){return this.get("src").split("/").pop()},getExtension:function(){return this.getFilename().split(".").pop()}})}),c("AssetManager/model/AssetImage",["backbone","./Asset"],function(a,b){return b.extend({defaults:_.extend({},b.prototype.defaults,{type:"image",unitDim:"px",height:0,width:0})})}),c("AssetManager/model/Assets",["backbone","./Asset","./AssetImage"],function(a,b,c){return a.Collection.extend({model:c,initialize:function(a,b){this.model=function(a,b){var d;switch(a.type){default:d=new c(a,b)}return d}},addImg:function(a,b){return this.add({type:"image",src:a},b),this},add:function(b,c){var d=[];b=b instanceof Array?b:[b];for(var e=0,f=b.length;e\n
    \n
    \n
    \n
    \n\t
    <%= name %>
    \n\t
    <%= dim %>
    \n
    \n
    \n
    '}),c("AssetManager/view/AssetImageView",["./AssetView","text!./../template/assetImage.html"],function(a,b){return a.extend({events:{click:"handleClick",dblclick:"handleDblClick"},template:_.template(b),initialize:function(b){a.prototype.initialize.apply(this,arguments),this.className+=" "+this.pfx+"asset-image",this.events["click #"+this.pfx+"close"]="removeItem",this.delegateEvents()},handleClick:function(){var a=this.config.onClick,b=this.model;b.collection.trigger("deselectAll"),this.$el.addClass(this.pfx+"highlight"),"function"==typeof a?a(b):this.updateTarget(b.get("src"))},handleDblClick:function(){var a=this.config.onDblClick,b=this.model;"function"==typeof a?a(b):this.updateTarget(b.get("src"));var c=b.collection.onSelect;"function"==typeof c&&c(this.model)},updateTarget:function(a){var b=this.model.collection.target;if(b&&b.set){var c=_.clone(b.get("attributes"));b.set("attributes",c),b.set("src",a)}},removeItem:function(a){a.stopPropagation(),this.model.collection.remove(this.model)},render:function(){var a=this.model.get("name"),b=this.model.get("width")&&this.model.get("height")?this.model.get("width")+" x "+this.model.get("height"):"";return a=a?a:this.model.get("src").split("/").pop(),a=a&&a.length>30?a.substring(0,30)+"...":a,b=b?b+(this.model.get("unitDim")?this.model.get("unitDim"):" px"):"",this.$el.html(this.template({name:a,src:this.model.get("src"),dim:b,pfx:this.pfx,ppfx:this.ppfx})),this.$el.attr("class",this.className),this}})}),c("text!AssetManager/template/fileUploader.html",[],function(){return'
    \n\t
    <%= title %>
    \n\t multiple/>\n\t
    \n
    '}),c("AssetManager/view/FileUploader",["backbone","text!./../template/fileUploader.html"],function(a,b){return a.View.extend({template:_.template(b),events:{},initialize:function(a){this.options=a||{},this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.target=this.collection||{},this.uploadId=this.pfx+"uploadFile",this.disabled=!this.config.upload,this.events["change #"+this.uploadId]="uploadFile",this.delegateEvents()},uploadFile:function(a){for(var b=a.dataTransfer?a.dataTransfer.files:a.target.files,c=new FormData,d=0;d\n
    \n
    \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n'}),c("AssetManager/view/AssetsView",["backbone","./AssetView","./AssetImageView","./FileUploader","text!./../template/assets.html"],function(a,b,c,d,e){return a.View.extend({template:_.template(e),initialize:function(a){this.options=a,this.config=a.config,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.listenTo(this.collection,"add",this.addToAsset),this.listenTo(this.collection,"deselectAll",this.deselectAll),this.className=this.pfx+"assets",this.events={},this.events.submit="addFromStr",this.delegateEvents()},addFromStr:function(a){a.preventDefault();var b=this.getInputUrl(),c=b.value.trim();if(c)return this.collection.addImg(c,{at:0}),this.getAssetsEl().scrollTop=0,b.value="",this},getAssetsEl:function(){return this.assets=this.el.querySelector("."+this.pfx+"assets"),this.assets},getInputUrl:function(){return this.inputUrl&&this.inputUrl.value||(this.inputUrl=this.el.querySelector("."+this.pfx+"add-asset input")),this.inputUrl},addToAsset:function(a){this.addAsset(a)},addAsset:function(a,d){var e=d||null,f=b;a.get("type").indexOf("image")>-1&&(f=c);var g=new f({model:a,config:this.config}),h=g.render().el;if(e)e.appendChild(h);else{var i=this.getAssetsEl();i&&i.insertBefore(h,i.firstChild)}return h},deselectAll:function(){this.$el.find("."+this.pfx+"highlight").removeClass(this.pfx+"highlight")},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.addAsset(b,a)},this),this.$el.html(this.template({pfx:this.pfx,ppfx:this.ppfx,btnText:this.config.addBtnText})),this.$el.find("."+this.pfx+"assets").append(a),this}})}),c("AssetManager/config/config",[],function(){return{assets:[],stylePrefix:"am-",upload:"http://localhost/assets/upload",uploadText:"Drop files here or click to upload",addBtnText:"Add image"}}),c("AssetManager/main",["require","./model/Assets","./view/AssetsView","./view/FileUploader","./config/config"],function(a){return function(){var b,c,d,e={},f=a("./model/Assets"),g=a("./view/AssetsView"),h=a("./view/FileUploader");return{name:"AssetManager",storageKey:"assets",init:function(i){e=i||{};var j=a("./config/config");for(var k in j)k in e||(e[k]=j[k]);var l=e.pStylePrefix;l&&(e.stylePrefix=l+e.stylePrefix),b=new f(e.assets);var m={collection:b,config:e};return c=new g(m),d=new h(m),this},add:function(a){return b.add(a)},get:function(a){return b.where({src:a})[0]},getAll:function(){return b},remove:function(a){var b=this.get(a);return this.getAll().remove(b),this},store:function(a){var b={},c=JSON.stringify(this.getAll().toJSON());return b[this.storageKey]=c,!a&&e.stm&&e.stm.store(b),b},load:function(a){var b=a||"",c=this.storageKey;!b&&e.stm&&(b=e.stm.load(c));var d=[];try{d=JSON.parse(b[c])}catch(f){}return this.getAll().add(d),d},render:function(a){return this.rendered&&!a||(this.rendered=c.render().$el.add(d.render().$el)),this.rendered},setTarget:function(a){c.collection.target=a},onSelect:function(a){c.collection.onSelect=a},onClick:function(a){e.onClick=a},onDblClick:function(a){e.onDblClick=a}}}}),c("AssetManager",["AssetManager/main"],function(a){return a}),c("CssComposer/config/config",[],function(){return{stylePrefix:"css-",staticRules:"",rules:[]}}),c("CssComposer/model/Selectors",["backbone","require"],function(a,b){return a.Collection.extend({initialize:function(a,c){this.model=function(a,c){var d;return this.ClassTag||(this.ClassTag=b("SelectorManager/model/Selector")),d=new this.ClassTag(a,c)}}})}),c("CssComposer/model/CssRule",["backbone","./Selectors"],function(a,b){return a.Model.extend({defaults:{selectors:{},selectorsAdd:"",style:{},mediaText:"",state:"",stylable:!0},initialize:function(a,c){if(this.config=a||{},this.sm=c?c.sm||{}:{},this.slct=this.config.selectors||[],this.sm.get){for(var d=[],e=0;e=0&&(c.css=d.em.getCss()),e.indexOf("styles")>=0&&(c.styles=JSON.stringify(b)),a||d.stm.store(c),c}},add:function(a,c,d,e){var g=c||"",h=d||"",i=e||{},j=this.get(a,g,h,i);return j?j:(i.state=g,i.mediaText=h,i.selectors="",j=new f(i),j.get("selectors").add(a),b.add(j),j)},get:function(a,c,d,e){var f=null;return b.each(function(b){f||b.compare(a,c,d,e)&&(f=b)}),f},getAll:function(){return b},addCollection:function(a,b){for(var c=b||{},e=[],f=a instanceof Array?a:[a],g=0,h=f.length;g=0&&this.set("void",!0),this.opt=e,this.sm=e?e.sm||{}:{},this.config=a||{},this.defaultC=this.config.components||[],this.defaultCl=this.normalizeClasses(this.get("classes")||this.config.classes||[]),this.components=new b(this.defaultC,e),this.components.parent=this,this.listenTo(this,"change:script",this.scriptUpdated),this.set("attributes",this.get("attributes")||{}),this.set("components",this.components),this.set("classes",new c(this.defaultCl));var f=new d;f.setTarget(this),f.add(this.get("traits")),this.set("traits",f),this.initToolbar();var g=["stylable"];g.forEach(function(a){var b=this.get(a);if("string"==typeof b){var c=b.split(",").map(function(a){return a.trim()});this.set(a,c)}},this),this.init()},init:function(){},scriptUpdated:function(){this.set("scriptUpdated",1)},initToolbar:function(){var a=this;if(!a.get("toolbar")){var b=[];a.get("draggable")&&b.push({attributes:{"class":"fa fa-arrows"},command:"tlb-move"}),a.get("copyable")&&b.push({attributes:{"class":"fa fa-clone"},command:"tlb-clone"}),a.get("removable")&&b.push({attributes:{"class":"fa fa-trash-o"},command:"tlb-delete"}),a.set("toolbar",b)}},loadTraits:function(a){var b=new d;b.setTarget(this),b.add(a),this.set("traits",b)},normalizeClasses:function(a){var b=[];if(this.sm.get){var c=this.sm.get("SelectorManager");if(c)return a.forEach(function(a){var d="";d="string"==typeof a?a:a.name;var e=c.add(d);b.push(e)}),b}},clone:function(a){var b=_.clone(this.attributes),c=this.get("components"),d=this.get("traits"),e=this.get("classes");return b.components=[],b.classes=[],b.traits=[],c.each(function(a,c){b.components[c]=a.clone(1)}),d.each(function(a,c){b.traits[c]=a.clone()}),e.each(function(a,c){b.classes[c]=a.get("name")}),b.status="",b.view="",a&&(this.opt.collection=null),new this.constructor(b,this.opt)},getName:function(){if(!this.name){var a=(this.cid.replace(/\D/g,""),this.get("type")),b=this.get("tagName");b="div"==b?"box":b,b=a?a:b,this.name=b.charAt(0).toUpperCase()+b.slice(1)}return this.name},toHTML:function(a){var b="",c=this,d=c.get("tagName"),e=c.get("void"),f="",g="",h=this.getAttrToHTML();for(var i in h){var j=h[i];g+=void 0!==typeof j&&""!==j?" "+i+'="'+j+'"':""}var k="";return c.get("classes").each(function(a){k+=" "+a.get("name")}),k=""!==k?' class="'+k.trim()+'"':"",_.isEmpty(c.get("style"))||(f=' id="'+c.cid+'" '),b+="<"+d+k+f+g+(e?"/":"")+">"+c.get("content"),c.get("components").each(function(a){b+=a.toHTML()}),e||(b+=""),b},getAttrToHTML:function(){var a=this.get("attributes")||{};return delete a.style,a},toJSON:function(){var b=a.Model.prototype.toJSON.apply(this,arguments),c=this.getScriptString();return c&&(b.script=c),b},getScriptString:function(a){var b=a||this.get("script");if("function"==typeof b){var c=b.toString().trim();c=c.replace(/^function\s?\(\)\s?\{/,""),c=c.replace(/\}$/,""),b=c}return b}},{isComponent:function(a){return{tagName:a.tagName?a.tagName.toLowerCase():""}}})}),c("DomComponents/view/ComponentsView",["backbone","require"],function(a,b){return a.View.extend({initialize:function(a){this.opts=a||{},this.config=a.config||{},this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset",this.render)},addTo:function(a){var b=this.collection.indexOf(a);this.addToCollection(a,null,b);var c=this.config.em;c&&(c.trigger("add:component",a),c.trigger("component:add",a))},addToCollection:function(a,c,d){this.compView||(this.compView=b("./ComponentView"));for(var e=c||null,f=this.compView,g=this.opts.defaultTypes,h=this.opts.componentTypes,i=a.get("type"),j=0;j=0&&(b.html=d.em.getHtml()),c.indexOf("components")>=0&&(b.components=JSON.stringify(d.em.getComponents())),a||d.stm.store(b),b}},getComponent:function(){return b},getWrapper:function(){return this.getComponent()},getComponents:function(){return this.getWrapper().get("components")},addComponent:function(a){return this.getComponents().add(a)},render:function(){return c.render().el},clear:function(){for(var a=this.getComponents(),b=0,c=a.length;b div")},render:function(){return this.$el.attr({"class":this.ppfx+"frame"}),this}})}),c("Canvas/view/CanvasView",["backbone","./FrameView"],function(a,b){return a.View.extend({initialize:function(a){_.bindAll(this,"renderBody","onFrameScroll","clearOff"),this.config=a.config||{},this.em=this.config.em||{},this.ppfx=this.config.pStylePrefix||"",this.className=this.config.stylePrefix+"canvas",this.listenTo(this.em,"change:canvasOffset",this.clearOff),this.frame=new b({model:this.model.get("frame"),config:this.config})},onFrameScroll:function(){var a="px",b=this.frame.el.contentDocument.body;this.toolsEl.style.top="-"+b.scrollTop+a,this.toolsEl.style.left="-"+b.scrollLeft+a,this.em.trigger("canvasScroll")},renderScripts:function(){var a=this.frame,b=this;a.el.onload=function(){function c(d){if(d.length>0){var e=document.createElement("script");e.type="text/javascript",e.src=d.shift(),e.onerror=e.onload=c.bind(null,d),a.el.contentDocument.head.appendChild(e)}else b.renderBody()}var d=b.config.scripts.slice(0);c(d)}},renderBody:function(){var a=this.model.get("frame").get("wrapper"),b=this.config.em;if(a){var c=this.ppfx,d=this.frame.$el.contents().find("body"),e=b.get("CssComposer"),f=b.get("Config");d.append(a.render()).append(e.render());var g=f.protectedCss,h="* {box-sizing: border-box;} body{margin:0;height:auto;background-color:#fff} #wrapper{min-height:100%; overflow:auto}."+c+"dashed :not([contenteditable]) > *[data-highlightable]{outline: 1px dashed rgba(170,170,170,0.7); outline-offset: -2px}."+c+"comp-selected{outline: 3px solid #3b97e3 !important}."+c+"no-select{user-select: none; -webkit-user-select:none; -moz-user-select: none}."+c+"freezed{opacity: 0.5; pointer-events: none}."+c+"no-pointer{pointer-events: none}."+c+"plh-image{background:#f5f5f5; border:none; height:50px; width:50px; display:block; outline:3px solid #ffca6f; cursor:pointer}."+c+"grabbing{cursor: grabbing; cursor: -webkit-grabbing}* ::-webkit-scrollbar-track {background: rgba(0, 0, 0, 0.1)}* ::-webkit-scrollbar-thumb {background: rgba(255, 255, 255, 0.2)}* ::-webkit-scrollbar {width: 10px}"+(f.canvasCss||"");h+=g||"",d.append(""),d.append(this.getJsContainer()),b.trigger("loaded"),this.frame.el.contentWindow.onscroll=this.onFrameScroll,this.frame.udpateOffset();var i=document,j=this.frame.el.contentDocument;j.addEventListener("keydown",function(a){i.dispatchEvent(new KeyboardEvent(a.type,a))}),j.addEventListener("keyup",function(a){i.dispatchEvent(new KeyboardEvent(a.type,a))})}},offset:function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument.body;return{top:b.top+c.scrollTop,left:b.left+c.scrollLeft}},clearOff:function(){this.frmOff=null,this.cvsOff=null},getFrameOffset:function(){return this.frmOff||(this.frmOff=this.offset(this.frame.el)),this.frmOff},getCanvasOffset:function(){return this.cvsOff||(this.cvsOff=this.offset(this.el)),this.cvsOff},getElementPos:function(a){var b=this.getFrameOffset(),c=this.getCanvasOffset(),d=this.offset(a),e=d.top+b.top-c.top,f=d.left+b.left-c.left;return{top:e,left:f,height:a.offsetHeight,width:a.offsetWidth}},getPosition:function(){var a=this.frame.el.contentDocument.body,b=this.getFrameOffset(),c=this.getCanvasOffset();return{top:b.top+a.scrollTop-c.top,left:b.left+a.scrollLeft-c.left}},updateScript:function(a){a.scriptContainer||(a.scriptContainer=$("
    "),this.getJsContainer().append(a.scriptContainer.get(0)));var b=a.model.cid,c=a.model.get("script"),d="function(){"+c+"}";d="function"==typeof c?c.toString():d,a.el.id=b,a.scriptContainer.html(""),a.scriptContainer.append('")},getJsContainer:function(){return this.jsContainer||(this.jsContainer=$("
    ",{"class":this.ppfx+"js-cont"}).get(0)),this.jsContainer},render:function(){if(this.wrapper=this.model.get("wrapper"),this.wrapper&&"function"==typeof this.wrapper.render){this.model.get("frame").set("wrapper",this.wrapper),this.$el.append(this.frame.render().el);var a=this.frame;0===this.config.scripts.length?a.el.onload=this.renderBody:this.renderScripts()}var b=this.ppfx;toolsEl=$("
    ",{id:b+"tools"}).get(0),this.hlEl=$("
    ",{"class":b+"highlighter"}).get(0),this.badgeEl=$("
    ",{"class":b+"badge"}).get(0),this.placerEl=$("
    ",{"class":b+"placeholder"}).get(0),this.placerIntEl=$("
    ",{"class":b+"placeholder-int"}).get(0),this.ghostEl=$("
    ",{"class":b+"ghost"}).get(0),this.toolbarEl=$("
    ",{"class":b+"toolbar"}).get(0),this.resizerEl=$("
    ",{"class":b+"resizer"}).get(0),this.offsetEl=$("
    ",{"class":b+"offset-v"}).get(0),this.fixedOffsetEl=$("
    ",{"class":b+"offset-fixed-v"}).get(0),this.placerEl.appendChild(this.placerIntEl),toolsEl.appendChild(this.hlEl),toolsEl.appendChild(this.badgeEl),toolsEl.appendChild(this.placerEl),toolsEl.appendChild(this.ghostEl),toolsEl.appendChild(this.toolbarEl),toolsEl.appendChild(this.resizerEl),toolsEl.appendChild(this.offsetEl),toolsEl.appendChild(this.fixedOffsetEl),this.$el.append(toolsEl);var c=this.em.get("rte");return c&&toolsEl.appendChild(c.render()),this.toolsEl=toolsEl,this.$el.attr({"class":this.className}),this}})}),c("Canvas/main",["require","./config/config","./model/Canvas","./view/CanvasView"],function(a){return function(){var b,c={},d=a("./config/config"),e=a("./model/Canvas"),f=a("./view/CanvasView");return{getCanvasView:function(){return f},name:"Canvas",init:function(a){c=a||{};for(var g in d)g in c||(c[g]=d[g]);var h=c.pStylePrefix;h&&(c.stylePrefix=h+c.stylePrefix),b=new e(a),f=new f({model:b,config:c});var i=c.em.get("DomComponents");return i&&this.setWrapper(i),this},setWrapper:function(a){b.set("wrapper",a)},getElement:function(){return f.el},getFrameEl:function(){return f.frame.el},getBody:function(){return f.frame.el.contentDocument.body},getWrapperEl:function(){return this.getBody().querySelector("#wrapper")},getToolsEl:function(){return f.toolsEl},getHighlighter:function(){return f.hlEl},getBadgeEl:function(){return f.badgeEl},getPlacerEl:function(){return f.placerEl},getGhostEl:function(){return f.ghostEl},getToolbarEl:function(){return f.toolbarEl},getResizerEl:function(){return f.resizerEl},getOffsetViewerEl:function(){return f.offsetEl},getFixedOffsetViewerEl:function(){return f.fixedOffsetEl},render:function(){return f.render().el},getOffset:function(){var a=this.offset(this.getFrameEl()),b=this.offset(this.getElement());return{top:a.top-b.top,left:a.left-b.left}},offset:function(a){var b=a.getBoundingClientRect();return{top:b.top+document.body.scrollTop,left:b.left+document.body.scrollLeft}},getElementPos:function(a){return f.getElementPos(a)},getTargetToElementDim:function(a,b,d){var e=d||{},g=f.getPosition(),h=e.elPos||f.getElementPos(b),i=d.toRight||0,j=e.targetHeight||a.offsetHeight,k=e.targetWidth||a.offsetWidth,l=e.event||null,m=h.top-j,n=h.left;n+=i?h.width:0,n=i?n-k:n;var o=nh.top+h.height?h.top+h.height:p;var q={top:p,left:o,elementTop:h.top,elementLeft:h.left,elementWidth:h.width,elementHeight:h.height,targetWidth:a.offsetWidth,targetHeight:a.offsetHeight,canvasTop:g.top,canvasLeft:g.left};return l&&c.em&&c.em.trigger(l,q),q},getMouseRelativePos:function(a,b){var c=b||{},d=0,e=0,f=c.subWinOffset,g=a.target.ownerDocument,h=g.defaultView||g.parentWindow,i=h.frameElement,j=f?h.pageYOffset:0,k=f?h.pageXOffset:0;if(i){var l=i.getBoundingClientRect();d=l.top||0,e=l.left||0}return{y:a.clientY+d-j,x:a.clientX+e-k}},getMouseRelativeCanvas:function(a,b){var c=this.getFrameEl(),d=this.getBody(),e=c.offsetTop||0,f=c.offsetLeft||0,g=d.scrollTop||0,h=d.scrollLeft||0;return{y:a.clientY+e+g,x:a.clientX+f+h}},getFrameWrapperEl:function(){return f.frame.getWrapper()}}}}),c("Canvas",["Canvas/main"],function(a){return a}),c("Commands/config/config",[],function(){return{ESCAPE_KEY:27,stylePrefix:"com-",defaults:[],em:null,firstCentered:!0,newFixedH:!1,minComponentH:50,minComponentW:50}}),c("Commands/view/CommandAbstract",["backbone"],function(a){return a.View.extend({initialize:function(a){this.config=a||{},this.editorModel=this.em=this.config.em||{},this.pfx=this.config.stylePrefix,this.ppfx=this.config.pStylePrefix,this.hoverClass=this.pfx+"hover",this.badgeClass=this.pfx+"badge",this.plhClass=this.pfx+"placeholder",this.freezClass=this.ppfx+"freezed",this.canvas=this.em.get&&this.em.get("Canvas"),this.em.get&&this.setElement(this.getCanvas()),this.canvas&&(this.$canvas=this.$el,this.$wrapper=$(this.getCanvasWrapper()),this.frameEl=this.canvas.getFrameEl(),this.canvasTool=this.getCanvasTools(),this.bodyEl=this.getCanvasBody()),this.init(this.config)},onFrameScroll:function(a){},getCanvas:function(){return this.canvas.getElement()},getCanvasBody:function(){return this.canvas.getBody()},getCanvasWrapper:function(){return this.canvas.getWrapperEl()},getCanvasTools:function(){return this.canvas.getToolsEl()},offset:function(a){var b=a.getBoundingClientRect();return{top:b.top+a.ownerDocument.body.scrollTop,left:b.left+a.ownerDocument.body.scrollLeft}},init:function(a){},run:function(a,b){},stop:function(a,b){}})}),c("Abstract/view/DomainViews",["backbone"],function(a){return a.View.extend({itemView:"",itemsView:"",itemType:"type",initialize:function(a,b){this.config=b||{}},addTo:function(a){ +this.add(a)},add:function(a,b){var c=b||null,d=this.itemView,e=a.get(this.itemType);this.itemsView&&this.itemsView[e]&&(d=this.itemsView[e]);var f=new d({model:a,config:this.config},this.config),g=f.render().el;c?c.appendChild(g):this.$el.append(g)},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.length&&this.collection.each(function(b){this.add(b,a)},this),this.$el.append(a),this}})}),c("DomComponents/view/ToolbarButtonView",["backbone"],function(a){return a.View.extend({events:{mousedown:"handleClick"},attributes:function(){return this.model.get("attributes")},initialize:function(a){this.editor=a.config.editor},handleClick:function(){var a=this.model.get("command");"function"==typeof a&&a(this.editor),"string"==typeof a&&this.editor.runCommand(a)},render:function(){var a=this.editor.getConfig();return this.el.className+=" "+a.stylePrefix+"toolbar-item",this}})}),c("DomComponents/view/ToolbarView",["backbone","Abstract/view/DomainViews","./ToolbarButtonView"],function(a,b,c){return b.extend({itemView:c,initialize:function(a){this.config={editor:a.editor||""},this.listenTo(this.collection,"reset",this.render)}})}),c("DomComponents/model/ToolbarButton",["backbone"],function(a){return a.Model.extend({defaults:{command:"",attributes:{}}})}),c("DomComponents/model/Toolbar",["backbone","./ToolbarButton"],function(a,b){return a.Collection.extend({model:b})}),c("Commands/view/SelectComponent",["require","DomComponents/view/ToolbarView","DomComponents/model/Toolbar"],function(a){var b=a("DomComponents/view/ToolbarView"),c=a("DomComponents/model/Toolbar");return{init:function(a){_.bindAll(this,"onHover","onOut","onClick","onKeyPress")},enable:function(){_.bindAll(this,"copyComp","pasteComp","onFrameScroll"),this.frameOff=this.canvasOff=this.adjScroll=null;var a=this.config.em.get("Config");this.startSelectComponent(),this.toggleClipboard(a.copyPaste);var b=this.config.em;b.on("component:update",this.updateAttached,this),b.on("change:canvasOffset",this.updateAttached,this),b.on("change:selectedComponent",this.updateToolbar,this)},toggleClipboard:function(a){var b=a||0;b?(key("⌘+c, ctrl+c",this.copyComp),key("⌘+v, ctrl+v",this.pasteComp)):(key.unbind("⌘+c, ctrl+c"),key.unbind("⌘+v, ctrl+v"))},copyComp:function(){var a=this.editorModel.get("selectedComponent");a&&a.get("copyable")&&this.editorModel.set("clipboard",a)},pasteComp:function(){var a=this.editorModel.get("clipboard"),b=this.editorModel.get("selectedComponent");if(a&&b&&b.collection){var c=b.collection.indexOf(b),d=a.clone();b.collection.add(d,{at:c+1})}},getCanvasBodyEl:function(){return this.$bodyEl||(this.$bodyEl=$(this.getCanvasBody())),this.$bodyEl},startSelectComponent:function(){this.toggleSelectComponent(1)},stopSelectComponent:function(){this.toggleSelectComponent()},toggleSelectComponent:function(a){var b="*",c=a?"on":"off";this.getCanvasBodyEl()[c]("mouseover",b,this.onHover)[c]("mouseout",b,this.onOut)[c]("click",b,this.onClick);var d=this.getContentWindow();d[c]("scroll",this.onFrameScroll),d[c]("keydown",this.onKeyPress)},onKeyPress:function(a){var b=a.which||a.keyCode,c=this.editorModel.get("selectedComponent"),d="BODY"!==this.frameEl.contentDocument.activeElement.tagName;if((8==b||46==b)&&(d||a.preventDefault(),c&&!d)){if(!c.get("removable"))return;c.set("status",""),c.destroy(),this.hideBadge(),this.clean(),this.hideHighlighter(),this.editorModel.set("selectedComponent",null)}},onHover:function(a){a.stopPropagation();var b=a.target;this.adjScroll||(this.adjScroll=1,this.onFrameScroll(a),this.updateAttached());var c=this.getElementPos(b);this.updateBadge(b,c),this.updateHighlighter(b,c),this.showElementOffset(b,c)},onOut:function(a){a.stopPropagation(),this.hideBadge(),this.hideHighlighter(),this.hideElementOffset()},showElementOffset:function(a,b){var c=$(a),d=c.data("model");d&&"selected"==d.get("status")||this.editor.runCommand("show-offset",{el:a,elPos:b})},hideElementOffset:function(a,b){this.editor.stopCommand("show-offset")},showFixedElementOffset:function(a,b){this.editor.runCommand("show-offset",{el:a,elPos:b,state:"Fixed"})},hideFixedElementOffset:function(a,b){this.editor&&this.editor.stopCommand("show-offset",{state:"Fixed"})},hideHighlighter:function(){this.canvas.getHighlighter().style.display="none"},onClick:function(a){var b=$(a.target).data("model");if(b){var c=b.get("stylable");(c instanceof Array||c)&&this.onSelect(a,a.target)}},updateBadge:function(a,b){var c=$(a);this.cacheEl=a;var d=c.data("model");if(d&&d.get("badgable")){var e=this.getBadge();e.innerHTML=d.getName();var f=e.style,g="px";f.display="block";var h=this.canvas.getCanvasView().getPosition(),i=e?e.offsetHeight:0,j=e?e.offsetWidth:0,k=b.top-i"),e=this.codeMirror.clone().set({label:c,codeName:a,theme:b,input:d[0]}),f=new this.cm.EditorView({model:e,config:this.cm.getConfig()}).render().$el;return e.init(d[0]),{el:e,$el:f}},enable:function(){if(!this.$editors){var a=this.buildEditor("htmlmixed","hopscotch","HTML"),b=this.buildEditor("css","hopscotch","CSS");this.htmlEditor=a.el,this.cssEditor=b.el,this.$editors=$("
    ",{"class":this.pfx+"export-dl"}),this.$editors.append(a.$el).append(b.$el)}this.modal&&(this.modal.setTitle("Export template"),this.modal.setContent(this.$editors),this.modal.open());var c=this.protCss||"";this.htmlEditor.setContent(this.em.getHtml()),this.cssEditor.setContent(c+this.cm.getCode(this.wrapper,"css",this.cssc)),this.sender&&this.sender.set("active",!1)},stop:function(){}}}),c("Commands/view/SwitchVisibility",[],function(){return{run:function(a){a.Canvas.getBody().className=this.ppfx+"dashed"},stop:function(a){a.Canvas.getBody().className=""}}}),c("Navigator/config/config",[],function(){return{stylePrefix:"nv-",sortable:1,hidable:1,hideTextnode:1,containerId:"navigator",itemClass:"item",itemsClass:"items"}}),c("text!Navigator/template/item.html",[],function(){return'<% if (hidable) { %>\n\t\n<% } %>\n\n
    \n
    \n \t\n\t\t\n\t\t\n
    \n
    \n\n
    <%= (count ? count : \'\') %>
    \n\n
    \n\t\n
    \n\n
    \n'}),c("Navigator/view/ItemView",["backbone","text!./../template/item.html","require"],function(a,b,c){return a.View.extend({template:_.template(b),initialize:function(a){this.opt=a,this.config=a.config,this.em=a.config.em,this.ppfx=this.em.get("Config").stylePrefix,this.sorter=a.sorter||{},this.pfx=this.config.stylePrefix,"undefined"==typeof this.model.get("open")&&this.model.set("open",!1),this.listenTo(this.model.components,"remove add change reset",this.checkChildren),this.listenTo(this.model,"destroy remove",this.remove),this.listenTo(this.model,"change:status",this.updateStatus),this.listenTo(this.model,"change:open",this.updateOpening),this.className=this.pfx+"item no-select",this.editBtnCls=this.pfx+"nav-item-edit",this.inputNameCls=this.ppfx+"nav-comp-name",this.caretCls=this.ppfx+"nav-item-caret",this.titleCls=this.pfx+"title",this.customNameProp="custom-name",this.events={},this.events["click > #"+this.pfx+"btn-eye"]="toggleVisibility",this.events["click ."+this.caretCls]="toggleOpening",this.events["click ."+this.titleCls]="handleSelect",this.events["click ."+this.editBtnCls]="handleEdit",this.events["blur ."+this.inputNameCls]="handleEditEnd",this.$el.data("model",this.model),this.$el.data("collection",this.model.get("components")),a.config.sortable&&(this.events["mousedown > #"+this.pfx+"move"]="startSort"),this.delegateEvents()},handleEdit:function(a){a.stopPropagation();var b=this.getInputName();b.readOnly=!1,b.focus()},handleEditEnd:function(a){a.stopPropagation();var b=this.getInputName();b.readOnly=!0,this.model.set(this.customNameProp,b.value)},getInputName:function(){return this.inputName||(this.inputName=this.el.querySelector("."+this.inputNameCls)),this.inputName},updateOpening:function(){var a=this.opt.opened||{},b=this.model;b.get("open")?(this.$el.addClass("open"),this.$caret.addClass("fa-chevron-down"),a[b.cid]=b):(this.$el.removeClass("open"),this.$caret.removeClass("fa-chevron-down"),delete a[b.cid])},toggleOpening:function(a){a.stopPropagation(),this.model.components.length&&this.model.set("open",!this.model.get("open"))},handleSelect:function(a){a.stopPropagation();var b=this.em;if(b){var c=b.get("selectedComponent");c&&c.set("status",""),this.model.set("status","selected"),b.set("selectedComponent",this.model)}},startSort:function(a){this.sorter&&this.sorter.startSort(a.target)},freeze:function(){this.$el.addClass(this.pfx+"opac50"),this.model.set("open",0)},unfreeze:function(){this.$el.removeClass(this.pfx+"opac50")},updateStatus:function(a){var b=this.model.get("status"),c=this.pfx+"selected",d=this.$el;switch(b){case"selected":d.addClass(c);break;case"moving":break;default:d.removeClass(c)}},toggleVisibility:function(a){this.$eye||(this.$eye=this.$el.find("> #"+this.pfx+"btn-eye"));var b=_.clone(this.model.get("style")),c=this.pfx+"hide";this.isVisible()?(this.$el.addClass(c),this.$eye.addClass("fa-eye-slash"),b.display="none"):(this.$el.removeClass(c),this.$eye.removeClass("fa-eye-slash"),delete b.display),this.model.set("style",b)},isVisible:function(){var a=this.model.get("style"),b=a.display;if(!b||"none"!=b)return 1},checkChildren:function(){var a=this.countChildren(this.model),b=this.pfx,c="> ."+b+"title-c > ."+b+"title";this.$counter||(this.$counter=this.$el.find("> #"+b+"counter")),a?(this.$el.find(c).removeClass(b+"no-chld"),this.$counter.html(a)):(this.$el.find(c).addClass(b+"no-chld"),this.$counter.empty(),this.model.set("open",0))},countChildren:function(a){var b=0;return a.components.each(function(a){var c=this.opt.isCountable,d=this.config.hideTextnode;c&&!c(a,d)||b++},this),b},render:function(){var a=this.pfx,b=this.isVisible(),d=this.countChildren(this.model);return this.$el.html(this.template({title:this.model.get(this.customNameProp)||this.model.getName(),addClass:d?"":a+"no-chld",editBtnCls:this.editBtnCls,inputNameCls:this.inputNameCls,caretCls:this.caretCls,count:d,visible:b,hidable:this.config.hidable,prefix:a,ppfx:this.ppfx})),"undefined"==typeof ItemsView&&(ItemsView=c("./ItemsView")),this.$components=new ItemsView({collection:this.model.components,config:this.config,sorter:this.sorter,opened:this.opt.opened,parent:this.model}).render().$el,this.$el.find("."+a+"children").html(this.$components),this.$caret=this.$el.find("> ."+a+"title-c > ."+a+"title > #"+a+"caret"),this.model.get("draggable")&&this.config.sortable||this.$el.find("> #"+a+"move").detach(),b||(this.className+=" "+a+"hide"),this.$el.attr("class",_.result(this,"className")),this.updateOpening(),this.updateStatus(),this}})}),c("Navigator/view/ItemsView",["backbone","./ItemView"],function(a,b){return a.View.extend({initialize:function(a){if(this.opt=a,this.config=a.config,this.preview=a.preview,this.ppfx=a.config.pStylePrefix||"",this.pfx=a.config.stylePrefix||"",this.parent=a.parent,this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset resetNavigator",this.render),this.className=this.pfx+"items",this.config.sortable&&!this.opt.sorter){var b=this.pfx,c=this.config.em.get("Utils");this.opt.sorter=new c.Sorter({container:this.el,containerSel:"."+b+"items",itemSel:"."+b+"item",ppfx:this.ppfx,pfx:b,nested:1})}this.sorter=this.opt.sorter||"",this.parent||(this.className+=" "+this.pfx+this.config.containerId),this.$el.data("collection",this.collection)},addTo:function(a){var b=this.collection.indexOf(a);this.addToCollection(a,null,b)},addToCollection:function(a,c,d){var e=c||null,f=b,g=new f({model:a,config:this.config,sorter:this.sorter,isCountable:this.isCountable,opened:this.opt.opened}),h=g.render().el;if(e)e.appendChild(h);else if("undefined"!=typeof d){var i="before";this.$el.children().length==d&&(d--,i="after"),d<0?this.$el.append(h):this.$el.children().eq(d)[i](h)}else this.$el.append(h);return h},isCountable:function(a,b){var c=a.get("type"),d=a.get("tagName");return("textnode"!=c&&"br"!=d||!b)&&!a.get("hiddenLayer")},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.isCountable(b,this.config.hideTextnode)&&this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",_.result(this,"className")),this}})}),c("Navigator/main",["require","./config/config","./view/ItemsView"],function(a){function b(b,c){var d=c,e=a("./config/config"),f=a("./view/ItemsView");for(var g in e)g in d||(d[g]=e[g]);var h={collection:b,config:d,opened:c.opened||{}};this.ItemsView=new f(h)}return b.prototype={render:function(){return this.ItemsView.render().$el}},b}),c("Navigator",["Navigator/main"],function(a){return a}),c("Commands/view/OpenLayers",["Navigator"],function(a){return{run:function(b,c){if(!this.$layers){var d=b.DomComponents.getComponent().get("components"),e=b.getConfig(),f=b.Panels,g=e.layers.stylePrefix||"nv-";e.layers.stylePrefix=e.stylePrefix+g,e.layers.pStylePrefix=e.stylePrefix,e.layers.em=b.editor,e.layers.opened=b.editor.get("opened");var h=new a(d,e.layers);this.$layers=h.render(),f.getPanel("views-container")?this.panel=f.getPanel("views-container"):this.panel=f.addPanel({id:"views-container"}),this.panel.set("appendContent",this.$layers).trigger("change:appendContent")}this.$layers.show()},stop:function(){this.$layers&&this.$layers.hide()}}}),c("Commands/view/OpenStyleManager",["StyleManager"],function(a){return{run:function(a,b){if(this.sender=b,!this.$cn){var c=a.getConfig(),d=a.Panels;this.$cn=$("
    "),this.$cn2=$("
    "),this.$cn.append(this.$cn2);var e=a.DeviceManager;if(e&&c.showDevices){var f=d.addPanel({id:"devices-c"});f.set("appendContent",e.render()).trigger("change:appendContent")}var g=a.SelectorManager;g&&this.$cn2.append(g.render([])),this.$cn2.append(a.StyleManager.render());var h=a.StyleManager.getConfig();this.$header=$("
    ",{"class":h.stylePrefix+"header",text:h.textNoElement}),this.$cn.append(this.$header),d.getPanel("views-container")?this.panel=d.getPanel("views-container"):this.panel=d.addPanel({id:"views-container"}),this.panel.set("appendContent",this.$cn).trigger("change:appendContent"),this.target=a.editor,this.listenTo(this.target,"change:selectedComponent",this.toggleSm)}this.toggleSm()},toggleSm:function(){this.sender.get("active")&&(this.target.get("selectedComponent")?(this.$cn2.show(),this.$header.hide()):(this.$cn2.hide(),this.$header.show()))},stop:function(){this.$cn2&&this.$cn2.hide(),this.$header&&this.$header.hide()}}}),c("Commands/view/OpenTraitManager",[],function(){return{run:function(a,b){var c=a.Config,d=c.stylePrefix,e=a.TraitManager;if(!this.obj){var f=e.getTraitsViewer(),g=e.getConfig();this.obj=$("
    ").append('
    '+g.labelContainer+"
    ").get(0),this.obj.appendChild(f.render().el);var h=a.Panels;h.getPanel("views-container")?panelC=h.getPanel("views-container"):panelC=h.addPanel({id:"views-container"}),panelC.set("appendContent",this.obj).trigger("change:appendContent")}this.obj.style.display="block"},stop:function(){this.obj&&(this.obj.style.display="none")}}}),c("Commands/view/OpenBlocks",[],function(){return{run:function(a,b){var c=a.Config,d=(c.stylePrefix,a.BlockManager);if(!this.blocks){this.blocks=$("
    ").get(0),this.blocks.appendChild(d.render());var e=a.Panels;e.getPanel("views-container")?panelC=e.getPanel("views-container"):panelC=e.addPanel({id:"views-container"}),panelC.set("appendContent",this.blocks).trigger("change:appendContent")}this.blocks.style.display="block"},stop:function(){this.blocks&&(this.blocks.style.display="none")}}}),c("Commands/view/OpenAssets",[],function(){return{run:function(a,b,c){var d=c||{},e=(a.getConfig(),a.Modal),f=a.AssetManager;f.onClick(d.onClick),f.onDblClick(d.onDblClick),f.setTarget(d.target),f.onSelect(d.onSelect),e.setTitle(d.modalTitle||"Select image"),e.setContent(f.render()),e.open()}}}),c("Commands/view/ShowOffset",[],function(){return{getOffsetMethod:function(a){var b=a||"";return"get"+b+"OffsetViewerEl"},run:function(a,b,c){var d=c||{},e=d.state||"",f=a.getConfig();if(f.showOffsets&&(f.showOffsetsSelected||"Fixed"!=e)){var g=a.Canvas,h=d.el||"",i=d.elPos||g.getElementPos(h),j=window.getComputedStyle(h),k=this.ppfx,l=e+"State",m=this.getOffsetMethod(e),n=g[m]();n.style.display="block";var o=this["marginT"+e],p=this["marginB"+e],q=this["marginL"+e],r=this["marginR"+e],s=this["padT"+e],t=this["padB"+e],u=this["padL"+e],v=this["padR"+e];if(!this[l]){var w=e.toLowerCase(),x=w+"margin-v",y=w+"padding-v",z=$("
    ",{"class":k+x}).get(0),A=$("
    ",{"class":k+y}).get(0),B=k+x+"-el",C=k+y+"-el";o=$("
    ",{"class":k+x+"-top "+B}).get(0),p=$("
    ",{"class":k+x+"-bottom "+B}).get(0),q=$("
    ",{"class":k+x+"-left "+B}).get(0),r=$("
    ",{"class":k+x+"-right "+B}).get(0),s=$("
    ",{"class":k+y+"-top "+C}).get(0),t=$("
    ",{"class":k+y+"-bottom "+C}).get(0),u=$("
    ",{"class":k+y+"-left "+C}).get(0),v=$("
    ",{"class":k+y+"-right "+C}).get(0),this["marginT"+e]=o,this["marginB"+e]=p,this["marginL"+e]=q,this["marginR"+e]=r,this["padT"+e]=s,this["padB"+e]=t,this["padL"+e]=u,this["padR"+e]=v,z.appendChild(o),z.appendChild(p),z.appendChild(q),z.appendChild(r),A.appendChild(s),A.appendChild(t),A.appendChild(u),A.appendChild(v),n.appendChild(z),n.appendChild(A),this[l]="1"}var D="px",E=j.marginLeft.replace(D,""),F=parseInt(j.marginTop.replace(D,"")),G=parseInt(j.marginBottom.replace(D,"")),H=o.style,I=p.style,J=q.style,K=r.style,L=s.style,M=t.style,N=u.style,O=v.style,P=parseInt(i.left);H.height=j.marginTop,H.width=j.width,H.top=i.top-j.marginTop.replace(D,"")+D,H.left=P+D,I.height=j.marginBottom,I.width=j.width,I.top=i.top+i.height+D,I.left=P+D;var Q=i.height+F+G+D,R=i.top-F+D;J.height=Q,J.width=j.marginLeft,J.top=R,J.left=P-E+D,K.height=Q,K.width=j.marginRight,K.top=R,K.left=P+i.width+D;var S=parseInt(j.paddingTop.replace(D,""));L.height=j.paddingTop,L.width=j.width,L.top=i.top+D,L.left=P+D;var T=parseInt(j.paddingBottom.replace(D,""));M.height=j.paddingBottom,M.width=j.width,M.top=i.top+i.height-T+D,M.left=P+D;var U=i.height-T-S+D,V=i.top+S+D;N.height=U,N.width=j.paddingLeft,N.top=V,N.left=i.left+D;var W=parseInt(j.paddingRight.replace(D,""));O.height=U,O.width=j.paddingRight,O.top=V,O.left=i.left+i.width-W+D}},stop:function(a,b,c){var d=c||{},e=d.state||"",f=this.getOffsetMethod(e),g=a.Canvas,h=g[f]();h.style.display="none"}}}),c("Commands/view/Fullscreen",[],function(){return{isEnabled:function(){var a=document;return a.fullscreenElement||a.webkitFullscreenElement||a.mozFullScreenElement?1:0},enable:function(a){var b="";return a.requestFullscreen?a.requestFullscreen():a.webkitRequestFullscreen?(b="webkit",a.webkitRequestFullscreen()):a.mozRequestFullScreen?(b="moz",a.mozRequestFullScreen()):a.msRequestFullscreen?a.msRequestFullscreen():console.warn("Fullscreen not supported"),b},disable:function(){var a=document;a.exitFullscreen?a.exitFullscreen():a.webkitExitFullscreen?a.webkitExitFullscreen():a.mozCancelFullScreen?a.mozCancelFullScreen():a.msExitFullscreen&&a.msExitFullscreen()},fsChanged:function(a,b){var c=(document,(a||"")+"fullscreenchange");this.isEnabled()||(this.stop(null,this.sender),document.removeEventListener(c,this.fsChanged))},run:function(a,b){this.sender=b;var c=this.enable(a.getContainer());this.fsChanged=this.fsChanged.bind(this,c), +document.addEventListener(c+"fullscreenchange",this.fsChanged),a&&a.trigger("change:canvasOffset")},stop:function(a,b){b&&b.set&&b.set("active",!1),this.disable(),a&&a.trigger("change:canvasOffset")}}}),c("Commands/view/Preview",[],function(){return{getPanels:function(a){return this.panels||(this.panels=a.Panels.getPanelsEl()),this.panels},tglPointers:function(a,b){var c=a.Canvas.getBody().querySelectorAll("."+this.ppfx+"no-pointer");_.each(c,function(a){a.style.pointerEvents=b?"":"all"})},run:function(a,b){b&&b.set&&b.set("active",!1),a.stopCommand("sw-visibility");var c=this,d=this.getPanels(a),e=a.Canvas.getElement(),f=a.getEl(),g=a.Config.stylePrefix;this.helper||(this.helper=document.createElement("span"),this.helper.className=g+"off-prv fa fa-eye-slash",f.appendChild(this.helper),this.helper.onclick=function(){c.stop(a)}),this.helper.style.display="inline-block",this.tglPointers(a),d.style.display="none";var h=e.style;h.width="100%",h.height="100%",h.top="0",h.left="0",h.padding="0",h.margin="0",a.trigger("change:canvasOffset")},stop:function(a,b){var c=this.getPanels(a);a.runCommand("sw-visibility"),a.getModel().runDefault(),c.style.display="block";var d=a.Canvas.getElement();d.setAttribute("style",""),this.helper&&(this.helper.style.display="none"),a.trigger("change:canvasOffset"),this.tglPointers(a,1)}}}),c("Commands/view/Resize",[],function(){return{run:function(a,b,c){var d=c&&c.el||"",e=a.Canvas,f=this.canvasResizer,g=c.options||{};if(!f){var h=e.getCanvasView();g.ratioDefault=1,g.appendTo=e.getResizerEl(),g.prefix=a.getConfig().stylePrefix,g.posFetcher=h.getElementPos.bind(h),g.mousePosFetcher=e.getMouseRelativePos,this.canvasResizer=a.Utils.Resizer.init(g),f=this.canvasResizer}f.setOptions(g),f.focus(d)},stop:function(){this.canvasResizer&&this.canvasResizer.blur()}}}),c("Commands/main",["require","./config/config","./view/CommandAbstract","./view/SelectComponent","./view/CreateComponent","./view/DeleteComponent","./view/ImageComponent","./view/MoveComponent","./view/TextComponent","./view/InsertCustom","./view/ExportTemplate","./view/SwitchVisibility","./view/OpenLayers","./view/OpenStyleManager","./view/OpenTraitManager","./view/OpenBlocks","./view/OpenAssets","./view/ShowOffset","./view/Fullscreen","./view/Preview","./view/Resize"],function(a){return function(){var b={},c={},d={},e=a("./config/config"),f=a("./view/CommandAbstract"),g=function(a,b){return delete b.initialize,c[a]=f.extend(b),this};return{name:"Commands",init:function(c){b=c||{};for(var f in e)f in b||(b[f]=e[f]);var g=b.pStylePrefix;g&&(b.stylePrefix=g+b.stylePrefix);for(var h in b.defaults){var i=b.defaults[h];i.id&&this.add(i.id,i)}return d["select-comp"]=a("./view/SelectComponent"),d["create-comp"]=a("./view/CreateComponent"),d["delete-comp"]=a("./view/DeleteComponent"),d["image-comp"]=a("./view/ImageComponent"),d["move-comp"]=a("./view/MoveComponent"),d["text-comp"]=a("./view/TextComponent"),d["insert-custom"]=a("./view/InsertCustom"),d["export-template"]=a("./view/ExportTemplate"),d["sw-visibility"]=a("./view/SwitchVisibility"),d["open-layers"]=a("./view/OpenLayers"),d["open-sm"]=a("./view/OpenStyleManager"),d["open-tm"]=a("./view/OpenTraitManager"),d["open-blocks"]=a("./view/OpenBlocks"),d["open-assets"]=a("./view/OpenAssets"),d["show-offset"]=a("./view/ShowOffset"),d.fullscreen=a("./view/Fullscreen"),d.preview=a("./view/Preview"),d.resize=a("./view/Resize"),d["tlb-delete"]={run:function(a){var b=a.getSelected();return b&&b.get("removable")?(b.set("status",""),b.destroy(),a.trigger("component:update",b),void a.editor.set("selectedComponent",null)):void console.warn("The element is not removable")}},d["tlb-clone"]={run:function(a){var b=a.getSelected();if(!b||!b.get("copyable"))return void console.warn("The element is not clonable");var c=b.collection,d=c.indexOf(b);c.add(b.clone(),{at:d+1}),a.trigger("component:update",b)}},d["tlb-move"]={run:function(a){var b=a.getSelected();if(!b||!b.get("draggable"))return void console.warn("The element is not draggable");var c=a.Canvas.getToolbarEl(),d=a.Commands.get("move-comp");d.onEndMoveFromModel=function(){a.editor.runDefault(),a.editor.set("selectedComponent",b),a.trigger("component:update",b)},a.editor.stopDefault(),d.initSorterFromModel(b),b.set("status","selected"),c.style.display="none"}},b.em&&(b.model=b.em.get("Canvas")),this},onLoad:function(){this.loadDefaultCommands()},add:g,get:function(a){var d=c[a];return"function"==typeof d&&(d=new d(b),c[a]=d),d},has:function(a){return!!c[a]},loadDefaultCommands:function(){for(var a in d)this.add(a,d[a]);return this}}}}),c("Commands",["Commands/main"],function(a){return a}),c("BlockManager/config/config",[],function(){return{blocks:[]}}),c("BlockManager/model/Block",["backbone"],function(a){return a.Model.extend({defaults:{label:"",content:"",attributes:{}}})}),c("BlockManager/model/Blocks",["backbone","./Block"],function(a,b){return a.Collection.extend({model:b})}),c("BlockManager/view/BlockView",["backbone"],function(a){return a.View.extend({events:{mousedown:"onDrag"},initialize:function(a,b){_.bindAll(this,"onDrop"),this.config=b||{},this.ppfx=this.config.pStylePrefix||"",this.listenTo(this.model,"destroy",this.remove),this.doc=$(document)},onDrag:function(a){if(this.config.getSorter){this.config.em.refreshCanvas();var b=this.config.getSorter();b.setDragHelper(this.el,a),b.startSort(this.el),b.setDropContent(this.model.get("content")),this.doc.on("mouseup",this.onDrop)}},onDrop:function(){this.doc.off("mouseup",this.onDrop),this.config.getSorter().endMove()},render:function(){var a=this.ppfx+"block";return this.$el.addClass(a),this.el.innerHTML='
    '+this.model.get("label")+"
    ",this}})}),c("BlockManager/view/BlocksView",["backbone","./BlockView"],function(a,b){return a.View.extend({initialize:function(a,b){_.bindAll(this,"getSorter","onDrag","onDrop"),this.config=b||{},this.ppfx=this.config.pStylePrefix||"",this.listenTo(this.collection,"add",this.addTo),this.em=this.config.em,this.tac="test-tac",this.grabbingCls=this.ppfx+"grabbing",this.em&&(this.config.getSorter=this.getSorter,this.canvas=this.em.get("Canvas"))},getSorter:function(){if(this.em){if(!this.sorter){var a=this.em.get("Utils"),b=this.canvas;this.sorter=new a.Sorter({container:b.getBody(),placer:b.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,onStart:this.onDrag,onEndMove:this.onDrop,document:b.getFrameEl().contentDocument,direction:"a",wmargin:1,nested:1,em:this.em,canvasRelative:1})}return this.sorter}},onDrag:function(){this.em.stopDefault()},onDrop:function(a){this.em.runDefault(),a&&a.get&&(a.get("activeOnRender")&&(a.trigger("active"),a.set("activeOnRender",0)),this.em.initChildrenComp(a))},addTo:function(a){this.add(a)},add:function(a,c){var d=c||null,e=new b({model:a,attributes:a.get("attributes")},this.config),f=e.render().el;d?d.appendChild(f):this.$el.append(f)},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.add(b,a)},this),this.$el.append(a),this.$el.addClass(this.ppfx+"blocks-c"),this}})}),c("BlockManager/main",["require","./config/config","./model/Blocks","./view/BlocksView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Blocks"),g=a("./view/BlocksView");return{name:"BlockManager",init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);return b=new f(d.blocks),c=new g({collection:b},d),this},add:function(a,c){var d=c||{};return d.id=a,b.add(d)},get:function(a){return b.get(a)},getAll:function(){return b},render:function(){return c.render().el}}}}),c("BlockManager",["BlockManager/main"],function(a){return a}),c("TraitManager/config/config",[],function(){return{stylePrefix:"trt-",labelContainer:"Component settings"}}),c("TraitManager/view/TraitView",["backbone"],function(a){return a.View.extend({events:{change:"onChange"},initialize:function(a){var b=this.model;this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=b.target,this.className=this.pfx+"trait",this.labelClass=this.ppfx+"label",this.fieldClass=this.ppfx+"field "+this.ppfx+"field-"+b.get("type"),this.inputhClass=this.ppfx+"input-holder",b.off("change:value",this.onValueChange),this.listenTo(b,"change:value",this.onValueChange),this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().value)},getValueForTarget:function(){return this.model.get("value")},onValueChange:function(){var a=this.model,b=this.target,c=a.get("name"),d=this.getValueForTarget();if(a.get("changeProp"))b.set(c,d);else{var e=_.clone(b.get("attributes"));e[c]=d,b.set("attributes",e)}},renderLabel:function(){this.$el.html('
    '+this.getLabel()+"
    ")},getLabel:function(){var a=this.model,b=a.get("label")||a.get("name");return b.charAt(0).toUpperCase()+b.slice(1).replace(/-/g," ")},getInputEl:function(){if(!this.$input){var a=this.model,b=this.target,c=a.get("name"),d={placeholder:a.get("placeholder")||a.get("default"),type:a.get("type")||"text"};if(a.get("changeProp"))d.value=b.get(c);else{var e=b.get("attributes");d.value=a.get("value")||e[c]}a.get("min")&&(d.min=a.get("min")),a.get("max")&&(d.max=a.get("max")),this.$input=$("",d)}return this.$input.get(0)},getModelValue:function(){var a,b=this.model,c=this.target,d=b.get("name");if(b.get("changeProp"))a=c.get(d);else{var e=c.get("attributes");a=b.get("value")||e[d]}return a},renderField:function(){if(!this.$input){this.$el.append(this.tmpl);var a=this.getInputEl();this.$el.find("."+this.inputhClass).prepend(a)}},render:function(){return this.renderLabel(),this.renderField(),this.el.className=this.className,this}})}),c("TraitManager/view/TraitSelectView",["backbone","./TraitView"],function(a,b){return b.extend({initialize:function(a){b.prototype.initialize.apply(this,arguments);var c=this.ppfx;this.tmpl='
    '},getInputEl:function(){if(!this.$input){var a=this.model,b=a.get("options")||[],c="",this.input=c,this.$input=$(this.input);var d=this.target,e=a.get("name"),f=a.get("value");if(a.get("changeProp"))f=f||d.get(e);else{var g=d.get("attributes");f=g[e]}f&&this.$input.val(f)}return this.$input.get(0)}})}),c("TraitManager/view/TraitCheckboxView",["./TraitView"],function(a){return a.extend({initialize:function(b){a.prototype.initialize.apply(this,arguments);var c=this.ppfx+"chk-icon";this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().checked)},getInputEl:function(){var b;this.$input||(b=1);var c=a.prototype.getInputEl.apply(this,arguments);if(b){var d=this.model,e=d.get("name"),f=this.target;if(d.get("changeProp"))c.checked=f.get(e);else{var g=f.get("attributes");c.checked=!!g[e]}}return c}})}),c("TraitManager/view/TraitNumberView",["./TraitView","Abstract/ui/InputNumber"],function(a,b){return a.extend({getValueForTarget:function(){var a=this.model,b=a.get("value"),c=a.get("unit");return b?b+c:""},getInputEl:function(){if(!this.$input){var a=this.getModelValue(),c=new b({contClass:this.ppfx+"field-int",model:this.model,ppfx:this.ppfx});this.input=c.render(),this.$input=this.input.inputEl,this.$unit=this.input.unitEl,this.model.set("value",a),this.$input.val(a)}return this.$input.get(0)},renderField:function(){this.$input||(this.$el.append(this.tmpl),this.getInputEl(),this.$el.find("."+this.inputhClass).prepend(this.input.el))}})}),c("TraitManager/view/TraitColorView",["./TraitView","Abstract/ui/InputColor"],function(a,b){return a.extend({getInputEl:function(){if(!this.$input){var a=this.getModelValue(),c=new b({contClass:this.ppfx+"field-color",model:this.model,ppfx:this.ppfx});this.input=c.render(),this.$input=this.input.colorEl,a=a||"",this.model.set("value",a).trigger("change:value")}return this.$input.get(0)},renderField:function(){this.$input||(this.getInputEl(),this.$el.append(this.input.el))}})}),c("TraitManager/view/TraitsView",["require","Abstract/view/DomainViews","./TraitView","./TraitSelectView","./TraitCheckboxView","./TraitNumberView","./TraitColorView"],function(a){var b=a("Abstract/view/DomainViews"),c=a("./TraitView"),d=a("./TraitSelectView"),e=a("./TraitCheckboxView"),f=a("./TraitNumberView"),g=a("./TraitColorView");return b.extend({itemView:c,itemsView:{text:c,number:f,select:d,checkbox:e,color:g},initialize:function(a){this.config=a.config||{},this.em=a.editor,this.pfx=this.config.stylePrefix||"",this.className=this.pfx+"traits",this.listenTo(this.em,"change:selectedComponent",this.updatedCollection),this.updatedCollection()},updatedCollection:function(){this.el.className=this.className;var a=this.em.get("selectedComponent");a&&(this.collection=a.get("traits"),this.render())}})}),c("TraitManager/main",["require","./config/config","./model/Traits","./view/TraitsView"],function(a){return function(){var b,c={},d=a("./config/config"),e=(a("./model/Traits"),a("./view/TraitsView"));return{TraitsView:e,name:"TraitManager",getConfig:function(){return c},init:function(a){c=a||{};for(var f in d)f in c||(c[f]=d[f]);var g=c.pStylePrefix;return g&&(c.stylePrefix=g+c.stylePrefix),b=new e({collection:[],editor:c.em,config:c}),this},getTraitsViewer:function(){return b},addType:function(a,c){var d=b.itemView;b.itemsView[a]=d.extend(c)},getType:function(a){return b.itemsView[a]}}}}),c("TraitManager",["TraitManager/main"],function(a){return a});var d=["Utils","StorageManager","DeviceManager","Parser","SelectorManager","ModalDialog","CodeManager","Panels","RichTextEditor","StyleManager","AssetManager","CssComposer","DomComponents","Canvas","Commands","BlockManager","TraitManager"];return c("editor/model/Editor",["backbone","backboneUndo","keymaster","Utils","StorageManager","DeviceManager","Parser","SelectorManager","ModalDialog","CodeManager","Panels","RichTextEditor","StyleManager","AssetManager","CssComposer","DomComponents","Canvas","Commands","BlockManager","TraitManager"],function(){return Backbone.Model.extend({defaults:{clipboard:null,designerMode:!1,selectedComponent:null,previousModel:null,changesCount:0,storables:[],toLoad:[],opened:{},device:""},initialize:function(a){this.config=a,this.set("Config",a),a.el&&a.fromElement&&(this.config.components=a.el.innerHTML),d.forEach(function(a){this.loadModule(a)},this),this.get("toLoad").forEach(function(a){a.onLoad()}),this.initUndoManager(),this.on("change:selectedComponent",this.componentSelected,this),this.on("change:changesCount",this.updateBeforeUnload,this)},updateBeforeUnload:function(){var a=this.get("changesCount");this.config.noticeOnUnload&&a?window.onbeforeunload=function(a){return 1}:window.onbeforeunload=null},loadModule:function(a){var c=this.config,d=new b(a)(),e=d.name.charAt(0).toLowerCase()+d.name.slice(1),f=c[e]||c[d.name]||{};f.pStylePrefix=c.pStylePrefix||"";var g=this.get("StorageManager");if(d.storageKey&&d.store&&d.load&&g){f.stm=g;var h=this.get("storables");h.push(d),this.set("storables",h)}return f.em=this,d.init(Object.create(f)),d["private"]||this.set(d.name,d),d.onLoad&&this.get("toLoad").push(d),this},init:function(a){this.set("Editor",a)},listenRules:function(a){this.stopListening(a,"add remove",this.listenRule),this.listenTo(a,"add remove",this.listenRule),a.each(function(a){this.listenRule(a)},this)},listenRule:function(a){this.stopListening(a,"change:style",this.ruleUpdated),this.listenTo(a,"change:style",this.ruleUpdated)},ruleUpdated:function(a,b,c){var d=this.get("changesCount")+1,e=c?c.avoidStore:0;this.set("changesCount",d);var f=this.get("StorageManager");f.isAutosave()&&d"+a+"":""},getCss:function(){var a=this.get("CssComposer"),b=this.get("DomComponents").getComponent(),c=this.config.protectedCss;return c+this.get("CodeManager").getCode(b,"css",a)},getJs:function(){var a=this.get("DomComponents").getWrapper();return this.get("CodeManager").getCode(a,"js").trim()},store:function(a){var b=this.get("StorageManager"),c={};if(b)return this.get("storables").forEach(function(a){var b=a.store(1);for(var d in b)c[d]=b[d]}),b.store(c,a),this.set("changesCount",0),this.trigger("storage:store",c),c},load:function(a){var b=this.getCacheLoad(1);return this.get("storables").forEach(function(a){a.load(b)}),b},getCacheLoad:function(a){var b=a?1:0;if(this.cacheLoad&&!b)return this.cacheLoad;var c=this.get("StorageManager"),d=[];return c?(this.get("storables").forEach(function(a){var b=a.storageKey;b="function"==typeof b?b():b,keys=b instanceof Array?b:[b],keys.forEach(function(a){d.push(a)})}),this.cacheLoad=c.load(d),this.trigger("storage:load",this.cacheLoad),this.cacheLoad):{}},getDeviceModel:function(){var a=this.get("device");return this.get("DeviceManager").get(a)},runDefault:function(){var a=this.get("Commands").get(this.config.defaultCommand);a&&!this.defaultRunning&&(a.stop(this,this),a.run(this,this),this.defaultRunning=1)},stopDefault:function(){var a=this.get("Commands").get(this.config.defaultCommand);a&&(a.stop(this,this),this.defaultRunning=0)},refreshCanvas:function(){this.set("canvasOffset",this.get("Canvas").getOffset())},clearSelection:function(a){var b=a||window;b.getSelection().removeAllRanges()}})}),c("editor/view/EditorView",["backbone"],function(a){return a.View.extend({initialize:function(){this.pn=this.model.get("Panels"),this.conf=this.model.config,this.className=this.conf.stylePrefix+"editor",this.model.on("loaded",function(){this.pn.active(),this.model.runDefault(),this.model.trigger("load")},this)},render:function(){var a=this.model,b=a.get("UndoManager"),c=a.get("DomComponents"),d=a.get("Config");d.loadCompsOnRender&&(d.clearOnRender&&c.clear(),c.getComponents().add(d.components),b.clear(),c.onLoad());var e=this.conf,f=$(e.el||"body "+e.container);return this.$el.empty(),e.width&&f.css("width",e.width),e.height&&f.css("height",e.height),this.$el.append(a.get("Canvas").render()),this.$el.append(this.pn.render()),this.$el.attr("class",this.className),f.addClass(e.stylePrefix+"editor-cont"),f.html(this.$el),this}})}),c("editor/main",["require","./config/config","./model/Editor","./view/EditorView"],function(a){var b=function(b){var c=b||{},d=a("./config/config"),e=a("./model/Editor"),f=a("./view/EditorView");for(var g in d)g in c||(c[g]=d[g]);c.pStylePrefix=c.stylePrefix;var h=new e(c),i=new f({model:h,config:c});return{editor:h,DomComponents:h.get("DomComponents"),CssComposer:h.get("CssComposer"),StorageManager:h.get("StorageManager"),AssetManager:h.get("AssetManager"),BlockManager:h.get("BlockManager"),TraitManager:h.get("TraitManager"),SelectorManager:h.get("SelectorManager"),CodeManager:h.get("CodeManager"),Commands:h.get("Commands"),Modal:h.get("Modal"),Panels:h.get("Panels"),StyleManager:h.get("StyleManager"),Canvas:h.get("Canvas"),UndoManager:h.get("UndoManager"),DeviceManager:h.get("DeviceManager"),RichTextEditor:h.get("rte"),Utils:h.get("Utils"),Config:h.get("Config"),init:function(){return h.init(this),this},getConfig:function(){return c},getHtml:function(){return h.getHtml()},getCss:function(){return h.getCss()},getJs:function(){return h.getJs()},getComponents:function(){return h.get("DomComponents").getComponents()},setComponents:function(a){return h.setComponents(a),this},addComponents:function(a){return this.getComponents().add(a)},getStyle:function(){return h.get("CssComposer").getAll()},setStyle:function(a){return h.setStyle(a),this},getSelected:function(){return h.getSelected()},setDevice:function(a){return h.set("device",a)},getDevice:function(){return h.get("device")},runCommand:function(a,b){var c,d=h.get("Commands").get(a);return d&&(c=d.run(this,this,b),this.trigger("run:"+a)),c},stopCommand:function(a,b){var c,d=h.get("Commands").get(a);return d&&(c=d.stop(this,this,b),this.trigger("stop:"+a)),c},store:function(a){return h.store(a)},load:function(){return h.load()},getContainer:function(){return c.el},refresh:function(){h.refreshCanvas()},setCustomRte:function(a){this.RichTextEditor.customRte=a},on:function(a,b){return h.on(a,b)},trigger:function(a){return h.trigger(a)},getEl:function(){return i.el},getModel:function(){return h},render:function(){return i.render().el}}};return b}),c("PluginManager/config/config",[],function(){return{plugins:[]}}),c("PluginManager/main",["require","./config/config"],function(a){return function(b){var c=b||{},d=a("./config/config");for(var e in d)e in c||(c[e]=d[e]);var f={};return{add:function(a,b){return f[a]?this:(f[a]=b,this)},get:function(a){return f[a]},getAll:function(){return f}}}}),c("PluginManager",["PluginManager/main"],function(a){return a}),c("grapesjs/main",["require","./config/config","editor/main","PluginManager"],function(a){return function(b){var c=a("./config/config"),d=a("editor/main"),e=a("PluginManager"),f=new e,g=[];return{editors:g,plugins:f,init:function(a){var b=a||{},e=b.container;for(var h in c)h in b||(b[h]=c[h]);if(!e)throw new Error("'container' is required");b.el=document.querySelector(e);var i=new d(b).init(),j=f.getAll();for(var k in j)if(!(b.plugins.indexOf(k)<0)){var l=b.pluginsOpts[k]||{},m=f.get(k);m(i,l)}return b.autorender&&i.render(),g.push(i),i}}}()}),b(["src/config/require-config.js"],function(){b(["grapesjs/main"],function(a){return a})}),c("main",function(){}),b("grapesjs/main")}); diff --git a/public/grapejs/dist/js/grapesjs-mjml.min.js b/public/grapejs/dist/js/grapesjs-mjml.min.js new file mode 100644 index 00000000..7dbadd73 --- /dev/null +++ b/public/grapejs/dist/js/grapesjs-mjml.min.js @@ -0,0 +1,108 @@ +/*! grapesjs-mjml - 0.0.7 */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports["grapesjs-mjml"]=e():t["grapesjs-mjml"]=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";grapesjs.plugins.add("gjs-mjml",function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e,o={codeViewerTheme:"hopscotch",importPlaceholder:"",modalTitleImport:"Import MJML",modalBtnImport:"Import",modalLabelImport:"",modalTitleExport:"Export MJML",modalLabelExport:"",overwriteExport:1,preMjml:"",postMjml:"",exportOnly:"",resetBlocks:1,resetDevices:1,resetStyleManager:1,columnsPadding:"10px 0"};for(var i in o)i in r||(r[i]=o[i]);var a=t.getConfig();if(a.forceClass=0,a.devicePreviewMode=1,n(1).default(t,r),n(2).default(t,r),n(684).default(t,r),n(687).default(t,r),n(688).default(t,r),r.resetDevices){var u=t.DeviceManager;u.getAll().reset(),u.add("Desktop",""),u.add("Mobile","320px")}})},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.BlockManager;e.resetBlocks&&n.getAll().reset(),n.add("mj-1-column",{label:"1 Column",content:"\n Content 1\n ",attributes:{class:"gjs-fonts gjs-f-b1","data-type":"mj-section"}}),n.add("mj-2-columns",{label:"2 Columns",content:"\n Content 1\n Content 2\n ",attributes:{class:"gjs-fonts gjs-f-b2","data-type":"mj-section"}}),n.add("mj-3-columns",{label:"3 Columns",content:"\n Content 1\n Content 2\n Content 3\n ",attributes:{class:"gjs-fonts gjs-f-b3","data-type":"mj-section"}}),n.add("mj-text",{label:"Text",content:"Insert text here",attributes:{class:"gjs-fonts gjs-f-text","data-type":"mj-text"}}),n.add("mj-button",{label:"Button",content:"Button",attributes:{class:"gjs-fonts gjs-f-button","data-type":"mj-button"}}),n.add("mj-image",{label:"Image",content:'',attributes:{class:"fa fa-image","data-type":"mj-image"}}),n.add("mj-divider",{label:"Divider",content:"",attributes:{class:"gjs-fonts gjs-f-divider","data-type":"mj-divider"}}),n.add("mj-social",{label:"Social",content:"",attributes:{class:"fa fa-share-alt","data-type":"mj-social"}})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=n(3);e.default=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.DomComponents,a=i.getType("default"),u=i.getType("text"),s=i.getType("image"),c=i.getType("link"),l=a.model,f=a.view,p=u.model,h=u.view,d=s.model,v=s.view,g=c.model,m=c.view,y=n(680),_=document.createElement("div"),b={init:function(){var t=Object.assign({},this.get("attributes")),e=this.get("style");this.defaultStyle=e;for(var n in e)n in t||(t[n]=e[n]);this.set("attributes",t),this.set("style",t),this.listenTo(this,"change:style",this.handleStyleChange)},handleStyleChange:function(){var t=Object.assign({},this.get("attributes"),this.get("style"));this.set("attributes",t)},getMjmlAttributes:function(){var t=this.get("attributes")||{};delete t.style;var e=this.get("src");return e&&(t.src=e),t},getAttrToHTML:function(){var t=Object.assign({},this.get("attributes")||{}),e=Object.assign({},this.defaultStyle||{});delete t.style;for(var n in t)t[n]==e[n]&&delete t[n];return t},toHTML:function(t){var e="",n=this,o=n.get("tagName"),i=n.get("void"),a="",u=this.getAttrToHTML();for(var s in u){var c=u[s];a+=void 0!==("undefined"==typeof c?"undefined":r(c))&&""!==c?" "+s+'="'+c+'"':""}return e+="<"+o+a+(i?"/":"")+">"+n.get("content"),n.get("components").each(function(t){e+=t.toHTML()}),i||(e+=""),e}},w={init:function(){this.stopListening(this.model,"change:style"),this.listenTo(this.model,"change:attributes change:src",this.rerender)},rerender:function(){this.render(null,null,{},1)},getMjmlTemplate:function(){return{start:"",end:""}},getInnerMjmlTemplate:function(){var t=this.model,e=t.get("tagName"),n=t.getMjmlAttributes(),o="";for(var i in n){var a=n[i];o+=void 0!==("undefined"==typeof a?"undefined":r(a))&&""!==a?" "+i+'="'+a+'"':""}return{start:"<"+e+" "+o+">",end:""}},getTemplateFromEl:function(t){return t.firstChild.innerHTML},getTemplateFromMjml:function(){var t=this.getMjmlTemplate(),e=this.getInnerMjmlTemplate(),n=(0,o.mjml2html)(t.start+"\n "+e.start+e.end+t.end),r=n.html;r=r.replace(//,"");var i=r.indexOf("")+6,a=r.indexOf("");return r=r.substring(i,a).trim(),_.innerHTML=r,this.getTemplateFromEl(_)},renderChildren:function(t){var e=this.getChildrenContainer();t?this.componentsView.$parent=$(e):(this.componentsView=new y({collection:this.model.get("components"),config:this.config,defaultTypes:this.opts.defaultTypes,componentTypes:this.opts.componentTypes}),this.childNodes=this.componentsView.render($(e)).el.childNodes);for(var n=Array.prototype.slice.call(this.childNodes),r=0,o=n.length;r",end:""+t.end}},renderStyle:function(){this.el.style.cssText=this.el.getAttribute("style")+this.attributes.style},renderContent:function(){this.getChildrenContainer().innerHTML=this.model.get("content")}}))}),i.addType("mj-section",{model:l.extend(Object.assign({},b,{defaults:Object.assign({},l.prototype.defaults,{"custom-name":"Section",draggable:"[data-type=mj-container]",droppable:"[data-type=mj-column]",style:{"padding-top":"10px","padding-bottom":"10px","vertical-align":"top","text-align":"center"},stylable:["vertical-align","text-align","padding","padding-top","padding-left","padding-right","padding-bottom","background-color","background-url","background-repeat","background-size","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-left-radius","border-bottom-right-radius","border","border-width","border-style","border-color"]})}),{isComponent:function(t){if("MJ-SECTION"==t.tagName)return{type:"mj-section"}}}),view:f.extend(Object.assign({},w,{tagName:"div",attributes:{style:"pointer-events: all;","data-type":"mj-section"},getChildrenSelector:function(){return"tbody > tr > td"},init:function(){w.init.call(this),this.listenTo(this.model.get("components"),"add remove",this.render)}}))});var x=e.columnsPadding;i.addType("mj-column",{model:l.extend(Object.assign({},b,{defaults:Object.assign({},l.prototype.defaults,{"custom-name":"Column",draggable:"[data-type=mj-section]",stylable:["background-color","vertical-align","width","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-left-radius","border-bottom-right-radius","border","border-width","border-style","border-color"]})}),{isComponent:function(t){if("MJ-COLUMN"==t.tagName)return{type:"mj-column"}}}),view:f.extend(Object.assign({},w,{tagName:"div",attributes:{"data-type":"mj-column",style:"pointer-events: all;"+(x?"padding: "+x+";":"")},getTemplateFromMjml:function(){var t=this.getMjmlTemplate(),e=this.getInnerMjmlTemplate(),n=(0,o.mjml2html)(t.start+"\n "+e.start+e.end+t.end),r=n.html,i=[];_.innerHTML=r;var a=Array.from(_.querySelectorAll("style"));a.forEach(function(t){i.push(t.innerHTML)});var u=r.replace(//,""),s=u.indexOf("")+6,c=u.indexOf("");_.innerHTML=u.substring(s,c).trim();for(var l,f=this.getTemplateFromEl(_),p={},h=f.attributes,d=0,v=h.length;d"+e.style+""),this.getChildrenContainer().innerHTML=this.model.get("content"),this.renderChildren(),this.el.style.cssText=this.el.getAttribute("style")+this.attributes.style,this},getMjmlTemplate:function(){var t=this.model.collection.length-1;t=t?t:0;var e=Array(t).fill("").join("");return{start:"",end:e+""}},getTemplateFromEl:function(t){return t.firstChild.querySelector("div")},getChildrenSelector:function(){return"tbody"}}))}),i.addType("mj-text",{model:p.extend(Object.assign({},b,{defaults:Object.assign({},p.prototype.defaults,{"custom-name":"Text",draggable:"[data-type=mj-column]",highlightable:!1,stylable:["height","font-style","font-size","font-weight","font-family","color","line-height","letter-spacing","text-decoration","align","text-transform","padding","padding-top","padding-left","padding-right","padding-bottom","container-background-color"],style:{"padding-top":"10px","padding-bottom":"10px","padding-right":"25px","padding-left":"25px","font-size":"13px","line-height":"22px",align:"left"}})}),{isComponent:function(t){if("MJ-TEXT"==t.tagName)return{type:"mj-text",content:t.innerHTML,components:[]}}}),view:h.extend(Object.assign({},w,{tagName:"tr",attributes:{style:"pointer-events: all; display: table; width: 100%"},getMjmlTemplate:function(){return{start:"",end:""}},getTemplateFromEl:function(t){return t.querySelector("tr").innerHTML},getChildrenSelector:function(){return"div"},renderChildren:function(){w.renderChildren.call(this)},enableEditing:function(){h.prototype.enableEditing.apply(this,arguments),this.getChildrenContainer().style.pointerEvents="all"},disableEditing:function(){h.prototype.disableEditing.apply(this,arguments),this.getChildrenContainer().style.pointerEvents="none"}}))}),i.addType("mj-button",{model:g.extend(Object.assign({},b,{defaults:Object.assign({},g.prototype.defaults,{"custom-name":"Button",draggable:"[data-type=mj-column]",highlightable:!1,stylable:["width","height","background-color","container-background-color","font-style","font-size","font-weight","font-family","color","text-decoration","align","vertical-align","text-transform","padding","padding-top","padding-left","padding-right","padding-bottom","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-left-radius","border-bottom-right-radius","border","border-width","border-style","border-color"],style:{"background-color":"#414141","border-radius":"3px","font-size":"13px","font-weight":"400",color:"#ffffff","vertical-align":"middle","padding-bottom":"10px","padding-right":"25px","padding-left":"25px",align:"center"},traits:["href"]})}),{isComponent:function(t){if("MJ-BUTTON"==t.tagName)return{type:"mj-button"}}}),view:m.extend(Object.assign({},w,{tagName:"tr",attributes:{style:"pointer-events: all; display: table; width: 100%"},getMjmlTemplate:function(){return{start:"",end:""}},getTemplateFromEl:function(t){return t.querySelector("tr").innerHTML},getChildrenSelector:function(){return"a,p"},renderChildren:function(){w.renderChildren.call(this)}}))}),i.addType("mj-image",{model:d.extend(Object.assign({},b,{defaults:Object.assign({},d.prototype.defaults,{"custom-name":"Image",resizable:!1,highlightable:!1,draggable:"[data-type=mj-column]",stylable:["width","height","padding","padding-top","padding-left","padding-right","padding-bottom","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-left-radius","border-bottom-right-radius","border","border-width","border-style","border-color","container-background-color","align"],style:{"padding-top":"10px","padding-bottom":"10px","padding-right":"25px","padding-left":"25px",align:"center"},traits:["href","rel","alt","title"],void:!0})}),{isComponent:function(t){if("MJ-IMAGE"==t.tagName)return{type:"mj-image"}}}),view:v.extend(Object.assign({},w,{tagName:"tr",attributes:{style:"pointer-events: all; display: table; width: 100%; user-select: none;"},getMjmlTemplate:function(){return{start:"",end:""}},getTemplateFromEl:function(t){return t.querySelector("tr").innerHTML},getChildrenSelector:function(){return"img"}}))}),i.addType("mj-social",{model:l.extend(Object.assign({},b,{defaults:Object.assign({},l.prototype.defaults,{"custom-name":"Social",draggable:"[data-type=mj-column]",droppable:!1,stylable:["text-decoration","align","font-family","font-size","line-height","padding","padding-top","padding-left","padding-right","padding-bottom","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-left-radius","border-bottom-right-radius","container-background-color","color","facebook-icon-color","twitter-icon-color","google-icon-color","instagram-icon-color","linkedin-icon-color","pinterest-icon-color"],style:{align:"center","icon-size":"20px","font-size":"13px","line-height":"22px","facebook-icon-color":"#3b5998","twitter-icon-color":"#55acee","google-icon-color":"#dc4e41","instagram-icon-color":"#3f729b","linkedin-icon-color":"#0077b5","pinterest-icon-color":"#bd081c",display:"facebook twitter google"},traits:["display",{name:"facebook-content",value:"Share"},{name:"facebook-href",value:"[[SHORT_PERMALINK]]"},{name:"twitter-content",value:"Tweet"},{name:"twitter-href",value:"[[SHORT_PERMALINK]]"},{name:"google-content",value:"+1"},{name:"google-href",value:"[[SHORT_PERMALINK]]"},{name:"instagram-content",value:"Share"},{name:"instagram-href",value:"[[SHORT_PERMALINK]]"},{name:"linkedin-content",value:"Share"},{name:"linkedin-href",value:"[[SHORT_PERMALINK]]"},{name:"pinterest-content",value:"Pin it"},{name:"pinterest-href",value:"[[SHORT_PERMALINK]]"},{type:"select",label:"Mode",name:"mode",options:[{value:"horizontal",name:"Horizontal"},{value:"vertical",name:"Vertical"}]}],void:!0})}),{isComponent:function(t){if("MJ-SOCIAL"==t.tagName)return{type:"mj-social"}}}),view:f.extend(Object.assign({},w,{tagName:"tr",attributes:{style:"pointer-events: all; display: table; width: 100%"},getMjmlTemplate:function(){return{start:"",end:""}},getTemplateFromEl:function(t){return t.querySelector("tr").innerHTML},render:function(){this.renderAttributes(),this.el.innerHTML=this.getTemplateFromMjml();var t=this.model.get("content").trim();return t&&(this.getChildrenContainer().innerHTML=t),this.renderChildren(),this.el.style.cssText=this.attributes.style,this},getChildrenSelector:function(){return"img"}}))}),i.addType("mj-divider",{model:l.extend(Object.assign({},b,{defaults:Object.assign({},l.prototype.defaults,{"custom-name":"Divider",draggable:"[data-type=mj-column]",droppable:!1,style:{width:"100%","border-width":"4px","border-style":"solid","border-color":"#000000","padding-top":"10px","padding-bottom":"10px","padding-right":"25px","padding-left":"25px"},stylable:["padding","padding-top","padding-left","padding-right","padding-bottom","width","container-background-color","border-detached","border-width","border-style","border-color"]})}),{isComponent:function(t){if("MJ-DIVIDER"==t.tagName)return{type:"mj-divider"}}}),view:f.extend(Object.assign({},w,{tagName:"tr",attributes:{style:"pointer-events: all; display: table; width: 100%; user-select: none;"},getMjmlTemplate:function(){return{start:"",end:""}},getTemplateFromEl:function(t){return t.querySelector("tr").innerHTML},getChildrenSelector:function(){return"p"}}))})}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(4);Object.keys(o).forEach(function(t){"default"!==t&&"__esModule"!==t&&Object.defineProperty(e,t,{enumerable:!0,get:function(){return o[t]}})});var i=n(273),a=r(i),u=n(580),s=r(u),c=n(581),l=r(c),f=n(587),p=r(f),h=n(588),d=r(h),v=n(589),g=r(v),m=n(590),y=r(m),_=n(591),b=r(_),w=n(595),x=r(w),E=n(596),k=r(E),j=n(598),O=r(j),S=n(603),T=r(S),C=n(611),A=r(C),N=n(614),D=r(N),M=n(626),I=r(M),R=n(669),P=r(R),L=n(628),B=r(L),q=n(670),U=r(q),V=n(673),F=r(V),z=n(616),H=r(z),W=n(597),K=r(W),$=n(674),G=r($),J=n(675),Y=r(J),X=n(677),Q=r(X),Z=n(678),tt=r(Z),et=n(679),nt=r(et),rt=O.default.Accordion,ot=O.default.AccordionElement,it=O.default.AccordionTitle,at=O.default.AccordionText,ut=A.default.Hero,st=A.default.HeroContent,ct=D.default.Invoice,lt=D.default.InvoiceItem,ft=T.default.Carousel,pt=T.default.CarouselImage,ht=I.default.Navbar,dt=I.default.InlineLinks,vt=I.default.Link;[rt,ot,it,at,s.default,ft,pt,l.default,p.default,d.default,g.default,ut,st,y.default,b.default,dt,ct,lt,vt,x.default,k.default,ht,P.default,B.default,U.default,F.default,H.default,K.default,G.default].map(o.registerMJElement),(0,a.default)([Y.default,Q.default,tt.default,nt.default],function(t){return(0,o.registerMJHeadElement)(t)})},function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.mjml2html=e.MJMLValidator=e.version=e.mjIncludeRegexp=e.documentParser=e.rulesCollection=e.registerMJRule=e.formatValidationError=e.MJMLHeadElements=e.registerMJHeadElement=e.helpers=e.elements=e.registerMJElement=e.MJMLRenderer=e.MJMLElement=void 0;var i=n(5);Object.defineProperty(e,"mjIncludeRegexp",{enumerable:!0,get:function(){return i.includes}});var a=n(9),u=o(a),s=n(199),c=o(s),l=n(113),f=o(l),p=n(221),h=o(p),d=n(570),v=r(d),g=n(573),m=o(g);e.MJMLElement=m.default,e.MJMLRenderer=u.default,e.registerMJElement=l.registerMJElement,e.elements=f.default,e.helpers=v,e.registerMJHeadElement=p.registerMJHeadElement,e.MJMLHeadElements=h.default,e.formatValidationError=s.formatValidationError,e.registerMJRule=s.registerMJRule,e.rulesCollection=s.rulesCollection;e.documentParser=function t(e,r){var t=n(220).default;return t(e,r)},e.version=function(){return"3.3.2"},e.MJMLValidator=c.default,e.mjml2html=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new u.default(t,e).render()}},function(t,e,n){(function(t){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.includes=void 0;var o=n(7),i=r(o),a=n(8),u=r(a),s=e.includes=/|>\s*<\/mj-include>)/g,c=function(t){return(/]*>([\s\S]*?)<\/mj-container>/.exec(t)||[])[1]},l=function(t){return(/]*>([\s\S]*?)<\/mj-head>/.exec(t)||[])[1]},f=function(t){return t.trim().match(/.mjml/)&&t||t+".mjml"},p=function(t){var e={content:c(t),head:l(t)};return e.content||e.head||(e.content=t),e},h=function t(e,n,r,o){var a=u.default.normalize(u.default.join(e,f(o))),c=void 0;try{c=i.default.readFileSync(a,"utf8")}catch(t){return""}var l=p(c),h=l.content,d=l.head;if(!h&&!d)throw new Error("Error while reading file: "+a+", file has no content ?");if(d){var v=n.length;d=d.replace(s,t.bind(void 0,u.default.resolve(u.default.dirname(a)),n)),n.splice(v-1,0,d)}return h&&(h=h.replace(s,t.bind(void 0,u.default.resolve(u.default.dirname(a)),n))),h||""};e.default=function(e,n){var r=n.filePath,o=[],i=e,a=r?u.default.dirname(r):t.cwd();return i=i.replace(s,h.bind(void 0,u.default.resolve(a),o)),o.length>0&&(i.indexOf("")==-1&&(i=i.replace("","\n \n \n")),i=i.replace("",o.join("\n")+"\n")),i}}).call(e,n(6))},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(t){if(l===setTimeout)return setTimeout(t,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function i(t){if(f===clearTimeout)return clearTimeout(t);if((f===r||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(t);try{return f(t)}catch(e){try{return f.call(null,t)}catch(e){return f.call(this,t)}}}function a(){v&&h&&(v=!1,h.length?d=h.concat(d):g=-1,d.length&&u())}function u(){if(!v){var t=o(a);v=!0;for(var e=d.length;e;){for(h=d,d=[];++g1)for(var n=1;n=0;r--){var o=t[r];"."===o?t.splice(r,1):".."===o?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!o;i--){var a=i>=0?arguments[i]:t.cwd();if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,o="/"===a.charAt(0))}return e=n(r(e.split("/"),function(t){return!!t}),!o).join("/"),(o?"/":"")+e||"."},e.normalize=function(t){var o=e.isAbsolute(t),i="/"===a(t,-1);return t=n(r(t.split("/"),function(t){return!!t}),!o).join("/"),t||o||(t="."),t&&i&&(t+="/"),(o?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(r(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0&&""===t[n];n--);return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var o=r(t.split("/")),i=r(n.split("/")),a=Math.min(o.length,i.length),u=a,s=0;s","<=","=>","{%","%}","{{{","}}}"],X=Math.floor(1099511627776*Math.random()).toString(16),Q="__MJML__"+X+"__",Z=function t(e){e.children&&e.children&&(0,g.default)(e.children,t),e.content&&(e.content=tt(e.content))},tt=function(t){return Y.reduce(function(t,e,n){return t.replace(new RegExp(e,"g"),""+Q+n)},t)},et=function(t){return Y.reduce(function(t,e,n){return t.replace(new RegExp(""+Q+n,"g"),e)},t)},nt=function(t){return(0,y.default)(t.children,["tagName","mj-body"])},rt=function(t){return(0,y.default)(t.children,["tagName","mj-head"])},ot=function(t){var e=n(463),r=e.minify;return r(t,{collapseWhitespace:!0,removeEmptyAttributes:!0,minifyCSS:!0})},it=function(t){return(0,R.html)(t,{indent_size:2,wrap_attributes_indent_size:2})},at=function(t,e){if(!e||0==e.length)return t;var r=n(464);return r(t,{extraCss:e.join("\n"),removeStyleTags:!1,applyStyleTags:!1,insertPreservedExtraCss:!1})},ut=function(){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};o(this,t),(0,z.default)()||(0,p.default)(),this.attributes={container:(0,k.default)(),defaultAttributes:{},cssClasses:{},css:[],inlineCSS:[],fonts:(0,l.default)(O.default)},this.content=e,this.options=(0,x.default)(n,{level:"soft",disableMjStyle:!1,disableMjInclude:!1,disableMinify:!1}),"string"==typeof this.content&&this.parseDocument()}return i(t,[{key:"parseDocument",value:function(){this.options.disableMjInclude||(this.content=(0,I.default)(this.content,this.options)),this.content=(0,b.default)(this.content)}},{key:"validate",value:function(t){if("skip"==this.options.level)return void(this.errors=[]);if(this.errors=(0,L.default)(t),"strict"==this.options.level&&this.errors.length>0)throw new a.MJMLValidationError(this.errors)}},{key:"render",value:function(){var t=this;if(!this.content||!nt(this.content))throw new a.EmptyMJMLError(".render: No MJML to render in options "+this.options.toString());Z(this.content);var e=nt(this.content),n=rt(this.content);n&&n.children.length>0&&(0,g.default)(n.children,function(e){var n=e.tagName,r=V.default[n];r?r(e,t.attributes):(0,J.default)(!1,"No handler found for: "+n+", in mj-head, skipping it")});var r=e.children[0];this.validate(r);var o=q.default[r.tagName];if(!o)return{errors:this.errors};var i=W.default.createElement(o,{mjml:(0,s.parseInstance)(r,this.attributes)}),u=$.default.renderToStaticMarkup(i),c=this.attributes.container.replace("__content__",u||"").replace("__title__",this.attributes.title||"");return{errors:this.errors,html:this.postRender(c)}}},{key:"postRender",value:function(t){var e=this.attributes.inlineCSS,n=T.default.parseHTML(t);return(0,D.default)({$:n,fonts:this.attributes.fonts}),n=(0,u.fixLegacyAttrs)(n),n=(0,u.insertHeadCSS)(n,this.attributes.css),B.postRenders.forEach(function(t){"function"==typeof t&&(n=t(n))}),[this.options.disableMjStyle?void 0:(0,d.default)(at)(e),this.options.beautify?it:void 0,!this.options.disableMinify&&this.options.minify?ot:void 0,A.default.decode,et].filter(function(t){return"function"==typeof t}).reduce(function(t,e){return e(t)},T.default.getHTML(n))}}]),t}();e.default=ut},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n'+e.join("")+""),t):t},e.fixLegacyAttrs=function(t){var e=["align","valign","bgcolor","border","background"];return e.forEach(function(e){var n="data-legacy-"+e;t("["+n+"]").each(function(){t(this).attr(e,t(this).attr(n)),t(this).removeAttr(n)})}),t}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e>>0;if(""+n!==e||4294967295===n)return NaN;e=n}return e<0?d(t)+e:e}function g(){return!0}function m(t,e,n){return(0===t||void 0!==n&&t<=-n)&&(void 0===e||void 0!==n&&e>=n)}function y(t,e){return b(t,e,0)}function _(t,e){return b(t,e,e)}function b(t,e,n){return void 0===t?n:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}function w(t){this.next=t}function x(t,e,n,r){var o=0===t?e:1===t?n:[e,n];return r?r.value=o:r={value:o,done:!1},r}function E(){return{value:void 0,done:!0}}function k(t){return!!S(t)}function j(t){return t&&"function"==typeof t.next}function O(t){var e=S(t);return e&&e.call(t)}function S(t){var e=t&&(En&&t[En]||t[kn]);if("function"==typeof e)return e}function T(t){return t&&"number"==typeof t.length}function C(t){return null===t||void 0===t?B():i(t)?t.toSeq():V(t)}function A(t){return null===t||void 0===t?B().toKeyedSeq():i(t)?a(t)?t.toSeq():t.fromEntrySeq():q(t)}function N(t){return null===t||void 0===t?B():i(t)?a(t)?t.entrySeq():t.toIndexedSeq():U(t)}function D(t){return(null===t||void 0===t?B():i(t)?a(t)?t.entrySeq():t:U(t)).toSetSeq()}function M(t){this._array=t,this.size=t.length}function I(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function R(t){this._iterable=t,this.size=t.length||t.size}function P(t){this._iterator=t,this._iteratorCache=[]}function L(t){return!(!t||!t[On])}function B(){return Sn||(Sn=new M([]))}function q(t){var e=Array.isArray(t)?new M(t).fromEntrySeq():j(t)?new P(t).fromEntrySeq():k(t)?new R(t).fromEntrySeq():"object"==typeof t?new I(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function U(t){var e=F(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function V(t){var e=F(t)||"object"==typeof t&&new I(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}function F(t){return T(t)?new M(t):j(t)?new P(t):k(t)?new R(t):void 0}function z(t,e,n,r){var o=t._cache;if(o){for(var i=o.length-1,a=0;a<=i;a++){var u=o[n?i-a:a];if(e(u[1],r?u[0]:a,t)===!1)return a+1}return a}return t.__iterateUncached(e,n)}function H(t,e,n,r){var o=t._cache;if(o){var i=o.length-1,a=0;return new w(function(){var t=o[n?i-a:a];return a++>i?E():x(e,r?t[0]:a-1,t[1])})}return t.__iteratorUncached(e,n)}function W(t,e){return e?K(e,t,"",{"":t}):$(t)}function K(t,e,n,r){return Array.isArray(e)?t.call(r,n,N(e).map(function(n,r){return K(t,n,r,e)})):G(e)?t.call(r,n,A(e).map(function(n,r){return K(t,n,r,e)})):e}function $(t){return Array.isArray(t)?N(t).map($).toList():G(t)?A(t).map($).toMap():t}function G(t){return t&&(t.constructor===Object||void 0===t.constructor)}function J(t,e){if(t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if(t=t.valueOf(),e=e.valueOf(),t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1}return!("function"!=typeof t.equals||"function"!=typeof e.equals||!t.equals(e))}function Y(t,e){if(t===e)return!0;if(!i(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||a(t)!==a(e)||u(t)!==u(e)||c(t)!==c(e))return!1;if(0===t.size&&0===e.size)return!0;var n=!s(t);if(c(t)){var r=t.entries();return e.every(function(t,e){var o=r.next().value;return o&&J(o[1],t)&&(n||J(o[0],e))})&&r.next().done}var o=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{o=!0;var l=t;t=e,e=l}var f=!0,p=e.__iterate(function(e,r){if(n?!t.has(e):o?!J(e,t.get(r,mn)):!J(t.get(r,mn),e))return f=!1,!1});return f&&t.size===p}function X(t,e){if(!(this instanceof X))return new X(t,e);if(this._value=t,this.size=void 0===e?1/0:Math.max(0,e),0===this.size){if(Tn)return Tn;Tn=this}}function Q(t,e){if(!t)throw new Error(e)}function Z(t,e,n){if(!(this instanceof Z))return new Z(t,e,n);if(Q(0!==n,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),n=void 0===n?1:Math.abs(n),e>>1&1073741824|3221225471&t}function it(t){if(t===!1||null===t||void 0===t)return 0;if("function"==typeof t.valueOf&&(t=t.valueOf(),t===!1||null===t||void 0===t))return 0;if(t===!0)return 1;var e=typeof t;if("number"===e){if(t!==t||t===1/0)return 0;var n=0|t;for(n!==t&&(n^=4294967295*t);t>4294967295;)t/=4294967295,n^=t;return ot(n)}if("string"===e)return t.length>Ln?at(t):ut(t);if("function"==typeof t.hashCode)return t.hashCode();if("object"===e)return st(t);if("function"==typeof t.toString)return ut(t.toString());throw new Error("Value type "+e+" cannot be hashed.")}function at(t){var e=Un[t];return void 0===e&&(e=ut(t),qn===Bn&&(qn=0,Un={}),qn++,Un[t]=e),e}function ut(t){for(var e=0,n=0;n0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}function lt(t){Q(t!==1/0,"Cannot perform this action with an infinite size.")}function ft(t){return null===t||void 0===t?xt():pt(t)&&!c(t)?t:xt().withMutations(function(e){var r=n(t);lt(r.size),r.forEach(function(t,n){return e.set(n,t)})})}function pt(t){return!(!t||!t[Vn])}function ht(t,e){this.ownerID=t,this.entries=e}function dt(t,e,n){this.ownerID=t,this.bitmap=e,this.nodes=n}function vt(t,e,n){this.ownerID=t,this.count=e,this.nodes=n}function gt(t,e,n){this.ownerID=t,this.keyHash=e,this.entries=n}function mt(t,e,n){this.ownerID=t,this.keyHash=e,this.entry=n}function yt(t,e,n){this._type=e,this._reverse=n,this._stack=t._root&&bt(t._root)}function _t(t,e){return x(t,e[0],e[1])}function bt(t,e){return{node:t,index:0,__prev:e}}function wt(t,e,n,r){var o=Object.create(Fn);return o.size=t,o._root=e,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function xt(){return zn||(zn=wt(0))}function Et(t,e,n){var r,o;if(t._root){var i=l(yn),a=l(_n);if(r=kt(t._root,t.__ownerID,0,void 0,e,n,i,a),!a.value)return t;o=t.size+(i.value?n===mn?-1:1:0)}else{if(n===mn)return t;o=1,r=new ht(t.__ownerID,[[e,n]])}return t.__ownerID?(t.size=o,t._root=r,t.__hash=void 0,t.__altered=!0,t):r?wt(o,r):xt()}function kt(t,e,n,r,o,i,a,u){return t?t.update(e,n,r,o,i,a,u):i===mn?t:(f(u),f(a),new mt(e,r,[o,i]))}function jt(t){return t.constructor===mt||t.constructor===gt}function Ot(t,e,n,r,o){if(t.keyHash===r)return new gt(e,r,[t.entry,o]);var i,a=(0===n?t.keyHash:t.keyHash>>>n)&gn,u=(0===n?r:r>>>n)&gn,s=a===u?[Ot(t,e,n+dn,r,o)]:(i=new mt(e,r,o),a>>=1)a[u]=1&n?e[i++]:void 0;return a[r]=o,new vt(t,i+1,a)}function At(t,e,r){for(var o=[],a=0;a>1&1431655765,t=(858993459&t)+(t>>2&858993459),t=t+(t>>4)&252645135,t+=t>>8,t+=t>>16,127&t}function Pt(t,e,n,r){var o=r?t:h(t);return o[e]=n,o}function Lt(t,e,n,r){var o=t.length+1;if(r&&e+1===o)return t[e]=n,t;for(var i=new Array(o),a=0,u=0;u0&&oi?0:i-n,c=a-n;return c>vn&&(c=vn),function(){if(o===c)return Yn;var t=e?--c:o++;return r&&r[t]}}function o(t,r,o){var u,s=t&&t.array,c=o>i?0:i-o>>r,l=(a-o>>r)+1;return l>vn&&(l=vn),function(){for(;;){if(u){var t=u();if(t!==Yn)return t;u=null}if(c===l)return Yn;var i=e?--l:c++;u=n(s&&s[i],r-dn,o+(i<=t.size||e<0)return t.withMutations(function(t){e<0?Jt(t,e).set(0,n):Jt(t,0,e+1).set(e,n)});e+=t._origin;var r=t._tail,o=t._root,i=l(_n);return e>=Xt(t._capacity)?r=Kt(r,t.__ownerID,0,e,n,i):o=Kt(o,t.__ownerID,t._level,e,n,i),i.value?t.__ownerID?(t._root=o,t._tail=r,t.__hash=void 0,t.__altered=!0,t):zt(t._origin,t._capacity,t._level,o,r):t}function Kt(t,e,n,r,o,i){var a=r>>>n&gn,u=t&&a0){var c=t&&t.array[a],l=Kt(c,e,n-dn,r,o,i);return l===c?t:(s=$t(t,e),s.array[a]=l,s)}return u&&t.array[a]===o?t:(f(i),s=$t(t,e),void 0===o&&a===s.array.length-1?s.array.pop():s.array[a]=o,s)}function $t(t,e){return e&&t&&e===t.ownerID?t:new Vt(t?t.array.slice():[],e)}function Gt(t,e){if(e>=Xt(t._capacity))return t._tail;if(e<1<0;)n=n.array[e>>>r&gn],r-=dn;return n}}function Jt(t,e,n){void 0!==e&&(e|=0),void 0!==n&&(n|=0);var r=t.__ownerID||new p,o=t._origin,i=t._capacity,a=o+e,u=void 0===n?i:n<0?i+n:o+n;if(a===o&&u===i)return t;if(a>=u)return t.clear();for(var s=t._level,c=t._root,l=0;a+l<0;)c=new Vt(c&&c.array.length?[void 0,c]:[],r),s+=dn,l+=1<=1<f?new Vt([],r):d;if(d&&h>f&&adn;m-=dn){var y=f>>>m&gn;g=g.array[y]=$t(g.array[y],r)}g.array[f>>>dn&gn]=d}if(u=h)a-=h,u-=h,s=dn,c=null,v=v&&v.removeBefore(r,0,a);else if(a>o||h>>s&gn;if(_!==h>>>s&gn)break;_&&(l+=(1<o&&(c=c.removeBefore(r,s,a-l)),c&&ha&&(a=c.size),i(s)||(c=c.map(function(t){return W(t)})),o.push(c)}return a>t.size&&(t=t.setSize(a)),Mt(t,e,o)}function Xt(t){return t>>dn<=vn&&a.size>=2*i.size?(o=a.filter(function(t,e){return void 0!==t&&u!==e}),r=o.toKeyedSeq().map(function(t){return t[0]}).flip().toMap(),t.__ownerID&&(r.__ownerID=o.__ownerID=t.__ownerID)):(r=i.remove(e),o=u===a.size-1?a.pop():a.set(u,void 0))}else if(s){if(n===a.get(u)[1])return t;r=i,o=a.set(u,[e,n])}else r=i.set(e,a.size),o=a.set(a.size,[e,n]);return t.__ownerID?(t.size=r.size,t._map=r,t._list=o,t.__hash=void 0,t):te(r,o)}function re(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function oe(t){this._iter=t,this.size=t.size}function ie(t){this._iter=t,this.size=t.size}function ae(t){this._iter=t,this.size=t.size}function ue(t){var e=Te(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=Ce,e.__iterateUncached=function(e,n){var r=this;return t.__iterate(function(t,n){return e(n,t,r)!==!1},n)},e.__iteratorUncached=function(e,n){if(e===xn){var r=t.__iterator(e,n);return new w(function(){var t=r.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t})}return t.__iterator(e===wn?bn:wn,n)},e}function se(t,e,n){var r=Te(t);return r.size=t.size,r.has=function(e){return t.has(e)},r.get=function(r,o){var i=t.get(r,mn);return i===mn?o:e.call(n,i,r,t)},r.__iterateUncached=function(r,o){var i=this;return t.__iterate(function(t,o,a){return r(e.call(n,t,o,a),o,i)!==!1},o)},r.__iteratorUncached=function(r,o){var i=t.__iterator(xn,o);return new w(function(){var o=i.next();if(o.done)return o;var a=o.value,u=a[0];return x(r,u,e.call(n,a[1],u,t),o)})},r}function ce(t,e){var n=Te(t);return n._iter=t,n.size=t.size,n.reverse=function(){return t},t.flip&&(n.flip=function(){var e=ue(t);return e.reverse=function(){return t.flip()},e}),n.get=function(n,r){return t.get(e?n:-1-n,r)},n.has=function(n){return t.has(e?n:-1-n)},n.includes=function(e){return t.includes(e)},n.cacheResult=Ce,n.__iterate=function(e,n){var r=this;return t.__iterate(function(t,n){return e(t,n,r)},!n)},n.__iterator=function(e,n){return t.__iterator(e,!n)},n}function le(t,e,n,r){var o=Te(t);return r&&(o.has=function(r){var o=t.get(r,mn);return o!==mn&&!!e.call(n,o,r,t)},o.get=function(r,o){var i=t.get(r,mn);return i!==mn&&e.call(n,i,r,t)?i:o}),o.__iterateUncached=function(o,i){var a=this,u=0;return t.__iterate(function(t,i,s){if(e.call(n,t,i,s))return u++,o(t,r?i:u-1,a)},i),u},o.__iteratorUncached=function(o,i){var a=t.__iterator(xn,i),u=0;return new w(function(){for(;;){var i=a.next();if(i.done)return i;var s=i.value,c=s[0],l=s[1];if(e.call(n,l,c,t))return x(o,r?c:u++,l,i)}})},o}function fe(t,e,n){var r=ft().asMutable();return t.__iterate(function(o,i){r.update(e.call(n,o,i,t),0,function(t){return t+1})}),r.asImmutable()}function pe(t,e,n){var r=a(t),o=(c(t)?Qt():ft()).asMutable();t.__iterate(function(i,a){o.update(e.call(n,i,a,t),function(t){return t=t||[],t.push(r?[a,i]:i),t})});var i=Se(t);return o.map(function(e){return ke(t,i(e))})}function he(t,e,n,r){var o=t.size;if(void 0!==e&&(e|=0),void 0!==n&&(n===1/0?n=o:n|=0),m(e,n,o))return t;var i=y(e,o),a=_(n,o);if(i!==i||a!==a)return he(t.toSeq().cacheResult(),e,n,r);var u,s=a-i;s===s&&(u=s<0?0:s);var c=Te(t);return c.size=0===u?u:t.size&&u||void 0,!r&&L(t)&&u>=0&&(c.get=function(e,n){return e=v(this,e),e>=0&&eu)return E();var t=o.next();return r||e===wn?t:e===bn?x(e,s-1,void 0,t):x(e,s-1,t.value[1],t)})},c}function de(t,e,n){var r=Te(t);return r.__iterateUncached=function(r,o){var i=this;if(o)return this.cacheResult().__iterate(r,o);var a=0;return t.__iterate(function(t,o,u){return e.call(n,t,o,u)&&++a&&r(t,o,i)}),a},r.__iteratorUncached=function(r,o){var i=this;if(o)return this.cacheResult().__iterator(r,o);var a=t.__iterator(xn,o),u=!0;return new w(function(){if(!u)return E();var t=a.next();if(t.done)return t;var o=t.value,s=o[0],c=o[1];return e.call(n,c,s,i)?r===xn?t:x(r,s,c,t):(u=!1,E())})},r}function ve(t,e,n,r){var o=Te(t);return o.__iterateUncached=function(o,i){var a=this;if(i)return this.cacheResult().__iterate(o,i);var u=!0,s=0;return t.__iterate(function(t,i,c){if(!u||!(u=e.call(n,t,i,c)))return s++,o(t,r?i:s-1,a)}),s},o.__iteratorUncached=function(o,i){var a=this;if(i)return this.cacheResult().__iterator(o,i);var u=t.__iterator(xn,i),s=!0,c=0;return new w(function(){var t,i,l;do{if(t=u.next(),t.done)return r||o===wn?t:o===bn?x(o,c++,void 0,t):x(o,c++,t.value[1],t);var f=t.value;i=f[0],l=f[1],s&&(s=e.call(n,l,i,a))}while(s);return o===xn?t:x(o,i,l,t)})},o}function ge(t,e){var r=a(t),o=[t].concat(e).map(function(t){return i(t)?r&&(t=n(t)):t=r?q(t):U(Array.isArray(t)?t:[t]),t}).filter(function(t){return 0!==t.size});if(0===o.length)return t;if(1===o.length){var s=o[0];if(s===t||r&&a(s)||u(t)&&u(s))return s}var c=new M(o);return r?c=c.toKeyedSeq():u(t)||(c=c.toSetSeq()),c=c.flatten(!0),c.size=o.reduce(function(t,e){if(void 0!==t){var n=e.size;if(void 0!==n)return t+n}},0),c}function me(t,e,n){var r=Te(t);return r.__iterateUncached=function(r,o){function a(t,c){var l=this;t.__iterate(function(t,o){return(!e||c0}function Ee(t,n,r){var o=Te(t);return o.size=new M(r).map(function(t){return t.size}).min(),o.__iterate=function(t,e){for(var n,r=this.__iterator(wn,e),o=0;!(n=r.next()).done&&t(n.value,o++,this)!==!1;);return o},o.__iteratorUncached=function(t,o){var i=r.map(function(t){return t=e(t),O(o?t.reverse():t)}),a=0,u=!1;return new w(function(){var e;return u||(e=i.map(function(t){return t.next()}),u=e.some(function(t){return t.done})),u?E():x(t,a++,n.apply(null,e.map(function(t){return t.value})))})},o}function ke(t,e){return L(t)?e:t.constructor(e)}function je(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function Oe(t){return lt(t.size),d(t)}function Se(t){return a(t)?n:u(t)?r:o}function Te(t){return Object.create((a(t)?A:u(t)?N:D).prototype)}function Ce(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):C.prototype.cacheResult.call(this)}function Ae(t,e){return t>e?1:te?-1:0}function on(t){if(t.size===1/0)return 0;var e=c(t),n=a(t),r=e?1:0,o=t.__iterate(n?e?function(t,e){r=31*r+un(it(t),it(e))|0}:function(t,e){r=r+un(it(t),it(e))|0}:e?function(t){r=31*r+it(t)|0}:function(t){r=r+it(t)|0});return an(o,r)}function an(t,e){return e=Nn(e,3432918353),e=Nn(e<<15|e>>>-15,461845907),e=Nn(e<<13|e>>>-13,5),e=(e+3864292196|0)^t,e=Nn(e^e>>>16,2246822507),e=Nn(e^e>>>13,3266489909),e=ot(e^e>>>16)}function un(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}var sn=Array.prototype.slice;t(n,e),t(r,e),t(o,e),e.isIterable=i,e.isKeyed=a,e.isIndexed=u,e.isAssociative=s,e.isOrdered=c,e.Keyed=n,e.Indexed=r,e.Set=o;var cn="@@__IMMUTABLE_ITERABLE__@@",ln="@@__IMMUTABLE_KEYED__@@",fn="@@__IMMUTABLE_INDEXED__@@",pn="@@__IMMUTABLE_ORDERED__@@",hn="delete",dn=5,vn=1<r?E():x(t,o,n[e?r-o++:o++])})},t(I,A),I.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},I.prototype.has=function(t){return this._object.hasOwnProperty(t)},I.prototype.__iterate=function(t,e){for(var n=this._object,r=this._keys,o=r.length-1,i=0;i<=o;i++){var a=r[e?o-i:i];if(t(n[a],a,this)===!1)return i+1}return i},I.prototype.__iterator=function(t,e){var n=this._object,r=this._keys,o=r.length-1,i=0;return new w(function(){var a=r[e?o-i:i];return i++>o?E():x(t,a,n[a])})},I.prototype[pn]=!0,t(R,N),R.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);var n=this._iterable,r=O(n),o=0;if(j(r))for(var i;!(i=r.next()).done&&t(i.value,o++,this)!==!1;);return o},R.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var n=this._iterable,r=O(n);if(!j(r))return new w(E);var o=0;return new w(function(){var e=r.next();return e.done?e:x(t,o++,e.value)})},t(P,N),P.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);for(var n=this._iterator,r=this._iteratorCache,o=0;o=r.length){var e=n.next();if(e.done)return e;r[o]=e.value}return x(t,o,r[o++])})};var Sn;t(X,N),X.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},X.prototype.get=function(t,e){return this.has(t)?this._value:e},X.prototype.includes=function(t){return J(this._value,t)},X.prototype.slice=function(t,e){var n=this.size;return m(t,e,n)?this:new X(this._value,_(e,n)-y(t,n))},X.prototype.reverse=function(){return this},X.prototype.indexOf=function(t){return J(this._value,t)?0:-1},X.prototype.lastIndexOf=function(t){return J(this._value,t)?this.size:-1},X.prototype.__iterate=function(t,e){for(var n=0;n=0&&e=0&&nn?E():x(t,i++,a)})},Z.prototype.equals=function(t){return t instanceof Z?this._start===t._start&&this._end===t._end&&this._step===t._step:Y(this,t)};var Cn;t(tt,e),t(et,tt),t(nt,tt),t(rt,tt),tt.Keyed=et,tt.Indexed=nt,tt.Set=rt;var An,Nn="function"==typeof Math.imul&&Math.imul(4294967295,2)===-2?Math.imul:function(t,e){t|=0,e|=0;var n=65535&t,r=65535&e;return n*r+((t>>>16)*r+n*(e>>>16)<<16>>>0)|0},Dn=Object.isExtensible,Mn=function(){try{return Object.defineProperty({},"@",{}),!0}catch(t){return!1}}(),In="function"==typeof WeakMap;In&&(An=new WeakMap);var Rn=0,Pn="__immutablehash__";"function"==typeof Symbol&&(Pn=Symbol(Pn));var Ln=16,Bn=255,qn=0,Un={};t(ft,et),ft.of=function(){var t=sn.call(arguments,0);return xt().withMutations(function(e){for(var n=0;n=t.length)throw new Error("Missing value for key: "+t[n]);e.set(t[n],t[n+1])}})},ft.prototype.toString=function(){return this.__toString("Map {","}")},ft.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},ft.prototype.set=function(t,e){return Et(this,t,e)},ft.prototype.setIn=function(t,e){return this.updateIn(t,mn,function(){return e})},ft.prototype.remove=function(t){return Et(this,t,mn)},ft.prototype.deleteIn=function(t){return this.updateIn(t,function(){return mn})},ft.prototype.update=function(t,e,n){return 1===arguments.length?t(this):this.updateIn([t],e,n)},ft.prototype.updateIn=function(t,e,n){n||(n=e,e=void 0);var r=It(this,Ne(t),e,n);return r===mn?void 0:r},ft.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):xt()},ft.prototype.merge=function(){return At(this,void 0,arguments)},ft.prototype.mergeWith=function(t){var e=sn.call(arguments,1);return At(this,t,e)},ft.prototype.mergeIn=function(t){var e=sn.call(arguments,1);return this.updateIn(t,xt(),function(t){return"function"==typeof t.merge?t.merge.apply(t,e):e[e.length-1]})},ft.prototype.mergeDeep=function(){return At(this,Nt,arguments)},ft.prototype.mergeDeepWith=function(t){var e=sn.call(arguments,1);return At(this,Dt(t),e)},ft.prototype.mergeDeepIn=function(t){var e=sn.call(arguments,1); +return this.updateIn(t,xt(),function(t){return"function"==typeof t.mergeDeep?t.mergeDeep.apply(t,e):e[e.length-1]})},ft.prototype.sort=function(t){return Qt(be(this,t))},ft.prototype.sortBy=function(t,e){return Qt(be(this,e,t))},ft.prototype.withMutations=function(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},ft.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new p)},ft.prototype.asImmutable=function(){return this.__ensureOwner()},ft.prototype.wasAltered=function(){return this.__altered},ft.prototype.__iterator=function(t,e){return new yt(this,t,e)},ft.prototype.__iterate=function(t,e){var n=this,r=0;return this._root&&this._root.iterate(function(e){return r++,t(e[1],e[0],n)},e),r},ft.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?wt(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},ft.isMap=pt;var Vn="@@__IMMUTABLE_MAP__@@",Fn=ft.prototype;Fn[Vn]=!0,Fn[hn]=Fn.remove,Fn.removeIn=Fn.deleteIn,ht.prototype.get=function(t,e,n,r){for(var o=this.entries,i=0,a=o.length;i=Hn)return St(t,s,r,o);var d=t&&t===this.ownerID,v=d?s:h(s);return p?u?c===l-1?v.pop():v[c]=v.pop():v[c]=[r,o]:v.push([r,o]),d?(this.entries=v,this):new ht(t,v)}},dt.prototype.get=function(t,e,n,r){void 0===e&&(e=it(n));var o=1<<((0===t?e:e>>>t)&gn),i=this.bitmap;return 0===(i&o)?r:this.nodes[Rt(i&o-1)].get(t+dn,e,n,r)},dt.prototype.update=function(t,e,n,r,o,i,a){void 0===n&&(n=it(r));var u=(0===e?n:n>>>e)&gn,s=1<=Wn)return Ct(t,p,c,u,d);if(l&&!d&&2===p.length&&jt(p[1^f]))return p[1^f];if(l&&d&&1===p.length&&jt(d))return d;var v=t&&t===this.ownerID,g=l?d?c:c^s:c|s,m=l?d?Pt(p,f,d,v):Bt(p,f,v):Lt(p,f,d,v);return v?(this.bitmap=g,this.nodes=m,this):new dt(t,g,m)},vt.prototype.get=function(t,e,n,r){void 0===e&&(e=it(n));var o=(0===t?e:e>>>t)&gn,i=this.nodes[o];return i?i.get(t+dn,e,n,r):r},vt.prototype.update=function(t,e,n,r,o,i,a){void 0===n&&(n=it(r));var u=(0===e?n:n>>>e)&gn,s=o===mn,c=this.nodes,l=c[u];if(s&&!l)return this;var f=kt(l,t,e+dn,n,r,o,i,a);if(f===l)return this;var p=this.count;if(l){if(!f&&(p--,p=0&&t>>e&gn;if(r>=this.array.length)return new Vt([],t);var o,i=0===r;if(e>0){var a=this.array[r];if(o=a&&a.removeBefore(t,e-dn,n),o===a&&i)return this}if(i&&!o)return this;var u=$t(this,t);if(!i)for(var s=0;s>>e&gn;if(r>=this.array.length)return this;var o;if(e>0){var i=this.array[r];if(o=i&&i.removeAfter(t,e-dn,n),o===i&&r===this.array.length-1)return this}var a=$t(this,t);return a.array.splice(r+1),o&&(a.array[r]=o),a};var Jn,Yn={};t(Qt,ft),Qt.of=function(){return this(arguments)},Qt.prototype.toString=function(){return this.__toString("OrderedMap {","}")},Qt.prototype.get=function(t,e){var n=this._map.get(t);return void 0!==n?this._list.get(n)[1]:e},Qt.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):ee()},Qt.prototype.set=function(t,e){return ne(this,t,e)},Qt.prototype.remove=function(t){return ne(this,t,mn)},Qt.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},Qt.prototype.__iterate=function(t,e){var n=this;return this._list.__iterate(function(e){return e&&t(e[1],e[0],n)},e)},Qt.prototype.__iterator=function(t,e){return this._list.fromEntrySeq().__iterator(t,e)},Qt.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t),n=this._list.__ensureOwner(t);return t?te(e,n,t,this.__hash):(this.__ownerID=t,this._map=e,this._list=n,this)},Qt.isOrderedMap=Zt,Qt.prototype[pn]=!0,Qt.prototype[hn]=Qt.prototype.remove;var Xn;t(re,A),re.prototype.get=function(t,e){return this._iter.get(t,e)},re.prototype.has=function(t){return this._iter.has(t)},re.prototype.valueSeq=function(){return this._iter.valueSeq()},re.prototype.reverse=function(){var t=this,e=ce(this,!0);return this._useKeys||(e.valueSeq=function(){return t._iter.toSeq().reverse()}),e},re.prototype.map=function(t,e){var n=this,r=se(this,t,e);return this._useKeys||(r.valueSeq=function(){return n._iter.toSeq().map(t,e)}),r},re.prototype.__iterate=function(t,e){var n,r=this;return this._iter.__iterate(this._useKeys?function(e,n){return t(e,n,r)}:(n=e?Oe(this):0,function(o){return t(o,e?--n:n++,r)}),e)},re.prototype.__iterator=function(t,e){if(this._useKeys)return this._iter.__iterator(t,e);var n=this._iter.__iterator(wn,e),r=e?Oe(this):0;return new w(function(){var o=n.next();return o.done?o:x(t,e?--r:r++,o.value,o)})},re.prototype[pn]=!0,t(oe,N),oe.prototype.includes=function(t){return this._iter.includes(t)},oe.prototype.__iterate=function(t,e){var n=this,r=0;return this._iter.__iterate(function(e){return t(e,r++,n)},e)},oe.prototype.__iterator=function(t,e){var n=this._iter.__iterator(wn,e),r=0;return new w(function(){var e=n.next();return e.done?e:x(t,r++,e.value,e)})},t(ie,D),ie.prototype.has=function(t){return this._iter.includes(t)},ie.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){return t(e,e,n)},e)},ie.prototype.__iterator=function(t,e){var n=this._iter.__iterator(wn,e);return new w(function(){var e=n.next();return e.done?e:x(t,e.value,e.value,e)})},t(ae,A),ae.prototype.entrySeq=function(){return this._iter.toSeq()},ae.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){if(e){je(e);var r=i(e);return t(r?e.get(1):e[1],r?e.get(0):e[0],n)}},e)},ae.prototype.__iterator=function(t,e){var n=this._iter.__iterator(wn,e);return new w(function(){for(;;){var e=n.next();if(e.done)return e;var r=e.value;if(r){je(r);var o=i(r);return x(t,o?r.get(0):r[0],o?r.get(1):r[1],e)}}})},oe.prototype.cacheResult=re.prototype.cacheResult=ie.prototype.cacheResult=ae.prototype.cacheResult=Ce,t(De,et),De.prototype.toString=function(){return this.__toString(Ie(this)+" {","}")},De.prototype.has=function(t){return this._defaultValues.hasOwnProperty(t)},De.prototype.get=function(t,e){if(!this.has(t))return e;var n=this._defaultValues[t];return this._map?this._map.get(t,n):n},De.prototype.clear=function(){if(this.__ownerID)return this._map&&this._map.clear(),this;var t=this.constructor;return t._empty||(t._empty=Me(this,xt()))},De.prototype.set=function(t,e){if(!this.has(t))throw new Error('Cannot set unknown key "'+t+'" on '+Ie(this));if(this._map&&!this._map.has(t)){var n=this._defaultValues[t];if(e===n)return this}var r=this._map&&this._map.set(t,e);return this.__ownerID||r===this._map?this:Me(this,r)},De.prototype.remove=function(t){if(!this.has(t))return this;var e=this._map&&this._map.remove(t);return this.__ownerID||e===this._map?this:Me(this,e)},De.prototype.wasAltered=function(){return this._map.wasAltered()},De.prototype.__iterator=function(t,e){var r=this;return n(this._defaultValues).map(function(t,e){return r.get(e)}).__iterator(t,e)},De.prototype.__iterate=function(t,e){var r=this;return n(this._defaultValues).map(function(t,e){return r.get(e)}).__iterate(t,e)},De.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map&&this._map.__ensureOwner(t);return t?Me(this,e,t):(this.__ownerID=t,this._map=e,this)};var Qn=De.prototype;Qn[hn]=Qn.remove,Qn.deleteIn=Qn.removeIn=Fn.removeIn,Qn.merge=Fn.merge,Qn.mergeWith=Fn.mergeWith,Qn.mergeIn=Fn.mergeIn,Qn.mergeDeep=Fn.mergeDeep,Qn.mergeDeepWith=Fn.mergeDeepWith,Qn.mergeDeepIn=Fn.mergeDeepIn,Qn.setIn=Fn.setIn,Qn.update=Fn.update,Qn.updateIn=Fn.updateIn,Qn.withMutations=Fn.withMutations,Qn.asMutable=Fn.asMutable,Qn.asImmutable=Fn.asImmutable,t(Le,rt),Le.of=function(){return this(arguments)},Le.fromKeys=function(t){return this(n(t).keySeq())},Le.prototype.toString=function(){return this.__toString("Set {","}")},Le.prototype.has=function(t){return this._map.has(t)},Le.prototype.add=function(t){return qe(this,this._map.set(t,!0))},Le.prototype.remove=function(t){return qe(this,this._map.remove(t))},Le.prototype.clear=function(){return qe(this,this._map.clear())},Le.prototype.union=function(){var t=sn.call(arguments,0);return t=t.filter(function(t){return 0!==t.size}),0===t.length?this:0!==this.size||this.__ownerID||1!==t.length?this.withMutations(function(e){for(var n=0;n=0;n--)e={value:arguments[n],next:e};return this.__ownerID?(this.size=t,this._head=e,this.__hash=void 0,this.__altered=!0,this):Ge(t,e)},Ke.prototype.pushAll=function(t){if(t=r(t),0===t.size)return this;lt(t.size);var e=this.size,n=this._head;return t.reverse().forEach(function(t){e++,n={value:t,next:n}}),this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):Ge(e,n)},Ke.prototype.pop=function(){return this.slice(1)},Ke.prototype.unshift=function(){return this.push.apply(this,arguments)},Ke.prototype.unshiftAll=function(t){return this.pushAll(t)},Ke.prototype.shift=function(){return this.pop.apply(this,arguments)},Ke.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Je()},Ke.prototype.slice=function(t,e){if(m(t,e,this.size))return this;var n=y(t,this.size),r=_(e,this.size);if(r!==this.size)return nt.prototype.slice.call(this,t,e);for(var o=this.size-n,i=this._head;n--;)i=i.next;return this.__ownerID?(this.size=o,this._head=i,this.__hash=void 0,this.__altered=!0,this):Ge(o,i)},Ke.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Ge(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Ke.prototype.__iterate=function(t,e){if(e)return this.reverse().__iterate(t);for(var n=0,r=this._head;r&&t(r.value,n++,this)!==!1;)r=r.next;return n},Ke.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var n=0,r=this._head;return new w(function(){if(r){var e=r.value;return r=r.next,x(t,n++,e)}return E()})},Ke.isStack=$e;var or="@@__IMMUTABLE_STACK__@@",ir=Ke.prototype;ir[or]=!0,ir.withMutations=Fn.withMutations,ir.asMutable=Fn.asMutable,ir.asImmutable=Fn.asImmutable,ir.wasAltered=Fn.wasAltered;var ar;e.Iterator=w,Ye(e,{toArray:function(){lt(this.size);var t=new Array(this.size||0);return this.valueSeq().__iterate(function(e,n){t[n]=e}),t},toIndexedSeq:function(){return new oe(this)},toJS:function(){return this.toSeq().map(function(t){return t&&"function"==typeof t.toJS?t.toJS():t}).__toJS()},toJSON:function(){return this.toSeq().map(function(t){return t&&"function"==typeof t.toJSON?t.toJSON():t}).__toJS()},toKeyedSeq:function(){return new re(this,!0)},toMap:function(){return ft(this.toKeyedSeq())},toObject:function(){lt(this.size);var t={};return this.__iterate(function(e,n){t[n]=e}),t},toOrderedMap:function(){return Qt(this.toKeyedSeq())},toOrderedSet:function(){return Fe(a(this)?this.valueSeq():this)},toSet:function(){return Le(a(this)?this.valueSeq():this)},toSetSeq:function(){return new ie(this)},toSeq:function(){return u(this)?this.toIndexedSeq():a(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Ke(a(this)?this.valueSeq():this)},toList:function(){return qt(a(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(t,e){return 0===this.size?t+e:t+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+e},concat:function(){var t=sn.call(arguments,0);return ke(this,ge(this,t))},includes:function(t){return this.some(function(e){return J(e,t)})},entries:function(){return this.__iterator(xn)},every:function(t,e){lt(this.size);var n=!0;return this.__iterate(function(r,o,i){if(!t.call(e,r,o,i))return n=!1,!1}),n},filter:function(t,e){return ke(this,le(this,t,e,!0))},find:function(t,e,n){var r=this.findEntry(t,e);return r?r[1]:n},forEach:function(t,e){return lt(this.size),this.__iterate(e?t.bind(e):t)},join:function(t){lt(this.size),t=void 0!==t?""+t:",";var e="",n=!0;return this.__iterate(function(r){n?n=!1:e+=t,e+=null!==r&&void 0!==r?r.toString():""}),e},keys:function(){return this.__iterator(bn)},map:function(t,e){return ke(this,se(this,t,e))},reduce:function(t,e,n){lt(this.size);var r,o;return arguments.length<2?o=!0:r=e,this.__iterate(function(e,i,a){o?(o=!1,r=e):r=t.call(n,r,e,i,a)}),r},reduceRight:function(t,e,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return ke(this,ce(this,!0))},slice:function(t,e){return ke(this,he(this,t,e,!0))},some:function(t,e){return!this.every(Ze(t),e)},sort:function(t){return ke(this,be(this,t))},values:function(){return this.__iterator(wn)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some(function(){return!0})},count:function(t,e){return d(t?this.toSeq().filter(t,e):this)},countBy:function(t,e){return fe(this,t,e)},equals:function(t){return Y(this,t)},entrySeq:function(){var t=this;if(t._cache)return new M(t._cache);var e=t.toSeq().map(Qe).toIndexedSeq();return e.fromEntrySeq=function(){return t.toSeq()},e},filterNot:function(t,e){return this.filter(Ze(t),e)},findEntry:function(t,e,n){var r=n;return this.__iterate(function(n,o,i){if(t.call(e,n,o,i))return r=[o,n],!1}),r},findKey:function(t,e){var n=this.findEntry(t,e);return n&&n[0]},findLast:function(t,e,n){return this.toKeyedSeq().reverse().find(t,e,n)},findLastEntry:function(t,e,n){return this.toKeyedSeq().reverse().findEntry(t,e,n)},findLastKey:function(t,e){return this.toKeyedSeq().reverse().findKey(t,e)},first:function(){return this.find(g)},flatMap:function(t,e){return ke(this,ye(this,t,e))},flatten:function(t){return ke(this,me(this,t,!0))},fromEntrySeq:function(){return new ae(this)},get:function(t,e){return this.find(function(e,n){return J(n,t)},void 0,e)},getIn:function(t,e){for(var n,r=this,o=Ne(t);!(n=o.next()).done;){var i=n.value;if(r=r&&r.get?r.get(i,mn):mn,r===mn)return e}return r},groupBy:function(t,e){return pe(this,t,e)},has:function(t){return this.get(t,mn)!==mn},hasIn:function(t){return this.getIn(t,mn)!==mn},isSubset:function(t){return t="function"==typeof t.includes?t:e(t),this.every(function(e){return t.includes(e)})},isSuperset:function(t){return t="function"==typeof t.isSubset?t:e(t),t.isSubset(this)},keyOf:function(t){return this.findKey(function(e){return J(e,t)})},keySeq:function(){return this.toSeq().map(Xe).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(t){return this.toKeyedSeq().reverse().keyOf(t)},max:function(t){return we(this,t)},maxBy:function(t,e){return we(this,e,t)},min:function(t){return we(this,t?tn(t):rn)},minBy:function(t,e){return we(this,e?tn(e):rn,t)},rest:function(){return this.slice(1)},skip:function(t){return this.slice(Math.max(0,t))},skipLast:function(t){return ke(this,this.toSeq().reverse().skip(t).reverse())},skipWhile:function(t,e){return ke(this,ve(this,t,e,!0))},skipUntil:function(t,e){return this.skipWhile(Ze(t),e)},sortBy:function(t,e){return ke(this,be(this,e,t))},take:function(t){return this.slice(0,Math.max(0,t))},takeLast:function(t){return ke(this,this.toSeq().reverse().take(t).reverse())},takeWhile:function(t,e){return ke(this,de(this,t,e))},takeUntil:function(t,e){return this.takeWhile(Ze(t),e)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=on(this))}});var ur=e.prototype;ur[cn]=!0,ur[jn]=ur.values,ur.__toJS=ur.toArray,ur.__toStringMapper=en,ur.inspect=ur.toSource=function(){return this.toString()},ur.chain=ur.flatMap,ur.contains=ur.includes,Ye(n,{flip:function(){return ke(this,ue(this))},mapEntries:function(t,e){var n=this,r=0;return ke(this,this.toSeq().map(function(o,i){return t.call(e,[i,o],r++,n)}).fromEntrySeq())},mapKeys:function(t,e){var n=this;return ke(this,this.toSeq().flip().map(function(r,o){return t.call(e,r,o,n)}).flip())}});var sr=n.prototype;sr[ln]=!0,sr[jn]=ur.entries,sr.__toJS=ur.toObject,sr.__toStringMapper=function(t,e){return JSON.stringify(e)+": "+en(t)},Ye(r,{toKeyedSeq:function(){return new re(this,!1)},filter:function(t,e){return ke(this,le(this,t,e,!1))},findIndex:function(t,e){var n=this.findEntry(t,e);return n?n[0]:-1},indexOf:function(t){var e=this.keyOf(t);return void 0===e?-1:e},lastIndexOf:function(t){var e=this.lastKeyOf(t);return void 0===e?-1:e},reverse:function(){return ke(this,ce(this,!1))},slice:function(t,e){return ke(this,he(this,t,e,!1))},splice:function(t,e){var n=arguments.length;if(e=Math.max(0|e,0),0===n||2===n&&!e)return this;t=y(t,t<0?this.count():this.size);var r=this.slice(0,t);return ke(this,1===n?r:r.concat(h(arguments,2),this.slice(t+e)))},findLastIndex:function(t,e){var n=this.findLastEntry(t,e);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(t){return ke(this,me(this,t,!1))},get:function(t,e){return t=v(this,t),t<0||this.size===1/0||void 0!==this.size&&t>this.size?e:this.find(function(e,n){return n===t},void 0,e)},has:function(t){return t=v(this,t),t>=0&&(void 0!==this.size?this.size===1/0||t0){if(++e>=r)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var r=800,o=16,i=Date.now;t.exports=n},function(t,e,n){function r(t,e,n,a,u,s){return i(t)&&i(e)&&(s.set(e,t),o(t,e,void 0,r,s),s.delete(e)),t}var o=n(39),i=n(32);t.exports=r},function(t,e,n){function r(t,e,n,l,f){t!==e&&a(e,function(a,c){if(s(a))f||(f=new o),u(t,e,c,n,r,l,f);else{var p=l?l(t[c],a,c+"",t,e,f):void 0;void 0===p&&(p=a),i(t,c,p)}},c)}var o=n(40),i=n(70),a=n(72),u=n(74),s=n(32),c=n(103);t.exports=r},function(t,e,n){function r(t){var e=this.__data__=new o(t);this.size=e.size}var o=n(41),i=n(49),a=n(50),u=n(51),s=n(52),c=n(53);r.prototype.clear=i,r.prototype.delete=a,r.prototype.get=u,r.prototype.has=s,r.prototype.set=c,t.exports=r},function(t,e,n){function r(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1}var o=n(44);t.exports=r},function(t,e,n){function r(t,e){var n=this.__data__,r=o(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}var o=n(44);t.exports=r},function(t,e,n){function r(){this.__data__=new o,this.size=0}var o=n(41);t.exports=r},function(t,e){function n(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}t.exports=n},function(t,e){function n(t){return this.__data__.get(t)}t.exports=n},function(t,e){function n(t){return this.__data__.has(t)}t.exports=n},function(t,e,n){function r(t,e){var n=this.__data__;if(n instanceof o){var r=n.__data__;if(!i||r.length-1&&t%1==0&&t<=r}var r=9007199254740991;t.exports=n},function(t,e,n){(function(t){var r=n(28),o=n(94),i="object"==typeof e&&e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,u=a&&a.exports===i,s=u?r.Buffer:void 0,c=s?s.isBuffer:void 0,l=c||o;t.exports=l}).call(e,n(76)(t))},function(t,e){function n(){return!1}t.exports=n},function(t,e,n){function r(t){if(!a(t)||o(t)!=u)return!1;var e=i(t);if(null===e)return!0;var n=f.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==p}var o=n(26),i=n(83),a=n(88),u="[object Object]",s=Function.prototype,c=Object.prototype,l=s.toString,f=c.hasOwnProperty,p=l.call(Object);t.exports=r},function(t,e,n){var r=n(97),o=n(98),i=n(99),a=i&&i.isTypedArray,u=a?o(a):r;t.exports=u},function(t,e,n){function r(t){return a(t)&&i(t.length)&&!!N[o(t)]}var o=n(26),i=n(92),a=n(88),u="[object Arguments]",s="[object Array]",c="[object Boolean]",l="[object Date]",f="[object Error]",p="[object Function]",h="[object Map]",d="[object Number]",v="[object Object]",g="[object RegExp]",m="[object Set]",y="[object String]",_="[object WeakMap]",b="[object ArrayBuffer]",w="[object DataView]",x="[object Float32Array]",E="[object Float64Array]",k="[object Int8Array]",j="[object Int16Array]",O="[object Int32Array]",S="[object Uint8Array]",T="[object Uint8ClampedArray]",C="[object Uint16Array]",A="[object Uint32Array]",N={};N[x]=N[E]=N[k]=N[j]=N[O]=N[S]=N[T]=N[C]=N[A]=!0,N[u]=N[s]=N[b]=N[c]=N[w]=N[l]=N[f]=N[p]=N[h]=N[d]=N[v]=N[g]=N[m]=N[y]=N[_]=!1,t.exports=r},function(t,e){function n(t){return function(e){return t(e)}}t.exports=n},function(t,e,n){(function(t){var r=n(29),o="object"==typeof e&&e&&!e.nodeType&&e,i=o&&"object"==typeof t&&t&&!t.nodeType&&t,a=i&&i.exports===o,u=a&&r.process,s=function(){try{return u&&u.binding&&u.binding("util")}catch(t){}}();t.exports=s}).call(e,n(76)(t))},function(t,e,n){function r(t){return o(t,i(t))}var o=n(101),i=n(103);t.exports=r},function(t,e,n){function r(t,e,n,r){var a=!n;n||(n={});for(var u=-1,s=e.length;++u-1&&t%1==0&&t1?n[o-1]:void 0,u=o>2?n[2]:void 0;for(a=t.length>3&&"function"==typeof a?(o--,a):void 0,u&&i(n[0],n[1],u)&&(a=o<3?void 0:a,o=1),e=Object(e);++r2?r-2:0);for(var o=2;o-1}function d(t,e,n){for(var r=-1,o=null==t?0:t.length;++r-1;);return n}function q(t,e){for(var n=t.length;n--&&k(e,t[n],0)>-1;);return n}function U(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}function V(t){return"\\"+nr[t]}function F(t,e){return null==t?ot:t[e]}function z(t){return $n.test(t)}function H(t){return Gn.test(t)}function W(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}function K(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function $(t,e){return function(n){return t(e(n))}}function G(t,e){for(var n=-1,r=t.length,o=0,i=[];++n>>1,Vt=[["ary",kt],["bind",mt],["bindKey",yt],["curry",bt],["curryRight",wt],["flip",Ot],["partial",xt],["partialRight",Et],["rearg",jt]],Ft="[object Arguments]",zt="[object Array]",Ht="[object AsyncFunction]",Wt="[object Boolean]",Kt="[object Date]",$t="[object DOMException]",Gt="[object Error]",Jt="[object Function]",Yt="[object GeneratorFunction]",Xt="[object Map]",Qt="[object Number]",Zt="[object Null]",te="[object Object]",ee="[object Promise]",ne="[object Proxy]",re="[object RegExp]",oe="[object Set]",ie="[object String]",ae="[object Symbol]",ue="[object Undefined]",se="[object WeakMap]",ce="[object WeakSet]",le="[object ArrayBuffer]",fe="[object DataView]",pe="[object Float32Array]",he="[object Float64Array]",de="[object Int8Array]",ve="[object Int16Array]",ge="[object Int32Array]",me="[object Uint8Array]",ye="[object Uint8ClampedArray]",_e="[object Uint16Array]",be="[object Uint32Array]",we=/\b__p \+= '';/g,xe=/\b(__p \+=) '' \+/g,Ee=/(__e\(.*?\)|\b__t\)) \+\n'';/g,ke=/&(?:amp|lt|gt|quot|#39);/g,je=/[&<>"']/g,Oe=RegExp(ke.source),Se=RegExp(je.source),Te=/<%-([\s\S]+?)%>/g,Ce=/<%([\s\S]+?)%>/g,Ae=/<%=([\s\S]+?)%>/g,Ne=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,De=/^\w*$/,Me=/^\./,Ie=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Re=/[\\^$.*+?()[\]{}|]/g,Pe=RegExp(Re.source),Le=/^\s+|\s+$/g,Be=/^\s+/,qe=/\s+$/,Ue=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ve=/\{\n\/\* \[wrapped with (.+)\] \*/,Fe=/,? & /,ze=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,He=/\\(\\)?/g,We=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Ke=/\w*$/,$e=/^[-+]0x[0-9a-f]+$/i,Ge=/^0b[01]+$/i,Je=/^\[object .+?Constructor\]$/,Ye=/^0o[0-7]+$/i,Xe=/^(?:0|[1-9]\d*)$/,Qe=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ze=/($^)/,tn=/['\n\r\u2028\u2029\\]/g,en="\\ud800-\\udfff",nn="\\u0300-\\u036f",rn="\\ufe20-\\ufe2f",on="\\u20d0-\\u20ff",an=nn+rn+on,un="\\u2700-\\u27bf",sn="a-z\\xdf-\\xf6\\xf8-\\xff",cn="\\xac\\xb1\\xd7\\xf7",ln="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",fn="\\u2000-\\u206f",pn=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",hn="A-Z\\xc0-\\xd6\\xd8-\\xde",dn="\\ufe0e\\ufe0f",vn=cn+ln+fn+pn,gn="['’]",mn="["+en+"]",yn="["+vn+"]",_n="["+an+"]",bn="\\d+",wn="["+un+"]",xn="["+sn+"]",En="[^"+en+vn+bn+un+sn+hn+"]",kn="\\ud83c[\\udffb-\\udfff]",jn="(?:"+_n+"|"+kn+")",On="[^"+en+"]",Sn="(?:\\ud83c[\\udde6-\\uddff]){2}",Tn="[\\ud800-\\udbff][\\udc00-\\udfff]",Cn="["+hn+"]",An="\\u200d",Nn="(?:"+xn+"|"+En+")",Dn="(?:"+Cn+"|"+En+")",Mn="(?:"+gn+"(?:d|ll|m|re|s|t|ve))?",In="(?:"+gn+"(?:D|LL|M|RE|S|T|VE))?",Rn=jn+"?",Pn="["+dn+"]?",Ln="(?:"+An+"(?:"+[On,Sn,Tn].join("|")+")"+Pn+Rn+")*",Bn="\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)",qn="\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)",Un=Pn+Rn+Ln,Vn="(?:"+[wn,Sn,Tn].join("|")+")"+Un,Fn="(?:"+[On+_n+"?",_n,Sn,Tn,mn].join("|")+")",zn=RegExp(gn,"g"),Hn=RegExp(_n,"g"),Wn=RegExp(kn+"(?="+kn+")|"+Fn+Un,"g"),Kn=RegExp([Cn+"?"+xn+"+"+Mn+"(?="+[yn,Cn,"$"].join("|")+")",Dn+"+"+In+"(?="+[yn,Cn+Nn,"$"].join("|")+")",Cn+"?"+Nn+"+"+Mn,Cn+"+"+In,qn,Bn,bn,Vn].join("|"),"g"),$n=RegExp("["+An+en+an+dn+"]"),Gn=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Jn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Yn=-1,Xn={};Xn[pe]=Xn[he]=Xn[de]=Xn[ve]=Xn[ge]=Xn[me]=Xn[ye]=Xn[_e]=Xn[be]=!0,Xn[Ft]=Xn[zt]=Xn[le]=Xn[Wt]=Xn[fe]=Xn[Kt]=Xn[Gt]=Xn[Jt]=Xn[Xt]=Xn[Qt]=Xn[te]=Xn[re]=Xn[oe]=Xn[ie]=Xn[se]=!1;var Qn={};Qn[Ft]=Qn[zt]=Qn[le]=Qn[fe]=Qn[Wt]=Qn[Kt]=Qn[pe]=Qn[he]=Qn[de]=Qn[ve]=Qn[ge]=Qn[Xt]=Qn[Qt]=Qn[te]=Qn[re]=Qn[oe]=Qn[ie]=Qn[ae]=Qn[me]=Qn[ye]=Qn[_e]=Qn[be]=!0,Qn[Gt]=Qn[Jt]=Qn[se]=!1;var Zn={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},tr={"&":"&","<":"<",">":">",'"':""","'":"'"},er={"&":"&","<":"<",">":">",""":'"',"'":"'"},nr={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},rr=parseFloat,or=parseInt,ir="object"==typeof t&&t&&t.Object===Object&&t,ar="object"==typeof self&&self&&self.Object===Object&&self,ur=ir||ar||Function("return this")(),sr="object"==typeof e&&e&&!e.nodeType&&e,cr=sr&&"object"==typeof o&&o&&!o.nodeType&&o,lr=cr&&cr.exports===sr,fr=lr&&ir.process,pr=function(){try{return fr&&fr.binding&&fr.binding("util")}catch(t){}}(),hr=pr&&pr.isArrayBuffer,dr=pr&&pr.isDate,vr=pr&&pr.isMap,gr=pr&&pr.isRegExp,mr=pr&&pr.isSet,yr=pr&&pr.isTypedArray,_r=T("length"),br=C(Zn),wr=C(tr),xr=C(er),Er=function t(e){function n(t){if(cs(t)&&!wp(t)&&!(t instanceof b)){if(t instanceof o)return t;if(bl.call(t,"__wrapped__"))return aa(t)}return new o(t)}function r(){}function o(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=ot}function b(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Bt,this.__views__=[]}function C(){var t=new b(this.__wrapped__);return t.__actions__=Vo(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Vo(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Vo(this.__views__),t}function X(){if(this.__filtered__){var t=new b(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function et(){var t=this.__wrapped__.value(),e=this.__dir__,n=wp(t),r=e<0,o=n?t.length:0,i=Ai(0,o,this.__views__),a=i.start,u=i.end,s=u-a,c=r?u:a-1,l=this.__iteratees__,f=l.length,p=0,h=Yl(s,this.__takeCount__);if(!n||!r&&o==s&&h==s)return xo(t,this.__actions__);var d=[];t:for(;s--&&p-1}function fn(t,e){var n=this.__data__,r=Mn(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function pn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function Un(t,e,n,r,o,i){var a,u=e&pt,s=e&ht,l=e&dt;if(n&&(a=o?n(t,r,o,i):n(t)),a!==ot)return a;if(!ss(t))return t;var f=wp(t);if(f){if(a=Mi(t),!u)return Vo(t,a)}else{var p=Nf(t),h=p==Jt||p==Yt;if(Ep(t))return Co(t,u);if(p==te||p==Ft||h&&!o){if(a=s||h?{}:Ii(t),!u)return s?Ho(t,Pn(a,t)):zo(t,Rn(a,t))}else{if(!Qn[p])return o?t:{};a=Ri(t,p,Un,u)}}i||(i=new wn);var d=i.get(t);if(d)return d;i.set(t,a);var v=l?s?xi:wi:s?Ws:Hs,g=f?ot:v(t);return c(g||t,function(r,o){g&&(o=r,r=t[o]),Dn(a,o,Un(r,e,n,o,t,i))}),a}function Vn(t){var e=Hs(t);return function(n){return Fn(n,t,e)}}function Fn(t,e,n){var r=n.length;if(null==t)return!r;for(t=fl(t);r--;){var o=n[r],i=e[o],a=t[o];if(a===ot&&!(o in t)||!i(a))return!1}return!0}function Wn(t,e,n){if("function"!=typeof t)throw new dl(st);return If(function(){t.apply(ot,n)},e)}function Kn(t,e,n,r){var o=-1,i=h,a=!0,u=t.length,s=[],c=e.length;if(!u)return s;n&&(e=v(e,R(n))),r?(i=d,a=!1):e.length>=at&&(i=L,a=!1,e=new yn(e));t:for(;++oo?0:o+n),r=r===ot||r>o?o:Os(r),r<0&&(r+=o),r=n>r?0:Ss(r);n0&&n(u)?e>1?er(u,e-1,n,r,o):g(o,u):r||(o[o.length]=u)}return o}function nr(t,e){return t&&wf(t,e,Hs)}function ir(t,e){return t&&xf(t,e,Hs)}function ar(t,e){return p(e,function(e){return is(t[e])})}function sr(t,e){e=So(e,t);for(var n=0,r=e.length;null!=t&&ne}function _r(t,e){return null!=t&&bl.call(t,e)}function Er(t,e){return null!=t&&e in fl(t)}function jr(t,e,n){return t>=Yl(e,n)&&t=120&&l.length>=120)?new yn(a&&l):ot}l=t[0];var f=-1,p=u[0];t:for(;++f-1;)u!==t&&Il.call(u,s,1),Il.call(t,s,1);return t}function eo(t,e){for(var n=t?e.length:0,r=n-1;n--;){var o=e[n];if(n==r||o!==i){var i=o;Bi(o)?Il.call(t,o,1):_o(t,o)}}return t}function no(t,e){return t+zl(Zl()*(e-t+1))}function ro(t,e,n,r){for(var o=-1,i=Jl(Fl((e-t)/(n||1)),0),a=al(i);i--;)a[r?i:++o]=t,t+=n;return a}function oo(t,e){var n="";if(!t||e<1||e>Rt)return n;do e%2&&(n+=t),e=zl(e/2),e&&(t+=t);while(e);return n}function io(t,e){return Rf(Xi(t,e,Ic),t+"")}function ao(t){return Tn(rc(t))}function uo(t,e){var n=rc(t);return na(n,qn(e,0,n.length))}function so(t,e,n,r){if(!ss(t))return t;e=So(e,t);for(var o=-1,i=e.length,a=i-1,u=t;null!=u&&++oo?0:o+e),n=n>o?o:n,n<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var i=al(o);++r>>1,a=t[i];null!==a&&!bs(a)&&(n?a<=e:a=at){var c=e?null:Sf(t);if(c)return J(c);a=!1,o=L,s=new yn}else s=e?[]:u;t:for(;++r=r?t:lo(t,e,n)}function Co(t,e){if(e)return t.slice();var n=t.length,r=Al?Al(n):new t.constructor(n);return t.copy(r),r}function Ao(t){var e=new t.constructor(t.byteLength);return new Cl(e).set(new Cl(t)),e}function No(t,e){var n=e?Ao(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Do(t,e,n){var r=e?n(K(t),pt):K(t);return m(r,i,new t.constructor)}function Mo(t){var e=new t.constructor(t.source,Ke.exec(t));return e.lastIndex=t.lastIndex,e}function Io(t,e,n){var r=e?n(J(t),pt):J(t);return m(r,a,new t.constructor)}function Ro(t){return gf?fl(gf.call(t)):{}}function Po(t,e){var n=e?Ao(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Lo(t,e){if(t!==e){var n=t!==ot,r=null===t,o=t===t,i=bs(t),a=e!==ot,u=null===e,s=e===e,c=bs(e);if(!u&&!c&&!i&&t>e||i&&a&&s&&!u&&!c||r&&a&&s||!n&&s||!o)return 1;if(!r&&!i&&!c&&t=u)return s;var c=n[r];return s*("desc"==c?-1:1)}}return t.index-e.index}function qo(t,e,n,r){for(var o=-1,i=t.length,a=n.length,u=-1,s=e.length,c=Jl(i-a,0),l=al(s+c),f=!r;++u1?n[o-1]:ot,a=o>2?n[2]:ot;for(i=t.length>3&&"function"==typeof i?(o--,i):ot,a&&qi(n[0],n[1],a)&&(i=o<3?ot:i,o=1),e=fl(e);++r-1?o[i?e[a]:a]:ot}}function ei(t){return bi(function(e){var n=e.length,r=n,i=o.prototype.thru;for(t&&e.reverse();r--;){var a=e[r];if("function"!=typeof a)throw new dl(st);if(i&&!u&&"wrapper"==Ei(a))var u=new o([],!0)}for(r=u?r:n;++r1&&y.reverse(),f&&su))return!1;var c=i.get(t);if(c&&i.get(e))return c==e;var l=-1,f=!0,p=n>?new yn:ot;for(i.set(t,e),i.set(e,t);++l1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Ue,"{\n/* [wrapped with "+e+"] */\n")}function Li(t){return wp(t)||bp(t)||!!(Rl&&t&&t[Rl])}function Bi(t,e){return e=null==e?Rt:e,!!e&&("number"==typeof t||Xe.test(t))&&t>-1&&t%1==0&&t0){if(++e>=Ct)return arguments[0]}else e=0;return t.apply(ot,arguments)}}function na(t,e){var n=-1,r=t.length,o=r-1;for(e=e===ot?r:e;++n=this.__values__.length,e=t?ot:this.__values__[this.__index__++];return{done:t,value:e}}function au(){return this}function uu(t){for(var e,n=this;n instanceof r;){var o=aa(n);o.__index__=0,o.__values__=ot,e?i.__wrapped__=o:e=o;var i=o;n=n.__wrapped__}return i.__wrapped__=t,e}function su(){var t=this.__wrapped__;if(t instanceof b){var e=t;return this.__actions__.length&&(e=new b(this)),e=e.reverse(),e.__actions__.push({func:nu,args:[Da],thisArg:ot}),new o(e,this.__chain__)}return this.thru(Da)}function cu(){return xo(this.__wrapped__,this.__actions__)}function lu(t,e,n){var r=wp(t)?f:$n;return n&&qi(t,e,n)&&(e=ot),r(t,ji(e,3))}function fu(t,e){var n=wp(t)?p:tr;return n(t,ji(e,3))}function pu(t,e){return er(yu(t,e),1)}function hu(t,e){return er(yu(t,e),It)}function du(t,e,n){return n=n===ot?1:Os(n),er(yu(t,e),n)}function vu(t,e){var n=wp(t)?c:_f;return n(t,ji(e,3))}function gu(t,e){var n=wp(t)?l:bf;return n(t,ji(e,3))}function mu(t,e,n,r){t=Yu(t)?t:rc(t),n=n&&!r?Os(n):0;var o=t.length;return n<0&&(n=Jl(o+n,0)),_s(t)?n<=o&&t.indexOf(e,n)>-1:!!o&&k(t,e,n)>-1}function yu(t,e){var n=wp(t)?v:Hr;return n(t,ji(e,3))}function _u(t,e,n,r){return null==t?[]:(wp(e)||(e=null==e?[]:[e]),n=r?ot:n,wp(n)||(n=null==n?[]:[n]),Yr(t,e,n))}function bu(t,e,n){var r=wp(t)?m:A,o=arguments.length<3;return r(t,ji(e,4),n,o,_f)}function wu(t,e,n){var r=wp(t)?y:A,o=arguments.length<3;return r(t,ji(e,4),n,o,bf)}function xu(t,e){var n=wp(t)?p:tr;return n(t,Pu(ji(e,3)))}function Eu(t){var e=wp(t)?Tn:ao;return e(t)}function ku(t,e,n){e=(n?qi(t,e,n):e===ot)?1:Os(e);var r=wp(t)?Cn:uo;return r(t,e)}function ju(t){var e=wp(t)?An:co;return e(t)}function Ou(t){if(null==t)return 0;if(Yu(t))return _s(t)?Z(t):t.length;var e=Nf(t);return e==Xt||e==oe?t.size:Vr(t).length}function Su(t,e,n){var r=wp(t)?_:fo;return n&&qi(t,e,n)&&(e=ot),r(t,ji(e,3))}function Tu(t,e){if("function"!=typeof e)throw new dl(st);return t=Os(t),function(){if(--t<1)return e.apply(this,arguments)}}function Cu(t,e,n){return e=n?ot:e,e=t&&null==e?t.length:e,hi(t,kt,ot,ot,ot,ot,e)}function Au(t,e){var n;if("function"!=typeof e)throw new dl(st);return t=Os(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=ot),n}}function Nu(t,e,n){e=n?ot:e;var r=hi(t,bt,ot,ot,ot,ot,ot,e);return r.placeholder=Nu.placeholder,r}function Du(t,e,n){e=n?ot:e;var r=hi(t,wt,ot,ot,ot,ot,ot,e);return r.placeholder=Du.placeholder,r}function Mu(t,e,n){function r(e){var n=p,r=h;return p=h=ot,y=e,v=t.apply(r,n)}function o(t){return y=t,g=If(u,e),_?r(t):v}function i(t){var n=t-m,r=t-y,o=e-n;return b?Yl(o,d-r):o}function a(t){var n=t-m,r=t-y;return m===ot||n>=e||n<0||b&&r>=d}function u(){var t=cp();return a(t)?s(t):void(g=If(u,i(t)))}function s(t){return g=ot,w&&p?r(t):(p=h=ot,v)}function c(){g!==ot&&Of(g),y=0,p=m=h=g=ot}function l(){return g===ot?v:s(cp())}function f(){var t=cp(),n=a(t);if(p=arguments,h=this,m=t,n){if(g===ot)return o(m);if(b)return g=If(u,e),r(m)}return g===ot&&(g=If(u,e)),v}var p,h,d,v,g,m,y=0,_=!1,b=!1,w=!0;if("function"!=typeof t)throw new dl(st);return e=Ts(e)||0,ss(n)&&(_=!!n.leading,b="maxWait"in n,d=b?Jl(Ts(n.maxWait)||0,e):d,w="trailing"in n?!!n.trailing:w),f.cancel=c,f.flush=l,f}function Iu(t){return hi(t,Ot)}function Ru(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new dl(st);var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=t.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(Ru.Cache||pn),n}function Pu(t){if("function"!=typeof t)throw new dl(st);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function Lu(t){return Au(2,t)}function Bu(t,e){if("function"!=typeof t)throw new dl(st);return e=e===ot?e:Os(e),io(t,e)}function qu(t,e){if("function"!=typeof t)throw new dl(st);return e=null==e?0:Jl(Os(e),0),io(function(n){var r=n[e],o=To(n,0,e);return r&&g(o,r),u(t,this,o)})}function Uu(t,e,n){var r=!0,o=!0;if("function"!=typeof t)throw new dl(st);return ss(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),Mu(t,e,{leading:r,maxWait:e,trailing:o})}function Vu(t){return Cu(t,1)}function Fu(t,e){return vp(Oo(e),t)}function zu(){if(!arguments.length)return[];var t=arguments[0];return wp(t)?t:[t]}function Hu(t){return Un(t,dt)}function Wu(t,e){return e="function"==typeof e?e:ot,Un(t,dt,e)}function Ku(t){return Un(t,pt|dt)}function $u(t,e){return e="function"==typeof e?e:ot,Un(t,pt|dt,e)}function Gu(t,e){return null==e||Fn(t,e,Hs(e))}function Ju(t,e){return t===e||t!==t&&e!==e}function Yu(t){return null!=t&&us(t.length)&&!is(t)}function Xu(t){return cs(t)&&Yu(t)}function Qu(t){return t===!0||t===!1||cs(t)&&fr(t)==Wt}function Zu(t){return cs(t)&&1===t.nodeType&&!ms(t)}function ts(t){if(null==t)return!0;if(Yu(t)&&(wp(t)||"string"==typeof t||"function"==typeof t.splice||Ep(t)||Tp(t)||bp(t)))return!t.length;var e=Nf(t);if(e==Xt||e==oe)return!t.size;if(Hi(t))return!Vr(t).length;for(var n in t)if(bl.call(t,n))return!1;return!0}function es(t,e){return Dr(t,e)}function ns(t,e,n){n="function"==typeof n?n:ot;var r=n?n(t,e):ot;return r===ot?Dr(t,e,ot,n):!!r}function rs(t){if(!cs(t))return!1;var e=fr(t);return e==Gt||e==$t||"string"==typeof t.message&&"string"==typeof t.name&&!ms(t)}function os(t){return"number"==typeof t&&Kl(t)}function is(t){if(!ss(t))return!1;var e=fr(t);return e==Jt||e==Yt||e==Ht||e==ne}function as(t){return"number"==typeof t&&t==Os(t)}function us(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=Rt}function ss(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function cs(t){return null!=t&&"object"==typeof t}function ls(t,e){return t===e||Rr(t,e,Si(e))}function fs(t,e,n){return n="function"==typeof n?n:ot,Rr(t,e,Si(e),n)}function ps(t){return gs(t)&&t!=+t}function hs(t){if(Df(t))throw new sl(ut);return Pr(t)}function ds(t){return null===t}function vs(t){return null==t}function gs(t){return"number"==typeof t||cs(t)&&fr(t)==Qt}function ms(t){if(!cs(t)||fr(t)!=te)return!1;var e=Nl(t);if(null===e)return!0;var n=bl.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&_l.call(n)==kl}function ys(t){return as(t)&&t>=-Rt&&t<=Rt}function _s(t){return"string"==typeof t||!wp(t)&&cs(t)&&fr(t)==ie}function bs(t){return"symbol"==typeof t||cs(t)&&fr(t)==ae}function ws(t){return t===ot}function xs(t){return cs(t)&&Nf(t)==se}function Es(t){return cs(t)&&fr(t)==ce}function ks(t){if(!t)return[];if(Yu(t))return _s(t)?tt(t):Vo(t);if(Pl&&t[Pl])return W(t[Pl]());var e=Nf(t),n=e==Xt?K:e==oe?J:rc;return n(t)}function js(t){if(!t)return 0===t?t:0;if(t=Ts(t),t===It||t===-It){var e=t<0?-1:1;return e*Pt}return t===t?t:0}function Os(t){var e=js(t),n=e%1;return e===e?n?e-n:e:0}function Ss(t){return t?qn(Os(t),0,Bt):0}function Ts(t){if("number"==typeof t)return t;if(bs(t))return Lt;if(ss(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=ss(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Le,"");var n=Ge.test(t);return n||Ye.test(t)?or(t.slice(2),n?2:8):$e.test(t)?Lt:+t}function Cs(t){return Fo(t,Ws(t))}function As(t){return t?qn(Os(t),-Rt,Rt):0===t?t:0}function Ns(t){return null==t?"":mo(t)}function Ds(t,e){var n=yf(t);return null==e?n:Rn(n,e)}function Ms(t,e){return x(t,ji(e,3),nr)}function Is(t,e){return x(t,ji(e,3),ir)}function Rs(t,e){return null==t?t:wf(t,ji(e,3),Ws)}function Ps(t,e){return null==t?t:xf(t,ji(e,3),Ws)}function Ls(t,e){return t&&nr(t,ji(e,3))}function Bs(t,e){return t&&ir(t,ji(e,3))}function qs(t){return null==t?[]:ar(t,Hs(t))}function Us(t){return null==t?[]:ar(t,Ws(t))}function Vs(t,e,n){var r=null==t?ot:sr(t,e);return r===ot?n:r}function Fs(t,e){return null!=t&&Di(t,e,_r)}function zs(t,e){return null!=t&&Di(t,e,Er)}function Hs(t){return Yu(t)?Sn(t):Vr(t)}function Ws(t){return Yu(t)?Sn(t,!0):Fr(t)}function Ks(t,e){var n={};return e=ji(e,3),nr(t,function(t,r,o){Ln(n,e(t,r,o),t)}),n}function $s(t,e){var n={};return e=ji(e,3),nr(t,function(t,r,o){Ln(n,r,e(t,r,o))}),n}function Gs(t,e){return Js(t,Pu(ji(e)))}function Js(t,e){if(null==t)return{};var n=v(xi(t),function(t){return[t]});return e=ji(e),Qr(t,n,function(t,n){return e(t,n[0])})}function Ys(t,e,n){e=So(e,t);var r=-1,o=e.length;for(o||(o=1,t=ot);++re){var r=t;t=e,e=r}if(n||t%1||e%1){var o=Zl();return Yl(t+o*(e-t+rr("1e-"+((o+"").length-1))),e)}return no(t,e)}function sc(t){return th(Ns(t).toLowerCase())}function cc(t){return t=Ns(t),t&&t.replace(Qe,br).replace(Hn,"")}function lc(t,e,n){t=Ns(t),e=mo(e);var r=t.length;n=n===ot?r:qn(Os(n),0,r);var o=n;return n-=e.length,n>=0&&t.slice(n,o)==e}function fc(t){return t=Ns(t),t&&Se.test(t)?t.replace(je,wr):t}function pc(t){return t=Ns(t),t&&Pe.test(t)?t.replace(Re,"\\$&"):t}function hc(t,e,n){t=Ns(t),e=Os(e);var r=e?Z(t):0;if(!e||r>=e)return t;var o=(e-r)/2;return ai(zl(o),n)+t+ai(Fl(o),n)}function dc(t,e,n){t=Ns(t),e=Os(e);var r=e?Z(t):0;return e&&r>>0)?(t=Ns(t),t&&("string"==typeof e||null!=e&&!Op(e))&&(e=mo(e),!e&&z(t))?To(tt(t),0,n):t.split(e,n)):[]}function bc(t,e,n){return t=Ns(t),n=null==n?0:qn(Os(n),0,t.length),e=mo(e),t.slice(n,n+e.length)==e}function wc(t,e,r){var o=n.templateSettings;r&&qi(t,e,r)&&(e=ot),t=Ns(t),e=Mp({},e,o,di);var i,a,u=Mp({},e.imports,o.imports,di),s=Hs(u),c=P(u,s),l=0,f=e.interpolate||Ze,p="__p += '",h=pl((e.escape||Ze).source+"|"+f.source+"|"+(f===Ae?We:Ze).source+"|"+(e.evaluate||Ze).source+"|$","g"),d="//# sourceURL="+("sourceURL"in e?e.sourceURL:"lodash.templateSources["+ ++Yn+"]")+"\n";t.replace(h,function(e,n,r,o,u,s){return r||(r=o),p+=t.slice(l,s).replace(tn,V),n&&(i=!0,p+="' +\n__e("+n+") +\n'"),u&&(a=!0,p+="';\n"+u+";\n__p += '"),r&&(p+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),l=s+e.length,e}),p+="';\n";var v=e.variable;v||(p="with (obj) {\n"+p+"\n}\n"),p=(a?p.replace(we,""):p).replace(xe,"$1").replace(Ee,"$1;"),p="function("+(v||"obj")+") {\n"+(v?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(a?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+p+"return __p\n}";var g=eh(function(){return cl(s,d+"return "+p).apply(ot,c)});if(g.source=p,rs(g))throw g;return g}function xc(t){return Ns(t).toLowerCase()}function Ec(t){return Ns(t).toUpperCase()}function kc(t,e,n){if(t=Ns(t),t&&(n||e===ot))return t.replace(Le,"");if(!t||!(e=mo(e)))return t;var r=tt(t),o=tt(e),i=B(r,o),a=q(r,o)+1;return To(r,i,a).join("")}function jc(t,e,n){if(t=Ns(t),t&&(n||e===ot))return t.replace(qe,"");if(!t||!(e=mo(e)))return t;var r=tt(t),o=q(r,tt(e))+1;return To(r,0,o).join("")}function Oc(t,e,n){if(t=Ns(t),t&&(n||e===ot))return t.replace(Be,"");if(!t||!(e=mo(e)))return t;var r=tt(t),o=B(r,tt(e));return To(r,o).join("")}function Sc(t,e){var n=St,r=Tt;if(ss(e)){var o="separator"in e?e.separator:o;n="length"in e?Os(e.length):n,r="omission"in e?mo(e.omission):r}t=Ns(t);var i=t.length;if(z(t)){var a=tt(t);i=a.length}if(n>=i)return t;var u=n-Z(r);if(u<1)return r;var s=a?To(a,0,u).join(""):t.slice(0,u);if(o===ot)return s+r;if(a&&(u+=s.length-u),Op(o)){if(t.slice(u).search(o)){var c,l=s;for(o.global||(o=pl(o.source,Ns(Ke.exec(o))+"g")),o.lastIndex=0;c=o.exec(l);)var f=c.index;s=s.slice(0,f===ot?u:f)}}else if(t.indexOf(mo(o),u)!=u){var p=s.lastIndexOf(o);p>-1&&(s=s.slice(0,p))}return s+r}function Tc(t){return t=Ns(t),t&&Oe.test(t)?t.replace(ke,xr):t}function Cc(t,e,n){return t=Ns(t),e=n?ot:e,e===ot?H(t)?rt(t):w(t):t.match(e)||[]}function Ac(t){var e=null==t?0:t.length,n=ji();return t=e?v(t,function(t){if("function"!=typeof t[1])throw new dl(st);return[n(t[0]),t[1]]}):[],io(function(n){for(var r=-1;++rRt)return[];var n=Bt,r=Yl(t,Bt);e=ji(e),t-=Bt;for(var o=M(r,e);++n1?t[e-1]:ot;return n="function"==typeof n?(t.pop(),n):ot,Xa(t,n)}),tp=bi(function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,i=function(e){return Bn(e,t)};return!(e>1||this.__actions__.length)&&r instanceof b&&Bi(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:nu,args:[i],thisArg:ot}),new o(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(ot),t})):this.thru(i)}),ep=Wo(function(t,e,n){bl.call(t,n)?++t[n]:Ln(t,n,1)}),np=ti(va),rp=ti(ga),op=Wo(function(t,e,n){bl.call(t,n)?t[n].push(e):Ln(t,n,[e])}),ip=io(function(t,e,n){var r=-1,o="function"==typeof e,i=Yu(t)?al(t.length):[];return _f(t,function(t){i[++r]=o?u(e,t,n):Tr(t,e,n)}),i}),ap=Wo(function(t,e,n){Ln(t,n,e)}),up=Wo(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),sp=io(function(t,e){if(null==t)return[];var n=e.length;return n>1&&qi(t,e[0],e[1])?e=[]:n>2&&qi(e[0],e[1],e[2])&&(e=[e[0]]),Yr(t,er(e,1),[])}),cp=Ul||function(){return ur.Date.now()},lp=io(function(t,e,n){var r=mt;if(n.length){var o=G(n,ki(lp));r|=xt}return hi(t,r,e,n,o)}),fp=io(function(t,e,n){var r=mt|yt;if(n.length){var o=G(n,ki(fp));r|=xt}return hi(e,r,t,n,o)}),pp=io(function(t,e){return Wn(t,1,e)}),hp=io(function(t,e,n){return Wn(t,Ts(e)||0,n)});Ru.Cache=pn;var dp=jf(function(t,e){e=1==e.length&&wp(e[0])?v(e[0],R(ji())):v(er(e,1),R(ji()));var n=e.length;return io(function(r){for(var o=-1,i=Yl(r.length,n);++o=e}),bp=Cr(function(){return arguments}())?Cr:function(t){return cs(t)&&bl.call(t,"callee")&&!Ml.call(t,"callee")},wp=al.isArray,xp=hr?R(hr):Ar,Ep=Wl||Wc,kp=dr?R(dr):Nr,jp=vr?R(vr):Ir,Op=gr?R(gr):Lr,Sp=mr?R(mr):Br,Tp=yr?R(yr):qr,Cp=ci(zr),Ap=ci(function(t,e){return t<=e}),Np=Ko(function(t,e){if(Hi(e)||Yu(e))return void Fo(e,Hs(e),t);for(var n in e)bl.call(e,n)&&Dn(t,n,e[n])}),Dp=Ko(function(t,e){Fo(e,Ws(e),t)}),Mp=Ko(function(t,e,n,r){Fo(e,Ws(e),t,r)}),Ip=Ko(function(t,e,n,r){Fo(e,Hs(e),t,r)}),Rp=bi(Bn),Pp=io(function(t){return t.push(ot,di),u(Mp,ot,t)}),Lp=io(function(t){return t.push(ot,vi),u(Fp,ot,t)}),Bp=ri(function(t,e,n){t[e]=n},Dc(Ic)),qp=ri(function(t,e,n){bl.call(t,e)?t[e].push(n):t[e]=[n]},ji),Up=io(Tr),Vp=Ko(function(t,e,n){$r(t,e,n)}),Fp=Ko(function(t,e,n,r){$r(t,e,n,r)}),zp=bi(function(t,e){var n={};if(null==t)return n;var r=!1;e=v(e,function(e){return e=So(e,t),r||(r=e.length>1),e}),Fo(t,xi(t),n),r&&(n=Un(n,pt|ht|dt,gi));for(var o=e.length;o--;)_o(n,e[o]);return n}),Hp=bi(function(t,e){return null==t?{}:Xr(t,e)}),Wp=pi(Hs),Kp=pi(Ws),$p=Xo(function(t,e,n){return e=e.toLowerCase(),t+(n?sc(e):e)}),Gp=Xo(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),Jp=Xo(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),Yp=Yo("toLowerCase"),Xp=Xo(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}),Qp=Xo(function(t,e,n){return t+(n?" ":"")+th(e)}),Zp=Xo(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),th=Yo("toUpperCase"),eh=io(function(t,e){try{return u(t,ot,e)}catch(t){return rs(t)?t:new sl(t)}}),nh=bi(function(t,e){return c(e,function(e){e=ra(e),Ln(t,e,lp(t[e],t))}),t}),rh=ei(),oh=ei(!0),ih=io(function(t,e){return function(n){return Tr(n,t,e)}}),ah=io(function(t,e){return function(n){return Tr(t,n,e)}}),uh=ii(v),sh=ii(f),ch=ii(_),lh=si(),fh=si(!0),ph=oi(function(t,e){return t+e},0),hh=fi("ceil"),dh=oi(function(t,e){return t/e},1),vh=fi("floor"),gh=oi(function(t,e){return t*e},1),mh=fi("round"),yh=oi(function(t,e){return t-e},0);return n.after=Tu,n.ary=Cu,n.assign=Np,n.assignIn=Dp,n.assignInWith=Mp,n.assignWith=Ip,n.at=Rp,n.before=Au,n.bind=lp,n.bindAll=nh,n.bindKey=fp,n.castArray=zu,n.chain=tu,n.chunk=ua,n.compact=sa,n.concat=ca,n.cond=Ac,n.conforms=Nc,n.constant=Dc,n.countBy=ep,n.create=Ds,n.curry=Nu,n.curryRight=Du,n.debounce=Mu,n.defaults=Pp,n.defaultsDeep=Lp,n.defer=pp,n.delay=hp,n.difference=Lf,n.differenceBy=Bf,n.differenceWith=qf,n.drop=la,n.dropRight=fa,n.dropRightWhile=pa,n.dropWhile=ha,n.fill=da,n.filter=fu,n.flatMap=pu,n.flatMapDeep=hu,n.flatMapDepth=du,n.flatten=ma,n.flattenDeep=ya,n.flattenDepth=_a,n.flip=Iu,n.flow=rh,n.flowRight=oh,n.fromPairs=ba,n.functions=qs,n.functionsIn=Us,n.groupBy=op,n.initial=Ea,n.intersection=Uf,n.intersectionBy=Vf,n.intersectionWith=Ff,n.invert=Bp,n.invertBy=qp,n.invokeMap=ip,n.iteratee=Rc,n.keyBy=ap,n.keys=Hs,n.keysIn=Ws,n.map=yu,n.mapKeys=Ks,n.mapValues=$s,n.matches=Pc,n.matchesProperty=Lc,n.memoize=Ru,n.merge=Vp,n.mergeWith=Fp,n.method=ih,n.methodOf=ah,n.mixin=Bc,n.negate=Pu,n.nthArg=Vc,n.omit=zp,n.omitBy=Gs,n.once=Lu,n.orderBy=_u,n.over=uh,n.overArgs=dp,n.overEvery=sh,n.overSome=ch,n.partial=vp,n.partialRight=gp,n.partition=up,n.pick=Hp,n.pickBy=Js,n.property=Fc,n.propertyOf=zc,n.pull=zf,n.pullAll=Ta,n.pullAllBy=Ca,n.pullAllWith=Aa,n.pullAt=Hf,n.range=lh,n.rangeRight=fh,n.rearg=mp,n.reject=xu,n.remove=Na,n.rest=Bu,n.reverse=Da,n.sampleSize=ku,n.set=Xs,n.setWith=Qs,n.shuffle=ju,n.slice=Ma,n.sortBy=sp,n.sortedUniq=Ua,n.sortedUniqBy=Va,n.split=_c,n.spread=qu,n.tail=Fa,n.take=za,n.takeRight=Ha,n.takeRightWhile=Wa,n.takeWhile=Ka,n.tap=eu,n.throttle=Uu,n.thru=nu,n.toArray=ks,n.toPairs=Wp,n.toPairsIn=Kp,n.toPath=Yc,n.toPlainObject=Cs,n.transform=Zs,n.unary=Vu,n.union=Wf,n.unionBy=Kf,n.unionWith=$f,n.uniq=$a,n.uniqBy=Ga,n.uniqWith=Ja,n.unset=tc,n.unzip=Ya,n.unzipWith=Xa,n.update=ec,n.updateWith=nc,n.values=rc,n.valuesIn=oc,n.without=Gf,n.words=Cc,n.wrap=Fu,n.xor=Jf,n.xorBy=Yf,n.xorWith=Xf,n.zip=Qf,n.zipObject=Qa,n.zipObjectDeep=Za,n.zipWith=Zf,n.entries=Wp,n.entriesIn=Kp,n.extend=Dp,n.extendWith=Mp,Bc(n,n),n.add=ph,n.attempt=eh,n.camelCase=$p,n.capitalize=sc,n.ceil=hh,n.clamp=ic,n.clone=Hu,n.cloneDeep=Ku,n.cloneDeepWith=$u,n.cloneWith=Wu,n.conformsTo=Gu,n.deburr=cc,n.defaultTo=Mc,n.divide=dh,n.endsWith=lc,n.eq=Ju,n.escape=fc,n.escapeRegExp=pc,n.every=lu,n.find=np,n.findIndex=va,n.findKey=Ms,n.findLast=rp,n.findLastIndex=ga,n.findLastKey=Is,n.floor=vh,n.forEach=vu,n.forEachRight=gu,n.forIn=Rs,n.forInRight=Ps,n.forOwn=Ls,n.forOwnRight=Bs,n.get=Vs,n.gt=yp,n.gte=_p,n.has=Fs,n.hasIn=zs,n.head=wa,n.identity=Ic,n.includes=mu,n.indexOf=xa,n.inRange=ac,n.invoke=Up,n.isArguments=bp,n.isArray=wp,n.isArrayBuffer=xp,n.isArrayLike=Yu,n.isArrayLikeObject=Xu,n.isBoolean=Qu,n.isBuffer=Ep,n.isDate=kp,n.isElement=Zu,n.isEmpty=ts,n.isEqual=es,n.isEqualWith=ns,n.isError=rs,n.isFinite=os,n.isFunction=is,n.isInteger=as,n.isLength=us,n.isMap=jp,n.isMatch=ls,n.isMatchWith=fs,n.isNaN=ps,n.isNative=hs,n.isNil=vs,n.isNull=ds,n.isNumber=gs,n.isObject=ss,n.isObjectLike=cs,n.isPlainObject=ms,n.isRegExp=Op,n.isSafeInteger=ys,n.isSet=Sp,n.isString=_s,n.isSymbol=bs,n.isTypedArray=Tp,n.isUndefined=ws,n.isWeakMap=xs,n.isWeakSet=Es,n.join=ka,n.kebabCase=Gp,n.last=ja,n.lastIndexOf=Oa,n.lowerCase=Jp,n.lowerFirst=Yp,n.lt=Cp,n.lte=Ap,n.max=Qc,n.maxBy=Zc,n.mean=tl,n.meanBy=el,n.min=nl,n.minBy=rl,n.stubArray=Hc,n.stubFalse=Wc,n.stubObject=Kc,n.stubString=$c,n.stubTrue=Gc,n.multiply=gh,n.nth=Sa,n.noConflict=qc,n.noop=Uc,n.now=cp,n.pad=hc,n.padEnd=dc,n.padStart=vc,n.parseInt=gc,n.random=uc,n.reduce=bu,n.reduceRight=wu,n.repeat=mc,n.replace=yc,n.result=Ys,n.round=mh,n.runInContext=t,n.sample=Eu,n.size=Ou,n.snakeCase=Xp,n.some=Su,n.sortedIndex=Ia,n.sortedIndexBy=Ra,n.sortedIndexOf=Pa,n.sortedLastIndex=La,n.sortedLastIndexBy=Ba,n.sortedLastIndexOf=qa,n.startCase=Qp,n.startsWith=bc,n.subtract=yh,n.sum=ol,n.sumBy=il,n.template=wc,n.times=Jc,n.toFinite=js,n.toInteger=Os,n.toLength=Ss,n.toLower=xc,n.toNumber=Ts,n.toSafeInteger=As,n.toString=Ns,n.toUpper=Ec,n.trim=kc,n.trimEnd=jc,n.trimStart=Oc,n.truncate=Sc,n.unescape=Tc,n.uniqueId=Xc,n.upperCase=Zp,n.upperFirst=th,n.each=vu,n.eachRight=gu,n.first=wa,Bc(n,function(){var t={};return nr(n,function(e,r){bl.call(n.prototype,r)||(t[r]=e)}),t}(),{chain:!1}),n.VERSION=it,c(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){n[t].placeholder=n}),c(["drop","take"],function(t,e){b.prototype[t]=function(n){n=n===ot?1:Jl(Os(n),0);var r=this.__filtered__&&!e?new b(this):this.clone();return r.__filtered__?r.__takeCount__=Yl(n,r.__takeCount__):r.__views__.push({size:Yl(n,Bt),type:t+(r.__dir__<0?"Right":"")}),r},b.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),c(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==Nt||n==Mt;b.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:ji(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),c(["head","last"],function(t,e){var n="take"+(e?"Right":"");b.prototype[t]=function(){return this[n](1).value()[0]}}),c(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");b.prototype[t]=function(){return this.__filtered__?new b(this):this[n](1)}}),b.prototype.compact=function(){return this.filter(Ic)},b.prototype.find=function(t){return this.filter(t).head()},b.prototype.findLast=function(t){return this.reverse().find(t)},b.prototype.invokeMap=io(function(t,e){return"function"==typeof t?new b(this):this.map(function(n){return Tr(n,t,e)})}),b.prototype.reject=function(t){return this.filter(Pu(ji(t)))},b.prototype.slice=function(t,e){t=Os(t);var n=this;return n.__filtered__&&(t>0||e<0)?new b(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==ot&&(e=Os(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},b.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},b.prototype.toArray=function(){return this.take(Bt)},nr(b.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),a=n[i?"take"+("last"==e?"Right":""):e],u=i||/^find/.test(e);a&&(n.prototype[e]=function(){var e=this.__wrapped__,s=i?[1]:arguments,c=e instanceof b,l=s[0],f=c||wp(e),p=function(t){var e=a.apply(n,g([t],s));return i&&h?e[0]:e};f&&r&&"function"==typeof l&&1!=l.length&&(c=f=!1);var h=this.__chain__,d=!!this.__actions__.length,v=u&&!h,m=c&&!d;if(!u&&f){e=m?e:new b(this);var y=t.apply(e,s);return y.__actions__.push({func:nu,args:[p],thisArg:ot}),new o(y,h)}return v&&m?t.apply(this,s):(y=this.thru(p),v?i?y.value()[0]:y.value():y)})}),c(["pop","push","shift","sort","splice","unshift"],function(t){var e=vl[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",o=/^(?:pop|shift)$/.test(t);n.prototype[t]=function(){var t=arguments;if(o&&!this.__chain__){var n=this.value();return e.apply(wp(n)?n:[],t)}return this[r](function(n){return e.apply(wp(n)?n:[],t)})}}),nr(b.prototype,function(t,e){var r=n[e];if(r){var o=r.name+"",i=cf[o]||(cf[o]=[]);i.push({name:e,func:r})}}),cf[ni(ot,yt).name]=[{name:"wrapper",func:ot}],b.prototype.clone=C,b.prototype.reverse=X,b.prototype.value=et,n.prototype.at=tp,n.prototype.chain=ru,n.prototype.commit=ou,n.prototype.next=iu,n.prototype.plant=uu,n.prototype.reverse=su,n.prototype.toJSON=n.prototype.valueOf=n.prototype.value=cu,n.prototype.first=n.prototype.head,Pl&&(n.prototype[Pl]=au),n},kr=Er();ur._=kr,r=function(){return kr}.call(e,n,e,o),!(r!==ot&&(o.exports=r))}).call(this)}).call(e,function(){return this}(),n(76)(t))},function(t,e,n){function r(t){return o(t,i|a)}var o=n(117),i=1,a=4;t.exports=r},function(t,e,n){function r(t,e,n,S,T,C){var A,M=e&E,I=e&k,P=e&j;if(n&&(A=T?n(t,S,T,C):n(t)),void 0!==A)return A;if(!w(t))return t;var L=_(t);if(L){if(A=g(t),!M)return l(t,A)}else{var B=v(t),q=B==N||B==D;if(b(t))return c(t,M);if(B==R||B==O||q&&!T){if(A=I||q?{}:y(t),!M)return I?p(t,s(A,t)):f(t,u(A,t))}else{if(!Q[B])return T?t:{};A=m(t,B,r,M)}}C||(C=new o);var U=C.get(t);if(U)return U;C.set(t,A);var V=P?I?d:h:I?keysIn:x,F=L?void 0:V(t);return i(F||t,function(o,i){F&&(i=o,o=t[i]),a(A,i,r(o,e,n,i,t,C))}),A}var o=n(40),i=n(118),a=n(102),u=n(119),s=n(123),c=n(75),l=n(80),f=n(124),p=n(128),h=n(131),d=n(133),v=n(134),g=n(139),m=n(140),y=n(81),_=n(89),b=n(93),w=n(32),x=n(120),E=1,k=2,j=4,O="[object Arguments]",S="[object Array]",T="[object Boolean]",C="[object Date]",A="[object Error]",N="[object Function]",D="[object GeneratorFunction]",M="[object Map]",I="[object Number]",R="[object Object]",P="[object RegExp]",L="[object Set]",B="[object String]",q="[object Symbol]",U="[object WeakMap]",V="[object ArrayBuffer]",F="[object DataView]",z="[object Float32Array]",H="[object Float64Array]",W="[object Int8Array]",K="[object Int16Array]",$="[object Int32Array]",G="[object Uint8Array]",J="[object Uint8ClampedArray]",Y="[object Uint16Array]",X="[object Uint32Array]",Q={};Q[O]=Q[S]=Q[V]=Q[F]=Q[T]=Q[C]=Q[z]=Q[H]=Q[W]=Q[K]=Q[$]=Q[M]=Q[I]=Q[R]=Q[P]=Q[L]=Q[B]=Q[q]=Q[G]=Q[J]=Q[Y]=Q[X]=!0,Q[A]=Q[N]=Q[U]=!1,t.exports=r},function(t,e){function n(t,e){for(var n=-1,r=null==t?0:t.length;++np))return!1;var d=l.get(t);if(d&&l.get(e))return d==e;var v=-1,g=!0,m=n&s?new o:void 0;for(l.set(t,e),l.set(e,t);++v=e?t:e)),t}t.exports=n},function(t,e,n){function r(t){var e=o(t),n=e%1;return e===e?n?e-n:e:0}var o=n(196);t.exports=r},function(t,e,n){function r(t){if(!t)return 0===t?t:0;if(t=o(t),t===i||t===-i){var e=t<0?-1:1;return e*a}return t===t?t:0}var o=n(197),i=1/0,a=1.7976931348623157e308;t.exports=r},function(t,e,n){function r(t){if("number"==typeof t)return t;if(i(t))return a;if(o(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=o(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(u,"");var n=c.test(t);return n||l.test(t)?f(t.slice(2),n?2:8):s.test(t)?a:+t}var o=n(32),i=n(175),a=NaN,u=/^\s+|\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,l=/^0o[0-7]+$/i,f=parseInt;t.exports=r},function(t,e,n){function r(t){if(null==t)return!0;if(s(t)&&(u(t)||"string"==typeof t||"function"==typeof t.splice||c(t)||f(t)||a(t)))return!t.length;var e=i(t);if(e==p||e==h)return!t.size;if(l(t))return!o(t).length;for(var n in t)if(v.call(t,n))return!1;return!0}var o=n(121),i=n(134),a=n(86),u=n(89),s=n(91),c=n(93),l=n(85),f=n(96),p="[object Map]",h="[object Set]",d=Object.prototype,v=d.hasOwnProperty;t.exports=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e0&&(r=a.default.apply(void 0,[r].concat(o(n.map(function(e){return t(e)}))))),(0,s.default)(r)});e.default=v},function(t,e,n){function r(){var t=arguments.length;if(!t)return[];for(var e=Array(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return o(u(n)?a(n):[n],i(e,1))}var o=n(130),i=n(201),a=n(80),u=n(89);t.exports=r},function(t,e,n){function r(t,e,n,a,u){var s=-1,c=t.length;for(n||(n=i),u||(u=[]);++s0&&n(l)?e>1?r(l,e-1,n,a,u):o(u,l):a||(u[u.length]=l)}return u}var o=n(130),i=n(202);t.exports=r},function(t,e,n){function r(t){return a(t)||i(t)||!!(u&&t&&t[u])}var o=n(27),i=n(86),a=n(89),u=o?o.isConcatSpreadable:void 0;t.exports=r},function(t,e,n){function r(t,e){var n=u(t)?o:i;return n(t,a(e,3))}var o=n(126),i=n(204),a=n(155),u=n(89);t.exports=r},function(t,e,n){function r(t,e){var n=[];return o(t,function(t,r,o){e(t,r,o)&&n.push(t)}),n}var o=n(190);t.exports=r},function(t,e,n){function r(t){return null==t?[]:o(t,i(t))}var o=n(206),i=n(120);t.exports=r},function(t,e,n){function r(t,e){return o(e,function(e){return t[e]})}var o=n(181);t.exports=r},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){var n=e.lineNumber,r=e.tagName;return{line:n,message:t,tagName:r,formattedMessage:"Line "+n+" ("+r+") — "+t}}},function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.registerMJRule=void 0;var i=n(114),a=o(i),u=n(209),s=r(u),c=s;e.registerMJRule=function(t,e){return"function"!=typeof t||1!==t.length?(0,a.default)(!1,"Your rule must be a function and must have one parameter which is the element to validate"):void(e?c[e]=t:c[t.name]=t)};e.default=c},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(210);Object.keys(r).forEach(function(t){"default"!==t&&"__esModule"!==t&&Object.defineProperty(e,t,{enumerable:!0,get:function(){return r[t]}})});var o=n(217);Object.keys(o).forEach(function(t){"default"!==t&&"__esModule"!==t&&Object.defineProperty(e,t,{enumerable:!0,get:function(){return o[t]}})});var i=n(218);Object.keys(i).forEach(function(t){"default"!==t&&"__esModule"!==t&&Object.defineProperty(e,t,{enumerable:!0,get:function(){return i[t]}})})},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.validateAttribute=void 0;var o=n(4),i=n(200),a=r(i),u=n(120),s=r(u),c=n(211),l=r(c),f=n(203),p=r(f),h=n(207),d=r(h),v=["mj-class"];e.validateAttribute=function(t){var e=t.attributes,n=t.tagName,r=o.elements[n];if(r){var i=(0,a.default)((0,s.default)(r.defaultMJMLDefinition.attributes),v),u=(0,p.default)((0,s.default)(e),function(t){return!(0,l.default)(i,t)});if(0!=u.length)return(0,d.default)((u.length>1?"Attributes":"Attribute")+" "+u.join(", ")+" "+(u.length>1?"are illegal":"is illegal"),t)}}},function(t,e,n){function r(t,e,n,r){t=i(t)?t:s(t),n=n&&!r?u(n):0;var l=t.length;return n<0&&(n=c(l+n,0)),a(t)?n<=l&&t.indexOf(e,n)>-1:!!l&&o(t,e,n)>-1}var o=n(212),i=n(91),a=n(216),u=n(195),s=n(205),c=Math.max;t.exports=r},function(t,e,n){function r(t,e,n){return e===e?a(t,e,n):o(t,i,n)}var o=n(213),i=n(214),a=n(215);t.exports=r},function(t,e){function n(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i/]*)>([^]*?)","gmi")},M=["mj-class","mj-all"],I=function(t){var e=[].concat(M);(0,_.default)(o({},a.default,s.default),function(t,n){var r=t.tagName||n;e.push(r)});var n=(0,S.default)(e,t.replace(/\$/g,"$"));return(0,h.default)(i.endingTags,u.endingTags).forEach(function(t){n=n.replace(D(t),v.default.replaceContentByCdata(t))}),n},R=function t(e,n){if(!e)throw new c.NullElementError("Null element found in mjmlElementParser");var r=n.substr(0,e.startIndex).match(/\n/g),o=r?r.length+1:1,a=e.tagName.toLowerCase(),u=(0,j.default)(v.default.getAttributes(e),function(t){return decodeURIComponent(t)}),s={tagName:a,attributes:u,lineNumber:o};if(i.endingTags.indexOf(a)!==-1){var l=v.default.parseXML(e);s.content=(0,C.default)(l(a).html().trim())}else{var p=v.default.getChildren(e);s.children=p?(0,f.default)((0,m.default)(p,function(t){return t.tagName}).map(function(e){return t(e,n)})):[]}return s},P=function(t){return(0,E.default)((0,f.default)((0,m.default)(v.default.getChildren(t),function(t){return t.tagName})),function(t){var e=v.default.parseXML(t),n=function t(n){var r=(0,w.default)(u.endingTags,n.tagName.toLowerCase());return{attributes:(0,j.default)(v.default.getAttributes(n),function(t){return decodeURIComponent(t)}),children:r?null:(0,f.default)((0,m.default)((0,N.default)(n.childNodes),function(t){return t.tagName})).map(t),content:r?(0,C.default)(e(n.tagName.toLowerCase()).html().trim()):null,tagName:n.tagName.toLowerCase()}};return n(t)})},L=function(t){var e=I(t),n=void 0,r=void 0;try{var o=v.default.parseXML(e);n=o("mjml > mj-body"),r=o("mjml > mj-head"),n.length>0&&(n=n.children().get(0))}catch(t){throw new c.ParseError("Error while parsing the file")}if(!n||n.length<1)throw new c.EmptyMJMLError('No root "" or "" found in the file, or "" doesn\'t contain a child element.');return{tagName:"mjml",children:[{tagName:"mj-head",children:r&&r.length>0?P(r.get(0)):[]},{tagName:"mj-body",children:[R(n,e)]}]}};e.default=L},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.registerMJHeadElement=e.endingTags=void 0;var r=n(115),o=e.endingTags=[],i=(e.registerMJHeadElement=function(){for(var t=arguments.length,e=Array(t),n=0;n1)a=e[0],s=e[1],u=e[2];else{var c=e[0];a=c.name,s=c.handler,u=c.endingTag}u&&!(0,r.includes)(o,a)&&o.push(a),i[a]=s},{});e.default=i},function(t,e){function n(t){for(var e=-1,n=null==t?0:t.length,r=0,o=[];++e"+t+""))},a.getAttributes=function(t){var e={};return Array.prototype.slice.call(t.attributes).forEach(function(t){return e[t.name]=t.value}),e},a.getChildren=function(t){return t.children},a.replaceContentByCdata=function(t){return"<"+t+"$1>"},a.getHTML=function(t){var e=t()[0];return""+e.documentElement.outerHTML}}else{var c=n(226),l=c.load("",{decodeEntities:!1}),f=function(t,e){return l=l.load(t,e),function(t){return t?l(t):l}};a.parseHTML=function(t){return f(t,{xmlMode:!1,decodeEntities:!1})},a.parseXML=function(t){return f(t,{xmlMode:!0,decodeEntities:!1,withStartIndices:!0})},a.getAttributes=function(t){return t.attribs||{}},a.getChildren=function(t){return t.childNodes},a.replaceContentByCdata=function(t){return"<"+t+"$1>"},a.getHTML=function(t){return t().html()}}e.default=a},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e.default=function(){return"object"===("undefined"==typeof window?"undefined":n(window))&&"object"===("undefined"==typeof document?"undefined":n(document))&&9===document.nodeType&&!(window.process&&window.process.type)}},function(t,e,n){var r,o;/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +!function(e,n){"use strict";"object"==typeof t&&"object"==typeof t.exports?t.exports=e.document?n(e,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return n(t)}:n(e)}("undefined"!=typeof window?window:this,function(n,i){"use strict";function a(t,e){e=e||at;var n=e.createElement("script");n.text=t,e.head.appendChild(n).parentNode.removeChild(n)}function u(t){var e=!!t&&"length"in t&&t.length,n=_t.type(t);return"function"!==n&&!_t.isWindow(t)&&("array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function s(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}function c(t,e,n){return _t.isFunction(e)?_t.grep(t,function(t,r){return!!e.call(t,r,t)!==n}):e.nodeType?_t.grep(t,function(t){return t===e!==n}):"string"!=typeof e?_t.grep(t,function(t){return ft.call(e,t)>-1!==n}):Ct.test(e)?_t.filter(e,t,n):(e=_t.filter(e,t),_t.grep(t,function(t){return ft.call(e,t)>-1!==n&&1===t.nodeType}))}function l(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}function f(t){var e={};return _t.each(t.match(Rt)||[],function(t,n){e[n]=!0}),e}function p(t){return t}function h(t){throw t}function d(t,e,n,r){var o;try{t&&_t.isFunction(o=t.promise)?o.call(t).done(e).fail(n):t&&_t.isFunction(o=t.then)?o.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}function v(){at.removeEventListener("DOMContentLoaded",v),n.removeEventListener("load",v),_t.ready()}function g(){this.expando=_t.expando+g.uid++}function m(t){return"true"===t||"false"!==t&&("null"===t?null:t===+t+""?+t:Ft.test(t)?JSON.parse(t):t)}function y(t,e,n){var r;if(void 0===n&&1===t.nodeType)if(r="data-"+e.replace(zt,"-$&").toLowerCase(),n=t.getAttribute(r),"string"==typeof n){try{n=m(n)}catch(t){}Vt.set(t,e,n)}else n=void 0;return n}function _(t,e,n,r){var o,i=1,a=20,u=r?function(){return r.cur()}:function(){return _t.css(t,e,"")},s=u(),c=n&&n[3]||(_t.cssNumber[e]?"":"px"),l=(_t.cssNumber[e]||"px"!==c&&+s)&&Wt.exec(_t.css(t,e));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+s||1;do i=i||".5",l/=i,_t.style(t,e,l+c);while(i!==(i=u()/s)&&1!==i&&--a)}return n&&(l=+l||+s||0,o=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=o)),o}function b(t){var e,n=t.ownerDocument,r=t.nodeName,o=Jt[r];return o?o:(e=n.body.appendChild(n.createElement(r)),o=_t.css(e,"display"),e.parentNode.removeChild(e),"none"===o&&(o="block"),Jt[r]=o,o)}function w(t,e){for(var n,r,o=[],i=0,a=t.length;i-1)o&&o.push(i);else if(c=_t.contains(i.ownerDocument,i),a=x(f.appendChild(i),"script"),c&&E(a),n)for(l=0;i=a[l++];)Qt.test(i.type||"")&&n.push(i);return f}function j(){return!0}function O(){return!1}function S(){try{return at.activeElement}catch(t){}}function T(t,e,n,r,o,i){var a,u;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=void 0);for(u in e)T(t,u,n,r,e[u],i);return t}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&("string"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),o===!1)o=O;else if(!o)return t;return 1===i&&(a=o,o=function(t){return _t().off(t),a.apply(this,arguments)},o.guid=a.guid||(a.guid=_t.guid++)),t.each(function(){_t.event.add(this,e,o,r,n)})}function C(t,e){return s(t,"table")&&s(11!==e.nodeType?e:e.firstChild,"tr")?_t(">tbody",t)[0]||t:t}function A(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function N(t){var e=se.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function D(t,e){var n,r,o,i,a,u,s,c;if(1===e.nodeType){if(Ut.hasData(t)&&(i=Ut.access(t),a=Ut.set(e,i),c=i.events)){delete a.handle,a.events={};for(o in c)for(n=0,r=c[o].length;n1&&"string"==typeof d&&!mt.checkClone&&ue.test(d))return t.each(function(o){var i=t.eq(o);v&&(e[0]=d.call(this,o,i.html())),I(i,e,n,r)});if(p&&(o=k(e,t[0].ownerDocument,!1,t,r),i=o.firstChild,1===o.childNodes.length&&(o=i),i||r)){for(u=_t.map(x(o,"script"),A),s=u.length;f=0&&nE.cacheLength&&delete t[e.shift()],t[n+" "]=r}var e=[];return t}function r(t){return t[U]=!0,t}function o(t){var e=M.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function i(t,e){for(var n=t.split("|"),r=n.length;r--;)E.attrHandle[n[r]]=e}function a(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function u(t){return function(e){var n=e.nodeName.toLowerCase();return"input"===n&&e.type===t}}function s(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function c(t){return function(e){return"form"in e?e.parentNode&&e.disabled===!1?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&kt(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function l(t){return r(function(e){return e=+e,r(function(n,r){for(var o,i=t([],n.length,e),a=i.length;a--;)n[o=i[a]]&&(n[o]=!(r[o]=n[o]))})})}function f(t){return t&&"undefined"!=typeof t.getElementsByTagName&&t}function p(){}function h(t){for(var e=0,n=t.length,r="";e1?function(e,n,r){for(var o=t.length;o--;)if(!t[o](e,n,r))return!1;return!0}:t[0]}function g(t,n,r){for(var o=0,i=n.length;o-1&&(r[c]=!(a[c]=f))}}else _=m(_===a?_.splice(d,_.length):_),i?i(null,a,_,s):Q.apply(a,_)})}function _(t){for(var e,n,r,o=t.length,i=E.relative[t[0].type],a=i||E.relative[" "],u=i?1:0,s=d(function(t){return t===e},a,!0),c=d(function(t){return tt(e,t)>-1},a,!0),l=[function(t,n,r){var o=!i&&(r||n!==C)||((e=n).nodeType?s(t,n,r):c(t,n,r));return e=null,o}];u1&&v(l),u>1&&h(t.slice(0,u-1).concat({value:" "===t[u-2].type?"*":""})).replace(ut,"$1"),n,u0,i=t.length>0,a=function(r,a,u,s,c){var l,f,p,h=0,d="0",v=r&&[],g=[],y=C,_=r||i&&E.find.TAG("*",c),b=F+=null==y?1:Math.random()||.1,w=_.length;for(c&&(C=a===M||a||c);d!==w&&null!=(l=_[d]);d++){if(i&&l){for(f=0,a||l.ownerDocument===M||(D(l),u=!R);p=t[f++];)if(p(l,a||M,u)){s.push(l);break}c&&(F=b)}o&&((l=!p&&l)&&h--,r&&v.push(l))}if(h+=d,o&&d!==h){for(f=0;p=n[f++];)p(v,g,a,u);if(r){if(h>0)for(;d--;)v[d]||g[d]||(g[d]=Y.call(s));g=m(g)}Q.apply(s,g),c&&!r&&g.length>0&&h+n.length>1&&e.uniqueSort(s)}return c&&(F=b,C=y),v};return o?r(a):a}var w,x,E,k,j,O,S,T,C,A,N,D,M,I,R,P,L,B,q,U="sizzle"+1*new Date,V=t.document,F=0,z=0,H=n(),W=n(),K=n(),$=function(t,e){return t===e&&(N=!0),0},G={}.hasOwnProperty,J=[],Y=J.pop,X=J.push,Q=J.push,Z=J.slice,tt=function(t,e){for(var n=0,r=t.length;n+~]|"+nt+")"+nt+"*"),lt=new RegExp("="+nt+"*([^\\]'\"]*?)"+nt+"*\\]","g"),ft=new RegExp(it),pt=new RegExp("^"+rt+"$"),ht={ID:new RegExp("^#("+rt+")"),CLASS:new RegExp("^\\.("+rt+")"),TAG:new RegExp("^("+rt+"|[*])"),ATTR:new RegExp("^"+ot),PSEUDO:new RegExp("^"+it),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+nt+"*(even|odd|(([+-]|)(\\d*)n|)"+nt+"*(?:([+-]|)"+nt+"*(\\d+)|))"+nt+"*\\)|)","i"),bool:new RegExp("^(?:"+et+")$","i"),needsContext:new RegExp("^"+nt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+nt+"*((?:-\\d)?\\d*)"+nt+"*\\)|)(?=[^-]|$)","i")},dt=/^(?:input|select|textarea|button)$/i,vt=/^h\d$/i,gt=/^[^{]+\{\s*\[native \w/,mt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,yt=/[+~]/,_t=new RegExp("\\\\([\\da-f]{1,6}"+nt+"?|("+nt+")|.)","ig"),bt=function(t,e,n){var r="0x"+e-65536;return r!==r||n?e:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},wt=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,xt=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},Et=function(){D()},kt=d(function(t){return t.disabled===!0&&("form"in t||"label"in t)},{dir:"parentNode",next:"legend"});try{Q.apply(J=Z.call(V.childNodes),V.childNodes),J[V.childNodes.length].nodeType}catch(t){Q={apply:J.length?function(t,e){X.apply(t,Z.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}x=e.support={},j=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},D=e.setDocument=function(t){var e,n,r=t?t.ownerDocument||t:V;return r!==M&&9===r.nodeType&&r.documentElement?(M=r,I=M.documentElement,R=!j(M),V!==M&&(n=M.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Et,!1):n.attachEvent&&n.attachEvent("onunload",Et)),x.attributes=o(function(t){return t.className="i",!t.getAttribute("className")}),x.getElementsByTagName=o(function(t){return t.appendChild(M.createComment("")),!t.getElementsByTagName("*").length}),x.getElementsByClassName=gt.test(M.getElementsByClassName),x.getById=o(function(t){return I.appendChild(t).id=U,!M.getElementsByName||!M.getElementsByName(U).length}),x.getById?(E.filter.ID=function(t){var e=t.replace(_t,bt);return function(t){return t.getAttribute("id")===e}},E.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&R){var n=e.getElementById(t);return n?[n]:[]}}):(E.filter.ID=function(t){var e=t.replace(_t,bt);return function(t){var n="undefined"!=typeof t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}},E.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&R){var n,r,o,i=e.getElementById(t);if(i){if(n=i.getAttributeNode("id"),n&&n.value===t)return[i];for(o=e.getElementsByName(t),r=0;i=o[r++];)if(n=i.getAttributeNode("id"),n&&n.value===t)return[i]}return[]}}),E.find.TAG=x.getElementsByTagName?function(t,e){return"undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t):x.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],o=0,i=e.getElementsByTagName(t);if("*"===t){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},E.find.CLASS=x.getElementsByClassName&&function(t,e){if("undefined"!=typeof e.getElementsByClassName&&R)return e.getElementsByClassName(t)},L=[],P=[],(x.qsa=gt.test(M.querySelectorAll))&&(o(function(t){I.appendChild(t).innerHTML="",t.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+nt+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||P.push("\\["+nt+"*(?:value|"+et+")"),t.querySelectorAll("[id~="+U+"-]").length||P.push("~="),t.querySelectorAll(":checked").length||P.push(":checked"),t.querySelectorAll("a#"+U+"+*").length||P.push(".#.+[+~]")}),o(function(t){t.innerHTML="";var e=M.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&P.push("name"+nt+"*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&P.push(":enabled",":disabled"),I.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&P.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),P.push(",.*:")})),(x.matchesSelector=gt.test(B=I.matches||I.webkitMatchesSelector||I.mozMatchesSelector||I.oMatchesSelector||I.msMatchesSelector))&&o(function(t){x.disconnectedMatch=B.call(t,"*"),B.call(t,"[s!='']:x"),L.push("!=",it)}),P=P.length&&new RegExp(P.join("|")),L=L.length&&new RegExp(L.join("|")),e=gt.test(I.compareDocumentPosition),q=e||gt.test(I.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},$=e?function(t,e){if(t===e)return N=!0,0;var n=!t.compareDocumentPosition-!e.compareDocumentPosition;return n?n:(n=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&n||!x.sortDetached&&e.compareDocumentPosition(t)===n?t===M||t.ownerDocument===V&&q(V,t)?-1:e===M||e.ownerDocument===V&&q(V,e)?1:A?tt(A,t)-tt(A,e):0:4&n?-1:1)}:function(t,e){if(t===e)return N=!0,0;var n,r=0,o=t.parentNode,i=e.parentNode,u=[t],s=[e];if(!o||!i)return t===M?-1:e===M?1:o?-1:i?1:A?tt(A,t)-tt(A,e):0;if(o===i)return a(t,e);for(n=t;n=n.parentNode;)u.unshift(n);for(n=e;n=n.parentNode;)s.unshift(n);for(;u[r]===s[r];)r++;return r?a(u[r],s[r]):u[r]===V?-1:s[r]===V?1:0},M):M},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==M&&D(t),n=n.replace(lt,"='$1']"),x.matchesSelector&&R&&!K[n+" "]&&(!L||!L.test(n))&&(!P||!P.test(n)))try{var r=B.call(t,n);if(r||x.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){}return e(n,M,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==M&&D(t),q(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==M&&D(t);var n=E.attrHandle[e.toLowerCase()],r=n&&G.call(E.attrHandle,e.toLowerCase())?n(t,e,!R):void 0;return void 0!==r?r:x.attributes||!R?t.getAttribute(e):(r=t.getAttributeNode(e))&&r.specified?r.value:null},e.escape=function(t){return(t+"").replace(wt,xt)},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,n=[],r=0,o=0;if(N=!x.detectDuplicates,A=!x.sortStable&&t.slice(0),t.sort($),N){for(;e=t[o++];)e===t[o]&&(r=n.push(o));for(;r--;)t.splice(n[r],1)}return A=null,t},k=e.getText=function(t){var e,n="",r=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=k(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[r++];)n+=k(e);return n},E=e.selectors={cacheLength:50,createPseudo:r,match:ht,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(_t,bt),t[3]=(t[3]||t[4]||t[5]||"").replace(_t,bt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return ht.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&ft.test(n)&&(e=O(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(_t,bt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=H[t+" "];return e||(e=new RegExp("(^|"+nt+")"+t+"("+nt+"|$)"))&&H(t,function(t){return e.test("string"==typeof t.className&&t.className||"undefined"!=typeof t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(o){var i=e.attr(o,t);return null==i?"!="===n:!n||(i+="","="===n?i===r:"!="===n?i!==r:"^="===n?r&&0===i.indexOf(r):"*="===n?r&&i.indexOf(r)>-1:"$="===n?r&&i.slice(-r.length)===r:"~="===n?(" "+i.replace(at," ")+" ").indexOf(r)>-1:"|="===n&&(i===r||i.slice(0,r.length+1)===r+"-"))}},CHILD:function(t,e,n,r,o){var i="nth"!==t.slice(0,3),a="last"!==t.slice(-4),u="of-type"===e;return 1===r&&0===o?function(t){return!!t.parentNode}:function(e,n,s){var c,l,f,p,h,d,v=i!==a?"nextSibling":"previousSibling",g=e.parentNode,m=u&&e.nodeName.toLowerCase(),y=!s&&!u,_=!1;if(g){if(i){for(;v;){for(p=e;p=p[v];)if(u?p.nodeName.toLowerCase()===m:1===p.nodeType)return!1;d=v="only"===t&&!d&&"nextSibling"}return!0}if(d=[a?g.firstChild:g.lastChild],a&&y){for(p=g,f=p[U]||(p[U]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[t]||[],h=c[0]===F&&c[1],_=h&&c[2],p=h&&g.childNodes[h];p=++h&&p&&p[v]||(_=h=0)||d.pop();)if(1===p.nodeType&&++_&&p===e){l[t]=[F,h,_];break}}else if(y&&(p=e,f=p[U]||(p[U]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[t]||[],h=c[0]===F&&c[1],_=h),_===!1)for(;(p=++h&&p&&p[v]||(_=h=0)||d.pop())&&((u?p.nodeName.toLowerCase()!==m:1!==p.nodeType)||!++_||(y&&(f=p[U]||(p[U]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),l[t]=[F,_]),p!==e)););return _-=o,_===r||_%r===0&&_/r>=0}}},PSEUDO:function(t,n){var o,i=E.pseudos[t]||E.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return i[U]?i(n):i.length>1?(o=[t,t,"",n],E.setFilters.hasOwnProperty(t.toLowerCase())?r(function(t,e){for(var r,o=i(t,n),a=o.length;a--;)r=tt(t,o[a]),t[r]=!(e[r]=o[a])}):function(t){return i(t,0,o)}):i}},pseudos:{not:r(function(t){var e=[],n=[],o=S(t.replace(ut,"$1"));return o[U]?r(function(t,e,n,r){for(var i,a=o(t,null,r,[]),u=t.length;u--;)(i=a[u])&&(t[u]=!(e[u]=i))}):function(t,r,i){return e[0]=t,o(e,null,i,n),e[0]=null,!n.pop()}}),has:r(function(t){return function(n){return e(t,n).length>0}}),contains:r(function(t){return t=t.replace(_t,bt),function(e){return(e.textContent||e.innerText||k(e)).indexOf(t)>-1}}),lang:r(function(t){return pt.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(_t,bt).toLowerCase(),function(e){var n;do if(n=R?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===I},focus:function(t){return t===M.activeElement&&(!M.hasFocus||M.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:c(!1),disabled:c(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!E.pseudos.empty(t)},header:function(t){return vt.test(t.nodeName)},input:function(t){return dt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:l(function(){return[0]}),last:l(function(t,e){return[e-1]}),eq:l(function(t,e,n){return[n<0?n+e:n]}),even:l(function(t,e){for(var n=0;n=0;)t.push(r);return t}),gt:l(function(t,e,n){for(var r=n<0?n+e:n;++r2&&"ID"===(a=i[0]).type&&9===e.nodeType&&R&&E.relative[i[1].type]){if(e=(E.find.ID(a.matches[0].replace(_t,bt),e)||[])[0],!e)return n;c&&(e=e.parentNode),t=t.slice(i.shift().value.length)}for(o=ht.needsContext.test(t)?0:i.length;o--&&(a=i[o],!E.relative[u=a.type]);)if((s=E.find[u])&&(r=s(a.matches[0].replace(_t,bt),yt.test(i[0].type)&&f(e.parentNode)||e))){if(i.splice(o,1),t=r.length&&h(i),!t)return Q.apply(n,r),n;break}}return(c||S(t,l))(r,e,!R,n,!e||yt.test(t)&&f(e.parentNode)||e),n},x.sortStable=U.split("").sort($).join("")===U,x.detectDuplicates=!!N,D(),x.sortDetached=o(function(t){return 1&t.compareDocumentPosition(M.createElement("fieldset"))}),o(function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")})||i("type|href|height|width",function(t,e,n){if(!n)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),x.attributes&&o(function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||i("value",function(t,e,n){if(!n&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),o(function(t){return null==t.getAttribute("disabled")})||i(et,function(t,e,n){var r;if(!n)return t[e]===!0?e.toLowerCase():(r=t.getAttributeNode(e))&&r.specified?r.value:null}),e}(n);_t.find=kt,_t.expr=kt.selectors,_t.expr[":"]=_t.expr.pseudos,_t.uniqueSort=_t.unique=kt.uniqueSort,_t.text=kt.getText,_t.isXMLDoc=kt.isXML,_t.contains=kt.contains,_t.escapeSelector=kt.escape;var jt=function(t,e,n){for(var r=[],o=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(o&&_t(t).is(n))break;r.push(t)}return r},Ot=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},St=_t.expr.match.needsContext,Tt=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,Ct=/^.[^:#\[\.,]*$/;_t.filter=function(t,e,n){var r=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===r.nodeType?_t.find.matchesSelector(r,t)?[r]:[]:_t.find.matches(t,_t.grep(e,function(t){return 1===t.nodeType}))},_t.fn.extend({find:function(t){var e,n,r=this.length,o=this;if("string"!=typeof t)return this.pushStack(_t(t).filter(function(){for(e=0;e1?_t.uniqueSort(n):n},filter:function(t){return this.pushStack(c(this,t||[],!1))},not:function(t){return this.pushStack(c(this,t||[],!0))},is:function(t){return!!c(this,"string"==typeof t&&St.test(t)?_t(t):t||[],!1).length}});var At,Nt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Dt=_t.fn.init=function(t,e,n){var r,o;if(!t)return this;if(n=n||At,"string"==typeof t){if(r="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:Nt.exec(t),!r||!r[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(r[1]){if(e=e instanceof _t?e[0]:e,_t.merge(this,_t.parseHTML(r[1],e&&e.nodeType?e.ownerDocument||e:at,!0)),Tt.test(r[1])&&_t.isPlainObject(e))for(r in e)_t.isFunction(this[r])?this[r](e[r]):this.attr(r,e[r]);return this}return o=at.getElementById(r[2]),o&&(this[0]=o,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):_t.isFunction(t)?void 0!==n.ready?n.ready(t):t(_t):_t.makeArray(t,this)};Dt.prototype=_t.fn,At=_t(at);var Mt=/^(?:parents|prev(?:Until|All))/,It={children:!0,contents:!0,next:!0,prev:!0};_t.fn.extend({has:function(t){var e=_t(t,this),n=e.length;return this.filter(function(){for(var t=0;t-1:1===n.nodeType&&_t.find.matchesSelector(n,t))){i.push(n);break}return this.pushStack(i.length>1?_t.uniqueSort(i):i)},index:function(t){return t?"string"==typeof t?ft.call(_t(t),this[0]):ft.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(_t.uniqueSort(_t.merge(this.get(),_t(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),_t.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return jt(t,"parentNode")},parentsUntil:function(t,e,n){return jt(t,"parentNode",n)},next:function(t){return l(t,"nextSibling")},prev:function(t){return l(t,"previousSibling")},nextAll:function(t){return jt(t,"nextSibling")},prevAll:function(t){return jt(t,"previousSibling")},nextUntil:function(t,e,n){return jt(t,"nextSibling",n)},prevUntil:function(t,e,n){return jt(t,"previousSibling",n)},siblings:function(t){return Ot((t.parentNode||{}).firstChild,t)},children:function(t){return Ot(t.firstChild)},contents:function(t){return s(t,"iframe")?t.contentDocument:(s(t,"template")&&(t=t.content||t),_t.merge([],t.childNodes))}},function(t,e){_t.fn[t]=function(n,r){var o=_t.map(this,e,n);return"Until"!==t.slice(-5)&&(r=n),r&&"string"==typeof r&&(o=_t.filter(r,o)),this.length>1&&(It[t]||_t.uniqueSort(o),Mt.test(t)&&o.reverse()),this.pushStack(o)}});var Rt=/[^\x20\t\r\n\f]+/g;_t.Callbacks=function(t){t="string"==typeof t?f(t):_t.extend({},t);var e,n,r,o,i=[],a=[],u=-1,s=function(){for(o=o||t.once,r=e=!0;a.length;u=-1)for(n=a.shift();++u-1;)i.splice(n,1),n<=u&&u--}),this},has:function(t){return t?_t.inArray(t,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return o=a=[],i=n="",this},disabled:function(){return!i},lock:function(){return o=a=[],n||e||(i=n=""),this},locked:function(){return!!o},fireWith:function(t,n){return o||(n=n||[],n=[t,n.slice?n.slice():n],a.push(n),e||s()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},_t.extend({Deferred:function(t){var e=[["notify","progress",_t.Callbacks("memory"),_t.Callbacks("memory"),2],["resolve","done",_t.Callbacks("once memory"),_t.Callbacks("once memory"),0,"resolved"],["reject","fail",_t.Callbacks("once memory"),_t.Callbacks("once memory"),1,"rejected"]],r="pending",o={state:function(){return r},always:function(){return i.done(arguments).fail(arguments),this},catch:function(t){return o.then(null,t)},pipe:function(){var t=arguments;return _t.Deferred(function(n){_t.each(e,function(e,r){var o=_t.isFunction(t[r[4]])&&t[r[4]];i[r[1]](function(){var t=o&&o.apply(this,arguments);t&&_t.isFunction(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,o?[t]:arguments)})}),t=null}).promise()},then:function(t,r,o){function i(t,e,r,o){return function(){var u=this,s=arguments,c=function(){var n,c;if(!(t=a&&(r!==h&&(u=void 0,s=[n]),e.rejectWith(u,s))}};t?l():(_t.Deferred.getStackHook&&(l.stackTrace=_t.Deferred.getStackHook()),n.setTimeout(l))}}var a=0;return _t.Deferred(function(n){e[0][3].add(i(0,n,_t.isFunction(o)?o:p,n.notifyWith)),e[1][3].add(i(0,n,_t.isFunction(t)?t:p)),e[2][3].add(i(0,n,_t.isFunction(r)?r:h))}).promise()},promise:function(t){return null!=t?_t.extend(t,o):o}},i={};return _t.each(e,function(t,n){var a=n[2],u=n[5];o[n[1]]=a.add,u&&a.add(function(){r=u},e[3-t][2].disable,e[0][2].lock),a.add(n[3].fire),i[n[0]]=function(){return i[n[0]+"With"](this===i?void 0:this,arguments),this},i[n[0]+"With"]=a.fireWith}),o.promise(i),t&&t.call(i,i),i},when:function(t){var e=arguments.length,n=e,r=Array(n),o=st.call(arguments),i=_t.Deferred(),a=function(t){return function(n){r[t]=this,o[t]=arguments.length>1?st.call(arguments):n,--e||i.resolveWith(r,o)}};if(e<=1&&(d(t,i.done(a(n)).resolve,i.reject,!e),"pending"===i.state()||_t.isFunction(o[n]&&o[n].then)))return i.then();for(;n--;)d(o[n],a(n),i.reject);return i.promise()}});var Pt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;_t.Deferred.exceptionHook=function(t,e){n.console&&n.console.warn&&t&&Pt.test(t.name)&&n.console.warn("jQuery.Deferred exception: "+t.message,t.stack,e)},_t.readyException=function(t){n.setTimeout(function(){throw t})};var Lt=_t.Deferred();_t.fn.ready=function(t){return Lt.then(t).catch(function(t){_t.readyException(t)}),this},_t.extend({isReady:!1,readyWait:1,ready:function(t){(t===!0?--_t.readyWait:_t.isReady)||(_t.isReady=!0,t!==!0&&--_t.readyWait>0||Lt.resolveWith(at,[_t]))}}),_t.ready.then=Lt.then,"complete"===at.readyState||"loading"!==at.readyState&&!at.documentElement.doScroll?n.setTimeout(_t.ready):(at.addEventListener("DOMContentLoaded",v),n.addEventListener("load",v));var Bt=function(t,e,n,r,o,i,a){var u=0,s=t.length,c=null==n;if("object"===_t.type(n)){o=!0;for(u in n)Bt(t,e,u,n[u],!0,i,a)}else if(void 0!==r&&(o=!0,_t.isFunction(r)||(a=!0),c&&(a?(e.call(t,r),e=null):(c=e,e=function(t,e,n){return c.call(_t(t),n)})),e))for(;u1,null,!0)},removeData:function(t){return this.each(function(){Vt.remove(this,t)})}}),_t.extend({queue:function(t,e,n){var r;if(t)return e=(e||"fx")+"queue",r=Ut.get(t,e),n&&(!r||Array.isArray(n)?r=Ut.access(t,e,_t.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||"fx";var n=_t.queue(t,e),r=n.length,o=n.shift(),i=_t._queueHooks(t,e),a=function(){_t.dequeue(t,e)};"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===e&&n.unshift("inprogress"),delete i.stop,o.call(t,a,i)),!r&&i&&i.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return Ut.get(t,n)||Ut.access(t,n,{empty:_t.Callbacks("once memory").add(function(){Ut.remove(t,[e+"queue",n])})})}}),_t.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length\x20\t\r\n\f]+)/i,Qt=/^$|\/(?:java|ecma)script/i,Zt={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};Zt.optgroup=Zt.option,Zt.tbody=Zt.tfoot=Zt.colgroup=Zt.caption=Zt.thead, +Zt.th=Zt.td;var te=/<|&#?\w+;/;!function(){var t=at.createDocumentFragment(),e=t.appendChild(at.createElement("div")),n=at.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),e.appendChild(n),mt.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",mt.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var ee=at.documentElement,ne=/^key/,re=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,oe=/^([^.]*)(?:\.(.+)|)/;_t.event={global:{},add:function(t,e,n,r,o){var i,a,u,s,c,l,f,p,h,d,v,g=Ut.get(t);if(g)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&_t.find.matchesSelector(ee,o),n.guid||(n.guid=_t.guid++),(s=g.events)||(s=g.events={}),(a=g.handle)||(a=g.handle=function(e){return"undefined"!=typeof _t&&_t.event.triggered!==e.type?_t.event.dispatch.apply(t,arguments):void 0}),e=(e||"").match(Rt)||[""],c=e.length;c--;)u=oe.exec(e[c])||[],h=v=u[1],d=(u[2]||"").split(".").sort(),h&&(f=_t.event.special[h]||{},h=(o?f.delegateType:f.bindType)||h,f=_t.event.special[h]||{},l=_t.extend({type:h,origType:v,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&_t.expr.match.needsContext.test(o),namespace:d.join(".")},i),(p=s[h])||(p=s[h]=[],p.delegateCount=0,f.setup&&f.setup.call(t,r,d,a)!==!1||t.addEventListener&&t.addEventListener(h,a)),f.add&&(f.add.call(t,l),l.handler.guid||(l.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,l):p.push(l),_t.event.global[h]=!0)},remove:function(t,e,n,r,o){var i,a,u,s,c,l,f,p,h,d,v,g=Ut.hasData(t)&&Ut.get(t);if(g&&(s=g.events)){for(e=(e||"").match(Rt)||[""],c=e.length;c--;)if(u=oe.exec(e[c])||[],h=v=u[1],d=(u[2]||"").split(".").sort(),h){for(f=_t.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=s[h]||[],u=u[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=i=p.length;i--;)l=p[i],!o&&v!==l.origType||n&&n.guid!==l.guid||u&&!u.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(i,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(t,l));a&&!p.length&&(f.teardown&&f.teardown.call(t,d,g.handle)!==!1||_t.removeEvent(t,h,g.handle),delete s[h])}else for(h in s)_t.event.remove(t,h+e[c],n,r,!0);_t.isEmptyObject(s)&&Ut.remove(t,"handle events")}},dispatch:function(t){var e,n,r,o,i,a,u=_t.event.fix(t),s=new Array(arguments.length),c=(Ut.get(this,"events")||{})[u.type]||[],l=_t.event.special[u.type]||{};for(s[0]=u,e=1;e=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==t.type||c.disabled!==!0)){for(i=[],a={},n=0;n-1:_t.find(o,this,null,[c]).length),a[o]&&i.push(r);i.length&&u.push({elem:c,handlers:i})}return c=this,s\x20\t\r\n\f]*)[^>]*)\/>/gi,ae=/\s*$/g;_t.extend({htmlPrefilter:function(t){return t.replace(ie,"<$1>")},clone:function(t,e,n){var r,o,i,a,u=t.cloneNode(!0),s=_t.contains(t.ownerDocument,t);if(!(mt.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||_t.isXMLDoc(t)))for(a=x(u),i=x(t),r=0,o=i.length;r0&&E(a,!s&&x(t,"script")),u},cleanData:function(t){for(var e,n,r,o=_t.event.special,i=0;void 0!==(n=t[i]);i++)if(qt(n)){if(e=n[Ut.expando]){if(e.events)for(r in e.events)o[r]?_t.event.remove(n,r):_t.removeEvent(n,r,e.handle);n[Ut.expando]=void 0}n[Vt.expando]&&(n[Vt.expando]=void 0)}}}),_t.fn.extend({detach:function(t){return R(this,t,!0)},remove:function(t){return R(this,t)},text:function(t){return Bt(this,function(t){return void 0===t?_t.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return I(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=C(this,t);e.appendChild(t)}})},prepend:function(){return I(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=C(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return I(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return I(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(_t.cleanData(x(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return _t.clone(this,t,e)})},html:function(t){return Bt(this,function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!ae.test(t)&&!Zt[(Xt.exec(t)||["",""])[1].toLowerCase()]){t=_t.htmlPrefilter(t);try{for(;n1)}}),_t.Tween=z,z.prototype={constructor:z,init:function(t,e,n,r,o,i){this.elem=t,this.prop=n,this.easing=o||_t.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=r,this.unit=i||(_t.cssNumber[n]?"":"px")},cur:function(){var t=z.propHooks[this.prop];return t&&t.get?t.get(this):z.propHooks._default.get(this)},run:function(t){var e,n=z.propHooks[this.prop];return this.options.duration?this.pos=e=_t.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):z.propHooks._default.set(this),this}},z.prototype.init.prototype=z.prototype,z.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=_t.css(t.elem,t.prop,""),e&&"auto"!==e?e:0)},set:function(t){_t.fx.step[t.prop]?_t.fx.step[t.prop](t):1!==t.elem.nodeType||null==t.elem.style[_t.cssProps[t.prop]]&&!_t.cssHooks[t.prop]?t.elem[t.prop]=t.now:_t.style(t.elem,t.prop,t.now+t.unit)}}},z.propHooks.scrollTop=z.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},_t.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},_t.fx=z.prototype.init,_t.fx.step={};var _e,be,we=/^(?:toggle|show|hide)$/,xe=/queueHooks$/;_t.Animation=_t.extend(Y,{tweeners:{"*":[function(t,e){var n=this.createTween(t,e);return _(n.elem,t,Wt.exec(e),n),n}]},tweener:function(t,e){_t.isFunction(t)?(e=t,t=["*"]):t=t.match(Rt);for(var n,r=0,o=t.length;r1)},removeAttr:function(t){return this.each(function(){_t.removeAttr(this,t)})}}),_t.extend({attr:function(t,e,n){var r,o,i=t.nodeType;if(3!==i&&8!==i&&2!==i)return"undefined"==typeof t.getAttribute?_t.prop(t,e,n):(1===i&&_t.isXMLDoc(t)||(o=_t.attrHooks[e.toLowerCase()]||(_t.expr.match.bool.test(e)?Ee:void 0)),void 0!==n?null===n?void _t.removeAttr(t,e):o&&"set"in o&&void 0!==(r=o.set(t,n,e))?r:(t.setAttribute(e,n+""),n):o&&"get"in o&&null!==(r=o.get(t,e))?r:(r=_t.find.attr(t,e),null==r?void 0:r))},attrHooks:{type:{set:function(t,e){if(!mt.radioValue&&"radio"===e&&s(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,r=0,o=e&&e.match(Rt);if(o&&1===t.nodeType)for(;n=o[r++];)t.removeAttribute(n)}}),Ee={set:function(t,e,n){return e===!1?_t.removeAttr(t,n):t.setAttribute(n,n),n}},_t.each(_t.expr.match.bool.source.match(/\w+/g),function(t,e){var n=ke[e]||_t.find.attr;ke[e]=function(t,e,r){var o,i,a=e.toLowerCase();return r||(i=ke[a],ke[a]=o,o=null!=n(t,e,r)?a:null,ke[a]=i),o}});var je=/^(?:input|select|textarea|button)$/i,Oe=/^(?:a|area)$/i;_t.fn.extend({prop:function(t,e){return Bt(this,_t.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[_t.propFix[t]||t]})}}),_t.extend({prop:function(t,e,n){var r,o,i=t.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&_t.isXMLDoc(t)||(e=_t.propFix[e]||e,o=_t.propHooks[e]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(t,n,e))?r:t[e]=n:o&&"get"in o&&null!==(r=o.get(t,e))?r:t[e]},propHooks:{tabIndex:{get:function(t){var e=_t.find.attr(t,"tabindex");return e?parseInt(e,10):je.test(t.nodeName)||Oe.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),mt.optSelected||(_t.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),_t.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){_t.propFix[this.toLowerCase()]=this}),_t.fn.extend({addClass:function(t){var e,n,r,o,i,a,u,s=0;if(_t.isFunction(t))return this.each(function(e){_t(this).addClass(t.call(this,e,Q(this)))});if("string"==typeof t&&t)for(e=t.match(Rt)||[];n=this[s++];)if(o=Q(n),r=1===n.nodeType&&" "+X(o)+" "){for(a=0;i=e[a++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");u=X(r),o!==u&&n.setAttribute("class",u)}return this},removeClass:function(t){var e,n,r,o,i,a,u,s=0;if(_t.isFunction(t))return this.each(function(e){_t(this).removeClass(t.call(this,e,Q(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof t&&t)for(e=t.match(Rt)||[];n=this[s++];)if(o=Q(n),r=1===n.nodeType&&" "+X(o)+" "){for(a=0;i=e[a++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");u=X(r),o!==u&&n.setAttribute("class",u)}return this},toggleClass:function(t,e){var n=typeof t;return"boolean"==typeof e&&"string"===n?e?this.addClass(t):this.removeClass(t):_t.isFunction(t)?this.each(function(n){_t(this).toggleClass(t.call(this,n,Q(this),e),e)}):this.each(function(){var e,r,o,i;if("string"===n)for(r=0,o=_t(this),i=t.match(Rt)||[];e=i[r++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&"boolean"!==n||(e=Q(this),e&&Ut.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||t===!1?"":Ut.get(this,"__className__")||""))})},hasClass:function(t){var e,n,r=0;for(e=" "+t+" ";n=this[r++];)if(1===n.nodeType&&(" "+X(Q(n))+" ").indexOf(e)>-1)return!0;return!1}});var Se=/\r/g;_t.fn.extend({val:function(t){var e,n,r,o=this[0];{if(arguments.length)return r=_t.isFunction(t),this.each(function(n){var o;1===this.nodeType&&(o=r?t.call(this,n,_t(this).val()):t,null==o?o="":"number"==typeof o?o+="":Array.isArray(o)&&(o=_t.map(o,function(t){return null==t?"":t+""})),e=_t.valHooks[this.type]||_t.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))});if(o)return e=_t.valHooks[o.type]||_t.valHooks[o.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(n=e.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(Se,""):null==n?"":n)}}}),_t.extend({valHooks:{option:{get:function(t){var e=_t.find.attr(t,"value");return null!=e?e:X(_t.text(t))}},select:{get:function(t){var e,n,r,o=t.options,i=t.selectedIndex,a="select-one"===t.type,u=a?null:[],c=a?i+1:o.length;for(r=i<0?c:a?i:0;r-1)&&(n=!0);return n||(t.selectedIndex=-1),i}}}}),_t.each(["radio","checkbox"],function(){_t.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=_t.inArray(_t(t).val(),e)>-1}},mt.checkOn||(_t.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})});var Te=/^(?:focusinfocus|focusoutblur)$/;_t.extend(_t.event,{trigger:function(t,e,r,o){var i,a,u,s,c,l,f,p=[r||at],h=dt.call(t,"type")?t.type:t,d=dt.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||at,3!==r.nodeType&&8!==r.nodeType&&!Te.test(h+_t.event.triggered)&&(h.indexOf(".")>-1&&(d=h.split("."),h=d.shift(),d.sort()),c=h.indexOf(":")<0&&"on"+h,t=t[_t.expando]?t:new _t.Event(h,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=d.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),e=null==e?[t]:_t.makeArray(e,[t]),f=_t.event.special[h]||{},o||!f.trigger||f.trigger.apply(r,e)!==!1)){if(!o&&!f.noBubble&&!_t.isWindow(r)){for(s=f.delegateType||h,Te.test(s+h)||(a=a.parentNode);a;a=a.parentNode)p.push(a),u=a;u===(r.ownerDocument||at)&&p.push(u.defaultView||u.parentWindow||n)}for(i=0;(a=p[i++])&&!t.isPropagationStopped();)t.type=i>1?s:f.bindType||h,l=(Ut.get(a,"events")||{})[t.type]&&Ut.get(a,"handle"),l&&l.apply(a,e),l=c&&a[c],l&&l.apply&&qt(a)&&(t.result=l.apply(a,e),t.result===!1&&t.preventDefault());return t.type=h,o||t.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),e)!==!1||!qt(r)||c&&_t.isFunction(r[h])&&!_t.isWindow(r)&&(u=r[c],u&&(r[c]=null),_t.event.triggered=h,r[h](),_t.event.triggered=void 0,u&&(r[c]=u)),t.result}},simulate:function(t,e,n){var r=_t.extend(new _t.Event,n,{type:t,isSimulated:!0});_t.event.trigger(r,null,e)}}),_t.fn.extend({trigger:function(t,e){return this.each(function(){_t.event.trigger(t,e,this)})},triggerHandler:function(t,e){var n=this[0];if(n)return _t.event.trigger(t,e,n,!0)}}),_t.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(t,e){_t.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),_t.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),mt.focusin="onfocusin"in n,mt.focusin||_t.each({focus:"focusin",blur:"focusout"},function(t,e){var n=function(t){_t.event.simulate(e,t.target,_t.event.fix(t))};_t.event.special[e]={setup:function(){var r=this.ownerDocument||this,o=Ut.access(r,e);o||r.addEventListener(t,n,!0),Ut.access(r,e,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=Ut.access(r,e)-1;o?Ut.access(r,e,o):(r.removeEventListener(t,n,!0),Ut.remove(r,e))}}});var Ce=n.location,Ae=_t.now(),Ne=/\?/;_t.parseXML=function(t){var e;if(!t||"string"!=typeof t)return null;try{e=(new n.DOMParser).parseFromString(t,"text/xml")}catch(t){e=void 0}return e&&!e.getElementsByTagName("parsererror").length||_t.error("Invalid XML: "+t),e};var De=/\[\]$/,Me=/\r?\n/g,Ie=/^(?:submit|button|image|reset|file)$/i,Re=/^(?:input|select|textarea|keygen)/i;_t.param=function(t,e){var n,r=[],o=function(t,e){var n=_t.isFunction(e)?e():e;r[r.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(t)||t.jquery&&!_t.isPlainObject(t))_t.each(t,function(){o(this.name,this.value)});else for(n in t)Z(n,t[n],e,o);return r.join("&")},_t.fn.extend({serialize:function(){return _t.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=_t.prop(this,"elements");return t?_t.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!_t(this).is(":disabled")&&Re.test(this.nodeName)&&!Ie.test(t)&&(this.checked||!Yt.test(t))}).map(function(t,e){var n=_t(this).val();return null==n?null:Array.isArray(n)?_t.map(n,function(t){return{name:e.name,value:t.replace(Me,"\r\n")}}):{name:e.name,value:n.replace(Me,"\r\n")}}).get()}});var Pe=/%20/g,Le=/#.*$/,Be=/([?&])_=[^&]*/,qe=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ue=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ve=/^(?:GET|HEAD)$/,Fe=/^\/\//,ze={},He={},We="*/".concat("*"),Ke=at.createElement("a");Ke.href=Ce.href,_t.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ce.href,type:"GET",isLocal:Ue.test(Ce.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":We,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":_t.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?nt(nt(t,_t.ajaxSettings),e):nt(_t.ajaxSettings,t)},ajaxPrefilter:tt(ze),ajaxTransport:tt(He),ajax:function(t,e){function r(t,e,r,u){var c,p,h,b,w,x=e;l||(l=!0,s&&n.clearTimeout(s),o=void 0,a=u||"",E.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=rt(d,E,r)),b=ot(d,b,E,c),c?(d.ifModified&&(w=E.getResponseHeader("Last-Modified"),w&&(_t.lastModified[i]=w),w=E.getResponseHeader("etag"),w&&(_t.etag[i]=w)),204===t||"HEAD"===d.type?x="nocontent":304===t?x="notmodified":(x=b.state,p=b.data,h=b.error,c=!h)):(h=x,!t&&x||(x="error",t<0&&(t=0))),E.status=t,E.statusText=(e||x)+"",c?m.resolveWith(v,[p,x,E]):m.rejectWith(v,[E,x,h]),E.statusCode(_),_=void 0,f&&g.trigger(c?"ajaxSuccess":"ajaxError",[E,d,c?p:h]),y.fireWith(v,[E,x]),f&&(g.trigger("ajaxComplete",[E,d]),--_t.active||_t.event.trigger("ajaxStop")))}"object"==typeof t&&(e=t,t=void 0),e=e||{};var o,i,a,u,s,c,l,f,p,h,d=_t.ajaxSetup({},e),v=d.context||d,g=d.context&&(v.nodeType||v.jquery)?_t(v):_t.event,m=_t.Deferred(),y=_t.Callbacks("once memory"),_=d.statusCode||{},b={},w={},x="canceled",E={readyState:0,getResponseHeader:function(t){var e;if(l){if(!u)for(u={};e=qe.exec(a);)u[e[1].toLowerCase()]=e[2];e=u[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return l?a:null},setRequestHeader:function(t,e){return null==l&&(t=w[t.toLowerCase()]=w[t.toLowerCase()]||t,b[t]=e),this},overrideMimeType:function(t){return null==l&&(d.mimeType=t),this},statusCode:function(t){var e;if(t)if(l)E.always(t[E.status]);else for(e in t)_[e]=[_[e],t[e]];return this},abort:function(t){var e=t||x;return o&&o.abort(e),r(0,e),this}};if(m.promise(E),d.url=((t||d.url||Ce.href)+"").replace(Fe,Ce.protocol+"//"),d.type=e.method||e.type||d.method||d.type,d.dataTypes=(d.dataType||"*").toLowerCase().match(Rt)||[""],null==d.crossDomain){c=at.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=Ke.protocol+"//"+Ke.host!=c.protocol+"//"+c.host}catch(t){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=_t.param(d.data,d.traditional)),et(ze,d,e,E),l)return E;f=_t.event&&d.global,f&&0===_t.active++&&_t.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ve.test(d.type),i=d.url.replace(Le,""),d.hasContent?d.data&&d.processData&&0===(d.contentType||"").indexOf("application/x-www-form-urlencoded")&&(d.data=d.data.replace(Pe,"+")):(h=d.url.slice(i.length),d.data&&(i+=(Ne.test(i)?"&":"?")+d.data,delete d.data),d.cache===!1&&(i=i.replace(Be,"$1"),h=(Ne.test(i)?"&":"?")+"_="+Ae++ +h),d.url=i+h),d.ifModified&&(_t.lastModified[i]&&E.setRequestHeader("If-Modified-Since",_t.lastModified[i]),_t.etag[i]&&E.setRequestHeader("If-None-Match",_t.etag[i])),(d.data&&d.hasContent&&d.contentType!==!1||e.contentType)&&E.setRequestHeader("Content-Type",d.contentType),E.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+We+"; q=0.01":""):d.accepts["*"]);for(p in d.headers)E.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(v,E,d)===!1||l))return E.abort();if(x="abort",y.add(d.complete),E.done(d.success),E.fail(d.error),o=et(He,d,e,E)){if(E.readyState=1,f&&g.trigger("ajaxSend",[E,d]),l)return E;d.async&&d.timeout>0&&(s=n.setTimeout(function(){E.abort("timeout")},d.timeout));try{l=!1,o.send(b,r)}catch(t){if(l)throw t;r(-1,t)}}else r(-1,"No Transport");return E},getJSON:function(t,e,n){return _t.get(t,e,n,"json")},getScript:function(t,e){return _t.get(t,void 0,e,"script")}}),_t.each(["get","post"],function(t,e){_t[e]=function(t,n,r,o){return _t.isFunction(n)&&(o=o||r,r=n,n=void 0),_t.ajax(_t.extend({url:t,type:e,dataType:o,data:n,success:r},_t.isPlainObject(t)&&t))}}),_t._evalUrl=function(t){return _t.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},_t.fn.extend({wrapAll:function(t){var e;return this[0]&&(_t.isFunction(t)&&(t=t.call(this[0])),e=_t(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this},wrapInner:function(t){return _t.isFunction(t)?this.each(function(e){_t(this).wrapInner(t.call(this,e))}):this.each(function(){var e=_t(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=_t.isFunction(t);return this.each(function(n){_t(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(t){return this.parent(t).not("body").each(function(){_t(this).replaceWith(this.childNodes)}),this}}),_t.expr.pseudos.hidden=function(t){return!_t.expr.pseudos.visible(t)},_t.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length); +},_t.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(t){}};var $e={0:200,1223:204},Ge=_t.ajaxSettings.xhr();mt.cors=!!Ge&&"withCredentials"in Ge,mt.ajax=Ge=!!Ge,_t.ajaxTransport(function(t){var e,r;if(mt.cors||Ge&&!t.crossDomain)return{send:function(o,i){var a,u=t.xhr();if(u.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)u[a]=t.xhrFields[a];t.mimeType&&u.overrideMimeType&&u.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(a in o)u.setRequestHeader(a,o[a]);e=function(t){return function(){e&&(e=r=u.onload=u.onerror=u.onabort=u.onreadystatechange=null,"abort"===t?u.abort():"error"===t?"number"!=typeof u.status?i(0,"error"):i(u.status,u.statusText):i($e[u.status]||u.status,u.statusText,"text"!==(u.responseType||"text")||"string"!=typeof u.responseText?{binary:u.response}:{text:u.responseText},u.getAllResponseHeaders()))}},u.onload=e(),r=u.onerror=e("error"),void 0!==u.onabort?u.onabort=r:u.onreadystatechange=function(){4===u.readyState&&n.setTimeout(function(){e&&r()})},e=e("abort");try{u.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}}),_t.ajaxPrefilter(function(t){t.crossDomain&&(t.contents.script=!1)}),_t.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return _t.globalEval(t),t}}}),_t.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),_t.ajaxTransport("script",function(t){if(t.crossDomain){var e,n;return{send:function(r,o){e=_t(" diff --git a/views/grapejs/layout-editor.hbs b/views/grapejs/layout-editor.hbs index 59005bed..07141ddf 100644 --- a/views/grapejs/layout-editor.hbs +++ b/views/grapejs/layout-editor.hbs @@ -3,17 +3,28 @@ GrapesJS Newsletter Editor - + + + - - - - - - + + + + + {{#switch editor.mode}} + {{#case "mjml"}} + + + + {{/case}} + {{#case "html"}} + + + {{/case}} + {{/switch}} From cff908887ffc3ff6d22c5bb49d8b20817b08fd0c Mon Sep 17 00:00:00 2001 From: witzig Date: Thu, 1 Jun 2017 13:08:45 +0200 Subject: [PATCH 310/483] Fixed throttling and pausing #243 --- lib/db.js | 15 ++++- lib/mailer.js | 25 +++++-- services/sender.js | 160 ++++++++++++++++++++++++--------------------- 3 files changed, 117 insertions(+), 83 deletions(-) diff --git a/lib/db.js b/lib/db.js index 2f221d44..deec4531 100644 --- a/lib/db.js +++ b/lib/db.js @@ -4,6 +4,7 @@ let config = require('config'); let mysql = require('mysql'); let redis = require('redis'); let Lock = require('redfour'); +let tools = require('./tools'); module.exports = mysql.createPool(config.mysql); if (config.redis && config.redis.enabled) { @@ -33,7 +34,7 @@ if (config.redis && config.redis.enabled) { }; module.exports.clearCache = (key, callback) => { - module.exports.redis.del(key, err => callback(err)); + module.exports.redis.del('mailtrain:cache:' + key, err => callback(err)); }; module.exports.addToCache = (key, value, callback) => { @@ -76,9 +77,21 @@ if (config.redis && config.redis.enabled) { module.exports.clearCache = (key, callback) => { caches.delete(key); + tools.workers.forEach(child => { + child.send({ + cmd: 'db.clearCache', + key + }); + }); setImmediate(() => callback()); }; + process.on('message', m => { + if (m && m.cmd === 'db.clearCache' && m.key) { + caches.delete(m.key); + } + }); + module.exports.addToCache = (key, value, callback) => { if (!caches.has(key)) { caches.set(key, []); diff --git a/lib/mailer.js b/lib/mailer.js index 577508f3..4ef5ad0a 100644 --- a/lib/mailer.js +++ b/lib/mailer.js @@ -182,10 +182,10 @@ function createMailer(callback) { module.exports.transport.checkThrottling = null; } - let throttling = Number(configItems.smtpThrottling) || 0; - if (throttling) { + let sendingRate = Number(configItems.smtpThrottling) || 0; + if (sendingRate) { // convert to messages/second - throttling = 1 / (throttling / (3600 * 1000)); + sendingRate = sendingRate / 3600; } let transportOptions; @@ -236,7 +236,7 @@ function createMailer(callback) { error: logfunc.bind(null, 'error') }, maxConnections: Number(configItems.smtpMaxConnections), - sendingRate: throttling, + sendingRate, tls: { rejectUnauthorized: !configItems.smtpSelfSigned } @@ -257,19 +257,30 @@ function createMailer(callback) { oldListeners.forEach(listener => module.exports.transport.on('idle', listener)); } - let lastCheck = Date.now(); + if (configItems.mailTransport === 'smtp' || !configItems.mailTransport) { + + let throttling = Number(configItems.smtpThrottling) || 0; + if (throttling) { + throttling = 1 / (throttling / (3600 * 1000)); + } + + let lastCheck = Date.now(); + module.exports.transport.checkThrottling = function (next) { if (!throttling) { return next(); } let nextCheck = Date.now(); let checkDiff = (nextCheck - lastCheck); - lastCheck = nextCheck; if (checkDiff < throttling) { log.verbose('Mail', 'Throttling next message in %s sec.', (throttling - checkDiff) / 1000); - setTimeout(next, throttling - checkDiff); + setTimeout(() => { + lastCheck = Date.now(); + next(); + }, throttling - checkDiff); } else { + lastCheck = nextCheck; next(); } }; diff --git a/services/sender.js b/services/sender.js index f04dd488..d81b4315 100644 --- a/services/sender.js +++ b/services/sender.js @@ -466,119 +466,129 @@ let sendLoop = () => { return setTimeout(sendLoop, 10 * 1000); } + let isThrottled = false; + let getNext = () => { - if (!mailer.transport.isIdle()) { + if (!mailer.transport.isIdle() || isThrottled) { // only retrieve new messages if there are free slots in the mailer queue return; } - // find an unsent message - findUnsent((err, message) => { - if (err) { - log.error('Mail', err.stack); - setTimeout(getNext, mailing_timeout); - return; - } - if (!message) { - setTimeout(getNext, mailing_timeout); - return; - } + isThrottled = true; - //log.verbose('Mail', 'Found new message to be delivered: %s', message.subscription.cid); - // format message to nodemailer message format - formatMessage(message, (err, mail) => { + mailer.transport.checkThrottling(() => { + + isThrottled = false; + + // find an unsent message + findUnsent((err, message) => { if (err) { log.error('Mail', err.stack); setTimeout(getNext, mailing_timeout); return; } + if (!message) { + setTimeout(getNext, mailing_timeout); + return; + } - blacklist.isblacklisted(mail.to.address, (err, blacklisted) => { - if (err) { - log.error('Mail', err); - setTimeout(getNext, mailing_timeout); - return; - } - if (!blacklisted) { - let tryCount = 0; - let trySend = () => { - tryCount++; + // log.verbose('Mail', 'Found new message to be delivered: %s', message.subscription.cid); + // format message to nodemailer message format + formatMessage(message, (err, mail) => { + if (err) { + log.error('Mail', err.stack); + setTimeout(getNext, mailing_timeout); + return; + } - // send the message - mailer.transport.sendMail(mail, (err, info) => { - if (err) { - log.error('Mail', err.stack); - if (err.responseCode && err.responseCode >= 400 && err.responseCode < 500 && tryCount <= 5) { - // temporary error, try again - return setTimeout(trySend, tryCount * 1000); - } - } + blacklist.isblacklisted(mail.to.address, (err, blacklisted) => { + if (err) { + log.error('Mail', err); + setTimeout(getNext, mailing_timeout); + return; + } - let status = err ? 2 : 1; - let response = err && (err.response || err.message) || info.response || info.messageId; - let responseId = response.split(/\s+/).pop(); + if (!blacklisted) { + let tryCount = 0; + let trySend = () => { + tryCount++; + // send the message + mailer.transport.sendMail(mail, (err, info) => { + if (err) { + log.error('Mail', err.stack); + if (err.responseCode && err.responseCode >= 400 && err.responseCode < 500 && tryCount <= 5) { + // temporary error, try again + return setTimeout(trySend, tryCount * 1000); + } + } + + let status = err ? 2 : 1; + let response = err && (err.response || err.message) || info.response || info.messageId; + let responseId = response.split(/\s+/).pop(); + + db.getConnection((err, connection) => { + if (err) { + log.error('Mail', err.stack); + return; + } + + let query = 'UPDATE `campaigns` SET `delivered`=`delivered`+1 ' + (status === 2 ? ', `bounced`=`bounced`+1 ' : '') + ' WHERE id=? LIMIT 1'; + + connection.query(query, [message.campaignId], err => { + if (err) { + log.error('Mail', err.stack); + } + + let query = 'UPDATE `campaign__' + message.campaignId + '` SET status=?, response=?, response_id=?, updated=NOW() WHERE id=? LIMIT 1'; + + connection.query(query, [status, response, responseId, message.id], err => { + connection.release(); + if (err) { + log.error('Mail', err.stack); + } else { + // log.verbose('Mail', 'Message sent and status updated for %s', message.subscription.cid); + } + }); + }); + }); + }); + }; + setImmediate(trySend); + } else { db.getConnection((err, connection) => { if (err) { - log.error('Mail', err.stack); + log.error('Mail', err); return; } - let query = 'UPDATE `campaigns` SET `delivered`=`delivered`+1 ' + (status === 2 ? ', `bounced`=`bounced`+1 ' : '') + ' WHERE id=? LIMIT 1'; + let query = 'UPDATE `campaigns` SET `blacklisted`=`blacklisted`+1 WHERE id=? LIMIT 1'; connection.query(query, [message.campaignId], err => { if (err) { - log.error('Mail', err.stack); + log.error('Mail', err); } let query = 'UPDATE `campaign__' + message.campaignId + '` SET status=?, response=?, response_id=?, updated=NOW() WHERE id=? LIMIT 1'; - connection.query(query, [status, response, responseId, message.id], err => { + connection.query(query, [5, 'blacklisted', 'blacklisted', message.id], err => { connection.release(); if (err) { - log.error('Mail', err.stack); - } else { - // log.verbose('Mail', 'Message sent and status updated for %s', message.subscription.cid); + log.error('Mail', err); } }); }); }); - }); - }; - setImmediate(trySend); - } else { - db.getConnection((err, connection) => { - if (err) { - log.error('Mail', err); - return; - } - - let query = 'UPDATE `campaigns` SET `blacklisted`=`blacklisted`+1 WHERE id=? LIMIT 1'; - - connection.query(query, [message.campaignId], err => { - if (err) { - log.error('Mail', err); - } - - let query = 'UPDATE `campaign__' + message.campaignId + '` SET status=?, response=?, response_id=?, updated=NOW() WHERE id=? LIMIT 1'; - - connection.query(query, [5, 'blacklisted', 'blacklisted', message.id], err => { - connection.release(); - if (err) { - log.error('Mail', err); - } - }); - }); - }); - } - setImmediate(() => mailer.transport.checkThrottling(getNext)); + } + setImmediate(getNext); + }); }); }); }); }; - mailer.transport.on('idle', () => mailer.transport.checkThrottling(getNext)); - setImmediate(() => mailer.transport.checkThrottling(getNext)); + mailer.transport.on('idle', getNext); + setImmediate(getNext); }); }; From 8c5b62b6a4dc711bccbee65164ace004c59a000d Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Thu, 1 Jun 2017 08:03:43 -0400 Subject: [PATCH 311/483] Fixed bug #246. --- routes/campaigns.js | 6 +++--- routes/triggers.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/routes/campaigns.js b/routes/campaigns.js index 424aebbb..9f721db0 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -545,7 +545,7 @@ router.post('/clicked/ajax/:id/:linkId', (req, res) => { let campaignCid = campaign.cid; let listCid = list.cid; - let columns = ['#', 'email', 'first_name', 'last_name', 'campaign_tracker__' + campaign.id + '`.`created', 'count']; + let columns = ['#', 'email', 'first_name', 'last_name', 'campaign_tracker__' + campaign.id + '.created', 'count']; campaigns.filterClickedSubscribers(campaign, linkId, req.body, columns, (err, data, total, filteredTotal) => { if (err) { return res.json({ @@ -634,7 +634,7 @@ router.post('/status/ajax/:id/:status', (req, res) => { let campaignCid = campaign.cid; let listCid = list.cid; - let columns = ['#', 'email', 'first_name', 'last_name', 'campaign__' + campaign.id + '`.`updated']; + let columns = ['#', 'email', 'first_name', 'last_name', 'campaign__' + campaign.id + '.updated']; campaigns.filterStatusSubscribers(campaign, status, req.body, columns, (err, data, total, filteredTotal) => { if (err) { return res.json({ @@ -683,7 +683,7 @@ router.post('/clicked/ajax/:id/:linkId', (req, res) => { let campaignCid = campaign.cid; let listCid = list.cid; - let columns = ['#', 'email', 'first_name', 'last_name', 'campaign_tracker__' + campaign.id + '`.`created', 'count']; + let columns = ['#', 'email', 'first_name', 'last_name', 'campaign_tracker__' + campaign.id + '.created', 'count']; campaigns.filterClickedSubscribers(campaign, linkId, req.body, columns, (err, data, total, filteredTotal) => { if (err) { return res.json({ diff --git a/routes/triggers.js b/routes/triggers.js index 32b25fa5..6e42aec7 100644 --- a/routes/triggers.js +++ b/routes/triggers.js @@ -257,7 +257,7 @@ router.post('/status/ajax/:id', (req, res) => { }); } - let columns = ['#', 'email', 'first_name', 'last_name', 'trigger__' + trigger.id + '`.`created']; + let columns = ['#', 'email', 'first_name', 'last_name', 'trigger__' + trigger.id + '.created']; triggers.filterSubscribers(trigger, req.body, columns, (err, data, total, filteredTotal) => { if (err) { return res.json({ From 6d39d497eeb1b23d2e2dd7fa82f599405a1eeb95 Mon Sep 17 00:00:00 2001 From: witzig Date: Thu, 1 Jun 2017 18:06:25 +0200 Subject: [PATCH 312/483] Added e2e test for #222 --- test/e2e/tests/subscription.js | 71 ++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/test/e2e/tests/subscription.js b/test/e2e/tests/subscription.js index a6e624bf..ef81bcda 100644 --- a/test/e2e/tests/subscription.js +++ b/test/e2e/tests/subscription.js @@ -436,4 +436,75 @@ suite('Subscription use-cases', () => { }); }); + useCase('A subscriber address can be changed to an address which has been previously unsubscribed. #222', async () => { + const page = getPage(config.lists.l1); + + const oldSubscription = await subscriptionExistsPrecondition(config.lists.l1, { + email: generateEmail(), + firstName: 'old first name', + lastName: 'old last name' + }); + + await step('User clicks the unsubscribe button.', async () => { + await page.mailSubscriptionConfirmed.click('unsubscribeLink'); + }); + + await step('System shows a notice that confirms unsubscription.', async () => { + await page.webUnsubscribedNotice.waitUntilVisibleAfterRefresh(); + }); + + await step('System sends an email that confirms unsubscription.', async () => { + await page.mailUnsubscriptionConfirmed.fetchMail(oldSubscription.email); + }); + + const newSubscription = await subscriptionExistsPrecondition(config.lists.l1, { + email: generateEmail(), + firstName: 'new first name' + }); + + await step('User clicks the manage subscription button.', async () => { + await page.mailSubscriptionConfirmed.click('manageLink'); + }); + + await step('User clicks the change address button.', async () => { + await page.webManage.click('manageAddressLink'); + }); + + await step('Systems shows a form to change email.', async () => { + await page.webManageAddress.waitUntilVisibleAfterRefresh(); + }); + + await step('User fills in the email address of the original subscription and submits the form.', async () => { + await page.webManageAddress.setValue('emailNewInput', oldSubscription.email); + await page.webManageAddress.submit(); + }); + + await step('System goes back to the profile form and shows a flash notice that further instructions are in the email.', async () => { + await page.webManage.waitUntilVisibleAfterRefresh(); + await page.webManage.waitForFlash(); + expect(await page.webManage.getFlash()).to.contain('An email with further instructions has been sent to the provided address'); + }); + + await step('System sends an email with a link to confirm the address change.', async () => { + await page.mailConfirmAddressChange.fetchMail(oldSubscription.email); + }); + + await step('User clicks confirm subscription in the email', async () => { + await page.mailConfirmAddressChange.click('confirmLink'); + }); + + await step('System shows the profile form with a flash notice that address has been changed. The form does not contain data from the old subscription.', async () => { + await page.webManage.waitUntilVisibleAfterRefresh(); + await page.webManage.waitForFlash(); + expect(await page.webManage.getFlash()).to.contain('Email address changed'); + expect(await page.webManage.getValue('emailInput')).to.equal(oldSubscription.email); + expect(await page.webManage.getValue('firstNameInput')).to.equal(newSubscription.firstName); + expect(await page.webManage.getValue('lastNameInput')).to.equal(''); + }); + + await step('System sends an email with subscription confirmation.', async () => { + await page.mailSubscriptionConfirmed.fetchMail(oldSubscription.email); + }); + }); + }); From 466bf225a362b4e5dd5ed84e941527d98371e296 Mon Sep 17 00:00:00 2001 From: witzig Date: Fri, 2 Jun 2017 00:24:26 +0200 Subject: [PATCH 313/483] Fixed Merge Tags #206 #236 --- lib/models/fields.js | 2 +- lib/models/subscriptions.js | 2 +- lib/tools.js | 15 +++++--- services/sender.js | 2 +- setup/sql/mailtrain-test.sql | 73 ++++++++++++++++++++++++++++++++++-- 5 files changed, 82 insertions(+), 12 deletions(-) diff --git a/lib/models/fields.js b/lib/models/fields.js index 8fe5d6e8..0e955ad8 100644 --- a/lib/models/fields.js +++ b/lib/models/fields.js @@ -458,7 +458,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { value: Number(valueList[field.column]) || 0, visible: !!field.visible, mergeTag: field.key, - mergeValue: Number(valueList[field.column]) || Number(field.defaultValue) || 0, + mergeValue: (Number(valueList[field.column]) || Number(field.defaultValue) || 0).toString(), ['type' + (field.type || '').toString().trim().replace(/(?:^|\-)([a-z])/g, (m, c) => c.toUpperCase())]: true }; row.push(item); diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 080acb5e..d9867c90 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -355,7 +355,7 @@ module.exports.getWithMergeTags = (listId, cid, callback) => { TIMEZONE: subscription.tz || '' }; - fields.getRow(fieldList, subscription, true, true).forEach(field => { + fields.getRow(fieldList, subscription, false, true).forEach(field => { if (field.mergeTag) { subscription.mergeTags[field.mergeTag] = field.mergeValue || ''; } diff --git a/lib/tools.js b/lib/tools.js index 2e7a32e2..f2d1bc32 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -200,17 +200,23 @@ function formatMessage(serviceUrl, campaign, list, subscription, message, filter return links[key]; } if (subscription.mergeTags.hasOwnProperty(key)) { - return isHTML ? he.encode((subscription.mergeTags[key] || ''), { + let value = (subscription.mergeTags[key] || '').toString(); + // FIXME https://github.com/Mailtrain-org/mailtrain/issues/192 + return isHTML ? he.encode(value, { useNamedReferences: true - }) : subscription.mergeTags[key]; + }) : value; } return false; }; return message.replace(/\[([a-z0-9_]+)(?:\/([^\]]+))?\]/ig, (match, identifier, fallback) => { identifier = identifier.toUpperCase(); - let value = (getValue(identifier) || fallback || '').trim(); - return value ? filter(value) : match; + let value = getValue(identifier); + if (value === false) { + return match; + } + value = (value || fallback || '').trim(); + return filter(value); }); } @@ -310,4 +316,3 @@ function mergeTemplateIntoLayout(template, layout, callback) { return done(template, layout); } } - diff --git a/services/sender.js b/services/sender.js index d81b4315..040a8a13 100644 --- a/services/sender.js +++ b/services/sender.js @@ -332,7 +332,7 @@ function formatMessage(message, callback) { }; let encryptionKeys = []; - fields.getRow(fieldList, message.subscription, true, true).forEach(field => { + fields.getRow(fieldList, message.subscription, false, true).forEach(field => { if (field.mergeTag) { message.subscription.mergeTags[field.mergeTag] = field.mergeValue || ''; } diff --git a/setup/sql/mailtrain-test.sql b/setup/sql/mailtrain-test.sql index b04c1aa2..95af27a0 100644 --- a/setup/sql/mailtrain-test.sql +++ b/setup/sql/mailtrain-test.sql @@ -34,6 +34,23 @@ CREATE TABLE `campaign` ( KEY `status_index` (`status`), KEY `subscription_index` (`subscription`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE `campaign__1` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `list` int(11) unsigned NOT NULL, + `segment` int(11) unsigned NOT NULL, + `subscription` int(11) unsigned NOT NULL, + `status` tinyint(4) unsigned NOT NULL DEFAULT '0', + `response` varchar(255) DEFAULT NULL, + `response_id` varchar(255) CHARACTER SET ascii DEFAULT NULL, + `updated` timestamp NULL DEFAULT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `list` (`list`,`segment`,`subscription`), + KEY `created` (`created`), + KEY `response_id` (`response_id`), + KEY `status_index` (`status`), + KEY `subscription_index` (`subscription`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `campaign_tracker` ( `list` int(11) unsigned NOT NULL, `subscriber` int(11) unsigned NOT NULL, @@ -46,6 +63,18 @@ CREATE TABLE `campaign_tracker` ( PRIMARY KEY (`list`,`subscriber`,`link`), KEY `created_index` (`created`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE `campaign_tracker__1` ( + `list` int(11) unsigned NOT NULL, + `subscriber` int(11) unsigned NOT NULL, + `link` int(11) NOT NULL, + `ip` varchar(100) CHARACTER SET ascii DEFAULT NULL, + `device_type` varchar(50) DEFAULT NULL, + `country` varchar(2) CHARACTER SET ascii DEFAULT NULL, + `count` int(11) unsigned NOT NULL DEFAULT '1', + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`list`,`subscriber`,`link`), + KEY `created_index` (`created`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `campaigns` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL, @@ -89,7 +118,8 @@ CREATE TABLE `campaigns` ( KEY `type_index` (`type`), KEY `parent_index` (`parent`), KEY `check_index` (`last_check`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; +INSERT INTO `campaigns` (`id`, `cid`, `type`, `parent`, `name`, `description`, `list`, `segment`, `template`, `source_url`, `editor_name`, `editor_data`, `last_check`, `check_status`, `from`, `address`, `reply_to`, `subject`, `html`, `html_prepared`, `text`, `status`, `scheduled`, `status_change`, `delivered`, `blacklisted`, `opened`, `clicks`, `unsubscribed`, `bounced`, `complained`, `created`, `open_tracking_disabled`, `click_tracking_disabled`) VALUES (1,'BkwHWgCWb',1,NULL,'Merge Tags','',1,0,0,'','codeeditor',NULL,NULL,NULL,'My Awesome Company','admin@example.com','','Test message','\r\n
    \r\n
    LINK_UNSUBSCRIBE
    \r\n \r\n
    LINK_PREFERENCES
    \r\n \r\n
    LINK_BROWSER
    \r\n \r\n
    EMAIL
    \r\n
    [EMAIL]
    \r\n
    FIRST_NAME
    \r\n
    [FIRST_NAME]
    \r\n
    LAST_NAME
    \r\n
    [LAST_NAME]
    \r\n
    FULL_NAME
    \r\n
    [FULL_NAME]
    \r\n
    SUBSCRIPTION_ID
    \r\n
    [SUBSCRIPTION_ID]
    \r\n
    LIST_ID
    \r\n
    [LIST_ID]
    \r\n
    CAMPAIGN_ID
    \r\n
    [CAMPAIGN_ID]
    \r\n
    MERGE_TEXT
    \r\n
    [MERGE_TEXT]
    \r\n
    MERGE_NUMBER
    \r\n
    [MERGE_NUMBER]
    \r\n
    MERGE_WEBSITE
    \r\n
    [MERGE_WEBSITE]
    \r\n
    MERGE_GPG_PUBLIC_KEY
    \r\n
    [MERGE_GPG_PUBLIC_KEY/GPG Fallback Text]
    \r\n
    MERGE_MULTILINE_TEXT
    \r\n
    [MERGE_MULTILINE_TEXT]
    \r\n
    MERGE_JSON
    \r\n
    [MERGE_JSON]
    \r\n
    MERGE_DATE_MMDDYY
    \r\n
    [MERGE_DATE_MMDDYY]
    \r\n
    MERGE_DATE_DDMMYY
    \r\n
    [MERGE_DATE_DDMMYY]
    \r\n
    MERGE_BIRTHDAY_MMDD
    \r\n
    [MERGE_BIRTHDAY_MMDD]
    \r\n
    MERGE_BIRTHDAY_DDMM
    \r\n
    [MERGE_BIRTHDAY_DDMM]
    \r\n
    MERGE_DROP_DOWNS
    \r\n
    [MERGE_DROP_DOWNS]
    \r\n
    MERGE_CHECKBOXES
    \r\n
    [MERGE_CHECKBOXES]
    \r\n
    ','\n
    \n
    LINK_UNSUBSCRIBE
    \n \n
    LINK_PREFERENCES
    \n \n
    LINK_BROWSER
    \n \n
    EMAIL
    \n
    [EMAIL]
    \n
    FIRST_NAME
    \n
    [FIRST_NAME]
    \n
    LAST_NAME
    \n
    [LAST_NAME]
    \n
    FULL_NAME
    \n
    [FULL_NAME]
    \n
    SUBSCRIPTION_ID
    \n
    [SUBSCRIPTION_ID]
    \n
    LIST_ID
    \n
    [LIST_ID]
    \n
    CAMPAIGN_ID
    \n
    [CAMPAIGN_ID]
    \n
    MERGE_TEXT
    \n
    [MERGE_TEXT]
    \n
    MERGE_NUMBER
    \n
    [MERGE_NUMBER]
    \n
    MERGE_WEBSITE
    \n
    [MERGE_WEBSITE]
    \n
    MERGE_GPG_PUBLIC_KEY
    \n
    [MERGE_GPG_PUBLIC_KEY/GPG Fallback Text]
    \n
    MERGE_MULTILINE_TEXT
    \n
    [MERGE_MULTILINE_TEXT]
    \n
    MERGE_JSON
    \n
    [MERGE_JSON]
    \n
    MERGE_DATE_MMDDYY
    \n
    [MERGE_DATE_MMDDYY]
    \n
    MERGE_DATE_DDMMYY
    \n
    [MERGE_DATE_DDMMYY]
    \n
    MERGE_BIRTHDAY_MMDD
    \n
    [MERGE_BIRTHDAY_MMDD]
    \n
    MERGE_BIRTHDAY_DDMM
    \n
    [MERGE_BIRTHDAY_DDMM]
    \n
    MERGE_DROP_DOWNS
    \n
    [MERGE_DROP_DOWNS]
    \n
    MERGE_CHECKBOXES
    \n
    [MERGE_CHECKBOXES]
    \n
    ','',1,NOW(),NULL,0,0,0,0,0,0,0,NOW(),0,0); CREATE TABLE `confirmations` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL, @@ -119,7 +149,25 @@ CREATE TABLE `custom_fields` ( UNIQUE KEY `list` (`list`,`column`), KEY `list_2` (`list`), CONSTRAINT `custom_fields_ibfk_1` FOREIGN KEY (`list`) REFERENCES `lists` (`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4; +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (1,1,'Text','MERGE_TEXT',NULL,'text',NULL,NULL,'custom_text_field_byiiqjrw',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (2,1,'Number','MERGE_NUMBER',NULL,'number',NULL,NULL,'custom_number_field_r1dd91awb',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (3,1,'Website','MERGE_WEBSITE',NULL,'website',NULL,NULL,'custom_website_field_rkq991cw',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (4,1,'GPG Public Key','MERGE_GPG_PUBLIC_KEY',NULL,'gpg',NULL,NULL,'custom_gpg_public_key_ryvj51cz',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (5,1,'Multiline Text','MERGE_MULTILINE_TEXT',NULL,'longtext',NULL,NULL,'custom_multiline_text_bjbfojawb',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (6,1,'JSON','MERGE_JSON',NULL,'json',NULL,NULL,'custom_json_skqjkcb',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (7,1,'Date (MM/DD/YY)','MERGE_DATE_MMDDYY',NULL,'date-us',NULL,NULL,'custom_date_mmddyy_rjkeojrzz',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (8,1,'Date (DD/MM/YY)','MERGE_DATE_DDMMYY',NULL,'date-eur',NULL,NULL,'custom_date_ddmmyy_ryedsk0wz',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (9,1,'Birthday (MM/DD)','MERGE_BIRTHDAY_MMDD',NULL,'birthday-us',NULL,NULL,'custom_birthday_mmdd_h18coj0zz',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (10,1,'Birthday (DD/MM)','MERGE_BIRTHDAY_DDMM',NULL,'birthday-eur',NULL,NULL,'custom_birthday_ddmm_r1g3s1czz',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (11,1,'Drop Downs','MERGE_DROP_DOWNS',NULL,'dropdown',NULL,NULL,NULL,1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (12,1,'Drop Down Opt 1','MERGE_DROP_DOWN_OPT_1',NULL,'option',11,NULL,'custom_dd_option_1_b1wwn1rzw',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (13,1,'Drop Down Opt 2','MERGE_DROP_DOWN_OPT_2',NULL,'option',11,NULL,'custom_drop_down_opt_2_hkzd2jcww',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (14,1,'Drop Down Opt 3','MERGE_DROP_DOWN_OPT_3',NULL,'option',11,NULL,'custom_drop_down_opt_3_rjghnyrz',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (15,1,'Checkboxes','MERGE_CHECKBOXES',NULL,'checkbox',NULL,NULL,NULL,1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (16,1,'Checkbox Option 1','MERGE_CHECKBOX_OPTION_1',NULL,'option',15,NULL,'custom_checkbox_option_1_by_l0jcwz',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (17,1,'Checkbox Option 2','MERGE_CHECKBOX_OPTION_2',NULL,'option',15,NULL,'custom_checkbox_option_2_sjdprj0zz',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (18,1,'Checkbox Option 3','MERGE_CHECKBOX_OPTION_3',NULL,'option',15,NULL,'custom_checkbox_option_3_bk2drjabz',1,NOW()); CREATE TABLE `custom_forms` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `list` int(11) unsigned NOT NULL, @@ -199,7 +247,7 @@ CREATE TABLE `lists` ( UNIQUE KEY `cid` (`cid`), KEY `name` (`name`(191)) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4; -INSERT INTO `lists` (`id`, `cid`, `default_form`, `name`, `description`, `subscribers`, `created`, `public_subscribe`, `unsubscription_mode`) VALUES (1,'Hkj1vCoJb',0,'#1 (one-step, no form)','',0,NOW(),1,0); +INSERT INTO `lists` (`id`, `cid`, `default_form`, `name`, `description`, `subscribers`, `created`, `public_subscribe`, `unsubscription_mode`) VALUES (1,'Hkj1vCoJb',0,'#1 (one-step, no form)','',1,NOW(),1,0); INSERT INTO `lists` (`id`, `cid`, `default_form`, `name`, `description`, `subscribers`, `created`, `public_subscribe`, `unsubscription_mode`) VALUES (2,'SktV4HDZ-',NULL,'#2 (one-step, with form)','',0,NOW(),1,1); INSERT INTO `lists` (`id`, `cid`, `default_form`, `name`, `description`, `subscribers`, `created`, `public_subscribe`, `unsubscription_mode`) VALUES (3,'BkdvNBw-W',NULL,'#3 (two-step, no form)','',0,NOW(),1,2); INSERT INTO `lists` (`id`, `cid`, `default_form`, `name`, `description`, `subscribers`, `created`, `public_subscribe`, `unsubscription_mode`) VALUES (4,'rJMKVrDZ-',NULL,'#4 (two-step, with form)','',0,NOW(),1,3); @@ -356,6 +404,22 @@ CREATE TABLE `subscription__1` ( `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `first_name` varchar(255) DEFAULT NULL, `last_name` varchar(255) DEFAULT NULL, + `custom_text_field_byiiqjrw` varchar(255) DEFAULT NULL, + `custom_number_field_r1dd91awb` int(11) DEFAULT NULL, + `custom_website_field_rkq991cw` varchar(255) DEFAULT NULL, + `custom_gpg_public_key_ryvj51cz` text, + `custom_multiline_text_bjbfojawb` text, + `custom_json_skqjkcb` text, + `custom_date_mmddyy_rjkeojrzz` timestamp NULL DEFAULT NULL, + `custom_date_ddmmyy_ryedsk0wz` timestamp NULL DEFAULT NULL, + `custom_birthday_mmdd_h18coj0zz` timestamp NULL DEFAULT NULL, + `custom_birthday_ddmm_r1g3s1czz` timestamp NULL DEFAULT NULL, + `custom_dd_option_1_b1wwn1rzw` tinyint(4) unsigned NOT NULL DEFAULT '0', + `custom_drop_down_opt_2_hkzd2jcww` tinyint(4) unsigned NOT NULL DEFAULT '0', + `custom_drop_down_opt_3_rjghnyrz` tinyint(4) unsigned NOT NULL DEFAULT '0', + `custom_checkbox_option_1_by_l0jcwz` tinyint(4) unsigned NOT NULL DEFAULT '0', + `custom_checkbox_option_2_sjdprj0zz` tinyint(4) unsigned NOT NULL DEFAULT '0', + `custom_checkbox_option_3_bk2drjabz` tinyint(4) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), UNIQUE KEY `cid` (`cid`), @@ -367,7 +431,8 @@ CREATE TABLE `subscription__1` ( KEY `latest_open` (`latest_open`), KEY `latest_click` (`latest_click`), KEY `created` (`created`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; +INSERT INTO `subscription__1` (`id`, `cid`, `email`, `opt_in_ip`, `opt_in_country`, `tz`, `imported`, `status`, `is_test`, `status_change`, `latest_open`, `latest_click`, `created`, `first_name`, `last_name`, `custom_text_field_byiiqjrw`, `custom_number_field_r1dd91awb`, `custom_website_field_rkq991cw`, `custom_gpg_public_key_ryvj51cz`, `custom_multiline_text_bjbfojawb`, `custom_json_skqjkcb`, `custom_date_mmddyy_rjkeojrzz`, `custom_date_ddmmyy_ryedsk0wz`, `custom_birthday_mmdd_h18coj0zz`, `custom_birthday_ddmm_r1g3s1czz`, `custom_dd_option_1_b1wwn1rzw`, `custom_drop_down_opt_2_hkzd2jcww`, `custom_drop_down_opt_3_rjghnyrz`, `custom_checkbox_option_1_by_l0jcwz`, `custom_checkbox_option_2_sjdprj0zz`, `custom_checkbox_option_3_bk2drjabz`) VALUES (1,'SJDW9J0Wb','keep.john.doe@mailtrain.org',NULL,NULL,'europe/zurich',NULL,1,1,NOW(),NOW(),NULL,NOW(),'John','Doe','Lorem Ipsum',42,'https://mailtrain.org','','Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.','',NOW(),NOW(),NOW(),NOW(),1,0,0,0,1,0); CREATE TABLE `subscription__2` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL, From cec227d688ee0eeb88b4039945372efab850b26a Mon Sep 17 00:00:00 2001 From: witzig Date: Fri, 2 Jun 2017 03:05:19 +0200 Subject: [PATCH 314/483] Fixed Merge Tags for custom date fields --- lib/db.js | 5 +++-- package.json | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/db.js b/lib/db.js index deec4531..8d6fe5db 100644 --- a/lib/db.js +++ b/lib/db.js @@ -4,6 +4,7 @@ let config = require('config'); let mysql = require('mysql'); let redis = require('redis'); let Lock = require('redfour'); +let stringifyDate = require('json-stringify-date'); let tools = require('./tools'); module.exports = mysql.createPool(config.mysql); @@ -42,7 +43,7 @@ if (config.redis && config.redis.enabled) { return setImmediate(() => callback()); } module.exports.redis.multi(). - lpush('mailtrain:cache:' + key, JSON.stringify(value)). + lpush('mailtrain:cache:' + key, stringifyDate.stringify(value)). expire('mailtrain:cache:' + key, 24 * 3600). exec(err => callback(err)); }; @@ -53,7 +54,7 @@ if (config.redis && config.redis.enabled) { return callback(err); } try { - value = JSON.parse(value); + value = stringifyDate.parse(value); } catch (E) { return callback(E); } diff --git a/package.json b/package.json index f26496e3..926c9a2b 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,7 @@ "isemail": "^2.2.1", "jquery-file-upload-middleware": "^0.1.8", "jsdom": "^9.12.0", + "json-stringify-date": "^0.1.4", "juice": "^4.0.2", "libmime": "^3.1.0", "mailparser": "^2.0.5", From 5aa6dff743133000e70fcc2b2d33f8738e4fdb07 Mon Sep 17 00:00:00 2001 From: witzig Date: Sat, 3 Jun 2017 00:13:03 +0200 Subject: [PATCH 315/483] Fixed HTML templates for custom JSON fields #192 --- lib/models/subscriptions.js | 5 +++++ lib/tools.js | 10 ++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index d9867c90..5b2ab460 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -2,6 +2,7 @@ let db = require('../db'); let shortid = require('shortid'); +let striptags = require('striptags'); let tools = require('../tools'); let helpers = require('../helpers'); let fields = require('./fields'); @@ -136,6 +137,8 @@ module.exports.insert = (listId, meta, subscriptionData, callback) => { values.push(field.value); }); + values = values.map(v => typeof v === 'string' ? striptags(v) : v); + db.getConnection((err, connection) => { if (err) { return callback(err); @@ -420,6 +423,8 @@ module.exports.update = (listId, cid, updates, allowEmail, callback) => { return callback(null, false); } + values = values.map(v => typeof v === 'string' ? striptags(v) : v); + db.getConnection((err, connection) => { if (err) { return callback(err); diff --git a/lib/tools.js b/lib/tools.js index f2d1bc32..18787fc5 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -13,6 +13,7 @@ let he = require('he'); let _ = require('./translate')._; let util = require('util'); let createDOMPurify = require('dompurify'); +let htmlToText = require('html-to-text'); let blockedUsers = ['abuse', 'admin', 'billing', 'compliance', 'devnull', 'dns', 'ftp', 'hostmaster', 'inoc', 'ispfeedback', 'ispsupport', 'listrequest', 'list', 'maildaemon', 'noc', 'noreply', 'noreply', 'null', 'phish', 'phishing', 'postmaster', 'privacy', 'registrar', 'root', 'security', 'spam', 'support', 'sysadmin', 'tech', 'undisclosedrecipients', 'unsubscribe', 'usenet', 'uucp', 'webmaster', 'www']; @@ -201,10 +202,11 @@ function formatMessage(serviceUrl, campaign, list, subscription, message, filter } if (subscription.mergeTags.hasOwnProperty(key)) { let value = (subscription.mergeTags[key] || '').toString(); - // FIXME https://github.com/Mailtrain-org/mailtrain/issues/192 - return isHTML ? he.encode(value, { - useNamedReferences: true - }) : value; + let containsHTML = /<[a-z][\s\S]*>/.test(value); + return isHTML ? he.encode((containsHTML ? value : value.replace(/(?:\r\n|\r|\n)/g, '
    ')), { + useNamedReferences: true, + allowUnsafeSymbols: true + }) : (containsHTML ? htmlToText.fromString(value) : value); } return false; }; From 819fcfb3929292cf894aa35a88ec0a7b4dff0726 Mon Sep 17 00:00:00 2001 From: Krzysztof Jablonski Date: Thu, 8 Jun 2017 14:06:35 +0200 Subject: [PATCH 316/483] Fix typo during refactoring During code refactoring for selectable unsubscription feature code: `!campaignId || status > 2` was wrongly refactored to: `subscription.status !== Status.SUBSCRIBED` Link: https://github.com/Mailtrain-org/mailtrain/commit/a6d25e668b6d9a31b90b05bb9bfe7d65f1d619a1#diff-5af9fe5dfae76c093530c92e3d7404e1R496 --- lib/models/subscriptions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 5b2ab460..1ea574c6 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -495,7 +495,7 @@ module.exports.changeStatus = (listId, id, campaignId, status, callback) => { } // status change is not related to a campaign or it marks message as bounced etc. - if (!campaignId || status !== Status.SUBSCRIBED) { + if (!campaignId || status > Status.UNSUBSCRIBED) { return connection.commit(err => { if (err) { return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); From 71ac4c64a5ec9c5b934dd6c7b4f2ba83833756fc Mon Sep 17 00:00:00 2001 From: Krzysztof Jablonski Date: Thu, 8 Jun 2017 14:22:34 +0200 Subject: [PATCH 317/483] =?UTF-8?q?Avoid=20using=20>=20with=20=E2=80=9Eenu?= =?UTF-8?q?ms=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/models/subscriptions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 1ea574c6..6760bda9 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -495,7 +495,7 @@ module.exports.changeStatus = (listId, id, campaignId, status, callback) => { } // status change is not related to a campaign or it marks message as bounced etc. - if (!campaignId || status > Status.UNSUBSCRIBED) { + if (!campaignId || status !== Status.SUBSCRIBED && status !== Status.UNSUBSCRIBED) { return connection.commit(err => { if (err) { return helpers.rollbackAndReleaseConnection(connection, () => callback(err)); From 87f7a050ab5882f71b4dd535777b5fed19286bfe Mon Sep 17 00:00:00 2001 From: witzig Date: Sun, 11 Jun 2017 01:26:15 +0200 Subject: [PATCH 318/483] Fixed bug #249 --- routes/api.js | 7 ++++++- routes/subscription.js | 5 +++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/routes/api.js b/routes/api.js index a44d6fec..a12e6b38 100644 --- a/routes/api.js +++ b/routes/api.js @@ -125,7 +125,12 @@ router.post('/subscribe/:listId', (req, res) => { } if (/^(yes|true|1)$/i.test(input.REQUIRE_CONFIRMATION)) { - confirmations.addConfirmation(list.id, 'subscribe', req.ip, subscription, (err, confirmCid) => { + const data = { + email: subscription.email, + subscriptionData: subscription + }; + + confirmations.addConfirmation(list.id, 'subscribe', req.ip, data, (err, confirmCid) => { if (err) { log.error('API', err); res.status(500); diff --git a/routes/subscription.js b/routes/subscription.js index 6310bbf3..2693deda 100644 --- a/routes/subscription.js +++ b/routes/subscription.js @@ -77,6 +77,7 @@ router.get('/confirm/subscribe/:cid', (req, res, next) => { let optInCountry = geoip.lookupCountry(confirmation.ip) || null; const meta = { + cid: req.params.cid, email: data.email, optInIp: confirmation.ip, optInCountry, @@ -438,7 +439,7 @@ router.post('/:cid/subscribe', passport.parseForm, corsOrCsrfProtection, (req, r log.info('Subscription', 'Confirmation message for %s marked to be skipped (%s)', email, JSON.stringify(data)); sendWebResponse(); } else { - mailHelpers.sendConfirmSubscription(list, email, confirmCid, data, (err) => { + mailHelpers.sendConfirmSubscription(list, email, confirmCid, subscriptionData, (err) => { if (err) { return req.xhr ? sendJsonError(err) : sendWebResponse(err); } @@ -789,7 +790,7 @@ function handleUnsubscribe(list, subscription, autoUnsubscribe, campaignId, ip, if (err) { return next(err); } - + // TODO: Shall we do anything with "found"? mailHelpers.sendUnsubscriptionConfirmed(list, subscription.email, subscription, err => { From 0629194f569ddf93b52f5a0f4f3aa21888f5cf2a Mon Sep 17 00:00:00 2001 From: witzig Date: Sun, 11 Jun 2017 18:48:41 +0200 Subject: [PATCH 319/483] Updated e2e subscription tests Added test for bug #249 Extended tests for custom fields (work in progress) --- package.json | 1 + setup/sql/mailtrain-test.sql | 14 +- test/e2e/lib/config.js | 24 ++- test/e2e/lib/page.js | 4 +- test/e2e/page-objects/subscription.js | 47 ++++- test/e2e/tests/subscription.js | 288 +++++++++++++++++++------- 6 files changed, 290 insertions(+), 88 deletions(-) diff --git a/package.json b/package.json index 926c9a2b..e466e96b 100644 --- a/package.json +++ b/package.json @@ -109,6 +109,7 @@ "redfour": "^1.0.0", "redis": "^2.7.1", "request": "^2.81.0", + "request-promise": "^4.2.1", "serve-favicon": "^2.4.2", "shortid": "^2.2.8", "slugify": "^1.1.0", diff --git a/setup/sql/mailtrain-test.sql b/setup/sql/mailtrain-test.sql index 95af27a0..b88e5bef 100644 --- a/setup/sql/mailtrain-test.sql +++ b/setup/sql/mailtrain-test.sql @@ -119,7 +119,7 @@ CREATE TABLE `campaigns` ( KEY `parent_index` (`parent`), KEY `check_index` (`last_check`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; -INSERT INTO `campaigns` (`id`, `cid`, `type`, `parent`, `name`, `description`, `list`, `segment`, `template`, `source_url`, `editor_name`, `editor_data`, `last_check`, `check_status`, `from`, `address`, `reply_to`, `subject`, `html`, `html_prepared`, `text`, `status`, `scheduled`, `status_change`, `delivered`, `blacklisted`, `opened`, `clicks`, `unsubscribed`, `bounced`, `complained`, `created`, `open_tracking_disabled`, `click_tracking_disabled`) VALUES (1,'BkwHWgCWb',1,NULL,'Merge Tags','',1,0,0,'','codeeditor',NULL,NULL,NULL,'My Awesome Company','admin@example.com','','Test message','\r\n
    \r\n
    LINK_UNSUBSCRIBE
    \r\n \r\n
    LINK_PREFERENCES
    \r\n \r\n
    LINK_BROWSER
    \r\n \r\n
    EMAIL
    \r\n
    [EMAIL]
    \r\n
    FIRST_NAME
    \r\n
    [FIRST_NAME]
    \r\n
    LAST_NAME
    \r\n
    [LAST_NAME]
    \r\n
    FULL_NAME
    \r\n
    [FULL_NAME]
    \r\n
    SUBSCRIPTION_ID
    \r\n
    [SUBSCRIPTION_ID]
    \r\n
    LIST_ID
    \r\n
    [LIST_ID]
    \r\n
    CAMPAIGN_ID
    \r\n
    [CAMPAIGN_ID]
    \r\n
    MERGE_TEXT
    \r\n
    [MERGE_TEXT]
    \r\n
    MERGE_NUMBER
    \r\n
    [MERGE_NUMBER]
    \r\n
    MERGE_WEBSITE
    \r\n
    [MERGE_WEBSITE]
    \r\n
    MERGE_GPG_PUBLIC_KEY
    \r\n
    [MERGE_GPG_PUBLIC_KEY/GPG Fallback Text]
    \r\n
    MERGE_MULTILINE_TEXT
    \r\n
    [MERGE_MULTILINE_TEXT]
    \r\n
    MERGE_JSON
    \r\n
    [MERGE_JSON]
    \r\n
    MERGE_DATE_MMDDYY
    \r\n
    [MERGE_DATE_MMDDYY]
    \r\n
    MERGE_DATE_DDMMYY
    \r\n
    [MERGE_DATE_DDMMYY]
    \r\n
    MERGE_BIRTHDAY_MMDD
    \r\n
    [MERGE_BIRTHDAY_MMDD]
    \r\n
    MERGE_BIRTHDAY_DDMM
    \r\n
    [MERGE_BIRTHDAY_DDMM]
    \r\n
    MERGE_DROP_DOWNS
    \r\n
    [MERGE_DROP_DOWNS]
    \r\n
    MERGE_CHECKBOXES
    \r\n
    [MERGE_CHECKBOXES]
    \r\n
    ','\n
    \n
    LINK_UNSUBSCRIBE
    \n \n
    LINK_PREFERENCES
    \n \n
    LINK_BROWSER
    \n \n
    EMAIL
    \n
    [EMAIL]
    \n
    FIRST_NAME
    \n
    [FIRST_NAME]
    \n
    LAST_NAME
    \n
    [LAST_NAME]
    \n
    FULL_NAME
    \n
    [FULL_NAME]
    \n
    SUBSCRIPTION_ID
    \n
    [SUBSCRIPTION_ID]
    \n
    LIST_ID
    \n
    [LIST_ID]
    \n
    CAMPAIGN_ID
    \n
    [CAMPAIGN_ID]
    \n
    MERGE_TEXT
    \n
    [MERGE_TEXT]
    \n
    MERGE_NUMBER
    \n
    [MERGE_NUMBER]
    \n
    MERGE_WEBSITE
    \n
    [MERGE_WEBSITE]
    \n
    MERGE_GPG_PUBLIC_KEY
    \n
    [MERGE_GPG_PUBLIC_KEY/GPG Fallback Text]
    \n
    MERGE_MULTILINE_TEXT
    \n
    [MERGE_MULTILINE_TEXT]
    \n
    MERGE_JSON
    \n
    [MERGE_JSON]
    \n
    MERGE_DATE_MMDDYY
    \n
    [MERGE_DATE_MMDDYY]
    \n
    MERGE_DATE_DDMMYY
    \n
    [MERGE_DATE_DDMMYY]
    \n
    MERGE_BIRTHDAY_MMDD
    \n
    [MERGE_BIRTHDAY_MMDD]
    \n
    MERGE_BIRTHDAY_DDMM
    \n
    [MERGE_BIRTHDAY_DDMM]
    \n
    MERGE_DROP_DOWNS
    \n
    [MERGE_DROP_DOWNS]
    \n
    MERGE_CHECKBOXES
    \n
    [MERGE_CHECKBOXES]
    \n
    ','',1,NOW(),NULL,0,0,0,0,0,0,0,NOW(),0,0); +INSERT INTO `campaigns` (`id`, `cid`, `type`, `parent`, `name`, `description`, `list`, `segment`, `template`, `source_url`, `editor_name`, `editor_data`, `last_check`, `check_status`, `from`, `address`, `reply_to`, `subject`, `html`, `html_prepared`, `text`, `status`, `scheduled`, `status_change`, `delivered`, `blacklisted`, `opened`, `clicks`, `unsubscribed`, `bounced`, `complained`, `created`, `open_tracking_disabled`, `click_tracking_disabled`) VALUES (1,'BkwHWgCWb',1,NULL,'Merge Tags','',1,0,0,'','codeeditor',NULL,NULL,NULL,'My Awesome Company','admin@example.com','','Test message','\r\n
    \r\n
    LINK_UNSUBSCRIBE
    \r\n \r\n
    LINK_PREFERENCES
    \r\n \r\n
    LINK_BROWSER
    \r\n \r\n
    EMAIL
    \r\n
    [EMAIL]
    \r\n
    FIRST_NAME
    \r\n
    [FIRST_NAME]
    \r\n
    LAST_NAME
    \r\n
    [LAST_NAME]
    \r\n
    FULL_NAME
    \r\n
    [FULL_NAME]
    \r\n
    SUBSCRIPTION_ID
    \r\n
    [SUBSCRIPTION_ID]
    \r\n
    LIST_ID
    \r\n
    [LIST_ID]
    \r\n
    CAMPAIGN_ID
    \r\n
    [CAMPAIGN_ID]
    \r\n
    MERGE_TEXT
    \r\n
    [MERGE_TEXT]
    \r\n
    MERGE_NUMBER
    \r\n
    [MERGE_NUMBER]
    \r\n
    MERGE_WEBSITE
    \r\n
    [MERGE_WEBSITE]
    \r\n
    MERGE_GPG_PUBLIC_KEY
    \r\n
    [MERGE_GPG_PUBLIC_KEY/GPG Fallback Text]
    \r\n
    MERGE_MULTILINE_TEXT
    \r\n
    [MERGE_MULTILINE_TEXT]
    \r\n
    MERGE_JSON
    \r\n
    [MERGE_JSON]
    \r\n
    MERGE_DATE_MMDDYYYY
    \r\n
    [MERGE_DATE_MMDDYYYY]
    \r\n
    MERGE_DATE_DDMMYYYY
    \r\n
    [MERGE_DATE_DDMMYYYY]
    \r\n
    MERGE_BIRTHDAY_MMDD
    \r\n
    [MERGE_BIRTHDAY_MMDD]
    \r\n
    MERGE_BIRTHDAY_DDMM
    \r\n
    [MERGE_BIRTHDAY_DDMM]
    \r\n
    MERGE_DROP_DOWNS
    \r\n
    [MERGE_DROP_DOWNS]
    \r\n
    MERGE_CHECKBOXES
    \r\n
    [MERGE_CHECKBOXES]
    \r\n
    ','\n
    \n
    LINK_UNSUBSCRIBE
    \n \n
    LINK_PREFERENCES
    \n \n
    LINK_BROWSER
    \n \n
    EMAIL
    \n
    [EMAIL]
    \n
    FIRST_NAME
    \n
    [FIRST_NAME]
    \n
    LAST_NAME
    \n
    [LAST_NAME]
    \n
    FULL_NAME
    \n
    [FULL_NAME]
    \n
    SUBSCRIPTION_ID
    \n
    [SUBSCRIPTION_ID]
    \n
    LIST_ID
    \n
    [LIST_ID]
    \n
    CAMPAIGN_ID
    \n
    [CAMPAIGN_ID]
    \n
    MERGE_TEXT
    \n
    [MERGE_TEXT]
    \n
    MERGE_NUMBER
    \n
    [MERGE_NUMBER]
    \n
    MERGE_WEBSITE
    \n
    [MERGE_WEBSITE]
    \n
    MERGE_GPG_PUBLIC_KEY
    \n
    [MERGE_GPG_PUBLIC_KEY/GPG Fallback Text]
    \n
    MERGE_MULTILINE_TEXT
    \n
    [MERGE_MULTILINE_TEXT]
    \n
    MERGE_JSON
    \n
    [MERGE_JSON]
    \n
    MERGE_DATE_MMDDYYYY
    \n
    [MERGE_DATE_MMDDYYYY]
    \n
    MERGE_DATE_DDMMYYYY
    \n
    [MERGE_DATE_DDMMYYYY]
    \n
    MERGE_BIRTHDAY_MMDD
    \n
    [MERGE_BIRTHDAY_MMDD]
    \n
    MERGE_BIRTHDAY_DDMM
    \n
    [MERGE_BIRTHDAY_DDMM]
    \n
    MERGE_DROP_DOWNS
    \n
    [MERGE_DROP_DOWNS]
    \n
    MERGE_CHECKBOXES
    \n
    [MERGE_CHECKBOXES]
    \n
    ','',1,NOW(),NULL,0,0,0,0,0,0,0,NOW(),0,0); CREATE TABLE `confirmations` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL, @@ -156,8 +156,8 @@ INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (4,1,'GPG Public Key','MERGE_GPG_PUBLIC_KEY',NULL,'gpg',NULL,NULL,'custom_gpg_public_key_ryvj51cz',1,NOW()); INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (5,1,'Multiline Text','MERGE_MULTILINE_TEXT',NULL,'longtext',NULL,NULL,'custom_multiline_text_bjbfojawb',1,NOW()); INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (6,1,'JSON','MERGE_JSON',NULL,'json',NULL,NULL,'custom_json_skqjkcb',1,NOW()); -INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (7,1,'Date (MM/DD/YY)','MERGE_DATE_MMDDYY',NULL,'date-us',NULL,NULL,'custom_date_mmddyy_rjkeojrzz',1,NOW()); -INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (8,1,'Date (DD/MM/YY)','MERGE_DATE_DDMMYY',NULL,'date-eur',NULL,NULL,'custom_date_ddmmyy_ryedsk0wz',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (7,1,'Date (MM/DD/YYYY)','MERGE_DATE_MMDDYYYY',NULL,'date-us',NULL,NULL,'custom_date_mmddyy_rjkeojrzz',1,NOW()); +INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (8,1,'Date (DD/MM/YYYY)','MERGE_DATE_DDMMYYYY',NULL,'date-eur',NULL,NULL,'custom_date_ddmmyy_ryedsk0wz',1,NOW()); INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (9,1,'Birthday (MM/DD)','MERGE_BIRTHDAY_MMDD',NULL,'birthday-us',NULL,NULL,'custom_birthday_mmdd_h18coj0zz',1,NOW()); INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (10,1,'Birthday (DD/MM)','MERGE_BIRTHDAY_DDMM',NULL,'birthday-eur',NULL,NULL,'custom_birthday_ddmm_r1g3s1czz',1,NOW()); INSERT INTO `custom_fields` (`id`, `list`, `name`, `key`, `default_value`, `type`, `group`, `group_template`, `column`, `visible`, `created`) VALUES (11,1,'Drop Downs','MERGE_DROP_DOWNS',NULL,'dropdown',NULL,NULL,NULL,1,NOW()); @@ -324,21 +324,21 @@ CREATE TABLE `settings` ( `value` text NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key` (`key`) -) ENGINE=InnoDB AUTO_INCREMENT=114 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=148 DEFAULT CHARSET=utf8mb4; INSERT INTO `settings` (`id`, `key`, `value`) VALUES (1,'smtp_hostname','localhost'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (2,'smtp_port','5587'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (3,'smtp_encryption','NONE'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (4,'smtp_user','testuser'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (5,'smtp_pass','testpass'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (6,'service_url','http://localhost:3000/'); -INSERT INTO `settings` (`id`, `key`, `value`) VALUES (7,'admin_email','admin@example.com'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (7,'admin_email','keep.admin@mailtrain.org'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (8,'smtp_max_connections','5'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (9,'smtp_max_messages','100'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (10,'smtp_log',''); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (11,'default_sender','My Awesome Company'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (12,'default_postaddress','1234 Main Street'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (13,'default_from','My Awesome Company'); -INSERT INTO `settings` (`id`, `key`, `value`) VALUES (14,'default_address','admin@example.com'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (14,'default_address','keep.admin@mailtrain.org'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (15,'default_subject','Test message'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (16,'default_homepage','https://mailtrain.org'); INSERT INTO `settings` (`id`, `key`, `value`) VALUES (17,'db_schema_version','29'); @@ -1229,7 +1229,7 @@ CREATE TABLE `users` ( KEY `check_reset` (`username`(191),`reset_token`,`reset_expire`), KEY `token_index` (`access_token`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; -INSERT INTO `users` (`id`, `username`, `password`, `email`, `access_token`, `reset_token`, `reset_expire`, `created`) VALUES (1,'admin','$2a$10$mzKU71G62evnGB2PvQA4k..Wf9jASk.c7a8zRMHh6qQVjYJ2r/g/K','admin@example.com',NULL,NULL,NULL,NOW()); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `access_token`, `reset_token`, `reset_expire`, `created`) VALUES (1,'admin','$2a$10$mzKU71G62evnGB2PvQA4k..Wf9jASk.c7a8zRMHh6qQVjYJ2r/g/K','keep.admin@mailtrain.org','7833d148e22c85474c314f43ae4591a7c9adec26',NULL,NULL,NOW()); SET UNIQUE_CHECKS=1; SET FOREIGN_KEY_CHECKS=1; diff --git a/test/e2e/lib/config.js b/test/e2e/lib/config.js index 223d2103..2fa99a3e 100644 --- a/test/e2e/lib/config.js +++ b/test/e2e/lib/config.js @@ -9,7 +9,9 @@ module.exports = { users: { admin: { username: 'admin', - password: 'test' + password: 'test', + email: 'keep.admin@mailtrain.org', + accessToken: '7833d148e22c85474c314f43ae4591a7c9adec26' } }, lists: { @@ -18,41 +20,59 @@ module.exports = { cid: 'Hkj1vCoJb', publicSubscribe: 1, unsubscriptionMode: 0, // (one-step, no form) + customFields: [ + { type: 'text', key: 'MERGE_TEXT', column: 'custom_text_field_byiiqjrw' }, + { type: 'number', key: 'MERGE_NUMBER', column: 'custom_number_field_r1dd91awb' }, + { type: 'website', key: 'MERGE_WEBSITE', column: 'custom_website_field_rkq991cw' }, + { type: 'gpg', key: 'MERGE_GPG_PUBLIC_KEY', column: 'custom_gpg_public_key_ryvj51cz' }, + { type: 'longtext', key: 'MERGE_MULTILINE_TEXT', column: 'custom_multiline_text_bjbfojawb' }, + { type: 'json', key: 'MERGE_JSON', column: 'custom_json_skqjkcb' }, + { type: 'date-us', key: 'MERGE_DATE_MMDDYYYY', column: 'custom_date_mmddyy_rjkeojrzz' }, + { type: 'date-eur', key: 'MERGE_DATE_DDMMYYYY', column: 'custom_date_ddmmyy_ryedsk0wz' }, + { type: 'birthday-us', key: 'MERGE_BIRTHDAY_MMDD', column: 'custom_birthday_mmdd_h18coj0zz' }, + { type: 'birthday-eur', key: 'MERGE_BIRTHDAY_DDMM', column: 'custom_birthday_ddmm_r1g3s1czz' }, + // TODO: Add remaining custom fields, dropdowns and checkboxes + ] }, l2: { id: 2, cid: 'SktV4HDZ-', publicSubscribe: 1, unsubscriptionMode: 1, // (one-step, with form) + customFields: [] }, l3: { id: 3, cid: 'BkdvNBw-W', publicSubscribe: 1, unsubscriptionMode: 2, // (two-step, no form) + customFields: [] }, l4: { id: 4, cid: 'rJMKVrDZ-', publicSubscribe: 1, unsubscriptionMode: 3, // (two-step, with form) + customFields: [] }, l5: { id: 5, cid: 'SJgoNSw-W', publicSubscribe: 1, unsubscriptionMode: 4, // (manual unsubscribe) + customFields: [] }, l6: { id: 6, cid: 'HyveEPvWW', publicSubscribe: 0, unsubscriptionMode: 0, // (one-step, no form) + customFields: [] } }, settings: { 'service-url': 'http://localhost:' + config.www.port + '/', - 'admin-email': 'admin@example.com', + 'admin-email': 'keep.admin@mailtrain.org', 'default-homepage': 'https://mailtrain.org', 'smtp-hostname': config.testserver.host, 'smtp-port': config.testserver.port, diff --git a/test/e2e/lib/page.js b/test/e2e/lib/page.js index 3a79f014..d201948f 100644 --- a/test/e2e/lib/page.js +++ b/test/e2e/lib/page.js @@ -14,7 +14,7 @@ module.exports = (...extras) => Object.assign({ elements: {}, async getElement(key) { - return await driver.findElement(By.css(this.elements[key])); + return await driver.findElement(By.css(this.elements[key] || key)); }, async getLinkParams(key) { @@ -38,7 +38,7 @@ module.exports = (...extras) => Object.assign({ if (selector) { await driver.wait(until.elementLocated(By.css(selector)), waitTimeout); } - + for (const elem of (this.elementsToWaitFor || [])) { const sel = this.elements[elem]; if (!sel) { diff --git a/test/e2e/page-objects/subscription.js b/test/e2e/page-objects/subscription.js index 251e92b9..34a389c9 100644 --- a/test/e2e/page-objects/subscription.js +++ b/test/e2e/page-objects/subscription.js @@ -3,6 +3,49 @@ const config = require('../lib/config'); const web = require('../lib/web'); const mail = require('../lib/mail'); +const expect = require('chai').expect; + +const fieldHelpers = list => ({ + async fillFields(subscription) { + if (subscription.EMAIL && this.url === `/subscription/${list.cid}`) { + await this.setValue('emailInput', subscription.EMAIL); + } + + if (subscription.FIRST_NAME) { + await this.setValue('firstNameInput', subscription.FIRST_NAME); + } + + if (subscription.LAST_NAME) { + await this.setValue('lastNameInput', subscription.LAST_NAME); + } + + for (const field of list.customFields) { + if (field.key in subscription) { + await this.setValue(`[name="${field.column}"]`, subscription[field.key]); + } + } + }, + + async assertFields(subscription) { + if (subscription.EMAIL) { + expect(await this.getValue('emailInput')).to.equal(subscription.EMAIL); + } + + if (subscription.FIRST_NAME) { + expect(await this.getValue('firstNameInput')).to.equal(subscription.FIRST_NAME); + } + + if (subscription.LAST_NAME) { + expect(await this.getValue('lastNameInput')).to.equal(subscription.LAST_NAME); + } + + for (const field of list.customFields) { + if (field.key in subscription) { + expect(await this.getValue(`[name="${field.column}"]`)).to.equal(subscription[field.key]); + } + } + } +}); module.exports = list => ({ @@ -17,7 +60,7 @@ module.exports = list => ({ lastNameInput: '#main-form input[name="last-name"]', submitButton: 'a[href="#submit"]' } - }), + }, fieldHelpers(list)), webSubscribeNonPublic: web({ url: `/subscription/${list.cid}`, @@ -83,7 +126,7 @@ module.exports = list => ({ links: { manageAddressLink: `/subscription/${list.cid}/manage-address/:ucid` } - }), + }, fieldHelpers(list)), webManageAddress: web({ url: `/subscription/${list.cid}/manage-address/:ucid`, diff --git a/test/e2e/tests/subscription.js b/test/e2e/tests/subscription.js index ef81bcda..040cdcc2 100644 --- a/test/e2e/tests/subscription.js +++ b/test/e2e/tests/subscription.js @@ -7,6 +7,8 @@ const { useCase, step, precondition, driver } = require('../lib/mocha-e2e'); const shortid = require('shortid'); const expect = require('chai').expect; const createPage = require('../page-objects/subscription'); +const faker = require('faker'); +const request = require('request-promise'); function getPage(listConf) { return createPage(listConf); @@ -16,6 +18,59 @@ function generateEmail() { return 'keep.' + shortid.generate() + '@mailtrain.org'; } +function generateCustomFieldValue(field) { + // https://github.com/marak/Faker.js/#api-methods + switch (field.type) { + case 'text': + return faker.lorem.words(); + case 'website': + return faker.internet.url(); + case 'gpg': + return ''; + case 'longtext': + return faker.lorem.lines(); + case 'json': + return `{"say":"${faker.lorem.word()}"}`; + case 'number': + return faker.random.number().toString(); + case 'option': + return Math.round(Math.random()); + case 'date-us': + return '10/20/2017'; + case 'date-eur': + return '20/10/2017'; + case 'birthday-us': + return '10/20'; + case 'birthday-eur': + return '20/10'; + default: + return ''; + } +} + +function generateSubscriptionData(listConf) { + const data = { + EMAIL: generateEmail(), + FIRST_NAME: faker.name.firstName(), + LAST_NAME: faker.name.lastName(), + TIMEZONE: 'Europe/Tallinn', + }; + + listConf.customFields.forEach(field => { + data[field.key] = generateCustomFieldValue(field); + }); + + return data; +} + +function changeSubscriptionData(listConf, subscription) { + const data = generateSubscriptionData(listConf); + delete data.EMAIL; + const changedSubscription = Object.assign({}, subscription, data); + // TODO: Make sure values have actually changed. + return changedSubscription; +} + async function subscribe(listConf, subscription) { const page = getPage(listConf); @@ -24,16 +79,7 @@ async function subscribe(listConf, subscription) { }); await step('User submits a valid email and other subscription info.', async () => { - await page.webSubscribe.setValue('emailInput', subscription.email); - - if (subscription.firstName) { - await page.webSubscribe.setValue('firstNameInput', subscription.firstName); - } - - if (subscription.lastName) { - await page.webSubscribe.setValue('lastNameInput', subscription.lastName); - } - + await page.webSubscribe.fillFields(subscription); await page.webSubscribe.submit(); }); @@ -42,7 +88,7 @@ async function subscribe(listConf, subscription) { }); await step('System sends an email with a link to confirm the subscription.', async () => { - await page.mailConfirmSubscription.fetchMail(subscription.email); + await page.mailConfirmSubscription.fetchMail(subscription.EMAIL); }); await step('User clicks confirm subscription in the email', async () => { @@ -54,7 +100,7 @@ async function subscribe(listConf, subscription) { }); await step('System sends an email with subscription confirmation.', async () => { - await page.mailSubscriptionConfirmed.fetchMail(subscription.email); + await page.mailSubscriptionConfirmed.fetchMail(subscription.EMAIL); subscription.unsubscribeLink = await page.mailSubscriptionConfirmed.getHref('unsubscribeLink'); subscription.manageLink = await page.mailSubscriptionConfirmed.getHref('manageLink'); @@ -79,7 +125,7 @@ suite('Subscription use-cases', () => { useCase('Subscription to a public list (main scenario)', async () => { await subscribe(config.lists.l1, { - email: generateEmail() + EMAIL: generateEmail() }); }); @@ -105,7 +151,7 @@ suite('Subscription use-cases', () => { const page = getPage(config.lists.l1); const subscription = await subscriptionExistsPrecondition(config.lists.l1, { - email: generateEmail() + EMAIL: generateEmail() }); await step('User navigates to list subscribe page', async () => { @@ -113,7 +159,7 @@ suite('Subscription use-cases', () => { }); await step('User submits the email which has been already registered.', async () => { - await page.webSubscribe.setValue('emailInput', subscription.email); + await page.webSubscribe.setValue('emailInput', subscription.EMAIL); await page.webSubscribe.submit(); }); @@ -122,7 +168,7 @@ suite('Subscription use-cases', () => { }); await step('System sends an email informing that the address has been already registered.', async () => { - await page.mailAlreadySubscribed.fetchMail(subscription.email); + await page.mailAlreadySubscribed.fetchMail(subscription.EMAIL); }); }); @@ -138,11 +184,7 @@ suite('Subscription use-cases', () => { useCase('Change profile info', async () => { const page = getPage(config.lists.l1); - const subscription = await subscriptionExistsPrecondition(config.lists.l1, { - email: generateEmail(), - firstName: 'John', - lastName: 'Doe' - }); + let subscription = await subscriptionExistsPrecondition(config.lists.l1, generateSubscriptionData(config.lists.l1)); await step('User clicks the manage subscription button.', async () => { await page.mailSubscriptionConfirmed.click('manageLink'); @@ -150,16 +192,12 @@ suite('Subscription use-cases', () => { await step('Systems shows a form to change subscription details. The form contains data entered during subscription.', async () => { await page.webManage.waitUntilVisibleAfterRefresh(); - expect(await page.webManage.getValue('emailInput')).to.equal(subscription.email); - expect(await page.webManage.getValue('firstNameInput')).to.equal(subscription.firstName); - expect(await page.webManage.getValue('lastNameInput')).to.equal(subscription.lastName); + await page.webManage.assertFields(subscription); }); - await step('User enters another name and submits the form.', async () => { - subscription.firstName = 'Adam'; - subscription.lastName = 'B'; - await page.webManage.setValue('firstNameInput', subscription.firstName); - await page.webManage.setValue('lastNameInput', subscription.lastName); + await step('User enters other values and submits the form.', async () => { + subscription = changeSubscriptionData(config.lists.l1, subscription); + await page.webManage.fillFields(subscription); await page.webManage.submit(); }); @@ -168,14 +206,11 @@ suite('Subscription use-cases', () => { }); await step('User navigates to manage subscription again.', async () => { - // await page.webManage.navigate(subscription.manageLink); await page.webManage.navigate({ ucid: subscription.ucid }); }); await step('Systems shows a form with the changes made previously.', async () => { - expect(await page.webManage.getValue('emailInput')).to.equal(subscription.email); - expect(await page.webManage.getValue('firstNameInput')).to.equal(subscription.firstName); - expect(await page.webManage.getValue('lastNameInput')).to.equal(subscription.lastName); + await page.webManage.assertFields(subscription); }); }); @@ -183,9 +218,9 @@ suite('Subscription use-cases', () => { const page = getPage(config.lists.l1); const subscription = await subscriptionExistsPrecondition(config.lists.l1, { - email: generateEmail(), - firstName: 'John', - lastName: 'Doe' + EMAIL: generateEmail(), + FIRST_NAME: 'John', + LAST_NAME: 'Doe' }); await step('User clicks the manage subscription button.', async () => { @@ -194,9 +229,7 @@ suite('Subscription use-cases', () => { await step('Systems shows a form to change subscription details. The form contains data entered during subscription.', async () => { await page.webManage.waitUntilVisibleAfterRefresh(); - expect(await page.webManage.getValue('emailInput')).to.equal(subscription.email); - expect(await page.webManage.getValue('firstNameInput')).to.equal(subscription.firstName); - expect(await page.webManage.getValue('lastNameInput')).to.equal(subscription.lastName); + await page.webManage.fillFields(subscription); }); await step('User clicks the change address button.', async () => { @@ -208,8 +241,8 @@ suite('Subscription use-cases', () => { }); await step('User fills in a new email address and submits the form.', async () => { - subscription.email = generateEmail(); - await page.webManageAddress.setValue('emailNewInput', subscription.email); + subscription.EMAIL = generateEmail(); + await page.webManageAddress.setValue('emailNewInput', subscription.EMAIL); await page.webManageAddress.submit(); }); @@ -220,7 +253,7 @@ suite('Subscription use-cases', () => { }); await step('System sends an email with a link to confirm the address change.', async () => { - await page.mailConfirmAddressChange.fetchMail(subscription.email); + await page.mailConfirmAddressChange.fetchMail(subscription.EMAIL); }); await step('User clicks confirm subscription in the email', async () => { @@ -231,11 +264,11 @@ suite('Subscription use-cases', () => { await page.webManage.waitUntilVisibleAfterRefresh(); await page.webManage.waitForFlash(); expect(await page.webManage.getFlash()).to.contain('Email address changed'); - expect(await page.webManage.getValue('emailInput')).to.equal(subscription.email); + expect(await page.webManage.getValue('emailInput')).to.equal(subscription.EMAIL); }); await step('System sends an email with subscription confirmation.', async () => { - await page.mailSubscriptionConfirmed.fetchMail(subscription.email); + await page.mailSubscriptionConfirmed.fetchMail(subscription.EMAIL); }); }); @@ -243,7 +276,7 @@ suite('Subscription use-cases', () => { const page = getPage(config.lists.l1); const subscription = await subscriptionExistsPrecondition(config.lists.l1, { - email: generateEmail() + EMAIL: generateEmail() }); await step('User clicks the unsubscribe button.', async () => { @@ -255,7 +288,7 @@ suite('Subscription use-cases', () => { }); await step('System sends an email that confirms unsubscription.', async () => { - await page.mailUnsubscriptionConfirmed.fetchMail(subscription.email); + await page.mailUnsubscriptionConfirmed.fetchMail(subscription.EMAIL); }); }); @@ -263,7 +296,7 @@ suite('Subscription use-cases', () => { const page = getPage(config.lists.l2); const subscription = await subscriptionExistsPrecondition(config.lists.l2, { - email: generateEmail() + EMAIL: generateEmail() }); await step('User clicks the unsubscribe button.', async () => { @@ -283,7 +316,7 @@ suite('Subscription use-cases', () => { }); await step('System sends an email that confirms unsubscription.', async () => { - await page.mailUnsubscriptionConfirmed.fetchMail(subscription.email); + await page.mailUnsubscriptionConfirmed.fetchMail(subscription.EMAIL); }); }); @@ -291,7 +324,7 @@ suite('Subscription use-cases', () => { const page = getPage(config.lists.l3); const subscription = await subscriptionExistsPrecondition(config.lists.l3, { - email: generateEmail() + EMAIL: generateEmail() }); await step('User clicks the unsubscribe button.', async () => { @@ -303,7 +336,7 @@ suite('Subscription use-cases', () => { }); await step('System sends an email with a link to confirm unsubscription.', async () => { - await page.mailConfirmUnsubscription.fetchMail(subscription.email); + await page.mailConfirmUnsubscription.fetchMail(subscription.EMAIL); }); await step('User clicks the confirm unsubscribe button in the email.', async () => { @@ -315,7 +348,7 @@ suite('Subscription use-cases', () => { }); await step('System sends an email that confirms unsubscription.', async () => { - await page.mailUnsubscriptionConfirmed.fetchMail(subscription.email); + await page.mailUnsubscriptionConfirmed.fetchMail(subscription.EMAIL); }); }); @@ -323,7 +356,7 @@ suite('Subscription use-cases', () => { const page = getPage(config.lists.l4); const subscription = await subscriptionExistsPrecondition(config.lists.l4, { - email: generateEmail() + EMAIL: generateEmail() }); await step('User clicks the unsubscribe button.', async () => { @@ -343,7 +376,7 @@ suite('Subscription use-cases', () => { }); await step('System sends an email with a link to confirm unsubscription.', async () => { - await page.mailConfirmUnsubscription.fetchMail(subscription.email); + await page.mailConfirmUnsubscription.fetchMail(subscription.EMAIL); }); await step('User clicks the confirm unsubscribe button in the email.', async () => { @@ -355,7 +388,7 @@ suite('Subscription use-cases', () => { }); await step('System sends an email that confirms unsubscription.', async () => { - await page.mailUnsubscriptionConfirmed.fetchMail(subscription.email); + await page.mailUnsubscriptionConfirmed.fetchMail(subscription.EMAIL); }); }); @@ -363,7 +396,7 @@ suite('Subscription use-cases', () => { const page = getPage(config.lists.l5); await subscriptionExistsPrecondition(config.lists.l5, { - email: generateEmail() + EMAIL: generateEmail() }); await step('User clicks the unsubscribe button.', async () => { @@ -379,9 +412,9 @@ suite('Subscription use-cases', () => { const page = getPage(config.lists.l1); const subscription = await subscriptionExistsPrecondition(config.lists.l1, { - email: generateEmail(), - firstName: 'John', - lastName: 'Doe' + EMAIL: generateEmail(), + FIRST_NAME: 'John', + LAST_NAME: 'Doe' }); await step('User clicks the unsubscribe button.', async () => { @@ -393,7 +426,7 @@ suite('Subscription use-cases', () => { }); await step('System sends an email that confirms unsubscription.', async () => { - await page.mailUnsubscriptionConfirmed.fetchMail(subscription.email); + await page.mailUnsubscriptionConfirmed.fetchMail(subscription.EMAIL); }); await step('User clicks the resubscribe button.', async () => { @@ -402,9 +435,9 @@ suite('Subscription use-cases', () => { await step('Systems shows the subscription form. The form contains data entered during initial subscription.', async () => { await page.webSubscribe.waitUntilVisibleAfterRefresh(); - expect(await page.webSubscribe.getValue('emailInput')).to.equal(subscription.email); - expect(await page.webSubscribe.getValue('firstNameInput')).to.equal(subscription.firstName); - expect(await page.webSubscribe.getValue('lastNameInput')).to.equal(subscription.lastName); + expect(await page.webSubscribe.getValue('emailInput')).to.equal(subscription.EMAIL); + expect(await page.webSubscribe.getValue('firstNameInput')).to.equal(subscription.FIRST_NAME); + expect(await page.webSubscribe.getValue('lastNameInput')).to.equal(subscription.LAST_NAME); }); await step('User submits the subscription form.', async () => { @@ -416,7 +449,7 @@ suite('Subscription use-cases', () => { }); await step('System sends an email with a link to confirm the subscription.', async () => { - await page.mailConfirmSubscription.fetchMail(subscription.email); + await page.mailConfirmSubscription.fetchMail(subscription.EMAIL); }); await step('User clicks confirm subscription in the email', async () => { @@ -428,7 +461,7 @@ suite('Subscription use-cases', () => { }); await step('System sends an email with subscription confirmation. The manage and unsubscribe links are identical with the initial subscription.', async () => { - await page.mailSubscriptionConfirmed.fetchMail(subscription.email); + await page.mailSubscriptionConfirmed.fetchMail(subscription.EMAIL); const unsubscribeLink = await page.mailSubscriptionConfirmed.getHref('unsubscribeLink'); const manageLink = await page.mailSubscriptionConfirmed.getHref('manageLink'); expect(subscription.unsubscribeLink).to.equal(unsubscribeLink); @@ -440,9 +473,9 @@ suite('Subscription use-cases', () => { const page = getPage(config.lists.l1); const oldSubscription = await subscriptionExistsPrecondition(config.lists.l1, { - email: generateEmail(), - firstName: 'old first name', - lastName: 'old last name' + EMAIL: generateEmail(), + FIRST_NAME: 'old first name', + LAST_NAME: 'old last name' }); await step('User clicks the unsubscribe button.', async () => { @@ -454,12 +487,12 @@ suite('Subscription use-cases', () => { }); await step('System sends an email that confirms unsubscription.', async () => { - await page.mailUnsubscriptionConfirmed.fetchMail(oldSubscription.email); + await page.mailUnsubscriptionConfirmed.fetchMail(oldSubscription.EMAIL); }); const newSubscription = await subscriptionExistsPrecondition(config.lists.l1, { - email: generateEmail(), - firstName: 'new first name' + EMAIL: generateEmail(), + FIRST_NAME: 'new first name' }); await step('User clicks the manage subscription button.', async () => { @@ -467,6 +500,7 @@ suite('Subscription use-cases', () => { }); await step('User clicks the change address button.', async () => { + await page.webManage.waitUntilVisibleAfterRefresh(); await page.webManage.click('manageAddressLink'); }); @@ -475,7 +509,7 @@ suite('Subscription use-cases', () => { }); await step('User fills in the email address of the original subscription and submits the form.', async () => { - await page.webManageAddress.setValue('emailNewInput', oldSubscription.email); + await page.webManageAddress.setValue('emailNewInput', oldSubscription.EMAIL); await page.webManageAddress.submit(); }); @@ -486,7 +520,7 @@ suite('Subscription use-cases', () => { }); await step('System sends an email with a link to confirm the address change.', async () => { - await page.mailConfirmAddressChange.fetchMail(oldSubscription.email); + await page.mailConfirmAddressChange.fetchMail(oldSubscription.EMAIL); }); await step('User clicks confirm subscription in the email', async () => { @@ -497,13 +531,117 @@ suite('Subscription use-cases', () => { await page.webManage.waitUntilVisibleAfterRefresh(); await page.webManage.waitForFlash(); expect(await page.webManage.getFlash()).to.contain('Email address changed'); - expect(await page.webManage.getValue('emailInput')).to.equal(oldSubscription.email); - expect(await page.webManage.getValue('firstNameInput')).to.equal(newSubscription.firstName); + expect(await page.webManage.getValue('emailInput')).to.equal(oldSubscription.EMAIL); + expect(await page.webManage.getValue('firstNameInput')).to.equal(newSubscription.FIRST_NAME); expect(await page.webManage.getValue('lastNameInput')).to.equal(''); }); await step('System sends an email with subscription confirmation.', async () => { - await page.mailSubscriptionConfirmed.fetchMail(oldSubscription.email); + await page.mailSubscriptionConfirmed.fetchMail(oldSubscription.EMAIL); + }); + }); + +}); + + +async function apiSubscribe(listConf, subscription) { + await step('Add subscription via API call.', async () => { + const response = await request({ + uri: `${config.baseUrl}/api/subscribe/${listConf.cid}?access_token=${config.users.admin.accessToken}`, + method: 'POST', + json: subscription + }); + expect(response.error).to.be.a('undefined'); + expect(response.data.id).to.be.a('string'); + subscription.ucid = response.data.id; + }); + return subscription; +} + +suite('API Subscription use-cases', () => { + + useCase('Subscription to list #1, without confirmation.', async () => { + const page = getPage(config.lists.l1); + const subscription = await apiSubscribe(config.lists.l1, generateSubscriptionData(config.lists.l1)); + + await step('User navigates to manage subscription.', async () => { + await page.webManage.navigate({ ucid: subscription.ucid }); + }); + + await step('Systems shows a form containing the data submitted with the API call.', async () => { + await page.webManage.assertFields(subscription); + }); + }); + + useCase('Subscription to list #1, with confirmation.', async () => { + const page = getPage(config.lists.l1); + + const subscription = await apiSubscribe(config.lists.l1, Object.assign(generateSubscriptionData(config.lists.l1), { + REQUIRE_CONFIRMATION: 'yes' + })); + + await step('System sends an email with a link to confirm the subscription.', async () => { + await page.mailConfirmSubscription.fetchMail(subscription.EMAIL); + }); + + await step('User clicks confirm subscription in the email', async () => { + await page.mailConfirmSubscription.click('confirmLink'); + }); + + await step('System shows a notice that subscription has been confirmed.', async () => { + await page.webSubscribedNotice.waitUntilVisibleAfterRefresh(); + }); + + await step('System sends an email with subscription confirmation.', async () => { + await page.mailSubscriptionConfirmed.fetchMail(subscription.EMAIL); + }); + + await step('User navigates to manage subscription.', async () => { + await page.webManage.navigate({ ucid: subscription.ucid }); + }); + + await step('Systems shows a form containing the data submitted with the API call.', async () => { + await page.webManage.assertFields(subscription); + }); + }); + + useCase('Change profile info', async () => { + const page = getPage(config.lists.l1); + + const initialSubscription = await apiSubscribe(config.lists.l1, generateSubscriptionData(config.lists.l1)); + + const update = changeSubscriptionData(config.lists.l1, initialSubscription); + delete update.FIRST_NAME; + + const changedSubscription = await apiSubscribe(config.lists.l1, update); + changedSubscription.FIRST_NAME = initialSubscription.FIRST_NAME; + + expect(changedSubscription.ucid).to.equal(initialSubscription.ucid); + + await step('User navigates to manage subscription.', async () => { + await page.webManage.navigate({ ucid: changedSubscription.ucid }); + }); + + await step('Systems shows a form containing the updated subscription data.', async () => { + await page.webManage.assertFields(changedSubscription); + }); + }); + + useCase('Unsubscribe', async () => { + const subscription = await apiSubscribe(config.lists.l1, generateSubscriptionData(config.lists.l1)); + + await step('Unsubsribe via API call.', async () => { + const response = await request({ + uri: `${config.baseUrl}/api/unsubscribe/${config.lists.l1.cid}?access_token=${config.users.admin.accessToken}`, + method: 'POST', + json: { + EMAIL: subscription.EMAIL + } + }); + + expect(response.error).to.be.a('undefined'); + expect(response.data.id).to.be.a('number'); // FIXME Shouldn't data.id be the cid instead of the DB id? + expect(response.data.unsubscribed).to.equal(true); }); }); From 1d76eefe273af2439972f87f3c4b801573e5d064 Mon Sep 17 00:00:00 2001 From: witzig Date: Wed, 14 Jun 2017 11:07:16 +0200 Subject: [PATCH 320/483] Fixed unhandled promise rejection #254 (and some cleanup) --- routes/editorapi.js | 62 +++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/routes/editorapi.js b/routes/editorapi.js index fd85bc73..e927163d 100644 --- a/routes/editorapi.js +++ b/routes/editorapi.js @@ -1,5 +1,6 @@ 'use strict'; +let log = require('npmlog'); let config = require('config'); let express = require('express'); let router = new express.Router(); @@ -70,19 +71,15 @@ let listImages = (dir, dirURL, callback) => { }); }; -let getStaticImageUrl = ({ - dynamicUrl, - staticDir, - staticDirUrl -}, callback) => { +const getStaticImageUrl = (dynamicUrl, staticDir, staticDirUrl, callback) => { mkdirp(staticDir, err => { if (err) { - return callback(dynamicUrl); + return callback(err); } fs.readdir(staticDir, (err, files) => { if (err) { - return callback(dynamicUrl); + return callback(err); } let hash = crypto.createHash('md5').update(dynamicUrl).digest('hex'); @@ -90,7 +87,7 @@ let getStaticImageUrl = ({ let headers = {}; if (match) { - return callback(staticDirUrl + '/' + match); + return callback(null, staticDirUrl + '/' + match); } if (dynamicUrl.includes('/editorapi/img?')) { @@ -103,24 +100,27 @@ let getStaticImageUrl = ({ headers }) .then(res => { + if (res.status < 200 || res.status >= 300) { + throw new Error(`Received HTTP status code ${res.status} while fetching image ${dynamicUrl}`); + } return res.buffer(); }) .then(buffer => { let ft = fileType(buffer); - if (!ft) { - return callback(dynamicUrl); - } - if (['image/jpeg', 'image/png', 'image/gif'].includes(ft.mime)) { + if (ft && ['image/jpeg', 'image/png', 'image/gif'].includes(ft.mime)) { fs.writeFile(path.join(staticDir, hash + '.' + ft.ext), buffer, err => { if (err) { - return callback(dynamicUrl); + throw err; } let staticUrl = staticDirUrl + '/' + hash + '.' + ft.ext; - callback(staticUrl); + callback(null, staticUrl); }); } else { - callback(dynamicUrl); + throw new Error(`Unsupported image MIME type for ${dynamicUrl}`); } + }) + .catch(err => { + callback(err); }); }); }); @@ -139,6 +139,7 @@ let prepareHtml = ({ let srcs = {}; let re = /]+src="([^"]+)"/g; let result; + while ((result = re.exec(html)) !== null) { srcs[result[1]] = result[1]; } @@ -153,15 +154,26 @@ let prepareHtml = ({ } }; + const staticDir = path.join(__dirname, '..', 'public', editorName, 'uploads', 'static'); + const staticDirUrl = url.resolve(serviceUrl, editorName + '/uploads/static'); + Object.keys(srcs).forEach(src => { jobs++; let dynamicUrl = src.replace(/&/g, '&'); dynamicUrl = /^https?:\/\/|^\/\//i.test(dynamicUrl) ? dynamicUrl : url.resolve(serviceUrl, dynamicUrl); - getStaticImageUrl({ - dynamicUrl, - staticDir: path.join(__dirname, '..', 'public', editorName, 'uploads', 'static'), - staticDirUrl: url.resolve(serviceUrl, editorName + '/uploads/static'), - }, staticUrl => { + + getStaticImageUrl(dynamicUrl, staticDir, staticDirUrl, (err, staticUrl) => { + if (err) { + // TODO: Send a warning back to the editor. For now we just skip image resizing. + log.error('editorapi', err.message || err); + + if (dynamicUrl.includes('/editorapi/img?')) { + staticUrl = url.parse(dynamicUrl, true).query.src || dynamicUrl; + } else { + staticUrl = dynamicUrl; + } + } + srcs[src] = staticUrl; jobs--; done(); @@ -329,10 +341,12 @@ router.get('/upload', passport.csrfProtection, (req, res) => { if (req.query.type === 'campaign' && Number(req.query.id) > 0) { listImages(path.join(baseDir, req.query.id), baseDirUrl + '/' + req.query.id, (err, campaignImages) => { - err ? res.status(500).send(err.message || err) : - res.json({ - files: sharedImages.concat(campaignImages) - }); + if (err) { + return res.status(500).send(err.message || err); + } + res.json({ + files: sharedImages.concat(campaignImages) + }); }); } else { res.json({ From 61f37062cbe8592f973d03a8f768755d68a091fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 15 Jun 2017 10:56:30 -0500 Subject: [PATCH 321/483] Update Dockerfile to be based on the standard NodeJS image --- Dockerfile | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index c2cb68fe..0f759e57 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,8 @@ -FROM centos -RUN curl --silent --location https://rpm.nodesource.com/setup_7.x | bash - -RUN yum install -y git make gcc nodejs ImageMagick && yum clean all +FROM node:8.1 + COPY . /app WORKDIR /app/ -ENV NODE_ENV production +ENV NODE_ENV docker RUN npm install --no-progress --production && npm install --no-progress passport-ldapjs EXPOSE 3000 -CMD ["/usr/bin/node", "index.js"] \ No newline at end of file +CMD ["node", "index.js"] \ No newline at end of file From 82a1aec72a8c356f23089eecea1c87f54dbd0dbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 15 Jun 2017 11:20:56 -0500 Subject: [PATCH 322/483] Add docker.toml with configs compatible with docker-compose --- config/docker.toml | 186 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 config/docker.toml diff --git a/config/docker.toml b/config/docker.toml new file mode 100644 index 00000000..38a76107 --- /dev/null +++ b/config/docker.toml @@ -0,0 +1,186 @@ +# This file is the default config file for Mailtrain. To use a environment specific +# configuration add new file {ENV}.{ext} (eg. "production.toml") to the same folder. +# {ENV} is defined by NODE_ENV environment variable. +# +# Do not modify this file directly, otherwise you might lose your modifications when upgrading +# +# You should only define the options you want to change in your additional config file. +# For example if the only thing you want to change is the port number for the www server +# then your additional config file should look like this: +# # production.toml +# [www] +# port=80 +# or if you want to use Javascript instead of TOML then the same file could look like this: +# // production.js +# module.exports = { +# www: { +# port: 80 +# } +# }; + +# Process title visible in monitoring logs and process listing +title="mailtrain" + +# Enabled HTML editors +editors=[ + ["summernote", "Summernote"], + ["grapejs", "GrapeJS"], + ["mosaico", "Mosaico"], + ["codeeditor", "Code Editor"] +] + +# Default language to use +language="en" + +# Inject custom styles in layout.hbs +# customstyles=["/custom/hello-world.css"] + +# Inject custom scripts in layout.hbs +# customscripts=["/custom/hello-world.js"] + +# Inject custom scripts in subscription/layout.mjml.hbs +# customsubscriptionscripts=["/custom/hello-world.js"] + +# If you start out as a root user (eg. if you want to use ports lower than 1000) +# then you can downgrade the user once all services are up and running +#user="mailtrain" +#group="mailtrain" + +# If Mailtrain is started as root, "Reports" feature drops the privileges of script generating the report to disallow +# any modifications of Mailtrain code and even prohibits reading the production configuration (which contains the MySQL +# password for read/write operations). The rouser/rogroup determines the user to be used +#rouser="nobody" +#rogroup="nogroup" + +[log] +# silly|verbose|info|http|warn|error|silent +level="verbose" + +[www] +# HTTP port to listen on +port=3000 +# HTTP interface to listen on +host="0.0.0.0" +# Secret for signing the session ID cookie +secret="a cat" +# Session length in seconds when "remember me" is checked +remember=2592000 # 30 days +# logger interface for expressjs morgan +log="dev" +# Is the server behind a proxy? true/false +# Set this to true if you are serving Mailtrain as a virtual domain through Nginx or Apache +proxy=false +# maximum POST body size +postsize="2MB" +# Uncomment to set uploads folder location for temporary data. Defaults to os.tmpdir() +# If the service is started by `npm start` then os.tmpdir() points to CWD +#tmpdir="/tmp" + +[mysql] +host="mysql" +user="mailtrain" +password="mailtrain" +database="mailtrain" +# Some installations, eg. MAMP can use a different port (8889) +# MAMP users should also turn on "Allow network access to MySQL" otherwise MySQL might not be accessible +port=3306 +charset="utf8mb4" +timezone="local" + +[redis] +# enable to use Redis session cache or disable if Redis is not installed +enabled=true +host="redis" +port=6379 +db=5 +# Uncomment if your Redis installation requires a password +#password="" + +[verp] +# Enable to start an MX server that detects bounced messages using VERP +# In most cases you do not want to use it +# Requires root privileges +enabled=false +port=2525 +host="0.0.0.0" +# With DMARC, the Return-Path and From address must match the same domain. +# By default we get around this by using the VERP address in the Sender header, +# with the side effect that some email clients diplay an ugly "on behalf of" message. +# You can safely disable this Sender header if you're not using DMARC or your +# VERP hostname is in the same domain as the From address. +# disablesenderheader=true + +[ldap] +# enable to use ldap user backend +enabled=false +host="localhost" +port=3002 +baseDN="ou=users,dc=company" +filter="(|(username={{username}})(mail={{username}}))" +#Username field in LDAP (uid/cn/username) +uidTag="username" +passwordresetlink="" + +[postfixbounce] +# Enable to allow writing Postfix bounce log to Mailtrain listener +# If enabled, tail mail.log to Mailtrain with the following command: +# tail -f -n +0 /var/log/mail.log | nc localhost 5699 - +enabled=false +port=5699 +# allow connections from localhost only +host="127.0.0.1" + +# extra options for nodemailer +[nodemailer] +#textEncoding="base64" + +[queue] +# How many parallel sender processes to spawn +# You can use more than 1 process only if you have Redis enabled +processes=1 + +[cors] +# Allow subscription widgets to be embedded +# origins=['https://www.example.com'] + +[mosaico] +# Installed templates +templates=[["versafix-1", "Versafix One"]] +# Inject custom scripts +# customscripts=["/mosaico/custom/my-mosaico-plugin.js"] + +[grapejs] +# Installed templates +templates=[ + ["demo", "HTML Template"], + ["aves", "MJML Template"] +] + +[reports] +# The whole reporting functionality can be disabled below if the they are not needed and the DB cannot be +# properly protected. +# Reports rely on custom user defined Javascript snippets defined in the report template. The snippets are run on the +# server when generating a report. As these snippets are stored in the DB, they pose a security risk because they can +# help gaining access to the server if the DB cannot +# be properly protected (e.g. if it is shared with another application with security weaknesses). +# Mailtrain mitigates this problem by running the custom Javascript snippets in a chrooted environment and under a +# DB user that cannot modify the database (see userRO in [mysql] above). However the chrooted environment is available +# only if Mailtrain is started as root. The chrooted environment still does not prevent the custom JS script in +# performing network operations and in generating XSS attacks as part of the report. +# The bottom line is that if people who are creating report templates or have write access to the DB cannot be trusted, +# then it's safer to switch off the reporting functionality below. +enabled=false + +[testserver] +# Starts a vanity server that redirects all mail to /dev/null +# Mostly needed for local development +enabled=false +port=5587 +mailboxserverport=3001 +host="0.0.0.0" +username="testuser" +password="testpass" +logger=false + +[seleniumwebdriver] +browser="phantomjs" From ca096d191fd6982d52dd50bdfbe9bd7a3b93b7da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 15 Jun 2017 11:21:22 -0500 Subject: [PATCH 323/483] Add base docker-compose and override to build image and set ports --- docker-compose.override.yml | 8 ++++++++ docker-compose.yml | 29 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 docker-compose.override.yml create mode 100644 docker-compose.yml diff --git a/docker-compose.override.yml b/docker-compose.override.yml new file mode 100644 index 00000000..19ac21da --- /dev/null +++ b/docker-compose.override.yml @@ -0,0 +1,8 @@ +version: '2' +services: + mailtrain: + build: ./ + # volumes: + # - ./:/app + ports: + - "3000:3000" \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..2c57a566 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,29 @@ +version: '2' +services: + mysql: + image: mysql:5.7 + environment: + - MYSQL_ROOT_PASSWORD=mailtrain + - MYSQL_DATABASE=mailtrain + - MYSQL_USER=mailtrain + - MYSQL_PASSWORD=mailtrain + volumes: + - mailtrain-mysq-data:/var/lib/mysql + redis: + image: redis:3.0 + volumes: + - mailtrain-redis-data:/data + mailtrain: + image: mailtrain:1.24 + depends_on: + - mysql + - redis + volumes: + - mailtrain-node-config:/app/config + - mailtrain-node-data:/app/public/grapejs/uploads + - mailtrain-node-data:/app/public/mosaico/uploads +volumes: + mailtrain-mysq-data: {} + mailtrain-redis-data: {} + mailtrain-node-data: {} + mailtrain-node-config: {} From 4f5c132db4bca35e0fb310ce1c03da73cd9e9170 Mon Sep 17 00:00:00 2001 From: witzig Date: Thu, 15 Jun 2017 19:11:13 +0200 Subject: [PATCH 324/483] Fixed bug: Hidden custom fields (for custom forms) losing values when updating preferences. Credits to @flapuente-palbin --- lib/models/subscriptions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 6760bda9..f9b562c5 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -414,7 +414,7 @@ module.exports.update = (listId, cid, updates, allowEmail, callback) => { } }); - fields.getValues(fields.getRow(fieldList, updates, true, true), true).forEach(field => { + fields.getValues(fields.getRow(fieldList, updates, true, true, true), true).forEach(field => { keys.push(field.key); values.push(field.value); }); From 2cf2cc71ffef65594e82513ca0c5699a07f62a2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 15 Jun 2017 12:59:42 -0500 Subject: [PATCH 325/483] Update mailtrain tag name --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 2c57a566..fe82724f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,7 @@ services: volumes: - mailtrain-redis-data:/data mailtrain: - image: mailtrain:1.24 + image: mailtrain:latest depends_on: - mysql - redis From 274c706f02f592428aeb6c13109cf46b41560e76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 15 Jun 2017 13:00:00 -0500 Subject: [PATCH 326/483] Add restart: always to docker-compose.override.yml --- docker-compose.override.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 19ac21da..24b48ec6 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -1,8 +1,14 @@ version: '2' services: + mysql: + restart: always + redis: + restart: always mailtrain: build: ./ # volumes: # - ./:/app ports: - - "3000:3000" \ No newline at end of file + - "3000:3000" + restart: always + \ No newline at end of file From 5e5e5c70bf227a9559acecfa5d3f179b8c5c811b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 15 Jun 2017 13:00:17 -0500 Subject: [PATCH 327/483] Update README to include new docker-compose instructions --- README.md | 80 ++++++++----------------------------------------------- 1 file changed, 11 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index 87fd2aea..7018101c 100644 --- a/README.md +++ b/README.md @@ -121,76 +121,18 @@ With proper SPF, DKIM and PTR records (DMARC wouldn't hurt either) I got perfect ### Simple Install (Docker) ##### Requirements: - * Docker - * docker-compose + * [Docker](https://www.docker.com/) + * [Docker Compose](https://docs.docker.com/compose/) - 1. Download Mailtrain files using git: `git clone git://github.com/Mailtrain-org/mailtrain.git` (or download [zipped repo](https://github.com/Mailtrain-org/mailtrain/archive/master.zip)) and open Mailtrain folder `cd mailtrain` - 2. Run `sudo docker build -t mailtrain-node:latest .` - 3. Copy default.toml to production.toml. Run `sudo mkdir -p /etc/mailtrain && sudo cp config/default.toml /etc/mailtrain/production.toml` - 4. Create `/etc/docker-compose.yml`. Example (dont forget change MYSQL_ROOT_PASS and MYSQL_USER_PASSWORD to your passwords): - ``` - version: '2' - services: - mailtrain-mysql: - image: mysql:latest - ports: - - "3306:3306" - container_name: "mailtrain-mysql" - restart: always - environment: - MYSQL_ROOT_PASSWORD: "MYSQL_ROOT_PASS" - MYSQL_DATABASE: "mailtrain" - MYSQL_USER: "mailtrain" - MYSQL_PASSWORD: "MYSQL_USER_PASSWORD" - volumes: - - mailtrain-mysq-data:/var/lib/mysql - - mailtrain-redis: - image: redis:3.0 - container_name: "mailtrain-redis" - volumes: - - mailtrain-redis-data:/data - - mailtrain-node: - image: mailtrain-node:latest - container_name: "mailtrain-node" - links: - - "mailtrain-mysql:mailtrain-mysql" - - "mailtrain-redis:mailtrain-redis" - ports: - - "3000:3000" - volumes: - - "/etc/mailtrain/production.toml:/app/config/production.toml" - - "mailtrain-node-data:/app/public/grapejs/uploads" - - "mailtrain-node-data:/app/public/mosaico/uploads" - volumes: - mailtrain-mysq-data: {} - mailtrain-redis-data: {} - mailtrain-node-data: {} - - ``` - 5. Update MySQL and Redis credintial in `/etc/mailtrain/production.toml` like this: - ``` - [mysql] - host="mailtrain-mysql" - user="mailtrain" - password="MYSQL_USER_PASSWORD" - database="mailtrain" - port=3306 - charset="utf8mb4" - timezone="UTC" - - [redis] - enabled=true - host="mailtrain-redis" - port=6379 - db=5 - ``` - 6. Run docker container with command `sudo docker-compose -f /etc/docker-compose.yml up -d` - 7. Open [http://localhost:3000/](http://localhost:3000/) - 8. Authenticate as `admin`:`test` - 9. Navigate to [http://localhost:3000/settings](http://localhost:3000/settings) and update service configuration - 10. Navigate to [http://localhost:3000/users/account](http://localhost:3000/users/account) and update user information and password + * Download Mailtrain files using git: `git clone git://github.com/Mailtrain-org/mailtrain.git` (or download [zipped repo](https://github.com/Mailtrain-org/mailtrain/archive/master.zip)) and open Mailtrain folder `cd mailtrain` + * **Note**: depending on how you have configured your system and Docker you may need to prepend the commands below with `sudo`. + * Bring up the stack with: `docker-compose up -d`, by default it will use the included `docker-compose.yml` file and override some configurations taken from the `docker-compose.override.yml` file. + * You might want to modify the `docker-compose.yml` or `docker-compose.override.yml` file, modify port mappings, change volume paths, etc. + * If you want to use only / copy the `docker-compose.yml` file (for example, if you were deploying with Rancher), you may need to first run `docker-compose build` to make sure your system has a Docker image `mailtrain:latest`. + * Open [http://localhost:3000/](http://localhost:3000/) (change the host name `localhost` to the name of the host where you are deploying the system). + * Authenticate as `admin`:`test` + * Navigate to [http://localhost:3000/settings](http://localhost:3000/settings) and update service configuration. + * Navigate to [http://localhost:3000/users/account](http://localhost:3000/users/account) and update user information and password. ### Manual Install (any OS that supports Node.js) From 1db7bd987355ba95365d3d4832cd2711b94d6c68 Mon Sep 17 00:00:00 2001 From: witzig Date: Thu, 15 Jun 2017 21:23:35 +0200 Subject: [PATCH 328/483] Bumped deps --- package.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index e466e96b..c0a84364 100644 --- a/package.json +++ b/package.json @@ -32,15 +32,15 @@ }, "devDependencies": { "babel-eslint": "^7.2.3", - "chai": "^3.5.0", - "eslint-config-nodemailer": "^1.0.0", + "chai": "^4.0.2", + "eslint-config-nodemailer": "^1.2.0", "grunt": "^1.0.1", "grunt-cli": "^1.2.0", "grunt-contrib-nodeunit": "^1.0.0", - "grunt-eslint": "^19.0.0", + "grunt-eslint": "^20.0.0", "jsxgettext-andris": "^0.9.0-patch.1", "mocha": "^3.3.0", - "phantomjs": "^2.1.7", + "phantomjs-prebuilt": "^2.1.14", "selenium-webdriver": "^3.4.0", "url-pattern": "^1.0.3" }, @@ -63,13 +63,13 @@ "csv-generate": "^1.0.0", "csv-parse": "^1.2.0", "device": "^0.3.8", - "dompurify": "^0.8.5", + "dompurify": "^0.9.0", "escape-html": "^1.0.3", "express": "^4.15.2", "express-session": "^1.15.2", "faker": "^4.1.0", "feedparser": "^2.1.0", - "file-type": "^4.1.0", + "file-type": "^5.2.0", "fs-extra": "^3.0.1", "geoip-ultralight": "^0.1.5", "gettext-parser": "^1.2.2", @@ -89,7 +89,7 @@ "mailparser": "^2.0.5", "marked": "^0.3.6", "memory-cache": "^0.1.6", - "mjml": "3.3.0", + "mjml": "3.3.3", "mkdirp": "^0.5.1", "moment-timezone": "^0.5.12", "morgan": "^1.8.1", @@ -98,7 +98,7 @@ "mysql": "^2.13.0", "node-gettext": "^2.0.0-rc.1", "node-mocks-http": "^1.6.1", - "nodemailer": "^3.1.8", + "nodemailer": "^4.0.1", "nodemailer-openpgp": "^1.0.2", "npmlog": "^4.0.2", "object-hash": "^1.1.7", @@ -113,7 +113,7 @@ "serve-favicon": "^2.4.2", "shortid": "^2.2.8", "slugify": "^1.1.0", - "smtp-server": "^2.0.3", + "smtp-server": "^3.0.1", "striptags": "^3.0.1", "toml": "^2.3.2", "try-require": "^1.2.1" From 2da90b58e494025eec90d34b6695fbcb1d90b3f9 Mon Sep 17 00:00:00 2001 From: witzig Date: Thu, 15 Jun 2017 21:26:35 +0200 Subject: [PATCH 329/483] Satisfy new eslint indentation rule --- lib/db.js | 6 +++--- lib/file-helpers.js | 10 +++++----- lib/models/fields.js | 2 ++ lib/tools.js | 18 +++++++++--------- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/lib/db.js b/lib/db.js index 8d6fe5db..44f17b0f 100644 --- a/lib/db.js +++ b/lib/db.js @@ -43,9 +43,9 @@ if (config.redis && config.redis.enabled) { return setImmediate(() => callback()); } module.exports.redis.multi(). - lpush('mailtrain:cache:' + key, stringifyDate.stringify(value)). - expire('mailtrain:cache:' + key, 24 * 3600). - exec(err => callback(err)); + lpush('mailtrain:cache:' + key, stringifyDate.stringify(value)). + expire('mailtrain:cache:' + key, 24 * 3600). + exec(err => callback(err)); }; module.exports.getFromCache = (key, callback) => { diff --git a/lib/file-helpers.js b/lib/file-helpers.js index fdad5caf..deee31e1 100644 --- a/lib/file-helpers.js +++ b/lib/file-helpers.js @@ -4,11 +4,11 @@ const path = require('path'); function nameToFileName(name) { return name. - trim(). - toLowerCase(). - replace(/[ .+/]/g, '-'). - replace(/[^a-z0-9\-_]/gi, ''). - replace(/--*/g, '-'); + trim(). + toLowerCase(). + replace(/[ .+/]/g, '-'). + replace(/[^a-z0-9\-_]/gi, ''). + replace(/--*/g, '-'); } diff --git a/lib/models/fields.js b/lib/models/fields.js index 0e955ad8..bda2c1b2 100644 --- a/lib/models/fields.js +++ b/lib/models/fields.js @@ -398,6 +398,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { // ignore missing values return; } + /* eslint-disable indent */ switch (field.type) { case 'text': case 'website': @@ -574,6 +575,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { break; } } + /* eslint-enable indent */ }); return row; diff --git a/lib/tools.js b/lib/tools.js index 18787fc5..89ac47aa 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -35,12 +35,12 @@ module.exports = { function toDbKey(key) { return key. - replace(/[^a-z0-9\-_]/gi, ''). - replace(/\-+/g, '_'). - replace(/[A-Z]/g, c => '_' + c.toLowerCase()). - replace(/^_+|_+$/g, ''). - replace(/_+/g, '_'). - trim(); + replace(/[^a-z0-9\-_]/gi, ''). + replace(/\-+/g, '_'). + replace(/[A-Z]/g, c => '_' + c.toLowerCase()). + replace(/^_+|_+$/g, ''). + replace(/_+/g, '_'). + trim(); } function fromDbKey(key) { @@ -71,9 +71,9 @@ function convertKeys(obj, options) { function queryParams(obj) { return Object.keys(obj). - filter(key => key !== '_csrf'). - map(key => encodeURIComponent(key) + '=' + encodeURIComponent(obj[key])). - join('&'); + filter(key => key !== '_csrf'). + map(key => encodeURIComponent(key) + '=' + encodeURIComponent(obj[key])). + join('&'); } function createSlug(table, name, callback) { From 80aca59af7be456dc0080b8db88c6b95ddd5ba7e Mon Sep 17 00:00:00 2001 From: witzig Date: Thu, 15 Jun 2017 21:28:40 +0200 Subject: [PATCH 330/483] Disable eslint rule no-await-in-loop for e2e tests --- test/e2e/.eslintrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/e2e/.eslintrc b/test/e2e/.eslintrc index a5157382..78fe9cc2 100644 --- a/test/e2e/.eslintrc +++ b/test/e2e/.eslintrc @@ -4,7 +4,8 @@ "strict": 0, "no-console": 0, "comma-dangle": 0, - "arrow-body-style": 0 + "arrow-body-style": 0, + "no-await-in-loop": 0 }, "env": { "mocha": true From 830ca4f17f37f7d6e97097bd8497fec792ca1614 Mon Sep 17 00:00:00 2001 From: witzig Date: Thu, 15 Jun 2017 21:44:54 +0200 Subject: [PATCH 331/483] Satisfy eslint rule no-useless-escape --- lib/models/fields.js | 14 +++++++------- lib/tools.js | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/models/fields.js b/lib/models/fields.js index bda2c1b2..b2adeca3 100644 --- a/lib/models/fields.js +++ b/lib/models/fields.js @@ -311,7 +311,7 @@ function addCustomField(listId, name, defaultValue, type, group, groupTemplate, } if (module.exports.grouped.indexOf(type) < 0) { - column = ('custom_' + slugify(name, '_') + '_' + shortid.generate()).toLowerCase().replace(/[^a-z0-9\_]/g, ''); + column = ('custom_' + slugify(name, '_') + '_' + shortid.generate()).toLowerCase().replace(/[^a-z0-9_]/g, ''); } let query = 'INSERT INTO custom_fields (`list`, `name`, `key`,`default_value`, `type`, `group`, `group_template`, `column`, `visible`) VALUES(?,?,?,?,?,?,?,?,?)'; @@ -414,7 +414,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { visible: !!field.visible, mergeTag: field.key, mergeValue: (valueList[field.column] || '').toString().trim() || field.defaultValue, - ['type' + (field.type || '').toString().trim().replace(/(?:^|\-)([a-z])/g, (m, c) => c.toUpperCase())]: true + ['type' + (field.type || '').toString().trim().replace(/(?:^|-)([a-z])/g, (m, c) => c.toUpperCase())]: true }; row.push(item); break; @@ -444,7 +444,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { visible: !!field.visible, mergeTag: field.key, mergeValue: value || field.defaultValue, - ['type' + (field.type || '').toString().trim().replace(/(?:^|\-)([a-z])/g, (m, c) => c.toUpperCase())]: true + ['type' + (field.type || '').toString().trim().replace(/(?:^|-)([a-z])/g, (m, c) => c.toUpperCase())]: true }; row.push(item); break; @@ -460,7 +460,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { visible: !!field.visible, mergeTag: field.key, mergeValue: (Number(valueList[field.column]) || Number(field.defaultValue) || 0).toString(), - ['type' + (field.type || '').toString().trim().replace(/(?:^|\-)([a-z])/g, (m, c) => c.toUpperCase())]: true + ['type' + (field.type || '').toString().trim().replace(/(?:^|-)([a-z])/g, (m, c) => c.toUpperCase())]: true }; row.push(item); break; @@ -477,7 +477,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { key: 'group-g' + field.id, mergeTag: field.key, mergeValue: field.defaultValue, - ['type' + (field.type || '').toString().trim().replace(/(?:^|\-)([a-z])/g, (m, c) => c.toUpperCase())]: true, + ['type' + (field.type || '').toString().trim().replace(/(?:^|-)([a-z])/g, (m, c) => c.toUpperCase())]: true, groupTemplate: field.groupTemplate, options: (field.options || []).map(subField => { if (onlyExisting && subField.column && !valueList.hasOwnProperty(subField.column)) { @@ -508,7 +508,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { case 'date-us': case 'birthday-us': { - let isUs = /\-us$/.test(field.type); + let isUs = /-us$/.test(field.type); let isYear = field.type.indexOf('date-') === 0; let value = valueList[field.column]; let day, month, year; @@ -569,7 +569,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { visible: !!field.visible, mergeTag: field.key, mergeValue: (useDate ? value : formatted) || field.defaultValue, - ['type' + (field.type || '').toString().trim().replace(/(?:^|\-)([a-z])/g, (m, c) => c.toUpperCase())]: true + ['type' + (field.type || '').toString().trim().replace(/(?:^|-)([a-z])/g, (m, c) => c.toUpperCase())]: true }; row.push(item); break; diff --git a/lib/tools.js b/lib/tools.js index 89ac47aa..ad62a45a 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -36,7 +36,7 @@ module.exports = { function toDbKey(key) { return key. replace(/[^a-z0-9\-_]/gi, ''). - replace(/\-+/g, '_'). + replace(/-+/g, '_'). replace(/[A-Z]/g, c => '_' + c.toLowerCase()). replace(/^_+|_+$/g, ''). replace(/_+/g, '_'). @@ -50,7 +50,7 @@ function fromDbKey(key) { prefix = '_'; } - return prefix + key.replace(/[_\-]([a-z])/g, (m, c) => c.toUpperCase()); + return prefix + key.replace(/[_-]([a-z])/g, (m, c) => c.toUpperCase()); } function convertKeys(obj, options) { From a2ebe8f0f72afe8eede4a92303e48aba4b73892a Mon Sep 17 00:00:00 2001 From: witzig Date: Fri, 16 Jun 2017 02:13:21 +0200 Subject: [PATCH 332/483] Fixed mail-helper.js not calling back when disableConfirmations = true And some refactoring --- lib/subscription-mail-helpers.js | 40 +++++++++++++++----------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/lib/subscription-mail-helpers.js b/lib/subscription-mail-helpers.js index cfbac97e..16e6cdaa 100644 --- a/lib/subscription-mail-helpers.js +++ b/lib/subscription-mail-helpers.js @@ -96,7 +96,7 @@ function sendMail(list, email, template, subject, relativeUrls, mailOpts, subscr } if (!mailOpts.ignoreDisableConfirmations && configItems.disableConfirmations) { - return; + return callback(); } const data = { @@ -110,7 +110,22 @@ function sendMail(list, email, template, subject, relativeUrls, mailOpts, subscr data[relativeUrlKey] = urllib.resolve(configItems.serviceUrl, relativeUrls[relativeUrlKey]); } - function sendMail(html, text) { + let text = { + template: 'subscription/mail-' + template + '-text.hbs' + }; + + let html = { + template: 'subscription/mail-' + template + '-html.mjml.hbs', + layout: 'subscription/layout.mjml.hbs', + type: 'mjml' + }; + + helpers.injectCustomFormTemplates(list.defaultForm, { text, html }, (err, tmpl) => { + if (!err && tmpl) { + text = tmpl.text || text; + html = tmpl.html || html; + } + mailer.sendMail({ from: { name: configItems.defaultFrom, @@ -129,29 +144,12 @@ function sendMail(list, email, template, subject, relativeUrls, mailOpts, subscr }, err => { if (err) { log.error('Subscription', err); + return callback(err); } + callback(); }); - } - let text = { - template: 'subscription/mail-' + template + '-text.hbs' - }; - - let html = { - template: 'subscription/mail-' + template + '-html.mjml.hbs', - layout: 'subscription/layout.mjml.hbs', - type: 'mjml' - }; - - helpers.injectCustomFormTemplates(list.defaultForm, { text, html }, (err, tmpl) => { - if (err) { - return sendMail(html, text); - } - - sendMail(tmpl.html, tmpl.text); }); - - return callback(); }); }); } From 5647dd040d1e64f43b31fd68e2ae9ad409bf4ce4 Mon Sep 17 00:00:00 2001 From: witzig Date: Fri, 16 Jun 2017 14:28:57 +0200 Subject: [PATCH 333/483] Updated subscription-mail-helper.js - Don't wait for mailer to finish. Note: When using encryptionKeys, confirmation redirects feel a bit sluggish. This could probably be 'improved' by calling sendMail via setTimout or fixed by moving sendMail to a worker. --- lib/subscription-mail-helpers.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/subscription-mail-helpers.js b/lib/subscription-mail-helpers.js index 16e6cdaa..71ed13af 100644 --- a/lib/subscription-mail-helpers.js +++ b/lib/subscription-mail-helpers.js @@ -144,11 +144,11 @@ function sendMail(list, email, template, subject, relativeUrls, mailOpts, subscr }, err => { if (err) { log.error('Subscription', err); - return callback(err); } - callback(); }); + callback(); + }); }); }); From 8b900a9c446fa6c52ec40384ee57e11888b0a720 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Tue, 20 Jun 2017 16:47:25 +0300 Subject: [PATCH 334/483] Removed ads from code --- views/index.hbs | 38 +------------------------------------- views/settings.hbs | 5 +---- 2 files changed, 2 insertions(+), 41 deletions(-) diff --git a/views/index.hbs b/views/index.hbs index 57b2b412..208020e0 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -109,7 +109,7 @@

    {{#translate}}Send via Any Provider{{/translate}}

    -

    {{#translate}}Mailtrain recommends SendPulse even though you can use any provider that supports SMTP protocol to send out your newsletters. Bounce and complaints handling via webhooks is supported for SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA.{{/translate}}

    +

    {{#translate}}You can use any provider that supports SMTP protocol to send out your newsletters. Bounce and complaints handling via webhooks is supported for SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA.{{/translate}}

    {{> modal_carousel title='Send via Any Provider' @@ -130,40 +130,4 @@
    -


    - -
    -
    -

    {{#translate}}Donate to Author{{/translate}}

    -

    {{#translate}}Mailtrain is available under GPLv3 license and completely open source.{{/translate}}

    -

    {{#translate}}If you really like Mailtrain or your business benefits from it financially then I would really appreciate a small donation to keep the Mailtrain development engines running. You can either use Bitcoin or PayPal for donations. My Bitcoin wallet is{{/translate}}: 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM

    -

    {{#translate}}Or Donate Using Paypal{{/translate}}

    -
    -
    - -


    - -
    -
    -

    {{#translate}}Official Mailtrain Partners{{/translate}}

    -
    -
    -
    -

    - - SendPulse - -

    -

    {{#translate}}A reliable SMTP server, easy integration, and 12,000 messages a month free{{/translate}}

    -
    -
    -

    - - iRedMail - -

    -

    {{#translate}}Free, open source mail server solution{{/translate}}

    -
    -
    -




    diff --git a/views/settings.hbs b/views/settings.hbs index 1f4d345e..52472225 100644 --- a/views/settings.hbs +++ b/views/settings.hbs @@ -252,12 +252,9 @@
    -
    +
    -
    -

    {{#translate}}Don't have an SMTP account yet? Create a free SendPulse account{{/translate}} {{#translate}}here{{/translate}}

    -
    From 3c4558d70c5c55d1ed4b6e2515f9674e19517dd8 Mon Sep 17 00:00:00 2001 From: witzig Date: Tue, 20 Jun 2017 18:57:35 +0200 Subject: [PATCH 335/483] Refactored and linted editorapi image handling --- Gruntfile.js | 2 +- package.json | 1 - routes/editorapi.js | 573 ++++++++++++++++++++------------------- routes/grapejs.js | 61 +++-- views/grapejs/editor.hbs | 14 +- 5 files changed, 347 insertions(+), 304 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index daf89982..1ec322bc 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -5,7 +5,7 @@ module.exports = function (grunt) { // Project configuration. grunt.initConfig({ eslint: { - all: ['lib/**/*.js', 'test/**/*.js', 'config/**/*.js', 'Gruntfile.js', 'app.js', 'index.js'] + all: ['lib/**/*.js', 'test/**/*.js', 'config/**/*.js', 'Gruntfile.js', 'app.js', 'index.js', 'routes/editorapi.js'] }, nodeunit: { diff --git a/package.json b/package.json index c0a84364..069bf284 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,6 @@ "express-session": "^1.15.2", "faker": "^4.1.0", "feedparser": "^2.1.0", - "file-type": "^5.2.0", "fs-extra": "^3.0.1", "geoip-ultralight": "^0.1.5", "gettext-parser": "^1.2.2", diff --git a/routes/editorapi.js b/routes/editorapi.js index e927163d..a285fab6 100644 --- a/routes/editorapi.js +++ b/routes/editorapi.js @@ -1,38 +1,34 @@ 'use strict'; -let log = require('npmlog'); -let config = require('config'); -let express = require('express'); -let router = new express.Router(); -let passport = require('../lib/passport'); -let os = require('os'); -let fs = require('fs'); -let path = require('path'); -let mkdirp = require('mkdirp'); -let cache = require('memory-cache'); -let crypto = require('crypto'); -let fetch = require('node-fetch'); -let events = require('events'); -let httpMocks = require('node-mocks-http'); -let multiparty = require('multiparty'); -let fileType = require('file-type'); -let escapeStringRegexp = require('escape-string-regexp'); -let jqueryFileUpload = require('jquery-file-upload-middleware'); -let gm = require('gm').subClass({ +const log = require('npmlog'); +const config = require('config'); +const express = require('express'); +const router = new express.Router(); +const passport = require('../lib/passport'); +const os = require('os'); +const fs = require('fs'); +const path = require('path'); +const mkdirp = require('mkdirp'); +const crypto = require('crypto'); +const events = require('events'); +const httpMocks = require('node-mocks-http'); +const multiparty = require('multiparty'); +const escapeStringRegexp = require('escape-string-regexp'); +const jqueryFileUpload = require('jquery-file-upload-middleware'); +const gm = require('gm').subClass({ imageMagick: true }); -let url = require('url'); -let htmlToText = require('html-to-text'); -let premailerApi = require('premailer-api'); -let editorHelpers = require('../lib/editor-helpers'); -let _ = require('../lib/translate')._; -let mailer = require('../lib/mailer'); -let settings = require('../lib/models/settings'); -let templates = require('../lib/models/templates'); -let campaigns = require('../lib/models/campaigns'); +const url = require('url'); +const htmlToText = require('html-to-text'); +const premailerApi = require('premailer-api'); +const _ = require('../lib/translate')._; +const mailer = require('../lib/mailer'); +const settings = require('../lib/models/settings'); +const templates = require('../lib/models/templates'); +const campaigns = require('../lib/models/campaigns'); router.all('/*', (req, res, next) => { - if (!req.user && !cache.get(req.get('If-Match'))) { + if (!req.user) { return res.status(403).send(_('Need to be logged in to access restricted content')); } if (req.originalUrl.startsWith('/editorapi/img?')) { @@ -48,30 +44,150 @@ jqueryFileUpload.on('begin', fileInfo => { fileInfo.name = fileInfo.name .toLowerCase() .replace(/ /g, '-') - .replace(/[^a-z0-9+-\.]+/g, ''); + .replace(/[^a-z0-9+-.]+/g, ''); }); -let listImages = (dir, dirURL, callback) => { +const listImages = (dir, dirURL, callback) => { fs.readdir(dir, (err, files = []) => { if (err && err.code !== 'ENOENT') { return callback(err.message || err); } files = files.filter(name => /\.(jpe?g|png|gif)$/i.test(name)); - files = files.map(name => { - return { - // mosaico - name, - url: dirURL + '/' + name, - thumbnailUrl: dirURL + '/thumbnail/' + name, - // grapejs - src: dirURL + '/' + name, - }; - }); + files = files.map(name => ({ + // mosaico + name, + url: dirURL + '/' + name, + thumbnailUrl: dirURL + '/thumbnail/' + name, + // grapejs + src: dirURL + '/' + name + })); callback(null, files); }); }; +const placeholderImage = (width, height, callback) => { + const magick = gm(width, height, '#707070'); + const size = 40; + let x = 0; + let y = 0; + + // stripes + while (y < height) { + magick + .fill('#808080') + .drawPolygon([x, y], [x + size, y], [x + size * 2, y + size], [x + size * 2, y + size * 2]) + .drawPolygon([x, y + size], [x + size, y + size * 2], [x, y + size * 2]); + x = x + size * 2; + if (x > width) { + x = 0; + y = y + size * 2; + } + } + + // text + magick + .fill('#B0B0B0') + .fontSize(20) + .drawText(0, 0, width + ' x ' + height, 'center'); + + magick.stream('png', (err, stream) => { + if (err) { + return callback(err); + } + + const image = { + format: 'PNG', + stream + }; + + callback(null, image); + }); +}; + +const resizedImage = (src, method, width, height, callback) => { + const pathname = path.join('/', url.parse(src).pathname); + const filePath = path.join(__dirname, '..', 'public', pathname); + const magick = gm(filePath); + + magick.format((err, format) => { + if (err) { + return callback(err); + } + + const streamHandler = (err, stream) => { + if (err) { + return callback(err); + } + + const image = { + format, + stream + }; + + callback(null, image); + }; + + switch (method) { + case 'resize': + return magick + .autoOrient() + .resize(width, height) + .stream(streamHandler); + + case 'cover': + return magick + .autoOrient() + .resize(width, height + '^') + .gravity('Center') + .extent(width, height + '>') + .stream(streamHandler); + + default: + return callback(new Error(_('Method not supported'))); + } + }); +}; + +const getProcessedImage = (dynamicUrl, callback) => { + if (!dynamicUrl.includes('/editorapi/img?')) { + return callback(new Error('Invalid dynamicUrl')); + } + + const { + src, + method, + params = '600,null' + } = url.parse(dynamicUrl, true).query; + + let width = params.split(',')[0]; + let height = params.split(',')[1]; + + const sanitizeSize = (val, min, max, defaultVal, allowNull) => { + if (val === 'null' && allowNull) { + return null; + } + val = Number(val) || defaultVal; + val = Math.max(min, val); + val = Math.min(max, val); + return val; + }; + + if (method === 'placeholder') { + width = sanitizeSize(width, 1, 2048, 600, false); + height = sanitizeSize(height, 1, 2048, 300, false); + placeholderImage(width, height, callback); + } else { + width = sanitizeSize(width, 1, 2048, 600, false); + height = sanitizeSize(height, 1, 2048, 300, true); + resizedImage(src, method, width, height, callback); + } +}; + const getStaticImageUrl = (dynamicUrl, staticDir, staticDirUrl, callback) => { + if (!dynamicUrl.includes('/editorapi/img?')) { + return callback(null, dynamicUrl); + } + mkdirp(staticDir, err => { if (err) { return callback(err); @@ -82,242 +198,126 @@ const getStaticImageUrl = (dynamicUrl, staticDir, staticDirUrl, callback) => { return callback(err); } - let hash = crypto.createHash('md5').update(dynamicUrl).digest('hex'); - let match = files.find(el => el.startsWith(hash)); - let headers = {}; + const hash = crypto.createHash('md5').update(dynamicUrl).digest('hex'); + const match = files.find(el => el.startsWith(hash)); if (match) { return callback(null, staticDirUrl + '/' + match); } - if (dynamicUrl.includes('/editorapi/img?')) { - let token = crypto.randomBytes(16).toString('hex'); - cache.put(token, true, 1000); - headers['If-Match'] = token; - } + getProcessedImage(dynamicUrl, (err, image) => { + if (err) { + return callback(err); + } - fetch(dynamicUrl, { - headers - }) - .then(res => { - if (res.status < 200 || res.status >= 300) { - throw new Error(`Received HTTP status code ${res.status} while fetching image ${dynamicUrl}`); - } - return res.buffer(); - }) - .then(buffer => { - let ft = fileType(buffer); - if (ft && ['image/jpeg', 'image/png', 'image/gif'].includes(ft.mime)) { - fs.writeFile(path.join(staticDir, hash + '.' + ft.ext), buffer, err => { - if (err) { - throw err; - } - let staticUrl = staticDirUrl + '/' + hash + '.' + ft.ext; - callback(null, staticUrl); - }); - } else { - throw new Error(`Unsupported image MIME type for ${dynamicUrl}`); - } - }) - .catch(err => { - callback(err); - }); + const fileName = hash + '.' + image.format.toLowerCase(); + const filePath = path.join(staticDir, fileName); + const fileUrl = staticDirUrl + '/' + fileName; + + const writeStream = fs.createWriteStream(filePath); + writeStream.on('error', err => callback(err)); + writeStream.on('finish', () => callback(null, fileUrl)); + image.stream.pipe(writeStream); + }); }); }); }; -let prepareHtml = ({ - editorName, - html -}, callback) => { +const prepareHtml = (html, editorName, callback) => { settings.get('serviceUrl', (err, serviceUrl) => { if (err) { return callback(err.message || err); } + const srcs = new Map(); + const re = /]+src="([^"]*\/editorapi\/img\?[^"]+)"/ig; let jobs = 0; - let srcs = {}; - let re = /]+src="([^"]+)"/g; let result; while ((result = re.exec(html)) !== null) { - srcs[result[1]] = result[1]; + srcs.set(result[1], result[1]); } - let done = () => { + const done = () => { if (jobs === 0) { - Object.keys(srcs).forEach(src => { - // console.log(`replace dynamic - ${src} - with static - ${srcs[src]}`); - html = html.replace(new RegExp(escapeStringRegexp(src), 'g'), srcs[src]); - }); - callback(null, html); + for (const [key, value] of srcs) { + // console.log(`replace dynamicUrl: ${key} - with staticUrl: ${value}`); + html = html.replace(new RegExp(escapeStringRegexp(key), 'g'), value); + } + return callback(null, html); } }; const staticDir = path.join(__dirname, '..', 'public', editorName, 'uploads', 'static'); const staticDirUrl = url.resolve(serviceUrl, editorName + '/uploads/static'); - Object.keys(srcs).forEach(src => { + for (const key of srcs.keys()) { jobs++; - let dynamicUrl = src.replace(/&/g, '&'); - dynamicUrl = /^https?:\/\/|^\/\//i.test(dynamicUrl) ? dynamicUrl : url.resolve(serviceUrl, dynamicUrl); + const dynamicUrl = key.replace(/&/g, '&'); getStaticImageUrl(dynamicUrl, staticDir, staticDirUrl, (err, staticUrl) => { if (err) { // TODO: Send a warning back to the editor. For now we just skip image resizing. - log.error('editorapi', err.message || err); + log.error('editorapi', err); if (dynamicUrl.includes('/editorapi/img?')) { - staticUrl = url.parse(dynamicUrl, true).query.src || dynamicUrl; + staticUrl = url.parse(dynamicUrl, true).query.src || dynamicUrl; } else { staticUrl = dynamicUrl; } + + if (!/^https?:\/\/|^\/\//i.test(staticUrl)) { + staticUrl = url.resolve(serviceUrl, staticUrl); + } } - srcs[src] = staticUrl; + srcs.set(key, staticUrl); jobs--; done(); }); - }); + } done(); }); }; -let placeholderImage = (req, res, { - width, - height -}) => { - let magick = gm(width, height, '#707070'); - let x = 0; - let y = 0; - let size = 40; - // stripes - while (y < height) { - magick = magick - .fill('#808080') - .drawPolygon([x, y], [x + size, y], [x + size * 2, y + size], [x + size * 2, y + size * 2]) - .drawPolygon([x, y + size], [x + size, y + size * 2], [x, y + size * 2]); - x = x + size * 2; - if (x > width) { - x = 0; - y = y + size * 2; - } - } - // text - magick = magick - .fill('#B0B0B0') - .fontSize(20) - .drawText(0, 0, width + ' x ' + height, 'center'); - - res.set('Content-Type', 'image/png'); - magick.stream('png').pipe(res); -}; - -let resizedImage = (req, res, { - src, - method, - width, - height -}) => { - let magick = gm(src); - magick.format((err, format) => { - if (err) { - return res.status(500).send(err.message || err); - } - - switch (method) { - case 'resize': - res.set('Content-Type', 'image/' + format.toLowerCase()); - magick.autoOrient() - .resize(width, height) - .stream() - .pipe(res); - return; - - case 'cover': - res.set('Content-Type', 'image/' + format.toLowerCase()); - magick.autoOrient() - .resize(width, height + '^') - .gravity('Center') - .extent(width, height + '>') - .stream() - .pipe(res); - return; - - default: - res.status(501).send(_('Method not supported')); - } - }); -}; - +// URL structure defined by Mosaico // /editorapi/img?src=" + encodeURIComponent(src) + "&method=" + encodeURIComponent(method) + "¶ms=" + encodeURIComponent(width + "," + height); -router.get('/img', passport.csrfProtection, (req, res) => { - settings.get('serviceUrl', (err, serviceUrl) => { +router.get('/img', (req, res) => { + getProcessedImage(req.originalUrl, (err, image) => { if (err) { - return res.status(500).send(err.message || err); + res.status(err.status || 500); + res.send(err.message || err); + return; } - let { - src, - method, - params = '600,null' - } = req.query; - let width = params.split(',')[0]; - let height = params.split(',')[1]; - width = (width === 'null') ? null : Number(width); - height = (height === 'null') ? null : Number(height); - - switch (method) { - case 'placeholder': - return placeholderImage(req, res, { - width, - height - }); - case 'resize': - case 'cover': - src = /^https?:\/\/|^\/\//i.test(src) ? src : url.resolve(serviceUrl, src); - return resizedImage(req, res, { - src, - method, - width, - height - }); - default: - return res.status(501).send(_('Method not supported')); - } + res.set('Content-Type', 'image/' + image.format.toLowerCase()); + image.stream.pipe(res); }); }); router.post('/update', passport.parseForm, passport.csrfProtection, (req, res) => { - prepareHtml({ - editorName: req.query.editor, - html: req.body.html - }, (err, html) => { + const sendResponse = err => { if (err) { return res.status(500).send(err.message || err); } + res.send('ok'); + }; + + prepareHtml(req.body.html, req.query.editor, (err, html) => { + if (err) { + return sendResponse(err); + } req.body.html = html; - if (req.query.type === 'template') { - templates.update(req.body.id, req.body, (err, updated) => { - if (err) { - return res.status(500).send(err.message || err); - } - res.send('ok'); - }); - - } else if (req.query.type === 'campaign') { - campaigns.update(req.body.id, req.body, (err, updated) => { - if (err) { - return res.status(500).send(err.message || err); - } - res.send('ok'); - }); - - } else { - res.status(500).send(_('Invalid resource type')); + switch (req.query.type) { + case 'template': + return templates.update(req.body.id, req.body, sendResponse); + case 'campaign': + return campaigns.update(req.body.id, req.body, sendResponse); + default: + return sendResponse(new Error(_('Invalid resource type'))); } }); }); @@ -331,8 +331,8 @@ router.get('/upload', passport.csrfProtection, (req, res) => { return res.status(500).send(err.message || err); } - let baseDir = path.join(__dirname, '..', 'public', req.query.editor, 'uploads'); - let baseDirUrl = serviceUrl + req.query.editor + '/uploads'; + const baseDir = path.join(__dirname, '..', 'public', req.query.editor, 'uploads'); + const baseDirUrl = serviceUrl + req.query.editor + '/uploads'; listImages(path.join(baseDir, '0'), baseDirUrl + '/0', (err, sharedImages) => { if (err) { @@ -358,55 +358,78 @@ router.get('/upload', passport.csrfProtection, (req, res) => { }); router.post('/upload', passport.csrfProtection, (req, res) => { - let dirName = req.query.type === 'template' ? '0' : - req.query.type === 'campaign' && Number(req.query.id) > 0 ? req.query.id : - null; - - if (dirName === null) { - return res.status(500).send(_('Invalid resource type or ID')); - } - - let opts = { - tmpDir: config.www.tmpdir || os.tmpdir(), - imageVersions: req.query.editor === 'mosaico' ? { - thumbnail: { - width: 90, - height: 90 - } - } : {}, - uploadDir: path.join(__dirname, '..', 'public', req.query.editor, 'uploads', dirName), - uploadUrl: '/' + req.query.editor + '/uploads/' + dirName, // must be root relative - acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, - }; - - let mockres = httpMocks.createResponse({ - eventEmitter: events.EventEmitter - }); - - mockres.on('end', () => { - if (req.query.editor === 'grapejs') { - let data = []; - JSON.parse(mockres._getData()).files.forEach(file => { - data.push({ - src: file.url - }); - }); - res.json({ - data - }); - } else { - res.send(mockres._getData()); + settings.get('serviceUrl', (err, serviceUrl) => { + if (err) { + return res.status(500).send(err.message || err); } - }); - jqueryFileUpload.fileHandler(opts)(req, mockres); + const getDirName = () => { + switch (req.query.type) { + case 'template': + return '0'; + case 'campaign': + return Number(req.query.id) > 0 ? req.query.id : false; + default: + return false; + } + }; + + const dirName = getDirName(); + + if (dirName === false) { + return res.status(500).send(_('Invalid resource type or ID')); + } + + const opts = { + tmpDir: config.www.tmpdir || os.tmpdir(), + imageVersions: req.query.editor === 'mosaico' ? { + thumbnail: { + width: 90, + height: 90 + } + } : {}, + uploadDir: path.join(__dirname, '..', 'public', req.query.editor, 'uploads', dirName), + uploadUrl: '/' + req.query.editor + '/uploads/' + dirName, // must be root relative + acceptFileTypes: /\.(gif|jpe?g|png)$/i, + hostname: url.parse(serviceUrl).host // include port + }; + + const mockres = httpMocks.createResponse({ + eventEmitter: events.EventEmitter + }); + + mockres.on('error', err => { + res.status(500).json({ + error: err.message || err, + data: [] + }); + }); + + mockres.on('end', () => { + const data = []; + try { + JSON.parse(mockres._getData()).files.forEach(file => { + data.push({ + src: file.url + }); + }); + res.json({ + data + }); + } catch(err) { + res.status(500).json({ + error: err.message || err, + data + }); + } + }); + + jqueryFileUpload.fileHandler(opts)(req, req.query.editor === 'grapejs' ? mockres : res); + }); }); router.post('/download', passport.csrfProtection, (req, res) => { - prepareHtml({ - editorName: req.query.editor, - html: req.body.html - }, (err, html) => { + prepareHtml(req.body.html, req.query.editor, (err, html) => { if (err) { return res.status(500).send(err.message || err); } @@ -416,9 +439,12 @@ router.post('/download', passport.csrfProtection, (req, res) => { }); }); -let parseGrapejsMultipartTestForm = (req, res, next) => { +const parseGrapejsMultipartTestForm = (req, res, next) => { if (req.query.editor === 'grapejs') { - new multiparty.Form().parse(req, (err, fields, files) => { + new multiparty.Form().parse(req, (err, fields) => { + if (err) { + return next(err); + } req.body.email = fields.email[0]; req.body.subject = fields.subject[0]; req.body.html = fields.html[0]; @@ -431,7 +457,7 @@ let parseGrapejsMultipartTestForm = (req, res, next) => { }; router.post('/test', parseGrapejsMultipartTestForm, passport.csrfProtection, (req, res) => { - let sendError = err => { + const sendError = err => { if (req.query.editor === 'grapejs') { res.status(500).json({ errors: err.message || err @@ -441,10 +467,7 @@ router.post('/test', parseGrapejsMultipartTestForm, passport.csrfProtection, (re } }; - prepareHtml({ - editorName: req.query.editor, - html: req.body.html - }, (err, html) => { + prepareHtml(req.body.html, req.query.editor, (err, html) => { if (err) { return sendError(err); } @@ -459,29 +482,31 @@ router.post('/test', parseGrapejsMultipartTestForm, passport.csrfProtection, (re return sendError(err); } - let opts = { + const opts = { from: { name: configItems.defaultFrom, - address: configItems.defaultAddress, + address: configItems.defaultAddress }, to: req.body.email, subject: req.body.subject, text: htmlToText.fromString(html, { wordwrap: 100 }), - html, + html }; - transport.sendMail(opts, (err, info) => { + transport.sendMail(opts, err => { if (err) { return sendError(err); } - req.query.editor === 'grapejs' ? + if (req.query.editor === 'grapejs') { res.json({ data: 'ok' - }) : + }); + } else { res.send('ok'); + } }); }); }); diff --git a/routes/grapejs.js b/routes/grapejs.js index 5b32cf35..38546503 100644 --- a/routes/grapejs.js +++ b/routes/grapejs.js @@ -7,6 +7,7 @@ const passport = require('../lib/passport'); const _ = require('../lib/translate')._; const fs = require('fs'); const path = require('path'); +const settings = require('../lib/models/settings'); const editorHelpers = require('../lib/editor-helpers') router.all('/*', (req, res, next) => { @@ -18,44 +19,52 @@ router.all('/*', (req, res, next) => { }); router.get('/editor', passport.csrfProtection, (req, res) => { - editorHelpers.getResource(req.query.type, req.query.id, (err, resource) => { + settings.get('serviceUrl', (err, serviceUrl) => { if (err) { req.flash('danger', err.message || err); return res.redirect('/'); } - try { - resource.editorData = JSON.parse(resource.editorData); - } catch (err) { - resource.editorData = { - template: req.query.template || 'demo' + editorHelpers.getResource(req.query.type, req.query.id, (err, resource) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/'); } - } - if (!resource.html && !resource.editorData.html && !resource.editorData.mjml) { - const base = path.join(__dirname, '..', 'public', 'grapejs', 'templates', resource.editorData.template); try { - resource.editorData.mjml = fs.readFileSync(path.join(base, 'index.mjml'), 'utf8'); + resource.editorData = JSON.parse(resource.editorData); } catch (err) { - try { - resource.html = fs.readFileSync(path.join(base, 'index.html'), 'utf8'); - } catch (err) { - resource.html = err.message || err; + resource.editorData = { + template: req.query.template || 'demo' } } - } - res.render('grapejs/editor', { - layout: 'grapejs/layout-editor', - type: req.query.type, - stringifiedResource: JSON.stringify(resource), - resource, - editor: { - name: resource.editorName || 'grapejs', - mode: resource.editorData.mjml ? 'mjml' : 'html', - config: config.grapejs - }, - csrfToken: req.csrfToken() + if (!resource.html && !resource.editorData.html && !resource.editorData.mjml) { + const base = path.join(__dirname, '..', 'public', 'grapejs', 'templates', path.join('/', resource.editorData.template)); + try { + resource.editorData.mjml = fs.readFileSync(path.join(base, 'index.mjml'), 'utf8'); + } catch (err) { + try { + resource.html = fs.readFileSync(path.join(base, 'index.html'), 'utf8'); + } catch (err) { + resource.html = err.message || err; + } + } + } + + res.render('grapejs/editor', { + layout: 'grapejs/layout-editor', + type: req.query.type, + stringifiedResource: JSON.stringify(resource), + resource, + editor: { + name: resource.editorName || 'grapejs', + mode: resource.editorData.mjml ? 'mjml' : 'html', + config: config.grapejs + }, + csrfToken: req.csrfToken(), + serviceUrl + }); }); }); }); diff --git a/views/grapejs/editor.hbs b/views/grapejs/editor.hbs index 1867139a..1a53f82d 100644 --- a/views/grapejs/editor.hbs +++ b/views/grapejs/editor.hbs @@ -129,6 +129,7 @@ -``` - -## Cloudron - -You can easily install and self-host Mailtrain on the Cloudron to send newsletters from your custom domain: - -[![Install](https://cloudron.io/img/button.svg)](https://cloudron.io/button.html?app=org.mailtrain.cloudronapp) - -The source code for the Cloudron app is [here](https://git.cloudron.io/cloudron/mailtrain-app). - -## Bounce Handling - -Mailtrain uses webhooks integration to detect bounces and spam complaints. Currently supported webhooks are: - - * **AWS SES** – create a SNS topic for complaints and bounces and use `http://domain/webhooks/aws` as the subscriber URL for these topics - * **SparkPost** – use `http://domain/webhooks/sparkpost` as the webhook URL for bounces and complaints ([instructions](https://github.com/Mailtrain-org/mailtrain/wiki/Setting-up-Webhooks-for-SparkPost)) - * **SendGrid** – use `http://domain/webhooks/sendgrid` as the webhook URL for bounces and complaints ([instructions](https://github.com/Mailtrain-org/mailtrain/wiki/Setting-up-Webhooks-for-SendGrid)) - * **Mailgun** – use `http://domain/webhooks/mailgun` as the webhook URL for bounces and complaints ([instructions](https://github.com/Mailtrain-org/mailtrain/wiki/Setting-up-Webhooks-for-Mailgun)) - * **ZoneMTA** – use `http://domain/webhooks/zone-mta` as the webhook URL for bounces. If you install Mailtrain with the included installation script then this route gets set up automatically during the installation process - * **Postfix** – This is not a webhook but a TCP server on port 5699 to listen for piped Postfix logs. Enable it with the `[postfixbounce]` config option. To use it, pipe the log to that port using *tail*: `tail -F /var/log/mail.log | nc localhost 5699 -` (if Mailtrain restarts then you need to re-establish the *tail* pipe), alternatively you could send the log with a cron job periodically `tail -n 100 | nc localhost 5699 -`. - -Additionally Mailtrain (v1.1+) is able to use VERP-based bounce handling. This would require to have a compatible SMTP relay (the services mentioned above strip out or block VERP addresses in the SMTP envelope) and you also need to set up special MX DNS name that points to your Mailtrain installation server. - -If using VERP with iRedMail, see [this post](http://www.iredmail.org/forum/post49325.html#p49325) for correct configuration as iRedMail blocks by default senders that do not match authentication username (VERP address and user account address are different). - -## Testing - -There is a built in /dev/null server in Mailtrain that you can use to load test your installation. Check the `[testserver]` section in the configuration file for details. By default the test server is disabled. The server uses only cleartext connections, so select "Do not use encryption" in the encryption settings when setting up the server data in Mailtrain. - -Additionally you can generate CSV import files with fake subscriber data: - -``` -node setup/fakedata.js > somefile.csv -``` - -This command generates a CSV file with 100 000 subscriber accounts - -## Translations - -Mailtrain is currently not translated but it supports translations. To add translations you first need to add translation support for the translatable strings. To test if strings are translatable or not, use a fake language with code "zz" - -```toml -language="zz" -``` - -This would modify all input strings. If a string is not modified then it does not support translations. - -![](https://cldup.com/qXxAbaq2F1.png) - -### Translating JavaScript Files - -To translate JavaScript strings you need to make sure that you have loaded the translating function `_` from *'./lib/translate.js'*. If you want to use variables in strings then you also need the *'util'* module. - -```javascript -const _ = require('./path/to/lib/translate')._; -const util = require('util'); // optional -``` - -All you need to do to translate strings is to enclose these in the `_()` function - -```javascript -let str1 = _('This string will be translated'); -let str2 = util.format( _('My name is "%s"'), 'Mailtrain'); -``` - -### Translating Handlebars Files - -Enclose translatable strings to `{{#translate}}` tags - -```handlebars -

    - Mailtrain – {{#translate}}the best newsletter app{{/translate}} -

    -``` - -### Managing Translations - -* Translations are loaded from Gettext MO files. In order to generate such files you need a Gettext translations editor. [POEdit](https://poedit.net/) is a great choice. - -* To create the translation catalog run `grunt` from command line. This fetches all translatable strings from JavaScript and Handlebars files and merges these into the translation catalog located at */languages/mailtrain.pot* - -* To add a new language use this catalog file as source. Once you want to update your translation file from the updated catalog, then select "Catalogue" -> "Update from POT file..." in POEdit and select mailtrain.pot. This would merge all new translations from the POT file to your PO file. - *If you have saved the PO file in [./languages](./languages) then POEdit should auto generate required MO file whenever you hit save for the PO file. - -* Once you have a correct MO file in the languages folder, then edit Mailtrain config and set ["language" option](https://github.com/Mailtrain-org/mailtrain/blob/ba8bd1212335cb9bd7ba094beb7b5400f35cae6c/config/default.toml#L30-L31) to your language name. If the value is "et" then Mailtrain loads translations from ./languages/et.mo - -> **NB!** For now translation settings are global, so if you have set a translation in config then this applies to all users. An user can't select another translation than the default even if there is a translation file. This is because current Mailtrain code does not provide request context to functions and the functions generating strings do not know which language to use. ## License diff --git a/docs/README.md b/docs/README.md index 209212f3..39db88e8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1 +1,342 @@ -Here should be the docs +# Mailtrain + +[Mailtrain](http://mailtrain.org) is a self hosted newsletter application built on Node.js (v7+) and MySQL (v5.5+ or MariaDB). + +![](http://mailtrain.org/mailtrain.png) + +> Mailtrain requires at least **Node.js v7**. If you want to use an older version of Node.js then you should use version v1.24 of Mailtrain. You can either download it [here](https://github.com/Mailtrain-org/mailtrain/archive/v1.24.0.zip) or if using git then run `git checkout v1.24.0` before starting it + +## Features + +Mailtrain supports subscriber list management, list segmentation, custom fields, email templates, large CSV list import files, etc. + +Subscribe to Mailtrain Newsletter [here](http://mailtrain.org/subscription/EysIv8sAx) (uses Mailtrain obviously) + + +## Contents + +* [Official Partners](#official-partners) +* [Cons](#cons) +* [Requirements](#requirements) +* [Installation](#installation) +* [Upgrade](#upgrade) +* [Using Environment Variables](#using-environment-variables) +* [Subscription Widget](#subscription-widget) +* [Cloudron](#cloudron) +* [Bounce Handling](#bounce-handling) +* [Testing](#testing) +* [Translations](#translations) +* [License](#license) + +## Official Partners + +### iRedMail + +![](https://mailtrain.org/images/iredmail-logo-red-114.png) + +[iRedMail](http://www.iredmail.org/) Free, open source mail server solution + +### ZoneMTA + +Check out [ZoneMTA](https://github.com/zone-eu/zone-mta) as an alternative self hosted MTA + +## Cons + + * Beta-grade software. Might or might not work as expected. There are several users with list sizes between 100k and 1M and Mailtrain seems to work for them but YMMV + * Almost no documentation (there are some guides in the [Wiki](https://github.com/Mailtrain-org/mailtrain/wiki)) + +## Requirements + + * Nodejs v7+ + * MySQL v5.5 or MariaDB + * Redis. Optional, disabled by default. Used for session storage and for caching state between multiple processes. If you do not have Redis enabled then you can only use a single sender process + +## Installation + +### Simple Install (Ubuntu) + +You can download and run [install.sh](setup/install.sh) in your blank Ubuntu VPS to set up +Mailtrain and all required dependencies (including MySQL). The installation script assumes a somewhat blank server, so if this is a machine you are already using for something else, you might want to skip the automatic install and proceed manually. + +If you like living on the edge and feel adventurous you can run the installation script directly from your command line as root: + +``` +curl https://raw.githubusercontent.com/Mailtrain-org/mailtrain/master/setup/install.sh | sudo bash +``` + +Install script installs and sets up the following: + + * **Node.js** (version 6.x) + * **MariaDB** (the default version from apt-get) + * **Mailtrain** (from the master branch) on port 80 + * **ImageMagick** (the default version from apt-get) + * **UFW** firewall that blocks everything besides ports 22, 25, 80, 443 + * **[ZoneMTA](https://github.com/zone-eu/zone-mta)** to queue and deliver messages (**NB!** using ZoneMTA assumes that outgoing port 25 is open which might not be the case on some hosts like on the Google Cloud) + * **Redis** server for session cache + * **logrotate** to rotate Mailtrain log files + * **upstart** or **systemd** init script to automatically start and manage Mailtrain process + +After the install script has finished and you see a success message then you should have a Mailtrain instance running at http://yourdomain.com + +#### Next steps after installation + +##### 1. Change admin password + +Navigate to http://yourdomain.com where yourdomain.com is the address of your server. Click on the Sign In link in the right top corner of the page. Authenticate with the following credentials: + + * Username: **admin** + * Password: **test** + +Once authenticated, click on your username in the right top corner of the page and select "Account". Now you should be able to change your default password. + +##### 2. Update page configuration + +If signed in navigate to http://yourdomain.com/settings and check that all email addresses and domain names are correct. Mailtrain default installation comes bundled with [ZoneMTA](https://github.com/zone-eu/zone-mta), so you should be able to send out messages right away. ZoneMTA even handles a lot of bounces (not all kind of bounces though) automatically so you do not have to change anything in the SMTP settings to get going. + +##### 3. Set up SPF + +If you are using the bundled ZoneMTA then you need to add your Mailtrain host to the SPF DNS record of your sending domain. So if you are sending messages as "info@example.com" then the domain "example.com" should have a SPF DNS record that points to the IP address or hostname of your Mailtrain host. Everything should work without the SPF record but setting it up correctly improves the deliverability a lot. + +##### 4. Set up DKIM + +If you are using the bundled ZoneMTA then you can provide a DKIM key to sign all outgoing messages. You can provide the DKIM private key in Mailtrain Settings page. This key is only used by ZoneMTA, so if you are using some other provider then you check your providers' documentation to see how to set up DKIM. In case of ZoneMTA you only need to open Mailtrain Settings page, scroll to DKIM config section and fill the fields for DKIM selector and DKIM private key. Everything should work without the DKIM signatures but setting it up correctly improves the deliverability a lot. + +##### 5. Set up VERP + +The bundled ZoneMTA can already handle a large amount of bounces if you use it to deliver messages but not all - namely such bounces that happen *after* the recipient MX accepts the message for local delivery. This might happen for example when a user exists, so the MX accepts the message but the quota for that user is checked only when actually storing the message to users' mailbox. Then a bounce message is generated and sent to the original sender which in your case is the mail address you are sending your list messages from. You can catch these messages and mark such recipients manually as bounced but alternatively you can set up a VERP based bounce handler that does this automatically. In this case the sender on the message envelope would not be your actual address but a rewritten bounce address that points to your Mailtrain installation. + +To set it up you need to create an additonal DNS MX entry for a bounce domain, eg "bounces.example.com" if you are sending from "example.com". This entry should point to your Mailtrain server IP address. Next you should enable the VERP handling in Mailtrain Settings page. + +> As ZoneMTA uses envelope sender as the default for DKIM addresses, then if using VERP you need to set up DKIM to your bounce domain instead of sender domain and also store the DKIM key as "bouncedomain.selector.pem" in the ZoneMTA key folder. + +If you do not use VERP with ZoneMTA then you should get notified most of the bounces so everything should mostly work without it + +##### 6. Set up proper PTR record + +If you are using the bundled ZoneMTA then you should make sure you are using a proper PTR record for your server. For example if you use DigitalOcean then PTR is set automatically (it's the droplet name, so make sure your droplet name is the same as the domain name you are running Mailtrain from). If you use AWS then you can request setting up PTR records using [this form](https://portal.aws.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request) (requires authentication). Otherwise you would have to check from your service provider, hot to get the PTR record changed. Everything should work without the PTR record but setting it up correctly improves the deliverability a lot. + +##### 7. Ready to send! + +With proper SPF, DKIM and PTR records (DMARC wouldn't hurt either) I got perfect 10/10 score out from [MailTester](https://www.mail-tester.com/) when sending a campaign message to a MailTester test address. I did not have VERP turned on, so the sender address matched return path address. + +#### Getting your head around DKIM, DMARK, SPF and PTR + +DKIM, DMARK, SPF and PTR are DNS records which spam filters use to figure out if e-mails were really sent by you (and not by a spammer who tries to conceal his identity to be able to continue send bulks of e-mails people never subscribed for). Assuming that you use zone-mta and your e-mails are to originate from a Mailtrain installation at `mailtrain.example.com` and optionally from `mail.example.net`, to practically set all these records up you will need to: + +1. generate genrate a private and public DKIM key + +```sh +mkdir /opt/dkim-keys +chmod 700 /opt/dkim-keys +pushd /opt/dkim-keys +openssl genrsa -out mailtrain.example.com.key 2048 # private key mailtrain.example.com.key +openssl rsa -in mailtrain.example.com.key -out mailtrain.example.com.pub -pubout -outform PEM # public key mailtrain.example.com.pub +``` + +2. add 3 new txt records for the mailtrain.example.com that will most likely similar to the example below: + +``` +default._domainkey.mailtrain.example.com TXT "k=rsa; p=[public key in one line];" +mailtrain.example.com TXT "v=spf1 mx a a:mail.example.net -all" +_dmarc.mailtrain.example.com TXT "v=DMARC1; p=reject" +``` + +(refer to a google search for a DKIM generator, SPF generator and DMARC genreator to get you up to speed). Configure your Mailtrain settings accoring to this: + +**DKIM domain:** mailtrain.example.com +**DKIM selector:** default +**DKIM Private Key:** [copy and paste the private key in /opt/dkim-keys/mailtrain.example.com.key] + +The above steps will have the following effect: + +- all messages sent by Mailtrain / Zone-mta will be signed by the DKIM Private Key (the signature becomes a part of the e-mail) +- when a spamfilter encounters this signature, it will look for the ****._domainkey.**** TXT record, and use the public key stored there to verify that the signature is valid +- additionally, the spamfilter will look for a TXT SPF record and will look a if the e-mail was sent from the IP address of mailtrain.example.com or mail.example.net. If the sender IP or domain is different, it will discard the e-mail as spam. +- furthermore, the spamfilter looks for the DMARC record, which tells it what to do with mails that aren't signed with DKIM or which don't have a valid signature. The example above will tell the spamfilter to reject such a mail as well. + +3. You are now almost set. To further confirm that you have full control over your network, the last step is to set up a PTR record, which will give the right answer for a reverse DNS lookup (answer to "what domain name is bound to IP address xxx.xxx.xxx.xxx). If you run your own DNS, you probably know it will look similar to this: + +``` +10.27/1.110.220.in-addr.arpa. 1800 PTR mailtrain.example.com. +``` + +If you run Mailtrain on a VPS, you will have to find the PTR configuration somewhere in your administration interface or ask your provider to help you. + + +### Simple Install (Docker) +#### Requirements: + + * [Docker](https://www.docker.com/) + * [Docker Compose](https://docs.docker.com/compose/) + +#### Install: + +* Download Mailtrain files using git: `git clone git://github.com/Mailtrain-org/mailtrain.git` (or download [zipped repo](https://github.com/Mailtrain-org/mailtrain/archive/master.zip)) and open Mailtrain folder `cd mailtrain` +* **Note**: depending on how you have configured your system and Docker you may need to prepend the commands below with `sudo`. +* Copy the file `docker-compose.override.yml.tmpl` to `docker-compose.override.yml` and modify it if you need to. +* Bring up the stack with: `docker-compose up -d`, by default it will use the included `docker-compose.yml` file and override some configurations taken from the `docker-compose.override.yml` file. +* If you want to use only / copy the `docker-compose.yml` file (for example, if you were deploying with Rancher), you may need to first run `docker-compose build` to make sure your system has a Docker image `mailtrain:latest`. +* Open [http://localhost:3000/](http://localhost:3000/) (change the host name `localhost` to the name of the host where you are deploying the system). +* Authenticate as user `admin` with password `test` +* Navigate to [http://localhost:3000/settings](http://localhost:3000/settings) and update service configuration. +* Navigate to [http://localhost:3000/users/account](http://localhost:3000/users/account) and update user information and password. + +**Note**: If you need to add or modify custom configurations, copy the file `config/docker-production.toml.tmpl` to `config/production.toml` and modify as you need. By default, the Docker image will do just that, automatically, so you can bring up the stack and it will work with default configurations. + + +### Manual Install (any OS that supports Node.js) + + 1. Download Mailtrain files using git: `git clone git://github.com/Mailtrain-org/mailtrain.git` (or download [zipped repo](https://github.com/Mailtrain-org/mailtrain/archive/master.zip)) and open Mailtrain folder `cd mailtrain` + 2. Run `npm install --production` in the Mailtrain folder to install required dependencies + 3. Copy [config/default.toml](config/default.toml) as `config/production.toml` and update MySQL and any other settings in it + 4. Run the server `NODE_ENV=production npm start` + 5. Open [http://localhost:3000/](http://localhost:3000/) + 6. Authenticate as `admin`:`test` + 7. Navigate to [http://localhost:3000/settings](http://localhost:3000/settings) and update service configuration + 8. Navigate to [http://localhost:3000/users/account](http://localhost:3000/users/account) and update user information and password + +## Upgrade + + * Replace old files with new ones by running in the Mailtrain folder `git pull origin master` if you used Git to set Mailtrain up or just download [new files](https://github.com/Mailtrain-org/mailtrain/archive/master.zip) and replace old ones with these + * Run `npm install --production` in the Mailtrain folder + +## Using Environment Variables + +Some servers expose custom port and hostname options through environment variables. To support these, create a new configuration file `config/local.js`: + +``` +module.exports = { + www: { + port: process.env.OPENSHIFT_NODEJS_PORT, + host: process.env.OPENSHIFT_NODEJS_IP + } +}; +``` + +Mailtrain uses [node-config](https://github.com/lorenwest/node-config) for configuration management and thus the config files are loaded in the following order: + + 1. default.toml + 2. {NODE_ENV}.toml (eg. development.toml or production.toml) + 3. local.js + +### Running Behind Nginx Proxy + +Edit [mailtrain.nginx](setup/mailtrain-nginx.conf) (update `server_name` directive) and copy it to `/etc/nginx/sites-enabled` + +### Running as an Upstart Service in Ubuntu 14.04 + +Edit [mailtrain.conf](setup/mailtrain.conf) (update application folder) and copy it to `/etc/init` + +## Subscription Widget + +The (experimental) Mailtrain Subscription Widget allows you to embed your sign-up forms on your website. To embed a Widget, you need to: + +Enable cross-origin resource sharing in your `config` file and whitelist your site: + +``` +[cors] +# Allow subscription widgets to be embedded +origins=['https://www.example.com'] +``` + +Embed the widget code on your website: + +``` + + +``` + +## Cloudron + +You can easily install and self-host Mailtrain on the Cloudron to send newsletters from your custom domain: + +[![Install](https://cloudron.io/img/button.svg)](https://cloudron.io/button.html?app=org.mailtrain.cloudronapp) + +The source code for the Cloudron app is [here](https://git.cloudron.io/cloudron/mailtrain-app). + +## Bounce Handling + +Mailtrain uses webhooks integration to detect bounces and spam complaints. Currently supported webhooks are: + + * **AWS SES** – create a SNS topic for complaints and bounces and use `http://domain/webhooks/aws` as the subscriber URL for these topics + * **SparkPost** – use `http://domain/webhooks/sparkpost` as the webhook URL for bounces and complaints ([instructions](https://github.com/Mailtrain-org/mailtrain/wiki/Setting-up-Webhooks-for-SparkPost)) + * **SendGrid** – use `http://domain/webhooks/sendgrid` as the webhook URL for bounces and complaints ([instructions](https://github.com/Mailtrain-org/mailtrain/wiki/Setting-up-Webhooks-for-SendGrid)) + * **Mailgun** – use `http://domain/webhooks/mailgun` as the webhook URL for bounces and complaints ([instructions](https://github.com/Mailtrain-org/mailtrain/wiki/Setting-up-Webhooks-for-Mailgun)) + * **ZoneMTA** – use `http://domain/webhooks/zone-mta` as the webhook URL for bounces. If you install Mailtrain with the included installation script then this route gets set up automatically during the installation process + * **Postfix** – This is not a webhook but a TCP server on port 5699 to listen for piped Postfix logs. Enable it with the `[postfixbounce]` config option. To use it, pipe the log to that port using *tail*: `tail -F /var/log/mail.log | nc localhost 5699 -` (if Mailtrain restarts then you need to re-establish the *tail* pipe), alternatively you could send the log with a cron job periodically `tail -n 100 | nc localhost 5699 -`. + +Additionally Mailtrain (v1.1+) is able to use VERP-based bounce handling. This would require to have a compatible SMTP relay (the services mentioned above strip out or block VERP addresses in the SMTP envelope) and you also need to set up special MX DNS name that points to your Mailtrain installation server. + +If using VERP with iRedMail, see [this post](http://www.iredmail.org/forum/post49325.html#p49325) for correct configuration as iRedMail blocks by default senders that do not match authentication username (VERP address and user account address are different). + +## Testing + +There is a built in /dev/null server in Mailtrain that you can use to load test your installation. Check the `[testserver]` section in the configuration file for details. By default the test server is disabled. The server uses only cleartext connections, so select "Do not use encryption" in the encryption settings when setting up the server data in Mailtrain. + +Additionally you can generate CSV import files with fake subscriber data: + +``` +node setup/fakedata.js > somefile.csv +``` + +This command generates a CSV file with 100 000 subscriber accounts + +## Translations + +Mailtrain is currently not translated but it supports translations. To add translations you first need to add translation support for the translatable strings. To test if strings are translatable or not, use a fake language with code "zz" + +```toml +language="zz" +``` + +This would modify all input strings. If a string is not modified then it does not support translations. + +![](https://cldup.com/qXxAbaq2F1.png) + +### Translating JavaScript Files + +To translate JavaScript strings you need to make sure that you have loaded the translating function `_` from *'./lib/translate.js'*. If you want to use variables in strings then you also need the *'util'* module. + +```javascript +const _ = require('./path/to/lib/translate')._; +const util = require('util'); // optional +``` + +All you need to do to translate strings is to enclose these in the `_()` function + +```javascript +let str1 = _('This string will be translated'); +let str2 = util.format( _('My name is "%s"'), 'Mailtrain'); +``` + +### Translating Handlebars Files + +Enclose translatable strings to `{{#translate}}` tags + +```handlebars +

    + Mailtrain – {{#translate}}the best newsletter app{{/translate}} +

    +``` + +### Managing Translations + +* Translations are loaded from Gettext MO files. In order to generate such files you need a Gettext translations editor. [POEdit](https://poedit.net/) is a great choice. + +* To create the translation catalog run `grunt` from command line. This fetches all translatable strings from JavaScript and Handlebars files and merges these into the translation catalog located at */languages/mailtrain.pot* + +* To add a new language use this catalog file as source. Once you want to update your translation file from the updated catalog, then select "Catalogue" -> "Update from POT file..." in POEdit and select mailtrain.pot. This would merge all new translations from the POT file to your PO file. + *If you have saved the PO file in [./languages](./languages) then POEdit should auto generate required MO file whenever you hit save for the PO file. + +* Once you have a correct MO file in the languages folder, then edit Mailtrain config and set ["language" option](https://github.com/Mailtrain-org/mailtrain/blob/ba8bd1212335cb9bd7ba094beb7b5400f35cae6c/config/default.toml#L30-L31) to your language name. If the value is "et" then Mailtrain loads translations from ./languages/et.mo + +> **NB!** For now translation settings are global, so if you have set a translation in config then this applies to all users. An user can't select another translation than the default even if there is a translation file. This is because current Mailtrain code does not provide request context to functions and the functions generating strings do not know which language to use. + +## License + + * Versions 1.22.0 and up **GPL-V3.0** + * Versions 1.21.0 and up: **EUPL-1.1** + * Versions 1.19.0 and up: **MIT** + * Up to versions 1.18.0 **GPL-V3.0** From 286434d84613c3493b073714ac61831794478ce3 Mon Sep 17 00:00:00 2001 From: Programster Date: Wed, 27 Sep 2017 02:03:34 +0000 Subject: [PATCH 384/483] Trying to slim down the front README page. If user's need more detailed information, such as how to deploy on Rancher, they should read the docs area. --- README.md | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 3b1d39e7..a02d3033 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,14 @@ -# Mailtrain +![](http://mailtrain.org/mailtrain.png) [Mailtrain](http://mailtrain.org) is a self hosted newsletter application built on Node.js (v7+) and MySQL (v5.5+ or MariaDB). -![](http://mailtrain.org/mailtrain.png) - -> Mailtrain requires at least **Node.js v7**. If you want to use an older version of Node.js then you should use version v1.24 of Mailtrain. You can either download it [here](https://github.com/Mailtrain-org/mailtrain/archive/v1.24.0.zip) or if using git then run `git checkout v1.24.0` before starting it - ## Features -* subscriber list management -* list segmentation -* custom fields -* email templates -* large CSV list import files +* Subscriber list management +* List segmentation +* Custom fields +* Email templates +* Large CSV list import files Subscribe to Mailtrain Newsletter [here](http://mailtrain.org/subscription/EysIv8sAx) (uses Mailtrain obviously) @@ -27,22 +23,17 @@ Subscribe to Mailtrain Newsletter [here](http://mailtrain.org/subscription/EysIv * [Docker Compose](https://docs.docker.com/compose/) #### Steps: +Depending on how you have configured your system and Docker you may need to prepend the commands below with `sudo`. * Download Mailtrain files using git: `git clone git://github.com/Mailtrain-org/mailtrain.git` (or download [zipped repo](https://github.com/Mailtrain-org/mailtrain/archive/master.zip)) and open Mailtrain folder `cd mailtrain` -* **Note**: depending on how you have configured your system and Docker you may need to prepend the commands below with `sudo`. * Copy the file `docker-compose.override.yml.tmpl` to `docker-compose.override.yml` and modify it if you need to. * Bring up the stack with: `docker-compose up -d` - * by default it will use the included `docker-compose.yml` file and override some configurations taken from the `docker-compose.override.yml` file. -* If you want to use only / copy the `docker-compose.yml` file (for example, if you were deploying with Rancher), you may need to first run `docker-compose build` to make sure your system has a Docker image `mailtrain:latest`. * Open [http://localhost:3000/](http://localhost:3000/) (change the host name `localhost` to the name of the host where you are deploying the system). * Authenticate as user `admin` with password `test` * Navigate to [http://localhost:3000/settings](http://localhost:3000/settings) and update service configuration. * Navigate to [http://localhost:3000/users/account](http://localhost:3000/users/account) and update user information and password. -**Note**: If you need to add or modify custom configurations, copy the file `config/docker-production.toml.tmpl` to `config/production.toml` and modify as you need. By default, the Docker image will do just that, automatically, so you can bring up the stack and it will work with default configurations. - - -## Manual Install (any OS that supports Node.js) +## Quick Start - Manual Install (any OS that supports Node.js) 1. Download Mailtrain files using git: `git clone git://github.com/Mailtrain-org/mailtrain.git` (or download [zipped repo](https://github.com/Mailtrain-org/mailtrain/archive/master.zip)) and open Mailtrain folder `cd mailtrain` 2. Run `npm install --production` in the Mailtrain folder to install required dependencies @@ -62,4 +53,4 @@ For more information, please [read the docs](http://docs.mailtrain.org/). * Versions 1.22.0 and up **GPL-V3.0** * Versions 1.21.0 and up: **EUPL-1.1** * Versions 1.19.0 and up: **MIT** - * Up to versions 1.18.0 **GPL-V3.0** + * Up to versions 1.18.0 **GPL-V3.0** \ No newline at end of file From 8bd9b5bc9eaa92fb6604725e80480d4ed56fadf5 Mon Sep 17 00:00:00 2001 From: Programster Date: Wed, 27 Sep 2017 02:13:11 +0000 Subject: [PATCH 385/483] * Undoing my change of swapping out the mailtrain title with the logo because it looks wierd as the logo has too much whitespace. * Adding the information about Node js version requirement to the manual installation instructions. --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a02d3033..c0bebc56 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ -![](http://mailtrain.org/mailtrain.png) +# Mailtrain [Mailtrain](http://mailtrain.org) is a self hosted newsletter application built on Node.js (v7+) and MySQL (v5.5+ or MariaDB). +![](http://mailtrain.org/mailtrain.png) + ## Features * Subscriber list management @@ -35,6 +37,9 @@ Depending on how you have configured your system and Docker you may need to prep ## Quick Start - Manual Install (any OS that supports Node.js) +### Requirements: + * Mailtrain requires at least **Node.js v7**. If you want to use an older version of Node.js then you should use version v1.24 of Mailtrain. You can either download it [here](https://github.com/Mailtrain-org/mailtrain/archive/v1.24.0.zip) or if using git then run `git checkout v1.24.0` before starting it + 1. Download Mailtrain files using git: `git clone git://github.com/Mailtrain-org/mailtrain.git` (or download [zipped repo](https://github.com/Mailtrain-org/mailtrain/archive/master.zip)) and open Mailtrain folder `cd mailtrain` 2. Run `npm install --production` in the Mailtrain folder to install required dependencies 3. Copy [config/default.toml](config/default.toml) as `config/production.toml` and update MySQL and any other settings in it From 5ada25c2dcf5f34724c8e2a9622793fa89195f18 Mon Sep 17 00:00:00 2001 From: witzig Date: Wed, 27 Sep 2017 19:27:01 +0200 Subject: [PATCH 386/483] Fix error checking, #324 --- routes/lists.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/lists.js b/routes/lists.js index 25f010ba..be419a1f 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -646,7 +646,7 @@ router.post('/subscription/import-confirm', passport.parseForm, passport.csrfPro } subscriptions.getImport(list.id, req.body.import, (err, data) => { - if (err || !list) { + if (err || !data) { req.flash('danger', err && err.message || err || _('Could not find import data with specified ID')); return res.redirect('/lists'); } From c5b481a2664872b80ea5bb860b48000a1a2d2449 Mon Sep 17 00:00:00 2001 From: witzig Date: Thu, 28 Sep 2017 00:55:19 +0200 Subject: [PATCH 387/483] Add option to preserve unsubscribed status on list import, #325 --- lib/models/subscriptions.js | 2 +- routes/lists.js | 9 ++++++++- views/lists/subscription/import.hbs | 5 +++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index f9b562c5..23cd77ca 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -625,7 +625,7 @@ module.exports.delete = (listId, cid, callback) => { module.exports.createImport = (listId, type, path, size, delimiter, emailcheck, mapping, callback) => { listId = Number(listId) || 0; - type = Number(type) || 1; + type = Number(type) || 0; if (listId < 1) { return callback(new Error('Missing List ID')); diff --git a/routes/lists.js b/routes/lists.js index be419a1f..94b3f788 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -574,7 +574,14 @@ router.post('/subscription/import', uploads.single('listimport'), passport.parse return res.redirect('/lists'); } else { - subscriptions.createImport(list.id, req.body.type === 'subscribed' ? 1 : 2, req.file.path, req.file.size, delimiter, req.body.emailcheck === 'enabled' ? 1 : 0, { + let type = 0; // Use the existing subscription status or SUBSCRIBED + if (req.body.type === 'force_subscribed') { + type = subscriptions.Status.SUBSCRIBED; + } else if (req.body.type === 'unsubscribed') { + type = subscriptions.Status.UNSUBSCRIBED; + } + + subscriptions.createImport(list.id, type, req.file.path, req.file.size, delimiter, req.body.emailcheck === 'enabled' ? 1 : 0, { columns: rows[0], example: rows[1] || [] }, (err, importId) => { diff --git a/views/lists/subscription/import.hbs b/views/lists/subscription/import.hbs index be1098b5..6c4881f2 100644 --- a/views/lists/subscription/import.hbs +++ b/views/lists/subscription/import.hbs @@ -35,6 +35,11 @@ {{#translate}}Subscribed{{/translate}} – {{#translate}}Regular subscriber addresses{{/translate}}
    +
    + +
    - {{listName}} + {{listName}}{{#if segment}} - {{segmentName}}{{/if}} {{{formatted}}} From 52f4213cb7108d5b89141a2ca713a844eb18eba6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20D=C3=BCver?= Date: Wed, 25 Apr 2018 18:16:51 +0200 Subject: [PATCH 420/483] Add segment support to triggers model and database --- lib/models/triggers.js | 99 ++++++++++++++++++++++++++----------- services/triggers.js | 4 +- setup/sql/upgrade-00030.sql | 12 +++++ 3 files changed, 85 insertions(+), 30 deletions(-) create mode 100644 setup/sql/upgrade-00030.sql diff --git a/lib/models/triggers.js b/lib/models/triggers.js index 6d2e49c6..b87125c4 100644 --- a/lib/models/triggers.js +++ b/lib/models/triggers.js @@ -1,8 +1,10 @@ 'use strict'; +let log = require('npmlog'); let tools = require('../tools'); let db = require('../db'); let lists = require('./lists'); +let segments = require('./segments'); let util = require('util'); let _ = require('../translate')._; let tableHelpers = require('../table-helpers'); @@ -55,7 +57,9 @@ module.exports.list = callback => { '`triggers`.`description` AS `description`', '`triggers`.`enabled` AS `enabled`', '`triggers`.`list` AS `list`', + '`triggers`.`segment` AS `segment`', '`lists`.`name` AS `list_name`', + '`segments`.`name` AS `segment_name`', '`source`.`id` AS `source_campaign`', '`source`.`name` AS `source_campaign_name`', '`dest`.`id` AS `dest_campaign`', @@ -69,7 +73,7 @@ module.exports.list = callback => { '`triggers`.`created` AS `created`' ]; - let query = 'SELECT ' + tableFields.join(', ') + ' FROM `triggers` LEFT JOIN `campaigns` `source` ON `source`.`id`=`triggers`.`source_campaign` LEFT JOIN `campaigns` `dest` ON `dest`.`id`=`triggers`.`dest_campaign` LEFT JOIN `lists` ON `lists`.`id`=`triggers`.`list` LEFT JOIN `custom_fields` ON `custom_fields`.`list` = `triggers`.`list` AND `custom_fields`.`column`=`triggers`.`column` ORDER BY `triggers`.`name`'; + let query = 'SELECT ' + tableFields.join(', ') + ' FROM `triggers` LEFT JOIN `campaigns` `source` ON `source`.`id`=`triggers`.`source_campaign` LEFT JOIN `campaigns` `dest` ON `dest`.`id`=`triggers`.`dest_campaign` LEFT JOIN `lists` ON `lists`.`id`=`triggers`.`list` LEFT JOIN `segments` ON `segments`.`id`=`triggers`.`segment` LEFT JOIN `custom_fields` ON `custom_fields`.`list` = `triggers`.`list` AND `custom_fields`.`column`=`triggers`.`column` ORDER BY `triggers`.`name`'; connection.query(query, (err, rows) => { connection.release(); if (err) { @@ -105,32 +109,70 @@ module.exports.getQuery = (id, callback) => { let intervalQuery = (column, seconds, treshold) => column + ' <= NOW() - INTERVAL ' + seconds + ' SECOND AND ' + column + ' >= NOW() - INTERVAL ' + (treshold + seconds) + ' SECOND'; - let query = false; - switch (trigger.rule) { - case 'subscription': - query = 'SELECT id FROM `subscription__' + trigger.list + '` subscription WHERE ' + intervalQuery('`' + trigger.column + '`', trigger.seconds, treshold) + ' AND id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; - break; - case 'campaign': - switch (trigger.column) { - case 'delivered': - query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription WHERE campaign.status=1 AND ' + intervalQuery('`campaign`.`created`', trigger.seconds, treshold) + ' AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; - break; - case 'not_clicked': - query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__' + trigger.sourceCampaign + '` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=0 WHERE campaign.status=1 AND ' + intervalQuery('`campaign`.`created`', trigger.seconds, treshold) + ' AND tracker.created IS NULL AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; - break; - case 'not_opened': - query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__' + trigger.sourceCampaign + '` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=-1 WHERE campaign.status=1 AND ' + intervalQuery('`campaign`.`created`', trigger.seconds, treshold) + ' AND tracker.created IS NULL AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; - break; - case 'clicked': - query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__' + trigger.sourceCampaign + '` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=0 WHERE campaign.status=1 AND ' + intervalQuery('`tracker`.`created`', trigger.seconds, treshold) + ' AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; - break; - case 'opened': - query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__' + trigger.sourceCampaign + '` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=-1 WHERE campaign.status=1 AND ' + intervalQuery('`tracker`.`created`', trigger.seconds, treshold) + ' AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; - break; + + let getSegmentQuery = (segmentId, next) => { + segmentId = Number(segmentId); + if (!segmentId) { + return next(null, { + where: '', + values: [] + }); + } + + segments.getQuery(segmentId, 'subscription', next); + }; + + getSegmentQuery(trigger.segment, (err, queryData) => { + if (err) { + log.err('Triggers', err); + return null; + } + + let query = false; + let querySegmentSubscription = ''; + let querySegmentTriggertable = ''; + if (trigger.segment > 0) + { + querySegmentSubscription = (queryData.where ? ' AND (' + queryData.where + ')' : ''); + querySegmentTriggertable = ' AND triggertable.`segment` = ' + trigger.segment; + } + + switch (trigger.rule) { + case 'subscription': + query = 'SELECT id FROM `subscription__' + trigger.list + '` subscription WHERE status=1 AND ' + intervalQuery('`' + trigger.column + '`', trigger.seconds, treshold) + ' ' + querySegmentSubscription + ' AND id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' ' + querySegmentTriggertable + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; + break; + case 'campaign': + switch (trigger.column) { + case 'delivered': + query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription WHERE campaign.status=1 AND ' + intervalQuery('`campaign`.`created`', trigger.seconds, treshold) + ' ' + querySegmentSubscription + ' AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' ' + querySegmentTriggertable + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; + break; + case 'not_clicked': + query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__' + trigger.sourceCampaign + '` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=0 WHERE campaign.status=1 AND ' + intervalQuery('`campaign`.`created`', trigger.seconds, treshold) + ' AND tracker.created IS NULL ' + querySegmentSubscription + ' AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' ' + querySegmentTriggertable + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; + break; + case 'not_opened': + query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__' + trigger.sourceCampaign + '` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=-1 WHERE campaign.status=1 AND ' + intervalQuery('`campaign`.`created`', trigger.seconds, treshold) + ' AND tracker.created IS NULL ' + querySegmentSubscription + ' AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' ' + querySegmentTriggertable + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; + break; + case 'clicked': + query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__' + trigger.sourceCampaign + '` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=0 WHERE campaign.status=1 AND ' + intervalQuery('`tracker`.`created`', trigger.seconds, treshold) + ' ' + querySegmentSubscription + ' AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' ' + querySegmentTriggertable + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; + break; + case 'opened': + query = 'SELECT subscription.id AS id FROM `subscription__' + trigger.list + '` subscription LEFT JOIN `campaign__' + trigger.sourceCampaign + '` campaign ON campaign.list=' + trigger.list + ' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__' + trigger.sourceCampaign + '` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=-1 WHERE campaign.status=1 AND ' + intervalQuery('`tracker`.`created`', trigger.seconds, treshold) + ' ' + querySegmentSubscription + ' AND subscription.id NOT IN (SELECT subscription FROM `trigger__' + id + '` triggertable WHERE triggertable.`list` = ' + trigger.list + ' ' + querySegmentTriggertable + ' AND triggertable.`subscription` = subscription.`id`) LIMIT ' + limit; + break; + } + break; + } + + if (trigger.segment > 0) { + let values = queryData.values.concat([trigger.list, trigger.segment]); + for (let i = 0; i < values.length; i++) { + query = query.replace('?', db.escape(values[i])); } - break; - } - callback(null, query); + } + + callback(null, query); + + }); + }); }; @@ -168,6 +210,7 @@ module.exports.create = (trigger, callback) => { let name = (trigger.name || '').toString().trim(); let description = (trigger.description || '').toString().trim(); let listId = Number(trigger.list) || 0; + let segmentId = Number(trigger.segmentId) || 0; let seconds = (Number(trigger.days) || 0) * 24 * 3600; let rule = (trigger.rule || '').toString().toLowerCase().trim(); let destCampaign = Number(trigger.destCampaign) || 0; @@ -220,8 +263,8 @@ module.exports.create = (trigger, callback) => { return callback(err); } - let keys = ['name', 'description', 'list', 'source_campaign', 'rule', 'column', 'seconds', 'dest_campaign', 'last_check']; - let values = [name, description, list.id, sourceCampaign, rule, column, seconds, destCampaign]; + let keys = ['name', 'description', 'list', 'segment', 'source_campaign', 'rule', 'column', 'seconds', 'dest_campaign', 'last_check']; + let values = [name, description, list.id, segmentId, sourceCampaign, rule, column, seconds, destCampaign]; let query = 'INSERT INTO `triggers` (`' + keys.join('`, `') + '`) VALUES (' + values.map(() => '?').join(', ') + ', NOW())'; diff --git a/services/triggers.js b/services/triggers.js index d223c573..c08013c7 100644 --- a/services/triggers.js +++ b/services/triggers.js @@ -82,8 +82,8 @@ function fireTrigger(trigger, callback) { } let subscriber = rows[pos++].id; - let query = 'INSERT INTO `trigger__' + trigger.id + '` (`list`, `subscription`) VALUES (?,?)'; - let values = [trigger.list, subscriber]; + let query = 'INSERT INTO `trigger__' + trigger.id + '` (`list`, `segment`, `subscription`) VALUES (?,?,?)'; + let values = [trigger.list, trigger.segment, subscriber]; connection.query(query, values, (err, result) => { if (err && err.code !== 'ER_DUP_ENTRY') { diff --git a/setup/sql/upgrade-00030.sql b/setup/sql/upgrade-00030.sql new file mode 100644 index 00000000..66560e04 --- /dev/null +++ b/setup/sql/upgrade-00030.sql @@ -0,0 +1,12 @@ +# Header section +# Define incrementing schema version number +SET @schema_version = '30'; + +# Add segment support for triggers +ALTER TABLE `triggers` ADD `segment` INT(11) UNSIGNED NOT NULL AFTER `list`; +ALTER TABLE `trigger` ADD `segment` INT(11) UNSIGNED NOT NULL AFTER `list`; + +# Footer section +LOCK TABLES `settings` WRITE; +INSERT INTO `settings` (`key`, `value`) VALUES('db_schema_version', @schema_version) ON DUPLICATE KEY UPDATE `value`=@schema_version; +UNLOCK TABLES; From 80f2fe1b26bfd25a3be9b69eff0dbfe4cdf27964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20D=C3=BCver?= Date: Wed, 25 Apr 2018 18:18:36 +0200 Subject: [PATCH 421/483] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e427313b..51e18bf3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mailtrain", "private": true, - "version": "1.23.2", + "version": "1.24.0", "description": "Self hosted email newsletter app", "main": "index.js", "scripts": { From 549cc70c4fedd7272d51687821eb77869b9b1ce1 Mon Sep 17 00:00:00 2001 From: Douglas F Shearer Date: Thu, 26 Apr 2018 13:20:41 +0100 Subject: [PATCH 422/483] Fix spelling in email field help block. --- languages/de_DE.po | 2 +- languages/es_ES.po | 2 +- languages/et.po | 2 +- languages/it_IT.po | 2 +- views/users/account.hbs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/languages/de_DE.po b/languages/de_DE.po index 091c59f5..1ddfca42 100644 --- a/languages/de_DE.po +++ b/languages/de_DE.po @@ -2900,7 +2900,7 @@ msgstr "Ihre E-Mail-Adresse" #: views/users/account.hbs:9 msgid "" -"This address is used for account recovery in case you loose your password" +"This address is used for account recovery in case you lose your password" msgstr "" "Diese Adresse wird für die Wiederherstellung des Kontos verwendet, falls Sie " "Ihr Passwort vergessen haben" diff --git a/languages/es_ES.po b/languages/es_ES.po index 019f5906..8abe4590 100644 --- a/languages/es_ES.po +++ b/languages/es_ES.po @@ -3027,7 +3027,7 @@ msgstr "Tu dirección email" #: views/users/account.hbs:9 msgid "" -"This address is used for account recovery in case you loose your password" +"This address is used for account recovery in case you lose your password" msgstr "" "Este email es usado para recuperar una cuenta en caso de que no recuerdes la " "contraseña" diff --git a/languages/et.po b/languages/et.po index 51bcbab3..88ad5bdb 100644 --- a/languages/et.po +++ b/languages/et.po @@ -2300,7 +2300,7 @@ msgstr "" #: views/users/account.hbs:9 msgid "" -"This address is used for account recovery in case you loose your password" +"This address is used for account recovery in case you lose your password" msgstr "" #: views/users/account.hbs:10 diff --git a/languages/it_IT.po b/languages/it_IT.po index d6b55bc6..b35ef79f 100644 --- a/languages/it_IT.po +++ b/languages/it_IT.po @@ -2944,7 +2944,7 @@ msgstr "Il tuo indirizzo email" #: views/users/account.hbs:9 msgid "" -"This address is used for account recovery in case you loose your password" +"This address is used for account recovery in case you lose your password" msgstr "Questo indirizzo è utilizzato per il recupero della password" #: views/users/account.hbs:10 diff --git a/views/users/account.hbs b/views/users/account.hbs index 38220612..e9801615 100644 --- a/views/users/account.hbs +++ b/views/users/account.hbs @@ -27,7 +27,7 @@
    - {{#translate}}This address is used for account recovery in case you loose your password{{/translate}} + {{#translate}}This address is used for account recovery in case you lose your password{{/translate}}
    From 5f18c9d44f9e25c4f47fb7e719c2aeb7e0cad296 Mon Sep 17 00:00:00 2001 From: Georgios Anastasiou Date: Wed, 16 May 2018 12:15:45 +0300 Subject: [PATCH 423/483] API: get all lists --- routes/api.js | 16 ++++++++++++++++ views/users/api.hbs | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/routes/api.js b/routes/api.js index d6bf3566..e8ba4904 100644 --- a/routes/api.js +++ b/routes/api.js @@ -348,6 +348,22 @@ router.get('/subscriptions/:listId', (req, res) => { }); }); +router.get('/lists', (req, res) => { + lists.quicklist((err, lists) => { + if (err) { + res.status(500); + return res.json({ + error: err.message || err, + data: [] + }); + } + res.status(200); + res.json({ + data: lists + }); + }); +}); + router.get('/lists/:email', (req, res) => { lists.getListsWithEmail(req.params.email, (err, lists) => { if (err) { diff --git a/views/users/api.hbs b/views/users/api.hbs index eaa0cb47..54949e53 100644 --- a/views/users/api.hbs +++ b/views/users/api.hbs @@ -296,3 +296,22 @@

    curl -XGET '{{serviceUrl}}api/lists/test@example.com?access_token={{accessToken}} 
    + +

    GET /api/lists – {{#translate}}Get all lists{{/translate}}

    + +

    + {{#translate}}Retrieve every list. {{/translate}} +

    + +

    + GET {{#translate}}arguments{{/translate}} +

    +
      +
    • access_token – {{#translate}}your personal access token{{/translate}} +
    + +

    + {{#translate}}Example{{/translate}} +

    + +
    curl -XGET '{{serviceUrl}}api/lists?access_token={{accessToken}}'
    \ No newline at end of file From 60adfed0a6711ec0a4a76db5f2a9fedfa83a63d8 Mon Sep 17 00:00:00 2001 From: Georgios Anastasiou Date: Wed, 16 May 2018 12:43:36 +0300 Subject: [PATCH 424/483] API: get list by id --- routes/api.js | 15 +++++++++++++++ views/users/api.hbs | 21 ++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/routes/api.js b/routes/api.js index e8ba4904..1e4fb70d 100644 --- a/routes/api.js +++ b/routes/api.js @@ -364,6 +364,21 @@ router.get('/lists', (req, res) => { }); }); +router.get('/list/:id', (req, res) => { + lists.get(req.params.id, (err, list) => { + if (err) { + res.status(500); + return res.json({ + error: err.message || err, + }); + } + res.status(200); + res.json({ + data: list + }); + }); +}); + router.get('/lists/:email', (req, res) => { lists.getListsWithEmail(req.params.email, (err, lists) => { if (err) { diff --git a/views/users/api.hbs b/views/users/api.hbs index 54949e53..db51df39 100644 --- a/views/users/api.hbs +++ b/views/users/api.hbs @@ -314,4 +314,23 @@ {{#translate}}Example{{/translate}}

    -
    curl -XGET '{{serviceUrl}}api/lists?access_token={{accessToken}}'
    \ No newline at end of file +
    curl -XGET '{{serviceUrl}}api/lists?access_token={{accessToken}}'
    + +

    GET /api/list/:id – {{#translate}}Get list by id{{/translate}}

    + +

    + {{#translate}}Retrieve the list with :id {{/translate}} +

    + +

    + GET {{#translate}}arguments{{/translate}} +

    +
      +
    • access_token – {{#translate}}your personal access token{{/translate}} +
    + +

    + {{#translate}}Example{{/translate}} +

    + +
    curl -XGET '{{serviceUrl}}api/list/1?access_token={{accessToken}}'
    \ No newline at end of file From 48ecc9b47ca001df0770dd820930f688e9ff7b55 Mon Sep 17 00:00:00 2001 From: Wes Garrison Date: Wed, 23 May 2018 11:33:08 -0500 Subject: [PATCH 425/483] Fix newsletter signup link in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d5967939..8d8ed08e 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ * Email templates * Large CSV list import files -Subscribe to Mailtrain Newsletter [here](http://mailtrain.org/subscription/EysIv8sAx) (uses Mailtrain obviously) +Subscribe to Mailtrain Newsletter [here](https://mailtrain.org/subscription/S18sew2wM) (uses Mailtrain obviously) ## Hardware Requirements * 1 vCPU From 06ee230e33e8e06f56dd767f31369f6a1d71ee59 Mon Sep 17 00:00:00 2001 From: Reto Kaiser Date: Tue, 29 May 2018 15:15:49 +0200 Subject: [PATCH 426/483] Fix eslint warnings --- lib/passport.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/passport.js b/lib/passport.js index 3b02a07e..9e1f0fc0 100644 --- a/lib/passport.js +++ b/lib/passport.js @@ -127,16 +127,16 @@ if (config.ldap.enabled && LdapStrategy) { }); })); } else if (config.ldapauth.enabled && LdapAuthStrategy) { - log.info("Using LDAP auth (passport-ldapauth)"); + log.info('Using LDAP auth (passport-ldapauth)'); let opts = { server: { url: 'ldap://' + config.ldap.host + ':' + config.ldap.port, - searchBase: config.ldapauth.baseDN, - searchFilter: config.ldapauth.filter, + searchBase: config.ldapauth.baseDN, + searchFilter: config.ldapauth.filter, searchAttributes: [config.ldapauth.uidTag, 'mail'], bindDN: config.ldapauth.bindUser, bindCredentials: config.ldapauth.bindPassword - }, + } }; passport.use(new LdapAuthStrategy(opts, (profile, done) => { From 133eb68325b72799a3b8ba78513beaaf7c1f64a9 Mon Sep 17 00:00:00 2001 From: Reto Kaiser Date: Tue, 29 May 2018 15:37:05 +0200 Subject: [PATCH 427/483] Change email domain in tests to "gmail.com" The domain needs to have an MX record associated, and mailtrain.org doesn't have one (anymore). --- test/e2e/tests/subscription.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/tests/subscription.js b/test/e2e/tests/subscription.js index 040cdcc2..c69cce36 100644 --- a/test/e2e/tests/subscription.js +++ b/test/e2e/tests/subscription.js @@ -15,7 +15,7 @@ function getPage(listConf) { } function generateEmail() { - return 'keep.' + shortid.generate() + '@mailtrain.org'; + return 'keep.' + shortid.generate() + '@gmail.com'; } function generateCustomFieldValue(field) { From 16ce44146fb1bb82126c5db71b1845d4474710c8 Mon Sep 17 00:00:00 2001 From: Reto Kaiser Date: Tue, 29 May 2018 14:55:30 +0200 Subject: [PATCH 428/483] Add option on list to disable "List-Unsubscribe" header --- lib/models/lists.js | 3 ++- meta.json | 2 +- services/sender.js | 7 ++++++- setup/sql/upgrade-00030.sql | 17 +++++++++++++++++ views/lists/edit.hbs | 11 +++++++++++ 5 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 setup/sql/upgrade-00030.sql diff --git a/lib/models/lists.js b/lib/models/lists.js index 0b208673..6c0a498a 100644 --- a/lib/models/lists.js +++ b/lib/models/lists.js @@ -19,7 +19,7 @@ const UnsubscriptionMode = { module.exports.UnsubscriptionMode = UnsubscriptionMode; -let allowedKeys = ['description', 'default_form', 'public_subscribe', 'unsubscription_mode']; +let allowedKeys = ['description', 'default_form', 'public_subscribe', 'unsubscription_mode', 'listunsubscribe_disabled']; module.exports.list = (start, limit, callback) => { tableHelpers.list('lists', ['*'], 'name', null, start, limit, callback); @@ -158,6 +158,7 @@ module.exports.update = (id, updates, callback) => { // The update can be only partial when executed from forms/:list if (!data.customFormChangeOnly) { data.publicSubscribe = data.publicSubscribe ? 1 : 0; + data.listunsubscribeDisabled = data.listunsubscribeDisabled ? 1 : 0; data.unsubscriptionMode = Number(data.unsubscriptionMode); let name = (data.name || '').toString().trim(); diff --git a/meta.json b/meta.json index c0a6d3c0..5d511080 100644 --- a/meta.json +++ b/meta.json @@ -1,3 +1,3 @@ { - "schemaVersion": 29 + "schemaVersion": 30 } diff --git a/services/sender.js b/services/sender.js index a30b38ee..1e22d1b1 100644 --- a/services/sender.js +++ b/services/sender.js @@ -379,6 +379,11 @@ function formatMessage(message, callback) { wordwrap: 130 }); + let listUnsubscribe = null; + if (!list.listunsubscribeDisabled) { + listUnsubscribe = url.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '/unsubscribe/' + message.subscription.cid); + } + return callback(null, { from: { name: campaign.from, @@ -419,7 +424,7 @@ function formatMessage(message, callback) { } }, list: { - unsubscribe: url.resolve(configItems.serviceUrl, '/subscription/' + list.cid + '/unsubscribe/' + message.subscription.cid) + unsubscribe: listUnsubscribe }, subject: tools.formatMessage(configItems.serviceUrl, campaign, list, message.subscription, campaign.subject), html: renderedHtml, diff --git a/setup/sql/upgrade-00030.sql b/setup/sql/upgrade-00030.sql new file mode 100644 index 00000000..15a21c01 --- /dev/null +++ b/setup/sql/upgrade-00030.sql @@ -0,0 +1,17 @@ +# Header section +# Define incrementing schema version number +SET @schema_version = '30'; + +# Upgrade script section +#### INSERT YOUR UPGRADE SCRIPT BELOW THIS LINE ###### + +ALTER TABLE `lists` ADD COLUMN `listunsubscribe_disabled` tinyint(4) unsigned DEFAULT 0 NOT NULL; + +#### INSERT YOUR UPGRADE SCRIPT ABOVE THIS LINE ###### + +# Footer section. Updates schema version in settings +LOCK TABLES `settings` WRITE; +/*!40000 ALTER TABLE `settings` DISABLE KEYS */; +INSERT INTO `settings` (`key`, `value`) VALUES('db_schema_version', @schema_version) ON DUPLICATE KEY UPDATE `value`=@schema_version; +/*!40000 ALTER TABLE `settings` ENABLE KEYS */; +UNLOCK TABLES; diff --git a/views/lists/edit.hbs b/views/lists/edit.hbs index cbe0b6cc..00cfd3e1 100644 --- a/views/lists/edit.hbs +++ b/views/lists/edit.hbs @@ -80,6 +80,17 @@ +
    + +
    +
    + +
    +
    +
    +
    From 3b695bed35f93c5a5d75f32c5df34ca390120393 Mon Sep 17 00:00:00 2001 From: Erik Anders Date: Fri, 15 Jun 2018 09:41:14 +0200 Subject: [PATCH 429/483] add missing translations --- languages/de_DE.mo | Bin 83277 -> 84676 bytes languages/de_DE.po | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/languages/de_DE.mo b/languages/de_DE.mo index 80e285bc3644ecb0f2146587924586cd21477d5b..3f1d6bd0ef28158a8a62132ee5e7f02c7786792b 100644 GIT binary patch delta 20188 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 delta 19435 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 ZoRHl~g*=JjyF;sbDtdOi)jT!*{|~WP7~}u| diff --git a/languages/de_DE.po b/languages/de_DE.po index b187c1af..8002764e 100644 --- a/languages/de_DE.po +++ b/languages/de_DE.po @@ -3650,6 +3650,22 @@ msgstr "Eingeloggt als %s" msgid "Incorrect username or password" msgstr "Falscher Benutzername oder Passwort" +#: lib/subscription-mail-helpers.js:39 +msgid "%s: Email Address Already Registered" +msgstr "%s: Email-Adresse bereits registriert" + +#: lib/subscription-mail-helpers.js:49 +msgid "%s: Please Confirm Email Change in Subscription" +msgstr "%s: Bitte bestätigen Sie die Änderung der Email-Adresse" + +#: lib/subscription-mail-helpers.js:69 +msgid "%s: Please Confirm Unsubscription" +msgstr "%s: Bitte bestätigen Sie die Kündigung des Abonnements" + +#: lib/subscription-mail-helpers.js:76 +msgid "%s: Unsubscription Confirmed" +msgstr "%s: Kündigung des Abonnements bestätigt" + #: lib/tools.js:148 msgid "Blocked email address \"%s\"" msgstr "Gesperrte E-Mail-Adresse \"%s\"" @@ -4593,3 +4609,31 @@ msgstr "Unbekannter Trigger-Typ %s" #~ msgid "Yes, subscribe me to this list:" #~ msgstr "Ja, tragen Sie mich in diese Liste ein:" + +#: lib/models/subscriptions.js:910 routes/subscription.js:472 +#: routes/subscription.js:544 routes/subscription.js:580 +#: routes/subscription.js:696 routes/subscription.js:771 +msgid "Subscription not found in this list" +msgstr "Das Abonnement wurde in dieser Liste nicht gefunden" + +#: views/subscription/web-confirm-unsubscription-notice.mjml.hbs:2 +msgid "" +"We need to confirm your email address. To complete the unsubscription " +"process, please click the link in the email we just sent you." +msgstr "" +"Wir müssen Ihre E-Mail-Adresse bestätigen. Um die Kündigung Ihres Abonnements abzuschließen, " +"klicken Sie bitte auf den Link in der E-Mail, die wir Ihnen gerade geschickt " +"haben." + +msgid "Please Confirm Unsubscription" +msgstr "Bitte bestätigen Sie die Kündigung Ihres Abonnements" + +msgid "Yes, unsubscribe me from this list" +msgstr "Ja, ich möchte dieses Abonnement kündigen" + +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"unsubscribed if you don't click the confirmation link above." +msgstr "" +"Wenn Sie diese E-Mail versehentlich erhalten haben, löschen Sie sie einfach. " +"Ihr Abonnement wird nicht gekündigt, wenn Sie nicht auf den Bestätigungslink oben klicken." From 5325f2ea7864ce5f42a9a6df3408af7ffbd32591 Mon Sep 17 00:00:00 2001 From: Adrian Woeltche Date: Thu, 21 Jun 2018 15:15:44 +0200 Subject: [PATCH 430/483] ldap change to url for making it possible to use ldaps:// too --- config/default.toml | 6 ++---- lib/passport.js | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/config/default.toml b/config/default.toml index e31cef4e..0f086856 100644 --- a/config/default.toml +++ b/config/default.toml @@ -114,8 +114,7 @@ host="0.0.0.0" [ldap] # enable to use ldap user backend enabled=false -host="localhost" -port=3002 +url="ldap://localhost:3002" baseDN="ou=users,dc=company" filter="(|(username={{username}})(mail={{username}}))" #Username field in LDAP (uid/cn/username) @@ -128,8 +127,7 @@ bindPassword="" [ldapauth] # Alternative LDAP implementation using the more popular passport-ldapauth library. enabled=false -host="localhost" -port=389 +url="ldap://localhost:389" # Subtree in which the searchrequest for the user is done baseDN="ou=users,dc=company" # What whe are searching for. This should return a single user. diff --git a/lib/passport.js b/lib/passport.js index 9e1f0fc0..0e52e58e 100644 --- a/lib/passport.js +++ b/lib/passport.js @@ -87,7 +87,7 @@ if (config.ldap.enabled && LdapStrategy) { let opts = { server: { - url: 'ldap://' + config.ldap.host + ':' + config.ldap.port + url: config.ldap.url }, base: config.ldap.baseDN, search: { @@ -130,7 +130,7 @@ if (config.ldap.enabled && LdapStrategy) { log.info('Using LDAP auth (passport-ldapauth)'); let opts = { server: { - url: 'ldap://' + config.ldap.host + ':' + config.ldap.port, + url: config.ldapauth.url, searchBase: config.ldapauth.baseDN, searchFilter: config.ldapauth.filter, searchAttributes: [config.ldapauth.uidTag, 'mail'], From fe6152ea3110807eeec6cb31954a050df1ce6621 Mon Sep 17 00:00:00 2001 From: Adrian Woeltche Date: Thu, 21 Jun 2018 15:58:46 +0200 Subject: [PATCH 431/483] added ca options --- config/default.toml | 2 ++ lib/passport.js | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/config/default.toml b/config/default.toml index 0f086856..563083bd 100644 --- a/config/default.toml +++ b/config/default.toml @@ -123,6 +123,7 @@ passwordresetlink="" # Use a different user to bind LDAP (final bind DN will be: {{uidTag}}={{bindUser}},{{baseDN}}) bindUser="" bindPassword="" +#ca="self-signed-ca.pem" [ldapauth] # Alternative LDAP implementation using the more popular passport-ldapauth library. @@ -138,6 +139,7 @@ passwordresetlink="" # Credentials for the initial search operation (final bind DN will be exactly as specified) bindUser="name@company.net" bindPassword="mySecretPassword" +#ca="self-signed-ca.pem" [postfixbounce] # Enable to allow writing Postfix bounce log to Mailtrain listener diff --git a/lib/passport.js b/lib/passport.js index 0e52e58e..ebbb5bfb 100644 --- a/lib/passport.js +++ b/lib/passport.js @@ -6,6 +6,7 @@ let _ = require('./translate')._; let util = require('util'); let passport = require('passport'); +let fs = require('fs'); let LocalStrategy = require('passport-local').Strategy; let csrf = require('csurf'); @@ -87,7 +88,12 @@ if (config.ldap.enabled && LdapStrategy) { let opts = { server: { - url: config.ldap.url + url: config.ldap.url, + tlsOptions: { + ca: config.ldap.ca ? [ + fs.readFileSync(config.ldap.ca) + ] : undefined + } }, base: config.ldap.baseDN, search: { @@ -135,7 +141,12 @@ if (config.ldap.enabled && LdapStrategy) { searchFilter: config.ldapauth.filter, searchAttributes: [config.ldapauth.uidTag, 'mail'], bindDN: config.ldapauth.bindUser, - bindCredentials: config.ldapauth.bindPassword + bindCredentials: config.ldapauth.bindPassword, + tlsOptions: { + ca: config.ldapauth.ca ? [ + fs.readFileSync(config.ldapauth.ca) + ] : undefined + } } }; From 4501f71dd8f405e9eca433c87e093f31db3b1a68 Mon Sep 17 00:00:00 2001 From: Adrian Woeltche Date: Thu, 21 Jun 2018 16:41:45 +0200 Subject: [PATCH 432/483] permit https --- config/default.toml | 10 ++++++++++ index.js | 11 +++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/config/default.toml b/config/default.toml index e31cef4e..8a05517a 100644 --- a/config/default.toml +++ b/config/default.toml @@ -61,6 +61,16 @@ level="verbose" port=3000 # HTTP interface to listen on host="0.0.0.0" +# Enable HTTPS +https=false +# HTTPS certificate file name +cert="cert.pem" +# HTTPS certificate private key file name +key="key.pem" +# HTTPS ca certificate file name +#ca="ca-certificate.pem" +# HTTPS Diffie Hellman parameters (generate with openssl dhparam) +#dhparams="dhparams.pem" # Secret for signing the session ID cookie secret="a cat" # Session length in seconds when "remember me" is checked diff --git a/index.js b/index.js index 305ec2ad..f2a0aaf5 100644 --- a/index.js +++ b/index.js @@ -8,6 +8,8 @@ const config = require('config'); const log = require('npmlog'); const app = require('./app'); const http = require('http'); +const https = require('https'); +const fs = require('fs'); const fork = require('child_process').fork; const triggers = require('./services/triggers'); const importer = require('./services/importer'); @@ -33,10 +35,15 @@ log.level = config.log.level; app.set('port', port); /** - * Create HTTP server. + * Create HTTP/HTTPS server. */ -let server = http.createServer(app); +let server = (!config.www.https) ? http.createServer(app) : https.createServer({ + cert: fs.readFileSync(config.www.cert), + key: fs.readFileSync(config.www.key), + ca: fs.readFileSync(config.www.ca), + dhparams: fs.readFileSync(config.www.dhparams) +}, app); // Check if database needs upgrading before starting the server dbcheck(err => { From abd788d8f4d18b5a977226ba1224cba7f2b7fa9b Mon Sep 17 00:00:00 2001 From: Adrian Woeltche Date: Thu, 21 Jun 2018 16:45:18 +0200 Subject: [PATCH 433/483] optional ca and dhparams --- index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index f2a0aaf5..9428aaf4 100644 --- a/index.js +++ b/index.js @@ -41,8 +41,8 @@ app.set('port', port); let server = (!config.www.https) ? http.createServer(app) : https.createServer({ cert: fs.readFileSync(config.www.cert), key: fs.readFileSync(config.www.key), - ca: fs.readFileSync(config.www.ca), - dhparams: fs.readFileSync(config.www.dhparams) + ca: config.www.ca ? fs.readFileSync(config.www.ca) : undefined, + dhparams: config.www.dhparams ? fs.readFileSync(config.www.dhparams) : undefined }, app); // Check if database needs upgrading before starting the server From ceba65a0986832dc9c51f41f16cc11511276988d Mon Sep 17 00:00:00 2001 From: humancopy Date: Mon, 2 Jul 2018 14:26:59 +0200 Subject: [PATCH 434/483] Add the possibility to create a negated rule on segments --- lib/models/segments.js | 5 ++++- views/lists/segments/rule-configure.hbs | 14 ++++++++++++++ views/lists/segments/rule-edit.hbs | 14 ++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/models/segments.js b/lib/models/segments.js index 47a3afbc..5439059d 100644 --- a/lib/models/segments.js +++ b/lib/models/segments.js @@ -327,6 +327,7 @@ module.exports.createRule = (segmentId, rule, callback) => { break; default: value = { + negate: Number(rule.negate) ? 1 : 0, value: rule.value }; } @@ -491,6 +492,7 @@ module.exports.updateRule = (id, rule, callback) => { break; default: value = { + negate: Number(rule.negate) ? 1 : 0, value: rule.value }; } @@ -573,7 +575,8 @@ module.exports.getQuery = (id, prefix, callback) => { segment.rules.forEach(rule => { switch (rule.columnType.type) { case 'string': - query.push(prefix + '`' + rule.columnType.column + '` LIKE ?'); + let condition = rule.value.negate ? 'NOT LIKE' : 'LIKE'; + query.push(prefix + '`' + rule.columnType.column + '` ' + condition + ' ?'); values.push(rule.value.value); break; case 'boolean': diff --git a/views/lists/segments/rule-configure.hbs b/views/lists/segments/rule-configure.hbs index 0d37b1c0..e7ffee6f 100644 --- a/views/lists/segments/rule-configure.hbs +++ b/views/lists/segments/rule-configure.hbs @@ -23,6 +23,20 @@
    {{#if columnTypeString}} +
    + +
    + +
    +
    +
    diff --git a/views/lists/segments/rule-edit.hbs b/views/lists/segments/rule-edit.hbs index 4cdee26b..9c78c044 100644 --- a/views/lists/segments/rule-edit.hbs +++ b/views/lists/segments/rule-edit.hbs @@ -28,6 +28,20 @@
    {{#if columnTypeString}} +
    + +
    + +
    +
    +
    From e0a5d356a25c0617499fc675e0d82d65d11fd335 Mon Sep 17 00:00:00 2001 From: humancopy Date: Mon, 2 Jul 2018 15:35:37 +0200 Subject: [PATCH 435/483] Add != to formatted rule to show that it's negated --- lib/models/segments.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/models/segments.js b/lib/models/segments.js index 5439059d..209f12e7 100644 --- a/lib/models/segments.js +++ b/lib/models/segments.js @@ -156,7 +156,7 @@ module.exports.get = (id, callback) => { rule.formatted = rule.value.value ? _('Selected') : _('Not selected'); break; default: - rule.formatted = rule.value.value || ''; + rule.formatted = (rule.value.negate ? '!= ' : '') + (rule.value.value || ''); } return rule; @@ -419,7 +419,7 @@ module.exports.getRule = (id, callback) => { rule.formatted = rule.value.value ? _('Selected') : _('Not selected'); break; default: - rule.formatted = rule.value.value || ''; + rule.formatted = (rule.value.negate ? '!= ' : '') + (rule.value.value || ''); } return callback(null, rule); From d6f7f9a0554ed2ccbb703729f00114fc8ea50afb Mon Sep 17 00:00:00 2001 From: Adrian Woeltche Date: Wed, 11 Jul 2018 15:50:02 +0200 Subject: [PATCH 436/483] grapejs update --- public/grapejs/dist/css/grapes.min.css | 8 +- public/grapejs/dist/css/grapesjs-mjml.css | 248 - .../dist/css/grapesjs-preset-newsletter.css | 211 - public/grapejs/dist/js/grapes.js | 51285 ++++++++++++++++ public/grapejs/dist/js/grapes.min.js | 28 +- public/grapejs/dist/js/grapesjs-mjml.min.js | 177 +- views/grapejs/layout-editor.hbs | 8 +- 7 files changed, 51371 insertions(+), 594 deletions(-) delete mode 100644 public/grapejs/dist/css/grapesjs-mjml.css delete mode 100644 public/grapejs/dist/css/grapesjs-preset-newsletter.css create mode 100644 public/grapejs/dist/js/grapes.js diff --git a/public/grapejs/dist/css/grapes.min.css b/public/grapejs/dist/css/grapes.min.css index e8cce15b..4f8b24c2 100755 --- a/public/grapejs/dist/css/grapes.min.css +++ b/public/grapejs/dist/css/grapes.min.css @@ -1,6 +1,4 @@ -.CodeMirror{font-family:monospace;height:300px;color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0} -.cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.cm-s-hopscotch div.CodeMirror-selected{background:#433b42!important}.cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0}.cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498!important}.cm-s-hopscotch span.cm-comment{color:#b33508}.cm-s-hopscotch span.cm-atom,.cm-s-hopscotch span.cm-number{color:#c85e7c}.cm-s-hopscotch span.cm-attribute,.cm-s-hopscotch span.cm-property{color:#8fc13e}.cm-s-hopscotch span.cm-keyword{color:#dd464c}.cm-s-hopscotch span.cm-string{color:#fdcc59}.cm-s-hopscotch span.cm-variable{color:#8fc13e}.cm-s-hopscotch span.cm-variable-2{color:#1290bf}.cm-s-hopscotch span.cm-def{color:#fd8b19}.cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.cm-s-hopscotch span.cm-tag{color:#dd464c}.cm-s-hopscotch span.cm-link{color:#c85e7c}.cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-hopscotch .CodeMirror-activeline-background{background:#302020} -@charset "UTF-8";.sp-alpha-handle,.sp-slider{opacity:.8;background-color:#ccc}.fa-fw,.fa-li,.sp-container button{text-align:center}.fa,.gjs-fonts::before{text-rendering:auto;-moz-osx-font-smoothing:grayscale}.gjs-cv-canvas,.gjs-grabbing,.sp-container,.sp-replacer{overflow:hidden}.sp-container{position:absolute;top:0;left:0;display:inline-block;z-index:9999994}.sp-container.sp-flat,.sp-top{position:relative}.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.sp-top{width:100%;display:inline-block}.sp-alpha-handle,.sp-color,.sp-dragger,.sp-hue,.sp-sat,.sp-slider,.sp-top-inner,.sp-val{position:absolute}.sp-top-inner{top:0;left:0;bottom:0;right:0}.sp-color{top:0;left:0;bottom:0}.sp-hue{top:0;right:0;bottom:0;height:100%}.sp-clear-enabled .sp-hue{top:33px;height:77.5%}.sp-fill{padding-top:80%}.sp-sat,.sp-val{top:0;left:0;right:0;bottom:0}.sp-alpha-enabled .sp-top{margin-bottom:18px}.sp-alpha-enabled .sp-alpha{display:block}.sp-alpha,.sp-clear{display:none}.sp-alpha-handle{top:-4px;bottom:-4px;left:50%;background:#fff;opacity:.8}.sp-alpha{bottom:-14px;right:0;left:0;height:8px}.sp-alpha-inner{border:1px solid #333}.sp-clear.sp-clear-display{background-position:center}.sp-clear-enabled .sp-clear{display:block;position:absolute;top:0;right:0;bottom:0;left:84%;height:28px}.sp-alpha,.sp-alpha-handle,.sp-clear,.sp-container,.sp-container button,.sp-container.sp-dragging .sp-input,.sp-dragger,.sp-preview,.sp-replacer,.sp-slider{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}.sp-container.sp-buttons-disabled .sp-button-container,.sp-container.sp-input-disabled .sp-input-container,.sp-container.sp-palette-buttons-disabled .sp-palette-button-container,.sp-initial-disabled .sp-initial,.sp-palette-disabled .sp-palette-container,.sp-palette-only .sp-picker-container{display:none}.sp-sat{background-image:-webkit-gradient(linear,0 0,100% 0,from(#FFF),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left,#FFF,rgba(204,154,129,0));background-image:-moz-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-o-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-ms-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:linear-gradient(to right,#fff,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81')}.sp-val{background-image:-webkit-gradient(linear,0 100%,0 0,from(#000),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-o-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:linear-gradient(to top,#000,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000')}.sp-hue{background:-moz-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-ms-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-o-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(.17,#ff0),color-stop(.33,#0f0),color-stop(.5,#0ff),color-stop(.67,#00f),color-stop(.83,#f0f),to(red));background:-webkit-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.sp-1{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00')}.sp-2{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00')}.sp-3{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff')}.sp-4{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff')}.sp-5{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff')}.sp-6{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000')}.sp-hidden{display:none!important}.sp-cf:after,.sp-cf:before{content:"";display:table}.sp-cf:after{clear:both}@media (max-device-width:480px){.sp-color{right:40%}.sp-hue{left:63%}.sp-fill{padding-top:60%}}.sp-dragger{border-radius:5px;height:5px;width:5px;border:1px solid #fff;top:0;left:0}.sp-slider{top:0;right:-1px;background:#fff;opacity:.8}.sp-container{border:1px solid #f0c49B;padding:0}.sp-clear,.sp-color,.sp-container,.sp-container button,.sp-container input,.sp-hue{font:400 12px "Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.gjs-btnt,.gjs-com-dashed *,.gjs-cv-canvas,.gjs-cv-canvas *,.gjs-editor,.gjs-input,.gjs-pn-btn,.gjs-pn-panel,.gjs-select{box-sizing:border-box}.sp-top{margin-bottom:3px}.sp-clear,.sp-color,.sp-hue{border:1px solid #666}.sp-input-container{float:right;width:100px;margin-bottom:4px}.sp-initial-disabled .sp-input-container,.sp-input{width:100%}.sp-input{font-size:12px!important;border:1px inset;padding:4px 5px;margin:0;background:0 0;border-radius:3px;color:#222}.sp-input:focus{border:1px solid orange}.sp-input.sp-validation-error{border:1px solid red;background:#fdd}.sp-palette-container,.sp-picker-container{float:left;position:relative;padding:10px 10px 300px;margin-bottom:-290px}.sp-picker-container{width:172px}.sp-palette-only .sp-palette-container{border:0}.sp-palette .sp-thumb-el{display:block;position:relative;float:left;cursor:pointer}.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:orange}.sp-thumb-el{position:relative}.sp-initial{float:left;border:1px solid #333}.sp-initial span{width:30px;height:25px;border:none;display:block;float:left;margin:0}.sp-initial .sp-clear-display{background-position:center}.sp-button-container,.sp-palette-button-container{float:right}.sp-replacer{margin:0;cursor:pointer;padding:4px;display:inline-block;border:1px solid #91765d;background:#eee;color:#333;vertical-align:middle}.sp-replacer.sp-active,.sp-replacer:hover{border-color:#F0C49B;color:#111}.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}.sp-dd{padding:2px 0;height:16px;line-height:16px;float:left;font-size:10px}.sp-preview{width:25px;height:20px;border:1px solid #222;margin-right:5px;float:left;z-index:0}.sp-palette{max-width:220px}.sp-palette .sp-thumb-el{width:16px;height:16px;margin:2px 1px;border:1px solid #d0d0d0}.sp-container{padding-bottom:0}.sp-container button{background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#ccc);background-image:-moz-linear-gradient(top,#eee,#ccc);background-image:-ms-linear-gradient(top,#eee,#ccc);background-image:-o-linear-gradient(top,#eee,#ccc);background-image:linear-gradient(to bottom,#eee,#ccc);border:1px solid #ccc;border-bottom:1px solid #bbb;border-radius:3px;font-size:14px;line-height:1;vertical-align:middle}.sp-container button:hover{background-color:#ddd;background-image:-webkit-linear-gradient(top,#ddd,#bbb);background-image:-moz-linear-gradient(top,#ddd,#bbb);background-image:-ms-linear-gradient(top,#ddd,#bbb);background-image:-o-linear-gradient(top,#ddd,#bbb);background-image:linear-gradient(to bottom,#ddd,#bbb);border:1px solid #bbb;border-bottom:1px solid #999;cursor:pointer}.sp-container button:active{border:1px solid #aaa;border-bottom:1px solid #888;-webkit-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-moz-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-ms-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-o-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee}.sp-cancel{margin:0 5px 0 0;padding:2px;vertical-align:middle}.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}.sp-palette span.sp-thumb-active,.sp-palette span:hover{border-color:#000}.sp-alpha,.sp-preview,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-alpha-inner,.sp-preview-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}.fa,.fa-stack{display:inline-block}.sp-palette .sp-thumb-inner{background-position:50% 50%;background-repeat:no-repeat}.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==)}/*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome +.sp-container{position:absolute;top:0;left:0;display:inline-block;*display:inline;*zoom:1;z-index:9999994;overflow:hidden}.sp-container.sp-flat{position:relative}.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.sp-top{position:relative;width:100%;display:inline-block}.sp-top-inner{position:absolute;top:0;left:0;bottom:0;right:0}.sp-color{position:absolute;top:0;left:0;bottom:0;right:20%}.sp-hue{position:absolute;top:0;right:0;bottom:0;left:84%;height:100%}.sp-clear-enabled .sp-hue{top:33px;height:77.5%}.sp-fill{padding-top:80%}.sp-sat,.sp-val{position:absolute;top:0;left:0;right:0;bottom:0}.sp-alpha-enabled .sp-top{margin-bottom:18px}.sp-alpha-enabled .sp-alpha{display:block}.sp-alpha-handle{position:absolute;top:-4px;bottom:-4px;width:6px;left:50%;cursor:pointer;border:1px solid black;background:white;opacity:.8}.sp-alpha{display:none;position:absolute;bottom:-14px;right:0;left:0;height:8px}.sp-alpha-inner{border:solid 1px #333}.sp-clear{display:none}.sp-clear.sp-clear-display{background-position:center}.sp-clear-enabled .sp-clear{display:block;position:absolute;top:0px;right:0;bottom:0;left:84%;height:28px}.sp-container,.sp-replacer,.sp-preview,.sp-dragger,.sp-slider,.sp-alpha,.sp-clear,.sp-alpha-handle,.sp-container.sp-dragging .sp-input,.sp-container button{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}.sp-container.sp-input-disabled .sp-input-container{display:none}.sp-container.sp-buttons-disabled .sp-button-container{display:none}.sp-container.sp-palette-buttons-disabled .sp-palette-button-container{display:none}.sp-palette-only .sp-picker-container{display:none}.sp-palette-disabled .sp-palette-container{display:none}.sp-initial-disabled .sp-initial{display:none}.sp-sat{background-image:-webkit-gradient(linear, 0 0, 100% 0, from(#fff), to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:-moz-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:-o-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:-ms-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:linear-gradient(to right, #fff, rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";filter:progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81')}.sp-val{background-image:-webkit-gradient(linear, 0 100%, 0 0, from(#000), to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:-o-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:linear-gradient(to top, #000, rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000')}.sp-hue{background:-moz-linear-gradient(top, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:-ms-linear-gradient(top, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:-o-linear-gradient(top, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:-webkit-gradient(linear, left top, left bottom, from(red), color-stop(0.17, #ff0), color-stop(0.33, lime), color-stop(0.5, cyan), color-stop(0.67, blue), color-stop(0.83, #f0f), to(red));background:-webkit-linear-gradient(top, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:linear-gradient(to bottom, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%)}.sp-1{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00')}.sp-2{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00')}.sp-3{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff')}.sp-4{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff')}.sp-5{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff')}.sp-6{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000')}.sp-hidden{display:none !important}.sp-cf:before,.sp-cf:after{content:"";display:table}.sp-cf:after{clear:both}.sp-cf{*zoom:1}@media (max-device-width: 480px){.sp-color{right:40%}.sp-hue{left:63%}.sp-fill{padding-top:60%}}.sp-dragger{border-radius:5px;height:5px;width:5px;border:1px solid #fff;background:#000;cursor:pointer;position:absolute;top:0;left:0}.sp-slider{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:white;opacity:.8}.sp-container{border-radius:0;background-color:#ECECEC;border:solid 1px #f0c49B;padding:0}.sp-container,.sp-container button,.sp-container input,.sp-color,.sp-hue,.sp-clear{font:normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.sp-top{margin-bottom:3px}.sp-color,.sp-hue,.sp-clear{border:solid 1px #666}.sp-input-container{float:right;width:100px;margin-bottom:4px}.sp-initial-disabled .sp-input-container{width:100%}.sp-input{font-size:12px !important;border:1px inset;padding:4px 5px;margin:0;width:100%;background:transparent;border-radius:3px;color:#222}.sp-input:focus{border:1px solid orange}.sp-input.sp-validation-error{border:1px solid red;background:#fdd}.sp-picker-container,.sp-palette-container{float:left;position:relative;padding:10px;padding-bottom:300px;margin-bottom:-290px}.sp-picker-container{width:172px;border-left:solid 1px #fff}.sp-palette-container{border-right:solid 1px #ccc}.sp-palette-only .sp-palette-container{border:0}.sp-palette .sp-thumb-el{display:block;position:relative;float:left;width:24px;height:15px;margin:3px;cursor:pointer;border:solid 2px transparent}.sp-palette .sp-thumb-el:hover,.sp-palette .sp-thumb-el.sp-thumb-active{border-color:orange}.sp-thumb-el{position:relative}.sp-initial{float:left;border:solid 1px #333}.sp-initial span{width:30px;height:25px;border:none;display:block;float:left;margin:0}.sp-initial .sp-clear-display{background-position:center}.sp-palette-button-container,.sp-button-container{float:right}.sp-replacer{margin:0;overflow:hidden;cursor:pointer;padding:4px;display:inline-block;*zoom:1;*display:inline;border:solid 1px #91765d;background:#eee;color:#333;vertical-align:middle}.sp-replacer:hover,.sp-replacer.sp-active{border-color:#F0C49B;color:#111}.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}.sp-dd{padding:2px 0;height:16px;line-height:16px;float:left;font-size:10px}.sp-preview{position:relative;width:25px;height:20px;border:solid 1px #222;margin-right:5px;float:left;z-index:0}.sp-palette{*width:220px;max-width:220px}.sp-palette .sp-thumb-el{width:16px;height:16px;margin:2px 1px;border:solid 1px #d0d0d0}.sp-container{padding-bottom:0}.sp-container button{background-color:#eeeeee;background-image:-webkit-linear-gradient(top, #eee, #ccc);background-image:-moz-linear-gradient(top, #eee, #ccc);background-image:-ms-linear-gradient(top, #eee, #ccc);background-image:-o-linear-gradient(top, #eee, #ccc);background-image:linear-gradient(to bottom, #eee, #ccc);border:1px solid #ccc;border-bottom:1px solid #bbb;border-radius:3px;color:#333;font-size:14px;line-height:1;padding:5px 4px;text-align:center;text-shadow:0 1px 0 #eee;vertical-align:middle}.sp-container button:hover{background-color:#dddddd;background-image:-webkit-linear-gradient(top, #ddd, #bbb);background-image:-moz-linear-gradient(top, #ddd, #bbb);background-image:-ms-linear-gradient(top, #ddd, #bbb);background-image:-o-linear-gradient(top, #ddd, #bbb);background-image:linear-gradient(to bottom, #ddd, #bbb);border:1px solid #bbb;border-bottom:1px solid #999;cursor:pointer;text-shadow:0 1px 0 #ddd}.sp-container button:active{border:1px solid #aaa;border-bottom:1px solid #888;-webkit-box-shadow:inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;-moz-box-shadow:inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;-ms-box-shadow:inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;-o-box-shadow:inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;box-shadow:inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee}.sp-cancel{font-size:11px;color:#d93f3f !important;margin:0;padding:2px;margin-right:5px;vertical-align:middle;text-decoration:none}.sp-cancel:hover{color:#d93f3f !important;text-decoration:underline}.sp-palette span:hover,.sp-palette span.sp-thumb-active{border-color:#000}.sp-preview,.sp-alpha,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-preview-inner,.sp-alpha-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}.sp-palette .sp-thumb-inner{background-position:50% 50%;background-repeat:no-repeat}.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==)}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.5.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2?v=4.5.0) format("woff2"),url(../fonts/fontawesome-webfont.woff?v=4.5.0) format("woff"),url(../fonts/fontawesome-webfont.ttf?v=4.5.0) format("truetype"),url(../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;-webkit-font-smoothing:antialiased}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right,.pull-right{float:right}.pull-left{float:left}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.gjs-clm-tags #gjs-clm-close,.gjs-freezed,.gjs-nv-freezed,.opac50{opacity:.5;filter:alpha(opacity=50)}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}@font-face{font-family:font3336;src:url(../fonts/main-fonts.eot?v=20);src:url(../fonts/main-fonts.woff?v=20) format("woff"),url(../fonts/main-fonts.ttf?v=20) format("truetype"),url(../fonts/main-fonts.svg?v=20) format("svg"),url(../fonts/main-fonts.eot?v=20) format("embedded-opentype");font-weight:400;font-style:normal}.gjs-fonts::before{display:block;font:normal normal normal 14px font3336;-webkit-font-smoothing:antialiased;font-size:5em}.gjs-block-label,.gjs-editor,.gjs-mdl-container{font-family:Helvetica,sans-serif}.gjs-f-b1::before{content:'Q'}.gjs-f-b2::before{content:'W'}.gjs-f-b3::before{content:'E'}.gjs-f-b37::before{content:'R'}.gjs-f-hero::before{content:'T'}.gjs-f-h1p::before{content:'y'}.gjs-f-3ba::before{content:'u'}.gjs-f-image::before{content:'I'}.gjs-f-text::before{content:'o'}.gjs-f-quo::before{content:'p'}.gjs-f-button::before{content:'B'}.gjs-f-divider::before{content:'D'}.gjs-clm-tags #gjs-clm-new,.gjs-invis-invis,.gjs-no-app{background-color:transparent;border:none;color:inherit}.gjs-no-app{height:10px}.gjs-test::btn{color:'#fff'}.checker-bg,.gjs-checker-bg,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-field-colorp-c,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.gjs-grabbing,.gjs-grabbing *,.gjs-nav-comp-name,.gjs-no-user-select{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el,.gjs-margin-v-el,.gjs-no-pointer-events,.gjs-padding-v-el,.gjs-resizer-c{pointer-events:none}.gjs-bdrag,.gjs-drag-helper{pointer-events:none!important;position:absolute!important;z-index:10!important}#gjs-rte-toolbar,.gjs-bg-main,.gjs-block,.gjs-clm-select option,.gjs-clm-tags .gjs-sm-colorp-c,.gjs-field-select option,.gjs-mdl-dialog,.gjs-nv-item .gjs-nv-title-c,.gjs-off-prv,.gjs-pn-panel,.gjs-select option,.gjs-sm-sector .gjs-sm-colorp-c,.gjs-sm-select option,.gjs-sm-unit option,.sp-container{background-color:#444}#gjs-rte-toolbar .gjs-rte-btn,.gjs-btn-prim,.gjs-btnt,.gjs-clm-tags .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add,.gjs-color-main,.gjs-mdl-dialog,.gjs-off-prv,.gjs-pn-btn,.gjs-pn-panel,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add{color:#ddd}.gjs-btnt.gjs-pn-active,.gjs-color-active,.gjs-pn-btn.gjs-pn-active{color:#f8f8f8}.gjs-bdrag{width:auto}.gjs-drag-helper{background-color:#3b97e3!important;transform:scale(.3)!important;transform-origin:top left!important;-webkit-transform-origin:top left!important;margin:15px!important;transition:none!important;outline:0!important}.gjs-grabbing,.gjs-grabbing *{cursor:grabbing!important;cursor:-webkit-grabbing!important}.gjs-off-prv{position:relative;z-index:10;padding:5px;cursor:pointer}.gjs-editor-cont ::-webkit-scrollbar-track{background:rgba(0,0,0,.1)}.gjs-editor-cont ::-webkit-scrollbar-thumb{background-color:rgba(255,255,255,.2)}.gjs-editor-cont ::-webkit-scrollbar{width:8px}.clear{clear:both}.gjs-clm-tags #gjs-clm-close,.gjs-clm-tags #gjs-clm-tag-label,.gjs-com-no-select,.gjs-com-no-select img,.no-select{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-editor{background-color:#444;position:relative;height:100%}.gjs-btn-prim,.gjs-btn-prim:active{background-color:rgba(255,255,255,.1)}.gjs-freezed,.gjs-nv-freezed{pointer-events:none}.gjs-btn-prim{border-radius:2px;cursor:pointer;padding:.5em;border:none}.gjs-input,.gjs-select{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.1);border-radius:2px;box-shadow:1px 1px 0 rgba(255,255,255,.1);color:#ddd;padding:.5em 1em}div.gjs-select{padding:0}.gjs-select select{padding-right:10px}.gjs-select select:-moz-focusring,.gjs-select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,.7)}.gjs-btn-prim:focus,.gjs-button:focus,.gjs-input:focus,.gjs-select select:focus,.gjs-select:focus{outline:0}.gjs-traits-label{border-bottom:1px solid rgba(0,0,0,.3);font-size:13px;font-weight:lighter;margin-bottom:5px;padding:10px;text-align:left}.gjs-trt-trait{display:flex;justify-content:start;padding:5px 10px;font-size:.75em;font-weight:lighter}.gjs-trt-trait .gjs-label{width:30%;text-align:left}.gjs-trt-trait .gjs-field{width:70%}.gjs-cv-canvas{background-color:rgba(0,0,0,.15);position:absolute;width:85%;height:100%;bottom:0;left:0;padding-top:40px;z-index:1}.gjs-cv-canvas>iframe{height:100%;outline:0;width:100%;border:none;margin:0 auto;display:block}.gjs-cv-canvas .gjs-ghost{display:none;pointer-events:none;background-color:#5b5b5b;border:2px dashed #ccc;position:absolute;z-index:10;opacity:.55;filter:alpha(opacity=55)}.gjs-cv-canvas .gjs-highlighter,.gjs-cv-canvas .gjs-highlighter-sel{position:absolute;outline:#3b97e3 solid 1px;pointer-events:none}.gjs-cv-canvas .gjs-highlighter-warning{outline:#ffca6f solid 3px}.gjs-cv-canvas .gjs-highlighter-sel{outline:#3b97e3 solid 3px}.gjs-cv-canvas #gjs-tools{width:100%;position:absolute;top:0;left:0;outline:0}.gjs-cv-canvas>div:first-child{background-color:#fff;position:relative;height:100%;overflow:auto;width:100%}.dragged,.gjs-resizer-c,.gjs-resizer-h,.gjs-toolbar{position:absolute}.gjs-frame{transition:width .35s ease}.gjs-toolbar{background-color:#3b97e3;color:#fff;z-index:10}.gjs-toolbar-item{padding:5px 7px;font-size:.8rem;cursor:pointer}.gjs-resizer-c{z-index:9}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el,.gjs-margin-v-el,.gjs-padding-v-el{opacity:.1;filter:alpha(opacity=10);position:absolute;background-color:#ff0}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{opacity:.2;filter:alpha(opacity=20)}.gjs-fixedpadding-v-el,.gjs-padding-v-el{background-color:navy}.gjs-resizer-h{pointer-events:all;border:3px solid #3b97e3;width:10px;height:10px;background-color:#fff;margin:-5px}.gjs-resizer-h-tl{top:0;left:0;cursor:nwse-resize}.gjs-resizer-h-tr{top:0;right:0;cursor:nesw-resize}.gjs-resizer-h-tc{top:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-cl,.gjs-resizer-h-cr{margin:auto -5px;cursor:ew-resize;bottom:0;top:0}.gjs-resizer-h-cl{left:0}.gjs-resizer-h-cr{right:0}.gjs-resizer-h-bl{bottom:0;left:0;cursor:nesw-resize}.gjs-resizer-h-bc{bottom:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-br{bottom:0;right:0;cursor:nwse-resize}.gjs-resizing .gjs-badge,.gjs-resizing .gjs-highlighter{display:none!important}.gjs-resizing-tl *{cursor:nwse-resize!important}.gjs-resizing-tr *{cursor:nesw-resize!important}.gjs-resizing-tc *{cursor:ns-resize!important}.gjs-resizing-cl *,.gjs-resizing-cr *{cursor:ew-resize!important}.gjs-resizing-bl *{cursor:nesw-resize!important}.gjs-resizing-bc *{cursor:ns-resize!important}.gjs-resizing-br *{cursor:nwse-resize!important}.btn-cl,.gjs-am-assets-cont #gjs-am-close,.gjs-mdl-dialog .gjs-mdl-btn-close{opacity:.3;filter:alpha(opacity=30);font-size:25px;cursor:pointer}.btn-cl:hover,.gjs-am-assets-cont #gjs-am-close:hover,.gjs-mdl-dialog .gjs-mdl-btn-close:hover{opacity:.7;filter:alpha(opacity=70)}.dragged,.gjs-nv-opac50{opacity:.5;filter:alpha(opacity=50)}#commands.panel{min-width:35px;height:100%;z-index:3}#options.panel{z-index:4;bottom:0}#views.panel{width:16.5%;font-weight:lighter;color:#ddd;right:0;top:0;z-index:3;height:100%;padding:0}#views.panel .c{height:100%}#commands.panel,#options.panel{width:3.5%;left:0}#options .c{display:table;margin:0 auto}body.dragging,body.dragging *{cursor:move!important}.dragged{z-index:2000}ol.example li.placeholder{position:relative}ol.example li.placeholder:before{position:absolute}.no-dots,.ui-resizable-handle{border:none!important;margin:0!important;outline:0!important}.gjs-com-dashed *{outline:#888 dashed 1px;outline-offset:-2px}.gjs-cv-canvas .gjs-comp-selected{outline:#3b97e3 solid 3px!important}.gjs-com-hover,div.gjs-com-hover{outline:#3b97e3 solid 1px}.gjs-com-hover-delete,div.gjs-com-hover-delete{outline:#dd3636 solid 2px;opacity:.5;filter:alpha(opacity=50)}.gjs-com-hover-move,div.gjs-com-hover-move{outline:#ffca6f solid 3px}.gjs-badge,.gjs-com-badge,.gjs-com-badge-red{pointer-events:none;background-color:#3b97e3;color:#fff;padding:2px 5px;position:absolute;z-index:1;font-size:12px;outline:0;display:none}.gjs-com-badge-red{background-color:#dd3636}.gjs-badge-warning{background-color:#ffca6f}.gjs-com-placeholder,.gjs-nv-placeholder,.gjs-placeholder{position:absolute;z-index:10;pointer-events:none;display:none}.gjs-nv-placeholder,.gjs-placeholder{border-style:solid!important;border-color:#62c462;outline:0;box-sizing:border-box}.gjs-com-placeholder-int,.gjs-nv-placeholder-int,.gjs-placeholder-int{background-color:#62c462;box-shadow:0 0 3px rgba(0,0,0,.2);height:100%;width:100%;pointer-events:none;padding:1.5px;outline:0}.gjs-pn-panel{display:inline-block;padding:5px;position:absolute;text-align:center;z-index:3}.gjs-pn-panel#gjs-pn-commands,.gjs-pn-panel#gjs-pn-options2{width:85%;left:0;top:0;box-shadow:0 0 5px rgba(0,0,0,.3)}.gjs-pn-panel#gjs-pn-options{right:15%;top:0}.gjs-pn-panel#gjs-pn-options2{bottom:150px;height:auto}.gjs-pn-panel .icon-redo,.gjs-pn-panel .icon-undo{font-size:20px;height:30px;width:25px}.gjs-pn-panel#gjs-pn-views{border-bottom:2px solid rgba(0,0,0,.3);right:0;width:15%;z-index:4}.gjs-pn-panel#gjs-pn-views-container{height:100%;padding:42px 0 0;right:0;width:15%;overflow:auto;box-shadow:0 0 5px rgba(0,0,0,.3)}.gjs-pn-buttons{align-items:center;display:flex;justify-content:center}.gjs-btnt,.gjs-pn-btn{height:30px;width:30px;line-height:21px;background-color:transparent;border:none;font-size:18px;margin-right:5px;border-radius:2px;cursor:pointer;padding:5px;position:relative}.gjs-btnt.gjs-pn-active,.gjs-pn-btn.gjs-pn-active{background-color:rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.25) inset}.gjs-btnt>.gjs-pn-arrow-rd,.gjs-pn-btn>.gjs-pn-arrow-rd{border-bottom:5px solid rgba(255,255,255,.7);border-left:5px solid transparent;bottom:2px;right:2px;position:absolute}.gjs-btnt>.gjs-pn-buttons,.gjs-pn-btn>.gjs-pn-buttons{background-color:#444;border-radius:2px;position:absolute;display:none;left:50px;top:0;padding:5px}.gjs-btnt>.gjs-pn-buttons.gjs-pn-visible,.gjs-pn-btn>.gjs-pn-buttons.gjs-pn-visible{display:block}.gjs-btnt>.gjs-pn-buttons>.gjs-pn-arrow-l,.gjs-pn-btn>.gjs-pn-buttons>.gjs-pn-arrow-l{border-bottom:5px solid transparent;border-right:5px solid #444;border-top:5px solid transparent;left:-5px;top:15px;position:absolute}.gjs-nv-navigator{position:relative;height:100%}.gjs-nv-navigator #gjs-nv-placeholder{width:100%;position:absolute}.gjs-nv-navigator #gjs-nv-placeholder #gjs-nv-plh-int{height:100%;padding:1px}.gjs-nv-navigator #gjs-nv-placeholder #gjs-nv-plh-int.gjs-nv-insert{background-color:#62c462}.gjs-nv-navigator .gjs-nv-item{font-weight:lighter;text-align:left;position:relative;background-color:rgba(0,0,0,.1)}.gjs-nv-navigator .gjs-nv-item.gjs-nv-hide{opacity:.55;filter:alpha(opacity=55)}.gjs-nv-navigator .gjs-nv-item #gjs-nv-counter{font-size:10px;position:absolute;right:27px;top:9px}.gjs-nv-navigator .gjs-nv-item #gjs-nv-btn-eye{height:auto!important;width:auto!important;font-size:13px;left:0;top:0;padding:7px 5px 7px 10px;position:absolute;cursor:pointer;z-index:1}.gjs-nv-item #gjs-nv-caret{font-size:7px;width:8px;padding:5px;cursor:pointer;opacity:.7;filter:alpha(opacity=70)}.gjs-nv-item #gjs-nv-caret:hover{opacity:1;filter:alpha(opacity=100)}.gjs-nv-title{background-color:rgba(0,0,0,.1);font-size:11px;letter-spacing:1px;padding:3px 10px 5px 30px;border-bottom:1px solid rgba(0,0,0,.3);border-top:1px solid rgba(255,255,255,.1);display:flex;align-items:center}.gjs-nv-item .gjs-nv-children .gjs-nv-title{border-left:1px solid rgba(5,5,5,.3)}.gjs-nv-item>.gjs-nv-children{margin-left:7px;display:none}.gjs-nv-item.open>.gjs-nv-children{display:block}.gjs-nv-item>.gjs-nv-no-chld>#gjs-nv-caret::before{content:''}.gjs-nv-no-chld>#gjs-nv-caret{display:none}.gjs-nv-item>#gjs-nv-move{position:absolute;cursor:move;font-size:12px;right:0;top:0;padding:7px 10px 7px 5px}.gjs-nv-selected .gjs-nv-title{background-color:rgba(255,255,255,.1)}.gjs-nv-nav-item-edit{visibility:hidden;padding:5px;font-size:10px;opacity:.7;filter:alpha(opacity=70)}.gjs-nv-nav-item-edit:hover{opacity:1;filter:alpha(opacity=100)}.gjs-nv-title-c:hover .gjs-nv-nav-item-edit{visibility:visible;cursor:pointer}.gjs-nav-comp-name{padding:5px;box-sizing:content-box}.btn.expand,.gjs-nv-navigator .gjs-nv-item .expand#gjs-nv-btn-eye{background-image:none}.gjs-comp-image-placeholder{display:block;background-color:#f5f5f5;color:#777;height:50px;width:50px;line-height:50px;outline:#ffca6f solid 3px;outline-offset:-3px;text-align:center;font-size:16.67px;cursor:pointer}.gjs-field-checkbox input,.gjs-radio-item input{display:none}.gjs-comp-image-placeholder.fa-picture-o::after{content:"\f03e"}.gjs-label{line-height:18px}.gjs-field{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 0 rgba(255,255,255,.1);border-radius:2px;box-sizing:border-box;padding:0;position:relative}.gjs-field input,.gjs-field select,.gjs-field textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;color:rgba(255,255,255,.7);border:none;background-color:transparent;box-sizing:border-box;width:100%;position:relative;padding:3px 4px 4px;z-index:1}.gjs-field textarea{resize:vertical}.gjs-field select{height:20px;padding-right:12px}.gjs-field option{padding:3px 0}.gjs-field .gjs-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;z-index:0}.gjs-field .gjs-d-s-arrow{bottom:7px;border-top:4px solid rgba(255,255,255,.7);position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-field-color input{padding-right:22px;box-sizing:border-box}.gjs-field-colorp{border-left:1px solid rgba(0,0,0,.3);box-sizing:border-box;height:100%;padding:2px;position:absolute;right:0;top:0;width:22px;z-index:10}.gjs-field-colorp .gjs-checker-bg,.gjs-field-colorp .gjs-field-colorp-c{height:100%;width:100%;border-radius:1px}.gjs-field-colorp-c{height:100%;position:relative;width:100%}.gjs-field-color-picker{background-color:#ddd;cursor:pointer;height:100%;width:100%;box-shadow:0 0 1px rgba(0,0,0,.3);border-radius:1px;position:absolute;top:0}.gjs-field-radio{float:left;overflow:hidden;padding:0;width:auto}.gjs-field-checkbox{padding:0;width:auto!important}.gjs-field-checkbox input:checked+.gjs-chk-icon{border-color:rgba(255,255,255,.5);border-width:0 2px 2px 0;border-style:solid}.gjs-radio-item{float:left;border-left:1px solid rgba(0,0,0,.3)}.gjs-radio-item:first-child{border:none}.gjs-radio-item:hover{background:rgba(0,0,0,.3)}.gjs-radio-item input:checked+.gjs-radio-item-label{background-color:rgba(255,255,255,.2)}.gjs-radio-item-label{cursor:pointer;display:block;padding:5px}.gjs-field-units{position:absolute;right:0;top:0}.gjs-field-units select{padding:0 12px 0 0}.gjs-field-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,.7);cursor:pointer}.gjs-field-arrows{z-index:10;cursor:ns-resize;height:100%;position:absolute;right:0;top:0;width:9px}.gjs-field-arrow-d,.gjs-field-arrow-u{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.7);bottom:4px;cursor:pointer}.gjs-field-arrow-u{border-bottom:4px solid rgba(255,255,255,.7);border-top:none;top:4px}.gjs-field-select{padding:0}.gjs-field-range{background-color:transparent;border:none;box-shadow:none;padding:0}.gjs-field-range input{margin:0}.gjs-field-range input::-moz-range-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,.3);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-5px;height:10px;width:10px;border:1px solid rgba(0,0,0,.3);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-ms-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,.3);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-moz-range-track{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.15);border-radius:1px;height:2px}.gjs-field-range input::-webkit-slider-runnable-track{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.15);border-radius:1px;height:2px}.gjs-field-range input::-ms-track{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.15);border-radius:1px;height:2px}.gjs-chk-icon{-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);box-sizing:border-box;display:block;height:14px;margin:0 5px;width:6px;cursor:pointer}.gjs-add-trasp{background:0 0;border:none;color:#ddd;cursor:pointer;font-size:1em;border-radius:2px;opacity:.75;filter:alpha(opacity=75)}.gjs-add-trasp:hover{opacity:1;filter:alpha(opacity=100)}.gjs-add-trasp:active{background-color:rgba(0,0,0,.2)}.gjs-devices-c{display:flex;align-items:center;padding:4px}.gjs-devices-c .gjs-device-label{flex-grow:2;font-size:.7em;text-align:left;margin-right:10px}.gjs-devices-c .gjs-select{flex-grow:20}.gjs-devices-c .gjs-add-trasp{flex-grow:1;margin-left:5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-sm-close-btn,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.2;filter:alpha(opacity=20)}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover,.gjs-sm-close-btn:hover,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-sm-header{font-size:11px;font-weight:lighter;padding:10px}.gjs-clm-tags,.gjs-sm-sector{clear:both;border-bottom:1px solid rgba(0,0,0,.3);font-weight:lighter;text-align:left}.gjs-clm-tags #gjs-sm-caret,.gjs-sm-sector #gjs-sm-caret{padding-right:5px;font-size:11px}.gjs-clm-tags .gjs-sm-title,.gjs-sm-sector .gjs-sm-title{background-color:rgba(0,0,0,.1);font-size:13px;letter-spacing:1px;padding:12px 10px 12px 20px;border-top:1px solid rgba(255,255,255,.1);cursor:pointer}.gjs-clm-tags .gjs-sm-label,.gjs-sm-sector .gjs-sm-label{margin:5px 5px 2px 0}.gjs-clm-tags .gjs-clm-field,.gjs-clm-tags .gjs-sm-field,.gjs-sm-sector .gjs-clm-field,.gjs-sm-sector .gjs-sm-field{width:100%;position:relative}.gjs-clm-tags .gjs-clm-field input,.gjs-clm-tags .gjs-clm-field select,.gjs-clm-tags .gjs-sm-field input,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field input,.gjs-sm-sector .gjs-clm-field select,.gjs-sm-sector .gjs-sm-field input,.gjs-sm-sector .gjs-sm-field select{background-color:transparent;color:rgba(255,255,255,.7);border:none;width:100%}.gjs-clm-tags .gjs-clm-field input,.gjs-clm-tags .gjs-sm-field input,.gjs-sm-sector .gjs-clm-field input,.gjs-sm-sector .gjs-sm-field input{box-sizing:border-box}.gjs-clm-tags .gjs-clm-field select,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field select,.gjs-sm-sector .gjs-sm-field select{position:relative;z-index:1;-webkit-appearance:none;-moz-appearance:none;appearance:none}.gjs-clm-tags .gjs-clm-field select::-ms-expand,.gjs-clm-tags .gjs-sm-field select::-ms-expand,.gjs-sm-sector .gjs-clm-field select::-ms-expand,.gjs-sm-sector .gjs-sm-field select::-ms-expand{display:none}.gjs-clm-tags .gjs-clm-field select:-moz-focusring,.gjs-clm-tags .gjs-sm-field select:-moz-focusring,.gjs-sm-sector .gjs-clm-field select:-moz-focusring,.gjs-sm-sector .gjs-sm-field select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,.7)}.gjs-clm-tags .gjs-clm-field input:focus,.gjs-clm-tags .gjs-clm-field select:focus,.gjs-clm-tags .gjs-sm-field input:focus,.gjs-clm-tags .gjs-sm-field select:focus,.gjs-sm-sector .gjs-clm-field input:focus,.gjs-sm-sector .gjs-clm-field select:focus,.gjs-sm-sector .gjs-sm-field input:focus,.gjs-sm-sector .gjs-sm-field select:focus{outline:0}.gjs-clm-tags .gjs-clm-field .gjs-sm-unit,.gjs-clm-tags .gjs-sm-field .gjs-sm-unit,.gjs-sm-sector .gjs-clm-field .gjs-sm-unit,.gjs-sm-sector .gjs-sm-field .gjs-sm-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,.7);cursor:pointer}.gjs-clm-tags .gjs-clm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;cursor:ns-resize}.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow{cursor:pointer}.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow{border-bottom:4px solid rgba(255,255,255,.7);top:4px}.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow{border-top:4px solid rgba(255,255,255,.7);bottom:4px}.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow{bottom:7px}.gjs-clm-tags .gjs-clm-select,.gjs-clm-tags .gjs-sm-color.gjs-clm-field,.gjs-clm-tags .gjs-sm-field.gjs-sm-color,.gjs-clm-tags .gjs-sm-field.gjs-sm-input,.gjs-clm-tags .gjs-sm-field.gjs-sm-integer,.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-input.gjs-clm-field,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field,.gjs-clm-tags .gjs-sm-list.gjs-clm-field,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-sm-sector .gjs-sm-color.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-color,.gjs-sm-sector .gjs-sm-field.gjs-sm-input,.gjs-sm-sector .gjs-sm-field.gjs-sm-integer,.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-input.gjs-clm-field,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field,.gjs-sm-sector .gjs-sm-list.gjs-clm-field,.gjs-sm-sector .gjs-sm-select.gjs-clm-field{background-color:rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 0 rgba(255,255,255,.1);color:rgba(255,255,255,.7);border-radius:2px;box-sizing:border-box;padding:0 5px}.gjs-clm-tags .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-composite{border-radius:2px;background-color:rgba(0,0,0,.1);border:1px solid rgba(0,0,0,.25)}.gjs-clm-tags .gjs-clm-select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field{padding:0}.gjs-clm-tags .gjs-clm-select select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select select,.gjs-clm-tags .gjs-sm-select.gjs-clm-field select,.gjs-sm-sector .gjs-clm-select select,.gjs-sm-sector .gjs-sm-field.gjs-sm-select select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field select{height:20px}.gjs-clm-tags .gjs-clm-select option,.gjs-clm-tags .gjs-sm-field.gjs-sm-select option,.gjs-clm-tags .gjs-sm-select.gjs-clm-field option,.gjs-sm-sector .gjs-clm-select option,.gjs-sm-sector .gjs-sm-field.gjs-sm-select option,.gjs-sm-sector .gjs-sm-select.gjs-clm-field option{padding:3px 0}.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-list.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-list.gjs-clm-field{width:auto;padding:0;overflow:hidden;float:left}.gjs-clm-tags .gjs-sm-field.gjs-sm-list input,.gjs-clm-tags .gjs-sm-list.gjs-clm-field input,.gjs-sm-sector .gjs-sm-field.gjs-sm-list input,.gjs-sm-sector .gjs-sm-list.gjs-clm-field input{display:none}.gjs-clm-tags .gjs-sm-field.gjs-sm-list label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field label,.gjs-sm-sector .gjs-sm-field.gjs-sm-list label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field label{cursor:pointer;padding:5px;display:block}.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label,.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label{background-color:rgba(255,255,255,.2)}.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-icon,.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-icon{background-repeat:no-repeat;background-position:center;text-shadow:none;line-height:normal}.gjs-clm-tags .gjs-sm-field.gjs-sm-integer select,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field select,.gjs-sm-sector .gjs-sm-field.gjs-sm-integer select,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field select{width:auto;padding:0}.gjs-clm-tags .gjs-sm-list .gjs-sm-el,.gjs-sm-sector .gjs-sm-list .gjs-sm-el{float:left;border-left:1px solid rgba(0,0,0,.3)}.gjs-clm-tags .gjs-sm-list .gjs-sm-el:first-child,.gjs-sm-sector .gjs-sm-list .gjs-sm-el:first-child{border:none}.gjs-clm-tags .gjs-sm-list .gjs-sm-el:hover,.gjs-sm-sector .gjs-sm-list .gjs-sm-el:hover{background:rgba(0,0,0,.3)}.gjs-clm-tags .gjs-sm-properties,.gjs-sm-sector .gjs-sm-properties{font-size:11px;padding:10px 5px}.gjs-clm-tags .gjs-sm-property,.gjs-sm-sector .gjs-sm-property{box-sizing:border-box;float:left;width:50%;margin-bottom:5px;padding:0 5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-composite,.gjs-clm-tags .gjs-sm-property.gjs-sm-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-list,.gjs-clm-tags .gjs-sm-property.gjs-sm-stack,.gjs-sm-sector .gjs-sm-property.gjs-sm-composite,.gjs-sm-sector .gjs-sm-property.gjs-sm-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-list,.gjs-sm-sector .gjs-sm-property.gjs-sm-stack{width:100%}.gjs-clm-tags .gjs-sm-property .gjs-sm-btn,.gjs-sm-sector .gjs-sm-property .gjs-sm-btn{background-color:rgba(33,33,33,.3);border-radius:2px;box-shadow:1px 1px 0 rgba(5,5,5,.3),1px 1px 0 rgba(43,43,43,.3) inset;padding:5px;position:relative;text-align:center;height:auto;width:100%;cursor:pointer;color:#ddd;box-sizing:border-box;text-shadow:-1px -1px 0 rgba(0,0,0,.3);border:none;opacity:.85;filter:alpha(opacity=85)}.gjs-clm-tags .gjs-sm-property .gjs-sm-btn-c,.gjs-sm-sector .gjs-sm-property .gjs-sm-btn-c{box-sizing:border-box;float:left;width:100%;padding:0 5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box{background-color:rgba(255,255,255,.05);border-radius:2px;margin-top:5px;position:relative;overflow:hidden}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show{border:1px solid rgba(252,252,252,.05);padding:3px 5px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{display:block}.gjs-clm-tags .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file{height:50px}.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file{background-size:auto 100%;background-repeat:no-repeat;background-position:center center}.gjs-clm-tags .gjs-sm-property .gjs-sm-layers,.gjs-sm-sector .gjs-sm-property .gjs-sm-layers{margin-top:5px;min-height:30px}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer{background-color:rgba(255,255,255,.055);border-radius:2px;box-shadow:1px 1px 0 rgba(0,0,0,.2),1px 1px 0 rgba(255,255,255,.055) inset;margin:2px;padding:7px;position:relative;cursor:pointer}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{height:15px;position:absolute;right:27px;top:6px;width:15px}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box{border-radius:2px}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.5;filter:alpha(opacity=50)}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover{opacity:.8;filter:alpha(opacity=80)}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview{background-color:#fff;height:100%;width:100%;background-size:cover!important}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-active,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-active{background-color:rgba(255,255,255,.12)}.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box{display:none}.gjs-clm-tags #gjs-sm-text-shadow #gjs-sm-preview::after,.gjs-sm-sector #gjs-sm-text-shadow #gjs-sm-preview::after{color:#000;content:"T";font-weight:900;line-height:17px;padding:0 4px}.gjs-clm-tags .gjs-sm-stack .gjs-sm-properties,.gjs-sm-sector .gjs-sm-stack .gjs-sm-properties{padding-top:5px}.gjs-clm-tags .gjs-sm-stack #gjs-sm-add,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add{background:0 0;border:none;cursor:pointer;font-size:22px;line-height:10px;position:absolute;right:0;top:-20px;opacity:.75}.gjs-clm-tags .gjs-sm-stack #gjs-sm-add:hover,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add:hover{opacity:1;filter:alpha(opacity=100)}.gjs-clm-tags .gjs-sm-colorp-c,.gjs-sm-sector .gjs-sm-colorp-c{height:100%;width:20px;position:absolute;right:0;top:0;box-sizing:border-box;border-radius:2px;padding:2px}.gjs-clm-tags .gjs-sm-colorp-c .gjs-checker-bg,.gjs-clm-tags .gjs-sm-colorp-c .gjs-field-colorp-c,.gjs-sm-sector .gjs-sm-colorp-c .gjs-checker-bg,.gjs-sm-sector .gjs-sm-colorp-c .gjs-field-colorp-c{height:100%;width:100%;border-radius:1px}.gjs-clm-tags .gjs-sm-color-picker,.gjs-sm-sector .gjs-sm-color-picker{background-color:#ddd;cursor:pointer;height:16px;width:100%;margin-top:-16px;box-shadow:0 0 1px rgba(0,0,0,.3);border-radius:1px}.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-upload,.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-upload{left:0;top:0;position:absolute;width:100%;opacity:0;cursor:pointer}.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-label,.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-label{padding:2px 0}.gjs-sm-layer>#gjs-sm-move{opacity:.7;filter:alpha(opacity=70);cursor:move;font-size:12px;float:left;margin:0 5px 0 0}.gjs-sm-layer>#gjs-sm-move:hover{opacity:.9;filter:alpha(opacity=90)}.gjs-blocks-c{display:flex;flex-wrap:wrap;justify-content:flex-start}.gjs-block{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;width:45%;padding:1em;box-sizing:border-box;height:90px;cursor:all-scroll;font-size:11px;font-weight:lighter;display:flex;flex-direction:column;justify-content:flex-end;border:1px solid rgba(0,0,0,.2);border-radius:3px;margin:10px 2.5% 5px;box-shadow:0 1px 0 0 rgba(0,0,0,.15);transition:all .2s ease 0s;transition-property:box-shadow,color}.gjs-block:hover{box-shadow:0 3px 4px 0 rgba(0,0,0,.15)}.gjs-block.fa{font-size:2em;line-height:2em;padding:11px}.gjs-block-label{line-height:normal;font-size:.65rem;font-weight:400}.gjs-block.gjs-bdrag{width:auto;padding:0}.gjs-clm-tags{font-size:11px;padding:10px 5px}.gjs-clm-tags #gjs-clm-label,.gjs-clm-tags #gjs-clm-sel{padding:7px 0;float:left}.gjs-clm-tags #gjs-clm-sel{font-style:italic;margin-left:5px}.gjs-clm-tags #gjs-clm-status-c{float:right}.gjs-clm-tags #gjs-clm-tags-field{clear:both;padding:5px;margin-bottom:5px}.gjs-clm-tags #gjs-clm-tags-c{display:inline-block;vertical-align:top}.gjs-clm-tags #gjs-clm-add-tag{background-color:rgba(255,255,255,.15);border-radius:2px;padding:5px 6px;box-shadow:1px 1px 0 rgba(255,255,255,.2) inset;border:1px solid rgba(0,0,0,.15);cursor:pointer}.gjs-clm-tags #gjs-clm-new{color:#ddd;padding:5px 6px;display:none}.gjs-clm-tags .gjs-clm-tag{background-color:#804f7b;border:1px solid #5a3857;box-shadow:1px 1px #9c6196 inset;text-shadow:1px 1px #6a4166;display:inline-block;border-radius:3px;margin:0 3px 3px 0;padding:4px;cursor:default}.gjs-clm-tags #gjs-clm-close{font-size:20px;line-height:0;cursor:pointer;color:rgba(255,255,255,.9)}.gjs-clm-tags #gjs-clm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-clm-tags #gjs-clm-checkbox{color:rgba(255,255,255,.9);vertical-align:middle;cursor:pointer;font-size:9px}.gjs-clm-tags #gjs-clm-tag-label{cursor:text}.gjs-clm-tags #gjs-clm-tag-label input{width:auto;padding:0 4px}.gjs-mdl-backlayer,.gjs-mdl-container{position:absolute;top:0;left:0;width:100%;height:100%}.gjs-mdl-backlayer{background-color:#000;z-index:1;opacity:.5;filter:alpha(opacity=50)}.gjs-mdl-container{z-index:10}.gjs-mdl-dialog{text-shadow:-1px -1px 0 rgba(0,0,0,.05);animation:gjs-slide-down 215ms;margin:30px auto 0;max-width:850px;width:90%;border-radius:3px;font-weight:lighter;position:relative;z-index:2}.gjs-mdl-dialog .gjs-mdl-btn-close{position:absolute;right:15px;top:5px}.gjs-mdl-active .gjs-mdl-dialog{animation:gjs-mdl-slide-down 216ms}.gjs-mdl-content,.gjs-mdl-header{padding:10px 15px;clear:both}.gjs-mdl-header{position:relative;border-bottom:1px solid rgba(0,0,0,.3);padding:15px 15px 7px}.gjs-mdl-content{border-top:1px solid rgba(255,255,255,.1)}.gjs-export-dl::after{content:"";clear:both;display:block;margin-bottom:10px}.gjs-am-assets{height:290px;overflow:auto;clear:both}.gjs-am-assets-header{padding:5px}.gjs-am-add-asset .gjs-am-add-field{width:70%;float:left}.gjs-am-add-asset button{width:25%;float:right}.gjs-am-add-field input{padding:6px}.gjs-am-assets-cont{background-color:rgba(0,0,0,.1);border-radius:3px;box-sizing:border-box;padding:10px;width:45%;float:right;height:325px;overflow:hidden}.gjs-am-assets-cont #gjs-am-preview-cont{position:relative;height:70px;width:30%;background-color:#444;border-radius:2px;float:left;overflow:hidden}.gjs-am-assets-cont #gjs-am-preview{position:absolute;background-position:center center;background-size:cover;background-repeat:no-repeat;height:100%;width:100%;z-index:1}.gjs-am-assets-cont #gjs-am-preview-bg{position:absolute;height:100%;width:100%;opacity:.5;filter:alpha(opacity=50);z-index:0}.gjs-am-assets-cont .gjs-am-highlight{background-color:rgba(255,255,255,.1)}.gjs-am-assets-cont .gjs-am-asset{border-bottom:1px solid rgba(0,0,0,.3);padding:5px;cursor:pointer;position:relative}.gjs-am-assets-cont .gjs-am-asset:hover #gjs-am-close{display:block}.gjs-am-assets-cont #gjs-am-close{position:absolute;right:5px;top:0;display:none}.gjs-am-assets-cont #gjs-am-meta{width:70%;float:left;font-size:12px;padding:5px 0 0 5px;box-sizing:border-box}.gjs-am-assets-cont #gjs-am-meta>div{margin-bottom:5px}.gjs-am-assets-cont #gjs-am-meta #gjs-am-dimensions{font-size:10px;opacity:.5;filter:alpha(opacity=50)}.gjs-am-file-uploader{width:55%;float:left}.gjs-am-file-uploader>form{background-color:rgba(0,0,0,.1);border:2px dashed;border-radius:3px;position:relative;text-align:center;margin-bottom:15px}#gjs-rte-toolbar .gjs-rte-btn.btn-info,.gjs-cm-editor #gjs-cm-title{background-color:rgba(0,0,0,.3)}.gjs-am-file-uploader>form.gjs-am-hover{border:2px solid #62c462;color:#75cb75}.gjs-am-file-uploader>form.gjs-am-disabled{border-color:red}.gjs-am-file-uploader>form #gjs-am-uploadFile{opacity:0;filter:alpha(opacity=0);padding:150px 10px;width:100%;box-sizing:border-box}.gjs-am-file-uploader #gjs-am-title{position:absolute;padding:150px 10px;width:100%}.gjs-cm-editor-c{float:left;box-sizing:border-box;width:50%}.gjs-cm-editor-c .CodeMirror{height:450px}.gjs-cm-editor{font-size:12px}.gjs-cm-editor#gjs-cm-htmlmixed{padding-right:10px;border-right:1px solid rgba(0,0,0,.3)}.gjs-cm-editor#gjs-cm-htmlmixed #gjs-cm-title{color:#a97d44}.gjs-cm-editor#gjs-cm-css{padding-left:10px;border-left:1px solid rgba(255,255,255,.1)}.gjs-cm-editor#gjs-cm-css #gjs-cm-title{color:#ddca7e}.gjs-cm-editor #gjs-cm-title{font-size:12px;padding:5px 10px 3px;text-align:right}#gjs-rte-toolbar{display:none;border:1px solid rgba(0,0,0,.3);position:absolute;border-radius:3px;z-index:10}#gjs-rte-toolbar .gjs-rte-btn{display:inline-block;padding:5px;min-width:25px;border-right:1px solid rgba(0,0,0,.3);text-align:center;cursor:pointer;outline:0}#gjs-rte-toolbar .gjs-rte-btn:last-child{border-right:none}#gjs-rte-toolbar .gjs-rte-btn:hover{background-color:rgba(255,255,255,.1)}#gjs-rte-toolbar select{height:16px}.sp-hue,.sp-slider{cursor:row-resize}.sp-color,.sp-dragger{cursor:crosshair}.sp-alpha-handle,.sp-alpha-inner{cursor:col-resize}.sp-hue{left:90%}.sp-color{right:15%}.sp-container{border:1px solid rgba(0,0,0,.3);box-shadow:0 0 7px rgba(0,0,0,.3);border-radius:3px}.sp-picker-container{border:none}.colpick_dark .colpick_color{outline:rgba(0,0,0,.3) solid 1px}.sp-cancel,.sp-cancel:hover{bottom:-8px;color:#777!important;font-size:25px;left:0;position:absolute;text-decoration:none}.sp-alpha-handle{border:1px solid #555;width:4px}.sp-color,.sp-hue{border:1px solid #333}.sp-slider{border:1px solid #555;height:3px;left:-4px;width:22px}.sp-dragger{background:0 0;box-shadow:0 0 0 1px #111}.sp-button-container{float:none;width:100%;position:relative;text-align:right}.sp-container button,.sp-container button:active,.sp-container button:hover{background:rgba(0,0,0,.3);border-color:rgba(0,0,0,.3);color:#ddd;text-shadow:none;box-shadow:none;padding:3px 5px}.sp-palette-container{border:none;float:none;margin:0;padding:5px 10px 0}.sp-palette .sp-thumb-el,.sp-palette .sp-thumb-el:hover{border:1px solid rgba(0,0,0,.9)}.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:rgba(0,0,0,.9)}.gjs-hidden{display:none}@keyframes gjs-slide-down{0%{transform:translate(0,-3rem);opacity:0}100%{transform:translate(0,0);opacity:1}}@keyframes gjs-slide-up{0%{transform:translate(0,0);opacity:1}100%{transform:translate(0,-3rem);opacity:0}} + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.CodeMirror{font-family:monospace;height:300px;color:black;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,0.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{0%{}50%{background-color:transparent}100%{}}@-webkit-keyframes blink{0%{}50%{background-color:transparent}100%{}}@keyframes blink{0%{}50%{background-color:transparent}100%{}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:#f00}.cm-invalidchar{color:#f00}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,0.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:0.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,0.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:none}.cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.cm-s-hopscotch span.cm-comment{color:#b33508}.cm-s-hopscotch span.cm-atom{color:#c85e7c}.cm-s-hopscotch span.cm-number{color:#c85e7c}.cm-s-hopscotch span.cm-property,.cm-s-hopscotch span.cm-attribute{color:#8fc13e}.cm-s-hopscotch span.cm-keyword{color:#dd464c}.cm-s-hopscotch span.cm-string{color:#fdcc59}.cm-s-hopscotch span.cm-variable{color:#8fc13e}.cm-s-hopscotch span.cm-variable-2{color:#1290bf}.cm-s-hopscotch span.cm-def{color:#fd8b19}.cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.cm-s-hopscotch span.cm-tag{color:#dd464c}.cm-s-hopscotch span.cm-link{color:#c85e7c}.cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:white !important}.cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}@font-face{font-family:'font3336';src:url("../fonts/main-fonts.eot?v=20");src:url("../fonts/main-fonts.woff?v=20") format("woff"),url("../fonts/main-fonts.ttf?v=20") format("truetype"),url("../fonts/main-fonts.svg?v=20") format("svg"),url("../fonts/main-fonts.eot?v=20") format("embedded-opentype");font-weight:normal;font-style:normal}.gjs-one-bg{background-color:#444}.gjs-one-color{color:#444}.gjs-one-color-h:hover{color:#444}.gjs-two-bg{background-color:#ddd}.gjs-two-color{color:#ddd}.gjs-two-color-h:hover{color:#ddd}.gjs-three-bg{background-color:#804f7b}.gjs-three-color{color:#804f7b}.gjs-three-color-h:hover{color:#804f7b}.gjs-four-bg{background-color:#d278c9}.gjs-four-color{color:#d278c9}.gjs-four-color-h:hover{color:#d278c9}.gjs-bg-main,.gjs-off-prv,.gjs-sm-sector .gjs-sm-colorp-c,.gjs-clm-tags .gjs-sm-colorp-c{background-color:#444}.gjs-color-main,.gjs-off-prv,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add{color:#ddd;fill:#ddd}.gjs-color-active{color:#f8f8f8;fill:#f8f8f8}.gjs-color-warn{color:#ffca6f;fill:#ffca6f}.gjs-color-hl{color:#71b7f1;fill:#71b7f1}.gjs-fonts::before{display:block;font:normal normal normal 14px font3336;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:5em}.gjs-f-b1::before{content:'Q'}.gjs-f-b2::before{content:'W'}.gjs-f-b3::before{content:'E'}.gjs-f-b37::before{content:'R'}.gjs-f-hero::before{content:'T'}.gjs-f-h1p::before{content:'y'}.gjs-f-3ba::before{content:'u'}.gjs-f-image::before{content:'I'}.gjs-f-text::before{content:'o'}.gjs-f-quo::before{content:'p'}.gjs-f-button::before{content:'B'}.gjs-f-divider::before{content:'D'}.gjs-invis-invis,.gjs-clm-tags #gjs-clm-new,.gjs-no-app{background-color:transparent;border:none;color:inherit}.gjs-no-app{height:10px}.gjs-test::btn{color:'#fff'}.opac50,.gjs-clm-tags #gjs-clm-close{opacity:.5;filter:alpha(opacity=50)}.gjs-checker-bg,.gjs-field-colorp-c,.checker-bg,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==")}.gjs-no-user-select,.gjs-grabbing,.gjs-grabbing *,.gjs-layer-name,.gjs-rte-toolbar{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-no-pointer-events,.gjs-resizer-c,.gjs-margin-v-el,.gjs-padding-v-el,.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{pointer-events:none}.gjs-bdrag{pointer-events:none !important;position:absolute !important;z-index:10 !important;width:auto}.gjs-drag-helper{background-color:#3b97e3 !important;pointer-events:none !important;position:absolute !important;z-index:10 !important;transform:scale(0.3) !important;transform-origin:top left !important;-webkit-transform-origin:top left !important;margin:15px !important;transition:none !important;outline:none !important}.gjs-grabbing,.gjs-grabbing *{cursor:grabbing !important;cursor:-webkit-grabbing !important}.gjs-grabbing{overflow:hidden}.gjs-off-prv{position:relative;z-index:10;padding:5px;cursor:pointer}.gjs-editor-cont ::-webkit-scrollbar-track{background:rgba(0,0,0,0.1)}.gjs-editor-cont ::-webkit-scrollbar-thumb{background-color:rgba(255,255,255,0.2)}.gjs-editor-cont ::-webkit-scrollbar{width:8px}.clear{clear:both}.no-select,.gjs-com-no-select,.gjs-com-no-select img,.gjs-category-title,.gjs-sm-sector .gjs-sm-title,.gjs-clm-tags .gjs-sm-title,.gjs-block-category .gjs-title,.gjs-layer-title,.gjs-clm-tags #gjs-clm-close{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-editor{font-family:Helvetica,sans-serif;font-size:.75rem;position:relative;box-sizing:border-box;height:100%}.gjs-freezed,.gjs-freezed{opacity:.5;filter:alpha(opacity=50);pointer-events:none}.gjs-traits-label{border-bottom:1px solid rgba(0,0,0,0.2);font-weight:lighter;margin-bottom:5px;padding:10px;text-align:left}.gjs-trt-header{font-weight:lighter;padding:10px}.gjs-trt-trait{display:flex;justify-content:start;padding:5px 10px;font-weight:lighter}.gjs-trt-traits{font-size:.75rem}.gjs-trt-trait .gjs-label{width:30%;text-align:left;text-overflow:ellipsis;overflow:hidden}.gjs-trt-trait .gjs-field{width:70%}.gjs-cv-canvas{background-color:rgba(0,0,0,0.15);box-sizing:border-box;width:85%;height:calc(100% - 40px);bottom:0;overflow:hidden;z-index:1;position:absolute;left:0;top:40px}.gjs-cv-canvas .gjs-ghost{display:none;pointer-events:none;background-color:#5b5b5b;border:2px dashed #ccc;position:absolute;z-index:10;opacity:.55;filter:alpha(opacity=55)}.gjs-cv-canvas .gjs-highlighter,.gjs-cv-canvas .gjs-highlighter-sel{position:absolute;outline:1px solid #3b97e3;outline-offset:-1px;pointer-events:none}.gjs-cv-canvas .gjs-highlighter-warning{outline:3px solid #ffca6f}.gjs-cv-canvas .gjs-highlighter-sel{outline:3px solid #3b97e3}.gjs-cv-canvas #gjs-tools{width:100%;position:absolute;top:0;left:0;outline:none}.gjs-cv-canvas>div:first-child{background-color:#fff;position:relative;height:100%;overflow:auto;width:100%}.gjs-cv-canvas *{box-sizing:border-box}.gjs-frame{outline:medium none;height:100%;width:100%;border:none;margin:auto;display:block;transition:width 0.35s ease,height 0.35s ease;position:absolute;top:0;bottom:0;left:0;right:0}.gjs-toolbar{position:absolute;background-color:#3b97e3;color:white;z-index:10}.gjs-toolbar-item{padding:5px 7px;font-size:0.8rem;cursor:pointer}.gjs-resizer-c{position:absolute;left:0;top:0;width:100%;height:100%;z-index:9}.gjs-margin-v-el,.gjs-padding-v-el,.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{opacity:.1;filter:alpha(opacity=10);position:absolute;background-color:yellow}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{opacity:.2;filter:alpha(opacity=20)}.gjs-padding-v-el,.gjs-fixedpadding-v-el{background-color:navy}.gjs-resizer-h{pointer-events:all;position:absolute;border:3px solid #3b97e3;width:10px;height:10px;background-color:#fff;margin:-5px}.gjs-resizer-h-tl{top:0;left:0;cursor:nwse-resize}.gjs-resizer-h-tr{top:0;right:0;cursor:nesw-resize}.gjs-resizer-h-tc{top:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-cl{left:0;margin:auto -5px;top:0;bottom:0;cursor:ew-resize}.gjs-resizer-h-cr{margin:auto -5px;top:0;bottom:0;right:0;cursor:ew-resize}.gjs-resizer-h-bl{bottom:0;left:0;cursor:nesw-resize}.gjs-resizer-h-bc{bottom:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-br{bottom:0;right:0;cursor:nwse-resize}.gjs-pn-panel .gjs-resizer-h{background-color:rgba(0,0,0,0.2);border:none;opacity:0;transition:opacity 0.25s}.gjs-pn-panel .gjs-resizer-h:hover{opacity:1}.gjs-pn-panel .gjs-resizer-h-tc,.gjs-pn-panel .gjs-resizer-h-bc{margin:0 auto;width:100%}.gjs-pn-panel .gjs-resizer-h-cr,.gjs-pn-panel .gjs-resizer-h-cl{margin:auto 0;height:100%}.gjs-resizing .gjs-highlighter,.gjs-resizing .gjs-badge{display:none !important}.gjs-resizing-tl *{cursor:nwse-resize !important}.gjs-resizing-tr *{cursor:nesw-resize !important}.gjs-resizing-tc *{cursor:ns-resize !important}.gjs-resizing-cl *{cursor:ew-resize !important}.gjs-resizing-cr *{cursor:ew-resize !important}.gjs-resizing-bl *{cursor:nesw-resize !important}.gjs-resizing-bc *{cursor:ns-resize !important}.gjs-resizing-br *{cursor:nwse-resize !important}.btn-cl,.gjs-mdl-btn-close,.gjs-am-close{opacity:.3;filter:alpha(opacity=30);font-size:25px;cursor:pointer}.btn-cl:hover,.gjs-mdl-btn-close:hover,.gjs-am-close:hover{opacity:.7;filter:alpha(opacity=70)}.no-dots,.ui-resizable-handle{border:none !important;margin:0 !important;outline:none !important}.gjs-com-dashed *{outline:1px dashed #888;outline-offset:-2px;box-sizing:border-box}.gjs-cv-canvas .gjs-comp-selected{outline:3px solid #3b97e3 !important}*.gjs-com-hover,div.gjs-com-hover{outline:1px solid #3b97e3}*.gjs-com-hover-delete,div.gjs-com-hover-delete{outline:2px solid #dd3636;opacity:.5;filter:alpha(opacity=50)}*.gjs-com-hover-move,div.gjs-com-hover-move{outline:3px solid #ffca6f}.gjs-com-badge,.gjs-com-badge-red,.gjs-badge{pointer-events:none;background-color:#3b97e3;color:#fff;padding:2px 5px;position:absolute;z-index:1;font-size:12px;outline:none;display:none}.gjs-com-badge-red{background-color:#dd3636}.gjs-badge-warning{background-color:#ffca6f}.gjs-placeholder,.gjs-com-placeholder,.gjs-placeholder{position:absolute;z-index:10;pointer-events:none;display:none}.gjs-placeholder,.gjs-placeholder{border-style:solid !important;border-color:#62c462;outline:none;box-sizing:border-box;transition:top .2s,left .2s,width .2s,height .2s}.gjs-placeholder-int,.gjs-com-placeholder-int,.gjs-placeholder-int{background-color:#62c462;box-shadow:0 0 3px rgba(0,0,0,0.2);height:100%;width:100%;pointer-events:none;padding:1.5px;outline:none}.gjs-pn-panel{display:inline-block;position:absolute;box-sizing:border-box;text-align:center;padding:5px;z-index:3}.gjs-pn-panel .icon-undo,.gjs-pn-panel .icon-redo{font-size:20px;height:30px;width:25px}.gjs-pn-commands{width:85%;left:0;top:0;box-shadow:0 0 5px rgba(0,0,0,0.2)}.gjs-pn-options{right:15%;top:0}.gjs-pn-views{border-bottom:2px solid rgba(0,0,0,0.2);right:0;width:15%;z-index:4}.gjs-pn-views-container{height:100%;padding:42px 0 0;right:0;width:15%;overflow:auto;box-shadow:0 0 5px rgba(0,0,0,0.2)}.gjs-pn-buttons{align-items:center;display:flex;justify-content:space-between}.gjs-pn-btn{box-sizing:border-box;height:30px;width:30px;line-height:21px;background-color:transparent;border:none;font-size:18px;margin-right:5px;border-radius:2px;padding:5px;position:relative;cursor:pointer}.gjs-pn-btn.gjs-pn-active{background-color:rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.25) inset}.gjs-comp-image-placeholder{display:block;background-color:#f5f5f5;color:#777;height:50px;width:50px;line-height:50px;outline:3px solid #ffca6f;outline-offset:-3px;text-align:center;font-size:16.66667px;cursor:pointer}.gjs-comp-image-placeholder.fa-picture-o::after{content:"\f03e"}.gjs-label{line-height:18px}.gjs-fields{display:flex}.gjs-select{padding:0;width:100%}.gjs-select select{padding-right:10px}.gjs-select:-moz-focusring,.gjs-select select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,0.7)}.gjs-input:focus,.gjs-button:focus,.gjs-btn-prim:focus,.gjs-select:focus,.gjs-select select:focus{outline:none}.gjs-field input,.gjs-field select,.gjs-field textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;color:inherit;border:none;background-color:transparent;box-sizing:border-box;width:100%;position:relative;padding:5px;z-index:1}.gjs-field input:focus,.gjs-field select:focus,.gjs-field textarea:focus{outline:none}.gjs-field-range{flex:9 1 auto}.gjs-field-integer input{padding-right:30px}.gjs-select option,.gjs-clm-select option,.gjs-sm-select option,.gjs-fields option,.gjs-sm-unit option{background-color:#444;color:#ddd}.gjs-field{background-color:rgba(0,0,0,0.2);border:none;box-shadow:none;border-radius:2px;box-sizing:border-box;padding:0;position:relative}.gjs-field textarea{resize:vertical}.gjs-field .gjs-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;z-index:0}.gjs-field .gjs-d-s-arrow{bottom:0;top:0;margin:auto;right:5px;border-top:4px solid rgba(255,255,255,0.7);position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-field-arrows{position:absolute;cursor:ns-resize;margin:auto;height:20px;width:9px;z-index:10;bottom:0;right:3px;top:0}.gjs-field-color,.gjs-field-radio{width:100%}.gjs-field-color input{padding-right:22px;box-sizing:border-box}.gjs-field-colorp{border-left:1px solid rgba(0,0,0,0.2);box-sizing:border-box;height:100%;padding:2px;position:absolute;right:0;top:0;width:22px;z-index:10}.gjs-field-colorp .gjs-checker-bg,.gjs-field-colorp .gjs-field-colorp-c{height:100%;width:100%;border-radius:1px}.gjs-field-colorp-c{height:100%;position:relative;width:100%}.gjs-field-color-picker{background-color:#ddd;cursor:pointer;height:100%;width:100%;box-shadow:0 0 1px rgba(0,0,0,0.2);border-radius:1px;position:absolute;top:0}.gjs-field-checkbox{padding:0;width:auto !important}.gjs-field-checkbox input{display:none}.gjs-field-checkbox input:checked+.gjs-chk-icon{border-color:rgba(255,255,255,0.5);border-width:0 2px 2px 0;border-style:solid}.gjs-radio-item{flex:1 1 auto;text-align:center;border-left:1px solid rgba(0,0,0,0.2)}.gjs-radio-item:first-child{border:none}.gjs-radio-item:hover{background:rgba(0,0,0,0.2)}.gjs-radio-item input{display:none}.gjs-radio-item input:checked+.gjs-radio-item-label{background-color:rgba(255,255,255,0.2)}.gjs-radio-items{display:flex}.gjs-radio-item-label{cursor:pointer;display:block;padding:5px}.gjs-field-units{position:absolute;margin:auto;right:10px;bottom:0;top:0}.gjs-field-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,0.7);cursor:pointer}.gjs-field-arrow-u,.gjs-field-arrow-d{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,0.7);bottom:4px;cursor:pointer}.gjs-field-arrow-u{border-bottom:4px solid rgba(255,255,255,0.7);border-top:none;top:4px}.gjs-field-select{padding:0}.gjs-field-range{background-color:transparent;border:none;box-shadow:none;padding:0}.gjs-field-range input{margin:0;height:100%}.gjs-field-range input:focus{outline:none}.gjs-field-range input::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;height:10px;width:10px;border:1px solid rgba(0,0,0,0.2);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-moz-range-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,0.2);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-ms-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,0.2);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-moz-range-track{background-color:rgba(0,0,0,0.2);border-radius:1px;margin-top:3px;height:3px}.gjs-field-range input::-webkit-slider-runnable-track{background-color:rgba(0,0,0,0.2);border-radius:1px;margin-top:3px;height:3px}.gjs-field-range input::-ms-track{background-color:rgba(0,0,0,0.2);border-radius:1px;margin-top:3px;height:3px}.gjs-btn-prim{color:inherit;background-color:rgba(255,255,255,0.1);border-radius:2px;padding:3px 6px;padding:5px;cursor:pointer;border:none}.gjs-btn-prim:active{background-color:rgba(255,255,255,0.1)}.gjs-chk-icon{-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);box-sizing:border-box;display:block;height:14px;margin:0 5px;width:6px;cursor:pointer}.gjs-add-trasp{background:none;border:none;color:#ddd;cursor:pointer;font-size:1em;border-radius:2px;opacity:.75;filter:alpha(opacity=75)}.gjs-add-trasp:hover{opacity:1;filter:alpha(opacity=100)}.gjs-add-trasp:active{background-color:rgba(0,0,0,0.2)}.gjs-devices-c{display:flex;align-items:center;padding:3px}.gjs-devices-c .gjs-device-label{flex-grow:2;text-align:left;margin-right:10px}.gjs-devices-c .gjs-select{flex-grow:20}.gjs-devices-c .gjs-add-trasp{flex-grow:1;margin-left:5px}.gjs-category-open,.gjs-sm-sector.gjs-sm-open,.gjs-sm-open.gjs-clm-tags,.gjs-block-category.gjs-open{border-bottom:1px solid rgba(0,0,0,0.25)}.gjs-category-title,.gjs-sm-sector .gjs-sm-title,.gjs-clm-tags .gjs-sm-title,.gjs-block-category .gjs-title,.gjs-layer-title{font-weight:lighter;background-color:rgba(0,0,0,0.1);letter-spacing:1px;padding:9px 10px 9px 20px;border-bottom:1px solid rgba(0,0,0,0.25);text-align:left;position:relative;cursor:pointer}.gjs-sm-clear{line-height:0;cursor:pointer}.gjs-sm-header{font-weight:lighter;padding:10px}.gjs-sm-properties{font-size:.75rem;padding:10px 5px;display:flex;flex-wrap:wrap;align-items:flex-end;box-sizing:border-box;width:100%}.gjs-sm-label{margin:5px 5px 3px 0}.gjs-sm-close-btn,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.2;filter:alpha(opacity=20)}.gjs-sm-close-btn:hover,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-sm-sector,.gjs-clm-tags{clear:both;font-weight:lighter;text-align:left}.gjs-sm-sector #gjs-sm-caret,.gjs-clm-tags #gjs-sm-caret{padding-right:5px;font-size:11px}.gjs-sm-sector .gjs-sm-field,.gjs-clm-tags .gjs-sm-field,.gjs-sm-sector .gjs-clm-field,.gjs-clm-tags .gjs-clm-field{width:100%;position:relative}.gjs-sm-sector .gjs-sm-field input,.gjs-clm-tags .gjs-sm-field input,.gjs-sm-sector .gjs-clm-field input,.gjs-clm-tags .gjs-clm-field input,.gjs-sm-sector .gjs-sm-field select,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field select,.gjs-clm-tags .gjs-clm-field select{background-color:transparent;color:rgba(255,255,255,0.7);border:none;width:100%}.gjs-sm-sector .gjs-sm-field input,.gjs-clm-tags .gjs-sm-field input,.gjs-sm-sector .gjs-clm-field input,.gjs-clm-tags .gjs-clm-field input{box-sizing:border-box}.gjs-sm-sector .gjs-sm-field select,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field select,.gjs-clm-tags .gjs-clm-field select{position:relative;z-index:1;-webkit-appearance:none;-moz-appearance:none;appearance:none}.gjs-sm-sector .gjs-sm-field select::-ms-expand,.gjs-clm-tags .gjs-sm-field select::-ms-expand,.gjs-sm-sector .gjs-clm-field select::-ms-expand,.gjs-clm-tags .gjs-clm-field select::-ms-expand{display:none}.gjs-sm-sector .gjs-sm-field select:-moz-focusring,.gjs-clm-tags .gjs-sm-field select:-moz-focusring,.gjs-sm-sector .gjs-clm-field select:-moz-focusring,.gjs-clm-tags .gjs-clm-field select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,0.7)}.gjs-sm-sector .gjs-sm-field input:focus,.gjs-clm-tags .gjs-sm-field input:focus,.gjs-sm-sector .gjs-clm-field input:focus,.gjs-clm-tags .gjs-clm-field input:focus,.gjs-sm-sector .gjs-sm-field select:focus,.gjs-clm-tags .gjs-sm-field select:focus,.gjs-sm-sector .gjs-clm-field select:focus,.gjs-clm-tags .gjs-clm-field select:focus{outline:none}.gjs-sm-sector .gjs-sm-field .gjs-sm-unit,.gjs-clm-tags .gjs-sm-field .gjs-sm-unit,.gjs-sm-sector .gjs-clm-field .gjs-sm-unit,.gjs-clm-tags .gjs-clm-field .gjs-sm-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,0.7);cursor:pointer}.gjs-sm-sector .gjs-sm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-sm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-clm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-clm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;cursor:ns-resize}.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow{cursor:pointer}.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow{border-bottom:4px solid rgba(255,255,255,0.7);top:4px}.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow{border-top:4px solid rgba(255,255,255,0.7);bottom:4px}.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow{bottom:7px}.gjs-sm-sector .gjs-sm-field.gjs-sm-color,.gjs-clm-tags .gjs-sm-field.gjs-sm-color,.gjs-sm-sector .gjs-sm-color.gjs-clm-field,.gjs-clm-tags .gjs-sm-color.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-input,.gjs-clm-tags .gjs-sm-field.gjs-sm-input,.gjs-sm-sector .gjs-sm-input.gjs-clm-field,.gjs-clm-tags .gjs-sm-input.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-integer,.gjs-clm-tags .gjs-sm-field.gjs-sm-integer,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-list.gjs-clm-field,.gjs-clm-tags .gjs-sm-list.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-clm-tags .gjs-clm-select{background-color:rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.1);box-shadow:1px 1px 0 rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);border-radius:2px;box-sizing:border-box;padding:0 5px}.gjs-sm-sector .gjs-sm-field.gjs-sm-composite,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-composite.gjs-clm-field{border-radius:2px}.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-clm-tags .gjs-clm-select{padding:0}.gjs-sm-sector .gjs-sm-field.gjs-sm-select select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field select,.gjs-clm-tags .gjs-sm-select.gjs-clm-field select,.gjs-sm-sector .gjs-clm-select select,.gjs-clm-tags .gjs-clm-select select{height:20px}.gjs-sm-sector .gjs-sm-field.gjs-sm-select option,.gjs-clm-tags .gjs-sm-field.gjs-sm-select option,.gjs-sm-sector .gjs-sm-select.gjs-clm-field option,.gjs-clm-tags .gjs-sm-select.gjs-clm-field option,.gjs-sm-sector .gjs-clm-select option,.gjs-clm-tags .gjs-clm-select option{padding:3px 0}.gjs-sm-sector .gjs-sm-field.gjs-sm-composite,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-composite.gjs-clm-field{background-color:rgba(0,0,0,0.1);border:1px solid rgba(0,0,0,0.25)}.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-list.gjs-clm-field,.gjs-clm-tags .gjs-sm-list.gjs-clm-field{width:auto;padding:0;overflow:hidden;float:left}.gjs-sm-sector .gjs-sm-field.gjs-sm-list input,.gjs-clm-tags .gjs-sm-field.gjs-sm-list input,.gjs-sm-sector .gjs-sm-list.gjs-clm-field input,.gjs-clm-tags .gjs-sm-list.gjs-clm-field input{display:none}.gjs-sm-sector .gjs-sm-field.gjs-sm-list label,.gjs-clm-tags .gjs-sm-field.gjs-sm-list label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field label{cursor:pointer;padding:5px;display:block}.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label{background-color:rgba(255,255,255,0.2)}.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-icon,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-icon{background-repeat:no-repeat;background-position:center;text-shadow:none;line-height:normal}.gjs-sm-sector .gjs-sm-field.gjs-sm-integer select,.gjs-clm-tags .gjs-sm-field.gjs-sm-integer select,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field select,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field select{width:auto;padding:0}.gjs-sm-sector .gjs-sm-list .gjs-sm-el,.gjs-clm-tags .gjs-sm-list .gjs-sm-el{float:left;border-left:1px solid rgba(0,0,0,0.2)}.gjs-sm-sector .gjs-sm-list .gjs-sm-el:first-child,.gjs-clm-tags .gjs-sm-list .gjs-sm-el:first-child{border:none}.gjs-sm-sector .gjs-sm-list .gjs-sm-el:hover,.gjs-clm-tags .gjs-sm-list .gjs-sm-el:hover{background:rgba(0,0,0,0.2)}.gjs-sm-sector .gjs-sm-slider .gjs-field-integer,.gjs-clm-tags .gjs-sm-slider .gjs-field-integer{flex:1 1 65px}.gjs-sm-sector .gjs-sm-property,.gjs-clm-tags .gjs-sm-property{box-sizing:border-box;float:left;width:50%;margin-bottom:5px;padding:0 5px}.gjs-sm-sector .gjs-sm-property.gjs-sm-composite,.gjs-clm-tags .gjs-sm-property.gjs-sm-composite,.gjs-sm-sector .gjs-sm-property.gjs-sm-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-list,.gjs-clm-tags .gjs-sm-property.gjs-sm-list,.gjs-sm-sector .gjs-sm-property.gjs-sm-radio,.gjs-clm-tags .gjs-sm-property.gjs-sm-radio,.gjs-sm-sector .gjs-sm-property.gjs-sm-stack,.gjs-clm-tags .gjs-sm-property.gjs-sm-stack,.gjs-sm-sector .gjs-sm-property.gjs-sm-slider,.gjs-clm-tags .gjs-sm-property.gjs-sm-slider,.gjs-sm-sector .gjs-sm-property.gjs-sm-color,.gjs-clm-tags .gjs-sm-property.gjs-sm-color{width:100%}.gjs-sm-sector .gjs-sm-property .gjs-sm-btn,.gjs-clm-tags .gjs-sm-property .gjs-sm-btn{background-color:rgba(33,33,33,0.2);border-radius:2px;box-shadow:1px 1px 0 rgba(5,5,5,0.2),1px 1px 0 rgba(43,43,43,0.2) inset;padding:5px;position:relative;text-align:center;height:auto;width:100%;cursor:pointer;color:#ddd;box-sizing:border-box;text-shadow:-1px -1px 0 rgba(0,0,0,0.2);border:none;opacity:.85;filter:alpha(opacity=85)}.gjs-sm-sector .gjs-sm-property .gjs-sm-btn-c,.gjs-clm-tags .gjs-sm-property .gjs-sm-btn-c{box-sizing:border-box;float:left;width:100%}.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box{background-color:rgba(255,255,255,0.05);border-radius:2px;margin-top:5px;position:relative;overflow:hidden}.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show{border:1px solid rgba(252,252,252,0.05);padding:3px 20px}.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{top:-5px;display:block}.gjs-sm-sector .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file{height:50px}.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file{background-size:auto 100%;background-repeat:no-repeat;background-position:center center}.gjs-sm-sector .gjs-sm-property .gjs-sm-layers,.gjs-clm-tags .gjs-sm-property .gjs-sm-layers{margin-top:5px;padding:1px 3px;min-height:30px}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer{background-color:rgba(255,255,255,0.055);border-radius:2px;margin:2px 0;padding:7px;position:relative;cursor:pointer}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{height:15px;position:absolute;right:27px;top:6px;width:15px}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box{border-radius:2px}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.5;filter:alpha(opacity=50)}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover{opacity:.8;filter:alpha(opacity=80)}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview{background-color:white;height:100%;width:100%;background-size:cover !important}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-active,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-active{background-color:rgba(255,255,255,0.12)}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box{display:none}.gjs-sm-sector #gjs-sm-text-shadow #gjs-sm-preview::after,.gjs-clm-tags #gjs-sm-text-shadow #gjs-sm-preview::after{color:#000;content:"T";font-weight:900;line-height:17px;padding:0 4px}.gjs-sm-sector .gjs-sm-stack .gjs-sm-properties,.gjs-clm-tags .gjs-sm-stack .gjs-sm-properties{padding:5px 0 0}.gjs-sm-sector .gjs-sm-stack #gjs-sm-add,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add{background:none;border:none;cursor:pointer;outline:none;font-size:22px;line-height:10px;position:absolute;right:0;top:-17px;opacity:0.75}.gjs-sm-sector .gjs-sm-stack #gjs-sm-add:hover,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add:hover{opacity:1;filter:alpha(opacity=100)}.gjs-sm-sector .gjs-sm-colorp-c,.gjs-clm-tags .gjs-sm-colorp-c{height:100%;width:20px;position:absolute;right:0;top:0;box-sizing:border-box;border-radius:2px;padding:2px}.gjs-sm-sector .gjs-sm-colorp-c .gjs-checker-bg,.gjs-clm-tags .gjs-sm-colorp-c .gjs-checker-bg,.gjs-sm-sector .gjs-sm-colorp-c .gjs-field-colorp-c,.gjs-clm-tags .gjs-sm-colorp-c .gjs-field-colorp-c{height:100%;width:100%;border-radius:1px}.gjs-sm-sector .gjs-sm-color-picker,.gjs-clm-tags .gjs-sm-color-picker{background-color:#ddd;cursor:pointer;height:16px;width:100%;margin-top:-16px;box-shadow:0 0 1px rgba(0,0,0,0.2);border-radius:1px}.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-upload,.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-upload{left:0;top:0;position:absolute;width:100%;opacity:0;cursor:pointer}.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-label,.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-label{padding:2px 0}.gjs-sm-layer>#gjs-sm-move{opacity:.7;filter:alpha(opacity=70);cursor:move;font-size:12px;float:left;margin:0 5px 0 0}.gjs-sm-layer>#gjs-sm-move:hover{opacity:.9;filter:alpha(opacity=90)}.gjs-blocks-c{display:flex;flex-wrap:wrap;justify-content:flex-start}.gjs-block-categories{display:flex;flex-direction:column}.gjs-block-category{width:100%}.gjs-block-category .gjs-caret-icon{margin-right:5px}.gjs-block{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;width:45%;padding:1em;box-sizing:border-box;min-height:90px;cursor:all-scroll;font-size:11px;font-weight:lighter;text-align:center;display:flex;flex-direction:column;justify-content:space-between;border:1px solid rgba(0,0,0,0.2);border-radius:3px;margin:10px 2.5% 5px;box-shadow:0 1px 0 0 rgba(0,0,0,0.15);transition:all 0.2s ease 0s;transition-property:box-shadow, color}.gjs-block:hover{box-shadow:0 3px 4px 0 rgba(0,0,0,0.15)}.gjs-block-svg{width:54px;fill:currentColor}.gjs-block-svg-path{fill:currentColor}.gjs-block.fa{font-size:2em;line-height:2em;padding:11px}.gjs-block-label{line-height:normal;font-size:0.65rem;font-weight:normal;font-family:Helvetica, sans-serif;overflow:hidden;text-overflow:ellipsis}.gjs-block.gjs-bdrag{width:auto;padding:0}.gjs-selected-parent{border:1px solid #ffca6f}.gjs-opac50{opacity:.5;filter:alpha(opacity=50)}.gjs-layer{font-weight:lighter;text-align:left;position:relative;background-color:rgba(0,0,0,0.1);font-size:.75rem}.gjs-layer-hidden{opacity:.55;filter:alpha(opacity=55)}.gjs-layer-count{position:absolute;right:27px;top:9px}.gjs-layer-vis{height:auto !important;width:auto !important;left:0;top:0;padding:7px 5px 7px 10px;position:absolute;cursor:pointer;z-index:1}.gjs-layer-caret{font-size:0.5rem;width:8px;padding:2px;cursor:pointer;position:absolute;left:-9px;top:6px;opacity:.7;filter:alpha(opacity=70)}.gjs-layer-caret:hover{opacity:1;filter:alpha(opacity=100)}.gjs-layer-title{padding:3px 10px 5px 30px;display:flex;align-items:center}.gjs-layer-title-inn{position:relative}.gjs-layer-name{padding:5px;display:inline-block;box-sizing:content-box}.gjs-layer>.gjs-layer-children{display:none}.gjs-layer.open>.gjs-layer-children{display:block}.gjs-layer-no-chld>.gjs-layer-title-inn>.gjs-layer-caret{display:none}.gjs-layer-move{padding:7px 10px 7px 5px;position:absolute;font-size:12px;cursor:move;right:0;top:0}.gjs-layer.gjs-hovered .gjs-layer-title{background-color:rgba(255,255,255,0.015)}.gjs-layer.gjs-selected .gjs-layer-title{background-color:rgba(255,255,255,0.1)}.gjs-layers{position:relative;height:100%}.gjs-layers #gjs-placeholder{width:100%;position:absolute}.gjs-layers #gjs-placeholder #gjs-plh-int{height:100%;padding:1px}.gjs-layers #gjs-placeholder #gjs-plh-int.gjs-insert{background-color:#62c462}.gjs-clm-tags{font-size:.75rem;padding:10px 5px}.gjs-clm-tags #gjs-clm-label,.gjs-clm-tags #gjs-clm-sel{padding:7px 0;float:left}.gjs-clm-tags #gjs-clm-sel{font-style:italic;margin-left:5px}.gjs-clm-tags #gjs-clm-status-c{float:right}.gjs-clm-tags #gjs-clm-tags-field{clear:both;padding:5px;margin-bottom:5px}.gjs-clm-tags #gjs-clm-tags-c{display:inline-block;vertical-align:top}.gjs-clm-tags #gjs-clm-add-tag{background-color:rgba(255,255,255,0.15);border-radius:2px;padding:5px 6px;box-shadow:1px 1px 0 rgba(255,255,255,0.2) inset;border:1px solid rgba(0,0,0,0.15);cursor:pointer}.gjs-clm-tags #gjs-clm-new{color:#ddd;padding:5px 6px;display:none}.gjs-clm-tags .gjs-clm-tag{display:inline-block;border-radius:3px;margin:0 3px 3px 0;padding:5px;cursor:default}.gjs-clm-tags #gjs-clm-close{font-size:20px;line-height:0;cursor:pointer;color:rgba(255,255,255,0.9)}.gjs-clm-tags #gjs-clm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-clm-tags #gjs-clm-checkbox{color:rgba(255,255,255,0.9);vertical-align:middle;cursor:pointer;font-size:9px}.gjs-clm-tags #gjs-clm-tag-label{padding:0 3px;cursor:text}.gjs-mdl-backlayer{opacity:.5;filter:alpha(opacity=50);background-color:#000;position:absolute;top:0;left:0;z-index:1;width:100%;height:100%}.gjs-mdl-container{font-family:Helvetica,sans-serif;position:absolute;top:0;left:0;z-index:10;width:100%;height:100%}.gjs-mdl-dialog{text-shadow:-1px -1px 0 rgba(0,0,0,0.05);animation:gjs-slide-down 0.215s;margin:30px auto 0;max-width:850px;width:90%;border-radius:3px;font-weight:lighter;position:relative;z-index:2}.gjs-mdl-title{font-size:1rem}.gjs-mdl-btn-close{position:absolute;right:15px;top:5px}.gjs-mdl-active .gjs-mdl-dialog{animation:gjs-mdl-slide-down 0.216s}.gjs-mdl-header,.gjs-mdl-content{padding:10px 15px;clear:both}.gjs-mdl-header{position:relative;border-bottom:1px solid rgba(0,0,0,0.2);padding:15px 15px 7px}.gjs-export-dl::after{content:"";clear:both;display:block;margin-bottom:10px}.gjs-dropzone{display:none;opacity:0;position:absolute;top:0;left:0;z-index:11;width:100%;height:100%;transition:opacity 0.25s;pointer-events:none}.gjs-dropzone-active .gjs-dropzone{display:block;opacity:1}.gjs-am-assets{height:290px;overflow:auto;clear:both;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:flex-start}.gjs-am-assets-header{padding:5px}.gjs-am-add-asset .gjs-am-add-field{width:70%;float:left}.gjs-am-add-asset button{width:25%;float:right}.gjs-am-preview-cont{position:relative;height:70px;width:30%;background-color:#444;border-radius:2px;float:left;overflow:hidden}.gjs-am-preview{position:absolute;background-position:center center;background-size:cover;background-repeat:no-repeat;height:100%;width:100%;z-index:1}.gjs-am-preview-bg{opacity:.5;filter:alpha(opacity=50);position:absolute;height:100%;width:100%;z-index:0}.gjs-am-dimensions{opacity:.5;filter:alpha(opacity=50);font-size:10px}.gjs-am-meta{width:70%;float:left;font-size:12px;padding:5px 0 0 5px;box-sizing:border-box}.gjs-am-meta>div{margin-bottom:5px}.gjs-am-close{cursor:pointer;position:absolute;right:5px;top:0;display:none}.gjs-am-asset{border-bottom:1px solid rgba(0,0,0,0.2);padding:5px;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.gjs-am-asset:hover .gjs-am-close{display:block}.gjs-am-highlight{background-color:rgba(255,255,255,0.1)}.gjs-am-assets-cont{background-color:rgba(0,0,0,0.1);border-radius:3px;box-sizing:border-box;padding:10px;width:45%;float:right;height:325px;overflow:hidden}.gjs-am-file-uploader{width:55%;float:left}.gjs-am-file-uploader>form{background-color:rgba(0,0,0,0.1);border:2px dashed;border-radius:3px;position:relative;text-align:center;margin-bottom:15px}.gjs-am-file-uploader>form.gjs-am-hover{border:2px solid #62c462;color:#75cb75}.gjs-am-file-uploader>form.gjs-am-disabled{border-color:red}.gjs-am-file-uploader>form #gjs-am-uploadFile{opacity:0;filter:alpha(opacity=0);padding:150px 10px;width:100%;box-sizing:border-box}.gjs-am-file-uploader #gjs-am-title{position:absolute;padding:150px 10px;width:100%}.gjs-cm-editor-c{float:left;box-sizing:border-box;width:50%}.gjs-cm-editor-c .CodeMirror{height:450px}.gjs-cm-editor{font-size:12px}.gjs-cm-editor#gjs-cm-htmlmixed{padding-right:10px;border-right:1px solid rgba(0,0,0,0.2)}.gjs-cm-editor#gjs-cm-htmlmixed #gjs-cm-title{color:#a97d44}.gjs-cm-editor#gjs-cm-css{padding-left:10px}.gjs-cm-editor#gjs-cm-css #gjs-cm-title{color:#ddca7e}.gjs-cm-editor #gjs-cm-title{background-color:rgba(0,0,0,0.2);font-size:12px;padding:5px 10px 3px;text-align:right}.gjs-rte-toolbar{border:1px solid rgba(0,0,0,0.2);position:absolute;border-radius:3px;z-index:10}.gjs-rte-actionbar{display:flex}.gjs-rte-action{display:flex;align-items:center;justify-content:center;padding:5px;min-width:25px;border-right:1px solid rgba(0,0,0,0.2);text-align:center;cursor:pointer;outline:none}.gjs-rte-action:last-child{border-right:none}.gjs-rte-action:hover{background-color:rgba(255,255,255,0.1)}.gjs-rte-active{background-color:rgba(0,0,0,0.2)}.gjs-editor-cont .sp-hue,.gjs-editor-cont .sp-slider{cursor:row-resize}.gjs-editor-cont .sp-color,.gjs-editor-cont .sp-dragger{cursor:crosshair}.gjs-editor-cont .sp-alpha-inner,.gjs-editor-cont .sp-alpha-handle{cursor:col-resize}.gjs-editor-cont .sp-hue{left:90%}.gjs-editor-cont .sp-color{right:15%}.gjs-editor-cont .sp-container{border:1px solid rgba(0,0,0,0.2);box-shadow:0 0 7px rgba(0,0,0,0.2);border-radius:3px}.gjs-editor-cont .sp-picker-container{border:none}.gjs-editor-cont .colpick_dark .colpick_color{outline:1px solid rgba(0,0,0,0.2)}.gjs-editor-cont .sp-cancel,.gjs-editor-cont .sp-cancel:hover{bottom:-8px;color:#777 !important;font-size:25px;left:0;position:absolute;text-decoration:none}.gjs-editor-cont .sp-alpha-handle{background-color:#ccc;border:1px solid #555;width:4px}.gjs-editor-cont .sp-color,.gjs-editor-cont .sp-hue{border:1px solid #333333}.gjs-editor-cont .sp-slider{background-color:#ccc;border:1px solid #555;height:3px;left:-4px;width:22px}.gjs-editor-cont .sp-dragger{background:transparent;box-shadow:0 0 0 1px #111}.gjs-editor-cont .sp-button-container{float:none;width:100%;position:relative;text-align:right}.gjs-editor-cont .sp-container button,.gjs-editor-cont .sp-container button:hover,.gjs-editor-cont .sp-container button:active{background:rgba(0,0,0,0.2);border-color:rgba(0,0,0,0.2);color:#ddd;text-shadow:none;box-shadow:none;padding:3px 5px}.gjs-editor-cont .sp-palette-container{border:none;float:none;margin:0;padding:5px 10px 0}.gjs-editor-cont .sp-palette .sp-thumb-el,.gjs-editor-cont .sp-palette .sp-thumb-el:hover{border:1px solid rgba(0,0,0,0.9)}.gjs-editor-cont .sp-palette .sp-thumb-el:hover,.gjs-editor-cont .sp-palette .sp-thumb-el.sp-thumb-active{border-color:rgba(0,0,0,0.9)}.gjs-hidden{display:none}@keyframes gjs-slide-down{0%{transform:translate(0, -3rem);opacity:0}100%{transform:translate(0, 0);opacity:1}}@keyframes gjs-slide-up{0%{transform:translate(0, 0);opacity:1}100%{transform:translate(0, -3rem);opacity:0}}.cm-s-hopscotch span.cm-error{color:#ffffff} diff --git a/public/grapejs/dist/css/grapesjs-mjml.css b/public/grapejs/dist/css/grapesjs-mjml.css deleted file mode 100644 index 206d8d50..00000000 --- a/public/grapejs/dist/css/grapesjs-mjml.css +++ /dev/null @@ -1,248 +0,0 @@ -.gjs-clm-tags .gjs-sm-title, -.gjs-sm-sector .gjs-sm-title { - border-top: none; -} - -.gjs-clm-tags .gjs-clm-tag { - /* background-color: $tag-color; */ - border: none; - box-shadow: none; - padding: 5px 8px; - text-shadow: none; -} - -.gjs-field { - background-color: rgba(0, 0, 0, 0.15); - box-shadow: none; -} - -.gjs-btnt.gjs-pn-active, -.gjs-pn-btn.gjs-pn-active { - box-shadow: none; -} - -.gjs-pn-btn:hover { - color: rgba(255, 255, 255, 0.75); -} - -.gjs-btnt.gjs-pn-active, -.gjs-color-active, -.gjs-pn-btn.gjs-pn-active, -.gjs-pn-btn:active, -.gjs-block:hover { - color: #f45e43; /* #f46d4c,#e4505d */ -} - -#gjs-rte-toolbar .gjs-rte-btn, -.gjs-btn-prim, -.gjs-btnt, -.gjs-clm-tags .gjs-sm-composite.gjs-clm-field, -.gjs-clm-tags .gjs-sm-field.gjs-sm-composite, -.gjs-clm-tags .gjs-sm-stack #gjs-sm-add, -.gjs-color-main, -.gjs-mdl-dialog, -.gjs-off-prv, -.gjs-pn-btn, -.gjs-pn-panel, -.gjs-sm-sector .gjs-sm-composite.gjs-clm-field, -.gjs-sm-sector .gjs-sm-field.gjs-sm-composite, -.gjs-sm-sector .gjs-sm-stack #gjs-sm-add { - color: #888686; -} - -#gjs-rte-toolbar, -.gjs-bg-main, -.gjs-clm-select option, -.gjs-clm-tags .gjs-sm-colorp-c, -.gjs-editor, -.gjs-mdl-dialog, -.gjs-nv-item .gjs-nv-title-c, -.gjs-off-prv, -.gjs-pn-panel, -.gjs-select option, -.gjs-sm-sector .gjs-sm-colorp-c, -.gjs-sm-select option, -.gjs-sm-unit option, -.sp-container, -.gjs-block { - background-color: #2c2e35; -} - -.gjs-import-label, -.gjs-export-label { - margin-bottom: 10px; - font-size: 13px; -} - -.gjs-mdl-dialog .gjs-btn-import { - margin-top: 10px; -} - -.CodeMirror { - border-radius: 3px; - height: 450px; - font-family: sans-serif, monospace; - letter-spacing: 0.3px; - font-size: 12px; -} - -/* Extra */ - -.gjs-block { - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 3px; - margin: 10px 2.5% 5px; - box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.15); - transition: box-shadow 0.2s ease 0s; -} - -.gjs-block:hover { - box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.15); -} - -#gjs-pn-views-container.gjs-pn-panel { - padding: 39px 0 0; -} - -#gjs-pn-views.gjs-pn-panel { - padding: 0; - border: none; -} - -#gjs-pn-views .gjs-pn-btn { - margin: 0; - height: 40px; - padding: 10px; - width: 25%; - border-bottom: 2px solid rgba(0, 0, 0, 0.3); -} - -#gjs-pn-views .gjs-pn-active { - /* - color: rgba(255, 255, 255, 0.9); - border-bottom: 2px solid #f45e43; - */ - border-radius: 0; -} - -#gjs-pn-devices-c { - padding-left: 30px; -} - -#gjs-pn-options { - padding-right: 30px; -} - -.gjs-sm-composite .gjs-sm-properties { - display: flex; - flex-flow: row wrap; - justify-content: space-between; -} - -#gjs-sm-border-top-left-radius, -#gjs-sm-border-top-right-radius, -#gjs-sm-border-bottom-left-radius, -#gjs-sm-border-bottom-right-radius, -#gjs-sm-margin-top, -#gjs-sm-margin-bottom, -#gjs-sm-margin-right, -#gjs-sm-margin-left, -#gjs-sm-padding-top, -#gjs-sm-padding-bottom, -#gjs-sm-padding-right, -#gjs-sm-padding-left { - flex: 999 1 60px; -} - -#gjs-sm-border-width, -#gjs-sm-border-style, -#gjs-sm-border-color { - flex: 999 1 80px; -} - -#gjs-sm-margin-left, -#gjs-sm-padding-left { - order: 2; -} - -#gjs-sm-margin-right, -#gjs-sm-padding-right { - order: 3; -} - -#gjs-sm-margin-bottom, -#gjs-sm-padding-bottom { - order: 4; -} - -.gjs-field-radio { - width: 100%; -} - -.gjs-field-radio #gjs-sm-input-holder { - display: flex; -} - -.gjs-radio-item { - flex: 1 0 auto; - text-align: center; -} - -.gjs-sm-sector .gjs-sm-property.gjs-sm-list { - width: 50%; -} - -.gjs-mdl-content { - border-top: none; -} - -.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-active { - background-color: rgba(255, 255, 255, 0.09); -} - -/* - -#gjs-pn-views-container, -#gjs-pn-views{ - min-width: 270px; -} -*/ - -.gjs-f-button::before { content: 'B'; } -.gjs-f-divider::before { content: 'D'; } - -.gjs-mdl-dialog-sm { - width: 300px; -} - -.gjs-mdl-dialog form .gjs-sm-property { - font-size: 12px; - margin-bottom: 15px; -} - -.gjs-mdl-dialog form .gjs-sm-label { - margin-bottom: 5px; -} - -.anim-spin { - animation: 0.5s linear 0s normal none infinite running spin; -} - -.form-status { - float: right; - font-size: 14px; -} - -.text-danger { - color: #f92929; -} - -@keyframes spin { - 0% { - transform: rotate(0deg); - } - - 100% { - transform: rotate(360deg); - } -} diff --git a/public/grapejs/dist/css/grapesjs-preset-newsletter.css b/public/grapejs/dist/css/grapesjs-preset-newsletter.css deleted file mode 100644 index 13f90f64..00000000 --- a/public/grapejs/dist/css/grapesjs-preset-newsletter.css +++ /dev/null @@ -1,211 +0,0 @@ -/* #008f73 #4c9790 */ -.gjs-clm-tags .gjs-sm-title, -.gjs-sm-sector .gjs-sm-title { - border-top: none; } - -.gjs-clm-tags .gjs-clm-tag { - background-color: #4c9790; - border: none; - box-shadow: none; - padding: 5px 8px; - text-shadow: none; } - -.gjs-field { - background-color: rgba(0, 0, 0, 0.15); - box-shadow: none; } - -.gjs-btnt.gjs-pn-active, -.gjs-pn-btn.gjs-pn-active { - box-shadow: none; } - -.gjs-pn-btn:hover { - color: rgba(255, 255, 255, 0.75); } - -.gjs-btnt.gjs-pn-active, -.gjs-color-active, -.gjs-pn-btn.gjs-pn-active, -.gjs-pn-btn:active, -.gjs-block:hover { - color: #35d7bb; } - -#gjs-rte-toolbar .gjs-rte-btn, -.gjs-btn-prim, -.gjs-btnt, -.gjs-clm-tags .gjs-sm-composite.gjs-clm-field, -.gjs-clm-tags .gjs-sm-field.gjs-sm-composite, -.gjs-clm-tags .gjs-sm-stack #gjs-sm-add, -.gjs-color-main, -.gjs-mdl-dialog, -.gjs-off-prv, -.gjs-pn-btn, -.gjs-pn-panel, -.gjs-sm-sector .gjs-sm-composite.gjs-clm-field, -.gjs-sm-sector .gjs-sm-field.gjs-sm-composite, -.gjs-sm-sector .gjs-sm-stack #gjs-sm-add { - color: #a0aabf; - /* #a0aabf #d0d6e2 */ } - -#gjs-rte-toolbar, -.gjs-bg-main, -.gjs-clm-select option, -.gjs-clm-tags .gjs-sm-colorp-c, -.gjs-editor, -.gjs-mdl-dialog, -.gjs-nv-item .gjs-nv-title-c, -.gjs-off-prv, -.gjs-pn-panel, -.gjs-block, -.gjs-select option, -.gjs-sm-sector .gjs-sm-colorp-c, -.gjs-sm-select option, -.gjs-sm-unit option, -.sp-container { - background-color: #373d49; } - -.gjs-import-label, -.gjs-export-label { - margin-bottom: 10px; - font-size: 13px; } - -.gjs-mdl-dialog .gjs-btn-import { - margin-top: 10px; } - -.CodeMirror { - border-radius: 3px; - height: 450px; - font-family: sans-serif, monospace; - letter-spacing: 0.3px; - font-size: 12px; } - -/* Extra */ -.gjs-block { - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 3px; - margin: 10px 2.5% 5px; - box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.15); - transition: box-shadow, color 0.2s ease 0s; } - -.gjs-block:hover { - box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.15); } - -#gjs-pn-views-container.gjs-pn-panel { - padding: 39px 0 0; } - -#gjs-pn-views.gjs-pn-panel { - padding: 0; - border: none; } - -#gjs-pn-views .gjs-pn-btn { - margin: 0; - height: 40px; - padding: 10px; - width: 25%; - border-bottom: 2px solid rgba(0, 0, 0, 0.3); } - -#gjs-pn-views .gjs-pn-active { - color: rgba(255, 255, 255, 0.9); - border-bottom: 2px solid #35d7bb; - border-radius: 0; } - -#gjs-pn-devices-c { - padding-left: 30px; } - -#gjs-pn-options { - padding-right: 30px; } - -.gjs-sm-composite .gjs-sm-properties { - display: flex; - flex-flow: row wrap; - justify-content: space-between; } - -#gjs-sm-border-top-left-radius, -#gjs-sm-border-top-right-radius, -#gjs-sm-border-bottom-left-radius, -#gjs-sm-border-bottom-right-radius, -#gjs-sm-margin-top, -#gjs-sm-margin-bottom, -#gjs-sm-margin-right, -#gjs-sm-margin-left, -#gjs-sm-padding-top, -#gjs-sm-padding-bottom, -#gjs-sm-padding-right, -#gjs-sm-padding-left { - flex: 999 1 60px; } - -#gjs-sm-border-width, -#gjs-sm-border-style, -#gjs-sm-border-color { - flex: 999 1 80px; } - -#gjs-sm-margin-left, -#gjs-sm-padding-left { - order: 2; } - -#gjs-sm-margin-right, -#gjs-sm-padding-right { - order: 3; } - -#gjs-sm-margin-bottom, -#gjs-sm-padding-bottom { - order: 4; } - -.gjs-field-radio { - width: 100%; } - -.gjs-field-radio #gjs-sm-input-holder { - display: flex; } - -.gjs-radio-item { - flex: 1 0 auto; - text-align: center; } - -.gjs-sm-sector .gjs-sm-property.gjs-sm-list { - width: 50%; } - -.gjs-mdl-content { - border-top: none; } - -.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-active { - background-color: rgba(255, 255, 255, 0.09); } - -/* - -#gjs-pn-views-container, -#gjs-pn-views{ - min-width: 270px; -} -*/ -.gjs-f-button::before { - content: 'B'; } - -.gjs-f-divider::before { - content: 'D'; } - -.gjs-mdl-dialog-sm { - width: 300px; } - -.gjs-mdl-dialog form .gjs-sm-property { - font-size: 12px; - margin-bottom: 15px; } - -.gjs-mdl-dialog form .gjs-sm-label { - margin-bottom: 5px; } - -#gjs-clm-status-c { - display: none; } - -.anim-spin { - animation: 0.5s linear 0s normal none infinite running spin; } - -.form-status { - float: right; - font-size: 14px; } - -.text-danger { - color: #f92929; } - -@keyframes spin { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } diff --git a/public/grapejs/dist/js/grapes.js b/public/grapejs/dist/js/grapes.js new file mode 100644 index 00000000..b1936d2e --- /dev/null +++ b/public/grapejs/dist/js/grapes.js @@ -0,0 +1,51285 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["grapesjs"] = factory(); + else + root["grapesjs"] = factory(); +})(typeof self !== 'undefined' ? self : this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 60); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Backbone.js 1.3.3 + +// (c) 2010-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Backbone may be freely distributed under the MIT license. +// For all details and documentation: +// http://backbonejs.org + +(function(factory) { + + // Establish the root object, `window` (`self`) in the browser, or `global` on the server. + // We use `self` instead of `window` for `WebWorker` support. + var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global); + + // Set up Backbone appropriately for the environment. Start with AMD. + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1), __webpack_require__(10), exports], __WEBPACK_AMD_DEFINE_RESULT__ = (function(_, $, exports) { + // Export global even in AMD case in case this script is loaded with + // others that may still expect a global Backbone. + root.Backbone = factory(root, exports, _, $); + }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + + // Next for Node.js or CommonJS. jQuery may not be needed as a module. + } else if (typeof exports !== 'undefined') { + var _ = require('underscore'), $; + try { $ = require('jquery'); } catch (e) {} + factory(root, exports, _, $); + + // Finally, as a browser global. + } else { + root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$)); + } + +})(function(root, Backbone, _, $) { + + // Initial Setup + // ------------- + + // Save the previous value of the `Backbone` variable, so that it can be + // restored later on, if `noConflict` is used. + var previousBackbone = root.Backbone; + + // Create a local reference to a common array method we'll want to use later. + var slice = Array.prototype.slice; + + // Current version of the library. Keep in sync with `package.json`. + Backbone.VERSION = '1.3.3'; + + // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns + // the `$` variable. + Backbone.$ = $; + + // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable + // to its previous owner. Returns a reference to this Backbone object. + Backbone.noConflict = function() { + root.Backbone = previousBackbone; + return this; + }; + + // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option + // will fake `"PATCH"`, `"PUT"` and `"DELETE"` requests via the `_method` parameter and + // set a `X-Http-Method-Override` header. + Backbone.emulateHTTP = false; + + // Turn on `emulateJSON` to support legacy servers that can't deal with direct + // `application/json` requests ... this will encode the body as + // `application/x-www-form-urlencoded` instead and will send the model in a + // form param named `model`. + Backbone.emulateJSON = false; + + // Proxy Backbone class methods to Underscore functions, wrapping the model's + // `attributes` object or collection's `models` array behind the scenes. + // + // collection.filter(function(model) { return model.get('age') > 10 }); + // collection.each(this.addView); + // + // `Function#apply` can be slow so we use the method's arg count, if we know it. + var addMethod = function(length, method, attribute) { + switch (length) { + case 1: return function() { + return _[method](this[attribute]); + }; + case 2: return function(value) { + return _[method](this[attribute], value); + }; + case 3: return function(iteratee, context) { + return _[method](this[attribute], cb(iteratee, this), context); + }; + case 4: return function(iteratee, defaultVal, context) { + return _[method](this[attribute], cb(iteratee, this), defaultVal, context); + }; + default: return function() { + var args = slice.call(arguments); + args.unshift(this[attribute]); + return _[method].apply(_, args); + }; + } + }; + var addUnderscoreMethods = function(Class, methods, attribute) { + _.each(methods, function(length, method) { + if (_[method]) Class.prototype[method] = addMethod(length, method, attribute); + }); + }; + + // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`. + var cb = function(iteratee, instance) { + if (_.isFunction(iteratee)) return iteratee; + if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee); + if (_.isString(iteratee)) return function(model) { return model.get(iteratee); }; + return iteratee; + }; + var modelMatcher = function(attrs) { + var matcher = _.matches(attrs); + return function(model) { + return matcher(model.attributes); + }; + }; + + // Backbone.Events + // --------------- + + // A module that can be mixed in to *any object* in order to provide it with + // a custom event channel. You may bind a callback to an event with `on` or + // remove with `off`; `trigger`-ing an event fires all callbacks in + // succession. + // + // var object = {}; + // _.extend(object, Backbone.Events); + // object.on('expand', function(){ alert('expanded'); }); + // object.trigger('expand'); + // + var Events = Backbone.Events = {}; + + // Regular expression used to split event strings. + var eventSplitter = /\s+/; + + // Iterates over the standard `event, callback` (as well as the fancy multiple + // space-separated events `"change blur", callback` and jQuery-style event + // maps `{event: callback}`). + var eventsApi = function(iteratee, events, name, callback, opts) { + var i = 0, names; + if (name && typeof name === 'object') { + // Handle event maps. + if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback; + for (names = _.keys(name); i < names.length ; i++) { + events = eventsApi(iteratee, events, names[i], name[names[i]], opts); + } + } else if (name && eventSplitter.test(name)) { + // Handle space-separated event names by delegating them individually. + for (names = name.split(eventSplitter); i < names.length; i++) { + events = iteratee(events, names[i], callback, opts); + } + } else { + // Finally, standard events. + events = iteratee(events, name, callback, opts); + } + return events; + }; + + // Bind an event to a `callback` function. Passing `"all"` will bind + // the callback to all events fired. + Events.on = function(name, callback, context) { + return internalOn(this, name, callback, context); + }; + + // Guard the `listening` argument from the public API. + var internalOn = function(obj, name, callback, context, listening) { + obj._events = eventsApi(onApi, obj._events || {}, name, callback, { + context: context, + ctx: obj, + listening: listening + }); + + if (listening) { + var listeners = obj._listeners || (obj._listeners = {}); + listeners[listening.id] = listening; + } + + return obj; + }; + + // Inversion-of-control versions of `on`. Tell *this* object to listen to + // an event in another object... keeping track of what it's listening to + // for easier unbinding later. + Events.listenTo = function(obj, name, callback) { + if (!obj) return this; + var id = obj._listenId || (obj._listenId = _.uniqueId('l')); + var listeningTo = this._listeningTo || (this._listeningTo = {}); + var listening = listeningTo[id]; + + // This object is not listening to any other events on `obj` yet. + // Setup the necessary references to track the listening callbacks. + if (!listening) { + var thisId = this._listenId || (this._listenId = _.uniqueId('l')); + listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0}; + } + + // Bind callbacks on obj, and keep track of them on listening. + internalOn(obj, name, callback, this, listening); + return this; + }; + + // The reducing API that adds a callback to the `events` object. + var onApi = function(events, name, callback, options) { + if (callback) { + var handlers = events[name] || (events[name] = []); + var context = options.context, ctx = options.ctx, listening = options.listening; + if (listening) listening.count++; + + handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening}); + } + return events; + }; + + // Remove one or many callbacks. If `context` is null, removes all + // callbacks with that function. If `callback` is null, removes all + // callbacks for the event. If `name` is null, removes all bound + // callbacks for all events. + Events.off = function(name, callback, context) { + if (!this._events) return this; + this._events = eventsApi(offApi, this._events, name, callback, { + context: context, + listeners: this._listeners + }); + return this; + }; + + // Tell this object to stop listening to either specific events ... or + // to every object it's currently listening to. + Events.stopListening = function(obj, name, callback) { + var listeningTo = this._listeningTo; + if (!listeningTo) return this; + + var ids = obj ? [obj._listenId] : _.keys(listeningTo); + + for (var i = 0; i < ids.length; i++) { + var listening = listeningTo[ids[i]]; + + // If listening doesn't exist, this object is not currently + // listening to obj. Break out early. + if (!listening) break; + + listening.obj.off(name, callback, this); + } + + return this; + }; + + // The reducing API that removes a callback from the `events` object. + var offApi = function(events, name, callback, options) { + if (!events) return; + + var i = 0, listening; + var context = options.context, listeners = options.listeners; + + // Delete all events listeners and "drop" events. + if (!name && !callback && !context) { + var ids = _.keys(listeners); + for (; i < ids.length; i++) { + listening = listeners[ids[i]]; + delete listeners[listening.id]; + delete listening.listeningTo[listening.objId]; + } + return; + } + + var names = name ? [name] : _.keys(events); + for (; i < names.length; i++) { + name = names[i]; + var handlers = events[name]; + + // Bail out if there are no events stored. + if (!handlers) break; + + // Replace events if there are any remaining. Otherwise, clean up. + var remaining = []; + for (var j = 0; j < handlers.length; j++) { + var handler = handlers[j]; + if ( + callback && callback !== handler.callback && + callback !== handler.callback._callback || + context && context !== handler.context + ) { + remaining.push(handler); + } else { + listening = handler.listening; + if (listening && --listening.count === 0) { + delete listeners[listening.id]; + delete listening.listeningTo[listening.objId]; + } + } + } + + // Update tail event if the list has any events. Otherwise, clean up. + if (remaining.length) { + events[name] = remaining; + } else { + delete events[name]; + } + } + return events; + }; + + // Bind an event to only be triggered a single time. After the first time + // the callback is invoked, its listener will be removed. If multiple events + // are passed in using the space-separated syntax, the handler will fire + // once for each event, not once for a combination of all events. + Events.once = function(name, callback, context) { + // Map the event into a `{event: once}` object. + var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this)); + if (typeof name === 'string' && context == null) callback = void 0; + return this.on(events, callback, context); + }; + + // Inversion-of-control versions of `once`. + Events.listenToOnce = function(obj, name, callback) { + // Map the event into a `{event: once}` object. + var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj)); + return this.listenTo(obj, events); + }; + + // Reduces the event callbacks into a map of `{event: onceWrapper}`. + // `offer` unbinds the `onceWrapper` after it has been called. + var onceMap = function(map, name, callback, offer) { + if (callback) { + var once = map[name] = _.once(function() { + offer(name, once); + callback.apply(this, arguments); + }); + once._callback = callback; + } + return map; + }; + + // Trigger one or many events, firing all bound callbacks. Callbacks are + // passed the same arguments as `trigger` is, apart from the event name + // (unless you're listening on `"all"`, which will cause your callback to + // receive the true name of the event as the first argument). + Events.trigger = function(name) { + if (!this._events) return this; + + var length = Math.max(0, arguments.length - 1); + var args = Array(length); + for (var i = 0; i < length; i++) args[i] = arguments[i + 1]; + + eventsApi(triggerApi, this._events, name, void 0, args); + return this; + }; + + // Handles triggering the appropriate event callbacks. + var triggerApi = function(objEvents, name, callback, args) { + if (objEvents) { + var events = objEvents[name]; + var allEvents = objEvents.all; + if (events && allEvents) allEvents = allEvents.slice(); + if (events) triggerEvents(events, args); + if (allEvents) triggerEvents(allEvents, [name].concat(args)); + } + return objEvents; + }; + + // A difficult-to-believe, but optimized internal dispatch function for + // triggering events. Tries to keep the usual cases speedy (most internal + // Backbone events have 3 arguments). + var triggerEvents = function(events, args) { + var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2]; + switch (args.length) { + case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return; + case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return; + case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return; + case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return; + default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return; + } + }; + + // Aliases for backwards compatibility. + Events.bind = Events.on; + Events.unbind = Events.off; + + // Allow the `Backbone` object to serve as a global event bus, for folks who + // want global "pubsub" in a convenient place. + _.extend(Backbone, Events); + + // Backbone.Model + // -------------- + + // Backbone **Models** are the basic data object in the framework -- + // frequently representing a row in a table in a database on your server. + // A discrete chunk of data and a bunch of useful, related methods for + // performing computations and transformations on that data. + + // Create a new model with the specified attributes. A client id (`cid`) + // is automatically generated and assigned for you. + var Model = Backbone.Model = function(attributes, options) { + var attrs = attributes || {}; + options || (options = {}); + this.cid = _.uniqueId(this.cidPrefix); + this.attributes = {}; + if (options.collection) this.collection = options.collection; + if (options.parse) attrs = this.parse(attrs, options) || {}; + var defaults = _.result(this, 'defaults'); + attrs = _.defaults(_.extend({}, defaults, attrs), defaults); + this.set(attrs, options); + this.changed = {}; + this.initialize.apply(this, arguments); + }; + + // Attach all inheritable methods to the Model prototype. + _.extend(Model.prototype, Events, { + + // A hash of attributes whose current and previous value differ. + changed: null, + + // The value returned during the last failed validation. + validationError: null, + + // The default name for the JSON `id` attribute is `"id"`. MongoDB and + // CouchDB users may want to set this to `"_id"`. + idAttribute: 'id', + + // The prefix is used to create the client id which is used to identify models locally. + // You may want to override this if you're experiencing name clashes with model ids. + cidPrefix: 'c', + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // Return a copy of the model's `attributes` object. + toJSON: function(options) { + return _.clone(this.attributes); + }, + + // Proxy `Backbone.sync` by default -- but override this if you need + // custom syncing semantics for *this* particular model. + sync: function() { + return Backbone.sync.apply(this, arguments); + }, + + // Get the value of an attribute. + get: function(attr) { + return this.attributes[attr]; + }, + + // Get the HTML-escaped value of an attribute. + escape: function(attr) { + return _.escape(this.get(attr)); + }, + + // Returns `true` if the attribute contains a value that is not null + // or undefined. + has: function(attr) { + return this.get(attr) != null; + }, + + // Special-cased proxy to underscore's `_.matches` method. + matches: function(attrs) { + return !!_.iteratee(attrs, this)(this.attributes); + }, + + // Set a hash of model attributes on the object, firing `"change"`. This is + // the core primitive operation of a model, updating the data and notifying + // anyone who needs to know about the change in state. The heart of the beast. + set: function(key, val, options) { + if (key == null) return this; + + // Handle both `"key", value` and `{key: value}` -style arguments. + var attrs; + if (typeof key === 'object') { + attrs = key; + options = val; + } else { + (attrs = {})[key] = val; + } + + options || (options = {}); + + // Run validation. + if (!this._validate(attrs, options)) return false; + + // Extract attributes and options. + var unset = options.unset; + var silent = options.silent; + var changes = []; + var changing = this._changing; + this._changing = true; + + if (!changing) { + this._previousAttributes = _.clone(this.attributes); + this.changed = {}; + } + + var current = this.attributes; + var changed = this.changed; + var prev = this._previousAttributes; + + // For each `set` attribute, update or delete the current value. + for (var attr in attrs) { + val = attrs[attr]; + if (!_.isEqual(current[attr], val)) changes.push(attr); + if (!_.isEqual(prev[attr], val)) { + changed[attr] = val; + } else { + delete changed[attr]; + } + unset ? delete current[attr] : current[attr] = val; + } + + // Update the `id`. + if (this.idAttribute in attrs) this.id = this.get(this.idAttribute); + + // Trigger all relevant attribute changes. + if (!silent) { + if (changes.length) this._pending = options; + for (var i = 0; i < changes.length; i++) { + this.trigger('change:' + changes[i], this, current[changes[i]], options); + } + } + + // You might be wondering why there's a `while` loop here. Changes can + // be recursively nested within `"change"` events. + if (changing) return this; + if (!silent) { + while (this._pending) { + options = this._pending; + this._pending = false; + this.trigger('change', this, options); + } + } + this._pending = false; + this._changing = false; + return this; + }, + + // Remove an attribute from the model, firing `"change"`. `unset` is a noop + // if the attribute doesn't exist. + unset: function(attr, options) { + return this.set(attr, void 0, _.extend({}, options, {unset: true})); + }, + + // Clear all attributes on the model, firing `"change"`. + clear: function(options) { + var attrs = {}; + for (var key in this.attributes) attrs[key] = void 0; + return this.set(attrs, _.extend({}, options, {unset: true})); + }, + + // Determine if the model has changed since the last `"change"` event. + // If you specify an attribute name, determine if that attribute has changed. + hasChanged: function(attr) { + if (attr == null) return !_.isEmpty(this.changed); + return _.has(this.changed, attr); + }, + + // Return an object containing all the attributes that have changed, or + // false if there are no changed attributes. Useful for determining what + // parts of a view need to be updated and/or what attributes need to be + // persisted to the server. Unset attributes will be set to undefined. + // You can also pass an attributes object to diff against the model, + // determining if there *would be* a change. + changedAttributes: function(diff) { + if (!diff) return this.hasChanged() ? _.clone(this.changed) : false; + var old = this._changing ? this._previousAttributes : this.attributes; + var changed = {}; + for (var attr in diff) { + var val = diff[attr]; + if (_.isEqual(old[attr], val)) continue; + changed[attr] = val; + } + return _.size(changed) ? changed : false; + }, + + // Get the previous value of an attribute, recorded at the time the last + // `"change"` event was fired. + previous: function(attr) { + if (attr == null || !this._previousAttributes) return null; + return this._previousAttributes[attr]; + }, + + // Get all of the attributes of the model at the time of the previous + // `"change"` event. + previousAttributes: function() { + return _.clone(this._previousAttributes); + }, + + // Fetch the model from the server, merging the response with the model's + // local attributes. Any changed attributes will trigger a "change" event. + fetch: function(options) { + options = _.extend({parse: true}, options); + var model = this; + var success = options.success; + options.success = function(resp) { + var serverAttrs = options.parse ? model.parse(resp, options) : resp; + if (!model.set(serverAttrs, options)) return false; + if (success) success.call(options.context, model, resp, options); + model.trigger('sync', model, resp, options); + }; + wrapError(this, options); + return this.sync('read', this, options); + }, + + // Set a hash of model attributes, and sync the model to the server. + // If the server returns an attributes hash that differs, the model's + // state will be `set` again. + save: function(key, val, options) { + // Handle both `"key", value` and `{key: value}` -style arguments. + var attrs; + if (key == null || typeof key === 'object') { + attrs = key; + options = val; + } else { + (attrs = {})[key] = val; + } + + options = _.extend({validate: true, parse: true}, options); + var wait = options.wait; + + // If we're not waiting and attributes exist, save acts as + // `set(attr).save(null, opts)` with validation. Otherwise, check if + // the model will be valid when the attributes, if any, are set. + if (attrs && !wait) { + if (!this.set(attrs, options)) return false; + } else if (!this._validate(attrs, options)) { + return false; + } + + // After a successful server-side save, the client is (optionally) + // updated with the server-side state. + var model = this; + var success = options.success; + var attributes = this.attributes; + options.success = function(resp) { + // Ensure attributes are restored during synchronous saves. + model.attributes = attributes; + var serverAttrs = options.parse ? model.parse(resp, options) : resp; + if (wait) serverAttrs = _.extend({}, attrs, serverAttrs); + if (serverAttrs && !model.set(serverAttrs, options)) return false; + if (success) success.call(options.context, model, resp, options); + model.trigger('sync', model, resp, options); + }; + wrapError(this, options); + + // Set temporary attributes if `{wait: true}` to properly find new ids. + if (attrs && wait) this.attributes = _.extend({}, attributes, attrs); + + var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update'); + if (method === 'patch' && !options.attrs) options.attrs = attrs; + var xhr = this.sync(method, this, options); + + // Restore attributes. + this.attributes = attributes; + + return xhr; + }, + + // Destroy this model on the server if it was already persisted. + // Optimistically removes the model from its collection, if it has one. + // If `wait: true` is passed, waits for the server to respond before removal. + destroy: function(options) { + options = options ? _.clone(options) : {}; + var model = this; + var success = options.success; + var wait = options.wait; + + var destroy = function() { + model.stopListening(); + model.trigger('destroy', model, model.collection, options); + }; + + options.success = function(resp) { + if (wait) destroy(); + if (success) success.call(options.context, model, resp, options); + if (!model.isNew()) model.trigger('sync', model, resp, options); + }; + + var xhr = false; + if (this.isNew()) { + _.defer(options.success); + } else { + wrapError(this, options); + xhr = this.sync('delete', this, options); + } + if (!wait) destroy(); + return xhr; + }, + + // Default URL for the model's representation on the server -- if you're + // using Backbone's restful methods, override this to change the endpoint + // that will be called. + url: function() { + var base = + _.result(this, 'urlRoot') || + _.result(this.collection, 'url') || + urlError(); + if (this.isNew()) return base; + var id = this.get(this.idAttribute); + return base.replace(/[^\/]$/, '$&/') + encodeURIComponent(id); + }, + + // **parse** converts a response into the hash of attributes to be `set` on + // the model. The default implementation is just to pass the response along. + parse: function(resp, options) { + return resp; + }, + + // Create a new model with identical attributes to this one. + clone: function() { + return new this.constructor(this.attributes); + }, + + // A model is new if it has never been saved to the server, and lacks an id. + isNew: function() { + return !this.has(this.idAttribute); + }, + + // Check if the model is currently in a valid state. + isValid: function(options) { + return this._validate({}, _.extend({}, options, {validate: true})); + }, + + // Run validation against the next complete set of model attributes, + // returning `true` if all is well. Otherwise, fire an `"invalid"` event. + _validate: function(attrs, options) { + if (!options.validate || !this.validate) return true; + attrs = _.extend({}, this.attributes, attrs); + var error = this.validationError = this.validate(attrs, options) || null; + if (!error) return true; + this.trigger('invalid', this, error, _.extend(options, {validationError: error})); + return false; + } + + }); + + // Underscore methods that we want to implement on the Model, mapped to the + // number of arguments they take. + var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0, + omit: 0, chain: 1, isEmpty: 1}; + + // Mix in each Underscore method as a proxy to `Model#attributes`. + addUnderscoreMethods(Model, modelMethods, 'attributes'); + + // Backbone.Collection + // ------------------- + + // If models tend to represent a single row of data, a Backbone Collection is + // more analogous to a table full of data ... or a small slice or page of that + // table, or a collection of rows that belong together for a particular reason + // -- all of the messages in this particular folder, all of the documents + // belonging to this particular author, and so on. Collections maintain + // indexes of their models, both in order, and for lookup by `id`. + + // Create a new **Collection**, perhaps to contain a specific type of `model`. + // If a `comparator` is specified, the Collection will maintain + // its models in sort order, as they're added and removed. + var Collection = Backbone.Collection = function(models, options) { + options || (options = {}); + if (options.model) this.model = options.model; + if (options.comparator !== void 0) this.comparator = options.comparator; + this._reset(); + this.initialize.apply(this, arguments); + if (models) this.reset(models, _.extend({silent: true}, options)); + }; + + // Default options for `Collection#set`. + var setOptions = {add: true, remove: true, merge: true}; + var addOptions = {add: true, remove: false}; + + // Splices `insert` into `array` at index `at`. + var splice = function(array, insert, at) { + at = Math.min(Math.max(at, 0), array.length); + var tail = Array(array.length - at); + var length = insert.length; + var i; + for (i = 0; i < tail.length; i++) tail[i] = array[i + at]; + for (i = 0; i < length; i++) array[i + at] = insert[i]; + for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i]; + }; + + // Define the Collection's inheritable methods. + _.extend(Collection.prototype, Events, { + + // The default model for a collection is just a **Backbone.Model**. + // This should be overridden in most cases. + model: Model, + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // The JSON representation of a Collection is an array of the + // models' attributes. + toJSON: function(options) { + return this.map(function(model) { return model.toJSON(options); }); + }, + + // Proxy `Backbone.sync` by default. + sync: function() { + return Backbone.sync.apply(this, arguments); + }, + + // Add a model, or list of models to the set. `models` may be Backbone + // Models or raw JavaScript objects to be converted to Models, or any + // combination of the two. + add: function(models, options) { + return this.set(models, _.extend({merge: false}, options, addOptions)); + }, + + // Remove a model, or a list of models from the set. + remove: function(models, options) { + options = _.extend({}, options); + var singular = !_.isArray(models); + models = singular ? [models] : models.slice(); + var removed = this._removeModels(models, options); + if (!options.silent && removed.length) { + options.changes = {added: [], merged: [], removed: removed}; + this.trigger('update', this, options); + } + return singular ? removed[0] : removed; + }, + + // Update a collection by `set`-ing a new list of models, adding new ones, + // removing models that are no longer present, and merging models that + // already exist in the collection, as necessary. Similar to **Model#set**, + // the core operation for updating the data contained by the collection. + set: function(models, options) { + if (models == null) return; + + options = _.extend({}, setOptions, options); + if (options.parse && !this._isModel(models)) { + models = this.parse(models, options) || []; + } + + var singular = !_.isArray(models); + models = singular ? [models] : models.slice(); + + var at = options.at; + if (at != null) at = +at; + if (at > this.length) at = this.length; + if (at < 0) at += this.length + 1; + + var set = []; + var toAdd = []; + var toMerge = []; + var toRemove = []; + var modelMap = {}; + + var add = options.add; + var merge = options.merge; + var remove = options.remove; + + var sort = false; + var sortable = this.comparator && at == null && options.sort !== false; + var sortAttr = _.isString(this.comparator) ? this.comparator : null; + + // Turn bare objects into model references, and prevent invalid models + // from being added. + var model, i; + for (i = 0; i < models.length; i++) { + model = models[i]; + + // If a duplicate is found, prevent it from being added and + // optionally merge it into the existing model. + var existing = this.get(model); + if (existing) { + if (merge && model !== existing) { + var attrs = this._isModel(model) ? model.attributes : model; + if (options.parse) attrs = existing.parse(attrs, options); + existing.set(attrs, options); + toMerge.push(existing); + if (sortable && !sort) sort = existing.hasChanged(sortAttr); + } + if (!modelMap[existing.cid]) { + modelMap[existing.cid] = true; + set.push(existing); + } + models[i] = existing; + + // If this is a new, valid model, push it to the `toAdd` list. + } else if (add) { + model = models[i] = this._prepareModel(model, options); + if (model) { + toAdd.push(model); + this._addReference(model, options); + modelMap[model.cid] = true; + set.push(model); + } + } + } + + // Remove stale models. + if (remove) { + for (i = 0; i < this.length; i++) { + model = this.models[i]; + if (!modelMap[model.cid]) toRemove.push(model); + } + if (toRemove.length) this._removeModels(toRemove, options); + } + + // See if sorting is needed, update `length` and splice in new models. + var orderChanged = false; + var replace = !sortable && add && remove; + if (set.length && replace) { + orderChanged = this.length !== set.length || _.some(this.models, function(m, index) { + return m !== set[index]; + }); + this.models.length = 0; + splice(this.models, set, 0); + this.length = this.models.length; + } else if (toAdd.length) { + if (sortable) sort = true; + splice(this.models, toAdd, at == null ? this.length : at); + this.length = this.models.length; + } + + // Silently sort the collection if appropriate. + if (sort) this.sort({silent: true}); + + // Unless silenced, it's time to fire all appropriate add/sort/update events. + if (!options.silent) { + for (i = 0; i < toAdd.length; i++) { + if (at != null) options.index = at + i; + model = toAdd[i]; + model.trigger('add', model, this, options); + } + if (sort || orderChanged) this.trigger('sort', this, options); + if (toAdd.length || toRemove.length || toMerge.length) { + options.changes = { + added: toAdd, + removed: toRemove, + merged: toMerge + }; + this.trigger('update', this, options); + } + } + + // Return the added (or merged) model (or models). + return singular ? models[0] : models; + }, + + // When you have more items than you want to add or remove individually, + // you can reset the entire set with a new list of models, without firing + // any granular `add` or `remove` events. Fires `reset` when finished. + // Useful for bulk operations and optimizations. + reset: function(models, options) { + options = options ? _.clone(options) : {}; + for (var i = 0; i < this.models.length; i++) { + this._removeReference(this.models[i], options); + } + options.previousModels = this.models; + this._reset(); + models = this.add(models, _.extend({silent: true}, options)); + if (!options.silent) this.trigger('reset', this, options); + return models; + }, + + // Add a model to the end of the collection. + push: function(model, options) { + return this.add(model, _.extend({at: this.length}, options)); + }, + + // Remove a model from the end of the collection. + pop: function(options) { + var model = this.at(this.length - 1); + return this.remove(model, options); + }, + + // Add a model to the beginning of the collection. + unshift: function(model, options) { + return this.add(model, _.extend({at: 0}, options)); + }, + + // Remove a model from the beginning of the collection. + shift: function(options) { + var model = this.at(0); + return this.remove(model, options); + }, + + // Slice out a sub-array of models from the collection. + slice: function() { + return slice.apply(this.models, arguments); + }, + + // Get a model from the set by id, cid, model object with id or cid + // properties, or an attributes object that is transformed through modelId. + get: function(obj) { + if (obj == null) return void 0; + return this._byId[obj] || + this._byId[this.modelId(obj.attributes || obj)] || + obj.cid && this._byId[obj.cid]; + }, + + // Returns `true` if the model is in the collection. + has: function(obj) { + return this.get(obj) != null; + }, + + // Get the model at the given index. + at: function(index) { + if (index < 0) index += this.length; + return this.models[index]; + }, + + // Return models with matching attributes. Useful for simple cases of + // `filter`. + where: function(attrs, first) { + return this[first ? 'find' : 'filter'](attrs); + }, + + // Return the first model with matching attributes. Useful for simple cases + // of `find`. + findWhere: function(attrs) { + return this.where(attrs, true); + }, + + // Force the collection to re-sort itself. You don't need to call this under + // normal circumstances, as the set will maintain sort order as each item + // is added. + sort: function(options) { + var comparator = this.comparator; + if (!comparator) throw new Error('Cannot sort a set without a comparator'); + options || (options = {}); + + var length = comparator.length; + if (_.isFunction(comparator)) comparator = _.bind(comparator, this); + + // Run sort based on type of `comparator`. + if (length === 1 || _.isString(comparator)) { + this.models = this.sortBy(comparator); + } else { + this.models.sort(comparator); + } + if (!options.silent) this.trigger('sort', this, options); + return this; + }, + + // Pluck an attribute from each model in the collection. + pluck: function(attr) { + return this.map(attr + ''); + }, + + // Fetch the default set of models for this collection, resetting the + // collection when they arrive. If `reset: true` is passed, the response + // data will be passed through the `reset` method instead of `set`. + fetch: function(options) { + options = _.extend({parse: true}, options); + var success = options.success; + var collection = this; + options.success = function(resp) { + var method = options.reset ? 'reset' : 'set'; + collection[method](resp, options); + if (success) success.call(options.context, collection, resp, options); + collection.trigger('sync', collection, resp, options); + }; + wrapError(this, options); + return this.sync('read', this, options); + }, + + // Create a new instance of a model in this collection. Add the model to the + // collection immediately, unless `wait: true` is passed, in which case we + // wait for the server to agree. + create: function(model, options) { + options = options ? _.clone(options) : {}; + var wait = options.wait; + model = this._prepareModel(model, options); + if (!model) return false; + if (!wait) this.add(model, options); + var collection = this; + var success = options.success; + options.success = function(m, resp, callbackOpts) { + if (wait) collection.add(m, callbackOpts); + if (success) success.call(callbackOpts.context, m, resp, callbackOpts); + }; + model.save(null, options); + return model; + }, + + // **parse** converts a response into a list of models to be added to the + // collection. The default implementation is just to pass it through. + parse: function(resp, options) { + return resp; + }, + + // Create a new collection with an identical list of models as this one. + clone: function() { + return new this.constructor(this.models, { + model: this.model, + comparator: this.comparator + }); + }, + + // Define how to uniquely identify models in the collection. + modelId: function(attrs) { + return attrs[this.model.prototype.idAttribute || 'id']; + }, + + // Private method to reset all internal state. Called when the collection + // is first initialized or reset. + _reset: function() { + this.length = 0; + this.models = []; + this._byId = {}; + }, + + // Prepare a hash of attributes (or other model) to be added to this + // collection. + _prepareModel: function(attrs, options) { + if (this._isModel(attrs)) { + if (!attrs.collection) attrs.collection = this; + return attrs; + } + options = options ? _.clone(options) : {}; + options.collection = this; + var model = new this.model(attrs, options); + if (!model.validationError) return model; + this.trigger('invalid', this, model.validationError, options); + return false; + }, + + // Internal method called by both remove and set. + _removeModels: function(models, options) { + var removed = []; + for (var i = 0; i < models.length; i++) { + var model = this.get(models[i]); + if (!model) continue; + + var index = this.indexOf(model); + this.models.splice(index, 1); + this.length--; + + // Remove references before triggering 'remove' event to prevent an + // infinite loop. #3693 + delete this._byId[model.cid]; + var id = this.modelId(model.attributes); + if (id != null) delete this._byId[id]; + + if (!options.silent) { + options.index = index; + model.trigger('remove', model, this, options); + } + + removed.push(model); + this._removeReference(model, options); + } + return removed; + }, + + // Method for checking whether an object should be considered a model for + // the purposes of adding to the collection. + _isModel: function(model) { + return model instanceof Model; + }, + + // Internal method to create a model's ties to a collection. + _addReference: function(model, options) { + this._byId[model.cid] = model; + var id = this.modelId(model.attributes); + if (id != null) this._byId[id] = model; + model.on('all', this._onModelEvent, this); + }, + + // Internal method to sever a model's ties to a collection. + _removeReference: function(model, options) { + delete this._byId[model.cid]; + var id = this.modelId(model.attributes); + if (id != null) delete this._byId[id]; + if (this === model.collection) delete model.collection; + model.off('all', this._onModelEvent, this); + }, + + // Internal method called every time a model in the set fires an event. + // Sets need to update their indexes when models change ids. All other + // events simply proxy through. "add" and "remove" events that originate + // in other collections are ignored. + _onModelEvent: function(event, model, collection, options) { + if (model) { + if ((event === 'add' || event === 'remove') && collection !== this) return; + if (event === 'destroy') this.remove(model, options); + if (event === 'change') { + var prevId = this.modelId(model.previousAttributes()); + var id = this.modelId(model.attributes); + if (prevId !== id) { + if (prevId != null) delete this._byId[prevId]; + if (id != null) this._byId[id] = model; + } + } + } + this.trigger.apply(this, arguments); + } + + }); + + // Underscore methods that we want to implement on the Collection. + // 90% of the core usefulness of Backbone Collections is actually implemented + // right here: + var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0, + foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3, + select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3, + contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3, + head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3, + without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3, + isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3, + sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3}; + + // Mix in each Underscore method as a proxy to `Collection#models`. + addUnderscoreMethods(Collection, collectionMethods, 'models'); + + // Backbone.View + // ------------- + + // Backbone Views are almost more convention than they are actual code. A View + // is simply a JavaScript object that represents a logical chunk of UI in the + // DOM. This might be a single item, an entire list, a sidebar or panel, or + // even the surrounding frame which wraps your whole app. Defining a chunk of + // UI as a **View** allows you to define your DOM events declaratively, without + // having to worry about render order ... and makes it easy for the view to + // react to specific changes in the state of your models. + + // Creating a Backbone.View creates its initial element outside of the DOM, + // if an existing element is not provided... + var View = Backbone.View = function(options) { + this.cid = _.uniqueId('view'); + _.extend(this, _.pick(options, viewOptions)); + this._ensureElement(); + this.initialize.apply(this, arguments); + }; + + // Cached regex to split keys for `delegate`. + var delegateEventSplitter = /^(\S+)\s*(.*)$/; + + // List of view options to be set as properties. + var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events']; + + // Set up all inheritable **Backbone.View** properties and methods. + _.extend(View.prototype, Events, { + + // The default `tagName` of a View's element is `"div"`. + tagName: 'div', + + // jQuery delegate for element lookup, scoped to DOM elements within the + // current view. This should be preferred to global lookups where possible. + $: function(selector) { + return this.$el.find(selector); + }, + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // **render** is the core function that your view should override, in order + // to populate its element (`this.el`), with the appropriate HTML. The + // convention is for **render** to always return `this`. + render: function() { + return this; + }, + + // Remove this view by taking the element out of the DOM, and removing any + // applicable Backbone.Events listeners. + remove: function() { + this._removeElement(); + this.stopListening(); + return this; + }, + + // Remove this view's element from the document and all event listeners + // attached to it. Exposed for subclasses using an alternative DOM + // manipulation API. + _removeElement: function() { + this.$el.remove(); + }, + + // Change the view's element (`this.el` property) and re-delegate the + // view's events on the new element. + setElement: function(element) { + this.undelegateEvents(); + this._setElement(element); + this.delegateEvents(); + return this; + }, + + // Creates the `this.el` and `this.$el` references for this view using the + // given `el`. `el` can be a CSS selector or an HTML string, a jQuery + // context or an element. Subclasses can override this to utilize an + // alternative DOM manipulation API and are only required to set the + // `this.el` property. + _setElement: function(el) { + this.$el = el instanceof Backbone.$ ? el : Backbone.$(el); + this.el = this.$el[0]; + }, + + // Set callbacks, where `this.events` is a hash of + // + // *{"event selector": "callback"}* + // + // { + // 'mousedown .title': 'edit', + // 'click .button': 'save', + // 'click .open': function(e) { ... } + // } + // + // pairs. Callbacks will be bound to the view, with `this` set properly. + // Uses event delegation for efficiency. + // Omitting the selector binds the event to `this.el`. + delegateEvents: function(events) { + events || (events = _.result(this, 'events')); + if (!events) return this; + this.undelegateEvents(); + for (var key in events) { + var method = events[key]; + if (!_.isFunction(method)) method = this[method]; + if (!method) continue; + var match = key.match(delegateEventSplitter); + this.delegate(match[1], match[2], _.bind(method, this)); + } + return this; + }, + + // Add a single event listener to the view's element (or a child element + // using `selector`). This only works for delegate-able events: not `focus`, + // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer. + delegate: function(eventName, selector, listener) { + this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener); + return this; + }, + + // Clears all callbacks previously bound to the view by `delegateEvents`. + // You usually don't need to use this, but may wish to if you have multiple + // Backbone views attached to the same DOM element. + undelegateEvents: function() { + if (this.$el) this.$el.off('.delegateEvents' + this.cid); + return this; + }, + + // A finer-grained `undelegateEvents` for removing a single delegated event. + // `selector` and `listener` are both optional. + undelegate: function(eventName, selector, listener) { + this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener); + return this; + }, + + // Produces a DOM element to be assigned to your view. Exposed for + // subclasses using an alternative DOM manipulation API. + _createElement: function(tagName) { + return document.createElement(tagName); + }, + + // Ensure that the View has a DOM element to render into. + // If `this.el` is a string, pass it through `$()`, take the first + // matching element, and re-assign it to `el`. Otherwise, create + // an element from the `id`, `className` and `tagName` properties. + _ensureElement: function() { + if (!this.el) { + var attrs = _.extend({}, _.result(this, 'attributes')); + if (this.id) attrs.id = _.result(this, 'id'); + if (this.className) attrs['class'] = _.result(this, 'className'); + this.setElement(this._createElement(_.result(this, 'tagName'))); + this._setAttributes(attrs); + } else { + this.setElement(_.result(this, 'el')); + } + }, + + // Set attributes from a hash on this view's element. Exposed for + // subclasses using an alternative DOM manipulation API. + _setAttributes: function(attributes) { + this.$el.attr(attributes); + } + + }); + + // Backbone.sync + // ------------- + + // Override this function to change the manner in which Backbone persists + // models to the server. You will be passed the type of request, and the + // model in question. By default, makes a RESTful Ajax request + // to the model's `url()`. Some possible customizations could be: + // + // * Use `setTimeout` to batch rapid-fire updates into a single request. + // * Send up the models as XML instead of JSON. + // * Persist models via WebSockets instead of Ajax. + // + // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests + // as `POST`, with a `_method` parameter containing the true HTTP method, + // as well as all requests with the body as `application/x-www-form-urlencoded` + // instead of `application/json` with the model in a param named `model`. + // Useful when interfacing with server-side languages like **PHP** that make + // it difficult to read the body of `PUT` requests. + Backbone.sync = function(method, model, options) { + var type = methodMap[method]; + + // Default options, unless specified. + _.defaults(options || (options = {}), { + emulateHTTP: Backbone.emulateHTTP, + emulateJSON: Backbone.emulateJSON + }); + + // Default JSON-request options. + var params = {type: type, dataType: 'json'}; + + // Ensure that we have a URL. + if (!options.url) { + params.url = _.result(model, 'url') || urlError(); + } + + // Ensure that we have the appropriate request data. + if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) { + params.contentType = 'application/json'; + params.data = JSON.stringify(options.attrs || model.toJSON(options)); + } + + // For older servers, emulate JSON by encoding the request into an HTML-form. + if (options.emulateJSON) { + params.contentType = 'application/x-www-form-urlencoded'; + params.data = params.data ? {model: params.data} : {}; + } + + // For older servers, emulate HTTP by mimicking the HTTP method with `_method` + // And an `X-HTTP-Method-Override` header. + if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) { + params.type = 'POST'; + if (options.emulateJSON) params.data._method = type; + var beforeSend = options.beforeSend; + options.beforeSend = function(xhr) { + xhr.setRequestHeader('X-HTTP-Method-Override', type); + if (beforeSend) return beforeSend.apply(this, arguments); + }; + } + + // Don't process data on a non-GET request. + if (params.type !== 'GET' && !options.emulateJSON) { + params.processData = false; + } + + // Pass along `textStatus` and `errorThrown` from jQuery. + var error = options.error; + options.error = function(xhr, textStatus, errorThrown) { + options.textStatus = textStatus; + options.errorThrown = errorThrown; + if (error) error.call(options.context, xhr, textStatus, errorThrown); + }; + + // Make the request, allowing the user to override any Ajax options. + var xhr = options.xhr = Backbone.ajax(_.extend(params, options)); + model.trigger('request', model, xhr, options); + return xhr; + }; + + // Map from CRUD to HTTP for our default `Backbone.sync` implementation. + var methodMap = { + 'create': 'POST', + 'update': 'PUT', + 'patch': 'PATCH', + 'delete': 'DELETE', + 'read': 'GET' + }; + + // Set the default implementation of `Backbone.ajax` to proxy through to `$`. + // Override this if you'd like to use a different library. + Backbone.ajax = function() { + return Backbone.$.ajax.apply(Backbone.$, arguments); + }; + + // Backbone.Router + // --------------- + + // Routers map faux-URLs to actions, and fire events when routes are + // matched. Creating a new one sets its `routes` hash, if not set statically. + var Router = Backbone.Router = function(options) { + options || (options = {}); + if (options.routes) this.routes = options.routes; + this._bindRoutes(); + this.initialize.apply(this, arguments); + }; + + // Cached regular expressions for matching named param parts and splatted + // parts of route strings. + var optionalParam = /\((.*?)\)/g; + var namedParam = /(\(\?)?:\w+/g; + var splatParam = /\*\w+/g; + var escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g; + + // Set up all inheritable **Backbone.Router** properties and methods. + _.extend(Router.prototype, Events, { + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // Manually bind a single named route to a callback. For example: + // + // this.route('search/:query/p:num', 'search', function(query, num) { + // ... + // }); + // + route: function(route, name, callback) { + if (!_.isRegExp(route)) route = this._routeToRegExp(route); + if (_.isFunction(name)) { + callback = name; + name = ''; + } + if (!callback) callback = this[name]; + var router = this; + Backbone.history.route(route, function(fragment) { + var args = router._extractParameters(route, fragment); + if (router.execute(callback, args, name) !== false) { + router.trigger.apply(router, ['route:' + name].concat(args)); + router.trigger('route', name, args); + Backbone.history.trigger('route', router, name, args); + } + }); + return this; + }, + + // Execute a route handler with the provided parameters. This is an + // excellent place to do pre-route setup or post-route cleanup. + execute: function(callback, args, name) { + if (callback) callback.apply(this, args); + }, + + // Simple proxy to `Backbone.history` to save a fragment into the history. + navigate: function(fragment, options) { + Backbone.history.navigate(fragment, options); + return this; + }, + + // Bind all defined routes to `Backbone.history`. We have to reverse the + // order of the routes here to support behavior where the most general + // routes can be defined at the bottom of the route map. + _bindRoutes: function() { + if (!this.routes) return; + this.routes = _.result(this, 'routes'); + var route, routes = _.keys(this.routes); + while ((route = routes.pop()) != null) { + this.route(route, this.routes[route]); + } + }, + + // Convert a route string into a regular expression, suitable for matching + // against the current location hash. + _routeToRegExp: function(route) { + route = route.replace(escapeRegExp, '\\$&') + .replace(optionalParam, '(?:$1)?') + .replace(namedParam, function(match, optional) { + return optional ? match : '([^/?]+)'; + }) + .replace(splatParam, '([^?]*?)'); + return new RegExp('^' + route + '(?:\\?([\\s\\S]*))?$'); + }, + + // Given a route, and a URL fragment that it matches, return the array of + // extracted decoded parameters. Empty or unmatched parameters will be + // treated as `null` to normalize cross-browser behavior. + _extractParameters: function(route, fragment) { + var params = route.exec(fragment).slice(1); + return _.map(params, function(param, i) { + // Don't decode the search params. + if (i === params.length - 1) return param || null; + return param ? decodeURIComponent(param) : null; + }); + } + + }); + + // Backbone.History + // ---------------- + + // Handles cross-browser history management, based on either + // [pushState](http://diveintohtml5.info/history.html) and real URLs, or + // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange) + // and URL fragments. If the browser supports neither (old IE, natch), + // falls back to polling. + var History = Backbone.History = function() { + this.handlers = []; + this.checkUrl = _.bind(this.checkUrl, this); + + // Ensure that `History` can be used outside of the browser. + if (typeof window !== 'undefined') { + this.location = window.location; + this.history = window.history; + } + }; + + // Cached regex for stripping a leading hash/slash and trailing space. + var routeStripper = /^[#\/]|\s+$/g; + + // Cached regex for stripping leading and trailing slashes. + var rootStripper = /^\/+|\/+$/g; + + // Cached regex for stripping urls of hash. + var pathStripper = /#.*$/; + + // Has the history handling already been started? + History.started = false; + + // Set up all inheritable **Backbone.History** properties and methods. + _.extend(History.prototype, Events, { + + // The default interval to poll for hash changes, if necessary, is + // twenty times a second. + interval: 50, + + // Are we at the app root? + atRoot: function() { + var path = this.location.pathname.replace(/[^\/]$/, '$&/'); + return path === this.root && !this.getSearch(); + }, + + // Does the pathname match the root? + matchRoot: function() { + var path = this.decodeFragment(this.location.pathname); + var rootPath = path.slice(0, this.root.length - 1) + '/'; + return rootPath === this.root; + }, + + // Unicode characters in `location.pathname` are percent encoded so they're + // decoded for comparison. `%25` should not be decoded since it may be part + // of an encoded parameter. + decodeFragment: function(fragment) { + return decodeURI(fragment.replace(/%25/g, '%2525')); + }, + + // In IE6, the hash fragment and search params are incorrect if the + // fragment contains `?`. + getSearch: function() { + var match = this.location.href.replace(/#.*/, '').match(/\?.+/); + return match ? match[0] : ''; + }, + + // Gets the true hash value. Cannot use location.hash directly due to bug + // in Firefox where location.hash will always be decoded. + getHash: function(window) { + var match = (window || this).location.href.match(/#(.*)$/); + return match ? match[1] : ''; + }, + + // Get the pathname and search params, without the root. + getPath: function() { + var path = this.decodeFragment( + this.location.pathname + this.getSearch() + ).slice(this.root.length - 1); + return path.charAt(0) === '/' ? path.slice(1) : path; + }, + + // Get the cross-browser normalized URL fragment from the path or hash. + getFragment: function(fragment) { + if (fragment == null) { + if (this._usePushState || !this._wantsHashChange) { + fragment = this.getPath(); + } else { + fragment = this.getHash(); + } + } + return fragment.replace(routeStripper, ''); + }, + + // Start the hash change handling, returning `true` if the current URL matches + // an existing route, and `false` otherwise. + start: function(options) { + if (History.started) throw new Error('Backbone.history has already been started'); + History.started = true; + + // Figure out the initial configuration. Do we need an iframe? + // Is pushState desired ... is it available? + this.options = _.extend({root: '/'}, this.options, options); + this.root = this.options.root; + this._wantsHashChange = this.options.hashChange !== false; + this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7); + this._useHashChange = this._wantsHashChange && this._hasHashChange; + this._wantsPushState = !!this.options.pushState; + this._hasPushState = !!(this.history && this.history.pushState); + this._usePushState = this._wantsPushState && this._hasPushState; + this.fragment = this.getFragment(); + + // Normalize root to always include a leading and trailing slash. + this.root = ('/' + this.root + '/').replace(rootStripper, '/'); + + // Transition from hashChange to pushState or vice versa if both are + // requested. + if (this._wantsHashChange && this._wantsPushState) { + + // If we've started off with a route from a `pushState`-enabled + // browser, but we're currently in a browser that doesn't support it... + if (!this._hasPushState && !this.atRoot()) { + var rootPath = this.root.slice(0, -1) || '/'; + this.location.replace(rootPath + '#' + this.getPath()); + // Return immediately as browser will do redirect to new url + return true; + + // Or if we've started out with a hash-based route, but we're currently + // in a browser where it could be `pushState`-based instead... + } else if (this._hasPushState && this.atRoot()) { + this.navigate(this.getHash(), {replace: true}); + } + + } + + // Proxy an iframe to handle location events if the browser doesn't + // support the `hashchange` event, HTML5 history, or the user wants + // `hashChange` but not `pushState`. + if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) { + this.iframe = document.createElement('iframe'); + this.iframe.src = 'javascript:0'; + this.iframe.style.display = 'none'; + this.iframe.tabIndex = -1; + var body = document.body; + // Using `appendChild` will throw on IE < 9 if the document is not ready. + var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow; + iWindow.document.open(); + iWindow.document.close(); + iWindow.location.hash = '#' + this.fragment; + } + + // Add a cross-platform `addEventListener` shim for older browsers. + var addEventListener = window.addEventListener || function(eventName, listener) { + return attachEvent('on' + eventName, listener); + }; + + // Depending on whether we're using pushState or hashes, and whether + // 'onhashchange' is supported, determine how we check the URL state. + if (this._usePushState) { + addEventListener('popstate', this.checkUrl, false); + } else if (this._useHashChange && !this.iframe) { + addEventListener('hashchange', this.checkUrl, false); + } else if (this._wantsHashChange) { + this._checkUrlInterval = setInterval(this.checkUrl, this.interval); + } + + if (!this.options.silent) return this.loadUrl(); + }, + + // Disable Backbone.history, perhaps temporarily. Not useful in a real app, + // but possibly useful for unit testing Routers. + stop: function() { + // Add a cross-platform `removeEventListener` shim for older browsers. + var removeEventListener = window.removeEventListener || function(eventName, listener) { + return detachEvent('on' + eventName, listener); + }; + + // Remove window listeners. + if (this._usePushState) { + removeEventListener('popstate', this.checkUrl, false); + } else if (this._useHashChange && !this.iframe) { + removeEventListener('hashchange', this.checkUrl, false); + } + + // Clean up the iframe if necessary. + if (this.iframe) { + document.body.removeChild(this.iframe); + this.iframe = null; + } + + // Some environments will throw when clearing an undefined interval. + if (this._checkUrlInterval) clearInterval(this._checkUrlInterval); + History.started = false; + }, + + // Add a route to be tested when the fragment changes. Routes added later + // may override previous routes. + route: function(route, callback) { + this.handlers.unshift({route: route, callback: callback}); + }, + + // Checks the current URL to see if it has changed, and if it has, + // calls `loadUrl`, normalizing across the hidden iframe. + checkUrl: function(e) { + var current = this.getFragment(); + + // If the user pressed the back button, the iframe's hash will have + // changed and we should use that for comparison. + if (current === this.fragment && this.iframe) { + current = this.getHash(this.iframe.contentWindow); + } + + if (current === this.fragment) return false; + if (this.iframe) this.navigate(current); + this.loadUrl(); + }, + + // Attempt to load the current URL fragment. If a route succeeds with a + // match, returns `true`. If no defined routes matches the fragment, + // returns `false`. + loadUrl: function(fragment) { + // If the root doesn't match, no routes can match either. + if (!this.matchRoot()) return false; + fragment = this.fragment = this.getFragment(fragment); + return _.some(this.handlers, function(handler) { + if (handler.route.test(fragment)) { + handler.callback(fragment); + return true; + } + }); + }, + + // Save a fragment into the hash history, or replace the URL state if the + // 'replace' option is passed. You are responsible for properly URL-encoding + // the fragment in advance. + // + // The options object can contain `trigger: true` if you wish to have the + // route callback be fired (not usually desirable), or `replace: true`, if + // you wish to modify the current URL without adding an entry to the history. + navigate: function(fragment, options) { + if (!History.started) return false; + if (!options || options === true) options = {trigger: !!options}; + + // Normalize the fragment. + fragment = this.getFragment(fragment || ''); + + // Don't include a trailing slash on the root. + var rootPath = this.root; + if (fragment === '' || fragment.charAt(0) === '?') { + rootPath = rootPath.slice(0, -1) || '/'; + } + var url = rootPath + fragment; + + // Strip the hash and decode for matching. + fragment = this.decodeFragment(fragment.replace(pathStripper, '')); + + if (this.fragment === fragment) return; + this.fragment = fragment; + + // If pushState is available, we use it to set the fragment as a real URL. + if (this._usePushState) { + this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url); + + // If hash changes haven't been explicitly disabled, update the hash + // fragment to store history. + } else if (this._wantsHashChange) { + this._updateHash(this.location, fragment, options.replace); + if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) { + var iWindow = this.iframe.contentWindow; + + // Opening and closing the iframe tricks IE7 and earlier to push a + // history entry on hash-tag change. When replace is true, we don't + // want this. + if (!options.replace) { + iWindow.document.open(); + iWindow.document.close(); + } + + this._updateHash(iWindow.location, fragment, options.replace); + } + + // If you've told us that you explicitly don't want fallback hashchange- + // based history, then `navigate` becomes a page refresh. + } else { + return this.location.assign(url); + } + if (options.trigger) return this.loadUrl(fragment); + }, + + // Update the hash location, either replacing the current entry, or adding + // a new one to the browser history. + _updateHash: function(location, fragment, replace) { + if (replace) { + var href = location.href.replace(/(javascript:|#).*$/, ''); + location.replace(href + '#' + fragment); + } else { + // Some browsers require that `hash` contains a leading #. + location.hash = '#' + fragment; + } + } + + }); + + // Create the default Backbone.history. + Backbone.history = new History; + + // Helpers + // ------- + + // Helper function to correctly set up the prototype chain for subclasses. + // Similar to `goog.inherits`, but uses a hash of prototype properties and + // class properties to be extended. + var extend = function(protoProps, staticProps) { + var parent = this; + var child; + + // The constructor function for the new subclass is either defined by you + // (the "constructor" property in your `extend` definition), or defaulted + // by us to simply call the parent constructor. + if (protoProps && _.has(protoProps, 'constructor')) { + child = protoProps.constructor; + } else { + child = function(){ return parent.apply(this, arguments); }; + } + + // Add static properties to the constructor function, if supplied. + _.extend(child, parent, staticProps); + + // Set the prototype chain to inherit from `parent`, without calling + // `parent`'s constructor function and add the prototype properties. + child.prototype = _.create(parent.prototype, protoProps); + child.prototype.constructor = child; + + // Set a convenience property in case the parent's prototype is needed + // later. + child.__super__ = parent.prototype; + + return child; + }; + + // Set up inheritance for the model, collection, router, view and history. + Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend; + + // Throw an error when a URL is needed, and none is supplied. + var urlError = function() { + throw new Error('A "url" property or function must be specified'); + }; + + // Wrap an optional error callback with a fallback error event. + var wrapError = function(model, options) { + var error = options.error; + options.error = function(resp) { + if (error) error.call(options.context, model, resp, options); + model.trigger('error', model, resp, options); + }; + }; + + return Backbone; +}); + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.9.0 +// http://underscorejs.org +// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` (`self`) in the browser, `global` + // on the server, or `this` in some virtual machines. We use `self` + // instead of `window` for `WebWorker` support. + var root = typeof self == 'object' && self.self === self && self || + typeof global == 'object' && global.global === global && global || + this || + {}; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype; + var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; + + // Create quick reference variables for speed access to core prototypes. + var push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create; + + // Naked function reference for surrogate-prototype-swapping. + var Ctor = function(){}; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for their old module API. If we're in + // the browser, add `_` as a global object. + // (`nodeType` is checked to ensure that `module` + // and `exports` are not HTML elements.) + if (typeof exports != 'undefined' && !exports.nodeType) { + if (typeof module != 'undefined' && !module.nodeType && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.9.0'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var optimizeCb = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + // The 2-argument case is omitted because we’re not using it. + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + var builtinIteratee; + + // An internal function to generate callbacks that can be applied to each + // element in a collection, returning the desired result — either `identity`, + // an arbitrary callback, a property matcher, or a property accessor. + var cb = function(value, context, argCount) { + if (_.iteratee !== builtinIteratee) return _.iteratee(value, context); + if (value == null) return _.identity; + if (_.isFunction(value)) return optimizeCb(value, context, argCount); + if (_.isObject(value) && !_.isArray(value)) return _.matcher(value); + return _.property(value); + }; + + // External wrapper for our callback generator. Users may customize + // `_.iteratee` if they want additional predicate/iteratee shorthand styles. + // This abstraction hides the internal-only argCount argument. + _.iteratee = builtinIteratee = function(value, context) { + return cb(value, context, Infinity); + }; + + // Some functions take a variable number of arguments, or a few expected + // arguments at the beginning and then a variable number of values to operate + // on. This helper accumulates all remaining arguments past the function’s + // argument length (or an explicit `startIndex`), into an array that becomes + // the last argument. Similar to ES6’s "rest parameter". + var restArguments = function(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; + }; + + // An internal function for creating a new object that inherits from another. + var baseCreate = function(prototype) { + if (!_.isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + }; + + var shallowProperty = function(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + }; + + var deepGet = function(obj, path) { + var length = path.length; + for (var i = 0; i < length; i++) { + if (obj == null) return void 0; + obj = obj[path[i]]; + } + return length ? obj : void 0; + }; + + // Helper for collection methods to determine whether a collection + // should be iterated as an array or as an object. + // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = shallowProperty('length'); + var isArrayLike = function(collection) { + var length = getLength(collection); + return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; + }; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); + } + } + return obj; + }; + + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Create a reducing function iterating left or right. + var createReduce = function(dir) { + // Wrap code that reassigns argument variables in a separate function than + // the one that accesses `arguments.length` to avoid a perf hit. (#1991) + var reducer = function(obj, iteratee, memo, initial) { + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + index = dir > 0 ? 0 : length - 1; + if (!initial) { + memo = obj[keys ? keys[index] : index]; + index += dir; + } + for (; index >= 0 && index < length; index += dir) { + var currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + }; + + return function(obj, iteratee, memo, context) { + var initial = arguments.length >= 3; + return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial); + }; + }; + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + _.reduce = _.foldl = _.inject = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + _.reduceRight = _.foldr = createReduce(-1); + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey; + var key = keyFinder(obj, predicate, context); + if (key !== void 0 && key !== -1) return obj[key]; + }; + + // Return all the elements that pass a truth test. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(cb(predicate)), context); + }; + + // Determine whether all of the elements match a truth test. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + }; + + // Determine if at least one element in the object matches a truth test. + // Aliased as `any`. + _.some = _.any = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + }; + + // Determine if the array or object contains a given item (using `===`). + // Aliased as `includes` and `include`. + _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return _.indexOf(obj, item, fromIndex) >= 0; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = restArguments(function(obj, path, args) { + var contextPath, func; + if (_.isFunction(path)) { + func = path; + } else if (_.isArray(path)) { + contextPath = path.slice(0, -1); + path = path[path.length - 1]; + } + return _.map(obj, function(context) { + var method = func; + if (!method) { + if (contextPath && contextPath.length) { + context = deepGet(context, contextPath); + } + if (context == null) return void 0; + method = context[path]; + } + return method == null ? method : method.apply(context, args); + }); + }); + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matcher(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matcher(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + }; + + // Shuffle a collection. + _.shuffle = function(obj) { + return _.sample(obj, Infinity); + }; + + // Sample **n** random values from a collection using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj); + var length = getLength(sample); + n = Math.max(Math.min(n, length), 0); + var last = length - 1; + for (var index = 0; index < n; index++) { + var rand = _.random(index, last); + var temp = sample[index]; + sample[index] = sample[rand]; + sample[rand] = temp; + } + return sample.slice(0, n); + }; + + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + var index = 0; + iteratee = cb(iteratee, context); + return _.pluck(_.map(obj, function(value, key, list) { + return { + value: value, + index: index++, + criteria: iteratee(value, key, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior, partition) { + return function(obj, iteratee, context) { + var result = partition ? [[], []] : {}; + iteratee = cb(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, value, key) { + if (_.has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, value, key) { + if (_.has(result, key)) result[key]++; else result[key] = 1; + }); + + var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (_.isString(obj)) { + // Keep surrogate pair characters together + return obj.match(reStrSymbol); + } + if (isArrayLike(obj)) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = group(function(result, value, pass) { + result[pass ? 0 : 1].push(value); + }, true); + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null || array.length < 1) return void 0; + if (n == null || guard) return array[0]; + return _.initial(array, array.length - n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + _.initial = function(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + _.last = function(array, n, guard) { + if (array == null || array.length < 1) return void 0; + if (n == null || guard) return array[array.length - 1]; + return _.rest(array, Math.max(0, array.length - n)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, Boolean); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, strict, output) { + output = output || []; + var idx = output.length; + for (var i = 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { + // Flatten current level of array or arguments object. + if (shallow) { + var j = 0, len = value.length; + while (j < len) output[idx++] = value[j++]; + } else { + flatten(value, shallow, strict, output); + idx = output.length; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, false); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = restArguments(function(array, otherArrays) { + return _.difference(array, otherArrays); + }); + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // The faster algorithm will not work with an iteratee if the iteratee + // is not a one-to-one function, so providing an iteratee will disable + // the faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!_.contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!_.contains(result, value)) { + result.push(value); + } + } + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = restArguments(function(arrays) { + return _.uniq(flatten(arrays, true, true)); + }); + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); + }); + + // Complement of _.zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices. + _.unzip = function(array) { + var length = array && _.max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = _.pluck(array, index); + } + return result; + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = restArguments(_.unzip); + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. Passing by pairs is the reverse of _.pairs. + _.object = function(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // Generator function to create the findIndex and findLastIndex functions. + var createPredicateIndexFinder = function(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + }; + + // Returns the first index on an array-like that passes a predicate test. + _.findIndex = createPredicateIndexFinder(1); + _.findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + }; + + // Generator function to create the indexOf and lastIndexOf functions. + var createIndexFinder = function(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), _.isNaN); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + }; + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); + _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + }; + + // Chunk a single array into multiple arrays, each containing `count` or fewer + // items. + _.chunk = function(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; + }; + + // Function (ahem) Functions + // ------------------ + + // Determines whether to execute a function as a constructor + // or a normal function with the provided arguments. + var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (_.isObject(result)) return result; + return self; + }; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = restArguments(function(func, context, args) { + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + var bound = restArguments(function(callArgs) { + return executeBound(func, bound, context, this, args.concat(callArgs)); + }); + return bound; + }); + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder by default, allowing any combination of arguments to be + // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument. + _.partial = restArguments(function(func, boundArgs) { + var placeholder = _.partial.placeholder; + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }); + + _.partial.placeholder = _; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = restArguments(function(obj, keys) { + keys = flatten(keys, false, false); + var index = keys.length; + if (index < 1) throw new Error('bindAll must be passed function names'); + while (index--) { + var key = keys[index]; + obj[key] = _.bind(obj[key], obj); + } + }); + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = restArguments(function(func, wait, args) { + return setTimeout(function() { + return func.apply(null, args); + }, wait); + }); + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = _.partial(_.delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var timeout, context, args, result; + var previous = 0; + if (!options) options = {}; + + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + + var throttled = function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + + throttled.cancel = function() { + clearTimeout(timeout); + previous = 0; + timeout = context = args = null; + }; + + return throttled; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, result; + + var later = function(context, args) { + timeout = null; + if (args) result = func.apply(context, args); + }; + + var debounced = restArguments(function(args) { + if (timeout) clearTimeout(timeout); + if (immediate) { + var callNow = !timeout; + timeout = setTimeout(later, wait); + if (callNow) result = func.apply(this, args); + } else { + timeout = _.delay(later, wait, this, args); + } + + return result; + }); + + debounced.cancel = function() { + clearTimeout(timeout); + timeout = null; + }; + + return debounced; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + }; + + // Returns a function that will only be executed on and after the Nth call. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Returns a function that will only be executed up to (but not including) the Nth call. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + + _.restArguments = restArguments; + + // Object Functions + // ---------------- + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + var collectNonEnumProps = function(obj, keys) { + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = _.isFunction(constructor) && constructor.prototype || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { + keys.push(prop); + } + } + }; + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys`. + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve all the property names of an object. + _.allKeys = function(obj) { + if (!_.isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Returns the results of applying the iteratee to each element of the object. + // In contrast to _.map it returns an object. + _.mapObject = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = _.keys(obj), + length = keys.length, + results = {}; + for (var index = 0; index < length; index++) { + var currentKey = keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Convert an object into a list of `[key, value]` pairs. + // The opposite of _.object. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods`. + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // An internal function for creating assigner functions. + var createAssigner = function(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = createAssigner(_.allKeys); + + // Assigns a given object with all the own properties in the passed-in object(s). + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + _.extendOwn = _.assign = createAssigner(_.keys); + + // Returns the first key on an object that passes a predicate test. + _.findKey = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = _.keys(obj), key; + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + }; + + // Internal pick helper function to determine if `obj` has key `key`. + var keyInObj = function(value, key, obj) { + return key in obj; + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = restArguments(function(obj, keys) { + var result = {}, iteratee = keys[0]; + if (obj == null) return result; + if (_.isFunction(iteratee)) { + if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); + keys = _.allKeys(obj); + } else { + iteratee = keyInObj; + keys = flatten(keys, false, false); + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }); + + // Return a copy of the object without the blacklisted properties. + _.omit = restArguments(function(obj, keys) { + var iteratee = keys[0], context; + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + if (keys.length > 1) context = keys[1]; + } else { + keys = _.map(flatten(keys, false, false), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; + } + return _.pick(obj, iteratee, context); + }); + + // Fill in a given object with default properties. + _.defaults = createAssigner(_.allKeys, true); + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + _.create = function(prototype, props) { + var result = baseCreate(prototype); + if (props) _.extendOwn(result, props); + return result; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Returns whether an object has a given set of `key:value` pairs. + _.isMatch = function(object, attrs) { + var keys = _.keys(attrs), length = keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + + + // Internal recursive comparison function for `isEqual`. + var eq, deepEq; + eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); + }; + + // Internal recursive comparison function for `isEqual`. + deepEq = function(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + } + + var areArrays = className === '[object Array]'; + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var keys = _.keys(a), key; + length = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (_.keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = keys[length]; + if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; + return _.keys(obj).length === 0; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet. + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return _.has(obj, 'callee'); + }; + } + + // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, + // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). + var nodelist = root.document && root.document.childNodes; + if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') { + _.isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? + _.isNaN = function(obj) { + return _.isNumber(obj) && isNaN(obj); + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, path) { + if (!_.isArray(path)) { + return obj != null && hasOwnProperty.call(obj, path); + } + var length = path.length; + for (var i = 0; i < length; i++) { + var key = path[i]; + if (obj == null || !hasOwnProperty.call(obj, key)) { + return false; + } + obj = obj[key]; + } + return !!length; + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iteratees. + _.identity = function(value) { + return value; + }; + + // Predicate-generating functions. Often useful outside of Underscore. + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + // Creates a function that, when passed an object, will traverse that object’s + // properties down the given `path`, specified as an array of keys or indexes. + _.property = function(path) { + if (!_.isArray(path)) { + return shallowProperty(path); + } + return function(obj) { + return deepGet(obj, path); + }; + }; + + // Generates a function for a given object that returns a given property. + _.propertyOf = function(obj) { + if (obj == null) { + return function(){}; + } + return function(path) { + return !_.isArray(path) ? obj[path] : deepGet(obj, path); + }; + }; + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + _.matcher = _.matches = function(attrs) { + attrs = _.extendOwn({}, attrs); + return function(obj) { + return _.isMatch(obj, attrs); + }; + }; + + // Run a function **n** times. + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = _.invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped. + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); + + // Traverses the children of `obj` along `path`. If a child is a function, it + // is invoked with its parent as context. Returns the value of the final + // child, or `fallback` if any child is undefined. + _.result = function(obj, path, fallback) { + if (!_.isArray(path)) path = [path]; + var length = path.length; + if (!length) { + return _.isFunction(fallback) ? fallback.call(obj) : fallback; + } + for (var i = 0; i < length; i++) { + var prop = obj == null ? void 0 : obj[path[i]]; + if (prop === void 0) { + prop = fallback; + i = length; // Ensure we don't continue iterating. + } + obj = _.isFunction(prop) ? prop.call(obj) : prop; + } + return obj; + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate: /<%([\s\S]+?)%>/g, + interpolate: /<%=([\s\S]+?)%>/g, + escape: /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escapeRegExp, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offset. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + var render; + try { + render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function. Start chaining a wrapped Underscore object. + _.chain = function(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var chainResult = function(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return chainResult(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + _.each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return chainResult(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxy for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return String(this._wrapped); + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { + return _; + }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } +}()); + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7), __webpack_require__(64)(module))) + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getUnitFromValue = exports.normalizeFloat = exports.shallowDiff = exports.getElement = exports.camelCase = exports.getModel = exports.matches = exports.upFirst = exports.hasDnd = exports.off = exports.on = undefined; + +var _underscore = __webpack_require__(1); + +var elProt = window.Element.prototype; +var matches = elProt.matches || elProt.webkitMatchesSelector || elProt.mozMatchesSelector || elProt.msMatchesSelector; + +/** + * Returns shallow diff between 2 objects + * @param {Object} objOrig + * @param {Objec} objNew + * @return {Object} + * @example + * var a = {foo: 'bar', baz: 1, faz: 'sop'}; + * var b = {foo: 'bar', baz: 2, bar: ''}; + * shallowDiff(a, b); + * // -> {baz: 2, faz: null, bar: ''}; + */ +var shallowDiff = function shallowDiff(objOrig, objNew) { + var result = {}; + var keysNew = (0, _underscore.keys)(objNew); + + for (var prop in objOrig) { + if (objOrig.hasOwnProperty(prop)) { + var origValue = objOrig[prop]; + var newValue = objNew[prop]; + + if (keysNew.indexOf(prop) >= 0) { + if (origValue !== newValue) { + result[prop] = newValue; + } + } else { + result[prop] = null; + } + } + } + + for (var _prop in objNew) { + if (objNew.hasOwnProperty(_prop)) { + if ((0, _underscore.isUndefined)(objOrig[_prop])) { + result[_prop] = objNew[_prop]; + } + } + } + + return result; +}; + +var on = function on(el, ev, fn) { + ev = ev.split(/\s+/); + el = el instanceof Array ? el : [el]; + + var _loop = function _loop(i) { + el.forEach(function (elem) { + return elem.addEventListener(ev[i], fn); + }); + }; + + for (var i = 0; i < ev.length; ++i) { + _loop(i); + } +}; + +var off = function off(el, ev, fn) { + ev = ev.split(/\s+/); + el = el instanceof Array ? el : [el]; + + var _loop2 = function _loop2(i) { + el.forEach(function (elem) { + return elem.removeEventListener(ev[i], fn); + }); + }; + + for (var i = 0; i < ev.length; ++i) { + _loop2(i); + } +}; + +var getUnitFromValue = function getUnitFromValue(value) { + return value.replace(parseFloat(value), ''); +}; + +var upFirst = function upFirst(value) { + return value[0].toUpperCase() + value.toLowerCase().slice(1); +}; + +var camelCase = function camelCase(value) { + var values = value.split('-'); + return values[0].toLowerCase() + values.slice(1).map(upFirst); +}; + +var normalizeFloat = function normalizeFloat(value) { + var step = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + var valueDef = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + var stepDecimals = 0; + if (isNaN(value)) return valueDef; + value = parseFloat(value); + + if (Math.floor(value) !== value) { + var side = step.toString().split('.')[1]; + stepDecimals = side ? side.length : 0; + } + + return stepDecimals ? parseFloat(value.toFixed(stepDecimals)) : value; +}; + +var hasDnd = function hasDnd(em) { + return 'draggable' in document.createElement('i') && (em ? em.get('Config').nativeDnD : 1); +}; + +/** + * Ensure to fetch the element from the input argument + * @param {HTMLElement|Component} el Component or HTML element + * @return {HTMLElement} + */ +var getElement = function getElement(el) { + if ((0, _underscore.isElement)(el)) { + return el; + } else if (el && el.getEl) { + return el.getEl(); + } +}; + +/** + * Ensure to fetch the model from the input argument + * @param {HTMLElement|Component} el Component or HTML element + * @return {Component} + */ +var getModel = function getModel(el, $) { + var model = el; + (0, _underscore.isElement)(el) && (model = $(el).data('model')); + return model; +}; + +exports.on = on; +exports.off = off; +exports.hasDnd = hasDnd; +exports.upFirst = upFirst; +exports.matches = matches; +exports.getModel = getModel; +exports.camelCase = camelCase; +exports.getElement = getElement; +exports.shallowDiff = shallowDiff; +exports.normalizeFloat = normalizeFloat; +exports.getUnitFromValue = getUnitFromValue; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +var _underscore = __webpack_require__(1); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var ComponentsView = __webpack_require__(52); + +module.exports = _backbone2.default.View.extend({ + className: function className() { + return this.getClasses(); + }, + tagName: function tagName() { + return this.model.get('tagName'); + }, + initialize: function initialize() { + var opt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var model = this.model; + var config = opt.config || {}; + this.opts = opt; + this.config = config; + this.em = config.em || ''; + this.pfx = config.stylePrefix || ''; + this.ppfx = config.pStylePrefix || ''; + this.attr = model.get('attributes'); + this.classe = this.attr.class || []; + var $el = this.$el; + var classes = model.get('classes'); + this.listenTo(model, 'change:style', this.updateStyle); + this.listenTo(model, 'change:attributes', this.updateAttributes); + this.listenTo(model, 'change:highlightable', this.updateHighlight); + this.listenTo(model, 'change:status', this.updateStatus); + this.listenTo(model, 'change:state', this.updateState); + this.listenTo(model, 'change:script', this.render); + this.listenTo(model, 'change:content', this.updateContent); + this.listenTo(model, 'change', this.handleChange); + this.listenTo(classes, 'add remove change', this.updateClasses); + $el.data('model', model); + $el.data('collection', model.get('components')); + model.view = this; + classes.length && this.importClasses(); + this.init(); + }, + + + /** + * Initialize callback + */ + init: function init() {}, + + + /** + * Handle any property change + * @private + */ + handleChange: function handleChange() { + var model = this.model; + model.emitUpdate(); + + for (var prop in model.changed) { + model.emitUpdate(prop); + } + }, + + + /** + * Import, if possible, classes inside main container + * @private + * */ + importClasses: function importClasses() { + var clm = this.config.em.get('SelectorManager'); + + if (clm) { + this.model.get('classes').each(function (m) { + clm.add(m.get('name')); + }); + } + }, + + + /** + * Fires on state update. If the state is not empty will add a helper class + * @param {Event} e + * @private + * */ + updateState: function updateState(e) { + var cl = 'hc-state'; + var state = this.model.get('state'); + + if (state) { + this.$el.addClass(cl); + } else { + this.$el.removeClass(cl); + } + }, + + + /** + * Update item on status change + * @param {Event} e + * @private + * */ + updateStatus: function updateStatus() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var em = this.em; + var el = this.el; + var status = this.model.get('status'); + var pfx = this.pfx; + var ppfx = this.ppfx; + var selectedCls = pfx + 'selected'; + var selectedParentCls = selectedCls + '-parent'; + var freezedCls = ppfx + 'freezed'; + var hoveredCls = ppfx + 'hovered'; + var toRemove = [selectedCls, selectedParentCls, freezedCls, hoveredCls]; + this.$el.removeClass(toRemove.join(' ')); + var actualCls = el.getAttribute('class') || ''; + var cls = ''; + + switch (status) { + case 'selected': + cls = actualCls + ' ' + selectedCls; + break; + case 'selected-parent': + cls = actualCls + ' ' + selectedParentCls; + break; + case 'freezed': + cls = actualCls + ' ' + freezedCls; + break; + case 'freezed-selected': + cls = actualCls + ' ' + freezedCls + ' ' + selectedCls; + break; + case 'hovered': + cls = !opts.avoidHover ? actualCls + ' ' + hoveredCls : ''; + break; + } + + cls = cls.trim(); + cls && el.setAttribute('class', cls); + }, + + + /** + * Update highlight attribute + * @private + * */ + updateHighlight: function updateHighlight() { + var hl = this.model.get('highlightable'); + this.setAttribute('data-highlightable', hl ? 1 : ''); + }, + + + /** + * Update style attribute + * @private + * */ + updateStyle: function updateStyle() { + var em = this.em; + var model = this.model; + + if (em && em.get('avoidInlineStyle')) { + this.el.id = model.getId(); + var style = model.getStyle(); + !(0, _underscore.isEmpty)(style) && model.setStyle(style); + } else { + this.setAttribute('style', model.styleToString()); + } + }, + + + /** + * Update classe attribute + * @private + * */ + updateClasses: function updateClasses() { + var str = this.model.get('classes').pluck('name').join(' '); + this.setAttribute('class', str); + + // Regenerate status class + this.updateStatus(); + }, + + + /** + * Update single attribute + * @param {[type]} name [description] + * @param {[type]} value [description] + */ + setAttribute: function setAttribute(name, value) { + var el = this.$el; + value ? el.attr(name, value) : el.removeAttr(name); + }, + + + /** + * Get classes from attributes. + * This method is called before initialize + * + * @return {Array}|null + * @private + * */ + getClasses: function getClasses() { + var attr = this.model.get('attributes'), + classes = attr['class'] || []; + classes = (0, _underscore.isArray)(classes) ? classes : [classes]; + + if (classes.length) { + return classes.join(' '); + } else { + return null; + } + }, + + + /** + * Update attributes + * @private + * */ + updateAttributes: function updateAttributes() { + var model = this.model; + var attrs = { 'data-gjs-type': model.get('type') || 'default' }; + var attr = model.get('attributes'); + var src = model.get('src'); + + for (var key in attr) { + attrs[key] = attr[key]; + } + + src && (attrs.src = src); + this.$el.attr(attrs); + this.updateHighlight(); + this.updateStyle(); + }, + + + /** + * Update component content + * @private + * */ + updateContent: function updateContent() { + this.getChildrenContainer().innerHTML = this.model.get('content'); + }, + + + /** + * Prevent default helper + * @param {Event} e + * @private + */ + prevDef: function prevDef(e) { + e.preventDefault(); + }, + + + /** + * Render component's script + * @private + */ + updateScript: function updateScript() { + if (!this.model.get('script')) { + return; + } + + var em = this.em; + if (em) { + var canvas = em.get('Canvas'); + canvas.getCanvasView().updateScript(this); + } + }, + + + /** + * Return children container + * Differently from a simple component where children container is the + * component itself + * + * + * + * You could have the children container more deeper + * + *
    + *
    + *
    + *
    + * + *
    + *
    + *
    + * @return HTMLElement + * @private + */ + getChildrenContainer: function getChildrenContainer() { + var container = this.el; + + if (typeof this.getChildrenSelector == 'function') { + container = this.el.querySelector(this.getChildrenSelector()); + } else if (typeof this.getTemplate == 'function') { + // Need to find deepest first child + } + + return container; + }, + + + /** + * Render children components + * @private + */ + renderChildren: function renderChildren() { + var container = this.getChildrenContainer(); + var view = new ComponentsView({ + collection: this.model.get('components'), + config: this.config, + componentTypes: this.opts.componentTypes + }); + + view.render(container); + this.childrenView = view; + var childNodes = Array.prototype.slice.call(view.el.childNodes); + + for (var i = 0, len = childNodes.length; i < len; i++) { + container.appendChild(childNodes.shift()); + } + + // If the children container is not the same as the component + // (so likely fetched with getChildrenSelector()) is necessary + // to disable pointer-events for all nested components as they + // might prevent the component to be selected + if (container !== this.el) { + var disableNode = function disableNode(el) { + var children = Array.prototype.slice.call(el.children); + children.forEach(function (el) { + el.style['pointer-events'] = 'none'; + if (container !== el) { + disableNode(el); + } + }); + }; + disableNode(this.el); + } + }, + renderAttributes: function renderAttributes() { + this.updateAttributes(); + this.updateClasses(); + }, + render: function render() { + this.renderAttributes(); + this.updateContent(); + this.renderChildren(); + this.updateScript(); + this.onRender(); + return this; + }, + onRender: function onRender() {} +}); + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _underscore = __webpack_require__(1); + +var _mixins = __webpack_require__(2); + +var _Styleable = __webpack_require__(48); + +var _Styleable2 = _interopRequireDefault(_Styleable); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var Backbone = __webpack_require__(0); +var Components = __webpack_require__(51); +var Selector = __webpack_require__(8); +var Selectors = __webpack_require__(11); +var Traits = __webpack_require__(154); +var componentList = {}; +var componentIndex = 0; + +var escapeRegExp = function escapeRegExp(str) { + return str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'); +}; + +var Component = Backbone.Model.extend(_Styleable2.default).extend({ + defaults: { + // HTML tag of the component + tagName: 'div', + + // Component type, eg. 'text', 'image', 'video', etc. + type: '', + + // Name of the component. Will be used, for example, in layers and badges + name: '', + + // True if the component is removable from the canvas + removable: true, + + // Indicates if it's possible to drag the component inside others + // Tip: Indicate an array of selectors where it could be dropped inside + draggable: true, + + // Indicates if it's possible to drop other components inside + // Tip: Indicate an array of selectors which could be dropped inside + droppable: true, + + // Set false if don't want to see the badge (with the name) over the component + badgable: true, + + // True if it's possible to style it + // Tip: + // Indicate an array of CSS properties which is possible to style, eg. ['color', 'width'] + // All other properties will be hidden from the style manager + stylable: true, + + // Indicate an array of style properties to show up which has been marked as `toRequire` + 'stylable-require': '', + + // Indicate an array of style properties which should be hidden from the style manager + unstylable: '', + + // Highlightable with 'dotted' style if true + highlightable: true, + + // True if it's possible to clone the component + copyable: true, + + // Indicates if it's possible to resize the component (at the moment implemented only on Image Components) + // It's also possible to pass an object as options for the Resizer + resizable: false, + + // Allow to edit the content of the component (used on Text components) + editable: false, + + // Hide the component inside Layers + layerable: true, + + // Allow component to be selected when clicked + selectable: true, + + // Shows a highlight outline when hovering on the element if true + hoverable: true, + + // This property is used by the HTML exporter as void elements do not + // have closing tag, eg.
    ,
    , etc. + void: false, + + // Indicates if the component is in some CSS state like ':hover', ':active', etc. + state: '', + + // State, eg. 'selected' + status: '', + + // Content of the component (not escaped) which will be appended before children rendering + content: '', + + // Component icon, this string will be inserted before the name, eg. '' + icon: '', + + // Component related style + style: '', + + // Key-value object of the component's attributes + attributes: '', + + // Array of classes + classes: '', + + // Component's javascript + script: '', + + // Traits + traits: ['id', 'title'], + + // Indicates an array of properties which will be inhereted by + // all NEW appended children + // + // If you create a model likes this + // removable: false, + // draggable: false, + // propagate: ['removable', 'draggable'] + // When you append some new component inside, the new added model + // will get the exact same properties indicated in `propagate` array + // (as the `propagate` property itself) + // + propagate: '', + + /** + * Set an array of items to show up inside the toolbar (eg. move, clone, delete) + * when the component is selected + * toolbar: [{ + * attributes: {class: 'fa fa-arrows'}, + * command: 'tlb-move', + * },{ + * attributes: {class: 'fa fa-clone'}, + * command: 'tlb-clone', + * }] + */ + toolbar: null + }, + + initialize: function initialize() { + var _this = this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var em = opt.em; + + // Propagate properties from parent if indicated + var parent = this.parent(); + var parentAttr = parent && parent.attributes; + + if (parentAttr && parentAttr.propagate) { + var newAttr = {}; + var toPropagate = parentAttr.propagate; + toPropagate.forEach(function (prop) { + return newAttr[prop] = parent.get(prop); + }); + newAttr.propagate = toPropagate; + newAttr = _extends({}, newAttr, props); + this.set(newAttr); + } + + var propagate = this.get('propagate'); + propagate && this.set('propagate', (0, _underscore.isArray)(propagate) ? propagate : [propagate]); + + // Check void elements + if (opt && opt.config && opt.config.voidElements.indexOf(this.get('tagName')) >= 0) { + this.set('void', true); + } + + opt.em = em; + this.opt = opt; + this.em = em; + this.config = opt.config || {}; + this.ccid = Component.createId(this); + this.set('attributes', this.get('attributes') || {}); + this.listenTo(this, 'change:script', this.scriptUpdated); + this.listenTo(this, 'change:traits', this.traitsUpdated); + this.listenTo(this, 'change:tagName', this.tagUpdated); + this.listenTo(this, 'change:attributes', this.attrUpdated); + this.initClasses(); + this.loadTraits(); + this.initComponents(); + this.initToolbar(); + this.set('status', ''); + + // Register global updates for collection properties + ['classes', 'traits'].forEach(function (name) { + return _this.listenTo(_this.get(name), 'add remove change', function () { + return _this.emitUpdate(name); + }); + }); + this.init(); + }, + + + /** + * Check component's type + * @param {string} type Component type + * @return {Boolean} + * @example + * model.is('image') + * // -> false + */ + is: function is(type) { + return !!(this.get('type') == type); + }, + + + /** + * Find inner models by query string + * ATTENTION: this method works only with alredy rendered component + * @param {string} query Query string + * @return {Array} Array of models + * @example + * model.find('div > .class'); + * // -> [Component, Component, ...] + */ + find: function find(query) { + var result = []; + + this.view.$el.find(query).each(function (el, i, $els) { + var $el = $els.eq(i); + var model = $el.data('model'); + model && result.push(model); + }); + + return result; + }, + + + /** + * Find closest model by query string + * ATTENTION: this method works only with alredy rendered component + * @param {string} query Query string + * @return {Component} + * @example + * model.closest('div'); + */ + closest: function closest(query) { + var result = this.view.$el.closest(query); + return result.length && result.data('model'); + }, + + + /** + * Once the tag is updated I have to remove the node and replace it + */ + tagUpdated: function tagUpdated() { + var coll = this.collection; + var at = coll.indexOf(this); + coll.remove(this); + coll.add(this, { at: at }); + }, + + + /** + * Replace a component with another one + * @param {String|Component} el Component or HTML string + * @return {Array|Component} New added component/s + * @private + */ + replaceWith: function replaceWith(el) { + var coll = this.collection; + var at = coll.indexOf(this); + coll.remove(this); + return coll.add(el, { at: at }); + }, + + + /** + * Emit changes for each updated attribute + */ + attrUpdated: function attrUpdated() { + var _this2 = this; + + var attrPrev = _extends({}, this.previous('attributes')); + var attrCurrent = _extends({}, this.get('attributes')); + var diff = (0, _mixins.shallowDiff)(attrPrev, attrCurrent); + (0, _underscore.keys)(diff).forEach(function (pr) { + return _this2.trigger('change:attributes:' + pr); + }); + }, + + + /** + * Update attributes of the model + * @param {Object} attrs Key value attributes + * @example + * model.setAttributes({id: 'test', 'data-key': 'value'}); + */ + setAttributes: function setAttributes(attrs) { + attrs = _extends({}, attrs); + + // Handle classes + var classes = attrs.class; + classes && this.setClass(classes); + delete attrs.class; + + // Handle style + var style = attrs.style; + style && this.setStyle(style); + delete attrs.style; + + this.set('attributes', attrs); + }, + + + /** + * Add attributes to the model + * @param {Object} attrs Key value attributes + * @example + * model.addAttributes({id: 'test'}); + */ + addAttributes: function addAttributes(attrs) { + var newAttrs = _extends({}, this.getAttributes(), attrs); + this.setAttributes(newAttrs); + }, + getStyle: function getStyle() { + var em = this.em; + + if (em && em.getConfig('avoidInlineStyle')) { + var state = this.get('state'); + var cc = em.get('CssComposer'); + var rule = cc.getIdRule(this.getId(), { state: state }); + this.rule = rule; + + if (rule) { + return rule.getStyle(); + } + } + + return _Styleable2.default.getStyle.call(this); + }, + setStyle: function setStyle() { + var _this3 = this; + + var prop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var em = this.em; + + if (em && em.getConfig('avoidInlineStyle')) { + prop = (0, _underscore.isString)(prop) ? this.parseStyle(prop) : prop; + prop = _extends({}, prop, this.get('style')); + var state = this.get('state'); + var cc = em.get('CssComposer'); + var propOrig = this.getStyle(); + this.rule = cc.setIdRule(this.getId(), prop, _extends({}, opts, { state: state })); + var diff = (0, _mixins.shallowDiff)(propOrig, prop); + this.set('style', {}, { silent: 1 }); + (0, _underscore.keys)(diff).forEach(function (pr) { + return _this3.trigger('change:style:' + pr); + }); + } else { + prop = _Styleable2.default.setStyle.apply(this, arguments); + } + + return prop; + }, + + + /** + * Return attributes + * @return {Object} + */ + getAttributes: function getAttributes() { + var em = this.em; + + var classes = []; + var attributes = _extends({}, this.get('attributes')); + var sm = em && em.get('SelectorManager'); + var id = this.getId(); + + // Add classes + this.get('classes').each(function (cls) { + return classes.push(cls.get('name')); + }); + classes.length && (attributes.class = classes.join(' ')); + + // If the rule is setted we need an ID attached to the component + if (!(0, _underscore.has)(attributes, 'id') && sm && sm.get(id, sm.Selector.TYPE_ID)) { + attributes.id = this.getId(); + } + + return attributes; + }, + + + /** + * Add classes + * @param {Array|string} classes Array or string of classes + * @return {Array} Array of added selectors + * @example + * model.addClass('class1'); + * model.addClass('class1 class2'); + * model.addClass(['class1', 'class2']); + * // -> [SelectorObject, ...] + */ + addClass: function addClass(classes) { + var added = this.em.get('SelectorManager').addClass(classes); + return this.get('classes').add(added); + }, + + + /** + * Set classes (resets current collection) + * @param {Array|string} classes Array or string of classes + * @return {Array} Array of added selectors + * @example + * model.setClass('class1'); + * model.setClass('class1 class2'); + * model.setClass(['class1', 'class2']); + * // -> [SelectorObject, ...] + */ + setClass: function setClass(classes) { + this.get('classes').reset(); + return this.addClass(classes); + }, + + + /** + * Remove classes + * @param {Array|string} classes Array or string of classes + * @return {Array} Array of removed selectors + * @example + * model.removeClass('class1'); + * model.removeClass('class1 class2'); + * model.removeClass(['class1', 'class2']); + * // -> [SelectorObject, ...] + */ + removeClass: function removeClass(classes) { + var removed = []; + classes = (0, _underscore.isArray)(classes) ? classes : [classes]; + var selectors = this.get('classes'); + var type = Selector.TYPE_CLASS; + + classes.forEach(function (classe) { + var classes = classe.split(' '); + classes.forEach(function (name) { + var selector = selectors.where({ name: name, type: type })[0]; + selector && removed.push(selectors.remove(selector)); + }); + }); + + return removed; + }, + initClasses: function initClasses() { + var classes = this.normalizeClasses(this.get('classes') || []); + this.set('classes', new Selectors(classes)); + return this; + }, + initComponents: function initComponents() { + // Have to add components after the init, otherwise the parent + // is not visible + var comps = new Components(null, this.opt); + comps.parent = this; + !this.opt.avoidChildren && comps.reset(this.get('components')); + this.set('components', comps); + return this; + }, + + + /** + * Initialize callback + */ + init: function init() {}, + + + /** + * Add new component children + * @param {Component|string} components Component to add + * @param {Object} [opts={}] Options, same as in `model.add()`(from backbone) + * @return {Array} Array of appended components + * @example + * someModel.get('components').length // -> 0 + * const videoComponent = someModel.append('
    ')[0]; + * // This will add 2 components (`video` and `div`) to your `someModel` + * someModel.get('components').length // -> 2 + * // You can pass components directly + * otherModel.append(otherModel2); + * otherModel.append([otherModel3, otherModel4]); + */ + append: function append(components) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var result = this.components().add(components, opts); + return (0, _underscore.isArray)(result) ? result : [result]; + }, + + + /** + * Set new collection if `components` are provided, otherwise the + * current collection is returned + * @param {Component|string} [components] Components to set + * @return {Collection|undefined} + * @example + * // Get current collection + * const collection = model.components(); + * // Set new collection + * model.components('
    '); + */ + components: function components(_components) { + var coll = this.get('components'); + + if ((0, _underscore.isUndefined)(_components)) { + return coll; + } else { + coll.reset(); + _components && this.append(_components); + } + }, + + + /** + * Get parent model + * @return {Component} + */ + parent: function parent() { + var coll = this.collection; + return coll && coll.parent; + }, + + + /** + * Script updated + */ + scriptUpdated: function scriptUpdated() { + this.set('scriptUpdated', 1); + }, + + + /** + * Once traits are updated I have to populates model's attributes + */ + traitsUpdated: function traitsUpdated() { + var found = 0; + var attrs = _extends({}, this.get('attributes')); + var traits = this.get('traits'); + + if (!(traits instanceof Traits)) { + this.loadTraits(); + return; + } + + traits.each(function (trait) { + found = 1; + if (!trait.get('changeProp')) { + var name = trait.get('name'); + var value = trait.getInitValue(); + if (name && value) { + attrs[name] = value; + } + } + }); + + found && this.set('attributes', attrs); + }, + + + /** + * Init toolbar + */ + initToolbar: function initToolbar() { + var model = this; + if (!model.get('toolbar')) { + var tb = []; + if (model.collection) { + tb.push({ + attributes: { class: 'fa fa-arrow-up' }, + command: 'select-parent' + }); + } + if (model.get('draggable')) { + tb.push({ + attributes: { class: 'fa fa-arrows', draggable: true }, + //events: hasDnd(this.em) ? { dragstart: 'execCommand' } : '', + command: 'tlb-move' + }); + } + if (model.get('copyable')) { + tb.push({ + attributes: { class: 'fa fa-clone' }, + command: 'tlb-clone' + }); + } + if (model.get('removable')) { + tb.push({ + attributes: { class: 'fa fa-trash-o' }, + command: 'tlb-delete' + }); + } + model.set('toolbar', tb); + } + }, + + + /** + * Load traits + * @param {Array} traits + * @private + */ + loadTraits: function loadTraits(traits) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var trt = new Traits([], this.opt); + trt.setTarget(this); + traits = traits || this.get('traits'); + + if (traits.length) { + trt.add(traits); + } + + this.set('traits', trt, opts); + return this; + }, + + + /** + * Normalize input classes from array to array of objects + * @param {Array} arr + * @return {Array} + * @private + */ + normalizeClasses: function normalizeClasses(arr) { + var res = []; + var em = this.em; + + if (!em) return; + + var clm = em.get('SelectorManager'); + if (!clm) return; + + arr.forEach(function (val) { + var name = ''; + + if (typeof val === 'string') name = val;else name = val.name; + + var model = clm.add(name); + res.push(model); + }); + return res; + }, + + + /** + * Override original clone method + * @private + */ + clone: function clone() { + var em = this.em; + var style = this.getStyle(); + var attr = _extends({}, this.attributes); + var opts = _extends({}, this.opt); + attr.attributes = _extends({}, attr.attributes); + delete attr.attributes.id; + attr.components = []; + attr.classes = []; + attr.traits = []; + + this.get('components').each(function (md, i) { + attr.components[i] = md.clone(); + }); + this.get('traits').each(function (md, i) { + attr.traits[i] = md.clone(); + }); + this.get('classes').each(function (md, i) { + attr.classes[i] = md.get('name'); + }); + + attr.status = ''; + attr.view = ''; + opts.collection = null; + + if (em && em.getConfig('avoidInlineStyle') && !(0, _underscore.isEmpty)(style)) { + attr.style = style; + } + + return new this.constructor(attr, opts); + }, + + + /** + * Get the name of the component + * @return {string} + * */ + getName: function getName() { + var customName = this.get('name') || this.get('custom-name'); + var tag = this.get('tagName'); + tag = tag == 'div' ? 'box' : tag; + var name = this.get('type') || tag; + name = name.charAt(0).toUpperCase() + name.slice(1); + return customName || name; + }, + + + /** + * Get the icon string + * @return {string} + */ + getIcon: function getIcon() { + var icon = this.get('icon'); + return icon ? icon + ' ' : ''; + }, + + + /** + * Return HTML string of the component + * @param {Object} opts Options + * @return {string} HTML string + * @private + */ + toHTML: function toHTML() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var model = this; + var attrs = []; + var classes = []; + var tag = model.get('tagName'); + var sTag = model.get('void'); + var customAttr = opts.attributes; + var attributes = this.getAttrToHTML(); + + // Get custom attributes if requested + if (customAttr) { + if ((0, _underscore.isFunction)(customAttr)) { + attributes = customAttr(model, attributes) || {}; + } else if ((0, _underscore.isObject)(customAttr)) { + attributes = customAttr; + } + } + + for (var attr in attributes) { + var val = attributes[attr]; + var value = (0, _underscore.isString)(val) ? val.replace(/"/g, '"') : val; + + if (!(0, _underscore.isUndefined)(value)) { + if ((0, _underscore.isBoolean)(value)) { + value && attrs.push(attr); + } else { + attrs.push(attr + '="' + value + '"'); + } + } + } + + var attrString = attrs.length ? ' ' + attrs.join(' ') : ''; + var code = '<' + tag + attrString + (sTag ? '/' : '') + '>' + model.get('content'); + model.get('components').each(function (comp) { + return code += comp.toHTML(opts); + }); + !sTag && (code += ''); + + return code; + }, + + + /** + * Returns object of attributes for HTML + * @return {Object} + * @private + */ + getAttrToHTML: function getAttrToHTML() { + var attr = this.getAttributes(); + delete attr.style; + return attr; + }, + + + /** + * Return a shallow copy of the model's attributes for JSON + * stringification. + * @return {Object} + * @private + */ + toJSON: function toJSON() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var obj = Backbone.Model.prototype.toJSON.apply(this, args); + obj.attributes = this.getAttributes(); + delete obj.attributes.class; + delete obj.toolbar; + + if (this.em.getConfig('avoidDefaults')) { + var defaults = (0, _underscore.result)(this, 'defaults'); + + (0, _underscore.forEach)(defaults, function (value, key) { + if (['type', 'content'].indexOf(key) === -1 && obj[key] === value) { + delete obj[key]; + } + }); + + if ((0, _underscore.isEmpty)(obj.type)) { + delete obj.type; + } + + (0, _underscore.forEach)(['attributes', 'style'], function (prop) { + if ((0, _underscore.isEmpty)(defaults[prop]) && (0, _underscore.isEmpty)(obj[prop])) { + delete obj[prop]; + } + }); + + (0, _underscore.forEach)(['classes', 'components'], function (prop) { + if ((0, _underscore.isEmpty)(defaults[prop]) && !obj[prop].length) { + delete obj[prop]; + } + }); + } + + return obj; + }, + + + /** + * Return model id + * @return {string} + */ + getId: function getId() { + var attrs = this.get('attributes') || {}; + return attrs.id || this.ccid || this.cid; + }, + + + /** + * Return model id + * @param {String} id + * @return {self} + */ + setId: function setId(id) { + var attrs = _extends({}, this.get('attributes')); + attrs.id = id; + this.set('attributes', attrs); + return this; + }, + + + /** + * Get the DOM element of the model. This works only of the + * model is alredy rendered + * @return {HTMLElement} + */ + getEl: function getEl() { + return this.view && this.view.el; + }, + + + /** + * Return script in string format, cleans 'function() {..' from scripts + * if it's a function + * @param {string|Function} script + * @return {string} + * @private + */ + getScriptString: function getScriptString(script) { + var _this4 = this; + + var scr = script || this.get('script'); + + if (!scr) { + return scr; + } + + // Need to convert script functions to strings + if (typeof scr == 'function') { + var scrStr = scr.toString().trim(); + scrStr = scrStr.replace(/^function[\s\w]*\(\)\s?\{/, '').replace(/\}$/, ''); + scr = scrStr.trim(); + } + + var config = this.em.getConfig(); + var tagVarStart = escapeRegExp(config.tagVarStart || '{[ '); + var tagVarEnd = escapeRegExp(config.tagVarEnd || ' ]}'); + var reg = new RegExp(tagVarStart + '([\\w\\d-]*)' + tagVarEnd, 'g'); + scr = scr.replace(reg, function (match, v) { + // If at least one match is found I have to track this change for a + // better optimization inside JS generator + _this4.scriptUpdated(); + return _this4.attributes[v] || ''; + }); + + return scr; + }, + emitUpdate: function emitUpdate(property) { + var em = this.em; + var event = 'component:update' + (property ? ':' + property : ''); + em && em.trigger(event, this); + }, + + + /** + * Execute callback function on all components + * @param {Function} clb Callback function, the model is passed as an argument + * @return {self} + */ + onAll: function onAll(clb) { + if ((0, _underscore.isFunction)(clb)) { + clb(this); + this.components().forEach(function (model) { + return model.onAll(clb); + }); + } + return this; + }, + + + /** + * Reset id of the component and any of its style rule + * @param {Object} [opts={}] Options + * @return {self} + */ + resetId: function resetId() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var em = this.em; + + var oldId = this.getId(); + if (!oldId) return; + var newId = Component.createId(this); + this.setId(newId); + var rule = em && em.get('CssComposer').getIdRule(oldId); + var selector = rule && rule.get('selectors').at(0); + selector && selector.set('name', newId); + return this; + } +}, { + /** + * Detect if the passed element is a valid component. + * In case the element is valid an object abstracted + * from the element will be returned + * @param {HTMLElement} + * @return {Object} + * @private + */ + isComponent: function isComponent(el) { + return { tagName: el.tagName ? el.tagName.toLowerCase() : '' }; + }, + + + /** + * Relying simply on the number of components becomes a problem when you + * store and load them back, you might hit collisions with new components + * @param {Model} model + * @return {string} + */ + createId: function createId(model) { + componentIndex++; + // Testing 1000000 components with `+ 2` returns 0 collisions + var ilen = componentIndex.toString().length + 2; + var uid = (Math.random() + 1.1).toString(36).slice(-ilen); + var nextId = 'i' + uid; + componentList[nextId] = model; + return nextId; + }, + getList: function getList() { + return componentList; + } +}); + +module.exports = Component; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +var _underscore = __webpack_require__(1); + +var _mixins = __webpack_require__(2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var clearProp = 'data-clear-style'; + +module.exports = _backbone2.default.View.extend({ + template: function template(model) { + var pfx = this.pfx; + return '\n
    \n ' + this.templateLabel(model) + '\n
    \n
    \n ' + this.templateInput(model) + '\n
    \n '; + }, + templateLabel: function templateLabel(model) { + var pfx = this.pfx; + var icon = model.get('icon'); + var info = model.get('info'); + return '\n \n ' + model.get('name') + '\n \n \n '; + }, + templateInput: function templateInput(model) { + return '\n
    \n \n
    \n '; + }, + + + events: _defineProperty({ + change: 'inputValueChanged' + }, 'click [' + clearProp + ']', 'clear'), + + initialize: function initialize() { + var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + (0, _underscore.bindAll)(this, 'targetUpdated'); + this.config = o.config || {}; + var em = this.config.em; + this.em = em; + this.pfx = this.config.stylePrefix || ''; + this.ppfx = this.config.pStylePrefix || ''; + this.target = o.target || {}; + this.propTarget = o.propTarget || {}; + this.onChange = o.onChange; + this.onInputRender = o.onInputRender || {}; + this.customValue = o.customValue || {}; + var model = this.model; + this.property = model.get('property'); + this.input = null; + var pfx = this.pfx; + this.inputHolderId = '#' + pfx + 'input-holder'; + this.sector = model.collection && model.collection.sector; + model.view = this; + + if (!model.get('value')) { + model.set('value', model.getDefaultValue()); + } + + em && em.on('update:component:style:' + this.property, this.targetUpdated); + //em && em.on(`styleable:change:${this.property}`, this.targetUpdated); + this.listenTo(this.propTarget, 'update', this.targetUpdated); + this.listenTo(model, 'destroy remove', this.remove); + this.listenTo(model, 'change:value', this.modelValueChanged); + this.listenTo(model, 'targetUpdated', this.targetUpdated); + this.listenTo(model, 'change:visible', this.updateVisibility); + this.listenTo(model, 'change:status', this.updateStatus); + + var init = this.init && this.init.bind(this); + init && init(); + }, + + + /** + * Triggers when the status changes. The status indicates if the value of + * the proprerty is changed or inherited + * @private + */ + updateStatus: function updateStatus() { + var status = this.model.get('status'); + var pfx = this.pfx; + var ppfx = this.ppfx; + var config = this.config; + var updatedCls = ppfx + 'four-color'; + var computedCls = ppfx + 'color-warn'; + var labelEl = this.$el.children('.' + pfx + 'label'); + var clearStyle = this.getClearEl().style; + labelEl.removeClass(updatedCls + ' ' + computedCls); + clearStyle.display = 'none'; + + switch (status) { + case 'updated': + labelEl.addClass(updatedCls); + + if (config.clearProperties) { + clearStyle.display = 'inline'; + } + break; + case 'computed': + labelEl.addClass(computedCls); + break; + } + }, + + + /** + * Clear the property from the target + */ + clear: function clear(e) { + e && e.stopPropagation(); + this.model.clearValue(); + this.targetUpdated(); + }, + + + /** + * Get clear element + * @return {HTMLElement} + */ + getClearEl: function getClearEl() { + if (!this.clearEl) { + this.clearEl = this.el.querySelector('[' + clearProp + ']'); + } + + return this.clearEl; + }, + + + /** + * Returns selected target which should have 'style' property + * @return {Model|null} + */ + getTarget: function getTarget() { + return this.getTargetModel(); + }, + + + /** + * Returns Styleable model + * @return {Model|null} + */ + getTargetModel: function getTargetModel() { + return this.propTarget && this.propTarget.model; + }, + + + /** + * Returns helper Styleable model + * @return {Model|null} + */ + getHelperModel: function getHelperModel() { + return this.propTarget && this.propTarget.helper; + }, + + + /** + * Triggers when the value of element input/s is changed, so have to update + * the value of the model which will propogate those changes to the target + */ + inputValueChanged: function inputValueChanged(e) { + e && e.stopPropagation(); + this.model.setValue(this.getInputValue(), 1, { fromInput: 1 }); + this.elementUpdated(); + }, + + + /** + * Fired when the element of the property is updated + */ + elementUpdated: function elementUpdated() { + this.setStatus('updated'); + }, + setStatus: function setStatus(value) { + this.model.set('status', value); + var parent = this.model.parent; + parent && parent.set('status', value); + }, + + + /** + * Fired when the target is changed + * */ + targetUpdated: function targetUpdated() { + if (!this.checkVisibility()) { + return; + } + + var config = this.config; + var em = config.em; + var model = this.model; + var value = ''; + var status = ''; + var targetValue = this.getTargetValue({ ignoreDefault: 1 }); + var defaultValue = model.getDefaultValue(); + var computedValue = this.getComputedValue(); + + if (targetValue) { + value = targetValue; + + if (config.highlightChanged) { + status = 'updated'; + } + } else if (computedValue && config.showComputed && computedValue != defaultValue) { + value = computedValue; + + if (config.highlightComputed) { + status = 'computed'; + } + } else { + value = defaultValue; + status = ''; + } + + model.setValue(value, 0, { fromTarget: 1 }); + this.setStatus(status); + + if (em) { + em.trigger('styleManager:change', this); + em.trigger('styleManager:change:' + model.get('property'), this); + } + }, + checkVisibility: function checkVisibility() { + var result = 1; + + // Check if need to hide the property + if (this.config.hideNotStylable) { + if (!this.isTargetStylable() || !this.isComponentStylable()) { + this.hide(); + result = 0; + } else { + this.show(); + } + // Sector is not passed to Composite and Stack types + if (this.sector) { + this.sector.trigger('updateVisibility'); + } + } + + return result; + }, + + + /** + * Get the value of this property from the target (eg, Component, CSSRule) + * @param {Object} [opts] Options + * @param {Boolean} [options.fetchFromFunction] + * @param {Boolean} [options.ignoreDefault] + * @return string + * @private + */ + getTargetValue: function getTargetValue() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var result; + var model = this.model; + var target = this.getTargetModel(); + var customFetchValue = this.customValue; + + if (!target) { + return result; + } + + result = target.getStyle()[model.get('property')]; + + if (!result && !opts.ignoreDefault) { + result = model.getDefaultValue(); + } + + if (typeof customFetchValue == 'function' && !opts.ignoreCustomValue) { + var index = model.collection.indexOf(model); + var customValue = customFetchValue(this, index); + + if (customValue) { + result = customValue; + } + } + + return result; + }, + + + /** + * Returns computed value + * @return {String} + * @private + */ + getComputedValue: function getComputedValue() { + var target = this.propTarget; + var computed = target.computed || {}; + var computedDef = target.computedDefault || {}; + var avoid = this.config.avoidComputed || []; + var property = this.model.get('property'); + var notToSkip = avoid.indexOf(property) < 0; + var value = computed[property]; + var valueDef = computedDef[(0, _mixins.camelCase)(property)]; + return computed && notToSkip && valueDef !== value && value; + }, + + + /** + * Returns value from input + * @return {string} + */ + getInputValue: function getInputValue() { + var input = this.getInputEl(); + return input ? input.value : ''; + }, + + + /** + * Triggers when the `value` of the model changes, so the target and + * the input element should be updated + * @param {Object} e Event + * @param {Mixed} val Value + * @param {Object} opt Options + * */ + modelValueChanged: function modelValueChanged(e, val) { + var opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var em = this.config.em; + var model = this.model; + var value = model.getFullValue(); + var target = this.getTarget(); + var onChange = this.onChange; + + // Avoid element update if the change comes from it + if (!opt.fromInput) { + this.setValue(value); + } + + // Check if component is allowed to be styled + if (!target || !this.isTargetStylable() || !this.isComponentStylable()) { + return; + } + + // Avoid target update if the changes comes from it + if (!opt.fromTarget) { + // The onChange is used by Composite/Stack properties, so I'd avoid sending + // it back if the change comes from one of those + if (onChange && !opt.fromParent) { + onChange(target, this, opt); + } else { + this.updateTargetStyle(value, null, opt); + } + } + + if (em) { + em.trigger('component:update', target); + em.trigger('component:styleUpdate', target); + em.trigger('component:styleUpdate:' + model.get('property'), target); + } + }, + + + /** + * Update target style + * @param {string} value + * @param {string} name + * @param {Object} opts + */ + updateTargetStyle: function updateTargetStyle(value) { + var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var property = name || this.model.get('property'); + var target = this.getTarget(); + var style = target.getStyle(); + + if (value) { + style[property] = value; + } else { + delete style[property]; + } + + target.setStyle(style, opts); + + // Helper is used by `states` like ':hover' to show its preview + var helper = this.getHelperModel(); + helper && helper.setStyle(style, opts); + }, + + + /** + * Check if target is stylable with this property + * The target could be the Component as the CSS Rule + * @return {Boolean} + */ + isTargetStylable: function isTargetStylable(target) { + var trg = target || this.getTarget(); + var model = this.model; + var property = model.get('property'); + var toRequire = model.get('toRequire'); + var unstylable = trg.get('unstylable'); + var stylableReq = trg.get('stylable-require'); + var stylable = trg.get('stylable'); + + // Stylable could also be an array indicating with which property + // the target could be styled + if ((0, _underscore.isArray)(stylable)) { + stylable = stylable.indexOf(property) >= 0; + } + + // Check if the property was signed as unstylable + if ((0, _underscore.isArray)(unstylable)) { + stylable = unstylable.indexOf(property) < 0; + } + + // Check if the property is available only if requested + if (toRequire) { + stylable = stylableReq && stylableReq.indexOf(property) >= 0 || !target; + } + + return stylable; + }, + + + /** + * Check if the selected component is stylable with this property + * The target could be the Component as the CSS Rule + * @return {Boolean} + */ + isComponentStylable: function isComponentStylable() { + var em = this.em; + var component = em && em.getSelected(); + + if (!component) { + return true; + } + + return this.isTargetStylable(component); + }, + + + /** + * Passed a raw value you have to update the input element, generally + * is the value fetched from targets, so you can receive values with + * functions, units, etc. (eg. `rotateY(45deg)`) + * get also + * @param {string} value + * @private + */ + setRawValue: function setRawValue(value) { + this.setValue(this.model.parseValue(value)); + }, + + + /** + * Update the element input. + * Usually the value is a result of `model.getFullValue()` + * @param {String} value The value from the model + * */ + setValue: function setValue(value) { + var model = this.model; + var val = (0, _underscore.isUndefined)(value) ? model.getDefaultValue() : value; + var input = this.getInputEl(); + input && (input.value = val); + }, + getInputEl: function getInputEl() { + if (!this.input) { + this.input = this.el.querySelector('input'); + } + + return this.input; + }, + updateVisibility: function updateVisibility() { + this.el.style.display = this.model.get('visible') ? 'block' : 'none'; + }, + show: function show() { + this.model.set('visible', 1); + }, + hide: function hide() { + this.model.set('visible', 0); + }, + + + /** + * Clean input + * */ + cleanValue: function cleanValue() { + this.setValue(''); + }, + render: function render() { + var pfx = this.pfx; + var model = this.model; + var el = this.el; + el.innerHTML = this.template(model); + el.className = pfx + 'property ' + pfx + model.get('type'); + this.updateStatus(); + + var onRender = this.onRender && this.onRender.bind(this); + onRender && onRender(); + this.setValue(model.get('value'), { targetUpdate: 1 }); + } +}); + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// This is CodeMirror (http://codemirror.net), a code editor +// implemented in JavaScript on top of the browser's DOM. +// +// You can find some technical background for some of the code below +// at http://marijnhaverbeke.nl/blog/#cm-internals . + +(function (global, factory) { + true ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.CodeMirror = factory()); +}(this, (function () { 'use strict'; + +// Kludges for bugs and behavior differences that can't be feature +// detected are enabled based on userAgent etc sniffing. +var userAgent = navigator.userAgent; +var platform = navigator.platform; + +var gecko = /gecko\/\d/i.test(userAgent); +var ie_upto10 = /MSIE \d/.test(userAgent); +var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); +var edge = /Edge\/(\d+)/.exec(userAgent); +var ie = ie_upto10 || ie_11up || edge; +var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); +var webkit = !edge && /WebKit\//.test(userAgent); +var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); +var chrome = !edge && /Chrome\//.test(userAgent); +var presto = /Opera\//.test(userAgent); +var safari = /Apple Computer/.test(navigator.vendor); +var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); +var phantom = /PhantomJS/.test(userAgent); + +var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent); +var android = /Android/.test(userAgent); +// This is woefully incomplete. Suggestions for alternative methods welcome. +var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); +var mac = ios || /Mac/.test(platform); +var chromeOS = /\bCrOS\b/.test(userAgent); +var windows = /win/i.test(platform); + +var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); +if (presto_version) { presto_version = Number(presto_version[1]); } +if (presto_version && presto_version >= 15) { presto = false; webkit = true; } +// Some browsers use the wrong event properties to signal cmd/ctrl on OS X +var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); +var captureRightClick = gecko || (ie && ie_version >= 9); + +function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } + +var rmClass = function(node, cls) { + var current = node.className; + var match = classTest(cls).exec(current); + if (match) { + var after = current.slice(match.index + match[0].length); + node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); + } +}; + +function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + { e.removeChild(e.firstChild); } + return e +} + +function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e) +} + +function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) { e.className = className; } + if (style) { e.style.cssText = style; } + if (typeof content == "string") { e.appendChild(document.createTextNode(content)); } + else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } } + return e +} +// wrapper for elt, which removes the elt from the accessibility tree +function eltP(tag, content, className, style) { + var e = elt(tag, content, className, style); + e.setAttribute("role", "presentation"); + return e +} + +var range; +if (document.createRange) { range = function(node, start, end, endNode) { + var r = document.createRange(); + r.setEnd(endNode || node, end); + r.setStart(node, start); + return r +}; } +else { range = function(node, start, end) { + var r = document.body.createTextRange(); + try { r.moveToElementText(node.parentNode); } + catch(e) { return r } + r.collapse(true); + r.moveEnd("character", end); + r.moveStart("character", start); + return r +}; } + +function contains(parent, child) { + if (child.nodeType == 3) // Android browser always returns false when child is a textnode + { child = child.parentNode; } + if (parent.contains) + { return parent.contains(child) } + do { + if (child.nodeType == 11) { child = child.host; } + if (child == parent) { return true } + } while (child = child.parentNode) +} + +function activeElt() { + // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. + // IE < 10 will throw when accessed while the page is loading or in an iframe. + // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. + var activeElement; + try { + activeElement = document.activeElement; + } catch(e) { + activeElement = document.body || null; + } + while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) + { activeElement = activeElement.shadowRoot.activeElement; } + return activeElement +} + +function addClass(node, cls) { + var current = node.className; + if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; } +} +function joinClasses(a, b) { + var as = a.split(" "); + for (var i = 0; i < as.length; i++) + { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } } + return b +} + +var selectInput = function(node) { node.select(); }; +if (ios) // Mobile Safari apparently has a bug where select() is broken. + { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; } +else if (ie) // Suppress mysterious IE10 errors + { selectInput = function(node) { try { node.select(); } catch(_e) {} }; } + +function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function(){return f.apply(null, args)} +} + +function copyObj(obj, target, overwrite) { + if (!target) { target = {}; } + for (var prop in obj) + { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) + { target[prop] = obj[prop]; } } + return target +} + +// Counts the column offset in a string, taking tabs into account. +// Used mostly to find indentation. +function countColumn(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) { end = string.length; } + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i); + if (nextTab < 0 || nextTab >= end) + { return n + (end - i) } + n += nextTab - i; + n += tabSize - (n % tabSize); + i = nextTab + 1; + } +} + +var Delayed = function() {this.id = null;}; +Delayed.prototype.set = function (ms, f) { + clearTimeout(this.id); + this.id = setTimeout(f, ms); +}; + +function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) + { if (array[i] == elt) { return i } } + return -1 +} + +// Number of pixels added to scroller and sizer to hide scrollbar +var scrollerGap = 30; + +// Returned or thrown by various protocols to signal 'I'm not +// handling this'. +var Pass = {toString: function(){return "CodeMirror.Pass"}}; + +// Reused option objects for setSelection & friends +var sel_dontScroll = {scroll: false}; +var sel_mouse = {origin: "*mouse"}; +var sel_move = {origin: "+move"}; + +// The inverse of countColumn -- find the offset that corresponds to +// a particular column. +function findColumn(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos); + if (nextTab == -1) { nextTab = string.length; } + var skipped = nextTab - pos; + if (nextTab == string.length || col + skipped >= goal) + { return pos + Math.min(skipped, goal - col) } + col += nextTab - pos; + col += tabSize - (col % tabSize); + pos = nextTab + 1; + if (col >= goal) { return pos } + } +} + +var spaceStrs = [""]; +function spaceStr(n) { + while (spaceStrs.length <= n) + { spaceStrs.push(lst(spaceStrs) + " "); } + return spaceStrs[n] +} + +function lst(arr) { return arr[arr.length-1] } + +function map(array, f) { + var out = []; + for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); } + return out +} + +function insertSorted(array, value, score) { + var pos = 0, priority = score(value); + while (pos < array.length && score(array[pos]) <= priority) { pos++; } + array.splice(pos, 0, value); +} + +function nothing() {} + +function createObj(base, props) { + var inst; + if (Object.create) { + inst = Object.create(base); + } else { + nothing.prototype = base; + inst = new nothing(); + } + if (props) { copyObj(props, inst); } + return inst +} + +var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; +function isWordCharBasic(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)) +} +function isWordChar(ch, helper) { + if (!helper) { return isWordCharBasic(ch) } + if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true } + return helper.test(ch) +} + +function isEmpty(obj) { + for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } } + return true +} + +// Extending unicode characters. A series of a non-extending char + +// any number of extending chars is treated as a single unit as far +// as editing and measuring is concerned. This is not fully correct, +// since some scripts/fonts/browsers also treat other configurations +// of code points as a group. +var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; +function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) } + +// Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. +function skipExtendingChars(str, pos, dir) { + while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; } + return pos +} + +// Returns the value from the range [`from`; `to`] that satisfies +// `pred` and is closest to `from`. Assumes that at least `to` +// satisfies `pred`. Supports `from` being greater than `to`. +function findFirst(pred, from, to) { + // At any point we are certain `to` satisfies `pred`, don't know + // whether `from` does. + var dir = from > to ? -1 : 1; + for (;;) { + if (from == to) { return from } + var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF); + if (mid == from) { return pred(mid) ? from : to } + if (pred(mid)) { to = mid; } + else { from = mid + dir; } + } +} + +// The display handles the DOM integration, both for input reading +// and content drawing. It holds references to DOM nodes and +// display-related state. + +function Display(place, doc, input) { + var d = this; + this.input = input; + + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + d.scrollbarFiller.setAttribute("cm-not-content", "true"); + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); + d.gutterFiller.setAttribute("cm-not-content", "true"); + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = eltP("div", null, "CodeMirror-code"); + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + d.cursorDiv = elt("div", null, "CodeMirror-cursors"); + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure"); + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], + null, "position: relative; outline: none"); + var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); + // Moved around its parent to cover visible view. + d.mover = elt("div", [lines], null, "position: relative"); + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + d.sizerWidth = null; + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } + if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; } + + if (place) { + if (place.appendChild) { place.appendChild(d.wrapper); } + else { place(d.wrapper); } + } + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first; + d.reportedViewFrom = d.reportedViewTo = doc.first; + // Information about the rendered lines. + d.view = []; + d.renderedView = null; + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null; + // Empty space (in pixels) above the view + d.viewOffset = 0; + d.lastWrapHeight = d.lastWrapWidth = 0; + d.updateLineNumbers = null; + + d.nativeBarWidth = d.barHeight = d.barWidth = 0; + d.scrollbarsClipped = false; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false; + + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null; + d.maxLineLength = 0; + d.maxLineChanged = false; + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; + + // True when shift is held down. + d.shift = false; + + // Used to track whether anything happened since the context menu + // was opened. + d.selForContextMenu = null; + + d.activeTouch = null; + + input.init(d); +} + +// Find the line object corresponding to the given line number. +function getLine(doc, n) { + n -= doc.first; + if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") } + var chunk = doc; + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break } + n -= sz; + } + } + return chunk.lines[n] +} + +// Get the part of a document between two positions, as an array of +// strings. +function getBetween(doc, start, end) { + var out = [], n = start.line; + doc.iter(start.line, end.line + 1, function (line) { + var text = line.text; + if (n == end.line) { text = text.slice(0, end.ch); } + if (n == start.line) { text = text.slice(start.ch); } + out.push(text); + ++n; + }); + return out +} +// Get the lines between from and to, as array of strings. +function getLines(doc, from, to) { + var out = []; + doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value + return out +} + +// Update the height of a line, propagating the height change +// upwards to parent nodes. +function updateLineHeight(line, height) { + var diff = height - line.height; + if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } } +} + +// Given a line object, find its line number by walking up through +// its parent links. +function lineNo(line) { + if (line.parent == null) { return null } + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) { break } + no += chunk.children[i].chunkSize(); + } + } + return no + cur.first +} + +// Find the line at the given vertical position, using the height +// information in the document tree. +function lineAtHeight(chunk, h) { + var n = chunk.first; + outer: do { + for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { + var child = chunk.children[i$1], ch = child.height; + if (h < ch) { chunk = child; continue outer } + h -= ch; + n += child.chunkSize(); + } + return n + } while (!chunk.lines) + var i = 0; + for (; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) { break } + h -= lh; + } + return n + i +} + +function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size} + +function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)) +} + +// A Pos instance represents a position within the text. +function Pos(line, ch, sticky) { + if ( sticky === void 0 ) sticky = null; + + if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) } + this.line = line; + this.ch = ch; + this.sticky = sticky; +} + +// Compare two positions, return 0 if they are the same, a negative +// number when a is less, and a positive number otherwise. +function cmp(a, b) { return a.line - b.line || a.ch - b.ch } + +function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 } + +function copyPos(x) {return Pos(x.line, x.ch)} +function maxPos(a, b) { return cmp(a, b) < 0 ? b : a } +function minPos(a, b) { return cmp(a, b) < 0 ? a : b } + +// Most of the external API clips given positions to make sure they +// actually exist within the document. +function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))} +function clipPos(doc, pos) { + if (pos.line < doc.first) { return Pos(doc.first, 0) } + var last = doc.first + doc.size - 1; + if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) } + return clipToLen(pos, getLine(doc, pos.line).text.length) +} +function clipToLen(pos, linelen) { + var ch = pos.ch; + if (ch == null || ch > linelen) { return Pos(pos.line, linelen) } + else if (ch < 0) { return Pos(pos.line, 0) } + else { return pos } +} +function clipPosArray(doc, array) { + var out = []; + for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); } + return out +} + +// Optimize some code when these features are not used. +var sawReadOnlySpans = false; +var sawCollapsedSpans = false; + +function seeReadOnlySpans() { + sawReadOnlySpans = true; +} + +function seeCollapsedSpans() { + sawCollapsedSpans = true; +} + +// TEXTMARKER SPANS + +function MarkedSpan(marker, from, to) { + this.marker = marker; + this.from = from; this.to = to; +} + +// Search an array of spans for a span matching the given marker. +function getMarkedSpanFor(spans, marker) { + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) { return span } + } } +} +// Remove a span from an array, returning undefined if no spans are +// left (we don't store arrays for lines without spans). +function removeMarkedSpan(spans, span) { + var r; + for (var i = 0; i < spans.length; ++i) + { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } } + return r +} +// Add a span to a line. +function addMarkedSpan(line, span) { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + span.marker.attachLine(line); +} + +// Used for the algorithm that adjusts markers for a change in the +// document. These functions cut an array of spans at a given +// character position, returning an array of remaining chunks (or +// undefined if nothing remains). +function markedSpansBefore(old, startCh, isInsert) { + var nw; + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); + } + } } + return nw +} +function markedSpansAfter(old, endCh, isInsert) { + var nw; + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, + span.to == null ? null : span.to - endCh)); + } + } } + return nw +} + +// Given a change object, compute the new set of marker spans that +// cover the line in which the change took place. Removes spans +// entirely within the change, reconnects spans belonging to the +// same marker that appear on both sides of the change, and cuts off +// spans partially within the change. Returns an array of span +// arrays with one element for each line in (after) the change. +function stretchSpansOverChange(doc, change) { + if (change.full) { return null } + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; + if (!oldFirst && !oldLast) { return null } + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert); + var last = markedSpansAfter(oldLast, endCh, isInsert); + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) { span.to = startCh; } + else if (sameLine) { span.to = found.to == null ? null : found.to + offset; } + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i$1 = 0; i$1 < last.length; ++i$1) { + var span$1 = last[i$1]; + if (span$1.to != null) { span$1.to += offset; } + if (span$1.from == null) { + var found$1 = getMarkedSpanFor(first, span$1.marker); + if (!found$1) { + span$1.from = offset; + if (sameLine) { (first || (first = [])).push(span$1); } + } + } else { + span$1.from += offset; + if (sameLine) { (first || (first = [])).push(span$1); } + } + } + } + // Make sure we didn't create any zero-length spans + if (first) { first = clearEmptySpans(first); } + if (last && last != first) { last = clearEmptySpans(last); } + + var newMarkers = [first]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers; + if (gap > 0 && first) + { for (var i$2 = 0; i$2 < first.length; ++i$2) + { if (first[i$2].to == null) + { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } } + for (var i$3 = 0; i$3 < gap; ++i$3) + { newMarkers.push(gapMarkers); } + newMarkers.push(last); + } + return newMarkers +} + +// Remove spans that are empty and don't have a clearWhenEmpty +// option of false. +function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) + { spans.splice(i--, 1); } + } + if (!spans.length) { return null } + return spans +} + +// Used to 'clip' out readOnly ranges when making a change. +function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function (line) { + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + { (markers || (markers = [])).push(mark); } + } } + }); + if (!markers) { return null } + var parts = [{from: from, to: to}]; + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(0); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue } + var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) + { newParts.push({from: p.from, to: m.from}); } + if (dto > 0 || !mk.inclusiveRight && !dto) + { newParts.push({from: m.to, to: p.to}); } + parts.splice.apply(parts, newParts); + j += newParts.length - 3; + } + } + return parts +} + +// Connect or disconnect spans from a line. +function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.detachLine(line); } + line.markedSpans = null; +} +function attachMarkedSpans(line, spans) { + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.attachLine(line); } + line.markedSpans = spans; +} + +// Helpers used when computing which overlapping collapsed span +// counts as the larger one. +function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 } +function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 } + +// Returns a number indicating which of two overlapping collapsed +// spans is larger (and thus includes the other). Falls back to +// comparing ids when the spans cover exactly the same range. +function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length; + if (lenDiff != 0) { return lenDiff } + var aPos = a.find(), bPos = b.find(); + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); + if (fromCmp) { return -fromCmp } + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); + if (toCmp) { return toCmp } + return b.id - a.id +} + +// Find out whether a line ends or starts in a collapsed span. If +// so, return the marker for that span. +function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) + { found = sp.marker; } + } } + return found +} +function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) } +function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) } + +function collapsedSpanAround(line, ch) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) { for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; } + } } + return found +} + +// Test whether there exists a collapsed span that partially +// overlaps (covers the start or end, but not both) of a new span. +// Such overlap is not allowed. +function conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) { + var line = getLine(doc, lineNo$$1); + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) { for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (!sp.marker.collapsed) { continue } + var found = sp.marker.find(0); + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue } + if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || + fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) + { return true } + } } +} + +// A visual line is a line as drawn on the screen. Folding, for +// example, can cause multiple logical lines to appear on the same +// visual line. This finds the start of the visual line that the +// given line is part of (usually that is the line itself). +function visualLine(line) { + var merged; + while (merged = collapsedSpanAtStart(line)) + { line = merged.find(-1, true).line; } + return line +} + +function visualLineEnd(line) { + var merged; + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line; } + return line +} + +// Returns an array of logical lines that continue the visual line +// started by the argument, or undefined if there are no such lines. +function visualLineContinued(line) { + var merged, lines; + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line + ;(lines || (lines = [])).push(line); + } + return lines +} + +// Get the line number of the start of the visual line that the +// given line number is part of. +function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), vis = visualLine(line); + if (line == vis) { return lineN } + return lineNo(vis) +} + +// Get the line number of the start of the next visual line after +// the given line. +function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) { return lineN } + var line = getLine(doc, lineN), merged; + if (!lineIsHidden(doc, line)) { return lineN } + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line; } + return lineNo(line) + 1 +} + +// Compute whether a line is hidden. Lines count as hidden when they +// are part of a visual line that starts with another line, or when +// they are entirely covered by collapsed, non-widget span. +function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) { continue } + if (sp.from == null) { return true } + if (sp.marker.widgetNode) { continue } + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + { return true } + } } +} +function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true); + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)) + } + if (span.marker.inclusiveRight && span.to == line.text.length) + { return true } + for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && + (sp.to == null || sp.to != span.from) && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) { return true } + } +} + +// Find the height above the given line. +function heightAtLine(lineObj) { + lineObj = visualLine(lineObj); + + var h = 0, chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) { break } + else { h += line.height; } + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i$1 = 0; i$1 < p.children.length; ++i$1) { + var cur = p.children[i$1]; + if (cur == chunk) { break } + else { h += cur.height; } + } + } + return h +} + +// Compute the character length of a line, taking into account +// collapsed ranges (see markText) that might hide parts, and join +// other lines onto it. +function lineLength(line) { + if (line.height == 0) { return 0 } + var len = line.text.length, merged, cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true); + cur = found.from.line; + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found$1 = merged.find(0, true); + len -= cur.text.length - found$1.from.ch; + cur = found$1.to.line; + len += cur.text.length - found$1.to.ch; + } + return len +} + +// Find the longest line in the document. +function findMaxLine(cm) { + var d = cm.display, doc = cm.doc; + d.maxLine = getLine(doc, doc.first); + d.maxLineLength = lineLength(d.maxLine); + d.maxLineChanged = true; + doc.iter(function (line) { + var len = lineLength(line); + if (len > d.maxLineLength) { + d.maxLineLength = len; + d.maxLine = line; + } + }); +} + +// BIDI HELPERS + +function iterateBidiSections(order, from, to, f) { + if (!order) { return f(from, to, "ltr", 0) } + var found = false; + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i); + found = true; + } + } + if (!found) { f(from, to, "ltr"); } +} + +var bidiOther = null; +function getBidiPartAt(order, ch, sticky) { + var found; + bidiOther = null; + for (var i = 0; i < order.length; ++i) { + var cur = order[i]; + if (cur.from < ch && cur.to > ch) { return i } + if (cur.to == ch) { + if (cur.from != cur.to && sticky == "before") { found = i; } + else { bidiOther = i; } + } + if (cur.from == ch) { + if (cur.from != cur.to && sticky != "before") { found = i; } + else { bidiOther = i; } + } + } + return found != null ? found : bidiOther +} + +// Bidirectional ordering algorithm +// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm +// that this (partially) implements. + +// One-char codes used for character types: +// L (L): Left-to-Right +// R (R): Right-to-Left +// r (AL): Right-to-Left Arabic +// 1 (EN): European Number +// + (ES): European Number Separator +// % (ET): European Number Terminator +// n (AN): Arabic Number +// , (CS): Common Number Separator +// m (NSM): Non-Spacing Mark +// b (BN): Boundary Neutral +// s (B): Paragraph Separator +// t (S): Segment Separator +// w (WS): Whitespace +// N (ON): Other Neutrals + +// Returns null if characters are ordered as they appear +// (left-to-right), or an array of sections ({from, to, level} +// objects) in the order in which they occur visually. +var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; + // Character types for codepoints 0x600 to 0x6f9 + var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; + function charType(code) { + if (code <= 0xf7) { return lowTypes.charAt(code) } + else if (0x590 <= code && code <= 0x5f4) { return "R" } + else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) } + else if (0x6ee <= code && code <= 0x8ac) { return "r" } + else if (0x2000 <= code && code <= 0x200b) { return "w" } + else if (code == 0x200c) { return "b" } + else { return "L" } + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; + + function BidiSpan(level, from, to) { + this.level = level; + this.from = from; this.to = to; + } + + return function(str, direction) { + var outerType = direction == "ltr" ? "L" : "R"; + + if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false } + var len = str.length, types = []; + for (var i = 0; i < len; ++i) + { types.push(charType(str.charCodeAt(i))); } + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { + var type = types[i$1]; + if (type == "m") { types[i$1] = prev; } + else { prev = type; } + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { + var type$1 = types[i$2]; + if (type$1 == "1" && cur == "r") { types[i$2] = "n"; } + else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { + var type$2 = types[i$3]; + if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; } + else if (type$2 == "," && prev$1 == types[i$3+1] && + (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; } + prev$1 = type$2; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i$4 = 0; i$4 < len; ++i$4) { + var type$3 = types[i$4]; + if (type$3 == ",") { types[i$4] = "N"; } + else if (type$3 == "%") { + var end = (void 0); + for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; + for (var j = i$4; j < end; ++j) { types[j] = replace; } + i$4 = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { + var type$4 = types[i$5]; + if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; } + else if (isStrong.test(type$4)) { cur$1 = type$4; } + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i$6 = 0; i$6 < len; ++i$6) { + if (isNeutral.test(types[i$6])) { + var end$1 = (void 0); + for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} + var before = (i$6 ? types[i$6-1] : outerType) == "L"; + var after = (end$1 < len ? types[end$1] : outerType) == "L"; + var replace$1 = before == after ? (before ? "L" : "R") : outerType; + for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; } + i$6 = end$1 - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m; + for (var i$7 = 0; i$7 < len;) { + if (countsAsLeft.test(types[i$7])) { + var start = i$7; + for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} + order.push(new BidiSpan(0, start, i$7)); + } else { + var pos = i$7, at = order.length; + for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} + for (var j$2 = pos; j$2 < i$7;) { + if (countsAsNum.test(types[j$2])) { + if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); } + var nstart = j$2; + for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} + order.splice(at, 0, new BidiSpan(2, nstart, j$2)); + pos = j$2; + } else { ++j$2; } + } + if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); } + } + } + if (direction == "ltr") { + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift(new BidiSpan(0, 0, m[0].length)); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push(new BidiSpan(0, len - m[0].length, len)); + } + } + + return direction == "rtl" ? order.reverse() : order + } +})(); + +// Get the bidi ordering for the given line (and cache it). Returns +// false for lines that are fully left-to-right, and an array of +// BidiSpan objects otherwise. +function getOrder(line, direction) { + var order = line.order; + if (order == null) { order = line.order = bidiOrdering(line.text, direction); } + return order +} + +// EVENT HANDLING + +// Lightweight event framework. on/off also work on DOM nodes, +// registering native DOM handlers. + +var noHandlers = []; + +var on = function(emitter, type, f) { + if (emitter.addEventListener) { + emitter.addEventListener(type, f, false); + } else if (emitter.attachEvent) { + emitter.attachEvent("on" + type, f); + } else { + var map$$1 = emitter._handlers || (emitter._handlers = {}); + map$$1[type] = (map$$1[type] || noHandlers).concat(f); + } +}; + +function getHandlers(emitter, type) { + return emitter._handlers && emitter._handlers[type] || noHandlers +} + +function off(emitter, type, f) { + if (emitter.removeEventListener) { + emitter.removeEventListener(type, f, false); + } else if (emitter.detachEvent) { + emitter.detachEvent("on" + type, f); + } else { + var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type]; + if (arr) { + var index = indexOf(arr, f); + if (index > -1) + { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); } + } + } +} + +function signal(emitter, type /*, values...*/) { + var handlers = getHandlers(emitter, type); + if (!handlers.length) { return } + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); } +} + +// The DOM events that CodeMirror handles can be overridden by +// registering a (non-DOM) handler on the editor for the event name, +// and preventDefault-ing the event in that handler. +function signalDOMEvent(cm, e, override) { + if (typeof e == "string") + { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; } + signal(cm, override || e.type, cm, e); + return e_defaultPrevented(e) || e.codemirrorIgnore +} + +function signalCursorActivity(cm) { + var arr = cm._handlers && cm._handlers.cursorActivity; + if (!arr) { return } + var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); + for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1) + { set.push(arr[i]); } } +} + +function hasHandler(emitter, type) { + return getHandlers(emitter, type).length > 0 +} + +// Add on and off methods to a constructor's prototype, to make +// registering events on such objects more convenient. +function eventMixin(ctor) { + ctor.prototype.on = function(type, f) {on(this, type, f);}; + ctor.prototype.off = function(type, f) {off(this, type, f);}; +} + +// Due to the fact that we still support jurassic IE versions, some +// compatibility wrappers are needed. + +function e_preventDefault(e) { + if (e.preventDefault) { e.preventDefault(); } + else { e.returnValue = false; } +} +function e_stopPropagation(e) { + if (e.stopPropagation) { e.stopPropagation(); } + else { e.cancelBubble = true; } +} +function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false +} +function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);} + +function e_target(e) {return e.target || e.srcElement} +function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) { b = 1; } + else if (e.button & 2) { b = 3; } + else if (e.button & 4) { b = 2; } + } + if (mac && e.ctrlKey && b == 1) { b = 3; } + return b +} + +// Detect drag-and-drop +var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie && ie_version < 9) { return false } + var div = elt('div'); + return "draggable" in div || "dragDrop" in div +}(); + +var zwspSupported; +function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) + { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); } + } + var node = zwspSupported ? elt("span", "\u200b") : + elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + node.setAttribute("cm-text", ""); + return node +} + +// Feature-detect IE's crummy client rect reporting for bidi text +var badBidiRects; +function hasBadBidiRects(measure) { + if (badBidiRects != null) { return badBidiRects } + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); + var r0 = range(txt, 0, 1).getBoundingClientRect(); + var r1 = range(txt, 1, 2).getBoundingClientRect(); + removeChildren(measure); + if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780) + return badBidiRects = (r1.right - r0.right < 3) +} + +// See if "".split is the broken IE version, if so, provide an +// alternative way to split lines. +var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) { nl = string.length; } + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result +} : function (string) { return string.split(/\r\n?|\n/); }; + +var hasSelection = window.getSelection ? function (te) { + try { return te.selectionStart != te.selectionEnd } + catch(e) { return false } +} : function (te) { + var range$$1; + try {range$$1 = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range$$1 || range$$1.parentElement() != te) { return false } + return range$$1.compareEndPoints("StartToEnd", range$$1) != 0 +}; + +var hasCopyEvent = (function () { + var e = elt("div"); + if ("oncopy" in e) { return true } + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == "function" +})(); + +var badZoomedRects = null; +function hasBadZoomedRects(measure) { + if (badZoomedRects != null) { return badZoomedRects } + var node = removeChildrenAndAdd(measure, elt("span", "x")); + var normal = node.getBoundingClientRect(); + var fromRange = range(node, 0, 1).getBoundingClientRect(); + return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1 +} + +// Known modes, by name and by MIME +var modes = {}; +var mimeModes = {}; + +// Extra arguments are stored as the mode's dependencies, which is +// used by (legacy) mechanisms like loadmode.js to automatically +// load a mode. (Preferred mechanism is the require/define calls.) +function defineMode(name, mode) { + if (arguments.length > 2) + { mode.dependencies = Array.prototype.slice.call(arguments, 2); } + modes[name] = mode; +} + +function defineMIME(mime, spec) { + mimeModes[mime] = spec; +} + +// Given a MIME type, a {name, ...options} config object, or a name +// string, return a mode config object. +function resolveMode(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name]; + if (typeof found == "string") { found = {name: found}; } + spec = createObj(found, spec); + spec.name = found.name; + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return resolveMode("application/xml") + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { + return resolveMode("application/json") + } + if (typeof spec == "string") { return {name: spec} } + else { return spec || {name: "null"} } +} + +// Given a mode spec (anything that resolveMode accepts), find and +// initialize an actual mode object. +function getMode(options, spec) { + spec = resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) { return getMode(options, "text/plain") } + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) { continue } + if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; } + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + if (spec.helperType) { modeObj.helperType = spec.helperType; } + if (spec.modeProps) { for (var prop$1 in spec.modeProps) + { modeObj[prop$1] = spec.modeProps[prop$1]; } } + + return modeObj +} + +// This can be used to attach properties to mode objects from +// outside the actual mode definition. +var modeExtensions = {}; +function extendMode(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + copyObj(properties, exts); +} + +function copyState(mode, state) { + if (state === true) { return state } + if (mode.copyState) { return mode.copyState(state) } + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) { val = val.concat([]); } + nstate[n] = val; + } + return nstate +} + +// Given a mode and a state (for that mode), find the inner mode and +// state at the position that the state refers to. +function innerMode(mode, state) { + var info; + while (mode.innerMode) { + info = mode.innerMode(state); + if (!info || info.mode == mode) { break } + state = info.state; + mode = info.mode; + } + return info || {mode: mode, state: state} +} + +function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true +} + +// STRING STREAM + +// Fed to the mode parsers, provides helper functions to make +// parsers more succinct. + +var StringStream = function(string, tabSize, lineOracle) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + this.lineStart = 0; + this.lineOracle = lineOracle; +}; + +StringStream.prototype.eol = function () {return this.pos >= this.string.length}; +StringStream.prototype.sol = function () {return this.pos == this.lineStart}; +StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined}; +StringStream.prototype.next = function () { + if (this.pos < this.string.length) + { return this.string.charAt(this.pos++) } +}; +StringStream.prototype.eat = function (match) { + var ch = this.string.charAt(this.pos); + var ok; + if (typeof match == "string") { ok = ch == match; } + else { ok = ch && (match.test ? match.test(ch) : match(ch)); } + if (ok) {++this.pos; return ch} +}; +StringStream.prototype.eatWhile = function (match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start +}; +StringStream.prototype.eatSpace = function () { + var this$1 = this; + + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; } + return this.pos > start +}; +StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;}; +StringStream.prototype.skipTo = function (ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true} +}; +StringStream.prototype.backUp = function (n) {this.pos -= n;}; +StringStream.prototype.column = function () { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) +}; +StringStream.prototype.indentation = function () { + return countColumn(this.string, null, this.tabSize) - + (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) +}; +StringStream.prototype.match = function (pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; }; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) { this.pos += pattern.length; } + return true + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) { return null } + if (match && consume !== false) { this.pos += match[0].length; } + return match + } +}; +StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)}; +StringStream.prototype.hideFirstChars = function (n, inner) { + this.lineStart += n; + try { return inner() } + finally { this.lineStart -= n; } +}; +StringStream.prototype.lookAhead = function (n) { + var oracle = this.lineOracle; + return oracle && oracle.lookAhead(n) +}; +StringStream.prototype.baseToken = function () { + var oracle = this.lineOracle; + return oracle && oracle.baseToken(this.pos) +}; + +var SavedContext = function(state, lookAhead) { + this.state = state; + this.lookAhead = lookAhead; +}; + +var Context = function(doc, state, line, lookAhead) { + this.state = state; + this.doc = doc; + this.line = line; + this.maxLookAhead = lookAhead || 0; + this.baseTokens = null; + this.baseTokenPos = 1; +}; + +Context.prototype.lookAhead = function (n) { + var line = this.doc.getLine(this.line + n); + if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; } + return line +}; + +Context.prototype.baseToken = function (n) { + var this$1 = this; + + if (!this.baseTokens) { return null } + while (this.baseTokens[this.baseTokenPos] <= n) + { this$1.baseTokenPos += 2; } + var type = this.baseTokens[this.baseTokenPos + 1]; + return {type: type && type.replace(/( |^)overlay .*/, ""), + size: this.baseTokens[this.baseTokenPos] - n} +}; + +Context.prototype.nextLine = function () { + this.line++; + if (this.maxLookAhead > 0) { this.maxLookAhead--; } +}; + +Context.fromSaved = function (doc, saved, line) { + if (saved instanceof SavedContext) + { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) } + else + { return new Context(doc, copyState(doc.mode, saved), line) } +}; + +Context.prototype.save = function (copy) { + var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state; + return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state +}; + + +// Compute a style array (an array starting with a mode generation +// -- for invalidation -- followed by pairs of end positions and +// style strings), which is used to highlight the tokens on the +// line. +function highlightLine(cm, line, context, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen], lineClasses = {}; + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); }, + lineClasses, forceToEnd); + var state = context.state; + + // Run overlays, adjust style array. + var loop = function ( o ) { + context.baseTokens = st; + var overlay = cm.state.overlays[o], i = 1, at = 0; + context.state = true; + runMode(cm, line.text, overlay.mode, context, function (end, style) { + var start = i; + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i]; + if (i_end > end) + { st.splice(i, 1, end, st[i+1], i_end); } + i += 2; + at = Math.min(end, i_end); + } + if (!style) { return } + if (overlay.opaque) { + st.splice(start, i - start, end, "overlay " + style); + i = start + 2; + } else { + for (; start < i; start += 2) { + var cur = st[start+1]; + st[start+1] = (cur ? cur + " " : "") + "overlay " + style; + } + } + }, lineClasses); + context.state = state; + context.baseTokens = null; + context.baseTokenPos = 1; + }; + + for (var o = 0; o < cm.state.overlays.length; ++o) loop( o ); + + return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null} +} + +function getLineStyles(cm, line, updateFrontier) { + if (!line.styles || line.styles[0] != cm.state.modeGen) { + var context = getContextBefore(cm, lineNo(line)); + var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state); + var result = highlightLine(cm, line, context); + if (resetState) { context.state = resetState; } + line.stateAfter = context.save(!resetState); + line.styles = result.styles; + if (result.classes) { line.styleClasses = result.classes; } + else if (line.styleClasses) { line.styleClasses = null; } + if (updateFrontier === cm.doc.highlightFrontier) + { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); } + } + return line.styles +} + +function getContextBefore(cm, n, precise) { + var doc = cm.doc, display = cm.display; + if (!doc.mode.startState) { return new Context(doc, true, n) } + var start = findStartLine(cm, n, precise); + var saved = start > doc.first && getLine(doc, start - 1).stateAfter; + var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start); + + doc.iter(start, n, function (line) { + processLine(cm, line.text, context); + var pos = context.line; + line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null; + context.nextLine(); + }); + if (precise) { doc.modeFrontier = context.line; } + return context +} + +// Lightweight form of highlight -- proceed over this line and +// update state, but don't save a style array. Used for lines that +// aren't currently visible. +function processLine(cm, text, context, startAt) { + var mode = cm.doc.mode; + var stream = new StringStream(text, cm.options.tabSize, context); + stream.start = stream.pos = startAt || 0; + if (text == "") { callBlankLine(mode, context.state); } + while (!stream.eol()) { + readToken(mode, stream, context.state); + stream.start = stream.pos; + } +} + +function callBlankLine(mode, state) { + if (mode.blankLine) { return mode.blankLine(state) } + if (!mode.innerMode) { return } + var inner = innerMode(mode, state); + if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) } +} + +function readToken(mode, stream, state, inner) { + for (var i = 0; i < 10; i++) { + if (inner) { inner[0] = innerMode(mode, state).mode; } + var style = mode.token(stream, state); + if (stream.pos > stream.start) { return style } + } + throw new Error("Mode " + mode.name + " failed to advance stream.") +} + +var Token = function(stream, type, state) { + this.start = stream.start; this.end = stream.pos; + this.string = stream.current(); + this.type = type || null; + this.state = state; +}; + +// Utility for getTokenAt and getLineTokens +function takeToken(cm, pos, precise, asArray) { + var doc = cm.doc, mode = doc.mode, style; + pos = clipPos(doc, pos); + var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise); + var stream = new StringStream(line.text, cm.options.tabSize, context), tokens; + if (asArray) { tokens = []; } + while ((asArray || stream.pos < pos.ch) && !stream.eol()) { + stream.start = stream.pos; + style = readToken(mode, stream, context.state); + if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); } + } + return asArray ? tokens : new Token(stream, style, context.state) +} + +function extractLineClasses(type, output) { + if (type) { for (;;) { + var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); + if (!lineClass) { break } + type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); + var prop = lineClass[1] ? "bgClass" : "textClass"; + if (output[prop] == null) + { output[prop] = lineClass[2]; } + else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) + { output[prop] += " " + lineClass[2]; } + } } + return type +} + +// Run the given mode's parser over a line, calling f for each token. +function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { + var flattenSpans = mode.flattenSpans; + if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; } + var curStart = 0, curStyle = null; + var stream = new StringStream(text, cm.options.tabSize, context), style; + var inner = cm.options.addModeClass && [null]; + if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); } + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false; + if (forceToEnd) { processLine(cm, text, context, stream.pos); } + stream.pos = text.length; + style = null; + } else { + style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses); + } + if (inner) { + var mName = inner[0].name; + if (mName) { style = "m-" + (style ? mName + " " + style : mName); } + } + if (!flattenSpans || curStyle != style) { + while (curStart < stream.start) { + curStart = Math.min(stream.start, curStart + 5000); + f(curStart, curStyle); + } + curStyle = style; + } + stream.start = stream.pos; + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 + // characters, and returns inaccurate measurements in nodes + // starting around 5000 chars. + var pos = Math.min(stream.pos, curStart + 5000); + f(pos, curStyle); + curStart = pos; + } +} + +// Finds the line to start with when starting a parse. Tries to +// find a line with a stateAfter, so that it can start with a +// valid state. If that fails, it returns the line with the +// smallest indentation, which tends to need the least context to +// parse correctly. +function findStartLine(cm, n, precise) { + var minindent, minline, doc = cm.doc; + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); + for (var search = n; search > lim; --search) { + if (search <= doc.first) { return doc.first } + var line = getLine(doc, search - 1), after = line.stateAfter; + if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) + { return search } + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline +} + +function retreatFrontier(doc, n) { + doc.modeFrontier = Math.min(doc.modeFrontier, n); + if (doc.highlightFrontier < n - 10) { return } + var start = doc.first; + for (var line = n - 1; line > start; line--) { + var saved = getLine(doc, line).stateAfter; + // change is on 3 + // state on line 1 looked ahead 2 -- so saw 3 + // test 1 + 2 < 3 should cover this + if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { + start = line + 1; + break + } + } + doc.highlightFrontier = Math.min(doc.highlightFrontier, start); +} + +// LINE DATA STRUCTURE + +// Line objects. These hold state related to a line, including +// highlighting info (the styles array). +var Line = function(text, markedSpans, estimateHeight) { + this.text = text; + attachMarkedSpans(this, markedSpans); + this.height = estimateHeight ? estimateHeight(this) : 1; +}; + +Line.prototype.lineNo = function () { return lineNo(this) }; +eventMixin(Line); + +// Change the content (text, markers) of a line. Automatically +// invalidates cached information and tries to re-estimate the +// line's height. +function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text; + if (line.stateAfter) { line.stateAfter = null; } + if (line.styles) { line.styles = null; } + if (line.order != null) { line.order = null; } + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + var estHeight = estimateHeight ? estimateHeight(line) : 1; + if (estHeight != line.height) { updateLineHeight(line, estHeight); } +} + +// Detach a line from the document tree and its markers. +function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); +} + +// Convert a style as returned by a mode (either null, or a string +// containing one or more styles) to a CSS style. This is cached, +// and also looks for line-wide styles. +var styleToClassCache = {}; +var styleToClassCacheWithMode = {}; +function interpretTokenStyle(style, options) { + if (!style || /^\s*$/.test(style)) { return null } + var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; + return cache[style] || + (cache[style] = style.replace(/\S+/g, "cm-$&")) +} + +// Render the DOM representation of the text of a line. Also builds +// up a 'line map', which points at the DOM nodes that represent +// specific stretches of text, and is used by the measuring code. +// The returned object contains the DOM node, this map, and +// information about line-wide styles that were set by the mode. +function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null); + var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content, + col: 0, pos: 0, cm: cm, + trailingSpace: false, + splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}; + lineView.measure = {}; + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0); + builder.pos = 0; + builder.addToken = buildToken; + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) + { builder.addToken = buildTokenBadBidi(builder.addToken, order); } + builder.map = []; + var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); + insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); + if (line.styleClasses) { + if (line.styleClasses.bgClass) + { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); } + if (line.styleClasses.textClass) + { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); } + } + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) + { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); } + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map; + lineView.measure.cache = {}; + } else { + (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map) + ;(lineView.measure.caches || (lineView.measure.caches = [])).push({}); + } + } + + // See issue #2901 + if (webkit) { + var last = builder.content.lastChild; + if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) + { builder.content.className = "cm-tab-wrap-hack"; } + } + + signal(cm, "renderLine", cm, lineView.line, builder.pre); + if (builder.pre.className) + { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); } + + return builder +} + +function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + ch.charCodeAt(0).toString(16); + token.setAttribute("aria-label", token.title); + return token +} + +// Build up the DOM representation for a single token, and add it to +// the line map. Takes care to render special characters separately. +function buildToken(builder, text, style, startStyle, endStyle, title, css) { + if (!text) { return } + var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text; + var special = builder.cm.state.specialChars, mustWrap = false; + var content; + if (!special.test(text)) { + builder.col += text.length; + content = document.createTextNode(displayText); + builder.map.push(builder.pos, builder.pos + text.length, content); + if (ie && ie_version < 9) { mustWrap = true; } + builder.pos += text.length; + } else { + content = document.createDocumentFragment(); + var pos = 0; + while (true) { + special.lastIndex = pos; + var m = special.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); } + else { content.appendChild(txt); } + builder.map.push(builder.pos, builder.pos + skipped, txt); + builder.col += skipped; + builder.pos += skipped; + } + if (!m) { break } + pos += skipped + 1; + var txt$1 = (void 0); + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; + txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + txt$1.setAttribute("role", "presentation"); + txt$1.setAttribute("cm-text", "\t"); + builder.col += tabWidth; + } else if (m[0] == "\r" || m[0] == "\n") { + txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); + txt$1.setAttribute("cm-text", m[0]); + builder.col += 1; + } else { + txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); + txt$1.setAttribute("cm-text", m[0]); + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); } + else { content.appendChild(txt$1); } + builder.col += 1; + } + builder.map.push(builder.pos, builder.pos + 1, txt$1); + builder.pos++; + } + } + builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; + if (style || startStyle || endStyle || mustWrap || css) { + var fullStyle = style || ""; + if (startStyle) { fullStyle += startStyle; } + if (endStyle) { fullStyle += endStyle; } + var token = elt("span", [content], fullStyle, css); + if (title) { token.title = title; } + return builder.content.appendChild(token) + } + builder.content.appendChild(content); +} + +function splitSpaces(text, trailingBefore) { + if (text.length > 1 && !/ /.test(text)) { return text } + var spaceBefore = trailingBefore, result = ""; + for (var i = 0; i < text.length; i++) { + var ch = text.charAt(i); + if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) + { ch = "\u00a0"; } + result += ch; + spaceBefore = ch == " "; + } + return result +} + +// Work around nonsense dimensions being reported for stretches of +// right-to-left text. +function buildTokenBadBidi(inner, order) { + return function (builder, text, style, startStyle, endStyle, title, css) { + style = style ? style + " cm-force-border" : "cm-force-border"; + var start = builder.pos, end = start + text.length; + for (;;) { + // Find the part that overlaps with the start of this text + var part = (void 0); + for (var i = 0; i < order.length; i++) { + part = order[i]; + if (part.to > start && part.from <= start) { break } + } + if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) } + inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css); + startStyle = null; + text = text.slice(part.to - start); + start = part.to; + } + } +} + +function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode; + if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); } + if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { + if (!widget) + { widget = builder.content.appendChild(document.createElement("span")); } + widget.setAttribute("cm-marker", marker.id); + } + if (widget) { + builder.cm.display.input.setUneditable(widget); + builder.content.appendChild(widget); + } + builder.pos += size; + builder.trailingSpace = false; +} + +// Outputs a number of spans to make up a line, taking highlighting +// and marked text into account. +function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, allText = line.text, at = 0; + if (!spans) { + for (var i$1 = 1; i$1 < styles.length; i$1+=2) + { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); } + return + } + + var len = allText.length, pos = 0, i = 1, text = "", style, css; + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = title = css = ""; + collapsed = null; nextChange = Infinity; + var foundBookmarks = [], endStyles = (void 0); + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker; + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { + foundBookmarks.push(m); + } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { + if (sp.to != null && sp.to != pos && nextChange > sp.to) { + nextChange = sp.to; + spanEndStyle = ""; + } + if (m.className) { spanStyle += " " + m.className; } + if (m.css) { css = (css ? css + ";" : "") + m.css; } + if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; } + if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); } + if (m.title && !title) { title = m.title; } + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) + { collapsed = sp; } + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + } + if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) + { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } } + + if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) + { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, + collapsed.marker, collapsed.from == null); + if (collapsed.to == null) { return } + if (collapsed.to == pos) { collapsed = false; } + } + } + if (pos >= len) { break } + + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css); + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break} + pos = end; + spanStartStyle = ""; + } + text = allText.slice(at, at = styles[i++]); + style = interpretTokenStyle(styles[i++], builder.cm.options); + } + } +} + + +// These objects are used to represent the visible (currently drawn) +// part of the document. A LineView may correspond to multiple +// logical lines, if those are connected by collapsed ranges. +function LineView(doc, line, lineN) { + // The starting line + this.line = line; + // Continuing lines, if any + this.rest = visualLineContinued(line); + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; + this.node = this.text = null; + this.hidden = lineIsHidden(doc, line); +} + +// Create a range of LineView objects for the given lines. +function buildViewArray(cm, from, to) { + var array = [], nextPos; + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); + nextPos = pos + view.size; + array.push(view); + } + return array +} + +var operationGroup = null; + +function pushOperation(op) { + if (operationGroup) { + operationGroup.ops.push(op); + } else { + op.ownsGroup = operationGroup = { + ops: [op], + delayedCallbacks: [] + }; + } +} + +function fireCallbacksForOps(group) { + // Calls delayed callbacks and cursorActivity handlers until no + // new ones appear + var callbacks = group.delayedCallbacks, i = 0; + do { + for (; i < callbacks.length; i++) + { callbacks[i].call(null); } + for (var j = 0; j < group.ops.length; j++) { + var op = group.ops[j]; + if (op.cursorActivityHandlers) + { while (op.cursorActivityCalled < op.cursorActivityHandlers.length) + { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } } + } + } while (i < callbacks.length) +} + +function finishOperation(op, endCb) { + var group = op.ownsGroup; + if (!group) { return } + + try { fireCallbacksForOps(group); } + finally { + operationGroup = null; + endCb(group); + } +} + +var orphanDelayedCallbacks = null; + +// Often, we want to signal events at a point where we are in the +// middle of some work, but don't want the handler to start calling +// other methods on the editor, which might be in an inconsistent +// state or simply not expect any other events to happen. +// signalLater looks whether there are any handlers, and schedules +// them to be executed when the last operation ends, or, if no +// operation is active, when a timeout fires. +function signalLater(emitter, type /*, values...*/) { + var arr = getHandlers(emitter, type); + if (!arr.length) { return } + var args = Array.prototype.slice.call(arguments, 2), list; + if (operationGroup) { + list = operationGroup.delayedCallbacks; + } else if (orphanDelayedCallbacks) { + list = orphanDelayedCallbacks; + } else { + list = orphanDelayedCallbacks = []; + setTimeout(fireOrphanDelayed, 0); + } + var loop = function ( i ) { + list.push(function () { return arr[i].apply(null, args); }); + }; + + for (var i = 0; i < arr.length; ++i) + loop( i ); +} + +function fireOrphanDelayed() { + var delayed = orphanDelayedCallbacks; + orphanDelayedCallbacks = null; + for (var i = 0; i < delayed.length; ++i) { delayed[i](); } +} + +// When an aspect of a line changes, a string is added to +// lineView.changes. This updates the relevant part of the line's +// DOM structure. +function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j]; + if (type == "text") { updateLineText(cm, lineView); } + else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); } + else if (type == "class") { updateLineClasses(cm, lineView); } + else if (type == "widget") { updateLineWidgets(cm, lineView, dims); } + } + lineView.changes = null; +} + +// Lines with gutter elements, widgets or a background class need to +// be wrapped, and have the extra elements added to the wrapper div +function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative"); + if (lineView.text.parentNode) + { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); } + lineView.node.appendChild(lineView.text); + if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; } + } + return lineView.node +} + +function updateLineBackground(cm, lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; + if (cls) { cls += " CodeMirror-linebackground"; } + if (lineView.background) { + if (cls) { lineView.background.className = cls; } + else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } + } else if (cls) { + var wrap = ensureLineWrapped(lineView); + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); + cm.display.input.setUneditable(lineView.background); + } +} + +// Wrapper around buildLineContent which will reuse the structure +// in display.externalMeasured when possible. +function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured; + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null; + lineView.measure = ext.measure; + return ext.built + } + return buildLineContent(cm, lineView) +} + +// Redraw the line's text. Interacts with the background and text +// classes because the mode may output tokens that influence these +// classes. +function updateLineText(cm, lineView) { + var cls = lineView.text.className; + var built = getLineContent(cm, lineView); + if (lineView.text == lineView.node) { lineView.node = built.pre; } + lineView.text.parentNode.replaceChild(built.pre, lineView.text); + lineView.text = built.pre; + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass; + lineView.textClass = built.textClass; + updateLineClasses(cm, lineView); + } else if (cls) { + lineView.text.className = cls; + } +} + +function updateLineClasses(cm, lineView) { + updateLineBackground(cm, lineView); + if (lineView.line.wrapClass) + { ensureLineWrapped(lineView).className = lineView.line.wrapClass; } + else if (lineView.node != lineView.text) + { lineView.node.className = ""; } + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; + lineView.text.className = textClass || ""; +} + +function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter); + lineView.gutter = null; + } + if (lineView.gutterBackground) { + lineView.node.removeChild(lineView.gutterBackground); + lineView.gutterBackground = null; + } + if (lineView.line.gutterClass) { + var wrap = ensureLineWrapped(lineView); + lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, + ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px")); + cm.display.input.setUneditable(lineView.gutterBackground); + wrap.insertBefore(lineView.gutterBackground, lineView.text); + } + var markers = lineView.line.gutterMarkers; + if (cm.options.lineNumbers || markers) { + var wrap$1 = ensureLineWrapped(lineView); + var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px")); + cm.display.input.setUneditable(gutterWrap); + wrap$1.insertBefore(gutterWrap, lineView.text); + if (lineView.line.gutterClass) + { gutterWrap.className += " " + lineView.line.gutterClass; } + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + { lineView.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineN), + "CodeMirror-linenumber CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); } + if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) { + var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; + if (found) + { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); } + } } + } +} + +function updateLineWidgets(cm, lineView, dims) { + if (lineView.alignable) { lineView.alignable = null; } + for (var node = lineView.node.firstChild, next = (void 0); node; node = next) { + next = node.nextSibling; + if (node.className == "CodeMirror-linewidget") + { lineView.node.removeChild(node); } + } + insertLineWidgets(cm, lineView, dims); +} + +// Build a line's DOM representation from scratch +function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView); + lineView.text = lineView.node = built.pre; + if (built.bgClass) { lineView.bgClass = built.bgClass; } + if (built.textClass) { lineView.textClass = built.textClass; } + + updateLineClasses(cm, lineView); + updateLineGutter(cm, lineView, lineN, dims); + insertLineWidgets(cm, lineView, dims); + return lineView.node +} + +// A lineView may contain multiple logical lines (when merged by +// collapsed spans). The widgets for all of them need to be drawn. +function insertLineWidgets(cm, lineView, dims) { + insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } } +} + +function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { + if (!line.widgets) { return } + var wrap = ensureLineWrapped(lineView); + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); + if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); } + positionLineWidget(widget, node, lineView, dims); + cm.display.input.setUneditable(node); + if (allowAbove && widget.above) + { wrap.insertBefore(node, lineView.gutter || lineView.text); } + else + { wrap.appendChild(node); } + signalLater(widget, "redraw"); + } +} + +function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + (lineView.alignable || (lineView.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; } + } +} + +function widgetHeight(widget) { + if (widget.height != null) { return widget.height } + var cm = widget.doc.cm; + if (!cm) { return 0 } + if (!contains(document.body, widget.node)) { + var parentStyle = "position: relative;"; + if (widget.coverGutter) + { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; } + if (widget.noHScroll) + { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; } + removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); + } + return widget.height = widget.node.parentNode.offsetHeight +} + +// Return true when the given mouse event happened in a widget +function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || + (n.parentNode == display.sizer && n != display.mover)) + { return true } + } +} + +// POSITION MEASUREMENT + +function paddingTop(display) {return display.lineSpace.offsetTop} +function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight} +function paddingH(display) { + if (display.cachedPaddingH) { return display.cachedPaddingH } + var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; + var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; + if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; } + return data +} + +function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth } +function displayWidth(cm) { + return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth +} +function displayHeight(cm) { + return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight +} + +// Ensure the lineView.wrapping.heights array is populated. This is +// an array of bottom offsets for the lines that make up a drawn +// line. When lineWrapping is on, there might be more than one +// height. +function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping; + var curWidth = wrapping && displayWidth(cm); + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = []; + if (wrapping) { + lineView.measure.width = curWidth; + var rects = lineView.text.firstChild.getClientRects(); + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], next = rects[i + 1]; + if (Math.abs(cur.bottom - next.bottom) > 2) + { heights.push((cur.bottom + next.top) / 2 - rect.top); } + } + } + heights.push(rect.bottom - rect.top); + } +} + +// Find a line map (mapping character offsets to text nodes) and a +// measurement cache for the given line number. (A line view might +// contain multiple lines when collapsed ranges are present.) +function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) + { return {map: lineView.measure.map, cache: lineView.measure.cache} } + for (var i = 0; i < lineView.rest.length; i++) + { if (lineView.rest[i] == line) + { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } } + for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) + { if (lineNo(lineView.rest[i$1]) > lineN) + { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } } +} + +// Render a line into the hidden node display.externalMeasured. Used +// when measurement is needed for a line that's not in the viewport. +function updateExternalMeasurement(cm, line) { + line = visualLine(line); + var lineN = lineNo(line); + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); + view.lineN = lineN; + var built = view.built = buildLineContent(cm, view); + view.text = built.pre; + removeChildrenAndAdd(cm.display.lineMeasure, built.pre); + return view +} + +// Get a {top, bottom, left, right} box (in line-local coordinates) +// for a given character. +function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias) +} + +// Find a line view that corresponds to the given line number. +function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) + { return cm.display.view[findViewIndex(cm, lineN)] } + var ext = cm.display.externalMeasured; + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) + { return ext } +} + +// Measurement can be split in two steps, the set-up work that +// applies to the whole line, and the measurement of the actual +// character. Functions like coordsChar, that need to do a lot of +// measurements in a row, can thus ensure that the set-up work is +// only done once. +function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line); + var view = findViewForLine(cm, lineN); + if (view && !view.text) { + view = null; + } else if (view && view.changes) { + updateLineForChanges(cm, view, lineN, getDimensions(cm)); + cm.curOp.forceUpdate = true; + } + if (!view) + { view = updateExternalMeasurement(cm, line); } + + var info = mapFromLineView(view, line, lineN); + return { + line: line, view: view, rect: null, + map: info.map, cache: info.cache, before: info.before, + hasHeights: false + } +} + +// Given a prepared measurement object, measures the position of an +// actual character (or fetches it from the cache). +function measureCharPrepared(cm, prepared, ch, bias, varHeight) { + if (prepared.before) { ch = -1; } + var key = ch + (bias || ""), found; + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key]; + } else { + if (!prepared.rect) + { prepared.rect = prepared.view.text.getBoundingClientRect(); } + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect); + prepared.hasHeights = true; + } + found = measureCharInner(cm, prepared, ch, bias); + if (!found.bogus) { prepared.cache[key] = found; } + } + return {left: found.left, right: found.right, + top: varHeight ? found.rtop : found.top, + bottom: varHeight ? found.rbottom : found.bottom} +} + +var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; + +function nodeAndOffsetInLineMap(map$$1, ch, bias) { + var node, start, end, collapse, mStart, mEnd; + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map$$1.length; i += 3) { + mStart = map$$1[i]; + mEnd = map$$1[i + 1]; + if (ch < mStart) { + start = 0; end = 1; + collapse = "left"; + } else if (ch < mEnd) { + start = ch - mStart; + end = start + 1; + } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) { + end = mEnd - mStart; + start = end - 1; + if (ch >= mEnd) { collapse = "right"; } + } + if (start != null) { + node = map$$1[i + 2]; + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) + { collapse = bias; } + if (bias == "left" && start == 0) + { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) { + node = map$$1[(i -= 3) + 2]; + collapse = "left"; + } } + if (bias == "right" && start == mEnd - mStart) + { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) { + node = map$$1[(i += 3) + 2]; + collapse = "right"; + } } + break + } + } + return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd} +} + +function getUsefulRect(rects, bias) { + var rect = nullRect; + if (bias == "left") { for (var i = 0; i < rects.length; i++) { + if ((rect = rects[i]).left != rect.right) { break } + } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { + if ((rect = rects[i$1]).left != rect.right) { break } + } } + return rect +} + +function measureCharInner(cm, prepared, ch, bias) { + var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); + var node = place.node, start = place.start, end = place.end, collapse = place.collapse; + + var rect; + if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. + for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned + while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; } + while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; } + if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) + { rect = node.parentNode.getBoundingClientRect(); } + else + { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); } + if (rect.left || rect.right || start == 0) { break } + end = start; + start = start - 1; + collapse = "right"; + } + if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); } + } else { // If it is a widget, simply get the box for the whole widget. + if (start > 0) { collapse = bias = "right"; } + var rects; + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) + { rect = rects[bias == "right" ? rects.length - 1 : 0]; } + else + { rect = node.getBoundingClientRect(); } + } + if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0]; + if (rSpan) + { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; } + else + { rect = nullRect; } + } + + var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; + var mid = (rtop + rbot) / 2; + var heights = prepared.view.measure.heights; + var i = 0; + for (; i < heights.length - 1; i++) + { if (mid < heights[i]) { break } } + var top = i ? heights[i - 1] : 0, bot = heights[i]; + var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, bottom: bot}; + if (!rect.left && !rect.right) { result.bogus = true; } + if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } + + return result +} + +// Work around problem with bounding client rects on ranges being +// returned incorrectly when zoomed on IE10 and below. +function maybeUpdateRectForZooming(measure, rect) { + if (!window.screen || screen.logicalXDPI == null || + screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) + { return rect } + var scaleX = screen.logicalXDPI / screen.deviceXDPI; + var scaleY = screen.logicalYDPI / screen.deviceYDPI; + return {left: rect.left * scaleX, right: rect.right * scaleX, + top: rect.top * scaleY, bottom: rect.bottom * scaleY} +} + +function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {}; + lineView.measure.heights = null; + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { lineView.measure.caches[i] = {}; } } + } +} + +function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null; + removeChildren(cm.display.lineMeasure); + for (var i = 0; i < cm.display.view.length; i++) + { clearLineMeasurementCacheFor(cm.display.view[i]); } +} + +function clearCaches(cm) { + clearLineMeasurementCache(cm); + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; + if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; } + cm.display.lineNumChars = null; +} + +function pageScrollX() { + // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 + // which causes page_Offset and bounding client rects to use + // different reference viewports and invalidate our calculations. + if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) } + return window.pageXOffset || (document.documentElement || document.body).scrollLeft +} +function pageScrollY() { + if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) } + return window.pageYOffset || (document.documentElement || document.body).scrollTop +} + +function widgetTopHeight(lineObj) { + var height = 0; + if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above) + { height += widgetHeight(lineObj.widgets[i]); } } } + return height +} + +// Converts a {top, bottom, left, right} box from line-local +// coordinates into another coordinate system. Context may be one of +// "line", "div" (display.lineDiv), "local"./null (editor), "window", +// or "page". +function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { + if (!includeWidgets) { + var height = widgetTopHeight(lineObj); + rect.top += height; rect.bottom += height; + } + if (context == "line") { return rect } + if (!context) { context = "local"; } + var yOff = heightAtLine(lineObj); + if (context == "local") { yOff += paddingTop(cm.display); } + else { yOff -= cm.display.viewOffset; } + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect(); + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); + rect.left += xOff; rect.right += xOff; + } + rect.top += yOff; rect.bottom += yOff; + return rect +} + +// Coverts a box from "div" coords to another coordinate system. +// Context may be "window", "page", "div", or "local"./null. +function fromCoordSystem(cm, coords, context) { + if (context == "div") { return coords } + var left = coords.left, top = coords.top; + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX(); + top -= pageScrollY(); + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect(); + left += localBox.left; + top += localBox.top; + } + + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); + return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top} +} + +function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) { lineObj = getLine(cm.doc, pos.line); } + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context) +} + +// Returns a box for a given cursor position, which may have an +// 'other' property containing the position of the secondary cursor +// on a bidi boundary. +// A cursor Pos(line, char, "before") is on the same visual line as `char - 1` +// and after `char - 1` in writing order of `char - 1` +// A cursor Pos(line, char, "after") is on the same visual line as `char` +// and before `char` in writing order of `char` +// Examples (upper-case letters are RTL, lower-case are LTR): +// Pos(0, 1, ...) +// before after +// ab a|b a|b +// aB a|B aB| +// Ab |Ab A|b +// AB B|A B|A +// Every position after the last character on a line is considered to stick +// to the last character on the line. +function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { + lineObj = lineObj || getLine(cm.doc, pos.line); + if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); + if (right) { m.left = m.right; } else { m.right = m.left; } + return intoCoordSystem(cm, lineObj, m, context) + } + var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky; + if (ch >= lineObj.text.length) { + ch = lineObj.text.length; + sticky = "before"; + } else if (ch <= 0) { + ch = 0; + sticky = "after"; + } + if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") } + + function getBidi(ch, partPos, invert) { + var part = order[partPos], right = part.level == 1; + return get(invert ? ch - 1 : ch, right != invert) + } + var partPos = getBidiPartAt(order, ch, sticky); + var other = bidiOther; + var val = getBidi(ch, partPos, sticky == "before"); + if (other != null) { val.other = getBidi(ch, other, sticky != "before"); } + return val +} + +// Used to cheaply estimate the coordinates for a position. Used for +// intermediate scroll updates. +function estimateCoords(cm, pos) { + var left = 0; + pos = clipPos(cm.doc, pos); + if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; } + var lineObj = getLine(cm.doc, pos.line); + var top = heightAtLine(lineObj) + paddingTop(cm.display); + return {left: left, right: left, top: top, bottom: top + lineObj.height} +} + +// Positions returned by coordsChar contain some extra information. +// xRel is the relative x position of the input coordinates compared +// to the found position (so xRel > 0 means the coordinates are to +// the right of the character position, for example). When outside +// is true, that means the coordinates lie outside the line's +// vertical range. +function PosWithInfo(line, ch, sticky, outside, xRel) { + var pos = Pos(line, ch, sticky); + pos.xRel = xRel; + if (outside) { pos.outside = true; } + return pos +} + +// Compute the character position closest to the given coordinates. +// Input must be lineSpace-local ("div" coordinate system). +function coordsChar(cm, x, y) { + var doc = cm.doc; + y += cm.display.viewOffset; + if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) } + var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; + if (lineN > last) + { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) } + if (x < 0) { x = 0; } + + var lineObj = getLine(doc, lineN); + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y); + var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0)); + if (!collapsed) { return found } + var rangeEnd = collapsed.find(1); + if (rangeEnd.line == lineN) { return rangeEnd } + lineObj = getLine(doc, lineN = rangeEnd.line); + } +} + +function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { + y -= widgetTopHeight(lineObj); + var end = lineObj.text.length; + var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0); + end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end); + return {begin: begin, end: end} +} + +function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { + if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } + var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top; + return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop) +} + +// Returns true if the given side of a box is after the given +// coordinates, in top-to-bottom, left-to-right order. +function boxIsAfter(box, x, y, left) { + return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x +} + +function coordsCharInner(cm, lineObj, lineNo$$1, x, y) { + // Move y into line-local coordinate space + y -= heightAtLine(lineObj); + var preparedMeasure = prepareMeasureForLine(cm, lineObj); + // When directly calling `measureCharPrepared`, we have to adjust + // for the widgets at this line. + var widgetHeight$$1 = widgetTopHeight(lineObj); + var begin = 0, end = lineObj.text.length, ltr = true; + + var order = getOrder(lineObj, cm.doc.direction); + // If the line isn't plain left-to-right text, first figure out + // which bidi section the coordinates fall into. + if (order) { + var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart) + (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y); + ltr = part.level != 1; + // The awkward -1 offsets are needed because findFirst (called + // on these below) will treat its first bound as inclusive, + // second as exclusive, but we want to actually address the + // characters in the part's range + begin = ltr ? part.from : part.to - 1; + end = ltr ? part.to : part.from - 1; + } + + // A binary search to find the first character whose bounding box + // starts after the coordinates. If we run across any whose box wrap + // the coordinates, store that. + var chAround = null, boxAround = null; + var ch = findFirst(function (ch) { + var box = measureCharPrepared(cm, preparedMeasure, ch); + box.top += widgetHeight$$1; box.bottom += widgetHeight$$1; + if (!boxIsAfter(box, x, y, false)) { return false } + if (box.top <= y && box.left <= x) { + chAround = ch; + boxAround = box; + } + return true + }, begin, end); + + var baseX, sticky, outside = false; + // If a box around the coordinates was found, use that + if (boxAround) { + // Distinguish coordinates nearer to the left or right side of the box + var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr; + ch = chAround + (atStart ? 0 : 1); + sticky = atStart ? "after" : "before"; + baseX = atLeft ? boxAround.left : boxAround.right; + } else { + // (Adjust for extended bound, if necessary.) + if (!ltr && (ch == end || ch == begin)) { ch++; } + // To determine which side to associate with, get the box to the + // left of the character and compare it's vertical position to the + // coordinates + sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : + (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ? + "after" : "before"; + // Now get accurate coordinates for this place, in order to get a + // base X position + var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), "line", lineObj, preparedMeasure); + baseX = coords.left; + outside = y < coords.top || y >= coords.bottom; + } + + ch = skipExtendingChars(lineObj.text, ch, 1); + return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX) +} + +function coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) { + // Bidi parts are sorted left-to-right, and in a non-line-wrapping + // situation, we can take this ordering to correspond to the visual + // ordering. This finds the first part whose end is after the given + // coordinates. + var index = findFirst(function (i) { + var part = order[i], ltr = part.level != 1; + return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? "before" : "after"), + "line", lineObj, preparedMeasure), x, y, true) + }, 0, order.length - 1); + var part = order[index]; + // If this isn't the first part, the part's start is also after + // the coordinates, and the coordinates aren't on the same line as + // that start, move one part back. + if (index > 0) { + var ltr = part.level != 1; + var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? "after" : "before"), + "line", lineObj, preparedMeasure); + if (boxIsAfter(start, x, y, true) && start.top > y) + { part = order[index - 1]; } + } + return part +} + +function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { + // In a wrapped line, rtl text on wrapping boundaries can do things + // that don't correspond to the ordering in our `order` array at + // all, so a binary search doesn't work, and we want to return a + // part that only spans one line so that the binary search in + // coordsCharInner is safe. As such, we first find the extent of the + // wrapped line, and then do a flat search in which we discard any + // spans that aren't on the line. + var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y); + var begin = ref.begin; + var end = ref.end; + if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; } + var part = null, closestDist = null; + for (var i = 0; i < order.length; i++) { + var p = order[i]; + if (p.from >= end || p.to <= begin) { continue } + var ltr = p.level != 1; + var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; + // Weigh against spans ending before this, so that they are only + // picked if nothing ends after + var dist = endX < x ? x - endX + 1e9 : endX - x; + if (!part || closestDist > dist) { + part = p; + closestDist = dist; + } + } + if (!part) { part = order[order.length - 1]; } + // Clip the part to the wrapped line. + if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; } + if (part.to > end) { part = {from: part.from, to: end, level: part.level}; } + return part +} + +var measureText; +// Compute the default text height. +function textHeight(display) { + if (display.cachedTextHeight != null) { return display.cachedTextHeight } + if (measureText == null) { + measureText = elt("pre"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) { display.cachedTextHeight = height; } + removeChildren(display.measure); + return height || 1 +} + +// Compute the default character width. +function charWidth(display) { + if (display.cachedCharWidth != null) { return display.cachedCharWidth } + var anchor = elt("span", "xxxxxxxxxx"); + var pre = elt("pre", [anchor]); + removeChildrenAndAdd(display.measure, pre); + var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; + if (width > 2) { display.cachedCharWidth = width; } + return width || 10 +} + +// Do a bulk-read of the DOM positions and sizes needed to draw the +// view, so that we don't interleave reading and writing to the DOM. +function getDimensions(cm) { + var d = cm.display, left = {}, width = {}; + var gutterLeft = d.gutters.clientLeft; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; + width[cm.options.gutters[i]] = n.clientWidth; + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth} +} + +// Computes display.scroller.scrollLeft + display.gutters.offsetWidth, +// but using getBoundingClientRect to get a sub-pixel-accurate +// result. +function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left +} + +// Returns a function that estimates the height of a line, to use as +// first approximation until the line becomes visible (and is thus +// properly measurable). +function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); + return function (line) { + if (lineIsHidden(cm.doc, line)) { return 0 } + + var widgetsHeight = 0; + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; } + } } + + if (wrapping) + { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th } + else + { return widgetsHeight + th } + } +} + +function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm); + doc.iter(function (line) { + var estHeight = est(line); + if (estHeight != line.height) { updateLineHeight(line, estHeight); } + }); +} + +// Given a mouse event, find the corresponding position. If liberal +// is false, it checks whether a gutter or scrollbar was clicked, +// and returns null if it was. forRect is used by rectangular +// selections, and tries to estimate a character position even for +// coordinates beyond the right of the text. +function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display; + if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null } + + var x, y, space = display.lineSpace.getBoundingClientRect(); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX - space.left; y = e.clientY - space.top; } + catch (e) { return null } + var coords = coordsChar(cm, x, y), line; + if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; + coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); + } + return coords +} + +// Find the view element corresponding to a given line. Return null +// when the line isn't visible. +function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) { return null } + n -= cm.display.viewFrom; + if (n < 0) { return null } + var view = cm.display.view; + for (var i = 0; i < view.length; i++) { + n -= view[i].size; + if (n < 0) { return i } + } +} + +function updateSelection(cm) { + cm.display.input.showSelection(cm.display.input.prepareSelection()); +} + +function prepareSelection(cm, primary) { + if ( primary === void 0 ) primary = true; + + var doc = cm.doc, result = {}; + var curFragment = result.cursors = document.createDocumentFragment(); + var selFragment = result.selection = document.createDocumentFragment(); + + for (var i = 0; i < doc.sel.ranges.length; i++) { + if (!primary && i == doc.sel.primIndex) { continue } + var range$$1 = doc.sel.ranges[i]; + if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue } + var collapsed = range$$1.empty(); + if (collapsed || cm.options.showCursorWhenSelecting) + { drawSelectionCursor(cm, range$$1.head, curFragment); } + if (!collapsed) + { drawSelectionRange(cm, range$$1, selFragment); } + } + return result +} + +// Draws a cursor for the given range +function drawSelectionCursor(cm, head, output) { + var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); + + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); + cursor.style.left = pos.left + "px"; + cursor.style.top = pos.top + "px"; + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); + otherCursor.style.display = ""; + otherCursor.style.left = pos.other.left + "px"; + otherCursor.style.top = pos.other.top + "px"; + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } +} + +function cmpCoords(a, b) { return a.top - b.top || a.left - b.left } + +// Draws the given range as a highlighted selection +function drawSelectionRange(cm, range$$1, output) { + var display = cm.display, doc = cm.doc; + var fragment = document.createDocumentFragment(); + var padding = paddingH(cm.display), leftSide = padding.left; + var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; + var docLTR = doc.direction == "ltr"; + + function add(left, top, width, bottom) { + if (top < 0) { top = 0; } + top = Math.round(top); + bottom = Math.round(bottom); + fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px"))); + } + + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length; + var start, end; + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias) + } + + function wrapX(pos, dir, side) { + var extent = wrappedLineExtentChar(cm, lineObj, null, pos); + var prop = (dir == "ltr") == (side == "after") ? "left" : "right"; + var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1); + return coords(ch, prop)[prop] + } + + var order = getOrder(lineObj, doc.direction); + iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) { + var ltr = dir == "ltr"; + var fromPos = coords(from, ltr ? "left" : "right"); + var toPos = coords(to - 1, ltr ? "right" : "left"); + + var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen; + var first = i == 0, last = !order || i == order.length - 1; + if (toPos.top - fromPos.top <= 3) { // Single line + var openLeft = (docLTR ? openStart : openEnd) && first; + var openRight = (docLTR ? openEnd : openStart) && last; + var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left; + var right = openRight ? rightSide : (ltr ? toPos : fromPos).right; + add(left, fromPos.top, right - left, fromPos.bottom); + } else { // Multiple lines + var topLeft, topRight, botLeft, botRight; + if (ltr) { + topLeft = docLTR && openStart && first ? leftSide : fromPos.left; + topRight = docLTR ? rightSide : wrapX(from, dir, "before"); + botLeft = docLTR ? leftSide : wrapX(to, dir, "after"); + botRight = docLTR && openEnd && last ? rightSide : toPos.right; + } else { + topLeft = !docLTR ? leftSide : wrapX(from, dir, "before"); + topRight = !docLTR && openStart && first ? rightSide : fromPos.right; + botLeft = !docLTR && openEnd && last ? leftSide : toPos.left; + botRight = !docLTR ? rightSide : wrapX(to, dir, "after"); + } + add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom); + if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); } + add(botLeft, toPos.top, botRight - botLeft, toPos.bottom); + } + + if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; } + if (cmpCoords(toPos, start) < 0) { start = toPos; } + if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; } + if (cmpCoords(toPos, end) < 0) { end = toPos; } + }); + return {start: start, end: end} + } + + var sFrom = range$$1.from(), sTo = range$$1.to(); + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch); + } else { + var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); + var singleVLine = visualLine(fromLine) == visualLine(toLine); + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); + } + } + if (leftEnd.bottom < rightStart.top) + { add(leftSide, leftEnd.bottom, null, rightStart.top); } + } + + output.appendChild(fragment); +} + +// Cursor-blinking +function restartBlink(cm) { + if (!cm.state.focused) { return } + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursorDiv.style.visibility = ""; + if (cm.options.cursorBlinkRate > 0) + { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; }, + cm.options.cursorBlinkRate); } + else if (cm.options.cursorBlinkRate < 0) + { display.cursorDiv.style.visibility = "hidden"; } +} + +function ensureFocus(cm) { + if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); } +} + +function delayBlurEvent(cm) { + cm.state.delayingBlurEvent = true; + setTimeout(function () { if (cm.state.delayingBlurEvent) { + cm.state.delayingBlurEvent = false; + onBlur(cm); + } }, 100); +} + +function onFocus(cm, e) { + if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; } + + if (cm.options.readOnly == "nocursor") { return } + if (!cm.state.focused) { + signal(cm, "focus", cm, e); + cm.state.focused = true; + addClass(cm.display.wrapper, "CodeMirror-focused"); + // This test prevents this from firing when a context + // menu is closed (since the input reset would kill the + // select-all detection hack) + if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { + cm.display.input.reset(); + if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730 + } + cm.display.input.receivedFocus(); + } + restartBlink(cm); +} +function onBlur(cm, e) { + if (cm.state.delayingBlurEvent) { return } + + if (cm.state.focused) { + signal(cm, "blur", cm, e); + cm.state.focused = false; + rmClass(cm.display.wrapper, "CodeMirror-focused"); + } + clearInterval(cm.display.blinker); + setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150); +} + +// Read the actual heights of the rendered lines, and update their +// stored heights to match. +function updateHeightsInViewport(cm) { + var display = cm.display; + var prevBottom = display.lineDiv.offsetTop; + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], height = (void 0); + if (cur.hidden) { continue } + if (ie && ie_version < 8) { + var bot = cur.node.offsetTop + cur.node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = cur.node.getBoundingClientRect(); + height = box.bottom - box.top; + } + var diff = cur.line.height - height; + if (height < 2) { height = textHeight(display); } + if (diff > .005 || diff < -.005) { + updateLineHeight(cur.line, height); + updateWidgetHeight(cur.line); + if (cur.rest) { for (var j = 0; j < cur.rest.length; j++) + { updateWidgetHeight(cur.rest[j]); } } + } + } +} + +// Read and store the height of line widgets associated with the +// given line. +function updateWidgetHeight(line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) { + var w = line.widgets[i], parent = w.node.parentNode; + if (parent) { w.height = parent.offsetHeight; } + } } +} + +// Compute the lines that are visible in a given viewport (defaults +// the the current scroll position). viewport may contain top, +// height, and ensure (see op.scrollToPos) properties. +function visibleLines(display, doc, viewport) { + var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; + top = Math.floor(top - paddingTop(display)); + var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; + + var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewport && viewport.ensure) { + var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; + if (ensureFrom < from) { + from = ensureFrom; + to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); + } else if (Math.min(ensureTo, doc.lastLine()) >= to) { + from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); + to = ensureTo; + } + } + return {from: from, to: Math.max(to, from + 1)} +} + +// Re-align line numbers and gutter marks to compensate for +// horizontal scrolling. +function alignHorizontally(cm) { + var display = cm.display, view = display.view; + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return } + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; + var gutterW = display.gutters.offsetWidth, left = comp + "px"; + for (var i = 0; i < view.length; i++) { if (!view[i].hidden) { + if (cm.options.fixedGutter) { + if (view[i].gutter) + { view[i].gutter.style.left = left; } + if (view[i].gutterBackground) + { view[i].gutterBackground.style.left = left; } + } + var align = view[i].alignable; + if (align) { for (var j = 0; j < align.length; j++) + { align[j].style.left = left; } } + } } + if (cm.options.fixedGutter) + { display.gutters.style.left = (comp + gutterW) + "px"; } +} + +// Used to ensure that the line number gutter is still the right +// size for the current document size. Returns true when an update +// is needed. +function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) { return false } + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + updateGutterSpace(cm); + return true + } + return false +} + +// SCROLLING THINGS INTO VIEW + +// If an editor sits on the top or bottom of the window, partially +// scrolled out of view, this ensures that the cursor is visible. +function maybeScrollWindow(cm, rect) { + if (signalDOMEvent(cm, "scrollCursorIntoView")) { return } + + var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; + if (rect.top + box.top < 0) { doScroll = true; } + else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; } + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;")); + cm.display.lineSpace.appendChild(scrollNode); + scrollNode.scrollIntoView(doScroll); + cm.display.lineSpace.removeChild(scrollNode); + } +} + +// Scroll a given position into view (immediately), verifying that +// it actually became visible (as line heights are accurately +// measured, the position of something may 'drift' during drawing). +function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) { margin = 0; } + var rect; + if (!cm.options.lineWrapping && pos == end) { + // Set pos and end to the cursor positions around the character pos sticks to + // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch + // If pos == Pos(_, 0, "before"), pos and end are unchanged + pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos; + end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; + } + for (var limit = 0; limit < 5; limit++) { + var changed = false; + var coords = cursorCoords(cm, pos); + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); + rect = {left: Math.min(coords.left, endCoords.left), + top: Math.min(coords.top, endCoords.top) - margin, + right: Math.max(coords.left, endCoords.left), + bottom: Math.max(coords.bottom, endCoords.bottom) + margin}; + var scrollPos = calculateScrollPos(cm, rect); + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; + if (scrollPos.scrollTop != null) { + updateScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; } + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; } + } + if (!changed) { break } + } + return rect +} + +// Scroll a given set of coordinates into view (immediately). +function scrollIntoView(cm, rect) { + var scrollPos = calculateScrollPos(cm, rect); + if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); } + if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); } +} + +// Calculate a new scroll position needed to scroll the given +// rectangle into view. Returns an object with scrollTop and +// scrollLeft properties. When these are undefined, the +// vertical/horizontal position does not need to be adjusted. +function calculateScrollPos(cm, rect) { + var display = cm.display, snapMargin = textHeight(cm.display); + if (rect.top < 0) { rect.top = 0; } + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; + var screen = displayHeight(cm), result = {}; + if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; } + var docBottom = cm.doc.height + paddingVert(display); + var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin; + if (rect.top < screentop) { + result.scrollTop = atTop ? 0 : rect.top; + } else if (rect.bottom > screentop + screen) { + var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen); + if (newTop != screentop) { result.scrollTop = newTop; } + } + + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; + var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); + var tooWide = rect.right - rect.left > screenw; + if (tooWide) { rect.right = rect.left + screenw; } + if (rect.left < 10) + { result.scrollLeft = 0; } + else if (rect.left < screenleft) + { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); } + else if (rect.right > screenw + screenleft - 3) + { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; } + return result +} + +// Store a relative adjustment to the scroll position in the current +// operation (to be applied when the operation finishes). +function addToScrollTop(cm, top) { + if (top == null) { return } + resolveScrollToPos(cm); + cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; +} + +// Make sure that at the end of the operation the current cursor is +// shown. +function ensureCursorVisible(cm) { + resolveScrollToPos(cm); + var cur = cm.getCursor(); + cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin}; +} + +function scrollToCoords(cm, x, y) { + if (x != null || y != null) { resolveScrollToPos(cm); } + if (x != null) { cm.curOp.scrollLeft = x; } + if (y != null) { cm.curOp.scrollTop = y; } +} + +function scrollToRange(cm, range$$1) { + resolveScrollToPos(cm); + cm.curOp.scrollToPos = range$$1; +} + +// When an operation has its scrollToPos property set, and another +// scroll action is applied before the end of the operation, this +// 'simulates' scrolling that position into view in a cheap way, so +// that the effect of intermediate scroll commands is not ignored. +function resolveScrollToPos(cm) { + var range$$1 = cm.curOp.scrollToPos; + if (range$$1) { + cm.curOp.scrollToPos = null; + var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to); + scrollToCoordsRange(cm, from, to, range$$1.margin); + } +} + +function scrollToCoordsRange(cm, from, to, margin) { + var sPos = calculateScrollPos(cm, { + left: Math.min(from.left, to.left), + top: Math.min(from.top, to.top) - margin, + right: Math.max(from.right, to.right), + bottom: Math.max(from.bottom, to.bottom) + margin + }); + scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); +} + +// Sync the scrollable area and scrollbars, ensure the viewport +// covers the visible area. +function updateScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) { return } + if (!gecko) { updateDisplaySimple(cm, {top: val}); } + setScrollTop(cm, val, true); + if (gecko) { updateDisplaySimple(cm); } + startWorker(cm, 100); +} + +function setScrollTop(cm, val, forceScroll) { + val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val); + if (cm.display.scroller.scrollTop == val && !forceScroll) { return } + cm.doc.scrollTop = val; + cm.display.scrollbars.setScrollTop(val); + if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; } +} + +// Sync scroller and scrollbar, ensure the gutter elements are +// aligned. +function setScrollLeft(cm, val, isScroller, forceScroll) { + val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); + if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return } + cm.doc.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; } + cm.display.scrollbars.setScrollLeft(val); +} + +// SCROLLBARS + +// Prepare DOM reads needed to update the scrollbars. Done in one +// shot to minimize update/measure roundtrips. +function measureForScrollbars(cm) { + var d = cm.display, gutterW = d.gutters.offsetWidth; + var docH = Math.round(cm.doc.height + paddingVert(cm.display)); + return { + clientHeight: d.scroller.clientHeight, + viewHeight: d.wrapper.clientHeight, + scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, + viewWidth: d.wrapper.clientWidth, + barLeft: cm.options.fixedGutter ? gutterW : 0, + docHeight: docH, + scrollHeight: docH + scrollGap(cm) + d.barHeight, + nativeBarWidth: d.nativeBarWidth, + gutterWidth: gutterW + } +} + +var NativeScrollbars = function(place, scroll, cm) { + this.cm = cm; + var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); + var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); + vert.tabIndex = horiz.tabIndex = -1; + place(vert); place(horiz); + + on(vert, "scroll", function () { + if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); } + }); + on(horiz, "scroll", function () { + if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); } + }); + + this.checkedZeroWidth = false; + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; } +}; + +NativeScrollbars.prototype.update = function (measure) { + var needsH = measure.scrollWidth > measure.clientWidth + 1; + var needsV = measure.scrollHeight > measure.clientHeight + 1; + var sWidth = measure.nativeBarWidth; + + if (needsV) { + this.vert.style.display = "block"; + this.vert.style.bottom = needsH ? sWidth + "px" : "0"; + var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); + // A bug in IE8 can cause this value to be negative, so guard it. + this.vert.firstChild.style.height = + Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; + } else { + this.vert.style.display = ""; + this.vert.firstChild.style.height = "0"; + } + + if (needsH) { + this.horiz.style.display = "block"; + this.horiz.style.right = needsV ? sWidth + "px" : "0"; + this.horiz.style.left = measure.barLeft + "px"; + var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); + this.horiz.firstChild.style.width = + Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; + } else { + this.horiz.style.display = ""; + this.horiz.firstChild.style.width = "0"; + } + + if (!this.checkedZeroWidth && measure.clientHeight > 0) { + if (sWidth == 0) { this.zeroWidthHack(); } + this.checkedZeroWidth = true; + } + + return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0} +}; + +NativeScrollbars.prototype.setScrollLeft = function (pos) { + if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; } + if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); } +}; + +NativeScrollbars.prototype.setScrollTop = function (pos) { + if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; } + if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); } +}; + +NativeScrollbars.prototype.zeroWidthHack = function () { + var w = mac && !mac_geMountainLion ? "12px" : "18px"; + this.horiz.style.height = this.vert.style.width = w; + this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; + this.disableHoriz = new Delayed; + this.disableVert = new Delayed; +}; + +NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { + bar.style.pointerEvents = "auto"; + function maybeDisable() { + // To find out whether the scrollbar is still visible, we + // check whether the element under the pixel in the bottom + // right corner of the scrollbar box is the scrollbar box + // itself (when the bar is still visible) or its filler child + // (when the bar is hidden). If it is still visible, we keep + // it enabled, if it's hidden, we disable pointer events. + var box = bar.getBoundingClientRect(); + var elt$$1 = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) + : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); + if (elt$$1 != bar) { bar.style.pointerEvents = "none"; } + else { delay.set(1000, maybeDisable); } + } + delay.set(1000, maybeDisable); +}; + +NativeScrollbars.prototype.clear = function () { + var parent = this.horiz.parentNode; + parent.removeChild(this.horiz); + parent.removeChild(this.vert); +}; + +var NullScrollbars = function () {}; + +NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} }; +NullScrollbars.prototype.setScrollLeft = function () {}; +NullScrollbars.prototype.setScrollTop = function () {}; +NullScrollbars.prototype.clear = function () {}; + +function updateScrollbars(cm, measure) { + if (!measure) { measure = measureForScrollbars(cm); } + var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; + updateScrollbarsInner(cm, measure); + for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { + if (startWidth != cm.display.barWidth && cm.options.lineWrapping) + { updateHeightsInViewport(cm); } + updateScrollbarsInner(cm, measureForScrollbars(cm)); + startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; + } +} + +// Re-synchronize the fake scrollbars with the actual size of the +// content. +function updateScrollbarsInner(cm, measure) { + var d = cm.display; + var sizes = d.scrollbars.update(measure); + + d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; + d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; + d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; + + if (sizes.right && sizes.bottom) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = sizes.bottom + "px"; + d.scrollbarFiller.style.width = sizes.right + "px"; + } else { d.scrollbarFiller.style.display = ""; } + if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block"; + d.gutterFiller.style.height = sizes.bottom + "px"; + d.gutterFiller.style.width = measure.gutterWidth + "px"; + } else { d.gutterFiller.style.display = ""; } +} + +var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; + +function initScrollbars(cm) { + if (cm.display.scrollbars) { + cm.display.scrollbars.clear(); + if (cm.display.scrollbars.addClass) + { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); } + } + + cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { + cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); + // Prevent clicks in the scrollbars from killing focus + on(node, "mousedown", function () { + if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); } + }); + node.setAttribute("cm-not-content", "true"); + }, function (pos, axis) { + if (axis == "horizontal") { setScrollLeft(cm, pos); } + else { updateScrollTop(cm, pos); } + }, cm); + if (cm.display.scrollbars.addClass) + { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); } +} + +// Operations are used to wrap a series of changes to the editor +// state in such a way that each change won't have to update the +// cursor and display (which would be awkward, slow, and +// error-prone). Instead, display updates are batched and then all +// combined and executed at once. + +var nextOpId = 0; +// Start a new operation. +function startOperation(cm) { + cm.curOp = { + cm: cm, + viewChanged: false, // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, // Used to detect need to update scrollbar + forceUpdate: false, // Used to force a redraw + updateInput: null, // Whether to reset the input textarea + typing: false, // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, // Accumulated changes, for firing change events + cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on + cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already + selectionChanged: false, // Whether the selection needs to be redrawn + updateMaxLine: false, // Set when the widest line needs to be determined anew + scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, // Used to scroll to a specific position + focus: false, + id: ++nextOpId // Unique ID + }; + pushOperation(cm.curOp); +} + +// Finish an operation, updating the display and signalling delayed events +function endOperation(cm) { + var op = cm.curOp; + finishOperation(op, function (group) { + for (var i = 0; i < group.ops.length; i++) + { group.ops[i].cm.curOp = null; } + endOperations(group); + }); +} + +// The DOM updates done when an operation finishes are batched so +// that the minimum number of relayouts are required. +function endOperations(group) { + var ops = group.ops; + for (var i = 0; i < ops.length; i++) // Read DOM + { endOperation_R1(ops[i]); } + for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe) + { endOperation_W1(ops[i$1]); } + for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM + { endOperation_R2(ops[i$2]); } + for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe) + { endOperation_W2(ops[i$3]); } + for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM + { endOperation_finish(ops[i$4]); } +} + +function endOperation_R1(op) { + var cm = op.cm, display = cm.display; + maybeClipScrollbars(cm); + if (op.updateMaxLine) { findMaxLine(cm); } + + op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || + op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || + op.scrollToPos.to.line >= display.viewTo) || + display.maxLineChanged && cm.options.lineWrapping; + op.update = op.mustUpdate && + new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); +} + +function endOperation_W1(op) { + op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); +} + +function endOperation_R2(op) { + var cm = op.cm, display = cm.display; + if (op.updatedDisplay) { updateHeightsInViewport(cm); } + + op.barMeasure = measureForScrollbars(cm); + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + // updateDisplay_W2 will use these properties to do the actual resizing + if (display.maxLineChanged && !cm.options.lineWrapping) { + op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; + cm.display.sizerWidth = op.adjustWidthTo; + op.barMeasure.scrollWidth = + Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); + op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); + } + + if (op.updatedDisplay || op.selectionChanged) + { op.preparedSelection = display.input.prepareSelection(); } +} + +function endOperation_W2(op) { + var cm = op.cm; + + if (op.adjustWidthTo != null) { + cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; + if (op.maxScrollLeft < cm.doc.scrollLeft) + { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); } + cm.display.maxLineChanged = false; + } + + var takeFocus = op.focus && op.focus == activeElt(); + if (op.preparedSelection) + { cm.display.input.showSelection(op.preparedSelection, takeFocus); } + if (op.updatedDisplay || op.startHeight != cm.doc.height) + { updateScrollbars(cm, op.barMeasure); } + if (op.updatedDisplay) + { setDocumentHeight(cm, op.barMeasure); } + + if (op.selectionChanged) { restartBlink(cm); } + + if (cm.state.focused && op.updateInput) + { cm.display.input.reset(op.typing); } + if (takeFocus) { ensureFocus(op.cm); } +} + +function endOperation_finish(op) { + var cm = op.cm, display = cm.display, doc = cm.doc; + + if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); } + + // Abort mouse wheel delta measurement, when scrolling explicitly + if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) + { display.wheelStartX = display.wheelStartY = null; } + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); } + + if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), + clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); + maybeScrollWindow(cm, rect); + } + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; + if (hidden) { for (var i = 0; i < hidden.length; ++i) + { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } } + if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1) + { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } } + + if (display.wrapper.offsetHeight) + { doc.scrollTop = cm.display.scroller.scrollTop; } + + // Fire change events, and delayed event handlers + if (op.changeObjs) + { signal(cm, "changes", cm, op.changeObjs); } + if (op.update) + { op.update.finish(); } +} + +// Run the given function in an operation +function runInOp(cm, f) { + if (cm.curOp) { return f() } + startOperation(cm); + try { return f() } + finally { endOperation(cm); } +} +// Wraps a function in an operation. Returns the wrapped function. +function operation(cm, f) { + return function() { + if (cm.curOp) { return f.apply(cm, arguments) } + startOperation(cm); + try { return f.apply(cm, arguments) } + finally { endOperation(cm); } + } +} +// Used to add methods to editor and doc instances, wrapping them in +// operations. +function methodOp(f) { + return function() { + if (this.curOp) { return f.apply(this, arguments) } + startOperation(this); + try { return f.apply(this, arguments) } + finally { endOperation(this); } + } +} +function docMethodOp(f) { + return function() { + var cm = this.cm; + if (!cm || cm.curOp) { return f.apply(this, arguments) } + startOperation(cm); + try { return f.apply(this, arguments) } + finally { endOperation(cm); } + } +} + +// Updates the display.view data structure for a given change to the +// document. From and to are in pre-change coordinates. Lendiff is +// the amount of lines added or subtracted by the change. This is +// used for changes that span multiple lines, or change the way +// lines are divided into visual lines. regLineChange (below) +// registers single-line changes. +function regChange(cm, from, to, lendiff) { + if (from == null) { from = cm.doc.first; } + if (to == null) { to = cm.doc.first + cm.doc.size; } + if (!lendiff) { lendiff = 0; } + + var display = cm.display; + if (lendiff && to < display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers > from)) + { display.updateLineNumbers = from; } + + cm.curOp.viewChanged = true; + + if (from >= display.viewTo) { // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) + { resetView(cm); } + } else if (to <= display.viewFrom) { // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm); + } else { + display.viewFrom += lendiff; + display.viewTo += lendiff; + } + } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap + resetView(cm); + } else if (from <= display.viewFrom) { // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cut) { + display.view = display.view.slice(cut.index); + display.viewFrom = cut.lineN; + display.viewTo += lendiff; + } else { + resetView(cm); + } + } else if (to >= display.viewTo) { // Bottom overlap + var cut$1 = viewCuttingPoint(cm, from, from, -1); + if (cut$1) { + display.view = display.view.slice(0, cut$1.index); + display.viewTo = cut$1.lineN; + } else { + resetView(cm); + } + } else { // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1); + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index) + .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) + .concat(display.view.slice(cutBot.index)); + display.viewTo += lendiff; + } else { + resetView(cm); + } + } + + var ext = display.externalMeasured; + if (ext) { + if (to < ext.lineN) + { ext.lineN += lendiff; } + else if (from < ext.lineN + ext.size) + { display.externalMeasured = null; } + } +} + +// Register a change to a single line. Type must be one of "text", +// "gutter", "class", "widget" +function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true; + var display = cm.display, ext = cm.display.externalMeasured; + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) + { display.externalMeasured = null; } + + if (line < display.viewFrom || line >= display.viewTo) { return } + var lineView = display.view[findViewIndex(cm, line)]; + if (lineView.node == null) { return } + var arr = lineView.changes || (lineView.changes = []); + if (indexOf(arr, type) == -1) { arr.push(type); } +} + +// Clear the view. +function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first; + cm.display.view = []; + cm.display.viewOffset = 0; +} + +function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), diff, view = cm.display.view; + if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) + { return {index: index, lineN: newN} } + var n = cm.display.viewFrom; + for (var i = 0; i < index; i++) + { n += view[i].size; } + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) { return null } + diff = (n + view[index].size) - oldN; + index++; + } else { + diff = n - oldN; + } + oldN += diff; newN += diff; + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) { return null } + newN += dir * view[index - (dir < 0 ? 1 : 0)].size; + index += dir; + } + return {index: index, lineN: newN} +} + +// Force the view to cover a given range, adding empty view element +// or clipping off existing ones as needed. +function adjustView(cm, from, to) { + var display = cm.display, view = display.view; + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to); + display.viewFrom = from; + } else { + if (display.viewFrom > from) + { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); } + else if (display.viewFrom < from) + { display.view = display.view.slice(findViewIndex(cm, from)); } + display.viewFrom = from; + if (display.viewTo < to) + { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); } + else if (display.viewTo > to) + { display.view = display.view.slice(0, findViewIndex(cm, to)); } + } + display.viewTo = to; +} + +// Count the number of lines in the view whose DOM representation is +// out of date (or nonexistent). +function countDirtyView(cm) { + var view = cm.display.view, dirty = 0; + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; } + } + return dirty +} + +// HIGHLIGHT WORKER + +function startWorker(cm, time) { + if (cm.doc.highlightFrontier < cm.display.viewTo) + { cm.state.highlight.set(time, bind(highlightWorker, cm)); } +} + +function highlightWorker(cm) { + var doc = cm.doc; + if (doc.highlightFrontier >= cm.display.viewTo) { return } + var end = +new Date + cm.options.workTime; + var context = getContextBefore(cm, doc.highlightFrontier); + var changedLines = []; + + doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { + if (context.line >= cm.display.viewFrom) { // Visible + var oldStyles = line.styles; + var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null; + var highlighted = highlightLine(cm, line, context, true); + if (resetState) { context.state = resetState; } + line.styles = highlighted.styles; + var oldCls = line.styleClasses, newCls = highlighted.classes; + if (newCls) { line.styleClasses = newCls; } + else if (oldCls) { line.styleClasses = null; } + var ischange = !oldStyles || oldStyles.length != line.styles.length || + oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); + for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; } + if (ischange) { changedLines.push(context.line); } + line.stateAfter = context.save(); + context.nextLine(); + } else { + if (line.text.length <= cm.options.maxHighlightLength) + { processLine(cm, line.text, context); } + line.stateAfter = context.line % 5 == 0 ? context.save() : null; + context.nextLine(); + } + if (+new Date > end) { + startWorker(cm, cm.options.workDelay); + return true + } + }); + doc.highlightFrontier = context.line; + doc.modeFrontier = Math.max(doc.modeFrontier, context.line); + if (changedLines.length) { runInOp(cm, function () { + for (var i = 0; i < changedLines.length; i++) + { regLineChange(cm, changedLines[i], "text"); } + }); } +} + +// DISPLAY DRAWING + +var DisplayUpdate = function(cm, viewport, force) { + var display = cm.display; + + this.viewport = viewport; + // Store some values that we'll need later (but don't want to force a relayout for) + this.visible = visibleLines(display, cm.doc, viewport); + this.editorIsHidden = !display.wrapper.offsetWidth; + this.wrapperHeight = display.wrapper.clientHeight; + this.wrapperWidth = display.wrapper.clientWidth; + this.oldDisplayWidth = displayWidth(cm); + this.force = force; + this.dims = getDimensions(cm); + this.events = []; +}; + +DisplayUpdate.prototype.signal = function (emitter, type) { + if (hasHandler(emitter, type)) + { this.events.push(arguments); } +}; +DisplayUpdate.prototype.finish = function () { + var this$1 = this; + + for (var i = 0; i < this.events.length; i++) + { signal.apply(null, this$1.events[i]); } +}; + +function maybeClipScrollbars(cm) { + var display = cm.display; + if (!display.scrollbarsClipped && display.scroller.offsetWidth) { + display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; + display.heightForcer.style.height = scrollGap(cm) + "px"; + display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; + display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; + display.scrollbarsClipped = true; + } +} + +function selectionSnapshot(cm) { + if (cm.hasFocus()) { return null } + var active = activeElt(); + if (!active || !contains(cm.display.lineDiv, active)) { return null } + var result = {activeElt: active}; + if (window.getSelection) { + var sel = window.getSelection(); + if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { + result.anchorNode = sel.anchorNode; + result.anchorOffset = sel.anchorOffset; + result.focusNode = sel.focusNode; + result.focusOffset = sel.focusOffset; + } + } + return result +} + +function restoreSelection(snapshot) { + if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return } + snapshot.activeElt.focus(); + if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { + var sel = window.getSelection(), range$$1 = document.createRange(); + range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset); + range$$1.collapse(false); + sel.removeAllRanges(); + sel.addRange(range$$1); + sel.extend(snapshot.focusNode, snapshot.focusOffset); + } +} + +// Does the actual updating of the line display. Bails out +// (returning false) when there is nothing to be done and forced is +// false. +function updateDisplayIfNeeded(cm, update) { + var display = cm.display, doc = cm.doc; + + if (update.editorIsHidden) { + resetView(cm); + return false + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!update.force && + update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && + display.renderedView == display.view && countDirtyView(cm) == 0) + { return false } + + if (maybeUpdateLineNumberWidth(cm)) { + resetView(cm); + update.dims = getDimensions(cm); + } + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size; + var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); + var to = Math.min(end, update.visible.to + cm.options.viewportMargin); + if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); } + if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); } + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from); + to = visualLineEndNo(cm.doc, to); + } + + var different = from != display.viewFrom || to != display.viewTo || + display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; + adjustView(cm, from, to); + + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px"; + + var toUpdate = countDirtyView(cm); + if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) + { return false } + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var selSnapshot = selectionSnapshot(cm); + if (toUpdate > 4) { display.lineDiv.style.display = "none"; } + patchDisplay(cm, display.updateLineNumbers, update.dims); + if (toUpdate > 4) { display.lineDiv.style.display = ""; } + display.renderedView = display.view; + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + restoreSelection(selSnapshot); + + // Prevent selection and cursors from interfering with the scroll + // width and height. + removeChildren(display.cursorDiv); + removeChildren(display.selectionDiv); + display.gutters.style.height = display.sizer.style.minHeight = 0; + + if (different) { + display.lastWrapHeight = update.wrapperHeight; + display.lastWrapWidth = update.wrapperWidth; + startWorker(cm, 400); + } + + display.updateLineNumbers = null; + + return true +} + +function postUpdateDisplay(cm, update) { + var viewport = update.viewport; + + for (var first = true;; first = false) { + if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { + // Clip forced viewport to actual scrollable area. + if (viewport && viewport.top != null) + { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; } + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + update.visible = visibleLines(cm.display, cm.doc, viewport); + if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) + { break } + } + if (!updateDisplayIfNeeded(cm, update)) { break } + updateHeightsInViewport(cm); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.force = false; + } + + update.signal(cm, "update", cm); + if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { + update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); + cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; + } +} + +function updateDisplaySimple(cm, viewport) { + var update = new DisplayUpdate(cm, viewport); + if (updateDisplayIfNeeded(cm, update)) { + updateHeightsInViewport(cm); + postUpdateDisplay(cm, update); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.finish(); + } +} + +// Sync the actual display DOM structure with display.view, removing +// nodes for lines that are no longer in view, and creating the ones +// that are not there yet, and updating the ones that are out of +// date. +function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, lineNumbers = cm.options.lineNumbers; + var container = display.lineDiv, cur = container.firstChild; + + function rm(node) { + var next = node.nextSibling; + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) + { node.style.display = "none"; } + else + { node.parentNode.removeChild(node); } + return next + } + + var view = display.view, lineN = display.viewFrom; + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (lineView.hidden) { + } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims); + container.insertBefore(node, cur); + } else { // Already drawn + while (cur != lineView.node) { cur = rm(cur); } + var updateNumber = lineNumbers && updateNumbersFrom != null && + updateNumbersFrom <= lineN && lineView.lineNumber; + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; } + updateLineForChanges(cm, lineView, lineN, dims); + } + if (updateNumber) { + removeChildren(lineView.lineNumber); + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); + } + cur = lineView.node.nextSibling; + } + lineN += lineView.size; + } + while (cur) { cur = rm(cur); } +} + +function updateGutterSpace(cm) { + var width = cm.display.gutters.offsetWidth; + cm.display.sizer.style.marginLeft = width + "px"; +} + +function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = measure.docHeight + "px"; + cm.display.heightForcer.style.top = measure.docHeight + "px"; + cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"; +} + +// Rebuild the gutter elements, ensure the margin to the left of the +// code matches their width. +function updateGutters(cm) { + var gutters = cm.display.gutters, specs = cm.options.gutters; + removeChildren(gutters); + var i = 0; + for (; i < specs.length; ++i) { + var gutterClass = specs[i]; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); + if (gutterClass == "CodeMirror-linenumbers") { + cm.display.lineGutter = gElt; + gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = i ? "" : "none"; + updateGutterSpace(cm); +} + +// Make sure the gutters options contains the element +// "CodeMirror-linenumbers" when the lineNumbers option is true. +function setGuttersForLineNumbers(options) { + var found = indexOf(options.gutters, "CodeMirror-linenumbers"); + if (found == -1 && options.lineNumbers) { + options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); + } else if (found > -1 && !options.lineNumbers) { + options.gutters = options.gutters.slice(0); + options.gutters.splice(found, 1); + } +} + +// Since the delta values reported on mouse wheel events are +// unstandardized between browsers and even browser versions, and +// generally horribly unpredictable, this code starts by measuring +// the scroll effect that the first few mouse wheel events have, +// and, from that, detects the way it can convert deltas to pixel +// offsets afterwards. +// +// The reason we want to know the amount a wheel event will scroll +// is that it gives us a chance to update the display before the +// actual scrolling happens, reducing flickering. + +var wheelSamples = 0; +var wheelPixelsPerUnit = null; +// Fill in a browser-detected starting value on browsers where we +// know one. These don't have to be accurate -- the result of them +// being wrong would just be a slight flicker on the first wheel +// scroll (if it is large enough). +if (ie) { wheelPixelsPerUnit = -.53; } +else if (gecko) { wheelPixelsPerUnit = 15; } +else if (chrome) { wheelPixelsPerUnit = -.7; } +else if (safari) { wheelPixelsPerUnit = -1/3; } + +function wheelEventDelta(e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; } + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; } + else if (dy == null) { dy = e.wheelDelta; } + return {x: dx, y: dy} +} +function wheelEventPixels(e) { + var delta = wheelEventDelta(e); + delta.x *= wheelPixelsPerUnit; + delta.y *= wheelPixelsPerUnit; + return delta +} + +function onScrollWheel(cm, e) { + var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; + + var display = cm.display, scroll = display.scroller; + // Quit if there's nothing to scroll here + var canScrollX = scroll.scrollWidth > scroll.clientWidth; + var canScrollY = scroll.scrollHeight > scroll.clientHeight; + if (!(dx && canScrollX || dy && canScrollY)) { return } + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur; + break outer + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { + if (dy && canScrollY) + { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); } + setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit)); + // Only prevent default scrolling if vertical scrolling is + // actually possible. Otherwise, it causes vertical scroll + // jitter on OSX trackpads when deltaX is small and deltaY + // is large (issue #3579) + if (!dy || (dy && canScrollY)) + { e_preventDefault(e); } + display.wheelStartX = null; // Abort measurement, if in progress + return + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && wheelPixelsPerUnit != null) { + var pixels = dy * wheelPixelsPerUnit; + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; + if (pixels < 0) { top = Math.max(0, top + pixels - 50); } + else { bot = Math.min(cm.doc.height, bot + pixels + 50); } + updateDisplaySimple(cm, {top: top, bottom: bot}); + } + + if (wheelSamples < 20) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; + display.wheelDX = dx; display.wheelDY = dy; + setTimeout(function () { + if (display.wheelStartX == null) { return } + var movedX = scroll.scrollLeft - display.wheelStartX; + var movedY = scroll.scrollTop - display.wheelStartY; + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX); + display.wheelStartX = display.wheelStartY = null; + if (!sample) { return } + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + display.wheelDX += dx; display.wheelDY += dy; + } + } +} + +// Selection objects are immutable. A new one is created every time +// the selection changes. A selection is one or more non-overlapping +// (and non-touching) ranges, sorted, and an integer that indicates +// which one is the primary selection (the one that's scrolled into +// view, that getCursor returns, etc). +var Selection = function(ranges, primIndex) { + this.ranges = ranges; + this.primIndex = primIndex; +}; + +Selection.prototype.primary = function () { return this.ranges[this.primIndex] }; + +Selection.prototype.equals = function (other) { + var this$1 = this; + + if (other == this) { return true } + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false } + for (var i = 0; i < this.ranges.length; i++) { + var here = this$1.ranges[i], there = other.ranges[i]; + if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false } + } + return true +}; + +Selection.prototype.deepCopy = function () { + var this$1 = this; + + var out = []; + for (var i = 0; i < this.ranges.length; i++) + { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); } + return new Selection(out, this.primIndex) +}; + +Selection.prototype.somethingSelected = function () { + var this$1 = this; + + for (var i = 0; i < this.ranges.length; i++) + { if (!this$1.ranges[i].empty()) { return true } } + return false +}; + +Selection.prototype.contains = function (pos, end) { + var this$1 = this; + + if (!end) { end = pos; } + for (var i = 0; i < this.ranges.length; i++) { + var range = this$1.ranges[i]; + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) + { return i } + } + return -1 +}; + +var Range = function(anchor, head) { + this.anchor = anchor; this.head = head; +}; + +Range.prototype.from = function () { return minPos(this.anchor, this.head) }; +Range.prototype.to = function () { return maxPos(this.anchor, this.head) }; +Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch }; + +// Take an unsorted, potentially overlapping set of ranges, and +// build a selection out of it. 'Consumes' ranges array (modifying +// it). +function normalizeSelection(ranges, primIndex) { + var prim = ranges[primIndex]; + ranges.sort(function (a, b) { return cmp(a.from(), b.from()); }); + primIndex = indexOf(ranges, prim); + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], prev = ranges[i - 1]; + if (cmp(prev.to(), cur.from()) >= 0) { + var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; + if (i <= primIndex) { --primIndex; } + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); + } + } + return new Selection(ranges, primIndex) +} + +function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0) +} + +// Compute the position of the end of a change (its 'to' property +// refers to the pre-change end). +function changeEnd(change) { + if (!change.text) { return change.to } + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)) +} + +// Adjust a position to refer to the post-change position of the +// same text, or the end of the change if the change covers it. +function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) { return pos } + if (cmp(pos, change.to) <= 0) { return changeEnd(change) } + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; + if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; } + return Pos(line, ch) +} + +function computeSelAfterChange(doc, change) { + var out = []; + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + out.push(new Range(adjustForChange(range.anchor, change), + adjustForChange(range.head, change))); + } + return normalizeSelection(out, doc.sel.primIndex) +} + +function offsetPos(pos, old, nw) { + if (pos.line == old.line) + { return Pos(nw.line, pos.ch - old.ch + nw.ch) } + else + { return Pos(nw.line + (pos.line - old.line), pos.ch) } +} + +// Used by replaceSelections to allow moving the selection to the +// start or around the replaced test. Hint may be "start" or "around". +function computeReplacedSel(doc, changes, hint) { + var out = []; + var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + var from = offsetPos(change.from, oldPrev, newPrev); + var to = offsetPos(changeEnd(change), oldPrev, newPrev); + oldPrev = change.to; + newPrev = to; + if (hint == "around") { + var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; + out[i] = new Range(inv ? to : from, inv ? from : to); + } else { + out[i] = new Range(from, from); + } + } + return new Selection(out, doc.sel.primIndex) +} + +// Used to get the editor into a consistent state again when options change. + +function loadMode(cm) { + cm.doc.mode = getMode(cm.options, cm.doc.modeOption); + resetModeState(cm); +} + +function resetModeState(cm) { + cm.doc.iter(function (line) { + if (line.stateAfter) { line.stateAfter = null; } + if (line.styles) { line.styles = null; } + }); + cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; + startWorker(cm, 100); + cm.state.modeGen++; + if (cm.curOp) { regChange(cm); } +} + +// DOCUMENT DATA STRUCTURE + +// By default, updates that start and end at the beginning of a line +// are treated specially, in order to make the association of line +// widgets and marker elements with the text behave more intuitive. +function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && + (!doc.cm || doc.cm.options.wholeLineUpdateBefore) +} + +// Perform a change on the document data structure. +function updateDoc(doc, change, markedSpans, estimateHeight$$1) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight$$1); + signalLater(line, "change", line, change); + } + function linesFor(start, end) { + var result = []; + for (var i = start; i < end; ++i) + { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); } + return result + } + + var from = change.from, to = change.to, text = change.text; + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; + + // Adjust the line structure + if (change.full) { + doc.insert(0, linesFor(0, text.length)); + doc.remove(text.length, doc.size - text.length); + } else if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = linesFor(0, text.length - 1); + update(lastLine, lastLine.text, lastSpans); + if (nlines) { doc.remove(from.line, nlines); } + if (added.length) { doc.insert(from.line, added); } + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); + } else { + var added$1 = linesFor(1, text.length - 1); + added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1)); + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + doc.insert(from.line + 1, added$1); + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); + doc.remove(from.line + 1, nlines); + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); + var added$2 = linesFor(1, text.length - 1); + if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); } + doc.insert(from.line + 1, added$2); + } + + signalLater(doc, "change", doc, change); +} + +// Call f for all linked documents. +function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i]; + if (rel.doc == skip) { continue } + var shared = sharedHist && rel.sharedHist; + if (sharedHistOnly && !shared) { continue } + f(rel.doc, shared); + propagate(rel.doc, doc, shared); + } } + } + propagate(doc, null, true); +} + +// Attach a document to an editor. +function attachDoc(cm, doc) { + if (doc.cm) { throw new Error("This document is already in use.") } + cm.doc = doc; + doc.cm = cm; + estimateLineHeights(cm); + loadMode(cm); + setDirectionClass(cm); + if (!cm.options.lineWrapping) { findMaxLine(cm); } + cm.options.mode = doc.modeOption; + regChange(cm); +} + +function setDirectionClass(cm) { + (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); +} + +function directionChanged(cm) { + runInOp(cm, function () { + setDirectionClass(cm); + regChange(cm); + }); +} + +function History(startGen) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; this.undone = []; + this.undoDepth = Infinity; + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0; + this.lastOp = this.lastSelOp = null; + this.lastOrigin = this.lastSelOrigin = null; + // Used by the isClean() method + this.generation = this.maxGeneration = startGen || 1; +} + +// Create a history change event from an updateDoc-style change +// object. +function historyChangeFromChange(doc, change) { + var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true); + return histChange +} + +// Pop all selection events off the end of a history array. Stop at +// a change event. +function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array); + if (last.ranges) { array.pop(); } + else { break } + } +} + +// Find the top change event in the history. Pop off selection +// events that are in the way. +function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done); + return lst(hist.done) + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done) + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop(); + return lst(hist.done) + } +} + +// Register a change in the history. Merges changes that are within +// a single operation, or are close together with an origin that +// allows merging (starting with "+") into a single event. +function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history; + hist.undone.length = 0; + var time = +new Date, cur; + var last; + + if ((hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) || + change.origin.charAt(0) == "*")) && + (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + last = lst(cur.changes); + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change); + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)); + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done); + if (!before || !before.ranges) + { pushSelectionToHistory(doc.sel, hist.done); } + cur = {changes: [historyChangeFromChange(doc, change)], + generation: hist.generation}; + hist.done.push(cur); + while (hist.done.length > hist.undoDepth) { + hist.done.shift(); + if (!hist.done[0].ranges) { hist.done.shift(); } + } + } + hist.done.push(selAfter); + hist.generation = ++hist.maxGeneration; + hist.lastModTime = hist.lastSelTime = time; + hist.lastOp = hist.lastSelOp = opId; + hist.lastOrigin = hist.lastSelOrigin = change.origin; + + if (!last) { signal(doc, "historyAdded"); } +} + +function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0); + return ch == "*" || + ch == "+" && + prev.ranges.length == sel.ranges.length && + prev.somethingSelected() == sel.somethingSelected() && + new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500) +} + +// Called whenever the selection changes, sets the new selection as +// the pending selection in the history, and pushes the old pending +// selection into the 'done' array when it was significantly +// different (in number of selected ranges, emptiness, or time). +function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, origin = options && options.origin; + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastSelOp || + (origin && hist.lastSelOrigin == origin && + (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || + selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) + { hist.done[hist.done.length - 1] = sel; } + else + { pushSelectionToHistory(sel, hist.done); } + + hist.lastSelTime = +new Date; + hist.lastSelOrigin = origin; + hist.lastSelOp = opId; + if (options && options.clearRedo !== false) + { clearSelectionEvents(hist.undone); } +} + +function pushSelectionToHistory(sel, dest) { + var top = lst(dest); + if (!(top && top.ranges && top.equals(sel))) + { dest.push(sel); } +} + +// Used to store marked span information in the history. +function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0; + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { + if (line.markedSpans) + { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; } + ++n; + }); +} + +// When un/re-doing restores text containing marked spans, those +// that have been explicitly cleared should not be restored. +function removeClearedSpans(spans) { + if (!spans) { return null } + var out; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } } + else if (out) { out.push(spans[i]); } + } + return !out ? spans : out.length ? out : null +} + +// Retrieve and filter the old marked spans stored in a change event. +function getOldSpans(doc, change) { + var found = change["spans_" + doc.id]; + if (!found) { return null } + var nw = []; + for (var i = 0; i < change.text.length; ++i) + { nw.push(removeClearedSpans(found[i])); } + return nw +} + +// Used for un/re-doing changes from the history. Combines the +// result of computing the existing spans with the set of spans that +// existed in the history (so that deleting around a span and then +// undoing brings back the span). +function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change); + var stretched = stretchSpansOverChange(doc, change); + if (!old) { return stretched } + if (!stretched) { return old } + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i]; + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j]; + for (var k = 0; k < oldCur.length; ++k) + { if (oldCur[k].marker == span.marker) { continue spans } } + oldCur.push(span); + } + } else if (stretchCur) { + old[i] = stretchCur; + } + } + return old +} + +// Used both to provide a JSON-safe object in .getHistory, and, when +// detaching a document, to split the history in two +function copyHistoryArray(events, newGroup, instantiateSel) { + var copy = []; + for (var i = 0; i < events.length; ++i) { + var event = events[i]; + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); + continue + } + var changes = event.changes, newChanges = []; + copy.push({changes: newChanges}); + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m = (void 0); + newChanges.push({from: change.from, to: change.to, text: change.text}); + if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop]; + delete change[prop]; + } + } } } + } + } + return copy +} + +// The 'scroll' parameter given to many of these indicated whether +// the new cursor position should be scrolled into view after +// modifying the selection. + +// If shift is held or the extend flag is set, extends a range to +// include a given position (and optionally a second position). +// Otherwise, simply returns the range between the given positions. +// Used for cursor motion and such. +function extendRange(range, head, other, extend) { + if (extend) { + var anchor = range.anchor; + if (other) { + var posBefore = cmp(head, anchor) < 0; + if (posBefore != (cmp(other, anchor) < 0)) { + anchor = head; + head = other; + } else if (posBefore != (cmp(head, other) < 0)) { + head = other; + } + } + return new Range(anchor, head) + } else { + return new Range(other || head, head) + } +} + +// Extend the primary selection range, discard the rest. +function extendSelection(doc, head, other, options, extend) { + if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); } + setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options); +} + +// Extend all selections (pos is an array of selections with length +// equal the number of selections) +function extendSelections(doc, heads, options) { + var out = []; + var extend = doc.cm && (doc.cm.display.shift || doc.extend); + for (var i = 0; i < doc.sel.ranges.length; i++) + { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); } + var newSel = normalizeSelection(out, doc.sel.primIndex); + setSelection(doc, newSel, options); +} + +// Updates a single range in the selection. +function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0); + ranges[i] = range; + setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); +} + +// Reset the selection to a single range. +function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options); +} + +// Give beforeSelectionChange handlers a change to influence a +// selection update. +function filterSelectionChange(doc, sel, options) { + var obj = { + ranges: sel.ranges, + update: function(ranges) { + var this$1 = this; + + this.ranges = []; + for (var i = 0; i < ranges.length; i++) + { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), + clipPos(doc, ranges[i].head)); } + }, + origin: options && options.origin + }; + signal(doc, "beforeSelectionChange", doc, obj); + if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); } + if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) } + else { return sel } +} + +function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, last = lst(done); + if (last && last.ranges) { + done[done.length - 1] = sel; + setSelectionNoUndo(doc, sel, options); + } else { + setSelection(doc, sel, options); + } +} + +// Set a new selection. +function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options); + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); +} + +function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) + { sel = filterSelectionChange(doc, sel, options); } + + var bias = options && options.bias || + (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); + + if (!(options && options.scroll === false) && doc.cm) + { ensureCursorVisible(doc.cm); } +} + +function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) { return } + + doc.sel = sel; + + if (doc.cm) { + doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; + signalCursorActivity(doc.cm); + } + signalLater(doc, "cursorActivity", doc); +} + +// Verify that the selection does not partially select any atomic +// marked ranges. +function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)); +} + +// Return a selection that does not partially select any atomic +// ranges. +function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; + var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); + var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) { out = sel.ranges.slice(0, i); } + out[i] = new Range(newAnchor, newHead); + } + } + return out ? normalizeSelection(out, sel.primIndex) : sel +} + +function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { + var line = getLine(doc, pos.line); + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker; + if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && + (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter"); + if (m.explicitlyCleared) { + if (!line.markedSpans) { break } + else {--i; continue} + } + } + if (!m.atomic) { continue } + + if (oldPos) { + var near = m.find(dir < 0 ? 1 : -1), diff = (void 0); + if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft) + { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); } + if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) + { return skipAtomicInner(doc, near, pos, dir, mayClear) } + } + + var far = m.find(dir < 0 ? -1 : 1); + if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight) + { far = movePos(doc, far, dir, far.line == pos.line ? line : null); } + return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null + } + } } + return pos +} + +// Ensure a given position is not inside an atomic range. +function skipAtomic(doc, pos, oldPos, bias, mayClear) { + var dir = bias || 1; + var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || + skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)); + if (!found) { + doc.cantEdit = true; + return Pos(doc.first, 0) + } + return found +} + +function movePos(doc, pos, dir, line) { + if (dir < 0 && pos.ch == 0) { + if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) } + else { return null } + } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { + if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) } + else { return null } + } else { + return new Pos(pos.line, pos.ch + dir) + } +} + +function selectAll(cm) { + cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); +} + +// UPDATING + +// Allow "beforeChange" event handlers to influence a change +function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function () { return obj.canceled = true; } + }; + if (update) { obj.update = function (from, to, text, origin) { + if (from) { obj.from = clipPos(doc, from); } + if (to) { obj.to = clipPos(doc, to); } + if (text) { obj.text = text; } + if (origin !== undefined) { obj.origin = origin; } + }; } + signal(doc, "beforeChange", doc, obj); + if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); } + + if (obj.canceled) { return null } + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin} +} + +// Apply a change to a document, and add it to the document's +// history, and propagating it to all linked documents. +function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) } + if (doc.cm.state.suppressEdits) { return } + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true); + if (!change) { return } + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); + if (split) { + for (var i = split.length - 1; i >= 0; --i) + { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); } + } else { + makeChangeInner(doc, change); + } +} + +function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return } + var selAfter = computeSelAfterChange(doc, change); + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); + var rebased = []; + + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); + }); +} + +// Revert a change stored in a document's history. +function makeChangeFromHistory(doc, type, allowSelectionOnly) { + var suppress = doc.cm && doc.cm.state.suppressEdits; + if (suppress && !allowSelectionOnly) { return } + + var hist = doc.history, event, selAfter = doc.sel; + var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + var i = 0; + for (; i < source.length; i++) { + event = source[i]; + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) + { break } + } + if (i == source.length) { return } + hist.lastOrigin = hist.lastSelOrigin = null; + + for (;;) { + event = source.pop(); + if (event.ranges) { + pushSelectionToHistory(event, dest); + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, {clearRedo: false}); + return + } + selAfter = event; + } else if (suppress) { + source.push(event); + return + } else { break } + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = []; + pushSelectionToHistory(selAfter, dest); + dest.push({changes: antiChanges, generation: hist.generation}); + hist.generation = event.generation || ++hist.maxGeneration; + + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); + + var loop = function ( i ) { + var change = event.changes[i]; + change.origin = type; + if (filter && !filterChange(doc, change, false)) { + source.length = 0; + return {} + } + + antiChanges.push(historyChangeFromChange(doc, change)); + + var after = i ? computeSelAfterChange(doc, change) : lst(source); + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); + if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); } + var rebased = []; + + // Propagate to the linked documents + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); + }); + }; + + for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { + var returned = loop( i$1 ); + + if ( returned ) return returned.v; + } +} + +// Sub-views need their line numbers shifted when text is added +// above or below them in the parent document. +function shiftDoc(doc, distance) { + if (distance == 0) { return } + doc.first += distance; + doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range( + Pos(range.anchor.line + distance, range.anchor.ch), + Pos(range.head.line + distance, range.head.ch) + ); }), doc.sel.primIndex); + if (doc.cm) { + regChange(doc.cm, doc.first, doc.first - distance, distance); + for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) + { regLineChange(doc.cm, l, "gutter"); } + } +} + +// More lower-level change function, handling only a single document +// (not linked ones). +function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) } + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); + return + } + if (change.from.line > doc.lastLine()) { return } + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line); + shiftDoc(doc, shift); + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin}; + } + var last = doc.lastLine(); + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin}; + } + + change.removed = getBetween(doc, change.from, change.to); + + if (!selAfter) { selAfter = computeSelAfterChange(doc, change); } + if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); } + else { updateDoc(doc, change, spans); } + setSelectionNoUndo(doc, selAfter, sel_dontScroll); +} + +// Handle the interaction of a change to a document with the editor +// that this document is part of. +function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to; + + var recomputeMaxLength = false, checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); + doc.iter(checkWidthStart, to.line + 1, function (line) { + if (line == display.maxLine) { + recomputeMaxLength = true; + return true + } + }); + } + + if (doc.sel.contains(change.from, change.to) > -1) + { signalCursorActivity(cm); } + + updateDoc(doc, change, spans, estimateHeight(cm)); + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function (line) { + var len = lineLength(line); + if (len > display.maxLineLength) { + display.maxLine = line; + display.maxLineLength = len; + display.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; } + } + + retreatFrontier(doc, from.line); + startWorker(cm, 400); + + var lendiff = change.text.length - (to.line - from.line) - 1; + // Remember that these lines changed, for updating the display + if (change.full) + { regChange(cm); } + else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) + { regLineChange(cm, from.line, "text"); } + else + { regChange(cm, from.line, to.line + 1, lendiff); } + + var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); + if (changeHandler || changesHandler) { + var obj = { + from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin + }; + if (changeHandler) { signalLater(cm, "change", cm, obj); } + if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); } + } + cm.display.selForContextMenu = null; +} + +function replaceRange(doc, code, from, to, origin) { + if (!to) { to = from; } + if (cmp(to, from) < 0) { var assign; + (assign = [to, from], from = assign[0], to = assign[1]); } + if (typeof code == "string") { code = doc.splitLines(code); } + makeChange(doc, {from: from, to: to, text: code, origin: origin}); +} + +// Rebasing/resetting history to deal with externally-sourced changes + +function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff; + } else if (from < pos.line) { + pos.line = from; + pos.ch = 0; + } +} + +// Tries to rebase an array of history events given a change in the +// document. If the change touches the same lines as the event, the +// event, and everything 'behind' it, is discarded. If the change is +// before the event, the event's positions are updated. Uses a +// copy-on-write scheme for the positions, to avoid having to +// reallocate them all on every rebase, but also avoid problems with +// shared position objects being unsafely updated. +function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true; + if (sub.ranges) { + if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); + } + continue + } + for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { + var cur = sub.changes[j$1]; + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch); + cur.to = Pos(cur.to.line + diff, cur.to.ch); + } else if (from <= cur.to.line) { + ok = false; + break + } + } + if (!ok) { + array.splice(0, i + 1); + i = 0; + } + } +} + +function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; + rebaseHistArray(hist.done, from, to, diff); + rebaseHistArray(hist.undone, from, to, diff); +} + +// Utility for applying a change to a line by handle or number, +// returning the number and optionally registering the line as +// changed. +function changeLine(doc, handle, changeType, op) { + var no = handle, line = handle; + if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); } + else { no = lineNo(handle); } + if (no == null) { return null } + if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); } + return line +} + +// The document is represented as a BTree consisting of leaves, with +// chunk of lines in them, and branches, with up to ten leaves or +// other branch nodes below them. The top node is always a branch +// node, and is the document object itself (meaning it has +// additional methods and properties). +// +// All nodes have parent links. The tree is used both to go from +// line numbers to line objects, and to go from objects to numbers. +// It also indexes by height, and is used to convert between height +// and line object, and to find the total height of the document. +// +// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + +function LeafChunk(lines) { + var this$1 = this; + + this.lines = lines; + this.parent = null; + var height = 0; + for (var i = 0; i < lines.length; ++i) { + lines[i].parent = this$1; + height += lines[i].height; + } + this.height = height; +} + +LeafChunk.prototype = { + chunkSize: function() { return this.lines.length }, + + // Remove the n lines at offset 'at'. + removeInner: function(at, n) { + var this$1 = this; + + for (var i = at, e = at + n; i < e; ++i) { + var line = this$1.lines[i]; + this$1.height -= line.height; + cleanUpLine(line); + signalLater(line, "delete"); + } + this.lines.splice(at, n); + }, + + // Helper used to collapse a small branch into a single leaf. + collapse: function(lines) { + lines.push.apply(lines, this.lines); + }, + + // Insert the given array of lines at offset 'at', count them as + // having the given height. + insertInner: function(at, lines, height) { + var this$1 = this; + + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; } + }, + + // Used to iterate over a part of the tree. + iterN: function(at, n, op) { + var this$1 = this; + + for (var e = at + n; at < e; ++at) + { if (op(this$1.lines[at])) { return true } } + } +}; + +function BranchChunk(children) { + var this$1 = this; + + this.children = children; + var size = 0, height = 0; + for (var i = 0; i < children.length; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this$1; + } + this.size = size; + this.height = height; + this.parent = null; +} + +BranchChunk.prototype = { + chunkSize: function() { return this.size }, + + removeInner: function(at, n) { + var this$1 = this; + + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.removeInner(at, rm); + this$1.height -= oldHeight - child.height; + if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) { break } + at = 0; + } else { at -= sz; } + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && + (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + + collapse: function(lines) { + var this$1 = this; + + for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); } + }, + + insertInner: function(at, lines, height) { + var this$1 = this; + + this.size += lines.length; + this.height += height; + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertInner(at, lines, height); + if (child.lines && child.lines.length > 50) { + // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. + // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. + var remaining = child.lines.length % 25 + 25; + for (var pos = remaining; pos < child.lines.length;) { + var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); + child.height -= leaf.height; + this$1.children.splice(++i, 0, leaf); + leaf.parent = this$1; + } + child.lines = child.lines.slice(0, remaining); + this$1.maybeSpill(); + } + break + } + at -= sz; + } + }, + + // When a node has grown, check whether it should be split. + maybeSpill: function() { + if (this.children.length <= 10) { return } + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10) + me.parent.maybeSpill(); + }, + + iterN: function(at, n, op) { + var this$1 = this; + + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) { return true } + if ((n -= used) == 0) { break } + at = 0; + } else { at -= sz; } + } + } +}; + +// Line widgets are block elements displayed above or below a line. + +var LineWidget = function(doc, node, options) { + var this$1 = this; + + if (options) { for (var opt in options) { if (options.hasOwnProperty(opt)) + { this$1[opt] = options[opt]; } } } + this.doc = doc; + this.node = node; +}; + +LineWidget.prototype.clear = function () { + var this$1 = this; + + var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); + if (no == null || !ws) { return } + for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } } + if (!ws.length) { line.widgets = null; } + var height = widgetHeight(this); + updateLineHeight(line, Math.max(0, line.height - height)); + if (cm) { + runInOp(cm, function () { + adjustScrollWhenAboveVisible(cm, line, -height); + regLineChange(cm, no, "widget"); + }); + signalLater(cm, "lineWidgetCleared", cm, this, no); + } +}; + +LineWidget.prototype.changed = function () { + var this$1 = this; + + var oldH = this.height, cm = this.doc.cm, line = this.line; + this.height = null; + var diff = widgetHeight(this) - oldH; + if (!diff) { return } + updateLineHeight(line, line.height + diff); + if (cm) { + runInOp(cm, function () { + cm.curOp.forceUpdate = true; + adjustScrollWhenAboveVisible(cm, line, diff); + signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)); + }); + } +}; +eventMixin(LineWidget); + +function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) + { addToScrollTop(cm, diff); } +} + +function addLineWidget(doc, handle, node, options) { + var widget = new LineWidget(doc, node, options); + var cm = doc.cm; + if (cm && widget.noHScroll) { cm.display.alignWidgets = true; } + changeLine(doc, handle, "widget", function (line) { + var widgets = line.widgets || (line.widgets = []); + if (widget.insertAt == null) { widgets.push(widget); } + else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); } + widget.line = line; + if (cm && !lineIsHidden(doc, line)) { + var aboveVisible = heightAtLine(line) < doc.scrollTop; + updateLineHeight(line, line.height + widgetHeight(widget)); + if (aboveVisible) { addToScrollTop(cm, widget.height); } + cm.curOp.forceUpdate = true; + } + return true + }); + if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); } + return widget +} + +// TEXTMARKERS + +// Created with markText and setBookmark methods. A TextMarker is a +// handle that can be used to clear or find a marked position in the +// document. Line objects hold arrays (markedSpans) containing +// {from, to, marker} object pointing to such marker objects, and +// indicating that such a marker is present on that line. Multiple +// lines may point to the same marker when it spans across lines. +// The spans will have null for their from/to properties when the +// marker continues beyond the start/end of the line. Markers have +// links back to the lines they currently touch. + +// Collapsed markers have unique ids, in order to be able to order +// them, which is needed for uniquely determining an outer marker +// when they overlap (they may nest, but not partially overlap). +var nextMarkerId = 0; + +var TextMarker = function(doc, type) { + this.lines = []; + this.type = type; + this.doc = doc; + this.id = ++nextMarkerId; +}; + +// Clear the marker. +TextMarker.prototype.clear = function () { + var this$1 = this; + + if (this.explicitlyCleared) { return } + var cm = this.doc.cm, withOp = cm && !cm.curOp; + if (withOp) { startOperation(cm); } + if (hasHandler(this, "clear")) { + var found = this.find(); + if (found) { signalLater(this, "clear", found.from, found.to); } + } + var min = null, max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this$1.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this$1); + if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), "text"); } + else if (cm) { + if (span.to != null) { max = lineNo(line); } + if (span.from != null) { min = lineNo(line); } + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm) + { updateLineHeight(line, textHeight(cm.display)); } + } + if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { + var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual); + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual; + cm.display.maxLineLength = len; + cm.display.maxLineChanged = true; + } + } } + + if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); } + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false; + if (cm) { reCheckSelection(cm.doc); } + } + if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); } + if (withOp) { endOperation(cm); } + if (this.parent) { this.parent.clear(); } +}; + +// Find the position of the marker in the document. Returns a {from, +// to} object by default. Side can be passed to get a specific side +// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the +// Pos objects returned contain a line object, rather than a line +// number (used to prevent looking up the same line twice). +TextMarker.prototype.find = function (side, lineObj) { + var this$1 = this; + + if (side == null && this.type == "bookmark") { side = 1; } + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this$1.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this$1); + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from); + if (side == -1) { return from } + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to); + if (side == 1) { return to } + } + } + return from && {from: from, to: to} +}; + +// Signals that the marker's widget changed, and surrounding layout +// should be recomputed. +TextMarker.prototype.changed = function () { + var this$1 = this; + + var pos = this.find(-1, true), widget = this, cm = this.doc.cm; + if (!pos || !cm) { return } + runInOp(cm, function () { + var line = pos.line, lineN = lineNo(pos.line); + var view = findViewForLine(cm, lineN); + if (view) { + clearLineMeasurementCacheFor(view); + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; + } + cm.curOp.updateMaxLine = true; + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height; + widget.height = null; + var dHeight = widgetHeight(widget) - oldHeight; + if (dHeight) + { updateLineHeight(line, line.height + dHeight); } + } + signalLater(cm, "markerChanged", cm, this$1); + }); +}; + +TextMarker.prototype.attachLine = function (line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); } + } + this.lines.push(line); +}; + +TextMarker.prototype.detachLine = function (line) { + this.lines.splice(indexOf(this.lines, line), 1); + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); + } +}; +eventMixin(TextMarker); + +// Create a marker, wire it up to the right lines, and +function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) { return markTextShared(doc, from, to, options, type) } + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) } + + var marker = new TextMarker(doc, type), diff = cmp(from, to); + if (options) { copyObj(options, marker, false); } + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) + { return marker } + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true; + marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget"); + if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); } + if (options.insertLeft) { marker.widgetNode.insertLeft = true; } + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || + from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) + { throw new Error("Inserting collapsed marker partially overlapping an existing one") } + seeCollapsedSpans(); + } + + if (marker.addToHistory) + { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); } + + var curLine = from.line, cm = doc.cm, updateMaxLine; + doc.iter(curLine, to.line + 1, function (line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) + { updateMaxLine = true; } + if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); } + addMarkedSpan(line, new MarkedSpan(marker, + curLine == from.line ? from.ch : null, + curLine == to.line ? to.ch : null)); + ++curLine; + }); + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) { + if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); } + }); } + + if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); } + + if (marker.readOnly) { + seeReadOnlySpans(); + if (doc.history.done.length || doc.history.undone.length) + { doc.clearHistory(); } + } + if (marker.collapsed) { + marker.id = ++nextMarkerId; + marker.atomic = true; + } + if (cm) { + // Sync editor state + if (updateMaxLine) { cm.curOp.updateMaxLine = true; } + if (marker.collapsed) + { regChange(cm, from.line, to.line + 1); } + else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) + { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } } + if (marker.atomic) { reCheckSelection(cm.doc); } + signalLater(cm, "markerAdded", cm, marker); + } + return marker +} + +// SHARED TEXTMARKERS + +// A shared marker spans multiple linked documents. It is +// implemented as a meta-marker-object controlling multiple normal +// markers. +var SharedTextMarker = function(markers, primary) { + var this$1 = this; + + this.markers = markers; + this.primary = primary; + for (var i = 0; i < markers.length; ++i) + { markers[i].parent = this$1; } +}; + +SharedTextMarker.prototype.clear = function () { + var this$1 = this; + + if (this.explicitlyCleared) { return } + this.explicitlyCleared = true; + for (var i = 0; i < this.markers.length; ++i) + { this$1.markers[i].clear(); } + signalLater(this, "clear"); +}; + +SharedTextMarker.prototype.find = function (side, lineObj) { + return this.primary.find(side, lineObj) +}; +eventMixin(SharedTextMarker); + +function markTextShared(doc, from, to, options, type) { + options = copyObj(options); + options.shared = false; + var markers = [markText(doc, from, to, options, type)], primary = markers[0]; + var widget = options.widgetNode; + linkedDocs(doc, function (doc) { + if (widget) { options.widgetNode = widget.cloneNode(true); } + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); + for (var i = 0; i < doc.linked.length; ++i) + { if (doc.linked[i].isParent) { return } } + primary = lst(markers); + }); + return new SharedTextMarker(markers, primary) +} + +function findSharedMarkers(doc) { + return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; }) +} + +function copySharedMarkers(doc, markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], pos = marker.find(); + var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); + if (cmp(mFrom, mTo)) { + var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); + marker.markers.push(subMark); + subMark.parent = marker; + } + } +} + +function detachSharedMarkers(markers) { + var loop = function ( i ) { + var marker = markers[i], linked = [marker.primary.doc]; + linkedDocs(marker.primary.doc, function (d) { return linked.push(d); }); + for (var j = 0; j < marker.markers.length; j++) { + var subMarker = marker.markers[j]; + if (indexOf(linked, subMarker.doc) == -1) { + subMarker.parent = null; + marker.markers.splice(j--, 1); + } + } + }; + + for (var i = 0; i < markers.length; i++) loop( i ); +} + +var nextDocId = 0; +var Doc = function(text, mode, firstLine, lineSep, direction) { + if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) } + if (firstLine == null) { firstLine = 0; } + + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); + this.first = firstLine; + this.scrollTop = this.scrollLeft = 0; + this.cantEdit = false; + this.cleanGeneration = 1; + this.modeFrontier = this.highlightFrontier = firstLine; + var start = Pos(firstLine, 0); + this.sel = simpleSelection(start); + this.history = new History(null); + this.id = ++nextDocId; + this.modeOption = mode; + this.lineSep = lineSep; + this.direction = (direction == "rtl") ? "rtl" : "ltr"; + this.extend = false; + + if (typeof text == "string") { text = this.splitLines(text); } + updateDoc(this, {from: start, to: start, text: text}); + setSelection(this, simpleSelection(start), sel_dontScroll); +}; + +Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function(from, to, op) { + if (op) { this.iterN(from - this.first, to - from, op); } + else { this.iterN(this.first, this.first + this.size, from); } + }, + + // Non-public interface for adding and removing lines. + insert: function(at, lines) { + var height = 0; + for (var i = 0; i < lines.length; ++i) { height += lines[i].height; } + this.insertInner(at - this.first, lines, height); + }, + remove: function(at, n) { this.removeInner(at - this.first, n); }, + + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size); + if (lineSep === false) { return lines } + return lines.join(lineSep || this.lineSeparator()) + }, + setValue: docMethodOp(function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1; + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: this.splitLines(code), origin: "setValue", full: true}, true); + if (this.cm) { scrollToCoords(this.cm, 0, 0); } + setSelection(this, simpleSelection(top), sel_dontScroll); + }), + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from); + to = to ? clipPos(this, to) : from; + replaceRange(this, code, from, to, origin); + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); + if (lineSep === false) { return lines } + return lines.join(lineSep || this.lineSeparator()) + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text}, + + getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }}, + getLineNumber: function(line) {return lineNo(line)}, + + getLineHandleVisualStart: function(line) { + if (typeof line == "number") { line = getLine(this, line); } + return visualLine(line) + }, + + lineCount: function() {return this.size}, + firstLine: function() {return this.first}, + lastLine: function() {return this.first + this.size - 1}, + + clipPos: function(pos) {return clipPos(this, pos)}, + + getCursor: function(start) { + var range$$1 = this.sel.primary(), pos; + if (start == null || start == "head") { pos = range$$1.head; } + else if (start == "anchor") { pos = range$$1.anchor; } + else if (start == "end" || start == "to" || start === false) { pos = range$$1.to(); } + else { pos = range$$1.from(); } + return pos + }, + listSelections: function() { return this.sel.ranges }, + somethingSelected: function() {return this.sel.somethingSelected()}, + + setCursor: docMethodOp(function(line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); + }), + setSelection: docMethodOp(function(anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); + }), + extendSelection: docMethodOp(function(head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); + }), + extendSelections: docMethodOp(function(heads, options) { + extendSelections(this, clipPosArray(this, heads), options); + }), + extendSelectionsBy: docMethodOp(function(f, options) { + var heads = map(this.sel.ranges, f); + extendSelections(this, clipPosArray(this, heads), options); + }), + setSelections: docMethodOp(function(ranges, primary, options) { + var this$1 = this; + + if (!ranges.length) { return } + var out = []; + for (var i = 0; i < ranges.length; i++) + { out[i] = new Range(clipPos(this$1, ranges[i].anchor), + clipPos(this$1, ranges[i].head)); } + if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); } + setSelection(this, normalizeSelection(out, primary), options); + }), + addSelection: docMethodOp(function(anchor, head, options) { + var ranges = this.sel.ranges.slice(0); + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); + setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); + }), + + getSelection: function(lineSep) { + var this$1 = this; + + var ranges = this.sel.ranges, lines; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()); + lines = lines ? lines.concat(sel) : sel; + } + if (lineSep === false) { return lines } + else { return lines.join(lineSep || this.lineSeparator()) } + }, + getSelections: function(lineSep) { + var this$1 = this; + + var parts = [], ranges = this.sel.ranges; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()); + if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); } + parts[i] = sel; + } + return parts + }, + replaceSelection: function(code, collapse, origin) { + var dup = []; + for (var i = 0; i < this.sel.ranges.length; i++) + { dup[i] = code; } + this.replaceSelections(dup, collapse, origin || "+input"); + }, + replaceSelections: docMethodOp(function(code, collapse, origin) { + var this$1 = this; + + var changes = [], sel = this.sel; + for (var i = 0; i < sel.ranges.length; i++) { + var range$$1 = sel.ranges[i]; + changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin}; + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); + for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) + { makeChange(this$1, changes[i$1]); } + if (newSel) { setSelectionReplaceHistory(this, newSel); } + else if (this.cm) { ensureCursorVisible(this.cm); } + }), + undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), + redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), + undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), + redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), + + setExtending: function(val) {this.extend = val;}, + getExtending: function() {return this.extend}, + + historySize: function() { + var hist = this.history, done = 0, undone = 0; + for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } } + for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } } + return {undo: done, redo: undone} + }, + clearHistory: function() {this.history = new History(this.history.maxGeneration);}, + + markClean: function() { + this.cleanGeneration = this.changeGeneration(true); + }, + changeGeneration: function(forceSplit) { + if (forceSplit) + { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; } + return this.history.generation + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration) + }, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)} + }, + setHistory: function(histData) { + var hist = this.history = new History(this.history.maxGeneration); + hist.done = copyHistoryArray(histData.done.slice(0), null, true); + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); + }, + + setGutterMarker: docMethodOp(function(line, gutterID, value) { + return changeLine(this, line, "gutter", function (line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) { line.gutterMarkers = null; } + return true + }) + }), + + clearGutter: docMethodOp(function(gutterID) { + var this$1 = this; + + this.iter(function (line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + changeLine(this$1, line, "gutter", function () { + line.gutterMarkers[gutterID] = null; + if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; } + return true + }); + } + }); + }), + + lineInfo: function(line) { + var n; + if (typeof line == "number") { + if (!isLine(this, line)) { return null } + n = line; + line = getLine(this, line); + if (!line) { return null } + } else { + n = lineNo(line); + if (n == null) { return null } + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets} + }, + + addLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass"; + if (!line[prop]) { line[prop] = cls; } + else if (classTest(cls).test(line[prop])) { return false } + else { line[prop] += " " + cls; } + return true + }) + }), + removeLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) { return false } + else if (cls == null) { line[prop] = null; } + else { + var found = cur.match(classTest(cls)); + if (!found) { return false } + var end = found.index + found[0].length; + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; + } + return true + }) + }), + + addLineWidget: docMethodOp(function(handle, node, options) { + return addLineWidget(this, handle, node, options) + }), + removeLineWidget: function(widget) { widget.clear(); }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range") + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, shared: options && options.shared, + handleMouseEvents: options && options.handleMouseEvents}; + pos = clipPos(this, pos); + return markText(this, pos, pos, realOpts, "bookmark") + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos); + var markers = [], spans = getLine(this, pos.line).markedSpans; + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + { markers.push(span.marker.parent || span.marker); } + } } + return markers + }, + findMarks: function(from, to, filter) { + from = clipPos(this, from); to = clipPos(this, to); + var found = [], lineNo$$1 = from.line; + this.iter(from.line, to.line + 1, function (line) { + var spans = line.markedSpans; + if (spans) { for (var i = 0; i < spans.length; i++) { + var span = spans[i]; + if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to || + span.from == null && lineNo$$1 != from.line || + span.from != null && lineNo$$1 == to.line && span.from >= to.ch) && + (!filter || filter(span.marker))) + { found.push(span.marker.parent || span.marker); } + } } + ++lineNo$$1; + }); + return found + }, + getAllMarks: function() { + var markers = []; + this.iter(function (line) { + var sps = line.markedSpans; + if (sps) { for (var i = 0; i < sps.length; ++i) + { if (sps[i].from != null) { markers.push(sps[i].marker); } } } + }); + return markers + }, + + posFromIndex: function(off) { + var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length; + this.iter(function (line) { + var sz = line.text.length + sepSize; + if (sz > off) { ch = off; return true } + off -= sz; + ++lineNo$$1; + }); + return clipPos(this, Pos(lineNo$$1, ch)) + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords); + var index = coords.ch; + if (coords.line < this.first || coords.ch < 0) { return 0 } + var sepSize = this.lineSeparator().length; + this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value + index += line.text.length + sepSize; + }); + return index + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), + this.modeOption, this.first, this.lineSep, this.direction); + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; + doc.sel = this.sel; + doc.extend = false; + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth; + doc.setHistory(this.getHistory()); + } + return doc + }, + + linkedDoc: function(options) { + if (!options) { options = {}; } + var from = this.first, to = this.first + this.size; + if (options.from != null && options.from > from) { from = options.from; } + if (options.to != null && options.to < to) { to = options.to; } + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction); + if (options.sharedHist) { copy.history = this.history + ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; + copySharedMarkers(copy, findSharedMarkers(this)); + return copy + }, + unlinkDoc: function(other) { + var this$1 = this; + + if (other instanceof CodeMirror$1) { other = other.doc; } + if (this.linked) { for (var i = 0; i < this.linked.length; ++i) { + var link = this$1.linked[i]; + if (link.doc != other) { continue } + this$1.linked.splice(i, 1); + other.unlinkDoc(this$1); + detachSharedMarkers(findSharedMarkers(this$1)); + break + } } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id]; + linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true); + other.history = new History(null); + other.history.done = copyHistoryArray(this.history.done, splitIds); + other.history.undone = copyHistoryArray(this.history.undone, splitIds); + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f);}, + + getMode: function() {return this.mode}, + getEditor: function() {return this.cm}, + + splitLines: function(str) { + if (this.lineSep) { return str.split(this.lineSep) } + return splitLinesAuto(str) + }, + lineSeparator: function() { return this.lineSep || "\n" }, + + setDirection: docMethodOp(function (dir) { + if (dir != "rtl") { dir = "ltr"; } + if (dir == this.direction) { return } + this.direction = dir; + this.iter(function (line) { return line.order = null; }); + if (this.cm) { directionChanged(this.cm); } + }) +}); + +// Public alias. +Doc.prototype.eachLine = Doc.prototype.iter; + +// Kludge to work around strange IE behavior where it'll sometimes +// re-fire a series of drag-related events right after the drop (#1551) +var lastDrop = 0; + +function onDrop(e) { + var cm = this; + clearDragCursor(cm); + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) + { return } + e_preventDefault(e); + if (ie) { lastDrop = +new Date; } + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; + if (!pos || cm.isReadOnly()) { return } + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var loadFile = function (file, i) { + if (cm.options.allowDropFileTypes && + indexOf(cm.options.allowDropFileTypes, file.type) == -1) + { return } + + var reader = new FileReader; + reader.onload = operation(cm, function () { + var content = reader.result; + if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = ""; } + text[i] = content; + if (++read == n) { + pos = clipPos(cm.doc, pos); + var change = {from: pos, to: pos, + text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())), + origin: "paste"}; + makeChange(cm.doc, change); + setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); + } + }); + reader.readAsText(file); + }; + for (var i = 0; i < n; ++i) { loadFile(files[i], i); } + } else { // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e); + // Ensure the editor is re-focused + setTimeout(function () { return cm.display.input.focus(); }, 20); + return + } + try { + var text$1 = e.dataTransfer.getData("Text"); + if (text$1) { + var selected; + if (cm.state.draggingText && !cm.state.draggingText.copy) + { selected = cm.listSelections(); } + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); + if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1) + { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } } + cm.replaceSelection(text$1, "around", "paste"); + cm.display.input.focus(); + } + } + catch(e){} + } +} + +function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return } + + e.dataTransfer.setData("Text", cm.getSelection()); + e.dataTransfer.effectAllowed = "copyMove"; + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; + if (presto) { + img.width = img.height = 1; + cm.display.wrapper.appendChild(img); + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop; + } + e.dataTransfer.setDragImage(img, 0, 0); + if (presto) { img.parentNode.removeChild(img); } + } +} + +function onDragOver(cm, e) { + var pos = posFromMouse(cm, e); + if (!pos) { return } + var frag = document.createDocumentFragment(); + drawSelectionCursor(cm, pos, frag); + if (!cm.display.dragCursor) { + cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); + cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); + } + removeChildrenAndAdd(cm.display.dragCursor, frag); +} + +function clearDragCursor(cm) { + if (cm.display.dragCursor) { + cm.display.lineSpace.removeChild(cm.display.dragCursor); + cm.display.dragCursor = null; + } +} + +// These must be handled carefully, because naively registering a +// handler for each editor will cause the editors to never be +// garbage collected. + +function forEachCodeMirror(f) { + if (!document.getElementsByClassName) { return } + var byClass = document.getElementsByClassName("CodeMirror"); + for (var i = 0; i < byClass.length; i++) { + var cm = byClass[i].CodeMirror; + if (cm) { f(cm); } + } +} + +var globalsRegistered = false; +function ensureGlobalHandlers() { + if (globalsRegistered) { return } + registerGlobalHandlers(); + globalsRegistered = true; +} +function registerGlobalHandlers() { + // When the window resizes, we need to refresh active editors. + var resizeTimer; + on(window, "resize", function () { + if (resizeTimer == null) { resizeTimer = setTimeout(function () { + resizeTimer = null; + forEachCodeMirror(onResize); + }, 100); } + }); + // When the window loses focus, we want to show the editor as blurred + on(window, "blur", function () { return forEachCodeMirror(onBlur); }); +} +// Called when the window resizes +function onResize(cm) { + var d = cm.display; + if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) + { return } + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + d.scrollbarsClipped = false; + cm.setSize(); +} + +var keyNames = { + 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", + 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", 145: "ScrollLock", + 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", + 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" +}; + +// Number keys +for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); } +// Alphabetic keys +for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); } +// Function keys +for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; } + +var keyMap = {}; + +keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", + "Esc": "singleSelection" +}; +// Note that the save and find-related commands aren't defined by +// default. User code or addons can define them. Unknown commands +// are simply ignored. +keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", + fallthrough: "basic" +}; +// Very basic readline/emacs-style bindings, which are standard on Mac. +keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", + "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", + "Ctrl-O": "openLine" +}; +keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", + "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", + fallthrough: ["basic", "emacsy"] +}; +keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + +// KEYMAP DISPATCH + +function normalizeKeyName(name) { + var parts = name.split(/-(?!$)/); + name = parts[parts.length - 1]; + var alt, ctrl, shift, cmd; + for (var i = 0; i < parts.length - 1; i++) { + var mod = parts[i]; + if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; } + else if (/^a(lt)?$/i.test(mod)) { alt = true; } + else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; } + else if (/^s(hift)?$/i.test(mod)) { shift = true; } + else { throw new Error("Unrecognized modifier name: " + mod) } + } + if (alt) { name = "Alt-" + name; } + if (ctrl) { name = "Ctrl-" + name; } + if (cmd) { name = "Cmd-" + name; } + if (shift) { name = "Shift-" + name; } + return name +} + +// This is a kludge to keep keymaps mostly working as raw objects +// (backwards compatibility) while at the same time support features +// like normalization and multi-stroke key bindings. It compiles a +// new normalized keymap, and then updates the old object to reflect +// this. +function normalizeKeyMap(keymap) { + var copy = {}; + for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) { + var value = keymap[keyname]; + if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue } + if (value == "...") { delete keymap[keyname]; continue } + + var keys = map(keyname.split(" "), normalizeKeyName); + for (var i = 0; i < keys.length; i++) { + var val = (void 0), name = (void 0); + if (i == keys.length - 1) { + name = keys.join(" "); + val = value; + } else { + name = keys.slice(0, i + 1).join(" "); + val = "..."; + } + var prev = copy[name]; + if (!prev) { copy[name] = val; } + else if (prev != val) { throw new Error("Inconsistent bindings for " + name) } + } + delete keymap[keyname]; + } } + for (var prop in copy) { keymap[prop] = copy[prop]; } + return keymap +} + +function lookupKey(key, map$$1, handle, context) { + map$$1 = getKeyMap(map$$1); + var found = map$$1.call ? map$$1.call(key, context) : map$$1[key]; + if (found === false) { return "nothing" } + if (found === "...") { return "multi" } + if (found != null && handle(found)) { return "handled" } + + if (map$$1.fallthrough) { + if (Object.prototype.toString.call(map$$1.fallthrough) != "[object Array]") + { return lookupKey(key, map$$1.fallthrough, handle, context) } + for (var i = 0; i < map$$1.fallthrough.length; i++) { + var result = lookupKey(key, map$$1.fallthrough[i], handle, context); + if (result) { return result } + } + } +} + +// Modifier key presses don't count as 'real' key presses for the +// purpose of keymap fallthrough. +function isModifierKey(value) { + var name = typeof value == "string" ? value : keyNames[value.keyCode]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod" +} + +function addModifierNames(name, event, noShift) { + var base = name; + if (event.altKey && base != "Alt") { name = "Alt-" + name; } + if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; } + if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name; } + if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; } + return name +} + +// Look up the name of a key as indicated by an event object. +function keyName(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) { return false } + var name = keyNames[event.keyCode]; + if (name == null || event.altGraphKey) { return false } + // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause, + // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+) + if (event.keyCode == 3 && event.code) { name = event.code; } + return addModifierNames(name, event, noShift) +} + +function getKeyMap(val) { + return typeof val == "string" ? keyMap[val] : val +} + +// Helper for deleting text near the selection(s), used to implement +// backspace, delete, and similar functionality. +function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, kill = []; + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]); + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop(); + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from; + break + } + } + kill.push(toKill); + } + // Next, remove those actual ranges. + runInOp(cm, function () { + for (var i = kill.length - 1; i >= 0; i--) + { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); } + ensureCursorVisible(cm); + }); +} + +function moveCharLogically(line, ch, dir) { + var target = skipExtendingChars(line.text, ch + dir, dir); + return target < 0 || target > line.text.length ? null : target +} + +function moveLogically(line, start, dir) { + var ch = moveCharLogically(line, start.ch, dir); + return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before") +} + +function endOfLine(visually, cm, lineObj, lineNo, dir) { + if (visually) { + var order = getOrder(lineObj, cm.doc.direction); + if (order) { + var part = dir < 0 ? lst(order) : order[0]; + var moveInStorageOrder = (dir < 0) == (part.level == 1); + var sticky = moveInStorageOrder ? "after" : "before"; + var ch; + // With a wrapped rtl chunk (possibly spanning multiple bidi parts), + // it could be that the last bidi part is not on the last visual line, + // since visual lines contain content order-consecutive chunks. + // Thus, in rtl, we are looking for the first (content-order) character + // in the rtl chunk that is on the last line (that is, the same line + // as the last (content-order) character). + if (part.level > 0 || cm.doc.direction == "rtl") { + var prep = prepareMeasureForLine(cm, lineObj); + ch = dir < 0 ? lineObj.text.length - 1 : 0; + var targetTop = measureCharPrepared(cm, prep, ch).top; + ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch); + if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); } + } else { ch = dir < 0 ? part.to : part.from; } + return new Pos(lineNo, ch, sticky) + } + } + return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after") +} + +function moveVisually(cm, line, start, dir) { + var bidi = getOrder(line, cm.doc.direction); + if (!bidi) { return moveLogically(line, start, dir) } + if (start.ch >= line.text.length) { + start.ch = line.text.length; + start.sticky = "before"; + } else if (start.ch <= 0) { + start.ch = 0; + start.sticky = "after"; + } + var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos]; + if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { + // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, + // nothing interesting happens. + return moveLogically(line, start, dir) + } + + var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); }; + var prep; + var getWrappedLineExtent = function (ch) { + if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} } + prep = prep || prepareMeasureForLine(cm, line); + return wrappedLineExtentChar(cm, line, prep, ch) + }; + var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch); + + if (cm.doc.direction == "rtl" || part.level == 1) { + var moveInStorageOrder = (part.level == 1) == (dir < 0); + var ch = mv(start, moveInStorageOrder ? 1 : -1); + if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) { + // Case 2: We move within an rtl part or in an rtl editor on the same visual line + var sticky = moveInStorageOrder ? "before" : "after"; + return new Pos(start.line, ch, sticky) + } + } + + // Case 3: Could not move within this bidi part in this visual line, so leave + // the current bidi part + + var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { + var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder + ? new Pos(start.line, mv(ch, 1), "before") + : new Pos(start.line, ch, "after"); }; + + for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { + var part = bidi[partPos]; + var moveInStorageOrder = (dir > 0) == (part.level != 1); + var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1); + if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) } + ch = moveInStorageOrder ? part.from : mv(part.to, -1); + if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) } + } + }; + + // Case 3a: Look for other bidi parts on the same visual line + var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent); + if (res) { return res } + + // Case 3b: Look for other bidi parts on the next visual line + var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1); + if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { + res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)); + if (res) { return res } + } + + // Case 4: Nowhere to move + return null +} + +// Commands are parameter-less actions that can be performed on an +// editor, mostly used for keybindings. +var commands = { + selectAll: selectAll, + singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, + killLine: function (cm) { return deleteNearSelection(cm, function (range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length; + if (range.head.ch == len && range.head.line < cm.lastLine()) + { return {from: range.head, to: Pos(range.head.line + 1, 0)} } + else + { return {from: range.head, to: Pos(range.head.line, len)} } + } else { + return {from: range.from(), to: range.to()} + } + }); }, + deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) + }); }); }, + delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), to: range.from() + }); }); }, + delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5; + var leftPos = cm.coordsChar({left: 0, top: top}, "div"); + return {from: leftPos, to: range.from()} + }); }, + delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5; + var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); + return {from: range.from(), to: rightPos } + }); }, + undo: function (cm) { return cm.undo(); }, + redo: function (cm) { return cm.redo(); }, + undoSelection: function (cm) { return cm.undoSelection(); }, + redoSelection: function (cm) { return cm.redoSelection(); }, + goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); }, + goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); }, + goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); }, + {origin: "+move", bias: 1} + ); }, + goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); }, + {origin: "+move", bias: 1} + ); }, + goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); }, + {origin: "+move", bias: -1} + ); }, + goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") + }, sel_move); }, + goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + return cm.coordsChar({left: 0, top: top}, "div") + }, sel_move); }, + goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + var pos = cm.coordsChar({left: 0, top: top}, "div"); + if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) } + return pos + }, sel_move); }, + goLineUp: function (cm) { return cm.moveV(-1, "line"); }, + goLineDown: function (cm) { return cm.moveV(1, "line"); }, + goPageUp: function (cm) { return cm.moveV(-1, "page"); }, + goPageDown: function (cm) { return cm.moveV(1, "page"); }, + goCharLeft: function (cm) { return cm.moveH(-1, "char"); }, + goCharRight: function (cm) { return cm.moveH(1, "char"); }, + goColumnLeft: function (cm) { return cm.moveH(-1, "column"); }, + goColumnRight: function (cm) { return cm.moveH(1, "column"); }, + goWordLeft: function (cm) { return cm.moveH(-1, "word"); }, + goGroupRight: function (cm) { return cm.moveH(1, "group"); }, + goGroupLeft: function (cm) { return cm.moveH(-1, "group"); }, + goWordRight: function (cm) { return cm.moveH(1, "word"); }, + delCharBefore: function (cm) { return cm.deleteH(-1, "char"); }, + delCharAfter: function (cm) { return cm.deleteH(1, "char"); }, + delWordBefore: function (cm) { return cm.deleteH(-1, "word"); }, + delWordAfter: function (cm) { return cm.deleteH(1, "word"); }, + delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); }, + delGroupAfter: function (cm) { return cm.deleteH(1, "group"); }, + indentAuto: function (cm) { return cm.indentSelection("smart"); }, + indentMore: function (cm) { return cm.indentSelection("add"); }, + indentLess: function (cm) { return cm.indentSelection("subtract"); }, + insertTab: function (cm) { return cm.replaceSelection("\t"); }, + insertSoftTab: function (cm) { + var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].from(); + var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); + spaces.push(spaceStr(tabSize - col % tabSize)); + } + cm.replaceSelections(spaces); + }, + defaultTab: function (cm) { + if (cm.somethingSelected()) { cm.indentSelection("add"); } + else { cm.execCommand("insertTab"); } + }, + // Swap the two chars left and right of each selection's head. + // Move cursor behind the two swapped characters afterwards. + // + // Doesn't consider line feeds a character. + // Doesn't scan more than one line above to find a character. + // Doesn't do anything on an empty line. + // Doesn't do anything with non-empty selections. + transposeChars: function (cm) { return runInOp(cm, function () { + var ranges = cm.listSelections(), newSel = []; + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) { continue } + var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; + if (line) { + if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); } + if (cur.ch > 0) { + cur = new Pos(cur.line, cur.ch + 1); + cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), + Pos(cur.line, cur.ch - 2), cur, "+transpose"); + } else if (cur.line > cm.doc.first) { + var prev = getLine(cm.doc, cur.line - 1).text; + if (prev) { + cur = new Pos(cur.line, 1); + cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + + prev.charAt(prev.length - 1), + Pos(cur.line - 1, prev.length - 1), cur, "+transpose"); + } + } + } + newSel.push(new Range(cur, cur)); + } + cm.setSelections(newSel); + }); }, + newlineAndIndent: function (cm) { return runInOp(cm, function () { + var sels = cm.listSelections(); + for (var i = sels.length - 1; i >= 0; i--) + { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); } + sels = cm.listSelections(); + for (var i$1 = 0; i$1 < sels.length; i$1++) + { cm.indentLine(sels[i$1].from().line, null, true); } + ensureCursorVisible(cm); + }); }, + openLine: function (cm) { return cm.replaceSelection("\n", "start"); }, + toggleOverwrite: function (cm) { return cm.toggleOverwrite(); } +}; + + +function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLine(line); + if (visual != line) { lineN = lineNo(visual); } + return endOfLine(true, cm, visual, lineN, 1) +} +function lineEnd(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLineEnd(line); + if (visual != line) { lineN = lineNo(visual); } + return endOfLine(true, cm, line, lineN, -1) +} +function lineStartSmart(cm, pos) { + var start = lineStart(cm, pos.line); + var line = getLine(cm.doc, start.line); + var order = getOrder(line, cm.doc.direction); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(0, line.text.search(/\S/)); + var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; + return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky) + } + return start +} + +// Run a handler that was bound to a key. +function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) { return false } + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + cm.display.input.ensurePolled(); + var prevShift = cm.display.shift, done = false; + try { + if (cm.isReadOnly()) { cm.state.suppressEdits = true; } + if (dropShift) { cm.display.shift = false; } + done = bound(cm) != Pass; + } finally { + cm.display.shift = prevShift; + cm.state.suppressEdits = false; + } + return done +} + +function lookupKeyForEditor(cm, name, handle) { + for (var i = 0; i < cm.state.keyMaps.length; i++) { + var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); + if (result) { return result } + } + return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) + || lookupKey(name, cm.options.keyMap, handle, cm) +} + +// Note that, despite the name, this function is also used to check +// for bound mouse clicks. + +var stopSeq = new Delayed; + +function dispatchKey(cm, name, e, handle) { + var seq = cm.state.keySeq; + if (seq) { + if (isModifierKey(name)) { return "handled" } + if (/\'$/.test(name)) + { cm.state.keySeq = null; } + else + { stopSeq.set(50, function () { + if (cm.state.keySeq == seq) { + cm.state.keySeq = null; + cm.display.input.reset(); + } + }); } + if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true } + } + return dispatchKeyInner(cm, name, e, handle) +} + +function dispatchKeyInner(cm, name, e, handle) { + var result = lookupKeyForEditor(cm, name, handle); + + if (result == "multi") + { cm.state.keySeq = name; } + if (result == "handled") + { signalLater(cm, "keyHandled", cm, name, e); } + + if (result == "handled" || result == "multi") { + e_preventDefault(e); + restartBlink(cm); + } + + return !!result +} + +// Handle a key from the keydown event. +function handleKeyBinding(cm, e) { + var name = keyName(e, true); + if (!name) { return false } + + if (e.shiftKey && !cm.state.keySeq) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); }) + || dispatchKey(cm, name, e, function (b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) + { return doHandleBinding(cm, b) } + }) + } else { + return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); }) + } +} + +// Handle a key from the keypress event +function handleCharBinding(cm, e, ch) { + return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); }) +} + +var lastStoppedKey = null; +function onKeyDown(e) { + var cm = this; + cm.curOp.focus = activeElt(); + if (signalDOMEvent(cm, e)) { return } + // IE does strange things with escape. + if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; } + var code = e.keyCode; + cm.display.shift = code == 16 || e.shiftKey; + var handled = handleKeyBinding(cm, e); + if (presto) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + { cm.replaceSelection("", null, "cut"); } + } + + // Turn mouse into crosshair when Alt is held on Mac. + if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) + { showCrossHair(cm); } +} + +function showCrossHair(cm) { + var lineDiv = cm.display.lineDiv; + addClass(lineDiv, "CodeMirror-crosshair"); + + function up(e) { + if (e.keyCode == 18 || !e.altKey) { + rmClass(lineDiv, "CodeMirror-crosshair"); + off(document, "keyup", up); + off(document, "mouseover", up); + } + } + on(document, "keyup", up); + on(document, "mouseover", up); +} + +function onKeyUp(e) { + if (e.keyCode == 16) { this.doc.sel.shift = false; } + signalDOMEvent(this, e); +} + +function onKeyPress(e) { + var cm = this; + if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return } + var keyCode = e.keyCode, charCode = e.charCode; + if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return} + if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return } + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + // Some browsers fire keypress events for backspace + if (ch == "\x08") { return } + if (handleCharBinding(cm, e, ch)) { return } + cm.display.input.onKeyPress(e); +} + +var DOUBLECLICK_DELAY = 400; + +var PastClick = function(time, pos, button) { + this.time = time; + this.pos = pos; + this.button = button; +}; + +PastClick.prototype.compare = function (time, pos, button) { + return this.time + DOUBLECLICK_DELAY > time && + cmp(pos, this.pos) == 0 && button == this.button +}; + +var lastClick; +var lastDoubleClick; +function clickRepeat(pos, button) { + var now = +new Date; + if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { + lastClick = lastDoubleClick = null; + return "triple" + } else if (lastClick && lastClick.compare(now, pos, button)) { + lastDoubleClick = new PastClick(now, pos, button); + lastClick = null; + return "double" + } else { + lastClick = new PastClick(now, pos, button); + lastDoubleClick = null; + return "single" + } +} + +// A mouse down can be a single click, double click, triple click, +// start of selection drag, start of text drag, new cursor +// (ctrl-click), rectangle drag (alt-drag), or xwin +// middle-click-paste. Or it might be a click on something we should +// not interfere with, such as a scrollbar or widget. +function onMouseDown(e) { + var cm = this, display = cm.display; + if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return } + display.input.ensurePolled(); + display.shift = e.shiftKey; + + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false; + setTimeout(function () { return display.scroller.draggable = true; }, 100); + } + return + } + if (clickInGutter(cm, e)) { return } + var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single"; + window.focus(); + + // #3261: make sure, that we're not starting a second selection + if (button == 1 && cm.state.selectingText) + { cm.state.selectingText(e); } + + if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return } + + if (button == 1) { + if (pos) { leftButtonDown(cm, pos, repeat, e); } + else if (e_target(e) == display.scroller) { e_preventDefault(e); } + } else if (button == 2) { + if (pos) { extendSelection(cm.doc, pos); } + setTimeout(function () { return display.input.focus(); }, 20); + } else if (button == 3) { + if (captureRightClick) { onContextMenu(cm, e); } + else { delayBlurEvent(cm); } + } +} + +function handleMappedButton(cm, button, pos, repeat, event) { + var name = "Click"; + if (repeat == "double") { name = "Double" + name; } + else if (repeat == "triple") { name = "Triple" + name; } + name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; + + return dispatchKey(cm, addModifierNames(name, event), event, function (bound) { + if (typeof bound == "string") { bound = commands[bound]; } + if (!bound) { return false } + var done = false; + try { + if (cm.isReadOnly()) { cm.state.suppressEdits = true; } + done = bound(cm, pos) != Pass; + } finally { + cm.state.suppressEdits = false; + } + return done + }) +} + +function configureMouse(cm, repeat, event) { + var option = cm.getOption("configureMouse"); + var value = option ? option(cm, repeat, event) : {}; + if (value.unit == null) { + var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; + value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"; + } + if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; } + if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; } + if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); } + return value +} + +function leftButtonDown(cm, pos, repeat, event) { + if (ie) { setTimeout(bind(ensureFocus, cm), 0); } + else { cm.curOp.focus = activeElt(); } + + var behavior = configureMouse(cm, repeat, event); + + var sel = cm.doc.sel, contained; + if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && + repeat == "single" && (contained = sel.contains(pos)) > -1 && + (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && + (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) + { leftButtonStartDrag(cm, event, pos, behavior); } + else + { leftButtonSelect(cm, event, pos, behavior); } +} + +// Start a text drag. When it ends, see if any dragging actually +// happen, and treat as a click if it didn't. +function leftButtonStartDrag(cm, event, pos, behavior) { + var display = cm.display, moved = false; + var dragEnd = operation(cm, function (e) { + if (webkit) { display.scroller.draggable = false; } + cm.state.draggingText = false; + off(display.wrapper.ownerDocument, "mouseup", dragEnd); + off(display.wrapper.ownerDocument, "mousemove", mouseMove); + off(display.scroller, "dragstart", dragStart); + off(display.scroller, "drop", dragEnd); + if (!moved) { + e_preventDefault(e); + if (!behavior.addNew) + { extendSelection(cm.doc, pos, null, null, behavior.extend); } + // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) + if (webkit || ie && ie_version == 9) + { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); } + else + { display.input.focus(); } + } + }); + var mouseMove = function(e2) { + moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10; + }; + var dragStart = function () { return moved = true; }; + // Let the drag handler handle this. + if (webkit) { display.scroller.draggable = true; } + cm.state.draggingText = dragEnd; + dragEnd.copy = !behavior.moveOnDrag; + // IE's approach to draggable + if (display.scroller.dragDrop) { display.scroller.dragDrop(); } + on(display.wrapper.ownerDocument, "mouseup", dragEnd); + on(display.wrapper.ownerDocument, "mousemove", mouseMove); + on(display.scroller, "dragstart", dragStart); + on(display.scroller, "drop", dragEnd); + + delayBlurEvent(cm); + setTimeout(function () { return display.input.focus(); }, 20); +} + +function rangeForUnit(cm, pos, unit) { + if (unit == "char") { return new Range(pos, pos) } + if (unit == "word") { return cm.findWordAt(pos) } + if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) } + var result = unit(cm, pos); + return new Range(result.from, result.to) +} + +// Normal selection, as opposed to text dragging. +function leftButtonSelect(cm, event, start, behavior) { + var display = cm.display, doc = cm.doc; + e_preventDefault(event); + + var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; + if (behavior.addNew && !behavior.extend) { + ourIndex = doc.sel.contains(start); + if (ourIndex > -1) + { ourRange = ranges[ourIndex]; } + else + { ourRange = new Range(start, start); } + } else { + ourRange = doc.sel.primary(); + ourIndex = doc.sel.primIndex; + } + + if (behavior.unit == "rectangle") { + if (!behavior.addNew) { ourRange = new Range(start, start); } + start = posFromMouse(cm, event, true, true); + ourIndex = -1; + } else { + var range$$1 = rangeForUnit(cm, start, behavior.unit); + if (behavior.extend) + { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); } + else + { ourRange = range$$1; } + } + + if (!behavior.addNew) { + ourIndex = 0; + setSelection(doc, new Selection([ourRange], 0), sel_mouse); + startSel = doc.sel; + } else if (ourIndex == -1) { + ourIndex = ranges.length; + setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), + {scroll: false, origin: "*mouse"}); + } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { + setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), + {scroll: false, origin: "*mouse"}); + startSel = doc.sel; + } else { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); + } + + var lastPos = start; + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) { return } + lastPos = pos; + + if (behavior.unit == "rectangle") { + var ranges = [], tabSize = cm.options.tabSize; + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); + var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); + line <= end; line++) { + var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); + if (left == right) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); } + else if (text.length > leftPos) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } + } + if (!ranges.length) { ranges.push(new Range(start, start)); } + setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), + {origin: "*mouse", scroll: false}); + cm.scrollIntoView(pos); + } else { + var oldRange = ourRange; + var range$$1 = rangeForUnit(cm, pos, behavior.unit); + var anchor = oldRange.anchor, head; + if (cmp(range$$1.anchor, anchor) > 0) { + head = range$$1.head; + anchor = minPos(oldRange.from(), range$$1.anchor); + } else { + head = range$$1.anchor; + anchor = maxPos(oldRange.to(), range$$1.head); + } + var ranges$1 = startSel.ranges.slice(0); + ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)); + setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse); + } + } + + var editorSize = display.wrapper.getBoundingClientRect(); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); + if (!cur) { return } + if (cmp(cur, lastPos) != 0) { + cm.curOp.focus = activeElt(); + extendTo(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) + { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); } + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) { setTimeout(operation(cm, function () { + if (counter != curCount) { return } + display.scroller.scrollTop += outside; + extend(e); + }), 50); } + } + } + + function done(e) { + cm.state.selectingText = false; + counter = Infinity; + e_preventDefault(e); + display.input.focus(); + off(display.wrapper.ownerDocument, "mousemove", move); + off(display.wrapper.ownerDocument, "mouseup", up); + doc.history.lastSelOrigin = null; + } + + var move = operation(cm, function (e) { + if (e.buttons === 0 || !e_button(e)) { done(e); } + else { extend(e); } + }); + var up = operation(cm, done); + cm.state.selectingText = up; + on(display.wrapper.ownerDocument, "mousemove", move); + on(display.wrapper.ownerDocument, "mouseup", up); +} + +// Used when mouse-selecting to adjust the anchor to the proper side +// of a bidi jump depending on the visual position of the head. +function bidiSimplify(cm, range$$1) { + var anchor = range$$1.anchor; + var head = range$$1.head; + var anchorLine = getLine(cm.doc, anchor.line); + if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 } + var order = getOrder(anchorLine); + if (!order) { return range$$1 } + var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index]; + if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 } + var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1); + if (boundary == 0 || boundary == order.length) { return range$$1 } + + // Compute the relative visual position of the head compared to the + // anchor (<0 is to the left, >0 to the right) + var leftSide; + if (head.line != anchor.line) { + leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0; + } else { + var headIndex = getBidiPartAt(order, head.ch, head.sticky); + var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1); + if (headIndex == boundary - 1 || headIndex == boundary) + { leftSide = dir < 0; } + else + { leftSide = dir > 0; } + } + + var usePart = order[boundary + (leftSide ? -1 : 0)]; + var from = leftSide == (usePart.level == 1); + var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before"; + return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head) +} + + +// Determines whether an event happened in the gutter, and fires the +// handlers for the corresponding event. +function gutterEvent(cm, e, type, prevent) { + var mX, mY; + if (e.touches) { + mX = e.touches[0].clientX; + mY = e.touches[0].clientY; + } else { + try { mX = e.clientX; mY = e.clientY; } + catch(e) { return false } + } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false } + if (prevent) { e_preventDefault(e); } + + var display = cm.display; + var lineBox = display.lineDiv.getBoundingClientRect(); + + if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) } + mY -= lineBox.top - display.viewOffset; + + for (var i = 0; i < cm.options.gutters.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY); + var gutter = cm.options.gutters[i]; + signal(cm, type, cm, line, gutter, e); + return e_defaultPrevented(e) + } + } +} + +function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true) +} + +// CONTEXT MENU HANDLING + +// To make the context menu work, we need to briefly unhide the +// textarea (making it as unobtrusive as possible) to let the +// right-click take effect on it. +function onContextMenu(cm, e) { + if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return } + if (signalDOMEvent(cm, e, "contextmenu")) { return } + cm.display.input.onContextMenu(e); +} + +function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) { return false } + return gutterEvent(cm, e, "gutterContextMenu", false) +} + +function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); +} + +var Init = {toString: function(){return "CodeMirror.Init"}}; + +var defaults = {}; +var optionHandlers = {}; + +function defineOptions(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers; + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) { optionHandlers[name] = + notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; } + } + + CodeMirror.defineOption = option; + + // Passed to option handlers when there is no old value. + CodeMirror.Init = Init; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function (cm, val) { return cm.setValue(val); }, true); + option("mode", null, function (cm, val) { + cm.doc.modeOption = val; + loadMode(cm); + }, true); + + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function (cm) { + resetModeState(cm); + clearCaches(cm); + regChange(cm); + }, true); + + option("lineSeparator", null, function (cm, val) { + cm.doc.lineSep = val; + if (!val) { return } + var newBreaks = [], lineNo = cm.doc.first; + cm.doc.iter(function (line) { + for (var pos = 0;;) { + var found = line.text.indexOf(val, pos); + if (found == -1) { break } + pos = found + val.length; + newBreaks.push(Pos(lineNo, found)); + } + lineNo++; + }); + for (var i = newBreaks.length - 1; i >= 0; i--) + { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); } + }); + option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g, function (cm, val, old) { + cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); + if (old != Init) { cm.refresh(); } + }); + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true); + option("electricChars", true); + option("inputStyle", mobile ? "contenteditable" : "textarea", function () { + throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME + }, true); + option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true); + option("rtlMoveVisually", !windows); + option("wholeLineUpdateBefore", true); + + option("theme", "default", function (cm) { + themeChanged(cm); + guttersChanged(cm); + }, true); + option("keyMap", "default", function (cm, val, old) { + var next = getKeyMap(val); + var prev = old != Init && getKeyMap(old); + if (prev && prev.detach) { prev.detach(cm, next); } + if (next.attach) { next.attach(cm, prev || null); } + }); + option("extraKeys", null); + option("configureMouse", null); + + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function (cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("fixedGutter", true, function (cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; + cm.refresh(); + }, true); + option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true); + option("scrollbarStyle", "native", function (cm) { + initScrollbars(cm); + updateScrollbars(cm); + cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); + cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); + }, true); + option("lineNumbers", false, function (cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("firstLineNumber", 1, guttersChanged, true); + option("lineNumberFormatter", function (integer) { return integer; }, guttersChanged, true); + option("showCursorWhenSelecting", false, updateSelection, true); + + option("resetSelectionOnContextMenu", true); + option("lineWiseCopyCut", true); + option("pasteLinesPerSelection", true); + + option("readOnly", false, function (cm, val) { + if (val == "nocursor") { + onBlur(cm); + cm.display.input.blur(); + } + cm.display.input.readOnlyChanged(val); + }); + option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true); + option("dragDrop", true, dragDropChanged); + option("allowDropFileTypes", null); + + option("cursorBlinkRate", 530); + option("cursorScrollMargin", 0); + option("cursorHeight", 1, updateSelection, true); + option("singleCursorHeightPerLine", true, updateSelection, true); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true, resetModeState, true); + option("addModeClass", false, resetModeState, true); + option("pollInterval", 100); + option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; }); + option("historyEventDelay", 1250); + option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true); + option("maxHighlightLength", 10000, resetModeState, true); + option("moveInputWithCursor", true, function (cm, val) { + if (!val) { cm.display.input.resetPosition(); } + }); + + option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; }); + option("autofocus", null); + option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true); +} + +function guttersChanged(cm) { + updateGutters(cm); + regChange(cm); + alignHorizontally(cm); +} + +function dragDropChanged(cm, value, old) { + var wasOn = old && old != Init; + if (!value != !wasOn) { + var funcs = cm.display.dragFunctions; + var toggle = value ? on : off; + toggle(cm.display.scroller, "dragstart", funcs.start); + toggle(cm.display.scroller, "dragenter", funcs.enter); + toggle(cm.display.scroller, "dragover", funcs.over); + toggle(cm.display.scroller, "dragleave", funcs.leave); + toggle(cm.display.scroller, "drop", funcs.drop); + } +} + +function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + addClass(cm.display.wrapper, "CodeMirror-wrap"); + cm.display.sizer.style.minWidth = ""; + cm.display.sizerWidth = null; + } else { + rmClass(cm.display.wrapper, "CodeMirror-wrap"); + findMaxLine(cm); + } + estimateLineHeights(cm); + regChange(cm); + clearCaches(cm); + setTimeout(function () { return updateScrollbars(cm); }, 100); +} + +// A CodeMirror instance represents an editor. This is the object +// that user code is usually dealing with. + +function CodeMirror$1(place, options) { + var this$1 = this; + + if (!(this instanceof CodeMirror$1)) { return new CodeMirror$1(place, options) } + + this.options = options = options ? copyObj(options) : {}; + // Determine effective options based on given values and defaults. + copyObj(defaults, options, false); + setGuttersForLineNumbers(options); + + var doc = options.value; + if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); } + this.doc = doc; + + var input = new CodeMirror$1.inputStyles[options.inputStyle](this); + var display = this.display = new Display(place, doc, input); + display.wrapper.CodeMirror = this; + updateGutters(this); + themeChanged(this); + if (options.lineWrapping) + { this.display.wrapper.className += " CodeMirror-wrap"; } + initScrollbars(this); + + this.state = { + keyMaps: [], // stores maps added by addKeyMap + overlays: [], // highlighting overlays, as added by addOverlay + modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, + delayingBlurEvent: false, + focused: false, + suppressEdits: false, // used to disable editing during key handlers when in readOnly mode + pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll + selectingText: false, + draggingText: false, + highlight: new Delayed(), // stores highlight worker timeout + keySeq: null, // Unfinished key sequence + specialChars: null + }; + + if (options.autofocus && !mobile) { display.input.focus(); } + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); } + + registerEventHandlers(this); + ensureGlobalHandlers(); + + startOperation(this); + this.curOp.forceUpdate = true; + attachDoc(this, doc); + + if ((options.autofocus && !mobile) || this.hasFocus()) + { setTimeout(bind(onFocus, this), 20); } + else + { onBlur(this); } + + for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt)) + { optionHandlers[opt](this$1, options[opt], Init); } } + maybeUpdateLineNumberWidth(this); + if (options.finishInit) { options.finishInit(this); } + for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); } + endOperation(this); + // Suppress optimizelegibility in Webkit, since it breaks text + // measuring on line wrapping boundaries. + if (webkit && options.lineWrapping && + getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") + { display.lineDiv.style.textRendering = "auto"; } +} + +// The default configuration options. +CodeMirror$1.defaults = defaults; +// Functions to run when options are changed. +CodeMirror$1.optionHandlers = optionHandlers; + +// Attach the necessary event handlers when initializing the editor +function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + // Older IE's will not fire a second mousedown for a double click + if (ie && ie_version < 11) + { on(d.scroller, "dblclick", operation(cm, function (e) { + if (signalDOMEvent(cm, e)) { return } + var pos = posFromMouse(cm, e); + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return } + e_preventDefault(e); + var word = cm.findWordAt(pos); + extendSelection(cm.doc, word.anchor, word.head); + })); } + else + { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); } + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + if (!captureRightClick) { on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }); } + + // Used to suppress mouse event handling when a touch happens + var touchFinished, prevTouch = {end: 0}; + function finishTouch() { + if (d.activeTouch) { + touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000); + prevTouch = d.activeTouch; + prevTouch.end = +new Date; + } + } + function isMouseLikeTouchEvent(e) { + if (e.touches.length != 1) { return false } + var touch = e.touches[0]; + return touch.radiusX <= 1 && touch.radiusY <= 1 + } + function farAway(touch, other) { + if (other.left == null) { return true } + var dx = other.left - touch.left, dy = other.top - touch.top; + return dx * dx + dy * dy > 20 * 20 + } + on(d.scroller, "touchstart", function (e) { + if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { + d.input.ensurePolled(); + clearTimeout(touchFinished); + var now = +new Date; + d.activeTouch = {start: now, moved: false, + prev: now - prevTouch.end <= 300 ? prevTouch : null}; + if (e.touches.length == 1) { + d.activeTouch.left = e.touches[0].pageX; + d.activeTouch.top = e.touches[0].pageY; + } + } + }); + on(d.scroller, "touchmove", function () { + if (d.activeTouch) { d.activeTouch.moved = true; } + }); + on(d.scroller, "touchend", function (e) { + var touch = d.activeTouch; + if (touch && !eventInWidget(d, e) && touch.left != null && + !touch.moved && new Date - touch.start < 300) { + var pos = cm.coordsChar(d.activeTouch, "page"), range; + if (!touch.prev || farAway(touch, touch.prev)) // Single tap + { range = new Range(pos, pos); } + else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap + { range = cm.findWordAt(pos); } + else // Triple tap + { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); } + cm.setSelection(range.anchor, range.head); + cm.focus(); + e_preventDefault(e); + } + finishTouch(); + }); + on(d.scroller, "touchcancel", finishTouch); + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function () { + if (d.scroller.clientHeight) { + updateScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + } + }); + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); }); + on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); }); + + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); + + d.dragFunctions = { + enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }}, + over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }}, + start: function (e) { return onDragStart(cm, e); }, + drop: operation(cm, onDrop), + leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }} + }; + + var inp = d.input.getField(); + on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); }); + on(inp, "keydown", operation(cm, onKeyDown)); + on(inp, "keypress", operation(cm, onKeyPress)); + on(inp, "focus", function (e) { return onFocus(cm, e); }); + on(inp, "blur", function (e) { return onBlur(cm, e); }); +} + +var initHooks = []; +CodeMirror$1.defineInitHook = function (f) { return initHooks.push(f); }; + +// Indent the given line. The how parameter can be "smart", +// "add"/null, "subtract", or "prev". When aggressive is false +// (typically set to true for forced single-line indents), empty +// lines are not indented, and places where the mode returns Pass +// are left alone. +function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, state; + if (how == null) { how = "add"; } + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!doc.mode.indent) { how = "prev"; } + else { state = getContextBefore(cm, n).state; } + } + + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); + if (line.stateAfter) { line.stateAfter = null; } + var curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0; + how = "not"; + } else if (how == "smart") { + indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass || indentation > 150) { + if (!aggressive) { return } + how = "prev"; + } + } + if (how == "prev") { + if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); } + else { indentation = 0; } + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit; + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit; + } else if (typeof how == "number") { + indentation = curSpace + how; + } + indentation = Math.max(0, indentation); + + var indentString = "", pos = 0; + if (cm.options.indentWithTabs) + { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} } + if (pos < indentation) { indentString += spaceStr(indentation - pos); } + + if (indentString != curSpaceString) { + replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); + line.stateAfter = null; + return true + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { + var range = doc.sel.ranges[i$1]; + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos$1 = Pos(n, curSpaceString.length); + replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)); + break + } + } + } +} + +// This will be set to a {lineWise: bool, text: [string]} object, so +// that, when pasting, we know what kind of selections the copied +// text was made out of. +var lastCopied = null; + +function setLastCopied(newLastCopied) { + lastCopied = newLastCopied; +} + +function applyTextInput(cm, inserted, deleted, sel, origin) { + var doc = cm.doc; + cm.display.shift = false; + if (!sel) { sel = doc.sel; } + + var paste = cm.state.pasteIncoming || origin == "paste"; + var textLines = splitLinesAuto(inserted), multiPaste = null; + // When pasting N lines into N selections, insert one line per selection + if (paste && sel.ranges.length > 1) { + if (lastCopied && lastCopied.text.join("\n") == inserted) { + if (sel.ranges.length % lastCopied.text.length == 0) { + multiPaste = []; + for (var i = 0; i < lastCopied.text.length; i++) + { multiPaste.push(doc.splitLines(lastCopied.text[i])); } + } + } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) { + multiPaste = map(textLines, function (l) { return [l]; }); + } + } + + var updateInput; + // Normal behavior is to insert the new text into every selection + for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { + var range$$1 = sel.ranges[i$1]; + var from = range$$1.from(), to = range$$1.to(); + if (range$$1.empty()) { + if (deleted && deleted > 0) // Handle deletion + { from = Pos(from.line, from.ch - deleted); } + else if (cm.state.overwrite && !paste) // Handle overwrite + { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); } + else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted) + { from = to = Pos(from.line, 0); } + } + updateInput = cm.curOp.updateInput; + var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, + origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")}; + makeChange(cm.doc, changeEvent); + signalLater(cm, "inputRead", cm, changeEvent); + } + if (inserted && !paste) + { triggerElectric(cm, inserted); } + + ensureCursorVisible(cm); + cm.curOp.updateInput = updateInput; + cm.curOp.typing = true; + cm.state.pasteIncoming = cm.state.cutIncoming = false; +} + +function handlePaste(e, cm) { + var pasted = e.clipboardData && e.clipboardData.getData("Text"); + if (pasted) { + e.preventDefault(); + if (!cm.isReadOnly() && !cm.options.disableInput) + { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); } + return true + } +} + +function triggerElectric(cm, inserted) { + // When an 'electric' character is inserted, immediately trigger a reindent + if (!cm.options.electricChars || !cm.options.smartIndent) { return } + var sel = cm.doc.sel; + + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range$$1 = sel.ranges[i]; + if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue } + var mode = cm.getModeAt(range$$1.head); + var indented = false; + if (mode.electricChars) { + for (var j = 0; j < mode.electricChars.length; j++) + { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { + indented = indentLine(cm, range$$1.head.line, "smart"); + break + } } + } else if (mode.electricInput) { + if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch))) + { indented = indentLine(cm, range$$1.head.line, "smart"); } + } + if (indented) { signalLater(cm, "electricInput", cm, range$$1.head.line); } + } +} + +function copyableRanges(cm) { + var text = [], ranges = []; + for (var i = 0; i < cm.doc.sel.ranges.length; i++) { + var line = cm.doc.sel.ranges[i].head.line; + var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; + ranges.push(lineRange); + text.push(cm.getRange(lineRange.anchor, lineRange.head)); + } + return {text: text, ranges: ranges} +} + +function disableBrowserMagic(field, spellcheck) { + field.setAttribute("autocorrect", "off"); + field.setAttribute("autocapitalize", "off"); + field.setAttribute("spellcheck", !!spellcheck); +} + +function hiddenTextarea() { + var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"); + var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) { te.style.width = "1000px"; } + else { te.setAttribute("wrap", "off"); } + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) { te.style.border = "1px solid black"; } + disableBrowserMagic(te); + return div +} + +// The publicly visible API. Note that methodOp(f) means +// 'wrap f in an operation, performed on its `this` parameter'. + +// This is not the complete set of editor methods. Most of the +// methods defined on the Doc type are also injected into +// CodeMirror.prototype, for backwards compatibility and +// convenience. + +var addEditorMethods = function(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers; + + var helpers = CodeMirror.helpers = {}; + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){window.focus(); this.display.input.focus();}, + + setOption: function(option, value) { + var options = this.options, old = options[option]; + if (options[option] == value && option != "mode") { return } + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) + { operation(this, optionHandlers[option])(this, value, old); } + signal(this, "optionChange", this, option); + }, + + getOption: function(option) {return this.options[option]}, + getDoc: function() {return this.doc}, + + addKeyMap: function(map$$1, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map$$1)); + }, + removeKeyMap: function(map$$1) { + var maps = this.state.keyMaps; + for (var i = 0; i < maps.length; ++i) + { if (maps[i] == map$$1 || maps[i].name == map$$1) { + maps.splice(i, 1); + return true + } } + }, + + addOverlay: methodOp(function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); + if (mode.startState) { throw new Error("Overlays may not be stateful.") } + insertSorted(this.state.overlays, + {mode: mode, modeSpec: spec, opaque: options && options.opaque, + priority: (options && options.priority) || 0}, + function (overlay) { return overlay.priority; }); + this.state.modeGen++; + regChange(this); + }), + removeOverlay: methodOp(function(spec) { + var this$1 = this; + + var overlays = this.state.overlays; + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec; + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1); + this$1.state.modeGen++; + regChange(this$1); + return + } + } + }), + + indentLine: methodOp(function(n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; } + else { dir = dir ? "add" : "subtract"; } + } + if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); } + }), + indentSelection: methodOp(function(how) { + var this$1 = this; + + var ranges = this.doc.sel.ranges, end = -1; + for (var i = 0; i < ranges.length; i++) { + var range$$1 = ranges[i]; + if (!range$$1.empty()) { + var from = range$$1.from(), to = range$$1.to(); + var start = Math.max(end, from.line); + end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; + for (var j = start; j < end; ++j) + { indentLine(this$1, j, how); } + var newRanges = this$1.doc.sel.ranges; + if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) + { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); } + } else if (range$$1.head.line > end) { + indentLine(this$1, range$$1.head.line, how, true); + end = range$$1.head.line; + if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); } + } + } + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos, precise) { + return takeToken(this, pos, precise) + }, + + getLineTokens: function(line, precise) { + return takeToken(this, Pos(line), precise, true) + }, + + getTokenTypeAt: function(pos) { + pos = clipPos(this.doc, pos); + var styles = getLineStyles(this, getLine(this.doc, pos.line)); + var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; + var type; + if (ch == 0) { type = styles[2]; } + else { for (;;) { + var mid = (before + after) >> 1; + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; } + else if (styles[mid * 2 + 1] < ch) { before = mid + 1; } + else { type = styles[mid * 2 + 2]; break } + } } + var cut = type ? type.indexOf("overlay ") : -1; + return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1) + }, + + getModeAt: function(pos) { + var mode = this.doc.mode; + if (!mode.innerMode) { return mode } + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode + }, + + getHelper: function(pos, type) { + return this.getHelpers(pos, type)[0] + }, + + getHelpers: function(pos, type) { + var this$1 = this; + + var found = []; + if (!helpers.hasOwnProperty(type)) { return found } + var help = helpers[type], mode = this.getModeAt(pos); + if (typeof mode[type] == "string") { + if (help[mode[type]]) { found.push(help[mode[type]]); } + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]]; + if (val) { found.push(val); } + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]); + } else if (help[mode.name]) { + found.push(help[mode.name]); + } + for (var i$1 = 0; i$1 < help._global.length; i$1++) { + var cur = help._global[i$1]; + if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1) + { found.push(cur.val); } + } + return found + }, + + getStateAfter: function(line, precise) { + var doc = this.doc; + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); + return getContextBefore(this, line + 1, precise).state + }, + + cursorCoords: function(start, mode) { + var pos, range$$1 = this.doc.sel.primary(); + if (start == null) { pos = range$$1.head; } + else if (typeof start == "object") { pos = clipPos(this.doc, start); } + else { pos = start ? range$$1.from() : range$$1.to(); } + return cursorCoords(this, pos, mode || "page") + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page") + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page"); + return coordsChar(this, coords.left, coords.top) + }, + + lineAtHeight: function(height, mode) { + height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; + return lineAtHeight(this.doc, height + this.display.viewOffset) + }, + heightAtLine: function(line, mode, includeWidgets) { + var end = false, lineObj; + if (typeof line == "number") { + var last = this.doc.first + this.doc.size - 1; + if (line < this.doc.first) { line = this.doc.first; } + else if (line > last) { line = last; end = true; } + lineObj = getLine(this.doc, line); + } else { + lineObj = line; + } + return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top + + (end ? this.doc.height - heightAtLine(lineObj) : 0) + }, + + defaultTextHeight: function() { return textHeight(this.display) }, + defaultCharWidth: function() { return charWidth(this.display) }, + + getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.doc, pos)); + var top = pos.bottom, left = pos.left; + node.style.position = "absolute"; + node.setAttribute("cm-ignore-events", "true"); + this.display.input.setUneditable(node); + display.sizer.appendChild(node); + if (vert == "over") { + top = pos.top; + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + { top = pos.top - node.offsetHeight; } + else if (pos.bottom + node.offsetHeight <= vspace) + { top = pos.bottom; } + if (left + node.offsetWidth > hspace) + { left = hspace - node.offsetWidth; } + } + node.style.top = top + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") { left = 0; } + else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; } + node.style.left = left + "px"; + } + if (scroll) + { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); } + }, + + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: onKeyUp, + triggerOnMouseDown: methodOp(onMouseDown), + + execCommand: function(cmd) { + if (commands.hasOwnProperty(cmd)) + { return commands[cmd].call(null, this) } + }, + + triggerElectric: methodOp(function(text) { triggerElectric(this, text); }), + + findPosH: function(from, amount, unit, visually) { + var this$1 = this; + + var dir = 1; + if (amount < 0) { dir = -1; amount = -amount; } + var cur = clipPos(this.doc, from); + for (var i = 0; i < amount; ++i) { + cur = findPosH(this$1.doc, cur, dir, unit, visually); + if (cur.hitSide) { break } + } + return cur + }, + + moveH: methodOp(function(dir, unit) { + var this$1 = this; + + this.extendSelectionsBy(function (range$$1) { + if (this$1.display.shift || this$1.doc.extend || range$$1.empty()) + { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) } + else + { return dir < 0 ? range$$1.from() : range$$1.to() } + }, sel_move); + }), + + deleteH: methodOp(function(dir, unit) { + var sel = this.doc.sel, doc = this.doc; + if (sel.somethingSelected()) + { doc.replaceSelection("", null, "+delete"); } + else + { deleteNearSelection(this, function (range$$1) { + var other = findPosH(doc, range$$1.head, dir, unit, false); + return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other} + }); } + }), + + findPosV: function(from, amount, unit, goalColumn) { + var this$1 = this; + + var dir = 1, x = goalColumn; + if (amount < 0) { dir = -1; amount = -amount; } + var cur = clipPos(this.doc, from); + for (var i = 0; i < amount; ++i) { + var coords = cursorCoords(this$1, cur, "div"); + if (x == null) { x = coords.left; } + else { coords.left = x; } + cur = findPosV(this$1, coords, dir, unit); + if (cur.hitSide) { break } + } + return cur + }, + + moveV: methodOp(function(dir, unit) { + var this$1 = this; + + var doc = this.doc, goals = []; + var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected(); + doc.extendSelectionsBy(function (range$$1) { + if (collapse) + { return dir < 0 ? range$$1.from() : range$$1.to() } + var headPos = cursorCoords(this$1, range$$1.head, "div"); + if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; } + goals.push(headPos.left); + var pos = findPosV(this$1, headPos, dir, unit); + if (unit == "page" && range$$1 == doc.sel.primary()) + { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); } + return pos + }, sel_move); + if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++) + { doc.sel.ranges[i].goalColumn = goals[i]; } } + }), + + // Find the word at the given position (as returned by coordsChar). + findWordAt: function(pos) { + var doc = this.doc, line = getLine(doc, pos.line).text; + var start = pos.ch, end = pos.ch; + if (line) { + var helper = this.getHelper(pos, "wordChars"); + if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; } + var startChar = line.charAt(start); + var check = isWordChar(startChar, helper) + ? function (ch) { return isWordChar(ch, helper); } + : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); } + : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); }; + while (start > 0 && check(line.charAt(start - 1))) { --start; } + while (end < line.length && check(line.charAt(end))) { ++end; } + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)) + }, + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) { return } + if (this.state.overwrite = !this.state.overwrite) + { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); } + else + { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); } + + signal(this, "overwriteToggle", this, this.state.overwrite); + }, + hasFocus: function() { return this.display.input.getField() == activeElt() }, + isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) }, + + scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }), + getScrollInfo: function() { + var scroller = this.display.scroller; + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, + width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, + clientHeight: displayHeight(this), clientWidth: displayWidth(this)} + }, + + scrollIntoView: methodOp(function(range$$1, margin) { + if (range$$1 == null) { + range$$1 = {from: this.doc.sel.primary().head, to: null}; + if (margin == null) { margin = this.options.cursorScrollMargin; } + } else if (typeof range$$1 == "number") { + range$$1 = {from: Pos(range$$1, 0), to: null}; + } else if (range$$1.from == null) { + range$$1 = {from: range$$1, to: null}; + } + if (!range$$1.to) { range$$1.to = range$$1.from; } + range$$1.margin = margin || 0; + + if (range$$1.from.line != null) { + scrollToRange(this, range$$1); + } else { + scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin); + } + }), + + setSize: methodOp(function(width, height) { + var this$1 = this; + + var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; }; + if (width != null) { this.display.wrapper.style.width = interpret(width); } + if (height != null) { this.display.wrapper.style.height = interpret(height); } + if (this.options.lineWrapping) { clearLineMeasurementCache(this); } + var lineNo$$1 = this.display.viewFrom; + this.doc.iter(lineNo$$1, this.display.viewTo, function (line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) + { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, "widget"); break } } } + ++lineNo$$1; + }); + this.curOp.forceUpdate = true; + signal(this, "refresh", this); + }), + + operation: function(f){return runInOp(this, f)}, + startOperation: function(){return startOperation(this)}, + endOperation: function(){return endOperation(this)}, + + refresh: methodOp(function() { + var oldHeight = this.display.cachedTextHeight; + regChange(this); + this.curOp.forceUpdate = true; + clearCaches(this); + scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); + updateGutterSpace(this); + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) + { estimateLineHeights(this); } + signal(this, "refresh", this); + }), + + swapDoc: methodOp(function(doc) { + var old = this.doc; + old.cm = null; + attachDoc(this, doc); + clearCaches(this); + this.display.input.reset(); + scrollToCoords(this, doc.scrollLeft, doc.scrollTop); + this.curOp.forceScroll = true; + signalLater(this, "swapDoc", this, old); + return old + }), + + getInputField: function(){return this.display.input.getField()}, + getWrapperElement: function(){return this.display.wrapper}, + getScrollerElement: function(){return this.display.scroller}, + getGutterElement: function(){return this.display.gutters} + }; + eventMixin(CodeMirror); + + CodeMirror.registerHelper = function(type, name, value) { + if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; } + helpers[type][name] = value; + }; + CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value); + helpers[type]._global.push({pred: predicate, val: value}); + }; +}; + +// Used for horizontal relative motion. Dir is -1 or 1 (left or +// right), unit can be "char", "column" (like char, but doesn't +// cross line boundaries), "word" (across next word), or "group" (to +// the start of next group of word or non-word-non-whitespace +// chars). The visually param controls whether, in right-to-left +// text, direction 1 means to move towards the next index in the +// string, or towards the character to the right of the current +// position. The resulting position will have a hitSide=true +// property if it reached the end of the document. +function findPosH(doc, pos, dir, unit, visually) { + var oldPos = pos; + var origDir = dir; + var lineObj = getLine(doc, pos.line); + function findNextLine() { + var l = pos.line + dir; + if (l < doc.first || l >= doc.first + doc.size) { return false } + pos = new Pos(l, pos.ch, pos.sticky); + return lineObj = getLine(doc, l) + } + function moveOnce(boundToLine) { + var next; + if (visually) { + next = moveVisually(doc.cm, lineObj, pos, dir); + } else { + next = moveLogically(lineObj, pos, dir); + } + if (next == null) { + if (!boundToLine && findNextLine()) + { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); } + else + { return false } + } else { + pos = next; + } + return true + } + + if (unit == "char") { + moveOnce(); + } else if (unit == "column") { + moveOnce(true); + } else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group"; + var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) { break } + var cur = lineObj.text.charAt(pos.ch) || "\n"; + var type = isWordChar(cur, helper) ? "w" + : group && cur == "\n" ? "n" + : !group || /\s/.test(cur) ? null + : "p"; + if (group && !first && !type) { type = "s"; } + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";} + break + } + + if (type) { sawType = type; } + if (dir > 0 && !moveOnce(!first)) { break } + } + } + var result = skipAtomic(doc, pos, oldPos, origDir, true); + if (equalCursorPos(oldPos, result)) { result.hitSide = true; } + return result +} + +// For relative vertical movement. Dir may be -1 or 1. Unit can be +// "page" or "line". The resulting position will have a hitSide=true +// property if it reached the end of the document. +function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y; + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3); + y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; + + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + var target; + for (;;) { + target = coordsChar(cm, x, y); + if (!target.outside) { break } + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break } + y += dir * 5; + } + return target +} + +// CONTENTEDITABLE INPUT STYLE + +var ContentEditableInput = function(cm) { + this.cm = cm; + this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; + this.polling = new Delayed(); + this.composing = null; + this.gracePeriod = false; + this.readDOMTimeout = null; +}; + +ContentEditableInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = input.cm; + var div = input.div = display.lineDiv; + disableBrowserMagic(div, cm.options.spellcheck); + + on(div, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + // IE doesn't fire input events, so we schedule a read for the pasted content in this way + if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); } + }); + + on(div, "compositionstart", function (e) { + this$1.composing = {data: e.data, done: false}; + }); + on(div, "compositionupdate", function (e) { + if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; } + }); + on(div, "compositionend", function (e) { + if (this$1.composing) { + if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); } + this$1.composing.done = true; + } + }); + + on(div, "touchstart", function () { return input.forceCompositionEnd(); }); + + on(div, "input", function () { + if (!this$1.composing) { this$1.readFromDOMSoon(); } + }); + + function onCopyCut(e) { + if (signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}); + if (e.type == "cut") { cm.replaceSelection("", null, "cut"); } + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm); + setLastCopied({lineWise: true, text: ranges.text}); + if (e.type == "cut") { + cm.operation(function () { + cm.setSelections(ranges.ranges, 0, sel_dontScroll); + cm.replaceSelection("", null, "cut"); + }); + } + } + if (e.clipboardData) { + e.clipboardData.clearData(); + var content = lastCopied.text.join("\n"); + // iOS exposes the clipboard API, but seems to discard content inserted into it + e.clipboardData.setData("Text", content); + if (e.clipboardData.getData("Text") == content) { + e.preventDefault(); + return + } + } + // Old-fashioned briefly-focus-a-textarea hack + var kludge = hiddenTextarea(), te = kludge.firstChild; + cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); + te.value = lastCopied.text.join("\n"); + var hadFocus = document.activeElement; + selectInput(te); + setTimeout(function () { + cm.display.lineSpace.removeChild(kludge); + hadFocus.focus(); + if (hadFocus == div) { input.showPrimarySelection(); } + }, 50); + } + on(div, "copy", onCopyCut); + on(div, "cut", onCopyCut); +}; + +ContentEditableInput.prototype.prepareSelection = function () { + var result = prepareSelection(this.cm, false); + result.focus = this.cm.state.focused; + return result +}; + +ContentEditableInput.prototype.showSelection = function (info, takeFocus) { + if (!info || !this.cm.display.view.length) { return } + if (info.focus || takeFocus) { this.showPrimarySelection(); } + this.showMultipleSelections(info); +}; + +ContentEditableInput.prototype.getSelection = function () { + return this.cm.display.wrapper.ownerDocument.getSelection() +}; + +ContentEditableInput.prototype.showPrimarySelection = function () { + var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary(); + var from = prim.from(), to = prim.to(); + + if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { + sel.removeAllRanges(); + return + } + + var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); + if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && + cmp(minPos(curAnchor, curFocus), from) == 0 && + cmp(maxPos(curAnchor, curFocus), to) == 0) + { return } + + var view = cm.display.view; + var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) || + {node: view[0].measure.map[2], offset: 0}; + var end = to.line < cm.display.viewTo && posToDOM(cm, to); + if (!end) { + var measure = view[view.length - 1].measure; + var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; + end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]}; + } + + if (!start || !end) { + sel.removeAllRanges(); + return + } + + var old = sel.rangeCount && sel.getRangeAt(0), rng; + try { rng = range(start.node, start.offset, end.offset, end.node); } + catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible + if (rng) { + if (!gecko && cm.state.focused) { + sel.collapse(start.node, start.offset); + if (!rng.collapsed) { + sel.removeAllRanges(); + sel.addRange(rng); + } + } else { + sel.removeAllRanges(); + sel.addRange(rng); + } + if (old && sel.anchorNode == null) { sel.addRange(old); } + else if (gecko) { this.startGracePeriod(); } + } + this.rememberSelection(); +}; + +ContentEditableInput.prototype.startGracePeriod = function () { + var this$1 = this; + + clearTimeout(this.gracePeriod); + this.gracePeriod = setTimeout(function () { + this$1.gracePeriod = false; + if (this$1.selectionChanged()) + { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); } + }, 20); +}; + +ContentEditableInput.prototype.showMultipleSelections = function (info) { + removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); + removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); +}; + +ContentEditableInput.prototype.rememberSelection = function () { + var sel = this.getSelection(); + this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; + this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; +}; + +ContentEditableInput.prototype.selectionInEditor = function () { + var sel = this.getSelection(); + if (!sel.rangeCount) { return false } + var node = sel.getRangeAt(0).commonAncestorContainer; + return contains(this.div, node) +}; + +ContentEditableInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor") { + if (!this.selectionInEditor()) + { this.showSelection(this.prepareSelection(), true); } + this.div.focus(); + } +}; +ContentEditableInput.prototype.blur = function () { this.div.blur(); }; +ContentEditableInput.prototype.getField = function () { return this.div }; + +ContentEditableInput.prototype.supportsTouch = function () { return true }; + +ContentEditableInput.prototype.receivedFocus = function () { + var input = this; + if (this.selectionInEditor()) + { this.pollSelection(); } + else + { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); } + + function poll() { + if (input.cm.state.focused) { + input.pollSelection(); + input.polling.set(input.cm.options.pollInterval, poll); + } + } + this.polling.set(this.cm.options.pollInterval, poll); +}; + +ContentEditableInput.prototype.selectionChanged = function () { + var sel = this.getSelection(); + return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || + sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset +}; + +ContentEditableInput.prototype.pollSelection = function () { + if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return } + var sel = this.getSelection(), cm = this.cm; + // On Android Chrome (version 56, at least), backspacing into an + // uneditable block element will put the cursor in that element, + // and then, because it's not editable, hide the virtual keyboard. + // Because Android doesn't allow us to actually detect backspace + // presses in a sane way, this code checks for when that happens + // and simulates a backspace press in this case. + if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) { + this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs}); + this.blur(); + this.focus(); + return + } + if (this.composing) { return } + this.rememberSelection(); + var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var head = domToPos(cm, sel.focusNode, sel.focusOffset); + if (anchor && head) { runInOp(cm, function () { + setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); + if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; } + }); } +}; + +ContentEditableInput.prototype.pollContent = function () { + if (this.readDOMTimeout != null) { + clearTimeout(this.readDOMTimeout); + this.readDOMTimeout = null; + } + + var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); + var from = sel.from(), to = sel.to(); + if (from.ch == 0 && from.line > cm.firstLine()) + { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); } + if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) + { to = Pos(to.line + 1, 0); } + if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false } + + var fromIndex, fromLine, fromNode; + if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { + fromLine = lineNo(display.view[0].line); + fromNode = display.view[0].node; + } else { + fromLine = lineNo(display.view[fromIndex].line); + fromNode = display.view[fromIndex - 1].node.nextSibling; + } + var toIndex = findViewIndex(cm, to.line); + var toLine, toNode; + if (toIndex == display.view.length - 1) { + toLine = display.viewTo - 1; + toNode = display.lineDiv.lastChild; + } else { + toLine = lineNo(display.view[toIndex + 1].line) - 1; + toNode = display.view[toIndex + 1].node.previousSibling; + } + + if (!fromNode) { return false } + var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); + var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); + while (newText.length > 1 && oldText.length > 1) { + if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } + else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } + else { break } + } + + var cutFront = 0, cutEnd = 0; + var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); + while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) + { ++cutFront; } + var newBot = lst(newText), oldBot = lst(oldText); + var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), + oldBot.length - (oldText.length == 1 ? cutFront : 0)); + while (cutEnd < maxCutEnd && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) + { ++cutEnd; } + // Try to move start of change to start of selection if ambiguous + if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { + while (cutFront && cutFront > from.ch && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { + cutFront--; + cutEnd++; + } + } + + newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, ""); + newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); + + var chFrom = Pos(fromLine, cutFront); + var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); + if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { + replaceRange(cm.doc, newText, chFrom, chTo, "+input"); + return true + } +}; + +ContentEditableInput.prototype.ensurePolled = function () { + this.forceCompositionEnd(); +}; +ContentEditableInput.prototype.reset = function () { + this.forceCompositionEnd(); +}; +ContentEditableInput.prototype.forceCompositionEnd = function () { + if (!this.composing) { return } + clearTimeout(this.readDOMTimeout); + this.composing = null; + this.updateFromDOM(); + this.div.blur(); + this.div.focus(); +}; +ContentEditableInput.prototype.readFromDOMSoon = function () { + var this$1 = this; + + if (this.readDOMTimeout != null) { return } + this.readDOMTimeout = setTimeout(function () { + this$1.readDOMTimeout = null; + if (this$1.composing) { + if (this$1.composing.done) { this$1.composing = null; } + else { return } + } + this$1.updateFromDOM(); + }, 80); +}; + +ContentEditableInput.prototype.updateFromDOM = function () { + var this$1 = this; + + if (this.cm.isReadOnly() || !this.pollContent()) + { runInOp(this.cm, function () { return regChange(this$1.cm); }); } +}; + +ContentEditableInput.prototype.setUneditable = function (node) { + node.contentEditable = "false"; +}; + +ContentEditableInput.prototype.onKeyPress = function (e) { + if (e.charCode == 0 || this.composing) { return } + e.preventDefault(); + if (!this.cm.isReadOnly()) + { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); } +}; + +ContentEditableInput.prototype.readOnlyChanged = function (val) { + this.div.contentEditable = String(val != "nocursor"); +}; + +ContentEditableInput.prototype.onContextMenu = function () {}; +ContentEditableInput.prototype.resetPosition = function () {}; + +ContentEditableInput.prototype.needsContentAttribute = true; + +function posToDOM(cm, pos) { + var view = findViewForLine(cm, pos.line); + if (!view || view.hidden) { return null } + var line = getLine(cm.doc, pos.line); + var info = mapFromLineView(view, line, pos.line); + + var order = getOrder(line, cm.doc.direction), side = "left"; + if (order) { + var partPos = getBidiPartAt(order, pos.ch); + side = partPos % 2 ? "right" : "left"; + } + var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); + result.offset = result.collapse == "right" ? result.end : result.start; + return result +} + +function isInGutter(node) { + for (var scan = node; scan; scan = scan.parentNode) + { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } } + return false +} + +function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos } + +function domTextBetween(cm, from, to, fromLine, toLine) { + var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false; + function recognizeMarker(id) { return function (marker) { return marker.id == id; } } + function close() { + if (closing) { + text += lineSep; + if (extraLinebreak) { text += lineSep; } + closing = extraLinebreak = false; + } + } + function addText(str) { + if (str) { + close(); + text += str; + } + } + function walk(node) { + if (node.nodeType == 1) { + var cmText = node.getAttribute("cm-text"); + if (cmText) { + addText(cmText); + return + } + var markerID = node.getAttribute("cm-marker"), range$$1; + if (markerID) { + var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); + if (found.length && (range$$1 = found[0].find(0))) + { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); } + return + } + if (node.getAttribute("contenteditable") == "false") { return } + var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName); + if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return } + + if (isBlock) { close(); } + for (var i = 0; i < node.childNodes.length; i++) + { walk(node.childNodes[i]); } + + if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; } + if (isBlock) { closing = true; } + } else if (node.nodeType == 3) { + addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); + } + } + for (;;) { + walk(from); + if (from == to) { break } + from = from.nextSibling; + extraLinebreak = false; + } + return text +} + +function domToPos(cm, node, offset) { + var lineNode; + if (node == cm.display.lineDiv) { + lineNode = cm.display.lineDiv.childNodes[offset]; + if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) } + node = null; offset = 0; + } else { + for (lineNode = node;; lineNode = lineNode.parentNode) { + if (!lineNode || lineNode == cm.display.lineDiv) { return null } + if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break } + } + } + for (var i = 0; i < cm.display.view.length; i++) { + var lineView = cm.display.view[i]; + if (lineView.node == lineNode) + { return locateNodeInLineView(lineView, node, offset) } + } +} + +function locateNodeInLineView(lineView, node, offset) { + var wrapper = lineView.text.firstChild, bad = false; + if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) } + if (node == wrapper) { + bad = true; + node = wrapper.childNodes[offset]; + offset = 0; + if (!node) { + var line = lineView.rest ? lst(lineView.rest) : lineView.line; + return badPos(Pos(lineNo(line), line.text.length), bad) + } + } + + var textNode = node.nodeType == 3 ? node : null, topNode = node; + if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { + textNode = node.firstChild; + if (offset) { offset = textNode.nodeValue.length; } + } + while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; } + var measure = lineView.measure, maps = measure.maps; + + function find(textNode, topNode, offset) { + for (var i = -1; i < (maps ? maps.length : 0); i++) { + var map$$1 = i < 0 ? measure.map : maps[i]; + for (var j = 0; j < map$$1.length; j += 3) { + var curNode = map$$1[j + 2]; + if (curNode == textNode || curNode == topNode) { + var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); + var ch = map$$1[j] + offset; + if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; } + return Pos(line, ch) + } + } + } + } + var found = find(textNode, topNode, offset); + if (found) { return badPos(found, bad) } + + // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems + for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { + found = find(after, after.firstChild, 0); + if (found) + { return badPos(Pos(found.line, found.ch - dist), bad) } + else + { dist += after.textContent.length; } + } + for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { + found = find(before, before.firstChild, -1); + if (found) + { return badPos(Pos(found.line, found.ch + dist$1), bad) } + else + { dist$1 += before.textContent.length; } + } +} + +// TEXTAREA INPUT STYLE + +var TextareaInput = function(cm) { + this.cm = cm; + // See input.poll and input.reset + this.prevInput = ""; + + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + this.pollingFast = false; + // Self-resetting timeout for the poller + this.polling = new Delayed(); + // Used to work around IE issue with selection being forgotten when focus moves away from textarea + this.hasSelection = false; + this.composing = null; +}; + +TextareaInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = this.cm; + this.createField(display); + var te = this.textarea; + + display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); + + // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) + if (ios) { te.style.width = "0px"; } + + on(te, "input", function () { + if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; } + input.poll(); + }); + + on(te, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + + cm.state.pasteIncoming = true; + input.fastPoll(); + }); + + function prepareCopyCut(e) { + if (signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}); + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm); + setLastCopied({lineWise: true, text: ranges.text}); + if (e.type == "cut") { + cm.setSelections(ranges.ranges, null, sel_dontScroll); + } else { + input.prevInput = ""; + te.value = ranges.text.join("\n"); + selectInput(te); + } + } + if (e.type == "cut") { cm.state.cutIncoming = true; } + } + on(te, "cut", prepareCopyCut); + on(te, "copy", prepareCopyCut); + + on(display.scroller, "paste", function (e) { + if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return } + cm.state.pasteIncoming = true; + input.focus(); + }); + + // Prevent normal selection in the editor (we handle our own) + on(display.lineSpace, "selectstart", function (e) { + if (!eventInWidget(display, e)) { e_preventDefault(e); } + }); + + on(te, "compositionstart", function () { + var start = cm.getCursor("from"); + if (input.composing) { input.composing.range.clear(); } + input.composing = { + start: start, + range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) + }; + }); + on(te, "compositionend", function () { + if (input.composing) { + input.poll(); + input.composing.range.clear(); + input.composing = null; + } + }); +}; + +TextareaInput.prototype.createField = function (_display) { + // Wraps and hides input textarea + this.wrapper = hiddenTextarea(); + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + this.textarea = this.wrapper.firstChild; +}; + +TextareaInput.prototype.prepareSelection = function () { + // Redraw the selection and/or cursor + var cm = this.cm, display = cm.display, doc = cm.doc; + var result = prepareSelection(cm); + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); + var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); + result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)); + result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)); + } + + return result +}; + +TextareaInput.prototype.showSelection = function (drawn) { + var cm = this.cm, display = cm.display; + removeChildrenAndAdd(display.cursorDiv, drawn.cursors); + removeChildrenAndAdd(display.selectionDiv, drawn.selection); + if (drawn.teTop != null) { + this.wrapper.style.top = drawn.teTop + "px"; + this.wrapper.style.left = drawn.teLeft + "px"; + } +}; + +// Reset the input to correspond to the selection (or to be empty, +// when not typing and nothing is selected) +TextareaInput.prototype.reset = function (typing) { + if (this.contextMenuPending || this.composing) { return } + var cm = this.cm; + if (cm.somethingSelected()) { + this.prevInput = ""; + var content = cm.getSelection(); + this.textarea.value = content; + if (cm.state.focused) { selectInput(this.textarea); } + if (ie && ie_version >= 9) { this.hasSelection = content; } + } else if (!typing) { + this.prevInput = this.textarea.value = ""; + if (ie && ie_version >= 9) { this.hasSelection = null; } + } +}; + +TextareaInput.prototype.getField = function () { return this.textarea }; + +TextareaInput.prototype.supportsTouch = function () { return false }; + +TextareaInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { + try { this.textarea.focus(); } + catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM + } +}; + +TextareaInput.prototype.blur = function () { this.textarea.blur(); }; + +TextareaInput.prototype.resetPosition = function () { + this.wrapper.style.top = this.wrapper.style.left = 0; +}; + +TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); }; + +// Poll for input changes, using the normal rate of polling. This +// runs as long as the editor is focused. +TextareaInput.prototype.slowPoll = function () { + var this$1 = this; + + if (this.pollingFast) { return } + this.polling.set(this.cm.options.pollInterval, function () { + this$1.poll(); + if (this$1.cm.state.focused) { this$1.slowPoll(); } + }); +}; + +// When an event has just come in that is likely to add or change +// something in the input textarea, we poll faster, to ensure that +// the change appears on the screen quickly. +TextareaInput.prototype.fastPoll = function () { + var missed = false, input = this; + input.pollingFast = true; + function p() { + var changed = input.poll(); + if (!changed && !missed) {missed = true; input.polling.set(60, p);} + else {input.pollingFast = false; input.slowPoll();} + } + input.polling.set(20, p); +}; + +// Read input from the textarea, and update the document to match. +// When something is selected, it is present in the textarea, and +// selected (unless it is huge, in which case a placeholder is +// used). When nothing is selected, the cursor sits after previously +// seen text (can be empty), which is stored in prevInput (we must +// not reset the textarea when typing, because that breaks IME). +TextareaInput.prototype.poll = function () { + var this$1 = this; + + var cm = this.cm, input = this.textarea, prevInput = this.prevInput; + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (this.contextMenuPending || !cm.state.focused || + (hasSelection(input) && !prevInput && !this.composing) || + cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) + { return false } + + var text = input.value; + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) { return false } + // Work around nonsensical selection resetting in IE9/10, and + // inexplicable appearance of private area unicode characters on + // some key combos in Mac (#2689). + if (ie && ie_version >= 9 && this.hasSelection === text || + mac && /[\uf700-\uf7ff]/.test(text)) { + cm.display.input.reset(); + return false + } + + if (cm.doc.sel == cm.display.selForContextMenu) { + var first = text.charCodeAt(0); + if (first == 0x200b && !prevInput) { prevInput = "\u200b"; } + if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") } + } + // Find the part of the input that is actually new + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; } + + runInOp(cm, function () { + applyTextInput(cm, text.slice(same), prevInput.length - same, + null, this$1.composing ? "*compose" : null); + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; } + else { this$1.prevInput = text; } + + if (this$1.composing) { + this$1.composing.range.clear(); + this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), + {className: "CodeMirror-composing"}); + } + }); + return true +}; + +TextareaInput.prototype.ensurePolled = function () { + if (this.pollingFast && this.poll()) { this.pollingFast = false; } +}; + +TextareaInput.prototype.onKeyPress = function () { + if (ie && ie_version >= 9) { this.hasSelection = null; } + this.fastPoll(); +}; + +TextareaInput.prototype.onContextMenu = function (e) { + var input = this, cm = input.cm, display = cm.display, te = input.textarea; + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; + if (!pos || presto) { return } // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu; + if (reset && cm.doc.sel.contains(pos) == -1) + { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); } + + var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText; + input.wrapper.style.cssText = "position: absolute"; + var wrapperBox = input.wrapper.getBoundingClientRect(); + te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + var oldScrollY; + if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712) + display.input.focus(); + if (webkit) { window.scrollTo(null, oldScrollY); } + display.input.reset(); + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) { te.value = input.prevInput = " "; } + input.contextMenuPending = true; + display.selForContextMenu = cm.doc.sel; + clearTimeout(display.detectingSelectAll); + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (te.selectionStart != null) { + var selected = cm.somethingSelected(); + var extval = "\u200b" + (selected ? te.value : ""); + te.value = "\u21da"; // Used to catch context-menu undo + te.value = extval; + input.prevInput = selected ? "" : "\u200b"; + te.selectionStart = 1; te.selectionEnd = extval.length; + // Re-set this, in case some other handler touched the + // selection in the meantime. + display.selForContextMenu = cm.doc.sel; + } + } + function rehide() { + input.contextMenuPending = false; + input.wrapper.style.cssText = oldWrapperCSS; + te.style.cssText = oldCSS; + if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); } + + // Try to detect the user choosing select-all + if (te.selectionStart != null) { + if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); } + var i = 0, poll = function () { + if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && + te.selectionEnd > 0 && input.prevInput == "\u200b") { + operation(cm, selectAll)(cm); + } else if (i++ < 10) { + display.detectingSelectAll = setTimeout(poll, 500); + } else { + display.selForContextMenu = null; + display.input.reset(); + } + }; + display.detectingSelectAll = setTimeout(poll, 200); + } + } + + if (ie && ie_version >= 9) { prepareSelectAllHack(); } + if (captureRightClick) { + e_stop(e); + var mouseup = function () { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }; + on(window, "mouseup", mouseup); + } else { + setTimeout(rehide, 50); + } +}; + +TextareaInput.prototype.readOnlyChanged = function (val) { + if (!val) { this.reset(); } + this.textarea.disabled = val == "nocursor"; +}; + +TextareaInput.prototype.setUneditable = function () {}; + +TextareaInput.prototype.needsContentAttribute = false; + +function fromTextArea(textarea, options) { + options = options ? copyObj(options) : {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabIndex) + { options.tabindex = textarea.tabIndex; } + if (!options.placeholder && textarea.placeholder) + { options.placeholder = textarea.placeholder; } + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt(); + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = cm.getValue();} + + var realSubmit; + if (textarea.form) { + on(textarea.form, "submit", save); + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form; + realSubmit = form.submit; + try { + var wrappedSubmit = form.submit = function () { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch(e) {} + } + } + + options.finishInit = function (cm) { + cm.save = save; + cm.getTextArea = function () { return textarea; }; + cm.toTextArea = function () { + cm.toTextArea = isNaN; // Prevent this from being ran twice + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (typeof textarea.form.submit == "function") + { textarea.form.submit = realSubmit; } + } + }; + }; + + textarea.style.display = "none"; + var cm = CodeMirror$1(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); }, + options); + return cm +} + +function addLegacyProps(CodeMirror) { + CodeMirror.off = off; + CodeMirror.on = on; + CodeMirror.wheelEventPixels = wheelEventPixels; + CodeMirror.Doc = Doc; + CodeMirror.splitLines = splitLinesAuto; + CodeMirror.countColumn = countColumn; + CodeMirror.findColumn = findColumn; + CodeMirror.isWordChar = isWordCharBasic; + CodeMirror.Pass = Pass; + CodeMirror.signal = signal; + CodeMirror.Line = Line; + CodeMirror.changeEnd = changeEnd; + CodeMirror.scrollbarModel = scrollbarModel; + CodeMirror.Pos = Pos; + CodeMirror.cmpPos = cmp; + CodeMirror.modes = modes; + CodeMirror.mimeModes = mimeModes; + CodeMirror.resolveMode = resolveMode; + CodeMirror.getMode = getMode; + CodeMirror.modeExtensions = modeExtensions; + CodeMirror.extendMode = extendMode; + CodeMirror.copyState = copyState; + CodeMirror.startState = startState; + CodeMirror.innerMode = innerMode; + CodeMirror.commands = commands; + CodeMirror.keyMap = keyMap; + CodeMirror.keyName = keyName; + CodeMirror.isModifierKey = isModifierKey; + CodeMirror.lookupKey = lookupKey; + CodeMirror.normalizeKeyMap = normalizeKeyMap; + CodeMirror.StringStream = StringStream; + CodeMirror.SharedTextMarker = SharedTextMarker; + CodeMirror.TextMarker = TextMarker; + CodeMirror.LineWidget = LineWidget; + CodeMirror.e_preventDefault = e_preventDefault; + CodeMirror.e_stopPropagation = e_stopPropagation; + CodeMirror.e_stop = e_stop; + CodeMirror.addClass = addClass; + CodeMirror.contains = contains; + CodeMirror.rmClass = rmClass; + CodeMirror.keyNames = keyNames; +} + +// EDITOR CONSTRUCTOR + +defineOptions(CodeMirror$1); + +addEditorMethods(CodeMirror$1); + +// Set up methods on CodeMirror's prototype to redirect to the editor's document. +var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); +for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + { CodeMirror$1.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments)} + })(Doc.prototype[prop]); } } + +eventMixin(Doc); + +// INPUT HANDLING + +CodeMirror$1.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; + +// MODE DEFINITION AND QUERYING + +// Extra arguments are stored as the mode's dependencies, which is +// used by (legacy) mechanisms like loadmode.js to automatically +// load a mode. (Preferred mechanism is the require/define calls.) +CodeMirror$1.defineMode = function(name/*, mode, …*/) { + if (!CodeMirror$1.defaults.mode && name != "null") { CodeMirror$1.defaults.mode = name; } + defineMode.apply(this, arguments); +}; + +CodeMirror$1.defineMIME = defineMIME; + +// Minimal default mode. +CodeMirror$1.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); }); +CodeMirror$1.defineMIME("text/plain", "null"); + +// EXTENSIONS + +CodeMirror$1.defineExtension = function (name, func) { + CodeMirror$1.prototype[name] = func; +}; +CodeMirror$1.defineDocExtension = function (name, func) { + Doc.prototype[name] = func; +}; + +CodeMirror$1.fromTextArea = fromTextArea; + +addLegacyProps(CodeMirror$1); + +CodeMirror$1.version = "5.38.0"; + +return CodeMirror$1; + +}))); + + +/***/ }), +/* 7 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Backbone = __webpack_require__(0); + +var TYPE_CLASS = 1; +var TYPE_ID = 2; + +var Selector = Backbone.Model.extend({ + idAttribute: 'name', + + defaults: { + name: '', + + label: '', + + // Type of the selector + type: TYPE_CLASS, + + // If not active it's not selectable by the style manager (uncheckboxed) + active: true, + + // Can't be seen by the style manager, therefore even by the user + // Will be rendered only in export code + private: false, + + // If true, can't be removed from the attacched element + protected: false + }, + + initialize: function initialize() { + var name = this.get('name'); + var label = this.get('label'); + + if (!name) { + this.set('name', label); + } else if (!label) { + this.set('label', name); + } + + this.set('name', Selector.escapeName(this.get('name'))); + }, + + + /** + * Get full selector name + * @return {string} + */ + getFullName: function getFullName() { + var init = ''; + + switch (this.get('type')) { + case TYPE_CLASS: + init = '.'; + break; + case TYPE_ID: + init = '#'; + break; + } + + return init + this.get('name'); + } +}, { + // All type selectors: https://developer.mozilla.org/it/docs/Web/CSS/CSS_Selectors + // Here I define only what I need + TYPE_CLASS: TYPE_CLASS, + + TYPE_ID: TYPE_ID, + + /** + * Escape string + * @param {string} name + * @return {string} + * @private + */ + escapeName: function escapeName(name) { + return ('' + name).trim().replace(/([^a-z0-9\w-]+)/gi, '-'); + } +}); + +module.exports = Selector; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _underscore = __webpack_require__(1); + +var Backbone = __webpack_require__(0); +var $ = Backbone.$; + +module.exports = Backbone.View.extend({ + events: { + change: 'onChange' + }, + + attributes: function attributes() { + return this.model.get('attributes'); + }, + initialize: function initialize(o) { + var model = this.model; + var name = model.get('name'); + var target = model.target; + this.config = o.config || {}; + this.pfx = this.config.stylePrefix || ''; + this.ppfx = this.config.pStylePrefix || ''; + this.target = target; + this.className = this.pfx + 'trait'; + this.labelClass = this.ppfx + 'label'; + this.fieldClass = this.ppfx + 'field ' + this.ppfx + 'field-' + model.get('type'); + this.inputhClass = this.ppfx + 'input-holder'; + model.off('change:value', this.onValueChange); + this.listenTo(model, 'change:value', this.onValueChange); + model.view = this; + this.tmpl = '
    '; + }, + + + /** + * Fires when the input is changed + * @private + */ + onChange: function onChange() { + this.model.set('value', this.getInputEl().value); + }, + getValueForTarget: function getValueForTarget() { + return this.model.get('value'); + }, + setInputValue: function setInputValue(value) { + this.getInputEl().value = value; + }, + + + /** + * On change callback + * @private + */ + onValueChange: function onValueChange(model, value) { + var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var mod = this.model; + var trg = this.target; + var name = mod.get('name'); + + if (opts.fromTarget) { + this.setInputValue(mod.get('value')); + } else { + var _value = this.getValueForTarget(); + mod.setTargetValue(_value, opts); + } + }, + + + /** + * Render label + * @private + */ + renderLabel: function renderLabel() { + var label = this.getLabel(); + this.$el.html('
    ' + label + '
    '); + }, + + + /** + * Returns label for the input + * @return {string} + * @private + */ + getLabel: function getLabel() { + var model = this.model; + var label = model.get('label') || model.get('name'); + return label.charAt(0).toUpperCase() + label.slice(1).replace(/-/g, ' '); + }, + + + /** + * Returns input element + * @return {HTMLElement} + * @private + */ + getInputEl: function getInputEl() { + if (!this.$input) { + var md = this.model; + var plh = md.get('placeholder') || md.get('default') || ''; + var type = md.get('type') || 'text'; + var min = md.get('min'); + var max = md.get('max'); + var value = this.getModelValue(); + var input = $(''); + + if (value) { + input.prop('value', value); + } + + if (min) { + input.prop('min', min); + } + + if (max) { + input.prop('max', max); + } + + this.$input = input; + } + return this.$input.get(0); + }, + getModelValue: function getModelValue() { + var value = void 0; + var model = this.model; + var target = this.target; + var name = model.get('name'); + + if (model.get('changeProp')) { + value = target.get(name); + } else { + var attrs = target.get('attributes'); + value = model.get('value') || attrs[name]; + } + + return !(0, _underscore.isUndefined)(value) ? value : ''; + }, + + + /** + * Renders input + * @private + * */ + renderField: function renderField() { + if (!this.$input) { + this.$el.append(this.tmpl); + var el = this.getInputEl(); + // I use prepand expecially for checkbox traits + var inputWrap = this.el.querySelector('.' + this.inputhClass); + inputWrap.insertBefore(el, inputWrap.childNodes[0]); + } + }, + render: function render() { + this.renderLabel(); + this.renderField(); + this.el.className = this.className; + return this; + } +}); + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__; + +/*! cash-dom 1.3.7, https://github.com/kenwheeler/cash @license MIT */ +;(function (root, factory) { + if (true) { + !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : + __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else if (typeof exports !== "undefined") { + module.exports = factory(); + } else { + root.cash = root.$ = factory(); + } +})(this, function () { + var doc = document, win = window, ArrayProto = Array.prototype, slice = ArrayProto.slice, filter = ArrayProto.filter, push = ArrayProto.push; + + var noop = function () {}, isFunction = function (item) { + // @see https://crbug.com/568448 + return typeof item === typeof noop && item.call; + }, isString = function (item) { + return typeof item === typeof ""; + }; + + var idMatch = /^#[\w-]*$/, classMatch = /^\.[\w-]*$/, htmlMatch = /<.+>/, singlet = /^\w+$/; + + function find(selector, context) { + context = context || doc; + var elems = (classMatch.test(selector) ? context.getElementsByClassName(selector.slice(1)) : singlet.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector)); + return elems; + } + + var frag; + function parseHTML(str) { + if (!frag) { + frag = doc.implementation.createHTMLDocument(null); + var base = frag.createElement("base"); + base.href = doc.location.href; + frag.head.appendChild(base); + } + + frag.body.innerHTML = str; + + return frag.body.childNodes; + } + + function onReady(fn) { + if (doc.readyState !== "loading") { + setTimeout(fn); + } else { + doc.addEventListener("DOMContentLoaded", fn); + } + } + + function Init(selector, context) { + if (!selector) { + return this; + } + + // If already a cash collection, don't do any further processing + if (selector.cash && selector !== win) { + return selector; + } + + var elems = selector, i = 0, length; + + if (isString(selector)) { + elems = (idMatch.test(selector) ? + // If an ID use the faster getElementById check + doc.getElementById(selector.slice(1)) : htmlMatch.test(selector) ? + // If HTML, parse it into real elements + parseHTML(selector) : + // else use `find` + find(selector, context)); + + // If function, use as shortcut for DOM ready + } else if (isFunction(selector)) { + onReady(selector);return this; + } + + if (!elems) { + return this; + } + + // If a single DOM element is passed in or received via ID, return the single element + if (elems.nodeType || elems === win) { + this[0] = elems; + this.length = 1; + } else { + // Treat like an array and loop through each item. + length = this.length = elems.length; + for (; i < length; i++) { + this[i] = elems[i]; + } + } + + return this; + } + + function cash(selector, context) { + return new Init(selector, context); + } + + var fn = cash.fn = cash.prototype = Init.prototype = { // jshint ignore:line + cash: true, + length: 0, + push: push, + splice: ArrayProto.splice, + map: ArrayProto.map, + init: Init + }; + + Object.defineProperty(fn, "constructor", { value: cash }); + + cash.parseHTML = parseHTML; + cash.noop = noop; + cash.isFunction = isFunction; + cash.isString = isString; + + cash.extend = fn.extend = function (target) { + target = target || {}; + + var args = slice.call(arguments), length = args.length, i = 1; + + if (args.length === 1) { + target = this; + i = 0; + } + + for (; i < length; i++) { + if (!args[i]) { + continue; + } + for (var key in args[i]) { + if (args[i].hasOwnProperty(key)) { + target[key] = args[i][key]; + } + } + } + + return target; + }; + + function each(collection, callback) { + var l = collection.length, i = 0; + + for (; i < l; i++) { + if (callback.call(collection[i], collection[i], i, collection) === false) { + break; + } + } + } + + function matches(el, selector) { + var m = el && (el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector || el.oMatchesSelector); + return !!m && m.call(el, selector); + } + + function getCompareFunction(selector) { + return ( + /* Use browser's `matches` function if string */ + isString(selector) ? matches : + /* Match a cash element */ + selector.cash ? function (el) { + return selector.is(el); + } : + /* Direct comparison */ + function (el, selector) { + return el === selector; + }); + } + + function unique(collection) { + return cash(slice.call(collection).filter(function (item, index, self) { + return self.indexOf(item) === index; + })); + } + + cash.extend({ + merge: function (first, second) { + var len = +second.length, i = first.length, j = 0; + + for (; j < len; i++, j++) { + first[i] = second[j]; + } + + first.length = i; + return first; + }, + + each: each, + matches: matches, + unique: unique, + isArray: Array.isArray, + isNumeric: function (n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + }); + + var uid = cash.uid = "_cash" + Date.now(); + + function getDataCache(node) { + return (node[uid] = node[uid] || {}); + } + + function setData(node, key, value) { + return (getDataCache(node)[key] = value); + } + + function getData(node, key) { + var c = getDataCache(node); + if (c[key] === undefined) { + c[key] = node.dataset ? node.dataset[key] : cash(node).attr("data-" + key); + } + return c[key]; + } + + function removeData(node, key) { + var c = getDataCache(node); + if (c) { + delete c[key]; + } else if (node.dataset) { + delete node.dataset[key]; + } else { + cash(node).removeAttr("data-" + name); + } + } + + fn.extend({ + data: function (name, value) { + if (isString(name)) { + return (value === undefined ? getData(this[0], name) : this.each(function (v) { + return setData(v, name, value); + })); + } + + for (var key in name) { + this.data(key, name[key]); + } + + return this; + }, + + removeData: function (key) { + return this.each(function (v) { + return removeData(v, key); + }); + } + + }); + + var notWhiteMatch = /\S+/g; + + function getClasses(c) { + return isString(c) && c.match(notWhiteMatch); + } + + function hasClass(v, c) { + return (v.classList ? v.classList.contains(c) : new RegExp("(^| )" + c + "( |$)", "gi").test(v.className)); + } + + function addClass(v, c) { + if (v.classList) { + v.classList.add(c); + } else if (!hasClass(v, c)) { + v.className += " " + c; + } + } + + function removeClass(v, c) { + if (v.classList) { + v.classList.remove(c); + } else { + v.className = v.className.replace(c, ""); + } + } + + fn.extend({ + addClass: function (c) { + var classes = getClasses(c); + + return (classes ? this.each(function (v) { + each(classes, function (c) { + addClass(v, c); + }); + }) : this); + }, + + attr: function (name, value) { + if (!name) { + return undefined; + } + + if (isString(name)) { + if (value === undefined) { + return this[0] ? this[0].getAttribute ? this[0].getAttribute(name) : this[0][name] : undefined; + } + + return this.each(function (v) { + if (v.setAttribute) { + v.setAttribute(name, value); + } else { + v[name] = value; + } + }); + } + + for (var key in name) { + this.attr(key, name[key]); + } + + return this; + }, + + hasClass: function (c) { + var check = false, classes = getClasses(c); + if (classes && classes.length) { + this.each(function (v) { + check = hasClass(v, classes[0]); + return !check; + }); + } + return check; + }, + + prop: function (name, value) { + if (isString(name)) { + return (value === undefined ? this[0][name] : this.each(function (v) { + v[name] = value; + })); + } + + for (var key in name) { + this.prop(key, name[key]); + } + + return this; + }, + + removeAttr: function (name) { + return this.each(function (v) { + if (v.removeAttribute) { + v.removeAttribute(name); + } else { + delete v[name]; + } + }); + }, + + removeClass: function (c) { + if (!arguments.length) { + return this.attr("class", ""); + } + var classes = getClasses(c); + return (classes ? this.each(function (v) { + each(classes, function (c) { + removeClass(v, c); + }); + }) : this); + }, + + removeProp: function (name) { + return this.each(function (v) { + delete v[name]; + }); + }, + + toggleClass: function (c, state) { + if (state !== undefined) { + return this[state ? "addClass" : "removeClass"](c); + } + var classes = getClasses(c); + return (classes ? this.each(function (v) { + each(classes, function (c) { + if (hasClass(v, c)) { + removeClass(v, c); + } else { + addClass(v, c); + } + }); + }) : this); + } }); + + fn.extend({ + add: function (selector, context) { + return unique(cash.merge(this, cash(selector, context))); + }, + + each: function (callback) { + each(this, callback); + return this; + }, + + eq: function (index) { + return cash(this.get(index)); + }, + + filter: function (selector) { + if (!selector) { + return this; + } + + var comparator = (isFunction(selector) ? selector : getCompareFunction(selector)); + + return cash(filter.call(this, function (e) { + return comparator(e, selector); + })); + }, + + first: function () { + return this.eq(0); + }, + + get: function (index) { + if (index === undefined) { + return slice.call(this); + } + return (index < 0 ? this[index + this.length] : this[index]); + }, + + index: function (elem) { + var child = elem ? cash(elem)[0] : this[0], collection = elem ? this : cash(child).parent().children(); + return slice.call(collection).indexOf(child); + }, + + last: function () { + return this.eq(-1); + } + + }); + + var camelCase = (function () { + var camelRegex = /(?:^\w|[A-Z]|\b\w)/g, whiteSpace = /[\s-_]+/g; + return function (str) { + return str.replace(camelRegex, function (letter, index) { + return letter[index === 0 ? "toLowerCase" : "toUpperCase"](); + }).replace(whiteSpace, ""); + }; + }()); + + var getPrefixedProp = (function () { + var cache = {}, doc = document, div = doc.createElement("div"), style = div.style; + + return function (prop) { + prop = camelCase(prop); + if (cache[prop]) { + return cache[prop]; + } + + var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), prefixes = ["webkit", "moz", "ms", "o"], props = (prop + " " + (prefixes).join(ucProp + " ") + ucProp).split(" "); + + each(props, function (p) { + if (p in style) { + cache[p] = prop = cache[prop] = p; + return false; + } + }); + + return cache[prop]; + }; + }()); + + cash.prefixedProp = getPrefixedProp; + cash.camelCase = camelCase; + + fn.extend({ + css: function (prop, value) { + if (isString(prop)) { + prop = getPrefixedProp(prop); + return (arguments.length > 1 ? this.each(function (v) { + return v.style[prop] = value; + }) : win.getComputedStyle(this[0])[prop]); + } + + for (var key in prop) { + this.css(key, prop[key]); + } + + return this; + } + + }); + + function compute(el, prop) { + return parseInt(win.getComputedStyle(el[0], null)[prop], 10) || 0; + } + + each(["Width", "Height"], function (v) { + var lower = v.toLowerCase(); + + fn[lower] = function () { + return this[0].getBoundingClientRect()[lower]; + }; + + fn["inner" + v] = function () { + return this[0]["client" + v]; + }; + + fn["outer" + v] = function (margins) { + return this[0]["offset" + v] + (margins ? compute(this, "margin" + (v === "Width" ? "Left" : "Top")) + compute(this, "margin" + (v === "Width" ? "Right" : "Bottom")) : 0); + }; + }); + + function registerEvent(node, eventName, callback) { + var eventCache = getData(node, "_cashEvents") || setData(node, "_cashEvents", {}); + eventCache[eventName] = eventCache[eventName] || []; + eventCache[eventName].push(callback); + node.addEventListener(eventName, callback); + } + + function removeEvent(node, eventName, callback) { + var events = getData(node, "_cashEvents"), eventCache = (events && events[eventName]), index; + + if (!eventCache) { + return; + } + + if (callback) { + node.removeEventListener(eventName, callback); + index = eventCache.indexOf(callback); + if (index >= 0) { + eventCache.splice(index, 1); + } + } else { + each(eventCache, function (event) { + node.removeEventListener(eventName, event); + }); + eventCache = []; + } + } + + fn.extend({ + off: function (eventName, callback) { + return this.each(function (v) { + return removeEvent(v, eventName, callback); + }); + }, + + on: function (eventName, delegate, callback, runOnce) { + // jshint ignore:line + + var originalCallback; + + if (!isString(eventName)) { + for (var key in eventName) { + this.on(key, delegate, eventName[key]); + } + return this; + } + + if (isFunction(delegate)) { + callback = delegate; + delegate = null; + } + + if (eventName === "ready") { + onReady(callback); + return this; + } + + if (delegate) { + originalCallback = callback; + callback = function (e) { + var t = e.target; + + while (!matches(t, delegate)) { + if (t === this) { + return (t = false); + } + t = t.parentNode; + } + + if (t) { + originalCallback.call(t, e); + } + }; + } + + return this.each(function (v) { + var finalCallback = callback; + if (runOnce) { + finalCallback = function () { + callback.apply(this, arguments); + removeEvent(v, eventName, finalCallback); + }; + } + registerEvent(v, eventName, finalCallback); + }); + }, + + one: function (eventName, delegate, callback) { + return this.on(eventName, delegate, callback, true); + }, + + ready: onReady, + + trigger: function (eventName, data) { + var evt = doc.createEvent("HTMLEvents"); + evt.data = data; + evt.initEvent(eventName, true, false); + return this.each(function (v) { + return v.dispatchEvent(evt); + }); + } + + }); + + function encode(name, value) { + return "&" + encodeURIComponent(name) + "=" + encodeURIComponent(value).replace(/%20/g, "+"); + } + + function getSelectMultiple_(el) { + var values = []; + each(el.options, function (o) { + if (o.selected) { + values.push(o.value); + } + }); + return values.length ? values : null; + } + + function getSelectSingle_(el) { + var selectedIndex = el.selectedIndex; + return selectedIndex >= 0 ? el.options[selectedIndex].value : null; + } + + function getValue(el) { + var type = el.type; + if (!type) { + return null; + } + switch (type.toLowerCase()) { + case "select-one": + return getSelectSingle_(el); + case "select-multiple": + return getSelectMultiple_(el); + case "radio": + return (el.checked) ? el.value : null; + case "checkbox": + return (el.checked) ? el.value : null; + default: + return el.value ? el.value : null; + } + } + + fn.extend({ + serialize: function () { + var query = ""; + + each(this[0].elements || this, function (el) { + if (el.disabled || el.tagName === "FIELDSET") { + return; + } + var name = el.name; + switch (el.type.toLowerCase()) { + case "file": + case "reset": + case "submit": + case "button": + break; + case "select-multiple": + var values = getValue(el); + if (values !== null) { + each(values, function (value) { + query += encode(name, value); + }); + } + break; + default: + var value = getValue(el); + if (value !== null) { + query += encode(name, value); + } + } + }); + + return query.substr(1); + }, + + val: function (value) { + if (value === undefined) { + return getValue(this[0]); + } else { + return this.each(function (v) { + return v.value = value; + }); + } + } + + }); + + function insertElement(el, child, prepend) { + if (prepend) { + var first = el.childNodes[0]; + el.insertBefore(child, first); + } else { + el.appendChild(child); + } + } + + function insertContent(parent, child, prepend) { + var str = isString(child); + + if (!str && child.length) { + each(child, function (v) { + return insertContent(parent, v, prepend); + }); + return; + } + + each(parent, str ? function (v) { + return v.insertAdjacentHTML(prepend ? "afterbegin" : "beforeend", child); + } : function (v, i) { + return insertElement(v, (i === 0 ? child : child.cloneNode(true)), prepend); + }); + } + + fn.extend({ + after: function (selector) { + cash(selector).insertAfter(this); + return this; + }, + + append: function (content) { + insertContent(this, content); + return this; + }, + + appendTo: function (parent) { + insertContent(cash(parent), this); + return this; + }, + + before: function (selector) { + cash(selector).insertBefore(this); + return this; + }, + + clone: function () { + return cash(this.map(function (v) { + return v.cloneNode(true); + })); + }, + + empty: function () { + this.html(""); + return this; + }, + + html: function (content) { + if (content === undefined) { + return this[0].innerHTML; + } + var source = (content.nodeType ? content[0].outerHTML : content); + return this.each(function (v) { + return v.innerHTML = source; + }); + }, + + insertAfter: function (selector) { + var _this = this; + + + cash(selector).each(function (el, i) { + var parent = el.parentNode, sibling = el.nextSibling; + _this.each(function (v) { + parent.insertBefore((i === 0 ? v : v.cloneNode(true)), sibling); + }); + }); + + return this; + }, + + insertBefore: function (selector) { + var _this2 = this; + cash(selector).each(function (el, i) { + var parent = el.parentNode; + _this2.each(function (v) { + parent.insertBefore((i === 0 ? v : v.cloneNode(true)), el); + }); + }); + return this; + }, + + prepend: function (content) { + insertContent(this, content, true); + return this; + }, + + prependTo: function (parent) { + insertContent(cash(parent), this, true); + return this; + }, + + remove: function () { + return this.each(function (v) { + return v.parentNode.removeChild(v); + }); + }, + + text: function (content) { + if (content === undefined) { + return this[0].textContent; + } + return this.each(function (v) { + return v.textContent = content; + }); + } + + }); + + var docEl = doc.documentElement; + + fn.extend({ + position: function () { + var el = this[0]; + return { + left: el.offsetLeft, + top: el.offsetTop + }; + }, + + offset: function () { + var rect = this[0].getBoundingClientRect(); + return { + top: rect.top + win.pageYOffset - docEl.clientTop, + left: rect.left + win.pageXOffset - docEl.clientLeft + }; + }, + + offsetParent: function () { + return cash(this[0].offsetParent); + } + + }); + + fn.extend({ + children: function (selector) { + var elems = []; + this.each(function (el) { + push.apply(elems, el.children); + }); + elems = unique(elems); + + return (!selector ? elems : elems.filter(function (v) { + return matches(v, selector); + })); + }, + + closest: function (selector) { + if (!selector || this.length < 1) { + return cash(); + } + if (this.is(selector)) { + return this.filter(selector); + } + return this.parent().closest(selector); + }, + + is: function (selector) { + if (!selector) { + return false; + } + + var match = false, comparator = getCompareFunction(selector); + + this.each(function (el) { + match = comparator(el, selector); + return !match; + }); + + return match; + }, + + find: function (selector) { + if (!selector || selector.nodeType) { + return cash(selector && this.has(selector).length ? selector : null); + } + + var elems = []; + this.each(function (el) { + push.apply(elems, find(selector, el)); + }); + + return unique(elems); + }, + + has: function (selector) { + var comparator = (isString(selector) ? function (el) { + return find(selector, el).length !== 0; + } : function (el) { + return el.contains(selector); + }); + + return this.filter(comparator); + }, + + next: function () { + return cash(this[0].nextElementSibling); + }, + + not: function (selector) { + if (!selector) { + return this; + } + + var comparator = getCompareFunction(selector); + + return this.filter(function (el) { + return !comparator(el, selector); + }); + }, + + parent: function () { + var result = []; + + this.each(function (item) { + if (item && item.parentNode) { + result.push(item.parentNode); + } + }); + + return unique(result); + }, + + parents: function (selector) { + var last, result = []; + + this.each(function (item) { + last = item; + + while (last && last.parentNode && last !== doc.body.parentNode) { + last = last.parentNode; + + if (!selector || (selector && matches(last, selector))) { + result.push(last); + } + } + }); + + return unique(result); + }, + + prev: function () { + return cash(this[0].previousElementSibling); + }, + + siblings: function () { + var collection = this.parent().children(), el = this[0]; + + return collection.filter(function (i) { + return i !== el; + }); + } + + }); + + + return cash; +}); + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _underscore = __webpack_require__(1); + +var Selector = __webpack_require__(8); + +module.exports = __webpack_require__(0).Collection.extend({ + model: Selector, + + getStyleable: function getStyleable() { + return (0, _underscore.filter)(this.models, function (item) { + return item.get('active') && !item.get('private'); + }); + }, + getValid: function getValid() { + return (0, _underscore.filter)(this.models, function (item) { + return !item.get('private'); + }); + }, + getFullString: function getFullString(collection) { + var result = []; + var coll = collection || this; + coll.forEach(function (selector) { + return result.push(selector.getFullName()); + }); + return result.join('').trim(); + } +}); + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _TypeableCollection = __webpack_require__(33); + +var _TypeableCollection2 = _interopRequireDefault(_TypeableCollection); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var Property = __webpack_require__(13); + +module.exports = __webpack_require__(0).Collection.extend(_TypeableCollection2.default).extend({ + types: [{ + id: 'stack', + model: __webpack_require__(123), + view: __webpack_require__(35), + isType: function isType(value) { + if (value && value.type == 'stack') { + return value; + } + } + }, { + id: 'composite', + model: __webpack_require__(34), + view: __webpack_require__(17), + isType: function isType(value) { + if (value && value.type == 'composite') { + return value; + } + } + }, { + id: 'file', + model: Property, + view: __webpack_require__(41), + isType: function isType(value) { + if (value && value.type == 'file') { + return value; + } + } + }, { + id: 'color', + model: Property, + view: __webpack_require__(39), + isType: function isType(value) { + if (value && value.type == 'color') { + return value; + } + } + }, { + id: 'select', + model: __webpack_require__(42), + view: __webpack_require__(38), + isType: function isType(value) { + if (value && value.type == 'select') { + return value; + } + } + }, { + id: 'radio', + model: __webpack_require__(42), + view: __webpack_require__(37), + isType: function isType(value) { + if (value && value.type == 'radio') { + return value; + } + } + }, { + id: 'slider', + model: __webpack_require__(129), + view: __webpack_require__(130), + isType: function isType(value) { + if (value && value.type == 'slider') { + return value; + } + } + }, { + id: 'integer', + model: __webpack_require__(43), + view: __webpack_require__(15), + isType: function isType(value) { + if (value && value.type == 'integer') { + return value; + } + } + }, { + id: 'base', + model: Property, + view: __webpack_require__(5), + isType: function isType(value) { + value.type = 'base'; + return value; + } + }], + + deepClone: function deepClone() { + var collection = this.clone(); + collection.reset(collection.map(function (model) { + var cloned = model.clone(); + cloned.typeView = model.typeView; + return cloned; + })); + return collection; + }, + + + /** + * Parse a value and return an array splitted by properties + * @param {string} value + * @return {Array} + * @return + */ + parseValue: function parseValue(value) { + var _this = this; + + var properties = []; + var values = value.split(' '); + values.forEach(function (value, i) { + var property = _this.at(i); + if (!property) return; + properties.push(_extends({}, property.attributes, { value: value })); + }); + return properties; + }, + getFullValue: function getFullValue() { + var result = ''; + this.each(function (model) { + return result += model.getFullValue() + ' '; + }); + return result.trim(); + } +}); + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _underscore = __webpack_require__(1); + +module.exports = __webpack_require__(0).Model.extend({ + defaults: { + name: '', + property: '', + type: '', + defaults: '', + info: '', + value: '', + icon: '', + functionName: '', + status: '', + visible: true, + fixedValues: ['initial', 'inherit'], + + // If true to the value will be added '!important' + important: 0, + + // If true, will be hidden by default and will show up only for targets + // which require this property (via `stylable-require`) + // Use case: + // you can add all SVG CSS properties with toRequire as true + // and then require them on SVG Components + toRequire: 0 + }, + + initialize: function initialize(opt) { + var o = opt || {}; + var name = this.get('name'); + var prop = this.get('property'); + + if (!name) { + this.set('name', prop.charAt(0).toUpperCase() + prop.slice(1).replace(/-/g, ' ')); + } + + var init = this.init && this.init.bind(this); + init && init(); + }, + + + /** + * Clear the value + * @return {this} + */ + clearValue: function clearValue() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this.set({ value: undefined }, opts); + return this; + }, + + + /** + * Update value + * @param {any} value + * @param {Boolen} [complete=true] Indicates if it's a final state + * @param {Object} [opts={}] Options + */ + setValue: function setValue(value) { + var complete = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var parsed = this.parseValue(value); + this.set(parsed, _extends({}, opts, { avoidStore: 1 })); + + // It's important to set an empty value, otherwise the + // UndoManager won't see the change + if (complete) { + this.set('value', '', opts); + this.set(parsed, opts); + } + }, + + + /** + * Like `setValue` but, in addition, prevents the update of the input element + * as the changes should come from the input itself. + * This method is useful with the definition of custom properties + * @param {any} value + * @param {Boolen} [complete=true] Indicates if it's a final state + * @param {Object} [opts={}] Options + */ + setValueFromInput: function setValueFromInput(value, complete) { + var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + this.setValue(value, complete, _extends({}, opts, { fromInput: 1 })); + }, + + + /** + * Parse a raw value, generally fetched from the target, for this property + * @param {string} value Raw value string + * @return {Object} + * @example + * // example with an Input type + * prop.parseValue('translateX(10deg)'); + * // -> { value: 10, unit: 'deg', functionName: 'translateX' } + * + */ + parseValue: function parseValue(value) { + var result = { value: value }; + var imp = '!important'; + + if ((0, _underscore.isString)(value) && value.indexOf(imp) !== -1) { + result.value = value.replace(imp, '').trim(); + result.important = 1; + } + + if (!this.get('functionName')) { + return result; + } + + var args = []; + var valueStr = '' + result.value; + var start = valueStr.indexOf('(') + 1; + var end = valueStr.lastIndexOf(')'); + args.push(start); + + // Will try even if the last closing parentheses is not found + if (end >= 0) { + args.push(end); + } + + result.value = String.prototype.substring.apply(valueStr, args); + return result; + }, + + + /** + * Get the default value + * @return {string} + * @private + */ + getDefaultValue: function getDefaultValue() { + return this.get('defaults'); + }, + + + /** + * Get a complete value of the property. + * This probably will replace the getValue when all + * properties models will be splitted + * @param {string} val Custom value to replace the one on the model + * @return {string} + * @private + */ + getFullValue: function getFullValue(val) { + var fn = this.get('functionName'); + var value = (0, _underscore.isUndefined)(val) ? this.get('value') : val; + + if (fn && !(0, _underscore.isUndefined)(value)) { + value = fn + '(' + value + ')'; + } + + if (this.get('important')) { + value = value + ' !important'; + } + + return value || ''; + } +}); + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var PropertyView = __webpack_require__(5); +var PropertyIntegerView = __webpack_require__(15); +var PropertyRadioView = __webpack_require__(37); +var PropertySelectView = __webpack_require__(38); +var PropertyColorView = __webpack_require__(39); +var PropertyFileView = __webpack_require__(41); +var PropertyCompositeView = __webpack_require__(17); +var PropertyStackView = __webpack_require__(35); + +module.exports = _backbone2.default.View.extend({ + initialize: function initialize(o) { + this.config = o.config || {}; + this.pfx = this.config.stylePrefix || ''; + this.target = o.target || {}; + this.propTarget = o.propTarget || {}; + this.onChange = o.onChange; + this.onInputRender = o.onInputRender || {}; + this.customValue = o.customValue || {}; + this.properties = []; + var coll = this.collection; + this.listenTo(coll, 'add', this.addTo); + this.listenTo(coll, 'reset', this.render); + }, + addTo: function addTo(model) { + this.add(model); + }, + add: function add(model, frag) { + var view = new model.typeView({ + model: model, + name: model.get('name'), + id: this.pfx + model.get('property'), + target: this.target, + propTarget: this.propTarget, + onChange: this.onChange, + onInputRender: this.onInputRender, + config: this.config + }); + + if (model.get('type') != 'composite') { + view.customValue = this.customValue; + } + + view.render(); + var el = view.el; + this.properties.push(view); + + if (frag) { + frag.appendChild(el); + } else { + this.el.appendChild(el); + } + }, + render: function render() { + var _this = this; + + this.properties = []; + var fragment = document.createDocumentFragment(); + this.collection.each(function (model) { + return _this.add(model, fragment); + }); + this.$el.append(fragment); + this.$el.attr('class', this.pfx + 'properties'); + return this; + } +}); + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var InputNumber = __webpack_require__(18); +var PropertyView = __webpack_require__(5); +var $ = _backbone2.default.$; +var timeout = void 0; + +module.exports = PropertyView.extend({ + templateInput: function templateInput() { + return ''; + }, + init: function init() { + var model = this.model; + this.listenTo(model, 'change:unit', this.modelValueChanged); + this.listenTo(model, 'el:change', this.elementUpdated); + }, + setValue: function setValue(value) { + var parsed = this.model.parseValue(value); + value = '' + parsed.value + parsed.unit; + this.inputInst.setValue(value, { silent: 1 }); + }, + onRender: function onRender() { + var ppfx = this.ppfx; + + if (!this.input) { + var input = this.model.input; + input.ppfx = ppfx; + input.render(); + var fields = this.el.querySelector('.' + ppfx + 'fields'); + fields.appendChild(input.el); + this.$input = input.inputEl; + this.unit = input.unitEl; + this.$unit = $(this.unit); + this.input = this.$input.get(0); + this.inputInst = input; + } + } +}); + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Backbone = __webpack_require__(0); +var ComponentView = __webpack_require__(3); + +module.exports = ComponentView.extend({ + tagName: 'img', + + events: { + dblclick: 'openModal', + click: 'initResize' + }, + + initialize: function initialize(o) { + var model = this.model; + ComponentView.prototype.initialize.apply(this, arguments); + this.listenTo(model, 'change:src', this.updateSrc); + this.listenTo(model, 'dblclick active', this.openModal); + this.classEmpty = this.ppfx + 'plh-image'; + var config = this.config; + config.modal && (this.modal = config.modal); + config.am && (this.am = config.am); + this.fetchFile(); + }, + + + /** + * Fetch file if exists + */ + fetchFile: function fetchFile() { + var model = this.model; + var file = model.get('file'); + + if (file) { + var fu = this.em.get('AssetManager').FileUploader(); + fu.uploadFile({ + dataTransfer: { files: [file] } + }, function (res) { + var obj = res && res.data && res.data[0]; + var src = obj && obj.src; + src && model.set({ src: src }); + }); + model.set('file', ''); + } + }, + + + /** + * Update src attribute + * @private + * */ + updateSrc: function updateSrc() { + var model = this.model, + classEmpty = this.classEmpty, + $el = this.$el; + + var src = model.get('src'); + model.addAttributes({ src: src }); + $el[src ? 'removeClass' : 'addClass'](classEmpty); + }, + + + /** + * Open dialog for image changing + * @param {Object} e Event + * @private + * */ + openModal: function openModal(e) { + var em = this.opts.config.em; + var editor = em ? em.get('Editor') : ''; + + if (editor && this.model.get('editable')) { + editor.runCommand('open-assets', { + target: this.model, + types: ['image'], + accept: 'image/*', + onSelect: function onSelect() { + editor.Modal.close(); + editor.AssetManager.setTarget(null); + } + }); + } + }, + render: function render() { + this.updateAttributes(); + this.updateClasses(); + + var actCls = this.$el.attr('class') || ''; + if (!this.model.get('src')) this.$el.attr('class', (actCls + ' ' + this.classEmpty).trim()); + + // Avoid strange behaviours while try to drag + this.$el.attr('onmousedown', 'return false'); + return this; + } +}); + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var PropertyView = __webpack_require__(5); +var $ = _backbone2.default.$; + +module.exports = PropertyView.extend({ + templateInput: function templateInput() { + var pfx = this.pfx; + return '\n
    \n \n
    \n '; + }, + inputValueChanged: function inputValueChanged() { + // If it's not detached (eg. 'padding: 1px 2px 3px 4px;') it will follow + // the same flow of PropertyView + if (!this.model.get('detached')) { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + PropertyView.prototype.inputValueChanged.apply(this, args); + } + }, + clear: function clear(e) { + var props = this.properties; + props && props.forEach(function (propView) { + return propView.clear(); + }); + PropertyView.prototype.clear.apply(this, arguments); + }, + + + /** + * Renders input + * */ + onRender: function onRender() { + var model = this.model; + var props = model.get('properties') || []; + var self = this; + this.properties = []; + + if (props.length) { + if (!this.$input) { + this.$input = $(''); + this.input = this.$input.get(0); + } + + if (!this.props) { + this.props = model.get('properties'); + } + + if (!this.$props) { + //Not yet supported nested composite + this.props.each(function (prop, index) { + if (prop && prop.get('type') == 'composite') { + this.props.remove(prop); + console.warn('Nested composite types not yet allowed.'); + } + prop.parent = model; + }, this); + + var PropertiesView = __webpack_require__(14); + var propsView = new PropertiesView(this.getPropsConfig()); + this.$props = propsView.render().$el; + this.properties = propsView.properties; + this.$el.find('#' + this.pfx + 'input-holder').append(this.$props); + } + } + }, + + + /** + * Returns configurations that should be past to properties + * @param {Object} opts + * @return {Object} + */ + getPropsConfig: function getPropsConfig(opts) { + var that = this; + var model = this.model; + + var result = { + config: this.config, + collection: this.props, + target: this.target, + propTarget: this.propTarget, + // On any change made to children I need to update composite value + onChange: function onChange(el, view, opts) { + model.set('value', model.getFullValue(), opts); + }, + + // Each child property will receive a full composite string, eg. '0px 0px 10px 0px' + // I need to extract from that string the corresponding one to that property. + customValue: function customValue(property, mIndex) { + return that.valueOnIndex(mIndex, property); + } + }; + + // If detached let follow its standard flow + if (model.get('detached')) { + delete result.onChange; + } + + return result; + }, + + + /** + * Extract string from composite value + * @param {number} index Index + * @param {Object} view Property view + * @return {string} + * */ + valueOnIndex: function valueOnIndex(index, view) { + var value = void 0; + var targetValue = this.getTargetValue({ ignoreDefault: 1 }); + + // If the target value of the composite is not empty I'll fetch + // the corresponding value from the requested index, otherwise try + // to get the value of the sub-property + if (targetValue) { + var values = targetValue.split(' '); + value = values[index]; + } else { + value = view && view.getTargetValue({ ignoreCustomValue: 1, ignoreDefault: 1 }); + } + + if (view) { + value = view.model.parseValue(value).value; + } + + return value; + } +}); + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(_) { + +var _underscore = __webpack_require__(1); + +var _mixins = __webpack_require__(2); + +var Input = __webpack_require__(36); +var Backbone = __webpack_require__(0); +var $ = Backbone.$; + +module.exports = Input.extend({ + events: { + 'change input': 'handleChange', + 'change select': 'handleUnitChange', + 'click [data-arrow-up]': 'upArrowClick', + 'click [data-arrow-down]': 'downArrowClick', + 'mousedown [data-arrows]': 'downIncrement' + }, + + template: function template() { + var ppfx = this.ppfx; + return '\n \n \n
    \n
    \n
    \n
    \n '; + }, + inputClass: function inputClass() { + var ppfx = this.ppfx; + return this.opts.contClass || ppfx + 'field ' + ppfx + 'field-integer'; + }, + initialize: function initialize() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + Input.prototype.initialize.apply(this, arguments); + (0, _underscore.bindAll)(this, 'moveIncrement', 'upIncrement'); + this.doc = document; + this.listenTo(this.model, 'change:unit', this.handleModelChange); + }, + + + /** + * Set value to the model + * @param {string} value + * @param {Object} opts + */ + setValue: function setValue(value, opts) { + var opt = opts || {}; + var valid = this.validateInputValue(value, { deepCheck: 1 }); + var validObj = { value: valid.value }; + + // If found some unit value + if (valid.unit || valid.force) { + validObj.unit = valid.unit; + } + + this.model.set(validObj, opt); + + // Generally I get silent when I need to reflect data to view without + // reupdating the target + if (opt.silent) { + this.handleModelChange(); + } + }, + + + /** + * Handled when the view is changed + */ + handleChange: function handleChange(e) { + e.stopPropagation(); + this.setValue(this.getInputEl().value); + this.elementUpdated(); + }, + + + /** + * Handled when the view is changed + */ + handleUnitChange: function handleUnitChange(e) { + e.stopPropagation(); + var value = this.getUnitEl().value; + this.model.set('unit', value); + this.elementUpdated(); + }, + + + /** + * Fired when the element of the property is updated + */ + elementUpdated: function elementUpdated() { + this.model.trigger('el:change'); + }, + + + /** + * Updates the view when the model is changed + * */ + handleModelChange: function handleModelChange() { + var model = this.model; + this.getInputEl().value = model.get('value'); + var unitEl = this.getUnitEl(); + unitEl && (unitEl.value = model.get('unit') || ''); + }, + + + /** + * Get the unit element + * @return {HTMLElement} + */ + getUnitEl: function getUnitEl() { + if (!this.unitEl) { + var model = this.model; + var units = model.get('units') || []; + + if (units.length) { + var options = []; + + units.forEach(function (unit) { + var selected = unit == model.get('unit') ? 'selected' : ''; + options.push(''); + }); + + var temp = document.createElement('div'); + temp.innerHTML = ''; + this.unitEl = temp.firstChild; + } + } + + return this.unitEl; + }, + + + /** + * Invoked when the up arrow is clicked + * */ + upArrowClick: function upArrowClick() { + var model = this.model; + var step = model.get('step'); + var value = parseInt(model.get('value'), 10); + value = this.normalizeValue(value + step); + var valid = this.validateInputValue(value); + model.set('value', valid.value); + this.elementUpdated(); + }, + + + /** + * Invoked when the down arrow is clicked + * */ + downArrowClick: function downArrowClick() { + var model = this.model; + var step = model.get('step'); + var value = parseInt(model.get('value'), 10); + var val = this.normalizeValue(value - step); + var valid = this.validateInputValue(val); + model.set('value', valid.value); + this.elementUpdated(); + }, + + + /** + * Change easily integer input value with click&drag method + * @param Event + * + * @return void + * */ + downIncrement: function downIncrement(e) { + e.preventDefault(); + this.moved = 0; + var value = this.model.get('value'); + value = this.normalizeValue(value); + this.current = { y: e.pageY, val: value }; + (0, _mixins.on)(this.doc, 'mousemove', this.moveIncrement); + (0, _mixins.on)(this.doc, 'mouseup', this.upIncrement); + }, + + + /** While the increment is clicked, moving the mouse will update input value + * @param Object + * + * @return bool + * */ + moveIncrement: function moveIncrement(ev) { + this.moved = 1; + var model = this.model; + var step = model.get('step'); + var data = this.current; + var pos = this.normalizeValue(data.val + (data.y - ev.pageY) * step); + this.prValue = this.validateInputValue(pos).value; + model.set('value', this.prValue, { avoidStore: 1 }); + return false; + }, + + + /** + * Stop moveIncrement method + * */ + upIncrement: function upIncrement() { + var model = this.model; + var step = model.get('step'); + (0, _mixins.off)(this.doc, 'mouseup', this.upIncrement); + (0, _mixins.off)(this.doc, 'mousemove', this.moveIncrement); + + if (this.prValue && this.moved) { + var value = this.prValue - step; + model.set('value', value, { avoidStore: 1 }).set('value', value + step); + this.elementUpdated(); + } + }, + normalizeValue: function normalizeValue(value) { + var defValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + + var model = this.model; + var step = model.get('step'); + var stepDecimals = 0; + + if (isNaN(value)) { + return defValue; + } + + value = parseFloat(value); + + if (Math.floor(value) !== value) { + var side = step.toString().split('.')[1]; + stepDecimals = side ? side.length : 0; + } + + return stepDecimals ? parseFloat(value.toFixed(stepDecimals)) : value; + }, + + + /** + * Validate input value + * @param {String} value Raw value + * @param {Object} opts Options + * @return {Object} Validated string + */ + validateInputValue: function validateInputValue(value, opts) { + var force = 0; + var opt = opts || {}; + var model = this.model; + var defValue = ''; //model.get('defaults'); + var val = !(0, _underscore.isUndefined)(value) ? value : defValue; + var units = model.get('units') || []; + var unit = model.get('unit') || units.length && units[0] || ''; + var max = model.get('max'); + var min = model.get('min'); + + if (opt.deepCheck) { + var fixed = model.get('fixedValues') || []; + + if (val) { + // If the value is one of the fixed values I leave it as it is + var regFixed = new RegExp('^' + fixed.join('|'), 'g'); + if (fixed.length && regFixed.test(val)) { + val = val.match(regFixed)[0]; + unit = ''; + force = 1; + } else { + var valCopy = val + ''; + val += ''; // Make it suitable for replace + val = parseFloat(val.replace(',', '.')); + val = !isNaN(val) ? val : defValue; + var uN = valCopy.replace(val, ''); + // Check if exists as unit + if (_.indexOf(units, uN) >= 0) unit = uN; + } + } + } + + if (!(0, _underscore.isUndefined)(max) && max !== '') val = val > max ? max : val; + if (!(0, _underscore.isUndefined)(min) && min !== '') val = val < min ? min : val; + + return { + force: force, + value: val, + unit: unit + }; + }, + render: function render() { + Input.prototype.render.call(this); + var unit = this.getUnitEl(); + unit && this.$el.find('.' + this.ppfx + 'field-units').get(0).appendChild(unit); + return this; + } +}); +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var Component = __webpack_require__(4); + +module.exports = Component.extend({ + defaults: _extends({}, Component.prototype.defaults, { + type: 'tbody', + tagName: 'tbody', + draggable: ['table'], + droppable: ['tr'], + columns: 1, + rows: 1 + }), + + initialize: function initialize(o, opt) { + Component.prototype.initialize.apply(this, arguments); + var components = this.get('components'); + var columns = this.get('columns'); + var rows = this.get('rows'); + + // Init components if empty + if (!components.length) { + var rowsToAdd = []; + + while (rows--) { + var columnsToAdd = []; + var clm = columns; + + while (clm--) { + columnsToAdd.push({ + type: 'cell', + classes: ['cell'] + }); + } + + rowsToAdd.push({ + type: 'row', + classes: ['row'], + components: columnsToAdd + }); + } + + components.add(rowsToAdd); + } + } +}, { + isComponent: function isComponent(el) { + var result = ''; + + if (el.tagName == 'TBODY') { + result = { type: 'tbody' }; + } + + return result; + } +}); + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var Component = __webpack_require__(4); + +module.exports = Component.extend({ + defaults: _extends({}, Component.prototype.defaults, { + type: 'image', + tagName: 'img', + src: '', + void: 1, + droppable: 0, + editable: 1, + highlightable: 0, + resizable: 1, + traits: ['alt'], + + // File to load asynchronously once the model is rendered + file: '' + }), + + initialize: function initialize(o, opt) { + Component.prototype.initialize.apply(this, arguments); + var attr = this.get('attributes'); + if (attr.src) this.set('src', attr.src); + }, + initToolbar: function initToolbar() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + Component.prototype.initToolbar.apply(this, args); + var em = this.em; + + if (em) { + var cmd = em.get('Commands'); + var cmdName = 'image-editor'; + + // Add Image Editor button only if the default command exists + if (cmd.has(cmdName)) { + var hasButtonBool = false; + var tb = this.get('toolbar'); + + for (var i = 0; i < tb.length; i++) { + if (tb[i].command === 'image-editor') { + hasButtonBool = true; + break; + } + } + + if (!hasButtonBool) { + tb.push({ + attributes: { class: 'fa fa-pencil' }, + command: cmdName + }); + this.set('toolbar', tb); + } + } + } + }, + + + /** + * Returns object of attributes for HTML + * @return {Object} + * @private + */ + getAttrToHTML: function getAttrToHTML() { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var attr = Component.prototype.getAttrToHTML.apply(this, args); + delete attr.onmousedown; + var src = this.get('src'); + if (src) attr.src = src; + return attr; + }, + + + /** + * Parse uri + * @param {string} uri + * @return {object} + * @private + */ + parseUri: function parseUri(uri) { + var el = document.createElement('a'); + el.href = uri; + var query = {}; + var qrs = el.search.substring(1).split('&'); + for (var i = 0; i < qrs.length; i++) { + var pair = qrs[i].split('='); + var name = decodeURIComponent(pair[0]); + if (name) query[name] = decodeURIComponent(pair[1]); + } + return { + hostname: el.hostname, + pathname: el.pathname, + protocol: el.protocol, + search: el.search, + hash: el.hash, + port: el.port, + query: query + }; + } +}, { + /** + * Detect if the passed element is a valid component. + * In case the element is valid an object abstracted + * from the element will be returned + * @param {HTMLElement} + * @return {Object} + * @private + */ + isComponent: function isComponent(el) { + var result = ''; + if (el.tagName == 'IMG') { + result = { type: 'image' }; + } + return result; + } +}); + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var Component = __webpack_require__(4); + +module.exports = Component.extend({ + defaults: _extends({}, Component.prototype.defaults, { + type: 'text', + droppable: false, + editable: true + }) +}); + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _underscore = __webpack_require__(1); + +var _mixins = __webpack_require__(2); + +var ToolbarView = __webpack_require__(194); +var Toolbar = __webpack_require__(196); +var key = __webpack_require__(24); +var $ = __webpack_require__(0).$; +var showOffsets = void 0; + +module.exports = { + init: function init(o) { + (0, _underscore.bindAll)(this, 'onHover', 'onOut', 'onClick', 'onKeyPress', 'onFrameScroll'); + }, + enable: function enable() { + this.frameOff = this.canvasOff = this.adjScroll = null; + var config = this.config.em.get('Config'); + this.startSelectComponent(); + var em = this.config.em; + showOffsets = 1; + + em.on('component:update', this.updateAttached, this); + em.on('change:canvasOffset', this.updateAttached, this); + }, + + + /** + * Start select component event + * @private + * */ + startSelectComponent: function startSelectComponent() { + this.toggleSelectComponent(1); + }, + + + /** + * Stop select component event + * @private + * */ + stopSelectComponent: function stopSelectComponent() { + this.toggleSelectComponent(); + }, + + + /** + * Toggle select component event + * @private + * */ + toggleSelectComponent: function toggleSelectComponent(enable) { + var em = this.em; + var method = enable ? 'on' : 'off'; + var methods = { on: _mixins.on, off: _mixins.off }; + var body = this.getCanvasBody(); + var win = this.getContentWindow(); + methods[method](body, 'mouseover', this.onHover); + methods[method](body, 'mouseout', this.onOut); + methods[method](body, 'click', this.onClick); + methods[method](win, 'scroll resize', this.onFrameScroll); + methods[method](win, 'keydown', this.onKeyPress); + em[method]('component:toggled', this.onSelect, this); + em[method]('change:componentHovered', this.onHovered, this); + }, + + + /** + * On key press event + * @private + * */ + onKeyPress: function onKeyPress(e) { + var key = e.which || e.keyCode; + var comp = this.editorModel.getSelected(); + var focused = this.frameEl.contentDocument.activeElement.tagName !== 'BODY'; + + // On CANC (46) or Backspace (8) + if (key == 8 || key == 46) { + if (!focused) e.preventDefault(); + if (comp && !focused) { + this.editor.runCommand('core:component-delete'); + } + } + }, + + + /** + * Hover command + * @param {Object} e + * @private + */ + onHover: function onHover(e) { + e.stopPropagation(); + var trg = e.target; + var model = $(trg).data('model'); + + // Adjust tools scroll top + if (!this.adjScroll) { + this.adjScroll = 1; + this.onFrameScroll(e); + this.updateAttached(); + } + + if (model && !model.get('hoverable')) { + var parent = model && model.parent(); + while (parent && !parent.get('hoverable')) { + parent = comp.parent(); + }model = parent; + } + + this.em.setHovered(model, { forceChange: 1 }); + }, + onHovered: function onHovered(em, component) { + var trg = component && component.getEl(); + if (trg) { + var pos = this.getElementPos(trg); + this.updateBadge(trg, pos); + this.updateHighlighter(trg, pos); + this.showElementOffset(trg, pos); + } + }, + + + /** + * Out command + * @param {Object} e + * @private + */ + onOut: function onOut(e) { + e.stopPropagation(); + this.hideBadge(); + this.hideHighlighter(); + this.hideElementOffset(); + }, + + + /** + * Show element offset viewer + * @param {HTMLElement} el + * @param {Object} pos + */ + showElementOffset: function showElementOffset(el, pos) { + var $el = $(el); + var model = $el.data('model'); + + if (model && model.get('status') == 'selected' || !showOffsets) { + return; + } + + this.editor.runCommand('show-offset', { + el: el, + elPos: pos + }); + }, + + + /** + * Hide element offset viewer + * @param {HTMLElement} el + * @param {Object} pos + */ + hideElementOffset: function hideElementOffset(el, pos) { + this.editor.stopCommand('show-offset'); + }, + + + /** + * Show fixed element offset viewer + * @param {HTMLElement} el + * @param {Object} pos + */ + showFixedElementOffset: function showFixedElementOffset(el, pos) { + this.editor.runCommand('show-offset', { + el: el, + elPos: pos, + state: 'Fixed' + }); + }, + + + /** + * Hide fixed element offset viewer + * @param {HTMLElement} el + * @param {Object} pos + */ + hideFixedElementOffset: function hideFixedElementOffset(el, pos) { + if (this.editor) this.editor.stopCommand('show-offset', { state: 'Fixed' }); + }, + + + /** + * Hide Highlighter element + */ + hideHighlighter: function hideHighlighter() { + this.canvas.getHighlighter().style.display = 'none'; + }, + + + /** + * On element click + * @param {Event} e + * @private + */ + onClick: function onClick(e) { + e.stopPropagation(); + var $el = $(e.target); + var editor = this.editor; + var model = $el.data('model'); + + if (!model) { + var parent = $el.parent(); + while (!model && parent) { + model = parent.data('model'); + parent = parent.parent(); + } + } + + if (model) { + if (model.get('selectable')) { + this.select(model, e); + } else { + var _parent = model.parent(); + while (_parent && !_parent.get('selectable')) { + _parent = _parent.parent(); + }this.select(_parent, e); + } + } + }, + + + /** + * Select component + * @param {Component} model + * @param {Event} event + */ + select: function select(model) { + var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + if (!model) return; + var ctrlKey = event.ctrlKey || event.metaKey; + var shiftKey = event.shiftKey; + var editor = this.editor; + + var multiple = editor.getConfig('multipleSelection'); + var em = this.em; + + if (ctrlKey && multiple) { + editor.selectToggle(model); + } else if (shiftKey && multiple) { + em.clearSelection(editor.Canvas.getWindow()); + var coll = model.collection; + var index = coll.indexOf(model); + var selAll = editor.getSelectedAll(); + var min = void 0, + max = void 0; + + // Fin min and max siblings + editor.getSelectedAll().forEach(function (sel) { + var selColl = sel.collection; + var selIndex = selColl.indexOf(sel); + if (selColl === coll) { + if (selIndex < index) { + // First model BEFORE the selected one + min = (0, _underscore.isUndefined)(min) ? selIndex : Math.max(min, selIndex); + } else if (selIndex > index) { + // First model AFTER the selected one + max = (0, _underscore.isUndefined)(max) ? selIndex : Math.min(max, selIndex); + } + } + }); + + if (!(0, _underscore.isUndefined)(min)) { + while (min !== index) { + editor.selectAdd(coll.at(min)); + min++; + } + } + + if (!(0, _underscore.isUndefined)(max)) { + while (max !== index) { + editor.selectAdd(coll.at(max)); + max--; + } + } + + editor.selectAdd(model); + } else { + editor.select(model); + } + + this.initResize(model); + }, + + + /** + * Update badge for the component + * @param {Object} Component + * @param {Object} pos Position object + * @private + * */ + updateBadge: function updateBadge(el, pos) { + var $el = $(el); + var canvas = this.canvas; + var config = canvas.getConfig(); + var customeLabel = config.customBadgeLabel; + this.cacheEl = el; + var model = $el.data('model'); + if (!model || !model.get('badgable')) return; + var badge = this.getBadge(); + var badgeLabel = model.getIcon() + model.getName(); + badgeLabel = customeLabel ? customeLabel(model) : badgeLabel; + badge.innerHTML = badgeLabel; + var bStyle = badge.style; + var u = 'px'; + bStyle.display = 'block'; + var canvasPos = canvas.getCanvasView().getPosition(); + if (canvasPos) { + var badgeH = badge ? badge.offsetHeight : 0; + var badgeW = badge ? badge.offsetWidth : 0; + var top = pos.top - badgeH < canvasPos.top ? canvasPos.top : pos.top - badgeH; + var left = pos.left + badgeW < canvasPos.left ? canvasPos.left : pos.left; + bStyle.top = top + u; + bStyle.left = left + u; + } + }, + + + /** + * Update highlighter element + * @param {HTMLElement} el + * @param {Object} pos Position object + * @private + */ + updateHighlighter: function updateHighlighter(el, pos) { + var $el = $(el); + var model = $el.data('model'); + + if (!model || !model.get('hoverable') || model.get('status') == 'selected') { + return; + } + + var hlEl = this.canvas.getHighlighter(); + var hlStyle = hlEl.style; + var unit = 'px'; + hlStyle.left = pos.left + unit; + hlStyle.top = pos.top + unit; + hlStyle.height = pos.height + unit; + hlStyle.width = pos.width + unit; + hlStyle.display = 'block'; + }, + + + /** + * Say what to do after the component was selected + * @param {Object} e + * @param {Object} el + * @private + * */ + onSelect: function onSelect() { + // Get the selected model directly from the Editor as the event might + // be triggered manually without the model + var model = this.em.getSelected(); + this.updateToolbar(model); + + if (model) { + var el = model.view.el; + this.showFixedElementOffset(el); + this.hideElementOffset(); + this.hideHighlighter(); + this.initResize(el); + } else { + this.editor.stopCommand('resize'); + } + }, + + + /** + * Init resizer on the element if possible + * @param {HTMLElement|Component} elem + * @private + */ + initResize: function initResize(elem) { + var em = this.em; + var editor = em ? em.get('Editor') : ''; + var config = em ? em.get('Config') : ''; + var pfx = config.stylePrefix || ''; + var attrName = 'data-' + pfx + 'handler'; + var resizeClass = pfx + 'resizing'; + var model = !(0, _underscore.isElement)(elem) ? elem : em.getSelected(); + var resizable = model.get('resizable'); + var el = (0, _underscore.isElement)(elem) ? elem : model.getEl(); + var options = {}; + var modelToStyle = void 0; + + var toggleBodyClass = function toggleBodyClass(method, e, opts) { + var docs = opts.docs; + docs && docs.forEach(function (doc) { + var body = doc.body; + var cls = body.className || ''; + body.className = (method == 'add' ? cls + ' ' + resizeClass : cls.replace(resizeClass, '')).trim(); + }); + }; + + if (editor && resizable) { + options = { + // Here the resizer is updated with the current element height and width + onStart: function onStart(e) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var el = opts.el, + config = opts.config, + resizer = opts.resizer; + var keyHeight = config.keyHeight, + keyWidth = config.keyWidth, + currentUnit = config.currentUnit; + + toggleBodyClass('add', e, opts); + modelToStyle = em.get('StyleManager').getModelToStyle(model); + var computedStyle = getComputedStyle(el); + var modelStyle = modelToStyle.getStyle(); + var currentWidth = modelStyle[keyWidth] || computedStyle[keyWidth]; + var currentHeight = modelStyle[keyHeight] || computedStyle[keyHeight]; + resizer.startDim.w = parseFloat(currentWidth); + resizer.startDim.h = parseFloat(currentHeight); + showOffsets = 0; + + if (currentUnit) { + config.unitHeight = (0, _mixins.getUnitFromValue)(currentHeight); + config.unitWidth = (0, _mixins.getUnitFromValue)(currentWidth); + } + }, + + + // Update all positioned elements (eg. component toolbar) + onMove: function onMove() { + editor.trigger('change:canvasOffset'); + }, + onEnd: function onEnd(e, opts) { + toggleBodyClass('remove', e, opts); + editor.trigger('change:canvasOffset'); + showOffsets = 1; + }, + updateTarget: function updateTarget(el, rect) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (!modelToStyle) { + return; + } + + var store = options.store, + selectedHandler = options.selectedHandler, + config = options.config; + var keyHeight = config.keyHeight, + keyWidth = config.keyWidth; + + var onlyHeight = ['tc', 'bc'].indexOf(selectedHandler) >= 0; + var onlyWidth = ['cl', 'cr'].indexOf(selectedHandler) >= 0; + var style = modelToStyle.getStyle(); + + if (!onlyHeight) { + style[keyWidth] = rect.w + config.unitWidth; + } + + if (!onlyWidth) { + style[keyHeight] = rect.h + config.unitHeight; + } + + modelToStyle.setStyle(style, { avoidStore: 1 }); + var updateEvent = 'update:component:style'; + em && em.trigger(updateEvent + ':' + keyHeight + ' ' + updateEvent + ':' + keyWidth); + + if (store) { + modelToStyle.trigger('change:style', modelToStyle, style, {}); + } + } + }; + + if ((typeof resizable === 'undefined' ? 'undefined' : _typeof(resizable)) == 'object') { + options = _extends({}, options, resizable); + } + editor.runCommand('resize', { el: el, options: options }); + + // On undo/redo the resizer rect is not updating, need somehow to call + // this.updateRect on undo/redo action + } else { + editor.stopCommand('resize'); + } + }, + + + /** + * Update toolbar if the component has one + * @param {Object} mod + */ + updateToolbar: function updateToolbar(mod) { + var em = this.config.em; + var model = mod == em ? em.getSelected() : mod; + var toolbarEl = this.canvas.getToolbarEl(); + var toolbarStyle = toolbarEl.style; + + if (!model) { + // By putting `toolbarStyle.display = 'none'` will cause kind + // of freezed effect with component selection (probably by iframe + // switching) + toolbarStyle.opacity = 0; + return; + } + + var toolbar = model.get('toolbar'); + var ppfx = this.ppfx; + var showToolbar = em.get('Config').showToolbar; + + if (showToolbar && toolbar && toolbar.length) { + toolbarStyle.opacity = ''; + toolbarStyle.display = ''; + if (!this.toolbar) { + toolbarEl.innerHTML = ''; + this.toolbar = new Toolbar(toolbar); + var toolbarView = new ToolbarView({ + collection: this.toolbar, + editor: this.editor + }); + toolbarEl.appendChild(toolbarView.render().el); + } + + this.toolbar.reset(toolbar); + var view = model.view; + view && this.updateToolbarPos(view.el); + } else { + toolbarStyle.display = 'none'; + } + }, + + + /** + * Update toolbar positions + * @param {HTMLElement} el + * @param {Object} pos + */ + updateToolbarPos: function updateToolbarPos(el, elPos) { + var unit = 'px'; + var toolbarEl = this.canvas.getToolbarEl(); + var toolbarStyle = toolbarEl.style; + var origDisp = toolbarStyle.display; + toolbarStyle.display = 'block'; + var pos = this.canvas.getTargetToElementDim(toolbarEl, el, { + elPos: elPos, + event: 'toolbarPosUpdate' + }); + if (pos) { + var leftPos = pos.left + pos.elementWidth - pos.targetWidth; + toolbarStyle.top = pos.top + unit; + toolbarStyle.left = (leftPos < 0 ? 0 : leftPos) + unit; + toolbarStyle.display = origDisp; + } + }, + + + /** + * Return canvas dimensions and positions + * @return {Object} + */ + getCanvasPosition: function getCanvasPosition() { + return this.canvas.getCanvasView().getPosition(); + }, + + + /** + * Removes all highlighting effects on components + * @private + * */ + clean: function clean() { + if (this.selEl) this.selEl.removeClass(this.hoverClass); + }, + + + /** + * Returns badge element + * @return {HTMLElement} + * @private + */ + getBadge: function getBadge() { + return this.canvas.getBadgeEl(); + }, + + + /** + * On frame scroll callback + * @private + */ + onFrameScroll: function onFrameScroll(e) { + var el = this.cacheEl; + if (el) { + var elPos = this.getElementPos(el); + this.updateBadge(el, elPos); + var model = this.em.getSelected(); + + if (model) { + this.updateToolbarPos(model.view.el); + } + } + }, + + + /** + * Update attached elements, eg. component toolbar + * @return {[type]} [description] + */ + updateAttached: function updateAttached(updated) { + var model = this.em.getSelected(); + + if (model) { + var view = model.view; + this.updateToolbarPos(view.el); + this.showFixedElementOffset(view.el); + } + }, + + + /** + * Returns element's data info + * @param {HTMLElement} el + * @return {Object} + * @private + */ + getElementPos: function getElementPos(el, badge) { + return this.canvas.getCanvasView().getElementPos(el); + }, + + + /** + * Hide badge + * @private + * */ + hideBadge: function hideBadge() { + this.getBadge().style.display = 'none'; + }, + + + /** + * Clean previous model from different states + * @param {Component} model + * @private + */ + cleanPrevious: function cleanPrevious(model) { + model && model.set({ + status: '', + state: '' + }); + }, + + + /** + * Returns content window + * @private + */ + getContentWindow: function getContentWindow() { + return this.frameEl.contentWindow; + }, + run: function run(editor) { + this.editor = editor && editor.get('Editor'); + this.enable(); + this.onSelect(); + }, + stop: function stop(editor, sender) { + var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var em = this.em; + this.stopSelectComponent(); + !opts.preserveSelected && em.setSelected(null); + this.clean(); + this.hideBadge(); + this.hideFixedElementOffset(); + this.canvas.getToolbarEl().style.display = 'none'; + + em.off('component:update', this.updateAttached, this); + em.off('change:canvasOffset', this.updateAttached, this); + } +}; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _underscore = __webpack_require__(1); + +var _underscore2 = _interopRequireDefault(_underscore); + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var SelectPosition = __webpack_require__(57); +var $ = _backbone2.default.$; + +module.exports = _underscore2.default.extend({}, SelectPosition, { + init: function init(opt) { + _underscore2.default.bindAll(this, 'startDraw', 'draw', 'endDraw', 'rollback'); + this.config = opt || {}; + this.hType = this.config.newFixedH ? 'height' : 'min-height'; + this.allowDraw = 1; + }, + + + /** + * Start with enabling to select position and listening to start drawning + * @private + * */ + enable: function enable() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + SelectPosition.enable.apply(this, args); + this.$wr.css('cursor', 'crosshair'); + if (this.allowDraw) this.$wr.on('mousedown', this.startDraw); + this.ghost = this.canvas.getGhostEl(); + }, + + + /** + * Start drawing component + * @param {Object} e Event + * @private + * */ + startDraw: function startDraw(e) { + e.preventDefault(); + this.stopSelectPosition(); + this.ghost.style.display = 'block'; + this.frameOff = this.getOffsetDim(); + this.startPos = { + top: e.pageY + this.frameOff.top, + left: e.pageX + this.frameOff.left + }; + this.isDragged = false; + this.tempComponent = { style: {} }; + this.beforeDraw(this.tempComponent); + this.updateSize(this.startPos.top, this.startPos.left, 0, 0); + this.toggleEvents(1); + }, + + + /** + * Enable/Disable events + * @param {Boolean} enable + */ + toggleEvents: function toggleEvents(enable) { + var method = enable ? 'on' : 'off'; + this.$wr[method]('mousemove', this.draw); + this.$wr[method]('mouseup', this.endDraw); + this.$canvas[method]('mousemove', this.draw); + $(document)[method]('mouseup', this.endDraw); + $(document)[method]('keypress', this.rollback); + }, + + + /** + * While drawing the component + * @param {Object} e Event + * @private + * */ + draw: function draw(e) { + this.isDragged = true; + this.updateComponentSize(e); + }, + + + /** + * End drawing component + * @param {Object} e Event + * @private + * */ + endDraw: function endDraw(e) { + this.toggleEvents(); + var model = {}; + // Only if the mouse was moved + if (this.isDragged) { + this.updateComponentSize(e); + this.setRequirements(this.tempComponent); + var lp = this.sorter.lastPos; + model = this.create(this.sorter.target, this.tempComponent, lp.index, lp.method); + this.sorter.prevTarget = null; + } + this.ghost.style.display = 'none'; + this.startSelectPosition(); + this.afterDraw(model); + }, + + + /** + * Create new component inside the target + * @param {Object} target Tha target collection + * @param {Object} component New component to create + * @param {number} index Index inside the collection, 0 if no children inside + * @param {string} method Before or after of the children + * @param {Object} opts Options + */ + create: function create(target, component, index, method, opts) { + index = method === 'after' ? index + 1 : index; + var opt = opts || {}; + var $trg = $(target); + var trgModel = $trg.data('model'); + var trgCollection = $trg.data('collection'); + var droppable = trgModel ? trgModel.get('droppable') : 1; + opt.at = index; + if (trgCollection && droppable) return trgCollection.add(component, opt);else console.warn('Invalid target position'); + }, + + + /** + * Check and set basic requirements for the component + * @param {Object} component New component to be created + * @return {Object} Component updated + * @private + * */ + setRequirements: function setRequirements(component) { + var c = this.config; + var compStl = component.style; + // Check min width + if (compStl.width.replace(/\D/g, '') < c.minComponentW) compStl.width = c.minComponentW + 'px'; + // Check min height + if (compStl[this.hType].replace(/\D/g, '') < c.minComponentH) compStl[this.hType] = c.minComponentH + 'px'; + // Set overflow in case of fixed height + if (c.newFixedH) compStl.overflow = 'auto'; + if (!this.absoluteMode) { + delete compStl.left; + delete compStl.top; + } else compStl.position = 'absolute'; + var lp = this.sorter.lastPos; + + if (this.nearFloat(lp.index, lp.method, this.sorter.lastDims)) compStl.float = 'left'; + + if (this.config.firstCentered && this.getCanvasWrapper() == this.sorter.target) { + compStl.margin = '0 auto'; + } + + return component; + }, + + + /** + * Update new component size while drawing + * @param {Object} e Event + * @private + * */ + updateComponentSize: function updateComponentSize(e) { + var y = e.pageY + this.frameOff.top; + var x = e.pageX + this.frameOff.left; + var start = this.startPos; + var top = start.top; + var left = start.left; + var height = y - top; + var width = x - left; + if (x < left) { + left = x; + width = start.left - x; + } + if (y < top) { + top = y; + height = start.top - y; + } + this.updateSize(top, left, width, height); + }, + + + /** + * Update size + * @private + */ + updateSize: function updateSize(top, left, width, height) { + var u = 'px'; + var ghStl = this.ghost.style; + var compStl = this.tempComponent.style; + ghStl.top = compStl.top = top + u; + ghStl.left = compStl.left = left + u; + ghStl.width = compStl.width = width + u; + ghStl[this.hType] = compStl[this.hType] = height + u; + }, + + + /** + * Used to bring the previous situation before event started + * @param {Object} e Event + * @param {Boolean} forse Indicates if rollback in anycase + * @private + * */ + rollback: function rollback(e, force) { + var key = e.which || e.keyCode; + if (key == this.config.ESCAPE_KEY || force) { + this.isDragged = false; + this.endDraw(); + } + return; + }, + + + /** + * This event is triggered at the beginning of a draw operation + * @param {Object} component Object component before creation + * @private + * */ + beforeDraw: function beforeDraw(component) { + component.editable = false; //set this component editable + }, + + + /** + * This event is triggered at the end of a draw operation + * @param {Object} model Component model created + * @private + * */ + afterDraw: function afterDraw(model) {}, + run: function run(editor, sender, opts) { + this.editor = editor; + this.sender = sender; + this.$wr = this.$wrapper; + this.enable(); + }, + stop: function stop() { + this.stopSelectPosition(); + this.$wrapper.css('cursor', ''); + this.$wrapper.unbind(); + } +}); + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __webpack_require__) { + +// keymaster.js +// (c) 2011-2013 Thomas Fuchs +// keymaster.js may be freely distributed under the MIT license. + +;(function(global){ + var k, + _handlers = {}, + _mods = { 16: false, 18: false, 17: false, 91: false }, + _scope = 'all', + // modifier keys + _MODIFIERS = { + '⇧': 16, shift: 16, + '⌥': 18, alt: 18, option: 18, + '⌃': 17, ctrl: 17, control: 17, + '⌘': 91, command: 91 + }, + // special keys + _MAP = { + backspace: 8, tab: 9, clear: 12, + enter: 13, 'return': 13, + esc: 27, escape: 27, space: 32, + left: 37, up: 38, + right: 39, down: 40, + del: 46, 'delete': 46, + home: 36, end: 35, + pageup: 33, pagedown: 34, + ',': 188, '.': 190, '/': 191, + '`': 192, '-': 189, '=': 187, + ';': 186, '\'': 222, + '[': 219, ']': 221, '\\': 220 + }, + code = function(x){ + return _MAP[x] || x.toUpperCase().charCodeAt(0); + }, + _downKeys = []; + + for(k=1;k<20;k++) _MAP['f'+k] = 111+k; + + // IE doesn't support Array#indexOf, so have a simple replacement + function index(array, item){ + var i = array.length; + while(i--) if(array[i]===item) return i; + return -1; + } + + // for comparing mods before unassignment + function compareArray(a1, a2) { + if (a1.length != a2.length) return false; + for (var i = 0; i < a1.length; i++) { + if (a1[i] !== a2[i]) return false; + } + return true; + } + + var modifierMap = { + 16:'shiftKey', + 18:'altKey', + 17:'ctrlKey', + 91:'metaKey' + }; + function updateModifierKey(event) { + for(k in _mods) _mods[k] = event[modifierMap[k]]; + }; + + // handle keydown event + function dispatch(event) { + var key, handler, k, i, modifiersMatch, scope; + key = event.keyCode; + + if (index(_downKeys, key) == -1) { + _downKeys.push(key); + } + + // if a modifier key, set the key. property to true and return + if(key == 93 || key == 224) key = 91; // right command on webkit, command on Gecko + if(key in _mods) { + _mods[key] = true; + // 'assignKey' from inside this closure is exported to window.key + for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = true; + return; + } + updateModifierKey(event); + + // see if we need to ignore the keypress (filter() can can be overridden) + // by default ignore key presses if a select, textarea, or input is focused + if(!assignKey.filter.call(this, event)) return; + + // abort if no potentially matching shortcuts found + if (!(key in _handlers)) return; + + scope = getScope(); + + // for each potential shortcut + for (i = 0; i < _handlers[key].length; i++) { + handler = _handlers[key][i]; + + // see if it's in the current scope + if(handler.scope == scope || handler.scope == 'all'){ + // check if modifiers match if any + modifiersMatch = handler.mods.length > 0; + for(k in _mods) + if((!_mods[k] && index(handler.mods, +k) > -1) || + (_mods[k] && index(handler.mods, +k) == -1)) modifiersMatch = false; + // call the handler and stop the event if neccessary + if((handler.mods.length == 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch){ + if(handler.method(event, handler)===false){ + if(event.preventDefault) event.preventDefault(); + else event.returnValue = false; + if(event.stopPropagation) event.stopPropagation(); + if(event.cancelBubble) event.cancelBubble = true; + } + } + } + } + }; + + // unset modifier keys on keyup + function clearModifier(event){ + var key = event.keyCode, k, + i = index(_downKeys, key); + + // remove key from _downKeys + if (i >= 0) { + _downKeys.splice(i, 1); + } + + if(key == 93 || key == 224) key = 91; + if(key in _mods) { + _mods[key] = false; + for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = false; + } + }; + + function resetModifiers() { + for(k in _mods) _mods[k] = false; + for(k in _MODIFIERS) assignKey[k] = false; + }; + + // parse and assign shortcut + function assignKey(key, scope, method){ + var keys, mods; + keys = getKeys(key); + if (method === undefined) { + method = scope; + scope = 'all'; + } + + // for each shortcut + for (var i = 0; i < keys.length; i++) { + // set modifier keys if any + mods = []; + key = keys[i].split('+'); + if (key.length > 1){ + mods = getMods(key); + key = [key[key.length-1]]; + } + // convert to keycode and... + key = key[0] + key = code(key); + // ...store handler + if (!(key in _handlers)) _handlers[key] = []; + _handlers[key].push({ shortcut: keys[i], scope: scope, method: method, key: keys[i], mods: mods }); + } + }; + + // unbind all handlers for given key in current scope + function unbindKey(key, scope) { + var multipleKeys, keys, + mods = [], + i, j, obj; + + multipleKeys = getKeys(key); + + for (j = 0; j < multipleKeys.length; j++) { + keys = multipleKeys[j].split('+'); + + if (keys.length > 1) { + mods = getMods(keys); + key = keys[keys.length - 1]; + } + + key = code(key); + + if (scope === undefined) { + scope = getScope(); + } + if (!_handlers[key]) { + return; + } + for (i = 0; i < _handlers[key].length; i++) { + obj = _handlers[key][i]; + // only clear handlers if correct scope and mods match + if (obj.scope === scope && compareArray(obj.mods, mods)) { + _handlers[key][i] = {}; + } + } + } + }; + + // Returns true if the key with code 'keyCode' is currently down + // Converts strings into key codes. + function isPressed(keyCode) { + if (typeof(keyCode)=='string') { + keyCode = code(keyCode); + } + return index(_downKeys, keyCode) != -1; + } + + function getPressedKeyCodes() { + return _downKeys.slice(0); + } + + function filter(event){ + var tagName = (event.target || event.srcElement).tagName; + // ignore keypressed in any elements that support keyboard data input + return !(tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA'); + } + + // initialize key. to false + for(k in _MODIFIERS) assignKey[k] = false; + + // set current scope (default 'all') + function setScope(scope){ _scope = scope || 'all' }; + function getScope(){ return _scope || 'all' }; + + // delete all handlers for a given scope + function deleteScope(scope){ + var key, handlers, i; + + for (key in _handlers) { + handlers = _handlers[key]; + for (i = 0; i < handlers.length; ) { + if (handlers[i].scope === scope) handlers.splice(i, 1); + else i++; + } + } + }; + + // abstract key logic for assign and unassign + function getKeys(key) { + var keys; + key = key.replace(/\s/g, ''); + keys = key.split(','); + if ((keys[keys.length - 1]) == '') { + keys[keys.length - 2] += ','; + } + return keys; + } + + // abstract mods logic for assign and unassign + function getMods(key) { + var mods = key.slice(0, key.length - 1); + for (var mi = 0; mi < mods.length; mi++) + mods[mi] = _MODIFIERS[mods[mi]]; + return mods; + } + + // cross-browser events + function addEvent(object, event, method) { + if (object.addEventListener) + object.addEventListener(event, method, false); + else if(object.attachEvent) + object.attachEvent('on'+event, function(){ method(window.event) }); + }; + + // set the handlers globally on document + addEvent(document, 'keydown', function(event) { dispatch(event) }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48 + addEvent(document, 'keyup', clearModifier); + + // reset modifiers to false whenever the window is (re)focused. + addEvent(window, 'focus', resetModifiers); + + // store previously defined key + var previousKey = global.key; + + // restore previously defined key and return reference to our key object + function noConflict() { + var k = global.key; + global.key = previousKey; + return k; + } + + // set window.key and window.key.set/get/deleteScope, and the default filter + global.key = assignKey; + global.key.setScope = setScope; + global.key.getScope = getScope; + global.key.deleteScope = deleteScope; + global.key.filter = filter; + global.key.isPressed = isPressed; + global.key.getPressedKeyCodes = getPressedKeyCodes; + global.key.noConflict = noConflict; + global.key.unbind = unbindKey; + + if(true) module.exports = assignKey; + +})(this); + + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.8.3 +// http://underscorejs.org +// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `exports` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var + push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind, + nativeCreate = Object.create; + + // Naked function reference for surrogate-prototype-swapping. + var Ctor = function(){}; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for the old `require()` API. If we're in + // the browser, add `_` as a global object. + if (true) { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.8.3'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var optimizeCb = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + case 2: return function(value, other) { + return func.call(context, value, other); + }; + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + // A mostly-internal function to generate callbacks that can be applied + // to each element in a collection, returning the desired result — either + // identity, an arbitrary callback, a property matcher, or a property accessor. + var cb = function(value, context, argCount) { + if (value == null) return _.identity; + if (_.isFunction(value)) return optimizeCb(value, context, argCount); + if (_.isObject(value)) return _.matcher(value); + return _.property(value); + }; + _.iteratee = function(value, context) { + return cb(value, context, Infinity); + }; + + // An internal function for creating assigner functions. + var createAssigner = function(keysFunc, undefinedOnly) { + return function(obj) { + var length = arguments.length; + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + }; + + // An internal function for creating a new object that inherits from another. + var baseCreate = function(prototype) { + if (!_.isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + }; + + var property = function(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + }; + + // Helper for collection methods to determine whether a collection + // should be iterated as an array or as an object + // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = property('length'); + var isArrayLike = function(collection) { + var length = getLength(collection); + return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; + }; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); + } + } + return obj; + }; + + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Create a reducing function iterating left or right. + function createReduce(dir) { + // Optimized iterator function as using arguments.length + // in the main function will deoptimize the, see #1991. + function iterator(obj, iteratee, memo, keys, index, length) { + for (; index >= 0 && index < length; index += dir) { + var currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + } + + return function(obj, iteratee, memo, context) { + iteratee = optimizeCb(iteratee, context, 4); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + index = dir > 0 ? 0 : length - 1; + // Determine the initial value if none is provided. + if (arguments.length < 3) { + memo = obj[keys ? keys[index] : index]; + index += dir; + } + return iterator(obj, iteratee, memo, keys, index, length); + }; + } + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + _.reduce = _.foldl = _.inject = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + _.reduceRight = _.foldr = createReduce(-1); + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var key; + if (isArrayLike(obj)) { + key = _.findIndex(obj, predicate, context); + } else { + key = _.findKey(obj, predicate, context); + } + if (key !== void 0 && key !== -1) return obj[key]; + }; + + // Return all the elements that pass a truth test. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(cb(predicate)), context); + }; + + // Determine whether all of the elements match a truth test. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + }; + + // Determine if at least one element in the object matches a truth test. + // Aliased as `any`. + _.some = _.any = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + }; + + // Determine if the array or object contains a given item (using `===`). + // Aliased as `includes` and `include`. + _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return _.indexOf(obj, item, fromIndex) >= 0; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + var isFunc = _.isFunction(method); + return _.map(obj, function(value) { + var func = isFunc ? method : value[method]; + return func == null ? func : func.apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matcher(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matcher(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Shuffle a collection, using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + _.shuffle = function(obj) { + var set = isArrayLike(obj) ? obj : _.values(obj); + var length = set.length; + var shuffled = Array(length); + for (var index = 0, rand; index < length; index++) { + rand = _.random(0, index); + if (rand !== index) shuffled[index] = shuffled[rand]; + shuffled[rand] = set[index]; + } + return shuffled; + }; + + // Sample **n** random values from a collection. + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + return _.shuffle(obj).slice(0, Math.max(0, n)); + }; + + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + return _.pluck(_.map(obj, function(value, index, list) { + return { + value: value, + index: index, + criteria: iteratee(value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior) { + return function(obj, iteratee, context) { + var result = {}; + iteratee = cb(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, value, key) { + if (_.has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, value, key) { + if (_.has(result, key)) result[key]++; else result[key] = 1; + }); + + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (isArrayLike(obj)) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = function(obj, predicate, context) { + predicate = cb(predicate, context); + var pass = [], fail = []; + _.each(obj, function(value, key, obj) { + (predicate(value, key, obj) ? pass : fail).push(value); + }); + return [pass, fail]; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[0]; + return _.initial(array, array.length - n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + _.initial = function(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + _.last = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[array.length - 1]; + return _.rest(array, Math.max(0, array.length - n)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, _.identity); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, strict, startIndex) { + var output = [], idx = 0; + for (var i = startIndex || 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { + //flatten current level of array or arguments object + if (!shallow) value = flatten(value, shallow, strict); + var j = 0, len = value.length; + output.length += len; + while (j < len) { + output[idx++] = value[j++]; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, false); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + return _.difference(array, slice.call(arguments, 1)); + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!_.contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!_.contains(result, value)) { + result.push(value); + } + } + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = function() { + return _.uniq(flatten(arguments, true, true)); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + for (var j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = function(array) { + var rest = flatten(arguments, true, true, 1); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function() { + return _.unzip(arguments); + }; + + // Complement of _.zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices + _.unzip = function(array) { + var length = array && _.max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = _.pluck(array, index); + } + return result; + }; + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. + _.object = function(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // Generator function to create the findIndex and findLastIndex functions + function createPredicateIndexFinder(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + } + + // Returns the first index on an array-like that passes a predicate test + _.findIndex = createPredicateIndexFinder(1); + _.findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + }; + + // Generator function to create the indexOf and lastIndexOf functions + function createIndexFinder(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), _.isNaN); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + } + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); + _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + step = step || 1; + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Determines whether to execute a function as a constructor + // or a normal function with the provided arguments + var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (_.isObject(result)) return result; + return self; + }; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = function(func, context) { + if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + var args = slice.call(arguments, 2); + var bound = function() { + return executeBound(func, bound, context, this, args.concat(slice.call(arguments))); + }; + return bound; + }; + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder, allowing any combination of arguments to be pre-filled. + _.partial = function(func) { + var boundArgs = slice.call(arguments, 1); + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = function(obj) { + var i, length = arguments.length, key; + if (length <= 1) throw new Error('bindAll must be passed function names'); + for (i = 1; i < length; i++) { + key = arguments[i]; + obj[key] = _.bind(obj[key], obj); + } + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ + return func.apply(null, args); + }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = _.partial(_.delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) options = {}; + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + return function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, args, context, timestamp, result; + + var later = function() { + var last = _.now() - timestamp; + + if (last < wait && last >= 0) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + if (!timeout) context = args = null; + } + } + }; + + return function() { + context = this; + args = arguments; + timestamp = _.now(); + var callNow = immediate && !timeout; + if (!timeout) timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + }; + + // Returns a function that will only be executed on and after the Nth call. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Returns a function that will only be executed up to (but not including) the Nth call. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + + // Object Functions + // ---------------- + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + function collectNonEnumProps(obj, keys) { + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { + keys.push(prop); + } + } + } + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve all the property names of an object. + _.allKeys = function(obj) { + if (!_.isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Returns the results of applying the iteratee to each element of the object + // In contrast to _.map it returns an object + _.mapObject = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = _.keys(obj), + length = keys.length, + results = {}, + currentKey; + for (var index = 0; index < length; index++) { + currentKey = keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Convert an object into a list of `[key, value]` pairs. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = createAssigner(_.allKeys); + + // Assigns a given object with all the own properties in the passed-in object(s) + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + _.extendOwn = _.assign = createAssigner(_.keys); + + // Returns the first key on an object that passes a predicate test + _.findKey = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = _.keys(obj), key; + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = function(object, oiteratee, context) { + var result = {}, obj = object, iteratee, keys; + if (obj == null) return result; + if (_.isFunction(oiteratee)) { + keys = _.allKeys(obj); + iteratee = optimizeCb(oiteratee, context); + } else { + keys = flatten(arguments, false, false, 1); + iteratee = function(value, key, obj) { return key in obj; }; + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }; + + // Return a copy of the object without the blacklisted properties. + _.omit = function(obj, iteratee, context) { + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + } else { + var keys = _.map(flatten(arguments, false, false, 1), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; + } + return _.pick(obj, iteratee, context); + }; + + // Fill in a given object with default properties. + _.defaults = createAssigner(_.allKeys, true); + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + _.create = function(prototype, props) { + var result = baseCreate(prototype); + if (props) _.extendOwn(result, props); + return result; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Returns whether an object has a given set of `key:value` pairs. + _.isMatch = function(object, attrs) { + var keys = _.keys(attrs), length = keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + + + // Internal recursive comparison function for `isEqual`. + var eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // A strict comparison is necessary because `null == undefined`. + if (a == null || b == null) return a === b; + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + } + + var areArrays = className === '[object Array]'; + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var keys = _.keys(a), key; + length = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (_.keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = keys[length]; + if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; + return _.keys(obj).length === 0; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return _.has(obj, 'callee'); + }; + } + + // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, + // IE 11 (#1621), and in Safari 8 (#1929). + if (typeof /./ != 'function' && typeof Int8Array != 'object') { + _.isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? (NaN is the only number which does not equal itself). + _.isNaN = function(obj) { + return _.isNumber(obj) && obj !== +obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, key) { + return obj != null && hasOwnProperty.call(obj, key); + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iteratees. + _.identity = function(value) { + return value; + }; + + // Predicate-generating functions. Often useful outside of Underscore. + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + _.property = property; + + // Generates a function for a given object that returns a given property. + _.propertyOf = function(obj) { + return obj == null ? function(){} : function(key) { + return obj[key]; + }; + }; + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + _.matcher = _.matches = function(attrs) { + attrs = _.extendOwn({}, attrs); + return function(obj) { + return _.isMatch(obj, attrs); + }; + }; + + // Run a function **n** times. + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = _.invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); + + // If the value of the named `property` is a function then invoke it with the + // `object` as context; otherwise, return it. + _.result = function(object, property, fallback) { + var value = object == null ? void 0 : object[property]; + if (value === void 0) { + value = fallback; + } + return _.isFunction(value) ? value.call(object) : value; + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escaper, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offest. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + try { + var render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function. Start chaining a wrapped Underscore object. + _.chain = function(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var result = function(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return result(this, func.apply(_, args)); + }; + }); + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return result(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + _.each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return result(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxy for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return '' + this._wrapped; + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { + return _; + }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } +}.call(this)); + + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _promisePolyfill = __webpack_require__(77); + +var _promisePolyfill2 = _interopRequireDefault(_promisePolyfill); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +window.Promise = window.Promise || _promisePolyfill2.default; + +exports.default = typeof fetch == 'function' ? fetch.bind() : function (url, options) { + return new _promisePolyfill2.default(function (res, rej) { + var req = new XMLHttpRequest(); + req.open(options.method || 'get', url); + req.withCredentials = options.credentials == 'include'; + + for (var k in options.headers || {}) { + req.setRequestHeader(k, options.headers[k]); + } + + req.onload = function (e) { + return res({ + status: req.status, + statusText: req.statusText, + text: function text() { + return _promisePolyfill2.default.resolve(req.responseText); + } + }); + }; + req.onerror = rej; + + // Actually, fetch doesn't support onProgress feature + if (req.upload && options.onProgress) { + req.upload.onprogress = options.onProgress; + } + + // Include body only if present + options.body ? req.send(options.body) : req.send(); + }); +}; + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = function (config) { + var TEXT_NODE = 'span'; + var c = config; + var modelAttrStart = 'data-gjs-'; + + return { + compTypes: '', + + /** + * Parse style string to object + * @param {string} str + * @return {Object} + * @example + * var stl = ParserHtml.parseStyle('color:black; width:100px; test:value;'); + * console.log(stl); + * // {color: 'black', width: '100px', test: 'value'} + */ + parseStyle: function parseStyle(str) { + var result = {}; + var decls = str.split(';'); + for (var i = 0, len = decls.length; i < len; i++) { + var decl = decls[i].trim(); + if (!decl) continue; + var prop = decl.split(':'); + result[prop[0].trim()] = prop.slice(1).join(':').trim(); + } + return result; + }, + + + /** + * Parse class string to array + * @param {string} str + * @return {Array} + * @example + * var res = ParserHtml.parseClass('test1 test2 test3'); + * console.log(res); + * // ['test1', 'test2', 'test3'] + */ + parseClass: function parseClass(str) { + var result = []; + var cls = str.split(' '); + for (var i = 0, len = cls.length; i < len; i++) { + var cl = cls[i].trim(); + if (!cl) continue; + result.push(cl); + } + return result; + }, + + + /** + * Get data from the node element + * @param {HTMLElement} el DOM element to traverse + * @return {Array} + */ + parseNode: function parseNode(el) { + var result = []; + var nodes = el.childNodes; + + for (var i = 0, len = nodes.length; i < len; i++) { + var node = nodes[i]; + var attrs = node.attributes || []; + var attrsLen = attrs.length; + var nodePrev = result[result.length - 1]; + var nodeChild = node.childNodes.length; + var ct = this.compTypes; + var model = {}; + + // Start with understanding what kind of component it is + if (ct) { + var obj = ''; + var type = node.getAttribute && node.getAttribute(modelAttrStart + 'type'); + + // If the type is already defined, use it + if (type) { + model = { type: type }; + } else { + // Iterate over all available Component Types and + // the first with a valid result will be that component + for (var it = 0; it < ct.length; it++) { + obj = ct[it].model.isComponent(node); + if (obj) break; + } + + model = obj; + } + } + + // Set tag name if not yet done + if (!model.tagName) { + model.tagName = node.tagName ? node.tagName.toLowerCase() : ''; + } + + if (attrsLen) { + model.attributes = {}; + } + + // Parse attributes + for (var j = 0; j < attrsLen; j++) { + var nodeName = attrs[j].nodeName; + var nodeValue = attrs[j].nodeValue; + + // Isolate attributes + if (nodeName == 'style') { + model.style = this.parseStyle(nodeValue); + } else if (nodeName == 'class') { + model.classes = this.parseClass(nodeValue); + } else if (nodeName == 'contenteditable') { + continue; + } else if (nodeName.indexOf(modelAttrStart) === 0) { + var modelAttr = nodeName.replace(modelAttrStart, ''); + var valueLen = nodeValue.length; + var firstChar = nodeValue && nodeValue.substr(0, 1); + var lastChar = nodeValue && nodeValue.substr(valueLen - 1); + nodeValue = nodeValue === 'true' ? true : nodeValue; + nodeValue = nodeValue === 'false' ? false : nodeValue; + + // Try to parse JSON where it's possible + // I can get false positive here (eg. a selector '[data-attr]') + // so put it under try/catch and let fail silently + try { + nodeValue = firstChar == '{' && lastChar == '}' || firstChar == '[' && lastChar == ']' ? JSON.parse(nodeValue) : nodeValue; + } catch (e) {} + + model[modelAttr] = nodeValue; + } else { + model.attributes[nodeName] = nodeValue; + } + } + + // Check for nested elements but avoid it if already provided + if (nodeChild && !model.components) { + // Avoid infinite nested text nodes + var firstChild = node.childNodes[0]; + + // If there is only one child and it's a TEXTNODE + // just make it content of the current node + if (nodeChild === 1 && firstChild.nodeType === 3) { + !model.type && (model.type = 'text'); + model.content = firstChild.nodeValue; + } else { + model.components = this.parseNode(node); + } + } + + // Check if it's a text node and if could be moved to the prevous model + if (model.type == 'textnode') { + if (nodePrev && nodePrev.type == 'textnode') { + nodePrev.content += model.content; + continue; + } + + // Throw away empty nodes (keep spaces) + if (!config.keepEmptyTextNodes) { + var content = node.nodeValue; + if (content != ' ' && !content.trim()) { + continue; + } + } + } + + // If all children are texts and there is some textnode the parent should + // be text too otherwise I'm unable to edit texnodes + var comps = model.components; + if (!model.type && comps) { + var allTxt = 1; + var foundTextNode = 0; + + for (var ci = 0; ci < comps.length; ci++) { + var comp = comps[ci]; + var cType = comp.type; + + if (['text', 'textnode'].indexOf(cType) < 0 && c.textTags.indexOf(comp.tagName) < 0) { + allTxt = 0; + break; + } + + if (cType == 'textnode') { + foundTextNode = 1; + } + } + + if (allTxt && foundTextNode) { + model.type = 'text'; + } + } + + // If tagName is still empty and is not a textnode, do not push it + if (!model.tagName && model.type != 'textnode') { + continue; + } + + result.push(model); + } + + return result; + }, + + + /** + * Parse HTML string to a desired model object + * @param {string} str HTML string + * @param {ParserCss} parserCss In case there is style tags inside HTML + * @return {Object} + */ + parse: function parse(str, parserCss) { + var config = c.em && c.em.get('Config') || {}; + var res = { html: '', css: '' }; + var el = document.createElement('div'); + el.innerHTML = str; + var scripts = el.querySelectorAll('script'); + var i = scripts.length; + + // Remove all scripts + if (!config.allowScripts) { + while (i--) { + scripts[i].parentNode.removeChild(scripts[i]); + } + } + + // Detach style tags and parse them + if (parserCss) { + var styleStr = ''; + var styles = el.querySelectorAll('style'); + var j = styles.length; + + while (j--) { + styleStr = styles[j].innerHTML + styleStr; + styles[j].parentNode.removeChild(styles[j]); + } + + if (styleStr) res.css = parserCss.parse(styleStr); + } + + var result = this.parseNode(el); + + if (result.length == 1) result = result[0]; + + res.html = result; + + return res; + } + }; +}; + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (true) // CommonJS + mod(__webpack_require__(6)); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("css", function(config, parserConfig) { + var inline = parserConfig.inline + if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); + + var indentUnit = config.indentUnit, + tokenHooks = parserConfig.tokenHooks, + documentTypes = parserConfig.documentTypes || {}, + mediaTypes = parserConfig.mediaTypes || {}, + mediaFeatures = parserConfig.mediaFeatures || {}, + mediaValueKeywords = parserConfig.mediaValueKeywords || {}, + propertyKeywords = parserConfig.propertyKeywords || {}, + nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {}, + fontProperties = parserConfig.fontProperties || {}, + counterDescriptors = parserConfig.counterDescriptors || {}, + colorKeywords = parserConfig.colorKeywords || {}, + valueKeywords = parserConfig.valueKeywords || {}, + allowNested = parserConfig.allowNested, + lineComment = parserConfig.lineComment, + supportsAtComponent = parserConfig.supportsAtComponent === true; + + var type, override; + function ret(style, tp) { type = tp; return style; } + + // Tokenizers + + function tokenBase(stream, state) { + var ch = stream.next(); + if (tokenHooks[ch]) { + var result = tokenHooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == "@") { + stream.eatWhile(/[\w\\\-]/); + return ret("def", stream.current()); + } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { + return ret(null, "compare"); + } else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "#") { + stream.eatWhile(/[\w\\\-]/); + return ret("atom", "hash"); + } else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (ch === "-") { + if (/[\d.]/.test(stream.peek())) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (stream.match(/^-[\w\\\-]+/)) { + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ret("variable-2", "variable-definition"); + return ret("variable-2", "variable"); + } else if (stream.match(/^\w+-/)) { + return ret("meta", "meta"); + } + } else if (/[,+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { + return ret("qualifier", "qualifier"); + } else if (/[:;{}\[\]\(\)]/.test(ch)) { + return ret(null, ch); + } else if (((ch == "u" || ch == "U") && stream.match(/rl(-prefix)?\(/i)) || + ((ch == "d" || ch == "D") && stream.match("omain(", true, true)) || + ((ch == "r" || ch == "R") && stream.match("egexp(", true, true))) { + stream.backUp(1); + state.tokenize = tokenParenthesized; + return ret("property", "word"); + } else if (/[\w\\\-]/.test(ch)) { + stream.eatWhile(/[\w\\\-]/); + return ret("property", "word"); + } else { + return ret(null, null); + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + if (quote == ")") stream.backUp(1); + break; + } + escaped = !escaped && ch == "\\"; + } + if (ch == quote || !escaped && quote != ")") state.tokenize = null; + return ret("string", "string"); + }; + } + + function tokenParenthesized(stream, state) { + stream.next(); // Must be '(' + if (!stream.match(/\s*[\"\')]/, false)) + state.tokenize = tokenString(")"); + else + state.tokenize = null; + return ret(null, "("); + } + + // Context management + + function Context(type, indent, prev) { + this.type = type; + this.indent = indent; + this.prev = prev; + } + + function pushContext(state, stream, type, indent) { + state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context); + return type; + } + + function popContext(state) { + if (state.context.prev) + state.context = state.context.prev; + return state.context.type; + } + + function pass(type, stream, state) { + return states[state.context.type](type, stream, state); + } + function popAndPass(type, stream, state, n) { + for (var i = n || 1; i > 0; i--) + state.context = state.context.prev; + return pass(type, stream, state); + } + + // Parser + + function wordAsValue(stream) { + var word = stream.current().toLowerCase(); + if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "variable"; + } + + var states = {}; + + states.top = function(type, stream, state) { + if (type == "{") { + return pushContext(state, stream, "block"); + } else if (type == "}" && state.context.prev) { + return popContext(state); + } else if (supportsAtComponent && /@component/i.test(type)) { + return pushContext(state, stream, "atComponentBlock"); + } else if (/^@(-moz-)?document$/i.test(type)) { + return pushContext(state, stream, "documentTypes"); + } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) { + return pushContext(state, stream, "atBlock"); + } else if (/^@(font-face|counter-style)/i.test(type)) { + state.stateArg = type; + return "restricted_atBlock_before"; + } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) { + return "keyframes"; + } else if (type && type.charAt(0) == "@") { + return pushContext(state, stream, "at"); + } else if (type == "hash") { + override = "builtin"; + } else if (type == "word") { + override = "tag"; + } else if (type == "variable-definition") { + return "maybeprop"; + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } else if (type == ":") { + return "pseudo"; + } else if (allowNested && type == "(") { + return pushContext(state, stream, "parens"); + } + return state.context.type; + }; + + states.block = function(type, stream, state) { + if (type == "word") { + var word = stream.current().toLowerCase(); + if (propertyKeywords.hasOwnProperty(word)) { + override = "property"; + return "maybeprop"; + } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) { + override = "string-2"; + return "maybeprop"; + } else if (allowNested) { + override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; + return "block"; + } else { + override += " error"; + return "maybeprop"; + } + } else if (type == "meta") { + return "block"; + } else if (!allowNested && (type == "hash" || type == "qualifier")) { + override = "error"; + return "block"; + } else { + return states.top(type, stream, state); + } + }; + + states.maybeprop = function(type, stream, state) { + if (type == ":") return pushContext(state, stream, "prop"); + return pass(type, stream, state); + }; + + states.prop = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); + if (type == "}" || type == "{") return popAndPass(type, stream, state); + if (type == "(") return pushContext(state, stream, "parens"); + + if (type == "hash" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) { + override += " error"; + } else if (type == "word") { + wordAsValue(stream); + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } + return "prop"; + }; + + states.propBlock = function(type, _stream, state) { + if (type == "}") return popContext(state); + if (type == "word") { override = "property"; return "maybeprop"; } + return state.context.type; + }; + + states.parens = function(type, stream, state) { + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == ")") return popContext(state); + if (type == "(") return pushContext(state, stream, "parens"); + if (type == "interpolation") return pushContext(state, stream, "interpolation"); + if (type == "word") wordAsValue(stream); + return "parens"; + }; + + states.pseudo = function(type, stream, state) { + if (type == "meta") return "pseudo"; + + if (type == "word") { + override = "variable-3"; + return state.context.type; + } + return pass(type, stream, state); + }; + + states.documentTypes = function(type, stream, state) { + if (type == "word" && documentTypes.hasOwnProperty(stream.current())) { + override = "tag"; + return state.context.type; + } else { + return states.atBlock(type, stream, state); + } + }; + + states.atBlock = function(type, stream, state) { + if (type == "(") return pushContext(state, stream, "atBlock_parens"); + if (type == "}" || type == ";") return popAndPass(type, stream, state); + if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); + + if (type == "interpolation") return pushContext(state, stream, "interpolation"); + + if (type == "word") { + var word = stream.current().toLowerCase(); + if (word == "only" || word == "not" || word == "and" || word == "or") + override = "keyword"; + else if (mediaTypes.hasOwnProperty(word)) + override = "attribute"; + else if (mediaFeatures.hasOwnProperty(word)) + override = "property"; + else if (mediaValueKeywords.hasOwnProperty(word)) + override = "keyword"; + else if (propertyKeywords.hasOwnProperty(word)) + override = "property"; + else if (nonStandardPropertyKeywords.hasOwnProperty(word)) + override = "string-2"; + else if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "error"; + } + return state.context.type; + }; + + states.atComponentBlock = function(type, stream, state) { + if (type == "}") + return popAndPass(type, stream, state); + if (type == "{") + return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false); + if (type == "word") + override = "error"; + return state.context.type; + }; + + states.atBlock_parens = function(type, stream, state) { + if (type == ")") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); + return states.atBlock(type, stream, state); + }; + + states.restricted_atBlock_before = function(type, stream, state) { + if (type == "{") + return pushContext(state, stream, "restricted_atBlock"); + if (type == "word" && state.stateArg == "@counter-style") { + override = "variable"; + return "restricted_atBlock_before"; + } + return pass(type, stream, state); + }; + + states.restricted_atBlock = function(type, stream, state) { + if (type == "}") { + state.stateArg = null; + return popContext(state); + } + if (type == "word") { + if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) || + (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase()))) + override = "error"; + else + override = "property"; + return "maybeprop"; + } + return "restricted_atBlock"; + }; + + states.keyframes = function(type, stream, state) { + if (type == "word") { override = "variable"; return "keyframes"; } + if (type == "{") return pushContext(state, stream, "top"); + return pass(type, stream, state); + }; + + states.at = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == "word") override = "tag"; + else if (type == "hash") override = "builtin"; + return "at"; + }; + + states.interpolation = function(type, stream, state) { + if (type == "}") return popContext(state); + if (type == "{" || type == ";") return popAndPass(type, stream, state); + if (type == "word") override = "variable"; + else if (type != "variable" && type != "(" && type != ")") override = "error"; + return "interpolation"; + }; + + return { + startState: function(base) { + return {tokenize: null, + state: inline ? "block" : "top", + stateArg: null, + context: new Context(inline ? "block" : "top", base || 0, null)}; + }, + + token: function(stream, state) { + if (!state.tokenize && stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style && typeof style == "object") { + type = style[1]; + style = style[0]; + } + override = style; + if (type != "comment") + state.state = states[state.state](type, stream, state); + return override; + }, + + indent: function(state, textAfter) { + var cx = state.context, ch = textAfter && textAfter.charAt(0); + var indent = cx.indent; + if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; + if (cx.prev) { + if (ch == "}" && (cx.type == "block" || cx.type == "top" || + cx.type == "interpolation" || cx.type == "restricted_atBlock")) { + // Resume indentation from parent context. + cx = cx.prev; + indent = cx.indent; + } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || + ch == "{" && (cx.type == "at" || cx.type == "atBlock")) { + // Dedent relative to current context. + indent = Math.max(0, cx.indent - indentUnit); + } + } + return indent; + }, + + electricChars: "}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + blockCommentContinue: " * ", + lineComment: lineComment, + fold: "brace" + }; +}); + + function keySet(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) { + keys[array[i].toLowerCase()] = true; + } + return keys; + } + + var documentTypes_ = [ + "domain", "regexp", "url", "url-prefix" + ], documentTypes = keySet(documentTypes_); + + var mediaTypes_ = [ + "all", "aural", "braille", "handheld", "print", "projection", "screen", + "tty", "tv", "embossed" + ], mediaTypes = keySet(mediaTypes_); + + var mediaFeatures_ = [ + "width", "min-width", "max-width", "height", "min-height", "max-height", + "device-width", "min-device-width", "max-device-width", "device-height", + "min-device-height", "max-device-height", "aspect-ratio", + "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", + "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", + "max-color", "color-index", "min-color-index", "max-color-index", + "monochrome", "min-monochrome", "max-monochrome", "resolution", + "min-resolution", "max-resolution", "scan", "grid", "orientation", + "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", + "pointer", "any-pointer", "hover", "any-hover" + ], mediaFeatures = keySet(mediaFeatures_); + + var mediaValueKeywords_ = [ + "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", + "interlace", "progressive" + ], mediaValueKeywords = keySet(mediaValueKeywords_); + + var propertyKeywords_ = [ + "align-content", "align-items", "align-self", "alignment-adjust", + "alignment-baseline", "anchor-point", "animation", "animation-delay", + "animation-direction", "animation-duration", "animation-fill-mode", + "animation-iteration-count", "animation-name", "animation-play-state", + "animation-timing-function", "appearance", "azimuth", "backface-visibility", + "background", "background-attachment", "background-blend-mode", "background-clip", + "background-color", "background-image", "background-origin", "background-position", + "background-repeat", "background-size", "baseline-shift", "binding", + "bleed", "bookmark-label", "bookmark-level", "bookmark-state", + "bookmark-target", "border", "border-bottom", "border-bottom-color", + "border-bottom-left-radius", "border-bottom-right-radius", + "border-bottom-style", "border-bottom-width", "border-collapse", + "border-color", "border-image", "border-image-outset", + "border-image-repeat", "border-image-slice", "border-image-source", + "border-image-width", "border-left", "border-left-color", + "border-left-style", "border-left-width", "border-radius", "border-right", + "border-right-color", "border-right-style", "border-right-width", + "border-spacing", "border-style", "border-top", "border-top-color", + "border-top-left-radius", "border-top-right-radius", "border-top-style", + "border-top-width", "border-width", "bottom", "box-decoration-break", + "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", + "caption-side", "caret-color", "clear", "clip", "color", "color-profile", "column-count", + "column-fill", "column-gap", "column-rule", "column-rule-color", + "column-rule-style", "column-rule-width", "column-span", "column-width", + "columns", "content", "counter-increment", "counter-reset", "crop", "cue", + "cue-after", "cue-before", "cursor", "direction", "display", + "dominant-baseline", "drop-initial-after-adjust", + "drop-initial-after-align", "drop-initial-before-adjust", + "drop-initial-before-align", "drop-initial-size", "drop-initial-value", + "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", + "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", + "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings", + "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", + "font-stretch", "font-style", "font-synthesis", "font-variant", + "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", + "font-variant-ligatures", "font-variant-numeric", "font-variant-position", + "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", + "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-gap", + "grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", + "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", + "grid-template-rows", "hanging-punctuation", "height", "hyphens", + "icon", "image-orientation", "image-rendering", "image-resolution", + "inline-box-align", "justify-content", "justify-items", "justify-self", "left", "letter-spacing", + "line-break", "line-height", "line-stacking", "line-stacking-ruby", + "line-stacking-shift", "line-stacking-strategy", "list-style", + "list-style-image", "list-style-position", "list-style-type", "margin", + "margin-bottom", "margin-left", "margin-right", "margin-top", + "marks", "marquee-direction", "marquee-loop", + "marquee-play-count", "marquee-speed", "marquee-style", "max-height", + "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", + "nav-left", "nav-right", "nav-up", "object-fit", "object-position", + "opacity", "order", "orphans", "outline", + "outline-color", "outline-offset", "outline-style", "outline-width", + "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", + "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", + "page", "page-break-after", "page-break-before", "page-break-inside", + "page-policy", "pause", "pause-after", "pause-before", "perspective", + "perspective-origin", "pitch", "pitch-range", "place-content", "place-items", "place-self", "play-during", "position", + "presentation-level", "punctuation-trim", "quotes", "region-break-after", + "region-break-before", "region-break-inside", "region-fragment", + "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", + "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", + "ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin", + "shape-outside", "size", "speak", "speak-as", "speak-header", + "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", + "tab-size", "table-layout", "target", "target-name", "target-new", + "target-position", "text-align", "text-align-last", "text-decoration", + "text-decoration-color", "text-decoration-line", "text-decoration-skip", + "text-decoration-style", "text-emphasis", "text-emphasis-color", + "text-emphasis-position", "text-emphasis-style", "text-height", + "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", + "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", + "text-wrap", "top", "transform", "transform-origin", "transform-style", + "transition", "transition-delay", "transition-duration", + "transition-property", "transition-timing-function", "unicode-bidi", + "user-select", "vertical-align", "visibility", "voice-balance", "voice-duration", + "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", + "voice-volume", "volume", "white-space", "widows", "width", "will-change", "word-break", + "word-spacing", "word-wrap", "z-index", + // SVG-specific + "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", + "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", + "color-interpolation", "color-interpolation-filters", + "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", + "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", + "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", + "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", + "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", + "glyph-orientation-vertical", "text-anchor", "writing-mode" + ], propertyKeywords = keySet(propertyKeywords_); + + var nonStandardPropertyKeywords_ = [ + "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", + "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", + "scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside", + "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", + "searchfield-results-decoration", "zoom" + ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); + + var fontProperties_ = [ + "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", + "font-stretch", "font-weight", "font-style" + ], fontProperties = keySet(fontProperties_); + + var counterDescriptors_ = [ + "additive-symbols", "fallback", "negative", "pad", "prefix", "range", + "speak-as", "suffix", "symbols", "system" + ], counterDescriptors = keySet(counterDescriptors_); + + var colorKeywords_ = [ + "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", + "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", + "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", + "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", + "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", + "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", + "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", + "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", + "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", + "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", + "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", + "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", + "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", + "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", + "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", + "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", + "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", + "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", + "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", + "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", + "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", + "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", + "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", + "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", + "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", + "whitesmoke", "yellow", "yellowgreen" + ], colorKeywords = keySet(colorKeywords_); + + var valueKeywords_ = [ + "above", "absolute", "activeborder", "additive", "activecaption", "afar", + "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", + "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", + "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page", + "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary", + "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", + "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", + "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", + "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", + "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", + "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", + "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", + "compact", "condensed", "contain", "content", "contents", + "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", + "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", + "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", + "destination-in", "destination-out", "destination-over", "devanagari", "difference", + "disc", "discard", "disclosure-closed", "disclosure-open", "document", + "dot-dash", "dot-dot-dash", + "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", + "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", + "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", + "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", + "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", + "ethiopic-halehame-gez", "ethiopic-halehame-om-et", + "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", + "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", + "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", + "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", + "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove", + "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", + "help", "hidden", "hide", "higher", "highlight", "highlighttext", + "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore", + "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", + "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", + "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", + "italic", "japanese-formal", "japanese-informal", "justify", "kannada", + "katakana", "katakana-iroha", "keep-all", "khmer", + "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", + "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", + "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", + "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", + "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", + "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "match", "matrix", "matrix3d", + "media-controls-background", "media-current-time-display", + "media-fullscreen-button", "media-mute-button", "media-play-button", + "media-return-to-realtime-button", "media-rewind-button", + "media-seek-back-button", "media-seek-forward-button", "media-slider", + "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", + "media-volume-slider-container", "media-volume-sliderthumb", "medium", + "menu", "menulist", "menulist-button", "menulist-text", + "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", + "mix", "mongolian", "monospace", "move", "multiple", "multiply", "myanmar", "n-resize", + "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", + "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", + "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote", + "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", + "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", + "painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter", + "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", + "progress", "push-button", "radial-gradient", "radio", "read-only", + "read-write", "read-write-plaintext-only", "rectangle", "region", + "relative", "repeat", "repeating-linear-gradient", + "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", + "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", + "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", + "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", + "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", + "searchfield-cancel-button", "searchfield-decoration", + "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end", + "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", + "simp-chinese-formal", "simp-chinese-informal", "single", + "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", + "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", + "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", + "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square", + "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub", + "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", + "table-caption", "table-cell", "table-column", "table-column-group", + "table-footer-group", "table-header-group", "table-row", "table-row-group", + "tamil", + "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", + "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", + "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", + "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", + "trad-chinese-formal", "trad-chinese-informal", "transform", + "translate", "translate3d", "translateX", "translateY", "translateZ", + "transparent", "ultra-condensed", "ultra-expanded", "underline", "unset", "up", + "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", + "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", + "var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", + "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", + "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", + "xx-large", "xx-small" + ], valueKeywords = keySet(valueKeywords_); + + var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_) + .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_) + .concat(valueKeywords_); + CodeMirror.registerHelper("hintWords", "css", allWords); + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return ["comment", "comment"]; + } + + CodeMirror.defineMIME("text/css", { + documentTypes: documentTypes, + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + fontProperties: fontProperties, + counterDescriptors: counterDescriptors, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + tokenHooks: { + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css" + }); + + CodeMirror.defineMIME("text/x-scss", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + lineComment: "//", + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + ":": function(stream) { + if (stream.match(/\s*\{/, false)) + return [null, null] + return false; + }, + "$": function(stream) { + stream.match(/^[\w-]+/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "#": function(stream) { + if (!stream.eat("{")) return false; + return [null, "interpolation"]; + } + }, + name: "css", + helperType: "scss" + }); + + CodeMirror.defineMIME("text/x-less", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + lineComment: "//", + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + "@": function(stream) { + if (stream.eat("{")) return [null, "interpolation"]; + if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false; + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "&": function() { + return ["atom", "atom"]; + } + }, + name: "css", + helperType: "less" + }); + + CodeMirror.defineMIME("text/x-gss", { + documentTypes: documentTypes, + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + fontProperties: fontProperties, + counterDescriptors: counterDescriptors, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + supportsAtComponent: true, + tokenHooks: { + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css", + helperType: "gss" + }); + +}); + + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Backbone = __webpack_require__(0); +var Buttons = __webpack_require__(30); + +module.exports = Backbone.Model.extend({ + defaults: { + id: '', + content: '', + visible: true, + buttons: [], + attributes: {} + }, + + initialize: function initialize(options) { + this.btn = this.get('buttons') || []; + this.buttons = new Buttons(this.btn); + this.set('buttons', this.buttons); + } +}); + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Backbone = __webpack_require__(0); +var Button = __webpack_require__(112); + +module.exports = Backbone.Collection.extend({ + model: Button, + + /** + * Deactivate all buttons, except one passed + * @param {Object} except Model to ignore + * @param {Boolean} r Recursive flag + * + * @return void + * */ + deactivateAllExceptOne: function deactivateAllExceptOne(except, r) { + this.forEach(function (model, index) { + if (model !== except) { + model.set('active', false); + if (r && model.get('buttons').length) model.get('buttons').deactivateAllExceptOne(except, r); + } + }); + }, + + + /** + * Deactivate all buttons + * @param {String} ctx Context string + * + * @return void + * */ + deactivateAll: function deactivateAll(ctx) { + var context = ctx || ''; + this.forEach(function (model, index) { + if (model.get('context') == context) { + model.set('active', false); + if (model.get('buttons').length) model.get('buttons').deactivateAll(context); + } + }); + }, + + + /** + * Disables all buttons + * @param {String} ctx Context string + * + * @return void + * */ + disableAllButtons: function disableAllButtons(ctx) { + var context = ctx || ''; + this.forEach(function (model, index) { + if (model.get('context') == context) { + model.set('disable', true); + if (model.get('buttons').length) model.get('buttons').disableAllButtons(context); + } + }); + }, + + + /** + * Disables all buttons, except one passed + * @param {Object} except Model to ignore + * @param {Boolean} r Recursive flag + * + * @return void + * */ + disableAllButtonsExceptOne: function disableAllButtonsExceptOne(except, r) { + this.forEach(function (model, index) { + if (model !== except) { + model.set('disable', true); + if (r && model.get('buttons').length) model.get('buttons').disableAllButtonsExceptOne(except, r); + } + }); + } +}); + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var Backbone = __webpack_require__(0); +var ButtonsView = __webpack_require__(114); + +module.exports = Backbone.View.extend({ + initialize: function initialize(o) { + var config = o.config || {}; + var model = this.model; + this.config = config; + this.pfx = config.stylePrefix || ''; + this.ppfx = config.pStylePrefix || ''; + this.buttons = model.get('buttons'); + this.className = this.pfx + 'panel'; + this.id = this.pfx + model.get('id'); + this.listenTo(model, 'change:appendContent', this.appendContent); + this.listenTo(model, 'change:content', this.updateContent); + model.view = this; + }, + + + /** + * Append content of the panel + * */ + appendContent: function appendContent() { + this.$el.append(this.model.get('appendContent')); + }, + + + /** + * Update content + * */ + updateContent: function updateContent() { + this.$el.html(this.model.get('content')); + }, + attributes: function attributes() { + return this.model.get('attributes'); + }, + initResize: function initResize() { + var em = this.config.em; + var editor = em ? em.get('Editor') : ''; + var resizable = this.model.get('resizable'); + + if (editor && resizable) { + var resz = resizable === true ? [1, 1, 1, 1] : resizable; + var resLen = resz.length; + var tc, + cr, + bc, + cl = 0; + + // Choose which sides of the panel are resizable + if (resLen == 2) { + tc = resz[0]; + bc = resz[0]; + cr = resz[1]; + cl = resz[1]; + } else if (resLen == 4) { + tc = resz[0]; + cr = resz[1]; + bc = resz[2]; + cl = resz[3]; + } + + var resizer = editor.Utils.Resizer.init(_extends({ + tc: tc, + cr: cr, + bc: bc, + cl: cl, + tl: 0, + tr: 0, + bl: 0, + br: 0, + appendTo: this.el, + silentFrames: 1, + avoidContainerUpdate: 1, + prefix: editor.getConfig().stylePrefix, + onEnd: function onEnd() { + em && em.trigger('change:canvasOffset'); + }, + + posFetcher: function posFetcher(el, _ref) { + var target = _ref.target; + + var style = el.style; + var config = resizer.getConfig(); + var keyWidth = config.keyWidth; + var keyHeight = config.keyHeight; + var rect = el.getBoundingClientRect(); + var forContainer = target == 'container'; + var styleWidth = style[keyWidth]; + var styleHeight = style[keyHeight]; + var width = styleWidth && !forContainer ? parseFloat(styleWidth) : rect.width; + var height = styleHeight && !forContainer ? parseFloat(styleHeight) : rect.height; + return { + left: 0, + top: 0, + width: width, + height: height + }; + } + }, resizable)); + resizer.blur = function () {}; + resizer.focus(this.el); + } + }, + render: function render() { + var $el = this.$el; + var ppfx = this.ppfx; + var cls = this.className + ' ' + this.id + ' ' + ppfx + 'one-bg ' + ppfx + 'two-color'; + $el.addClass(cls); + + if (this.buttons.length) { + var buttons = new ButtonsView({ + collection: this.buttons, + config: this.config + }); + $el.append(buttons.render().el); + } + + $el.append(this.model.get('content')); + return this; + } +}); + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** + * With Style Manager you basically build categories (called sectors) of CSS properties which could + * be used to custom components and classes. + * You can init the editor with all sectors and properties via configuration + * + * ```js + * var editor = grapesjs.init({ + * ... + * styleManager: {...} // Check below for the possible properties + * ... + * }); + * ``` + * + * Before using methods you should get first the module from the editor instance, in this way: + * + * ```js + * var styleManager = editor.StyleManager; + * ``` + * + * @module StyleManager + * @param {Object} config Configurations + * @param {Array} [config.sectors=[]] Array of possible sectors + * @example + * ... + * styleManager: { + * sectors: [{ + * id: 'dim', + * name: 'Dimension', + * properties: [{ + * name: 'Width', + * property: 'width', + * type: 'integer', + * units: ['px', '%'], + * defaults: 'auto', + * min: 0, + }], + * }], + * } + * ... + */ + + +var _underscore = __webpack_require__(1); + +module.exports = function () { + var c = {}, + defaults = __webpack_require__(120), + Sectors = __webpack_require__(121), + Properties = __webpack_require__(12), + SectorsView = __webpack_require__(132); + var properties = void 0; + var sectors, SectView; + + return { + /** + * Name of the module + * @type {String} + * @private + */ + name: 'StyleManager', + + /** + * Get configuration object + * @return {Object} + * @private + */ + getConfig: function getConfig() { + return c; + }, + + + /** + * Initialize module. Automatically called with a new instance of the editor + * @param {Object} config Configurations + */ + init: function init(config) { + c = config || {}; + for (var name in defaults) { + if (!(name in c)) c[name] = defaults[name]; + } + + var ppfx = c.pStylePrefix; + if (ppfx) c.stylePrefix = ppfx + c.stylePrefix; + + properties = new Properties(); + sectors = new Sectors(c.sectors, c); + SectView = new SectorsView({ + collection: sectors, + target: c.em, + config: c + }); + return this; + }, + postRender: function postRender() { + var elTo = this.getConfig().appendTo; + + if (elTo) { + var el = (0, _underscore.isElement)(elTo) ? elTo : document.querySelector(elTo); + el.appendChild(this.render()); + } + }, + + + /** + * Add new sector to the collection. If the sector with the same id already exists, + * that one will be returned + * @param {string} id Sector id + * @param {Object} sector Object representing sector + * @param {string} [sector.name=''] Sector's label + * @param {Boolean} [sector.open=true] Indicates if the sector should be opened + * @param {Array} [sector.properties=[]] Array of properties + * @return {Sector} Added Sector + * @example + * var sector = styleManager.addSector('mySector',{ + * name: 'My sector', + * open: true, + * properties: [{ name: 'My property'}] + * }); + * */ + addSector: function addSector(id, sector) { + var result = this.getSector(id); + if (!result) { + sector.id = id; + result = sectors.add(sector); + } + return result; + }, + + + /** + * Get sector by id + * @param {string} id Sector id + * @return {Sector|null} + * @example + * var sector = styleManager.getSector('mySector'); + * */ + getSector: function getSector(id) { + var res = sectors.where({ id: id }); + return res.length ? res[0] : null; + }, + + + /** + * Remove a sector by id + * @param {string} id Sector id + * @return {Sector} Removed sector + * @example + * const removed = styleManager.removeSector('mySector'); + */ + removeSector: function removeSector(id) { + return this.getSectors().remove(this.getSector(id)); + }, + + + /** + * Get all sectors + * @return {Sectors} Collection of sectors + * */ + getSectors: function getSectors() { + return sectors; + }, + + + /** + * Add property to the sector identified by id + * @param {string} sectorId Sector id + * @param {Object} property Property object + * @param {string} [property.name=''] Name of the property + * @param {string} [property.property=''] CSS property, eg. `min-height` + * @param {string} [property.type=''] Type of the property: integer | radio | select | color | file | composite | stack + * @param {Array} [property.units=[]] Unit of measure available, eg. ['px','%','em']. Only for integer type + * @param {string} [property.unit=''] Default selected unit from `units`. Only for integer type + * @param {number} [property.min=null] Min possible value. Only for integer type + * @param {number} [property.max=null] Max possible value. Only for integer type + * @param {string} [property.defaults=''] Default value + * @param {string} [property.info=''] Some description + * @param {string} [property.icon=''] Class name. If exists no text will be displayed + * @param {Boolean} [property.preview=false] Show layers preview. Only for stack type + * @param {string} [property.functionName=''] Indicates if value need to be wrapped in some function, for istance `transform: rotate(90deg)` + * @param {Array} [property.properties=[]] Nested properties for composite and stack type + * @param {Array} [property.layers=[]] Layers for stack properties + * @param {Array} [property.list=[]] List of possible options for radio and select types + * @return {Property|null} Added Property or `null` in case sector doesn't exist + * @example + * var property = styleManager.addProperty('mySector',{ + * name: 'Minimum height', + * property: 'min-height', + * type: 'select', + * defaults: '100px', + * list: [{ + * value: '100px', + * name: '100', + * },{ + * value: '200px', + * name: '200', + * }], + * }); + */ + addProperty: function addProperty(sectorId, property) { + var prop = null; + var sector = this.getSector(sectorId); + + if (sector) prop = sector.get('properties').add(property); + + return prop; + }, + + + /** + * Get property by its CSS name and sector id + * @param {string} sectorId Sector id + * @param {string} name CSS property name, eg. 'min-height' + * @return {Property|null} + * @example + * var property = styleManager.getProperty('mySector','min-height'); + */ + getProperty: function getProperty(sectorId, name) { + var prop = null; + var sector = this.getSector(sectorId); + + if (sector) { + prop = sector.get('properties').where({ property: name }); + prop = prop.length == 1 ? prop[0] : prop; + } + + return prop; + }, + + + /** + * Remove a property from the sector + * @param {string} sectorId Sector id + * @param {string} name CSS property name, eg. 'min-height' + * @return {Property} Removed property + * @example + * const property = styleManager.removeProperty('mySector', 'min-height'); + */ + removeProperty: function removeProperty(sectorId, name) { + var props = this.getProperties(sectorId); + return props && props.remove(this.getProperty(sectorId, name)); + }, + + + /** + * Get properties of the sector + * @param {string} sectorId Sector id + * @return {Properties} Collection of properties + * @example + * var properties = styleManager.getProperties('mySector'); + */ + getProperties: function getProperties(sectorId) { + var props = null; + var sector = this.getSector(sectorId); + + if (sector) props = sector.get('properties'); + + return props; + }, + + + /** + * Get what to style inside Style Manager. If you select the component + * without classes the entity is the Component itself and all changes will + * go inside its 'style' property. Otherwise, if the selected component has + * one or more classes, the function will return the corresponding CSS Rule + * @param {Model} model + * @return {Model} + */ + getModelToStyle: function getModelToStyle(model) { + var em = c.em; + var classes = model.get('classes'); + var id = model.getId(); + + if (em) { + var config = em.getConfig(); + var um = em.get('UndoManager'); + var cssC = em.get('CssComposer'); + var state = !config.devicePreviewMode ? model.get('state') : ''; + var valid = classes.getStyleable(); + var hasClasses = valid.length; + var opts = { state: state }; + var rule = void 0; + + // I stop undo manager here as after adding the CSSRule (generally after + // selecting the component) and calling undo() it will remove the rule from + // the collection, therefore updating it in style manager will not affect it + // #268 + um.stop(); + + if (hasClasses) { + var deviceW = em.getCurrentMedia(); + rule = cssC.get(valid, state, deviceW); + + if (!rule) { + rule = cssC.add(valid, state, deviceW); + rule.setStyle(model.getStyle()); + model.setStyle({}); + } + } else if (config.avoidInlineStyle) { + rule = cssC.getIdRule(id, opts); + !rule && (rule = cssC.setIdRule(id, {}, opts)); + } + + rule && (model = rule); + um.start(); + } + + return model; + }, + + + /** + * Add new property type + * @param {string} id Type ID + * @param {Object} definition Definition of the type. Each definition contains + * `model` (business logic), `view` (presentation logic) + * and `isType` function which recognize the type of the + * passed entity + * addType('my-type', { + * model: {}, + * view: {}, + * isType: (value) => { + * if (value && value.type == 'my-type') { + * return value; + * } + * }, + * }) + */ + addType: function addType(id, definition) { + properties.addType(id, definition); + }, + + + /** + * Get type + * @param {string} id Type ID + * @return {Object} Type definition + */ + getType: function getType(id) { + return properties.getType(id); + }, + + + /** + * Get all types + * @return {Array} + */ + getTypes: function getTypes() { + return properties.getTypes(); + }, + + + /** + * Create new property from type + * @param {string} id Type ID + * @param {Object} [options={}] Options + * @param {Object} [options.model={}] Custom model object + * @param {Object} [options.view={}] Custom view object + * @return {PropertyView} + * @example + * const propView = styleManager.createType('integer', { + * model: {units: ['px', 'rem']} + * }); + * propView.render(); + * propView.model.on('change:value', ...); + * someContainer.appendChild(propView.el); + */ + createType: function createType(id) { + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$model = _ref.model, + model = _ref$model === undefined ? {} : _ref$model, + _ref$view = _ref.view, + view = _ref$view === undefined ? {} : _ref$view; + + var type = this.getType(id); + + if (type) { + return new type.view(_extends({ + model: new type.model(model), + config: c + }, view)); + } + }, + + + /** + * Render sectors and properties + * @return {HTMLElement} + * */ + render: function render() { + return SectView.render().el; + } + }; +}; + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(Backbone) { + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var Model = Backbone.Model; +var View = Backbone.View; + +exports.default = { + types: [], + + initialize: function initialize(models, opts) { + var _this = this; + + this.model = function () { + var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var Model = void 0, + View = void 0, + type = void 0; + + if (attrs && attrs.type) { + var baseType = _this.getBaseType(); + type = _this.getType(attrs.type); + Model = type ? type.model : baseType.model; + View = type ? type.view : baseType.view; + } else { + var typeFound = _this.recognizeType(attrs); + type = typeFound.type; + Model = type.model; + View = type.view; + attrs = typeFound.attributes; + } + + var model = new Model(attrs, options); + model.typeView = View; + return model; + }; + var init = this.init && this.init.bind(this); + init && init(); + }, + + + /** + * Recognize type by any value + * @param {mixed} value + * @return {Object} Found type + */ + recognizeType: function recognizeType(value) { + var types = this.getTypes(); + + for (var i = 0; i < types.length; i++) { + var type = types[i]; + var typeFound = type.isType(value); + typeFound = typeof typeFound == 'boolean' && typeFound ? { type: type.id } : typeFound; + + if (typeFound) { + return { + type: type, + attributes: typeFound + }; + } + } + + // If, for any reason, the type is not found it'll return the base one + return { + type: this.getBaseType(), + attributes: value + }; + }, + + + /** + * Returns the base type (last object in the stack) + * @return {Object} + */ + getBaseType: function getBaseType() { + var types = this.getTypes(); + return types[types.length - 1]; + }, + + + /** + * Get types + * @return {Array} + */ + getTypes: function getTypes() { + return this.types; + }, + + + /** + * Get type + * @param {string} id Type ID + * @return {Object} Type definition + */ + getType: function getType(id) { + var types = this.getTypes(); + + for (var i = 0; i < types.length; i++) { + var type = types[i]; + if (type.id === id) { + return type; + } + } + }, + + + /** + * Add new type + * @param {string} id Type ID + * @param {Object} definition Definition of the type. Each definition contains + * `model` (business logic), `view` (presentation logic) + * and `isType` function which recognize the type of the + * passed entity + * addType('my-type', { + * model: {}, + * view: {}, + * isType: (value) => {}, + * }) + */ + addType: function addType(id, definition) { + var type = this.getType(id); + var baseType = this.getBaseType(); + var ModelInst = type ? type.model : baseType.model; + var ViewInst = type ? type.view : baseType.view; + var model = definition.model, + view = definition.view, + isType = definition.isType; + + model = model instanceof Model ? model : ModelInst.extend(model || {}); + view = view instanceof View ? view : ViewInst.extend(view || {}); + + if (type) { + type.model = model; + type.view = view; + type.isType = isType || type.isType; + } else { + definition.id = id; + definition.model = model; + definition.view = view; + definition.isType = isType || function (value) { + if (value && value.type == id) { + return true; + } + }; + this.getTypes().unshift(definition); + } + } +}; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) + +/***/ }), +/* 34 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var Property = __webpack_require__(13); + +module.exports = Property.extend({ + defaults: _extends({}, Property.prototype.defaults, { + // 'background' is a good example where to make a difference + // between detached and not + // + // - NOT detached (default) + // background: url(..) no-repeat center ...; + // - Detached + // background-image: url(); + // background-repeat: repeat; + // ... + detached: 0, + + // Array of sub properties + properties: [], + + // Separator between properties + separator: ' ' + }), + + init: function init() { + var properties = this.get('properties') || []; + var Properties = __webpack_require__(12); + this.set('properties', new Properties(properties)); + this.listenTo(this, 'change:value', this.updateValues); + }, + + + /** + * Clear the value + * @return {this} + */ + clearValue: function clearValue() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this.get('properties').each(function (property) { + return property.clearValue(); + }); + return Property.prototype.clearValue.apply(this, arguments); + }, + + + /** + * Update property values + */ + updateValues: function updateValues() { + var values = this.getFullValue().split(this.get('separator')); + this.get('properties').each(function (property, i) { + var len = values.length; + // Try to get value from a shorthand: + // 11px -> 11px 11px 11px 11xp + // 11px 22px -> 11px 22px 11px 22xp + var value = values[i] || values[i % len + (len != 1 && len % 2 ? 1 : 0)]; + // There some issue with UndoManager + //property.setValue(value, 0, {fromParent: 1}); + }); + }, + + + /** + * Returns default value + * @param {Boolean} defaultProps Force to get defaults from properties + * @return {string} + */ + getDefaultValue: function getDefaultValue(defaultProps) { + var value = this.get('defaults'); + + if (value && !defaultProps) { + return value; + } + + value = ''; + var properties = this.get('properties'); + properties.each(function (prop, index) { + return value += prop.getDefaultValue() + ' '; + }); + return value.trim(); + }, + getFullValue: function getFullValue() { + if (this.get('detached')) { + return ''; + } + + return this.get('properties').getFullValue(); + } +}); + +/***/ }), +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var PropertyCompositeView = __webpack_require__(17); +var LayersView = __webpack_require__(127); + +module.exports = PropertyCompositeView.extend({ + templateInput: function templateInput() { + var pfx = this.pfx; + var ppfx = this.ppfx; + return '\n
    \n \n
    \n
    \n '; + }, + init: function init() { + var model = this.model; + var pfx = this.pfx; + model.set('stackIndex', null); + this.events['click [data-add-layer]'] = 'addLayer'; + this.listenTo(model, 'change:stackIndex', this.indexChanged); + this.listenTo(model, 'updateValue', this.inputValueChanged); + this.delegateEvents(); + }, + clear: function clear(e) { + e && e.stopPropagation(); + this.model.get('layers').reset(); + this.model.clearValue(); + this.targetUpdated(); + }, + + + /** + * Fired when the target is updated. + * With detached mode the component will be always empty as its value + * so we gonna check all props and find if it has any difference + * */ + targetUpdated: function targetUpdated() { + if (!this.model.get('detached')) { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + PropertyCompositeView.prototype.targetUpdated.apply(this, args); + } else { + this.checkVisibility(); + } + + this.refreshLayers(); + }, + + + /** + * Returns the collection of layers + * @return {Collection} + */ + getLayers: function getLayers() { + return this.model.get('layers'); + }, + + + /** + * Triggered when another layer has been selected. + * This allow to move all rendered properties to a new + * selected layer + * @param {Event} + * + * @return {Object} + * */ + indexChanged: function indexChanged(e) { + var model = this.model; + this.getLayers().active(model.get('stackIndex')); + }, + addLayer: function addLayer() { + var model = this.model; + var layers = this.getLayers(); + var properties = model.get('properties').deepClone(); + properties.each(function (property) { + return property.set('value', ''); + }); + var layer = layers.add({ properties: properties }); + + // In detached mode inputValueChanged will add new 'layer value' + // to all subprops + this.inputValueChanged(); + + // This will set subprops with a new default values + model.set('stackIndex', layers.indexOf(layer)); + }, + inputValueChanged: function inputValueChanged() { + var model = this.model; + this.elementUpdated(); + + // If not detached I'll just put all the values from layers to property + // eg. background: layer1Value, layer2Value, layer3Value, ... + if (!model.get('detached')) { + model.set('value', this.getLayerValues()); + } else { + model.get('properties').each(function (prop) { + return prop.trigger('change:value'); + }); + } + }, + + + /** + * There is no need to handle input update by the property itself, + * this will be done by layers + * @private + */ + setValue: function setValue() {}, + + + /** + * Create value by layers + * @return string + * */ + getLayerValues: function getLayerValues() { + return this.getLayers().getFullValue(); + }, + + + /** + * Refresh layers + * */ + refreshLayers: function refreshLayers() { + var layersObj = []; + var model = this.model; + var layers = this.getLayers(); + var detached = model.get('detached'); + + // With detached layers values will be assigned to their properties + if (detached) { + var target = this.getTarget(); + var style = target ? target.getStyle() : {}; + layersObj = layers.getLayersFromStyle(style); + } else { + var value = this.getTargetValue(); + value = value == model.getDefaultValue() ? '' : value; + layersObj = layers.getLayersFromValue(value); + } + + layers.reset(); + layers.add(layersObj); + model.set({ stackIndex: null }, { silent: true }); + }, + onRender: function onRender() { + var self = this; + var model = this.model; + var fieldEl = this.el.querySelector('[data-layers-wrapper]'); + var PropertiesView = __webpack_require__(14); + var propsConfig = { + target: this.target, + propTarget: this.propTarget, + + // Things to do when a single sub-property is changed + onChange: function onChange(el, view, opt) { + var subModel = view.model; + + if (model.get('detached')) { + var subProp = subModel.get('property'); + var values = self.getLayers().getPropertyValues(subProp); + view.updateTargetStyle(values, null, opt); + } else { + model.set('value', model.getFullValue(), opt); + } + } + }; + var layers = new LayersView({ + collection: this.getLayers(), + stackModel: model, + preview: model.get('preview'), + config: this.config, + propsConfig: propsConfig + }).render().el; + + // Will use it to propogate changes + new PropertiesView({ + target: this.target, + collection: this.model.get('properties'), + stackModel: model, + config: this.config, + onChange: propsConfig.onChange, + propTarget: propsConfig.propTarget, + customValue: propsConfig.customValue + }).render(); + + //model.get('properties') + fieldEl.appendChild(layers); + } +}); + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Backbone = __webpack_require__(0); +var $ = Backbone.$; + +module.exports = Backbone.View.extend({ + events: { + change: 'handleChange' + }, + + template: function template() { + return ''; + }, + inputClass: function inputClass() { + return this.ppfx + 'field'; + }, + holderClass: function holderClass() { + return this.ppfx + 'input-holder'; + }, + initialize: function initialize() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var ppfx = opts.ppfx || ''; + this.opts = opts; + this.ppfx = ppfx; + this.em = opts.target || {}; + this.listenTo(this.model, 'change:value', this.handleModelChange); + }, + + + /** + * Fired when the element of the property is updated + */ + elementUpdated: function elementUpdated() { + this.model.trigger('el:change'); + }, + + + /** + * Set value to the input element + * @param {string} value + */ + setValue: function setValue(value) { + var model = this.model; + var val = value || model.get('defaults'); + var input = this.getInputEl(); + input && (input.value = val); + }, + + + /** + * Updates the view when the model is changed + * */ + handleModelChange: function handleModelChange(model, value, opts) { + this.setValue(value, opts); + }, + + + /** + * Handled when the view is changed + */ + handleChange: function handleChange(e) { + e.stopPropagation(); + var value = this.getInputEl().value; + this.model.set({ value: value }, { fromInput: 1 }); + this.elementUpdated(); + }, + + + /** + * Get the input element + * @return {HTMLElement} + */ + getInputEl: function getInputEl() { + if (!this.inputEl) { + var plh = this.model.get('defaults') || ''; + this.inputEl = $(''); + } + + return this.inputEl.get(0); + }, + render: function render() { + var el = this.$el; + el.addClass(this.inputClass()); + el.html(this.template()); + el.find('.' + this.holderClass()).append(this.getInputEl()); + return this; + } +}); + +/***/ }), +/* 37 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = __webpack_require__(5).extend({ + templateInput: function templateInput() { + var pfx = this.pfx; + var ppfx = this.ppfx; + return '\n
    \n
    \n '; + }, + onRender: function onRender() { + var pfx = this.pfx; + var ppfx = this.ppfx; + var itemCls = ppfx + 'radio-item-label'; + var model = this.model; + var prop = model.get('property'); + var options = model.get('list') || model.get('options') || []; + + if (!this.input) { + if (options && options.length) { + var inputStr = ''; + + options.forEach(function (el) { + var cl = el.className ? el.className + ' ' + pfx + 'icon ' + itemCls : ''; + var id = prop + '-' + el.value; + var labelTxt = el.name || el.value; + var titleAttr = el.title ? 'title="' + el.title + '"' : ''; + inputStr += '\n
    \n \n \n
    \n '; + }); + + var inputHld = this.el.querySelector('.' + ppfx + 'field'); + inputHld.innerHTML = '
    ' + inputStr + '
    '; + this.input = inputHld.firstChild; + } + } + }, + getInputValue: function getInputValue() { + var inputChk = this.getCheckedEl(); + return inputChk ? inputChk.value : ''; + }, + getCheckedEl: function getCheckedEl() { + var input = this.getInputEl(); + return input ? input.querySelector('input:checked') : ''; + }, + setValue: function setValue(value) { + var model = this.model; + var val = value || model.get('value') || model.getDefaultValue(); + var input = this.getInputEl(); + var inputIn = input ? input.querySelector('[value="' + val + '"]') : ''; + + if (inputIn) { + inputIn.checked = true; + } else { + var inputChk = this.getCheckedEl(); + inputChk && (inputChk.checked = false); + } + } +}); + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +var _PropertyView = __webpack_require__(5); + +var _PropertyView2 = _interopRequireDefault(_PropertyView); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var $ = _backbone2.default.$; + +module.exports = _PropertyView2.default.extend({ + templateInput: function templateInput() { + var pfx = this.pfx; + var ppfx = this.ppfx; + return '\n
    \n \n
    \n
    \n
    \n
    \n '; + }, + initialize: function initialize() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + _PropertyView2.default.prototype.initialize.apply(this, args); + this.listenTo(this.model, 'change:options', this.updateOptions); + }, + updateOptions: function updateOptions() { + this.input = null; + this.onRender(); + }, + onRender: function onRender() { + var pfx = this.pfx; + var options = this.model.getOptions(); + + if (!this.input) { + var optionsStr = ''; + + options.forEach(function (option) { + var name = option.name || option.value; + var style = option.style ? option.style.replace(/"/g, '"') : ''; + var styleAttr = style ? 'style="' + style + '"' : ''; + var value = option.value.replace(/"/g, '"'); + optionsStr += ''; + }); + + var inputH = this.el.querySelector('#' + pfx + 'input-holder'); + inputH.innerHTML = ''; + this.input = inputH.firstChild; + } + } +}); + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var InputColor = __webpack_require__(40); + +module.exports = __webpack_require__(15).extend({ + setValue: function setValue(value) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + opts = _extends({}, opts, { silent: 1 }); + this.inputInst.setValue(value, opts); + }, + onRender: function onRender() { + if (!this.input) { + var ppfx = this.ppfx; + var inputColor = new InputColor({ + target: this.target, + model: this.model, + ppfx: ppfx + }); + var input = inputColor.render(); + this.el.querySelector('.' + ppfx + 'fields').appendChild(input.el); + this.$input = input.inputEl; + this.$color = input.colorEl; + this.input = this.$input.get(0); + this.inputInst = input; + } + } +}); + +/***/ }), +/* 40 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +var _underscore = __webpack_require__(1); + +var _ColorPicker = __webpack_require__(126); + +var _ColorPicker2 = _interopRequireDefault(_ColorPicker); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var Input = __webpack_require__(36); +var $ = _backbone2.default.$; +(0, _ColorPicker2.default)($); + +module.exports = Input.extend({ + template: function template() { + var ppfx = this.ppfx; + return '\n
    \n
    \n
    \n
    \n
    \n
    \n '; + }, + inputClass: function inputClass() { + var ppfx = this.ppfx; + return ppfx + 'field ' + ppfx + 'field-color'; + }, + holderClass: function holderClass() { + return this.ppfx + 'input-holder'; + }, + + + /** + * Set value to the model + * @param {string} val + * @param {Object} opts + */ + setValue: function setValue(val) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var model = this.model; + var def = model.get('defaults'); + var value = !(0, _underscore.isUndefined)(val) ? val : !(0, _underscore.isUndefined)(def) ? def : ''; + var inputEl = this.getInputEl(); + var colorEl = this.getColorEl(); + var valueClr = value != 'none' ? value : ''; + inputEl.value = value; + colorEl.get(0).style.backgroundColor = valueClr; + + // This prevents from adding multiple thumbs in spectrum + if (opts.fromTarget) { + colorEl.spectrum('set', valueClr); + this.noneColor = value == 'none'; + } + }, + + + /** + * Get the color input element + * @return {HTMLElement} + */ + getColorEl: function getColorEl() { + if (!this.colorEl) { + var self = this; + var ppfx = this.ppfx; + var model = this.model; + + var colorEl = $('
    '); + var cpStyle = colorEl.get(0).style; + var elToAppend = this.em && this.em.config ? this.em.config.el : ''; + var colorPickerConfig = this.em && this.em.getConfig && this.em.getConfig('colorPicker') || {}; + var getColor = function getColor(color) { + var cl = color.getAlpha() == 1 ? color.toHexString() : color.toRgbString(); + return cl.replace(/ /g, ''); + }; + + var changed = 0; + var previousColor = void 0; + this.$el.find('[data-colorp-c]').append(colorEl); + colorEl.spectrum(_extends({ + containerClassName: ppfx + 'one-bg ' + ppfx + 'two-color', + appendTo: elToAppend || 'body', + maxSelectionSize: 8, + showPalette: true, + showAlpha: true, + chooseText: 'Ok', + cancelText: '⨯', + palette: [] + + }, colorPickerConfig, { + move: function move(color) { + var cl = getColor(color); + cpStyle.backgroundColor = cl; + model.setValueFromInput(cl, 0); + }, + change: function change(color) { + changed = 1; + var cl = getColor(color); + cpStyle.backgroundColor = cl; + model.setValueFromInput(cl); + self.noneColor = 0; + }, + show: function show(color) { + changed = 0; + previousColor = getColor(color); + }, + hide: function hide(color) { + if (!changed && previousColor) { + if (self.noneColor) { + previousColor = ''; + } + cpStyle.backgroundColor = previousColor; + colorEl.spectrum('set', previousColor); + model.setValueFromInput(previousColor, 0); + } + } + })); + + this.colorEl = colorEl; + } + return this.colorEl; + }, + render: function render() { + Input.prototype.render.call(this); + // This will make the color input available on render + this.getColorEl(); + return this; + } +}); + +/***/ }), +/* 41 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var PropertyView = __webpack_require__(5); +var $ = _backbone2.default.$; + +module.exports = PropertyView.extend({ + templateInput: function templateInput() { + var pfx = this.pfx; + var ppfx = this.ppfx; + var assetsLabel = this.config.assetsLabel || 'Images'; + return '\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n '; + }, + init: function init() { + var em = this.em; + this.modal = em.get('Modal'); + this.am = em.get('AssetManager'); + this.events['click #' + this.pfx + 'close'] = 'removeFile'; + this.events['click #' + this.pfx + 'images'] = 'openAssetManager'; + this.delegateEvents(); + }, + onRender: function onRender() { + if (!this.$input) { + var plh = this.model.getDefaultValue(); + this.$input = $(''); + } + + if (!this.$preview) { + this.$preview = this.$el.find('#' + this.pfx + 'preview-file'); + } + + if (!this.$previewBox) { + this.$previewBox = this.$el.find('#' + this.pfx + 'preview-box'); + } + + this.setValue(this.componentValue, 0); + }, + setValue: function setValue(value, f) { + PropertyView.prototype.setValue.apply(this, arguments); + this.setPreviewView(value && value != this.model.getDefaultValue()); + this.setPreview(value); + }, + + + /** + * Change visibility of the preview box + * @param bool Visibility + * + * @return void + * */ + setPreviewView: function setPreviewView(v) { + var pv = this.$previewBox; + pv && pv[v ? 'addClass' : 'removeClass'](this.pfx + 'show'); + }, + + + /** + * Spread url + * @param string Url + * + * @return void + * */ + spreadUrl: function spreadUrl(url) { + this.model.set('value', url); + this.setPreviewView(1); + }, + + + /** + * Shows file preview + * @param string Value + * */ + setPreview: function setPreview(value) { + var preview = this.$preview; + value = value && value.indexOf('url(') < 0 ? 'url(' + value + ')' : value; + preview && preview.css('background-image', value); + }, + + + /** @inheritdoc */ + cleanValue: function cleanValue() { + this.setPreviewView(0); + this.model.set({ value: '' }, { silent: true }); + }, + + + /** + * Remove file from input + * + * @return void + * */ + removeFile: function removeFile() { + this.model.set('value', this.model.getDefaultValue()); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + PropertyView.prototype.cleanValue.apply(this, args); + this.setPreviewView(0); + }, + + + /** + * Open dialog for image selecting + * @param {Object} e Event + * + * @return void + * */ + openAssetManager: function openAssetManager(e) { + var that = this; + var em = this.em; + var editor = em ? em.get('Editor') : ''; + + if (editor) { + this.modal.setTitle('Select image'); + this.modal.setContent(this.am.getContainer()); + this.am.setTarget(null); + editor.runCommand('open-assets', { + target: this.model, + onSelect: function onSelect(target) { + that.modal.close(); + that.spreadUrl(target.get('src')); + } + }); + } + } +}); + +/***/ }), +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var Property = __webpack_require__(13); + +module.exports = Property.extend({ + defaults: function defaults() { + return _extends({}, Property.prototype.defaults, { + // Array of options, eg. [{name: 'Label ', value: '100'}] + options: [] + }); + }, + + initialize: function initialize() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + Property.prototype.initialize.apply(this, args); + this.listenTo(this, 'change:options', this.onOptionChange); + }, + onOptionChange: function onOptionChange() { + this.set('list', this.get('options')); + }, + getOptions: function getOptions() { + var _attributes = this.attributes, + options = _attributes.options, + list = _attributes.list; + + return options && options.length ? options : list; + }, + setOptions: function setOptions() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + + this.set('options', opts); + return this; + }, + addOption: function addOption(opt) { + if (opt) { + var opts = this.getOptions(); + this.setOptions([].concat(_toConsumableArray(opts), [opt])); + } + return this; + } +}); + +/***/ }), +/* 43 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _underscore = __webpack_require__(1); + +var Property = __webpack_require__(13); +var InputNumber = __webpack_require__(18); + +module.exports = Property.extend({ + defaults: _extends({}, Property.prototype.defaults, { + // Array of units, eg. ['px', '%'] + units: [], + + // Selected unit, eg. 'px' + unit: '', + + // Integer value steps + step: 1, + + // Minimum value + min: '', + + // Maximum value + max: '' + }), + + init: function init() { + var unit = this.get('unit'); + var units = this.get('units'); + this.input = new InputNumber({ model: this }); + + if (units.length && !unit) { + this.set('unit', units[0]); + } + }, + clearValue: function clearValue() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this.set({ value: undefined, unit: undefined }, opts); + return this; + }, + parseValue: function parseValue(val) { + var parsed = Property.prototype.parseValue.apply(this, arguments); + + var _input$validateInputV = this.input.validateInputValue(parsed.value, { + deepCheck: 1 + }), + value = _input$validateInputV.value, + unit = _input$validateInputV.unit; + + parsed.value = value; + parsed.unit = unit; + return parsed; + }, + getFullValue: function getFullValue() { + var value = this.get('value'); + var unit = this.get('unit'); + value = !(0, _underscore.isUndefined)(value) ? value : ''; + unit = !(0, _underscore.isUndefined)(unit) && value ? unit : ''; + value = '' + value + unit; + return Property.prototype.getFullValue.apply(this, [value]); + } +}); + +/***/ }), +/* 44 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = __webpack_require__(45).extend({ + events: { + 'click [data-toggle=asset-remove]': 'onRemove', + click: 'onClick', + dblclick: 'onDblClick' + }, + + getPreview: function getPreview() { + var pfx = this.pfx; + var src = this.model.get('src'); + return '\n
    \n
    \n '; + }, + getInfo: function getInfo() { + var pfx = this.pfx; + var model = this.model; + var name = model.get('name'); + var width = model.get('width'); + var height = model.get('height'); + var unit = model.get('unitDim'); + var dim = width && height ? width + 'x' + height + unit : ''; + name = name || model.getFilename(); + return '\n
    ' + name + '
    \n
    ' + dim + '
    \n '; + }, + init: function init(o) { + var pfx = this.pfx; + this.className += ' ' + pfx + 'asset-image'; + }, + + + /** + * Triggered when the asset is clicked + * @private + * */ + onClick: function onClick() { + var onClick = this.config.onClick; + var model = this.model; + this.collection.trigger('deselectAll'); + this.$el.addClass(this.pfx + 'highlight'); + + if (typeof onClick === 'function') { + onClick(model); + } else { + this.updateTarget(this.collection.target); + } + }, + + + /** + * Triggered when the asset is double clicked + * @private + * */ + onDblClick: function onDblClick() { + var em = this.em; + var onDblClick = this.config.onDblClick; + var model = this.model; + + if (typeof onDblClick === 'function') { + onDblClick(model); + } else { + this.updateTarget(this.collection.target); + em && em.get('Modal').close(); + } + + var onSelect = this.collection.onSelect; + if (typeof onSelect == 'function') { + onSelect(this.model); + } + }, + + + /** + * Remove asset from collection + * @private + * */ + onRemove: function onRemove(e) { + e.stopImmediatePropagation(); + this.model.collection.remove(this.model); + } +}); + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(_) { + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = _backbone2.default.View.extend({ + initialize: function initialize() { + var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this.options = o; + this.collection = o.collection; + var config = o.config || {}; + this.config = config; + this.pfx = config.stylePrefix || ''; + this.ppfx = config.pStylePrefix || ''; + this.em = config.em; + this.className = this.pfx + 'asset'; + this.listenTo(this.model, 'destroy remove', this.remove); + this.model.view = this; + var init = this.init && this.init.bind(this); + init && init(o); + }, + template: function template() { + var pfx = this.pfx; + return '\n
    \n ' + this.getPreview() + '\n
    \n
    \n ' + this.getInfo() + '\n
    \n
    \n ⨯\n
    \n '; + }, + + + /** + * Update target if exists + * @param {Model} target + * @private + * */ + updateTarget: function updateTarget(target) { + if (target && target.set) { + target.set('attributes', _.clone(target.get('attributes'))); + target.set('src', this.model.get('src')); + } + }, + getPreview: function getPreview() { + return ''; + }, + getInfo: function getInfo() { + return ''; + }, + render: function render() { + var el = this.el; + el.innerHTML = this.template(this, this.model); + el.className = this.className; + return this; + } +}); +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }), +/* 46 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _underscore = __webpack_require__(1); + +var _underscore2 = _interopRequireDefault(_underscore); + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +var _fetch = __webpack_require__(26); + +var _fetch2 = _interopRequireDefault(_fetch); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = _backbone2.default.View.extend({ + template: _underscore2.default.template('\n \n
    <%= title %>
    \n multiple/>\n
    \n \n '), + + events: {}, + + initialize: function initialize() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this.options = opts; + var c = opts.config || {}; + this.config = c; + this.pfx = c.stylePrefix || ''; + this.ppfx = c.pStylePrefix || ''; + this.target = this.options.globalCollection || {}; + this.uploadId = this.pfx + 'uploadFile'; + this.disabled = c.disableUpload !== undefined ? c.disableUpload : !c.upload && !c.embedAsBase64; + this.events['change #' + this.uploadId] = 'uploadFile'; + var uploadFile = c.uploadFile; + + if (uploadFile) { + this.uploadFile = uploadFile.bind(this); + } else if (c.embedAsBase64) { + this.uploadFile = this.constructor.embedAsBase64; + } + + this.delegateEvents(); + }, + + + /** + * Triggered before the upload is started + * @private + */ + onUploadStart: function onUploadStart() { + var em = this.config.em; + em && em.trigger('asset:upload:start'); + }, + + + /** + * Triggered after the upload is ended + * @param {Object|string} res End result + * @private + */ + onUploadEnd: function onUploadEnd(res) { + var em = this.config.em; + em && em.trigger('asset:upload:end', res); + }, + + + /** + * Triggered on upload error + * @param {Object} err Error + * @private + */ + onUploadError: function onUploadError(err) { + var em = this.config.em; + console.error(err); + this.onUploadEnd(err); + em && em.trigger('asset:upload:error', err); + }, + + + /** + * Triggered on upload response + * @param {string} text Response text + * @private + */ + onUploadResponse: function onUploadResponse(text, clb) { + var em = this.config.em; + var config = this.config; + var target = this.target; + var json = typeof text === 'string' ? JSON.parse(text) : text; + em && em.trigger('asset:upload:response', json); + + if (config.autoAdd && target) { + target.add(json.data, { at: 0 }); + } + + this.onUploadEnd(text); + clb && clb(json); + }, + + + /** + * Upload files + * @param {Object} e Event + * @return {Promise} + * @private + * */ + uploadFile: function uploadFile(e, clb) { + var _this = this; + + var files = e.dataTransfer ? e.dataTransfer.files : e.target.files; + var body = new FormData(); + var config = this.config; + var params = config.params; + + for (var i = 0; i < files.length; i++) { + body.append(config.uploadName + '[]', files[i]); + } + + for (var param in params) { + body.append(param, params[param]); + } + + var target = this.target; + var url = config.upload; + var headers = config.headers; + var reqHead = 'X-Requested-With'; + + if (typeof headers[reqHead] == 'undefined') { + headers[reqHead] = 'XMLHttpRequest'; + } + + if (url) { + this.onUploadStart(); + return (0, _fetch2.default)(url, { + method: 'post', + credentials: 'include', + headers: headers, + body: body + }).then(function (res) { + return (res.status / 200 | 0) == 1 ? res.text() : res.text().then(function (text) { + return Promise.reject(text); + }); + }).then(function (text) { + return _this.onUploadResponse(text, clb); + }).catch(function (err) { + return _this.onUploadError(err); + }); + } + }, + + + /** + * Make input file droppable + * @private + * */ + initDrop: function initDrop() { + var that = this; + if (!this.uploadForm) { + this.uploadForm = this.$el.find('form').get(0); + if ('draggable' in this.uploadForm) { + var uploadFile = this.uploadFile; + this.uploadForm.ondragover = function () { + this.className = that.pfx + 'hover'; + return false; + }; + this.uploadForm.ondragleave = function () { + this.className = ''; + return false; + }; + this.uploadForm.ondrop = function (e) { + this.className = ''; + e.preventDefault(); + that.uploadFile(e); + return; + }; + } + } + }, + initDropzone: function initDropzone(ev) { + var _this2 = this; + + var addedCls = 0; + var c = this.config; + var em = ev.model; + var edEl = ev.el; + var editor = em.get('Editor'); + var container = em.get('Config').el; + var frameEl = em.get('Canvas').getBody(); + var ppfx = this.ppfx; + var updatedCls = ppfx + 'dropzone-active'; + var dropzoneCls = ppfx + 'dropzone'; + var cleanEditorElCls = function cleanEditorElCls() { + edEl.className = edEl.className.replace(updatedCls, '').trim(); + addedCls = 0; + }; + var onDragOver = function onDragOver() { + if (!addedCls) { + edEl.className += ' ' + updatedCls; + addedCls = 1; + } + return false; + }; + var onDragLeave = function onDragLeave() { + cleanEditorElCls(); + return false; + }; + var onDrop = function onDrop(e) { + cleanEditorElCls(); + e.preventDefault(); + e.stopPropagation(); + _this2.uploadFile(e); + + if (c.openAssetsOnDrop && editor) { + var target = editor.getSelected(); + editor.runCommand('open-assets', { + target: target, + onSelect: function onSelect() { + editor.Modal.close(); + editor.AssetManager.setTarget(null); + } + }); + } + + return false; + }; + + ev.$el.append('
    ' + c.dropzoneContent + '
    '); + cleanEditorElCls(); + + if ('draggable' in edEl) { + [edEl, frameEl].forEach(function (item) { + item.ondragover = onDragOver; + item.ondragleave = onDragLeave; + item.ondrop = onDrop; + }); + } + }, + render: function render() { + this.$el.html(this.template({ + title: this.config.uploadText, + uploadId: this.uploadId, + disabled: this.disabled, + pfx: this.pfx + })); + this.initDrop(); + this.$el.attr('class', this.pfx + 'file-uploader'); + return this; + } +}, { + embedAsBase64: function embedAsBase64(e, clb) { + var _this3 = this; + + // List files dropped + var files = e.dataTransfer ? e.dataTransfer.files : e.target.files; + var response = { data: [] }; + + // Unlikely, widely supported now + if (!FileReader) { + this.onUploadError(new Error('Unsupported platform, FileReader is not defined')); + return; + } + + var promises = []; + var mimeTypeMatcher = /^(.+)\/(.+)$/; + + var _loop = function _loop(file) { + // For each file a reader (to read the base64 URL) + // and a promise (to track and merge results and errors) + var promise = new Promise(function (resolve, reject) { + var reader = new FileReader(); + reader.addEventListener('load', function (event) { + var type = void 0; + var name = file.name; + + // Try to find the MIME type of the file. + var match = mimeTypeMatcher.exec(file.type); + if (match) { + type = match[1]; // The first part in the MIME, "image" in image/png + } else { + type = file.type; + } + + /* + // Show local video files, http://jsfiddle.net/dsbonev/cCCZ2/embedded/result,js,html,css/ + var URL = window.URL || window.webkitURL + var file = this.files[0] + var type = file.type + var videoNode = document.createElement('video'); + var canPlay = videoNode.canPlayType(type) // can use also for 'audio' types + if (canPlay === '') canPlay = 'no' + var message = 'Can play type "' + type + '": ' + canPlay + var isError = canPlay === 'no' + displayMessage(message, isError) + if (isError) { + return + } + var fileURL = URL.createObjectURL(file) + videoNode.src = fileURL + */ + + // If it's an image, try to find its size + if (type === 'image') { + var data = { + src: reader.result, + name: name, + type: type, + height: 0, + width: 0 + }; + + var image = new Image(); + image.addEventListener('error', function (error) { + reject(error); + }); + image.addEventListener('load', function () { + data.height = image.height; + data.width = image.width; + resolve(data); + }); + image.src = data.src; + } else if (type) { + // Not an image, but has a type + resolve({ + src: reader.result, + name: name, + type: type + }); + } else { + // No type found, resolve with the URL only + resolve(reader.result); + } + }); + reader.addEventListener('error', function (error) { + reject(error); + }); + reader.addEventListener('abort', function (error) { + reject('Aborted'); + }); + + reader.readAsDataURL(file); + }); + + promises.push(promise); + }; + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = files[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var file = _step.value; + + _loop(file); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + Promise.all(promises).then(function (data) { + response.data = data; + _this3.onUploadResponse(response, clb); + }, function (error) { + _this3.onUploadError(error); + }); + } +}); + +/***/ }), +/* 47 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _underscore = __webpack_require__(1); + +var _underscore2 = _interopRequireDefault(_underscore); + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +var _Styleable = __webpack_require__(48); + +var _Styleable2 = _interopRequireDefault(_Styleable); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var Selectors = __webpack_require__(11); + +module.exports = _backbone2.default.Model.extend(_Styleable2.default).extend({ + defaults: { + // Css selectors + selectors: {}, + + // Additional string css selectors + selectorsAdd: '', + + // Css properties style + style: {}, + + // On which device width this rule should be rendered, eg. @media (max-width: 1000px) + mediaText: '', + + // State of the rule, eg: hover | pressed | focused + state: '', + + // Indicates if the rule is stylable + stylable: true, + + // Type of at-rule, eg. 'media', 'font-face', etc. + atRuleType: '', + + // This particolar property is used only on at-rules, like 'page' or + // 'font-face', where the block containes only style declarations + singleAtRule: 0, + + // If true, sets '!important' on all properties + // You can use an array to specify properties to set important + // Used in view + important: 0 + }, + + initialize: function initialize(c) { + var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + this.config = c || {}; + var em = opt.em; + var selectors = this.config.selectors || []; + this.em = em; + + if (em) { + var sm = em.get('SelectorManager'); + var slct = []; + selectors.forEach(function (selector) { + slct.push(sm.add(selector)); + }); + selectors = slct; + } + + this.set('selectors', new Selectors(selectors)); + }, + + + /** + * Returns an at-rule statement if possible, eg. '@media (...)', '@keyframes' + * @return {string} + */ + getAtRule: function getAtRule() { + var type = this.get('atRuleType'); + var condition = this.get('mediaText'); + // Avoid breaks with the last condition + var typeStr = type ? '@' + type : condition ? '@media' : ''; + + return typeStr + (condition && typeStr ? ' ' + condition : ''); + }, + + + /** + * Return selectors fo the rule as a string + * @return {string} + */ + selectorsToString: function selectorsToString() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var result = []; + var state = this.get('state'); + var addSelector = this.get('selectorsAdd'); + var selectors = this.get('selectors').getFullString(); + var stateStr = state ? ':' + state : ''; + selectors && result.push('' + selectors + stateStr); + addSelector && !opts.skipAdd && result.push(addSelector); + return result.join(', '); + }, + + + /** + * Get declaration block + * @param {Object} [opts={}] Options + * @return {string} + */ + getDeclaration: function getDeclaration() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var result = ''; + var selectors = this.selectorsToString(); + var style = this.styleToString(opts); + var singleAtRule = this.get('singleAtRule'); + + if ((selectors || singleAtRule) && style) { + result = singleAtRule ? style : selectors + '{' + style + '}'; + } + + return result; + }, + + + /** + * Returns CSS string of the rule + * @param {Object} [opts={}] Options + * @return {string} + */ + toCSS: function toCSS() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var result = ''; + var atRule = this.getAtRule(); + var block = this.getDeclaration(opts); + block && (result = block); + + if (atRule && result) { + result = atRule + '{' + result + '}'; + } + + return result; + }, + toJSON: function toJSON() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var obj = _backbone2.default.Model.prototype.toJSON.apply(this, args); + + if (this.em.getConfig('avoidDefaults')) { + var defaults = this.defaults; + + (0, _underscore.forEach)(defaults, function (value, key) { + if (obj[key] === value) { + delete obj[key]; + } + }); + + if ((0, _underscore.isEmpty)(obj.selectors)) delete obj.selectors; + if ((0, _underscore.isEmpty)(obj.style)) delete obj.style; + } + + return obj; + }, + + + /** + * Compare the actual model with parameters + * @param {Object} selectors Collection of selectors + * @param {String} state Css rule state + * @param {String} width For which device this style is oriented + * @param {Object} ruleProps Other rule props + * @return {Boolean} + * @private + */ + compare: function compare(selectors, state, width) { + var ruleProps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + var st = state || ''; + var wd = width || ''; + var selectorsAdd = ruleProps.selectorsAdd || ''; + var atRuleType = ruleProps.atRuleType || ''; + var cId = 'cid'; + //var a1 = _.pluck(selectors.models || selectors, cId); + //var a2 = _.pluck(this.get('selectors').models, cId); + if (!(selectors instanceof Array) && !selectors.models) selectors = [selectors]; + var a1 = _underscore2.default.map(selectors.models || selectors, function (model) { + return model.get('name'); + }); + var a2 = _underscore2.default.map(this.get('selectors').models, function (model) { + return model.get('name'); + }); + var f = false; + + if (a1.length !== a2.length) return f; + + for (var i = 0; i < a1.length; i++) { + var re = 0; + for (var j = 0; j < a2.length; j++) { + if (a1[i] === a2[j]) re = 1; + } + if (re === 0) return f; + } + + if (this.get('state') !== st || this.get('mediaText') !== wd || this.get('selectorsAdd') !== selectorsAdd || this.get('atRuleType') !== atRuleType) { + return f; + } + + return true; + } +}); + +/***/ }), +/* 48 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _underscore = __webpack_require__(1); + +var _mixins = __webpack_require__(2); + +var _ParserHtml = __webpack_require__(27); + +var _ParserHtml2 = _interopRequireDefault(_ParserHtml); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var parseStyle = (0, _ParserHtml2.default)().parseStyle; +exports.default = { + parseStyle: parseStyle, + + /** + * To trigger the style change event on models I have to + * pass a new object instance + * @param {Object} prop + * @return {Object} + */ + extendStyle: function extendStyle(prop) { + return _extends({}, this.getStyle(), prop); + }, + + + /** + * Get style object + * @return {Object} + */ + getStyle: function getStyle() { + return _extends({}, this.get('style')); + }, + + + /** + * Set new style object + * @param {Object|string} prop + * @param {Object} opts + * @return {Object} Applied properties + */ + setStyle: function setStyle() { + var _this = this; + + var prop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + if ((0, _underscore.isString)(prop)) { + prop = parseStyle(prop); + } + + var propOrig = this.getStyle(); + var propNew = _extends({}, prop); + this.set('style', propNew, opts); + var diff = (0, _mixins.shallowDiff)(propOrig, propNew); + (0, _underscore.keys)(diff).forEach(function (pr) { + var em = _this.em; + _this.trigger('change:style:' + pr); + if (em) { + em.trigger('styleable:change', _this, pr); + em.trigger('styleable:change:' + pr, _this, pr); + } + }); + + return propNew; + }, + + + /** + * Add style property + * @param {Object|string} prop + * @param {string} value + * @example + * this.addStyle({color: 'red'}); + * this.addStyle('color', 'blue'); + */ + addStyle: function addStyle(prop) { + var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (typeof prop == 'string') { + prop = { + prop: value + }; + } else { + opts = value || {}; + } + + prop = this.extendStyle(prop); + this.setStyle(prop, opts); + }, + + + /** + * Remove style property + * @param {string} prop + */ + removeStyle: function removeStyle(prop) { + var style = this.getStyle(); + delete style[prop]; + this.setStyle(style); + }, + + + /** + * Returns string of style properties + * @param {Object} [opts={}] Options + * @return {String} + */ + styleToString: function styleToString() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var result = []; + var style = this.getStyle(); + + for (var prop in style) { + var imp = opts.important; + var important = (0, _underscore.isArray)(imp) ? imp.indexOf(prop) >= 0 : imp; + var value = '' + style[prop] + (important ? ' !important' : ''); + result.push(prop + ':' + value + ';'); + } + + return result.join(''); + } +}; + +/***/ }), +/* 49 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = __webpack_require__(0).View.extend({ + tagName: 'style', + + initialize: function initialize() { + var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this.config = o.config || {}; + var model = this.model; + var toTrack = 'change:style change:state change:mediaText'; + this.listenTo(model, toTrack, this.render); + this.listenTo(model, 'destroy remove', this.remove); + this.listenTo(model.get('selectors'), 'change', this.render); + }, + render: function render() { + var model = this.model; + var important = model.get('important'); + this.el.innerHTML = this.model.toCSS({ important: important }); + return this; + } +}); + +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Backbone = __webpack_require__(0); + +module.exports = Backbone.View.extend({ + // Default view + itemView: '', + + // Defines the View per type + itemsView: '', + + itemType: 'type', + + initialize: function initialize(opts, config) { + this.config = config || {}; + }, + + + /** + * Add new model to the collection + * @param {Model} model + * @private + * */ + addTo: function addTo(model) { + this.add(model); + }, + + + /** + * Render new model inside the view + * @param {Model} model + * @param {Object} fragment Fragment collection + * @private + * */ + add: function add(model, fragment) { + var frag = fragment || null; + var itemView = this.itemView; + var typeField = model.get(this.itemType); + if (this.itemsView && this.itemsView[typeField]) { + itemView = this.itemsView[typeField]; + } + var view = new itemView({ + model: model, + config: this.config + }, this.config); + var rendered = view.render().el; + + if (frag) frag.appendChild(rendered);else this.$el.append(rendered); + }, + render: function render() { + var frag = document.createDocumentFragment(); + this.$el.empty(); + + if (this.collection.length) this.collection.each(function (model) { + this.add(model, frag); + }, this); + + this.$el.append(frag); + return this; + } +}); + +/***/ }), +/* 51 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _underscore = __webpack_require__(1); + +var Backbone = __webpack_require__(0); + +module.exports = Backbone.Collection.extend({ + initialize: function initialize(models) { + var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + this.listenTo(this, 'add', this.onAdd); + this.config = opt.config; + this.em = opt.em; + + this.model = function (attrs, options) { + var model; + var df = opt.componentTypes; + options.em = opt.em; + options.config = opt.config; + options.componentTypes = df; + + for (var it = 0; it < df.length; it++) { + var dfId = df[it].id; + if (dfId == attrs.type) { + model = df[it].model; + break; + } + } + + if (!model) { + // get the last one + model = df[df.length - 1].model; + } + + return new model(attrs, options); + }; + }, + add: function add(models) { + var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + if (typeof models === 'string') { + var cssc = this.em.get('CssComposer'); + var parsed = this.em.get('Parser').parseHtml(models); + models = parsed.html; + + if (parsed.css && cssc) { + var avoidUpdateStyle = opt.avoidUpdateStyle; + + var added = cssc.addCollection(parsed.css, { + extend: 1, + avoidUpdateStyle: avoidUpdateStyle + }); + } + } + + return Backbone.Collection.prototype.add.apply(this, [models, opt]); + }, + onAdd: function onAdd(model, c, opts) { + var em = this.em; + var style = model.getStyle(); + var avoidInline = em && em.getConfig('avoidInlineStyle'); + + if (!(0, _underscore.isEmpty)(style) && !avoidInline && em && em.get && em.getConfig('forceClass')) { + var name = model.cid; + var rule = em.get('CssComposer').setClassRule(name, style); + model.setStyle({}); + model.addClass(name); + } + } +}); + +/***/ }), +/* 52 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +var _underscore = __webpack_require__(1); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = _backbone2.default.View.extend({ + initialize: function initialize(o) { + this.opts = o || {}; + this.config = o.config || {}; + var coll = this.collection; + this.listenTo(coll, 'add', this.addTo); + this.listenTo(coll, 'reset', this.resetChildren); + this.listenTo(coll, 'remove', this.removeChildren); + }, + removeChildren: function removeChildren(removed) { + var em = this.config.em; + var view = removed.view; + if (!view) return; + view.remove.apply(view); + var children = view.childrenView; + children && children.stopListening(); + em && em.trigger('component:remove', removed); + }, + + + /** + * Add to collection + * @param {Model} model + * @param {Collection} coll + * @param {Object} opts + * @private + * */ + addTo: function addTo(model) { + var coll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var em = this.config.em; + var i = this.collection.indexOf(model); + this.addToCollection(model, null, i); + + if (em && !opts.temporary) { + em.trigger('component:add', model); + } + }, + + + /** + * Add new object to collection + * @param {Object} Model + * @param {Object} Fragment collection + * @param {Integer} Index of append + * + * @return {Object} Object rendered + * @private + * */ + addToCollection: function addToCollection(model, fragmentEl, index) { + if (!this.compView) this.compView = __webpack_require__(3); + var fragment = fragmentEl || null, + viewObject = this.compView; + + var dt = this.opts.componentTypes; + + var type = model.get('type'); + + for (var it = 0; it < dt.length; it++) { + var dtId = dt[it].id; + if (dtId == type) { + viewObject = dt[it].view; + break; + } + } + //viewObject = dt[type] ? dt[type].view : dt.default.view; + + var view = new viewObject({ + model: model, + config: this.config, + componentTypes: dt + }); + var rendered = view.render().el; + if (view.model.get('type') == 'textnode') rendered = document.createTextNode(view.model.get('content')); + + if (fragment) { + fragment.appendChild(rendered); + } else { + var parent = this.parentEl; + var children = parent.childNodes; + + if (!(0, _underscore.isUndefined)(index)) { + var lastIndex = children.length == index; + + // If the added model is the last of collection + // need to change the logic of append + if (lastIndex) { + index--; + } + + // In case the added is new in the collection index will be -1 + if (lastIndex || !children.length) { + parent.appendChild(rendered); + } else { + parent.insertBefore(rendered, children[index]); + } + } else { + parent.appendChild(rendered); + } + } + + return rendered; + }, + resetChildren: function resetChildren() { + var _this = this; + + this.parentEl.innerHTML = ''; + this.collection.each(function (model) { + return _this.addToCollection(model); + }); + }, + render: function render(parent) { + var _this2 = this; + + var el = this.el; + var frag = document.createDocumentFragment(); + this.parentEl = parent || this.el; + this.collection.each(function (model) { + return _this2.addToCollection(model, frag); + }); + el.innerHTML = ''; + el.appendChild(frag); + return this; + } +}); + +/***/ }), +/* 53 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Backbone = __webpack_require__(0); +var ComponentView = __webpack_require__(54); + +module.exports = ComponentView.extend({ + render: function render() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + ComponentView.prototype.render.apply(this, args); + + // I need capturing instead of bubbling as bubbled clicks from other + // children will execute the link event + this.el.addEventListener('click', this.prevDef, true); + + return this; + } +}); + +/***/ }), +/* 54 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _mixins = __webpack_require__(2); + +var ComponentView = __webpack_require__(3); + +module.exports = ComponentView.extend({ + events: { + dblclick: 'enableEditing', + input: 'onInput' + }, + + initialize: function initialize(o) { + ComponentView.prototype.initialize.apply(this, arguments); + this.disableEditing = this.disableEditing.bind(this); + var model = this.model; + var em = this.em; + this.listenTo(model, 'focus active', this.enableEditing); + this.listenTo(model, 'change:content', this.updateContent); + this.rte = em && em.get('RichTextEditor'); + }, + + + /** + * Enable element content editing + * @private + * */ + enableEditing: function enableEditing(e) { + e && e.stopPropagation && e.stopPropagation(); + var rte = this.rte; + + if (this.rteEnabled || !this.model.get('editable')) { + return; + } + + if (rte) { + try { + this.activeRte = rte.enable(this, this.activeRte); + } catch (err) { + console.error(err); + } + } + + this.rteEnabled = 1; + this.toggleEvents(1); + }, + + + /** + * Disable element content editing + * @private + * */ + disableEditing: function disableEditing() { + var model = this.model; + var editable = model.get('editable'); + var rte = this.rte; + + if (rte && editable) { + try { + rte.disable(this, this.activeRte); + } catch (err) { + console.error(err); + } + + var content = this.getChildrenContainer().innerHTML; + var comps = model.get('components'); + comps.length && comps.reset(); + model.set('content', ''); + + // If there is a custom RTE the content is just baked staticly + // inside 'content' + if (rte.customRte) { + // Avoid double content by removing its children components + // and force to trigger change + model.set('content', content); + } else { + var clean = function clean(model) { + model.set({ + editable: 0, + highlightable: 0, + removable: 0, + draggable: 0, + copyable: 0, + toolbar: '' + }); + model.get('components').each(function (model) { + return clean(model); + }); + }; + + // Avoid re-render on reset with silent option + model.trigger('change:content', model); + comps.add(content); + comps.each(function (model) { + return clean(model); + }); + comps.trigger('resetNavigator'); + } + } + + this.rteEnabled = 0; + this.toggleEvents(); + }, + + + /** + * Callback on input event + * @param {Event} e + */ + onInput: function onInput(e) { + var em = this.em; + + // Update toolbars + + em && em.trigger('change:canvasOffset'); + }, + + + /** + * Isolate disable propagation method + * @param {Event} + * @private + * */ + disablePropagation: function disablePropagation(e) { + e.stopPropagation(); + }, + + + /** + * Enable/Disable events + * @param {Boolean} enable + */ + toggleEvents: function toggleEvents(enable) { + var method = enable ? 'on' : 'off'; + var mixins = { on: _mixins.on, off: _mixins.off }; + this.em.setEditing(enable); + + // The ownerDocument is from the frame + var elDocs = [this.el.ownerDocument, document]; + mixins.off(elDocs, 'mousedown', this.disableEditing); + mixins[method](elDocs, 'mousedown', this.disableEditing); + + // Avoid closing edit mode on component click + this.$el.off('mousedown', this.disablePropagation); + this.$el[method]('mousedown', this.disablePropagation); + } +}); + +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _config = __webpack_require__(181); + +var _config2 = _interopRequireDefault(_config); + +var _ItemView = __webpack_require__(56); + +var _ItemView2 = _interopRequireDefault(_ItemView); + +var _underscore = __webpack_require__(1); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = function () { + var em = void 0; + var layers = void 0; + var config = {}; + + return { + name: 'LayerManager', + + init: function init() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + config = _extends({}, _config2.default, opts); + config.stylePrefix = opts.pStylePrefix; + em = config.em; + + return this; + }, + getConfig: function getConfig() { + return config; + }, + onLoad: function onLoad() { + layers = new _ItemView2.default({ + level: 0, + config: config, + opened: config.opened || {}, + model: em.get('DomComponents').getWrapper() + }); + em && em.on('component:selected', this.componentChanged); + this.componentChanged(); + }, + postRender: function postRender() { + var elTo = config.appendTo; + var root = config.root; + root && this.setRoot(root); + + if (elTo) { + var el = (0, _underscore.isElement)(elTo) ? elTo : document.querySelector(elTo); + el.appendChild(this.render()); + } + }, + + + /** + * Set new root for layers + * @param {HTMLElement|Component|String} el Component to be set as the root + * @return {self} + */ + setRoot: function setRoot(el) { + layers.setRoot(el); + return this; + }, + + + /** + * Get the root of layers + * @return {Component} + */ + getRoot: function getRoot() { + return layers.model; + }, + + + /** + * Return the view of layers + * @return {View} + */ + getAll: function getAll() { + return layers; + }, + + + /** + * Triggered when the selected component is changed + * @private + */ + componentChanged: function componentChanged(selected) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + if (opts.fromLayers) return; + var opened = em.get('opened'); + var model = em.getSelected(); + var scroll = config.scrollLayers; + var parent = model && model.collection ? model.collection.parent : null; + for (var cid in opened) { + opened[cid].set('open', 0); + }while (parent) { + parent.set('open', 1); + opened[parent.cid] = parent; + parent = parent.collection ? parent.collection.parent : null; + } + + if (model && scroll) { + var el = model.viewLayer && model.viewLayer.el; + el && el.scrollIntoView(scroll); + } + }, + render: function render() { + return layers.render().el; + } + }; +}; + +/***/ }), +/* 56 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _underscore = __webpack_require__(1); + +var _mixins = __webpack_require__(2); + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var ComponentView = __webpack_require__(3); +var inputProp = 'contentEditable'; +var $ = _backbone2.default.$; +var ItemsView = void 0; + +module.exports = _backbone2.default.View.extend({ + events: { + 'mousedown [data-toggle-move]': 'startSort', + 'click [data-toggle-visible]': 'toggleVisibility', + 'click [data-toggle-select]': 'handleSelect', + 'mouseover [data-toggle-select]': 'handleHover', + 'click [data-toggle-open]': 'toggleOpening', + 'dblclick [data-name]': 'handleEdit', + 'focusout [data-name]': 'handleEditEnd' + }, + + template: function template(model) { + var pfx = this.pfx; + var ppfx = this.ppfx; + var hidable = this.config.hidable; + var count = this.countChildren(model); + var addClass = !count ? this.clsNoChild : ''; + var clsTitle = this.clsTitle + ' ' + addClass; + var clsTitleC = this.clsTitleC + ' ' + ppfx + 'one-bg'; + var clsCaret = this.clsCaret + ' fa fa-chevron-right'; + var clsInput = this.inputNameCls + ' ' + ppfx + 'no-app'; + var level = this.level + 1; + var gut = 30 + level * 10 + 'px'; + var name = model.getName(); + + return '\n ' + (hidable ? '' : '') + '\n
    \n
    \n
    \n \n ' + model.getIcon() + '\n ' + name + '\n
    \n
    \n
    \n
    ' + (count || '') + '
    \n
    \n \n
    \n
    '; + }, + initialize: function initialize() { + var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this.opt = o; + this.level = o.level; + this.config = o.config; + this.em = o.config.em; + this.ppfx = this.em.get('Config').stylePrefix; + this.sorter = o.sorter || ''; + this.pfx = this.config.stylePrefix; + var pfx = this.pfx; + var ppfx = this.ppfx; + var model = this.model; + var components = model.get('components'); + model.set('open', false); + this.listenTo(components, 'remove add change reset', this.checkChildren); + this.listenTo(model, 'change:status', this.updateStatus); + this.listenTo(model, 'change:open', this.updateOpening); + this.listenTo(model, 'change:style:display', this.updateVisibility); + this.className = pfx + 'layer no-select ' + ppfx + 'two-color'; + this.inputNameCls = ppfx + 'layer-name'; + this.clsTitleC = pfx + 'layer-title-c'; + this.clsTitle = pfx + 'layer-title'; + this.clsCaret = pfx + 'layer-caret'; + this.clsCount = pfx + 'layer-count'; + this.clsMove = pfx + 'layer-move'; + this.clsChildren = pfx + 'layer-children'; + this.clsNoChild = pfx + 'layer-no-chld'; + this.$el.data('model', model); + this.$el.data('collection', components); + model.viewLayer = this; + }, + getVisibilityEl: function getVisibilityEl() { + if (!this.eyeEl) { + this.eyeEl = this.$el.children('.' + this.pfx + 'layer-vis'); + } + + return this.eyeEl; + }, + updateVisibility: function updateVisibility() { + var pfx = this.pfx; + var model = this.model; + var hClass = pfx + 'layer-hidden'; + var hideIcon = 'fa-eye-slash'; + var hidden = model.getStyle().display == 'none'; + var method = hidden ? 'addClass' : 'removeClass'; + this.$el[method](hClass); + this.getVisibilityEl()[method](hideIcon); + }, + + + /** + * Toggle visibility + * @param Event + * + * @return void + * */ + toggleVisibility: function toggleVisibility(e) { + e && e.stopPropagation(); + var model = this.model; + var style = model.getStyle(); + var hidden = style.display == 'none'; + + if (hidden) { + delete style.display; + } else { + style.display = 'none'; + } + + model.setStyle(style); + }, + + + /** + * Handle the edit of the component name + */ + handleEdit: function handleEdit(e) { + e && e.stopPropagation(); + var inputEl = this.getInputName(); + inputEl[inputProp] = true; + inputEl.focus(); + }, + + + /** + * Handle with the end of editing of the component name + */ + handleEditEnd: function handleEditEnd(e) { + e && e.stopPropagation(); + var inputEl = this.getInputName(); + var name = inputEl.textContent; + inputEl[inputProp] = false; + this.model.set({ name: name }); + }, + + + /** + * Get the input containing the name of the component + * @return {HTMLElement} + */ + getInputName: function getInputName() { + if (!this.inputName) { + this.inputName = this.el.querySelector('.' + this.inputNameCls); + } + return this.inputName; + }, + + + /** + * Update item opening + * + * @return void + * */ + updateOpening: function updateOpening() { + var opened = this.opt.opened || {}; + var model = this.model; + var chvDown = 'fa-chevron-down'; + + if (model.get('open')) { + this.$el.addClass('open'); + this.getCaret().addClass(chvDown); + opened[model.cid] = model; + } else { + this.$el.removeClass('open'); + this.getCaret().removeClass(chvDown); + delete opened[model.cid]; + } + }, + + + /** + * Toggle item opening + * @param {Object} e + * + * @return void + * */ + toggleOpening: function toggleOpening(e) { + e.stopPropagation(); + + if (!this.model.get('components').length) return; + + this.model.set('open', !this.model.get('open')); + }, + + + /** + * Handle component selection + */ + handleSelect: function handleSelect(e) { + e.stopPropagation(); + var em = this.em, + config = this.config; + + + if (em) { + var model = this.model; + em.setSelected(model, { fromLayers: 1 }); + var scroll = config.scrollCanvas; + scroll && em.get('Canvas').scrollTo(model, scroll); + } + }, + + + /** + * Handle component selection + */ + handleHover: function handleHover(e) { + e.stopPropagation(); + var em = this.em, + config = this.config, + model = this.model; + + em && config.showHover && em.setHovered(model, { fromLayers: 1 }); + }, + + + /** + * Delegate to sorter + * @param Event + * */ + startSort: function startSort(e) { + e.stopPropagation(); + var sorter = this.sorter; + // Right or middel click + if (e.button !== 0) return; + sorter && sorter.startSort(e.target); + }, + + + /** + * Freeze item + * @return void + * */ + freeze: function freeze() { + this.$el.addClass(this.pfx + 'opac50'); + this.model.set('open', 0); + }, + + + /** + * Unfreeze item + * @return void + * */ + unfreeze: function unfreeze() { + this.$el.removeClass(this.pfx + 'opac50'); + }, + + + /** + * Update item on status change + * @param Event + * */ + updateStatus: function updateStatus(e) { + ComponentView.prototype.updateStatus.apply(this, [{ + avoidHover: !this.config.highlightHover + }]); + }, + + + /** + * Check if component is visible + * + * @return bool + * */ + isVisible: function isVisible() { + var css = this.model.get('style'), + pr = css.display; + if (pr && pr == 'none') return; + return 1; + }, + + + /** + * Update item aspect after children changes + * + * @return void + * */ + checkChildren: function checkChildren() { + var model = this.model; + var c = this.countChildren(model); + var pfx = this.pfx; + var noChildCls = this.clsNoChild; + var title = this.$el.children('.' + this.clsTitleC).children('.' + this.clsTitle); + + if (!this.cnt) { + this.cnt = this.$el.children('.' + this.clsCount); + } + + if (c) { + title.removeClass(noChildCls); + this.cnt.html(c); + } else { + title.addClass(noChildCls); + this.cnt.empty(); + model.set('open', 0); + } + }, + + + /** + * Count children inside model + * @param {Object} model + * @return {number} + * @private + */ + countChildren: function countChildren(model) { + var count = 0; + model.get('components').each(function (m) { + var isCountable = this.opt.isCountable; + var hide = this.config.hideTextnode; + if (isCountable && !isCountable(m, hide)) return; + count++; + }, this); + return count; + }, + getCaret: function getCaret() { + if (!this.caret || !this.caret.length) { + var pfx = this.pfx; + this.caret = this.$el.children('.' + this.clsTitleC).find('.' + this.clsCaret); + } + + return this.caret; + }, + setRoot: function setRoot(el) { + el = (0, _underscore.isString)(el) ? this.em.getWrapper().find(el)[0] : el; + var model = (0, _mixins.getModel)(el, $); + if (!model) return; + this.stopListening(); + this.model = model; + this.initialize(this.opt); + this.render(); + }, + render: function render() { + var model = this.model; + var pfx = this.pfx; + var vis = this.isVisible(); + var el = this.$el.empty(); + var level = this.level + 1; + + if ((0, _underscore.isUndefined)(ItemsView)) { + ItemsView = __webpack_require__(182); + } + + var children = new ItemsView({ + collection: model.get('components'), + config: this.config, + sorter: this.sorter, + opened: this.opt.opened, + parent: model, + level: level + }).render().$el; + + if (!this.config.showWrapper && level === 1) { + el.append(children); + } else { + el.html(this.template(model)); + el.find('.' + this.clsChildren).append(children); + } + + if (!model.get('draggable') || !this.config.sortable) { + el.children('.' + this.clsMove).remove(); + } + + !vis && (this.className += ' ' + pfx + 'hide'); + el.attr('class', this.className); + this.updateOpening(); + this.updateStatus(); + this.updateVisibility(); + return this; + } +}); + +/***/ }), +/* 57 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var $ = _backbone2.default.$; + +module.exports = { + /** + * Start select position event + * @param {HTMLElement} trg + * @private + * */ + startSelectPosition: function startSelectPosition(trg, doc) { + this.isPointed = false; + var utils = this.editorModel.get('Utils'); + if (utils && !this.sorter) this.sorter = new utils.Sorter({ + container: this.getCanvasBody(), + placer: this.canvas.getPlacerEl(), + containerSel: '*', + itemSel: '*', + pfx: this.ppfx, + direction: 'a', + document: doc, + wmargin: 1, + nested: 1, + em: this.editorModel, + canvasRelative: 1 + }); + trg && this.sorter.startSort(trg); + }, + + + /** + * Get frame position + * @return {Object} + * @private + */ + getOffsetDim: function getOffsetDim() { + var frameOff = this.offset(this.canvas.getFrameEl()); + var canvasOff = this.offset(this.canvas.getElement()); + var top = frameOff.top - canvasOff.top; + var left = frameOff.left - canvasOff.left; + return { top: top, left: left }; + }, + + + /** + * Stop select position event + * @private + * */ + stopSelectPosition: function stopSelectPosition() { + this.posTargetCollection = null; + this.posIndex = this.posMethod == 'after' && this.cDim.length !== 0 ? this.posIndex + 1 : this.posIndex; //Normalize + if (this.sorter) { + this.sorter.moved = 0; + this.sorter.endMove(); + } + if (this.cDim) { + this.posIsLastEl = this.cDim.length !== 0 && this.posMethod == 'after' && this.posIndex == this.cDim.length; + this.posTargetEl = this.cDim.length === 0 ? $(this.outsideElem) : !this.posIsLastEl && this.cDim[this.posIndex] ? $(this.cDim[this.posIndex][5]).parent() : $(this.outsideElem); + this.posTargetModel = this.posTargetEl.data('model'); + this.posTargetCollection = this.posTargetEl.data('model-comp'); + } + }, + + + /** + * Enabel select position + * @private + */ + enable: function enable() { + this.startSelectPosition(); + }, + + + /** + * Check if the pointer is near to the float component + * @param {number} index + * @param {string} method + * @param {Array} dims + * @return {Boolean} + * @private + * */ + nearFloat: function nearFloat(index, method, dims) { + var i = index || 0; + var m = method || 'before'; + var len = dims.length; + var isLast = len !== 0 && m == 'after' && i == len; + if (len !== 0 && (!isLast && !dims[i][4] || dims[i - 1] && !dims[i - 1][4] || isLast && !dims[i - 1][4])) return 1; + return 0; + }, + run: function run() { + this.enable(); + }, + stop: function stop() { + this.stopSelectPosition(); + this.$wrapper.css('cursor', ''); + this.$wrapper.unbind(); + } +}; + +/***/ }), +/* 58 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _underscore = __webpack_require__(1); + +var _underscore2 = _interopRequireDefault(_underscore); + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var CreateComponent = __webpack_require__(23); + +module.exports = _underscore2.default.extend({}, CreateComponent, { + init: function init() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + CreateComponent.init.apply(this, args); + _underscore2.default.bindAll(this, 'insertComponent'); + this.allowDraw = 0; + }, + + + /** + * Run method + * @private + * */ + run: function run(em, sender, options) { + this.em = em; + this.sender = sender; + this.opt = options || {}; + this.$wr = this.$wrapper; + this.enable(); + }, + enable: function enable() { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + CreateComponent.enable.apply(this, args); + this.$wr.on('click', this.insertComponent); + }, + + + /** + * Start insert event + * @private + * */ + insertComponent: function insertComponent() { + this.$wr.off('click', this.insertComponent); + this.stopSelectPosition(); + var object = this.buildContent(); + this.beforeInsert(object); + var index = this.sorter.lastPos.index; + // By default, collections do not trigger add event, so silent is used + var model = this.create(this.sorter.target, object, index, null, { + silent: false + }); + + if (this.opt.terminateAfterInsert && this.sender) this.sender.set('active', false);else this.enable(); + + if (!model) return; + + this.afterInsert(model, this); + }, + + + /** + * Trigger before insert + * @param {Object} obj + * @private + * */ + beforeInsert: function beforeInsert(obj) {}, + + + /** + * Trigger after insert + * @param {Object} model Model created after insert + * @private + * */ + afterInsert: function afterInsert(model) {}, + + + /** + * Create different object, based on content, to insert inside canvas + * + * @return {Object} + * @private + * */ + buildContent: function buildContent() { + return this.opt.content || {}; + } +}); + +/***/ }), +/* 59 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = _backbone2.default.Model.extend({ + defaults: { + id: '', + label: '', + open: true, + attributes: {} + } +}); + +/***/ }), +/* 60 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _cashDom = __webpack_require__(10); + +var _cashDom2 = _interopRequireDefault(_cashDom); + +var _editor = __webpack_require__(61); + +var _editor2 = _interopRequireDefault(_editor); + +var _underscore = __webpack_require__(1); + +var _polyfills = __webpack_require__(230); + +var _polyfills2 = _interopRequireDefault(_polyfills); + +var _plugin_manager = __webpack_require__(231); + +var _plugin_manager2 = _interopRequireDefault(_plugin_manager); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(0, _polyfills2.default)(); + +module.exports = function () { + var plugins = new _plugin_manager2.default(); + var editors = []; + var defaultConfig = { + // If true renders editor on init + autorender: 1, + + // Array of plugins to init + plugins: [], + + // Custom options for plugins + pluginsOpts: {} + }; + + return { + $: _cashDom2.default, + + editors: editors, + + plugins: plugins, + + // Will be replaced on build + version: '0.14.21', + + /** + * Initializes an editor based on passed options + * @param {Object} config Configuration object + * @param {string|HTMLElement} config.container Selector which indicates where render the editor + * @param {Boolean} [config.autorender=true] If true, auto-render the content + * @param {Array} [config.plugins=[]] Array of plugins to execute on start + * @param {Object} [config.pluginsOpts={}] Custom options for plugins + * @return {Editor} Editor instance + * @example + * var editor = grapesjs.init({ + * container: '#myeditor', + * components: '
    Hello world
    ', + * style: '.hello{color: red}', + * }) + */ + init: function init() { + var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var els = config.container; + if (!els) throw new Error("'container' is required"); + config = _extends({}, defaultConfig, config); + config.el = (0, _underscore.isElement)(els) ? els : document.querySelector(els); + var editor = new _editor2.default(config).init(); + + // Load plugins + config.plugins.forEach(function (pluginId) { + var plugin = plugins.get(pluginId); + + if (plugin) { + plugin(editor, config.pluginsOpts[pluginId] || {}); + } else { + console.warn('Plugin ' + pluginId + ' not found'); + } + }); + + // Execute `onLoad` on modules once all plugins are initialized. + // A plugin might have extended/added some custom type so this + // is a good point to load stuff like components, css rules, etc. + editor.getModel().loadOnStart(); + config.autorender && editor.render(); + editors.push(editor); + + return editor; + } + }; +}(); + +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _cashDom = __webpack_require__(10); + +var _cashDom2 = _interopRequireDefault(_cashDom); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = function (config) { + var c = config || {}, + defaults = __webpack_require__(62), + EditorModel = __webpack_require__(63), + EditorView = __webpack_require__(229); + + for (var name in defaults) { + if (!(name in c)) c[name] = defaults[name]; + } + + c.pStylePrefix = c.stylePrefix; + var em = new EditorModel(c); + var editorView = new EditorView({ + model: em, + config: c + }); + + return { + $: _cashDom2.default, + + /** + * @property {EditorModel} + * @private + */ + editor: em, + + /** + * @property {DomComponents} + * @private + */ + DomComponents: em.get('DomComponents'), + + /** + * @property {LayerManager} + * @private + */ + LayerManager: em.get('LayerManager'), + + /** + * @property {CssComposer} + * @private + */ + CssComposer: em.get('CssComposer'), + + /** + * @property {StorageManager} + * @private + */ + StorageManager: em.get('StorageManager'), + + /** + * @property {AssetManager} + */ + AssetManager: em.get('AssetManager'), + + /** + * @property {BlockManager} + * @private + */ + BlockManager: em.get('BlockManager'), + + /** + * @property {TraitManager} + * @private + */ + TraitManager: em.get('TraitManager'), + + /** + * @property {SelectorManager} + * @private + */ + SelectorManager: em.get('SelectorManager'), + + /** + * @property {CodeManager} + * @private + */ + CodeManager: em.get('CodeManager'), + + /** + * @property {Commands} + * @private + */ + Commands: em.get('Commands'), + + /** + * @property {Keymaps} + * @private + */ + Keymaps: em.get('Keymaps'), + + /** + * @property {Modal} + * @private + */ + Modal: em.get('Modal'), + + /** + * @property {Panels} + * @private + */ + Panels: em.get('Panels'), + + /** + * @property {StyleManager} + * @private + */ + StyleManager: em.get('StyleManager'), + + /** + * @property {Canvas} + * @private + */ + Canvas: em.get('Canvas'), + + /** + * @property {UndoManager} + * @private + */ + UndoManager: em.get('UndoManager'), + + /** + * @property {DeviceManager} + * @private + */ + DeviceManager: em.get('DeviceManager'), + + /** + * @property {RichTextEditor} + * @private + */ + RichTextEditor: em.get('RichTextEditor'), + + /** + * @property {Utils} + * @private + */ + Utils: em.get('Utils'), + + /** + * @property {Utils} + * @private + */ + Config: em.get('Config'), + + /** + * Initialize editor model + * @return {this} + * @private + */ + init: function init() { + em.init(this); + return this; + }, + + + /** + * Returns configuration object + * @param {string} [prop] Property name + * @return {any} Returns the configuration object or + * the value of the specified property + */ + getConfig: function getConfig(prop) { + return em.getConfig(prop); + }, + + + /** + * Returns HTML built inside canvas + * @return {string} HTML string + */ + getHtml: function getHtml(opts) { + return em.getHtml(opts); + }, + + + /** + * Returns CSS built inside canvas + * @param {Object} [opts={}] Options + * @return {string} CSS string + */ + getCss: function getCss(opts) { + return em.getCss(opts); + }, + + + /** + * Returns JS of all components + * @return {string} JS string + */ + getJs: function getJs() { + return em.getJs(); + }, + + + /** + * Returns components in JSON format object + * @return {Object} + */ + getComponents: function getComponents() { + return em.get('DomComponents').getComponents(); + }, + + + /** + * Set components inside editor's canvas. This method overrides actual components + * @param {Array|Object|string} components HTML string or components model + * @return {this} + * @example + * editor.setComponents('
    New component
    '); + * // or + * editor.setComponents({ + * type: 'text', + * classes:['cls'], + * content: 'New component' + * }); + */ + setComponents: function setComponents(components) { + em.setComponents(components); + return this; + }, + + + /** + * Add components + * @param {Array|Object|string} components HTML string or components model + * @param {Object} opts Options + * @param {Boolean} [opts.avoidUpdateStyle=false] If the HTML string contains styles, + * by default, they will be created and, if already exist, updated. When this option + * is true, styles already created will not be updated. + * @return {Model|Array} + * @example + * editor.addComponents('
    New component
    '); + * // or + * editor.addComponents({ + * type: 'text', + * classes:['cls'], + * content: 'New component' + * }); + */ + addComponents: function addComponents(components, opts) { + return this.getComponents().add(components, opts); + }, + + + /** + * Returns style in JSON format object + * @return {Object} + */ + getStyle: function getStyle() { + return em.get('CssComposer').getAll(); + }, + + + /** + * Set style inside editor's canvas. This method overrides actual style + * @param {Array|Object|string} style CSS string or style model + * @return {this} + * @example + * editor.setStyle('.cls{color: red}'); + * //or + * editor.setStyle({ + * selectors: ['cls'] + * style: { color: 'red' } + * }); + */ + setStyle: function setStyle(style) { + em.setStyle(style); + return this; + }, + + + /** + * Returns the last selected component, if there is one + * @return {Model} + */ + getSelected: function getSelected() { + return em.getSelected(); + }, + + + /** + * Returns an array of all selected components + * @return {Array} + */ + getSelectedAll: function getSelectedAll() { + return em.getSelectedAll(); + }, + + + /** + * Get a stylable entity from the selected component. + * If you select a component without classes the entity is the Component + * itself and all changes will go inside its 'style' attribute. Otherwise, + * if the selected component has one or more classes, the function will + * return the corresponding CSS Rule + * @return {Model} + */ + getSelectedToStyle: function getSelectedToStyle() { + var selected = em.getSelected(); + + if (selected) { + return this.StyleManager.getModelToStyle(selected); + } + }, + + + /** + * Select a component + * @param {Component|HTMLElement} el Component to select + * @return {this} + * @example + * // Select dropped block + * editor.on('block:drag:stop', function(model) { + * editor.select(model); + * }); + */ + select: function select(el) { + em.setSelected(el); + return this; + }, + + + /** + * Add component to selection + * @param {Component|HTMLElement|Array} el Component to select + * @return {this} + * @example + * editor.selectAdd(model); + */ + selectAdd: function selectAdd(el) { + em.addSelected(el); + return this; + }, + + + /** + * Remove component from selection + * @param {Component|HTMLElement|Array} el Component to select + * @return {this} + * @example + * editor.selectRemove(model); + */ + selectRemove: function selectRemove(el) { + em.removeSelected(el); + return this; + }, + + + /** + * Toggle component selection + * @param {Component|HTMLElement|Array} el Component to select + * @return {this} + * @example + * editor.selectToggle(model); + */ + selectToggle: function selectToggle(el) { + em.toggleSelected(el); + return this; + }, + + + /** + * Set device to the editor. If the device exists it will + * change the canvas to the proper width + * @param {string} name Name of the device + * @return {this} + * @example + * editor.setDevice('Tablet'); + */ + setDevice: function setDevice(name) { + em.set('device', name); + return this; + }, + + + /** + * Return the actual active device + * @return {string} Device name + * @example + * var device = editor.getDevice(); + * console.log(device); + * // 'Tablet' + */ + getDevice: function getDevice() { + return em.get('device'); + }, + + + /** + * Execute command + * @param {string} id Command ID + * @param {Object} options Custom options + * @return {*} The return is defined by the command + * @example + * editor.runCommand('myCommand', {someValue: 1}); + */ + runCommand: function runCommand(id) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var result = void 0; + var command = em.get('Commands').get(id); + if (command) result = command.callRun(this, options); + + return result; + }, + + + /** + * Stop the command if stop method was provided + * @param {string} id Command ID + * @param {Object} options Custom options + * @return {*} The return is defined by the command + * @example + * editor.stopCommand('myCommand', {someValue: 1}); + */ + stopCommand: function stopCommand(id) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var result = void 0; + var command = em.get('Commands').get(id); + if (command) result = command.callStop(this, options); + + return result; + }, + + + /** + * Store data to the current storage + * @param {Function} clb Callback function + * @return {Object} Stored data + */ + store: function store(clb) { + return em.store(clb); + }, + + + /** + * Load data from the current storage + * @param {Function} clb Callback function + * @return {Object} Stored data + */ + load: function load(clb) { + return em.load(clb); + }, + + + /** + * Returns container element. The one which was indicated as 'container' + * on init method + * @return {HTMLElement} + */ + getContainer: function getContainer() { + return c.el; + }, + + + /** + * Return the count of changes made to the content and not yet stored. + * This count resets at any `store()` + * @return {number} + */ + getDirtyCount: function getDirtyCount() { + return em.getDirtyCount(); + }, + + + /** + * Update editor dimensions and refresh data useful for positioning of tools + * + * This method could be useful when you update, for example, some position + * of the editor element (eg. canvas, panels, etc.) with CSS, where without + * refresh you'll get misleading position of tools (eg. rich text editor, + * component highlighter, etc.) + * + * @private + */ + refresh: function refresh() { + em.refreshCanvas(); + }, + + + /** + * Replace the built-in Rich Text Editor with a custom one. + * @param {Object} obj Custom RTE Interface + * @example + * editor.setCustomRte({ + * // Function for enabling custom RTE + * // el is the HTMLElement of the double clicked Text Component + * // rte is the same instance you have returned the first time you call + * // enable(). This is useful if need to check if the RTE is already enabled so + * // ion this case you'll need to return the RTE and the end of the function + * enable: function(el, rte) { + * rte = new MyCustomRte(el, {}); // this depends on the Custom RTE API + * ... + * return rte; // return the RTE instance + * }, + * + * // Disable the editor, called for example when you unfocus the Text Component + * disable: function(el, rte) { + * rte.blur(); // this depends on the Custom RTE API + * } + * + * // Called when the Text Component is focused again. If you returned the RTE instance + * // from the enable function, the enable won't be called again instead will call focus, + * // in this case to avoid double binding of the editor + * focus: function (el, rte) { + * rte.focus(); // this depends on the Custom RTE API + * } + * }); + */ + setCustomRte: function setCustomRte(obj) { + this.RichTextEditor.customRte = obj; + }, + + + /** + * Attach event + * @param {string} event Event name + * @param {Function} callback Callback function + * @return {this} + */ + on: function on(event, callback) { + return em.on(event, callback); + }, + + + /** + * Detach event + * @param {string} event Event name + * @param {Function} callback Callback function + * @return {this} + */ + off: function off(event, callback) { + return em.off(event, callback); + }, + + + /** + * Trigger event + * @param {string} event Event to trigger + * @return {this} + */ + trigger: function trigger(event) { + return em.trigger.apply(em, arguments); + }, + + + /** + * Destroy the editor + */ + destroy: function destroy() { + return em.destroyAll(); + }, + + + /** + * Returns editor element + * @return {HTMLElement} + * @private + */ + getEl: function getEl() { + return editorView.el; + }, + + + /** + * Returns editor model + * @return {Model} + * @private + */ + getModel: function getModel() { + return em; + }, + + + /** + * Render editor + * @return {HTMLElement} + */ + render: function render() { + var _this = this; + + // Do post render stuff after the iframe is loaded otherwise it'll + // be empty during tests + em.on('loaded', function () { + _this.UndoManager.clear(); + em.get('modules').forEach(function (module) { + module.postRender && module.postRender(editorView); + }); + }); + + editorView.render(); + return editorView.el; + } + }; +}; /** + * Editor class contains the top level API which you'll probably use to custom the editor or extend it with plugins. + * You get the Editor instance on init method + * + * ```js + * var editor = grapesjs.init({...}); + * ``` + * + * # Available Events + * + * ## Components + * * `component:add` - Triggered when a new component is added to the editor, the model is passed as an argument to the callback + * * `component:remove` - Triggered when a component is removed, the model is passed as an argument to the callback + * * `component:clone` - Triggered when a new component is added by a clone command, the model is passed as an argument to the callback + * * `component:update` - Triggered when a component is updated (moved, styled, etc.), the model is passed as an argument to the callback + * * `component:update:{propertyName}` - Listen any property change, the model is passed as an argument to the callback + * * `component:styleUpdate` - Triggered when the style of the component is updated, the model is passed as an argument to the callback + * * `component:styleUpdate:{propertyName}` - Listen for a specific style property change, the model is passed as an argument to the callback + * * `component:selected` - New component selected, the selected model is passed as an argument to the callback + * * `component:deselected` - Component deselected, the deselected model is passed as an argument to the callback + * * `component:toggled` - Component selection changed, toggled model is passed as an argument to the callback + * ## Blocks + * * `block:add` - New block added + * * `block:remove` - Block removed + * * `block:drag:start` - Started dragging block, model of the block is passed as an argument + * * `block:drag` - Dragging block, the block's model and the drag event are passed as arguments + * * `block:drag:stop` - Dragging of the block is stopped. As agruments for the callback you get, the dropped component model (if dropped successfully) and the model of the block + * ## Assets + * * `asset:add` - New asset added + * * `asset:remove` - Asset removed + * * `asset:upload:start` - Before the upload is started + * * `asset:upload:end` - After the upload is ended + * * `asset:upload:error` - On any error in upload, passes the error as an argument + * * `asset:upload:response` - On upload response, passes the result as an argument + * ## Keymaps + * * `keymap:add` - New keymap added. The new keyamp object is passed as an argument + * * `keymap:remove` - Keymap removed. The removed keyamp object is passed as an argument + * * `keymap:emit` - Some keymap emitted, in arguments you get keymapId, shortcutUsed, Event + * * `keymap:emit:{keymapId}` - `keymapId` emitted, in arguments you get keymapId, shortcutUsed, Event + * ## Style Manager + * * `styleManager:change` - Triggered on style property change from new selected component, the view of the property is passed as an argument to the callback + * * `styleManager:change:{propertyName}` - As above but for a specific style property + * ## Storages + * * `storage:start` - Before the storage request is started + * * `storage:start:store` - Before the store request. The object to store is passed as an argumnet (which you can edit) + * * `storage:start:load` - Before the load request. Items to load are passed as an argumnet (which you can edit) + * * `storage:load` - Triggered when something was loaded from the storage, loaded object passed as an argumnet + * * `storage:store` - Triggered when something is stored to the storage, stored object passed as an argumnet + * * `storage:end` - After the storage request is ended + * * `storage:end:store` - After the store request + * * `storage:end:load` - After the load request + * * `storage:error` - On any error on storage request, passes the error as an argument + * * `storage:error:store` - Error on store request, passes the error as an argument + * * `storage:error:load` - Error on load request, passes the error as an argument + * ## Canvas + * * `canvas:dragenter` - When something is dragged inside the canvas, `DataTransfer` instance passed as an argument + * * `canvas:dragover` - When something is dragging on canvas, `DataTransfer` instance passed as an argument + * * `canvas:drop` - Something is dropped in canvas, `DataTransfer` instance and the dropped model are passed as arguments + * * `canvas:dragend` - When a drag operation is ended, `DataTransfer` instance passed as an argument + * * `canvas:dragdata` - On any dataTransfer parse, `DataTransfer` instance and the `result` are passed as arguments. + * By changing `result.content` you're able to customize what is dropped + * ## Selectors + * * `selector:add` - Triggers when a new selector/class is created + * ## RTE + * * `rte:enable` - RTE enabled. The view, on which RTE is enabled, is passed as an argument + * * `rte:disable` - RTE disabled. The view, on which RTE is disabled, is passed as an argument + * ## Commands + * * `run:{commandName}` - Triggered when some command is called to run (eg. editor.runCommand('preview')) + * * `stop:{commandName}` - Triggered when some command is called to stop (eg. editor.stopCommand('preview')) + * * `run:{commandName}:before` - Triggered before the command is called + * * `stop:{commandName}:before` - Triggered before the command is called to stop + * * `abort:{commandName}` - Triggered when the command execution is aborted (`editor.on(`run:preview:before`, opts => opts.abort = 1);`) + * ## General + * * `canvasScroll` - Triggered when the canvas is scrolle + * * `undo` - Undo executed + * * `redo` - Redo executed + * * `load` - When the editor is loaded + * + * @param {Object} config Configurations + * @param {string} config.container='' Selector for the editor container, eg. '#myEditor' + * @param {string|Array} [config.components=''] HTML string or object of components + * @param {string|Array} [config.style=''] CSS string or object of rules + * @param {Boolean} [config.fromElement=false] If true, will fetch HTML and CSS from selected container + * @param {Boolean} [config.undoManager=true] Enable/Disable undo manager + * @param {Boolean} [config.autorender=true] If true renders editor on init + * @param {Boolean} [config.noticeOnUnload=true] Enable/Disable alert message before unload the page + * @param {string} [config.height='900px'] Height for the editor container + * @param {string} [config.width='100%'] Width for the editor container + * @param {Object} [config.storage={}] Storage manager configuration, see the relative documentation + * @param {Object} [config.styleManager={}] Style manager configuration, see the relative documentation + * @param {Object} [config.commands={}] Commands configuration, see the relative documentation + * @param {Object} [config.domComponents={}] Components configuration, see the relative documentation + * @param {Object} [config.panels={}] Panels configuration, see the relative documentation + * @param {Object} [config.showDevices=true] If true render a select of available devices inside style manager panel + * @param {Boolean} [config.keepEmptyTextNodes=false] If false, removes empty text nodes when parsed (unless they contain a space) + * @param {string} [config.defaultCommand='select-comp'] Command to execute when no other command is running + * @param {Array} [config.plugins=[]] Array of plugins to execute on start + * @param {Object} [config.pluginsOpts={}] Custom options for plugins + * @example + * var editor = grapesjs.init({ + * container : '#gjs', + * components: '
    Hello world!
    ', + * style: '.txt-red{color: red}', + * }); + */ + +/***/ }), +/* 62 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = { + // Style prefix + stylePrefix: 'gjs-', + + // HTML string or object of components + components: '', + + // CSS string or object of rules + style: '', + + // If true, will fetch HTML and CSS from selected container + fromElement: 0, + + // Show an alert before unload the page with unsaved changes + noticeOnUnload: true, + + // Show paddings and margins + showOffsets: false, + + // Show paddings and margins on selected component + showOffsetsSelected: false, + + // On creation of a new Component (via object), if the 'style' attribute is not + // empty, all those roles will be moved in its new class + forceClass: true, + + // Height for the editor container + height: '900px', + + // Width for the editor container + width: '100%', + + // By default Grapes injects base CSS into the canvas. For example, it sets body margin to 0 + // and sets a default background color of white. This CSS is desired in most cases. + // use this property if you wish to overwrite the base CSS to your own CSS. This is most + // useful if for example your template is not based off a document with 0 as body margin. + baseCss: '\n * {\n box-sizing: border-box;\n }\n html, body, #wrapper {\n min-height: 100%;\n }\n body {\n margin: 0;\n height: 100%;\n background-color: #fff\n }\n #wrapper {\n overflow: auto;\n overflow-x: hidden;\n }\n\n * ::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.1)\n }\n\n * ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.2)\n }\n\n * ::-webkit-scrollbar {\n width: 10px\n }\n ', + + // CSS that could only be seen (for instance, inside the code viewer) + protectedCss: '* { box-sizing: border-box; } body {margin: 0;}', + + // CSS for the iframe which containing the canvas, useful if you need to custom something inside + // (eg. the style of the selected component) + canvasCss: '', + + // Default command + defaultCommand: 'select-comp', + + // Show a toolbar when the component is selected + showToolbar: 1, + + // Allow script tag importing + allowScripts: 0, + + // If true render a select of available devices + showDevices: 1, + + // When enabled, on device change media rules won't be created + devicePreviewMode: 0, + + // THe condition to use for media queries, eg. 'max-width' + // Comes handy for mobile-first cases + mediaCondition: 'max-width', + + // Starting tag for variable inside scripts in Components + tagVarStart: '{[ ', + + // Ending tag for variable inside scripts in Components + tagVarEnd: ' ]}', + + // When false, removes empty text nodes when parsed, unless they contain a space + keepEmptyTextNodes: 0, + + // Return JS of components inside HTML from 'editor.getHtml()' + jsInHtml: true, + + // Enable native HTML5 drag and drop + nativeDnD: 1, + + // Enable multiple selection + multipleSelection: 1, + + // Show the wrapper component in the final code, eg. in editor.getHtml() + exportWrapper: 0, + + // The wrapper, if visible, will be shown as a `` + wrappesIsBody: 1, + + // Usually when you update the `style` of the component this changes the + // element's `style` attribute. Unfortunately, inline styling doesn't allow + // use of media queries (@media) or even pseudo selectors (eg. :hover). + // When `avoidInlineStyle` is true all styles are inserted inside the css rule + avoidInlineStyle: 0, + + // Avoid default properties from storable JSON data, like `components` and `styles`. + // With this option enabled your data will be smaller (usefull if need to + // save some storage space) + avoidDefaults: 0, + + // (experimental) + // The structure of components is always on the screen but it's not the same + // for style rules. When you delete a component you might leave a lot of styles + // which will never be used again, therefore they might be removed. + // With this option set to true, styles not used from the CSS generator (so in + // any case where `CssGenerator.build` is used) will be removed automatically. + // But be careful, not always leaving the style not used mean you wouldn't + // use it later, but this option comes really handy when deal with big templates. + clearStyles: 0, + + // Dom element + el: '', + + // Configurations for Undo Manager + undoManager: {}, + + //Configurations for Asset Manager + assetManager: {}, + + //Configurations for Canvas + canvas: {}, + + //Configurations for Layers + layers: {}, + + //Configurations for Storage Manager + storageManager: {}, + + //Configurations for Rich Text Editor + rte: {}, + + //Configurations for DomComponents + domComponents: {}, + + //Configurations for Modal Dialog + modal: {}, + + //Configurations for Code Manager + codeManager: {}, + + //Configurations for Panels + panels: {}, + + //Configurations for Commands + commands: {}, + + //Configurations for Css Composer + cssComposer: {}, + + //Configurations for Selector Manager + selectorManager: {}, + + //Configurations for Device Manager + deviceManager: { + devices: [{ + name: 'Desktop', + width: '' + }, { + name: 'Tablet', + width: '768px', + widthMedia: '992px' + }, { + name: 'Mobile landscape', + width: '568px', + widthMedia: '768px' + }, { + name: 'Mobile portrait', + width: '320px', + widthMedia: '480px' + }] + }, + + //Configurations for Style Manager + styleManager: { + sectors: [{ + name: 'General', + open: false, + buildProps: ['float', 'display', 'position', 'top', 'right', 'left', 'bottom'] + }, { + name: 'Dimension', + open: false, + buildProps: ['width', 'height', 'max-width', 'min-height', 'margin', 'padding'] + }, { + name: 'Typography', + open: false, + buildProps: ['font-family', 'font-size', 'font-weight', 'letter-spacing', 'color', 'line-height', 'text-align', 'text-shadow'], + properties: [{ + property: 'text-align', + list: [{ value: 'left', className: 'fa fa-align-left' }, { value: 'center', className: 'fa fa-align-center' }, { value: 'right', className: 'fa fa-align-right' }, { value: 'justify', className: 'fa fa-align-justify' }] + }] + }, { + name: 'Decorations', + open: false, + buildProps: ['border-radius-c', 'background-color', 'border-radius', 'border', 'box-shadow', 'background'] + }, { + name: 'Extra', + open: false, + buildProps: ['transition', 'perspective', 'transform'] + }] + }, + + // Configurations for Block Manager + blockManager: {}, + + // Configurations for Trait Manager + traitManager: {}, + + // Texts + textViewCode: 'Code', + + // Keep unused styles within the editor + keepUnusedStyles: 0 +}; + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _underscore = __webpack_require__(1); + +var _mixins = __webpack_require__(2); + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var deps = [__webpack_require__(65), __webpack_require__(69), __webpack_require__(70), __webpack_require__(73), __webpack_require__(82), __webpack_require__(87), __webpack_require__(90), __webpack_require__(94), __webpack_require__(98), __webpack_require__(110), __webpack_require__(117), __webpack_require__(32), __webpack_require__(134), __webpack_require__(140), __webpack_require__(145), __webpack_require__(152), __webpack_require__(55), __webpack_require__(183), __webpack_require__(190), __webpack_require__(220)]; + +var Backbone = __webpack_require__(0); +var Collection = Backbone.Collection; + +var timedInterval = void 0; + +__webpack_require__(228)({ + Backbone: Backbone, + $: Backbone.$ +}); + +var $ = Backbone.$; + +module.exports = Backbone.Model.extend({ + defaults: function defaults() { + return { + editing: 0, + selected: new Collection(), + clipboard: null, + designerMode: false, + componentHovered: null, + previousModel: null, + changesCount: 0, + storables: [], + modules: [], + toLoad: [], + opened: {}, + device: '' + }; + }, + initialize: function initialize() { + var _this = this; + + var c = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this.config = c; + this.set('Config', c); + this.set('modules', []); + this.set('toLoad', []); + this.set('storables', []); + + if (c.el && c.fromElement) this.config.components = c.el.innerHTML; + this.attrsOrig = c.el ? [].concat(_toConsumableArray(c.el.attributes)).reduce(function (res, next) { + res[next.nodeName] = next.nodeValue; + return res; + }, {}) : ''; + + // Load modules + deps.forEach(function (name) { + return _this.loadModule(name); + }); + this.on('change:componentHovered', this.componentHovered, this); + this.on('change:changesCount', this.updateChanges, this); + + // Deprecations + [{ from: 'change:selectedComponent', to: 'component:toggled' }].forEach(function (event) { + var eventFrom = event.from; + var eventTo = event.to; + _this.listenTo(_this, eventFrom, function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + _this.trigger.apply(_this, [eventTo].concat(args)); + console.warn('The event \'' + eventFrom + '\' is deprecated, replace it with \'' + eventTo + '\''); + }); + }); + }, + + + /** + * Get configurations + * @param {string} [prop] Property name + * @return {any} Returns the configuration object or + * the value of the specified property + */ + getConfig: function getConfig(prop) { + var config = this.config; + return (0, _underscore.isUndefined)(prop) ? config : config[prop]; + }, + + + /** + * Should be called after all modules and plugins are loaded + * @param {Function} clb + * @private + */ + loadOnStart: function loadOnStart() { + var _this2 = this; + + var clb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + + var sm = this.get('StorageManager'); + + // Generally, with `onLoad`, the module will try to load the data from + // its configurations + this.get('toLoad').forEach(function (module) { + module.onLoad(); + }); + + // Stuff to do post load + var postLoad = function postLoad() { + var modules = _this2.get('modules'); + modules.forEach(function (module) { + return module.postLoad && module.postLoad(_this2); + }); + clb && clb(); + }; + + if (sm && sm.canAutoload()) { + this.load(postLoad); + } else { + postLoad(); + } + }, + + + /** + * Set the alert before unload in case it's requested + * and there are unsaved changes + * @private + */ + updateChanges: function updateChanges() { + var stm = this.get('StorageManager'); + var changes = this.get('changesCount'); + + if (this.config.noticeOnUnload && changes) { + window.onbeforeunload = function (e) { + return 1; + }; + } else { + window.onbeforeunload = null; + } + + if (stm.isAutosave() && changes >= stm.getStepsBeforeSave()) { + this.store(); + } + }, + + + /** + * Load generic module + * @param {String} moduleName Module name + * @return {this} + * @private + */ + loadModule: function loadModule(moduleName) { + var c = this.config; + var Mod = new moduleName(); + var name = Mod.name.charAt(0).toLowerCase() + Mod.name.slice(1); + var cfg = c[name] || c[Mod.name] || {}; + cfg.pStylePrefix = c.pStylePrefix || ''; + + // Check if module is storable + var sm = this.get('StorageManager'); + + if (Mod.storageKey && Mod.store && Mod.load && sm) { + cfg.stm = sm; + var storables = this.get('storables'); + storables.push(Mod); + this.set('storables', storables); + } + + cfg.em = this; + Mod.init(_extends({}, cfg)); + + // Bind the module to the editor model if public + !Mod.private && this.set(Mod.name, Mod); + Mod.onLoad && this.get('toLoad').push(Mod); + this.get('modules').push(Mod); + return this; + }, + + + /** + * Initialize editor model and set editor instance + * @param {Editor} editor Editor instance + * @return {this} + * @private + */ + init: function init(editor) { + this.set('Editor', editor); + }, + getEditor: function getEditor() { + return this.get('Editor'); + }, + + + /** + * This method handles updates on the editor and tries to store them + * if requested and if the changesCount is exceeded + * @param {Object} model + * @param {any} val Value + * @param {Object} opt Options + * @private + * */ + handleUpdates: function handleUpdates(model, val) { + var _this3 = this; + + var opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + // Component has been added temporarily - do not update storage or record changes + if (opt.temporary) { + return; + } + + timedInterval && clearInterval(timedInterval); + timedInterval = setTimeout(function () { + if (!opt.avoidStore) { + _this3.set('changesCount', _this3.get('changesCount') + 1, opt); + } + }, 0); + }, + + + /** + * Callback on component hover + * @param {Object} Model + * @param {Mixed} New value + * @param {Object} Options + * @private + * */ + componentHovered: function componentHovered(editor, component, options) { + var prev = this.previous('componentHovered'); + prev && this.trigger('component:unhovered', prev, options); + component && this.trigger('component:hovered', component, options); + }, + + + /** + * Returns model of the selected component + * @return {Component|null} + * @private + */ + getSelected: function getSelected() { + return this.get('selected').last(); + }, + + + /** + * Returns an array of all selected components + * @return {Array} + * @private + */ + getSelectedAll: function getSelectedAll() { + return this.get('selected').models; + }, + + + /** + * Select a component + * @param {Component|HTMLElement} el Component to select + * @param {Object} [opts={}] Options, optional + * @private + */ + setSelected: function setSelected(el) { + var _this4 = this; + + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var multiple = (0, _underscore.isArray)(el); + var els = multiple ? el : [el]; + var selected = this.get('selected'); + + // If an array is passed remove all selected + // expect those yet to be selected + multiple && this.removeSelected(selected.filter(function (s) { + return !(0, _underscore.contains)(els, s); + })); + + els.forEach(function (el) { + var model = (0, _mixins.getModel)(el, $); + if (model && !model.get('selectable')) return; + !multiple && _this4.removeSelected(selected.filter(function (s) { + return s !== model; + })); + _this4.addSelected(model, opts); + }); + }, + + + /** + * Add component to selection + * @param {Component|HTMLElement} el Component to select + * @param {Object} [opts={}] Options, optional + * @private + */ + addSelected: function addSelected(el) { + var _this5 = this; + + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var model = (0, _mixins.getModel)(el, $); + var models = (0, _underscore.isArray)(model) ? model : [model]; + + models.forEach(function (model) { + if (model && !model.get('selectable')) return; + _this5.get('selected').push(model, opts); + }); + }, + + + /** + * Remove component from selection + * @param {Component|HTMLElement} el Component to select + * @param {Object} [opts={}] Options, optional + * @private + */ + removeSelected: function removeSelected(el) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + this.get('selected').remove((0, _mixins.getModel)(el, $), opts); + }, + + + /** + * Toggle component selection + * @param {Component|HTMLElement} el Component to select + * @param {Object} [opts={}] Options, optional + * @private + */ + toggleSelected: function toggleSelected(el) { + var _this6 = this; + + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var model = (0, _mixins.getModel)(el, $); + var models = (0, _underscore.isArray)(model) ? model : [model]; + + models.forEach(function (model) { + if (_this6.get('selected').contains(model)) { + _this6.removeSelected(model, opts); + } else { + _this6.addSelected(model, opts); + } + }); + }, + + + /** + * Hover a component + * @param {Component|HTMLElement} el Component to select + * @param {Object} [opts={}] Options, optional + * @private + */ + setHovered: function setHovered(el) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var model = (0, _mixins.getModel)(el, $); + if (model && !model.get('hoverable')) return; + opts.forceChange && this.set('componentHovered', ''); + this.set('componentHovered', model, opts); + }, + + + /** + * Set components inside editor's canvas. This method overrides actual components + * @param {Object|string} components HTML string or components model + * @return {this} + * @private + */ + setComponents: function setComponents(components) { + return this.get('DomComponents').setComponents(components); + }, + + + /** + * Returns components model from the editor's canvas + * @return {Components} + * @private + */ + getComponents: function getComponents() { + var cmp = this.get('DomComponents'); + var cm = this.get('CodeManager'); + + if (!cmp || !cm) return; + + var wrp = cmp.getComponents(); + return cm.getCode(wrp, 'json'); + }, + + + /** + * Set style inside editor's canvas. This method overrides actual style + * @param {Object|string} style CSS string or style model + * @return {this} + * @private + */ + setStyle: function setStyle(style) { + var rules = this.get('CssComposer').getAll(); + for (var i = 0, len = rules.length; i < len; i++) { + rules.pop(); + }rules.add(style); + return this; + }, + + + /** + * Returns rules/style model from the editor's canvas + * @return {Rules} + * @private + */ + getStyle: function getStyle() { + return this.get('CssComposer').getAll(); + }, + + + /** + * Returns HTML built inside canvas + * @return {string} HTML string + * @private + */ + getHtml: function getHtml() { + var config = this.config; + var exportWrapper = config.exportWrapper; + var wrappesIsBody = config.wrappesIsBody; + var js = config.jsInHtml ? this.getJs() : ''; + var wrp = this.get('DomComponents').getComponent(); + var html = this.get('CodeManager').getCode(wrp, 'html', { + exportWrapper: exportWrapper, + wrappesIsBody: wrappesIsBody + }); + html += js ? '' : ''; + return html; + }, + + + /** + * Returns CSS built inside canvas + * @param {Object} [opts={}] Options + * @return {string} CSS string + * @private + */ + getCss: function getCss() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var config = this.config; + var wrappesIsBody = config.wrappesIsBody; + var avoidProt = opts.avoidProtected; + var keepUnusedStyles = !(0, _underscore.isUndefined)(opts.keepUnusedStyles) ? opts.keepUnusedStyles : config.keepUnusedStyles; + var cssc = this.get('CssComposer'); + var wrp = this.get('DomComponents').getComponent(); + var protCss = !avoidProt ? config.protectedCss : ''; + + return protCss + this.get('CodeManager').getCode(wrp, 'css', { + cssc: cssc, + wrappesIsBody: wrappesIsBody, + keepUnusedStyles: keepUnusedStyles + }); + }, + + + /** + * Returns JS of all components + * @return {string} JS string + * @private + */ + getJs: function getJs() { + var wrp = this.get('DomComponents').getWrapper(); + return this.get('CodeManager').getCode(wrp, 'js').trim(); + }, + + + /** + * Store data to the current storage + * @param {Function} clb Callback function + * @return {Object} Stored data + * @private + */ + store: function store(clb) { + var _this7 = this; + + var sm = this.get('StorageManager'); + var store = {}; + if (!sm) return; + + // Fetch what to store + this.get('storables').forEach(function (m) { + var obj = m.store(1); + for (var el in obj) { + store[el] = obj[el]; + } + }); + + sm.store(store, function (res) { + clb && clb(res); + _this7.set('changesCount', 0); + _this7.trigger('storage:store', store); + }); + + return store; + }, + + + /** + * Load data from the current storage + * @param {Function} clb Callback function + * @private + */ + load: function load() { + var _this8 = this; + + var clb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + + this.getCacheLoad(1, function (res) { + _this8.get('storables').forEach(function (module) { + return module.load(res); + }); + clb && clb(res); + }); + }, + + + /** + * Returns cached load + * @param {Boolean} force Force to reload + * @param {Function} clb Callback function + * @return {Object} + * @private + */ + getCacheLoad: function getCacheLoad(force, clb) { + var _this9 = this; + + var f = force ? 1 : 0; + if (this.cacheLoad && !f) return this.cacheLoad; + var sm = this.get('StorageManager'); + var load = []; + + if (!sm) return {}; + + this.get('storables').forEach(function (m) { + var key = m.storageKey; + key = typeof key === 'function' ? key() : key; + var keys = key instanceof Array ? key : [key]; + keys.forEach(function (k) { + load.push(k); + }); + }); + + sm.load(load, function (res) { + _this9.cacheLoad = res; + clb && clb(res); + setTimeout(function () { + return _this9.trigger('storage:load', res); + }, 0); + }); + }, + + + /** + * Returns device model by name + * @return {Device|null} + * @private + */ + getDeviceModel: function getDeviceModel() { + var name = this.get('device'); + return this.get('DeviceManager').get(name); + }, + + + /** + * Run default command if setted + * @param {Object} [opts={}] Options + * @private + */ + runDefault: function runDefault() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var command = this.get('Commands').get(this.config.defaultCommand); + if (!command || this.defaultRunning) return; + command.stop(this, this, opts); + command.run(this, this, opts); + this.defaultRunning = 1; + }, + + + /** + * Stop default command + * @param {Object} [opts={}] Options + * @private + */ + stopDefault: function stopDefault() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var command = this.get('Commands').get(this.config.defaultCommand); + if (!command) return; + command.stop(this, this, opts); + this.defaultRunning = 0; + }, + + + /** + * Update canvas dimensions and refresh data useful for tools positioning + * @private + */ + refreshCanvas: function refreshCanvas() { + this.set('canvasOffset', this.get('Canvas').getOffset()); + }, + + + /** + * Clear all selected stuf inside the window, sometimes is useful to call before + * doing some dragging opearation + * @param {Window} win If not passed the current one will be used + * @private + */ + clearSelection: function clearSelection(win) { + var w = win || window; + w.getSelection().removeAllRanges(); + }, + + + /** + * Get the current media text + * @return {string} + */ + getCurrentMedia: function getCurrentMedia() { + var config = this.config; + var device = this.getDeviceModel(); + var condition = config.mediaCondition; + var preview = config.devicePreviewMode; + var width = device && device.get('widthMedia'); + return device && width && !preview ? '(' + condition + ': ' + width + ')' : ''; + }, + + + /** + * Return the component wrapper + * @return {Component} + */ + getWrapper: function getWrapper() { + return this.get('DomComponents').getWrapper(); + }, + + + /** + * Return the count of changes made to the content and not yet stored. + * This count resets at any `store()` + * @return {number} + */ + getDirtyCount: function getDirtyCount() { + return this.get('changesCount'); + }, + + + /** + * Destroy editor + */ + destroyAll: function destroyAll() { + var _attributes = this.attributes, + DomComponents = _attributes.DomComponents, + CssComposer = _attributes.CssComposer, + UndoManager = _attributes.UndoManager, + Panels = _attributes.Panels, + Canvas = _attributes.Canvas; + + DomComponents.clear(); + CssComposer.clear(); + UndoManager.clear().removeAll(); + Panels.getPanels().reset(); + Canvas.getCanvasView().remove(); + this.view.remove(); + this.stopListening(); + $(this.config.el).empty().attr(this.attrsOrig); + }, + setEditing: function setEditing(value) { + this.set('editing', value); + return this; + }, + isEditing: function isEditing() { + return !!this.get('editing'); + }, + + + /** + * Set/get data from the HTMLElement + * @param {HTMLElement} el + * @param {string} name Data name + * @param {any} value Date value + * @return {any} + * @private + */ + data: function data(el, name, value) { + var varName = '_gjs-data'; + + if (!el[varName]) { + el[varName] = {}; + } + + if ((0, _underscore.isUndefined)(value)) { + return el[varName][name]; + } else { + el[varName][name] = value; + } + } +}); + +/***/ }), +/* 64 */ +/***/ (function(module, exports) { + +module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + if(!module.children) module.children = []; + Object.defineProperty(module, "loaded", { + enumerable: true, + get: function() { + return module.l; + } + }); + Object.defineProperty(module, "id", { + enumerable: true, + get: function() { + return module.i; + } + }); + module.webpackPolyfill = 1; + } + return module; +}; + + +/***/ }), +/* 65 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = function () { + var Sorter = __webpack_require__(66); + var Resizer = __webpack_require__(67); + var Dragger = __webpack_require__(68); + + return { + /** + * Name of the module + * @type {String} + * @private + */ + name: 'Utils', + + /** + * Initialize module + */ + init: function init() { + return this; + }, + + + Sorter: Sorter, + Resizer: Resizer, + Dragger: Dragger + }; +}; + +/***/ }), +/* 66 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(_) { + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +var _underscore = __webpack_require__(1); + +var _mixins = __webpack_require__(2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var $ = _backbone2.default.$; + +module.exports = _backbone2.default.View.extend({ + initialize: function initialize(opt) { + this.opt = opt || {}; + _.bindAll(this, 'startSort', 'onMove', 'endMove', 'rollback', 'udpateOffset', 'moveDragHelper'); + var o = opt || {}; + this.elT = 0; + this.elL = 0; + this.borderOffset = o.borderOffset || 10; + + var el = o.container; + this.el = typeof el === 'string' ? document.querySelector(el) : el; + this.$el = $(this.el); + + this.containerSel = o.containerSel || 'div'; + this.itemSel = o.itemSel || 'div'; + this.draggable = o.draggable || true; + this.nested = o.nested || 0; + this.pfx = o.pfx || ''; + this.ppfx = o.ppfx || ''; + this.freezeClass = o.freezeClass || this.pfx + 'freezed'; + this.onStart = o.onStart || ''; + this.onEndMove = o.onEndMove || ''; + this.direction = o.direction || 'v'; // v (vertical), h (horizontal), a (auto) + this.onMoveClb = o.onMove || ''; + this.relative = o.relative || 0; + this.ignoreViewChildren = o.ignoreViewChildren || 0; + this.ignoreModels = o.ignoreModels || 0; + this.plh = o.placer || ''; + // Frame offset + this.wmargin = o.wmargin || 0; + this.offTop = o.offsetTop || 0; + this.offLeft = o.offsetLeft || 0; + this.document = o.document || document; + this.$document = $(this.document); + this.dropContent = null; + this.em = o.em || ''; + this.dragHelper = null; + this.canvasRelative = o.canvasRelative || 0; + this.selectOnEnd = !o.avoidSelectOnEnd; + + if (this.em && this.em.on) { + this.em.on('change:canvasOffset', this.udpateOffset); + this.udpateOffset(); + } + }, + getContainerEl: function getContainerEl() { + if (!this.el) { + var el = this.opt.container; + this.el = typeof el === 'string' ? document.querySelector(el) : el; + this.$el = $(this.el); + } + return this.el; + }, + getDocuments: function getDocuments() { + var em = this.em; + var canvasDoc = em && em.get('Canvas').getBody().ownerDocument; + var docs = [document]; + canvasDoc && docs.push(canvasDoc); + return docs; + }, + + + /** + * Triggered when the offset of the editro is changed + */ + udpateOffset: function udpateOffset() { + var offset = this.em.get('canvasOffset'); + this.offTop = offset.top; + this.offLeft = offset.left; + }, + + + /** + * Set content to drop + * @param {String|Object} content + */ + setDropContent: function setDropContent(content) { + this.dropContent = content; + }, + + + /** + * Toggle cursor while sorting + * @param {Boolean} active + */ + toggleSortCursor: function toggleSortCursor(active) { + var em = this.em; + var body = document.body; + var pfx = this.ppfx || this.pfx; + var sortCls = pfx + 'grabbing'; + var emBody = em ? em.get('Canvas').getBody() : ''; + + // Avoid updating body className as it causes a huge repaint + // Noticeable with "fast" drag of blocks + if (active) { + em && em.get('Canvas').startAutoscroll(); + //body.className += ' ' + sortCls; + //if (em) emBody.className += ' ' + sortCls; + } else { + em && em.get('Canvas').stopAutoscroll(); + //body.className = body.className.replace(sortCls, '').trim(); + //if(em) emBody.className = emBody.className.replace(sortCls, '').trim(); + } + }, + + + /** + * Set drag helper + * @param {HTMLElement} el + * @param {Event} event + */ + setDragHelper: function setDragHelper(el, event) { + var ev = event || ''; + var clonedEl = el.cloneNode(1); + var rect = el.getBoundingClientRect(); + var computed = getComputedStyle(el); + var style = ''; + + for (var i = 0; i < computed.length; i++) { + var prop = computed[i]; + style += prop + ':' + computed.getPropertyValue(prop) + ';'; + } + + document.body.appendChild(clonedEl); + clonedEl.className += ' ' + this.pfx + 'bdrag'; + clonedEl.setAttribute('style', style); + this.dragHelper = clonedEl; + clonedEl.style.width = rect.width + 'px'; + clonedEl.style.height = rect.height + 'px'; + ev && this.moveDragHelper(ev); + + // Listen mouse move events + if (this.em) { + $(this.em.get('Canvas').getBody().ownerDocument).off('mousemove', this.moveDragHelper).on('mousemove', this.moveDragHelper); + } + $(document).off('mousemove', this.moveDragHelper).on('mousemove', this.moveDragHelper); + }, + + + /** + * Update the position of the helper + * @param {Event} e + */ + moveDragHelper: function moveDragHelper(e) { + var doc = e.target.ownerDocument; + + if (!this.dragHelper || !doc) { + return; + } + + var posY = e.pageY; + var posX = e.pageX; + var addTop = 0; + var addLeft = 0; + var window = doc.defaultView || doc.parentWindow; + var frame = window.frameElement; + var dragHelperStyle = this.dragHelper.style; + + // If frame is present that means mouse has moved over the editor's canvas, + // which is rendered inside the iframe and the mouse move event comes from + // the iframe, not the parent window. Mouse position relative to the frame's + // parent window needs to account for the frame's position relative to the + // parent window. + if (frame) { + var frameRect = frame.getBoundingClientRect(); + addTop = frameRect.top + document.documentElement.scrollTop; + addLeft = frameRect.left + document.documentElement.scrollLeft; + posY = e.clientY; + posX = e.clientX; + } + + dragHelperStyle.top = posY + addTop + 'px'; + dragHelperStyle.left = posX + addLeft + 'px'; + }, + + + /** + * Returns true if the element matches with selector + * @param {Element} el + * @param {String} selector + * @return {Boolean} + */ + matches: function matches(el, selector, useBody) { + return _mixins.matches.call(el, selector); + }, + + + /** + * Closest parent + * @param {Element} el + * @param {String} selector + * @return {Element|null} + */ + closest: function closest(el, selector) { + if (!el) return; + var elem = el.parentNode; + while (elem && elem.nodeType === 1) { + if (this.matches(elem, selector)) return elem; + elem = elem.parentNode; + } + return null; + }, + + + /** + * Get the offset of the element + * @param {HTMLElement} el + * @return {Object} + */ + offset: function offset(el) { + var rect = el.getBoundingClientRect(); + return { + top: rect.top + document.body.scrollTop, + left: rect.left + document.body.scrollLeft + }; + }, + + + /** + * Create placeholder + * @return {HTMLElement} + */ + createPlaceholder: function createPlaceholder() { + var pfx = this.pfx; + var el = document.createElement('div'); + var ins = document.createElement('div'); + el.className = pfx + 'placeholder'; + el.style.display = 'none'; + el.style['pointer-events'] = 'none'; + ins.className = pfx + 'placeholder-int'; + el.appendChild(ins); + return el; + }, + + + /** + * Picking component to move + * @param {HTMLElement} src + * */ + startSort: function startSort(src) { + var em = this.em; + var itemSel = this.itemSel; + var contSel = this.containerSel; + var container = this.getContainerEl(); + var docs = this.getDocuments(); + var onStart = this.onStart; + var srcModel = void 0; + var plh = this.plh; + this.dropModel = null; + this.moved = 0; + + // Check if the start element is a valid one, if not get the + // closest valid one + if (src && !this.matches(src, itemSel + ', ' + contSel)) { + src = this.closest(src, itemSel); + } + + this.eV = src; + + // Create placeholder if not yet exists + if (!plh) { + plh = this.createPlaceholder(); + container.appendChild(plh); + this.plh = plh; + } + + if (src) { + srcModel = this.getSourceModel(src); + srcModel && srcModel.set && srcModel.set('status', 'freezed'); + } + + (0, _mixins.on)(container, 'mousemove dragover', this.onMove); + (0, _mixins.on)(docs, 'mouseup dragend', this.endMove); + (0, _mixins.on)(docs, 'keydown', this.rollback); + onStart && onStart(); + + // Avoid strange effects on dragging + em && em.clearSelection(); + this.toggleSortCursor(1); + + em && em.trigger('sorter:drag:start', src, srcModel); + }, + + + /** + * Get the model from HTMLElement target + * @return {Model|null} + */ + getTargetModel: function getTargetModel(el) { + var elem = el || this.target; + return $(elem).data('model'); + }, + + + /** + * Get the model of the current source element (element to drag) + * @return {Model} + */ + getSourceModel: function getSourceModel(source) { + var src = source || this.eV; + var dropContent = this.dropContent; + var dropModel = this.dropModel; + var em = this.em; + + if (dropContent && em) { + if (!dropModel) { + var comps = em.get('DomComponents').getComponents(); + var opts = { + avoidStore: 1, + avoidChildren: 1, + avoidUpdateStyle: 1, + temporary: 1 + }; + var tempModel = comps.add(dropContent, opts); + dropModel = comps.remove(tempModel, opts); + this.dropModel = dropModel instanceof Array ? dropModel[0] : dropModel; + } + return dropModel; + } + + if (src) { + return $(src).data('model'); + } + }, + + + /** + * Highlight target + * @param {Model|null} model + */ + selectTargetModel: function selectTargetModel(model) { + if (model instanceof _backbone2.default.Collection) { + return; + } + + var prevModel = this.targetModel; + if (prevModel) { + prevModel.set('status', ''); + } + + if (model && model.set) { + model.set('status', 'selected-parent'); + this.targetModel = model; + } + }, + + + /** + * During move + * @param {Event} e + * */ + onMove: function onMove(e) { + var em = this.em; + this.moved = 1; + + // Turn placeholder visibile + var plh = this.plh; + var dsp = plh.style.display; + if (!dsp || dsp === 'none') plh.style.display = 'block'; + + // Cache all necessary positions + var eO = this.offset(this.el); + this.elT = this.wmargin ? Math.abs(eO.top) : eO.top; + this.elL = this.wmargin ? Math.abs(eO.left) : eO.left; + var rY = e.pageY - this.elT + this.el.scrollTop; + var rX = e.pageX - this.elL + this.el.scrollLeft; + + if (this.canvasRelative && em) { + var mousePos = em.get('Canvas').getMouseRelativeCanvas(e); + rX = mousePos.x; + rY = mousePos.y; + } + + this.rX = rX; + this.rY = rY; + this.eventMove = e; + + //var targetNew = this.getTargetFromEl(e.target); + var dims = this.dimsFromTarget(e.target, rX, rY); + var target = this.target; + var targetModel = this.getTargetModel(target); + this.selectTargetModel(targetModel); + + this.lastDims = dims; + var pos = this.findPosition(dims, rX, rY); + // If there is a significant changes with the pointer + if (!this.lastPos || this.lastPos.index != pos.index || this.lastPos.method != pos.method) { + this.movePlaceholder(this.plh, dims, pos, this.prevTargetDim); + if (!this.$plh) this.$plh = $(this.plh); + + // With canvasRelative the offset is calculated automatically for + // each element + if (!this.canvasRelative) { + if (this.offTop) this.$plh.css('top', '+=' + this.offTop + 'px'); + if (this.offLeft) this.$plh.css('left', '+=' + this.offLeft + 'px'); + } + + this.lastPos = pos; + } + + if (typeof this.onMoveClb === 'function') this.onMoveClb(e); + + em && em.trigger('sorter:drag', { + target: target, + targetModel: targetModel, + dims: dims, + pos: pos, + x: rX, + y: rY + }); + }, + + + /** + * Returns true if the elements is in flow, so is not in flow where + * for example the component is with float:left + * @param {HTMLElement} el + * @param {HTMLElement} parent + * @return {Boolean} + * @private + * */ + isInFlow: function isInFlow(el, parent) { + if (!el) return false; + + parent = parent || document.body; + var ch = -1, + h; + var elem = el; + h = elem.offsetHeight; + if ( /*h < ch || */!this.styleInFlow(elem, parent)) return false;else return true; + }, + + + /** + * Check if el has style to be in flow + * @param {HTMLElement} el + * @param {HTMLElement} parent + * @return {Boolean} + * @private + */ + styleInFlow: function styleInFlow(el, parent) { + var style = el.style; + var $el = $(el); + if (style.overflow && style.overflow !== 'visible') return; + if ($el.css('float') !== 'none') return; + if (parent && $(parent).css('display') == 'flex') return; + switch (style.position) { + case 'static': + case 'relative': + case '': + break; + default: + return; + } + switch (el.tagName) { + case 'TR': + case 'TBODY': + case 'THEAD': + case 'TFOOT': + return true; + } + switch ($el.css('display')) { + case 'block': + case 'list-item': + case 'table': + case 'flex': + return true; + } + return; + }, + + + /** + * Check if the target is valid with the actual source + * @param {HTMLElement} trg + * @return {Boolean} + */ + validTarget: function validTarget(trg, src) { + var srcModel = this.getSourceModel(src); + src = srcModel && srcModel.view && srcModel.view.el; + var trgModel = this.getTargetModel(trg); + trg = trgModel && trgModel.view && trgModel.view.el; + var result = { + valid: true, + src: src, + srcModel: srcModel, + trg: trg, + trgModel: trgModel + }; + + if (!src || !trg) { + result.valid = false; + return result; + } + + // Check if the target could accept the source + var droppable = trgModel.get('droppable'); + droppable = droppable instanceof _backbone2.default.Collection ? 1 : droppable; + droppable = droppable instanceof Array ? droppable.join(', ') : droppable; + result.dropInfo = droppable; + droppable = (0, _underscore.isString)(droppable) ? this.matches(src, droppable) : droppable; + result.droppable = droppable; + + // check if the source is draggable in target + var draggable = srcModel.get('draggable'); + draggable = draggable instanceof Array ? draggable.join(', ') : draggable; + result.dragInfo = draggable; + draggable = (0, _underscore.isString)(draggable) ? this.matches(trg, draggable) : draggable; + result.draggable = draggable; + + if (!droppable || !draggable) { + result.valid = false; + } + + return result; + }, + + + /** + * Get dimensions of nodes relative to the coordinates + * @param {HTMLElement} target + * @param {number} rX Relative X position + * @param {number} rY Relative Y position + * @return {Array} + */ + dimsFromTarget: function dimsFromTarget(target, rX, rY) { + var em = this.em; + var dims = []; + + if (!target) { + return dims; + } + + // Select the first valuable target + if (!this.matches(target, this.itemSel + ', ' + this.containerSel)) { + target = this.closest(target, this.itemSel); + } + + // If draggable is an array the target will be one of those + if (this.draggable instanceof Array) { + target = this.closest(target, this.draggable.join(',')); + } + + if (!target) { + return dims; + } + + // Check if the target is different from the previous one + if (this.prevTarget && this.prevTarget != target) { + this.prevTarget = null; + } + + // New target found + if (!this.prevTarget) { + this.targetP = this.closest(target, this.containerSel); + + // Check if the source is valid with the target + var validResult = this.validTarget(target); + em && em.trigger('sorter:drag:validation', validResult); + + if (!validResult.valid && this.targetP) { + return this.dimsFromTarget(this.targetP, rX, rY); + } + + this.prevTarget = target; + this.prevTargetDim = this.getDim(target); + this.cacheDimsP = this.getChildrenDim(this.targetP); + this.cacheDims = this.getChildrenDim(target); + } + + // If the target is the previous one will return the cached dims + if (this.prevTarget == target) dims = this.cacheDims; + + // Target when I will drop element to sort + this.target = this.prevTarget; + + // Generally, on any new target the poiner enters inside its area and + // triggers nearBorders(), so have to take care of this + if (this.nearBorders(this.prevTargetDim, rX, rY) || !this.nested && !this.cacheDims.length) { + var targetParent = this.targetP; + + if (targetParent && this.validTarget(targetParent).valid) { + dims = this.cacheDimsP; + this.target = targetParent; + } + } + + this.lastPos = null; + return dims; + }, + + + /** + * Get valid target from element + * This method should replace dimsFromTarget() + * @param {HTMLElement} el + * @return {HTMLElement} + */ + getTargetFromEl: function getTargetFromEl(el) { + var target = el; + var targetParent = void 0; + var targetPrev = this.targetPrev; + var em = this.em; + var containerSel = this.containerSel; + var itemSel = this.itemSel; + + // Select the first valuable target + if (!this.matches(target, itemSel + ', ' + containerSel)) { + target = this.closest(target, itemSel); + } + + // If draggable is an array the target will be one of those + // TODO check if this options is used somewhere + if (this.draggable instanceof Array) { + target = this.closest(target, this.draggable.join(',')); + } + + // Check if the target is different from the previous one + if (targetPrev && targetPrev != target) { + this.targetPrev = ''; + } + + // New target found + if (!this.targetPrev) { + targetParent = this.closest(target, containerSel); + + // If the current target is not valid (src/trg reasons) try with + // the parent one (if exists) + var validResult = this.validTarget(target); + em && em.trigger('sorter:drag:validation', validResult); + + if (!validResult.valid && targetParent) { + return this.getTargetFromEl(targetParent); + } + + this.targetPrev = target; + } + + // Generally, on any new target the poiner enters inside its area and + // triggers nearBorders(), so have to take care of this + if (this.nearElBorders(target)) { + targetParent = this.closest(target, containerSel); + + if (targetParent && this.validTarget(targetParent).valid) { + target = targetParent; + } + } + + return target; + }, + + + /** + * Check if the current pointer is neare to element borders + * @return {Boolen} + */ + nearElBorders: function nearElBorders(el) { + var off = 10; + var rect = el.getBoundingClientRect(); + var body = el.ownerDocument.body; + + var _getCurrentPos = this.getCurrentPos(), + x = _getCurrentPos.x, + y = _getCurrentPos.y; + + var top = rect.top + body.scrollTop; + var left = rect.left + body.scrollLeft; + var width = rect.width; + var height = rect.height; + + if (y < top + off || // near top edge + y > top + height - off || // near bottom edge + x < left + off || // near left edge + x > left + width - off // near right edge + ) { + return 1; + } + }, + getCurrentPos: function getCurrentPos() { + var ev = this.eventMove; + var x = ev.pageX || 0; + var y = ev.pageY || 0; + return { x: x, y: y }; + }, + + + /** + * Returns dimensions and positions about the element + * @param {HTMLElement} el + * @return {Array} + */ + getDim: function getDim(el) { + var top, left, height, width; + + if (this.canvasRelative && this.em) { + var pos = this.em.get('Canvas').getElementPos(el); + var styles = window.getComputedStyle(el); + var marginTop = parseFloat(styles['marginTop']); + var marginBottom = parseFloat(styles['marginBottom']); + var marginRight = parseFloat(styles['marginRight']); + var marginLeft = parseFloat(styles['marginLeft']); + top = pos.top - marginTop; + left = pos.left - marginLeft; + height = pos.height + marginTop + marginBottom; + width = pos.width + marginLeft + marginRight; + } else { + var o = this.offset(el); + top = this.relative ? el.offsetTop : o.top - (this.wmargin ? -1 : 1) * this.elT; + left = this.relative ? el.offsetLeft : o.left - (this.wmargin ? -1 : 1) * this.elL; + height = el.offsetHeight; + width = el.offsetWidth; + } + + return [top, left, height, width]; + }, + + + /** + * Get children dimensions + * @param {HTMLELement} el Element root + * @retun {Array} + * */ + getChildrenDim: function getChildrenDim(trg) { + var dims = []; + if (!trg) return dims; + + // Get children based on getChildrenContainer + var trgModel = this.getTargetModel(trg); + if (trgModel && trgModel.view && !this.ignoreViewChildren) { + trg = trgModel.view.getChildrenContainer(); + } + + var ch = trg.children; + + for (var i = 0, len = ch.length; i < len; i++) { + var el = ch[i]; + + if (!this.matches(el, this.itemSel)) { + continue; + } + + var dim = this.getDim(el); + var dir = this.direction; + + if (dir == 'v') dir = true;else if (dir == 'h') dir = false;else dir = this.isInFlow(el, trg); + + dim.push(dir); + dim.push(el); + dims.push(dim); + } + + return dims; + }, + + + /** + * Check if the coordinates are near to the borders + * @param {Array} dim + * @param {number} rX Relative X position + * @param {number} rY Relative Y position + * @return {Boolean} + * */ + nearBorders: function nearBorders(dim, rX, rY) { + var result = 0; + var off = this.borderOffset; + var x = rX || 0; + var y = rY || 0; + var t = dim[0]; + var l = dim[1]; + var h = dim[2]; + var w = dim[3]; + if (t + off > y || y > t + h - off || l + off > x || x > l + w - off) result = 1; + + return !!result; + }, + + + /** + * Find the position based on passed dimensions and coordinates + * @param {Array} dims Dimensions of nodes to parse + * @param {number} posX X coordindate + * @param {number} posY Y coordindate + * @retun {Object} + * */ + findPosition: function findPosition(dims, posX, posY) { + var result = { index: 0, method: 'before' }; + var leftLimit = 0, + xLimit = 0, + dimRight = 0, + yLimit = 0, + xCenter = 0, + yCenter = 0, + dimDown = 0, + dim = 0; + // Each dim is: Top, Left, Height, Width + for (var i = 0, len = dims.length; i < len; i++) { + dim = dims[i]; + // Right position of the element. Left + Width + dimRight = dim[1] + dim[3]; + // Bottom position of the element. Top + Height + dimDown = dim[0] + dim[2]; + // X center position of the element. Left + (Width / 2) + xCenter = dim[1] + dim[3] / 2; + // Y center position of the element. Top + (Height / 2) + yCenter = dim[0] + dim[2] / 2; + // Skip if over the limits + if (xLimit && dim[1] > xLimit || yLimit && yCenter >= yLimit || // >= avoid issue with clearfixes + leftLimit && dimRight < leftLimit) continue; + result.index = i; + // If it's not in flow (like 'float' element) + if (!dim[4]) { + if (posY < dimDown) yLimit = dimDown; + //If x lefter than center + if (posX < xCenter) { + xLimit = xCenter; + result.method = 'before'; + } else { + leftLimit = xCenter; + result.method = 'after'; + } + } else { + // If y upper than center + if (posY < yCenter) { + result.method = 'before'; + break; + } else result.method = 'after'; // After last element + } + } + return result; + }, + + + /** + * Updates the position of the placeholder + * @param {HTMLElement} phl + * @param {Array} dims + * @param {Object} pos Position object + * @param {Array} trgDim target dimensions + * */ + movePlaceholder: function movePlaceholder(plh, dims, pos, trgDim) { + var marg = 0, + t = 0, + l = 0, + w = 0, + h = 0, + un = 'px', + margI = 5, + brdCol = '#62c462', + brd = 3, + method = pos.method; + var elDim = dims[pos.index]; + plh.style.borderColor = 'transparent ' + brdCol; + plh.style.borderWidth = brd + un + ' ' + (brd + 2) + un; + plh.style.margin = '-' + brd + 'px 0 0'; + if (elDim) { + // If it's not in flow (like 'float' element) + if (!elDim[4]) { + w = 'auto'; + h = elDim[2] - marg * 2 + un; + t = elDim[0] + marg; + l = method == 'before' ? elDim[1] - marg : elDim[1] + elDim[3] - marg; + plh.style.borderColor = brdCol + ' transparent'; + plh.style.borderWidth = brd + 2 + un + ' ' + brd + un; + plh.style.margin = '0 0 0 -' + brd + 'px'; + } else { + w = elDim[3] + un; + h = 'auto'; + t = method == 'before' ? elDim[0] - marg : elDim[0] + elDim[2] - marg; + l = elDim[1]; + } + } else { + if (!this.nested) { + plh.style.display = 'none'; + return; + } + if (trgDim) { + t = trgDim[0] + margI; + l = trgDim[1] + margI; + w = parseInt(trgDim[3]) - margI * 2 + un; + h = 'auto'; + } + } + plh.style.top = t + un; + plh.style.left = l + un; + if (w) plh.style.width = w; + if (h) plh.style.height = h; + }, + + + /** + * Leave item + * @param event + * + * @return void + * */ + endMove: function endMove(e) { + var _this = this; + + var created; + var moved = [null]; + var docs = this.getDocuments(); + var container = this.getContainerEl(); + var onEndMove = this.onEndMove; + var target = this.target, + lastPos = this.lastPos; + + (0, _mixins.off)(container, 'mousemove dragover', this.onMove); + (0, _mixins.off)(docs, 'mouseup dragend', this.endMove); + (0, _mixins.off)(docs, 'keydown', this.rollback); + //this.$document.off('mouseup', this.endMove); + //this.$document.off('keydown', this.rollback); + this.plh.style.display = 'none'; + var clsReg = new RegExp('(?:^|\\s)' + this.freezeClass + '(?!\\S)', 'gi'); + var src = this.eV; + + if (src && this.selectOnEnd) { + var srcModel = this.getSourceModel(); + if (srcModel && srcModel.set) { + srcModel.set('status', ''); + srcModel.set('status', 'selected'); + } + } + + if (this.moved) { + var toMove = this.toMove; + var toMoveArr = (0, _underscore.isArray)(toMove) ? toMove : toMove ? [toMove] : [src]; + toMoveArr.forEach(function (model) { + moved.push(_this.move(target, model, lastPos)); + }); + } + + if (this.plh) this.plh.style.display = 'none'; + var dragHelper = this.dragHelper; + + if (dragHelper) { + dragHelper.parentNode.removeChild(dragHelper); + this.dragHelper = null; + } + + this.selectTargetModel(); + this.toggleSortCursor(); + + this.toMove = null; + (0, _underscore.isFunction)(onEndMove) && moved.forEach(function (m) { + return onEndMove(m, _this); + }); + }, + + + /** + * Move component to new position + * @param {HTMLElement} dst Destination target + * @param {HTMLElement} src Element to move + * @param {Object} pos Object with position coordinates + * */ + move: function move(dst, src, pos) { + var em = this.em; + var srcEl = (0, _mixins.getElement)(src); + em && em.trigger('component:dragEnd:before', dst, srcEl, pos); // @depricated + var warns = []; + var index = pos.index; + var modelToDrop, modelTemp, created; + var validResult = this.validTarget(dst, srcEl); + var targetCollection = $(dst).data('collection'); + var model = validResult.srcModel; + var droppable = validResult.droppable; + var draggable = validResult.draggable; + var dropInfo = validResult.dropInfo; + var dragInfo = validResult.dragInfo; + var dropContent = this.dropContent; + droppable = validResult.trgModel instanceof _backbone2.default.Collection ? 1 : droppable; + + if (targetCollection && droppable && draggable) { + index = pos.method === 'after' ? index + 1 : index; + var opts = { at: index, noIncrement: 1 }; + + if (!dropContent) { + // Putting `avoidStore` here will make the UndoManager behave wrong + opts.temporary = 1; + modelTemp = targetCollection.add({}, _extends({}, opts)); + + if (model) { + modelToDrop = model.collection.remove(model); + } + } else { + modelToDrop = dropContent; + opts.silent = false; + opts.avoidUpdateStyle = 1; + } + + created = targetCollection.add(modelToDrop, opts); + + if (!dropContent) { + targetCollection.remove(modelTemp); + } else { + this.dropContent = null; + } + + // This will cause to recalculate children dimensions + this.prevTarget = null; + } else { + if (!targetCollection) { + warns.push('Target collection not found'); + } + + if (!droppable) { + warns.push('Target is not droppable, accepts [' + dropInfo + ']'); + } + + if (!draggable) { + warns.push('Component not draggable, acceptable by [' + dragInfo + ']'); + } + + console.warn('Invalid target position: ' + warns.join(', ')); + } + + em && em.trigger('component:dragEnd', targetCollection, modelToDrop, warns); // @depricated + em && em.trigger('sorter:drag:end', targetCollection, modelToDrop, warns); + + return created; + }, + + + /** + * Rollback to previous situation + * @param {Event} + * @param {Bool} Indicates if rollback in anycase + * */ + rollback: function rollback(e) { + (0, _mixins.off)(this.getDocuments(), 'keydown', this.rollback); + var key = e.which || e.keyCode; + + if (key == 27) { + this.moved = 0; + this.endMove(); + } + } +}); +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _underscore = __webpack_require__(1); + +var _mixins = __webpack_require__(2); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var defaultOpts = { + // Function which returns custom X and Y coordinates of the mouse + mousePosFetcher: null, + // Indicates custom target updating strategy + updateTarget: null, + // Function which gets HTMLElement as an arg and returns it relative position + ratioDefault: 0, + posFetcher: null, + onStart: null, + onMove: null, + onEnd: null, + + // Resize unit step + step: 1, + + // Minimum dimension + minDim: 32, + + // Maximum dimension + maxDim: '', + + // Unit used for height resizing + unitHeight: 'px', + + // Unit used for width resizing + unitWidth: 'px', + + // The key used for height resizing + keyHeight: 'height', + + // The key used for width resizing + keyWidth: 'width', + + // If true, will override unitHeight and unitWidth, on start, with units + // from the current focused element (currently used only in SelectComponent) + currentUnit: 1, + + // With this option active the mousemove event won't be altered when + // the pointer comes over iframes + silentFrames: 0, + + // If true the container of handlers won't be updated + avoidContainerUpdate: 0, + + // Handlers + tl: 1, // Top left + tc: 1, // Top center + tr: 1, // Top right + cl: 1, // Center left + cr: 1, // Center right + bl: 1, // Bottom left + bc: 1, // Bottom center + br: 1 // Bottom right +}; + +var createHandler = function createHandler(name, opts) { + var pfx = opts.prefix || ''; + var el = document.createElement('i'); + el.className = pfx + 'resizer-h ' + pfx + 'resizer-h-' + name; + el.setAttribute('data-' + pfx + 'handler', name); + return el; +}; + +var getBoundingRect = function getBoundingRect(el, win) { + var w = win || window; + var rect = el.getBoundingClientRect(); + return { + left: rect.left + w.pageXOffset, + top: rect.top + w.pageYOffset, + width: rect.width, + height: rect.height + }; +}; + +var Resizer = function () { + /** + * Init the Resizer with options + * @param {Object} options + */ + function Resizer() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, Resizer); + + this.setOptions(opts); + (0, _underscore.bindAll)(this, 'handleKeyDown', 'handleMouseDown', 'move', 'stop'); + return this; + } + + /** + * Get current connfiguration options + * @return {Object} + */ + + + _createClass(Resizer, [{ + key: 'getConfig', + value: function getConfig() { + return this.opts; + } + + /** + * Setup options + * @param {Object} options + */ + + }, { + key: 'setOptions', + value: function setOptions() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this.opts = (0, _underscore.defaults)(options, defaultOpts); + this.setup(); + } + + /** + * Setup resizer + */ + + }, { + key: 'setup', + value: function setup() { + var opts = this.opts; + var pfx = opts.prefix || ''; + var appendTo = opts.appendTo || document.body; + var container = this.container; + + // Create container if not yet exist + if (!container) { + container = document.createElement('div'); + container.className = pfx + 'resizer-c'; + appendTo.appendChild(container); + this.container = container; + } + + while (container.firstChild) { + container.removeChild(container.firstChild); + } + + // Create handlers + var handlers = {}; + ['tl', 'tc', 'tr', 'cl', 'cr', 'bl', 'bc', 'br'].forEach(function (hdl) { + return handlers[hdl] = opts[hdl] ? createHandler(hdl, opts) : ''; + }); + + for (var n in handlers) { + var handler = handlers[n]; + handler && container.appendChild(handler); + } + + this.handlers = handlers; + this.mousePosFetcher = opts.mousePosFetcher; + this.updateTarget = opts.updateTarget; + this.posFetcher = opts.posFetcher; + this.onStart = opts.onStart; + this.onMove = opts.onMove; + this.onEnd = opts.onEnd; + } + + /** + * Toggle iframes pointer event + * @param {Boolean} silent If true, iframes will be silented + */ + + }, { + key: 'toggleFrames', + value: function toggleFrames(silent) { + if (this.opts.silentFrames) { + var frames = document.querySelectorAll('iframe'); + (0, _underscore.each)(frames, function (frame) { + return frame.style.pointerEvents = silent ? 'none' : ''; + }); + } + } + + /** + * Detects if the passed element is a resize handler + * @param {HTMLElement} el + * @return {Boolean} + */ + + }, { + key: 'isHandler', + value: function isHandler(el) { + var handlers = this.handlers; + + for (var n in handlers) { + if (handlers[n] === el) return true; + } + + return false; + } + + /** + * Returns the focused element + * @return {HTMLElement} + */ + + }, { + key: 'getFocusedEl', + value: function getFocusedEl() { + return this.el; + } + + /** + * Returns documents + */ + + }, { + key: 'getDocumentEl', + value: function getDocumentEl() { + return [this.el.ownerDocument, document]; + } + + /** + * Return element position + * @param {HTMLElement} el + * @param {Object} opts Custom options + * @return {Object} + */ + + }, { + key: 'getElementPos', + value: function getElementPos(el) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var posFetcher = this.posFetcher || ''; + return posFetcher ? posFetcher(el, opts) : getBoundingRect(el); + } + + /** + * Focus resizer on the element, attaches handlers to it + * @param {HTMLElement} el + */ + + }, { + key: 'focus', + value: function focus(el) { + // Avoid focusing on already focused element + if (el && el === this.el) { + return; + } + + // Show the handlers + this.el = el; + var config = this.opts; + var unit = 'px'; + var rect = this.getElementPos(el, { target: 'container' }); + var container = this.container; + var contStyle = container.style; + + if (!config.avoidContainerUpdate) { + contStyle.left = rect.left + unit; + contStyle.top = rect.top + unit; + contStyle.width = rect.width + unit; + contStyle.height = rect.height + unit; + contStyle.display = 'block'; + } + + (0, _mixins.on)(this.getDocumentEl(), 'mousedown', this.handleMouseDown); + } + + /** + * Blur from element + */ + + }, { + key: 'blur', + value: function blur() { + this.container.style.display = 'none'; + + if (this.el) { + (0, _mixins.off)(this.getDocumentEl(), 'mousedown', this.handleMouseDown); + this.el = null; + } + } + + /** + * Start resizing + * @param {Event} e + */ + + }, { + key: 'start', + value: function start(e) { + //Right or middel click + if (e.button !== 0) return; + e.preventDefault(); + e.stopPropagation(); + var el = this.el; + var resizer = this; + var config = this.opts || {}; + var attrName = 'data-' + config.prefix + 'handler'; + var rect = this.getElementPos(el, { target: 'el' }); + this.handlerAttr = e.target.getAttribute(attrName); + this.clickedHandler = e.target; + this.startDim = { + t: rect.top, + l: rect.left, + w: rect.width, + h: rect.height + }; + this.rectDim = { + t: rect.top, + l: rect.left, + w: rect.width, + h: rect.height + }; + this.startPos = { + x: e.clientX, + y: e.clientY + }; + + // Listen events + var doc = this.getDocumentEl(); + (0, _mixins.on)(doc, 'mousemove', this.move); + (0, _mixins.on)(doc, 'keydown', this.handleKeyDown); + (0, _mixins.on)(doc, 'mouseup', this.stop); + (0, _underscore.isFunction)(this.onStart) && this.onStart(e, { docs: doc, config: config, el: el, resizer: resizer }); + this.toggleFrames(1); + this.move(e); + } + + /** + * While resizing + * @param {Event} e + */ + + }, { + key: 'move', + value: function move(e) { + var onMove = this.onMove; + var mouseFetch = this.mousePosFetcher; + var currentPos = mouseFetch ? mouseFetch(e) : { + x: e.clientX, + y: e.clientY + }; + + this.currentPos = currentPos; + this.delta = { + x: currentPos.x - this.startPos.x, + y: currentPos.y - this.startPos.y + }; + this.keys = { + shift: e.shiftKey, + ctrl: e.ctrlKey, + alt: e.altKey + }; + + this.rectDim = this.calc(this); + this.updateRect(0); + + // Move callback + onMove && onMove(e); + + // In case the mouse button was released outside of the window + if (e.which === 0) { + this.stop(e); + } + } + + /** + * Stop resizing + * @param {Event} e + */ + + }, { + key: 'stop', + value: function stop(e) { + var config = this.opts; + var doc = this.getDocumentEl(); + (0, _mixins.off)(doc, 'mousemove', this.move); + (0, _mixins.off)(doc, 'keydown', this.handleKeyDown); + (0, _mixins.off)(doc, 'mouseup', this.stop); + this.updateRect(1); + this.toggleFrames(); + (0, _underscore.isFunction)(this.onEnd) && this.onEnd(e, { docs: doc, config: config }); + } + + /** + * Update rect + */ + + }, { + key: 'updateRect', + value: function updateRect(store) { + var el = this.el; + var resizer = this; + var config = this.opts; + var rect = this.rectDim; + var conStyle = this.container.style; + var updateTarget = this.updateTarget; + var selectedHandler = this.getSelectedHandler(); + var unitHeight = config.unitHeight, + unitWidth = config.unitWidth, + keyWidth = config.keyWidth, + keyHeight = config.keyHeight; + + // Use custom updating strategy if requested + + if ((0, _underscore.isFunction)(updateTarget)) { + updateTarget(el, rect, { + store: store, + selectedHandler: selectedHandler, + resizer: resizer, + config: config + }); + } else { + var elStyle = el.style; + elStyle[keyWidth] = rect.w + unitWidth; + elStyle[keyHeight] = rect.h + unitHeight; + } + + var unitRect = 'px'; + var rectEl = this.getElementPos(el, { target: 'container' }); + if (!config.avoidContainerUpdate) { + conStyle.left = rectEl.left + unitRect; + conStyle.top = rectEl.top + unitRect; + conStyle.width = rectEl.width + unitRect; + conStyle.height = rectEl.height + unitRect; + } + } + + /** + * Get selected handler name + * @return {string} + */ + + }, { + key: 'getSelectedHandler', + value: function getSelectedHandler() { + var handlers = this.handlers; + + if (!this.selectedHandler) { + return; + } + + for (var n in handlers) { + if (handlers[n] === this.selectedHandler) return n; + } + } + + /** + * Handle ESC key + * @param {Event} e + */ + + }, { + key: 'handleKeyDown', + value: function handleKeyDown(e) { + if (e.keyCode === 27) { + // Rollback to initial dimensions + this.rectDim = this.startDim; + this.stop(e); + } + } + + /** + * Handle mousedown to check if it's possible to start resizing + * @param {Event} e + */ + + }, { + key: 'handleMouseDown', + value: function handleMouseDown(e) { + var el = e.target; + if (this.isHandler(el)) { + this.selectedHandler = el; + this.start(e); + } else if (el !== this.el) { + this.selectedHandler = ''; + this.blur(); + } + } + + /** + * All positioning logic + * @return {Object} + */ + + }, { + key: 'calc', + value: function calc(data) { + var value = void 0; + var opts = this.opts || {}; + var step = opts.step; + var startDim = this.startDim; + var minDim = opts.minDim; + var maxDim = opts.maxDim; + var deltaX = data.delta.x; + var deltaY = data.delta.y; + var startW = startDim.w; + var startH = startDim.h; + var box = { + t: 0, + l: 0, + w: startW, + h: startH + }; + + if (!data) return; + + var attr = data.handlerAttr; + if (~attr.indexOf('r')) { + value = (0, _mixins.normalizeFloat)(startW + deltaX * step, step); + value = Math.max(minDim, value); + maxDim && (value = Math.min(maxDim, value)); + box.w = value; + } + if (~attr.indexOf('b')) { + value = (0, _mixins.normalizeFloat)(startH + deltaY * step, step); + value = Math.max(minDim, value); + maxDim && (value = Math.min(maxDim, value)); + box.h = value; + } + if (~attr.indexOf('l')) { + value = (0, _mixins.normalizeFloat)(startW - deltaX * step, step); + value = Math.max(minDim, value); + maxDim && (value = Math.min(maxDim, value)); + box.w = value; + } + if (~attr.indexOf('t')) { + value = (0, _mixins.normalizeFloat)(startH - deltaY * step, step); + value = Math.max(minDim, value); + maxDim && (value = Math.min(maxDim, value)); + box.h = value; + } + + // Enforce aspect ratio (unless shift key is being held) + var ratioActive = opts.ratioDefault ? !data.keys.shift : data.keys.shift; + if (attr.indexOf('c') < 0 && ratioActive) { + var ratio = startDim.w / startDim.h; + if (box.w / box.h > ratio) { + box.h = Math.round(box.w / ratio); + } else { + box.w = Math.round(box.h * ratio); + } + } + + if (~attr.indexOf('l')) { + box.l = startDim.w - box.w; + } + if (~attr.indexOf('t')) { + box.t = startDim.h - box.h; + } + + return box; + } + }]); + + return Resizer; +}(); + +module.exports = { + init: function init(opts) { + return new Resizer(opts); + } +}; + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _backbone = __webpack_require__(0); + +var _backbone2 = _interopRequireDefault(_backbone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var $ = _backbone2.default.$; + +var getBoundingRect = function getBoundingRect(el, win) { + var w = win || window; + var rect = el.getBoundingClientRect(); + return { + left: rect.left + w.pageXOffset, + top: rect.top + w.pageYOffset, + width: rect.width, + height: rect.height + }; +}; + +module.exports = { + // TODO move to opts + setKey: function setKey(keys, command) { + //key(keys, command); + }, + + + /** + * Return element position + * @param {HTMLElement} el + * @return {Object} + */ + getElementRect: function getElementRect(el) { + var posFetcher = this.opts.posFetcher || ''; + return posFetcher ? posFetcher(el, { + avoidFrameOffset: 1 + }) : getBoundingRect(el); + }, + + + /** + * Init the resizer + * @param {Object} opts + */ + init: function init(opts) { + this.setOptions(opts); + this.handleMouseDown = this.handleMouseDown.bind(this); + this.drag = this.drag.bind(this); + this.move = this.move.bind(this); + this.stop = this.stop.bind(this); + this.setKey('up, right, down, left', this.handleKey); + return this; + }, + + + /** + * Update options + * @param {Object} options + */ + setOptions: function setOptions(opts) { + this.opts = opts || {}; + }, + + + /** + * Focus dragger on the element + * @param {HTMLElement} el + */ + focus: function focus(el) { + // Avoid focusing on already focused element + if (el && el === this.el) { + return; + } + + this.getDocumentEl(el); + this.blur(); + this.el = el; + this.handlers = this.opts.dragHandlers || [el]; + + var elRect = this.getElementRect(el); //<-- TODO have wrong top:left + this.elRect = elRect; + this.startTop = elRect.top; + this.startLeft = elRect.left; + + // TODO init snapper + + this.getDocumentEl().on('mousedown', this.handleMouseDown); + }, + + + /** + * Blur from the focused element + */ + blur: function blur() { + this.getDocumentEl().off('mousedown', this.handleMouseDown); + this.el = null; + }, + + + /** + * Start dragging + * @param {Event} e + */ + start: function start(e) { + this.startPos = this.getMousePos(e); + var docs = this.getDocumentEl(); + docs.on('mousemove', this.drag); + docs.on('mouseup', this.stop); + + // Start callback + var onStart = this.opts.onStart; + if (typeof onStart === 'function') { + onStart(e, { + docs: docs, + el: this.el, + start: this.startPos, + elRect: this.elRect + }); + } + + this.drag(e); + }, + + + /** + * Stop dragging + */ + stop: function stop(e) { + var docs = this.getDocumentEl(); + docs.off('mousemove', this.drag); + docs.off('mouseup', this.stop); + this.lockedAxis = null; + + // Stop callback + var onEnd = this.opts.onEnd; + if (typeof onEnd === 'function') { + onEnd(e, { + docs: docs, + delta: this.delta, + end: { + x: this.startLeft + this.delta.x, + y: this.startTop + this.delta.y + } + }); + } + }, + + + /** + * Handle mousedown to check if it's possible to drag + * @param {Event} e + */ + handleMouseDown: function handleMouseDown(e) { + var el = e.target; + if (this.isHandler(el)) { + this.start(e); + } + }, + + + /** + * Detects if the clicked element is a valid handler + * @param {HTMLElement} el + * @return {Boolean} + */ + isHandler: function isHandler(el) { + var handlers = this.handlers; + + for (var n in handlers) { + if (handlers[n] === el) return true; + } + + return false; + }, + + + /** + * Handle key press + * @param {Event} e + * @param {Object} handler + */ + handleKey: function handleKey(e, handler) { + switch (handler.shortcut) { + case 'up': + this.move(0, -1); + break; + case 'right': + this.move(1, 0); + break; + case 'down': + this.move(0, 1); + break; + case 'left': + this.move(-1, 0); + break; + } + }, + + + /** + * Returns documents + */ + getDocumentEl: function getDocumentEl(el) { + var el = el || this.el; + if (!this.$doc) { + var docs = [document]; + if (el) { + docs.push(el.ownerDocument); + } + this.$doc = $(docs); + } + return this.$doc; + }, + + + /** + * Get mouse coordinates + * @param {Event} event + * @return {Object} + */ + getMousePos: function getMousePos(e) { + var mouseFetch = this.opts.mousePosFetcher; + return mouseFetch ? mouseFetch(e) : { + x: e.clientX, + y: e.clientY + }; + }, + + + /** + * Drag event + * @param {Event} event + */ + drag: function drag(e) { + var lockedAxis = this.lockedAxis; + var currentPos = this.getMousePos(e); + var delta = { + x: currentPos.x - this.startPos.x, + y: currentPos.y - this.startPos.y + }; + // Lock one axis + if (e.shiftKey) { + if (!lockedAxis) { + var relX = delta.x; + var relY = delta.y; + var absX = Math.abs(relX); + var absY = Math.abs(relY); + + // Vertical or Horizontal lock + if (relY >= absX || relY <= -absX) { + lockedAxis = 'x'; + } else if (relX > absY || relX < -absY) { + lockedAxis = 'y'; + } + } + } else { + lockedAxis = null; + } + + if (lockedAxis === 'x') { + delta.x = this.startPos.x; + } + + if (lockedAxis === 'y') { + delta.y = this.startPos.y; + } + + this.lockedAxis = lockedAxis; + this.delta = delta; + this.move(delta.x, delta.y); + + // Drag callback + var onDrag = this.opts.onDrag; + if (typeof onDrag === 'function') { + onDrag(e, { + delta: delta, + current: { + x: this.startLeft + delta.x, + y: this.startTop + delta.y + }, + lockedAxis: lockedAxis + }); + } + + // In case the mouse button was released outside of the window + if (e.which === 0) { + this.stop(e); + } + }, + + + /** + * Move the element + * @param {integer} x + * @param {integer} y + */ + move: function move(x, y) { + this.moveX(x); + this.moveY(y); + }, + + /** + * Move in x direction + * @param {integer} x + */ + moveX: function moveX(x) { + var el = this.el; + var opts = this.opts; + var xPos = this.startLeft + x; + var setX = this.opts.setX; + + if (typeof setX === 'function') { + setX(xPos, { + el: el, + start: this.startLeft, + delta: x + }); + } else { + el.style.left = xPos + 'px'; + } + }, + + + /** + * Move in y direction + * @param {integer} y + */ + moveY: function moveY(y) { + var el = this.el; + var opts = this.opts; + var yPos = this.startTop + y; + var setY = this.opts.setY; + + if (typeof setY === 'function') { + setY(yPos, { + el: el, + start: this.startTop, + delta: y + }); + } else { + el.style.top = yPos + 'px'; + } + } +}; + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** + * This module allows to create shortcuts for functions and commands (via command id) + * + * You can access the module in this way + * ```js + * const keymaps = editor.Keymaps; + * ``` + * + */ + + +var _underscore = __webpack_require__(1); + +var keymaster = __webpack_require__(24); + +module.exports = function () { + var em = void 0; + var config = void 0; + var keymaps = {}; + var configDef = { + defaults: { + 'core:undo': { + keys: '⌘+z, ctrl+z', + handler: 'core:undo' + }, + 'core:redo': { + keys: '⌘+shift+z, ctrl+shift+z', + handler: 'core:redo' + }, + 'core:copy': { + keys: '⌘+c, ctrl+c', + handler: 'core:copy' + }, + 'core:paste': { + keys: '⌘+v, ctrl+v', + handler: 'core:paste' + }, + 'core:component-next': { + keys: 's', + handler: 'core:component-next' + }, + 'core:component-prev': { + keys: 'w', + handler: 'core:component-prev' + }, + 'core:component-enter': { + keys: 'd', + handler: 'core:component-enter' + }, + 'core:component-exit': { + keys: 'a', + handler: 'core:component-exit' + } + } + }; + + return { + keymaster: keymaster, + + name: 'Keymaps', + + /** + * Get module configurations + * @return {Object} Configuration object + */ + getConfig: function getConfig() { + return config; + }, + + + /** + * Initialize module + * @param {Object} config Configurations + * @private + */ + init: function init() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + config = _extends({}, configDef, opts); + em = config.em; + this.em = em; + return this; + }, + onLoad: function onLoad() { + var defKeys = config.defaults; + + for (var id in defKeys) { + var value = defKeys[id]; + this.add(id, value.keys, value.handler); + } + }, + + + /** + * Add new keymap + * @param {string} id Keymap id + * @param {string} keys Keymap keys, eg. `ctrl+a`, `⌘+z, ctrl+z` + * @param {Function|string} handler Keymap handler, might be a function + * @return {Object} Added keymap + * or just a command id as a string + * @example + * // 'ns' is just a custom namespace + * keymaps.add('ns:my-keymap', '⌘+j, ⌘+u, ctrl+j, alt+u', editor => { + * console.log('do stuff'); + * }); + * // or + * keymaps.add('ns:my-keymap', '⌘+s, ctrl+s', 'some-gjs-command'); + * + * // listen to events + * editor.on('keymap:emit', (id, shortcut, e) => { + * // ... + * }) + */ + add: function add(id, keys, handler) { + var em = this.em; + var cmd = em.get('Commands'); + var editor = em.getEditor(); + var keymap = { id: id, keys: keys, handler: handler }; + var pk = keymaps[id]; + pk && this.remove(id); + keymaps[id] = keymap; + keymaster(keys, function (e, h) { + // It's safer putting handlers resolution inside the callback + handler = (0, _underscore.isString)(handler) ? cmd.get(handler) : handler; + (typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) == 'object' ? handler.run(editor) : handler(editor); + var args = [id, h.shortcut, e]; + em.trigger.apply(em, ['keymap:emit'].concat(args)); + em.trigger.apply(em, ['keymap:emit:' + id].concat(args)); + }); + em.trigger('keymap:add', keymap); + return keymap; + }, + + + /** + * Get the keymap by id + * @param {string} id Keymap id + * @return {Object} Keymap object + * @example + * keymaps.get('ns:my-keymap'); + * // -> {keys, handler}; + */ + get: function get(id) { + return keymaps[id]; + }, + + + /** + * Get all keymaps + * @return {Object} + * @example + * keymaps.getAll(); + * // -> {id1: {}, id2: {}}; + */ + getAll: function getAll() { + return keymaps; + }, + + + /** + * Remove the keymap by id + * @param {string} id Keymap id + * @return {Object} Removed keymap + * @example + * keymaps.remove('ns:my-keymap'); + * // -> {keys, handler}; + */ + remove: function remove(id) { + var em = this.em; + var keymap = this.get(id); + + if (keymap) { + delete keymaps[id]; + keymaster.unbind(keymap.keys); + em && em.trigger('keymap:remove', keymap); + return keymap; + } + } + }; +}; + +/***/ }), +/* 70 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** + * This module allows to manage the stack of changes applied in canvas + * + * You can access the module in this way + * ```js + * const um = editor.UndoManager; + * ``` + * + */ + + +var _backboneUndo = __webpack_require__(71); + +var _backboneUndo2 = _interopRequireDefault(_backboneUndo); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = function () { + var em = void 0; + var um = void 0; + var config = void 0; + var beforeCache = void 0; + var configDef = {}; + + return { + name: 'UndoManager', + + /** + * Initialize module + * @param {Object} config Configurations + * @private + */ + init: function init() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + config = _extends({}, opts, configDef); + em = config.em; + this.em = em; + um = new _backboneUndo2.default({ track: true, register: [] }); + um.changeUndoType('change', { condition: false }); + um.changeUndoType('add', { + on: function on(model, collection) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (options.avoidStore) return; + return { + object: collection, + before: undefined, + after: model, + options: _extends({}, options) + }; + } + }); + um.changeUndoType('remove', { + on: function on(model, collection) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (options.avoidStore) return; + return { + object: collection, + before: model, + after: undefined, + options: _extends({}, options) + }; + } + }); + var customUndoType = { + on: function on(object, value) { + var opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + !beforeCache && (beforeCache = object.previousAttributes()); + + if (opt.avoidStore) { + return; + } else { + var result = { + object: object, + before: beforeCache, + after: object.toJSON() + }; + beforeCache = null; + return result; + } + }, + undo: function undo(model, bf, af, opt) { + model.set(bf); + }, + redo: function redo(model, bf, af, opt) { + model.set(af); + } + }; + + var events = ['style', 'attributes', 'content', 'src']; + events.forEach(function (ev) { + return um.addUndoType('change:' + ev, customUndoType); + }); + um.on('undo redo', function () { + return em.trigger('component:toggled change:canvasOffset'); + }); + ['undo', 'redo'].forEach(function (ev) { + return um.on(ev, function () { + return em.trigger(ev); + }); + }); + + return this; + }, + + + /** + * Get module configurations + * @return {Object} Configuration object + * @example + * const config = um.getConfig(); + * // { ... } + */ + getConfig: function getConfig() { + return config; + }, + + + /** + * Add an entity (Model/Collection) to track + * Note: New Components and CSSRules will be added automatically + * @param {Model|Collection} entity Entity to track + * @return {this} + * @example + * um.add(someModelOrCollection); + */ + add: function add(entity) { + um.register(entity); + return this; + }, + + + /** + * Remove and stop tracking the entity (Model/Collection) + * @param {Model|Collection} entity Entity to remove + * @return {this} + * @example + * um.remove(someModelOrCollection); + */ + remove: function remove(entity) { + um.unregister(entity); + return this; + }, + + + /** + * Remove all entities + * @return {this} + * @example + * um.removeAll(); + */ + removeAll: function removeAll() { + um.unregisterAll(); + return this; + }, + + + /** + * Start/resume tracking changes + * @return {this} + * @example + * um.start(); + */ + start: function start() { + um.startTracking(); + return this; + }, + + + /** + * Stop tracking changes + * @return {this} + * @example + * um.stop(); + */ + stop: function stop() { + um.stopTracking(); + return this; + }, + + + /** + * Undo last change + * @return {this} + * @example + * um.undo(); + */ + undo: function undo() { + if (!em.get('Canvas').isInputFocused()) um.undo(1); + return this; + }, + + + /** + * Undo all changes + * @return {this} + * @example + * um.undoAll(); + */ + undoAll: function undoAll() { + um.undoAll(); + return this; + }, + + + /** + * Redo last change + * @return {this} + * @example + * um.redo(); + */ + redo: function redo() { + if (!em.get('Canvas').isInputFocused()) um.redo(1); + return this; + }, + + + /** + * Redo all changes + * @return {this} + * @example + * um.redoAll(); + */ + redoAll: function redoAll() { + um.redoAll(); + return this; + }, + + + /** + * Checks if exists an available undo + * @return {Boolean} + * @example + * um.hasUndo(); + */ + hasUndo: function hasUndo() { + return um.isAvailable('undo'); + }, + + + /** + * Checks if exists an available redo + * @return {Boolean} + * @example + * um.hasRedo(); + */ + hasRedo: function hasRedo() { + return um.isAvailable('redo'); + }, + + + /** + * Get stack of changes + * @return {Collection} + * @example + * const stack = um.getStack(); + * stack.each(item => ...); + */ + getStack: function getStack() { + return um.stack; + }, + + + /** + * Clear the stack + * @return {this} + * @example + * um.clear(); + */ + clear: function clear() { + um.clear(); + return this; + }, + getInstance: function getInstance() { + return um; + } + }; +}; + +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + * Backbone.Undo.js v0.2 + * + * Copyright (c)2013 Oliver Sartun + * Released under the MIT License + * + * Documentation and full license available at + * https://github.com/osartun/Backbone.Undo.js + */ + + +(function (factory) { + if (true) { + // AMD support + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(25), __webpack_require__(72)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else if (typeof exports !== 'undefined') { + // CommonJS support + module.exports = factory( + require("underscore"), + require("backbone") + ); + } else { + // Non-modular execution + factory(_, Backbone); + } +})(function (_, Backbone) { + + var core_slice = Array.prototype.slice; + + /** + * As call is faster than apply, this is a faster version of apply as it uses call. + * + * @param {Function} fn The function to execute + * @param {Object} ctx The context the function should be called in + * @param {Array} args The array of arguments that should be applied to the function + * @return Forwards whatever the called function returns + */ + function apply (fn, ctx, args) { + return args.length <= 4 ? + fn.call(ctx, args[0], args[1], args[2], args[3]) : + fn.apply(ctx, args); + } + + /** + * Uses slice on an array or an array-like object. + * + * @param {Array|Object} arr The array or array-like object. + * @param {Number} [index] The index from where the array should be sliced. Default is 0. + * @return {Array} The sliced array + */ + function slice (arr, index) { + return core_slice.call(arr, index); + } + + /** + * Checks if an object has one or more specific keys. The keys + * don't have to be an owned property. + * You can call this function either this way: + * hasKeys(obj, ["a", "b", "c"]) + * or this way: + * hasKeys(obj, "a", "b", "c") + * + * @param {Object} obj The object to check on + * @param {Array} keys The keys to check for + * @return {Boolean} True, if the object has all those keys + */ + function hasKeys (obj, keys) { + if (obj == null) return false; + if (!_.isArray(keys)) { + keys = slice(arguments, 1); + } + return _.all(keys, function (key) { + return key in obj; + }); + } + + /** + * Returns a number that is unique per call stack. The number gets + * changed after the call stack has been completely processed. + * + * @return {number} MagicFusionIndex + */ + var getMagicFusionIndex = (function () { + // If you add several models to a collection or set several + // attributes on a model all in sequence and yet all for + // example in one function, then several Undo-Actions are + // generated. + // If you want to undo your last action only the last model + // would be removed from the collection or the last set + // attribute would be changed back to its previous value. + // To prevent that we have to figure out a way to combine + // all those actions that happened "at the same time". + // Timestamps aren't exact enough. A complex routine could + // run several milliseconds and in that time produce a lot + // of actions with different timestamps. + // Instead we take advantage of the single-threadedness of + // JavaScript: + + var callstackWasIndexed = false, magicFusionIndex = -1; + function indexCycle() { + magicFusionIndex++; + callstackWasIndexed = true; + _.defer(function () { + // Here comes the magic. With a Timeout of 0 + // milliseconds this function gets called whenever + // the current callstack is completed + callstackWasIndexed = false; + }) + } + return function () { + if (!callstackWasIndexed) { + indexCycle(); + } + return magicFusionIndex; + } + })(); + + /** + * To prevent binding a listener several times to one + * object, we register the objects in an ObjectRegistry + * + * @constructor + */ + function ObjectRegistry () { + // This uses two different ways of storing + // objects: In case the object has a cid + // (which Backbone objects typically have) + // it uses this cid as an index. That way + // the Array's length attribute doesn't + // change and the object isn't an item + // in the array, but an object-property. + // Otherwise it's added to the Array as an + // item. + // That way we can use the fast property- + // lookup and only have to fall back to + // iterating over the array in case + // non-Backbone-objects are registered. + this.registeredObjects = []; + // To return a list of all registered + // objects in the 'get' method we have to + // store the objects that have a cid in + // an additional array. + this.cidIndexes = []; + } + ObjectRegistry.prototype = { + /** + * Returns whether the object is already registered in this ObjectRegistry or not. + * + * @this {ObjectRegistry} + * @param {Object} obj The object to check + * @return {Boolean} True if the object is already registered + */ + isRegistered: function (obj) { + // This is where we get a performance boost + // by using the two different ways of storing + // objects. + return obj && obj.cid ? this.registeredObjects[obj.cid] : _.contains(this.registeredObjects, obj); + }, + /** + * Registers an object in this ObjectRegistry. + * + * @this {ObjectRegistry} + * @param {Object} obj The object to register + * @return {undefined} + */ + register: function (obj) { + if (!this.isRegistered(obj)) { + if (obj && obj.cid) { + this.registeredObjects[obj.cid] = obj; + this.cidIndexes.push(obj.cid); + } else { + this.registeredObjects.push(obj); + } + return true; + } + return false; + }, + /** + * Unregisters an object from this ObjectRegistry. + * + * @this {ObjectRegistry} + * @param {Object} obj The object to unregister + * @return {undefined} + */ + unregister: function (obj) { + if (this.isRegistered(obj)) { + if (obj && obj.cid) { + delete this.registeredObjects[obj.cid]; + this.cidIndexes.splice(_.indexOf(this.cidIndexes, obj.cid), 1); + } else { + var i = _.indexOf(this.registeredObjects, obj); + this.registeredObjects.splice(i, 1); + } + return true; + } + return false; + }, + /** + * Returns an array of all objects that are currently in this ObjectRegistry. + * + * @return {Array} An array of all the objects which are currently in the ObjectRegistry + */ + get: function () { + return (_.map(this.cidIndexes, function (cid) {return this.registeredObjects[cid];}, this)).concat(this.registeredObjects); + } + } + + /** + * Binds or unbinds the "all"-listener for one or more objects. + * + * @param {String} which Either "on" or "off" + * @param {Object[]} objects Array of the objects on which the "all"-listener should be bound / unbound to + * @param {Function} [fn] The function that should be bound / unbound. Optional in case of "off" + * @param {Object} [ctx] The context the function should be called in + * @return {undefined} + */ + function onoff(which, objects, fn, ctx) { + for (var i = 0, l = objects.length, obj; i < l; i++) { + obj = objects[i]; + if (!obj) continue; + if (which === "on") { + if (!ctx.objectRegistry.register(obj)) { + // register returned false, so obj was already registered + continue; + } + } else { + if (!ctx.objectRegistry.unregister(obj)) { + // unregister returned false, so obj wasn't registered + continue; + } + } + if (_.isFunction(obj[which])) { + obj[which]("all", fn, ctx); + } + } + } + + /** + * Calls the undo/redo-function for a specific action. + * + * @param {String} which Either "undo" or "redo" + * @param {Object} action The Action's attributes + * @return {undefined} + */ + function actionUndoRedo (which, action) { + var type = action.type, undoTypes = action.undoTypes, fn = !undoTypes[type] || undoTypes[type][which]; + if (_.isFunction(fn)) { + fn(action.object, action.before, action.after, action.options); + } + } + + /** + * The main undo/redo function. + * + * @param {String} which Either "undo" or "redo" + * @param {UndoManager} manager The UndoManager-instance on which an "undo"/"redo"-Event is triggered afterwards + * @param {UndoStack} stack The UndoStack on which we perform + * @param {Boolean} magic If true, undoes / redoes all actions with the same magicFusionIndex + * @param {Boolean} everything If true, undoes / redoes every action that had been tracked + * @return {undefined} + */ + function managerUndoRedo (which, manager, stack, magic, everything) { + if (stack.isCurrentlyUndoRedoing || + (which === "undo" && stack.pointer === -1) || + (which === "redo" && stack.pointer === stack.length - 1)) { + // We're either currently in an undo- / redo-process or + // we reached the end of the stack + return; + } + stack.isCurrentlyUndoRedoing = true; + var action, actions, isUndo = which === "undo"; + if (everything) { + // Undo / Redo all steps until you reach the stack's beginning / end + actions = isUndo && stack.pointer === stack.length - 1 || // If at the stack's end calling undo + !isUndo && stack.pointer === -1 ? // or at the stack's beginning calling redo + _.clone(stack.models) : // => Take all the models. Otherwise: + core_slice.apply(stack.models, isUndo ? [0, stack.pointer] : [stack.pointer, stack.length - 1]); + } else { + // Undo / Redo only one step + action = stack.at(isUndo ? stack.pointer : stack.pointer + 1); + actions = magic ? stack.where({"magicFusionIndex": action.get("magicFusionIndex")}) : [action]; + } + + stack.pointer += (isUndo ? -1 : 1) * actions.length; + while (action = isUndo ? actions.pop() : actions.shift()) { + // Here we're calling the Action's undo / redo method + action[which](); + } + stack.isCurrentlyUndoRedoing = false; + + manager.trigger(which, manager); + } + + /** + * Checks whether an UndoAction should be created or not. Therefore it checks + * whether a "condition" property is set in the undoTypes-object of the specific + * event type. If not, it returns true. If it's set and a boolean, it returns it. + * If it's a function, it returns its result, converting it into a boolean. + * Otherwise it returns true. + * + * @param {Object} undoTypesType The object within the UndoTypes that holds the function for this event type (i.e. "change") + * @param {Arguments} args The arguments the "condition" function is called with + * @return {Boolean} True, if an UndoAction should be created + */ + function validateUndoActionCreation (undoTypesType, args) { + var condition = undoTypesType.condition, type = typeof condition; + return type === "function" ? !!apply(condition, undoTypesType, args) : + type === "boolean" ? condition : true; + } + + /** + * Adds an Undo-Action to the stack. + * + * @param {UndoStack} stack The undostack the action should be added to. + * @param {String} type The event type (i.e. "change") + * @param {Arguments} args The arguments passed to the undoTypes' "on"-handler + * @param {OwnedUndoTypes} undoTypes The undoTypes-object which has the "on"-handler + * @return {undefined} + */ + function addToStack(stack, type, args, undoTypes) { + if (stack.track && !stack.isCurrentlyUndoRedoing && type in undoTypes && + validateUndoActionCreation(undoTypes[type], args)) { + // An UndoAction should be created + var res = apply(undoTypes[type]["on"], undoTypes[type], args), diff; + if (hasKeys(res, "object", "before", "after")) { + res.type = type; + res.magicFusionIndex = getMagicFusionIndex(); + res.undoTypes = undoTypes; + if (stack.pointer < stack.length - 1) { + // New Actions must always be added to the end of the stack. + // If the pointer is not pointed to the last action in the + // stack, presumably because actions were undone before, then + // all following actions must be discarded + var diff = stack.length - stack.pointer - 1; + while (diff--) { + stack.pop(); + } + } + stack.pointer = stack.length; + stack.add(res); + if (stack.length > stack.maximumStackLength) { + stack.shift(); + stack.pointer--; + } + } + } + } + + + /** + * Predefined UndoTypes object with default handlers for the most common events. + * @type {Object} + */ + var UndoTypes = { + "add": { + "undo": function (collection, ignore, model, options) { + // Undo add = remove + collection.remove(model, options); + }, + "redo": function (collection, ignore, model, options) { + // Redo add = add + if (options.index) { + options.at = options.index; + } + collection.add(model, options); + }, + "on": function (model, collection, options) { + return { + object: collection, + before: undefined, + after: model, + options: _.clone(options) + }; + } + }, + "remove": { + "undo": function (collection, model, ignore, options) { + if ("index" in options) { + options.at = options.index; + } + collection.add(model, options); + }, + "redo": function (collection, model, ignore, options) { + collection.remove(model, options); + }, + "on": function (model, collection, options) { + return { + object: collection, + before: model, + after: undefined, + options: _.clone(options) + }; + } + }, + "change": { + "undo": function (model, before, after, options) { + if (_.isEmpty(before)) { + _.each(_.keys(after), model.unset, model); + } else { + model.set(before); + if (options && options.unsetData && options.unsetData.before && options.unsetData.before.length) { + _.each(options.unsetData.before, model.unset, model); + } + } + }, + "redo": function (model, before, after, options) { + if (_.isEmpty(after)) { + _.each(_.keys(before), model.unset, model); + } else { + model.set(after); + if (options && options.unsetData && options.unsetData.after && options.unsetData.after.length) { + _.each(options.unsetData.after, model.unset, model); + } + } + }, + "on": function (model, options) { + var + afterAttributes = model.changedAttributes(), + keysAfter = _.keys(afterAttributes), + previousAttributes = _.pick(model.previousAttributes(), keysAfter), + keysPrevious = _.keys(previousAttributes), + unsetData = (options || (options = {})).unsetData = { + after: [], + before: [] + }; + + if (keysAfter.length != keysPrevious.length) { + // There are new attributes or old attributes have been unset + if (keysAfter.length > keysPrevious.length) { + // New attributes have been added + _.each(keysAfter, function (val) { + if (!(val in previousAttributes)) { + unsetData.before.push(val); + } + }, this); + } else { + // Old attributes have been unset + _.each(keysPrevious, function (val) { + if (!(val in afterAttributes)) { + unsetData.after.push(val); + } + }) + } + } + return { + object: model, + before: previousAttributes, + after: afterAttributes, + options: _.clone(options) + }; + } + }, + "reset": { + "undo": function (collection, before, after) { + collection.reset(before); + }, + "redo": function (collection, before, after) { + collection.reset(after); + }, + "on": function (collection, options) { + return { + object: collection, + before: options.previousModels, + after: _.clone(collection.models) + }; + } + } + }; + + /** + * Every UndoManager instance has an own undoTypes object + * which is an instance of OwnedUndoTypes. OwnedUndoTypes' + * prototype is the global UndoTypes object. Changes to the + * global UndoTypes object take effect on every instance of + * UndoManager as the object is its prototype. And yet every + * local UndoTypes object can be changed individually. + * + * @constructor + */ + function OwnedUndoTypes () {} + OwnedUndoTypes.prototype = UndoTypes; + + /** + * Adds, changes or removes an undo-type from an UndoTypes-object. + * You can call it this way: + * manipulateUndoType (1, "reset", {"on": function () {}}, undoTypes) + * or this way to perform bulk actions: + * manipulateUndoType (1, {"reset": {"on": function () {}}}, undoTypes) + * In case of removing undo-types you can pass an Array for performing + * bulk actions: + * manipulateUndoType(2, ["reset", "change"], undoTypes) + * + * @param {Number} manipType Indicates the kind of action to execute: 0 for add, 1 for change, 2 for remove + * @param {String|Object|Array} undoType The type of undoType that should be added/changed/removed. Can be an object / array to perform bulk actions + * @param {Object} [fns] Object with the functions to add / change. Is optional in case you passed an object as undoType that contains these functions + * @param {OwnedUndoTypes|UndoTypes} undoTypesInstance The undoTypes object to act on + * @return {undefined} + */ + function manipulateUndoType (manipType, undoType, fns, undoTypesInstance) { + // manipType, passed by the calling function + // 0: add + // 1: change + // 2: remove + if (typeof undoType === "object") { + // bulk action. Iterate over this data. + return _.each(undoType, function (val, key) { + if (manipType === 2) { // remove + // undoType is an array + manipulateUndoType (manipType, val, fns, undoTypesInstance); + } else { + // undoType is an object + manipulateUndoType (manipType, key, val, fns); + } + }) + } + + switch (manipType) { + case 0: // add + if (hasKeys(fns, "undo", "redo", "on") && _.all(_.pick(fns, "undo", "redo", "on"), _.isFunction)) { + undoTypesInstance[undoType] = fns; + } + break; + case 1: // change + if (undoTypesInstance[undoType] && _.isObject(fns)) { + // undoTypeInstance[undoType] may be a prototype's property + // So, if we did this _.extend(undoTypeInstance[undoType], fns) + // we would extend the object on the prototype which means + // that this change would have a global effect + // Instead we just want to manipulate this instance. That's why + // we're doing this: + undoTypesInstance[undoType] = _.extend({}, undoTypesInstance[undoType], fns); + } + break; + case 2: // remove + delete undoTypesInstance[undoType]; + break; + } + return this; + } + + /** + * Instantiating "Action" creates the UndoActions that + * are collected in an UndoStack. It holds all relevant + * data to undo / redo an action and has an undo / redo + * method. + */ + var Action = Backbone.Model.extend({ + defaults: { + type: null, // "add", "change", "reset", etc. + object: null, // The object on which the action occurred + before: null, // The previous values which were changed with this action + after: null, // The values after this action + magicFusionIndex: null // The magicFusionIndex helps to combine + // all actions that occurred "at the same time" to undo/redo them altogether + }, + /** + * Undoes this action. + * @param {OwnedUndoTypes|UndoTypes} undoTypes The undoTypes object which contains the "undo"-handler that should be used + * @return {undefined} + */ + undo: function (undoTypes) { + actionUndoRedo("undo", this.attributes); + }, + /** + * Redoes this action. + * @param {OwnedUndoTypes|UndoTypes} undoTypes The undoTypes object which contains the "redo"-handler that should be used + * @return {undefined} + */ + redo: function (undoTypes) { + actionUndoRedo("redo", this.attributes); + } + }), + /** + * An UndoStack is a collection of UndoActions in + * chronological order. + */ + UndoStack = Backbone.Collection.extend({ + model: Action, + pointer: -1, // The pointer indicates the index where we are located within the stack. We start at -1 + track: false, + isCurrentlyUndoRedoing: false, + maximumStackLength: Infinity, + setMaxLength: function (val) { + this.maximumStackLength = val; + } + }), + /** + * An instance of UndoManager can keep track of + * changes to objects and helps to undo them. + */ + UndoManager = Backbone.Model.extend({ + defaults: { + maximumStackLength: Infinity, + track: false + }, + /** + * The constructor function. + * @param {attr} [attr] Object with parameters. The available parameters are: + * - maximumStackLength {number} Set the undo-stack's maximum size + * - track {boolean} Start tracking changes right away + * @return {undefined} + */ + initialize: function (attr) { + this.stack = new UndoStack; + this.objectRegistry = new ObjectRegistry(); + this.undoTypes = new OwnedUndoTypes(); + + // sync the maximumStackLength attribute with our stack + this.stack.setMaxLength(this.get("maximumStackLength")); + this.on("change:maximumStackLength", function (model, value) { + this.stack.setMaxLength(value); + }, this); + + // Start tracking, if attr.track == true + if (attr && attr.track) { + this.startTracking(); + } + + // Register objects passed in the "register" attribute + if (attr && attr.register) { + if (_.isArray(attr.register) || _.isArguments(attr.register)) { + apply(this.register, this, attr.register); + } else { + this.register(attr.register); + } + } + }, + /** + * Starts tracking. Changes of registered objects won't be processed until you've called this function + * @return {undefined} + */ + startTracking: function () { + this.set("track", true); + this.stack.track = true; + }, + /** + * Stops tracking. Afterwards changes of registered objects won't be processed. + * @return {undefined} + */ + stopTracking: function () { + this.set("track", false); + this.stack.track = false; + }, + /** + * Return the state of the tracking + * @return {boolean} + */ + isTracking: function () { + return this.get("track"); + }, + /** + * This is the "all"-handler which is bound to registered + * objects. It creates an UndoAction from the event and adds + * it to the stack. + * + * @param {String} type The event type + * @return {undefined} + */ + _addToStack: function (type) { + addToStack(this.stack, type, slice(arguments, 1), this.undoTypes); + }, + /** + * Registers one or more objects to track their changes. + * @param {...Object} obj The object or objects of which changes should be tracked + * @return {undefined} + */ + register: function () { + onoff("on", arguments, this._addToStack, this); + }, + /** + * Unregisters one or more objects. + * @param {...Object} obj The object or objects of which changes shouldn't be tracked any longer + * @return {undefined} + */ + unregister: function () { + onoff("off", arguments, this._addToStack, this); + }, + /** + * Unregisters all previously registered objects. + * @return {undefined} + */ + unregisterAll: function () { + apply(this.unregister, this, this.objectRegistry.get()); + }, + /** + * Undoes the last action or the last set of actions in case 'magic' is true. + * @param {Boolean} [magic] If true, all actions that happened basically at the same time are undone together + * @return {undefined} + */ + undo: function (magic) { + managerUndoRedo("undo", this, this.stack, magic); + }, + + /** + * Undoes all actions ever tracked by the undo manager + * @return {undefined} + */ + undoAll: function () { + managerUndoRedo("undo", this, this.stack, false, true); + }, + + /** + * Redoes a previously undone action or a set of actions. + * @param {Boolean} [magic] If true, all actions that happened basically at the same time are redone together + * @return {undefined} + */ + redo: function (magic) { + managerUndoRedo("redo", this, this.stack, magic); + }, + + /** + * Redoes all actions ever tracked by the undo manager + * @return {undefined} + */ + redoAll: function () { + managerUndoRedo("redo", this, this.stack, false, true); + }, + /** + * Checks if there's an action in the stack that can be undone / redone + * @param {String} type Either "undo" or "redo" + * @return {Boolean} True if there is a set of actions which can be undone / redone + */ + isAvailable: function (type) { + var s = this.stack, l = s.length; + + switch (type) { + case "undo": return l > 0 && s.pointer > -1; + case "redo": return l > 0 && s.pointer < l - 1; + default: return false; + } + }, + /** + * Sets the stack-reference to the stack of another undoManager. + * @param {UndoManager} undoManager The undoManager whose stack-reference is set to this stack + * @return {undefined} + */ + merge: function (undoManager) { + // This sets the stack-reference to the stack of another + // undoManager so that the stack of this other undoManager + // is used by two different managers. + // This enables to set up a main-undoManager and besides it + // several others for special, exceptional cases (by using + // instance-based custom UndoTypes). Models / collections + // which need this special treatment are only registered at + // those special undoManagers. Those special ones are then + // merged into the main-undoManager to write on its stack. + // That way it's easier to manage exceptional cases. + var args = _.isArray(undoManager) ? undoManager : slice(arguments), manager; + while (manager = args.pop()) { + if (manager instanceof UndoManager && + manager.stack instanceof UndoStack) { + // set the stack reference to our stack + manager.stack = this.stack; + } + } + }, + /** + * Add an UndoType to this specific UndoManager-instance. + * @param {String} type The event this UndoType is made for + * @param {Object} fns An object of functions that are called to generate the data for an UndoAction or to process it. Must have the properties "undo", "redo" and "on". Can have the property "condition". + * @return {undefined} + */ + addUndoType: function (type, fns) { + manipulateUndoType(0, type, fns, this.undoTypes); + }, + /** + * Overwrite properties of an existing UndoType for this specific UndoManager-instance. + * @param {String} type The event the UndoType is made for + * @param {Object} fns An object of functions that are called to generate the data for an UndoAction or to process it. It extends the existing object. + * @return {undefined} + */ + changeUndoType: function (type, fns) { + manipulateUndoType(1, type, fns, this.undoTypes); + }, + /** + * Remove one or more UndoTypes of this specific UndoManager-instance to fall back to the global UndoTypes. + * @param {String|Array} type The event the UndoType that should be removed is made for. You can also pass an array of events. + * @return {undefined} + */ + removeUndoType: function (type) { + manipulateUndoType(2, type, undefined, this.undoTypes); + }, + + /** + * Removes all actions from the stack. + * @return {undefined} + */ + clear: function() { + this.stack.reset(); + this.stack.pointer = -1; + } + }); + + _.extend(UndoManager, { + /** + * Change the UndoManager's default attributes + * @param {Object} defaultAttributes An object with the new default values. + * @return {undefined} + */ + defaults: function (defaultAttributes) { + _.extend(UndoManager.prototype.defaults, defaultAttributes); + }, + /** + * Add an UndoType to the global UndoTypes-object. + * @param {String} type The event this UndoType is made for + * @param {Object} fns An object of functions that are called to generate the data for an UndoAction or to process it. Must have the properties "undo", "redo" and "on". Can have the property "condition". + * @return {undefined} + */ + "addUndoType": function (type, fns) { + manipulateUndoType(0, type, fns, UndoTypes); + }, + /** + * Overwrite properties of an existing UndoType in the global UndoTypes-object. + * @param {String} type The event the UndoType is made for + * @param {Object} fns An object of functions that are called to generate the data for an UndoAction or to process it. It extends the existing object. + * @return {undefined} + */ + "changeUndoType": function (type, fns) { + manipulateUndoType(1, type, fns, UndoTypes) + }, + /** + * Remove one or more UndoTypes of this specific UndoManager-instance to fall back to the global UndoTypes. + * @param {String|Array} type The event the UndoType that should be removed is made for. You can also pass an array of events. + * @return {undefined} + */ + "removeUndoType": function (type) { + manipulateUndoType(2, type, undefined, UndoTypes); + } + }) + + return Backbone.UndoManager = UndoManager; + +}); + + +/***/ }), +/* 72 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Backbone.js 1.2.1 + +// (c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Backbone may be freely distributed under the MIT license. +// For all details and documentation: +// http://backbonejs.org + +(function(factory) { + + // Establish the root object, `window` (`self`) in the browser, or `global` on the server. + // We use `self` instead of `window` for `WebWorker` support. + var root = (typeof self == 'object' && self.self == self && self) || + (typeof global == 'object' && global.global == global && global); + + // Set up Backbone appropriately for the environment. Start with AMD. + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(25), __webpack_require__(10), exports], __WEBPACK_AMD_DEFINE_RESULT__ = (function(_, $, exports) { + // Export global even in AMD case in case this script is loaded with + // others that may still expect a global Backbone. + root.Backbone = factory(root, exports, _, $); + }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + + // Next for Node.js or CommonJS. jQuery may not be needed as a module. + } else if (typeof exports !== 'undefined') { + var _ = require('underscore'), $; + try { $ = require('jquery'); } catch(e) {} + factory(root, exports, _, $); + + // Finally, as a browser global. + } else { + root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$)); + } + +}(function(root, Backbone, _, $) { + + // Initial Setup + // ------------- + + // Save the previous value of the `Backbone` variable, so that it can be + // restored later on, if `noConflict` is used. + var previousBackbone = root.Backbone; + + // Create a local reference to a common array method we'll want to use later. + var slice = [].slice; + + // Current version of the library. Keep in sync with `package.json`. + Backbone.VERSION = '1.2.1'; + + // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns + // the `$` variable. + Backbone.$ = $; + + // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable + // to its previous owner. Returns a reference to this Backbone object. + Backbone.noConflict = function() { + root.Backbone = previousBackbone; + return this; + }; + + // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option + // will fake `"PATCH"`, `"PUT"` and `"DELETE"` requests via the `_method` parameter and + // set a `X-Http-Method-Override` header. + Backbone.emulateHTTP = false; + + // Turn on `emulateJSON` to support legacy servers that can't deal with direct + // `application/json` requests ... this will encode the body as + // `application/x-www-form-urlencoded` instead and will send the model in a + // form param named `model`. + Backbone.emulateJSON = false; + + // Proxy Underscore methods to a Backbone class' prototype using a + // particular attribute as the data argument + var addMethod = function(length, method, attribute) { + switch (length) { + case 1: return function() { + return _[method](this[attribute]); + }; + case 2: return function(value) { + return _[method](this[attribute], value); + }; + case 3: return function(iteratee, context) { + return _[method](this[attribute], iteratee, context); + }; + case 4: return function(iteratee, defaultVal, context) { + return _[method](this[attribute], iteratee, defaultVal, context); + }; + default: return function() { + var args = slice.call(arguments); + args.unshift(this[attribute]); + return _[method].apply(_, args); + }; + } + }; + var addUnderscoreMethods = function(Class, methods, attribute) { + _.each(methods, function(length, method) { + if (_[method]) Class.prototype[method] = addMethod(length, method, attribute); + }); + }; + + // Backbone.Events + // --------------- + + // A module that can be mixed in to *any object* in order to provide it with + // custom events. You may bind with `on` or remove with `off` callback + // functions to an event; `trigger`-ing an event fires all callbacks in + // succession. + // + // var object = {}; + // _.extend(object, Backbone.Events); + // object.on('expand', function(){ alert('expanded'); }); + // object.trigger('expand'); + // + var Events = Backbone.Events = {}; + + // Regular expression used to split event strings. + var eventSplitter = /\s+/; + + // Iterates over the standard `event, callback` (as well as the fancy multiple + // space-separated events `"change blur", callback` and jQuery-style event + // maps `{event: callback}`), reducing them by manipulating `memo`. + // Passes a normalized single event name and callback, as well as any + // optional `opts`. + var eventsApi = function(iteratee, memo, name, callback, opts) { + var i = 0, names; + if (name && typeof name === 'object') { + // Handle event maps. + if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback; + for (names = _.keys(name); i < names.length ; i++) { + memo = iteratee(memo, names[i], name[names[i]], opts); + } + } else if (name && eventSplitter.test(name)) { + // Handle space separated event names. + for (names = name.split(eventSplitter); i < names.length; i++) { + memo = iteratee(memo, names[i], callback, opts); + } + } else { + memo = iteratee(memo, name, callback, opts); + } + return memo; + }; + + // Bind an event to a `callback` function. Passing `"all"` will bind + // the callback to all events fired. + Events.on = function(name, callback, context) { + return internalOn(this, name, callback, context); + }; + + // An internal use `on` function, used to guard the `listening` argument from + // the public API. + var internalOn = function(obj, name, callback, context, listening) { + obj._events = eventsApi(onApi, obj._events || {}, name, callback, { + context: context, + ctx: obj, + listening: listening + }); + + if (listening) { + var listeners = obj._listeners || (obj._listeners = {}); + listeners[listening.id] = listening; + } + + return obj; + }; + + // Inversion-of-control versions of `on`. Tell *this* object to listen to + // an event in another object... keeping track of what it's listening to. + Events.listenTo = function(obj, name, callback) { + if (!obj) return this; + var id = obj._listenId || (obj._listenId = _.uniqueId('l')); + var listeningTo = this._listeningTo || (this._listeningTo = {}); + var listening = listeningTo[id]; + + // This object is not listening to any other events on `obj` yet. + // Setup the necessary references to track the listening callbacks. + if (!listening) { + var thisId = this._listenId || (this._listenId = _.uniqueId('l')); + listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0}; + } + + // Bind callbacks on obj, and keep track of them on listening. + internalOn(obj, name, callback, this, listening); + return this; + }; + + // The reducing API that adds a callback to the `events` object. + var onApi = function(events, name, callback, options) { + if (callback) { + var handlers = events[name] || (events[name] = []); + var context = options.context, ctx = options.ctx, listening = options.listening; + if (listening) listening.count++; + + handlers.push({ callback: callback, context: context, ctx: context || ctx, listening: listening }); + } + return events; + }; + + // Remove one or many callbacks. If `context` is null, removes all + // callbacks with that function. If `callback` is null, removes all + // callbacks for the event. If `name` is null, removes all bound + // callbacks for all events. + Events.off = function(name, callback, context) { + if (!this._events) return this; + this._events = eventsApi(offApi, this._events, name, callback, { + context: context, + listeners: this._listeners + }); + return this; + }; + + // Tell this object to stop listening to either specific events ... or + // to every object it's currently listening to. + Events.stopListening = function(obj, name, callback) { + var listeningTo = this._listeningTo; + if (!listeningTo) return this; + + var ids = obj ? [obj._listenId] : _.keys(listeningTo); + + for (var i = 0; i < ids.length; i++) { + var listening = listeningTo[ids[i]]; + + // If listening doesn't exist, this object is not currently + // listening to obj. Break out early. + if (!listening) break; + + listening.obj.off(name, callback, this); + } + if (_.isEmpty(listeningTo)) this._listeningTo = void 0; + + return this; + }; + + // The reducing API that removes a callback from the `events` object. + var offApi = function(events, name, callback, options) { + // No events to consider. + if (!events) return; + + var i = 0, listening; + var context = options.context, listeners = options.listeners; + + // Delete all events listeners and "drop" events. + if (!name && !callback && !context) { + var ids = _.keys(listeners); + for (; i < ids.length; i++) { + listening = listeners[ids[i]]; + delete listeners[listening.id]; + delete listening.listeningTo[listening.objId]; + } + return; + } + + var names = name ? [name] : _.keys(events); + for (; i < names.length; i++) { + name = names[i]; + var handlers = events[name]; + + // Bail out if there are no events stored. + if (!handlers) break; + + // Replace events if there are any remaining. Otherwise, clean up. + var remaining = []; + for (var j = 0; j < handlers.length; j++) { + var handler = handlers[j]; + if ( + callback && callback !== handler.callback && + callback !== handler.callback._callback || + context && context !== handler.context + ) { + remaining.push(handler); + } else { + listening = handler.listening; + if (listening && --listening.count === 0) { + delete listeners[listening.id]; + delete listening.listeningTo[listening.objId]; + } + } + } + + // Update tail event if the list has any events. Otherwise, clean up. + if (remaining.length) { + events[name] = remaining; + } else { + delete events[name]; + } + } + if (_.size(events)) return events; + }; + + // Bind an event to only be triggered a single time. After the first time + // the callback is invoked, it will be removed. When multiple events are + // passed in using the space-separated syntax, the event will fire once for every + // event you passed in, not once for a combination of all events + Events.once = function(name, callback, context) { + // Map the event into a `{event: once}` object. + var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this)); + return this.on(events, void 0, context); + }; + + // Inversion-of-control versions of `once`. + Events.listenToOnce = function(obj, name, callback) { + // Map the event into a `{event: once}` object. + var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj)); + return this.listenTo(obj, events); + }; + + // Reduces the event callbacks into a map of `{event: onceWrapper}`. + // `offer` unbinds the `onceWrapper` after it has been called. + var onceMap = function(map, name, callback, offer) { + if (callback) { + var once = map[name] = _.once(function() { + offer(name, once); + callback.apply(this, arguments); + }); + once._callback = callback; + } + return map; + }; + + // Trigger one or many events, firing all bound callbacks. Callbacks are + // passed the same arguments as `trigger` is, apart from the event name + // (unless you're listening on `"all"`, which will cause your callback to + // receive the true name of the event as the first argument). + Events.trigger = function(name) { + if (!this._events) return this; + + var length = Math.max(0, arguments.length - 1); + var args = Array(length); + for (var i = 0; i < length; i++) args[i] = arguments[i + 1]; + + eventsApi(triggerApi, this._events, name, void 0, args); + return this; + }; + + // Handles triggering the appropriate event callbacks. + var triggerApi = function(objEvents, name, cb, args) { + if (objEvents) { + var events = objEvents[name]; + var allEvents = objEvents.all; + if (events && allEvents) allEvents = allEvents.slice(); + if (events) triggerEvents(events, args); + if (allEvents) triggerEvents(allEvents, [name].concat(args)); + } + return objEvents; + }; + + // A difficult-to-believe, but optimized internal dispatch function for + // triggering events. Tries to keep the usual cases speedy (most internal + // Backbone events have 3 arguments). + var triggerEvents = function(events, args) { + var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2]; + switch (args.length) { + case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return; + case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return; + case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return; + case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return; + default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return; + } + }; + + // Aliases for backwards compatibility. + Events.bind = Events.on; + Events.unbind = Events.off; + + // Allow the `Backbone` object to serve as a global event bus, for folks who + // want global "pubsub" in a convenient place. + _.extend(Backbone, Events); + + // Backbone.Model + // -------------- + + // Backbone **Models** are the basic data object in the framework -- + // frequently representing a row in a table in a database on your server. + // A discrete chunk of data and a bunch of useful, related methods for + // performing computations and transformations on that data. + + // Create a new model with the specified attributes. A client id (`cid`) + // is automatically generated and assigned for you. + var Model = Backbone.Model = function(attributes, options) { + var attrs = attributes || {}; + options || (options = {}); + this.cid = _.uniqueId(this.cidPrefix); + this.attributes = {}; + if (options.collection) this.collection = options.collection; + if (options.parse) attrs = this.parse(attrs, options) || {}; + attrs = _.defaults({}, attrs, _.result(this, 'defaults')); + this.set(attrs, options); + this.changed = {}; + this.initialize.apply(this, arguments); + }; + + // Attach all inheritable methods to the Model prototype. + _.extend(Model.prototype, Events, { + + // A hash of attributes whose current and previous value differ. + changed: null, + + // The value returned during the last failed validation. + validationError: null, + + // The default name for the JSON `id` attribute is `"id"`. MongoDB and + // CouchDB users may want to set this to `"_id"`. + idAttribute: 'id', + + // The prefix is used to create the client id which is used to identify models locally. + // You may want to override this if you're experiencing name clashes with model ids. + cidPrefix: 'c', + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // Return a copy of the model's `attributes` object. + toJSON: function(options) { + return _.clone(this.attributes); + }, + + // Proxy `Backbone.sync` by default -- but override this if you need + // custom syncing semantics for *this* particular model. + sync: function() { + return Backbone.sync.apply(this, arguments); + }, + + // Get the value of an attribute. + get: function(attr) { + return this.attributes[attr]; + }, + + // Get the HTML-escaped value of an attribute. + escape: function(attr) { + return _.escape(this.get(attr)); + }, + + // Returns `true` if the attribute contains a value that is not null + // or undefined. + has: function(attr) { + return this.get(attr) != null; + }, + + // Special-cased proxy to underscore's `_.matches` method. + matches: function(attrs) { + return !!_.iteratee(attrs, this)(this.attributes); + }, + + // Set a hash of model attributes on the object, firing `"change"`. This is + // the core primitive operation of a model, updating the data and notifying + // anyone who needs to know about the change in state. The heart of the beast. + set: function(key, val, options) { + if (key == null) return this; + + // Handle both `"key", value` and `{key: value}` -style arguments. + var attrs; + if (typeof key === 'object') { + attrs = key; + options = val; + } else { + (attrs = {})[key] = val; + } + + options || (options = {}); + + // Run validation. + if (!this._validate(attrs, options)) return false; + + // Extract attributes and options. + var unset = options.unset; + var silent = options.silent; + var changes = []; + var changing = this._changing; + this._changing = true; + + if (!changing) { + this._previousAttributes = _.clone(this.attributes); + this.changed = {}; + } + + var current = this.attributes; + var changed = this.changed; + var prev = this._previousAttributes; + + // Check for changes of `id`. + if (this.idAttribute in attrs) this.id = attrs[this.idAttribute]; + + // For each `set` attribute, update or delete the current value. + for (var attr in attrs) { + val = attrs[attr]; + if (!_.isEqual(current[attr], val)) changes.push(attr); + if (!_.isEqual(prev[attr], val)) { + changed[attr] = val; + } else { + delete changed[attr]; + } + unset ? delete current[attr] : current[attr] = val; + } + + // Trigger all relevant attribute changes. + if (!silent) { + if (changes.length) this._pending = options; + for (var i = 0; i < changes.length; i++) { + this.trigger('change:' + changes[i], this, current[changes[i]], options); + } + } + + // You might be wondering why there's a `while` loop here. Changes can + // be recursively nested within `"change"` events. + if (changing) return this; + if (!silent) { + while (this._pending) { + options = this._pending; + this._pending = false; + this.trigger('change', this, options); + } + } + this._pending = false; + this._changing = false; + return this; + }, + + // Remove an attribute from the model, firing `"change"`. `unset` is a noop + // if the attribute doesn't exist. + unset: function(attr, options) { + return this.set(attr, void 0, _.extend({}, options, {unset: true})); + }, + + // Clear all attributes on the model, firing `"change"`. + clear: function(options) { + var attrs = {}; + for (var key in this.attributes) attrs[key] = void 0; + return this.set(attrs, _.extend({}, options, {unset: true})); + }, + + // Determine if the model has changed since the last `"change"` event. + // If you specify an attribute name, determine if that attribute has changed. + hasChanged: function(attr) { + if (attr == null) return !_.isEmpty(this.changed); + return _.has(this.changed, attr); + }, + + // Return an object containing all the attributes that have changed, or + // false if there are no changed attributes. Useful for determining what + // parts of a view need to be updated and/or what attributes need to be + // persisted to the server. Unset attributes will be set to undefined. + // You can also pass an attributes object to diff against the model, + // determining if there *would be* a change. + changedAttributes: function(diff) { + if (!diff) return this.hasChanged() ? _.clone(this.changed) : false; + var old = this._changing ? this._previousAttributes : this.attributes; + var changed = {}; + for (var attr in diff) { + var val = diff[attr]; + if (_.isEqual(old[attr], val)) continue; + changed[attr] = val; + } + return _.size(changed) ? changed : false; + }, + + // Get the previous value of an attribute, recorded at the time the last + // `"change"` event was fired. + previous: function(attr) { + if (attr == null || !this._previousAttributes) return null; + return this._previousAttributes[attr]; + }, + + // Get all of the attributes of the model at the time of the previous + // `"change"` event. + previousAttributes: function() { + return _.clone(this._previousAttributes); + }, + + // Fetch the model from the server, merging the response with the model's + // local attributes. Any changed attributes will trigger a "change" event. + fetch: function(options) { + options = _.extend({parse: true}, options); + var model = this; + var success = options.success; + options.success = function(resp) { + var serverAttrs = options.parse ? model.parse(resp, options) : resp; + if (!model.set(serverAttrs, options)) return false; + if (success) success.call(options.context, model, resp, options); + model.trigger('sync', model, resp, options); + }; + wrapError(this, options); + return this.sync('read', this, options); + }, + + // Set a hash of model attributes, and sync the model to the server. + // If the server returns an attributes hash that differs, the model's + // state will be `set` again. + save: function(key, val, options) { + // Handle both `"key", value` and `{key: value}` -style arguments. + var attrs; + if (key == null || typeof key === 'object') { + attrs = key; + options = val; + } else { + (attrs = {})[key] = val; + } + + options = _.extend({validate: true, parse: true}, options); + var wait = options.wait; + + // If we're not waiting and attributes exist, save acts as + // `set(attr).save(null, opts)` with validation. Otherwise, check if + // the model will be valid when the attributes, if any, are set. + if (attrs && !wait) { + if (!this.set(attrs, options)) return false; + } else { + if (!this._validate(attrs, options)) return false; + } + + // After a successful server-side save, the client is (optionally) + // updated with the server-side state. + var model = this; + var success = options.success; + var attributes = this.attributes; + options.success = function(resp) { + // Ensure attributes are restored during synchronous saves. + model.attributes = attributes; + var serverAttrs = options.parse ? model.parse(resp, options) : resp; + if (wait) serverAttrs = _.extend({}, attrs, serverAttrs); + if (serverAttrs && !model.set(serverAttrs, options)) return false; + if (success) success.call(options.context, model, resp, options); + model.trigger('sync', model, resp, options); + }; + wrapError(this, options); + + // Set temporary attributes if `{wait: true}` to properly find new ids. + if (attrs && wait) this.attributes = _.extend({}, attributes, attrs); + + var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update'); + if (method === 'patch' && !options.attrs) options.attrs = attrs; + var xhr = this.sync(method, this, options); + + // Restore attributes. + this.attributes = attributes; + + return xhr; + }, + + // Destroy this model on the server if it was already persisted. + // Optimistically removes the model from its collection, if it has one. + // If `wait: true` is passed, waits for the server to respond before removal. + destroy: function(options) { + options = options ? _.clone(options) : {}; + var model = this; + var success = options.success; + var wait = options.wait; + + var destroy = function() { + model.stopListening(); + model.trigger('destroy', model, model.collection, options); + }; + + options.success = function(resp) { + if (wait) destroy(); + if (success) success.call(options.context, model, resp, options); + if (!model.isNew()) model.trigger('sync', model, resp, options); + }; + + var xhr = false; + if (this.isNew()) { + _.defer(options.success); + } else { + wrapError(this, options); + xhr = this.sync('delete', this, options); + } + if (!wait) destroy(); + return xhr; + }, + + // Default URL for the model's representation on the server -- if you're + // using Backbone's restful methods, override this to change the endpoint + // that will be called. + url: function() { + var base = + _.result(this, 'urlRoot') || + _.result(this.collection, 'url') || + urlError(); + if (this.isNew()) return base; + var id = this.get(this.idAttribute); + return base.replace(/[^\/]$/, '$&/') + encodeURIComponent(id); + }, + + // **parse** converts a response into the hash of attributes to be `set` on + // the model. The default implementation is just to pass the response along. + parse: function(resp, options) { + return resp; + }, + + // Create a new model with identical attributes to this one. + clone: function() { + return new this.constructor(this.attributes); + }, + + // A model is new if it has never been saved to the server, and lacks an id. + isNew: function() { + return !this.has(this.idAttribute); + }, + + // Check if the model is currently in a valid state. + isValid: function(options) { + return this._validate({}, _.defaults({validate: true}, options)); + }, + + // Run validation against the next complete set of model attributes, + // returning `true` if all is well. Otherwise, fire an `"invalid"` event. + _validate: function(attrs, options) { + if (!options.validate || !this.validate) return true; + attrs = _.extend({}, this.attributes, attrs); + var error = this.validationError = this.validate(attrs, options) || null; + if (!error) return true; + this.trigger('invalid', this, error, _.extend(options, {validationError: error})); + return false; + } + + }); + + // Underscore methods that we want to implement on the Model. + var modelMethods = { keys: 1, values: 1, pairs: 1, invert: 1, pick: 0, + omit: 0, chain: 1, isEmpty: 1 }; + + // Mix in each Underscore method as a proxy to `Model#attributes`. + addUnderscoreMethods(Model, modelMethods, 'attributes'); + + // Backbone.Collection + // ------------------- + + // If models tend to represent a single row of data, a Backbone Collection is + // more analogous to a table full of data ... or a small slice or page of that + // table, or a collection of rows that belong together for a particular reason + // -- all of the messages in this particular folder, all of the documents + // belonging to this particular author, and so on. Collections maintain + // indexes of their models, both in order, and for lookup by `id`. + + // Create a new **Collection**, perhaps to contain a specific type of `model`. + // If a `comparator` is specified, the Collection will maintain + // its models in sort order, as they're added and removed. + var Collection = Backbone.Collection = function(models, options) { + options || (options = {}); + if (options.model) this.model = options.model; + if (options.comparator !== void 0) this.comparator = options.comparator; + this._reset(); + this.initialize.apply(this, arguments); + if (models) this.reset(models, _.extend({silent: true}, options)); + }; + + // Default options for `Collection#set`. + var setOptions = {add: true, remove: true, merge: true}; + var addOptions = {add: true, remove: false}; + + // Define the Collection's inheritable methods. + _.extend(Collection.prototype, Events, { + + // The default model for a collection is just a **Backbone.Model**. + // This should be overridden in most cases. + model: Model, + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // The JSON representation of a Collection is an array of the + // models' attributes. + toJSON: function(options) { + return this.map(function(model) { return model.toJSON(options); }); + }, + + // Proxy `Backbone.sync` by default. + sync: function() { + return Backbone.sync.apply(this, arguments); + }, + + // Add a model, or list of models to the set. + add: function(models, options) { + return this.set(models, _.extend({merge: false}, options, addOptions)); + }, + + // Remove a model, or a list of models from the set. + remove: function(models, options) { + options = _.extend({}, options); + var singular = !_.isArray(models); + models = singular ? [models] : _.clone(models); + var removed = this._removeModels(models, options); + if (!options.silent && removed) this.trigger('update', this, options); + return singular ? removed[0] : removed; + }, + + // Update a collection by `set`-ing a new list of models, adding new ones, + // removing models that are no longer present, and merging models that + // already exist in the collection, as necessary. Similar to **Model#set**, + // the core operation for updating the data contained by the collection. + set: function(models, options) { + options = _.defaults({}, options, setOptions); + if (options.parse && !this._isModel(models)) models = this.parse(models, options); + var singular = !_.isArray(models); + models = singular ? (models ? [models] : []) : models.slice(); + var id, model, attrs, existing, sort; + var at = options.at; + if (at != null) at = +at; + if (at < 0) at += this.length + 1; + var sortable = this.comparator && (at == null) && options.sort !== false; + var sortAttr = _.isString(this.comparator) ? this.comparator : null; + var toAdd = [], toRemove = [], modelMap = {}; + var add = options.add, merge = options.merge, remove = options.remove; + var order = !sortable && add && remove ? [] : false; + var orderChanged = false; + + // Turn bare objects into model references, and prevent invalid models + // from being added. + for (var i = 0; i < models.length; i++) { + attrs = models[i]; + + // If a duplicate is found, prevent it from being added and + // optionally merge it into the existing model. + if (existing = this.get(attrs)) { + if (remove) modelMap[existing.cid] = true; + if (merge && attrs !== existing) { + attrs = this._isModel(attrs) ? attrs.attributes : attrs; + if (options.parse) attrs = existing.parse(attrs, options); + existing.set(attrs, options); + if (sortable && !sort && existing.hasChanged(sortAttr)) sort = true; + } + models[i] = existing; + + // If this is a new, valid model, push it to the `toAdd` list. + } else if (add) { + model = models[i] = this._prepareModel(attrs, options); + if (!model) continue; + toAdd.push(model); + this._addReference(model, options); + } + + // Do not add multiple models with the same `id`. + model = existing || model; + if (!model) continue; + id = this.modelId(model.attributes); + if (order && (model.isNew() || !modelMap[id])) { + order.push(model); + + // Check to see if this is actually a new model at this index. + orderChanged = orderChanged || !this.models[i] || model.cid !== this.models[i].cid; + } + + modelMap[id] = true; + } + + // Remove nonexistent models if appropriate. + if (remove) { + for (var i = 0; i < this.length; i++) { + if (!modelMap[(model = this.models[i]).cid]) toRemove.push(model); + } + if (toRemove.length) this._removeModels(toRemove, options); + } + + // See if sorting is needed, update `length` and splice in new models. + if (toAdd.length || orderChanged) { + if (sortable) sort = true; + this.length += toAdd.length; + if (at != null) { + for (var i = 0; i < toAdd.length; i++) { + this.models.splice(at + i, 0, toAdd[i]); + } + } else { + if (order) this.models.length = 0; + var orderedModels = order || toAdd; + for (var i = 0; i < orderedModels.length; i++) { + this.models.push(orderedModels[i]); + } + } + } + + // Silently sort the collection if appropriate. + if (sort) this.sort({silent: true}); + + // Unless silenced, it's time to fire all appropriate add/sort events. + if (!options.silent) { + var addOpts = at != null ? _.clone(options) : options; + for (var i = 0; i < toAdd.length; i++) { + if (at != null) addOpts.index = at + i; + (model = toAdd[i]).trigger('add', model, this, addOpts); + } + if (sort || orderChanged) this.trigger('sort', this, options); + if (toAdd.length || toRemove.length) this.trigger('update', this, options); + } + + // Return the added (or merged) model (or models). + return singular ? models[0] : models; + }, + + // When you have more items than you want to add or remove individually, + // you can reset the entire set with a new list of models, without firing + // any granular `add` or `remove` events. Fires `reset` when finished. + // Useful for bulk operations and optimizations. + reset: function(models, options) { + options = options ? _.clone(options) : {}; + for (var i = 0; i < this.models.length; i++) { + this._removeReference(this.models[i], options); + } + options.previousModels = this.models; + this._reset(); + models = this.add(models, _.extend({silent: true}, options)); + if (!options.silent) this.trigger('reset', this, options); + return models; + }, + + // Add a model to the end of the collection. + push: function(model, options) { + return this.add(model, _.extend({at: this.length}, options)); + }, + + // Remove a model from the end of the collection. + pop: function(options) { + var model = this.at(this.length - 1); + return this.remove(model, options); + }, + + // Add a model to the beginning of the collection. + unshift: function(model, options) { + return this.add(model, _.extend({at: 0}, options)); + }, + + // Remove a model from the beginning of the collection. + shift: function(options) { + var model = this.at(0); + return this.remove(model, options); + }, + + // Slice out a sub-array of models from the collection. + slice: function() { + return slice.apply(this.models, arguments); + }, + + // Get a model from the set by id. + get: function(obj) { + if (obj == null) return void 0; + var id = this.modelId(this._isModel(obj) ? obj.attributes : obj); + return this._byId[obj] || this._byId[id] || this._byId[obj.cid]; + }, + + // Get the model at the given index. + at: function(index) { + if (index < 0) index += this.length; + return this.models[index]; + }, + + // Return models with matching attributes. Useful for simple cases of + // `filter`. + where: function(attrs, first) { + var matches = _.matches(attrs); + return this[first ? 'find' : 'filter'](function(model) { + return matches(model.attributes); + }); + }, + + // Return the first model with matching attributes. Useful for simple cases + // of `find`. + findWhere: function(attrs) { + return this.where(attrs, true); + }, + + // Force the collection to re-sort itself. You don't need to call this under + // normal circumstances, as the set will maintain sort order as each item + // is added. + sort: function(options) { + if (!this.comparator) throw new Error('Cannot sort a set without a comparator'); + options || (options = {}); + + // Run sort based on type of `comparator`. + if (_.isString(this.comparator) || this.comparator.length === 1) { + this.models = this.sortBy(this.comparator, this); + } else { + this.models.sort(_.bind(this.comparator, this)); + } + + if (!options.silent) this.trigger('sort', this, options); + return this; + }, + + // Pluck an attribute from each model in the collection. + pluck: function(attr) { + return _.invoke(this.models, 'get', attr); + }, + + // Fetch the default set of models for this collection, resetting the + // collection when they arrive. If `reset: true` is passed, the response + // data will be passed through the `reset` method instead of `set`. + fetch: function(options) { + options = _.extend({parse: true}, options); + var success = options.success; + var collection = this; + options.success = function(resp) { + var method = options.reset ? 'reset' : 'set'; + collection[method](resp, options); + if (success) success.call(options.context, collection, resp, options); + collection.trigger('sync', collection, resp, options); + }; + wrapError(this, options); + return this.sync('read', this, options); + }, + + // Create a new instance of a model in this collection. Add the model to the + // collection immediately, unless `wait: true` is passed, in which case we + // wait for the server to agree. + create: function(model, options) { + options = options ? _.clone(options) : {}; + var wait = options.wait; + model = this._prepareModel(model, options); + if (!model) return false; + if (!wait) this.add(model, options); + var collection = this; + var success = options.success; + options.success = function(model, resp, callbackOpts) { + if (wait) collection.add(model, callbackOpts); + if (success) success.call(callbackOpts.context, model, resp, callbackOpts); + }; + model.save(null, options); + return model; + }, + + // **parse** converts a response into a list of models to be added to the + // collection. The default implementation is just to pass it through. + parse: function(resp, options) { + return resp; + }, + + // Create a new collection with an identical list of models as this one. + clone: function() { + return new this.constructor(this.models, { + model: this.model, + comparator: this.comparator + }); + }, + + // Define how to uniquely identify models in the collection. + modelId: function (attrs) { + return attrs[this.model.prototype.idAttribute || 'id']; + }, + + // Private method to reset all internal state. Called when the collection + // is first initialized or reset. + _reset: function() { + this.length = 0; + this.models = []; + this._byId = {}; + }, + + // Prepare a hash of attributes (or other model) to be added to this + // collection. + _prepareModel: function(attrs, options) { + if (this._isModel(attrs)) { + if (!attrs.collection) attrs.collection = this; + return attrs; + } + options = options ? _.clone(options) : {}; + options.collection = this; + var model = new this.model(attrs, options); + if (!model.validationError) return model; + this.trigger('invalid', this, model.validationError, options); + return false; + }, + + // Internal method called by both remove and set. + // Returns removed models, or false if nothing is removed. + _removeModels: function(models, options) { + var removed = []; + for (var i = 0; i < models.length; i++) { + var model = this.get(models[i]); + if (!model) continue; + + var index = this.indexOf(model); + this.models.splice(index, 1); + this.length--; + + if (!options.silent) { + options.index = index; + model.trigger('remove', model, this, options); + } + + removed.push(model); + this._removeReference(model, options); + } + return removed.length ? removed : false; + }, + + // Method for checking whether an object should be considered a model for + // the purposes of adding to the collection. + _isModel: function (model) { + return model instanceof Model; + }, + + // Internal method to create a model's ties to a collection. + _addReference: function(model, options) { + this._byId[model.cid] = model; + var id = this.modelId(model.attributes); + if (id != null) this._byId[id] = model; + model.on('all', this._onModelEvent, this); + }, + + // Internal method to sever a model's ties to a collection. + _removeReference: function(model, options) { + delete this._byId[model.cid]; + var id = this.modelId(model.attributes); + if (id != null) delete this._byId[id]; + if (this === model.collection) delete model.collection; + model.off('all', this._onModelEvent, this); + }, + + // Internal method called every time a model in the set fires an event. + // Sets need to update their indexes when models change ids. All other + // events simply proxy through. "add" and "remove" events that originate + // in other collections are ignored. + _onModelEvent: function(event, model, collection, options) { + if ((event === 'add' || event === 'remove') && collection !== this) return; + if (event === 'destroy') this.remove(model, options); + if (event === 'change') { + var prevId = this.modelId(model.previousAttributes()); + var id = this.modelId(model.attributes); + if (prevId !== id) { + if (prevId != null) delete this._byId[prevId]; + if (id != null) this._byId[id] = model; + } + } + this.trigger.apply(this, arguments); + } + + }); + + // Underscore methods that we want to implement on the Collection. + // 90% of the core usefulness of Backbone Collections is actually implemented + // right here: + var collectionMethods = { forEach: 3, each: 3, map: 3, collect: 3, reduce: 4, + foldl: 4, inject: 4, reduceRight: 4, foldr: 4, find: 3, detect: 3, filter: 3, + select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 2, + contains: 2, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3, + head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3, + without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3, + isEmpty: 1, chain: 1, sample: 3, partition: 3 }; + + // Mix in each Underscore method as a proxy to `Collection#models`. + addUnderscoreMethods(Collection, collectionMethods, 'models'); + + // Underscore methods that take a property name as an argument. + var attributeMethods = ['groupBy', 'countBy', 'sortBy', 'indexBy']; + + // Use attributes instead of properties. + _.each(attributeMethods, function(method) { + if (!_[method]) return; + Collection.prototype[method] = function(value, context) { + var iterator = _.isFunction(value) ? value : function(model) { + return model.get(value); + }; + return _[method](this.models, iterator, context); + }; + }); + + // Backbone.View + // ------------- + + // Backbone Views are almost more convention than they are actual code. A View + // is simply a JavaScript object that represents a logical chunk of UI in the + // DOM. This might be a single item, an entire list, a sidebar or panel, or + // even the surrounding frame which wraps your whole app. Defining a chunk of + // UI as a **View** allows you to define your DOM events declaratively, without + // having to worry about render order ... and makes it easy for the view to + // react to specific changes in the state of your models. + + // Creating a Backbone.View creates its initial element outside of the DOM, + // if an existing element is not provided... + var View = Backbone.View = function(options) { + this.cid = _.uniqueId('view'); + _.extend(this, _.pick(options, viewOptions)); + this._ensureElement(); + this.initialize.apply(this, arguments); + }; + + // Cached regex to split keys for `delegate`. + var delegateEventSplitter = /^(\S+)\s*(.*)$/; + + // List of view options to be merged as properties. + var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events']; + + // Set up all inheritable **Backbone.View** properties and methods. + _.extend(View.prototype, Events, { + + // The default `tagName` of a View's element is `"div"`. + tagName: 'div', + + // jQuery delegate for element lookup, scoped to DOM elements within the + // current view. This should be preferred to global lookups where possible. + $: function(selector) { + return this.$el.find(selector); + }, + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // **render** is the core function that your view should override, in order + // to populate its element (`this.el`), with the appropriate HTML. The + // convention is for **render** to always return `this`. + render: function() { + return this; + }, + + // Remove this view by taking the element out of the DOM, and removing any + // applicable Backbone.Events listeners. + remove: function() { + this._removeElement(); + this.stopListening(); + return this; + }, + + // Remove this view's element from the document and all event listeners + // attached to it. Exposed for subclasses using an alternative DOM + // manipulation API. + _removeElement: function() { + this.$el.remove(); + }, + + // Change the view's element (`this.el` property) and re-delegate the + // view's events on the new element. + setElement: function(element) { + this.undelegateEvents(); + this._setElement(element); + this.delegateEvents(); + return this; + }, + + // Creates the `this.el` and `this.$el` references for this view using the + // given `el`. `el` can be a CSS selector or an HTML string, a jQuery + // context or an element. Subclasses can override this to utilize an + // alternative DOM manipulation API and are only required to set the + // `this.el` property. + _setElement: function(el) { + this.$el = el instanceof Backbone.$ ? el : Backbone.$(el); + this.el = this.$el[0]; + }, + + // Set callbacks, where `this.events` is a hash of + // + // *{"event selector": "callback"}* + // + // { + // 'mousedown .title': 'edit', + // 'click .button': 'save', + // 'click .open': function(e) { ... } + // } + // + // pairs. Callbacks will be bound to the view, with `this` set properly. + // Uses event delegation for efficiency. + // Omitting the selector binds the event to `this.el`. + delegateEvents: function(events) { + events || (events = _.result(this, 'events')); + if (!events) return this; + this.undelegateEvents(); + for (var key in events) { + var method = events[key]; + if (!_.isFunction(method)) method = this[method]; + if (!method) continue; + var match = key.match(delegateEventSplitter); + this.delegate(match[1], match[2], _.bind(method, this)); + } + return this; + }, + + // Add a single event listener to the view's element (or a child element + // using `selector`). This only works for delegate-able events: not `focus`, + // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer. + delegate: function(eventName, selector, listener) { + this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener); + return this; + }, + + // Clears all callbacks previously bound to the view by `delegateEvents`. + // You usually don't need to use this, but may wish to if you have multiple + // Backbone views attached to the same DOM element. + undelegateEvents: function() { + if (this.$el) this.$el.off('.delegateEvents' + this.cid); + return this; + }, + + // A finer-grained `undelegateEvents` for removing a single delegated event. + // `selector` and `listener` are both optional. + undelegate: function(eventName, selector, listener) { + this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener); + return this; + }, + + // Produces a DOM element to be assigned to your view. Exposed for + // subclasses using an alternative DOM manipulation API. + _createElement: function(tagName) { + return document.createElement(tagName); + }, + + // Ensure that the View has a DOM element to render into. + // If `this.el` is a string, pass it through `$()`, take the first + // matching element, and re-assign it to `el`. Otherwise, create + // an element from the `id`, `className` and `tagName` properties. + _ensureElement: function() { + if (!this.el) { + var attrs = _.extend({}, _.result(this, 'attributes')); + if (this.id) attrs.id = _.result(this, 'id'); + if (this.className) attrs['class'] = _.result(this, 'className'); + this.setElement(this._createElement(_.result(this, 'tagName'))); + this._setAttributes(attrs); + } else { + this.setElement(_.result(this, 'el')); + } + }, + + // Set attributes from a hash on this view's element. Exposed for + // subclasses using an alternative DOM manipulation API. + _setAttributes: function(attributes) { + this.$el.attr(attributes); + } + + }); + + // Backbone.sync + // ------------- + + // Override this function to change the manner in which Backbone persists + // models to the server. You will be passed the type of request, and the + // model in question. By default, makes a RESTful Ajax request + // to the model's `url()`. Some possible customizations could be: + // + // * Use `setTimeout` to batch rapid-fire updates into a single request. + // * Send up the models as XML instead of JSON. + // * Persist models via WebSockets instead of Ajax. + // + // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests + // as `POST`, with a `_method` parameter containing the true HTTP method, + // as well as all requests with the body as `application/x-www-form-urlencoded` + // instead of `application/json` with the model in a param named `model`. + // Useful when interfacing with server-side languages like **PHP** that make + // it difficult to read the body of `PUT` requests. + Backbone.sync = function(method, model, options) { + var type = methodMap[method]; + + // Default options, unless specified. + _.defaults(options || (options = {}), { + emulateHTTP: Backbone.emulateHTTP, + emulateJSON: Backbone.emulateJSON + }); + + // Default JSON-request options. + var params = {type: type, dataType: 'json'}; + + // Ensure that we have a URL. + if (!options.url) { + params.url = _.result(model, 'url') || urlError(); + } + + // Ensure that we have the appropriate request data. + if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) { + params.contentType = 'application/json'; + params.data = JSON.stringify(options.attrs || model.toJSON(options)); + } + + // For older servers, emulate JSON by encoding the request into an HTML-form. + if (options.emulateJSON) { + params.contentType = 'application/x-www-form-urlencoded'; + params.data = params.data ? {model: params.data} : {}; + } + + // For older servers, emulate HTTP by mimicking the HTTP method with `_method` + // And an `X-HTTP-Method-Override` header. + if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) { + params.type = 'POST'; + if (options.emulateJSON) params.data._method = type; + var beforeSend = options.beforeSend; + options.beforeSend = function(xhr) { + xhr.setRequestHeader('X-HTTP-Method-Override', type); + if (beforeSend) return beforeSend.apply(this, arguments); + }; + } + + // Don't process data on a non-GET request. + if (params.type !== 'GET' && !options.emulateJSON) { + params.processData = false; + } + + // Pass along `textStatus` and `errorThrown` from jQuery. + var error = options.error; + options.error = function(xhr, textStatus, errorThrown) { + options.textStatus = textStatus; + options.errorThrown = errorThrown; + if (error) error.call(options.context, xhr, textStatus, errorThrown); + }; + + // Make the request, allowing the user to override any Ajax options. + var xhr = options.xhr = Backbone.ajax(_.extend(params, options)); + model.trigger('request', model, xhr, options); + return xhr; + }; + + // Map from CRUD to HTTP for our default `Backbone.sync` implementation. + var methodMap = { + 'create': 'POST', + 'update': 'PUT', + 'patch': 'PATCH', + 'delete': 'DELETE', + 'read': 'GET' + }; + + // Set the default implementation of `Backbone.ajax` to proxy through to `$`. + // Override this if you'd like to use a different library. + Backbone.ajax = function() { + return Backbone.$.ajax.apply(Backbone.$, arguments); + }; + + // Backbone.Router + // --------------- + + // Routers map faux-URLs to actions, and fire events when routes are + // matched. Creating a new one sets its `routes` hash, if not set statically. + var Router = Backbone.Router = function(options) { + options || (options = {}); + if (options.routes) this.routes = options.routes; + this._bindRoutes(); + this.initialize.apply(this, arguments); + }; + + // Cached regular expressions for matching named param parts and splatted + // parts of route strings. + var optionalParam = /\((.*?)\)/g; + var namedParam = /(\(\?)?:\w+/g; + var splatParam = /\*\w+/g; + var escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g; + + // Set up all inheritable **Backbone.Router** properties and methods. + _.extend(Router.prototype, Events, { + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // Manually bind a single named route to a callback. For example: + // + // this.route('search/:query/p:num', 'search', function(query, num) { + // ... + // }); + // + route: function(route, name, callback) { + if (!_.isRegExp(route)) route = this._routeToRegExp(route); + if (_.isFunction(name)) { + callback = name; + name = ''; + } + if (!callback) callback = this[name]; + var router = this; + Backbone.history.route(route, function(fragment) { + var args = router._extractParameters(route, fragment); + if (router.execute(callback, args, name) !== false) { + router.trigger.apply(router, ['route:' + name].concat(args)); + router.trigger('route', name, args); + Backbone.history.trigger('route', router, name, args); + } + }); + return this; + }, + + // Execute a route handler with the provided parameters. This is an + // excellent place to do pre-route setup or post-route cleanup. + execute: function(callback, args, name) { + if (callback) callback.apply(this, args); + }, + + // Simple proxy to `Backbone.history` to save a fragment into the history. + navigate: function(fragment, options) { + Backbone.history.navigate(fragment, options); + return this; + }, + + // Bind all defined routes to `Backbone.history`. We have to reverse the + // order of the routes here to support behavior where the most general + // routes can be defined at the bottom of the route map. + _bindRoutes: function() { + if (!this.routes) return; + this.routes = _.result(this, 'routes'); + var route, routes = _.keys(this.routes); + while ((route = routes.pop()) != null) { + this.route(route, this.routes[route]); + } + }, + + // Convert a route string into a regular expression, suitable for matching + // against the current location hash. + _routeToRegExp: function(route) { + route = route.replace(escapeRegExp, '\\$&') + .replace(optionalParam, '(?:$1)?') + .replace(namedParam, function(match, optional) { + return optional ? match : '([^/?]+)'; + }) + .replace(splatParam, '([^?]*?)'); + return new RegExp('^' + route + '(?:\\?([\\s\\S]*))?$'); + }, + + // Given a route, and a URL fragment that it matches, return the array of + // extracted decoded parameters. Empty or unmatched parameters will be + // treated as `null` to normalize cross-browser behavior. + _extractParameters: function(route, fragment) { + var params = route.exec(fragment).slice(1); + return _.map(params, function(param, i) { + // Don't decode the search params. + if (i === params.length - 1) return param || null; + return param ? decodeURIComponent(param) : null; + }); + } + + }); + + // Backbone.History + // ---------------- + + // Handles cross-browser history management, based on either + // [pushState](http://diveintohtml5.info/history.html) and real URLs, or + // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange) + // and URL fragments. If the browser supports neither (old IE, natch), + // falls back to polling. + var History = Backbone.History = function() { + this.handlers = []; + _.bindAll(this, 'checkUrl'); + + // Ensure that `History` can be used outside of the browser. + if (typeof window !== 'undefined') { + this.location = window.location; + this.history = window.history; + } + }; + + // Cached regex for stripping a leading hash/slash and trailing space. + var routeStripper = /^[#\/]|\s+$/g; + + // Cached regex for stripping leading and trailing slashes. + var rootStripper = /^\/+|\/+$/g; + + // Cached regex for stripping urls of hash. + var pathStripper = /#.*$/; + + // Has the history handling already been started? + History.started = false; + + // Set up all inheritable **Backbone.History** properties and methods. + _.extend(History.prototype, Events, { + + // The default interval to poll for hash changes, if necessary, is + // twenty times a second. + interval: 50, + + // Are we at the app root? + atRoot: function() { + var path = this.location.pathname.replace(/[^\/]$/, '$&/'); + return path === this.root && !this.getSearch(); + }, + + // Does the pathname match the root? + matchRoot: function() { + var path = this.decodeFragment(this.location.pathname); + var root = path.slice(0, this.root.length - 1) + '/'; + return root === this.root; + }, + + // Unicode characters in `location.pathname` are percent encoded so they're + // decoded for comparison. `%25` should not be decoded since it may be part + // of an encoded parameter. + decodeFragment: function(fragment) { + return decodeURI(fragment.replace(/%25/g, '%2525')); + }, + + // In IE6, the hash fragment and search params are incorrect if the + // fragment contains `?`. + getSearch: function() { + var match = this.location.href.replace(/#.*/, '').match(/\?.+/); + return match ? match[0] : ''; + }, + + // Gets the true hash value. Cannot use location.hash directly due to bug + // in Firefox where location.hash will always be decoded. + getHash: function(window) { + var match = (window || this).location.href.match(/#(.*)$/); + return match ? match[1] : ''; + }, + + // Get the pathname and search params, without the root. + getPath: function() { + var path = this.decodeFragment( + this.location.pathname + this.getSearch() + ).slice(this.root.length - 1); + return path.charAt(0) === '/' ? path.slice(1) : path; + }, + + // Get the cross-browser normalized URL fragment from the path or hash. + getFragment: function(fragment) { + if (fragment == null) { + if (this._usePushState || !this._wantsHashChange) { + fragment = this.getPath(); + } else { + fragment = this.getHash(); + } + } + return fragment.replace(routeStripper, ''); + }, + + // Start the hash change handling, returning `true` if the current URL matches + // an existing route, and `false` otherwise. + start: function(options) { + if (History.started) throw new Error('Backbone.history has already been started'); + History.started = true; + + // Figure out the initial configuration. Do we need an iframe? + // Is pushState desired ... is it available? + this.options = _.extend({root: '/'}, this.options, options); + this.root = this.options.root; + this._wantsHashChange = this.options.hashChange !== false; + this._hasHashChange = 'onhashchange' in window; + this._useHashChange = this._wantsHashChange && this._hasHashChange; + this._wantsPushState = !!this.options.pushState; + this._hasPushState = !!(this.history && this.history.pushState); + this._usePushState = this._wantsPushState && this._hasPushState; + this.fragment = this.getFragment(); + + // Normalize root to always include a leading and trailing slash. + this.root = ('/' + this.root + '/').replace(rootStripper, '/'); + + // Transition from hashChange to pushState or vice versa if both are + // requested. + if (this._wantsHashChange && this._wantsPushState) { + + // If we've started off with a route from a `pushState`-enabled + // browser, but we're currently in a browser that doesn't support it... + if (!this._hasPushState && !this.atRoot()) { + var root = this.root.slice(0, -1) || '/'; + this.location.replace(root + '#' + this.getPath()); + // Return immediately as browser will do redirect to new url + return true; + + // Or if we've started out with a hash-based route, but we're currently + // in a browser where it could be `pushState`-based instead... + } else if (this._hasPushState && this.atRoot()) { + this.navigate(this.getHash(), {replace: true}); + } + + } + + // Proxy an iframe to handle location events if the browser doesn't + // support the `hashchange` event, HTML5 history, or the user wants + // `hashChange` but not `pushState`. + if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) { + this.iframe = document.createElement('iframe'); + this.iframe.src = 'javascript:0'; + this.iframe.style.display = 'none'; + this.iframe.tabIndex = -1; + var body = document.body; + // Using `appendChild` will throw on IE < 9 if the document is not ready. + var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow; + iWindow.document.open(); + iWindow.document.close(); + iWindow.location.hash = '#' + this.fragment; + } + + // Add a cross-platform `addEventListener` shim for older browsers. + var addEventListener = window.addEventListener || function (eventName, listener) { + return attachEvent('on' + eventName, listener); + }; + + // Depending on whether we're using pushState or hashes, and whether + // 'onhashchange' is supported, determine how we check the URL state. + if (this._usePushState) { + addEventListener('popstate', this.checkUrl, false); + } else if (this._useHashChange && !this.iframe) { + addEventListener('hashchange', this.checkUrl, false); + } else if (this._wantsHashChange) { + this._checkUrlInterval = setInterval(this.checkUrl, this.interval); + } + + if (!this.options.silent) return this.loadUrl(); + }, + + // Disable Backbone.history, perhaps temporarily. Not useful in a real app, + // but possibly useful for unit testing Routers. + stop: function() { + // Add a cross-platform `removeEventListener` shim for older browsers. + var removeEventListener = window.removeEventListener || function (eventName, listener) { + return detachEvent('on' + eventName, listener); + }; + + // Remove window listeners. + if (this._usePushState) { + removeEventListener('popstate', this.checkUrl, false); + } else if (this._useHashChange && !this.iframe) { + removeEventListener('hashchange', this.checkUrl, false); + } + + // Clean up the iframe if necessary. + if (this.iframe) { + document.body.removeChild(this.iframe); + this.iframe = null; + } + + // Some environments will throw when clearing an undefined interval. + if (this._checkUrlInterval) clearInterval(this._checkUrlInterval); + History.started = false; + }, + + // Add a route to be tested when the fragment changes. Routes added later + // may override previous routes. + route: function(route, callback) { + this.handlers.unshift({route: route, callback: callback}); + }, + + // Checks the current URL to see if it has changed, and if it has, + // calls `loadUrl`, normalizing across the hidden iframe. + checkUrl: function(e) { + var current = this.getFragment(); + + // If the user pressed the back button, the iframe's hash will have + // changed and we should use that for comparison. + if (current === this.fragment && this.iframe) { + current = this.getHash(this.iframe.contentWindow); + } + + if (current === this.fragment) return false; + if (this.iframe) this.navigate(current); + this.loadUrl(); + }, + + // Attempt to load the current URL fragment. If a route succeeds with a + // match, returns `true`. If no defined routes matches the fragment, + // returns `false`. + loadUrl: function(fragment) { + // If the root doesn't match, no routes can match either. + if (!this.matchRoot()) return false; + fragment = this.fragment = this.getFragment(fragment); + return _.any(this.handlers, function(handler) { + if (handler.route.test(fragment)) { + handler.callback(fragment); + return true; + } + }); + }, + + // Save a fragment into the hash history, or replace the URL state if the + // 'replace' option is passed. You are responsible for properly URL-encoding + // the fragment in advance. + // + // The options object can contain `trigger: true` if you wish to have the + // route callback be fired (not usually desirable), or `replace: true`, if + // you wish to modify the current URL without adding an entry to the history. + navigate: function(fragment, options) { + if (!History.started) return false; + if (!options || options === true) options = {trigger: !!options}; + + // Normalize the fragment. + fragment = this.getFragment(fragment || ''); + + // Don't include a trailing slash on the root. + var root = this.root; + if (fragment === '' || fragment.charAt(0) === '?') { + root = root.slice(0, -1) || '/'; + } + var url = root + fragment; + + // Strip the hash and decode for matching. + fragment = this.decodeFragment(fragment.replace(pathStripper, '')); + + if (this.fragment === fragment) return; + this.fragment = fragment; + + // If pushState is available, we use it to set the fragment as a real URL. + if (this._usePushState) { + this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url); + + // If hash changes haven't been explicitly disabled, update the hash + // fragment to store history. + } else if (this._wantsHashChange) { + this._updateHash(this.location, fragment, options.replace); + if (this.iframe && (fragment !== this.getHash(this.iframe.contentWindow))) { + var iWindow = this.iframe.contentWindow; + + // Opening and closing the iframe tricks IE7 and earlier to push a + // history entry on hash-tag change. When replace is true, we don't + // want this. + if (!options.replace) { + iWindow.document.open(); + iWindow.document.close(); + } + + this._updateHash(iWindow.location, fragment, options.replace); + } + + // If you've told us that you explicitly don't want fallback hashchange- + // based history, then `navigate` becomes a page refresh. + } else { + return this.location.assign(url); + } + if (options.trigger) return this.loadUrl(fragment); + }, + + // Update the hash location, either replacing the current entry, or adding + // a new one to the browser history. + _updateHash: function(location, fragment, replace) { + if (replace) { + var href = location.href.replace(/(javascript:|#).*$/, ''); + location.replace(href + '#' + fragment); + } else { + // Some browsers require that `hash` contains a leading #. + location.hash = '#' + fragment; + } + } + + }); + + // Create the default Backbone.history. + Backbone.history = new History; + + // Helpers + // ------- + + // Helper function to correctly set up the prototype chain for subclasses. + // Similar to `goog.inherits`, but uses a hash of prototype properties and + // class properties to be extended. + var extend = function(protoProps, staticProps) { + var parent = this; + var child; + + // The constructor function for the new subclass is either defined by you + // (the "constructor" property in your `extend` definition), or defaulted + // by us to simply call the parent constructor. + if (protoProps && _.has(protoProps, 'constructor')) { + child = protoProps.constructor; + } else { + child = function(){ return parent.apply(this, arguments); }; + } + + // Add static properties to the constructor function, if supplied. + _.extend(child, parent, staticProps); + + // Set the prototype chain to inherit from `parent`, without calling + // `parent` constructor function. + var Surrogate = function(){ this.constructor = child; }; + Surrogate.prototype = parent.prototype; + child.prototype = new Surrogate; + + // Add prototype properties (instance properties) to the subclass, + // if supplied. + if (protoProps) _.extend(child.prototype, protoProps); + + // Set a convenience property in case the parent's prototype is needed + // later. + child.__super__ = parent.prototype; + + return child; + }; + + // Set up inheritance for the model, collection, router, view and history. + Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend; + + // Throw an error when a URL is needed, and none is supplied. + var urlError = function() { + throw new Error('A "url" property or function must be specified'); + }; + + // Wrap an optional error callback with a fallback error event. + var wrapError = function(model, options) { + var error = options.error; + options.error = function(resp) { + if (error) error.call(options.context, model, resp, options); + model.trigger('error', model, resp, options); + }; + }; + + return Backbone; + +})); + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) + +/***/ }), +/* 73 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Before using methods you should get first the module from the editor instance, in this way: + * + * ```js + * var storageManager = editor.StorageManager; + * ``` + */ +module.exports = function () { + var c = {}, + defaults = __webpack_require__(74), + LocalStorage = __webpack_require__(75), + RemoteStorage = __webpack_require__(76); + + var em = void 0; + var storages = {}; + var defaultStorages = {}; + var eventStart = 'storage:start'; + var eventEnd = 'storage:end'; + var eventError = 'storage:error'; + + return { + /** + * Name of the module + * @type {String} + * @private + */ + name: 'StorageManager', + + /** + * Initialize module. Automatically called with a new instance of the editor + * @param {Object} config Configurations + * @param {string} [config.id='gjs-'] The prefix for the fields, useful to differentiate storing/loading + * with multiple editors on the same page. For example, in local storage, the item of HTML will be saved like 'gjs-html' + * @param {Boolean} [config.autosave=true] Indicates if autosave mode is enabled, works in conjunction with stepsBeforeSave + * @param {number} [config.stepsBeforeSave=1] If autosave enabled, indicates how many steps/changes are necessary + * before autosave is triggered + * @param {string} [config.type='local'] Default storage type. Available: 'local' | 'remote' | ''(do not store) + * @private + * @example + * ... + * { + * autosave: false, + * type: 'remote', + * } + * ... + */ + init: function init(config) { + c = config || {}; + em = c.em; + + for (var name in defaults) { + if (!(name in c)) c[name] = defaults[name]; + } + + defaultStorages.remote = new RemoteStorage(c); + defaultStorages.local = new LocalStorage(c); + c.currentStorage = c.type; + this.loadDefaultProviders().setCurrent(c.type); + return this; + }, + + + /** + * Get configuration object + * @return {Object} + * */ + getConfig: function getConfig() { + return c; + }, + + + /** + * Checks if autosave is enabled + * @return {Boolean} + * */ + isAutosave: function isAutosave() { + return !!c.autosave; + }, + + + /** + * Set autosave value + * @param {Boolean} v + * @return {this} + * */ + setAutosave: function setAutosave(v) { + c.autosave = !!v; + return this; + }, + + + /** + * Returns number of steps required before trigger autosave + * @return {number} + * */ + getStepsBeforeSave: function getStepsBeforeSave() { + return c.stepsBeforeSave; + }, + + + /** + * Set steps required before trigger autosave + * @param {number} v + * @return {this} + * */ + setStepsBeforeSave: function setStepsBeforeSave(v) { + c.stepsBeforeSave = v; + return this; + }, + + + /** + * Add new storage + * @param {string} id Storage ID + * @param {Object} storage Storage wrapper + * @param {Function} storage.load Load method + * @param {Function} storage.store Store method + * @return {this} + * @example + * storageManager.add('local2', { + * load: function(keys, clb, clbErr) { + * var res = {}; + * for (var i = 0, len = keys.length; i < len; i++){ + * var v = localStorage.getItem(keys[i]); + * if(v) res[keys[i]] = v; + * } + * clb(res); // might be called inside some async method + * // In case of errors... + * // clbErr('Went something wrong'); + * }, + * store: function(data, clb, clbErr) { + * for(var key in data) + * localStorage.setItem(key, data[key]); + * clb(); // might be called inside some async method + * } + * }); + * */ + add: function add(id, storage) { + storages[id] = storage; + return this; + }, + + + /** + * Returns storage by id + * @param {string} id Storage ID + * @return {Object|null} + * */ + get: function get(id) { + return storages[id] || null; + }, + + + /** + * Returns all storages + * @return {Array} + * */ + getStorages: function getStorages() { + return storages; + }, + + + /** + * Returns current storage type + * @return {string} + * */ + getCurrent: function getCurrent() { + return c.currentStorage; + }, + + + /** + * Set current storage type + * @param {string} id Storage ID + * @return {this} + * */ + setCurrent: function setCurrent(id) { + c.currentStorage = id; + return this; + }, + + + /** + * Store key-value resources in the current storage + * @param {Object} data Data in key-value format, eg. {item1: value1, item2: value2} + * @param {Function} clb Callback function + * @return {Object|null} + * @example + * storageManager.store({item1: value1, item2: value2}); + * */ + store: function store(data, clb) { + var _this = this; + + var st = this.get(this.getCurrent()); + var toStore = {}; + this.onStart('store', data); + + for (var key in data) { + toStore[c.id + key] = data[key]; + } + + return st ? st.store(toStore, function (res) { + clb && clb(res); + _this.onEnd('store', res); + }, function (err) { + _this.onError('store', err); + }) : null; + }, + + + /** + * Load resource from the current storage by keys + * @param {string|Array} keys Keys to load + * @param {Function} clb Callback function + * @example + * storageManager.load(['item1', 'item2'], res => { + * // res -> {item1: value1, item2: value2} + * }); + * storageManager.load('item1', res => { + * // res -> {item1: value1} + * }); + * */ + load: function load(keys, clb) { + var _this2 = this; + + var st = this.get(this.getCurrent()); + var keysF = []; + var result = {}; + + if (typeof keys === 'string') keys = [keys]; + this.onStart('load', keys); + + for (var i = 0, len = keys.length; i < len; i++) { + keysF.push(c.id + keys[i]); + } + + if (st) { + st.load(keysF, function (res) { + // Restore keys name + var reg = new RegExp('^' + c.id + ''); + for (var itemKey in res) { + var itemKeyR = itemKey.replace(reg, ''); + result[itemKeyR] = res[itemKey]; + } + + clb && clb(result); + _this2.onEnd('load', result); + }, function (err) { + _this2.onError('load', err); + }); + } else { + clb && clb(result); + } + }, + + + /** + * Load default storages + * @return {this} + * @private + * */ + loadDefaultProviders: function loadDefaultProviders() { + for (var id in defaultStorages) { + this.add(id, defaultStorages[id]); + }return this; + }, + + + /** + * Get current storage + * @return {Storage} + * */ + getCurrentStorage: function getCurrentStorage() { + return this.get(this.getCurrent()); + }, + + + /** + * On start callback + * @private + */ + onStart: function onStart(ctx, data) { + if (em) { + em.trigger(eventStart); + ctx && em.trigger(eventStart + ':' + ctx, data); + } + }, + + + /** + * On end callback + * @private + */ + onEnd: function onEnd(ctx, data) { + if (em) { + em.trigger(eventEnd); + ctx && em.trigger(eventEnd + ':' + ctx, data); + } + }, + + + /** + * On error callback + * @private + */ + onError: function onError(ctx, data) { + if (em) { + em.trigger(eventError, data); + ctx && em.trigger(eventError + ':' + ctx, data); + this.onEnd(ctx, data); + } + }, + + + /** + * Check if autoload is possible + * @return {Boolean} + * @private + * */ + canAutoload: function canAutoload() { + var storage = this.getCurrentStorage(); + return storage && this.getConfig().autoload; + } + }; +}; + +/***/ }), +/* 74 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = { + // Prefix identifier that will be used inside storing and loading + id: 'gjs-', + + // Enable/Disable autosaving + autosave: 1, + + // Indicates if load data inside editor after init + autoload: 1, + + // Indicates which storage to use. Available: local | remote + type: 'local', + + // If autosave enabled, indicates how many steps (general changes to structure) + // need to be done before save. Useful with remoteStorage to reduce remote calls + stepsBeforeSave: 1, + + //Enable/Disable components model (JSON format) + storeComponents: 1, + + //Enable/Disable styles model (JSON format) + storeStyles: 1, + + //Enable/Disable saving HTML template + storeHtml: 1, + + //Enable/Disable saving CSS template + storeCss: 1, + + // ONLY FOR LOCAL STORAGE + // If enabled, checks if browser supports Local Storage + checkLocal: 1, + + // ONLY FOR REMOTE STORAGE + // Custom parameters to pass with the remote storage request, eg. csrf token + params: {}, + + // Custom headers for the remote storage request + headers: {}, + + // Endpoint where to save all stuff + urlStore: '', + + // Endpoint where to fetch data + urlLoad: '', + + //Callback before request + beforeSend: function beforeSend(jqXHR, settings) {}, + + + //Callback after request + onComplete: function onComplete(jqXHR, status) {}, + + + // set contentType paramater of $.ajax + // true: application/json; charset=utf-8' + // false: 'x-www-form-urlencoded' + contentTypeJson: false +}; + +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Backbone = __webpack_require__(0); + +module.exports = Backbone.Model.extend({ + defaults: { + checkLocal: true + }, + + /** + * @private + */ + store: function store(data, clb) { + this.checkStorageEnvironment(); + + for (var key in data) { + localStorage.setItem(key, data[key]); + }if (typeof clb == 'function') { + clb(); + } + }, + + + /** + * @private + */ + load: function load(keys, clb) { + this.checkStorageEnvironment(); + var result = {}; + + for (var i = 0, len = keys.length; i < len; i++) { + var value = localStorage.getItem(keys[i]); + if (value) result[keys[i]] = value; + } + + if (typeof clb == 'function') { + clb(result); + } + + return result; + }, + + + /** + * @private + */ + remove: function remove(keys) { + this.checkStorageEnvironment(); + + for (var i = 0, len = keys.length; i < len; i++) { + localStorage.removeItem(keys[i]); + } + }, + + + /** + * Check storage environment + * @private + * */ + checkStorageEnvironment: function checkStorageEnvironment() { + if (this.get('checkLocal') && !localStorage) console.warn("Your browser doesn't support localStorage"); + } +}); + +/***/ }), +/* 76 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _fetch = __webpack_require__(26); + +var _fetch2 = _interopRequireDefault(_fetch); + +var _underscore = __webpack_require__(1); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = __webpack_require__(0).Model.extend({ + fetch: _fetch2.default, + + defaults: { + urlStore: '', + urlLoad: '', + params: {}, + beforeSend: function beforeSend() {}, + onComplete: function onComplete() {}, + + contentTypeJson: false + }, + + /** + * Triggered before the request is started + * @private + */ + onStart: function onStart() { + var em = this.get('em'); + var before = this.get('beforeSend'); + before && before(); + }, + + + /** + * Triggered on request error + * @param {Object} err Error + * @param {Function} [clbErr] Error callback + * @private + */ + onError: function onError(err, clbErr) { + if (clbErr) { + clbErr(err); + } else { + var em = this.get('em'); + console.error(err); + em && em.trigger('storage:error', err); + } + }, + + + /** + * Triggered on request response + * @param {string} text Response text + * @private + */ + onResponse: function onResponse(text, clb) { + var em = this.get('em'); + var complete = this.get('onComplete'); + var typeJson = this.get('contentTypeJson'); + var parsable = text && typeof text === 'string'; + var res = typeJson && parsable ? JSON.parse(text) : text; + complete && complete(res); + clb && clb(res); + em && em.trigger('storage:response', res); + }, + store: function store(data, clb, clbErr) { + var body = {}; + + for (var key in data) { + body[key] = data[key]; + } + + this.request(this.get('urlStore'), { body: body }, clb, clbErr); + }, + load: function load(keys, clb, clbErr) { + this.request(this.get('urlLoad'), { method: 'get' }, clb, clbErr); + }, + + + /** + * Execute remote request + * @param {string} url Url + * @param {Object} [opts={}] Options + * @param {Function} [clb=null] Callback + * @param {Function} [clbErr=null] Error callback + * @private + */ + request: function request(url) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var _this = this; + + var clb = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var clbErr = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; + + var typeJson = this.get('contentTypeJson'); + var headers = this.get('headers') || {}; + var params = this.get('params'); + var reqHead = 'X-Requested-With'; + var typeHead = 'Content-Type'; + var bodyObj = opts.body || {}; + var fetchOptions = void 0; + var body = void 0; + + for (var param in params) { + bodyObj[param] = params[param]; + } + + if ((0, _underscore.isUndefined)(headers[reqHead])) { + headers[reqHead] = 'XMLHttpRequest'; + } + + // With `fetch`, have to send FormData without any 'Content-Type' + // https://stackoverflow.com/questions/39280438/fetch-missing-boundary-in-multipart-form-data-post + + if ((0, _underscore.isUndefined)(headers[typeHead]) && typeJson) { + headers[typeHead] = 'application/json; charset=utf-8'; + } + + if (typeJson) { + body = JSON.stringify(bodyObj); + } else { + body = new FormData(); + + for (var bodyKey in bodyObj) { + body.append(bodyKey, bodyObj[bodyKey]); + } + } + fetchOptions = { + method: opts.method || 'post', + credentials: 'include', + headers: headers + }; + + // Body should only be included on POST method + if (fetchOptions.method === 'post') { + fetchOptions.body = body; + } + + this.onStart(); + this.fetch(url, fetchOptions).then(function (res) { + return (res.status / 200 | 0) == 1 ? res.text() : res.text().then(function (text) { + return Promise.reject(text); + }); + }).then(function (text) { + return _this.onResponse(text, clb); + }).catch(function (err) { + return _this.onError(err, clbErr); + }); + } +}); + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(setImmediate) { + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _finally = __webpack_require__(81); + +var _finally2 = _interopRequireDefault(_finally); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Store setTimeout reference so promise-polyfill will be unaffected by +// other code modifying setTimeout (like sinon.useFakeTimers()) +var setTimeoutFunc = setTimeout; + +function noop() {} + +// Polyfill for Function.prototype.bind +function bind(fn, thisArg) { + return function () { + fn.apply(thisArg, arguments); + }; +} + +function Promise(fn) { + if (!(this instanceof Promise)) throw new TypeError('Promises must be constructed via new'); + if (typeof fn !== 'function') throw new TypeError('not a function'); + this._state = 0; + this._handled = false; + this._value = undefined; + this._deferreds = []; + + doResolve(fn, this); +} + +function handle(self, deferred) { + while (self._state === 3) { + self = self._value; + } + if (self._state === 0) { + self._deferreds.push(deferred); + return; + } + self._handled = true; + Promise._immediateFn(function () { + var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + (self._state === 1 ? resolve : reject)(deferred.promise, self._value); + return; + } + var ret; + try { + ret = cb(self._value); + } catch (e) { + reject(deferred.promise, e); + return; + } + resolve(deferred.promise, ret); + }); +} + +function resolve(self, newValue) { + try { + // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure + if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.'); + if (newValue && ((typeof newValue === 'undefined' ? 'undefined' : _typeof(newValue)) === 'object' || typeof newValue === 'function')) { + var then = newValue.then; + if (newValue instanceof Promise) { + self._state = 3; + self._value = newValue; + finale(self); + return; + } else if (typeof then === 'function') { + doResolve(bind(then, newValue), self); + return; + } + } + self._state = 1; + self._value = newValue; + finale(self); + } catch (e) { + reject(self, e); + } +} + +function reject(self, newValue) { + self._state = 2; + self._value = newValue; + finale(self); +} + +function finale(self) { + if (self._state === 2 && self._deferreds.length === 0) { + Promise._immediateFn(function () { + if (!self._handled) { + Promise._unhandledRejectionFn(self._value); + } + }); + } + + for (var i = 0, len = self._deferreds.length; i < len; i++) { + handle(self, self._deferreds[i]); + } + self._deferreds = null; +} + +function Handler(onFulfilled, onRejected, promise) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.promise = promise; +} + +/** + * Take a potentially misbehaving resolver function and make sure + * onFulfilled and onRejected are only called once. + * + * Makes no guarantees about asynchrony. + */ +function doResolve(fn, self) { + var done = false; + try { + fn(function (value) { + if (done) return; + done = true; + resolve(self, value); + }, function (reason) { + if (done) return; + done = true; + reject(self, reason); + }); + } catch (ex) { + if (done) return; + done = true; + reject(self, ex); + } +} + +Promise.prototype['catch'] = function (onRejected) { + return this.then(null, onRejected); +}; + +Promise.prototype.then = function (onFulfilled, onRejected) { + var prom = new this.constructor(noop); + + handle(this, new Handler(onFulfilled, onRejected, prom)); + return prom; +}; + +Promise.prototype['finally'] = _finally2.default; + +Promise.all = function (arr) { + return new Promise(function (resolve, reject) { + if (!arr || typeof arr.length === 'undefined') throw new TypeError('Promise.all accepts an array'); + var args = Array.prototype.slice.call(arr); + if (args.length === 0) return resolve([]); + var remaining = args.length; + + function res(i, val) { + try { + if (val && ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' || typeof val === 'function')) { + var then = val.then; + if (typeof then === 'function') { + then.call(val, function (val) { + res(i, val); + }, reject); + return; + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } catch (ex) { + reject(ex); + } + } + + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); +}; + +Promise.resolve = function (value) { + if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.constructor === Promise) { + return value; + } + + return new Promise(function (resolve) { + resolve(value); + }); +}; + +Promise.reject = function (value) { + return new Promise(function (resolve, reject) { + reject(value); + }); +}; + +Promise.race = function (values) { + return new Promise(function (resolve, reject) { + for (var i = 0, len = values.length; i < len; i++) { + values[i].then(resolve, reject); + } + }); +}; + +// Use polyfill for setImmediate for performance gains +Promise._immediateFn = typeof setImmediate === 'function' && function (fn) { + setImmediate(fn); +} || function (fn) { + setTimeoutFunc(fn, 0); +}; + +Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) { + if (typeof console !== 'undefined' && console) { + console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console + } +}; + +exports.default = Promise; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(78).setImmediate)) + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {var apply = Function.prototype.apply; + +// DOM APIs, for completeness + +exports.setTimeout = function() { + return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); +}; +exports.setInterval = function() { + return new Timeout(apply.call(setInterval, window, arguments), clearInterval); +}; +exports.clearTimeout = +exports.clearInterval = function(timeout) { + if (timeout) { + timeout.close(); + } +}; + +function Timeout(id, clearFn) { + this._id = id; + this._clearFn = clearFn; +} +Timeout.prototype.unref = Timeout.prototype.ref = function() {}; +Timeout.prototype.close = function() { + this._clearFn.call(window, this._id); +}; + +// Does not start the time, just sets up the members needed. +exports.enroll = function(item, msecs) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = msecs; +}; + +exports.unenroll = function(item) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = -1; +}; + +exports._unrefActive = exports.active = function(item) { + clearTimeout(item._idleTimeoutId); + + var msecs = item._idleTimeout; + if (msecs >= 0) { + item._idleTimeoutId = setTimeout(function onTimeout() { + if (item._onTimeout) + item._onTimeout(); + }, msecs); + } +}; + +// setimmediate attaches itself to the global object +__webpack_require__(79); +// On some exotic environments, it's not clear which object `setimmeidate` was +// able to install onto. Search each possibility in the same order as the +// `setimmediate` library. +exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) || + (typeof global !== "undefined" && global.setImmediate) || + (this && this.setImmediate); +exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) || + (typeof global !== "undefined" && global.clearImmediate) || + (this && this.clearImmediate); + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) + +/***/ }), +/* 79 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) { + "use strict"; + + if (global.setImmediate) { + return; + } + + var nextHandle = 1; // Spec says greater than zero + var tasksByHandle = {}; + var currentlyRunningATask = false; + var doc = global.document; + var registerImmediate; + + function setImmediate(callback) { + // Callback can either be a function or a string + if (typeof callback !== "function") { + callback = new Function("" + callback); + } + // Copy function arguments + var args = new Array(arguments.length - 1); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i + 1]; + } + // Store and register the task + var task = { callback: callback, args: args }; + tasksByHandle[nextHandle] = task; + registerImmediate(nextHandle); + return nextHandle++; + } + + function clearImmediate(handle) { + delete tasksByHandle[handle]; + } + + function run(task) { + var callback = task.callback; + var args = task.args; + switch (args.length) { + case 0: + callback(); + break; + case 1: + callback(args[0]); + break; + case 2: + callback(args[0], args[1]); + break; + case 3: + callback(args[0], args[1], args[2]); + break; + default: + callback.apply(undefined, args); + break; + } + } + + function runIfPresent(handle) { + // From the spec: "Wait until any invocations of this algorithm started before this one have completed." + // So if we're currently running a task, we'll need to delay this invocation. + if (currentlyRunningATask) { + // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a + // "too much recursion" error. + setTimeout(runIfPresent, 0, handle); + } else { + var task = tasksByHandle[handle]; + if (task) { + currentlyRunningATask = true; + try { + run(task); + } finally { + clearImmediate(handle); + currentlyRunningATask = false; + } + } + } + } + + function installNextTickImplementation() { + registerImmediate = function(handle) { + process.nextTick(function () { runIfPresent(handle); }); + }; + } + + function canUsePostMessage() { + // The test against `importScripts` prevents this implementation from being installed inside a web worker, + // where `global.postMessage` means something completely different and can't be used for this purpose. + if (global.postMessage && !global.importScripts) { + var postMessageIsAsynchronous = true; + var oldOnMessage = global.onmessage; + global.onmessage = function() { + postMessageIsAsynchronous = false; + }; + global.postMessage("", "*"); + global.onmessage = oldOnMessage; + return postMessageIsAsynchronous; + } + } + + function installPostMessageImplementation() { + // Installs an event handler on `global` for the `message` event: see + // * https://developer.mozilla.org/en/DOM/window.postMessage + // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages + + var messagePrefix = "setImmediate$" + Math.random() + "$"; + var onGlobalMessage = function(event) { + if (event.source === global && + typeof event.data === "string" && + event.data.indexOf(messagePrefix) === 0) { + runIfPresent(+event.data.slice(messagePrefix.length)); + } + }; + + if (global.addEventListener) { + global.addEventListener("message", onGlobalMessage, false); + } else { + global.attachEvent("onmessage", onGlobalMessage); + } + + registerImmediate = function(handle) { + global.postMessage(messagePrefix + handle, "*"); + }; + } + + function installMessageChannelImplementation() { + var channel = new MessageChannel(); + channel.port1.onmessage = function(event) { + var handle = event.data; + runIfPresent(handle); + }; + + registerImmediate = function(handle) { + channel.port2.postMessage(handle); + }; + } + + function installReadyStateChangeImplementation() { + var html = doc.documentElement; + registerImmediate = function(handle) { + // Create a ")},getJsContainer:function(){return this.jsContainer||(this.jsContainer=$("
    ",{"class":this.ppfx+"js-cont"}).get(0)),this.jsContainer},render:function(){if(this.wrapper=this.model.get("wrapper"),this.wrapper&&"function"==typeof this.wrapper.render){this.model.get("frame").set("wrapper",this.wrapper),this.$el.append(this.frame.render().el);var a=this.frame;0===this.config.scripts.length?a.el.onload=this.renderBody:this.renderScripts()}var b=this.ppfx;toolsEl=$("
    ",{id:b+"tools"}).get(0),this.hlEl=$("
    ",{"class":b+"highlighter"}).get(0),this.badgeEl=$("
    ",{"class":b+"badge"}).get(0),this.placerEl=$("
    ",{"class":b+"placeholder"}).get(0),this.placerIntEl=$("
    ",{"class":b+"placeholder-int"}).get(0),this.ghostEl=$("
    ",{"class":b+"ghost"}).get(0),this.toolbarEl=$("
    ",{"class":b+"toolbar"}).get(0),this.resizerEl=$("
    ",{"class":b+"resizer"}).get(0),this.offsetEl=$("
    ",{"class":b+"offset-v"}).get(0),this.fixedOffsetEl=$("
    ",{"class":b+"offset-fixed-v"}).get(0),this.placerEl.appendChild(this.placerIntEl),toolsEl.appendChild(this.hlEl),toolsEl.appendChild(this.badgeEl),toolsEl.appendChild(this.placerEl),toolsEl.appendChild(this.ghostEl),toolsEl.appendChild(this.toolbarEl),toolsEl.appendChild(this.resizerEl),toolsEl.appendChild(this.offsetEl),toolsEl.appendChild(this.fixedOffsetEl),this.$el.append(toolsEl);var c=this.em.get("rte");return c&&toolsEl.appendChild(c.render()),this.toolsEl=toolsEl,this.$el.attr({"class":this.className}),this}})}),c("Canvas/main",["require","./config/config","./model/Canvas","./view/CanvasView"],function(a){return function(){var b,c={},d=a("./config/config"),e=a("./model/Canvas"),f=a("./view/CanvasView");return{getCanvasView:function(){return f},name:"Canvas",init:function(a){c=a||{};for(var g in d)g in c||(c[g]=d[g]);var h=c.pStylePrefix;h&&(c.stylePrefix=h+c.stylePrefix),b=new e(a),f=new f({model:b,config:c});var i=c.em.get("DomComponents");return i&&this.setWrapper(i),this},setWrapper:function(a){b.set("wrapper",a)},getElement:function(){return f.el},getFrameEl:function(){return f.frame.el},getBody:function(){return f.frame.el.contentDocument.body},getWrapperEl:function(){return this.getBody().querySelector("#wrapper")},getToolsEl:function(){return f.toolsEl},getHighlighter:function(){return f.hlEl},getBadgeEl:function(){return f.badgeEl},getPlacerEl:function(){return f.placerEl},getGhostEl:function(){return f.ghostEl},getToolbarEl:function(){return f.toolbarEl},getResizerEl:function(){return f.resizerEl},getOffsetViewerEl:function(){return f.offsetEl},getFixedOffsetViewerEl:function(){return f.fixedOffsetEl},render:function(){return f.render().el},getOffset:function(){var a=this.offset(this.getFrameEl()),b=this.offset(this.getElement());return{top:a.top-b.top,left:a.left-b.left}},offset:function(a){var b=a.getBoundingClientRect();return{top:b.top+document.body.scrollTop,left:b.left+document.body.scrollLeft}},getElementPos:function(a){return f.getElementPos(a)},getTargetToElementDim:function(a,b,d){var e=d||{},g=f.getPosition(),h=e.elPos||f.getElementPos(b),i=d.toRight||0,j=e.targetHeight||a.offsetHeight,k=e.targetWidth||a.offsetWidth,l=e.event||null,m=h.top-j,n=h.left;n+=i?h.width:0,n=i?n-k:n;var o=nh.top+h.height?h.top+h.height:p;var q={top:p,left:o,elementTop:h.top,elementLeft:h.left,elementWidth:h.width,elementHeight:h.height,targetWidth:a.offsetWidth,targetHeight:a.offsetHeight,canvasTop:g.top,canvasLeft:g.left};return l&&c.em&&c.em.trigger(l,q),q},getMouseRelativePos:function(a,b){var c=b||{},d=0,e=0,f=c.subWinOffset,g=a.target.ownerDocument,h=g.defaultView||g.parentWindow,i=h.frameElement,j=f?h.pageYOffset:0,k=f?h.pageXOffset:0;if(i){var l=i.getBoundingClientRect();d=l.top||0,e=l.left||0}return{y:a.clientY+d-j,x:a.clientX+e-k}},getMouseRelativeCanvas:function(a,b){var c=this.getFrameEl(),d=this.getBody(),e=c.offsetTop||0,f=c.offsetLeft||0,g=d.scrollTop||0,h=d.scrollLeft||0;return{y:a.clientY+e+g,x:a.clientX+f+h}},getFrameWrapperEl:function(){return f.frame.getWrapper()}}}}),c("Canvas",["Canvas/main"],function(a){return a}),c("Commands/config/config",[],function(){return{ESCAPE_KEY:27,stylePrefix:"com-",defaults:[],em:null,firstCentered:!0,newFixedH:!1,minComponentH:50,minComponentW:50}}),c("Commands/view/CommandAbstract",["backbone"],function(a){return a.View.extend({initialize:function(a){this.config=a||{},this.editorModel=this.em=this.config.em||{},this.pfx=this.config.stylePrefix,this.ppfx=this.config.pStylePrefix,this.hoverClass=this.pfx+"hover",this.badgeClass=this.pfx+"badge",this.plhClass=this.pfx+"placeholder",this.freezClass=this.ppfx+"freezed",this.canvas=this.em.get&&this.em.get("Canvas"),this.em.get&&this.setElement(this.getCanvas()),this.canvas&&(this.$canvas=this.$el,this.$wrapper=$(this.getCanvasWrapper()),this.frameEl=this.canvas.getFrameEl(),this.canvasTool=this.getCanvasTools(),this.bodyEl=this.getCanvasBody()),this.init(this.config)},onFrameScroll:function(a){},getCanvas:function(){return this.canvas.getElement()},getCanvasBody:function(){return this.canvas.getBody()},getCanvasWrapper:function(){return this.canvas.getWrapperEl()},getCanvasTools:function(){return this.canvas.getToolsEl()},offset:function(a){var b=a.getBoundingClientRect();return{top:b.top+a.ownerDocument.body.scrollTop,left:b.left+a.ownerDocument.body.scrollLeft}},init:function(a){},run:function(a,b){},stop:function(a,b){}})}),c("Abstract/view/DomainViews",["backbone"],function(a){return a.View.extend({itemView:"",itemsView:"",itemType:"type",initialize:function(a,b){this.config=b||{}},addTo:function(a){ -this.add(a)},add:function(a,b){var c=b||null,d=this.itemView,e=a.get(this.itemType);this.itemsView&&this.itemsView[e]&&(d=this.itemsView[e]);var f=new d({model:a,config:this.config},this.config),g=f.render().el;c?c.appendChild(g):this.$el.append(g)},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.length&&this.collection.each(function(b){this.add(b,a)},this),this.$el.append(a),this}})}),c("DomComponents/view/ToolbarButtonView",["backbone"],function(a){return a.View.extend({events:{mousedown:"handleClick"},attributes:function(){return this.model.get("attributes")},initialize:function(a){this.editor=a.config.editor},handleClick:function(){var a=this.model.get("command");"function"==typeof a&&a(this.editor),"string"==typeof a&&this.editor.runCommand(a)},render:function(){var a=this.editor.getConfig();return this.el.className+=" "+a.stylePrefix+"toolbar-item",this}})}),c("DomComponents/view/ToolbarView",["backbone","Abstract/view/DomainViews","./ToolbarButtonView"],function(a,b,c){return b.extend({itemView:c,initialize:function(a){this.config={editor:a.editor||""},this.listenTo(this.collection,"reset",this.render)}})}),c("DomComponents/model/ToolbarButton",["backbone"],function(a){return a.Model.extend({defaults:{command:"",attributes:{}}})}),c("DomComponents/model/Toolbar",["backbone","./ToolbarButton"],function(a,b){return a.Collection.extend({model:b})}),c("Commands/view/SelectComponent",["require","DomComponents/view/ToolbarView","DomComponents/model/Toolbar"],function(a){var b=a("DomComponents/view/ToolbarView"),c=a("DomComponents/model/Toolbar");return{init:function(a){_.bindAll(this,"onHover","onOut","onClick","onKeyPress")},enable:function(){_.bindAll(this,"copyComp","pasteComp","onFrameScroll"),this.frameOff=this.canvasOff=this.adjScroll=null;var a=this.config.em.get("Config");this.startSelectComponent(),this.toggleClipboard(a.copyPaste);var b=this.config.em;b.on("component:update",this.updateAttached,this),b.on("change:canvasOffset",this.updateAttached,this),b.on("change:selectedComponent",this.updateToolbar,this)},toggleClipboard:function(a){var b=a||0;b?(key("⌘+c, ctrl+c",this.copyComp),key("⌘+v, ctrl+v",this.pasteComp)):(key.unbind("⌘+c, ctrl+c"),key.unbind("⌘+v, ctrl+v"))},copyComp:function(){var a=this.editorModel.get("selectedComponent");a&&a.get("copyable")&&this.editorModel.set("clipboard",a)},pasteComp:function(){var a=this.editorModel.get("clipboard"),b=this.editorModel.get("selectedComponent");if(a&&b&&b.collection){var c=b.collection.indexOf(b),d=a.clone();b.collection.add(d,{at:c+1})}},getCanvasBodyEl:function(){return this.$bodyEl||(this.$bodyEl=$(this.getCanvasBody())),this.$bodyEl},startSelectComponent:function(){this.toggleSelectComponent(1)},stopSelectComponent:function(){this.toggleSelectComponent()},toggleSelectComponent:function(a){var b="*",c=a?"on":"off";this.getCanvasBodyEl()[c]("mouseover",b,this.onHover)[c]("mouseout",b,this.onOut)[c]("click",b,this.onClick);var d=this.getContentWindow();d[c]("scroll",this.onFrameScroll),d[c]("keydown",this.onKeyPress)},onKeyPress:function(a){var b=a.which||a.keyCode,c=this.editorModel.get("selectedComponent"),d="BODY"!==this.frameEl.contentDocument.activeElement.tagName;if((8==b||46==b)&&(d||a.preventDefault(),c&&!d)){if(!c.get("removable"))return;c.set("status",""),c.destroy(),this.hideBadge(),this.clean(),this.hideHighlighter(),this.editorModel.set("selectedComponent",null)}},onHover:function(a){a.stopPropagation();var b=a.target;this.adjScroll||(this.adjScroll=1,this.onFrameScroll(a),this.updateAttached());var c=this.getElementPos(b);this.updateBadge(b,c),this.updateHighlighter(b,c),this.showElementOffset(b,c)},onOut:function(a){a.stopPropagation(),this.hideBadge(),this.hideHighlighter(),this.hideElementOffset()},showElementOffset:function(a,b){var c=$(a),d=c.data("model");d&&"selected"==d.get("status")||this.editor.runCommand("show-offset",{el:a,elPos:b})},hideElementOffset:function(a,b){this.editor.stopCommand("show-offset")},showFixedElementOffset:function(a,b){this.editor.runCommand("show-offset",{el:a,elPos:b,state:"Fixed"})},hideFixedElementOffset:function(a,b){this.editor&&this.editor.stopCommand("show-offset",{state:"Fixed"})},hideHighlighter:function(){this.canvas.getHighlighter().style.display="none"},onClick:function(a){var b=$(a.target).data("model");if(b){var c=b.get("stylable");(c instanceof Array||c)&&this.onSelect(a,a.target)}},updateBadge:function(a,b){var c=$(a);this.cacheEl=a;var d=c.data("model");if(d&&d.get("badgable")){var e=this.getBadge();e.innerHTML=d.getName();var f=e.style,g="px";f.display="block";var h=this.canvas.getCanvasView().getPosition(),i=e?e.offsetHeight:0,j=e?e.offsetWidth:0,k=b.top-i"),e=this.codeMirror.clone().set({label:c,codeName:a,theme:b,input:d[0]}),f=new this.cm.EditorView({model:e,config:this.cm.getConfig()}).render().$el;return e.init(d[0]),{el:e,$el:f}},enable:function(){if(!this.$editors){var a=this.buildEditor("htmlmixed","hopscotch","HTML"),b=this.buildEditor("css","hopscotch","CSS");this.htmlEditor=a.el,this.cssEditor=b.el,this.$editors=$("
    ",{"class":this.pfx+"export-dl"}),this.$editors.append(a.$el).append(b.$el)}this.modal&&(this.modal.setTitle("Export template"),this.modal.setContent(this.$editors),this.modal.open());var c=this.protCss||"";this.htmlEditor.setContent(this.em.getHtml()),this.cssEditor.setContent(c+this.cm.getCode(this.wrapper,"css",this.cssc)),this.sender&&this.sender.set("active",!1)},stop:function(){}}}),c("Commands/view/SwitchVisibility",[],function(){return{run:function(a){a.Canvas.getBody().className=this.ppfx+"dashed"},stop:function(a){a.Canvas.getBody().className=""}}}),c("Navigator/config/config",[],function(){return{stylePrefix:"nv-",sortable:1,hidable:1,hideTextnode:1,containerId:"navigator",itemClass:"item",itemsClass:"items"}}),c("text!Navigator/template/item.html",[],function(){return'<% if (hidable) { %>\n\t\n<% } %>\n\n
    \n
    \n \t\n\t\t\n\t\t\n
    \n
    \n\n
    <%= (count ? count : \'\') %>
    \n\n
    \n\t\n
    \n\n
    \n'}),c("Navigator/view/ItemView",["backbone","text!./../template/item.html","require"],function(a,b,c){return a.View.extend({template:_.template(b),initialize:function(a){this.opt=a,this.config=a.config,this.em=a.config.em,this.ppfx=this.em.get("Config").stylePrefix,this.sorter=a.sorter||{},this.pfx=this.config.stylePrefix,"undefined"==typeof this.model.get("open")&&this.model.set("open",!1),this.listenTo(this.model.components,"remove add change reset",this.checkChildren),this.listenTo(this.model,"destroy remove",this.remove),this.listenTo(this.model,"change:status",this.updateStatus),this.listenTo(this.model,"change:open",this.updateOpening),this.className=this.pfx+"item no-select",this.editBtnCls=this.pfx+"nav-item-edit",this.inputNameCls=this.ppfx+"nav-comp-name",this.caretCls=this.ppfx+"nav-item-caret",this.titleCls=this.pfx+"title",this.customNameProp="custom-name",this.events={},this.events["click > #"+this.pfx+"btn-eye"]="toggleVisibility",this.events["click ."+this.caretCls]="toggleOpening",this.events["click ."+this.titleCls]="handleSelect",this.events["click ."+this.editBtnCls]="handleEdit",this.events["blur ."+this.inputNameCls]="handleEditEnd",this.$el.data("model",this.model),this.$el.data("collection",this.model.get("components")),a.config.sortable&&(this.events["mousedown > #"+this.pfx+"move"]="startSort"),this.delegateEvents()},handleEdit:function(a){a.stopPropagation();var b=this.getInputName();b.readOnly=!1,b.focus()},handleEditEnd:function(a){a.stopPropagation();var b=this.getInputName();b.readOnly=!0,this.model.set(this.customNameProp,b.value)},getInputName:function(){return this.inputName||(this.inputName=this.el.querySelector("."+this.inputNameCls)),this.inputName},updateOpening:function(){var a=this.opt.opened||{},b=this.model;b.get("open")?(this.$el.addClass("open"),this.$caret.addClass("fa-chevron-down"),a[b.cid]=b):(this.$el.removeClass("open"),this.$caret.removeClass("fa-chevron-down"),delete a[b.cid])},toggleOpening:function(a){a.stopPropagation(),this.model.components.length&&this.model.set("open",!this.model.get("open"))},handleSelect:function(a){a.stopPropagation();var b=this.em;if(b){var c=b.get("selectedComponent");c&&c.set("status",""),this.model.set("status","selected"),b.set("selectedComponent",this.model)}},startSort:function(a){this.sorter&&this.sorter.startSort(a.target)},freeze:function(){this.$el.addClass(this.pfx+"opac50"),this.model.set("open",0)},unfreeze:function(){this.$el.removeClass(this.pfx+"opac50")},updateStatus:function(a){var b=this.model.get("status"),c=this.pfx+"selected",d=this.$el;switch(b){case"selected":d.addClass(c);break;case"moving":break;default:d.removeClass(c)}},toggleVisibility:function(a){this.$eye||(this.$eye=this.$el.find("> #"+this.pfx+"btn-eye"));var b=_.clone(this.model.get("style")),c=this.pfx+"hide";this.isVisible()?(this.$el.addClass(c),this.$eye.addClass("fa-eye-slash"),b.display="none"):(this.$el.removeClass(c),this.$eye.removeClass("fa-eye-slash"),delete b.display),this.model.set("style",b)},isVisible:function(){var a=this.model.get("style"),b=a.display;if(!b||"none"!=b)return 1},checkChildren:function(){var a=this.countChildren(this.model),b=this.pfx,c="> ."+b+"title-c > ."+b+"title";this.$counter||(this.$counter=this.$el.find("> #"+b+"counter")),a?(this.$el.find(c).removeClass(b+"no-chld"),this.$counter.html(a)):(this.$el.find(c).addClass(b+"no-chld"),this.$counter.empty(),this.model.set("open",0))},countChildren:function(a){var b=0;return a.components.each(function(a){var c=this.opt.isCountable,d=this.config.hideTextnode;c&&!c(a,d)||b++},this),b},render:function(){var a=this.pfx,b=this.isVisible(),d=this.countChildren(this.model);return this.$el.html(this.template({title:this.model.get(this.customNameProp)||this.model.getName(),addClass:d?"":a+"no-chld",editBtnCls:this.editBtnCls,inputNameCls:this.inputNameCls,caretCls:this.caretCls,count:d,visible:b,hidable:this.config.hidable,prefix:a,ppfx:this.ppfx})),"undefined"==typeof ItemsView&&(ItemsView=c("./ItemsView")),this.$components=new ItemsView({collection:this.model.components,config:this.config,sorter:this.sorter,opened:this.opt.opened,parent:this.model}).render().$el,this.$el.find("."+a+"children").html(this.$components),this.$caret=this.$el.find("> ."+a+"title-c > ."+a+"title > #"+a+"caret"),this.model.get("draggable")&&this.config.sortable||this.$el.find("> #"+a+"move").detach(),b||(this.className+=" "+a+"hide"),this.$el.attr("class",_.result(this,"className")),this.updateOpening(),this.updateStatus(),this}})}),c("Navigator/view/ItemsView",["backbone","./ItemView"],function(a,b){return a.View.extend({initialize:function(a){if(this.opt=a,this.config=a.config,this.preview=a.preview,this.ppfx=a.config.pStylePrefix||"",this.pfx=a.config.stylePrefix||"",this.parent=a.parent,this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset resetNavigator",this.render),this.className=this.pfx+"items",this.config.sortable&&!this.opt.sorter){var b=this.pfx,c=this.config.em.get("Utils");this.opt.sorter=new c.Sorter({container:this.el,containerSel:"."+b+"items",itemSel:"."+b+"item",ppfx:this.ppfx,pfx:b,nested:1})}this.sorter=this.opt.sorter||"",this.parent||(this.className+=" "+this.pfx+this.config.containerId),this.$el.data("collection",this.collection)},addTo:function(a){var b=this.collection.indexOf(a);this.addToCollection(a,null,b)},addToCollection:function(a,c,d){var e=c||null,f=b,g=new f({model:a,config:this.config,sorter:this.sorter,isCountable:this.isCountable,opened:this.opt.opened}),h=g.render().el;if(e)e.appendChild(h);else if("undefined"!=typeof d){var i="before";this.$el.children().length==d&&(d--,i="after"),d<0?this.$el.append(h):this.$el.children().eq(d)[i](h)}else this.$el.append(h);return h},isCountable:function(a,b){var c=a.get("type"),d=a.get("tagName");return("textnode"!=c&&"br"!=d||!b)&&!a.get("hiddenLayer")},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.isCountable(b,this.config.hideTextnode)&&this.addToCollection(b,a)},this),this.$el.append(a),this.$el.attr("class",_.result(this,"className")),this}})}),c("Navigator/main",["require","./config/config","./view/ItemsView"],function(a){function b(b,c){var d=c,e=a("./config/config"),f=a("./view/ItemsView");for(var g in e)g in d||(d[g]=e[g]);var h={collection:b,config:d,opened:c.opened||{}};this.ItemsView=new f(h)}return b.prototype={render:function(){return this.ItemsView.render().$el}},b}),c("Navigator",["Navigator/main"],function(a){return a}),c("Commands/view/OpenLayers",["Navigator"],function(a){return{run:function(b,c){if(!this.$layers){var d=b.DomComponents.getComponent().get("components"),e=b.getConfig(),f=b.Panels,g=e.layers.stylePrefix||"nv-";e.layers.stylePrefix=e.stylePrefix+g,e.layers.pStylePrefix=e.stylePrefix,e.layers.em=b.editor,e.layers.opened=b.editor.get("opened");var h=new a(d,e.layers);this.$layers=h.render(),f.getPanel("views-container")?this.panel=f.getPanel("views-container"):this.panel=f.addPanel({id:"views-container"}),this.panel.set("appendContent",this.$layers).trigger("change:appendContent")}this.$layers.show()},stop:function(){this.$layers&&this.$layers.hide()}}}),c("Commands/view/OpenStyleManager",["StyleManager"],function(a){return{run:function(a,b){if(this.sender=b,!this.$cn){var c=a.getConfig(),d=a.Panels;this.$cn=$("
    "),this.$cn2=$("
    "),this.$cn.append(this.$cn2);var e=a.DeviceManager;if(e&&c.showDevices){var f=d.addPanel({id:"devices-c"});f.set("appendContent",e.render()).trigger("change:appendContent")}var g=a.SelectorManager;g&&this.$cn2.append(g.render([])),this.$cn2.append(a.StyleManager.render());var h=a.StyleManager.getConfig();this.$header=$("
    ",{"class":h.stylePrefix+"header",text:h.textNoElement}),this.$cn.append(this.$header),d.getPanel("views-container")?this.panel=d.getPanel("views-container"):this.panel=d.addPanel({id:"views-container"}),this.panel.set("appendContent",this.$cn).trigger("change:appendContent"),this.target=a.editor,this.listenTo(this.target,"change:selectedComponent",this.toggleSm)}this.toggleSm()},toggleSm:function(){this.sender.get("active")&&(this.target.get("selectedComponent")?(this.$cn2.show(),this.$header.hide()):(this.$cn2.hide(),this.$header.show()))},stop:function(){this.$cn2&&this.$cn2.hide(),this.$header&&this.$header.hide()}}}),c("Commands/view/OpenTraitManager",[],function(){return{run:function(a,b){var c=a.Config,d=c.stylePrefix,e=a.TraitManager;if(!this.obj){var f=e.getTraitsViewer(),g=e.getConfig();this.obj=$("
    ").append('
    '+g.labelContainer+"
    ").get(0),this.obj.appendChild(f.render().el);var h=a.Panels;h.getPanel("views-container")?panelC=h.getPanel("views-container"):panelC=h.addPanel({id:"views-container"}),panelC.set("appendContent",this.obj).trigger("change:appendContent")}this.obj.style.display="block"},stop:function(){this.obj&&(this.obj.style.display="none")}}}),c("Commands/view/OpenBlocks",[],function(){return{run:function(a,b){var c=a.Config,d=(c.stylePrefix,a.BlockManager);if(!this.blocks){this.blocks=$("
    ").get(0),this.blocks.appendChild(d.render());var e=a.Panels;e.getPanel("views-container")?panelC=e.getPanel("views-container"):panelC=e.addPanel({id:"views-container"}),panelC.set("appendContent",this.blocks).trigger("change:appendContent")}this.blocks.style.display="block"},stop:function(){this.blocks&&(this.blocks.style.display="none")}}}),c("Commands/view/OpenAssets",[],function(){return{run:function(a,b,c){var d=c||{},e=(a.getConfig(),a.Modal),f=a.AssetManager;f.onClick(d.onClick),f.onDblClick(d.onDblClick),f.setTarget(d.target),f.onSelect(d.onSelect),e.setTitle(d.modalTitle||"Select image"),e.setContent(f.render()),e.open()}}}),c("Commands/view/ShowOffset",[],function(){return{getOffsetMethod:function(a){var b=a||"";return"get"+b+"OffsetViewerEl"},run:function(a,b,c){var d=c||{},e=d.state||"",f=a.getConfig();if(f.showOffsets&&(f.showOffsetsSelected||"Fixed"!=e)){var g=a.Canvas,h=d.el||"",i=d.elPos||g.getElementPos(h),j=window.getComputedStyle(h),k=this.ppfx,l=e+"State",m=this.getOffsetMethod(e),n=g[m]();n.style.display="block";var o=this["marginT"+e],p=this["marginB"+e],q=this["marginL"+e],r=this["marginR"+e],s=this["padT"+e],t=this["padB"+e],u=this["padL"+e],v=this["padR"+e];if(!this[l]){var w=e.toLowerCase(),x=w+"margin-v",y=w+"padding-v",z=$("
    ",{"class":k+x}).get(0),A=$("
    ",{"class":k+y}).get(0),B=k+x+"-el",C=k+y+"-el";o=$("
    ",{"class":k+x+"-top "+B}).get(0),p=$("
    ",{"class":k+x+"-bottom "+B}).get(0),q=$("
    ",{"class":k+x+"-left "+B}).get(0),r=$("
    ",{"class":k+x+"-right "+B}).get(0),s=$("
    ",{"class":k+y+"-top "+C}).get(0),t=$("
    ",{"class":k+y+"-bottom "+C}).get(0),u=$("
    ",{"class":k+y+"-left "+C}).get(0),v=$("
    ",{"class":k+y+"-right "+C}).get(0),this["marginT"+e]=o,this["marginB"+e]=p,this["marginL"+e]=q,this["marginR"+e]=r,this["padT"+e]=s,this["padB"+e]=t,this["padL"+e]=u,this["padR"+e]=v,z.appendChild(o),z.appendChild(p),z.appendChild(q),z.appendChild(r),A.appendChild(s),A.appendChild(t),A.appendChild(u),A.appendChild(v),n.appendChild(z),n.appendChild(A),this[l]="1"}var D="px",E=j.marginLeft.replace(D,""),F=parseInt(j.marginTop.replace(D,"")),G=parseInt(j.marginBottom.replace(D,"")),H=o.style,I=p.style,J=q.style,K=r.style,L=s.style,M=t.style,N=u.style,O=v.style,P=parseInt(i.left);H.height=j.marginTop,H.width=j.width,H.top=i.top-j.marginTop.replace(D,"")+D,H.left=P+D,I.height=j.marginBottom,I.width=j.width,I.top=i.top+i.height+D,I.left=P+D;var Q=i.height+F+G+D,R=i.top-F+D;J.height=Q,J.width=j.marginLeft,J.top=R,J.left=P-E+D,K.height=Q,K.width=j.marginRight,K.top=R,K.left=P+i.width+D;var S=parseInt(j.paddingTop.replace(D,""));L.height=j.paddingTop,L.width=j.width,L.top=i.top+D,L.left=P+D;var T=parseInt(j.paddingBottom.replace(D,""));M.height=j.paddingBottom,M.width=j.width,M.top=i.top+i.height-T+D,M.left=P+D;var U=i.height-T-S+D,V=i.top+S+D;N.height=U,N.width=j.paddingLeft,N.top=V,N.left=i.left+D;var W=parseInt(j.paddingRight.replace(D,""));O.height=U,O.width=j.paddingRight,O.top=V,O.left=i.left+i.width-W+D}},stop:function(a,b,c){var d=c||{},e=d.state||"",f=this.getOffsetMethod(e),g=a.Canvas,h=g[f]();h.style.display="none"}}}),c("Commands/view/Fullscreen",[],function(){return{isEnabled:function(){var a=document;return a.fullscreenElement||a.webkitFullscreenElement||a.mozFullScreenElement?1:0},enable:function(a){var b="";return a.requestFullscreen?a.requestFullscreen():a.webkitRequestFullscreen?(b="webkit",a.webkitRequestFullscreen()):a.mozRequestFullScreen?(b="moz",a.mozRequestFullScreen()):a.msRequestFullscreen?a.msRequestFullscreen():console.warn("Fullscreen not supported"),b},disable:function(){var a=document;a.exitFullscreen?a.exitFullscreen():a.webkitExitFullscreen?a.webkitExitFullscreen():a.mozCancelFullScreen?a.mozCancelFullScreen():a.msExitFullscreen&&a.msExitFullscreen()},fsChanged:function(a,b){var c=(document,(a||"")+"fullscreenchange");this.isEnabled()||(this.stop(null,this.sender),document.removeEventListener(c,this.fsChanged))},run:function(a,b){this.sender=b;var c=this.enable(a.getContainer());this.fsChanged=this.fsChanged.bind(this,c), -document.addEventListener(c+"fullscreenchange",this.fsChanged),a&&a.trigger("change:canvasOffset")},stop:function(a,b){b&&b.set&&b.set("active",!1),this.disable(),a&&a.trigger("change:canvasOffset")}}}),c("Commands/view/Preview",[],function(){return{getPanels:function(a){return this.panels||(this.panels=a.Panels.getPanelsEl()),this.panels},tglPointers:function(a,b){var c=a.Canvas.getBody().querySelectorAll("."+this.ppfx+"no-pointer");_.each(c,function(a){a.style.pointerEvents=b?"":"all"})},run:function(a,b){b&&b.set&&b.set("active",!1),a.stopCommand("sw-visibility");var c=this,d=this.getPanels(a),e=a.Canvas.getElement(),f=a.getEl(),g=a.Config.stylePrefix;this.helper||(this.helper=document.createElement("span"),this.helper.className=g+"off-prv fa fa-eye-slash",f.appendChild(this.helper),this.helper.onclick=function(){c.stop(a)}),this.helper.style.display="inline-block",this.tglPointers(a),d.style.display="none";var h=e.style;h.width="100%",h.height="100%",h.top="0",h.left="0",h.padding="0",h.margin="0",a.trigger("change:canvasOffset")},stop:function(a,b){var c=this.getPanels(a);a.runCommand("sw-visibility"),a.getModel().runDefault(),c.style.display="block";var d=a.Canvas.getElement();d.setAttribute("style",""),this.helper&&(this.helper.style.display="none"),a.trigger("change:canvasOffset"),this.tglPointers(a,1)}}}),c("Commands/view/Resize",[],function(){return{run:function(a,b,c){var d=c&&c.el||"",e=a.Canvas,f=this.canvasResizer,g=c.options||{};if(!f){var h=e.getCanvasView();g.ratioDefault=1,g.appendTo=e.getResizerEl(),g.prefix=a.getConfig().stylePrefix,g.posFetcher=h.getElementPos.bind(h),g.mousePosFetcher=e.getMouseRelativePos,this.canvasResizer=a.Utils.Resizer.init(g),f=this.canvasResizer}f.setOptions(g),f.focus(d)},stop:function(){this.canvasResizer&&this.canvasResizer.blur()}}}),c("Commands/main",["require","./config/config","./view/CommandAbstract","./view/SelectComponent","./view/CreateComponent","./view/DeleteComponent","./view/ImageComponent","./view/MoveComponent","./view/TextComponent","./view/InsertCustom","./view/ExportTemplate","./view/SwitchVisibility","./view/OpenLayers","./view/OpenStyleManager","./view/OpenTraitManager","./view/OpenBlocks","./view/OpenAssets","./view/ShowOffset","./view/Fullscreen","./view/Preview","./view/Resize"],function(a){return function(){var b={},c={},d={},e=a("./config/config"),f=a("./view/CommandAbstract"),g=function(a,b){return delete b.initialize,c[a]=f.extend(b),this};return{name:"Commands",init:function(c){b=c||{};for(var f in e)f in b||(b[f]=e[f]);var g=b.pStylePrefix;g&&(b.stylePrefix=g+b.stylePrefix);for(var h in b.defaults){var i=b.defaults[h];i.id&&this.add(i.id,i)}return d["select-comp"]=a("./view/SelectComponent"),d["create-comp"]=a("./view/CreateComponent"),d["delete-comp"]=a("./view/DeleteComponent"),d["image-comp"]=a("./view/ImageComponent"),d["move-comp"]=a("./view/MoveComponent"),d["text-comp"]=a("./view/TextComponent"),d["insert-custom"]=a("./view/InsertCustom"),d["export-template"]=a("./view/ExportTemplate"),d["sw-visibility"]=a("./view/SwitchVisibility"),d["open-layers"]=a("./view/OpenLayers"),d["open-sm"]=a("./view/OpenStyleManager"),d["open-tm"]=a("./view/OpenTraitManager"),d["open-blocks"]=a("./view/OpenBlocks"),d["open-assets"]=a("./view/OpenAssets"),d["show-offset"]=a("./view/ShowOffset"),d.fullscreen=a("./view/Fullscreen"),d.preview=a("./view/Preview"),d.resize=a("./view/Resize"),d["tlb-delete"]={run:function(a){var b=a.getSelected();return b&&b.get("removable")?(b.set("status",""),b.destroy(),a.trigger("component:update",b),void a.editor.set("selectedComponent",null)):void console.warn("The element is not removable")}},d["tlb-clone"]={run:function(a){var b=a.getSelected();if(!b||!b.get("copyable"))return void console.warn("The element is not clonable");var c=b.collection,d=c.indexOf(b);c.add(b.clone(),{at:d+1}),a.trigger("component:update",b)}},d["tlb-move"]={run:function(a){var b=a.getSelected();if(!b||!b.get("draggable"))return void console.warn("The element is not draggable");var c=a.Canvas.getToolbarEl(),d=a.Commands.get("move-comp");d.onEndMoveFromModel=function(){a.editor.runDefault(),a.editor.set("selectedComponent",b),a.trigger("component:update",b)},a.editor.stopDefault(),d.initSorterFromModel(b),b.set("status","selected"),c.style.display="none"}},b.em&&(b.model=b.em.get("Canvas")),this},onLoad:function(){this.loadDefaultCommands()},add:g,get:function(a){var d=c[a];return"function"==typeof d&&(d=new d(b),c[a]=d),d},has:function(a){return!!c[a]},loadDefaultCommands:function(){for(var a in d)this.add(a,d[a]);return this}}}}),c("Commands",["Commands/main"],function(a){return a}),c("BlockManager/config/config",[],function(){return{blocks:[]}}),c("BlockManager/model/Block",["backbone"],function(a){return a.Model.extend({defaults:{label:"",content:"",attributes:{}}})}),c("BlockManager/model/Blocks",["backbone","./Block"],function(a,b){return a.Collection.extend({model:b})}),c("BlockManager/view/BlockView",["backbone"],function(a){return a.View.extend({events:{mousedown:"onDrag"},initialize:function(a,b){_.bindAll(this,"onDrop"),this.config=b||{},this.ppfx=this.config.pStylePrefix||"",this.listenTo(this.model,"destroy",this.remove),this.doc=$(document)},onDrag:function(a){if(this.config.getSorter){this.config.em.refreshCanvas();var b=this.config.getSorter();b.setDragHelper(this.el,a),b.startSort(this.el),b.setDropContent(this.model.get("content")),this.doc.on("mouseup",this.onDrop)}},onDrop:function(){this.doc.off("mouseup",this.onDrop),this.config.getSorter().endMove()},render:function(){var a=this.ppfx+"block";return this.$el.addClass(a),this.el.innerHTML='
    '+this.model.get("label")+"
    ",this}})}),c("BlockManager/view/BlocksView",["backbone","./BlockView"],function(a,b){return a.View.extend({initialize:function(a,b){_.bindAll(this,"getSorter","onDrag","onDrop"),this.config=b||{},this.ppfx=this.config.pStylePrefix||"",this.listenTo(this.collection,"add",this.addTo),this.em=this.config.em,this.tac="test-tac",this.grabbingCls=this.ppfx+"grabbing",this.em&&(this.config.getSorter=this.getSorter,this.canvas=this.em.get("Canvas"))},getSorter:function(){if(this.em){if(!this.sorter){var a=this.em.get("Utils"),b=this.canvas;this.sorter=new a.Sorter({container:b.getBody(),placer:b.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,onStart:this.onDrag,onEndMove:this.onDrop,document:b.getFrameEl().contentDocument,direction:"a",wmargin:1,nested:1,em:this.em,canvasRelative:1})}return this.sorter}},onDrag:function(){this.em.stopDefault()},onDrop:function(a){this.em.runDefault(),a&&a.get&&(a.get("activeOnRender")&&(a.trigger("active"),a.set("activeOnRender",0)),this.em.initChildrenComp(a))},addTo:function(a){this.add(a)},add:function(a,c){var d=c||null,e=new b({model:a,attributes:a.get("attributes")},this.config),f=e.render().el;d?d.appendChild(f):this.$el.append(f)},render:function(){var a=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(b){this.add(b,a)},this),this.$el.append(a),this.$el.addClass(this.ppfx+"blocks-c"),this}})}),c("BlockManager/main",["require","./config/config","./model/Blocks","./view/BlocksView"],function(a){return function(){var b,c,d={},e=a("./config/config"),f=a("./model/Blocks"),g=a("./view/BlocksView");return{name:"BlockManager",init:function(a){d=a||{};for(var h in e)h in d||(d[h]=e[h]);return b=new f(d.blocks),c=new g({collection:b},d),this},add:function(a,c){var d=c||{};return d.id=a,b.add(d)},get:function(a){return b.get(a)},getAll:function(){return b},render:function(){return c.render().el}}}}),c("BlockManager",["BlockManager/main"],function(a){return a}),c("TraitManager/config/config",[],function(){return{stylePrefix:"trt-",labelContainer:"Component settings"}}),c("TraitManager/view/TraitView",["backbone"],function(a){return a.View.extend({events:{change:"onChange"},initialize:function(a){var b=this.model;this.config=a.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=b.target,this.className=this.pfx+"trait",this.labelClass=this.ppfx+"label",this.fieldClass=this.ppfx+"field "+this.ppfx+"field-"+b.get("type"),this.inputhClass=this.ppfx+"input-holder",b.off("change:value",this.onValueChange),this.listenTo(b,"change:value",this.onValueChange),this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().value)},getValueForTarget:function(){return this.model.get("value")},onValueChange:function(){var a=this.model,b=this.target,c=a.get("name"),d=this.getValueForTarget();if(a.get("changeProp"))b.set(c,d);else{var e=_.clone(b.get("attributes"));e[c]=d,b.set("attributes",e)}},renderLabel:function(){this.$el.html('
    '+this.getLabel()+"
    ")},getLabel:function(){var a=this.model,b=a.get("label")||a.get("name");return b.charAt(0).toUpperCase()+b.slice(1).replace(/-/g," ")},getInputEl:function(){if(!this.$input){var a=this.model,b=this.target,c=a.get("name"),d={placeholder:a.get("placeholder")||a.get("default"),type:a.get("type")||"text"};if(a.get("changeProp"))d.value=b.get(c);else{var e=b.get("attributes");d.value=a.get("value")||e[c]}a.get("min")&&(d.min=a.get("min")),a.get("max")&&(d.max=a.get("max")),this.$input=$("",d)}return this.$input.get(0)},getModelValue:function(){var a,b=this.model,c=this.target,d=b.get("name");if(b.get("changeProp"))a=c.get(d);else{var e=c.get("attributes");a=b.get("value")||e[d]}return a},renderField:function(){if(!this.$input){this.$el.append(this.tmpl);var a=this.getInputEl();this.$el.find("."+this.inputhClass).prepend(a)}},render:function(){return this.renderLabel(),this.renderField(),this.el.className=this.className,this}})}),c("TraitManager/view/TraitSelectView",["backbone","./TraitView"],function(a,b){return b.extend({initialize:function(a){b.prototype.initialize.apply(this,arguments);var c=this.ppfx;this.tmpl='
    '},getInputEl:function(){if(!this.$input){var a=this.model,b=a.get("options")||[],c="",this.input=c,this.$input=$(this.input);var d=this.target,e=a.get("name"),f=a.get("value");if(a.get("changeProp"))f=f||d.get(e);else{var g=d.get("attributes");f=g[e]}f&&this.$input.val(f)}return this.$input.get(0)}})}),c("TraitManager/view/TraitCheckboxView",["./TraitView"],function(a){return a.extend({initialize:function(b){a.prototype.initialize.apply(this,arguments);var c=this.ppfx+"chk-icon";this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().checked)},getInputEl:function(){var b;this.$input||(b=1);var c=a.prototype.getInputEl.apply(this,arguments);if(b){var d=this.model,e=d.get("name"),f=this.target;if(d.get("changeProp"))c.checked=f.get(e);else{var g=f.get("attributes");c.checked=!!g[e]}}return c}})}),c("TraitManager/view/TraitNumberView",["./TraitView","Abstract/ui/InputNumber"],function(a,b){return a.extend({getValueForTarget:function(){var a=this.model,b=a.get("value"),c=a.get("unit");return b?b+c:""},getInputEl:function(){if(!this.$input){var a=this.getModelValue(),c=new b({contClass:this.ppfx+"field-int",model:this.model,ppfx:this.ppfx});this.input=c.render(),this.$input=this.input.inputEl,this.$unit=this.input.unitEl,this.model.set("value",a),this.$input.val(a)}return this.$input.get(0)},renderField:function(){this.$input||(this.$el.append(this.tmpl),this.getInputEl(),this.$el.find("."+this.inputhClass).prepend(this.input.el))}})}),c("TraitManager/view/TraitColorView",["./TraitView","Abstract/ui/InputColor"],function(a,b){return a.extend({getInputEl:function(){if(!this.$input){var a=this.getModelValue(),c=new b({contClass:this.ppfx+"field-color",model:this.model,ppfx:this.ppfx});this.input=c.render(),this.$input=this.input.colorEl,a=a||"",this.model.set("value",a).trigger("change:value")}return this.$input.get(0)},renderField:function(){this.$input||(this.getInputEl(),this.$el.append(this.input.el))}})}),c("TraitManager/view/TraitsView",["require","Abstract/view/DomainViews","./TraitView","./TraitSelectView","./TraitCheckboxView","./TraitNumberView","./TraitColorView"],function(a){var b=a("Abstract/view/DomainViews"),c=a("./TraitView"),d=a("./TraitSelectView"),e=a("./TraitCheckboxView"),f=a("./TraitNumberView"),g=a("./TraitColorView");return b.extend({itemView:c,itemsView:{text:c,number:f,select:d,checkbox:e,color:g},initialize:function(a){this.config=a.config||{},this.em=a.editor,this.pfx=this.config.stylePrefix||"",this.className=this.pfx+"traits",this.listenTo(this.em,"change:selectedComponent",this.updatedCollection),this.updatedCollection()},updatedCollection:function(){this.el.className=this.className;var a=this.em.get("selectedComponent");a&&(this.collection=a.get("traits"),this.render())}})}),c("TraitManager/main",["require","./config/config","./model/Traits","./view/TraitsView"],function(a){return function(){var b,c={},d=a("./config/config"),e=(a("./model/Traits"),a("./view/TraitsView"));return{TraitsView:e,name:"TraitManager",getConfig:function(){return c},init:function(a){c=a||{};for(var f in d)f in c||(c[f]=d[f]);var g=c.pStylePrefix;return g&&(c.stylePrefix=g+c.stylePrefix),b=new e({collection:[],editor:c.em,config:c}),this},getTraitsViewer:function(){return b},addType:function(a,c){var d=b.itemView;b.itemsView[a]=d.extend(c)},getType:function(a){return b.itemsView[a]}}}}),c("TraitManager",["TraitManager/main"],function(a){return a});var d=["Utils","StorageManager","DeviceManager","Parser","SelectorManager","ModalDialog","CodeManager","Panels","RichTextEditor","StyleManager","AssetManager","CssComposer","DomComponents","Canvas","Commands","BlockManager","TraitManager"];return c("editor/model/Editor",["backbone","backboneUndo","keymaster","Utils","StorageManager","DeviceManager","Parser","SelectorManager","ModalDialog","CodeManager","Panels","RichTextEditor","StyleManager","AssetManager","CssComposer","DomComponents","Canvas","Commands","BlockManager","TraitManager"],function(){return Backbone.Model.extend({defaults:{clipboard:null,designerMode:!1,selectedComponent:null,previousModel:null,changesCount:0,storables:[],toLoad:[],opened:{},device:""},initialize:function(a){this.config=a,this.set("Config",a),a.el&&a.fromElement&&(this.config.components=a.el.innerHTML),d.forEach(function(a){this.loadModule(a)},this),this.get("toLoad").forEach(function(a){a.onLoad()}),this.initUndoManager(),this.on("change:selectedComponent",this.componentSelected,this),this.on("change:changesCount",this.updateBeforeUnload,this)},updateBeforeUnload:function(){var a=this.get("changesCount");this.config.noticeOnUnload&&a?window.onbeforeunload=function(a){return 1}:window.onbeforeunload=null},loadModule:function(a){var c=this.config,d=new b(a)(),e=d.name.charAt(0).toLowerCase()+d.name.slice(1),f=c[e]||c[d.name]||{};f.pStylePrefix=c.pStylePrefix||"";var g=this.get("StorageManager");if(d.storageKey&&d.store&&d.load&&g){f.stm=g;var h=this.get("storables");h.push(d),this.set("storables",h)}return f.em=this,d.init(Object.create(f)),d["private"]||this.set(d.name,d),d.onLoad&&this.get("toLoad").push(d),this},init:function(a){this.set("Editor",a)},listenRules:function(a){this.stopListening(a,"add remove",this.listenRule),this.listenTo(a,"add remove",this.listenRule),a.each(function(a){this.listenRule(a)},this)},listenRule:function(a){this.stopListening(a,"change:style",this.ruleUpdated),this.listenTo(a,"change:style",this.ruleUpdated)},ruleUpdated:function(a,b,c){var d=this.get("changesCount")+1,e=c?c.avoidStore:0;this.set("changesCount",d);var f=this.get("StorageManager");f.isAutosave()&&d"+a+"":""},getCss:function(){var a=this.get("CssComposer"),b=this.get("DomComponents").getComponent(),c=this.config.protectedCss;return c+this.get("CodeManager").getCode(b,"css",a)},getJs:function(){var a=this.get("DomComponents").getWrapper();return this.get("CodeManager").getCode(a,"js").trim()},store:function(a){var b=this.get("StorageManager"),c={};if(b)return this.get("storables").forEach(function(a){var b=a.store(1);for(var d in b)c[d]=b[d]}),b.store(c,a),this.set("changesCount",0),this.trigger("storage:store",c),c},load:function(a){var b=this.getCacheLoad(1);return this.get("storables").forEach(function(a){a.load(b)}),b},getCacheLoad:function(a){var b=a?1:0;if(this.cacheLoad&&!b)return this.cacheLoad;var c=this.get("StorageManager"),d=[];return c?(this.get("storables").forEach(function(a){var b=a.storageKey;b="function"==typeof b?b():b,keys=b instanceof Array?b:[b],keys.forEach(function(a){d.push(a)})}),this.cacheLoad=c.load(d),this.trigger("storage:load",this.cacheLoad),this.cacheLoad):{}},getDeviceModel:function(){var a=this.get("device");return this.get("DeviceManager").get(a)},runDefault:function(){var a=this.get("Commands").get(this.config.defaultCommand);a&&!this.defaultRunning&&(a.stop(this,this),a.run(this,this),this.defaultRunning=1)},stopDefault:function(){var a=this.get("Commands").get(this.config.defaultCommand);a&&(a.stop(this,this),this.defaultRunning=0)},refreshCanvas:function(){this.set("canvasOffset",this.get("Canvas").getOffset())},clearSelection:function(a){var b=a||window;b.getSelection().removeAllRanges()}})}),c("editor/view/EditorView",["backbone"],function(a){return a.View.extend({initialize:function(){this.pn=this.model.get("Panels"),this.conf=this.model.config,this.className=this.conf.stylePrefix+"editor",this.model.on("loaded",function(){this.pn.active(),this.model.runDefault(),this.model.trigger("load")},this)},render:function(){var a=this.model,b=a.get("UndoManager"),c=a.get("DomComponents"),d=a.get("Config");d.loadCompsOnRender&&(d.clearOnRender&&c.clear(),c.getComponents().add(d.components),b.clear(),c.onLoad());var e=this.conf,f=$(e.el||"body "+e.container);return this.$el.empty(),e.width&&f.css("width",e.width),e.height&&f.css("height",e.height),this.$el.append(a.get("Canvas").render()),this.$el.append(this.pn.render()),this.$el.attr("class",this.className),f.addClass(e.stylePrefix+"editor-cont"),f.html(this.$el),this}})}),c("editor/main",["require","./config/config","./model/Editor","./view/EditorView"],function(a){var b=function(b){var c=b||{},d=a("./config/config"),e=a("./model/Editor"),f=a("./view/EditorView");for(var g in d)g in c||(c[g]=d[g]);c.pStylePrefix=c.stylePrefix;var h=new e(c),i=new f({model:h,config:c});return{editor:h,DomComponents:h.get("DomComponents"),CssComposer:h.get("CssComposer"),StorageManager:h.get("StorageManager"),AssetManager:h.get("AssetManager"),BlockManager:h.get("BlockManager"),TraitManager:h.get("TraitManager"),SelectorManager:h.get("SelectorManager"),CodeManager:h.get("CodeManager"),Commands:h.get("Commands"),Modal:h.get("Modal"),Panels:h.get("Panels"),StyleManager:h.get("StyleManager"),Canvas:h.get("Canvas"),UndoManager:h.get("UndoManager"),DeviceManager:h.get("DeviceManager"),RichTextEditor:h.get("rte"),Utils:h.get("Utils"),Config:h.get("Config"),init:function(){return h.init(this),this},getConfig:function(){return c},getHtml:function(){return h.getHtml()},getCss:function(){return h.getCss()},getJs:function(){return h.getJs()},getComponents:function(){return h.get("DomComponents").getComponents()},setComponents:function(a){return h.setComponents(a),this},addComponents:function(a){return this.getComponents().add(a)},getStyle:function(){return h.get("CssComposer").getAll()},setStyle:function(a){return h.setStyle(a),this},getSelected:function(){return h.getSelected()},setDevice:function(a){return h.set("device",a)},getDevice:function(){return h.get("device")},runCommand:function(a,b){var c,d=h.get("Commands").get(a);return d&&(c=d.run(this,this,b),this.trigger("run:"+a)),c},stopCommand:function(a,b){var c,d=h.get("Commands").get(a);return d&&(c=d.stop(this,this,b),this.trigger("stop:"+a)),c},store:function(a){return h.store(a)},load:function(){return h.load()},getContainer:function(){return c.el},refresh:function(){h.refreshCanvas()},setCustomRte:function(a){this.RichTextEditor.customRte=a},on:function(a,b){return h.on(a,b)},trigger:function(a){return h.trigger(a)},getEl:function(){return i.el},getModel:function(){return h},render:function(){return i.render().el}}};return b}),c("PluginManager/config/config",[],function(){return{plugins:[]}}),c("PluginManager/main",["require","./config/config"],function(a){return function(b){var c=b||{},d=a("./config/config");for(var e in d)e in c||(c[e]=d[e]);var f={};return{add:function(a,b){return f[a]?this:(f[a]=b,this)},get:function(a){return f[a]},getAll:function(){return f}}}}),c("PluginManager",["PluginManager/main"],function(a){return a}),c("grapesjs/main",["require","./config/config","editor/main","PluginManager"],function(a){return function(b){var c=a("./config/config"),d=a("editor/main"),e=a("PluginManager"),f=new e,g=[];return{editors:g,plugins:f,init:function(a){var b=a||{},e=b.container;for(var h in c)h in b||(b[h]=c[h]);if(!e)throw new Error("'container' is required");b.el=document.querySelector(e);var i=new d(b).init(),j=f.getAll();for(var k in j)if(!(b.plugins.indexOf(k)<0)){var l=b.pluginsOpts[k]||{},m=f.get(k);m(i,l)}return b.autorender&&i.render(),g.push(i),i}}}()}),b(["src/config/require-config.js"],function(){b(["grapesjs/main"],function(a){return a})}),c("main",function(){}),b("grapesjs/main")}); +/*! grapesjs - 0.14.21 */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.grapesjs=e():t.grapesjs=e()}("undefined"!=typeof self?self:this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=60)}([function(t,e,n){(function(i){var r,o;!function(s){var a="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i;r=[n(1),n(10),e],void 0!==(o=function(t,e,n){a.Backbone=s(a,n,t,e)}.apply(e,r))&&(t.exports=o)}(function(t,e,n,i){var r=t.Backbone,o=Array.prototype.slice;e.VERSION="1.3.3",e.$=i,e.noConflict=function(){return t.Backbone=r,this},e.emulateHTTP=!1,e.emulateJSON=!1;var s=function(t,e,i){switch(t){case 1:return function(){return n[e](this[i])};case 2:return function(t){return n[e](this[i],t)};case 3:return function(t,r){return n[e](this[i],l(t,this),r)};case 4:return function(t,r,o){return n[e](this[i],l(t,this),r,o)};default:return function(){var t=o.call(arguments);return t.unshift(this[i]),n[e].apply(n,t)}}},a=function(t,e,i){n.each(e,function(e,r){n[r]&&(t.prototype[r]=s(e,r,i))})},l=function(t,e){return n.isFunction(t)?t:n.isObject(t)&&!e._isModel(t)?c(t):n.isString(t)?function(e){return e.get(t)}:t},c=function(t){var e=n.matches(t);return function(t){return e(t.attributes)}},u=e.Events={},h=/\s+/,d=function(t,e,i,r,o){var s,a=0;if(i&&"object"==typeof i){void 0!==r&&"context"in o&&void 0===o.context&&(o.context=r);for(s=n.keys(i);athis.length&&(r=this.length),r<0&&(r+=this.length+1);var o,s,a=[],l=[],c=[],u=[],h={},d=e.add,f=e.merge,p=e.remove,g=!1,v=this.comparator&&null==r&&!1!==e.sort,m=n.isString(this.comparator)?this.comparator:null;for(s=0;s7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(I,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";return this.location.replace(e+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var i=document.body,r=i.insertBefore(this.iframe,i.firstChild).contentWindow;r.document.open(),r.document.close(),r.location.hash="#"+this.fragment}var o=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState?o("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?o("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};this._usePushState?t("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&t("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),N.started=!1},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe&&(e=this.getHash(this.iframe.contentWindow)),e===this.fragment)return!1;this.iframe&&this.navigate(e),this.loadUrl()},loadUrl:function(t){return!!this.matchRoot()&&(t=this.fragment=this.getFragment(t),n.some(this.handlers,function(e){if(e.route.test(t))return e.callback(t),!0}))},navigate:function(t,e){if(!N.started)return!1;e&&!0!==e||(e={trigger:!!e}),t=this.getFragment(t||"");var n=this.root;""!==t&&"?"!==t.charAt(0)||(n=n.slice(0,-1)||"/");var i=n+t;if(t=this.decodeFragment(t.replace(F,"")),this.fragment!==t){if(this.fragment=t,this._usePushState)this.history[e.replace?"replaceState":"pushState"]({},document.title,i);else{if(!this._wantsHashChange)return this.location.assign(i);if(this._updateHash(this.location,t,e.replace),this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var r=this.iframe.contentWindow;e.replace||(r.document.open(),r.document.close()),this._updateHash(r.location,t,e.replace)}}return e.trigger?this.loadUrl(t):void 0}},_updateHash:function(t,e,n){if(n){var i=t.href.replace(/(javascript:|#).*$/,"");t.replace(i+"#"+e)}else t.hash="#"+e}}),e.history=new N;var R=function(t,e){var i,r=this;return i=t&&n.has(t,"constructor")?t.constructor:function(){return r.apply(this,arguments)},n.extend(i,r,e),i.prototype=n.create(r.prototype,t),i.prototype.constructor=i,i.__super__=r.prototype,i};b.extend=x.extend=A.extend=S.extend=N.extend=R;var z=function(){throw new Error('A "url" property or function must be specified')},H=function(t,e){var n=e.error;e.error=function(i){n&&n.call(e.context,t,i,e),t.trigger("error",t,i,e)}};return e})}).call(e,n(7))},function(t,e,n){(function(t,n){var i,r;!function(){var o="object"==typeof self&&self.self===self&&self||"object"==typeof t&&t.global===t&&t||this||{},s=o._,a=Array.prototype,l=Object.prototype,c="undefined"!=typeof Symbol?Symbol.prototype:null,u=a.push,h=a.slice,d=l.toString,f=l.hasOwnProperty,p=Array.isArray,g=Object.keys,v=Object.create,m=function(){},y=function(t){return t instanceof y?t:this instanceof y?void(this._wrapped=t):new y(t)};void 0===e||e.nodeType?o._=y:(void 0!==n&&!n.nodeType&&n.exports&&(e=n.exports=y),e._=y),y.VERSION="1.9.0";var b,x=function(t,e,n){if(void 0===e)return t;switch(null==n?3:n){case 1:return function(n){return t.call(e,n)};case 3:return function(n,i,r){return t.call(e,n,i,r)};case 4:return function(n,i,r,o){return t.call(e,n,i,r,o)}}return function(){return t.apply(e,arguments)}},w=function(t,e,n){return y.iteratee!==b?y.iteratee(t,e):null==t?y.identity:y.isFunction(t)?x(t,e,n):y.isObject(t)&&!y.isArray(t)?y.matcher(t):y.property(t)};y.iteratee=b=function(t,e){return w(t,e,1/0)};var C=function(t,e){return e=null==e?t.length-1:+e,function(){for(var n=Math.max(arguments.length-e,0),i=Array(n),r=0;r=0&&e<=E};y.each=y.forEach=function(t,e,n){e=x(e,n);var i,r;if(A(t))for(i=0,r=t.length;i0?0:s-1;for(r||(i=e[o?o[a]:a],a+=t);a>=0&&a=3;return e(t,x(n,r,4),i,o)}};y.reduce=y.foldl=y.inject=O(1),y.reduceRight=y.foldr=O(-1),y.find=y.detect=function(t,e,n){var i=A(t)?y.findIndex:y.findKey,r=i(t,e,n);if(void 0!==r&&-1!==r)return t[r]},y.filter=y.select=function(t,e,n){var i=[];return e=w(e,n),y.each(t,function(t,n,r){e(t,n,r)&&i.push(t)}),i},y.reject=function(t,e,n){return y.filter(t,y.negate(w(e)),n)},y.every=y.all=function(t,e,n){e=w(e,n);for(var i=!A(t)&&y.keys(t),r=(i||t).length,o=0;o=0},y.invoke=C(function(t,e,n){var i,r;return y.isFunction(e)?r=e:y.isArray(e)&&(i=e.slice(0,-1),e=e[e.length-1]),y.map(t,function(t){var o=r;if(!o){if(i&&i.length&&(t=T(t,i)),null==t)return;o=t[e]}return null==o?o:o.apply(t,n)})}),y.pluck=function(t,e){return y.map(t,y.property(e))},y.where=function(t,e){return y.filter(t,y.matcher(e))},y.findWhere=function(t,e){return y.find(t,y.matcher(e))},y.max=function(t,e,n){var i,r,o=-1/0,s=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t){t=A(t)?t:y.values(t);for(var a=0,l=t.length;ao&&(o=i)}else e=w(e,n),y.each(t,function(t,n,i){((r=e(t,n,i))>s||r===-1/0&&o===-1/0)&&(o=t,s=r)});return o},y.min=function(t,e,n){var i,r,o=1/0,s=1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t){t=A(t)?t:y.values(t);for(var a=0,l=t.length;ai||void 0===n)return 1;if(n0?0:r-1;o>=0&&o0?s=o>=0?o:Math.max(o+a,s):a=o>=0?Math.min(o+1,a):o+a+1;else if(n&&o&&a)return o=n(i,r),i[o]===r?o:-1;if(r!==r)return o=e(h.call(i,s,a),y.isNaN),o>=0?o+s:-1;for(o=t>0?s:a-1;o>=0&&oe?(i&&(clearTimeout(i),i=null),a=c,s=t.apply(r,o),i||(r=o=null)):i||!1===n.trailing||(i=setTimeout(l,u)),s};return c.cancel=function(){clearTimeout(i),a=0,i=r=o=null},c},y.debounce=function(t,e,n){var i,r,o=function(e,n){i=null,n&&(r=t.apply(e,n))},s=C(function(s){if(i&&clearTimeout(i),n){var a=!i;i=setTimeout(o,e),a&&(r=t.apply(this,s))}else i=y.delay(o,e,this,s);return r});return s.cancel=function(){clearTimeout(i),i=null},s},y.wrap=function(t,e){return y.partial(e,t)},y.negate=function(t){return function(){return!t.apply(this,arguments)}},y.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,i=t[e].apply(this,arguments);n--;)i=t[n].call(this,i);return i}},y.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},y.before=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},y.once=y.partial(y.before,2),y.restArguments=C;var F=!{toString:null}.propertyIsEnumerable("toString"),R=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],z=function(t,e){var n=R.length,i=t.constructor,r=y.isFunction(i)&&i.prototype||l,o="constructor";for(y.has(t,o)&&!y.contains(e,o)&&e.push(o);n--;)(o=R[n])in t&&t[o]!==r[o]&&!y.contains(e,o)&&e.push(o)};y.keys=function(t){if(!y.isObject(t))return[];if(g)return g(t);var e=[];for(var n in t)y.has(t,n)&&e.push(n);return F&&z(t,e),e},y.allKeys=function(t){if(!y.isObject(t))return[];var e=[];for(var n in t)e.push(n);return F&&z(t,e),e},y.values=function(t){for(var e=y.keys(t),n=e.length,i=Array(n),r=0;r1&&(i=x(i,e[1])),e=y.allKeys(t)):(i=V,e=_(e,!1,!1),t=Object(t));for(var r=0,o=e.length;r1&&(n=e[1])):(e=y.map(_(e,!1,!1),String),i=function(t,n){return!y.contains(e,n)}),y.pick(t,i,n)}),y.defaults=H(y.allKeys,!0),y.create=function(t,e){var n=k(t);return e&&y.extendOwn(n,e),n},y.clone=function(t){return y.isObject(t)?y.isArray(t)?t.slice():y.extend({},t):t},y.tap=function(t,e){return e(t),t},y.isMatch=function(t,e){var n=y.keys(e),i=n.length;if(null==t)return!i;for(var r=Object(t),o=0;o":">",'"':""","'":"'","`":"`"},U=y.invert(W),q=function(t){var e=function(e){return t[e]},n="(?:"+y.keys(t).join("|")+")",i=RegExp(n),r=RegExp(n,"g");return function(t){return t=null==t?"":""+t,i.test(t)?t.replace(r,e):t}};y.escape=q(W),y.unescape=q(U),y.result=function(t,e,n){y.isArray(e)||(e=[e]);var i=e.length;if(!i)return y.isFunction(n)?n.call(t):n;for(var r=0;r/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var G=/(.)^/,Y={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},X=/\\|'|\r|\n|\u2028|\u2029/g,J=function(t){return"\\"+Y[t]};y.template=function(t,e,n){!e&&n&&(e=n),e=y.defaults({},e,y.templateSettings);var i=RegExp([(e.escape||G).source,(e.interpolate||G).source,(e.evaluate||G).source].join("|")+"|$","g"),r=0,o="__p+='";t.replace(i,function(e,n,i,s,a){return o+=t.slice(r,a).replace(X,J),r=a+e.length,n?o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":i?o+="'+\n((__t=("+i+"))==null?'':__t)+\n'":s&&(o+="';\n"+s+"\n__p+='"),e}),o+="';\n",e.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";var s;try{s=new Function(e.variable||"obj","_",o)}catch(t){throw t.source=o,t}var a=function(t){return s.call(this,t,y)};return a.source="function("+(e.variable||"obj")+"){\n"+o+"}",a},y.chain=function(t){var e=y(t);return e._chain=!0,e};var Z=function(t,e){return t._chain?y(e).chain():e};y.mixin=function(t){return y.each(y.functions(t),function(e){var n=y[e]=t[e];y.prototype[e]=function(){var t=[this._wrapped];return u.apply(t,arguments),Z(this,n.apply(y,t))}}),y},y.mixin(y),y.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=a[t];y.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],Z(this,n)}}),y.each(["concat","join","slice"],function(t){var e=a[t];y.prototype[t]=function(){return Z(this,e.apply(this._wrapped,arguments))}}),y.prototype.value=function(){return this._wrapped},y.prototype.valueOf=y.prototype.toJSON=y.prototype.value,y.prototype.toString=function(){return String(this._wrapped)},i=[],void 0!==(r=function(){return y}.apply(e,i))&&(n.exports=r)}()}).call(e,n(7),n(64)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getUnitFromValue=e.normalizeFloat=e.shallowDiff=e.getElement=e.camelCase=e.getModel=e.matches=e.upFirst=e.hasDnd=e.off=e.on=void 0;var i=n(1),r=window.Element.prototype,o=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector,s=function(t,e){var n={},r=(0,i.keys)(e);for(var o in t)if(t.hasOwnProperty(o)){var s=t[o],a=e[o];r.indexOf(o)>=0?s!==a&&(n[o]=a):n[o]=null}for(var l in e)e.hasOwnProperty(l)&&(0,i.isUndefined)(t[l])&&(n[l]=e[l]);return n},a=function(t,e,n){e=e.split(/\s+/),t=t instanceof Array?t:[t];for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=0;if(isNaN(t))return n;if(t=parseFloat(t),Math.floor(t)!==t){var r=e.toString().split(".")[1];i=r?r.length:0}return i?parseFloat(t.toFixed(i)):t},f=function(t){return"draggable"in document.createElement("i")&&(t?t.get("Config").nativeDnD:1)},p=function(t){return(0,i.isElement)(t)?t:t&&t.getEl?t.getEl():void 0},g=function(t,e){var n=t;return(0,i.isElement)(t)&&(n=e(t).data("model")),n};e.on=a,e.off=l,e.hasDnd=f,e.upFirst=u,e.matches=o,e.getModel=g,e.camelCase=h,e.getElement=p,e.shallowDiff=s,e.normalizeFloat=d,e.getUnitFromValue=c},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(1),s=n(52);t.exports=r.default.View.extend({className:function(){return this.getClasses()},tagName:function(){return this.model.get("tagName")},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.model,n=t.config||{};this.opts=t,this.config=n,this.em=n.em||"",this.pfx=n.stylePrefix||"",this.ppfx=n.pStylePrefix||"",this.attr=e.get("attributes"),this.classe=this.attr.class||[];var i=this.$el,r=e.get("classes");this.listenTo(e,"change:style",this.updateStyle),this.listenTo(e,"change:attributes",this.updateAttributes),this.listenTo(e,"change:highlightable",this.updateHighlight),this.listenTo(e,"change:status",this.updateStatus),this.listenTo(e,"change:state",this.updateState),this.listenTo(e,"change:script",this.render),this.listenTo(e,"change:content",this.updateContent),this.listenTo(e,"change",this.handleChange),this.listenTo(r,"add remove change",this.updateClasses),i.data("model",e),i.data("collection",e.get("components")),e.view=this,r.length&&this.importClasses(),this.init()},init:function(){},handleChange:function(){var t=this.model;t.emitUpdate();for(var e in t.changed)t.emitUpdate(e)},importClasses:function(){var t=this.config.em.get("SelectorManager");t&&this.model.get("classes").each(function(e){t.add(e.get("name"))})},updateState:function(t){var e="hc-state";this.model.get("state")?this.$el.addClass(e):this.$el.removeClass(e)},updateStatus:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=(this.em,this.el),n=this.model.get("status"),i=this.pfx,r=this.ppfx,o=i+"selected",s=o+"-parent",a=r+"freezed",l=r+"hovered",c=[o,s,a,l];this.$el.removeClass(c.join(" "));var u=e.getAttribute("class")||"",h="";switch(n){case"selected":h=u+" "+o;break;case"selected-parent":h=u+" "+s;break;case"freezed":h=u+" "+a;break;case"freezed-selected":h=u+" "+a+" "+o;break;case"hovered":h=t.avoidHover?"":u+" "+l}(h=h.trim())&&e.setAttribute("class",h)},updateHighlight:function(){var t=this.model.get("highlightable");this.setAttribute("data-highlightable",t?1:"")},updateStyle:function(){var t=this.em,e=this.model;if(t&&t.get("avoidInlineStyle")){this.el.id=e.getId();var n=e.getStyle();!(0,o.isEmpty)(n)&&e.setStyle(n)}else this.setAttribute("style",e.styleToString())},updateClasses:function(){var t=this.model.get("classes").pluck("name").join(" ");this.setAttribute("class",t),this.updateStatus()},setAttribute:function(t,e){var n=this.$el;e?n.attr(t,e):n.removeAttr(t)},getClasses:function(){var t=this.model.get("attributes"),e=t.class||[];return e=(0,o.isArray)(e)?e:[e],e.length?e.join(" "):null},updateAttributes:function(){var t=this.model,e={"data-gjs-type":t.get("type")||"default"},n=t.get("attributes"),i=t.get("src");for(var r in n)e[r]=n[r];i&&(e.src=i),this.$el.attr(e),this.updateHighlight(),this.updateStyle()},updateContent:function(){this.getChildrenContainer().innerHTML=this.model.get("content")},prevDef:function(t){t.preventDefault()},updateScript:function(){if(this.model.get("script")){var t=this.em;if(t){t.get("Canvas").getCanvasView().updateScript(this)}}},getChildrenContainer:function(){var t=this.el;return"function"==typeof this.getChildrenSelector?t=this.el.querySelector(this.getChildrenSelector()):this.getTemplate,t},renderChildren:function(){var t=this.getChildrenContainer(),e=new s({collection:this.model.get("components"),config:this.config,componentTypes:this.opts.componentTypes});e.render(t),this.childrenView=e;for(var n=Array.prototype.slice.call(e.el.childNodes),i=0,r=n.length;i0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=n.em,s=this.parent(),a=s&&s.attributes;if(a&&a.propagate){var l={},c=a.propagate;c.forEach(function(t){return l[t]=s.get(t)}),l.propagate=c,l=i({},l,e),this.set(l)}var u=this.get("propagate");u&&this.set("propagate",(0,r.isArray)(u)?u:[u]),n&&n.config&&n.config.voidElements.indexOf(this.get("tagName"))>=0&&this.set("void",!0),n.em=o,this.opt=n,this.em=o,this.config=n.config||{},this.ccid=v.createId(this),this.set("attributes",this.get("attributes")||{}),this.listenTo(this,"change:script",this.scriptUpdated),this.listenTo(this,"change:traits",this.traitsUpdated),this.listenTo(this,"change:tagName",this.tagUpdated),this.listenTo(this,"change:attributes",this.attrUpdated),this.initClasses(),this.loadTraits(),this.initComponents(),this.initToolbar(),this.set("status",""),["classes","traits"].forEach(function(e){return t.listenTo(t.get(e),"add remove change",function(){return t.emitUpdate(e)})}),this.init()},is:function(t){return!(this.get("type")!=t)},find:function(t){var e=[];return this.view.$el.find(t).each(function(t,n,i){var r=i.eq(n),o=r.data("model");o&&e.push(o)}),e},closest:function(t){var e=this.view.$el.closest(t);return e.length&&e.data("model")},tagUpdated:function(){var t=this.collection,e=t.indexOf(this);t.remove(this),t.add(this,{at:e})},replaceWith:function(t){var e=this.collection,n=e.indexOf(this);return e.remove(this),e.add(t,{at:n})},attrUpdated:function(){var t=this,e=i({},this.previous("attributes")),n=i({},this.get("attributes")),s=(0,o.shallowDiff)(e,n);(0,r.keys)(s).forEach(function(e){return t.trigger("change:attributes:"+e)})},setAttributes:function(t){t=i({},t);var e=t.class;e&&this.setClass(e),delete t.class;var n=t.style;n&&this.setStyle(n),delete t.style,this.set("attributes",t)},addAttributes:function(t){var e=i({},this.getAttributes(),t);this.setAttributes(e)},getStyle:function(){var t=this.em;if(t&&t.getConfig("avoidInlineStyle")){var e=this.get("state"),n=t.get("CssComposer"),i=n.getIdRule(this.getId(),{state:e});if(this.rule=i,i)return i.getStyle()}return a.default.getStyle.call(this)},setStyle:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=this.em;if(s&&s.getConfig("avoidInlineStyle")){e=(0,r.isString)(e)?this.parseStyle(e):e,e=i({},e,this.get("style"));var l=this.get("state"),c=s.get("CssComposer"),u=this.getStyle();this.rule=c.setIdRule(this.getId(),e,i({},n,{state:l}));var h=(0,o.shallowDiff)(u,e);this.set("style",{},{silent:1}),(0,r.keys)(h).forEach(function(e){return t.trigger("change:style:"+e)})}else e=a.default.setStyle.apply(this,arguments);return e},getAttributes:function(){var t=this.em,e=[],n=i({},this.get("attributes")),o=t&&t.get("SelectorManager"),s=this.getId();return this.get("classes").each(function(t){return e.push(t.get("name"))}),e.length&&(n.class=e.join(" ")),!(0,r.has)(n,"id")&&o&&o.get(s,o.Selector.TYPE_ID)&&(n.id=this.getId()),n},addClass:function(t){var e=this.em.get("SelectorManager").addClass(t);return this.get("classes").add(e)},setClass:function(t){return this.get("classes").reset(),this.addClass(t)},removeClass:function(t){var e=[];t=(0,r.isArray)(t)?t:[t];var n=this.get("classes"),i=u.TYPE_CLASS;return t.forEach(function(t){t.split(" ").forEach(function(t){var r=n.where({name:t,type:i})[0];r&&e.push(n.remove(r))})}),e},initClasses:function(){var t=this.normalizeClasses(this.get("classes")||[]);return this.set("classes",new h(t)),this},initComponents:function(){var t=new c(null,this.opt);return t.parent=this,!this.opt.avoidChildren&&t.reset(this.get("components")),this.set("components",t),this},init:function(){},append:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.components().add(t,e);return(0,r.isArray)(n)?n:[n]},components:function(t){var e=this.get("components");if((0,r.isUndefined)(t))return e;e.reset(),t&&this.append(t)},parent:function(){var t=this.collection;return t&&t.parent},scriptUpdated:function(){this.set("scriptUpdated",1)},traitsUpdated:function(){var t=0,e=i({},this.get("attributes")),n=this.get("traits");if(!(n instanceof d))return void this.loadTraits();n.each(function(n){if(t=1,!n.get("changeProp")){var i=n.get("name"),r=n.getInitValue();i&&r&&(e[i]=r)}}),t&&this.set("attributes",e)},initToolbar:function(){var t=this;if(!t.get("toolbar")){var e=[];t.collection&&e.push({attributes:{class:"fa fa-arrow-up"},command:"select-parent"}),t.get("draggable")&&e.push({attributes:{class:"fa fa-arrows",draggable:!0},command:"tlb-move"}),t.get("copyable")&&e.push({attributes:{class:"fa fa-clone"},command:"tlb-clone"}),t.get("removable")&&e.push({attributes:{class:"fa fa-trash-o"},command:"tlb-delete"}),t.set("toolbar",e)}},loadTraits:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=new d([],this.opt);return n.setTarget(this),t=t||this.get("traits"),t.length&&n.add(t),this.set("traits",n,e),this},normalizeClasses:function(t){var e=[],n=this.em;if(n){var i=n.get("SelectorManager");if(i)return t.forEach(function(t){var n="";n="string"==typeof t?t:t.name;var r=i.add(n);e.push(r)}),e}},clone:function(){var t=this.em,e=this.getStyle(),n=i({},this.attributes),o=i({},this.opt);return n.attributes=i({},n.attributes),delete n.attributes.id,n.components=[],n.classes=[],n.traits=[],this.get("components").each(function(t,e){n.components[e]=t.clone()}),this.get("traits").each(function(t,e){n.traits[e]=t.clone()}),this.get("classes").each(function(t,e){n.classes[e]=t.get("name")}),n.status="",n.view="",o.collection=null,t&&t.getConfig("avoidInlineStyle")&&!(0,r.isEmpty)(e)&&(n.style=e),new this.constructor(n,o)},getName:function(){var t=this.get("name")||this.get("custom-name"),e=this.get("tagName");e="div"==e?"box":e;var n=this.get("type")||e;return n=n.charAt(0).toUpperCase()+n.slice(1),t||n},getIcon:function(){var t=this.get("icon");return t?t+" ":""},toHTML:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this,n=[],i=e.get("tagName"),o=e.get("void"),s=t.attributes,a=this.getAttrToHTML();s&&((0,r.isFunction)(s)?a=s(e,a)||{}:(0,r.isObject)(s)&&(a=s));for(var l in a){var c=a[l],u=(0,r.isString)(c)?c.replace(/"/g,"""):c;(0,r.isUndefined)(u)||((0,r.isBoolean)(u)?u&&n.push(l):n.push(l+'="'+u+'"'))}var h=n.length?" "+n.join(" "):"",d="<"+i+h+(o?"/":"")+">"+e.get("content");return e.get("components").each(function(e){return d+=e.toHTML(t)}),!o&&(d+=""),d},getAttrToHTML:function(){var t=this.getAttributes();return delete t.style,t},toJSON:function(){for(var t=arguments.length,e=Array(t),n=0;n0&&void 0!==arguments[0]&&arguments[0],this.em),e=this.getId();if(e){var n=v.createId(this);this.setId(n);var i=t&&t.get("CssComposer").getIdRule(e),r=i&&i.get("selectors").at(0);return r&&r.set("name",n),this}}},{isComponent:function(t){return{tagName:t.tagName?t.tagName.toLowerCase():""}},createId:function(t){p++;var e=p.toString().length+2,n=(Math.random()+1.1).toString(36).slice(-e),i="i"+n;return f[i]=t,i},getList:function(){return f}});t.exports=v},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(1),s=n(2);t.exports=r.default.View.extend({template:function(t){return'\n
    \n '+this.templateLabel(t)+'\n
    \n
    \n '+this.templateInput(t)+"\n
    \n "},templateLabel:function(t){var e=this.pfx;return'\n \n '+t.get("name")+'\n \n \n '},templateInput:function(t){return'\n
    \n \n
    \n '},events:function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}({change:"inputValueChanged"},"click [data-clear-style]","clear"),initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,o.bindAll)(this,"targetUpdated"),this.config=t.config||{};var e=this.config.em;this.em=e,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=t.target||{},this.propTarget=t.propTarget||{},this.onChange=t.onChange,this.onInputRender=t.onInputRender||{},this.customValue=t.customValue||{};var n=this.model;this.property=n.get("property"),this.input=null;var i=this.pfx;this.inputHolderId="#"+i+"input-holder",this.sector=n.collection&&n.collection.sector,n.view=this,n.get("value")||n.set("value",n.getDefaultValue()),e&&e.on("update:component:style:"+this.property,this.targetUpdated),this.listenTo(this.propTarget,"update",this.targetUpdated),this.listenTo(n,"destroy remove",this.remove),this.listenTo(n,"change:value",this.modelValueChanged),this.listenTo(n,"targetUpdated",this.targetUpdated),this.listenTo(n,"change:visible",this.updateVisibility),this.listenTo(n,"change:status",this.updateStatus);var r=this.init&&this.init.bind(this);r&&r()},updateStatus:function(){var t=this.model.get("status"),e=this.pfx,n=this.ppfx,i=this.config,r=n+"four-color",o=n+"color-warn",s=this.$el.children("."+e+"label"),a=this.getClearEl().style;switch(s.removeClass(r+" "+o),a.display="none",t){case"updated":s.addClass(r),i.clearProperties&&(a.display="inline");break;case"computed":s.addClass(o)}},clear:function(t){t&&t.stopPropagation(),this.model.clearValue(),this.targetUpdated()},getClearEl:function(){return this.clearEl||(this.clearEl=this.el.querySelector("[data-clear-style]")),this.clearEl},getTarget:function(){return this.getTargetModel()},getTargetModel:function(){return this.propTarget&&this.propTarget.model},getHelperModel:function(){return this.propTarget&&this.propTarget.helper},inputValueChanged:function(t){t&&t.stopPropagation(),this.model.setValue(this.getInputValue(),1,{fromInput:1}),this.elementUpdated()},elementUpdated:function(){this.setStatus("updated")},setStatus:function(t){this.model.set("status",t);var e=this.model.parent;e&&e.set("status",t)},targetUpdated:function(){if(this.checkVisibility()){var t=this.config,e=t.em,n=this.model,i="",r="",o=this.getTargetValue({ignoreDefault:1}),s=n.getDefaultValue(),a=this.getComputedValue();o?(i=o,t.highlightChanged&&(r="updated")):a&&t.showComputed&&a!=s?(i=a,t.highlightComputed&&(r="computed")):(i=s,r=""),n.setValue(i,0,{fromTarget:1}),this.setStatus(r),e&&(e.trigger("styleManager:change",this),e.trigger("styleManager:change:"+n.get("property"),this))}},checkVisibility:function(){var t=1;return this.config.hideNotStylable&&(this.isTargetStylable()&&this.isComponentStylable()?this.show():(this.hide(),t=0),this.sector&&this.sector.trigger("updateVisibility")),t},getTargetValue:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.model,i=this.getTargetModel(),r=this.customValue;if(!i)return t;if(t=i.getStyle()[n.get("property")],t||e.ignoreDefault||(t=n.getDefaultValue()),"function"==typeof r&&!e.ignoreCustomValue){var o=n.collection.indexOf(n),s=r(this,o);s&&(t=s)}return t},getComputedValue:function(){var t=this.propTarget,e=t.computed||{},n=t.computedDefault||{},i=this.config.avoidComputed||[],r=this.model.get("property"),o=i.indexOf(r)<0,a=e[r],l=n[(0,s.camelCase)(r)];return e&&o&&l!==a&&a},getInputValue:function(){var t=this.getInputEl();return t?t.value:""},modelValueChanged:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.config.em,r=this.model,o=r.getFullValue(),s=this.getTarget(),a=this.onChange;n.fromInput||this.setValue(o),s&&this.isTargetStylable()&&this.isComponentStylable()&&(n.fromTarget||(a&&!n.fromParent?a(s,this,n):this.updateTargetStyle(o,null,n)),i&&(i.trigger("component:update",s),i.trigger("component:styleUpdate",s),i.trigger("component:styleUpdate:"+r.get("property"),s)))},updateTargetStyle:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=e||this.model.get("property"),r=this.getTarget(),o=r.getStyle();t?o[i]=t:delete o[i],r.setStyle(o,n);var s=this.getHelperModel();s&&s.setStyle(o,n)},isTargetStylable:function(t){var e=t||this.getTarget(),n=this.model,i=n.get("property"),r=n.get("toRequire"),s=e.get("unstylable"),a=e.get("stylable-require"),l=e.get("stylable");return(0,o.isArray)(l)&&(l=l.indexOf(i)>=0),(0,o.isArray)(s)&&(l=s.indexOf(i)<0),r&&(l=a&&a.indexOf(i)>=0||!t),l},isComponentStylable:function(){var t=this.em,e=t&&t.getSelected();return!e||this.isTargetStylable(e)},setRawValue:function(t){this.setValue(this.model.parseValue(t))},setValue:function(t){var e=this.model,n=(0,o.isUndefined)(t)?e.getDefaultValue():t,i=this.getInputEl();i&&(i.value=n)},getInputEl:function(){return this.input||(this.input=this.el.querySelector("input")),this.input},updateVisibility:function(){this.el.style.display=this.model.get("visible")?"block":"none"},show:function(){this.model.set("visible",1)},hide:function(){this.model.set("visible",0)},cleanValue:function(){this.setValue("")},render:function(){var t=this.pfx,e=this.model,n=this.el;n.innerHTML=this.template(e),n.className=t+"property "+t+e.get("type"),this.updateStatus();var i=this.onRender&&this.onRender.bind(this);i&&i(),this.setValue(e.get("value"),{targetUpdate:1})}})},function(t,e,n){!function(e,n){t.exports=n()}(0,function(){"use strict";function t(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}function e(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function n(t,n){return e(t).appendChild(n)}function i(t,e,n,i){var r=document.createElement(t);if(n&&(r.className=n),i&&(r.style.cssText=i),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var o=0;o=e)return s+(e-o);s+=a-o,s+=n-s%n,o=a+1}}function d(t,e){for(var n=0;n=e)return i+Math.min(s,e-r);if(r+=o-i,r+=n-r%n,i=o+1,r>=e)return i}}function p(t){for(;Gs.length<=t;)Gs.push(g(Gs)+" ");return Gs[t]}function g(t){return t[t.length-1]}function v(t,e){for(var n=[],i=0;i"€"&&(t.toUpperCase()!=t.toLowerCase()||Ys.test(t))}function w(t,e){return e?!!(e.source.indexOf("\\w")>-1&&x(t))||e.test(t):x(t)}function C(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}function k(t){return t.charCodeAt(0)>=768&&Xs.test(t)}function S(t,e,n){for(;(n<0?e>0:en?-1:1;;){if(e==n)return e;var r=(e+n)/2,o=i<0?Math.ceil(r):Math.floor(r);if(o==e)return t(o)?e:n;t(o)?n=o:e=o+i}}function E(t,e,n){var o=this;this.input=n,o.scrollbarFiller=i("div",null,"CodeMirror-scrollbar-filler"),o.scrollbarFiller.setAttribute("cm-not-content","true"),o.gutterFiller=i("div",null,"CodeMirror-gutter-filler"),o.gutterFiller.setAttribute("cm-not-content","true"),o.lineDiv=r("div",null,"CodeMirror-code"),o.selectionDiv=i("div",null,null,"position: relative; z-index: 1"),o.cursorDiv=i("div",null,"CodeMirror-cursors"),o.measure=i("div",null,"CodeMirror-measure"),o.lineMeasure=i("div",null,"CodeMirror-measure"),o.lineSpace=r("div",[o.measure,o.lineMeasure,o.selectionDiv,o.cursorDiv,o.lineDiv],null,"position: relative; outline: none");var s=r("div",[o.lineSpace],"CodeMirror-lines");o.mover=i("div",[s],null,"position: relative"),o.sizer=i("div",[o.mover],"CodeMirror-sizer"),o.sizerWidth=null,o.heightForcer=i("div",null,null,"position: absolute; height: "+Bs+"px; width: 1px;"),o.gutters=i("div",null,"CodeMirror-gutters"),o.lineGutter=null,o.scroller=i("div",[o.sizer,o.heightForcer,o.gutters],"CodeMirror-scroll"),o.scroller.setAttribute("tabIndex","-1"),o.wrapper=i("div",[o.scrollbarFiller,o.gutterFiller,o.scroller],"CodeMirror"),bs&&xs<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),ws||gs&&Ps||(o.scroller.draggable=!0),t&&(t.appendChild?t.appendChild(o.wrapper):t(o.wrapper)),o.viewFrom=o.viewTo=e.first,o.reportedViewFrom=o.reportedViewTo=e.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,n.init(o)}function M(t,e){if((e-=t.first)<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");for(var n=t;!n.lines;)for(var i=0;;++i){var r=n.children[i],o=r.chunkSize();if(e=t.first&&en?I(n,M(t,n).text.length):B(e,M(t,e.line).text.length)}function B(t,e){var n=t.ch;return null==n||n>e?I(t.line,e):n<0?I(t.line,0):t}function W(t,e){for(var n=[],i=0;i=e:o.to>e);(i||(i=[])).push(new K(s,o.from,l?null:o.to))}}return i}function Z(t,e,n){var i;if(t)for(var r=0;r=e:o.to>e);if(a||o.from==e&&"bookmark"==s.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(s.inclusiveLeft?o.from<=e:o.from0&&a)for(var w=0;w0)){var u=[l,1],h=F(c.from,a.from),f=F(c.to,a.to);(h<0||!s.inclusiveLeft&&!h)&&u.push({from:c.from,to:a.from}),(f>0||!s.inclusiveRight&&!f)&&u.push({from:a.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function nt(t){var e=t.markedSpans;if(e){for(var n=0;ne)&&(!n||st(n,o.marker)<0)&&(n=o.marker)}return n}function ht(t,e,n,i,r){var o=M(t,e),s=Zs&&o.markedSpans;if(s)for(var a=0;a=0&&h<=0||u<=0&&h>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?F(c.to,n)>=0:F(c.to,n)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?F(c.from,i)<=0:F(c.from,i)<0)))return!0}}}function dt(t){for(var e;e=lt(t);)t=e.find(-1,!0).line;return t}function ft(t){for(var e;e=ct(t);)t=e.find(1,!0).line;return t}function pt(t){for(var e,n;e=ct(t);)t=e.find(1,!0).line,(n||(n=[])).push(t);return n}function gt(t,e){var n=M(t,e),i=dt(n);return n==i?e:L(i)}function vt(t,e){if(e>t.lastLine())return e;var n,i=M(t,e);if(!mt(t,i))return e;for(;n=ct(i);)i=n.find(1,!0).line;return L(i)+1}function mt(t,e){var n=Zs&&e.markedSpans;if(n)for(var i=void 0,r=0;re.maxLineLength&&(e.maxLineLength=n,e.maxLine=t)})}function Ct(t,e,n,i){if(!t)return i(e,n,"ltr",0);for(var r=!1,o=0;oe||e==n&&s.to==e)&&(i(Math.max(s.from,e),Math.min(s.to,n),1==s.level?"rtl":"ltr",o),r=!0)}r||i(e,n,"ltr")}function kt(t,e,n){var i;Qs=null;for(var r=0;re)return r;o.to==e&&(o.from!=o.to&&"before"==n?i=r:Qs=r),o.from==e&&(o.from!=o.to&&"before"!=n?i=r:Qs=r)}return null!=i?i:Qs}function St(t,e){var n=t.order;return null==n&&(n=t.order=ta(t.text,e)),n}function Tt(t,e){return t._handlers&&t._handlers[e]||ea}function Et(t,e,n){if(t.removeEventListener)t.removeEventListener(e,n,!1);else if(t.detachEvent)t.detachEvent("on"+e,n);else{var i=t._handlers,r=i&&i[e];if(r){var o=d(r,n);o>-1&&(i[e]=r.slice(0,o).concat(r.slice(o+1)))}}}function Mt(t,e){var n=Tt(t,e);if(n.length)for(var i=Array.prototype.slice.call(arguments,2),r=0;r0}function Lt(t){t.prototype.on=function(t,e){na(this,t,e)},t.prototype.off=function(t,e){Et(this,t,e)}}function _t(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function Nt(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function Dt(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function It(t){_t(t),Nt(t)}function Ft(t){return t.target||t.srcElement}function Rt(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),Ls&&t.ctrlKey&&1==e&&(e=3),e}function zt(t){if(null==js){var e=i("span","​");n(t,i("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(js=e.offsetWidth<=1&&e.offsetHeight>2&&!(bs&&xs<8))}var r=js?i("span","​"):i("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function Ht(t){if(null!=$s)return $s;var i=n(t,document.createTextNode("AخA")),r=Is(i,0,1).getBoundingClientRect(),o=Is(i,1,2).getBoundingClientRect();return e(t),!(!r||r.left==r.right)&&($s=o.right-r.right<3)}function Vt(t){if(null!=aa)return aa;var e=n(t,i("span","x")),r=e.getBoundingClientRect(),o=Is(e,0,1).getBoundingClientRect();return aa=Math.abs(r.left-o.left)>1}function jt(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),la[t]=e}function $t(t,e){ca[t]=e}function Bt(t){if("string"==typeof t&&ca.hasOwnProperty(t))t=ca[t];else if(t&&"string"==typeof t.name&&ca.hasOwnProperty(t.name)){var e=ca[t.name];"string"==typeof e&&(e={name:e}),t=b(e,t),t.name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Bt("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Bt("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Wt(t,e){e=Bt(e);var n=la[e.name];if(!n)return Wt(t,"text/plain");var i=n(t,e);if(ua.hasOwnProperty(e.name)){var r=ua[e.name];for(var o in r)r.hasOwnProperty(o)&&(i.hasOwnProperty(o)&&(i["_"+o]=i[o]),i[o]=r[o])}if(i.name=e.name,e.helperType&&(i.helperType=e.helperType),e.modeProps)for(var s in e.modeProps)i[s]=e.modeProps[s];return i}function Ut(t,e){u(e,ua.hasOwnProperty(t)?ua[t]:ua[t]={})}function qt(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var n={};for(var i in e){var r=e[i];r instanceof Array&&(r=r.concat([])),n[i]=r}return n}function Kt(t,e){for(var n;t.innerMode&&(n=t.innerMode(e))&&n.mode!=t;)e=n.state,t=n.mode;return n||{mode:t,state:e}}function Gt(t,e,n){return!t.startState||t.startState(e,n)}function Yt(t,e,n,i){var r=[t.state.modeGen],o={};ie(t,e.text,t.doc.mode,n,function(t,e){return r.push(t,e)},o,i);for(var s=n.state,a=0;at&&r.splice(l,1,t,r[l+1],i),l+=2,c=Math.min(t,i)}if(e)if(a.opaque)r.splice(n,l-n,t,"overlay "+e),l=n+2;else for(;nt.options.maxHighlightLength&&qt(t.doc.mode,i.state),o=Yt(t,e,i);r&&(i.state=r),e.stateAfter=i.save(!r),e.styles=o.styles,o.classes?e.styleClasses=o.classes:e.styleClasses&&(e.styleClasses=null),n===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Jt(t,e,n){var i=t.doc,r=t.display;if(!i.mode.startState)return new fa(i,!0,e);var o=re(t,e,n),s=o>i.first&&M(i,o-1).stateAfter,a=s?fa.fromSaved(i,s,o):new fa(i,Gt(i.mode),o);return i.iter(o,e,function(n){Zt(t,n.text,a);var i=a.line;n.stateAfter=i==e-1||i%5==0||i>=r.viewFrom&&ie.start)return o}throw new Error("Mode "+t.name+" failed to advance stream.")}function ee(t,e,n,i){var r,o=t.doc,s=o.mode;e=$(o,e);var a,l=M(o,e.line),c=Jt(t,e.line,n),u=new ha(l.text,t.options.tabSize,c);for(i&&(a=[]);(i||u.post.options.maxHighlightLength?(a=!1,s&&Zt(t,e,i,h.pos),h.pos=e.length,l=null):l=ne(te(n,h,i.state,d),o),d){var f=d[0].name;f&&(l="m-"+(l?f+" "+l:f))}if(!a||u!=l){for(;cs;--a){if(a<=o.first)return o.first;var l=M(o,a-1),c=l.stateAfter;if(c&&(!n||a+(c instanceof da?c.lookAhead:0)<=o.modeFrontier))return a;var u=h(l.text,null,t.options.tabSize);(null==r||i>u)&&(r=a-1,i=u)}return r}function oe(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontiern;i--){var r=M(t,i).stateAfter;if(r&&(!(r instanceof da)||i+r.lookAhead1&&!/ /.test(t))return t;for(var n=e,i="",r=0;rc&&h.from<=c));d++);if(h.to>=u)return t(n,i,r,o,s,a,l);t(n,i.slice(0,h.to-c),r,o,null,a,l),o=null,i=i.slice(h.to-c),c=h.to}}}function pe(t,e,n,i){var r=!i&&n.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!i&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",n.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function ge(t,e,n){var i=t.markedSpans,r=t.text,o=0;if(i)for(var s,a,l,c,u,h,d,f=r.length,p=0,g=1,v="",m=0;;){if(m==p){l=c=u=h=a="",d=null,m=1/0;for(var y=[],b=void 0,x=0;xp||C.collapsed&&w.to==p&&w.from==p)?(null!=w.to&&w.to!=p&&m>w.to&&(m=w.to,c=""),C.className&&(l+=" "+C.className),C.css&&(a=(a?a+";":"")+C.css),C.startStyle&&w.from==p&&(u+=" "+C.startStyle),C.endStyle&&w.to==m&&(b||(b=[])).push(C.endStyle,w.to),C.title&&!h&&(h=C.title),C.collapsed&&(!d||st(d.marker,C)<0)&&(d=w)):w.from>p&&m>w.from&&(m=w.from)}if(b)for(var k=0;k=f)break;for(var T=Math.min(f,m);;){if(v){var E=p+v.length;if(!d){var M=E>T?v.slice(0,T-p):v;e.addToken(e,M,s?s+l:l,u,p+M.length==m?c:"",h,a)}if(E>=T){v=v.slice(T-p),p=T;break}p=E,u=""}v=r.slice(o,o=n[g++]),s=le(n[g++],e.cm.options)}}else for(var A=1;A2&&o.push((l.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}function We(t,e,n){if(t.line==e)return{map:t.measure.map,cache:t.measure.cache};for(var i=0;in)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}function Ue(t,e){e=dt(e);var i=L(e),r=t.display.externalMeasured=new ve(t.doc,e,i);r.lineN=i;var o=r.built=ce(t,r);return r.text=o.pre,n(t.display.lineMeasure,o.pre),r}function qe(t,e,n,i){return Ye(t,Ge(t,e),n,i)}function Ke(t,e){if(e>=t.display.viewFrom&&e=n.lineN&&ee)&&(o=l-a,r=o-1,e>=l&&(s="right")),null!=r){if(i=t[c+2],a==l&&n==(i.insertLeft?"left":"right")&&(s=n),"left"==n&&0==r)for(;c&&t[c-2]==t[c-3]&&t[c-1].insertLeft;)i=t[2+(c-=3)],s="left";if("right"==n&&r==l-a)for(;c=0&&(n=t[r]).left==n.right;r--);return n}function Ze(t,e,n,i){var r,o=Xe(e.map,n,i),s=o.node,a=o.start,l=o.end,c=o.collapse;if(3==s.nodeType){for(var u=0;u<4;u++){for(;a&&k(e.line.text.charAt(o.coverStart+a));)--a;for(;o.coverStart+l0&&(c=i="right");var h;r=t.options.lineWrapping&&(h=s.getClientRects()).length>1?h["right"==i?h.length-1:0]:s.getBoundingClientRect()}if(bs&&xs<9&&!a&&(!r||!r.left&&!r.right)){var d=s.parentNode.getClientRects()[0];r=d?{left:d.left,right:d.left+wn(t.display),top:d.top,bottom:d.bottom}:wa}for(var f=r.top-e.rect.top,p=r.bottom-e.rect.top,g=(f+p)/2,v=e.view.measure.heights,m=0;m=i.text.length?(c=i.text.length,u="before"):c<=0&&(c=0,u="after"),!l)return s("before"==u?c-1:c,"before"==u);var h=kt(l,c,u),d=Qs,f=a(c,h,"before"==u);return null!=d&&(f.other=a(c,d,"before"!=u)),f}function hn(t,e){var n=0;e=$(t.doc,e),t.options.lineWrapping||(n=wn(t.display)*e.ch);var i=M(t.doc,e.line),r=bt(i)+Re(t.display);return{left:n,right:n,top:r,bottom:r+i.height}}function dn(t,e,n,i,r){var o=I(t,e,n);return o.xRel=r,i&&(o.outside=!0),o}function fn(t,e,n){var i=t.doc;if((n+=t.display.viewOffset)<0)return dn(i.first,0,null,!0,-1);var r=_(i,n),o=i.first+i.size-1;if(r>o)return dn(i.first+i.size-1,M(i,o).text.length,null,!0,1);e<0&&(e=0);for(var s=M(i,r);;){var a=mn(t,s,r,e,n),l=ut(s,a.ch+(a.xRel>0?1:0));if(!l)return a;var c=l.find(1);if(c.line==r)return c;s=M(i,r=c.line)}}function pn(t,e,n,i){i-=sn(e);var r=e.text.length,o=T(function(e){return Ye(t,n,e-1).bottom<=i},r,0);return r=T(function(e){return Ye(t,n,e).top>i},o,r),{begin:o,end:r}}function gn(t,e,n,i){return n||(n=Ge(t,e)),pn(t,e,n,an(t,e,Ye(t,n,i),"line").top)}function vn(t,e,n,i){return!(t.bottom<=n)&&(t.top>n||(i?t.left:t.right)>e)}function mn(t,e,n,i,r){r-=bt(e);var o=Ge(t,e),s=sn(e),a=0,l=e.text.length,c=!0,u=St(e,t.doc.direction);if(u){var h=(t.options.lineWrapping?bn:yn)(t,e,n,o,u,i,r);c=1!=h.level,a=c?h.from:h.to-1,l=c?h.to:h.from-1}var d,f,p=null,g=null,v=T(function(e){var n=Ye(t,o,e);return n.top+=s,n.bottom+=s,!!vn(n,i,r,!1)&&(n.top<=r&&n.left<=i&&(p=e,g=n),!0)},a,l),m=!1;if(g){var y=i-g.left=x.bottom}return v=S(e.text,v,1),dn(n,v,f,m,i-d)}function yn(t,e,n,i,r,o,s){var a=T(function(a){var l=r[a],c=1!=l.level;return vn(un(t,I(n,c?l.to:l.from,c?"before":"after"),"line",e,i),o,s,!0)},0,r.length-1),l=r[a];if(a>0){var c=1!=l.level,u=un(t,I(n,c?l.from:l.to,c?"after":"before"),"line",e,i);vn(u,o,s,!0)&&u.top>s&&(l=r[a-1])}return l}function bn(t,e,n,i,r,o,s){var a=pn(t,e,i,s),l=a.begin,c=a.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,h=null,d=0;d=c||f.to<=l)){var p=1!=f.level,g=Ye(t,i,p?Math.min(c,f.to)-1:Math.max(l,f.from)).right,v=gv)&&(u=f,h=v)}}return u||(u=r[r.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function xn(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==va){va=i("pre");for(var r=0;r<49;++r)va.appendChild(document.createTextNode("x")),va.appendChild(i("br"));va.appendChild(document.createTextNode("x"))}n(t.measure,va);var o=va.offsetHeight/50;return o>3&&(t.cachedTextHeight=o),e(t.measure),o||1}function wn(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=i("span","xxxxxxxxxx"),r=i("pre",[e]);n(t.measure,r);var o=e.getBoundingClientRect(),s=(o.right-o.left)/10;return s>2&&(t.cachedCharWidth=s),s||10}function Cn(t){for(var e=t.display,n={},i={},r=e.gutters.clientLeft,o=e.gutters.firstChild,s=0;o;o=o.nextSibling,++s)n[t.options.gutters[s]]=o.offsetLeft+o.clientLeft+r,i[t.options.gutters[s]]=o.clientWidth;return{fixedPos:kn(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:n,gutterWidth:i,wrapperWidth:e.wrapper.clientWidth}}function kn(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function Sn(t){var e=xn(t.display),n=t.options.lineWrapping,i=n&&Math.max(5,t.display.scroller.clientWidth/wn(t.display)-3);return function(r){if(mt(t.doc,r))return 0;var o=0;if(r.widgets)for(var s=0;s=t.display.viewTo)return null;if((e-=t.display.viewFrom)<0)return null;for(var n=t.display.view,i=0;i=t.display.viewTo||a.to().line0?e.blinker=setInterval(function(){return e.cursorDiv.style.visibility=(n=!n)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function Dn(t){t.state.focused||(t.display.input.focus(),Fn(t))}function In(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,Rn(t))},100)}function Fn(t,e){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(Mt(t,"focus",t,e),t.state.focused=!0,a(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),ws&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),Nn(t))}function Rn(t,e){t.state.delayingBlurEvent||(t.state.focused&&(Mt(t,"blur",t,e),t.state.focused=!1,zs(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function zn(t){for(var e=t.display,n=e.lineDiv.offsetTop,i=0;i.005||l<-.005)&&(P(r.line,o),Hn(r.line),r.rest))for(var c=0;c=s&&(o=_(e,bt(M(e,l))-t.wrapper.clientHeight),s=l)}return{from:o,to:Math.max(s,o+1)}}function jn(t){var e=t.display,n=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var i=kn(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,o=i+"px",s=0;s(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!Ms){var s=i("div","​",null,"position: absolute;\n top: "+(e.top-n.viewOffset-Re(t.display))+"px;\n height: "+(e.bottom-e.top+Ve(t)+n.barHeight)+"px;\n left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(s),s.scrollIntoView(o),t.display.lineSpace.removeChild(s)}}}function Wn(t,e,n,i){null==i&&(i=0);var r;t.options.lineWrapping||e!=n||(e=e.ch?I(e.line,"before"==e.sticky?e.ch-1:e.ch,"after"):e,n="before"==e.sticky?I(e.line,e.ch+1,"before"):e);for(var o=0;o<5;o++){var s=!1,a=un(t,e),l=n&&n!=e?un(t,n):a;r={left:Math.min(a.left,l.left),top:Math.min(a.top,l.top)-i,right:Math.max(a.left,l.left),bottom:Math.max(a.bottom,l.bottom)+i};var c=qn(t,r),u=t.doc.scrollTop,h=t.doc.scrollLeft;if(null!=c.scrollTop&&(Qn(t,c.scrollTop),Math.abs(t.doc.scrollTop-u)>1&&(s=!0)),null!=c.scrollLeft&&(ei(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-h)>1&&(s=!0)),!s)break}return r}function Un(t,e){var n=qn(t,e);null!=n.scrollTop&&Qn(t,n.scrollTop),null!=n.scrollLeft&&ei(t,n.scrollLeft)}function qn(t,e){var n=t.display,i=xn(t.display);e.top<0&&(e.top=0);var r=t.curOp&&null!=t.curOp.scrollTop?t.curOp.scrollTop:n.scroller.scrollTop,o=$e(t),s={};e.bottom-e.top>o&&(e.bottom=e.top+o);var a=t.doc.height+ze(n),l=e.topa-i;if(e.topr+o){var u=Math.min(e.top,(c?a:e.bottom)-o);u!=r&&(s.scrollTop=u)}var h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:n.scroller.scrollLeft,d=je(t)-(t.options.fixedGutter?n.gutters.offsetWidth:0),f=e.right-e.left>d;return f&&(e.right=e.left+d),e.left<10?s.scrollLeft=0:e.leftd+h-3&&(s.scrollLeft=e.right+(f?0:10)-d),s}function Kn(t,e){null!=e&&(Jn(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function Gn(t){Jn(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function Yn(t,e,n){null==e&&null==n||Jn(t),null!=e&&(t.curOp.scrollLeft=e),null!=n&&(t.curOp.scrollTop=n)}function Xn(t,e){Jn(t),t.curOp.scrollToPos=e}function Jn(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;Zn(t,hn(t,e.from),hn(t,e.to),e.margin)}}function Zn(t,e,n,i){var r=qn(t,{left:Math.min(e.left,n.left),top:Math.min(e.top,n.top)-i,right:Math.max(e.right,n.right),bottom:Math.max(e.bottom,n.bottom)+i});Yn(t,r.scrollLeft,r.scrollTop)}function Qn(t,e){Math.abs(t.doc.scrollTop-e)<2||(gs||Li(t,{top:e}),ti(t,e,!0),gs&&Li(t),Si(t,100))}function ti(t,e,n){e=Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e),(t.display.scroller.scrollTop!=e||n)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function ei(t,e,n,i){e=Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth),(n?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!i||(t.doc.scrollLeft=e,jn(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function ni(t){var e=t.display,n=e.gutters.offsetWidth,i=Math.round(t.doc.height+ze(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?n:0,docHeight:i,scrollHeight:i+Ve(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:n}}function ii(t,e){e||(e=ni(t));var n=t.display.barWidth,i=t.display.barHeight;ri(t,e);for(var r=0;r<4&&n!=t.display.barWidth||i!=t.display.barHeight;r++)n!=t.display.barWidth&&t.options.lineWrapping&&zn(t),ri(t,ni(t)),n=t.display.barWidth,i=t.display.barHeight}function ri(t,e){var n=t.display,i=n.scrollbars.update(e);n.sizer.style.paddingRight=(n.barWidth=i.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=i.bottom)+"px",n.heightForcer.style.borderBottom=i.bottom+"px solid transparent",i.right&&i.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=i.bottom+"px",n.scrollbarFiller.style.width=i.right+"px"):n.scrollbarFiller.style.display="",i.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=i.bottom+"px",n.gutterFiller.style.width=e.gutterWidth+"px"):n.gutterFiller.style.display=""}function oi(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&zs(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Sa[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),na(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,n){"horizontal"==n?ei(t,e):Qn(t,e)},t),t.display.scrollbars.addClass&&a(t.display.wrapper,t.display.scrollbars.addClass)}function si(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ta},ye(t.curOp)}function ai(t){xe(t.curOp,function(t){for(var e=0;e=n.viewTo)||n.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new Ea(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function ui(t){t.updatedDisplay=t.mustUpdate&&Oi(t.cm,t.update)}function hi(t){var e=t.cm,n=e.display;t.updatedDisplay&&zn(e),t.barMeasure=ni(e),n.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=qe(e,n.maxLine,n.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+t.adjustWidthTo+Ve(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+t.adjustWidthTo-je(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=n.input.prepareSelection())}function di(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLefte)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Zs&>(t.doc,e)r.viewFrom?xi(t):(r.viewFrom+=i,r.viewTo+=i);else if(e<=r.viewFrom&&n>=r.viewTo)xi(t);else if(e<=r.viewFrom){var o=wi(t,n,n+i,1);o?(r.view=r.view.slice(o.index),r.viewFrom=o.lineN,r.viewTo+=i):xi(t)}else if(n>=r.viewTo){var s=wi(t,e,e,-1);s?(r.view=r.view.slice(0,s.index),r.viewTo=s.lineN):xi(t)}else{var a=wi(t,e,e,-1),l=wi(t,n,n+i,1);a&&l?(r.view=r.view.slice(0,a.index).concat(me(t,a.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=i):xi(t)}var c=r.externalMeasured;c&&(n=r.lineN&&e=i.viewTo)){var o=i.view[Mn(t,e)];if(null!=o.node){var s=o.changes||(o.changes=[]);-1==d(s,n)&&s.push(n)}}}function xi(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function wi(t,e,n,i){var r,o=Mn(t,e),s=t.display.view;if(!Zs||n==t.doc.first+t.doc.size)return{index:o,lineN:n};for(var a=t.display.viewFrom,l=0;l0){if(o==s.length-1)return null;r=a+s[o].size-e,o++}else r=a-e;e+=r,n+=r}for(;gt(t.doc,n)!=n;){if(o==(i<0?0:s.length-1))return null;n+=i*s[o-(i<0?1:0)].size,o+=i}return{index:o,lineN:n}}function Ci(t,e,n){var i=t.display;0==i.view.length||e>=i.viewTo||n<=i.viewFrom?(i.view=me(t,e,n),i.viewFrom=e):(i.viewFrom>e?i.view=me(t,e,i.viewFrom).concat(i.view):i.viewFromn&&(i.view=i.view.slice(0,Mn(t,n)))),i.viewTo=n}function ki(t){for(var e=t.display.view,n=0,i=0;i=t.display.viewTo)){var n=+new Date+t.options.workTime,i=Jt(t,e.highlightFrontier),r=[];e.iter(i.line,Math.min(e.first+e.size,t.display.viewTo+500),function(o){if(i.line>=t.display.viewFrom){var s=o.styles,a=o.text.length>t.options.maxHighlightLength?qt(e.mode,i.state):null,l=Yt(t,o,i,!0);a&&(i.state=a),o.styles=l.styles;var c=o.styleClasses,u=l.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var h=!s||s.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),d=0;!h&&dn)return Si(t,t.options.workDelay),!0}),e.highlightFrontier=i.line,e.modeFrontier=Math.max(e.modeFrontier,i.line),r.length&&pi(t,function(){for(var e=0;e=i.viewFrom&&n.visible.to<=i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo)&&i.renderedView==i.view&&0==ki(t))return!1;$n(t)&&(xi(t),n.dims=Cn(t));var o=r.first+r.size,s=Math.max(n.visible.from-t.options.viewportMargin,r.first),a=Math.min(o,n.visible.to+t.options.viewportMargin);i.viewFroma&&i.viewTo-a<20&&(a=Math.min(o,i.viewTo)),Zs&&(s=gt(t.doc,s),a=vt(t.doc,a));var l=s!=i.viewFrom||a!=i.viewTo||i.lastWrapHeight!=n.wrapperHeight||i.lastWrapWidth!=n.wrapperWidth;Ci(t,s,a),i.viewOffset=bt(M(t.doc,i.viewFrom)),t.display.mover.style.top=i.viewOffset+"px";var c=ki(t);if(!l&&0==c&&!n.force&&i.renderedView==i.view&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo))return!1;var u=Mi(t);return c>4&&(i.lineDiv.style.display="none"),_i(t,i.updateLineNumbers,n.dims),c>4&&(i.lineDiv.style.display=""),i.renderedView=i.view,Ai(u),e(i.cursorDiv),e(i.selectionDiv),i.gutters.style.height=i.sizer.style.minHeight=0,l&&(i.lastWrapHeight=n.wrapperHeight,i.lastWrapWidth=n.wrapperWidth,Si(t,400)),i.updateLineNumbers=null,!0}function Pi(t,e){for(var n=e.viewport,i=!0;(i&&t.options.lineWrapping&&e.oldDisplayWidth!=je(t)||(n&&null!=n.top&&(n={top:Math.min(t.doc.height+ze(t.display)-$e(t),n.top)}),e.visible=Vn(t.display,t.doc,n),!(e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)))&&Oi(t,e);i=!1){zn(t);var r=ni(t);An(t),ii(t,r),Di(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function Li(t,e){var n=new Ea(t,e);if(Oi(t,n)){zn(t),Pi(t,n);var i=ni(t);An(t),ii(t,i),Di(t,i),n.finish()}}function _i(t,n,i){function r(e){var n=e.nextSibling;return ws&&Ls&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),n}for(var o=t.display,s=t.options.lineNumbers,a=o.lineDiv,l=a.firstChild,c=o.view,u=o.viewFrom,h=0;h-1&&(p=!1),ke(t,f,u,i)),p&&(e(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(D(t.options,u)))),l=f.node.nextSibling}else{var g=Le(t,f,u,i);a.insertBefore(g,l)}u+=f.size}for(;l;)l=r(l)}function Ni(t){var e=t.display.gutters.offsetWidth;t.display.sizer.style.marginLeft=e+"px"}function Di(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+Ve(t)+"px"}function Ii(t){var n=t.display.gutters,r=t.options.gutters;e(n);for(var o=0;o-1&&!t.lineNumbers&&(t.gutters=t.gutters.slice(0),t.gutters.splice(e,1))}function Ri(t){var e=t.wheelDeltaX,n=t.wheelDeltaY;return null==e&&t.detail&&t.axis==t.HORIZONTAL_AXIS&&(e=t.detail),null==n&&t.detail&&t.axis==t.VERTICAL_AXIS?n=t.detail:null==n&&(n=t.wheelDelta),{x:e,y:n}}function zi(t){var e=Ri(t);return e.x*=Aa,e.y*=Aa,e}function Hi(t,e){var n=Ri(e),i=n.x,r=n.y,o=t.display,s=o.scroller,a=s.scrollWidth>s.clientWidth,l=s.scrollHeight>s.clientHeight;if(i&&a||r&&l){if(r&&Ls&&ws)t:for(var c=e.target,u=o.view;c!=s;c=c.parentNode)for(var h=0;h=0){var s=V(o.from(),r.from()),a=H(o.to(),r.to()),l=o.empty()?r.from()==r.head:o.from()==o.head;i<=e&&--e,t.splice(--i,2,new Pa(l?a:s,l?s:a))}}return new Oa(t,e)}function ji(t,e){return new Oa([new Pa(t,e||t)],0)}function $i(t){return t.text?I(t.from.line+t.text.length-1,g(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function Bi(t,e){if(F(t,e.from)<0)return t;if(F(t,e.to)<=0)return $i(e);var n=t.line+e.text.length-(e.to.line-e.from.line)-1,i=t.ch;return t.line==e.to.line&&(i+=$i(e).ch-e.to.ch),I(n,i)}function Wi(t,e){for(var n=[],i=0;i1&&t.remove(a.line+1,p-1),t.insert(a.line+1,y)}we(t,"change",t,e)}function Ji(t,e,n){function i(t,r,o){if(t.linked)for(var s=0;s1&&!t.done[t.done.length-2].ranges?(t.done.pop(),g(t.done)):void 0}function or(t,e,n,i){var r=t.history;r.undone.length=0;var o,s,a=+new Date;if((r.lastOp==i||r.lastOrigin==e.origin&&e.origin&&("+"==e.origin.charAt(0)&&r.lastModTime>a-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(o=rr(r,r.lastOp==i)))s=g(o.changes),0==F(e.from,e.to)&&0==F(e.from,s.to)?s.to=$i(e):o.changes.push(nr(t,e));else{var l=g(r.done);for(l&&l.ranges||lr(t.sel,r.done),o={changes:[nr(t,e)],generation:r.generation},r.done.push(o);r.done.length>r.undoDepth;)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(n),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=a,r.lastOp=r.lastSelOp=i,r.lastOrigin=r.lastSelOrigin=e.origin,s||Mt(t,"historyAdded")}function sr(t,e,n,i){var r=e.charAt(0);return"*"==r||"+"==r&&n.ranges.length==i.ranges.length&&n.somethingSelected()==i.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}function ar(t,e,n,i){var r=t.history,o=i&&i.origin;n==r.lastSelOp||o&&r.lastSelOrigin==o&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==o||sr(t,o,g(r.done),e))?r.done[r.done.length-1]=e:lr(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=o,r.lastSelOp=n,i&&!1!==i.clearRedo&&ir(r.undone)}function lr(t,e){var n=g(e);n&&n.ranges&&n.equals(t)||e.push(t)}function cr(t,e,n,i){var r=e["spans_"+t.id],o=0;t.iter(Math.max(t.first,n),Math.min(t.first+t.size,i),function(n){n.markedSpans&&((r||(r=e["spans_"+t.id]={}))[o]=n.markedSpans),++o})}function ur(t){if(!t)return null;for(var e,n=0;n-1&&(g(a)[h]=c[h],delete c[h])}}}return i}function pr(t,e,n,i){if(i){var r=t.anchor;if(n){var o=F(e,r)<0;o!=F(n,r)<0?(r=e,e=n):o!=F(e,n)<0&&(e=n)}return new Pa(r,e)}return new Pa(n||e,e)}function gr(t,e,n,i,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),wr(t,new Oa([pr(t.sel.primary(),e,n,r)],0),i)}function vr(t,e,n){for(var i=[],r=t.cm&&(t.cm.display.shift||t.extend),o=0;o=e.ch:a.to>e.ch))){if(r&&(Mt(l,"beforeCursorEnter"),l.explicitlyCleared)){if(o.markedSpans){--s;continue}break}if(!l.atomic)continue;if(n){var c=l.find(i<0?1:-1),u=void 0;if((i<0?l.inclusiveRight:l.inclusiveLeft)&&(c=Ar(t,c,-i,c&&c.line==e.line?o:null)),c&&c.line==e.line&&(u=F(c,n))&&(i<0?u<0:u>0))return Er(t,c,e,i,r)}var h=l.find(i<0?-1:1);return(i<0?l.inclusiveLeft:l.inclusiveRight)&&(h=Ar(t,h,i,h.line==e.line?o:null)),h?Er(t,h,e,i,r):null}}return e}function Mr(t,e,n,i,r){var o=i||1,s=Er(t,e,n,o,r)||!r&&Er(t,e,n,o,!0)||Er(t,e,n,-o,r)||!r&&Er(t,e,n,-o,!0);return s||(t.cantEdit=!0,I(t.first,0))}function Ar(t,e,n,i){return n<0&&0==e.ch?e.line>t.first?$(t,I(e.line-1)):null:n>0&&e.ch==(i||M(t,e.line)).text.length?e.line=0;--r)_r(t,{from:i[r].from,to:i[r].to,text:r?[""]:e.text,origin:e.origin});else _r(t,e)}}function _r(t,e){if(1!=e.text.length||""!=e.text[0]||0!=F(e.from,e.to)){var n=Wi(t,e);or(t,e,n,t.cm?t.cm.curOp.id:NaN),Ir(t,e,n,Q(t,e));var i=[];Ji(t,function(t,n){n||-1!=d(i,t.history)||(Vr(t.history,e),i.push(t.history)),Ir(t,e,null,Q(t,e))})}}function Nr(t,e,n){var i=t.cm&&t.cm.state.suppressEdits;if(!i||n){for(var r,o=t.history,s=t.sel,a="undo"==e?o.done:o.undone,l="undo"==e?o.undone:o.done,c=0;c=0;--f){var p=function(n){var i=r.changes[n];if(i.origin=e,h&&!Pr(t,i,!1))return a.length=0,{};u.push(nr(t,i));var o=n?Wi(t,i):g(a);Ir(t,i,o,dr(t,i)),!n&&t.cm&&t.cm.scrollIntoView({from:i.from,to:$i(i)});var s=[];Ji(t,function(t,e){e||-1!=d(s,t.history)||(Vr(t.history,i),s.push(t.history)),Ir(t,i,null,dr(t,i))})}(f);if(p)return p.v}}}}function Dr(t,e){if(0!=e&&(t.first+=e,t.sel=new Oa(v(t.sel.ranges,function(t){return new Pa(I(t.anchor.line+e,t.anchor.ch),I(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){yi(t.cm,t.first,t.first-e,e);for(var n=t.cm.display,i=n.viewFrom;it.lastLine())){if(e.from.lineo&&(e={from:e.from,to:I(o,M(t,o).text.length),text:[e.text[0]],origin:e.origin}),e.removed=A(t,e.from,e.to),n||(n=Wi(t,e)),t.cm?Fr(t.cm,e,i):Xi(t,e,i),Cr(t,n,Us)}}function Fr(t,e,n){var i=t.doc,r=t.display,o=e.from,s=e.to,a=!1,l=o.line;t.options.lineWrapping||(l=L(dt(M(i,o.line))),i.iter(l,s.line+1,function(t){if(t==r.maxLine)return a=!0,!0})),i.sel.contains(e.from,e.to)>-1&&Ot(t),Xi(i,e,n,Sn(t)),t.options.lineWrapping||(i.iter(l,o.line+e.text.length,function(t){var e=xt(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,a=!1)}),a&&(t.curOp.updateMaxLine=!0)),oe(i,o.line),Si(t,400);var c=e.text.length-(s.line-o.line)-1;e.full?yi(t):o.line!=s.line||1!=e.text.length||Yi(t.doc,e)?yi(t,o.line,s.line+1,c):bi(t,o.line,"text");var u=Pt(t,"changes"),h=Pt(t,"change");if(h||u){var d={from:o,to:s,text:e.text,removed:e.removed,origin:e.origin};h&&we(t,"change",t,d),u&&(t.curOp.changeObjs||(t.curOp.changeObjs=[])).push(d)}t.display.selForContextMenu=null}function Rr(t,e,n,i,r){if(i||(i=n),F(i,n)<0){var o;o=[i,n],n=o[0],i=o[1]}"string"==typeof e&&(e=t.splitLines(e)),Lr(t,{from:n,to:i,text:e,origin:r})}function zr(t,e,n,i){n0||0==a&&!1!==s.clearWhenEmpty)return s;if(s.replacedWith&&(s.collapsed=!0,s.widgetNode=r("span",[s.replacedWith],"CodeMirror-widget"),i.handleMouseEvents||s.widgetNode.setAttribute("cm-ignore-events","true"),i.insertLeft&&(s.widgetNode.insertLeft=!0)),s.collapsed){if(ht(t,e.line,e,n,s)||e.line!=n.line&&ht(t,n.line,e,n,s))throw new Error("Inserting collapsed marker partially overlapping an existing one");q()}s.addToHistory&&or(t,{from:e,to:n,origin:"markText"},t.sel,NaN);var l,c=e.line,h=t.cm;if(t.iter(c,n.line+1,function(t){h&&s.collapsed&&!h.options.lineWrapping&&dt(t)==h.display.maxLine&&(l=!0),s.collapsed&&c!=e.line&&P(t,0),X(t,new K(s,c==e.line?e.ch:null,c==n.line?n.ch:null)),++c}),s.collapsed&&t.iter(e.line,n.line+1,function(e){mt(t,e)&&P(e,0)}),s.clearOnEnter&&na(s,"beforeCursorEnter",function(){return s.clear()}),s.readOnly&&(U(),(t.history.done.length||t.history.undone.length)&&t.clearHistory()),s.collapsed&&(s.id=++_a,s.atomic=!0),h){if(l&&(h.curOp.updateMaxLine=!0),s.collapsed)yi(h,e.line,n.line+1);else if(s.className||s.title||s.startStyle||s.endStyle||s.css)for(var d=e.line;d<=n.line;d++)bi(h,d,"text");s.atomic&&Sr(h.doc),we(h,"markerAdded",h,s)}return s}function Kr(t,e,n,i,r){i=u(i),i.shared=!1;var o=[qr(t,e,n,i,r)],s=o[0],a=i.widgetNode;return Ji(t,function(t){a&&(i.widgetNode=a.cloneNode(!0)),o.push(qr(t,$(t,e),$(t,n),i,r));for(var l=0;l-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var l=t.dataTransfer.getData("Text");if(l){var c;if(e.state.draggingText&&!e.state.draggingText.copy&&(c=e.listSelections()),Cr(e.doc,ji(n,n)),c)for(var u=0;u=0;e--)Rr(t.doc,"",i[e].from,i[e].to,"+delete");Gn(t)})}function po(t,e,n){var i=S(t.text,e+n,n);return i<0||i>t.text.length?null:i}function go(t,e,n){var i=po(t,e.ch,n);return null==i?null:new I(e.line,i,n<0?"after":"before")}function vo(t,e,n,i,r){if(t){var o=St(n,e.doc.direction);if(o){var s,a=r<0?g(o):o[0],l=r<0==(1==a.level),c=l?"after":"before";if(a.level>0||"rtl"==e.doc.direction){var u=Ge(e,n);s=r<0?n.text.length-1:0;var h=Ye(e,u,s).top;s=T(function(t){return Ye(e,u,t).top==h},r<0==(1==a.level)?a.from:a.to-1,s),"before"==c&&(s=po(n,s,1))}else s=r<0?a.to:a.from;return new I(i,s,c)}}return new I(i,r<0?n.text.length:0,r<0?"before":"after")}function mo(t,e,n,i){var r=St(e,t.doc.direction);if(!r)return go(e,n,i);n.ch>=e.text.length?(n.ch=e.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=kt(r,n.ch,n.sticky),s=r[o];if("ltr"==t.doc.direction&&s.level%2==0&&(i>0?s.to>n.ch:s.from=s.from&&d>=u.begin)){var f=h?"before":"after";return new I(n.line,d,f)}}var p=function(t,e,i){for(var o=function(t,e){return e?new I(n.line,l(t,1),"before"):new I(n.line,t,"after")};t>=0&&t0==(1!=s.level),c=a?i.begin:l(i.end,-1);if(s.from<=c&&c0?u.end:l(u.begin,-1);return null==v||i>0&&v==e.text.length||!(g=p(i>0?0:r.length-1,i,c(v)))?null:g}function yo(t,e){var n=M(t.doc,e),i=dt(n);return i!=n&&(e=L(i)),vo(!0,t,i,e,1)}function bo(t,e){var n=M(t.doc,e),i=ft(n);return i!=n&&(e=L(i)),vo(!0,t,n,e,-1)}function xo(t,e){var n=yo(t,e.line),i=M(t.doc,n.line),r=St(i,t.doc.direction);if(!r||0==r[0].level){var o=Math.max(0,i.text.search(/\S/)),s=e.line==n.line&&e.ch<=o&&e.ch;return I(n.line,s?0:o,n.sticky)}return n}function wo(t,e,n){if("string"==typeof e&&!(e=Wa[e]))return!1;t.display.input.ensurePolled();var i=t.display.shift,r=!1;try{t.isReadOnly()&&(t.state.suppressEdits=!0),n&&(t.display.shift=!1),r=e(t)!=Ws}finally{t.display.shift=i,t.state.suppressEdits=!1}return r}function Co(t,e,n){for(var i=0;i-1&&(F((r=a.ranges[r]).from(),e)<0||e.xRel>0)&&(F(r.to(),e)>0||e.xRel<0)?Fo(t,i,e,o):zo(t,i,e,o)}function Fo(t,e,n,i){var r=t.display,o=!1,s=gi(t,function(e){ws&&(r.scroller.draggable=!1),t.state.draggingText=!1,Et(r.wrapper.ownerDocument,"mouseup",s),Et(r.wrapper.ownerDocument,"mousemove",a),Et(r.scroller,"dragstart",l),Et(r.scroller,"drop",s),o||(_t(e),i.addNew||gr(t.doc,n,null,null,i.extend),ws||bs&&9==xs?setTimeout(function(){r.wrapper.ownerDocument.body.focus(),r.input.focus()},20):r.input.focus())}),a=function(t){o=o||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},l=function(){return o=!0};ws&&(r.scroller.draggable=!0),t.state.draggingText=s,s.copy=!i.moveOnDrag,r.scroller.dragDrop&&r.scroller.dragDrop(),na(r.wrapper.ownerDocument,"mouseup",s),na(r.wrapper.ownerDocument,"mousemove",a),na(r.scroller,"dragstart",l),na(r.scroller,"drop",s),In(t),setTimeout(function(){return r.input.focus()},20)}function Ro(t,e,n){if("char"==n)return new Pa(e,e);if("word"==n)return t.findWordAt(e);if("line"==n)return new Pa(I(e.line,0),$(t.doc,I(e.line+1,0)));var i=n(t,e);return new Pa(i.from,i.to)}function zo(t,e,n,i){function r(e){if(0!=F(m,e))if(m=e,"rectangle"==i.unit){for(var r=[],o=t.options.tabSize,s=h(M(c,n.line).text,n.ch,o),a=h(M(c,e.line).text,e.ch,o),l=Math.min(s,a),g=Math.max(s,a),v=Math.min(n.line,e.line),y=Math.min(t.lastLine(),Math.max(n.line,e.line));v<=y;v++){var b=M(c,v).text,x=f(b,l,o);l==g?r.push(new Pa(I(v,x),I(v,x))):b.length>x&&r.push(new Pa(I(v,x),I(v,f(b,g,o))))}r.length||r.push(new Pa(n,n)),wr(c,Vi(p.ranges.slice(0,d).concat(r),d),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var w,C=u,k=Ro(t,e,i.unit),S=C.anchor;F(k.anchor,S)>0?(w=k.head,S=V(C.from(),k.anchor)):(w=k.anchor,S=H(C.to(),k.head));var T=p.ranges.slice(0);T[d]=Ho(t,new Pa($(c,S),w)),wr(c,Vi(T,d),qs)}}function o(e){var n=++b,a=En(t,e,!0,"rectangle"==i.unit);if(a)if(0!=F(a,m)){t.curOp.focus=s(),r(a);var u=Vn(l,c);(a.line>=u.to||a.liney.bottom?20:0;h&&setTimeout(gi(t,function(){b==n&&(l.scroller.scrollTop+=h,o(e))}),50)}}function a(e){t.state.selectingText=!1,b=1/0,_t(e),l.input.focus(),Et(l.wrapper.ownerDocument,"mousemove",x),Et(l.wrapper.ownerDocument,"mouseup",w),c.history.lastSelOrigin=null}var l=t.display,c=t.doc;_t(e);var u,d,p=c.sel,g=p.ranges;if(i.addNew&&!i.extend?(d=c.sel.contains(n),u=d>-1?g[d]:new Pa(n,n)):(u=c.sel.primary(),d=c.sel.primIndex),"rectangle"==i.unit)i.addNew||(u=new Pa(n,n)),n=En(t,e,!0,!0),d=-1;else{var v=Ro(t,n,i.unit);u=i.extend?pr(u,v.anchor,v.head,i.extend):v}i.addNew?-1==d?(d=g.length,wr(c,Vi(g.concat([u]),d),{scroll:!1,origin:"*mouse"})):g.length>1&&g[d].empty()&&"char"==i.unit&&!i.extend?(wr(c,Vi(g.slice(0,d).concat(g.slice(d+1)),0),{scroll:!1,origin:"*mouse"}),p=c.sel):mr(c,d,u,qs):(d=0,wr(c,new Oa([u],0),qs),p=c.sel);var m=n,y=l.wrapper.getBoundingClientRect(),b=0,x=gi(t,function(t){0!==t.buttons&&Rt(t)?o(t):a(t)}),w=gi(t,a);t.state.selectingText=w,na(l.wrapper.ownerDocument,"mousemove",x),na(l.wrapper.ownerDocument,"mouseup",w)}function Ho(t,e){var n=e.anchor,i=e.head,r=M(t.doc,n.line);if(0==F(n,i)&&n.sticky==i.sticky)return e;var o=St(r);if(!o)return e;var s=kt(o,n.ch,n.sticky),a=o[s];if(a.from!=n.ch&&a.to!=n.ch)return e;var l=s+(a.from==n.ch==(1!=a.level)?0:1);if(0==l||l==o.length)return e;var c;if(i.line!=n.line)c=(i.line-n.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=kt(o,i.ch,i.sticky),h=u-s||(i.ch-n.ch)*(1==a.level?-1:1);c=u==l-1||u==l?h<0:h>0}var d=o[l+(c?-1:0)],f=c==(1==d.level),p=f?d.from:d.to,g=f?"after":"before";return n.ch==p&&n.sticky==g?e:new Pa(new I(n.line,p,g),i)}function Vo(t,e,n,i){var r,o;if(e.touches)r=e.touches[0].clientX,o=e.touches[0].clientY;else try{r=e.clientX,o=e.clientY}catch(e){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;i&&_t(e);var s=t.display,a=s.lineDiv.getBoundingClientRect();if(o>a.bottom||!Pt(t,n))return Dt(e);o-=a.top-s.viewOffset;for(var l=0;l=r){return Mt(t,n,t,_(t.doc,o),t.options.gutters[l],e),Dt(e)}}}function jo(t,e){return Vo(t,e,"gutterClick",!0)}function $o(t,e){Fe(t.display,e)||Bo(t,e)||At(t,e,"contextmenu")||t.display.input.onContextMenu(e)}function Bo(t,e){return!!Pt(t,"gutterContextMenu")&&Vo(t,e,"gutterContextMenu",!1)}function Wo(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),nn(t)}function Uo(t){Ii(t),yi(t),jn(t)}function qo(t,e,n){if(!e!=!(n&&n!=Xa)){var i=t.display.dragFunctions,r=e?na:Et;r(t.display.scroller,"dragstart",i.start),r(t.display.scroller,"dragenter",i.enter),r(t.display.scroller,"dragover",i.over),r(t.display.scroller,"dragleave",i.leave),r(t.display.scroller,"drop",i.drop)}}function Ko(t){t.options.lineWrapping?(a(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(zs(t.display.wrapper,"CodeMirror-wrap"),wt(t)),Tn(t),yi(t),nn(t),setTimeout(function(){return ii(t)},100)}function Go(t,e){var n=this;if(!(this instanceof Go))return new Go(t,e);this.options=e=e?u(e):{},u(Ja,e,!1),Fi(e);var i=e.value;"string"==typeof i&&(i=new Fa(i,e.mode,null,e.lineSeparator,e.direction)),this.doc=i;var r=new Go.inputStyles[e.inputStyle](this),o=this.display=new E(t,i,r);o.wrapper.CodeMirror=this,Ii(this),Wo(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),oi(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new Vs,keySeq:null,specialChars:null},e.autofocus&&!Ps&&o.input.focus(),bs&&xs<11&&setTimeout(function(){return n.display.input.reset(!0)},20),Yo(this),no(),si(this),this.curOp.forceUpdate=!0,Zi(this,i),e.autofocus&&!Ps||this.hasFocus()?setTimeout(c(Fn,this),20):Rn(this);for(var s in Za)Za.hasOwnProperty(s)&&Za[s](n,e[s],Xa);$n(this),e.finishInit&&e.finishInit(this);for(var a=0;a400}var r=t.display;na(r.scroller,"mousedown",gi(t,_o)),bs&&xs<11?na(r.scroller,"dblclick",gi(t,function(e){if(!At(t,e)){var n=En(t,e);if(n&&!jo(t,e)&&!Fe(t.display,e)){_t(e);var i=t.findWordAt(n);gr(t.doc,i.anchor,i.head)}}})):na(r.scroller,"dblclick",function(e){return At(t,e)||_t(e)}),Rs||na(r.scroller,"contextmenu",function(e){return $o(t,e)});var o,s={end:0};na(r.scroller,"touchstart",function(e){if(!At(t,e)&&!n(e)&&!jo(t,e)){r.input.ensurePolled(),clearTimeout(o);var i=+new Date;r.activeTouch={start:i,moved:!1,prev:i-s.end<=300?s:null},1==e.touches.length&&(r.activeTouch.left=e.touches[0].pageX,r.activeTouch.top=e.touches[0].pageY)}}),na(r.scroller,"touchmove",function(){r.activeTouch&&(r.activeTouch.moved=!0)}),na(r.scroller,"touchend",function(n){var o=r.activeTouch;if(o&&!Fe(r,n)&&null!=o.left&&!o.moved&&new Date-o.start<300){var s,a=t.coordsChar(r.activeTouch,"page");s=!o.prev||i(o,o.prev)?new Pa(a,a):!o.prev.prev||i(o,o.prev.prev)?t.findWordAt(a):new Pa(I(a.line,0),$(t.doc,I(a.line+1,0))),t.setSelection(s.anchor,s.head),t.focus(),_t(n)}e()}),na(r.scroller,"touchcancel",e),na(r.scroller,"scroll",function(){r.scroller.clientHeight&&(Qn(t,r.scroller.scrollTop),ei(t,r.scroller.scrollLeft,!0),Mt(t,"scroll",t))}),na(r.scroller,"mousewheel",function(e){return Hi(t,e)}),na(r.scroller,"DOMMouseScroll",function(e){return Hi(t,e)}),na(r.wrapper,"scroll",function(){return r.wrapper.scrollTop=r.wrapper.scrollLeft=0}),r.dragFunctions={enter:function(e){At(t,e)||It(e)},over:function(e){At(t,e)||(Qr(t,e),It(e))},start:function(e){return Zr(t,e)},drop:gi(t,Jr),leave:function(e){At(t,e)||to(t)}};var a=r.input.getField();na(a,"keyup",function(e){return Oo.call(t,e)}),na(a,"keydown",gi(t,Mo)),na(a,"keypress",gi(t,Po)),na(a,"focus",function(e){return Fn(t,e)}),na(a,"blur",function(e){return Rn(t,e)})}function Xo(t,e,n,i){var r,o=t.doc;null==n&&(n="add"),"smart"==n&&(o.mode.indent?r=Jt(t,e).state:n="prev");var s=t.options.tabSize,a=M(o,e),l=h(a.text,null,s);a.stateAfter&&(a.stateAfter=null);var c,u=a.text.match(/^\s*/)[0];if(i||/\S/.test(a.text)){if("smart"==n&&((c=o.mode.indent(r,a.text.slice(u.length),a.text))==Ws||c>150)){if(!i)return;n="prev"}}else c=0,n="not";"prev"==n?c=e>o.first?h(M(o,e-1).text,null,s):0:"add"==n?c=l+t.options.indentUnit:"subtract"==n?c=l-t.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var d="",f=0;if(t.options.indentWithTabs)for(var g=Math.floor(c/s);g;--g)f+=s,d+="\t";if(f1)if(tl&&tl.text.join("\n")==e){if(i.ranges.length%tl.text.length==0){l=[];for(var c=0;c=0;h--){var d=i.ranges[h],f=d.from(),p=d.to();d.empty()&&(n&&n>0?f=I(f.line,f.ch-n):t.state.overwrite&&!s?p=I(p.line,Math.min(M(o,p.line).text.length,p.ch+g(a).length)):tl&&tl.lineWise&&tl.text.join("\n")==e&&(f=p=I(f.line,0))),u=t.curOp.updateInput;var m={from:f,to:p,text:l?l[h%l.length]:a,origin:r||(s?"paste":t.state.cutIncoming?"cut":"+input")};Lr(t.doc,m),we(t,"inputRead",t,m)}e&&!s&&ts(t,e),Gn(t),t.curOp.updateInput=u,t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=!1}function Qo(t,e){var n=t.clipboardData&&t.clipboardData.getData("Text");if(n)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||pi(e,function(){return Zo(e,n,0,null,"paste")}),!0}function ts(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var n=t.doc.sel,i=n.ranges.length-1;i>=0;i--){var r=n.ranges[i];if(!(r.head.ch>100||i&&n.ranges[i-1].head.line==r.head.line)){var o=t.getModeAt(r.head),s=!1;if(o.electricChars){for(var a=0;a-1){s=Xo(t,r.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(M(t.doc,r.head.line).text.slice(0,r.head.ch))&&(s=Xo(t,r.head.line,"smart"));s&&we(t,"electricInput",t,r.head.line)}}}function es(t){for(var e=[],n=[],i=0;i=t.first+t.size)&&(e=new I(i,e.ch,e.sticky),c=M(t,i))}function s(i){var s;if(null==(s=r?mo(t.cm,c,e,n):go(c,e,n))){if(i||!o())return!1;e=vo(r,t.cm,c,e.line,n)}else e=s;return!0}var a=e,l=n,c=M(t,e.line);if("char"==i)s();else if("column"==i)s(!0);else if("word"==i||"group"==i)for(var u=null,h="group"==i,d=t.cm&&t.cm.getHelper(e,"wordChars"),f=!0;!(n<0)||s(!f);f=!1){var p=c.text.charAt(e.ch)||"\n",g=w(p,d)?"w":h&&"\n"==p?"n":!h||/\s/.test(p)?null:"p";if(!h||f||g||(g="s"),u&&u!=g){n<0&&(n=1,s(),e.sticky="after");break}if(g&&(u=g),n>0&&!s(!f))break}var v=Mr(t,e,a,l,!0);return R(a,v)&&(v.hitSide=!0),v}function os(t,e,n,i){var r,o=t.doc,s=e.left;if("page"==i){var a=Math.min(t.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),l=Math.max(a-.5*xn(t.display),3);r=(n>0?e.bottom:e.top)+n*l}else"line"==i&&(r=n>0?e.bottom+3:e.top-3);for(var c;c=fn(t,s,r),c.outside;){if(n<0?r<=0:r>=o.height){c.hitSide=!0;break}r+=5*n}return c}function ss(t,e){var n=Ke(t,e.line);if(!n||n.hidden)return null;var i=M(t.doc,e.line),r=We(n,i,e.line),o=St(i,t.doc.direction),s="left";if(o){s=kt(o,e.ch)%2?"right":"left"}var a=Xe(r.map,e.ch,s);return a.offset="right"==a.collapse?a.end:a.start,a}function as(t){for(var e=t;e;e=e.parentNode)if(/CodeMirror-gutter-wrapper/.test(e.className))return!0;return!1}function ls(t,e){return e&&(t.bad=!0),t}function cs(t,e,n,i,r){function o(t){return function(e){return e.id==t}}function s(){u&&(c+=h,d&&(c+=h),u=d=!1)}function a(t){t&&(s(),c+=t)}function l(e){if(1==e.nodeType){var n=e.getAttribute("cm-text");if(n)return void a(n);var c,f=e.getAttribute("cm-marker");if(f){var p=t.findMarks(I(i,0),I(r+1,0),o(+f));return void(p.length&&(c=p[0].find(0))&&a(A(t.doc,c.from,c.to).join(h)))}if("false"==e.getAttribute("contenteditable"))return;var g=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;g&&s();for(var v=0;v=15&&(Ss=!1,ws=!0);var Is,Fs=Ls&&(Cs||Ss&&(null==Ds||Ds<12.11)),Rs=gs||bs&&xs>=9,zs=function(e,n){var i=e.className,r=t(n).exec(i);if(r){var o=i.slice(r.index+r[0].length);e.className=i.slice(0,r.index)+(o?r[1]+o:"")}};Is=document.createRange?function(t,e,n,i){var r=document.createRange();return r.setEnd(i||t,n),r.setStart(t,e),r}:function(t,e,n){var i=document.body.createTextRange();try{i.moveToElementText(t.parentNode)}catch(t){return i}return i.collapse(!0),i.moveEnd("character",n),i.moveStart("character",e),i};var Hs=function(t){t.select()};As?Hs=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:bs&&(Hs=function(t){try{t.select()}catch(t){}});var Vs=function(){this.id=null};Vs.prototype.set=function(t,e){clearTimeout(this.id),this.id=setTimeout(e,t)};var js,$s,Bs=30,Ws={toString:function(){return"CodeMirror.Pass"}},Us={scroll:!1},qs={origin:"*mouse"},Ks={origin:"+move"},Gs=[""],Ys=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Xs=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,Js=!1,Zs=!1,Qs=null,ta=function(){function t(t){return t<=247?n.charAt(t):1424<=t&&t<=1524?"R":1536<=t&&t<=1785?i.charAt(t-1536):1774<=t&&t<=2220?"r":8192<=t&&t<=8203?"w":8204==t?"b":"L"}function e(t,e,n){this.level=t,this.from=e,this.to=n}var n="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",i="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111",r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,o=/[stwN]/,s=/[LRr]/,a=/[Lb1n]/,l=/[1n]/;return function(n,i){var c="ltr"==i?"L":"R";if(0==n.length||"ltr"==i&&!r.test(n))return!1;for(var u=n.length,h=[],d=0;d=this.string.length},ha.prototype.sol=function(){return this.pos==this.lineStart},ha.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},ha.prototype.next=function(){if(this.pose},ha.prototype.eatSpace=function(){for(var t=this,e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++t.pos;return this.pos>e},ha.prototype.skipToEnd=function(){this.pos=this.string.length},ha.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},ha.prototype.backUp=function(t){this.pos-=t},ha.prototype.column=function(){return this.lastColumnPos0?null:(i&&!1!==e&&(this.pos+=i[0].length),i)}var r=function(t){return n?t.toLowerCase():t};if(r(this.string.substr(this.pos,t.length))==r(t))return!1!==e&&(this.pos+=t.length),!0},ha.prototype.current=function(){return this.string.slice(this.start,this.pos)},ha.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},ha.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},ha.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var da=function(t,e){this.state=t,this.lookAhead=e},fa=function(t,e,n,i){this.state=e,this.doc=t,this.line=n,this.maxLookAhead=i||0,this.baseTokens=null,this.baseTokenPos=1};fa.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},fa.prototype.baseToken=function(t){var e=this;if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=t;)e.baseTokenPos+=2;var n=this.baseTokens[this.baseTokenPos+1];return{type:n&&n.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},fa.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},fa.fromSaved=function(t,e,n){return e instanceof da?new fa(t,qt(t.mode,e.state),n,e.lookAhead):new fa(t,qt(t.mode,e),n)},fa.prototype.save=function(t){var e=!1!==t?qt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new da(e,this.maxLookAhead):e};var pa=function(t,e,n){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=n},ga=function(t,e,n){this.text=t,it(this,e),this.height=n?n(this):1};ga.prototype.lineNo=function(){return L(this)},Lt(ga);var va,ma={},ya={},ba=null,xa=null,wa={left:0,right:0,top:0,bottom:0},Ca=function(t,e,n){this.cm=n;var r=this.vert=i("div",[i("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),o=this.horiz=i("div",[i("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=o.tabIndex=-1,t(r),t(o),na(r,"scroll",function(){r.clientHeight&&e(r.scrollTop,"vertical")}),na(o,"scroll",function(){o.clientWidth&&e(o.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,bs&&xs<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Ca.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,n=t.scrollHeight>t.clientHeight+1,i=t.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=e?i+"px":"0";var r=t.viewHeight-(e?i:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=n?i+"px":"0",this.horiz.style.left=t.barLeft+"px";var o=t.viewWidth-t.barLeft-(n?i:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?i:0,bottom:e?i:0}},Ca.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Ca.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Ca.prototype.zeroWidthHack=function(){var t=Ls&&!Es?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new Vs,this.disableVert=new Vs},Ca.prototype.enableZeroWidthBar=function(t,e,n){function i(){var r=t.getBoundingClientRect();("vert"==n?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1))!=t?t.style.pointerEvents="none":e.set(1e3,i)}t.style.pointerEvents="auto",e.set(1e3,i)},Ca.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var ka=function(){};ka.prototype.update=function(){return{bottom:0,right:0}},ka.prototype.setScrollLeft=function(){},ka.prototype.setScrollTop=function(){},ka.prototype.clear=function(){};var Sa={native:Ca,null:ka},Ta=0,Ea=function(t,e,n){var i=t.display;this.viewport=e,this.visible=Vn(i,t.doc,e),this.editorIsHidden=!i.wrapper.offsetWidth,this.wrapperHeight=i.wrapper.clientHeight,this.wrapperWidth=i.wrapper.clientWidth,this.oldDisplayWidth=je(t),this.force=n,this.dims=Cn(t),this.events=[]};Ea.prototype.signal=function(t,e){Pt(t,e)&&this.events.push(arguments)},Ea.prototype.finish=function(){for(var t=this,e=0;e=0&&F(t,r.to())<=0)return i}return-1};var Pa=function(t,e){this.anchor=t,this.head=e};Pa.prototype.from=function(){return V(this.anchor,this.head)},Pa.prototype.to=function(){return H(this.anchor,this.head)},Pa.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},$r.prototype={chunkSize:function(){return this.lines.length},removeInner:function(t,e){for(var n=this,i=t,r=t+e;i1||!(this.children[0]instanceof $r))){var l=[];this.collapse(l),this.children=[new $r(l)],this.children[0].parent=this}},collapse:function(t){for(var e=this,n=0;n50){for(var a=o.lines.length%25+25,l=a;l10);t.parent.maybeSpill()}},iterN:function(t,e,n){for(var i=this,r=0;re.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=h,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&yi(e,r,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Sr(e.doc)),e&&we(e,"markerCleared",e,this,r,o),n&&ai(e),this.parent&&this.parent.clear()}},Na.prototype.find=function(t,e){var n=this;null==t&&"bookmark"==this.type&&(t=1);for(var i,r,o=0;o=0;c--)Lr(i,r[c]);l?xr(this,l):this.cm&&Gn(this.cm)}),undo:mi(function(){Nr(this,"undo")}),redo:mi(function(){Nr(this,"redo")}),undoSelection:mi(function(){Nr(this,"undo",!0)}),redoSelection:mi(function(){Nr(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,n=0,i=0;i=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,n){t=$(this,t),e=$(this,e);var i=[],r=t.line;return this.iter(t.line,e.line+1,function(o){var s=o.markedSpans;if(s)for(var a=0;a=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||n&&!n(l.marker)||i.push(l.marker.parent||l.marker)}++r}),i},getAllMarks:function(){var t=[];return this.iter(function(e){var n=e.markedSpans;if(n)for(var i=0;it)return e=t,!0;t-=o,++n}),$(this,I(n,e))},indexFromPos:function(t){t=$(this,t);var e=t.ch;if(t.linee&&(e=t.from),null!=t.to&&t.to0)r=new I(r.line,r.ch+1),t.replaceRange(o.charAt(r.ch-1)+o.charAt(r.ch-2),I(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var s=M(t.doc,r.line-1).text;s&&(r=new I(r.line,1),t.replaceRange(o.charAt(0)+t.doc.lineSeparator()+s.charAt(s.length-1),I(r.line-1,s.length-1),r,"+transpose"))}n.push(new Pa(r,r))}t.setSelections(n)})},newlineAndIndent:function(t){return pi(t,function(){for(var e=t.listSelections(),n=e.length-1;n>=0;n--)t.replaceRange(t.doc.lineSeparator(),e[n].anchor,e[n].head,"+input");e=t.listSelections();for(var i=0;it&&0==F(e,this.pos)&&n==this.button};var Ga,Ya,Xa={toString:function(){return"CodeMirror.Init"}},Ja={},Za={};Go.defaults=Ja,Go.optionHandlers=Za;var Qa=[];Go.defineInitHook=function(t){return Qa.push(t)};var tl=null,el=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new Vs,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};el.prototype.init=function(t){function e(t){if(!At(r,t)){if(r.somethingSelected())Jo({lineWise:!1,text:r.getSelections()}),"cut"==t.type&&r.replaceSelection("",null,"cut");else{if(!r.options.lineWiseCopyCut)return;var e=es(r);Jo({lineWise:!0,text:e.text}),"cut"==t.type&&r.operation(function(){r.setSelections(e.ranges,0,Us),r.replaceSelection("",null,"cut")})}if(t.clipboardData){t.clipboardData.clearData();var n=tl.text.join("\n");if(t.clipboardData.setData("Text",n),t.clipboardData.getData("Text")==n)return void t.preventDefault()}var s=is(),a=s.firstChild;r.display.lineSpace.insertBefore(s,r.display.lineSpace.firstChild),a.value=tl.text.join("\n");var l=document.activeElement;Hs(a),setTimeout(function(){r.display.lineSpace.removeChild(s),l.focus(),l==o&&i.showPrimarySelection()},50)}}var n=this,i=this,r=i.cm,o=i.div=t.lineDiv;ns(o,r.options.spellcheck),na(o,"paste",function(t){At(r,t)||Qo(t,r)||xs<=11&&setTimeout(gi(r,function(){return n.updateFromDOM()}),20)}),na(o,"compositionstart",function(t){n.composing={data:t.data,done:!1}}),na(o,"compositionupdate",function(t){n.composing||(n.composing={data:t.data,done:!1})}),na(o,"compositionend",function(t){n.composing&&(t.data!=n.composing.data&&n.readFromDOMSoon(),n.composing.done=!0)}),na(o,"touchstart",function(){return i.forceCompositionEnd()}),na(o,"input",function(){n.composing||n.readFromDOMSoon()}),na(o,"copy",e),na(o,"cut",e)},el.prototype.prepareSelection=function(){var t=On(this.cm,!1);return t.focus=this.cm.state.focused,t},el.prototype.showSelection=function(t,e){t&&this.cm.display.view.length&&((t.focus||e)&&this.showPrimarySelection(),this.showMultipleSelections(t))},el.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},el.prototype.showPrimarySelection=function(){var t=this.getSelection(),e=this.cm,n=e.doc.sel.primary(),i=n.from(),r=n.to();if(e.display.viewTo==e.display.viewFrom||i.line>=e.display.viewTo||r.line=e.display.viewFrom&&ss(e,i)||{node:a[0].measure.map[2],offset:0},c=r.linet.firstLine()&&(i=I(i.line-1,M(t.doc,i.line-1).length)),r.ch==M(t.doc,r.line).text.length&&r.linee.viewTo-1)return!1;var o,s,a;i.line==e.viewFrom||0==(o=Mn(t,i.line))?(s=L(e.view[0].line),a=e.view[0].node):(s=L(e.view[o].line),a=e.view[o-1].node.nextSibling);var l,c,u=Mn(t,r.line);if(u==e.view.length-1?(l=e.viewTo-1,c=e.lineDiv.lastChild):(l=L(e.view[u+1].line)-1,c=e.view[u+1].node.previousSibling),!a)return!1;for(var h=t.doc.splitLines(cs(t,a,c,s,l)),d=A(t.doc,I(s,0),I(l,M(t.doc,l).text.length));h.length>1&&d.length>1;)if(g(h)==g(d))h.pop(),d.pop(),l--;else{if(h[0]!=d[0])break;h.shift(),d.shift(),s++}for(var f=0,p=0,v=h[0],m=d[0],y=Math.min(v.length,m.length);fi.ch&&b.charCodeAt(b.length-p-1)==x.charCodeAt(x.length-p-1);)f--,p++;h[h.length-1]=b.slice(0,b.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(f).replace(/\u200b+$/,"");var C=I(s,f),k=I(l,d.length?g(d).length-p:0);return h.length>1||h[0]||F(C,k)?(Rr(t.doc,h,C,k,"+input"),!0):void 0},el.prototype.ensurePolled=function(){this.forceCompositionEnd()},el.prototype.reset=function(){this.forceCompositionEnd()},el.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},el.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},el.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||pi(this.cm,function(){return yi(t.cm)})},el.prototype.setUneditable=function(t){t.contentEditable="false"},el.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||gi(this.cm,Zo)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},el.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},el.prototype.onContextMenu=function(){},el.prototype.resetPosition=function(){},el.prototype.needsContentAttribute=!0;var nl=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new Vs,this.hasSelection=!1,this.composing=null};nl.prototype.init=function(t){function e(t){if(!At(r,t)){if(r.somethingSelected())Jo({lineWise:!1,text:r.getSelections()});else{if(!r.options.lineWiseCopyCut)return;var e=es(r);Jo({lineWise:!0,text:e.text}),"cut"==t.type?r.setSelections(e.ranges,null,Us):(i.prevInput="",o.value=e.text.join("\n"),Hs(o))}"cut"==t.type&&(r.state.cutIncoming=!0)}}var n=this,i=this,r=this.cm;this.createField(t);var o=this.textarea;t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),As&&(o.style.width="0px"),na(o,"input",function(){bs&&xs>=9&&n.hasSelection&&(n.hasSelection=null),i.poll()}),na(o,"paste",function(t){At(r,t)||Qo(t,r)||(r.state.pasteIncoming=!0,i.fastPoll())}),na(o,"cut",e),na(o,"copy",e),na(t.scroller,"paste",function(e){Fe(t,e)||At(r,e)||(r.state.pasteIncoming=!0,i.focus())}),na(t.lineSpace,"selectstart",function(e){Fe(t,e)||_t(e)}),na(o,"compositionstart",function(){var t=r.getCursor("from");i.composing&&i.composing.range.clear(),i.composing={start:t,range:r.markText(t,r.getCursor("to"),{className:"CodeMirror-composing"})}}),na(o,"compositionend",function(){i.composing&&(i.poll(),i.composing.range.clear(),i.composing=null)})},nl.prototype.createField=function(t){this.wrapper=is(),this.textarea=this.wrapper.firstChild},nl.prototype.prepareSelection=function(){var t=this.cm,e=t.display,n=t.doc,i=On(t);if(t.options.moveInputWithCursor){var r=un(t,n.sel.primary().head,"div"),o=e.wrapper.getBoundingClientRect(),s=e.lineDiv.getBoundingClientRect();i.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+s.top-o.top)),i.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+s.left-o.left))}return i},nl.prototype.showSelection=function(t){var e=this.cm,i=e.display;n(i.cursorDiv,t.cursors),n(i.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},nl.prototype.reset=function(t){if(!this.contextMenuPending&&!this.composing){var e=this.cm;if(e.somethingSelected()){this.prevInput="";var n=e.getSelection();this.textarea.value=n,e.state.focused&&Hs(this.textarea),bs&&xs>=9&&(this.hasSelection=n)}else t||(this.prevInput=this.textarea.value="",bs&&xs>=9&&(this.hasSelection=null))}},nl.prototype.getField=function(){return this.textarea},nl.prototype.supportsTouch=function(){return!1},nl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!Ps||s()!=this.textarea))try{this.textarea.focus()}catch(t){}},nl.prototype.blur=function(){this.textarea.blur()},nl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},nl.prototype.receivedFocus=function(){this.slowPoll()},nl.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},nl.prototype.fastPoll=function(){function t(){n.poll()||e?(n.pollingFast=!1,n.slowPoll()):(e=!0,n.polling.set(60,t))}var e=!1,n=this;n.pollingFast=!0,n.polling.set(20,t)},nl.prototype.poll=function(){var t=this,e=this.cm,n=this.textarea,i=this.prevInput;if(this.contextMenuPending||!e.state.focused||oa(n)&&!i&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=n.value;if(r==i&&!e.somethingSelected())return!1;if(bs&&xs>=9&&this.hasSelection===r||Ls&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var o=r.charCodeAt(0);if(8203!=o||i||(i="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var s=0,a=Math.min(i.length,r.length);s1e3||r.indexOf("\n")>-1?n.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},nl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},nl.prototype.onKeyPress=function(){bs&&xs>=9&&(this.hasSelection=null),this.fastPoll()},nl.prototype.onContextMenu=function(t){function e(){if(null!=s.selectionStart){var t=r.somethingSelected(),e="​"+(t?s.value:"");s.value="⇚",s.value=e,i.prevInput=t?"":"​",s.selectionStart=1,s.selectionEnd=e.length,o.selForContextMenu=r.doc.sel}}function n(){if(i.contextMenuPending=!1,i.wrapper.style.cssText=u,s.style.cssText=c,bs&&xs<9&&o.scrollbars.setScrollTop(o.scroller.scrollTop=l),null!=s.selectionStart){(!bs||bs&&xs<9)&&e();var t=0,n=function(){o.selForContextMenu==r.doc.sel&&0==s.selectionStart&&s.selectionEnd>0&&"​"==i.prevInput?gi(r,Or)(r):t++<10?o.detectingSelectAll=setTimeout(n,500):(o.selForContextMenu=null,o.input.reset())};o.detectingSelectAll=setTimeout(n,200)}}var i=this,r=i.cm,o=r.display,s=i.textarea,a=En(r,t),l=o.scroller.scrollTop;if(a&&!Ss){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(a)&&gi(r,wr)(r.doc,ji(a),Us);var c=s.style.cssText,u=i.wrapper.style.cssText;i.wrapper.style.cssText="position: absolute";var h=i.wrapper.getBoundingClientRect();s.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(t.clientY-h.top-5)+"px; left: "+(t.clientX-h.left-5)+"px;\n z-index: 1000; background: "+(bs?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var d;if(ws&&(d=window.scrollY),o.input.focus(),ws&&window.scrollTo(null,d),o.input.reset(),r.somethingSelected()||(s.value=i.prevInput=" "),i.contextMenuPending=!0,o.selForContextMenu=r.doc.sel,clearTimeout(o.detectingSelectAll),bs&&xs>=9&&e(),Rs){It(t);var f=function(){Et(window,"mouseup",f),setTimeout(n,20)};na(window,"mouseup",f)}else setTimeout(n,50)}},nl.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t},nl.prototype.setUneditable=function(){},nl.prototype.needsContentAttribute=!1,function(t){function e(e,i,r,o){t.defaults[e]=i,r&&(n[e]=o?function(t,e,n){n!=Xa&&r(t,e,n)}:r)}var n=t.optionHandlers;t.defineOption=e,t.Init=Xa,e("value","",function(t,e){return t.setValue(e)},!0),e("mode",null,function(t,e){t.doc.modeOption=e,Ki(t)},!0),e("indentUnit",2,Ki,!0),e("indentWithTabs",!1),e("smartIndent",!0),e("tabSize",4,function(t){Gi(t),nn(t),yi(t)},!0),e("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var n=[],i=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var o=t.text.indexOf(e,r);if(-1==o)break;r=o+e.length,n.push(I(i,o))}i++});for(var r=n.length-1;r>=0;r--)Rr(t.doc,e,n[r],I(n[r].line,n[r].ch+e.length))}}),e("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(t,e,n){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),n!=Xa&&t.refresh()}),e("specialCharPlaceholder",ue,function(t){return t.refresh()},!0),e("electricChars",!0),e("inputStyle",Ps?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),e("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),e("rtlMoveVisually",!Ns),e("wholeLineUpdateBefore",!0),e("theme","default",function(t){Wo(t),Uo(t)},!0),e("keyMap","default",function(t,e,n){var i=ho(e),r=n!=Xa&&ho(n);r&&r.detach&&r.detach(t,i),i.attach&&i.attach(t,r||null)}),e("extraKeys",null),e("configureMouse",null),e("lineWrapping",!1,Ko,!0),e("gutters",[],function(t){Fi(t.options),Uo(t)},!0),e("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?kn(t.display)+"px":"0",t.refresh()},!0),e("coverGutterNextToScrollbar",!1,function(t){return ii(t)},!0),e("scrollbarStyle","native",function(t){oi(t),ii(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),e("lineNumbers",!1,function(t){Fi(t.options),Uo(t)},!0),e("firstLineNumber",1,Uo,!0),e("lineNumberFormatter",function(t){return t},Uo,!0),e("showCursorWhenSelecting",!1,An,!0),e("resetSelectionOnContextMenu",!0),e("lineWiseCopyCut",!0),e("pasteLinesPerSelection",!0),e("readOnly",!1,function(t,e){"nocursor"==e&&(Rn(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),e("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),e("dragDrop",!0,qo),e("allowDropFileTypes",null),e("cursorBlinkRate",530),e("cursorScrollMargin",0),e("cursorHeight",1,An,!0),e("singleCursorHeightPerLine",!0,An,!0),e("workTime",100),e("workDelay",100),e("flattenSpans",!0,Gi,!0),e("addModeClass",!1,Gi,!0),e("pollInterval",100),e("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),e("historyEventDelay",1250),e("viewportMargin",10,function(t){return t.refresh()},!0),e("maxHighlightLength",1e4,Gi,!0),e("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),e("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),e("autofocus",null),e("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0)}(Go),function(t){var e=t.optionHandlers,n=t.helpers={};t.prototype={constructor:t,focus:function(){window.focus(),this.display.input.focus()},setOption:function(t,n){var i=this.options,r=i[t];i[t]==n&&"mode"!=t||(i[t]=n,e.hasOwnProperty(t)&&gi(this,e[t])(this,n,r),Mt(this,"optionChange",this,t))},getOption:function(t){return this.options[t]},getDoc:function(){return this.doc},addKeyMap:function(t,e){this.state.keyMaps[e?"push":"unshift"](ho(t))},removeKeyMap:function(t){for(var e=this.state.keyMaps,n=0;ni&&(Xo(e,o.head.line,t,!0),i=o.head.line,r==e.doc.sel.primIndex&&Gn(e));else{var s=o.from(),a=o.to(),l=Math.max(i,s.line);i=Math.min(e.lastLine(),a.line-(a.ch?0:1))+1;for(var c=l;c0&&mr(e.doc,r,new Pa(s,u[r].to()),Us)}}}),getTokenAt:function(t,e){return ee(this,t,e)},getLineTokens:function(t,e){return ee(this,I(t),e,!0)},getTokenTypeAt:function(t){t=$(this.doc,t);var e,n=Xt(this,M(this.doc,t.line)),i=0,r=(n.length-1)/2,o=t.ch;if(0==o)e=n[2];else for(;;){var s=i+r>>1;if((s?n[2*s-1]:0)>=o)r=s;else{if(!(n[2*s+1]o&&(t=o,r=!0),i=M(this.doc,t)}else i=t;return an(this,i,{top:0,left:0},e||"page",n||r).top+(r?this.doc.height-bt(i):0)},defaultTextHeight:function(){return xn(this.display)},defaultCharWidth:function(){return wn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,n,i,r){var o=this.display;t=un(this,$(this.doc,t));var s=t.bottom,a=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),o.sizer.appendChild(e),"over"==i)s=t.top;else if("above"==i||"near"==i){var l=Math.max(o.wrapper.clientHeight,this.doc.height),c=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==i||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?s=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(s=t.bottom),a+e.offsetWidth>c&&(a=c-e.offsetWidth)}e.style.top=s+"px",e.style.left=e.style.right="","right"==r?(a=o.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?a=0:"middle"==r&&(a=(o.sizer.clientWidth-e.offsetWidth)/2),e.style.left=a+"px"),n&&Un(this,{left:a,top:s,right:a+e.offsetWidth,bottom:s+e.offsetHeight})},triggerOnKeyDown:vi(Mo),triggerOnKeyPress:vi(Po),triggerOnKeyUp:Oo,triggerOnMouseDown:vi(_o),execCommand:function(t){if(Wa.hasOwnProperty(t))return Wa[t].call(null,this)},triggerElectric:vi(function(t){ts(this,t)}),findPosH:function(t,e,n,i){var r=this,o=1;e<0&&(o=-1,e=-e);for(var s=$(this.doc,t),a=0;a0&&a(n.charAt(i-1));)--i;for(;r.5)&&Tn(this),Mt(this,"refresh",this)}),swapDoc:vi(function(t){var e=this.doc;return e.cm=null,Zi(this,t),nn(this),this.display.input.reset(),Yn(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,we(this,"swapDoc",this,e),e}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Lt(t),t.registerHelper=function(e,i,r){n.hasOwnProperty(e)||(n[e]=t[e]={_global:[]}),n[e][i]=r},t.registerGlobalHelper=function(e,i,r,o){t.registerHelper(e,i,o),n[e]._global.push({pred:r,val:o})}}(Go);var il="iter insert remove copy getEditor constructor".split(" ");for(var rl in Fa.prototype)Fa.prototype.hasOwnProperty(rl)&&d(il,rl)<0&&(Go.prototype[rl]=function(t){return function(){return t.apply(this.doc,arguments)}}(Fa.prototype[rl]));return Lt(Fa),Go.inputStyles={textarea:nl,contenteditable:el},Go.defineMode=function(t){Go.defaults.mode||"null"==t||(Go.defaults.mode=t),jt.apply(this,arguments)},Go.defineMIME=$t,Go.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),Go.defineMIME("text/plain","null"),Go.defineExtension=function(t,e){Go.prototype[t]=e},Go.defineDocExtension=function(t,e){Fa.prototype[t]=e},Go.fromTextArea=ds,function(t){t.off=Et,t.on=na,t.wheelEventPixels=zi,t.Doc=Fa,t.splitLines=ra,t.countColumn=h,t.findColumn=f,t.isWordChar=x,t.Pass=Ws,t.signal=Mt,t.Line=ga,t.changeEnd=$i,t.scrollbarModel=Sa,t.Pos=I,t.cmpPos=F,t.modes=la,t.mimeModes=ca,t.resolveMode=Bt,t.getMode=Wt,t.modeExtensions=ua,t.extendMode=Ut,t.copyState=qt,t.startState=Gt,t.innerMode=Kt,t.commands=Wa,t.keyMap=Ba,t.keyName=uo,t.isModifierKey=lo,t.lookupKey=ao,t.normalizeKeyMap=so,t.StringStream=ha,t.SharedTextMarker=Da,t.TextMarker=Na,t.LineWidget=La,t.e_preventDefault=_t,t.e_stopPropagation=Nt,t.e_stop=It,t.addClass=a,t.contains=o,t.rmClass=zs,t.keyNames=Ha}(Go),Go.version="5.38.0",Go})},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";var i=n(0),r=i.Model.extend({idAttribute:"name",defaults:{name:"",label:"",type:1,active:!0,private:!1,protected:!1},initialize:function(){var t=this.get("name"),e=this.get("label");t?e||this.set("label",t):this.set("name",e),this.set("name",r.escapeName(this.get("name")))},getFullName:function(){var t="";switch(this.get("type")){case 1:t=".";break;case 2:t="#"}return t+this.get("name")}},{TYPE_CLASS:1,TYPE_ID:2,escapeName:function(t){return(""+t).trim().replace(/([^a-z0-9\w-]+)/gi,"-")}});t.exports=r},function(t,e,n){"use strict";var i=n(1),r=n(0),o=r.$;t.exports=r.View.extend({events:{change:"onChange"},attributes:function(){return this.model.get("attributes")},initialize:function(t){var e=this.model,n=(e.get("name"),e.target);this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=n,this.className=this.pfx+"trait",this.labelClass=this.ppfx+"label",this.fieldClass=this.ppfx+"field "+this.ppfx+"field-"+e.get("type"),this.inputhClass=this.ppfx+"input-holder",e.off("change:value",this.onValueChange),this.listenTo(e,"change:value",this.onValueChange),e.view=this,this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().value)},getValueForTarget:function(){return this.model.get("value")},setInputValue:function(t){this.getInputEl().value=t},onValueChange:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.model;this.target,i.get("name");if(n.fromTarget)this.setInputValue(i.get("value"));else{var r=this.getValueForTarget();i.setTargetValue(r,n)}},renderLabel:function(){var t=this.getLabel();this.$el.html('
    '+t+"
    ")},getLabel:function(){var t=this.model,e=t.get("label")||t.get("name");return e.charAt(0).toUpperCase()+e.slice(1).replace(/-/g," ")},getInputEl:function(){if(!this.$input){var t=this.model,e=t.get("placeholder")||t.get("default")||"",n=t.get("type")||"text",i=t.get("min"),r=t.get("max"),s=this.getModelValue(),a=o('');s&&a.prop("value",s),i&&a.prop("min",i),r&&a.prop("max",r),this.$input=a}return this.$input.get(0)},getModelValue:function(){var t=void 0,e=this.model,n=this.target,r=e.get("name");if(e.get("changeProp"))t=n.get(r);else{var o=n.get("attributes");t=e.get("value")||o[r]}return(0,i.isUndefined)(t)?"":t},renderField:function(){if(!this.$input){this.$el.append(this.tmpl);var t=this.getInputEl(),e=this.el.querySelector("."+this.inputhClass);e.insertBefore(t,e.childNodes[0])}},render:function(){return this.renderLabel(),this.renderField(),this.el.className=this.className,this}})},function(t,e,n){"use strict";var i,r;!function(o,s){i=s,void 0!==(r="function"==typeof i?i.call(e,n,e,t):i)&&(t.exports=r)}(0,function(){function t(t,e){return e=e||M,R.test(t)?e.getElementsByClassName(t.slice(1)):H.test(t)?e.getElementsByTagName(t):e.querySelectorAll(t)}function e(t){if(!E){E=M.implementation.createHTMLDocument(null);var e=E.createElement("base");e.href=M.location.href,E.head.appendChild(e)}return E.body.innerHTML=t,E.body.childNodes}function n(t){"loading"!==M.readyState?setTimeout(t):M.addEventListener("DOMContentLoaded",t)}function i(i,r){if(!i)return this;if(i.cash&&i!==A)return i;var o,s=i,a=0;if(I(i))s=F.test(i)?M.getElementById(i.slice(1)):z.test(i)?e(i):t(i,r);else if(D(i))return n(i),this;if(!s)return this;if(s.nodeType||s===A)this[0]=s,this.length=1;else for(o=this.length=s.length;a=0&&s.splice(i,1)):(o(s,function(n){t.removeEventListener(e,n)}),s=[]))}function x(t,e){return"&"+encodeURIComponent(t)+"="+encodeURIComponent(e).replace(/%20/g,"+")}function w(t){var e=[];return o(t.options,function(t){t.selected&&e.push(t.value)}),e.length?e:null}function C(t){var e=t.selectedIndex;return e>=0?t.options[e].value:null}function k(t){var e=t.type;if(!e)return null;switch(e.toLowerCase()){case"select-one":return C(t);case"select-multiple":return w(t);case"radio":case"checkbox":return t.checked?t.value:null;default:return t.value?t.value:null}}function S(t,e,n){if(n){var i=t.childNodes[0];t.insertBefore(e,i)}else t.appendChild(e)}function T(t,e,n){var i=I(e);if(!i&&e.length)return void o(e,function(e){return T(t,e,n)});o(t,i?function(t){return t.insertAdjacentHTML(n?"afterbegin":"beforeend",e)}:function(t,i){return S(t,0===i?e:e.cloneNode(!0),n)})}var E,M=document,A=window,O=Array.prototype,P=O.slice,L=O.filter,_=O.push,N=function(){},D=function(t){return typeof t==typeof N&&t.call},I=function(t){return"string"==typeof t},F=/^#[\w-]*$/,R=/^\.[\w-]*$/,z=/<.+>/,H=/^\w+$/,V=r.fn=r.prototype=i.prototype={cash:!0,length:0,push:_,splice:O.splice,map:O.map,init:i};Object.defineProperty(V,"constructor",{value:r}),r.parseHTML=e,r.noop=N,r.isFunction=D,r.isString=I,r.extend=V.extend=function(t){t=t||{};var e=P.call(arguments),n=e.length,i=1;for(1===e.length&&(t=this,i=0);i1?this.each(function(n){return n.style[t]=e}):A.getComputedStyle(this[0])[t];for(var n in t)this.css(n,t[n]);return this}}),o(["Width","Height"],function(t){var e=t.toLowerCase();V[e]=function(){return this[0].getBoundingClientRect()[e]},V["inner"+t]=function(){return this[0]["client"+t]},V["outer"+t]=function(e){return this[0]["offset"+t]+(e?m(this,"margin"+("Width"===t?"Left":"Top"))+m(this,"margin"+("Width"===t?"Right":"Bottom")):0)}}),V.extend({off:function(t,e){return this.each(function(n){return b(n,t,e)})},on:function(t,e,i,r){var o;if(!I(t)){for(var a in t)this.on(a,e,t[a]);return this}return D(e)&&(i=e,e=null),"ready"===t?(n(i),this):(e&&(o=i,i=function(t){for(var n=t.target;!s(n,e);){if(n===this)return n=!1;n=n.parentNode}n&&o.call(n,t)}),this.each(function(e){var n=i;r&&(n=function(){i.apply(this,arguments),b(e,t,n)}),y(e,t,n)}))},one:function(t,e,n){return this.on(t,e,n,!0)},ready:n,trigger:function(t,e){var n=M.createEvent("HTMLEvents");return n.data=e,n.initEvent(t,!0,!1),this.each(function(t){return t.dispatchEvent(n)})}}),V.extend({serialize:function(){var t="";return o(this[0].elements||this,function(e){if(!e.disabled&&"FIELDSET"!==e.tagName){var n=e.name;switch(e.type.toLowerCase()){case"file":case"reset":case"submit":case"button":break;case"select-multiple":var i=k(e);null!==i&&o(i,function(e){t+=x(n,e)});break;default:var r=k(e);null!==r&&(t+=x(n,r))}}}),t.substr(1)},val:function(t){return void 0===t?k(this[0]):this.each(function(e){return e.value=t})}}),V.extend({after:function(t){return r(t).insertAfter(this),this},append:function(t){return T(this,t),this},appendTo:function(t){return T(r(t),this),this},before:function(t){return r(t).insertBefore(this),this},clone:function(){return r(this.map(function(t){return t.cloneNode(!0)}))},empty:function(){return this.html(""),this},html:function(t){if(void 0===t)return this[0].innerHTML;var e=t.nodeType?t[0].outerHTML:t;return this.each(function(t){return t.innerHTML=e})},insertAfter:function(t){var e=this;return r(t).each(function(t,n){var i=t.parentNode,r=t.nextSibling;e.each(function(t){i.insertBefore(0===n?t:t.cloneNode(!0),r)})}),this},insertBefore:function(t){var e=this;return r(t).each(function(t,n){var i=t.parentNode;e.each(function(e){i.insertBefore(0===n?e:e.cloneNode(!0),t)})}),this},prepend:function(t){return T(this,t,!0),this},prependTo:function(t){return T(r(t),this,!0),this},remove:function(){return this.each(function(t){return t.parentNode.removeChild(t)})},text:function(t){return void 0===t?this[0].textContent:this.each(function(e){return e.textContent=t})}});var U=M.documentElement;return V.extend({position:function(){var t=this[0];return{left:t.offsetLeft,top:t.offsetTop}},offset:function(){var t=this[0].getBoundingClientRect();return{top:t.top+A.pageYOffset-U.clientTop,left:t.left+A.pageXOffset-U.clientLeft}},offsetParent:function(){return r(this[0].offsetParent)}}),V.extend({children:function(t){var e=[];return this.each(function(t){_.apply(e,t.children)}),e=l(e),t?e.filter(function(e){return s(e,t)}):e},closest:function(t){return!t||this.length<1?r():this.is(t)?this.filter(t):this.parent().closest(t)},is:function(t){if(!t)return!1;var e=!1,n=a(t);return this.each(function(i){return!(e=n(i,t))}),e},find:function(e){if(!e||e.nodeType)return r(e&&this.has(e).length?e:null);var n=[];return this.each(function(i){_.apply(n,t(e,i))}),l(n)},has:function(e){var n=I(e)?function(n){return 0!==t(e,n).length}:function(t){return t.contains(e)};return this.filter(n)},next:function(){return r(this[0].nextElementSibling)},not:function(t){if(!t)return this;var e=a(t);return this.filter(function(n){return!e(n,t)})},parent:function(){var t=[];return this.each(function(e){e&&e.parentNode&&t.push(e.parentNode)}),l(t)},parents:function(t){var e,n=[];return this.each(function(i){for(e=i;e&&e.parentNode&&e!==M.body.parentNode;)e=e.parentNode,(!t||t&&s(e,t))&&n.push(e)}),l(n)},prev:function(){return r(this[0].previousElementSibling)},siblings:function(){var t=this.parent().children(),e=this[0];return t.filter(function(t){return t!==e})}}),r})},function(t,e,n){"use strict";var i=n(1),r=n(8);t.exports=n(0).Collection.extend({model:r,getStyleable:function(){return(0,i.filter)(this.models,function(t){return t.get("active")&&!t.get("private")})},getValid:function(){return(0,i.filter)(this.models,function(t){return!t.get("private")})},getFullString:function(t){var e=[];return(t||this).forEach(function(t){return e.push(t.getFullName())}),e.join("").trim()}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return this.set({value:void 0},t),this},setValue:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.parseValue(t);this.set(r,i({},n,{avoidStore:1})),e&&(this.set("value","",n),this.set(r,n))},setValueFromInput:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.setValue(t,e,i({},n,{fromInput:1}))},parseValue:function(t){var e={value:t},n="!important";if((0,r.isString)(t)&&-1!==t.indexOf(n)&&(e.value=t.replace(n,"").trim(),e.important=1),!this.get("functionName"))return e;var i=[],o=""+e.value,s=o.indexOf("(")+1,a=o.lastIndexOf(")");return i.push(s),a>=0&&i.push(a),e.value=String.prototype.substring.apply(o,i),e},getDefaultValue:function(){return this.get("defaults")},getFullValue:function(t){var e=this.get("functionName"),n=(0,r.isUndefined)(t)?this.get("value"):t;return e&&!(0,r.isUndefined)(n)&&(n=e+"("+n+")"),this.get("important")&&(n+=" !important"),n||""}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);n(5),n(15),n(37),n(38),n(39),n(41),n(17),n(35);t.exports=r.default.View.extend({initialize:function(t){this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.target=t.target||{},this.propTarget=t.propTarget||{},this.onChange=t.onChange,this.onInputRender=t.onInputRender||{},this.customValue=t.customValue||{},this.properties=[];var e=this.collection;this.listenTo(e,"add",this.addTo),this.listenTo(e,"reset",this.render)},addTo:function(t){this.add(t)},add:function(t,e){var n=new t.typeView({model:t,name:t.get("name"),id:this.pfx+t.get("property"),target:this.target,propTarget:this.propTarget,onChange:this.onChange,onInputRender:this.onInputRender,config:this.config});"composite"!=t.get("type")&&(n.customValue=this.customValue),n.render();var i=n.el;this.properties.push(n),e?e.appendChild(i):this.el.appendChild(i)},render:function(){var t=this;this.properties=[];var e=document.createDocumentFragment();return this.collection.each(function(n){return t.add(n,e)}),this.$el.append(e),this.$el.attr("class",this.pfx+"properties"),this}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=(n(18),n(5)),s=r.default.$;t.exports=o.extend({templateInput:function(){return""},init:function(){var t=this.model;this.listenTo(t,"change:unit",this.modelValueChanged),this.listenTo(t,"el:change",this.elementUpdated)},setValue:function(t){var e=this.model.parseValue(t);t=""+e.value+e.unit,this.inputInst.setValue(t,{silent:1})},onRender:function(){var t=this.ppfx;if(!this.input){var e=this.model.input;e.ppfx=t,e.render();this.el.querySelector("."+t+"fields").appendChild(e.el),this.$input=e.inputEl,this.unit=e.unitEl,this.$unit=s(this.unit),this.input=this.$input.get(0),this.inputInst=e}}})},function(t,e,n){"use strict";var i=(n(0),n(3));t.exports=i.extend({tagName:"img",events:{dblclick:"openModal",click:"initResize"},initialize:function(t){var e=this.model;i.prototype.initialize.apply(this,arguments),this.listenTo(e,"change:src",this.updateSrc),this.listenTo(e,"dblclick active",this.openModal),this.classEmpty=this.ppfx+"plh-image";var n=this.config;n.modal&&(this.modal=n.modal),n.am&&(this.am=n.am),this.fetchFile()},fetchFile:function(){var t=this.model,e=t.get("file");if(e){this.em.get("AssetManager").FileUploader().uploadFile({dataTransfer:{files:[e]}},function(e){var n=e&&e.data&&e.data[0],i=n&&n.src;i&&t.set({src:i})}),t.set("file","")}},updateSrc:function(){var t=this.model,e=this.classEmpty,n=this.$el,i=t.get("src");t.addAttributes({src:i}),n[i?"removeClass":"addClass"](e)},openModal:function(t){var e=this.opts.config.em,n=e?e.get("Editor"):"";n&&this.model.get("editable")&&n.runCommand("open-assets",{target:this.model,types:["image"],accept:"image/*",onSelect:function(){n.Modal.close(),n.AssetManager.setTarget(null)}})},render:function(){this.updateAttributes(),this.updateClasses();var t=this.$el.attr("class")||"";return this.model.get("src")||this.$el.attr("class",(t+" "+this.classEmpty).trim()),this.$el.attr("onmousedown","return false"),this}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(5),s=r.default.$;t.exports=o.extend({templateInput:function(){var t=this.pfx;return'\n
    \n \n
    \n '},inputValueChanged:function(){if(!this.model.get("detached")){for(var t=arguments.length,e=Array(t),n=0;n'),this.input=this.$input.get(0)),this.props||(this.props=t.get("properties")),!this.$props)){this.props.each(function(e,n){e&&"composite"==e.get("type")&&(this.props.remove(e),console.warn("Nested composite types not yet allowed.")),e.parent=t},this);var i=n(14),r=new i(this.getPropsConfig());this.$props=r.render().$el,this.properties=r.properties,this.$el.find("#"+this.pfx+"input-holder").append(this.$props)}},getPropsConfig:function(t){var e=this,n=this.model,i={config:this.config,collection:this.props,target:this.target,propTarget:this.propTarget,onChange:function(t,e,i){n.set("value",n.getFullValue(),i)},customValue:function(t,n){return e.valueOnIndex(n,t)}};return n.get("detached")&&delete i.onChange,i},valueOnIndex:function(t,e){var n=void 0,i=this.getTargetValue({ignoreDefault:1});if(i){n=i.split(" ")[t]}else n=e&&e.getTargetValue({ignoreCustomValue:1,ignoreDefault:1});return e&&(n=e.model.parseValue(n).value),n}})},function(t,e,n){"use strict";(function(e){var i=n(1),r=n(2),o=n(36),s=n(0);s.$;t.exports=o.extend({events:{"change input":"handleChange","change select":"handleUnitChange","click [data-arrow-up]":"upArrowClick","click [data-arrow-down]":"downArrowClick","mousedown [data-arrows]":"downIncrement"},template:function(){var t=this.ppfx;return'\n \n \n
    \n
    \n
    \n
    \n '},inputClass:function(){var t=this.ppfx;return this.opts.contClass||t+"field "+t+"field-integer"},initialize:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];o.prototype.initialize.apply(this,arguments),(0,i.bindAll)(this,"moveIncrement","upIncrement"),this.doc=document,this.listenTo(this.model,"change:unit",this.handleModelChange)},setValue:function(t,e){var n=e||{},i=this.validateInputValue(t,{deepCheck:1}),r={value:i.value};(i.unit||i.force)&&(r.unit=i.unit),this.model.set(r,n),n.silent&&this.handleModelChange()},handleChange:function(t){t.stopPropagation(),this.setValue(this.getInputEl().value),this.elementUpdated()},handleUnitChange:function(t){t.stopPropagation();var e=this.getUnitEl().value;this.model.set("unit",e),this.elementUpdated()},elementUpdated:function(){this.model.trigger("el:change")},handleModelChange:function(){var t=this.model;this.getInputEl().value=t.get("value");var e=this.getUnitEl();e&&(e.value=t.get("unit")||"")},getUnitEl:function(){if(!this.unitEl){var t=this.model,e=t.get("units")||[];if(e.length){var n=[];e.forEach(function(e){var i=e==t.get("unit")?"selected":"";n.push("")});var i=document.createElement("div");i.innerHTML='",this.unitEl=i.firstChild}}return this.unitEl},upArrowClick:function(){var t=this.model,e=t.get("step"),n=parseInt(t.get("value"),10);n=this.normalizeValue(n+e);var i=this.validateInputValue(n);t.set("value",i.value),this.elementUpdated()},downArrowClick:function(){var t=this.model,e=t.get("step"),n=parseInt(t.get("value"),10),i=this.normalizeValue(n-e),r=this.validateInputValue(i);t.set("value",r.value),this.elementUpdated()},downIncrement:function(t){t.preventDefault(),this.moved=0;var e=this.model.get("value");e=this.normalizeValue(e),this.current={y:t.pageY,val:e},(0,r.on)(this.doc,"mousemove",this.moveIncrement),(0,r.on)(this.doc,"mouseup",this.upIncrement)},moveIncrement:function(t){this.moved=1;var e=this.model,n=e.get("step"),i=this.current,r=this.normalizeValue(i.val+(i.y-t.pageY)*n);return this.prValue=this.validateInputValue(r).value,e.set("value",this.prValue,{avoidStore:1}),!1},upIncrement:function(){var t=this.model,e=t.get("step");if((0,r.off)(this.doc,"mouseup",this.upIncrement),(0,r.off)(this.doc,"mousemove",this.moveIncrement),this.prValue&&this.moved){var n=this.prValue-e;t.set("value",n,{avoidStore:1}).set("value",n+e),this.elementUpdated()}},normalizeValue:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=this.model,i=n.get("step"),r=0;if(isNaN(t))return e;if(t=parseFloat(t),Math.floor(t)!==t){var o=i.toString().split(".")[1];r=o?o.length:0}return r?parseFloat(t.toFixed(r)):t},validateInputValue:function(t,n){var r=0,o=n||{},s=this.model,a=(0,i.isUndefined)(t)?"":t,l=s.get("units")||[],c=s.get("unit")||l.length&&l[0]||"",u=s.get("max"),h=s.get("min");if(o.deepCheck){var d=s.get("fixedValues")||[];if(a){var f=new RegExp("^"+d.join("|"),"g");if(d.length&&f.test(a))a=a.match(f)[0],c="",r=1;else{var p=a+"";a+="",a=parseFloat(a.replace(",",".")),a=isNaN(a)?"":a;var g=p.replace(a,"");e.indexOf(l,g)>=0&&(c=g)}}}return(0,i.isUndefined)(u)||""===u||(a=a>u?u:a),(0,i.isUndefined)(h)||""===h||(a=a1&&void 0!==arguments[1]?arguments[1]:{};if(t){var n=e.ctrlKey||e.metaKey,i=e.shiftKey,r=this.editor,s=r.getConfig("multipleSelection"),a=this.em;if(n&&s)r.selectToggle(t);else if(i&&s){a.clearSelection(r.Canvas.getWindow());var l=t.collection,c=l.indexOf(t),u=(r.getSelectedAll(),void 0),h=void 0;if(r.getSelectedAll().forEach(function(t){var e=t.collection,n=e.indexOf(t);e===l&&(nc&&(h=(0,o.isUndefined)(h)?n:Math.min(h,n)))}),!(0,o.isUndefined)(u))for(;u!==c;)r.selectAdd(l.at(u)),u++;if(!(0,o.isUndefined)(h))for(;h!==c;)r.selectAdd(l.at(h)),h--;r.selectAdd(t)}else r.select(t);this.initResize(t)}},updateBadge:function(t,e){var n=c(t),i=this.canvas,r=i.getConfig(),o=r.customBadgeLabel;this.cacheEl=t;var s=n.data("model");if(s&&s.get("badgable")){var a=this.getBadge(),l=s.getIcon()+s.getName();l=o?o(s):l,a.innerHTML=l;var u=a.style;u.display="block";var h=i.getCanvasView().getPosition();if(h){var d=a?a.offsetHeight:0,f=a?a.offsetWidth:0,p=e.top-d1&&void 0!==arguments[1]?arguments[1]:{},i=n.el,r=n.config,o=n.resizer,a=r.keyHeight,l=r.keyWidth,c=r.currentUnit;v("add",0,n),g=e.get("StyleManager").getModelToStyle(h);var d=getComputedStyle(i),f=g.getStyle(),p=f[l]||d[l],m=f[a]||d[a];o.startDim.w=parseFloat(p),o.startDim.h=parseFloat(m),u=0,c&&(r.unitHeight=(0,s.getUnitFromValue)(m),r.unitWidth=(0,s.getUnitFromValue)(p))},onMove:function(){n.trigger("change:canvasOffset")},onEnd:function(t,e){v("remove",0,e),n.trigger("change:canvasOffset"),u=1},updateTarget:function(t,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(g){var r=i.store,o=i.selectedHandler,s=i.config,a=s.keyHeight,l=s.keyWidth,c=["tc","bc"].indexOf(o)>=0,u=["cl","cr"].indexOf(o)>=0,h=g.getStyle();c||(h[l]=n.w+s.unitWidth),u||(h[a]=n.h+s.unitHeight),g.setStyle(h,{avoidStore:1});e&&e.trigger("update:component:style:"+a+" update:component:style:"+l),r&&g.trigger("change:style",g,h,{})}}},"object"==(void 0===d?"undefined":r(d))&&(p=i({},p,d)),n.runCommand("resize",{el:f,options:p})):n.stopCommand("resize")},updateToolbar:function(t){var e=this.config.em,n=t==e?e.getSelected():t,i=this.canvas.getToolbarEl(),r=i.style;if(!n)return void(r.opacity=0);var o=n.get("toolbar");this.ppfx;if(e.get("Config").showToolbar&&o&&o.length){if(r.opacity="",r.display="",!this.toolbar){i.innerHTML="",this.toolbar=new l(o);var s=new a({collection:this.toolbar,editor:this.editor});i.appendChild(s.render().el)}this.toolbar.reset(o);var c=n.view;c&&this.updateToolbarPos(c.el)}else r.display="none"},updateToolbarPos:function(t,e){var n=this.canvas.getToolbarEl(),i=n.style,r=i.display;i.display="block";var o=this.canvas.getTargetToElementDim(n,t,{elPos:e,event:"toolbarPosUpdate"});if(o){var s=o.left+o.elementWidth-o.targetWidth;i.top=o.top+"px",i.left=(s<0?0:s)+"px",i.display=r}},getCanvasPosition:function(){return this.canvas.getCanvasView().getPosition()},clean:function(){this.selEl&&this.selEl.removeClass(this.hoverClass)},getBadge:function(){return this.canvas.getBadgeEl()},onFrameScroll:function(t){var e=this.cacheEl;if(e){var n=this.getElementPos(e);this.updateBadge(e,n);var i=this.em.getSelected();i&&this.updateToolbarPos(i.view.el)}},updateAttached:function(t){var e=this.em.getSelected();if(e){var n=e.view;this.updateToolbarPos(n.el),this.showFixedElementOffset(n.el)}},getElementPos:function(t,e){return this.canvas.getCanvasView().getElementPos(t)},hideBadge:function(){this.getBadge().style.display="none"},cleanPrevious:function(t){t&&t.set({status:"",state:""})},getContentWindow:function(){return this.frameEl.contentWindow},run:function(t){this.editor=t&&t.get("Editor"),this.enable(),this.onSelect()},stop:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.em;this.stopSelectComponent(),!n.preserveSelected&&i.setSelected(null),this.clean(),this.hideBadge(),this.hideFixedElementOffset(),this.canvas.getToolbarEl().style.display="none",i.off("component:update",this.updateAttached,this),i.off("change:canvasOffset",this.updateAttached,this)}}},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(57),c=a.default.$;t.exports=o.default.extend({},l,{init:function(t){o.default.bindAll(this,"startDraw","draw","endDraw","rollback"),this.config=t||{},this.hType=this.config.newFixedH?"height":"min-height",this.allowDraw=1},enable:function(){for(var t=arguments.length,e=Array(t),n=0;n0;for(o in C)(!C[o]&&n(i.mods,+o)>-1||C[o]&&-1==n(i.mods,+o))&&(a=!1);(0!=i.mods.length||C[16]||C[18]||C[17]||C[91])&&!a||!1===i.method(t,i)&&(t.preventDefault?t.preventDefault():t.returnValue=!1,t.stopPropagation&&t.stopPropagation(),t.cancelBubble&&(t.cancelBubble=!0))}}function s(t){var e,i=t.keyCode,r=n(M,i);if(r>=0&&M.splice(r,1),93!=i&&224!=i||(i=91),i in C){C[i]=!1;for(e in S)S[e]==i&&(l[e]=!1)}}function a(){for(x in C)C[x]=!1;for(x in S)l[x]=!1}function l(t,e,n){var i,r;i=v(t),void 0===n&&(n=e,e="all");for(var o=0;o1&&(r=m(t),t=[t[t.length-1]]),t=t[0],t=E(t),t in w||(w[t]=[]),w[t].push({shortcut:i[o],scope:e,method:n,key:i[o],mods:r})}function c(t,e){var n,r,o,s,a,l=[];for(n=v(t),s=0;s1&&(l=m(r),t=r[r.length-1]),t=E(t),void 0===e&&(e=p()),!w[t])return;for(o=0;o=0&&o0?0:a-1;return arguments.length<3&&(r=n[s?s[l]:l],l+=t),e(n,i,r,s,l,a)}}function o(t){return function(e,n,i){n=S(n,i);for(var r=O(e),o=t>0?0:r-1;o>=0&&o0?s=o>=0?o:Math.max(o+a,s):a=o>=0?Math.min(o+1,a):o+a+1;else if(n&&o&&a)return o=n(i,r),i[o]===r?o:-1;if(r!==r)return o=e(p.call(i,s,a),C.isNaN),o>=0?o+s:-1;for(o=t>0?s:a-1;o>=0&&o=0&&e<=A};C.each=C.forEach=function(t,e,n){e=k(e,n);var i,r;if(P(t))for(i=0,r=t.length;i=0},C.invoke=function(t,e){var n=p.call(arguments,2),i=C.isFunction(e);return C.map(t,function(t){var r=i?e:t[e];return null==r?r:r.apply(t,n)})},C.pluck=function(t,e){return C.map(t,C.property(e))},C.where=function(t,e){return C.filter(t,C.matcher(e))},C.findWhere=function(t,e){return C.find(t,C.matcher(e))},C.max=function(t,e,n){var i,r,o=-1/0,s=-1/0;if(null==e&&null!=t){t=P(t)?t:C.values(t);for(var a=0,l=t.length;ao&&(o=i)}else e=S(e,n),C.each(t,function(t,n,i){((r=e(t,n,i))>s||r===-1/0&&o===-1/0)&&(o=t,s=r)});return o},C.min=function(t,e,n){var i,r,o=1/0,s=1/0;if(null==e&&null!=t){t=P(t)?t:C.values(t);for(var a=0,l=t.length;ai||void 0===n)return 1;if(ne?(s&&(clearTimeout(s),s=null),a=c,o=t.apply(i,r),s||(i=r=null)):s||!1===n.trailing||(s=setTimeout(l,u)),o}},C.debounce=function(t,e,n){var i,r,o,s,a,l=function(){var c=C.now()-s;c=0?i=setTimeout(l,e-c):(i=null,n||(a=t.apply(o,r),i||(o=r=null)))};return function(){o=this,r=arguments,s=C.now();var c=n&&!i;return i||(i=setTimeout(l,e)),c&&(a=t.apply(o,r),o=r=null),a}},C.wrap=function(t,e){return C.partial(e,t)},C.negate=function(t){return function(){return!t.apply(this,arguments)}},C.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,i=t[e].apply(this,arguments);n--;)i=t[n].call(this,i);return i}},C.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},C.before=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},C.once=C.partial(C.before,2);var D=!{toString:null}.propertyIsEnumerable("toString"),I=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];C.keys=function(t){if(!C.isObject(t))return[];if(y)return y(t);var e=[];for(var n in t)C.has(t,n)&&e.push(n);return D&&a(t,e),e},C.allKeys=function(t){if(!C.isObject(t))return[];var e=[];for(var n in t)e.push(n);return D&&a(t,e),e},C.values=function(t){for(var e=C.keys(t),n=e.length,i=Array(n),r=0;r":">",'"':""","'":"'","`":"`"},z=C.invert(R),H=function(t){var e=function(e){return t[e]},n="(?:"+C.keys(t).join("|")+")",i=RegExp(n),r=RegExp(n,"g");return function(t){return t=null==t?"":""+t,i.test(t)?t.replace(r,e):t}};C.escape=H(R),C.unescape=H(z),C.result=function(t,e,n){var i=null==t?void 0:t[e];return void 0===i&&(i=n),C.isFunction(i)?i.call(t):i};var V=0;C.uniqueId=function(t){var e=++V+"";return t?t+e:e},C.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var j=/(.)^/,$={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},B=/\\|'|\r|\n|\u2028|\u2029/g,W=function(t){return"\\"+$[t]};C.template=function(t,e,n){!e&&n&&(e=n),e=C.defaults({},e,C.templateSettings);var i=RegExp([(e.escape||j).source,(e.interpolate||j).source,(e.evaluate||j).source].join("|")+"|$","g"),r=0,o="__p+='";t.replace(i,function(e,n,i,s,a){return o+=t.slice(r,a).replace(B,W),r=a+e.length,n?o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":i?o+="'+\n((__t=("+i+"))==null?'':__t)+\n'":s&&(o+="';\n"+s+"\n__p+='"),e}),o+="';\n",e.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{var s=new Function(e.variable||"obj","_",o)}catch(t){throw t.source=o,t}var a=function(t){return s.call(this,t,C)};return a.source="function("+(e.variable||"obj")+"){\n"+o+"}",a},C.chain=function(t){var e=C(t);return e._chain=!0,e};var U=function(t,e){return t._chain?C(e).chain():e};C.mixin=function(t){C.each(C.functions(t),function(e){var n=C[e]=t[e];C.prototype[e]=function(){var t=[this._wrapped];return f.apply(t,arguments),U(this,n.apply(C,t))}})},C.mixin(C),C.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=u[t];C.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],U(this,n)}}),C.each(["concat","join","slice"],function(t){var e=u[t];C.prototype[t]=function(){return U(this,e.apply(this._wrapped,arguments))}}),C.prototype.value=function(){return this._wrapped},C.prototype.valueOf=C.prototype.toJSON=C.prototype.value,C.prototype.toString=function(){return""+this._wrapped},i=[],void 0!==(r=function(){return C}.apply(e,i))&&(t.exports=r)}).call(this)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(77),r=function(t){return t&&t.__esModule?t:{default:t}}(i);window.Promise=window.Promise||r.default,e.default="function"==typeof fetch?fetch.bind():function(t,e){return new r.default(function(n,i){var o=new XMLHttpRequest;o.open(e.method||"get",t),o.withCredentials="include"==e.credentials;for(var s in e.headers||{})o.setRequestHeader(s,e.headers[s]);o.onload=function(t){return n({status:o.status,statusText:o.statusText,text:function(){return r.default.resolve(o.responseText)}})},o.onerror=i,o.upload&&e.onProgress&&(o.upload.onprogress=e.onProgress),e.body?o.send(e.body):o.send()})}},function(t,e,n){"use strict";t.exports=function(t){var e=t;return{compTypes:"",parseStyle:function(t){for(var e={},n=t.split(";"),i=0,r=n.length;i*\/]/.test(n)?i(null,"select-op"):"."==n&&t.match(/^-?[_a-z][_a-z0-9-]*/i)?i("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(n)?i(null,n):("u"==n||"U"==n)&&t.match(/rl(-prefix)?\(/i)||("d"==n||"D"==n)&&t.match("omain(",!0,!0)||("r"==n||"R"==n)&&t.match("egexp(",!0,!0)?(t.backUp(1),e.tokenize=s,i("property","word")):/[\w\\\-]/.test(n)?(t.eatWhile(/[\w\\\-]/),i("property","word")):i(null,null):/[\d.]/.test(t.peek())?(t.eatWhile(/[\w.%]/),i("number","unit")):t.match(/^-[\w\\\-]+/)?(t.eatWhile(/[\w\\\-]/),t.match(/^\s*:/,!1)?i("variable-2","variable-definition"):i("variable-2","variable")):t.match(/^\w+-/)?i("meta","meta"):void 0}function o(t){return function(e,n){for(var r,o=!1;null!=(r=e.next());){if(r==t&&!o){")"==t&&e.backUp(1);break}o=!o&&"\\"==r}return(r==t||!o&&")"!=t)&&(n.tokenize=null),i("string","string")}}function s(t,e){return t.next(),t.match(/\s*[\"\')]/,!1)?e.tokenize=null:e.tokenize=o(")"),i(null,"(")}function a(t,e,n){this.type=t,this.indent=e,this.prev=n}function l(t,e,n,i){return t.context=new a(n,e.indentation()+(!1===i?0:v),t.context),n}function c(t){return t.context.prev&&(t.context=t.context.prev),t.context.type}function u(t,e,n){return L[n.context.type](t,e,n)}function h(t,e,n,i){for(var r=i||1;r>0;r--)n.context=n.context.prev;return u(t,e,n)}function d(t){var e=t.current().toLowerCase();g=M.hasOwnProperty(e)?"atom":E.hasOwnProperty(e)?"keyword":"variable"}var f=n.inline;n.propertyKeywords||(n=t.resolveMode("text/css"));var p,g,v=e.indentUnit,m=n.tokenHooks,y=n.documentTypes||{},b=n.mediaTypes||{},x=n.mediaFeatures||{},w=n.mediaValueKeywords||{},C=n.propertyKeywords||{},k=n.nonStandardPropertyKeywords||{},S=n.fontProperties||{},T=n.counterDescriptors||{},E=n.colorKeywords||{},M=n.valueKeywords||{},A=n.allowNested,O=n.lineComment,P=!0===n.supportsAtComponent,L={};return L.top=function(t,e,n){if("{"==t)return l(n,e,"block");if("}"==t&&n.context.prev)return c(n);if(P&&/@component/i.test(t))return l(n,e,"atComponentBlock");if(/^@(-moz-)?document$/i.test(t))return l(n,e,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(t))return l(n,e,"atBlock");if(/^@(font-face|counter-style)/i.test(t))return n.stateArg=t,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(t))return"keyframes";if(t&&"@"==t.charAt(0))return l(n,e,"at");if("hash"==t)g="builtin";else if("word"==t)g="tag";else{if("variable-definition"==t)return"maybeprop";if("interpolation"==t)return l(n,e,"interpolation");if(":"==t)return"pseudo";if(A&&"("==t)return l(n,e,"parens")}return n.context.type},L.block=function(t,e,n){if("word"==t){var i=e.current().toLowerCase();return C.hasOwnProperty(i)?(g="property","maybeprop"):k.hasOwnProperty(i)?(g="string-2","maybeprop"):A?(g=e.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(g+=" error","maybeprop")}return"meta"==t?"block":A||"hash"!=t&&"qualifier"!=t?L.top(t,e,n):(g="error","block")},L.maybeprop=function(t,e,n){return":"==t?l(n,e,"prop"):u(t,e,n)},L.prop=function(t,e,n){if(";"==t)return c(n);if("{"==t&&A)return l(n,e,"propBlock");if("}"==t||"{"==t)return h(t,e,n);if("("==t)return l(n,e,"parens");if("hash"!=t||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(e.current())){if("word"==t)d(e);else if("interpolation"==t)return l(n,e,"interpolation")}else g+=" error";return"prop"},L.propBlock=function(t,e,n){return"}"==t?c(n):"word"==t?(g="property","maybeprop"):n.context.type},L.parens=function(t,e,n){return"{"==t||"}"==t?h(t,e,n):")"==t?c(n):"("==t?l(n,e,"parens"):"interpolation"==t?l(n,e,"interpolation"):("word"==t&&d(e),"parens")},L.pseudo=function(t,e,n){return"meta"==t?"pseudo":"word"==t?(g="variable-3",n.context.type):u(t,e,n)},L.documentTypes=function(t,e,n){return"word"==t&&y.hasOwnProperty(e.current())?(g="tag",n.context.type):L.atBlock(t,e,n)},L.atBlock=function(t,e,n){if("("==t)return l(n,e,"atBlock_parens");if("}"==t||";"==t)return h(t,e,n);if("{"==t)return c(n)&&l(n,e,A?"block":"top");if("interpolation"==t)return l(n,e,"interpolation");if("word"==t){var i=e.current().toLowerCase();g="only"==i||"not"==i||"and"==i||"or"==i?"keyword":b.hasOwnProperty(i)?"attribute":x.hasOwnProperty(i)?"property":w.hasOwnProperty(i)?"keyword":C.hasOwnProperty(i)?"property":k.hasOwnProperty(i)?"string-2":M.hasOwnProperty(i)?"atom":E.hasOwnProperty(i)?"keyword":"error"}return n.context.type},L.atComponentBlock=function(t,e,n){return"}"==t?h(t,e,n):"{"==t?c(n)&&l(n,e,A?"block":"top",!1):("word"==t&&(g="error"),n.context.type)},L.atBlock_parens=function(t,e,n){return")"==t?c(n):"{"==t||"}"==t?h(t,e,n,2):L.atBlock(t,e,n)},L.restricted_atBlock_before=function(t,e,n){return"{"==t?l(n,e,"restricted_atBlock"):"word"==t&&"@counter-style"==n.stateArg?(g="variable","restricted_atBlock_before"):u(t,e,n)},L.restricted_atBlock=function(t,e,n){return"}"==t?(n.stateArg=null,c(n)):"word"==t?(g="@font-face"==n.stateArg&&!S.hasOwnProperty(e.current().toLowerCase())||"@counter-style"==n.stateArg&&!T.hasOwnProperty(e.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},L.keyframes=function(t,e,n){return"word"==t?(g="variable","keyframes"):"{"==t?l(n,e,"top"):u(t,e,n)},L.at=function(t,e,n){return";"==t?c(n):"{"==t||"}"==t?h(t,e,n):("word"==t?g="tag":"hash"==t&&(g="builtin"),"at")},L.interpolation=function(t,e,n){return"}"==t?c(n):"{"==t||";"==t?h(t,e,n):("word"==t?g="variable":"variable"!=t&&"("!=t&&")"!=t&&(g="error"),"interpolation")},{startState:function(t){return{tokenize:null,state:f?"block":"top",stateArg:null,context:new a(f?"block":"top",t||0,null)}},token:function(t,e){if(!e.tokenize&&t.eatSpace())return null;var n=(e.tokenize||r)(t,e);return n&&"object"==typeof n&&(p=n[1],n=n[0]),g=n,"comment"!=p&&(e.state=L[e.state](p,t,e)),g},indent:function(t,e){var n=t.context,i=e&&e.charAt(0),r=n.indent;return"prop"!=n.type||"}"!=i&&")"!=i||(n=n.prev),n.prev&&("}"!=i||"block"!=n.type&&"top"!=n.type&&"interpolation"!=n.type&&"restricted_atBlock"!=n.type?(")"!=i||"parens"!=n.type&&"atBlock_parens"!=n.type)&&("{"!=i||"at"!=n.type&&"atBlock"!=n.type)||(r=Math.max(0,n.indent-v)):(n=n.prev,r=n.indent)),r},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:O,fold:"brace"}});var i=["domain","regexp","url","url-prefix"],r=e(i),o=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],s=e(o),a=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],l=e(a),c=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],u=e(c),h=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],d=e(h),f=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],p=e(f),g=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],v=e(g),m=["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"],y=e(m),b=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],x=e(b),w=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],C=e(w),k=i.concat(o).concat(a).concat(c).concat(h).concat(f).concat(b).concat(w);t.registerHelper("hintWords","css",k),t.defineMIME("text/css",{documentTypes:r,mediaTypes:s,mediaFeatures:l,mediaValueKeywords:u,propertyKeywords:d,nonStandardPropertyKeywords:p,fontProperties:v,counterDescriptors:y,colorKeywords:x,valueKeywords:C,tokenHooks:{"/":function(t,e){return!!t.eat("*")&&(e.tokenize=n,n(t,e))}},name:"css"}),t.defineMIME("text/x-scss",{mediaTypes:s,mediaFeatures:l,mediaValueKeywords:u,propertyKeywords:d,nonStandardPropertyKeywords:p,colorKeywords:x,valueKeywords:C,fontProperties:v,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(t,e){return t.eat("/")?(t.skipToEnd(),["comment","comment"]):t.eat("*")?(e.tokenize=n,n(t,e)):["operator","operator"]},":":function(t){return!!t.match(/\s*\{/,!1)&&[null,null]},$:function(t){return t.match(/^[\w-]+/),t.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(t){return!!t.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),t.defineMIME("text/x-less",{mediaTypes:s,mediaFeatures:l,mediaValueKeywords:u,propertyKeywords:d,nonStandardPropertyKeywords:p,colorKeywords:x,valueKeywords:C,fontProperties:v,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(t,e){return t.eat("/")?(t.skipToEnd(),["comment","comment"]):t.eat("*")?(e.tokenize=n,n(t,e)):["operator","operator"]},"@":function(t){return t.eat("{")?[null,"interpolation"]:!t.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)&&(t.eatWhile(/[\w\\\-]/),t.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),t.defineMIME("text/x-gss",{documentTypes:r,mediaTypes:s,mediaFeatures:l,propertyKeywords:d,nonStandardPropertyKeywords:p,fontProperties:v,counterDescriptors:y,colorKeywords:x,valueKeywords:C,supportsAtComponent:!0,tokenHooks:{"/":function(t,e){return!!t.eat("*")&&(e.tokenize=n,n(t,e))}},name:"css",helperType:"gss"})})},function(t,e,n){"use strict";var i=n(0),r=n(30);t.exports=i.Model.extend({defaults:{id:"",content:"",visible:!0,buttons:[],attributes:{}},initialize:function(t){this.btn=this.get("buttons")||[],this.buttons=new r(this.btn),this.set("buttons",this.buttons)}})},function(t,e,n){"use strict";var i=n(0),r=n(112);t.exports=i.Collection.extend({model:r,deactivateAllExceptOne:function(t,e){this.forEach(function(n,i){n!==t&&(n.set("active",!1),e&&n.get("buttons").length&&n.get("buttons").deactivateAllExceptOne(t,e))})},deactivateAll:function(t){var e=t||"";this.forEach(function(t,n){t.get("context")==e&&(t.set("active",!1),t.get("buttons").length&&t.get("buttons").deactivateAll(e))})},disableAllButtons:function(t){var e=t||"";this.forEach(function(t,n){t.get("context")==e&&(t.set("disable",!0),t.get("buttons").length&&t.get("buttons").disableAllButtons(e))})},disableAllButtonsExceptOne:function(t,e){this.forEach(function(n,i){n!==t&&(n.set("disable",!0),e&&n.get("buttons").length&&n.get("buttons").disableAllButtonsExceptOne(t,e))})}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},n=e.model,r=void 0===n?{}:n,s=e.view,a=void 0===s?{}:s,l=this.getType(t);if(l)return new l.view(i({model:new l.model(r),config:o},a))},render:function(){return e.render().el}}}},function(t,e,n){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var n=t.Model,i=t.View;e.default={types:[],initialize:function(t,e){var n=this;this.model=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,r=void 0,o=void 0;if(t&&t.type){var s=n.getBaseType();o=n.getType(t.type),i=o?o.model:s.model,r=o?o.view:s.view}else{var a=n.recognizeType(t);o=a.type,i=o.model,r=o.view,t=a.attributes}var l=new i(t,e);return l.typeView=r,l};var i=this.init&&this.init.bind(this);i&&i()},recognizeType:function(t){for(var e=this.getTypes(),n=0;n0&&void 0!==arguments[0]&&arguments[0];return this.get("properties").each(function(t){return t.clearValue()}),r.prototype.clearValue.apply(this,arguments)},updateValues:function(){var t=this.getFullValue().split(this.get("separator"));this.get("properties").each(function(e,n){var i=t.length;t[n]||t[n%i+(1!=i&&i%2?1:0)]})},getDefaultValue:function(t){var e=this.get("defaults");return e&&!t?e:(e="",this.get("properties").each(function(t,n){return e+=t.getDefaultValue()+" "}),e.trim())},getFullValue:function(){return this.get("detached")?"":this.get("properties").getFullValue()}})},function(t,e,n){"use strict";var i=n(17),r=n(127);t.exports=i.extend({templateInput:function(){var t=this.pfx;this.ppfx;return'\n
    \n \n
    \n
    \n '},init:function(){var t=this.model;this.pfx;t.set("stackIndex",null),this.events["click [data-add-layer]"]="addLayer",this.listenTo(t,"change:stackIndex",this.indexChanged),this.listenTo(t,"updateValue",this.inputValueChanged),this.delegateEvents()},clear:function(t){t&&t.stopPropagation(),this.model.get("layers").reset(),this.model.clearValue(),this.targetUpdated()},targetUpdated:function(){if(this.model.get("detached"))this.checkVisibility();else{for(var t=arguments.length,e=Array(t),n=0;n'},inputClass:function(){return this.ppfx+"field"},holderClass:function(){return this.ppfx+"input-holder"},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.ppfx||"";this.opts=t,this.ppfx=e,this.em=t.target||{},this.listenTo(this.model,"change:value",this.handleModelChange)},elementUpdated:function(){this.model.trigger("el:change")},setValue:function(t){var e=this.model,n=t||e.get("defaults"),i=this.getInputEl();i&&(i.value=n)},handleModelChange:function(t,e,n){this.setValue(e,n)},handleChange:function(t){t.stopPropagation();var e=this.getInputEl().value;this.model.set({value:e},{fromInput:1}),this.elementUpdated()},getInputEl:function(){if(!this.inputEl){var t=this.model.get("defaults")||"";this.inputEl=r('')}return this.inputEl.get(0)},render:function(){var t=this.$el;return t.addClass(this.inputClass()),t.html(this.template()),t.find("."+this.holderClass()).append(this.getInputEl()),this}})},function(t,e,n){"use strict";t.exports=n(5).extend({templateInput:function(){var t=(this.pfx,this.ppfx);return'\n
    \n
    \n '},onRender:function(){var t=this.pfx,e=this.ppfx,n=e+"radio-item-label",i=this.model,r=i.get("property"),o=i.get("list")||i.get("options")||[];if(!this.input&&o&&o.length){var s="";o.forEach(function(i){var o=i.className?i.className+" "+t+"icon "+n:"",a=r+"-"+i.value,l=i.name||i.value,c=i.title?'title="'+i.title+'"':"";s+='\n
    \n \n \n
    \n "});var a=this.el.querySelector("."+e+"field");a.innerHTML='
    '+s+"
    ",this.input=a.firstChild}},getInputValue:function(){var t=this.getCheckedEl();return t?t.value:""},getCheckedEl:function(){var t=this.getInputEl();return t?t.querySelector("input:checked"):""},setValue:function(t){var e=this.model,n=t||e.get("value")||e.getDefaultValue(),i=this.getInputEl(),r=i?i.querySelector('[value="'+n+'"]'):"";if(r)r.checked=!0;else{var o=this.getCheckedEl();o&&(o.checked=!1)}}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(0),o=i(r),s=n(5),a=i(s);o.default.$;t.exports=a.default.extend({templateInput:function(){var t=this.pfx,e=this.ppfx;return'\n
    \n \n
    \n
    \n
    \n
    \n '},initialize:function(){for(var t=arguments.length,e=Array(t),n=0;n"+e+""});var i=this.el.querySelector("#"+t+"input-holder");i.innerHTML="",this.input=i.firstChild}}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{};e=i({},e,{silent:1}),this.inputInst.setValue(t,e)},onRender:function(){if(!this.input){var t=this.ppfx,e=new r({target:this.target,model:this.model,ppfx:t}),n=e.render();this.el.querySelector("."+t+"fields").appendChild(n.el),this.$input=n.inputEl,this.$color=n.colorEl,this.input=this.$input.get(0),this.inputInst=n}}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=Object.assign||function(t){for(var e=1;e
    \n
    \n
    \n
    \n
    \n
    \n '},inputClass:function(){var t=this.ppfx;return t+"field "+t+"field-color"},holderClass:function(){return this.ppfx+"input-holder"},setValue:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.model,i=n.get("defaults"),r=(0,a.isUndefined)(t)?(0,a.isUndefined)(i)?"":i:t,o=this.getInputEl(),s=this.getColorEl(),l="none"!=r?r:"";o.value=r,s.get(0).style.backgroundColor=l,e.fromTarget&&(s.spectrum("set",l),this.noneColor="none"==r)},getColorEl:function(){if(!this.colorEl){var t=this,e=this.ppfx,n=this.model,i=h('
    '),o=i.get(0).style,s=this.em&&this.em.config?this.em.config.el:"",a=this.em&&this.em.getConfig&&this.em.getConfig("colorPicker")||{},l=function(t){return(1==t.getAlpha()?t.toHexString():t.toRgbString()).replace(/ /g,"")},c=0,u=void 0;this.$el.find("[data-colorp-c]").append(i),i.spectrum(r({containerClassName:e+"one-bg "+e+"two-color",appendTo:s||"body",maxSelectionSize:8,showPalette:!0,showAlpha:!0,chooseText:"Ok",cancelText:"⨯",palette:[]},a,{move:function(t){var e=l(t);o.backgroundColor=e,n.setValueFromInput(e,0)},change:function(e){c=1;var i=l(e);o.backgroundColor=i,n.setValueFromInput(i),t.noneColor=0},show:function(t){c=0,u=l(t)},hide:function(e){!c&&u&&(t.noneColor&&(u=""),o.backgroundColor=u,i.spectrum("set",u),n.setValueFromInput(u,0))}})),this.colorEl=i}return this.colorEl},render:function(){return u.prototype.render.call(this),this.getColorEl(),this}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(5),s=r.default.$;t.exports=o.extend({templateInput:function(){var t=this.pfx;this.ppfx;return'\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n '},init:function(){var t=this.em;this.modal=t.get("Modal"),this.am=t.get("AssetManager"),this.events["click #"+this.pfx+"close"]="removeFile",this.events["click #"+this.pfx+"images"]="openAssetManager",this.delegateEvents()},onRender:function(){if(!this.$input){var t=this.model.getDefaultValue();this.$input=s('')}this.$preview||(this.$preview=this.$el.find("#"+this.pfx+"preview-file")),this.$previewBox||(this.$previewBox=this.$el.find("#"+this.pfx+"preview-box")),this.setValue(this.componentValue,0)},setValue:function(t,e){o.prototype.setValue.apply(this,arguments),this.setPreviewView(t&&t!=this.model.getDefaultValue()),this.setPreview(t)},setPreviewView:function(t){var e=this.$previewBox;e&&e[t?"addClass":"removeClass"](this.pfx+"show")},spreadUrl:function(t){this.model.set("value",t),this.setPreviewView(1)},setPreview:function(t){var e=this.$preview;t=t&&t.indexOf("url(")<0?"url("+t+")":t,e&&e.css("background-image",t)},cleanValue:function(){this.setPreviewView(0),this.model.set({value:""},{silent:!0})},removeFile:function(){this.model.set("value",this.model.getDefaultValue());for(var t=arguments.length,e=Array(t),n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return this.set("options",t),this},addOption:function(t){if(t){var e=this.getOptions();this.setOptions([].concat(i(e),[t]))}return this}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return this.set({value:void 0,unit:void 0},t),this},parseValue:function(t){var e=o.prototype.parseValue.apply(this,arguments),n=this.input.validateInputValue(e.value,{deepCheck:1}),i=n.value,r=n.unit;return e.value=i,e.unit=r,e},getFullValue:function(){var t=this.get("value"),e=this.get("unit");return t=(0,r.isUndefined)(t)?"":t,e=!(0,r.isUndefined)(e)&&t?e:"",t=""+t+e,o.prototype.getFullValue.apply(this,[t])}})},function(t,e,n){"use strict";t.exports=n(45).extend({events:{"click [data-toggle=asset-remove]":"onRemove",click:"onClick",dblclick:"onDblClick"},getPreview:function(){var t=this.pfx;return'\n
    \n
    \n '},getInfo:function(){var t=this.pfx,e=this.model,n=e.get("name"),i=e.get("width"),r=e.get("height"),o=e.get("unitDim"),s=i&&r?i+"x"+r+o:"";return n=n||e.getFilename(),'\n
    '+n+'
    \n
    '+s+"
    \n "},init:function(t){var e=this.pfx;this.className+=" "+e+"asset-image"},onClick:function(){var t=this.config.onClick,e=this.model;this.collection.trigger("deselectAll"),this.$el.addClass(this.pfx+"highlight"),"function"==typeof t?t(e):this.updateTarget(this.collection.target)},onDblClick:function(){var t=this.em,e=this.config.onDblClick,n=this.model;"function"==typeof e?e(n):(this.updateTarget(this.collection.target),t&&t.get("Modal").close());var i=this.collection.onSelect;"function"==typeof i&&i(this.model)},onRemove:function(t){t.stopImmediatePropagation(),this.model.collection.remove(this.model)}})},function(t,e,n){"use strict";(function(e){var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=r.default.View.extend({initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t,this.collection=t.collection;var e=t.config||{};this.config=e,this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.em=e.em,this.className=this.pfx+"asset",this.listenTo(this.model,"destroy remove",this.remove),this.model.view=this;var n=this.init&&this.init.bind(this);n&&n(t)},template:function(){var t=this.pfx;return'\n
    \n '+this.getPreview()+'\n
    \n
    \n '+this.getInfo()+'\n
    \n
    \n ⨯\n
    \n '},updateTarget:function(t){t&&t.set&&(t.set("attributes",e.clone(t.get("attributes"))),t.set("src",this.model.get("src")))},getPreview:function(){return""},getInfo:function(){return""},render:function(){var t=this.el;return t.innerHTML=this.template(this,this.model),t.className=this.className,this}})}).call(e,n(1))},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(26),c=i(l);t.exports=a.default.View.extend({template:o.default.template('\n
    \n
    <%= title %>
    \n multiple/>\n
    \n
    \n '),events:{},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t;var e=t.config||{};this.config=e,this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.target=this.options.globalCollection||{},this.uploadId=this.pfx+"uploadFile",this.disabled=void 0!==e.disableUpload?e.disableUpload:!e.upload&&!e.embedAsBase64,this.events["change #"+this.uploadId]="uploadFile";var n=e.uploadFile;n?this.uploadFile=n.bind(this):e.embedAsBase64&&(this.uploadFile=this.constructor.embedAsBase64),this.delegateEvents()},onUploadStart:function(){var t=this.config.em;t&&t.trigger("asset:upload:start")},onUploadEnd:function(t){var e=this.config.em;e&&e.trigger("asset:upload:end",t)},onUploadError:function(t){var e=this.config.em;console.error(t),this.onUploadEnd(t),e&&e.trigger("asset:upload:error",t)},onUploadResponse:function(t,e){var n=this.config.em,i=this.config,r=this.target,o="string"==typeof t?JSON.parse(t):t;n&&n.trigger("asset:upload:response",o),i.autoAdd&&r&&r.add(o.data,{at:0}),this.onUploadEnd(t),e&&e(o)},uploadFile:function(t,e){for(var n=this,i=t.dataTransfer?t.dataTransfer.files:t.target.files,r=new FormData,o=this.config,s=o.params,a=0;a'+i.dropzoneContent+"
    "),h(),"draggable"in o&&[o,a].forEach(function(t){t.ondragover=d,t.ondragleave=f,t.ondrop=p})},render:function(){return this.$el.html(this.template({title:this.config.uploadText,uploadId:this.uploadId,disabled:this.disabled,pfx:this.pfx})),this.initDrop(),this.$el.attr("class",this.pfx+"file-uploader"),this}},{embedAsBase64:function(t,e){var n=this,i=t.dataTransfer?t.dataTransfer.files:t.target.files,r={data:[]};if(!FileReader)return void this.onUploadError(new Error("Unsupported platform, FileReader is not defined"));var o=[],s=/^(.+)\/(.+)$/,a=!0,l=!1,c=void 0;try{for(var u,h=i[Symbol.iterator]();!(a=(u=h.next()).done);a=!0){var d=u.value;!function(t){var e=new Promise(function(e,n){var i=new FileReader;i.addEventListener("load",function(r){var o=void 0,a=t.name,l=s.exec(t.type);if("image"===(o=l?l[1]:t.type)){var c={src:i.result,name:a,type:o,height:0,width:0},u=new Image;u.addEventListener("error",function(t){n(t)}),u.addEventListener("load",function(){c.height=u.height,c.width=u.width,e(c)}),u.src=c.src}else e(o?{src:i.result,name:a,type:o}:i.result)}),i.addEventListener("error",function(t){n(t)}),i.addEventListener("abort",function(t){n("Aborted")}),i.readAsDataURL(t)});o.push(e)}(d)}}catch(t){l=!0,c=t}finally{try{!a&&h.return&&h.return()}finally{if(l)throw c}}Promise.all(o).then(function(t){r.data=t,n.onUploadResponse(r,e)},function(t){n.onUploadError(t)})}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(48),c=i(l),u=n(11);t.exports=a.default.Model.extend(c.default).extend({defaults:{selectors:{},selectorsAdd:"",style:{},mediaText:"",state:"",stylable:!0,atRuleType:"",singleAtRule:0,important:0},initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.config=t||{};var n=e.em,i=this.config.selectors||[];if(this.em=n,n){var r=n.get("SelectorManager"),o=[];i.forEach(function(t){o.push(r.add(t))}),i=o}this.set("selectors",new u(i))},getAtRule:function(){var t=this.get("atRuleType"),e=this.get("mediaText"),n=t?"@"+t:e?"@media":"";return n+(e&&n?" "+e:"")},selectorsToString:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=[],n=this.get("state"),i=this.get("selectorsAdd"),r=this.get("selectors").getFullString(),o=n?":"+n:"";return r&&e.push(""+r+o),i&&!t.skipAdd&&e.push(i),e.join(", ")},getDeclaration:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e="",n=this.selectorsToString(),i=this.styleToString(t),r=this.get("singleAtRule");return(n||r)&&i&&(e=r?i:n+"{"+i+"}"),e},toCSS:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e="",n=this.getAtRule(),i=this.getDeclaration(t);return i&&(e=i),n&&e&&(e=n+"{"+e+"}"),e},toJSON:function(){for(var t=arguments.length,e=Array(t),n=0;n3&&void 0!==arguments[3]?arguments[3]:{},r=e||"",s=n||"",a=i.selectorsAdd||"",l=i.atRuleType||"";t instanceof Array||t.models||(t=[t]);var c=o.default.map(t.models||t,function(t){return t.get("name")}),u=o.default.map(this.get("selectors").models,function(t){return t.get("name")});if(c.length!==u.length)return!1;for(var h=0;h0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,r.isString)(e)&&(e=l(e));var s=this.getStyle(),a=i({},e);this.set("style",a,n);var c=(0,o.shallowDiff)(s,a);return(0,r.keys)(c).forEach(function(e){var n=t.em;t.trigger("change:style:"+e),n&&(n.trigger("styleable:change",t,e),n.trigger("styleable:change:"+e,t,e))}),a},addStyle:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};"string"==typeof t?t={prop:e}:n=e||{},t=this.extendStyle(t),this.setStyle(t,n)},removeStyle:function(t){var e=this.getStyle();delete e[t],this.setStyle(e)},styleToString:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=[],n=this.getStyle();for(var i in n){var o=t.important,s=(0,r.isArray)(o)?o.indexOf(i)>=0:o,a=n[i]+(s?" !important":"");e.push(i+":"+a+";")}return e.join("")}}},function(t,e,n){"use strict";t.exports=n(0).View.extend({tagName:"style",initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.config=t.config||{};var e=this.model;this.listenTo(e,"change:style change:state change:mediaText",this.render),this.listenTo(e,"destroy remove",this.remove),this.listenTo(e.get("selectors"),"change",this.render)},render:function(){var t=this.model,e=t.get("important");return this.el.innerHTML=this.model.toCSS({important:e}),this}})},function(t,e,n){"use strict";var i=n(0);t.exports=i.View.extend({itemView:"",itemsView:"",itemType:"type",initialize:function(t,e){this.config=e||{}},addTo:function(t){this.add(t)},add:function(t,e){var n=e||null,i=this.itemView,r=t.get(this.itemType);this.itemsView&&this.itemsView[r]&&(i=this.itemsView[r]);var o=new i({model:t,config:this.config},this.config),s=o.render().el;n?n.appendChild(s):this.$el.append(s)},render:function(){var t=document.createDocumentFragment();return this.$el.empty(),this.collection.length&&this.collection.each(function(e){this.add(e,t)},this),this.$el.append(t),this}})},function(t,e,n){"use strict";var i=n(1),r=n(0);t.exports=r.Collection.extend({initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.listenTo(this,"add",this.onAdd),this.config=e.config,this.em=e.em,this.model=function(t,n){var i,r=e.componentTypes;n.em=e.em,n.config=e.config,n.componentTypes=r;for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:{};if("string"==typeof t){var n=this.em.get("CssComposer"),i=this.em.get("Parser").parseHtml(t);if(t=i.html,i.css&&n){var o=e.avoidUpdateStyle;n.addCollection(i.css,{extend:1,avoidUpdateStyle:o})}}return r.Collection.prototype.add.apply(this,[t,e])},onAdd:function(t,e,n){var r=this.em,o=t.getStyle(),s=r&&r.getConfig("avoidInlineStyle");if(!(0,i.isEmpty)(o)&&!s&&r&&r.get&&r.getConfig("forceClass")){var a=t.cid;r.get("CssComposer").setClassRule(a,o);t.setStyle({}),t.addClass(a)}}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(1);t.exports=r.default.View.extend({initialize:function(t){this.opts=t||{},this.config=t.config||{};var e=this.collection;this.listenTo(e,"add",this.addTo),this.listenTo(e,"reset",this.resetChildren),this.listenTo(e,"remove",this.removeChildren)},removeChildren:function(t){var e=this.config.em,n=t.view;if(n){n.remove.apply(n);var i=n.childrenView;i&&i.stopListening(),e&&e.trigger("component:remove",t)}},addTo:function(t){var e=(arguments.length>1&&void 0!==arguments[1]&&arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),n=this.config.em,i=this.collection.indexOf(t);this.addToCollection(t,null,i),n&&!e.temporary&&n.trigger("component:add",t)},addToCollection:function(t,e,i){this.compView||(this.compView=n(3));for(var r=e||null,s=this.compView,a=this.opts.componentTypes,l=t.get("type"),c=0;c0&&void 0!==arguments[0]?arguments[0]:{};return n=r({},s.default,e),n.stylePrefix=e.pStylePrefix,t=n.em,this},getConfig:function(){return n},onLoad:function(){e=new l.default({level:0,config:n,opened:n.opened||{},model:t.get("DomComponents").getWrapper()}),t&&t.on("component:selected",this.componentChanged),this.componentChanged()},postRender:function(){var t=n.appendTo,e=n.root;if(e&&this.setRoot(e),t){((0,c.isElement)(t)?t:document.querySelector(t)).appendChild(this.render())}},setRoot:function(t){return e.setRoot(t),this},getRoot:function(){return e.model},getAll:function(){return e},componentChanged:function(e){if(!(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).fromLayers){var i=t.get("opened"),r=t.getSelected(),o=n.scrollLayers,s=r&&r.collection?r.collection.parent:null;for(var a in i)i[a].set("open",0);for(;s;)s.set("open",1),i[s.cid]=s,s=s.collection?s.collection.parent:null;if(r&&o){var l=r.viewLayer&&r.viewLayer.el;l&&l.scrollIntoView(o)}}},render:function(){return e.render().el}}}},function(t,e,n){"use strict";var i=n(1),r=n(2),o=n(0),s=function(t){return t&&t.__esModule?t:{default:t}}(o),a=n(3),l=s.default.$,c=void 0;t.exports=s.default.View.extend({events:{"mousedown [data-toggle-move]":"startSort","click [data-toggle-visible]":"toggleVisibility","click [data-toggle-select]":"handleSelect","mouseover [data-toggle-select]":"handleHover","click [data-toggle-open]":"toggleOpening","dblclick [data-name]":"handleEdit","focusout [data-name]":"handleEditEnd"},template:function(t){var e=this.pfx,n=this.ppfx,i=this.config.hidable,r=this.countChildren(t),o=r?"":this.clsNoChild,s=this.clsTitle+" "+o,a=this.clsTitleC+" "+n+"one-bg",l=this.clsCaret+" fa fa-chevron-right",c=this.inputNameCls+" "+n+"no-app",u=this.level+1,h=30+10*u+"px",d=t.getName();return"\n "+(i?'':"")+'\n
    \n
    \n
    \n \n '+t.getIcon()+'\n '+d+'\n
    \n
    \n
    \n
    '+(r||"")+'
    \n
    \n \n
    \n
    '},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.opt=t,this.level=t.level,this.config=t.config,this.em=t.config.em,this.ppfx=this.em.get("Config").stylePrefix,this.sorter=t.sorter||"",this.pfx=this.config.stylePrefix;var e=this.pfx,n=this.ppfx,i=this.model,r=i.get("components");i.set("open",!1),this.listenTo(r,"remove add change reset",this.checkChildren),this.listenTo(i,"change:status",this.updateStatus),this.listenTo(i,"change:open",this.updateOpening),this.listenTo(i,"change:style:display",this.updateVisibility),this.className=e+"layer no-select "+n+"two-color",this.inputNameCls=n+"layer-name",this.clsTitleC=e+"layer-title-c",this.clsTitle=e+"layer-title",this.clsCaret=e+"layer-caret",this.clsCount=e+"layer-count",this.clsMove=e+"layer-move",this.clsChildren=e+"layer-children",this.clsNoChild=e+"layer-no-chld",this.$el.data("model",i),this.$el.data("collection",r),i.viewLayer=this},getVisibilityEl:function(){return this.eyeEl||(this.eyeEl=this.$el.children("."+this.pfx+"layer-vis")),this.eyeEl},updateVisibility:function(){var t=this.pfx,e=this.model,n=t+"layer-hidden",i="none"==e.getStyle().display,r=i?"addClass":"removeClass";this.$el[r](n),this.getVisibilityEl()[r]("fa-eye-slash")},toggleVisibility:function(t){t&&t.stopPropagation();var e=this.model,n=e.getStyle();"none"==n.display?delete n.display:n.display="none",e.setStyle(n)},handleEdit:function(t){t&&t.stopPropagation();var e=this.getInputName();e.contentEditable=!0,e.focus()},handleEditEnd:function(t){t&&t.stopPropagation();var e=this.getInputName(),n=e.textContent;e.contentEditable=!1,this.model.set({name:n})},getInputName:function(){return this.inputName||(this.inputName=this.el.querySelector("."+this.inputNameCls)),this.inputName},updateOpening:function(){var t=this.opt.opened||{},e=this.model;e.get("open")?(this.$el.addClass("open"),this.getCaret().addClass("fa-chevron-down"),t[e.cid]=e):(this.$el.removeClass("open"),this.getCaret().removeClass("fa-chevron-down"),delete t[e.cid])},toggleOpening:function(t){t.stopPropagation(),this.model.get("components").length&&this.model.set("open",!this.model.get("open"))},handleSelect:function(t){t.stopPropagation();var e=this.em,n=this.config;if(e){var i=this.model;e.setSelected(i,{fromLayers:1});var r=n.scrollCanvas;r&&e.get("Canvas").scrollTo(i,r)}},handleHover:function(t){t.stopPropagation();var e=this.em,n=this.config,i=this.model;e&&n.showHover&&e.setHovered(i,{fromLayers:1})},startSort:function(t){t.stopPropagation();var e=this.sorter;0===t.button&&e&&e.startSort(t.target)},freeze:function(){this.$el.addClass(this.pfx+"opac50"),this.model.set("open",0)},unfreeze:function(){this.$el.removeClass(this.pfx+"opac50")},updateStatus:function(t){a.prototype.updateStatus.apply(this,[{avoidHover:!this.config.highlightHover}])},isVisible:function(){var t=this.model.get("style"),e=t.display;if(!e||"none"!=e)return 1},checkChildren:function(){var t=this.model,e=this.countChildren(t),n=(this.pfx,this.clsNoChild),i=this.$el.children("."+this.clsTitleC).children("."+this.clsTitle);this.cnt||(this.cnt=this.$el.children("."+this.clsCount)),e?(i.removeClass(n),this.cnt.html(e)):(i.addClass(n),this.cnt.empty(),t.set("open",0))},countChildren:function(t){var e=0;return t.get("components").each(function(t){var n=this.opt.isCountable,i=this.config.hideTextnode;n&&!n(t,i)||e++},this),e},getCaret:function(){if(!this.caret||!this.caret.length){this.pfx;this.caret=this.$el.children("."+this.clsTitleC).find("."+this.clsCaret)}return this.caret},setRoot:function(t){t=(0,i.isString)(t)?this.em.getWrapper().find(t)[0]:t;var e=(0,r.getModel)(t,l);e&&(this.stopListening(),this.model=e,this.initialize(this.opt),this.render())},render:function(){var t=this.model,e=this.pfx,r=this.isVisible(),o=this.$el.empty(),s=this.level+1;(0,i.isUndefined)(c)&&(c=n(182));var a=new c({collection:t.get("components"),config:this.config,sorter:this.sorter,opened:this.opt.opened,parent:t,level:s}).render().$el;return this.config.showWrapper||1!==s?(o.html(this.template(t)),o.find("."+this.clsChildren).append(a)):o.append(a),t.get("draggable")&&this.config.sortable||o.children("."+this.clsMove).remove(),!r&&(this.className+=" "+e+"hide"),o.attr("class",this.className),this.updateOpening(),this.updateStatus(),this.updateVisibility(),this}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=r.default.$;t.exports={startSelectPosition:function(t,e){this.isPointed=!1;var n=this.editorModel.get("Utils");n&&!this.sorter&&(this.sorter=new n.Sorter({container:this.getCanvasBody(),placer:this.canvas.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,direction:"a",document:e,wmargin:1,nested:1,em:this.editorModel,canvasRelative:1})),t&&this.sorter.startSort(t)},getOffsetDim:function(){var t=this.offset(this.canvas.getFrameEl()),e=this.offset(this.canvas.getElement());return{top:t.top-e.top,left:t.left-e.left}},stopSelectPosition:function(){this.posTargetCollection=null,this.posIndex="after"==this.posMethod&&0!==this.cDim.length?this.posIndex+1:this.posIndex,this.sorter&&(this.sorter.moved=0,this.sorter.endMove()),this.cDim&&(this.posIsLastEl=0!==this.cDim.length&&"after"==this.posMethod&&this.posIndex==this.cDim.length,this.posTargetEl=0===this.cDim.length?o(this.outsideElem):!this.posIsLastEl&&this.cDim[this.posIndex]?o(this.cDim[this.posIndex][5]).parent():o(this.outsideElem),this.posTargetModel=this.posTargetEl.data("model"),this.posTargetCollection=this.posTargetEl.data("model-comp"))},enable:function(){this.startSelectPosition()},nearFloat:function(t,e,n){var i=t||0,r=e||"before",o=n.length,s=0!==o&&"after"==r&&i==o;return 0!==o&&(!s&&!n[i][4]||n[i-1]&&!n[i-1][4]||s&&!n[i-1][4])?1:0},run:function(){this.enable()},stop:function(){this.stopSelectPosition(),this.$wrapper.css("cursor",""),this.$wrapper.unbind()}}},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=(i(s),n(23));t.exports=o.default.extend({},a,{init:function(){for(var t=arguments.length,e=Array(t),n=0;n0&&void 0!==arguments[0]?arguments[0]:{},o=i.container;if(!o)throw new Error("'container' is required");i=r({},n,i),i.el=(0,c.isElement)(o)?o:document.querySelector(o);var s=new l.default(i).init();return i.plugins.forEach(function(e){var n=t.get(e);n?n(s,i.pluginsOpts[e]||{}):console.warn("Plugin "+e+" not found")}),s.getModel().loadOnStart(),i.autorender&&s.render(),e.push(s),s}}}()},function(t,e,n){"use strict";var i=n(10),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=function(t){var e=t||{},i=n(62),o=n(63),s=n(229);for(var a in i)a in e||(e[a]=i[a]);e.pStylePrefix=e.stylePrefix;var l=new o(e),c=new s({model:l,config:e});return{$:r.default,editor:l,DomComponents:l.get("DomComponents"),LayerManager:l.get("LayerManager"),CssComposer:l.get("CssComposer"),StorageManager:l.get("StorageManager"),AssetManager:l.get("AssetManager"),BlockManager:l.get("BlockManager"),TraitManager:l.get("TraitManager"),SelectorManager:l.get("SelectorManager"),CodeManager:l.get("CodeManager"),Commands:l.get("Commands"),Keymaps:l.get("Keymaps"),Modal:l.get("Modal"),Panels:l.get("Panels"),StyleManager:l.get("StyleManager"),Canvas:l.get("Canvas"),UndoManager:l.get("UndoManager"),DeviceManager:l.get("DeviceManager"),RichTextEditor:l.get("RichTextEditor"),Utils:l.get("Utils"),Config:l.get("Config"),init:function(){return l.init(this),this},getConfig:function(t){return l.getConfig(t)},getHtml:function(t){return l.getHtml(t)},getCss:function(t){return l.getCss(t)},getJs:function(){return l.getJs()},getComponents:function(){return l.get("DomComponents").getComponents()},setComponents:function(t){return l.setComponents(t),this},addComponents:function(t,e){return this.getComponents().add(t,e)},getStyle:function(){return l.get("CssComposer").getAll()},setStyle:function(t){return l.setStyle(t),this},getSelected:function(){return l.getSelected()},getSelectedAll:function(){return l.getSelectedAll()},getSelectedToStyle:function(){var t=l.getSelected();if(t)return this.StyleManager.getModelToStyle(t)},select:function(t){return l.setSelected(t),this},selectAdd:function(t){return l.addSelected(t),this},selectRemove:function(t){return l.removeSelected(t),this},selectToggle:function(t){return l.toggleSelected(t),this},setDevice:function(t){return l.set("device",t),this},getDevice:function(){return l.get("device")},runCommand:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=void 0,i=l.get("Commands").get(t);return i&&(n=i.callRun(this,e)),n},stopCommand:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=void 0,i=l.get("Commands").get(t);return i&&(n=i.callStop(this,e)),n},store:function(t){return l.store(t)},load:function(t){return l.load(t)},getContainer:function(){return e.el},getDirtyCount:function(){return l.getDirtyCount()},refresh:function(){l.refreshCanvas()},setCustomRte:function(t){this.RichTextEditor.customRte=t},on:function(t,e){return l.on(t,e)},off:function(t,e){return l.off(t,e)},trigger:function(t){return l.trigger.apply(l,arguments)},destroy:function(){return l.destroyAll()},getEl:function(){return c.el},getModel:function(){return l},render:function(){var t=this;return l.on("loaded",function(){t.UndoManager.clear(),l.get("modules").forEach(function(t){t.postRender&&t.postRender(c)})}),c.render(),c.el}}}},function(t,e,n){"use strict";t.exports={stylePrefix:"gjs-",components:"",style:"",fromElement:0,noticeOnUnload:!0,showOffsets:!1,showOffsetsSelected:!1,forceClass:!0,height:"900px",width:"100%",baseCss:"\n * {\n box-sizing: border-box;\n }\n html, body, #wrapper {\n min-height: 100%;\n }\n body {\n margin: 0;\n height: 100%;\n background-color: #fff\n }\n #wrapper {\n overflow: auto;\n overflow-x: hidden;\n }\n\n * ::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.1)\n }\n\n * ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.2)\n }\n\n * ::-webkit-scrollbar {\n width: 10px\n }\n ",protectedCss:"* { box-sizing: border-box; } body {margin: 0;}",canvasCss:"",defaultCommand:"select-comp",showToolbar:1,allowScripts:0,showDevices:1,devicePreviewMode:0,mediaCondition:"max-width",tagVarStart:"{[ ",tagVarEnd:" ]}",keepEmptyTextNodes:0,jsInHtml:!0,nativeDnD:1,multipleSelection:1,exportWrapper:0,wrappesIsBody:1,avoidInlineStyle:0,avoidDefaults:0,clearStyles:0,el:"",undoManager:{},assetManager:{},canvas:{},layers:{},storageManager:{},rte:{},domComponents:{},modal:{},codeManager:{},panels:{},commands:{},cssComposer:{},selectorManager:{},deviceManager:{devices:[{name:"Desktop",width:""},{name:"Tablet",width:"768px",widthMedia:"992px"},{name:"Mobile landscape",width:"568px",widthMedia:"768px"},{name:"Mobile portrait",width:"320px",widthMedia:"480px"}]},styleManager:{sectors:[{name:"General",open:!1,buildProps:["float","display","position","top","right","left","bottom"]},{name:"Dimension",open:!1,buildProps:["width","height","max-width","min-height","margin","padding"]},{name:"Typography",open:!1,buildProps:["font-family","font-size","font-weight","letter-spacing","color","line-height","text-align","text-shadow"],properties:[{property:"text-align",list:[{value:"left",className:"fa fa-align-left"},{value:"center",className:"fa fa-align-center"},{value:"right",className:"fa fa-align-right"},{value:"justify",className:"fa fa-align-justify"}]}]},{name:"Decorations",open:!1,buildProps:["border-radius-c","background-color","border-radius","border","box-shadow","background"]},{name:"Extra",open:!1,buildProps:["transition","perspective","transform"]}]},blockManager:{},traitManager:{},textViewCode:"Code",keepUnusedStyles:0}},function(t,e,n){"use strict";function i(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e0&&void 0!==arguments[0]?arguments[0]:{};this.config=e,this.set("Config",e),this.set("modules",[]),this.set("toLoad",[]),this.set("storables",[]),e.el&&e.fromElement&&(this.config.components=e.el.innerHTML),this.attrsOrig=e.el?[].concat(i(e.el.attributes)).reduce(function(t,e){return t[e.nodeName]=e.nodeValue,t},{}):"",a.forEach(function(e){return t.loadModule(e)}),this.on("change:componentHovered",this.componentHovered,this),this.on("change:changesCount",this.updateChanges,this),[{from:"change:selectedComponent",to:"component:toggled"}].forEach(function(e){var n=e.from,i=e.to;t.listenTo(t,n,function(){for(var e=arguments.length,r=Array(e),o=0;o0&&void 0!==arguments[0]?arguments[0]:null,n=this.get("StorageManager");this.get("toLoad").forEach(function(t){t.onLoad()});var i=function(){t.get("modules").forEach(function(e){return e.postLoad&&e.postLoad(t)}),e&&e()};n&&n.canAutoload()?this.load(i):i()},updateChanges:function(){var t=this.get("StorageManager"),e=this.get("changesCount");this.config.noticeOnUnload&&e?window.onbeforeunload=function(t){return 1}:window.onbeforeunload=null,t.isAutosave()&&e>=t.getStepsBeforeSave()&&this.store()},loadModule:function(t){var e=this.config,n=new t,i=n.name.charAt(0).toLowerCase()+n.name.slice(1),o=e[i]||e[n.name]||{};o.pStylePrefix=e.pStylePrefix||"";var s=this.get("StorageManager");if(n.storageKey&&n.store&&n.load&&s){o.stm=s;var a=this.get("storables");a.push(n),this.set("storables",a)}return o.em=this,n.init(r({},o)),!n.private&&this.set(n.name,n),n.onLoad&&this.get("toLoad").push(n),this.get("modules").push(n),this},init:function(t){this.set("Editor",t)},getEditor:function(){return this.get("Editor")},handleUpdates:function(t,e){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};i.temporary||(u&&clearInterval(u),u=setTimeout(function(){i.avoidStore||n.set("changesCount",n.get("changesCount")+1,i)},0))},componentHovered:function(t,e,n){var i=this.previous("componentHovered");i&&this.trigger("component:unhovered",i,n),e&&this.trigger("component:hovered",e,n)},getSelected:function(){return this.get("selected").last()},getSelectedAll:function(){return this.get("selected").models},setSelected:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(0,o.isArray)(t),r=i?t:[t],a=this.get("selected");i&&this.removeSelected(a.filter(function(t){return!(0,o.contains)(r,t)})),r.forEach(function(t){var r=(0,s.getModel)(t,h);r&&!r.get("selectable")||(!i&&e.removeSelected(a.filter(function(t){return t!==r})),e.addSelected(r,n))})},addSelected:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(0,s.getModel)(t,h);((0,o.isArray)(i)?i:[i]).forEach(function(t){t&&!t.get("selectable")||e.get("selected").push(t,n)})},removeSelected:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.get("selected").remove((0,s.getModel)(t,h),e)},toggleSelected:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(0,s.getModel)(t,h);((0,o.isArray)(i)?i:[i]).forEach(function(t){e.get("selected").contains(t)?e.removeSelected(t,n):e.addSelected(t,n)})},setHovered:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(0,s.getModel)(t,h);n&&!n.get("hoverable")||(e.forceChange&&this.set("componentHovered",""),this.set("componentHovered",n,e))},setComponents:function(t){return this.get("DomComponents").setComponents(t)},getComponents:function(){var t=this.get("DomComponents"),e=this.get("CodeManager");if(t&&e){var n=t.getComponents();return e.getCode(n,"json")}},setStyle:function(t){for(var e=this.get("CssComposer").getAll(),n=0,i=e.length;n"+i+"<\/script>":""},getCss:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.config,n=e.wrappesIsBody,i=t.avoidProtected,r=(0,o.isUndefined)(t.keepUnusedStyles)?e.keepUnusedStyles:t.keepUnusedStyles,s=this.get("CssComposer"),a=this.get("DomComponents").getComponent();return(i?"":e.protectedCss)+this.get("CodeManager").getCode(a,"css",{cssc:s,wrappesIsBody:n,keepUnusedStyles:r})},getJs:function(){var t=this.get("DomComponents").getWrapper();return this.get("CodeManager").getCode(t,"js").trim()},store:function(t){var e=this,n=this.get("StorageManager"),i={};if(n)return this.get("storables").forEach(function(t){var e=t.store(1);for(var n in e)i[n]=e[n]}),n.store(i,function(n){t&&t(n),e.set("changesCount",0),e.trigger("storage:store",i)}),i},load:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.getCacheLoad(1,function(n){t.get("storables").forEach(function(t){return t.load(n)}),e&&e(n)})},getCacheLoad:function(t,e){var n=this,i=t?1:0;if(this.cacheLoad&&!i)return this.cacheLoad;var r=this.get("StorageManager"),o=[];if(!r)return{};this.get("storables").forEach(function(t){var e=t.storageKey;e="function"==typeof e?e():e,(e instanceof Array?e:[e]).forEach(function(t){o.push(t)})}),r.load(o,function(t){n.cacheLoad=t,e&&e(t),setTimeout(function(){return n.trigger("storage:load",t)},0)})},getDeviceModel:function(){var t=this.get("device");return this.get("DeviceManager").get(t)},runDefault:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.get("Commands").get(this.config.defaultCommand);e&&!this.defaultRunning&&(e.stop(this,this,t),e.run(this,this,t),this.defaultRunning=1)},stopDefault:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.get("Commands").get(this.config.defaultCommand);e&&(e.stop(this,this,t),this.defaultRunning=0)},refreshCanvas:function(){this.set("canvasOffset",this.get("Canvas").getOffset())},clearSelection:function(t){(t||window).getSelection().removeAllRanges()},getCurrentMedia:function(){var t=this.config,e=this.getDeviceModel(),n=t.mediaCondition,i=t.devicePreviewMode,r=e&&e.get("widthMedia");return e&&r&&!i?"("+n+": "+r+")":""},getWrapper:function(){return this.get("DomComponents").getWrapper()},getDirtyCount:function(){return this.get("changesCount")},destroyAll:function(){var t=this.attributes,e=t.DomComponents,n=t.CssComposer,i=t.UndoManager,r=t.Panels,o=t.Canvas;e.clear(),n.clear(),i.clear().removeAll(),r.getPanels().reset(),o.getCanvasView().remove(),this.view.remove(),this.stopListening(),h(this.config.el).empty().attr(this.attrsOrig)},setEditing:function(t){return this.set("editing",t),this},isEditing:function(){return!!this.get("editing")},data:function(t,e,n){if(t["_gjs-data"]||(t["_gjs-data"]={}),(0,o.isUndefined)(n))return t["_gjs-data"][e];t["_gjs-data"][e]=n}})},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){"use strict";t.exports=function(){var t=n(66),e=n(67),i=n(68);return{name:"Utils",init:function(){return this},Sorter:t,Resizer:e,Dragger:i}}},function(t,e,n){"use strict";(function(e){var i=Object.assign||function(t){for(var e=1;es+c-10||ra+l-10)return 1},getCurrentPos:function(){var t=this.eventMove;return{x:t.pageX||0,y:t.pageY||0}},getDim:function(t){var e,n,i,r;if(this.canvasRelative&&this.em){var o=this.em.get("Canvas").getElementPos(t),s=window.getComputedStyle(t),a=parseFloat(s.marginTop),l=parseFloat(s.marginBottom),c=parseFloat(s.marginRight),u=parseFloat(s.marginLeft);e=o.top-a,n=o.left-u,i=o.height+a+l,r=o.width+u+c}else{var h=this.offset(t);e=this.relative?t.offsetTop:h.top-(this.wmargin?-1:1)*this.elT,n=this.relative?t.offsetLeft:h.left-(this.wmargin?-1:1)*this.elL,i=t.offsetHeight,r=t.offsetWidth}return[e,n,i,r]},getChildrenDim:function(t){var e=[];if(!t)return e;var n=this.getTargetModel(t);n&&n.view&&!this.ignoreViewChildren&&(t=n.view.getChildrenContainer());for(var i=t.children,r=0,o=i.length;rs||s>a+c-r||l+r>o||o>l+u-r)&&(i=1),!!i},findPosition:function(t,e,n){for(var i={index:0,method:"before"},r=0,o=0,s=0,a=0,l=0,c=0,u=0,h=0,d=0,f=t.length;do||a&&c>=a||r&&s0&&void 0!==arguments[0]?arguments[0]:{};return i(this,t),this.setOptions(e),(0,o.bindAll)(this,"handleKeyDown","handleMouseDown","move","stop"),this}return r(t,[{key:"getConfig",value:function(){return this.opts}},{key:"setOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.opts=(0,o.defaults)(t,a),this.setup()}},{key:"setup",value:function(){var t=this.opts,e=t.prefix||"",n=t.appendTo||document.body,i=this.container;for(i||(i=document.createElement("div"),i.className=e+"resizer-c",n.appendChild(i),this.container=i);i.firstChild;)i.removeChild(i.firstChild);var r={};["tl","tc","tr","cl","cr","bl","bc","br"].forEach(function(e){return r[e]=t[e]?l(e,t):""});for(var o in r){var s=r[o];s&&i.appendChild(s)}this.handlers=r,this.mousePosFetcher=t.mousePosFetcher,this.updateTarget=t.updateTarget,this.posFetcher=t.posFetcher,this.onStart=t.onStart,this.onMove=t.onMove,this.onEnd=t.onEnd}},{key:"toggleFrames",value:function(t){if(this.opts.silentFrames){var e=document.querySelectorAll("iframe");(0,o.each)(e,function(e){return e.style.pointerEvents=t?"none":""})}}},{key:"isHandler",value:function(t){var e=this.handlers;for(var n in e)if(e[n]===t)return!0;return!1}},{key:"getFocusedEl",value:function(){return this.el}},{key:"getDocumentEl",value:function(){return[this.el.ownerDocument,document]}},{key:"getElementPos",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.posFetcher||"";return n?n(t,e):c(t)}},{key:"focus",value:function(t){if(!t||t!==this.el){this.el=t;var e=this.opts,n=this.getElementPos(t,{target:"container"}),i=this.container,r=i.style;e.avoidContainerUpdate||(r.left=n.left+"px",r.top=n.top+"px",r.width=n.width+"px",r.height=n.height+"px",r.display="block"),(0,s.on)(this.getDocumentEl(),"mousedown",this.handleMouseDown)}}},{key:"blur",value:function(){this.container.style.display="none",this.el&&((0,s.off)(this.getDocumentEl(),"mousedown",this.handleMouseDown),this.el=null)}},{key:"start",value:function(t){if(0===t.button){t.preventDefault(),t.stopPropagation();var e=this.el,n=this,i=this.opts||{},r="data-"+i.prefix+"handler",a=this.getElementPos(e,{target:"el"});this.handlerAttr=t.target.getAttribute(r),this.clickedHandler=t.target,this.startDim={t:a.top,l:a.left,w:a.width,h:a.height},this.rectDim={t:a.top,l:a.left,w:a.width,h:a.height},this.startPos={x:t.clientX,y:t.clientY};var l=this.getDocumentEl();(0,s.on)(l,"mousemove",this.move),(0,s.on)(l,"keydown",this.handleKeyDown),(0,s.on)(l,"mouseup",this.stop),(0,o.isFunction)(this.onStart)&&this.onStart(t,{docs:l,config:i,el:e,resizer:n}),this.toggleFrames(1),this.move(t)}}},{key:"move",value:function(t){var e=this.onMove,n=this.mousePosFetcher,i=n?n(t):{x:t.clientX,y:t.clientY};this.currentPos=i,this.delta={x:i.x-this.startPos.x,y:i.y-this.startPos.y},this.keys={shift:t.shiftKey,ctrl:t.ctrlKey,alt:t.altKey},this.rectDim=this.calc(this),this.updateRect(0),e&&e(t),0===t.which&&this.stop(t)}},{key:"stop",value:function(t){var e=this.opts,n=this.getDocumentEl();(0,s.off)(n,"mousemove",this.move),(0,s.off)(n,"keydown",this.handleKeyDown),(0,s.off)(n,"mouseup",this.stop),this.updateRect(1),this.toggleFrames(),(0,o.isFunction)(this.onEnd)&&this.onEnd(t,{docs:n,config:e})}},{key:"updateRect",value:function(t){var e=this.el,n=this,i=this.opts,r=this.rectDim,s=this.container.style,a=this.updateTarget,l=this.getSelectedHandler(),c=i.unitHeight,u=i.unitWidth,h=i.keyWidth,d=i.keyHeight;if((0,o.isFunction)(a))a(e,r,{store:t,selectedHandler:l,resizer:n,config:i});else{var f=e.style;f[h]=r.w+u,f[d]=r.h+c}var p=this.getElementPos(e,{target:"container"});i.avoidContainerUpdate||(s.left=p.left+"px",s.top=p.top+"px",s.width=p.width+"px",s.height=p.height+"px")}},{key:"getSelectedHandler",value:function(){var t=this.handlers;if(this.selectedHandler)for(var e in t)if(t[e]===this.selectedHandler)return e}},{key:"handleKeyDown",value:function(t){27===t.keyCode&&(this.rectDim=this.startDim,this.stop(t))}},{key:"handleMouseDown",value:function(t){var e=t.target;this.isHandler(e)?(this.selectedHandler=e,this.start(t)):e!==this.el&&(this.selectedHandler="",this.blur())}},{key:"calc",value:function(t){var e=void 0,n=this.opts||{},i=n.step,r=this.startDim,o=n.minDim,a=n.maxDim,l=t.delta.x,c=t.delta.y,u=r.w,h=r.h,d={t:0,l:0,w:u,h:h};if(t){var f=t.handlerAttr;~f.indexOf("r")&&(e=(0,s.normalizeFloat)(u+l*i,i),e=Math.max(o,e),a&&(e=Math.min(a,e)),d.w=e),~f.indexOf("b")&&(e=(0,s.normalizeFloat)(h+c*i,i),e=Math.max(o,e),a&&(e=Math.min(a,e)),d.h=e),~f.indexOf("l")&&(e=(0,s.normalizeFloat)(u-l*i,i),e=Math.max(o,e),a&&(e=Math.min(a,e)),d.w=e),~f.indexOf("t")&&(e=(0,s.normalizeFloat)(h-c*i,i),e=Math.max(o,e),a&&(e=Math.min(a,e)),d.h=e);var p=n.ratioDefault?!t.keys.shift:t.keys.shift;if(f.indexOf("c")<0&&p){var g=r.w/r.h;d.w/d.h>g?d.h=Math.round(d.w/g):d.w=Math.round(d.h*g)}return~f.indexOf("l")&&(d.l=r.w-d.w),~f.indexOf("t")&&(d.t=r.h-d.h),d}}}]),t}();t.exports={init:function(t){return new u(t)}}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=r.default.$,s=function(t,e){var n=e||window,i=t.getBoundingClientRect();return{left:i.left+n.pageXOffset,top:i.top+n.pageYOffset,width:i.width,height:i.height}};t.exports={setKey:function(t,e){},getElementRect:function(t){var e=this.opts.posFetcher||"";return e?e(t,{avoidFrameOffset:1}):s(t)},init:function(t){return this.setOptions(t),this.handleMouseDown=this.handleMouseDown.bind(this),this.drag=this.drag.bind(this),this.move=this.move.bind(this),this.stop=this.stop.bind(this),this.setKey("up, right, down, left",this.handleKey),this},setOptions:function(t){this.opts=t||{}},focus:function(t){if(!t||t!==this.el){this.getDocumentEl(t),this.blur(),this.el=t,this.handlers=this.opts.dragHandlers||[t];var e=this.getElementRect(t);this.elRect=e,this.startTop=e.top,this.startLeft=e.left,this.getDocumentEl().on("mousedown",this.handleMouseDown)}},blur:function(){this.getDocumentEl().off("mousedown",this.handleMouseDown),this.el=null},start:function(t){this.startPos=this.getMousePos(t);var e=this.getDocumentEl();e.on("mousemove",this.drag),e.on("mouseup",this.stop);var n=this.opts.onStart;"function"==typeof n&&n(t,{docs:e,el:this.el,start:this.startPos,elRect:this.elRect}),this.drag(t)},stop:function(t){var e=this.getDocumentEl();e.off("mousemove",this.drag),e.off("mouseup",this.stop),this.lockedAxis=null;var n=this.opts.onEnd;"function"==typeof n&&n(t,{docs:e,delta:this.delta,end:{x:this.startLeft+this.delta.x,y:this.startTop+this.delta.y}})},handleMouseDown:function(t){var e=t.target;this.isHandler(e)&&this.start(t)},isHandler:function(t){var e=this.handlers;for(var n in e)if(e[n]===t)return!0;return!1},handleKey:function(t,e){switch(e.shortcut){case"up":this.move(0,-1);break;case"right":this.move(1,0);break;case"down":this.move(0,1);break;case"left":this.move(-1,0)}},getDocumentEl:function(t){var t=t||this.el;if(!this.$doc){var e=[document];t&&e.push(t.ownerDocument),this.$doc=o(e)}return this.$doc},getMousePos:function(t){var e=this.opts.mousePosFetcher;return e?e(t):{x:t.clientX,y:t.clientY}},drag:function(t){var e=this.lockedAxis,n=this.getMousePos(t),i={x:n.x-this.startPos.x,y:n.y-this.startPos.y};if(t.shiftKey){if(!e){var r=i.x,o=i.y,s=Math.abs(r),a=Math.abs(o);o>=s||o<=-s?e="x":(r>a||r<-a)&&(e="y")}}else e=null;"x"===e&&(i.x=this.startPos.x),"y"===e&&(i.y=this.startPos.y),this.lockedAxis=e,this.delta=i,this.move(i.x,i.y);var l=this.opts.onDrag;"function"==typeof l&&l(t,{delta:i,current:{x:this.startLeft+i.x,y:this.startTop+i.y},lockedAxis:e}),0===t.which&&this.stop(t)},move:function(t,e){this.moveX(t),this.moveY(e)},moveX:function(t){var e=this.el,n=(this.opts,this.startLeft+t),i=this.opts.setX;"function"==typeof i?i(n,{el:e,start:this.startLeft,delta:t}):e.style.left=n+"px"},moveY:function(t){var e=this.el,n=(this.opts,this.startTop+t),i=this.opts.setY;"function"==typeof i?i(n,{el:e,start:this.startTop,delta:t}):e.style.top=n+"px"}}},function(t,e,n){"use strict";var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return e=r({},a,n),t=e.em,this.em=t,this},onLoad:function(){var t=e.defaults;for(var n in t){var i=t[n];this.add(n,i.keys,i.handler)}},add:function(t,e,r){var a=this.em,l=a.get("Commands"),c=a.getEditor(),u={id:t,keys:e,handler:r};return n[t]&&this.remove(t),n[t]=u,s(e,function(e,n){r=(0,o.isString)(r)?l.get(r):r,"object"==(void 0===r?"undefined":i(r))?r.run(c):r(c);var s=[t,n.shortcut,e];a.trigger.apply(a,["keymap:emit"].concat(s)),a.trigger.apply(a,["keymap:emit:"+t].concat(s))}),a.trigger("keymap:add",u),u},get:function(t){return n[t]},getAll:function(){return n},remove:function(t){var e=this.em,i=this.get(t);if(i)return delete n[t],s.unbind(i.keys),e&&e.trigger("keymap:remove",i),i}}}},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};n=i({},a,s),t=n.em,this.em=t,e=new o.default({track:!0,register:[]}),e.changeUndoType("change",{condition:!1}),e.changeUndoType("add",{on:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!n.avoidStore)return{object:e,before:void 0,after:t,options:i({},n)}}}),e.changeUndoType("remove",{on:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!n.avoidStore)return{object:e,before:t,after:void 0,options:i({},n)}}});var l={on:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!r&&(r=t.previousAttributes()),!n.avoidStore){var i={object:t,before:r,after:t.toJSON()};return r=null,i}},undo:function(t,e,n,i){t.set(e)},redo:function(t,e,n,i){t.set(n)}};return["style","attributes","content","src"].forEach(function(t){return e.addUndoType("change:"+t,l)}),e.on("undo redo",function(){return t.trigger("component:toggled change:canvasOffset")}),["undo","redo"].forEach(function(n){return e.on(n,function(){return t.trigger(n)})}),this},getConfig:function(){return n},add:function(t){return e.register(t),this},remove:function(t){return e.unregister(t),this},removeAll:function(){return e.unregisterAll(),this},start:function(){return e.startTracking(),this},stop:function(){return e.stopTracking(),this},undo:function(){return t.get("Canvas").isInputFocused()||e.undo(1),this},undoAll:function(){return e.undoAll(),this},redo:function(){return t.get("Canvas").isInputFocused()||e.redo(1),this},redoAll:function(){return e.redoAll(),this},hasUndo:function(){return e.isAvailable("undo")},hasRedo:function(){return e.isAvailable("redo")},getStack:function(){return e.stack},clear:function(){return e.clear(),this},getInstance:function(){return e}}}},function(t,e,n){var i,r,o;/*! + * Backbone.Undo.js v0.2 + * + * Copyright (c)2013 Oliver Sartun + * Released under the MIT License + * + * Documentation and full license available at + * https://github.com/osartun/Backbone.Undo.js + */ +!function(s){r=[n(25),n(72)],i=s,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(function(t,e){function n(t,e,n){return n.length<=4?t.call(e,n[0],n[1],n[2],n[3]):t.apply(e,n)}function i(t,e){return f.call(t,e)}function r(e,n){return null!=e&&(t.isArray(n)||(n=i(arguments,1)),t.all(n,function(t){return t in e}))}function o(){this.registeredObjects=[],this.cidIndexes=[]}function s(e,n,i,r){for(var o,s=0,a=n.length;st.maximumStackLength&&(t.shift(),t.pointer--)}}}function h(){}function d(e,n,i,o){if("object"==typeof n)return t.each(n,function(t,n){2===e?d(e,t,i,o):d(e,n,t,i)});switch(e){case 0:r(i,"undo","redo","on")&&t.all(t.pick(i,"undo","redo","on"),t.isFunction)&&(o[n]=i);break;case 1:o[n]&&t.isObject(i)&&(o[n]=t.extend({},o[n],i));break;case 2:delete o[n]}return this}var f=Array.prototype.slice,p=function(){function e(){i++,n=!0,t.defer(function(){n=!1})}var n=!1,i=-1;return function(){return n||e(),i}}();o.prototype={isRegistered:function(e){return e&&e.cid?this.registeredObjects[e.cid]:t.contains(this.registeredObjects,e)},register:function(t){return!this.isRegistered(t)&&(t&&t.cid?(this.registeredObjects[t.cid]=t,this.cidIndexes.push(t.cid)):this.registeredObjects.push(t),!0)},unregister:function(e){if(this.isRegistered(e)){if(e&&e.cid)delete this.registeredObjects[e.cid],this.cidIndexes.splice(t.indexOf(this.cidIndexes,e.cid),1);else{var n=t.indexOf(this.registeredObjects,e);this.registeredObjects.splice(n,1)}return!0}return!1},get:function(){return t.map(this.cidIndexes,function(t){return this.registeredObjects[t]},this).concat(this.registeredObjects)}};var g={add:{undo:function(t,e,n,i){t.remove(n,i)},redo:function(t,e,n,i){i.index&&(i.at=i.index),t.add(n,i)},on:function(e,n,i){return{object:n,before:void 0,after:e,options:t.clone(i)}}},remove:{undo:function(t,e,n,i){"index"in i&&(i.at=i.index),t.add(e,i)},redo:function(t,e,n,i){t.remove(e,i)},on:function(e,n,i){return{object:n,before:e,after:void 0,options:t.clone(i)}}},change:{undo:function(e,n,i,r){t.isEmpty(n)?t.each(t.keys(i),e.unset,e):(e.set(n),r&&r.unsetData&&r.unsetData.before&&r.unsetData.before.length&&t.each(r.unsetData.before,e.unset,e))},redo:function(e,n,i,r){t.isEmpty(i)?t.each(t.keys(n),e.unset,e):(e.set(i),r&&r.unsetData&&r.unsetData.after&&r.unsetData.after.length&&t.each(r.unsetData.after,e.unset,e))},on:function(e,n){var i=e.changedAttributes(),r=t.keys(i),o=t.pick(e.previousAttributes(),r),s=t.keys(o),a=(n||(n={})).unsetData={after:[],before:[]};return r.length!=s.length&&(r.length>s.length?t.each(r,function(t){t in o||a.before.push(t)},this):t.each(s,function(t){t in i||a.after.push(t)})),{object:e,before:o,after:i,options:t.clone(n)}}},reset:{undo:function(t,e,n){t.reset(e)},redo:function(t,e,n){t.reset(n)},on:function(e,n){return{object:e,before:n.previousModels,after:t.clone(e.models)}}}};h.prototype=g;var v=e.Model.extend({defaults:{type:null,object:null,before:null,after:null,magicFusionIndex:null},undo:function(t){a("undo",this.attributes)},redo:function(t){a("redo",this.attributes)}}),m=e.Collection.extend({model:v,pointer:-1,track:!1,isCurrentlyUndoRedoing:!1,maximumStackLength:1/0,setMaxLength:function(t){this.maximumStackLength=t}}),y=e.Model.extend({defaults:{maximumStackLength:1/0,track:!1},initialize:function(e){this.stack=new m,this.objectRegistry=new o,this.undoTypes=new h,this.stack.setMaxLength(this.get("maximumStackLength")),this.on("change:maximumStackLength",function(t,e){this.stack.setMaxLength(e)},this),e&&e.track&&this.startTracking(),e&&e.register&&(t.isArray(e.register)||t.isArguments(e.register)?n(this.register,this,e.register):this.register(e.register))},startTracking:function(){this.set("track",!0),this.stack.track=!0},stopTracking:function(){this.set("track",!1),this.stack.track=!1},isTracking:function(){return this.get("track")},_addToStack:function(t){u(this.stack,t,i(arguments,1),this.undoTypes)},register:function(){s("on",arguments,this._addToStack,this)},unregister:function(){s("off",arguments,this._addToStack,this)},unregisterAll:function(){n(this.unregister,this,this.objectRegistry.get())},undo:function(t){l("undo",this,this.stack,t)},undoAll:function(){l("undo",this,this.stack,!1,!0)},redo:function(t){l("redo",this,this.stack,t)},redoAll:function(){l("redo",this,this.stack,!1,!0)},isAvailable:function(t){var e=this.stack,n=e.length;switch(t){case"undo":return n>0&&e.pointer>-1;case"redo":return n>0&&e.pointer1&&void 0!==arguments[1]?arguments[1]:{},n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.get("contentTypeJson"),a=this.get("headers")||{},l=this.get("params"),c=e.body||{},u=void 0,h=void 0;for(var d in l)c[d]=l[d];if((0,o.isUndefined)(a["X-Requested-With"])&&(a["X-Requested-With"]="XMLHttpRequest"),(0,o.isUndefined)(a["Content-Type"])&&s&&(a["Content-Type"]="application/json; charset=utf-8"),s)h=JSON.stringify(c);else{h=new FormData;for(var f in c)h.append(f,c[f])}u={method:e.method||"post",credentials:"include",headers:a},"post"===u.method&&(u.body=h),this.onStart(),this.fetch(t,u).then(function(t){return 1==(t.status/200|0)?t.text():t.text().then(function(t){return Promise.reject(t)})}).then(function(t){return n.onResponse(t,i)}).catch(function(t){return n.onError(t,r)})}})},function(t,e,n){"use strict";(function(t){function i(){}function r(t,e){return function(){t.apply(e,arguments)}}function o(t){if(!(this instanceof o))throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],h(t,this)}function s(t,e){for(;3===t._state;)t=t._value;if(0===t._state)return void t._deferreds.push(e);t._handled=!0,o._immediateFn(function(){var n=1===t._state?e.onFulfilled:e.onRejected;if(null===n)return void(1===t._state?a:l)(e.promise,t._value);var i;try{i=n(t._value)}catch(t){return void l(e.promise,t)}a(e.promise,i)})}function a(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"===(void 0===e?"undefined":d(e))||"function"==typeof e)){var n=e.then;if(e instanceof o)return t._state=3,t._value=e,void c(t);if("function"==typeof n)return void h(r(n,e),t)}t._state=1,t._value=e,c(t)}catch(e){l(t,e)}}function l(t,e){t._state=2,t._value=e,c(t)}function c(t){2===t._state&&0===t._deferreds.length&&o._immediateFn(function(){t._handled||o._unhandledRejectionFn(t._value)});for(var e=0,n=t._deferreds.length;e=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},n(79),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(e,n(7))},function(t,e,n){(function(t,e){!function(t,n){"use strict";function i(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n1)for(var n=1;n<%= deviceLabel %>
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n '),events:{change:"updateDevice"},initialize:function(t){this.config=t.config||{},this.em=this.config.em,this.ppfx=this.config.pStylePrefix||"",this.events["click ."+this.ppfx+"add-trasp"]=this.startAdd,this.listenTo(this.em,"change:device",this.updateSelect),this.delegateEvents()},startAdd:function(){},updateDevice:function(){var t=this.em;if(t){var e=this.devicesEl,n=e?e.val():"";t.set("device",n)}},updateSelect:function(){var t=this.em,e=this.devicesEl;if(t&&t.getDeviceModel&&e){var n=t.getDeviceModel(),i=n?n.get("name"):"";e.val(i)}},getOptions:function(){var t="";return this.collection.each(function(e){var n=e.get("name");t+='"}),t},render:function(){var t=this.ppfx;return this.$el.html(this.template({ppfx:t,deviceLabel:this.config.deviceLabel})),this.devicesEl=this.$el.find("."+t+"devices"),this.devicesEl.append(this.getOptions()),this.el.className=t+"devices-c",this}})},function(t,e,n){"use strict";t.exports=function(){var t,e,i={},r=n(88),o=n(89),s=n(27);return{compTypes:"",name:"Parser",init:function(n){i=n||{};for(var a in r)a in i||(i[a]=r[a]);return t=new s(i),e=new o(i),this},parseHtml:function(n){return t.compTypes=this.compTypes,t.parse(n,e)},parseCss:function(t){return e.parse(t)}}}},function(t,e,n){"use strict";t.exports={textTags:["br","b","i","u","a","ul","ol"]}},function(t,e,n){"use strict";var i=n(1),r={4:"media",5:"font-face",6:"page",7:"keyframes",11:"counter-style",12:"supports",13:"document",14:"font-feature-values",15:"viewport"},o=(0,i.keys)(r),s=["5","6","11","15"];t.exports=function(t){return{parseSelector:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=[],n=[],i=t.split(","),r=0,o=i.length;r=0;if(p)u=1,h=r[c],d=this.parseCondition(l);else if(o.indexOf(c)>=0){var g=this.parseNode(l);d=this.parseCondition(l);for(var v=0,m=g.length;v1&&void 0!==arguments[1]?arguments[1]:{};(0,r.isObject)(t)?e=t:e.name=t,o(e.name)&&(e.name=e.name.substr(1),e.type=u.TYPE_ID),e.label&&!e.name&&(e.name=u.escapeName(e.label));var n=e.name,i=n?this.get(n,e.type):s.where(e)[0];return i||s.add(e)}),i(e,"addClass",function(t){var e=[];return(0,r.isString)(t)&&(t=t.trim().split(" ")),t.forEach(function(t){return e.push(s.add({name:t}))}),e}),i(e,"get",function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u.TYPE_CLASS;return o(t)&&(t=t.substr(1),e=u.TYPE_ID),s.where({name:t,type:e})[0]}),i(e,"getAll",function(){return s}),i(e,"render",function(t){if(t){return new d({collection:new h(t),config:l}).render().el}return a.render().el}),e}},function(t,e,n){"use strict";t.exports={stylePrefix:"clm-",appendTo:"",selectors:[],label:"Classes",statesLabel:"- State -",selectedLabel:"Selected",states:[{name:"hover",label:"Hover"},{name:"active",label:"Click"},{name:"nth-of-type(2n)",label:"Even/Odd"}]}},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(93);t.exports=a.default.View.extend({template:o.default.template('\n
    \n
    <%= label %>
    \n
    \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    <%= selectedLabel %>
    \n
    \n
    \n
    '),events:{},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.className=this.pfx+"tags",this.addBtnId=this.pfx+"add-tag",this.newInputId=this.pfx+"new",this.stateInputId=this.pfx+"states",this.stateInputC=this.pfx+"input-c",this.states=this.config.states||[],this.events["click #"+this.addBtnId]="startNewTag",this.events["blur #"+this.newInputId]="endNewTag",this.events["keyup #"+this.newInputId]="onInputKeyUp",this.events["change #"+this.stateInputId]="stateChanged",this.target=this.config.em,this.em=this.target,this.listenTo(this.target,"component:toggled",this.componentChanged),this.listenTo(this.target,"component:update:classes",this.updateSelector),this.listenTo(this.collection,"add",this.addNew),this.listenTo(this.collection,"reset",this.renderClasses),this.listenTo(this.collection,"remove",this.tagRemoved),this.delegateEvents()},tagRemoved:function(t){this.updateStateVis()},getStateOptions:function(){for(var t="",e=0;e'+this.states[e].label+"";return t},addNew:function(t){this.addToClasses(t)},startNewTag:function(t){this.$addBtn.get(0).style.display="none",this.$input.show().focus()},endNewTag:function(t){this.$addBtn.get(0).style.display="",this.$input.hide().val("")},onInputKeyUp:function(t){13===t.keyCode?this.addNewTag(this.$input.val()):27===t.keyCode&&this.endNewTag()},componentChanged:function(t){this.compTarget=this.target.getSelected();var e=this.compTarget,n=[];e&&(this.getStates().val(e.get("state")),n=e.get("classes").getValid()),this.collection.reset(n),this.updateStateVis()},updateStateVis:function(){var t=this.em,e=t&&t.getConfig("avoidInlineStyle");this.collection.length||e?this.getStatesC().css("display","block"):this.getStatesC().css("display","none"),this.updateSelector()},updateSelector:function(){var t=this.target.getSelected();if(this.compTarget=t,t&&t.get){var e=t.get("state"),n=this.collection,i=n.getFullString(n.getStyleable());i=i||"#"+t.getId(),i+=e?":"+e:"";var r=this.el.querySelector("#"+this.pfx+"sel");r&&(r.innerHTML=i)}},stateChanged:function(t){this.compTarget&&(this.compTarget.set("state",this.$states.val()),this.updateSelector())},addNewTag:function(t){var e=this.target,n=this.compTarget;if(t.trim()){if(e){var i=e.get("SelectorManager"),r=i.add({label:t});if(n){var o=n.get("classes");o.length;o.add(r);o.length;this.collection.add(r),this.updateStateVis()}}this.endNewTag()}},addToClasses:function(t,e){var n=e||null,i=new l({model:t,config:this.config,coll:this.collection}),r=i.render().el;return n?n.appendChild(r):this.getClasses().append(r),r},renderClasses:function(){var t=document.createDocumentFragment();return this.collection.each(function(e){this.addToClasses(e,t)},this),this.getClasses()&&this.getClasses().empty().append(t),this},getClasses:function(){return this.$classes||(this.$classes=this.$el.find("#"+this.pfx+"tags-c")),this.$classes},getStates:function(){return this.$states||(this.$states=this.$el.find("#"+this.stateInputId)),this.$states},getStatesC:function(){return this.$statesC||(this.$statesC=this.$el.find("#"+this.stateInputC)),this.$statesC},render:function(){var t=this.ppfx,e=this.config,n=this.$el;return n.html(this.template({selectedLabel:e.selectedLabel,statesLabel:e.statesLabel,label:e.label,pfx:this.pfx,ppfx:this.ppfx})),this.$input=n.find("input#"+this.newInputId),this.$addBtn=n.find("#"+this.addBtnId),this.$classes=n.find("#"+this.pfx+"tags-c"),this.$states=n.find("#"+this.stateInputId),this.$statesC=n.find("#"+this.stateInputC),this.$states.append(this.getStateOptions()),this.renderClasses(),n.attr("class",this.className+" "+t+"one-bg "+t+"two-color"),this}})},function(t,e,n){"use strict";var i=n(8);t.exports=n(0).View.extend({template:function(){var t=this.pfx;this.ppfx;return'\n \n '+(this.model.get("label")||"")+'\n \n ⨯\n \n '},events:{"click [data-tag-remove]":"removeTag","click [data-tag-status]":"changeStatus","dblclick [data-tag-name]":"startEditTag","focusout [data-tag-name]":"endEditTag"},initialize:function(t){this.config=t.config||{},this.coll=t.coll||null,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=this.config.em,this.listenTo(this.model,"change:active",this.updateStatus)},getInputEl:function(){return this.inputEl||(this.inputEl=this.el.querySelector("[data-tag-name]")),this.inputEl},startEditTag:function(){var t=this.getInputEl();t.contentEditable=!0,t.focus()},endEditTag:function(){var t=this.model,e=this.getInputEl(),n=e.textContent,r=i.escapeName(n),o=this.target,s=o&&o.get("SelectorManager");e.contentEditable=!1,s&&(s.get(r)?e.innerText=t.get("label"):t.set({name:r,label:n}))},changeStatus:function(){this.model.set("active",!this.model.get("active"))},removeTag:function(t){var e=this,n=this.target,i=this.model,r=this.coll,o=(this.el,n&&n.getSelected());o&&(o.get,o.get("classes").remove(i)),r&&r.remove(i),setTimeout(function(){return e.remove()},0)},updateStatus:function(){var t="fa-check-square-o";this.$chk||(this.$chk=this.$el.find("#"+this.pfx+"checkbox")),this.model.get("active")?(this.$chk.removeClass("fa-square-o").addClass(t),this.$el.removeClass("opac50")):(this.$chk.removeClass(t).addClass("fa-square-o"),this.$el.addClass("opac50"))},render:function(){var t=this.pfx,e=this.ppfx;return this.$el.html(this.template()),this.$el.attr("class",t+"tag "+e+"three-bg"),this.updateStatus(),this}})},function(t,e,n){"use strict";t.exports=function(){var t,e,i={},r=n(95),o=n(96),s=n(97);return{name:"Modal",init:function(n){i=n||{};for(var a in r)a in i||(i[a]=r[a]);var l=i.pStylePrefix;return l&&(i.stylePrefix=l+i.stylePrefix),t=new o(i),e=new s({model:t,config:i}),this},postRender:function(t){var e=t.model.getConfig().el||t.el;this.render().appendTo(e)},open:function(){return e.show(),this},close:function(){return e.hide(),this},isOpen:function(){return!!t.get("open")},setTitle:function(e){return t.set("title",e),this},getTitle:function(){return t.get("title")},setContent:function(e){return t.set("content"," "),t.set("content",e),this},getContent:function(){return t.get("content")},getContentEl:function(){return e.getContent().get(0)},getModel:function(){return t},render:function(){return e.render().$el}}}},function(t,e,n){"use strict";t.exports={stylePrefix:"mdl-",title:"",content:"",backdrop:!0}},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{title:"",content:"",open:!1}})},function(t,e,n){"use strict";t.exports=n(0).View.extend({template:function(t){var e=t.pfx,n=t.ppfx,i=t.content;return'
    \n
    \n
    '+t.title+'
    \n
    \n
    \n
    \n
    '+i+'
    \n
    \n
    \n
    \n
    \n '},events:{},initialize:function(t){var e=this.model,n=t.config||{},i=n.stylePrefix||"",r=n.backdrop;this.config=n,this.pfx=i,this.ppfx=n.pStylePrefix||"",this.listenTo(e,"change:open",this.updateOpen),this.listenTo(e,"change:title",this.updateTitle),this.listenTo(e,"change:content",this.updateContent),this.events["click ."+i+"btn-close"]="hide",r&&(this.events["click ."+i+"backlayer"]="hide"),this.delegateEvents()},getCollector:function(){return this.$collector||(this.$collector=this.$el.find("."+this.pfx+"collector")),this.$collector},getContent:function(){var t=this.pfx;return this.$content||(this.$content=this.$el.find("."+t+"content #"+t+"c")),this.$content},getTitle:function(){return this.$title||(this.$title=this.$el.find("."+this.pfx+"title")),this.$title.get(0)},updateContent:function(){var t=this.getContent(),e=t.children(),n=this.getCollector(),i=this.model.get("content");e.length&&n.append(e),t.empty().append(i)},updateTitle:function(){var t=this.getTitle();t&&(t.innerHTML=this.model.get("title"))},updateOpen:function(){this.el.style.display=this.model.get("open")?"":"none"},hide:function(){this.model.set("open",0)},show:function(){this.model.set("open",1)},render:function(){var t=this.$el,e=this.pfx,n=(this.ppfx,this.model.toJSON());return n.pfx=this.pfx,n.ppfx=this.ppfx,t.html(this.template(n)),t.attr("class",e+"container"),this.updateOpen(),this}})},function(t,e,n){"use strict";t.exports=function(){var t={},e=n(99),i=n(100),r=n(101),o=n(102),s=n(103),a=n(104),l=n(109),c={},u={},h={},d={};return{getConfig:function(){return t},config:t,EditorView:l,name:"CodeManager",init:function(n){t=n||{};for(var l in e)l in t||(t[l]=e[l]);var c=t.pStylePrefix;return c&&(t.stylePrefix=c+t.stylePrefix),u.html=new i,u.css=new r,u.json=new o,u.js=new s,d.CodeMirror=new a,this.loadDefaultGenerators().loadDefaultViewers(),this},addGenerator:function(t,e){return c[t]=e,this},getGenerator:function(t){return c[t]||null},getGenerators:function(){return c},addViewer:function(t,e){return h[t]=e,this},getViewer:function(t){return h[t]||null},getViewers:function(){return h},updateViewer:function(t,e){t.setContent(e)},getCode:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};i.em=t.em;var r=this.getGenerator(n);return r?r.build(e,i):""},loadDefaultGenerators:function(){for(var t in u)this.addGenerator(t,u[t]);return this},loadDefaultViewers:function(){for(var t in d)this.addViewer(t,d[t]);return this}}}},function(t,e,n){"use strict";t.exports={stylePrefix:"cm-",inlineCss:!1}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=r.default.Model.extend({build:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.get("components");return e.exportWrapper?e.wrappesIsBody?""+this.buildModels(n)+"":t.toHTML():this.buildModels(n)},buildModels:function(t){var e="";return t.each(function(t){e+=t.toHTML()}),e}})},function(t,e,n){"use strict";var i=n(1);t.exports=n(0).Model.extend({initialize:function(){this.compCls=[],this.ids=[]},buildFromModel:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i="",r=this.em,o=r&&r.getConfig("avoidInlineStyle"),s=t.styleToString(),a=t.get("classes"),l=n.wrappesIsBody,c=t.get("wrapper");if(this.ids.push("#"+t.getId()),a.each(function(t){return e.compCls.push(t.getFullName())}),(!o||c)&&s){var u="#"+t.getId();u=l&&c?"body":u,i=u+"{"+s+"}"}return t.components().each(function(t){return i+=e.buildFromModel(t,n)}),i},build:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.cssc,o=n.em||"";this.em=o,this.compCls=[],this.ids=[];var s=this.buildFromModel(t,n),a=(0,i.isUndefined)(n.clearStyles)&&o?o.getConfig("clearStyles"):n.clearStyles;return r&&function(){var t=r.getAll(),i={},l=[];t.each(function(t){var r=t.getAtRule();if(r){var o=i[r];return void(o?o.push(t):i[r]=[t])}s+=e.buildFromRule(t,l,n)});for(var c in i){var u="";i[c].forEach(function(t){return u+=e.buildFromRule(t,l,n)}),u&&(s+=c+"{"+u+"}")}o&&a&&t.remove(l)}(),s},buildFromRule:function(t,e){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r="",o=t.selectorsToString({skipAdd:1}),s=t.get("selectorsAdd"),a=t.get("singleAtRule"),l=void 0;if(t.get("selectors").each(function(t){var e=t.getFullName();(n.compCls.indexOf(e)>=0||n.ids.indexOf(e)>=0||i.keepUnusedStyles)&&(l=1)}),o&&l||s||a){var c=t.getDeclaration();c&&(r+=c)}else e.push(t);return r}})},function(t,e,n){"use strict";var i=n(1),r=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(r);t.exports=o.default.Model.extend({build:function(t){var e=t.toJSON();return this.beforeEach(e),(0,i.each)(e,function(t,n){var i=e[n];if(i instanceof o.default.Model)e[n]=this.build(i);else if(i instanceof o.default.Collection){var r=i;e[n]=[],r.length&&r.each(function(t,i){e[n][i]=this.build(t)},this)}},this),e},beforeEach:function(t){delete t.status}})},function(t,e,n){"use strict";var i=n(1),r=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(r);t.exports=o.default.Model.extend({mapModel:function(t){var e="",n=t.get("script"),r=t.get("type"),o=t.get("components"),s=t.getId();if(n){var a=t.get("attributes");a=(0,i.extend)({},a,{id:s}),t.set("attributes",a);var l=t.getScriptString();if(t.get("scriptUpdated"))this.mapJs[r+"-"+s]={ids:[s],code:l};else{var c=this.mapJs[r];c?c.ids.push(s):this.mapJs[r]={ids:[s],code:l}}}return o.each(function(t){e+=this.mapModel(t)},this),e},build:function(t){this.mapJs={},this.mapModel(t);var e="";for(var n in this.mapJs){var i=this.mapJs[n];e+="\n var items = document.querySelectorAll('"+("#"+i.ids.join(", #"))+"');\n for (var i = 0, len = items.length; i < len; i++) {\n (function(){"+i.code+"}.bind(items[i]))();\n }"}return e}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e-1?t.backUp(i.length-r):i.match(/<\/?$/)&&(t.backUp(i.length),t.match(e,!1)||t.match(i)),n}function n(t){var e=l[t];return e||(l[t]=new RegExp("\\s+"+t+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"))}function i(t,e){var i=t.match(n(e));return i?/^\s*(.*?)\s*$/.exec(i[2])[1]:""}function r(t,e){return new RegExp((e?"^":"")+"","i")}function o(t,e){for(var n in t)for(var i=e[n]||(e[n]=[]),r=t[n],o=r.length-1;o>=0;o--)i.unshift(r[o])}function s(t,e){for(var n=0;n\s\/]/.test(i.current())&&(a=o.htmlState.tagName&&o.htmlState.tagName.toLowerCase())&&u.hasOwnProperty(a))o.inTag=a+" ";else if(o.inTag&&d&&/>$/.test(i.current())){var f=/^([\S]+) (.*)/.exec(o.inTag);o.inTag=null;var p=">"==i.current()&&s(u[f[1]],f[2]),g=t.getMode(n,p),v=r(f[1],!0),m=r(f[1],!1);o.token=function(t,n){return t.match(v,!1)?(n.token=l,n.localState=n.localMode=null,null):e(t,m,n.localMode.token(t,n.localState))},o.localMode=g,o.localState=t.startState(g,c.indent(o.htmlState,""))}else o.inTag&&(o.inTag+=i.current(),i.eol()&&(o.inTag+=" "));return h}var c=t.getMode(n,{name:"xml",htmlMode:!0,multilineTagIndentFactor:i.multilineTagIndentFactor,multilineTagIndentPastTag:i.multilineTagIndentPastTag}),u={},h=i&&i.tags,d=i&&i.scriptTypes;if(o(a,u),h&&o(h,u),d)for(var f=d.length-1;f>=0;f--)u.script.unshift(["type",d[f].matches,d[f].mode]);return{startState:function(){return{token:l,inTag:null,localMode:null,localState:null,htmlState:t.startState(c)}},copyState:function(e){var n;return e.localState&&(n=t.copyState(e.localMode,e.localState)),{token:e.token,inTag:e.inTag,localMode:e.localMode,localState:n,htmlState:t.copyState(c,e.htmlState)}},token:function(t,e){return e.token(t,e)},indent:function(e,n,i){return!e.localMode||/^\s*<\//.test(n)?c.indent(e.htmlState,n):e.localMode.indent?e.localMode.indent(e.localState,n,i):t.Pass},innerMode:function(t){return{state:t.localState||t.htmlState,mode:t.localMode||c}}}},"xml","javascript","css"),t.defineMIME("text/html","htmlmixed")})},function(t,e,n){!function(t){t(n(6))}(function(t){"use strict";var e={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};t.defineMode("xml",function(i,r){function o(t,e){function n(n){return e.tokenize=n,n(t,e)}var i=t.next();if("<"==i)return t.eat("!")?t.eat("[")?t.match("CDATA[")?n(l("atom","]]>")):null:t.match("--")?n(l("comment","--\x3e")):t.match("DOCTYPE",!0,!0)?(t.eatWhile(/[\w\._\-]/),n(c(1))):null:t.eat("?")?(t.eatWhile(/[\w\._\-]/),e.tokenize=l("meta","?>"),"meta"):(E=t.eat("/")?"closeTag":"openTag",e.tokenize=s,"tag bracket");if("&"==i){var r;return r=t.eat("#")?t.eat("x")?t.eatWhile(/[a-fA-F\d]/)&&t.eat(";"):t.eatWhile(/[\d]/)&&t.eat(";"):t.eatWhile(/[\w\.\-:]/)&&t.eat(";"),r?"atom":"error"}return t.eatWhile(/[^&<]/),null}function s(t,e){var n=t.next();if(">"==n||"/"==n&&t.eat(">"))return e.tokenize=o,E=">"==n?"endTag":"selfcloseTag","tag bracket";if("="==n)return E="equals",null;if("<"==n){e.tokenize=o,e.state=f,e.tagName=e.tagStart=null;var i=e.tokenize(t,e);return i?i+" tag error":"tag error"}return/[\'\"]/.test(n)?(e.tokenize=a(n),e.stringStartCol=t.column(),e.tokenize(t,e)):(t.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function a(t){var e=function(e,n){for(;!e.eol();)if(e.next()==t){n.tokenize=s;break}return"string"};return e.isInAttribute=!0,e}function l(t,e){return function(n,i){for(;!n.eol();){if(n.match(e)){i.tokenize=o;break}n.next()}return t}}function c(t){return function(e,n){for(var i;null!=(i=e.next());){if("<"==i)return n.tokenize=c(t+1),n.tokenize(e,n);if(">"==i){if(1==t){n.tokenize=o;break}return n.tokenize=c(t-1),n.tokenize(e,n)}}return"meta"}}function u(t,e,n){this.prev=t.context,this.tagName=e,this.indent=t.indented,this.startOfLine=n,(k.doNotIndent.hasOwnProperty(e)||t.context&&t.context.noIndent)&&(this.noIndent=!0)}function h(t){t.context&&(t.context=t.context.prev)}function d(t,e){for(var n;;){if(!t.context)return;if(n=t.context.tagName,!k.contextGrabbers.hasOwnProperty(n)||!k.contextGrabbers[n].hasOwnProperty(e))return;h(t)}}function f(t,e,n){return"openTag"==t?(n.tagStart=e.column(),p):"closeTag"==t?g:f}function p(t,e,n){return"word"==t?(n.tagName=e.current(),M="tag",y):k.allowMissingTagName&&"endTag"==t?(M="tag bracket",y(t,e,n)):(M="error",p)}function g(t,e,n){if("word"==t){var i=e.current();return n.context&&n.context.tagName!=i&&k.implicitlyClosed.hasOwnProperty(n.context.tagName)&&h(n),n.context&&n.context.tagName==i||!1===k.matchClosing?(M="tag",v):(M="tag error",m)}return k.allowMissingTagName&&"endTag"==t?(M="tag bracket",v(t,e,n)):(M="error",m)}function v(t,e,n){return"endTag"!=t?(M="error",v):(h(n),f)}function m(t,e,n){return M="error",v(t,e,n)}function y(t,e,n){if("word"==t)return M="attribute",b;if("endTag"==t||"selfcloseTag"==t){var i=n.tagName,r=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==t||k.autoSelfClosers.hasOwnProperty(i)?d(n,i):(d(n,i),n.context=new u(n,i,r==n.indented)),f}return M="error",y}function b(t,e,n){return"equals"==t?x:(k.allowMissing||(M="error"),y(t,e,n))}function x(t,e,n){return"string"==t?w:"word"==t&&k.allowUnquoted?(M="string",y):(M="error",y(t,e,n))}function w(t,e,n){return"string"==t?w:y(t,e,n)}var C=i.indentUnit,k={},S=r.htmlMode?e:n;for(var T in S)k[T]=S[T];for(var T in r)k[T]=r[T];var E,M;return o.isInText=!0,{startState:function(t){var e={tokenize:o,state:f,indented:t||0,tagName:null,tagStart:null,context:null};return null!=t&&(e.baseIndent=t),e},token:function(t,e){if(!e.tagName&&t.sol()&&(e.indented=t.indentation()),t.eatSpace())return null;E=null;var n=e.tokenize(t,e);return(n||E)&&"comment"!=n&&(M=null,e.state=e.state(E||n,t,e),M&&(n="error"==M?n+" error":M)),n},indent:function(e,n,i){var r=e.context;if(e.tokenize.isInAttribute)return e.tagStart==e.indented?e.stringStartCol+1:e.indented+C;if(r&&r.noIndent)return t.Pass;if(e.tokenize!=s&&e.tokenize!=o)return i?i.match(/^(\s*)/)[0].length:0;if(e.tagName)return!1!==k.multilineTagIndentPastTag?e.tagStart+e.tagName.length+2:e.tagStart+C*(k.multilineTagIndentFactor||1);if(k.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:k.htmlMode?"html":"xml",helperType:k.htmlMode?"html":"xml",skipAttribute:function(t){t.state==x&&(t.state=y)}}}),t.defineMIME("text/xml","xml"),t.defineMIME("application/xml","xml"),t.mimeModes.hasOwnProperty("text/html")||t.defineMIME("text/html",{name:"xml",htmlMode:!0})})},function(t,e,n){!function(t){t(n(6))}(function(t){"use strict";t.defineMode("javascript",function(e,n){function i(t){for(var e,n=!1,i=!1;null!=(e=t.next());){if(!n){if("/"==e&&!i)return;"["==e?i=!0:i&&"]"==e&&(i=!1)}n=!n&&"\\"==e}}function r(t,e,n){return zt=t,Ht=n,e}function o(t,e){var n=t.next();if('"'==n||"'"==n)return e.tokenize=s(n),e.tokenize(t,e);if("."==n&&t.match(/^\d+(?:[eE][+\-]?\d+)?/))return r("number","number");if("."==n&&t.match(".."))return r("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(n))return r(n);if("="==n&&t.eat(">"))return r("=>","operator");if("0"==n&&t.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i))return r("number","number");if(/\d/.test(n))return t.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/),r("number","number");if("/"==n)return t.eat("*")?(e.tokenize=a,a(t,e)):t.eat("/")?(t.skipToEnd(),r("comment","comment")):Rt(t,e,1)?(i(t),t.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),r("regexp","string-2")):(t.eat("="),r("operator","operator",t.current()));if("`"==n)return e.tokenize=l,l(t,e);if("#"==n)return t.skipToEnd(),r("error","error");if(Kt.test(n))return">"==n&&e.lexical&&">"==e.lexical.type||(t.eat("=")?"!"!=n&&"="!=n||t.eat("="):/[<>*+\-]/.test(n)&&(t.eat(n),">"==n&&t.eat(n))),r("operator","operator",t.current());if(Ut.test(n)){t.eatWhile(Ut);var o=t.current();if("."!=e.lastType){if(qt.propertyIsEnumerable(o)){var c=qt[o];return r(c.type,c.style,o)}if("async"==o&&t.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/,!1))return r("async","keyword",o)}return r("variable","variable",o)}}function s(t){return function(e,n){var i,s=!1;if($t&&"@"==e.peek()&&e.match(Gt))return n.tokenize=o,r("jsonld-keyword","meta");for(;null!=(i=e.next())&&(i!=t||s);)s=!s&&"\\"==i;return s||(n.tokenize=o),r("string","string")}}function a(t,e){for(var n,i=!1;n=t.next();){if("/"==n&&i){e.tokenize=o;break}i="*"==n}return r("comment","comment")}function l(t,e){for(var n,i=!1;null!=(n=t.next());){if(!i&&("`"==n||"$"==n&&t.eat("{"))){e.tokenize=o;break}i=!i&&"\\"==n}return r("quasi","string-2",t.current())}function c(t,e){e.fatArrowAt&&(e.fatArrowAt=null);var n=t.string.indexOf("=>",t.start);if(!(n<0)){if(Wt){var i=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(t.string.slice(t.start,n));i&&(n=i.index)}for(var r=0,o=!1,s=n-1;s>=0;--s){var a=t.string.charAt(s),l=Yt.indexOf(a);if(l>=0&&l<3){if(!r){++s;break}if(0==--r){"("==a&&(o=!0);break}}else if(l>=3&&l<6)++r;else if(Ut.test(a))o=!0;else{if(/["'\/]/.test(a))return;if(o&&!r){++s;break}}}o&&!r&&(e.fatArrowAt=s)}}function u(t,e,n,i,r,o){this.indented=t,this.column=e,this.type=n,this.prev=r,this.info=o,null!=i&&(this.align=i)}function h(t,e){for(var n=t.localVars;n;n=n.next)if(n.name==e)return!0;for(var i=t.context;i;i=i.prev)for(var n=i.vars;n;n=n.next)if(n.name==e)return!0}function d(t,e,n,i,r){var o=t.cc;for(Jt.state=t,Jt.stream=r,Jt.marked=null,Jt.cc=o,Jt.style=e,t.lexical.hasOwnProperty("align")||(t.lexical.align=!0);;){if((o.length?o.pop():Bt?O:M)(n,i)){for(;o.length&&o[o.length-1].lex;)o.pop()();return Jt.marked?Jt.marked:"variable"==n&&h(t,i)?"variable-2":e}}}function f(){for(var t=arguments.length-1;t>=0;t--)Jt.cc.push(arguments[t])}function p(){return f.apply(null,arguments),!0}function g(t,e){for(var n=e;n;n=n.next)if(n.name==t)return!0;return!1}function v(t){var e=Jt.state;if(Jt.marked="def",e.context)if("var"==e.lexical.info&&e.context&&e.context.block){var i=m(t,e.context);if(null!=i)return void(e.context=i)}else if(!g(t,e.localVars))return void(e.localVars=new x(t,e.localVars));n.globalVars&&!g(t,e.globalVars)&&(e.globalVars=new x(t,e.globalVars))}function m(t,e){if(e){if(e.block){var n=m(t,e.prev);return n?n==e.prev?e:new b(n,e.vars,!0):null}return g(t,e.vars)?e:new b(e.prev,new x(t,e.vars),!1)}return null}function y(t){return"public"==t||"private"==t||"protected"==t||"abstract"==t||"readonly"==t}function b(t,e,n){this.prev=t,this.vars=e,this.block=n}function x(t,e){this.name=t,this.next=e}function w(){Jt.state.context=new b(Jt.state.context,Jt.state.localVars,!1),Jt.state.localVars=Zt}function C(){Jt.state.context=new b(Jt.state.context,Jt.state.localVars,!0),Jt.state.localVars=null}function k(){Jt.state.localVars=Jt.state.context.vars,Jt.state.context=Jt.state.context.prev}function S(t,e){var n=function(){var n=Jt.state,i=n.indented;if("stat"==n.lexical.type)i=n.lexical.indented;else for(var r=n.lexical;r&&")"==r.type&&r.align;r=r.prev)i=r.indented;n.lexical=new u(i,Jt.stream.column(),t,null,n.lexical,e)};return n.lex=!0,n}function T(){var t=Jt.state;t.lexical.prev&&(")"==t.lexical.type&&(t.indented=t.lexical.indented),t.lexical=t.lexical.prev)}function E(t){function e(n){return n==t?p():";"==t?f():p(e)}return e}function M(t,e){return"var"==t?p(S("vardef",e),lt,E(";"),T):"keyword a"==t?p(S("form"),L,M,T):"keyword b"==t?p(S("form"),M,T):"keyword d"==t?Jt.stream.match(/^\s*$/,!1)?p():p(S("stat"),N,E(";"),T):"debugger"==t?p(E(";")):"{"==t?p(S("}"),C,X,T,k):";"==t?p():"if"==t?("else"==Jt.state.lexical.info&&Jt.state.cc[Jt.state.cc.length-1]==T&&Jt.state.cc.pop()(),p(S("form"),L,M,T,ft)):"function"==t?p(bt):"for"==t?p(S("form"),pt,M,T):"class"==t||Wt&&"interface"==e?(Jt.marked="keyword",p(S("form"),Ct,T)):"variable"==t?Wt&&"declare"==e?(Jt.marked="keyword",p(M)):Wt&&("module"==e||"enum"==e||"type"==e)&&Jt.stream.match(/^\s*\w/,!1)?(Jt.marked="keyword","enum"==e?p(Dt):"type"==e?p(tt,E("operator"),tt,E(";")):p(S("form"),ct,E("{"),S("}"),X,T,T)):Wt&&"namespace"==e?(Jt.marked="keyword",p(S("form"),O,X,T)):Wt&&"abstract"==e?(Jt.marked="keyword",p(M)):p(S("stat"),B):"switch"==t?p(S("form"),L,E("{"),S("}","switch"),C,X,T,T,k):"case"==t?p(O,E(":")):"default"==t?p(E(":")):"catch"==t?p(S("form"),w,A,M,T,k):"export"==t?p(S("stat"),Et,T):"import"==t?p(S("stat"),At,T):"async"==t?p(M):"@"==e?p(O,M):f(S("stat"),O,E(";"),T)}function A(t){if("("==t)return p(xt,E(")"))}function O(t,e){return _(t,e,!1)}function P(t,e){return _(t,e,!0)}function L(t){return"("!=t?f():p(S(")"),O,E(")"),T)}function _(t,e,n){if(Jt.state.fatArrowAt==Jt.stream.start){var i=n?H:z;if("("==t)return p(w,S(")"),G(xt,")"),T,E("=>"),i,k);if("variable"==t)return f(w,ct,E("=>"),i,k)}var r=n?I:D;return Xt.hasOwnProperty(t)?p(r):"function"==t?p(bt,r):"class"==t||Wt&&"interface"==e?(Jt.marked="keyword",p(S("form"),wt,T)):"keyword c"==t||"async"==t?p(n?P:O):"("==t?p(S(")"),N,E(")"),T,r):"operator"==t||"spread"==t?p(n?P:O):"["==t?p(S("]"),Nt,T,r):"{"==t?Y(U,"}",null,r):"quasi"==t?f(F,r):"new"==t?p(V(n)):"import"==t?p(O):p()}function N(t){return t.match(/[;\}\)\],]/)?f():f(O)}function D(t,e){return","==t?p(O):I(t,e,!1)}function I(t,e,n){var i=0==n?D:I,r=0==n?O:P;return"=>"==t?p(w,n?H:z,k):"operator"==t?/\+\+|--/.test(e)||Wt&&"!"==e?p(i):Wt&&"<"==e&&Jt.stream.match(/^([^>]|<.*?>)*>\s*\(/,!1)?p(S(">"),G(tt,">"),T,i):"?"==e?p(O,E(":"),r):p(r):"quasi"==t?f(F,i):";"!=t?"("==t?Y(P,")","call",i):"."==t?p(W,i):"["==t?p(S("]"),N,E("]"),T,i):Wt&&"as"==e?(Jt.marked="keyword",p(tt,i)):"regexp"==t?(Jt.state.lastType=Jt.marked="operator",Jt.stream.backUp(Jt.stream.pos-Jt.stream.start-1),p(r)):void 0:void 0}function F(t,e){return"quasi"!=t?f():"${"!=e.slice(e.length-2)?p(F):p(O,R)}function R(t){if("}"==t)return Jt.marked="string-2",Jt.state.tokenize=l,p(F)}function z(t){return c(Jt.stream,Jt.state),f("{"==t?M:O)}function H(t){return c(Jt.stream,Jt.state),f("{"==t?M:P)}function V(t){return function(e){return"."==e?p(t?$:j):"variable"==e&&Wt?p(ot,t?I:D):f(t?P:O)}}function j(t,e){if("target"==e)return Jt.marked="keyword",p(D)}function $(t,e){if("target"==e)return Jt.marked="keyword",p(I)}function B(t){return":"==t?p(T,M):f(D,E(";"),T)}function W(t){if("variable"==t)return Jt.marked="property",p()}function U(t,e){if("async"==t)return Jt.marked="property",p(U);if("variable"==t||"keyword"==Jt.style){if(Jt.marked="property","get"==e||"set"==e)return p(q);var n;return Wt&&Jt.state.fatArrowAt==Jt.stream.start&&(n=Jt.stream.match(/^\s*:\s*/,!1))&&(Jt.state.fatArrowAt=Jt.stream.pos+n[0].length),p(K)}return"number"==t||"string"==t?(Jt.marked=$t?"property":Jt.style+" property",p(K)):"jsonld-keyword"==t?p(K):Wt&&y(e)?(Jt.marked="keyword",p(U)):"["==t?p(O,J,E("]"),K):"spread"==t?p(P,K):"*"==e?(Jt.marked="keyword",p(U)):":"==t?f(K):void 0}function q(t){return"variable"!=t?f(K):(Jt.marked="property",p(bt))}function K(t){return":"==t?p(P):"("==t?f(bt):void 0}function G(t,e,n){function i(r,o){if(n?n.indexOf(r)>-1:","==r){var s=Jt.state.lexical;return"call"==s.info&&(s.pos=(s.pos||0)+1),p(function(n,i){return n==e||i==e?f():f(t)},i)}return r==e||o==e?p():p(E(e))}return function(n,r){return n==e||r==e?p():f(t,i)}}function Y(t,e,n){for(var i=3;i"),tt):void 0}function et(t){if("=>"==t)return p(tt)}function nt(t,e){return"variable"==t||"keyword"==Jt.style?(Jt.marked="property",p(nt)):"?"==e?p(nt):":"==t?p(tt):"["==t?p(O,J,E("]"),nt):void 0}function it(t,e){return"variable"==t&&Jt.stream.match(/^\s*[?:]/,!1)||"?"==e?p(it):":"==t?p(tt):f(tt)}function rt(t,e){return"<"==e?p(S(">"),G(tt,">"),T,rt):"|"==e||"."==t||"&"==e?p(tt):"["==t?p(E("]"),rt):"extends"==e||"implements"==e?(Jt.marked="keyword",p(tt)):void 0}function ot(t,e){if("<"==e)return p(S(">"),G(tt,">"),T,rt)}function st(){return f(tt,at)}function at(t,e){if("="==e)return p(tt)}function lt(t,e){return"enum"==e?(Jt.marked="keyword",p(Dt)):f(ct,J,ht,dt)}function ct(t,e){return Wt&&y(e)?(Jt.marked="keyword",p(ct)):"variable"==t?(v(e),p()):"spread"==t?p(ct):"["==t?Y(ct,"]"):"{"==t?Y(ut,"}"):void 0}function ut(t,e){return"variable"!=t||Jt.stream.match(/^\s*:/,!1)?("variable"==t&&(Jt.marked="property"),"spread"==t?p(ct):"}"==t?f():p(E(":"),ct,ht)):(v(e),p(ht))}function ht(t,e){if("="==e)return p(P)}function dt(t){if(","==t)return p(lt)}function ft(t,e){if("keyword b"==t&&"else"==e)return p(S("form","else"),M,T)}function pt(t,e){return"await"==e?p(pt):"("==t?p(S(")"),gt,E(")"),T):void 0}function gt(t){return"var"==t?p(lt,E(";"),mt):";"==t?p(mt):"variable"==t?p(vt):f(O,E(";"),mt)}function vt(t,e){return"in"==e||"of"==e?(Jt.marked="keyword",p(O)):p(D,mt)}function mt(t,e){return";"==t?p(yt):"in"==e||"of"==e?(Jt.marked="keyword",p(O)):f(O,E(";"),yt)}function yt(t){")"!=t&&p(O)}function bt(t,e){return"*"==e?(Jt.marked="keyword",p(bt)):"variable"==t?(v(e),p(bt)):"("==t?p(w,S(")"),G(xt,")"),T,Z,M,k):Wt&&"<"==e?p(S(">"),G(st,">"),T,bt):void 0}function xt(t,e){return"@"==e&&p(O,xt),"spread"==t?p(xt):Wt&&y(e)?(Jt.marked="keyword",p(xt)):f(ct,J,ht)}function wt(t,e){return"variable"==t?Ct(t,e):kt(t,e)}function Ct(t,e){if("variable"==t)return v(e),p(kt)}function kt(t,e){return"<"==e?p(S(">"),G(st,">"),T,kt):"extends"==e||"implements"==e||Wt&&","==t?("implements"==e&&(Jt.marked="keyword"),p(Wt?tt:O,kt)):"{"==t?p(S("}"),St,T):void 0}function St(t,e){return"async"==t||"variable"==t&&("static"==e||"get"==e||"set"==e||Wt&&y(e))&&Jt.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(Jt.marked="keyword",p(St)):"variable"==t||"keyword"==Jt.style?(Jt.marked="property",p(Wt?Tt:bt,St)):"["==t?p(O,J,E("]"),Wt?Tt:bt,St):"*"==e?(Jt.marked="keyword",p(St)):";"==t?p(St):"}"==t?p():"@"==e?p(O,St):void 0}function Tt(t,e){return"?"==e?p(Tt):":"==t?p(tt,ht):"="==e?p(P):f(bt)}function Et(t,e){return"*"==e?(Jt.marked="keyword",p(_t,E(";"))):"default"==e?(Jt.marked="keyword",p(O,E(";"))):"{"==t?p(G(Mt,"}"),_t,E(";")):f(M)}function Mt(t,e){return"as"==e?(Jt.marked="keyword",p(E("variable"))):"variable"==t?f(P,Mt):void 0}function At(t){return"string"==t?p():"("==t?f(O):f(Ot,Pt,_t)}function Ot(t,e){return"{"==t?Y(Ot,"}"):("variable"==t&&v(e),"*"==e&&(Jt.marked="keyword"),p(Lt))}function Pt(t){if(","==t)return p(Ot,Pt)}function Lt(t,e){if("as"==e)return Jt.marked="keyword",p(Ot)}function _t(t,e){if("from"==e)return Jt.marked="keyword",p(O)}function Nt(t){return"]"==t?p():f(G(P,"]"))}function Dt(){return f(S("form"),ct,E("{"),S("}"),G(It,"}"),T,T)}function It(){return f(ct,ht)}function Ft(t,e){return"operator"==t.lastType||","==t.lastType||Kt.test(e.charAt(0))||/[,.]/.test(e.charAt(0))}function Rt(t,e,n){return e.tokenize==o&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(e.lastType)||"quasi"==e.lastType&&/\{\s*$/.test(t.string.slice(0,t.pos-(n||0)))}var zt,Ht,Vt=e.indentUnit,jt=n.statementIndent,$t=n.jsonld,Bt=n.json||$t,Wt=n.typescript,Ut=n.wordCharacters||/[\w$\xa1-\uffff]/,qt=function(){function t(t){return{type:t,style:"keyword"}}var e=t("keyword a"),n=t("keyword b"),i=t("keyword c"),r=t("keyword d"),o=t("operator"),s={type:"atom",style:"atom"};return{if:t("if"),while:e,with:e,else:n,do:n,try:n,finally:n,return:r,break:r,continue:r,new:t("new"),delete:i,void:i,throw:i,debugger:t("debugger"),var:t("var"),const:t("var"),let:t("var"),function:t("function"),catch:t("catch"),for:t("for"),switch:t("switch"),case:t("case"),default:t("default"),in:o,typeof:o,instanceof:o,true:s,false:s,null:s,undefined:s,NaN:s,Infinity:s,this:t("this"),class:t("class"),super:t("atom"),yield:i,export:t("export"),import:t("import"),extends:i,await:i}}(),Kt=/[+\-*&%=<>!?|~^@]/,Gt=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/,Yt="([{}])",Xt={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0},Jt={state:null,column:null,marked:null,cc:null},Zt=new x("this",new x("arguments",null));return k.lex=!0,T.lex=!0,{startState:function(t){var e={tokenize:o,lastType:"sof",cc:[],lexical:new u((t||0)-Vt,0,"block",!1),localVars:n.localVars,context:n.localVars&&new b(null,null,!1),indented:t||0};return n.globalVars&&"object"==typeof n.globalVars&&(e.globalVars=n.globalVars),e},token:function(t,e){if(t.sol()&&(e.lexical.hasOwnProperty("align")||(e.lexical.align=!1),e.indented=t.indentation(),c(t,e)),e.tokenize!=a&&t.eatSpace())return null;var n=e.tokenize(t,e);return"comment"==zt?n:(e.lastType="operator"!=zt||"++"!=Ht&&"--"!=Ht?zt:"incdec",d(e,n,zt,Ht,t))},indent:function(e,i){if(e.tokenize==a)return t.Pass;if(e.tokenize!=o)return 0;var r,s=i&&i.charAt(0),l=e.lexical;if(!/^\s*else\b/.test(i))for(var c=e.cc.length-1;c>=0;--c){var u=e.cc[c];if(u==T)l=l.prev;else if(u!=ft)break}for(;("stat"==l.type||"form"==l.type)&&("}"==s||(r=e.cc[e.cc.length-1])&&(r==D||r==I)&&!/^[,\.=+\-*:?[\(]/.test(i));)l=l.prev;jt&&")"==l.type&&"stat"==l.prev.type&&(l=l.prev);var h=l.type,d=s==h;return"vardef"==h?l.indented+("operator"==e.lastType||","==e.lastType?l.info.length+1:0):"form"==h&&"{"==s?l.indented:"form"==h?l.indented+Vt:"stat"==h?l.indented+(Ft(e,i)?jt||Vt:0):"switch"!=l.info||d||0==n.doubleIndentSwitch?l.align?l.column+(d?0:1):l.indented+(d?0:Vt):l.indented+(/^(?:case|default)\b/.test(i)?Vt:2*Vt)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:Bt?null:"/*",blockCommentEnd:Bt?null:"*/",blockCommentContinue:Bt?null:" * ",lineComment:Bt?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:Bt?"json":"javascript",jsonldMode:$t,jsonMode:Bt,expressionAllowed:Rt,skipExpression:function(t){var e=t.cc[t.cc.length-1];e!=O&&e!=P||t.cc.pop()}}}),t.registerHelper("wordChars","javascript",/[\w$]/),t.defineMIME("text/javascript","javascript"),t.defineMIME("text/ecmascript","javascript"),t.defineMIME("application/javascript","javascript"),t.defineMIME("application/x-javascript","javascript"),t.defineMIME("application/ecmascript","javascript"),t.defineMIME("application/json",{name:"javascript",json:!0}),t.defineMIME("application/x-json",{name:"javascript",json:!0}),t.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),t.defineMIME("text/typescript",{name:"javascript",typescript:!0}),t.defineMIME("application/typescript",{name:"javascript",typescript:!0})})},function(t,e,n){!function(t){t(n(6))}(function(t){t.extendMode("css",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(t,e){return/^[;{}]$/.test(e)}}),t.extendMode("javascript",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(t,e,n,i){return this.jsonMode?/^[\[,{]$/.test(e)||/^}/.test(n):(";"!=e||!i.lexical||")"!=i.lexical.type)&&(/^[;{}]$/.test(e)&&!/^;/.test(n))}});var e=/^(a|abbr|acronym|area|base|bdo|big|br|button|caption|cite|code|col|colgroup|dd|del|dfn|em|frame|hr|iframe|img|input|ins|kbd|label|legend|link|map|object|optgroup|option|param|q|samp|script|select|small|span|strong|sub|sup|textarea|tt|var)$/;t.extendMode("xml",{commentStart:"\x3c!--",commentEnd:"--\x3e",newlineAfterToken:function(t,n,i,r){var o=!1;return"html"==this.configuration&&(o=!!r.context&&e.test(r.context.tagName)),!o&&("tag"==t&&/>$/.test(n)&&r.context||/^-1&&a>-1&&a>s&&(t=t.substr(0,s)+t.substring(s+o.commentStart.length,a)+t.substr(a+o.commentEnd.length)),r.replaceRange(t,n,i)}})}),t.defineExtension("autoIndentRange",function(t,e){var n=this;this.operation(function(){for(var i=t.line;i<=e.line;i++)n.indentLine(i,"smart")})}),t.defineExtension("autoFormatRange",function(e,n){function i(){c+="\n",h=!0,++u}for(var r=this,o=r.getMode(),s=r.getRange(e,n).split("\n"),a=t.copyState(o,r.getTokenAt(e).state),l=r.getOption("tabSize"),c="",u=0,h=0===e.ch,d=0;d\n \t
    <%= label %>
    \n \t
    \n
    '),initialize:function(t){this.config=t.config||{},this.pfx=this.config.stylePrefix},render:function(){var t=this.model.toJSON();return t.pfx=this.pfx,this.$el.html(this.template(t)),this.$el.attr("class",this.pfx+"editor-c"),this.$el.find("#"+this.pfx+"code").append(this.model.get("input")),this}})},function(t,e,n){"use strict";t.exports=function(){var t,e,i={},r=n(111),o=n(29),s=n(113),a=(n(31),n(116));return{name:"Panels",init:function(n){i=n||{};for(var o in r)o in i||(i[o]=r[o]);var l=i.pStylePrefix;return l&&(i.stylePrefix=l+i.stylePrefix),t=new s(i.defaults),e=new a({collection:t,config:i}),this},getPanels:function(){return t},getPanelsEl:function(){return e.el},addPanel:function(e){return t.add(e)},removePanel:function(e){return t.remove(e)},getPanel:function(e){var n=t.where({id:e});return n.length?n[0]:null},addButton:function(t,e){var n=this.getPanel(t);return n?n.get("buttons").add(e):null},removeButton:function(t,e){var n=this.getPanel(t);return n&&n.get("buttons").remove(e)},getButton:function(t,e){var n=this.getPanel(t);if(n){var i=n.get("buttons").where({id:e});return i.length?i[0]:null}return null},render:function(){return e.render().el},active:function(){this.getPanels().each(function(t){t.get("buttons").each(function(t){t.get("active")&&t.trigger("updateActive")})})},disableButtons:function(){this.getPanels().each(function(t){t.get("buttons").each(function(t){t.get("disable")&&t.trigger("change:disable")})})},Panel:o}}},function(t,e,n){"use strict";var i="sw-visibility",r="export-template",o="open-layers",s="open-blocks",a="fullscreen",l="preview";t.exports={stylePrefix:"pn-",defaults:[{id:"commands",buttons:[{}]},{id:"options",buttons:[{active:!0,id:i,className:"fa fa-square-o",command:i,context:i,attributes:{title:"View components"}},{id:l,className:"fa fa-eye",command:l,context:l,attributes:{title:"Preview"}},{id:a,className:"fa fa-arrows-alt",command:a,context:a,attributes:{title:"Fullscreen"}},{id:r,className:"fa fa-code",command:r,attributes:{title:"View code"}}]},{id:"views",buttons:[{id:"open-sm",className:"fa fa-paint-brush",command:"open-sm",active:!0,attributes:{title:"Open Style Manager"}},{id:"open-tm",className:"fa fa-cog",command:"open-tm",attributes:{title:"Settings"}},{id:o,className:"fa fa-bars",command:o,attributes:{title:"Open Layer Manager"}},{id:s,className:"fa fa-th-large",command:s,attributes:{title:"Open Blocks"}}]}],em:null,delayBtnsShow:300}},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{id:"",label:"",className:"",command:"",context:"",buttons:[],attributes:{},options:{},active:!1,dragDrop:!1,runDefaultCommand:!0,stopDefaultCommand:!1,disable:!1},initialize:function(t){if(this.get("buttons").length){var e=n(30);this.set("buttons",new e(this.get("buttons")))}}})},function(t,e,n){"use strict";var i=n(0),r=n(29);t.exports=i.Collection.extend({model:r})},function(t,e,n){"use strict";(function(e){var i=n(0),r=n(115);t.exports=i.View.extend({initialize:function(t){this.opt=t||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"",this.parentM=this.opt.parentM||null,this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset remove",this.render),this.className=this.pfx+"buttons"},addTo:function(t){this.addToCollection(t)},addToCollection:function(t,e){var n=e||null,i=r,o=new i({model:t,config:this.config,parentM:this.parentM}),s=o.render().el;return n?n.appendChild(s):this.$el.append(s),s},render:function(){var t=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(e){this.addToCollection(e,t)},this),this.$el.append(t),this.$el.attr("class",e.result(this,"className")),this}})}).call(e,n(1))},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(1);r.default.$;t.exports=r.default.View.extend({tagName:"span",events:{click:"clicked"},initialize:function(t){var e=this.model.get("className");this.config=t.config||{},this.em=this.config.em||{};var n=this.config.stylePrefix||"",i=this.config.pStylePrefix||"";this.pfx=n,this.ppfx=this.config.pStylePrefix||"",this.id=n+this.model.get("id"),this.activeCls=n+"active "+i+"four-color",this.disableCls=n+"active",this.btnsVisCls=n+"visible",this.className=n+"btn"+(e?" "+e:""),this.listenTo(this.model,"change:active updateActive",this.updateActive),this.listenTo(this.model,"checkActive",this.checkActive),this.listenTo(this.model,"change:bntsVis",this.updateBtnsVis),this.listenTo(this.model,"change:attributes",this.updateAttributes),this.listenTo(this.model,"change:className",this.updateClassName),this.listenTo(this.model,"change:disable",this.updateDisable),this.em&&this.em.get&&(this.commands=this.em.get("Commands"))},updateClassName:function(){var t=this.model.get("className");this.$el.attr("class",this.pfx+"btn"+(t?" "+t:""))},updateAttributes:function(){this.$el.attr(this.model.get("attributes"))},updateBtnsVis:function(){this.$buttons&&(this.model.get("bntsVis")?this.$buttons.addClass(this.btnsVisCls):this.$buttons.removeClass(this.btnsVisCls))},updateActive:function(){var t=this.model,e=t.get("context"),n={},i=this.em&&this.em.get?this.em.get("Editor"):null,r=t.get("command");this.commands&&(0,o.isString)(r)?n=this.commands.get(r)||{}:(0,o.isFunction)(r)?n={run:r}:null!==r&&(0,o.isObject)(r)&&(n=r),t.get("active")?(t.collection.deactivateAll(e),t.set("active",!0,{silent:!0}).trigger("checkActive"),n.run&&(n.run(i,t,t.get("options")),i.trigger("run:"+r)),!n.stop&&t.set("active",!1)):(this.$el.removeClass(this.activeCls),t.collection.deactivateAll(e),n.stop&&(n.stop(i,t,t.get("options")),i.trigger("stop:"+r)))},updateDisable:function(){this.model.get("disable")?this.$el.addClass(this.disableCls):this.$el.removeClass(this.disableCls)},checkActive:function(){this.model.get("active")?this.$el.addClass(this.activeCls):this.$el.removeClass(this.activeCls)},clicked:function(t){this.model.get("bntsVis")||this.model.get("disable")||this.toogleActive()},toogleActive:function(){var t=this.model.get("active");this.model.set("active",!t);this.em.get("Commands").get("select-comp");t?this.model.get("runDefaultCommand")&&this.em.runDefault():this.model.get("stopDefaultCommand")&&this.em.stopDefault()},render:function(){var t=this.model.get("label"),e=this.$el;return this.updateAttributes(),e.attr("class",this.className),t&&e.append(t),this}})},function(t,e,n){"use strict";var i=n(0),r=n(31);t.exports=i.View.extend({initialize:function(t){this.opt=t||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"";var e=this.collection;this.listenTo(e,"add",this.addTo),this.listenTo(e,"reset",this.render),this.listenTo(e,"remove",this.onRemove),this.className=this.pfx+"panels"},onRemove:function(t){var e=t.view;e&&e.remove()},addTo:function(t){this.addToCollection(t)},addToCollection:function(t,e){var n=e||null,i=this.config,o=t.get("el"),s=new r({el:o,model:t,config:i}),a=s.render().el,l=t.get("appendTo");if(o);else if(l){var c=document.querySelector(l);c.appendChild(a)}else n?n.appendChild(a):this.$el.append(a);return s.initResize(),a},render:function(){var t=this,e=this.$el,n=document.createDocumentFragment();return e.empty(),this.collection.each(function(e){return t.addToCollection(e,n)}),e.append(n),e.attr("class",this.className),this}})},function(t,e,n){"use strict";var i=n(118),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(2);t.exports=function(){var t={},e=n(119),i=void 0,s=void 0,a=void 0,l=void 0,c=function(){var t=i.style;t.top="-100px",t.left="-100px",t.display="none"};return{customRte:null,name:"RichTextEditor",init:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=n;for(var r in e)r in t||(t[r]=e[r]);var a=t.pStylePrefix;return a&&(t.stylePrefix=a+t.stylePrefix),this.pfx=t.stylePrefix,s=t.actions||[],i=document.createElement("div"),i.className=a+"rte-toolbar "+a+"one-bg",l=this.initRte(document.createElement("div")),(0,o.on)(i,"mousedown",function(t){return t.stopPropagation()}),this},postRender:function(t){var e=t.model.get("Canvas");i.style.pointerEvents="all",c(),e.getToolsEl().appendChild(i)},initRte:function(e){var n=this.pfx,o=i,s=this.actionbar,a=this.actions||t.actions,c={actionbar:n+"actionbar",button:n+"action",active:n+"active"},u=new r.default({el:e,classes:c,actions:a,actionbar:s,actionbarContainer:o});return l&&l.setEl(e),u.actionbar&&(this.actionbar=u.actionbar),u.actions&&(this.actions=u.actions),u},add:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.name=t,l.addAction(e,{sync:1})},get:function(t){var e=void 0;return l.getActions().forEach(function(n){n.name==t&&(e=n)}),e},getAll:function(){return l.getActions()},remove:function(t){var e=this.getAll(),n=this.get(t);if(n){var i=n.btn,r=e.indexOf(n);i.parentNode.removeChild(i),e.splice(r,1)}return n},getToolbarEl:function(){return i},udpatePosition:function(){var e=t.em.get("Canvas"),n=e.getTargetToElementDim(i,a,{event:"rteToolbarPosUpdate"});if(n){t.adjustToolbar&&n.top<=n.canvasTop&&(n.top=n.elementTop+n.elementHeight);var r=i.style;r.top=n.top+"px",r.left=n.left+"px"}},enable:function(e,n){a=e.el;var r=t.em,o=e.getChildrenContainer(),s=this.customRte;if(i.style.display="",n=s?s.enable(o,n):this.initRte(o).enable(),r){setTimeout(this.udpatePosition.bind(this),0);var l="change:canvasOffset canvasScroll";r.off(l,this.udpatePosition,this),r.on(l,this.udpatePosition,this),r.trigger("rte:enable",e,n)}return n},disable:function(e,n){var i=t.em,r=this.customRte,o=e.getChildrenContainer();r?r.disable(o,n):n&&n.disable(),c(),i&&i.trigger("rte:disable",e,n)}}}},function(t,e,n){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;eB",attributes:{title:"Bold"},result:function(t){return t.exec("bold")}},italic:{name:"italic",icon:"I",attributes:{title:"Italic"},result:function(t){return t.exec("italic")}},underline:{name:"underline",icon:"U",attributes:{title:"Underline"},result:function(t){return t.exec("underline")}},strikethrough:{name:"strikethrough",icon:"S",attributes:{title:"Strike-through"},result:function(t){return t.exec("strikeThrough")}},link:{icon:'',name:"link",attributes:{style:"font-size:1.4rem;padding:0 4px 2px;",title:"Link"},result:function(t){return t.insertHTML(''+t.selection()+"")}}},c=function(){function t(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,t);var o=n.el;if(o[a])return o[a];o[a]=this,this.setEl(o),this.updateActiveActions=this.updateActiveActions.bind(this);var s=n.actions||[];s.forEach(function(t,e){"string"==typeof t?t=l[t]:l[t.name]&&(t=r({},l[t.name],t)),s[e]=t});var c=s.length?s:Object.keys(l).map(function(t){return l[t]});n.classes=r({actionbar:"actionbar",button:"action",active:"active"},n.classes);var u=n.classes,h=n.actionbar;if(this.actionbar=h,this.settings=n,this.classes=u,this.actions=c,!h){var d=n.actionbarContainer;h=document.createElement("div"),h.className=u.actionbar,d.appendChild(h),this.actionbar=h,c.forEach(function(t){return e.addAction(t)})}return n.styleWithCSS&&this.exec("styleWithCSS"),this.syncActions(),this}return o(t,[{key:"setEl",value:function(t){this.el=t,this.doc=t.ownerDocument}},{key:"updateActiveActions",value:function(){var t=this;this.getActions().forEach(function(e){var n=e.btn,i=e.update,r=t.classes.active,o=e.name,s=t.doc;n.className=n.className.replace(r,"").trim(),s.queryCommandSupported(o)&&s.queryCommandState(o)&&(n.className+=" "+r),i&&i(t,e)})}},{key:"enable",value:function(){return this.enabled?this:(this.actionbarEl().style.display="",this.el.contentEditable=!0,(0,s.on)(this.el,"mouseup keyup",this.updateActiveActions),this.syncActions(),this.updateActiveActions(),this.el.focus(),this.enabled=1,this)}},{key:"disable",value:function(){return this.actionbarEl().style.display="none",this.el.contentEditable=!1,(0,s.off)(this.el,"mouseup keyup",this.updateActiveActions),this.enabled=0,this}},{key:"syncActions",value:function(){var t=this;this.getActions().forEach(function(e){var n=e.event||"click";e.btn["on"+n]=function(n){e.result(t,e),t.updateActiveActions()}})}},{key:"addAction",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.sync,i=document.createElement("span"),r=t.icon,o=t.attributes||{};i.className=this.classes.button,t.btn=i;for(var s in o)i.setAttribute(s,o[s]);"string"==typeof r?i.innerHTML=r:i.appendChild(r),this.actionbarEl().appendChild(i),n&&(this.actions.push(t),this.syncActions())}},{key:"getActions",value:function(){return this.actions}},{key:"selection",value:function(){return this.doc.getSelection()}},{key:"exec",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.doc.execCommand(t,!1,e)}},{key:"actionbarEl",value:function(){return this.actionbar}},{key:"insertHTML",value:function(t){var e=void 0,n=this.doc,i=n.getSelection();if(i&&i.rangeCount){var r=n.createElement("div"),o=i.getRangeAt(0);o.deleteContents(),r.innerHTML=t,Array.prototype.slice.call(r.childNodes).forEach(function(t){o.insertNode(t),e=t}),i.removeAllRanges(),i.addRange(o),this.el.focus()}}}]),t}();e.default=c},function(t,e,n){"use strict";t.exports={stylePrefix:"rte-",adjustToolbar:1,actions:["bold","italic","underline","strikethrough","link"]}},function(t,e,n){"use strict";t.exports={stylePrefix:"sm-",sectors:[],appendTo:"",textNoElement:"Select an element before using Style Manager",hideNotStylable:!0,highlightChanged:!0,highlightComputed:!0,showComputed:!0,clearProperties:0,avoidComputed:["width","height"]}},function(t,e,n){"use strict";var i=n(122);t.exports=n(0).Collection.extend({model:i})},function(t,e,n){"use strict";var i=n(1),r=n(0),o=n(12),s=n(131);t.exports=r.Model.extend({defaults:{id:"",name:"",open:!0,buildProps:"",extendBuilded:1,properties:[]},initialize:function(t){var e=t||{},n=[],i=this.buildProperties(e.buildProps);!this.get("id")&&this.set("id",this.get("name")),n=i?this.extendProperties(i):this.get("properties");var r=new o(n);r.sector=this,this.set("properties",r)},extendProperties:function(t,e,n){for(var r=t.length,o=e||this.get("properties"),s=this.get("extendBuilded"),a=[],l=0,c=o.length;l')}else{o.push(t("
    ").append(t('').attr("title",r.noColorSelectedText)).html())}}return"
    "+o.join("")+"
    "}function r(){for(var t=0;t1&&(delete window.localStorage[B],t.each(e,function(t,e){p(e)}))}catch(t){}try{vt=window.localStorage[B].split(";")}catch(t){}}}function p(e){if($){var n=st(e).toRgbString();if(!gt[n]&&-1===t.inArray(n,vt))for(vt.push(n);vt.length>mt;)vt.shift();if(B&&window.localStorage)try{window.localStorage[B]=vt.join(";")}catch(t){}}}function g(){var t=[];if(V.showPalette)for(var e=0;eMath.abs(e-r);bt=o?"x":"y"}}else bt=null;var s=!bt||"x"===bt,a=!bt||"y"===bt;s&&(ut=parseFloat(t/tt)),a&&(ht=parseFloat((et-e)/et)),Yt=!1,V.showAlpha||(dt=1),P()},y,b),Ut?(M(Ut),L(),Kt=V.preferredFormat||st(Ut).format,p(Ut)):L(),j&&C();var i=G?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Nt.delegate(".sp-thumb-el",i,e),Dt.delegate(".sp-thumb-el:nth-child(1)",i,{ignore:!0},e)}();var Jt={show:C,hide:T,toggle:w,reflow:D,option:F,enable:R,disable:z,offset:H,set:function(t){M(t),N()},get:A,destroy:I,container:kt};return Jt.id=K.push(Jt)-1,Jt}function a(e,n){var i=e.outerWidth(),r=e.outerHeight(),o=n.outerHeight(),s=e[0].ownerDocument,a=s.documentElement,l=a.clientWidth,c=a.clientHeight,u=t(s).scrollLeft(),h=t(s).scrollTop(),d=l+u,f=c+h,p=n.offset();return p.top+=o,p.left-=Math.min(p.left,p.left+i>d&&d>i?Math.abs(p.left+i-d):0),p.top-=Math.min(p.top,p.top+r>f&&f>r?Math.abs(r+o-0):0),p}function l(){}function c(t){t.stopPropagation()}function u(t,e){var n=Array.prototype.slice,i=n.call(arguments,2);return function(){return t.apply(e,i.concat(n.call(arguments)))}}function h(e,n,i,r){function o(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}function s(t){if(u){if(G&&c.documentMode<9&&!t.button)return l();var i=t.originalEvent&&t.originalEvent.touches&&t.originalEvent.touches[0],r=i&&i.pageX||t.pageX,s=i&&i.pageY||t.pageY,a=Math.max(0,Math.min(r-h.left,f)),g=Math.max(0,Math.min(s-h.top,d));p&&o(t),n.apply(e,[a,g,t])}}function a(n){(n.which?3==n.which:2==n.button)||u||!1!==i.apply(e,arguments)&&(u=!0,d=t(e).height(),f=t(e).width(),h=t(e).offset(),t(c).bind(g),t(c.body).addClass("sp-dragging"),s(n),o(n))}function l(){u&&(t(c).unbind(g),t(c.body).removeClass("sp-dragging"),setTimeout(function(){r.apply(e,arguments)},0)),u=!1}n=n||function(){},i=i||function(){},r=r||function(){};var c=document,u=!1,h={},d=0,f=0,p="ontouchstart"in window,g={};g.selectstart=o,g.dragstart=o,g["touchmove mousemove"]=s,g["touchend mouseup"]=l,t(e).bind("touchstart mousedown",a)}function d(t,e,n){var i;return function(){var r=this,o=arguments,s=function(){i=null,t.apply(r,o)};n&&clearTimeout(i),!n&&i||(i=setTimeout(s,e))}}function f(){return t.fn.spectrum.inputTypeColorSupport()}function p(t){var e={r:0,g:0,b:0},n=1,r=!1,o=!1;return"string"==typeof t&&(t=U(t)),"object"==(void 0===t?"undefined":i(t))&&(t.hasOwnProperty("r")&&t.hasOwnProperty("g")&&t.hasOwnProperty("b")?(e=g(t.r,t.g,t.b),r=!0,o="%"===String(t.r).substr(-1)?"prgb":"rgb"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("v")?(t.s=$(t.s),t.v=$(t.v),e=b(t.h,t.s,t.v),r=!0,o="hsv"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("l")&&(t.s=$(t.s),t.l=$(t.l),e=m(t.h,t.s,t.l),r=!0,o="hsl"),t.hasOwnProperty("a")&&(n=t.a)),n=I(n),{ok:r,format:t.format||o,r:it(255,rt(e.r,0)),g:it(255,rt(e.g,0)),b:it(255,rt(e.b,0)),a:n}}function g(t,e,n){return{r:255*F(t,255),g:255*F(e,255),b:255*F(n,255)}}function v(t,e,n){t=F(t,255),e=F(e,255),n=F(n,255);var i,r,o=rt(t,e,n),s=it(t,e,n),a=(o+s)/2;if(o==s)i=r=0;else{var l=o-s;switch(r=a>.5?l/(2-o-s):l/(o+s),o){case t:i=(e-n)/l+(e1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}var r,o,s;if(t=F(t,360),e=F(e,100),n=F(n,100),0===e)r=o=s=n;else{var a=n<.5?n*(1+e):n+e-n*e,l=2*n-a;r=i(l,a,t+1/3),o=i(l,a,t),s=i(l,a,t-1/3)}return{r:255*r,g:255*o,b:255*s}}function y(t,e,n){t=F(t,255),e=F(e,255),n=F(n,255);var i,r,o=rt(t,e,n),s=it(t,e,n),a=o,l=o-s;if(r=0===o?0:l/o,o==s)i=0;else{switch(o){case t:i=(e-n)/l+(e>1)+720)%360;--e;)i.h=(i.h+r)%360,o.push(st(i));return o}function D(t,e){e=e||6;for(var n=st(t).toHsv(),i=n.h,r=n.s,o=n.v,s=[],a=1/e;e--;)s.push(st({h:i,s:r,v:o})),o=(o+a)%1;return s}function I(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function F(t,e){H(t)&&(t="100%");var n=V(t);return t=it(e,rt(0,parseFloat(t))),n&&(t=parseInt(t*e,10)/100),et.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function R(t){return it(1,rt(0,t))}function z(t){return parseInt(t,16)}function H(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)}function V(t){return"string"==typeof t&&-1!=t.indexOf("%")}function j(t){return 1==t.length?"0"+t:""+t}function $(t){return t<=1&&(t=100*t+"%"),t}function B(t){return Math.round(255*parseFloat(t)).toString(16)}function W(t){return z(t)/255}function U(t){t=t.replace(Z,"").replace(Q,"").toLowerCase();var e=!1;if(at[t])t=at[t],e=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};var n;return(n=ct.rgb.exec(t))?{r:n[1],g:n[2],b:n[3]}:(n=ct.rgba.exec(t))?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=ct.hsl.exec(t))?{h:n[1],s:n[2],l:n[3]}:(n=ct.hsla.exec(t))?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=ct.hsv.exec(t))?{h:n[1],s:n[2],v:n[3]}:(n=ct.hsva.exec(t))?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=ct.hex8.exec(t))?{a:W(n[1]),r:z(n[2]),g:z(n[3]),b:z(n[4]),format:e?"name":"hex8"}:(n=ct.hex6.exec(t))?{r:z(n[1]),g:z(n[2]),b:z(n[3]),format:e?"name":"hex"}:!!(n=ct.hex3.exec(t))&&{r:z(n[1]+""+n[1]),g:z(n[2]+""+n[2]),b:z(n[3]+""+n[3]),format:e?"name":"hex"}}var q={beforeShow:l,move:l,change:l,show:l,hide:l,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",togglePaletteMoreText:"more",togglePaletteLessText:"less",clearText:"Clear Color Selection",noColorSelectedText:"No Color Selected",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,offset:null},K=[],G=!!/msie/i.exec(window.navigator.userAgent),Y=function(){function t(t,e){return!!~(""+t).indexOf(e)}var e=document.createElement("div"),n=e.style;return n.cssText="background-color:rgba(0,0,0,.5)",t(n.backgroundColor,"rgba")||t(n.backgroundColor,"hsla")}(),X=["
    ","
    ","
    ","
    "].join(""),J=function(){var t="";if(G)for(var e=1;e<=6;e++)t+="
    ";return["
    ","
    ","
    ","
    ","","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ",t,"
    ","
    ","
    ","
    ","
    ","","
    ","
    ","
    ","","","
    ","
    ","
    "].join("")}();t.fn.spectrum=function(e,n){if("string"==typeof e){var i=this,r=Array.prototype.slice.call(arguments,1);return this.each(function(){var n=K[t(this).data("spectrum.id")];if(n){var o=n[e];if(!o)throw new Error("Spectrum: no such method: '"+e+"'");"get"==e?i=n.get():"container"==e?i=n.container:"option"==e?i=n.option.apply(n,r):"destroy"==e?(n.destroy(),t(this).removeData("spectrum.id")):o.apply(n,r)}}),i}return this.spectrum("destroy").each(function(){var n=t.extend({},e,t(this).data()),i=s(this,n);t(this).data("spectrum.id",i.id)})},t.fn.spectrum.load=!0,t.fn.spectrum.loadOpts={},t.fn.spectrum.draggable=h,t.fn.spectrum.defaults=q,t.fn.spectrum.inputTypeColorSupport=function e(){if(void 0===e._cachedResult){var n=t("")[0];e._cachedResult="color"===n.type&&""!==n.value}return e._cachedResult},t.spectrum={},t.spectrum.localization={},t.spectrum.palettes={},t.fn.spectrum.processNativeColorInputs=function(){var e=t("input[type=color]");e.length&&!f()&&e.spectrum({preferredFormat:"hex6"})};var Z=/^[\s,#]+/,Q=/\s+$/,tt=0,et=Math,nt=et.round,it=et.min,rt=et.max,ot=et.random,st=function t(e,n){if(e=e||"",n=n||{},e instanceof t)return e;if(!(this instanceof t))return new t(e,n);var i=p(e);this._originalInput=e,this._r=i.r,this._g=i.g,this._b=i.b,this._a=i.a,this._roundA=nt(100*this._a)/100,this._format=n.format||i.format,this._gradientType=n.gradientType,this._r<1&&(this._r=nt(this._r)),this._g<1&&(this._g=nt(this._g)),this._b<1&&(this._b=nt(this._b)),this._ok=i.ok,this._tc_id=tt++};st.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},setAlpha:function(t){return this._a=I(t),this._roundA=nt(100*this._a)/100,this},toHsv:function(){var t=y(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=y(this._r,this._g,this._b),e=nt(360*t.h),n=nt(100*t.s),i=nt(100*t.v);return 1==this._a?"hsv("+e+", "+n+"%, "+i+"%)":"hsva("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHsl:function(){var t=v(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=v(this._r,this._g,this._b),e=nt(360*t.h),n=nt(100*t.s),i=nt(100*t.l);return 1==this._a?"hsl("+e+", "+n+"%, "+i+"%)":"hsla("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHex:function(t){return x(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(){return w(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:nt(this._r),g:nt(this._g),b:nt(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+nt(this._r)+", "+nt(this._g)+", "+nt(this._b)+")":"rgba("+nt(this._r)+", "+nt(this._g)+", "+nt(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:nt(100*F(this._r,255))+"%",g:nt(100*F(this._g,255))+"%",b:nt(100*F(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+nt(100*F(this._r,255))+"%, "+nt(100*F(this._g,255))+"%, "+nt(100*F(this._b,255))+"%)":"rgba("+nt(100*F(this._r,255))+"%, "+nt(100*F(this._g,255))+"%, "+nt(100*F(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(lt[x(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+w(this._r,this._g,this._b,this._a),n=e,i=this._gradientType?"GradientType = 1, ":"";if(t){n=st(t).toHex8String()}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+e+",endColorstr="+n+")"},toString:function(t){var e=!!t;t=t||this._format;var n=!1,i=this._a<1&&this._a>=0;return e||!i||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"name"!==t?("rgb"===t&&(n=this.toRgbString()),"prgb"===t&&(n=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(n=this.toHexString()),"hex3"===t&&(n=this.toHexString(!0)),"hex8"===t&&(n=this.toHex8String()),"name"===t&&(n=this.toName()),"hsl"===t&&(n=this.toHslString()),"hsv"===t&&(n=this.toHsvString()),n||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},_applyModification:function(t,e){var n=t.apply(null,[this].concat([].slice.call(e)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(T,arguments)},brighten:function(){return this._applyModification(E,arguments)},darken:function(){return this._applyModification(M,arguments)},desaturate:function(){return this._applyModification(C,arguments)},saturate:function(){return this._applyModification(k,arguments)},greyscale:function(){return this._applyModification(S,arguments)},spin:function(){return this._applyModification(A,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(N,arguments)},complement:function(){return this._applyCombination(O,arguments)},monochromatic:function(){return this._applyCombination(D,arguments)},splitcomplement:function(){return this._applyCombination(_,arguments)},triad:function(){return this._applyCombination(P,arguments)},tetrad:function(){return this._applyCombination(L,arguments)}},st.fromRatio=function(t,e){if("object"==(void 0===t?"undefined":i(t))){var n={};for(var r in t)t.hasOwnProperty(r)&&(n[r]="a"===r?t[r]:$(t[r]));t=n}return st(t,e)},st.equals=function(t,e){return!(!t||!e)&&st(t).toRgbString()==st(e).toRgbString()},st.random=function(){return st.fromRatio({r:ot(),g:ot(),b:ot()})},st.mix=function(t,e,n){n=0===n?0:n||50;var i,r=st(t).toRgb(),o=st(e).toRgb(),s=n/100,a=2*s-1,l=o.a-r.a;i=a*l==-1?a:(a+l)/(1+a*l),i=(i+1)/2;var c=1-i,u={r:o.r*i+r.r*c,g:o.g*i+r.g*c,b:o.b*i+r.b*c,a:o.a*s+r.a*(1-s)};return st(u)},st.readability=function(t,e){var n=st(t),i=st(e),r=n.toRgb(),o=i.toRgb(),s=n.getBrightness(),a=i.getBrightness(),l=Math.max(r.r,o.r)-Math.min(r.r,o.r)+Math.max(r.g,o.g)-Math.min(r.g,o.g)+Math.max(r.b,o.b)-Math.min(r.b,o.b);return{brightness:Math.abs(s-a),color:l}},st.isReadable=function(t,e){var n=st.readability(t,e);return n.brightness>125&&n.color>500},st.mostReadable=function(t,e){for(var n=null,i=0,r=!1,o=0;o125&&s.color>500,l=s.brightness/125*3+s.color/500;(a&&!r||a&&r&&l>i||!a&&!r&&l>i)&&(r=a,i=l,n=st(e[o]))}return n};var at=st.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},lt=st.hexNames=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[t[n]]=n);return e}(at),ct=function(){var t="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",e="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?",n="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?";return{rgb:new RegExp("rgb"+e),rgba:new RegExp("rgba"+n),hsl:new RegExp("hsl"+e),hsla:new RegExp("hsla"+n),hsv:new RegExp("hsv"+e),hsva:new RegExp("hsva"+n),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();window.tinycolor=st,t(function(){t.fn.spectrum.load&&t.fn.spectrum.processNativeColorInputs()})}},function(t,e,n){"use strict";var i=n(0),r=n(128);t.exports=i.View.extend({initialize:function(t){this.config=t.config||{},this.stackModel=t.stackModel,this.preview=t.preview,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.propsConfig=t.propsConfig;var e=this.pfx,n=this.ppfx,i=this.collection;this.className=e+"layers "+n+"field",this.listenTo(i,"add",this.addTo),this.listenTo(i,"deselectAll",this.deselectAll),this.listenTo(i,"reset",this.render);var r=this.config.em||"",o=r?r.get("Utils"):"";this.sorter=o?new o.Sorter({container:this.el,ignoreViewChildren:1,containerSel:"."+e+"layers",itemSel:"."+e+"layer",pfx:this.config.pStylePrefix}):"",i.view=this,this.$el.data("model",i),this.$el.data("collection",i)},addTo:function(t){var e=this.collection.indexOf(t);this.addToCollection(t,null,e)},addToCollection:function(t,e,n){var i=e||null,o=this.stackModel,s=this.config,a=this.sorter,l=this.propsConfig;void 0!==this.preview&&t.set("preview",this.preview);var c=new r({model:t,config:s,sorter:a,stackModel:o,propsConfig:l}),u=c.render().el;if(i)i.appendChild(u);else if(void 0!==n){var h="before";this.$el.children().length==n&&(n--,h="after"),n<0?this.$el.append(u):this.$el.children().eq(n)[h](u)}else this.$el.append(u);return u},deselectAll:function(){this.$el.find("."+this.pfx+"layer").removeClass(this.pfx+"active")},render:function(){var t=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(e){this.addToCollection(e,t)},this),this.$el.append(t),this.$el.attr("class",this.className),this.sorter&&(this.sorter.plh=null),this}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=r.default.View.extend({events:{click:"active","click [data-close-layer]":"remove","mousedown [data-move-layer]":"initSorter"},template:function(t){var e=this.pfx;return'\n
    \n \n
    \n
    Layer '+t.get("index")+'
    \n
    \n \t
    \n
    \n
    \n ⨯\n
    \n
    \n
    \n '},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.model;this.stackModel=t.stackModel||{},this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.sorter=t.sorter||null,this.propsConfig=t.propsConfig||{},this.customPreview=t.onPreview,this.listenTo(e,"destroy remove",this.remove),this.listenTo(e,"change:active",this.updateVisibility),this.listenTo(e.get("properties"),"change",this.updatePreview),e.get("preview")||this.$el.addClass(this.pfx+"no-preview"),e.view=this,e.set({droppable:0,draggable:1}),this.$el.data("model",e)},initSorter:function(t){this.sorter&&this.sorter.startSort(this.el)},remove:function(t){t&&t.stopPropagation&&t.stopPropagation();var e=this.model,n=e.collection,i=this.stackModel;r.default.View.prototype.remove.apply(this,arguments),n.contains(e)&&n.remove(e),i&&i.set&&(i.set({stackIndex:null},{silent:!0}),i.trigger("updateValue"))},onPreview:function(t){var e=t.split(" "),n=[];return this.model.get("properties").each(function(t,i){var r=e[i]||"";if(r&&"integer"==t.get("type")){var o=parseInt(r,10),s=r.replace(o,"");o=isNaN(o)?0:o,o=o>3?3:o,o=o<-3?-3:o,r=o+s}n.push(r)}),n.join(" ")},updatePreview:function(){var t=this.stackModel,e=this.customPreview,n=this.getPreviewEl(),i=this.model.getFullValue(),r=e?e(i):this.onPreview(i);r&&t&&n&&(n.style[t.get("property")]=r)},getPropertiesWrapper:function(){return this.propsWrapEl||(this.propsWrapEl=this.el.querySelector("[data-properties]")),this.propsWrapEl},getPreviewEl:function(){return this.previewEl||(this.previewEl=this.el.querySelector("[data-preview]")),this.previewEl},active:function(){var t=this.model,e=t.collection;e.active(e.indexOf(t))},updateVisibility:function(){var t=this.pfx,e=this.getPropertiesWrapper(),n=this.model.get("active");e.style.display=n?"":"none",this.$el[n?"addClass":"removeClass"](t+"active")},render:function(){var t=n(14),e=this.propsConfig,i=this.pfx+"layer",r=this.model,o=this.el,s=new t({collection:r.get("properties"),config:this.config,target:e.target,customValue:e.customValue,propTarget:e.propTarget,onChange:e.onChange}).render().el;return o.innerHTML=this.template(r),o.className=i,this.getPropertiesWrapper().appendChild(s),this.updateVisibility(),this.updatePreview(),this}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e\n \n
    \n '},getSliderEl:function(){return this.slider||(this.slider=this.el.querySelector("input[type=range]")),this.slider},inputValueChanged:function(){var t=this.model,e=t.get("step");this.getInputEl().value=this.getSliderEl().value;var n=this.getInputValue()-e;t.set("value",n,{avoidStore:1}).set("value",n+e),this.elementUpdated()},inputValueChangedSoft:function(){this.getInputEl().value=this.getSliderEl().value,this.model.set("value",this.getInputValue(),{avoidStore:1}),this.elementUpdated()},setValue:function(t){this.getSliderEl().value=t,this.inputInst.setValue(t,{silent:1})},onRender:function(){r.prototype.onRender.apply(this,arguments),this.model.get("showInput")||(this.inputInst.el.style.display="none")}})},function(t,e,n){"use strict";n(0);t.exports=function(){return{build:function(t){var e=[];"string"==typeof t&&(t=[t]);for(var n=0,i=t.length;n0&&void 0!==arguments[0]?arguments[0]:{},e=t.config||{};this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.target=t.target||{},this.config=e;var n={};(0,s.extend)(n,o.default.Events);var r=document.body,a=document.createElement("el-"+(new Date).getTime());r.appendChild(a),n.computedDefault=i({},window.getComputedStyle(a)),r.removeChild(a),this.propTarget=n;var l=this.collection;this.listenTo(l,"add",this.addTo),this.listenTo(l,"reset",this.render),this.listenTo(this.target,"component:toggled component:update:classes component:update:state change:device",this.targetUpdated)},addTo:function(t){this.addToCollection(t)},targetUpdated:function(){var t=this.target,e=this.propTarget,n=t.getSelected();if(n){var i=t.get("Config"),r=i.devicePreviewMode?"":n.get("state"),o=n.getEl();if(e.helper=null,o){var s=r?":"+r:null;e.computed=window.getComputedStyle(o,s)}n=t.get("StyleManager").getModelToStyle(n),r&&function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.get("CssComposer"),r=i.getAll(),o=i.getClassRule("hc-state");o?(r.remove(o),r.add(o)):o=i.setClassRule("hc-state"),o.set("important",1),o.setStyle(n),e.helper=o}(n.getStyle()),e.model=n,e.trigger("update")}},addToCollection:function(t,e){var n=e||null,i=new a({model:t,id:this.pfx+t.get("name").replace(" ","_").toLowerCase(),name:t.get("name"),properties:t.get("properties"),target:this.target,propTarget:this.propTarget,config:this.config}),r=i.render().el;return n?n.appendChild(r):this.$el.append(r),r},render:function(){var t=this,e=document.createDocumentFragment(),n=this.$el,i=this.pfx,r=this.ppfx;return n.empty(),this.collection.each(function(n){return t.addToCollection(n,e)}),n.append(e),n.addClass(i+"sectors "+r+"one-bg "+r+"two-color"),this}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(14);t.exports=a.default.View.extend({template:o.default.template('\n
    \n \n <%= label %>\n
    '),events:{"click [data-sector-title]":"toggle"},initialize:function(t){this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.target=t.target||{},this.propTarget=t.propTarget||{},this.caretR="fa-caret-right",this.caretD="fa-caret-down";var e=this.model;this.listenTo(e,"change:open",this.updateOpen),this.listenTo(e,"updateVisibility",this.updateVisibility),this.listenTo(e,"destroy remove",this.remove)},updateVisibility:function(){var t;this.model.get("properties").each(function(e){e.get("visible")&&(t=1)}),this.el.style.display=t?"block":"none"},updateOpen:function(){this.model.get("open")?this.show():this.hide()},show:function(){this.$el.addClass(this.pfx+"open"),this.getPropertiesEl().style.display="",this.$caret.removeClass(this.caretR).addClass(this.caretD)},hide:function(){this.$el.removeClass(this.pfx+"open"),this.getPropertiesEl().style.display="none",this.$caret.removeClass(this.caretD).addClass(this.caretR)},getPropertiesEl:function(){return this.$el.find("."+this.pfx+"properties").get(0)},toggle:function(t){var e=this.model.get("open")?0:1;this.model.set("open",e)},render:function(){return this.$el.html(this.template({pfx:this.pfx,label:this.model.get("name")})),this.$caret=this.$el.find("#"+this.pfx+"caret"),this.renderProperties(),this.$el.attr("class",this.pfx+"sector no-select"),this.updateOpen(),this},renderProperties:function(){var t=this.model.get("properties");if(t){var e=new l({collection:t,target:this.target,propTarget:this.propTarget,config:this.config});this.$el.append(e.render().el)}}})},function(t,e,n){"use strict";t.exports=function(){var t={},e=n(135),i=n(136),r=n(139),o=n(46),s=void 0,a=void 0,l=void 0;return{name:"AssetManager",storageKey:"assets",getConfig:function(){return t},init:function(n){var c=this;t=n||{};for(var u in e)u in t||(t[u]=e[u]);var h=t.pStylePrefix,d=t.em;h&&(t.stylePrefix=h+t.stylePrefix),s=new i([]);var f={collection:new i([]),globalCollection:s,config:t};return l=new o(f),f.fu=l,a=new r(f),s.listenTo(s,"add",function(t){c.getAllVisible().add(t),d&&d.trigger("asset:add",t)}),s.listenTo(s,"remove",function(t){c.getAllVisible().remove(t),d&&d.trigger("asset:remove",t)}),this},add:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return void 0===e.at&&(e.at=0),s.add(t,e)},get:function(t){return s.where({src:t})[0]},getAll:function(){return s},getAllVisible:function(){return a.collection},remove:function(t){var e=this.get(t);return this.getAll().remove(e),this},store:function(e){var n={},i=JSON.stringify(this.getAll().toJSON());return n[this.storageKey]=i,!e&&t.stm&&t.stm.store(n),n},load:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.storageKey,n=t[e]||[];if("string"==typeof n)try{n=JSON.parse(t[e])}catch(t){}return n&&n.length&&this.getAll().reset(n),n},getContainer:function(){return a.el},getAssetsEl:function(){return a.el.querySelector("[data-el=assets]")},render:function(t){var e=t||this.getAll().models;return a.rendered||a.render(),a.collection.reset(e),this.getContainer()},addType:function(t,e){this.getAll().addType(t,e)},getType:function(t){return this.getAll().getType(t)},getTypes:function(){return this.getAll().getTypes()},AssetsView:function(){return a},FileUploader:function(){return l},onLoad:function(){this.getAll().reset(t.assets)},postRender:function(e){t.dropzone&&l.initDropzone(e)},setTarget:function(t){a.collection.target=t},onSelect:function(t){a.collection.onSelect=t},onClick:function(e){t.onClick=e},onDblClick:function(e){t.onDblClick=e}}}},function(t,e,n){"use strict";t.exports={assets:[],noAssets:"",stylePrefix:"am-",upload:0,uploadName:"files",headers:{},params:{},autoAdd:1,uploadText:"Drop files here or click to upload",addBtnText:"Add image",uploadFile:"",handleAdd:"",dropzone:0,openAssetsOnDrop:1,dropzoneContent:"",modalTitle:"Select Image",inputPlaceholder:"http://path/to/the/image.jpg"}},function(t,e,n){"use strict";var i=n(33),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=n(0).Collection.extend(r.default).extend({types:[{id:"image",model:n(137),view:n(44),isType:function(t){return"string"==typeof t?{type:"image",src:t}:t}}]})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e\n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n '},initialize:function(t){this.options=t,this.config=t.config,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"";var e=this.collection;this.listenTo(e,"reset",this.renderAssets),this.listenTo(e,"add",this.addToAsset),this.listenTo(e,"remove",this.removedAsset),this.listenTo(e,"deselectAll",this.deselectAll)},handleSubmit:function(t){t.preventDefault();var e=this.getAddInput(),n=e.value.trim(),i=this.config.handleAdd;n&&(e.value="",this.getAssetsEl().scrollTop=0,i?i.bind(this)(n):this.options.globalCollection.add(n,{at:0}))},getAssetsEl:function(){return this.el.querySelector("."+this.pfx+"assets")},getAddInput:function(){return this.inputUrl&&this.inputUrl.value||(this.inputUrl=this.el.querySelector("."+this.pfx+"add-asset input")),this.inputUrl},removedAsset:function(t){this.collection.length||this.toggleNoAssets()},addToAsset:function(t){1==this.collection.length&&this.toggleNoAssets(1),this.addAsset(t)},addAsset:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=e,i=this.collection,r=this.config,o=new t.typeView({model:t,collection:i,config:r}).render().el;if(n)n.appendChild(o);else{var s=this.getAssetsEl();s&&s.insertBefore(o,s.firstChild)}return o},toggleNoAssets:function(t){var e=this.$el.find("."+this.pfx+"assets");if(t)e.empty();else{var n=this.config.noAssets;n&&e.append(n)}},deselectAll:function(){var t=this.pfx;this.$el.find("."+t+"highlight").removeClass(t+"highlight")},renderAssets:function(){var t=this,e=document.createDocumentFragment(),n=this.$el.find("."+this.pfx+"assets");n.empty(),this.toggleNoAssets(this.collection.length),this.collection.each(function(n){return t.addAsset(n,e)}),n.append(e)},render:function(){var t=this.options.fu.render().el;return this.$el.empty(),this.$el.append(t).append(this.template(this)),this.el.className=this.ppfx+"asset-manager",this.renderAssets(),this.rendered=1,this}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},n="change:style",i=o.get("UndoManager");i&&i.add(t);var r=o.handleUpdates.bind(o);o.stopListening(t,n,r),o.listenTo(t,n,r),!e.avoidStore&&r("","",e)},load:function(e){var n=e||"";!n&&s.stm&&(n=s.em.getCacheLoad());var i=n.styles||"";if(n.styles)try{i=JSON.parse(n.styles)}catch(t){}else n.css&&(i=s.em.get("Parser").parseCss(n.css));return(0,r.isArray)(i)?i.length&&t.reset(i):i&&t.reset(i),i},store:function(e){if(s.stm){var n={},i=this.storageKey();return i.indexOf("css")>=0&&(n.css=s.em.getCss()),i.indexOf("styles")>=0&&(n.styles=JSON.stringify(t)),e||s.stm.store(n),n}},add:function(e,n,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=n||"",c=r||"",u=i({},o),h=this.get(e,a,c,u);return h&&h.config&&!h.config.atRuleType?h:(u.state=a,u.mediaText=c,u.selectors="",h=new l(u,s),h.get("selectors").add(e),t.add(h),h)},get:function(e,n,i,r){var o=null;return t.each(function(t){o||t.compare(e,n,i,r)&&(o=t)}),o},getAll:function(){return t},clear:function(){return this.getAll().reset(),this},addCollection:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=t instanceof Array?t:[t],o=0,a=r.length;o1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.state||"",r=n.mediaText||o.getCurrentMedia(),s=o.get("SelectorManager"),a=s.add({name:t,type:d.TYPE_ID}),l=this.add(a,i,r);return l.setStyle(e,n),l},getIdRule:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.state||"",i=e.mediaText||o.getCurrentMedia(),r=o.get("SelectorManager").get(t,d.TYPE_ID);return r&&this.get(r,n,i)},setClassRule:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.state||"",r=n.mediaText||o.getCurrentMedia(),s=o.get("SelectorManager"),a=s.add({name:t,type:d.TYPE_CLASS}),l=this.add(a,i,r);return l.setStyle(e,n),l},getClassRule:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.state||"",i=e.mediaText||o.getCurrentMedia(),r=o.get("SelectorManager").get(t,d.TYPE_CLASS);return r&&this.get(r,n,i)},render:function(){return e.render().el}}}},function(t,e,n){"use strict";t.exports={stylePrefix:"css-",staticRules:"",rules:[]}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(47);t.exports=r.default.Collection.extend({initialize:function(t,e){e&&e.em&&(this.editor=e.em),this.model=function(t,n){return!n.em&&e&&e.em&&(n.em=e.em),new o(t,n)}},add:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof t&&(t=this.editor.get("Parser").parseCss(t)),e.em=this.editor,r.default.Collection.prototype.add.apply(this,[t,e])}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(49),s=n(144),a=r.default.$,l=function(t,e){return t+(e?"-"+e.replace("%","pc"):"")};t.exports=r.default.View.extend({initialize:function(t){var e=t.config||{};this.atRules={},this.config=e,this.em=e.em,this.pfx=e.stylePrefix||"",this.className=this.pfx+"rules";var n=this.collection;this.listenTo(n,"add",this.addTo),this.listenTo(n,"reset",this.render)},addTo:function(t){this.addToCollection(t)},addToCollection:function(t,e){if(this.renderStarted){var n=e||null,i=this.config,r=void 0,a=void 0,c={model:t,config:i};if("keyframes"===t.get("atRuleType")){var u=t.getAtRule(),h=this.atRules[u];if(!h){var d=document.createElement("style");h=document.createTextNode(""),d.appendChild(document.createTextNode(u+"{")),d.appendChild(h),d.appendChild(document.createTextNode("}")),this.atRules[u]=h,r=d}a=new s(c),h.appendData(a.render().el.textContent)}else a=new o(c),r=a.render().el;var f=this.className,p=t.get("mediaText"),g=l(f),v=g;if(p&&(v=l(f,this.getMediaWidth(p))),r){var m=n||this.el,y=void 0;try{y=m.querySelector("#"+v)}catch(t){}y||(y=m.querySelector("#"+g)),y.appendChild(r)}return r}},getMediaWidth:function(t){return t&&t.replace("("+this.em.getConfig("mediaCondition")+": ","").replace(")","")},render:function(){var t=this;this.renderStarted=1,this.atRules={};var e=this.$el,n=document.createDocumentFragment(),i=this.className;return e.empty(),this.em.get("DeviceManager").getAll().map(function(t){return t.get("widthMedia")}).sort(function(t,e){return(e&&e.replace("px","")||Number.MAX_VALUE)-(t&&t.replace("px","")||Number.MAX_VALUE)}).forEach(function(t){a('
    ').appendTo(n)}),this.collection.each(function(e){return t.addToCollection(e,n)}),e.append(n),e.attr("class",i),this}})},function(t,e,n){"use strict";t.exports=n(49).extend({_createElement:function(t){return document.createTextNode("")},render:function(){var t=this.model,e=t.get("important");return this.el.textContent=t.getDeclaration({important:e}),this}})},function(t,e,n){"use strict";var i=n(1),r=n(146),o=n(147);t.exports=function(){var t={},e=void 0;return{TraitsView:o,name:"TraitManager",getConfig:function(){return t},init:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=n,(0,i.defaults)(t,r);var s=t.pStylePrefix;return s&&(t.stylePrefix=""+s+t.stylePrefix),e=new o({collection:[],editor:t.em,config:t}),this},postRender:function(){var t=this.getConfig().appendTo;if(t){((0,i.isElement)(t)?t:document.querySelector(t)).appendChild(this.render())}},getTraitsViewer:function(){return e},addType:function(t,n){var i=e.itemView;e.itemsView[t]=i.extend(n)},getType:function(t){return e.itemsView[t]},render:function(){return e.render().el}}}},function(t,e,n){"use strict";t.exports={stylePrefix:"trt-",appendTo:"",labelContainer:"Component settings",labelPlhText:"eg. Text here",labelPlhHref:"eg. https://google.com",optionsTarget:[{value:"",name:"This window"},{value:"_blank",name:"New window"}],textNoElement:"Select an element before using Trait Manager"}},function(t,e,n){"use strict";var i=n(50),r=n(9),o=n(148),s=n(149),a=n(150),l=n(151);t.exports=i.extend({itemView:r,itemsView:{text:r,number:a,select:o,checkbox:s,color:l},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.config||{};this.config=e,this.em=t.editor,this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.className=this.pfx+"traits";this.listenTo(this.em,"component:toggled",this.updatedCollection),this.updatedCollection()},updatedCollection:function(){var t=this.ppfx,e=this.em.getSelected();this.el.className=this.className+" "+t+"one-bg "+t+"two-color",e&&(this.collection=e.get("traits"),this.render())}})},function(t,e,n){"use strict";(function(e){var i=n(9),r=n(0).$;t.exports=i.extend({initialize:function(t){i.prototype.initialize.apply(this,arguments);var e=this.ppfx;this.tmpl='
    '},getInputEl:function(){if(!this.$input){var t=this.model,n=t.get("options")||[],i="",this.input=i,this.$input=r(this.input);var o=this.target,s=t.get("name"),a=t.get("value");if(t.get("changeProp"))a=a||o.get(s);else{a=o.get("attributes")[s]}a&&this.$input.val(a)}return this.$input.get(0)}})}).call(e,n(1))},function(t,e,n){"use strict";var i=n(9);t.exports=i.extend({initialize:function(t){i.prototype.initialize.apply(this,arguments);var e=this.ppfx+"chk-icon";this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().checked)},getInputEl:function(){var t;this.$input||(t=1);for(var e=arguments.length,n=Array(e),r=0;r2&&void 0!==arguments[2]?arguments[2]:{},r=t.components(),o=s.get("UndoManager"),a=s.handleUpdates.bind(s),l=this.handleChanges.bind(this),c=this.handleRemoves.bind(this);o&&o.add(t),o&&r&&o.add(r);[[t,"change:style change:content change:attributes change:src",a],[r,"add",l],[r,"remove",c],[t.get("classes"),"add remove",a]].forEach(function(t){s.stopListening(t[0],t[1],t[2]),s.listenTo(t[0],t[1],t[2])}),!i.avoidStore&&a("","",i),r.each(function(t){return n.handleChanges(t,e,i)})},handleRemoves:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};!n.avoidStore&&s.handleUpdates(t,e,n)},load:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e="";if(!t&&o.stm&&(t=o.em.getCacheLoad()),t.components)try{e=JSON.parse(t.components)}catch(t){}else t.html&&(e=t.html);var n=e&&e.constructor===Object;return(e&&e.length||n)&&(this.clear(),this.getComponents().reset(),n?this.getWrapper().set(e).initComponents().initClasses().loadTraits():this.getComponents().add(e)),e},store:function(t){if(o.stm){var e={},n=this.storageKey();if(n.indexOf("html")>=0&&(e.html=o.em.getHtml()),n.indexOf("components")>=0){var i=o.storeWrapper?this.getWrapper():this.getComponents();e.components=JSON.stringify(i)}return t||o.stm.store(e),e}},getComponent:function(){return t},getWrapper:function(){return this.getComponent()},getComponents:function(){return this.getWrapper().get("components")},addComponent:function(t){return this.getComponents().add(t)},render:function(){return e.render().el},clear:function(){return this.getComponents().reset(),this},setComponents:function(t){this.clear().addComponent(t)},addType:function(t,e){var n=this.getType(t);n?(n.model=e.model,n.view=e.view):(e.id=t,d.unshift(e))},getType:function(t){for(var e=d,n=0;n1&&void 0!==arguments[1]?arguments[1]:{};t&&(t.set({status:"selected"}),["component:selected","component:toggled"].forEach(function(i){return e.em.trigger(i,t,n)}))},selectRemove:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t){this.em;t.set({status:"",state:""}),["component:deselected","component:toggled"].forEach(function(i){return e.em.trigger(i,t,n)})}},componentHovered:function(){var t=o.em,e=t.get("componentHovered"),n=t.previous("componentHovered");n&&"hovered"==n.get("status")&&n.set({status:"",state:""}),e&&(0,r.isEmpty)(e.get("status"))&&e.set("status","hovered")}}}},function(t,e,n){"use strict";t.exports={stylePrefix:"comp-",wrapperId:"wrapper",wrapperName:"Body",wrapper:{removable:!1,copyable:!1,draggable:!1,components:[],traits:[],stylable:["background","background-color","background-image","background-repeat","background-attachment","background-position","background-size"]},components:[],imageCompClass:"fa fa-picture-o",oAssetsOnCreate:!0,storeWrapper:0,voidElements:["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"]}},function(t,e,n){"use strict";var i=n(1),r=n(0),o=n(155),s=n(156);t.exports=r.Collection.extend({model:o,initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.em=e.em||"",this.listenTo(this,"add",this.handleAdd)},handleAdd:function(t){var e=this.target;e&&(t.target=e)},setTarget:function(t){this.target=t},add:function(t,e){var n=this.em;if((0,i.isString)(t)||(0,i.isArray)(t)){var o=n&&n.get&&n.get("TraitManager"),a=o&&o.getConfig(),l=s(a);(0,i.isString)(t)&&(t=[t]);for(var c=0,u=t.length;c1&&void 0!==arguments[1]?arguments[1]:{},n=this.target,o=this.get("name");if(!(0,r.isUndefined)(t))if(this.get("changeProp"))n.set(o,t,e);else{var s=i({},n.get("attributes"));s[o]=t,n.set("attributes",s,e)}},setValueFromInput:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r={value:t};this.set(r,i({},n,{avoidStore:1})),e&&(this.set("value","",n),this.set(r,n))},getInitValue:function(){var t=this.target,e=this.get("name"),n=void 0;if(t){var i=t.get("attributes");n=this.get("changeProp")?t.get(e):i[e]}return n||this.get("value")||this.get("default")}})},function(t,e,n){"use strict";t.exports=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{build:function(e){var n=[];"string"==typeof e&&(e=[e]);for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this.opt=t;var e=t.config||{};this.level=t.level,this.config=e,this.preview=t.preview,this.ppfx=e.pStylePrefix||"",this.pfx=e.stylePrefix||"",this.parent=t.parent;var n=this.pfx,i=this.ppfx,r=this.parent,o=this.collection;this.listenTo(o,"add",this.addTo),this.listenTo(o,"reset resetNavigator",this.render),this.listenTo(o,"remove",this.removeChildren),this.className=n+"layers";var s=e.em;if(e.sortable&&!this.opt.sorter){var a=s.get("Utils");this.opt.sorter=new a.Sorter({container:e.sortContainer||this.el,containerSel:"."+this.className,itemSel:"."+n+"layer",ignoreViewChildren:1,onEndMove:function(t,e){var n=e.getSourceModel();s.setSelected(n,{forceChange:1})},avoidSelectOnEnd:1,nested:1,ppfx:i,pfx:n})}this.sorter=this.opt.sorter||"",this.$el.data("collection",o),r&&this.$el.data("model",r)},removeChildren:function(t){var e=t.viewLayer;e&&e.remove.apply(e)},addTo:function(t){var e=this.collection.indexOf(t);this.addToCollection(t,null,e)},addToCollection:function(t,e,n){var r=this.level,o=e||null,s=i;if(this.isCountable(t,this.config.hideTextnode)){var a=new s({level:r,model:t,config:this.config,sorter:this.sorter,isCountable:this.isCountable,opened:this.opt.opened}),l=a.render().el;if(o)o.appendChild(l);else if(void 0!==n){var c="before";this.$el.children().length==n&&(n--,c="after"),n<0?this.$el.append(l):this.$el.children().eq(n)[c](l)}else this.$el.append(l);return l}},isCountable:function(t,e){var n=t.get("type"),i=t.get("tagName");return!(("textnode"==n||"br"==i)&&e||!t.get("layerable"))},render:function(){var t=this,e=document.createDocumentFragment(),n=this.el;return n.innerHTML="",this.collection.each(function(n){return t.addToCollection(n,e)}),n.appendChild(e),n.className=this.className,this}})},function(t,e,n){"use strict";var i=n(2),r=n(184),o=function(t){return t&&t.__esModule?t:{default:t}}(r);t.exports=function(){var t,e,r={},s=n(185),a=n(186),l=n(188);return{getCanvasView:function(){return l},name:"Canvas",init:function(e){r=e||{};for(var n in s)n in r||(r[n]=s[n]);var i=r.pStylePrefix;i&&(r.stylePrefix=i+r.stylePrefix),t=new a(e),l=new l({model:t,config:r});var o=r.em.get("DomComponents");return o&&this.setWrapper(o),this.startAutoscroll=this.startAutoscroll.bind(this),this.stopAutoscroll=this.stopAutoscroll.bind(this),this.autoscroll=this.autoscroll.bind(this),this},getConfig:function(){return r},setWrapper:function(e){t.set("wrapper",e)},getElement:function(){return l.el},getFrameEl:function(){return l.frame.el},getDocument:function(){return this.getFrameEl().contentDocument},getWindow:function(){return this.getFrameEl().contentWindow},getBody:function(){return l.frame.el.contentDocument.body},getWrapperEl:function(){return this.getBody().querySelector("#wrapper")},getToolsEl:function(){return l.toolsEl},getHighlighter:function(){return l.hlEl},getBadgeEl:function(){return l.badgeEl},getPlacerEl:function(){return l.placerEl},getGhostEl:function(){return l.ghostEl},getToolbarEl:function(){return l.toolbarEl},getResizerEl:function(){return l.resizerEl},getOffsetViewerEl:function(){return l.offsetEl},getFixedOffsetViewerEl:function(){return l.fixedOffsetEl},render:function(){return l.render().el},getOffset:function(){var t=this.offset(this.getFrameEl()),e=this.offset(this.getElement());return{top:t.top-e.top,left:t.left-e.left}},offset:function(t){return l.offset(t)},setCustomBadgeLabel:function(t){r.customBadgeLabel=t},getElementPos:function(t,e){return l.getElementPos(t,e)},getTargetToElementDim:function(t,e,n){var i=n||{},o=l.getPosition();if(o){var s=i.elPos||l.getElementPos(e),a=n.toRight||0,c=i.targetHeight||t.offsetHeight,u=i.targetWidth||t.offsetWidth,h=i.event||null,d=s.top-c,f=s.left;f+=a?s.width:0,f=a?f-u:f;var p=fs.top+s.height?s.top+s.height:g;var v={top:g,left:p,elementTop:s.top,elementLeft:s.left,elementWidth:s.width,elementHeight:s.height,targetWidth:t.offsetWidth,targetHeight:t.offsetHeight,canvasTop:o.top,canvasLeft:o.left};return h&&r.em&&r.em.trigger(h,v),v}},getMouseRelativePos:function(t,e){var n=e||{},i=0,r=0,o=n.subWinOffset,s=t.target.ownerDocument,a=s.defaultView||s.parentWindow,l=a.frameElement,c=o?a.pageYOffset:0,u=o?a.pageXOffset:0;if(l){var h=l.getBoundingClientRect();i=h.top||0,r=h.left||0}return{y:t.clientY+i-c,x:t.clientX+r-u}},getMouseRelativeCanvas:function(t,e){var n=this.getFrameEl(),i=this.getBody(),r=n.offsetTop||0,o=n.offsetLeft||0,s=i.scrollTop||0,a=i.scrollLeft||0;return{y:t.clientY+r+s,x:t.clientX+o+a}},hasFocus:function(){return this.getDocument().hasFocus()},isInputFocused:function(){return"BODY"!==this.getFrameEl().contentDocument.activeElement.tagName},scrollTo:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(0,i.getElement)(t);this.getCanvasView().isElInViewport(n)&&!e.force||n.scrollIntoView(e)},startAutoscroll:function(){var t=this;this.dragging=1;var n=this.getScrollListeners();e=l.getFrameOffset(1),setTimeout(function(){(0,i.on)(n,"mousemove",t.autoscroll),(0,i.on)(n,"mouseup",t.stopAutoscroll)},0)},autoscroll:function(t){if(t.preventDefault(),this.dragging){var n=this.getFrameEl().contentWindow,i=n.document.body.scrollTop,r=i,o=t.clientY,s=e.height-50;o<50&&(r-=50-o),o>s&&(r+=o-s),n.scrollTo(0,r)}},stopAutoscroll:function(){this.dragging=0;var t=this.getScrollListeners();(0,i.off)(t,"mousemove",this.autoscroll),(0,i.off)(t,"mouseup",this.stopAutoscroll)},getScrollListeners:function(){return[this.getFrameEl().contentWindow,this.getElement()]},postRender:function(){(0,i.hasDnd)(r.em)&&(this.droppable=new o.default(r.em))},getFrameWrapperEl:function(){return l.frame.getWrapper()}}}},function(t,e,n){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n";this.sorter.setDropContent(o),this.sorter.startSort(),e.trigger("canvas:dragenter",n,o)}}},{key:"handleDragOver",value:function(t){t.preventDefault(),this.em.trigger("canvas:dragover",t)}},{key:"handleDrop",value:function(t){t.preventDefault();var e=t.dataTransfer,n=this.getContentByData(e).content;t.target.style.border="",n?this.sorter.setDropContent(n):this.sorter.moved=0,this.endDrop(0,t)}},{key:"getContentByData",value:function(t){var e=this.em,n=t.types,i=t.files,r=e.get("dragContent"),o=t.getData("text");if(i.length){o=[];for(var a=0;a=0)o=t.getData("text/html").replace(/<\/?meta[^>]*>/g,"");else if((0,s.indexOf)(n,"text/uri-list")>=0)o={type:"link",attributes:{href:o},content:o};else if((0,s.indexOf)(n,"text/json")>=0){var u=t.getData("text/json");u&&(o=JSON.parse(u))}var h={content:o};return e.trigger("canvas:dragdata",t,h),h}}]),t}();e.default=a},function(t,e,n){"use strict";t.exports={stylePrefix:"cv-",rulers:!1,scripts:[],styles:[],customBadgeLabel:""}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(187);t.exports=r.default.Model.extend({defaults:{frame:"",wrapper:"",rulers:!1},initialize:function(t){var e=this.conf||{};this.set("frame",new o(e.frame))}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=r.default.Model.extend({defaults:{wrapper:"",width:"",height:"",attributes:{}}})},function(t,e,n){"use strict";(function(e){var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(2),s=n(189),a=r.default.$;t.exports=r.default.View.extend({initialize:function(t){e.bindAll(this,"renderBody","onFrameScroll","clearOff"),(0,o.on)(window,"scroll resize",this.clearOff),this.config=t.config||{},this.em=this.config.em||{},this.ppfx=this.config.pStylePrefix||"",this.className=this.config.stylePrefix+"canvas",this.listenTo(this.em,"change:canvasOffset",this.clearOff),this.frame=new s({model:this.model.get("frame"),config:this.config})},isElInViewport:function(t){var e=(0,o.getElement)(t).getBoundingClientRect(),n=this.getFrameOffset(1),i=e.top,r=e.left;return i>=0&&r>=0&&i<=n.height&&r<=n.width},onFrameScroll:function(){var t=this.frame.el.contentDocument.body;this.toolsEl.style.top="-"+t.scrollTop+"px",this.toolsEl.style.left="-"+t.scrollLeft+"px",this.em.trigger("canvasScroll")},renderScripts:function(){var t=this.frame,e=this;t.el.onload=function(){function n(i){if(i.length>0){var r=document.createElement("script");r.type="text/javascript",r.src=i.shift(),r.onerror=r.onload=n.bind(null,i),t.el.contentDocument.head.appendChild(r)}else e.renderBody()}var i=e.config.scripts.slice(0);n(i)}},renderBody:function(){var t=this.model.get("frame").get("wrapper"),e=this.config.em;if(t){var n=this.ppfx,i=a(this.frame.el.contentWindow.document.body),r=e.get("CssComposer"),o=e.get("Config"),s=this.config,l=o.protectedCss,c="";s.styles.forEach(function(t){c+=''});var u="\n "+(e.config.baseCss||"")+"\n\n ."+n+"dashed *[data-highlightable] {\n outline: 1px dashed rgba(170,170,170,0.7);\n outline-offset: -2px;\n }\n\n ."+n+"comp-selected {\n outline: 3px solid #3b97e3 !important;\n outline-offset: -3px;\n }\n\n ."+n+"comp-selected-parent {\n outline: 2px solid #ffca6f !important\n }\n\n ."+n+"no-select {\n user-select: none;\n -webkit-user-select:none;\n -moz-user-select: none;\n }\n\n ."+n+"freezed {\n opacity: 0.5;\n pointer-events: none;\n }\n\n ."+n+"no-pointer {\n pointer-events: none;\n }\n\n ."+n+"plh-image {\n background: #f5f5f5;\n border: none;\n height: 50px;\n width: 50px;\n display: block;\n outline: 3px solid #ffca6f;\n cursor: pointer;\n outline-offset: -2px\n }\n\n ."+n+"grabbing {\n cursor: grabbing;\n cursor: -webkit-grabbing;\n }\n\n "+(o.canvasCss||"")+"\n "+(l||"")+"\n ";c&&i.append(c),i.append(""),i.append(t.render()).append(r.render()),i.append(this.getJsContainer()),e.trigger("loaded"),this.frame.el.contentWindow.onscroll=this.onFrameScroll,this.frame.udpateOffset();var h=document,d=this.frame.el.contentDocument,f=function(t,e){var n=void 0;try{n=new window[e](t.type,t)}catch(t){n=document.createEvent(e),n.initEvent(t.type,!0,!0)}return n.keyCodeVal=t.keyCode,["keyCode","which"].forEach(function(t){Object.defineProperty(n,t,{get:function(){return this.keyCodeVal}})}),n};[{event:"keydown keyup",class:"KeyboardEvent"}].forEach(function(t){return t.event.split(" ").forEach(function(e){d.addEventListener(e,function(e){return h.dispatchEvent(f(e,t.class))})})})}},offset:function(t){var e=t.getBoundingClientRect(),n=t.ownerDocument.body;return{top:e.top+n.scrollTop,left:e.left+n.scrollLeft,width:e.width,height:e.height}},clearOff:function(){this.frmOff=null,this.cvsOff=null},getFrameOffset:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.frmOff&&!t||(this.frmOff=this.offset(this.frame.el)),this.frmOff},getCanvasOffset:function(){return this.cvsOff||(this.cvsOff=this.offset(this.el)),this.cvsOff},getElementPos:function(t,e){var n=e||{},i=this.getFrameOffset(),r=this.getCanvasOffset(),o=this.offset(t),s=n.avoidFrameOffset?0:i.top,a=n.avoidFrameOffset?0:i.left;return{top:o.top+s-r.top,left:o.left+a-r.left,height:t.offsetHeight||t.clientHeight,width:t.offsetWidth||t.clientWidth}},getPosition:function(){var t=this.frame.el.contentDocument;if(t){var e=t.body,n=this.getFrameOffset(),i=this.getCanvasOffset();return{top:n.top+e.scrollTop-i.top,left:n.left+e.scrollLeft-i.left}}},updateScript:function(t){t.scriptContainer||(t.scriptContainer=a("
    "),this.getJsContainer().appendChild(t.scriptContainer.get(0)));var e=t.model,n=e.getId();t.el.id=n,t.scriptContainer.html("");var i=document.createElement("script");i.innerHTML="\n setTimeout(function() {\n var item = document.getElementById('"+n+"');\n if (!item) return;\n (function(){\n "+e.getScriptString()+";\n }.bind(item))()\n }, 1);",setTimeout(function(){return t.scriptContainer.get(0).appendChild(i)},0)},getJsContainer:function(){return this.jsContainer||(this.jsContainer=a('
    ').get(0)),this.jsContainer},render:function(){if(this.wrapper=this.model.get("wrapper"),this.wrapper&&"function"==typeof this.wrapper.render){this.model.get("frame").set("wrapper",this.wrapper),this.$el.append(this.frame.render().el);var t=this.frame;0===this.config.scripts.length?t.el.onload=this.renderBody:this.renderScripts()}var e=this.ppfx;this.$el.append('\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n ');var n=this.el,i=n.querySelector("#"+e+"tools");return this.hlEl=n.querySelector("."+e+"highlighter"),this.badgeEl=n.querySelector("."+e+"badge"),this.placerEl=n.querySelector("."+e+"placeholder"),this.ghostEl=n.querySelector("."+e+"ghost"),this.toolbarEl=n.querySelector("."+e+"toolbar"),this.resizerEl=n.querySelector("."+e+"resizer"),this.offsetEl=n.querySelector("."+e+"offset-v"),this.fixedOffsetEl=n.querySelector("."+e+"offset-fixed-v"),this.toolsEl=i,this.el.className=this.className,this}})}).call(e,n(1))},function(t,e,n){"use strict";var i=n(1),r="transitionend oTransitionEnd transitionend webkitTransitionEnd";t.exports=n(0).View.extend({tagName:"iframe",attributes:{allowfullscreen:"allowfullscreen"},initialize:function(t){(0,i.bindAll)(this,"udpateOffset"),this.config=t.config||{},this.ppfx=this.config.pStylePrefix||"",this.em=this.config.em,this.listenTo(this.em,"change:device",this.updateDim)},updateDim:function(t){var e=this.em,n=e.getDeviceModel(),i=this.el.style,o=i.width||"",s=i.height||"",a=n?n.get("width"):"",l=n?n.get("height"):"",c=o==a&&s==l;i.width=a,i.height=l,this.udpateOffset(),e.stopDefault({preserveSelected:1}),c?this.udpateOffset():this.$el.on(r,this.udpateOffset)},udpateOffset:function(){var t=this.em,e=t.get("Canvas").getOffset();t.set("canvasOffset",e),t.runDefault({preserveSelected:1}),this.$el.off(r,this.udpateOffset)},getBody:function(){this.$el.contents().find("body")},getWrapper:function(){return this.$el.contents().find("body > div")},render:function(){return this.$el.attr({class:this.ppfx+"frame"}),this}})},function(t,e,n){"use strict";function i(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e2&&void 0!==arguments[2]?arguments[2]:{},o=n.component||t.getSelectedAll();return o=(0,r.isArray)(o)?[].concat(i(o)):[o],t.select(null),o.forEach(function(t){if(!t||!t.get("removable"))return void console.warn("The element is not removable",t);if(t){var e=t.collection;e&&e.remove(t)}}),o},e.em&&(e.model=e.em.get("Canvas")),this.loadDefaultCommands(),this},add:c,get:function(t){var n=o[t];return"function"==typeof n&&(n=new n(e),o[t]=n),n},has:function(t){return!!o[t]},loadDefaultCommands:function(){for(var t in s)this.add(t,s[t]);return this}}}},function(t,e,n){"use strict";t.exports={ESCAPE_KEY:27,stylePrefix:"com-",defaults:[],em:null,firstCentered:!0,newFixedH:!1,minComponentH:50,minComponentW:50}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=r.default.$;t.exports=r.default.View.extend({initialize:function(t){this.config=t||{},this.editorModel=this.em=this.config.em||{},this.pfx=this.config.stylePrefix,this.ppfx=this.config.pStylePrefix,this.hoverClass=this.pfx+"hover",this.badgeClass=this.pfx+"badge",this.plhClass=this.pfx+"placeholder",this.freezClass=this.ppfx+"freezed",this.canvas=this.em.get&&this.em.get("Canvas"),this.em.get&&this.setElement(this.getCanvas()),this.canvas&&(this.$canvas=this.$el,this.$wrapper=o(this.getCanvasWrapper()),this.frameEl=this.canvas.getFrameEl(),this.canvasTool=this.getCanvasTools(),this.bodyEl=this.getCanvasBody()),this.init(this.config)},onFrameScroll:function(t){},getCanvas:function(){return this.canvas.getElement()},getCanvasBody:function(){return this.canvas.getBody()},getCanvasWrapper:function(){return this.canvas.getWrapperEl()},getCanvasTools:function(){return this.canvas.getToolsEl()},offset:function(t){var e=t.getBoundingClientRect();return{top:e.top+t.ownerDocument.body.scrollTop,left:e.left+t.ownerDocument.body.scrollLeft}},init:function(t){},callRun:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.id;if(t.trigger("run:"+n+":before",e),e&&e.abort)return void t.trigger("abort:"+n,e);var i=this.run(t,t,e);return t.trigger("run:"+n,i,e),i},callStop:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.id;t.trigger("stop:"+n+":before",e);var i=this.stop(t,t,e);return t.trigger("stop:"+n,i,e),i},run:function(t,e){},stop:function(t,e){}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=r.default.$;t.exports={run:function(t,e){arguments.length>2&&void 0!==arguments[2]&&arguments[2];e&&e.set&&e.set("active",0);var n=t.getConfig(),i=t.Modal,r=n.stylePrefix;if(this.cm=t.CodeManager||null,!this.$editors){var s=this.buildEditor("htmlmixed","hopscotch","HTML"),a=this.buildEditor("css","hopscotch","CSS");this.htmlEditor=s.el,this.cssEditor=a.el;var l=o('
    ');l.append(s.$el).append(a.$el),this.$editors=l}i.setTitle(n.textViewCode),i.setContent(this.$editors),i.open(),this.htmlEditor.setContent(t.getHtml()),this.cssEditor.setContent(t.getCss())},stop:function(t){var e=t.Modal;e&&e.close()},buildEditor:function(t,e,n){var i=document.createElement("textarea");!this.codeMirror&&(this.codeMirror=this.cm.getViewer("CodeMirror"));var r=this.codeMirror.clone().set({label:n,codeName:t,theme:e,input:i}),o=new this.cm.EditorView({model:r,config:this.cm.getConfig()}).render().$el;return r.init(i),{el:r,$el:o}}}},function(t,e,n){"use strict";var i=(n(0),n(50)),r=n(195);t.exports=i.extend({itemView:r,initialize:function(t){this.config={editor:t.editor||""},this.listenTo(this.collection,"reset",this.render)}})},function(t,e,n){"use strict";var i=n(0);t.exports=i.View.extend({events:function(){return this.model.get("events")||{mousedown:"handleClick"}},attributes:function(){return this.model.get("attributes")},initialize:function(t){this.editor=t.config.editor},handleClick:function(t){t.preventDefault(),t.stopPropagation(),this.execCommand(t)},execCommand:function(t){var e={event:t},n=this.model.get("command"),i=this.editor;"function"==typeof n&&n(i,null,e),"string"==typeof n&&i.runCommand(n,e)},render:function(){var t=this.editor.getConfig();return this.el.className+=" "+t.stylePrefix+"toolbar-item",this}})},function(t,e,n){"use strict";var i=n(0),r=n(197);t.exports=i.Collection.extend({model:r})},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{command:"",attributes:{}}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(22),c=a.default.$;t.exports=o.default.extend({},l,{init:function(t){o.default.bindAll(this,"startDelete","stopDelete","onDelete"),this.hoverClass=this.pfx+"hover-delete",this.badgeClass=this.pfx+"badge-red"},enable:function(){this.$el.find("*").mouseover(this.startDelete).mouseout(this.stopDelete).click(this.onDelete)},startDelete:function(t){t.stopPropagation();var e=c(t.target);e.data("model").get("removable")&&(e.addClass(this.hoverClass),this.attachBadge(e.get(0)))},stopDelete:function(t){t.stopPropagation(),c(t.target).removeClass(this.hoverClass),this.badge&&this.badge.css({left:-1e3,top:-1e3})},onDelete:function(t){t.stopPropagation();var e=c(t.target);e.data("model").get("removable")&&(e.data("model").destroy(),this.removeBadge(),this.clean())},updateBadgeLabel:function(t){this.badge.html("Remove "+t.getName())}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=(i(s),n(58));t.exports=o.default.extend({},a,{beforeInsert:function(t){t.type="image",t.style={},t.attributes={},t.attributes.onmousedown="return false",this.config.firstCentered&&this.getCanvasWrapper()==this.sorter.target&&(t.style.margin="0 auto")},afterInsert:function(t){t.trigger("dblclick"),this.sender&&this.sender.set("active",!1)}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(2),c=n(22),u=n(57),h=a.default.$;t.exports=o.default.extend({},u,c,{init:function(t){c.init.apply(this,arguments),o.default.bindAll(this,"initSorter","rollback","onEndMove"),this.opt=t,this.hoverClass=this.ppfx+"highlighter-warning",this.badgeClass=this.ppfx+"badge-warning",this.noSelClass=this.ppfx+"no-select"},enable:function(){for(var t=arguments.length,e=Array(t),n=0;n
    "),this.$cn2=o("
    "),this.$cn.append(this.$cn2);var r=t.DeviceManager;if(r&&n.showDevices){i.addPanel({id:"devices-c"}).set("appendContent",r.render()).trigger("change:appendContent")}var s=t.SelectorManager;s&&this.$cn2.append(s.render([])),this.$cn2.append(t.StyleManager.render());var a=t.StyleManager.getConfig(),l=a.stylePrefix;this.$header=o('
    '+a.textNoElement+"
    "),this.$cn.append(this.$header),i.getPanel("views-container")?this.panel=i.getPanel("views-container"):this.panel=i.addPanel({id:"views-container"}),this.panel.set("appendContent",this.$cn).trigger("change:appendContent"),this.target=t.editor,this.listenTo(this.target,"component:toggled",this.toggleSm)}this.toggleSm()},toggleSm:function(){var t=this.target,e=this.sender;e&&e.get&&!e.get("active")||(1===t.getSelectedAll().length?(this.$cn2.show(),this.$header.hide()):(this.$cn2.hide(),this.$header.show()))},stop:function(){this.$cn2&&this.$cn2.hide(),this.$header&&this.$header.hide()}}},function(t,e,n){"use strict";var i=n(0).$;t.exports={run:function(t,e){this.sender=e;var n,r=t.Config,o=r.stylePrefix,s=t.TraitManager;if(!this.$cn){var a=s.getTraitsViewer(),l=s.getConfig();this.$cn=i("
    "),this.$cn2=i("
    "),this.$cn.append(this.$cn2),this.$header=i("
    ").append('
    '+l.textNoElement+"
    "),this.$cn.append(this.$header),this.$cn2.append('
    '+l.labelContainer+"
    "),this.$cn2.append(a.render().el);var c=t.Panels;n=c.getPanel("views-container")?c.getPanel("views-container"):c.addPanel({id:"views-container"}),n.set("appendContent",this.$cn.get(0)).trigger("change:appendContent"),this.target=t.getModel(),this.listenTo(this.target,"component:toggled",this.toggleTm)}this.toggleTm()},toggleTm:function(){var t=this.sender;t&&t.get&&!t.get("active")||(1===this.target.getSelectedAll().length?(this.$cn2.show(),this.$header.hide()):(this.$cn2.hide(),this.$header.show()))},stop:function(){this.$cn2&&this.$cn2.hide(),this.$header&&this.$header.hide()}}},function(t,e,n){"use strict";t.exports={run:function(t,e){var n=t.BlockManager,i=t.Panels;if(!this.blocks){n.render();var r="views-container",o=document.createElement("div"),s=i.getPanel(r)||i.addPanel({id:r});o.appendChild(n.getContainer()),s.set("appendContent",o).trigger("change:appendContent"),this.blocks=o}this.blocks.style.display="block"},stop:function(){var t=this.blocks;t&&(t.style.display="none")}}},function(t,e,n){"use strict";t.exports={run:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=t.Modal,r=t.AssetManager,o=r.getConfig(),s=r.getContainer(),a=n.modalTitle||o.modalTitle||"",l=n.types,c=n.accept;if(r.setTarget(n.target),r.onClick(n.onClick),r.onDblClick(n.onDblClick),r.onSelect(n.onSelect),!this.rendered||l){var u=r.getAll();l&&(u=u.filter(function(t){return-1!==l.indexOf(t.get("type"))})),r.render(u),this.rendered=1}if(c){var h=s.querySelector("input#"+o.stylePrefix+"uploadFile");h&&h.setAttribute("accept",c)}i.setTitle(a),i.setContent(s),i.open()}}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=r.default.$;t.exports={getOffsetMethod:function(t){return"get"+(t||"")+"OffsetViewerEl"},run:function(t,e,n){var i=n||{},r=i.state||"",s=t.getConfig();if(s.showOffsets&&(s.showOffsetsSelected||"Fixed"!=r)){var a=t.Canvas,l=i.el||"",c=i.elPos||a.getElementPos(l),u=window.getComputedStyle(l),h=this.ppfx,d=r+"State",f=this.getOffsetMethod(r),p=a[f]();p.style.display="block";var g=this["marginT"+r],v=this["marginB"+r],m=this["marginL"+r],y=this["marginR"+r],b=this["padT"+r],x=this["padB"+r],w=this["padL"+r],C=this["padR"+r];if(!this[d]){var k=r.toLowerCase(),S=k+"margin-v",T=k+"padding-v",E=o('
    ').get(0),M=o('
    ').get(0),A=h+S+"-el",O=h+T+"-el",P=A+" "+(h+S),L=O+" "+(h+T);g=o('
    ').get(0),v=o('
    ').get(0),m=o('
    ').get(0),y=o('
    ').get(0),b=o('
    ').get(0),x=o('
    ').get(0),w=o('
    ').get(0),C=o('
    ').get(0),this["marginT"+r]=g,this["marginB"+r]=v,this["marginL"+r]=m,this["marginR"+r]=y,this["padT"+r]=b,this["padB"+r]=x,this["padL"+r]=w,this["padR"+r]=C,E.appendChild(g),E.appendChild(v),E.appendChild(m),E.appendChild(y),M.appendChild(b),M.appendChild(x),M.appendChild(w),M.appendChild(C),p.appendChild(E),p.appendChild(M),this[d]="1"}var _=u.marginLeft.replace("px",""),N=parseInt(u.marginTop.replace("px","")),D=parseInt(u.marginBottom.replace("px","")),I=g.style,F=v.style,R=m.style,z=y.style,H=b.style,V=x.style,j=w.style,$=C.style,B=parseInt(c.left);I.height=u.marginTop,I.width=u.width,I.top=c.top-u.marginTop.replace("px","")+"px",I.left=B+"px",F.height=u.marginBottom,F.width=u.width,F.top=c.top+c.height+"px",F.left=B+"px";var W=c.height+N+D+"px",U=c.top-N+"px";R.height=W,R.width=u.marginLeft,R.top=U,R.left=B-_+"px",z.height=W,z.width=u.marginRight,z.top=U,z.left=B+c.width+"px";var q=parseInt(u.paddingTop.replace("px",""));H.height=u.paddingTop,H.width=u.width,H.top=c.top+"px",H.left=B+"px";var K=parseInt(u.paddingBottom.replace("px",""));V.height=u.paddingBottom,V.width=u.width,V.top=c.top+c.height-K+"px",V.left=B+"px";var G=c.height-K-q+"px",Y=c.top+q+"px";j.height=G,j.width=u.paddingLeft,j.top=Y,j.left=c.left+"px";var X=parseInt(u.paddingRight.replace("px",""));$.height=G,$.width=u.paddingRight,$.top=Y,$.left=c.left+c.width-X+"px"}},stop:function(t,e,n){var i=n||{},r=i.state||"",o=this.getOffsetMethod(r);t.Canvas[o]().style.display="none"}}},function(t,e,n){"use strict";t.exports={run:function(t){for(var e=t.getSelected(),n=e&&e.parent();n&&!n.get("selectable");)n=n.parent();n&&t.select(n)}}},function(t,e,n){"use strict";t.exports={isEnabled:function(){var t=document;return t.fullscreenElement||t.webkitFullscreenElement||t.mozFullScreenElement?1:0},enable:function(t){var e="";return t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?(e="webkit",t.webkitRequestFullscreen()):t.mozRequestFullScreen?(e="moz",t.mozRequestFullScreen()):t.msRequestFullscreen?t.msRequestFullscreen():console.warn("Fullscreen not supported"),e},disable:function(){var t=document;t.exitFullscreen?t.exitFullscreen():t.webkitExitFullscreen?t.webkitExitFullscreen():t.mozCancelFullScreen?t.mozCancelFullScreen():t.msExitFullscreen&&t.msExitFullscreen()},fsChanged:function(t,e){var n=(document,(t||"")+"fullscreenchange");this.isEnabled()||(this.stop(null,this.sender),document.removeEventListener(n,this.fsChanged))},run:function(t,e){this.sender=e;var n=this.enable(t.getContainer());this.fsChanged=this.fsChanged.bind(this,n),document.addEventListener(n+"fullscreenchange",this.fsChanged),t&&t.trigger("change:canvasOffset")},stop:function(t,e){e&&e.set&&e.set("active",!1),this.disable(),t&&t.trigger("change:canvasOffset")}}},function(t,e,n){"use strict";var i=n(1),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports={getPanels:function(t){return this.panels||(this.panels=t.Panels.getPanelsEl()),this.panels},tglPointers:function(t,e){var n=t.Canvas.getBody().querySelectorAll("."+this.ppfx+"no-pointer");r.default.each(n,function(t){t.style.pointerEvents=e?"":"all"})},run:function(t,e){e&&e.set&&e.set("active",!1),t.stopCommand("sw-visibility"),t.getModel().stopDefault();var n=this.getPanels(t),i=t.Canvas.getElement(),r=t.getEl(),o=t.Config.stylePrefix;this.helper||(this.helper=document.createElement("span"),this.helper.className=o+"off-prv fa fa-eye-slash",r.appendChild(this.helper),this.helper.onclick=function(){t.stopCommand("preview")}),this.helper.style.display="inline-block",this.tglPointers(t),n.style.display="none";var s=i.style;s.width="100%",s.height="100%",s.top="0",s.left="0",s.padding="0",s.margin="0",t.trigger("change:canvasOffset")},stop:function(t,e){var n=this.getPanels(t);t.runCommand("sw-visibility"),t.getModel().runDefault(),n.style.display="block",t.Canvas.getElement().setAttribute("style",""),this.helper&&(this.helper.style.display="none"),t.trigger("change:canvasOffset"),this.tglPointers(t,1)}}},function(t,e,n){"use strict";t.exports={run:function(t,e,n){var i=n||{},r=i.el||"",o=t.Canvas,s=this.canvasResizer,a=i.options||{},l=o.getCanvasView();return a.ratioDefault=1,a.appendTo=o.getResizerEl(),a.prefix=t.getConfig().stylePrefix,a.posFetcher=l.getElementPos.bind(l),a.mousePosFetcher=o.getMouseRelativePos,s&&!i.forceNew||(this.canvasResizer=t.Utils.Resizer.init(a),s=this.canvasResizer),s.setOptions(a),s.blur(),s.focus(r),s},stop:function(){var t=this.canvasResizer;t&&t.blur()}}},function(t,e,n){"use strict";t.exports={run:function(t,e,n){var i=n&&n.el||"",r=t.Canvas,o=this.dragger,s=n.options||{},a=r.getCanvasView();return s.prefix=t.getConfig().stylePrefix,s.mousePosFetcher=r.getMouseRelativePos,s.posFetcher=a.getElementPos.bind(a),o||(o=t.Utils.Dragger.init(s),this.dragger=o),o.setOptions(s),o.focus(i),s.event&&o.start(s.event),o},stop:function(){this.canvasResizer&&this.canvasResizer.blur()}}},function(t,e,n){"use strict";function i(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e=0?r:t)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";t.exports={run:function(t){if(t.Canvas.hasFocus()&&!t.getModel().isEditing()){var e=[];t.getSelectedAll().forEach(function(t){var n=t.components(),i=n&&n.at(0);i&&e.push(i)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";t.exports={run:function(t){if(t.Canvas.hasFocus()&&!t.getModel().isEditing()){var e=[];t.getSelectedAll().forEach(function(t){var n=t.parent();n&&e.push(n)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";var i=n(1);t.exports=function(){var t,e,r,o={},s=n(221),a=n(222),l=n(224),c=n(225),u=[];return{name:"BlockManager",init:function(n){o=n||{};var i=o.em;for(var h in s)h in o||(o[h]=s[h]);return t=new a([]),e=new a([]),u=new l,r=new c({collection:e,categories:u},o),t.listenTo(t,"add",function(t){e.add(t),i&&i.trigger("block:add",t)}),t.listenTo(t,"remove",function(t){e.remove(t),i&&i.trigger("block:remove",t)}),t.listenTo(t,"reset",function(t){e.reset(t.models)}),this},getConfig:function(){return o},onLoad:function(){var t=this.getAll();!t.length&&t.reset(o.blocks)},postRender:function(){var t=this.getConfig().appendTo;if(t){((0,i.isElement)(t)?t:document.querySelector(t)).appendChild(this.render())}},add:function(e,n){var i=n||{};return i.id=e,t.add(i)},get:function(e){return t.get(e)},getAll:function(){return t},getAllVisible:function(){return e},remove:function(e){return t.remove(e)},getCategories:function(){return u},getContainer:function(){return r.el},render:function(t){var e=t||this.getAll().models;return r.rendered||(r.render(),r.rendered=1),r.collection.reset(e),this.getContainer()}}}},function(t,e,n){"use strict";t.exports={appendTo:"",blocks:[]}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(223);t.exports=r.default.Collection.extend({model:o})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(59);t.exports=r.default.Model.extend({defaults:{activate:0,select:0,resetId:0,label:"",content:"",category:"",attributes:{}},initialize:function(){var t=(arguments.length>0&&void 0!==arguments[0]&&arguments[0],this.get("category"));if(t&&"string"==typeof t){new o({id:t,label:t})}}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=r.default.Collection.extend({model:n(59)})},function(t,e,n){"use strict";var i=n(1),r=n(226),o=n(227);t.exports=n(0).View.extend({initialize:function(t,e){(0,i.bindAll)(this,"getSorter","onDrag","onDrop"),this.config=e||{},this.categories=t.categories||"",this.renderedCategories=[];var n=this.config.pStylePrefix||"";this.ppfx=n,this.noCatClass=n+"blocks-no-cat",this.blockContClass=n+"blocks-c",this.catsClass=n+"block-categories";var r=this.collection;this.listenTo(r,"add",this.addTo),this.listenTo(r,"reset",this.render),this.em=this.config.em,this.tac="test-tac",this.grabbingCls=this.ppfx+"grabbing",this.em&&(this.config.getSorter=this.getSorter,this.canvas=this.em.get("Canvas"))},getSorter:function(){if(this.em){if(!this.sorter){var t=this.em.get("Utils"),e=this.canvas;this.sorter=new t.Sorter({container:e.getBody(),placer:e.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,onStart:this.onDrag,onEndMove:this.onDrop,onMove:this.onMove,document:e.getFrameEl().contentDocument,direction:"a",wmargin:1,nested:1,em:this.em,canvasRelative:1})}return this.sorter}},onDrag:function(t){this.em.stopDefault(),this.em.trigger("block:drag:start",t)},onMove:function(t){this.em.trigger("block:drag:move",t)},onDrop:function(t){var e=this.em;e.runDefault(),t&&t.get&&(t.get("activeOnRender")&&(t.trigger("active"),t.set("activeOnRender",0)),e.trigger("block:drag:stop",t))},addTo:function(t){this.add(t)},add:function(t,e){var n=e||null,s=new r({model:t,attributes:t.get("attributes")},this.config),a=s.render().el,l=t.get("category");if(l&&this.categories){(0,i.isString)(l)?l={id:l,label:l}:(0,i.isObject)(l)&&!l.id&&(l.id=l.label);var c=this.categories.add(l),u=c.get("id"),h=this.renderedCategories[u],d=this.getCategoriesEl();return t.set("category",c),!h&&d&&(h=new o({model:c},this.config).render(),this.renderedCategories[u]=h,d.appendChild(h.el)),void(h&&h.append(a))}n?n.appendChild(a):this.append(a)},getCategoriesEl:function(){return this.catsEl||(this.catsEl=this.el.querySelector("."+this.catsClass)),this.catsEl},getBlocksEl:function(){return this.blocksEl||(this.blocksEl=this.el.querySelector("."+this.noCatClass+" ."+this.blockContClass)),this.blocksEl},append:function(t){var e=this.getBlocksEl();e&&e.appendChild(t)},render:function(){var t=this,e=this.ppfx,n=document.createDocumentFragment();this.catsEl=null,this.blocksEl=null,this.renderedCategories=[],this.el.innerHTML='\n
    \n
    \n
    \n
    \n ',this.collection.each(function(e){return t.add(e,n)}),this.append(n);var i=this.blockContClass+"s "+e+"one-bg "+e+"two-color";return this.$el.addClass(i),this}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(1),s=n(2);t.exports=r.default.View.extend({events:{mousedown:"startDrag",dragstart:"handleDragStart",drag:"handleDrag",dragend:"handleDragEnd"},initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.em=e.em,this.config=e,this.endDrag=this.endDrag.bind(this),this.ppfx=e.pStylePrefix||"",this.listenTo(this.model,"destroy remove",this.remove)},startDrag:function(t){var e=this.config;if(0===t.button&&e.getSorter&&!this.el.draggable){e.em.refreshCanvas();var n=e.getSorter();n.setDragHelper(this.el,t),n.setDropContent(this.model.get("content")),n.startSort(this.el),(0,s.on)(document,"mouseup",this.endDrag)}},handleDragStart:function(t){var e=this.em,n=this.model,i=n.get("content"),r=(0,o.isObject)(i),s=r?JSON.stringify(i):i;t.dataTransfer.setData("text",s),e.set("dragContent",i),e.trigger("block:drag:start",n,t)},handleDrag:function(t){this.em.trigger("block:drag",this.model,t)},handleDragEnd:function(){var t=this.em,e=this.model,n=t.get("dragResult");if(n){var i=n.get&&n.get("activeOnRender");(e.get("activate")||i)&&(n.trigger("active"),n.set("activeOnRender",0)),e.get("select")&&t.setSelected(n),e.get("resetId")&&n.onAll(function(t){return t.resetId()})}t.set({dragResult:null,dragContent:null}),t.trigger("block:drag:stop",n,e)},endDrag:function(t){(0,s.off)(document,"mouseup",this.endDrag);var e=this.config.getSorter();e.moved=0,e.endMove()},render:function(){var t=this.el,e=this.ppfx,n=e+"block",i=this.model.get("label");return t.className+=" "+n+" "+e+"one-bg "+e+"four-color-h",t.innerHTML='
    '+i+"
    ",t.title=t.textContent.trim(),(0,s.hasDnd)(this.em)&&t.setAttribute("draggable",!0),this}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s);t.exports=a.default.View.extend({template:o.default.template('\n
    \n \n <%= label %>\n
    \n
    \n '),events:{},initialize:function(){var t=(arguments.length>0&&void 0!==arguments[0]&&arguments[0],arguments.length>1&&void 0!==arguments[1]?arguments[1]:{});this.config=t;var e=this.config.pStylePrefix||"";this.pfx=e,this.caretR="fa fa-caret-right",this.caretD="fa fa-caret-down",this.iconClass=e+"caret-icon",this.activeClass=e+"open",this.className=e+"block-category",this.events["click ."+e+"title"]="toggle",this.listenTo(this.model,"change:open",this.updateVisibility),this.delegateEvents()},updateVisibility:function(){this.model.get("open")?this.open():this.close()},open:function(){this.el.className=this.className+" "+this.activeClass,this.getIconEl().className=this.iconClass+" "+this.caretD,this.getBlocksEl().style.display=""},close:function(){this.el.className=this.className,this.getIconEl().className=this.iconClass+" "+this.caretR,this.getBlocksEl().style.display="none"},toggle:function(){var t=this.model;t.set("open",!t.get("open"))},getIconEl:function(){return this.iconEl||(this.iconEl=this.el.querySelector("."+this.iconClass)),this.iconEl},getBlocksEl:function(){return this.blocksEl||(this.blocksEl=this.el.querySelector("."+this.pfx+"blocks-c")),this.blocksEl},append:function(t){this.getBlocksEl().appendChild(t)},render:function(){return this.el.innerHTML=this.template({pfx:this.pfx,label:this.model.get("label")}),this.el.className=this.className,this.$el.css({order:this.model.get("order")}),this.updateVisibility(),this}})},function(t,e,n){"use strict";var i=n(1);t.exports=function(t){var e=t.$,n=t.Backbone;if(n){var r=n.View.prototype,o={};r.eventNsMap=o,r.delegate=function(t,e,n){var i=".delegateEvents"+this.cid;this.$el.on(t,e,n);var r=o[i];return r||(r=[],o[i]=r),r.push({eventName:t,selector:e,listener:n}),this},r.undelegateEvents=function(){var t=this,e=".delegateEvents"+this.cid;if(this.$el){var n=o[e];n&&n.forEach(function(e){var n=e.eventName;e.selector,e.listener;t.$el.off(n)})}return this},r.undelegate=function(t,e,n){var i=this,r=".delegateEvents"+this.cid,s=o[r];return s&&s.forEach(function(n){var r=n.eventName,o=n.selector;n.listener;r==t&&o==e&&i.$el.off(r)}),this}}if(e&&"jQuery"!==e.prototype.constructor.name){var s=e.fn,a=e.prototype.on,l=e.prototype.off,c=e.prototype.trigger,u=e.prototype.offset,h=function(t){return t.split(/[,\s]+/g)},d=function(t){return t.split(".")};s.on=function(t,e,n,i){var r=this;if("string"==typeof t){var o=h(t);if(1==o.length){t=o[0];var s=d(t);if(0!==t.indexOf(".")&&(t=s[0]),s=s.slice(1),s.length){this.data("_cashNs");this.data("_cashNs",s)}return a.call(this,t,e,n,i)}return o.forEach(function(t){return r.on(t,e,n,i)}),this}return a.call(this,t,e,n,i)},s.off=function(t,e){var n=this;if("string"==typeof t){var i=h(t);if(1==i.length){t=i[0];var r=d(t);return 0!==t.indexOf(".")&&(t=r[0]),r=r.slice(1),r.length,l.call(this,t,e)}return i.forEach(function(t){return n.off(t,e)}),this}return l.call(this,t,e)},s.trigger=function(t,n){var i=this;if(t instanceof e.Event)return this.trigger(t.type,n);if("string"==typeof t){var r=h(t);if(1==r.length){t=r[0];var o=d(t);return 0!==t.indexOf(".")&&(t=o[0]),o=o.slice(1),o.length,c.call(this,t,n)}return r.forEach(function(t){return i.trigger(t,n)}),this}return c.call(this,t,n)},s.hide=function(){return this.css("display","none")},s.show=function(){return this.css("display","block")},s.focus=function(){var t=this.get(0);return t&&t.focus(),this},s.removeClass=function(t){if(!arguments.length)return this.attr("class","");var e=(0,i.isString)(t)&&t.match(/\S+/g);return e?this.each(function(t){(0,i.each)(e,function(e){if(t.classList)t.classList.remove(e);else{var n=t.className,r=t.className.baseVal;(0,i.isUndefined)(r)?t.className=n.replace(e,""):n.baseVal=r.replace(e,"")}})}):this},s.remove=function(){return this.each(function(t){return t.parentNode&&t.parentNode.removeChild(t)})},s.bind=function(t,e){return this.on(t,e)},s.unbind=function(t,e){if((0,i.isObject)(t)){for(var n in t)t.hasOwnProperty(n)&&this.off(n,t[n]);return this}return this.off(t,e)},s.click=function(t){return t?this.on("click",t):this.trigger("click")},s.change=function(t){return t?this.on("change",t):this.trigger("change")},s.keydown=function(t){return t?this.on("keydown",t):this.trigger("keydown")},s.delegate=function(t,e,n,i){return i||(i=n),this.on(e,t,function(t){t.data=n,i(t)})},s.scrollLeft=function(){var t=this.get(0);t=9==t.nodeType?t.defaultView:t;var e=t instanceof Window?t:null;return e?e.pageXOffset:t.scrollLeft||0},s.scrollTop=function(){var t=this.get(0);t=9==t.nodeType?t.defaultView:t;var e=t instanceof Window?t:null;return e?e.pageYOffset:t.scrollTop||0},s.offset=function(t){var e=void 0,n=void 0;return t&&(e=t.top,n=t.left),void 0!==e&&this.css("top",e+"px"),void 0!==n&&this.css("left",n+"px"),u.call(this)},e.map=function(t,e){for(var n=[],i=0;i1&&void 0!==arguments[1]?arguments[1]:{},r=e,o={codeViewerTheme:"hopscotch",importPlaceholder:"",modalTitleImport:"Import MJML",modalBtnImport:"Import",modalLabelImport:"",modalTitleExport:"Export MJML",modalLabelExport:"",overwriteExport:1,preMjml:"",postMjml:"",exportOnly:"",resetBlocks:1,resetDevices:1,resetStyleManager:1,columnsPadding:"10px 0"};for(var i in o)i in r||(r[i]=o[i]);var a=t.getConfig();if(a.forceClass=0,a.devicePreviewMode=1,n(1).default(t,r),n(2).default(t,r),n(684).default(t,r),n(687).default(t,r),n(688).default(t,r),r.resetDevices){var u=t.DeviceManager;u.getAll().reset(),u.add("Desktop",""),u.add("Mobile","320px")}})},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.BlockManager;e.resetBlocks&&n.getAll().reset(),n.add("mj-1-column",{label:"1 Column",content:"\n Content 1\n ",attributes:{class:"gjs-fonts gjs-f-b1","data-type":"mj-section"}}),n.add("mj-2-columns",{label:"2 Columns",content:"\n Content 1\n Content 2\n ",attributes:{class:"gjs-fonts gjs-f-b2","data-type":"mj-section"}}),n.add("mj-3-columns",{label:"3 Columns",content:"\n Content 1\n Content 2\n Content 3\n ",attributes:{class:"gjs-fonts gjs-f-b3","data-type":"mj-section"}}),n.add("mj-text",{label:"Text",content:"Insert text here",attributes:{class:"gjs-fonts gjs-f-text","data-type":"mj-text"}}),n.add("mj-button",{label:"Button",content:"Button",attributes:{class:"gjs-fonts gjs-f-button","data-type":"mj-button"}}),n.add("mj-image",{label:"Image",content:'',attributes:{class:"fa fa-image","data-type":"mj-image"}}),n.add("mj-divider",{label:"Divider",content:"",attributes:{class:"gjs-fonts gjs-f-divider","data-type":"mj-divider"}}),n.add("mj-social",{label:"Social",content:"",attributes:{class:"fa fa-share-alt","data-type":"mj-social"}})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=n(3);e.default=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.DomComponents,a=i.getType("default"),u=i.getType("text"),s=i.getType("image"),c=i.getType("link"),l=a.model,f=a.view,p=u.model,h=u.view,d=s.model,v=s.view,g=c.model,m=c.view,y=n(680),_=document.createElement("div"),b={init:function(){var t=Object.assign({},this.get("attributes")),e=this.get("style");this.defaultStyle=e;for(var n in e)n in t||(t[n]=e[n]);this.set("attributes",t),this.set("style",t),this.listenTo(this,"change:style",this.handleStyleChange)},handleStyleChange:function(){var t=Object.assign({},this.get("attributes"),this.get("style"));this.set("attributes",t)},getMjmlAttributes:function(){var t=this.get("attributes")||{};delete t.style;var e=this.get("src");return e&&(t.src=e),t},getAttrToHTML:function(){var t=Object.assign({},this.get("attributes")||{}),e=Object.assign({},this.defaultStyle||{});delete t.style;for(var n in t)t[n]==e[n]&&delete t[n];return t},toHTML:function(t){var e="",n=this,o=n.get("tagName"),i=n.get("void"),a="",u=this.getAttrToHTML();for(var s in u){var c=u[s];a+=void 0!==("undefined"==typeof c?"undefined":r(c))&&""!==c?" "+s+'="'+c+'"':""}return e+="<"+o+a+(i?"/":"")+">"+n.get("content"),n.get("components").each(function(t){e+=t.toHTML()}),i||(e+=""),e}},w={init:function(){this.stopListening(this.model,"change:style"),this.listenTo(this.model,"change:attributes change:src",this.rerender)},rerender:function(){this.render(null,null,{},1)},getMjmlTemplate:function(){return{start:"",end:""}},getInnerMjmlTemplate:function(){var t=this.model,e=t.get("tagName"),n=t.getMjmlAttributes(),o="";for(var i in n){var a=n[i];o+=void 0!==("undefined"==typeof a?"undefined":r(a))&&""!==a?" "+i+'="'+a+'"':""}return{start:"<"+e+" "+o+">",end:""}},getTemplateFromEl:function(t){return t.firstChild.innerHTML},getTemplateFromMjml:function(){var t=this.getMjmlTemplate(),e=this.getInnerMjmlTemplate(),n=(0,o.mjml2html)(t.start+"\n "+e.start+e.end+t.end),r=n.html;r=r.replace(//,"");var i=r.indexOf("")+6,a=r.indexOf("");return r=r.substring(i,a).trim(),_.innerHTML=r,this.getTemplateFromEl(_)},renderChildren:function(t){var e=this.getChildrenContainer();t?this.componentsView.$parent=$(e):(this.componentsView=new y({collection:this.model.get("components"),config:this.config,defaultTypes:this.opts.defaultTypes,componentTypes:this.opts.componentTypes}),this.childNodes=this.componentsView.render($(e)).el.childNodes);for(var n=Array.prototype.slice.call(this.childNodes),r=0,o=n.length;r",end:""+t.end}},renderStyle:function(){this.el.style.cssText=this.el.getAttribute("style")+this.attributes.style},renderContent:function(){this.getChildrenContainer().innerHTML=this.model.get("content")}}))}),i.addType("mj-section",{model:l.extend(Object.assign({},b,{defaults:Object.assign({},l.prototype.defaults,{"custom-name":"Section",draggable:"[data-type=mj-container]",droppable:"[data-type=mj-column]",style:{"padding-top":"10px","padding-bottom":"10px","vertical-align":"top","text-align":"center"},stylable:["vertical-align","text-align","padding","padding-top","padding-left","padding-right","padding-bottom","background-color","background-url","background-repeat","background-size","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-left-radius","border-bottom-right-radius","border","border-width","border-style","border-color"]})}),{isComponent:function(t){if("MJ-SECTION"==t.tagName)return{type:"mj-section"}}}),view:f.extend(Object.assign({},w,{tagName:"div",attributes:{style:"pointer-events: all;","data-type":"mj-section"},getChildrenSelector:function(){return"tbody > tr > td"},init:function(){w.init.call(this),this.listenTo(this.model.get("components"),"add remove",this.render)}}))});var x=e.columnsPadding;i.addType("mj-column",{model:l.extend(Object.assign({},b,{defaults:Object.assign({},l.prototype.defaults,{"custom-name":"Column",draggable:"[data-type=mj-section]",stylable:["background-color","vertical-align","width","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-left-radius","border-bottom-right-radius","border","border-width","border-style","border-color"]})}),{isComponent:function(t){if("MJ-COLUMN"==t.tagName)return{type:"mj-column"}}}),view:f.extend(Object.assign({},w,{tagName:"div",attributes:{"data-type":"mj-column",style:"pointer-events: all;"+(x?"padding: "+x+";":"")},getTemplateFromMjml:function(){var t=this.getMjmlTemplate(),e=this.getInnerMjmlTemplate(),n=(0,o.mjml2html)(t.start+"\n "+e.start+e.end+t.end),r=n.html,i=[];_.innerHTML=r;var a=Array.from(_.querySelectorAll("style"));a.forEach(function(t){i.push(t.innerHTML)});var u=r.replace(//,""),s=u.indexOf("")+6,c=u.indexOf("");_.innerHTML=u.substring(s,c).trim();for(var l,f=this.getTemplateFromEl(_),p={},h=f.attributes,d=0,v=h.length;d"+e.style+""),this.getChildrenContainer().innerHTML=this.model.get("content"),this.renderChildren(),this.el.style.cssText=this.el.getAttribute("style")+this.attributes.style,this},getMjmlTemplate:function(){var t=this.model.collection.length-1;t=t?t:0;var e=Array(t).fill("").join("");return{start:"",end:e+""}},getTemplateFromEl:function(t){return t.firstChild.querySelector("div")},getChildrenSelector:function(){return"tbody"}}))}),i.addType("mj-text",{model:p.extend(Object.assign({},b,{defaults:Object.assign({},p.prototype.defaults,{"custom-name":"Text",draggable:"[data-type=mj-column]",highlightable:!1,stylable:["height","font-style","font-size","font-weight","font-family","color","line-height","letter-spacing","text-decoration","align","text-transform","padding","padding-top","padding-left","padding-right","padding-bottom","container-background-color"],style:{"padding-top":"10px","padding-bottom":"10px","padding-right":"25px","padding-left":"25px","font-size":"13px","line-height":"22px",align:"left"}})}),{isComponent:function(t){if("MJ-TEXT"==t.tagName)return{type:"mj-text",content:t.innerHTML,components:[]}}}),view:h.extend(Object.assign({},w,{tagName:"tr",attributes:{style:"pointer-events: all; display: table; width: 100%"},getMjmlTemplate:function(){return{start:"",end:""}},getTemplateFromEl:function(t){return t.querySelector("tr").innerHTML},getChildrenSelector:function(){return"div"},renderChildren:function(){w.renderChildren.call(this)},enableEditing:function(){h.prototype.enableEditing.apply(this,arguments),this.getChildrenContainer().style.pointerEvents="all"},disableEditing:function(){h.prototype.disableEditing.apply(this,arguments),this.getChildrenContainer().style.pointerEvents="none"}}))}),i.addType("mj-button",{model:g.extend(Object.assign({},b,{defaults:Object.assign({},g.prototype.defaults,{"custom-name":"Button",draggable:"[data-type=mj-column]",highlightable:!1,stylable:["width","height","background-color","container-background-color","font-style","font-size","font-weight","font-family","color","text-decoration","align","vertical-align","text-transform","padding","padding-top","padding-left","padding-right","padding-bottom","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-left-radius","border-bottom-right-radius","border","border-width","border-style","border-color"],style:{"background-color":"#414141","border-radius":"3px","font-size":"13px","font-weight":"400",color:"#ffffff","vertical-align":"middle","padding-bottom":"10px","padding-right":"25px","padding-left":"25px",align:"center"},traits:["href"]})}),{isComponent:function(t){if("MJ-BUTTON"==t.tagName)return{type:"mj-button"}}}),view:m.extend(Object.assign({},w,{tagName:"tr",attributes:{style:"pointer-events: all; display: table; width: 100%"},getMjmlTemplate:function(){return{start:"",end:""}},getTemplateFromEl:function(t){return t.querySelector("tr").innerHTML},getChildrenSelector:function(){return"a,p"},renderChildren:function(){w.renderChildren.call(this)}}))}),i.addType("mj-image",{model:d.extend(Object.assign({},b,{defaults:Object.assign({},d.prototype.defaults,{"custom-name":"Image",resizable:!1,highlightable:!1,draggable:"[data-type=mj-column]",stylable:["width","height","padding","padding-top","padding-left","padding-right","padding-bottom","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-left-radius","border-bottom-right-radius","border","border-width","border-style","border-color","container-background-color","align"],style:{"padding-top":"10px","padding-bottom":"10px","padding-right":"25px","padding-left":"25px",align:"center"},traits:["href","rel","alt","title"],void:!0})}),{isComponent:function(t){if("MJ-IMAGE"==t.tagName)return{type:"mj-image"}}}),view:v.extend(Object.assign({},w,{tagName:"tr",attributes:{style:"pointer-events: all; display: table; width: 100%; user-select: none;"},getMjmlTemplate:function(){return{start:"",end:""}},getTemplateFromEl:function(t){return t.querySelector("tr").innerHTML},getChildrenSelector:function(){return"img"}}))}),i.addType("mj-social",{model:l.extend(Object.assign({},b,{defaults:Object.assign({},l.prototype.defaults,{"custom-name":"Social",draggable:"[data-type=mj-column]",droppable:!1,stylable:["text-decoration","align","font-family","font-size","line-height","padding","padding-top","padding-left","padding-right","padding-bottom","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-left-radius","border-bottom-right-radius","container-background-color","color","facebook-icon-color","twitter-icon-color","google-icon-color","instagram-icon-color","linkedin-icon-color","pinterest-icon-color"],style:{align:"center","icon-size":"20px","font-size":"13px","line-height":"22px","facebook-icon-color":"#3b5998","twitter-icon-color":"#55acee","google-icon-color":"#dc4e41","instagram-icon-color":"#3f729b","linkedin-icon-color":"#0077b5","pinterest-icon-color":"#bd081c",display:"facebook twitter google"},traits:["display",{name:"facebook-content",value:"Share"},{name:"facebook-href",value:"[[SHORT_PERMALINK]]"},{name:"twitter-content",value:"Tweet"},{name:"twitter-href",value:"[[SHORT_PERMALINK]]"},{name:"google-content",value:"+1"},{name:"google-href",value:"[[SHORT_PERMALINK]]"},{name:"instagram-content",value:"Share"},{name:"instagram-href",value:"[[SHORT_PERMALINK]]"},{name:"linkedin-content",value:"Share"},{name:"linkedin-href",value:"[[SHORT_PERMALINK]]"},{name:"pinterest-content",value:"Pin it"},{name:"pinterest-href",value:"[[SHORT_PERMALINK]]"},{type:"select",label:"Mode",name:"mode",options:[{value:"horizontal",name:"Horizontal"},{value:"vertical",name:"Vertical"}]}],void:!0})}),{isComponent:function(t){if("MJ-SOCIAL"==t.tagName)return{type:"mj-social"}}}),view:f.extend(Object.assign({},w,{tagName:"tr",attributes:{style:"pointer-events: all; display: table; width: 100%"},getMjmlTemplate:function(){return{start:"",end:""}},getTemplateFromEl:function(t){return t.querySelector("tr").innerHTML},render:function(){this.renderAttributes(),this.el.innerHTML=this.getTemplateFromMjml();var t=this.model.get("content").trim();return t&&(this.getChildrenContainer().innerHTML=t),this.renderChildren(),this.el.style.cssText=this.attributes.style,this},getChildrenSelector:function(){return"img"}}))}),i.addType("mj-divider",{model:l.extend(Object.assign({},b,{defaults:Object.assign({},l.prototype.defaults,{"custom-name":"Divider",draggable:"[data-type=mj-column]",droppable:!1,style:{width:"100%","border-width":"4px","border-style":"solid","border-color":"#000000","padding-top":"10px","padding-bottom":"10px","padding-right":"25px","padding-left":"25px"},stylable:["padding","padding-top","padding-left","padding-right","padding-bottom","width","container-background-color","border-detached","border-width","border-style","border-color"]})}),{isComponent:function(t){if("MJ-DIVIDER"==t.tagName)return{type:"mj-divider"}}}),view:f.extend(Object.assign({},w,{tagName:"tr",attributes:{style:"pointer-events: all; display: table; width: 100%; user-select: none;"},getMjmlTemplate:function(){return{start:"",end:""}},getTemplateFromEl:function(t){return t.querySelector("tr").innerHTML},getChildrenSelector:function(){return"p"}}))})}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(4);Object.keys(o).forEach(function(t){"default"!==t&&"__esModule"!==t&&Object.defineProperty(e,t,{enumerable:!0,get:function(){return o[t]}})});var i=n(273),a=r(i),u=n(580),s=r(u),c=n(581),l=r(c),f=n(587),p=r(f),h=n(588),d=r(h),v=n(589),g=r(v),m=n(590),y=r(m),_=n(591),b=r(_),w=n(595),x=r(w),E=n(596),k=r(E),j=n(598),O=r(j),S=n(603),T=r(S),C=n(611),A=r(C),N=n(614),D=r(N),M=n(626),I=r(M),R=n(669),P=r(R),L=n(628),B=r(L),q=n(670),U=r(q),V=n(673),F=r(V),z=n(616),H=r(z),W=n(597),K=r(W),$=n(674),G=r($),J=n(675),Y=r(J),X=n(677),Q=r(X),Z=n(678),tt=r(Z),et=n(679),nt=r(et),rt=O.default.Accordion,ot=O.default.AccordionElement,it=O.default.AccordionTitle,at=O.default.AccordionText,ut=A.default.Hero,st=A.default.HeroContent,ct=D.default.Invoice,lt=D.default.InvoiceItem,ft=T.default.Carousel,pt=T.default.CarouselImage,ht=I.default.Navbar,dt=I.default.InlineLinks,vt=I.default.Link;[rt,ot,it,at,s.default,ft,pt,l.default,p.default,d.default,g.default,ut,st,y.default,b.default,dt,ct,lt,vt,x.default,k.default,ht,P.default,B.default,U.default,F.default,H.default,K.default,G.default].map(o.registerMJElement),(0,a.default)([Y.default,Q.default,tt.default,nt.default],function(t){return(0,o.registerMJHeadElement)(t)})},function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.mjml2html=e.MJMLValidator=e.version=e.mjIncludeRegexp=e.documentParser=e.rulesCollection=e.registerMJRule=e.formatValidationError=e.MJMLHeadElements=e.registerMJHeadElement=e.helpers=e.elements=e.registerMJElement=e.MJMLRenderer=e.MJMLElement=void 0;var i=n(5);Object.defineProperty(e,"mjIncludeRegexp",{enumerable:!0,get:function(){return i.includes}});var a=n(9),u=o(a),s=n(199),c=o(s),l=n(113),f=o(l),p=n(221),h=o(p),d=n(570),v=r(d),g=n(573),m=o(g);e.MJMLElement=m.default,e.MJMLRenderer=u.default,e.registerMJElement=l.registerMJElement,e.elements=f.default,e.helpers=v,e.registerMJHeadElement=p.registerMJHeadElement,e.MJMLHeadElements=h.default,e.formatValidationError=s.formatValidationError,e.registerMJRule=s.registerMJRule,e.rulesCollection=s.rulesCollection;e.documentParser=function t(e,r){var t=n(220).default;return t(e,r)},e.version=function(){return"3.3.2"},e.MJMLValidator=c.default,e.mjml2html=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new u.default(t,e).render()}},function(t,e,n){(function(t){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.includes=void 0;var o=n(7),i=r(o),a=n(8),u=r(a),s=e.includes=/|>\s*<\/mj-include>)/g,c=function(t){return(/]*>([\s\S]*?)<\/mj-container>/.exec(t)||[])[1]},l=function(t){return(/]*>([\s\S]*?)<\/mj-head>/.exec(t)||[])[1]},f=function(t){return t.trim().match(/.mjml/)&&t||t+".mjml"},p=function(t){var e={content:c(t),head:l(t)};return e.content||e.head||(e.content=t),e},h=function t(e,n,r,o){var a=u.default.normalize(u.default.join(e,f(o))),c=void 0;try{c=i.default.readFileSync(a,"utf8")}catch(t){return""}var l=p(c),h=l.content,d=l.head;if(!h&&!d)throw new Error("Error while reading file: "+a+", file has no content ?");if(d){var v=n.length;d=d.replace(s,t.bind(void 0,u.default.resolve(u.default.dirname(a)),n)),n.splice(v-1,0,d)}return h&&(h=h.replace(s,t.bind(void 0,u.default.resolve(u.default.dirname(a)),n))),h||""};e.default=function(e,n){var r=n.filePath,o=[],i=e,a=r?u.default.dirname(r):t.cwd();return i=i.replace(s,h.bind(void 0,u.default.resolve(a),o)),o.length>0&&(i.indexOf("")==-1&&(i=i.replace("","\n \n \n")),i=i.replace("",o.join("\n")+"\n")),i}}).call(e,n(6))},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(t){if(l===setTimeout)return setTimeout(t,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function i(t){if(f===clearTimeout)return clearTimeout(t);if((f===r||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(t);try{return f(t)}catch(e){try{return f.call(null,t)}catch(e){return f.call(this,t)}}}function a(){v&&h&&(v=!1,h.length?d=h.concat(d):g=-1,d.length&&u())}function u(){if(!v){var t=o(a);v=!0;for(var e=d.length;e;){for(h=d,d=[];++g1)for(var n=1;n=0;r--){var o=t[r];"."===o?t.splice(r,1):".."===o?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!o;i--){var a=i>=0?arguments[i]:t.cwd();if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,o="/"===a.charAt(0))}return e=n(r(e.split("/"),function(t){return!!t}),!o).join("/"),(o?"/":"")+e||"."},e.normalize=function(t){var o=e.isAbsolute(t),i="/"===a(t,-1);return t=n(r(t.split("/"),function(t){return!!t}),!o).join("/"),t||o||(t="."),t&&i&&(t+="/"),(o?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(r(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0&&""===t[n];n--);return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var o=r(t.split("/")),i=r(n.split("/")),a=Math.min(o.length,i.length),u=a,s=0;s","<=","=>","{%","%}","{{{","}}}"],X=Math.floor(1099511627776*Math.random()).toString(16),Q="__MJML__"+X+"__",Z=function t(e){e.children&&e.children&&(0,g.default)(e.children,t),e.content&&(e.content=tt(e.content))},tt=function(t){return Y.reduce(function(t,e,n){return t.replace(new RegExp(e,"g"),""+Q+n)},t)},et=function(t){return Y.reduce(function(t,e,n){return t.replace(new RegExp(""+Q+n,"g"),e)},t)},nt=function(t){return(0,y.default)(t.children,["tagName","mj-body"])},rt=function(t){return(0,y.default)(t.children,["tagName","mj-head"])},ot=function(t){var e=n(463),r=e.minify;return r(t,{collapseWhitespace:!0,removeEmptyAttributes:!0,minifyCSS:!0})},it=function(t){return(0,R.html)(t,{indent_size:2,wrap_attributes_indent_size:2})},at=function(t,e){if(!e||0==e.length)return t;var r=n(464);return r(t,{extraCss:e.join("\n"),removeStyleTags:!1,applyStyleTags:!1,insertPreservedExtraCss:!1})},ut=function(){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};o(this,t),(0,z.default)()||(0,p.default)(),this.attributes={container:(0,k.default)(),defaultAttributes:{},cssClasses:{},css:[],inlineCSS:[],fonts:(0,l.default)(O.default)},this.content=e,this.options=(0,x.default)(n,{level:"soft",disableMjStyle:!1,disableMjInclude:!1,disableMinify:!1}),"string"==typeof this.content&&this.parseDocument()}return i(t,[{key:"parseDocument",value:function(){this.options.disableMjInclude||(this.content=(0,I.default)(this.content,this.options)),this.content=(0,b.default)(this.content)}},{key:"validate",value:function(t){if("skip"==this.options.level)return void(this.errors=[]);if(this.errors=(0,L.default)(t),"strict"==this.options.level&&this.errors.length>0)throw new a.MJMLValidationError(this.errors)}},{key:"render",value:function(){var t=this;if(!this.content||!nt(this.content))throw new a.EmptyMJMLError(".render: No MJML to render in options "+this.options.toString());Z(this.content);var e=nt(this.content),n=rt(this.content);n&&n.children.length>0&&(0,g.default)(n.children,function(e){var n=e.tagName,r=V.default[n];r?r(e,t.attributes):(0,J.default)(!1,"No handler found for: "+n+", in mj-head, skipping it")});var r=e.children[0];this.validate(r);var o=q.default[r.tagName];if(!o)return{errors:this.errors};var i=W.default.createElement(o,{mjml:(0,s.parseInstance)(r,this.attributes)}),u=$.default.renderToStaticMarkup(i),c=this.attributes.container.replace("__content__",u||"").replace("__title__",this.attributes.title||"");return{errors:this.errors,html:this.postRender(c)}}},{key:"postRender",value:function(t){var e=this.attributes.inlineCSS,n=T.default.parseHTML(t);return(0,D.default)({$:n,fonts:this.attributes.fonts}),n=(0,u.fixLegacyAttrs)(n),n=(0,u.insertHeadCSS)(n,this.attributes.css),B.postRenders.forEach(function(t){"function"==typeof t&&(n=t(n))}),[this.options.disableMjStyle?void 0:(0,d.default)(at)(e),this.options.beautify?it:void 0,!this.options.disableMinify&&this.options.minify?ot:void 0,A.default.decode,et].filter(function(t){return"function"==typeof t}).reduce(function(t,e){return e(t)},T.default.getHTML(n))}}]),t}();e.default=ut},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n'+e.join("")+""),t):t},e.fixLegacyAttrs=function(t){var e=["align","valign","bgcolor","border","background"];return e.forEach(function(e){var n="data-legacy-"+e;t("["+n+"]").each(function(){t(this).attr(e,t(this).attr(n)),t(this).removeAttr(n)})}),t}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e>>0;if(""+n!==e||4294967295===n)return NaN;e=n}return e<0?d(t)+e:e}function g(){return!0}function m(t,e,n){return(0===t||void 0!==n&&t<=-n)&&(void 0===e||void 0!==n&&e>=n)}function y(t,e){return b(t,e,0)}function _(t,e){return b(t,e,e)}function b(t,e,n){return void 0===t?n:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}function w(t){this.next=t}function x(t,e,n,r){var o=0===t?e:1===t?n:[e,n];return r?r.value=o:r={value:o,done:!1},r}function E(){return{value:void 0,done:!0}}function k(t){return!!S(t)}function j(t){return t&&"function"==typeof t.next}function O(t){var e=S(t);return e&&e.call(t)}function S(t){var e=t&&(En&&t[En]||t[kn]);if("function"==typeof e)return e}function T(t){return t&&"number"==typeof t.length}function C(t){return null===t||void 0===t?B():i(t)?t.toSeq():V(t)}function A(t){return null===t||void 0===t?B().toKeyedSeq():i(t)?a(t)?t.toSeq():t.fromEntrySeq():q(t)}function N(t){return null===t||void 0===t?B():i(t)?a(t)?t.entrySeq():t.toIndexedSeq():U(t)}function D(t){return(null===t||void 0===t?B():i(t)?a(t)?t.entrySeq():t:U(t)).toSetSeq()}function M(t){this._array=t,this.size=t.length}function I(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function R(t){this._iterable=t,this.size=t.length||t.size}function P(t){this._iterator=t,this._iteratorCache=[]}function L(t){return!(!t||!t[On])}function B(){return Sn||(Sn=new M([]))}function q(t){var e=Array.isArray(t)?new M(t).fromEntrySeq():j(t)?new P(t).fromEntrySeq():k(t)?new R(t).fromEntrySeq():"object"==typeof t?new I(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function U(t){var e=F(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function V(t){var e=F(t)||"object"==typeof t&&new I(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}function F(t){return T(t)?new M(t):j(t)?new P(t):k(t)?new R(t):void 0}function z(t,e,n,r){var o=t._cache;if(o){for(var i=o.length-1,a=0;a<=i;a++){var u=o[n?i-a:a];if(e(u[1],r?u[0]:a,t)===!1)return a+1}return a}return t.__iterateUncached(e,n)}function H(t,e,n,r){var o=t._cache;if(o){var i=o.length-1,a=0;return new w(function(){var t=o[n?i-a:a];return a++>i?E():x(e,r?t[0]:a-1,t[1])})}return t.__iteratorUncached(e,n)}function W(t,e){return e?K(e,t,"",{"":t}):$(t)}function K(t,e,n,r){return Array.isArray(e)?t.call(r,n,N(e).map(function(n,r){return K(t,n,r,e)})):G(e)?t.call(r,n,A(e).map(function(n,r){return K(t,n,r,e)})):e}function $(t){return Array.isArray(t)?N(t).map($).toList():G(t)?A(t).map($).toMap():t}function G(t){return t&&(t.constructor===Object||void 0===t.constructor)}function J(t,e){if(t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if(t=t.valueOf(),e=e.valueOf(),t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1}return!("function"!=typeof t.equals||"function"!=typeof e.equals||!t.equals(e))}function Y(t,e){if(t===e)return!0;if(!i(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||a(t)!==a(e)||u(t)!==u(e)||c(t)!==c(e))return!1;if(0===t.size&&0===e.size)return!0;var n=!s(t);if(c(t)){var r=t.entries();return e.every(function(t,e){var o=r.next().value;return o&&J(o[1],t)&&(n||J(o[0],e))})&&r.next().done}var o=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{o=!0;var l=t;t=e,e=l}var f=!0,p=e.__iterate(function(e,r){if(n?!t.has(e):o?!J(e,t.get(r,mn)):!J(t.get(r,mn),e))return f=!1,!1});return f&&t.size===p}function X(t,e){if(!(this instanceof X))return new X(t,e);if(this._value=t,this.size=void 0===e?1/0:Math.max(0,e),0===this.size){if(Tn)return Tn;Tn=this}}function Q(t,e){if(!t)throw new Error(e)}function Z(t,e,n){if(!(this instanceof Z))return new Z(t,e,n);if(Q(0!==n,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),n=void 0===n?1:Math.abs(n),e>>1&1073741824|3221225471&t}function it(t){if(t===!1||null===t||void 0===t)return 0;if("function"==typeof t.valueOf&&(t=t.valueOf(),t===!1||null===t||void 0===t))return 0;if(t===!0)return 1;var e=typeof t;if("number"===e){if(t!==t||t===1/0)return 0;var n=0|t;for(n!==t&&(n^=4294967295*t);t>4294967295;)t/=4294967295,n^=t;return ot(n)}if("string"===e)return t.length>Ln?at(t):ut(t);if("function"==typeof t.hashCode)return t.hashCode();if("object"===e)return st(t);if("function"==typeof t.toString)return ut(t.toString());throw new Error("Value type "+e+" cannot be hashed.")}function at(t){var e=Un[t];return void 0===e&&(e=ut(t),qn===Bn&&(qn=0,Un={}),qn++,Un[t]=e),e}function ut(t){for(var e=0,n=0;n0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}function lt(t){Q(t!==1/0,"Cannot perform this action with an infinite size.")}function ft(t){return null===t||void 0===t?xt():pt(t)&&!c(t)?t:xt().withMutations(function(e){var r=n(t);lt(r.size),r.forEach(function(t,n){return e.set(n,t)})})}function pt(t){return!(!t||!t[Vn])}function ht(t,e){this.ownerID=t,this.entries=e}function dt(t,e,n){this.ownerID=t,this.bitmap=e,this.nodes=n}function vt(t,e,n){this.ownerID=t,this.count=e,this.nodes=n}function gt(t,e,n){this.ownerID=t,this.keyHash=e,this.entries=n}function mt(t,e,n){this.ownerID=t,this.keyHash=e,this.entry=n}function yt(t,e,n){this._type=e,this._reverse=n,this._stack=t._root&&bt(t._root)}function _t(t,e){return x(t,e[0],e[1])}function bt(t,e){return{node:t,index:0,__prev:e}}function wt(t,e,n,r){var o=Object.create(Fn);return o.size=t,o._root=e,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function xt(){return zn||(zn=wt(0))}function Et(t,e,n){var r,o;if(t._root){var i=l(yn),a=l(_n);if(r=kt(t._root,t.__ownerID,0,void 0,e,n,i,a),!a.value)return t;o=t.size+(i.value?n===mn?-1:1:0)}else{if(n===mn)return t;o=1,r=new ht(t.__ownerID,[[e,n]])}return t.__ownerID?(t.size=o,t._root=r,t.__hash=void 0,t.__altered=!0,t):r?wt(o,r):xt()}function kt(t,e,n,r,o,i,a,u){return t?t.update(e,n,r,o,i,a,u):i===mn?t:(f(u),f(a),new mt(e,r,[o,i]))}function jt(t){return t.constructor===mt||t.constructor===gt}function Ot(t,e,n,r,o){if(t.keyHash===r)return new gt(e,r,[t.entry,o]);var i,a=(0===n?t.keyHash:t.keyHash>>>n)&gn,u=(0===n?r:r>>>n)&gn,s=a===u?[Ot(t,e,n+dn,r,o)]:(i=new mt(e,r,o),a>>=1)a[u]=1&n?e[i++]:void 0;return a[r]=o,new vt(t,i+1,a)}function At(t,e,r){for(var o=[],a=0;a>1&1431655765,t=(858993459&t)+(t>>2&858993459),t=t+(t>>4)&252645135,t+=t>>8,t+=t>>16,127&t}function Pt(t,e,n,r){var o=r?t:h(t);return o[e]=n,o}function Lt(t,e,n,r){var o=t.length+1;if(r&&e+1===o)return t[e]=n,t;for(var i=new Array(o),a=0,u=0;u0&&oi?0:i-n,c=a-n;return c>vn&&(c=vn),function(){if(o===c)return Yn;var t=e?--c:o++;return r&&r[t]}}function o(t,r,o){var u,s=t&&t.array,c=o>i?0:i-o>>r,l=(a-o>>r)+1;return l>vn&&(l=vn),function(){for(;;){if(u){var t=u();if(t!==Yn)return t;u=null}if(c===l)return Yn;var i=e?--l:c++;u=n(s&&s[i],r-dn,o+(i<=t.size||e<0)return t.withMutations(function(t){e<0?Jt(t,e).set(0,n):Jt(t,0,e+1).set(e,n)});e+=t._origin;var r=t._tail,o=t._root,i=l(_n);return e>=Xt(t._capacity)?r=Kt(r,t.__ownerID,0,e,n,i):o=Kt(o,t.__ownerID,t._level,e,n,i),i.value?t.__ownerID?(t._root=o,t._tail=r,t.__hash=void 0,t.__altered=!0,t):zt(t._origin,t._capacity,t._level,o,r):t}function Kt(t,e,n,r,o,i){var a=r>>>n&gn,u=t&&a0){var c=t&&t.array[a],l=Kt(c,e,n-dn,r,o,i);return l===c?t:(s=$t(t,e),s.array[a]=l,s)}return u&&t.array[a]===o?t:(f(i),s=$t(t,e),void 0===o&&a===s.array.length-1?s.array.pop():s.array[a]=o,s)}function $t(t,e){return e&&t&&e===t.ownerID?t:new Vt(t?t.array.slice():[],e)}function Gt(t,e){if(e>=Xt(t._capacity))return t._tail;if(e<1<0;)n=n.array[e>>>r&gn],r-=dn;return n}}function Jt(t,e,n){void 0!==e&&(e|=0),void 0!==n&&(n|=0);var r=t.__ownerID||new p,o=t._origin,i=t._capacity,a=o+e,u=void 0===n?i:n<0?i+n:o+n;if(a===o&&u===i)return t;if(a>=u)return t.clear();for(var s=t._level,c=t._root,l=0;a+l<0;)c=new Vt(c&&c.array.length?[void 0,c]:[],r),s+=dn,l+=1<=1<f?new Vt([],r):d;if(d&&h>f&&adn;m-=dn){var y=f>>>m&gn;g=g.array[y]=$t(g.array[y],r)}g.array[f>>>dn&gn]=d}if(u=h)a-=h,u-=h,s=dn,c=null,v=v&&v.removeBefore(r,0,a);else if(a>o||h>>s&gn;if(_!==h>>>s&gn)break;_&&(l+=(1<o&&(c=c.removeBefore(r,s,a-l)),c&&ha&&(a=c.size),i(s)||(c=c.map(function(t){return W(t)})),o.push(c)}return a>t.size&&(t=t.setSize(a)),Mt(t,e,o)}function Xt(t){return t>>dn<=vn&&a.size>=2*i.size?(o=a.filter(function(t,e){return void 0!==t&&u!==e}),r=o.toKeyedSeq().map(function(t){return t[0]}).flip().toMap(),t.__ownerID&&(r.__ownerID=o.__ownerID=t.__ownerID)):(r=i.remove(e),o=u===a.size-1?a.pop():a.set(u,void 0))}else if(s){if(n===a.get(u)[1])return t;r=i,o=a.set(u,[e,n])}else r=i.set(e,a.size),o=a.set(a.size,[e,n]);return t.__ownerID?(t.size=r.size,t._map=r,t._list=o,t.__hash=void 0,t):te(r,o)}function re(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function oe(t){this._iter=t,this.size=t.size}function ie(t){this._iter=t,this.size=t.size}function ae(t){this._iter=t,this.size=t.size}function ue(t){var e=Te(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=Ce,e.__iterateUncached=function(e,n){var r=this;return t.__iterate(function(t,n){return e(n,t,r)!==!1},n)},e.__iteratorUncached=function(e,n){if(e===xn){var r=t.__iterator(e,n);return new w(function(){var t=r.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t})}return t.__iterator(e===wn?bn:wn,n)},e}function se(t,e,n){var r=Te(t);return r.size=t.size,r.has=function(e){return t.has(e)},r.get=function(r,o){var i=t.get(r,mn);return i===mn?o:e.call(n,i,r,t)},r.__iterateUncached=function(r,o){var i=this;return t.__iterate(function(t,o,a){return r(e.call(n,t,o,a),o,i)!==!1},o)},r.__iteratorUncached=function(r,o){var i=t.__iterator(xn,o);return new w(function(){var o=i.next();if(o.done)return o;var a=o.value,u=a[0];return x(r,u,e.call(n,a[1],u,t),o)})},r}function ce(t,e){var n=Te(t);return n._iter=t,n.size=t.size,n.reverse=function(){return t},t.flip&&(n.flip=function(){var e=ue(t);return e.reverse=function(){return t.flip()},e}),n.get=function(n,r){return t.get(e?n:-1-n,r)},n.has=function(n){return t.has(e?n:-1-n)},n.includes=function(e){return t.includes(e)},n.cacheResult=Ce,n.__iterate=function(e,n){var r=this;return t.__iterate(function(t,n){return e(t,n,r)},!n)},n.__iterator=function(e,n){return t.__iterator(e,!n)},n}function le(t,e,n,r){var o=Te(t);return r&&(o.has=function(r){var o=t.get(r,mn);return o!==mn&&!!e.call(n,o,r,t)},o.get=function(r,o){var i=t.get(r,mn);return i!==mn&&e.call(n,i,r,t)?i:o}),o.__iterateUncached=function(o,i){var a=this,u=0;return t.__iterate(function(t,i,s){if(e.call(n,t,i,s))return u++,o(t,r?i:u-1,a)},i),u},o.__iteratorUncached=function(o,i){var a=t.__iterator(xn,i),u=0;return new w(function(){for(;;){var i=a.next();if(i.done)return i;var s=i.value,c=s[0],l=s[1];if(e.call(n,l,c,t))return x(o,r?c:u++,l,i)}})},o}function fe(t,e,n){var r=ft().asMutable();return t.__iterate(function(o,i){r.update(e.call(n,o,i,t),0,function(t){return t+1})}),r.asImmutable()}function pe(t,e,n){var r=a(t),o=(c(t)?Qt():ft()).asMutable();t.__iterate(function(i,a){o.update(e.call(n,i,a,t),function(t){return t=t||[],t.push(r?[a,i]:i),t})});var i=Se(t);return o.map(function(e){return ke(t,i(e))})}function he(t,e,n,r){var o=t.size;if(void 0!==e&&(e|=0),void 0!==n&&(n===1/0?n=o:n|=0),m(e,n,o))return t;var i=y(e,o),a=_(n,o);if(i!==i||a!==a)return he(t.toSeq().cacheResult(),e,n,r);var u,s=a-i;s===s&&(u=s<0?0:s);var c=Te(t);return c.size=0===u?u:t.size&&u||void 0,!r&&L(t)&&u>=0&&(c.get=function(e,n){return e=v(this,e),e>=0&&eu)return E();var t=o.next();return r||e===wn?t:e===bn?x(e,s-1,void 0,t):x(e,s-1,t.value[1],t)})},c}function de(t,e,n){var r=Te(t);return r.__iterateUncached=function(r,o){var i=this;if(o)return this.cacheResult().__iterate(r,o);var a=0;return t.__iterate(function(t,o,u){return e.call(n,t,o,u)&&++a&&r(t,o,i)}),a},r.__iteratorUncached=function(r,o){var i=this;if(o)return this.cacheResult().__iterator(r,o);var a=t.__iterator(xn,o),u=!0;return new w(function(){if(!u)return E();var t=a.next();if(t.done)return t;var o=t.value,s=o[0],c=o[1];return e.call(n,c,s,i)?r===xn?t:x(r,s,c,t):(u=!1,E())})},r}function ve(t,e,n,r){var o=Te(t);return o.__iterateUncached=function(o,i){var a=this;if(i)return this.cacheResult().__iterate(o,i);var u=!0,s=0;return t.__iterate(function(t,i,c){if(!u||!(u=e.call(n,t,i,c)))return s++,o(t,r?i:s-1,a)}),s},o.__iteratorUncached=function(o,i){var a=this;if(i)return this.cacheResult().__iterator(o,i);var u=t.__iterator(xn,i),s=!0,c=0;return new w(function(){var t,i,l;do{if(t=u.next(),t.done)return r||o===wn?t:o===bn?x(o,c++,void 0,t):x(o,c++,t.value[1],t);var f=t.value;i=f[0],l=f[1],s&&(s=e.call(n,l,i,a))}while(s);return o===xn?t:x(o,i,l,t)})},o}function ge(t,e){var r=a(t),o=[t].concat(e).map(function(t){return i(t)?r&&(t=n(t)):t=r?q(t):U(Array.isArray(t)?t:[t]),t}).filter(function(t){return 0!==t.size});if(0===o.length)return t;if(1===o.length){var s=o[0];if(s===t||r&&a(s)||u(t)&&u(s))return s}var c=new M(o);return r?c=c.toKeyedSeq():u(t)||(c=c.toSetSeq()),c=c.flatten(!0),c.size=o.reduce(function(t,e){if(void 0!==t){var n=e.size;if(void 0!==n)return t+n}},0),c}function me(t,e,n){var r=Te(t);return r.__iterateUncached=function(r,o){function a(t,c){var l=this;t.__iterate(function(t,o){return(!e||c0}function Ee(t,n,r){var o=Te(t);return o.size=new M(r).map(function(t){return t.size}).min(),o.__iterate=function(t,e){for(var n,r=this.__iterator(wn,e),o=0;!(n=r.next()).done&&t(n.value,o++,this)!==!1;);return o},o.__iteratorUncached=function(t,o){var i=r.map(function(t){return t=e(t),O(o?t.reverse():t)}),a=0,u=!1;return new w(function(){var e;return u||(e=i.map(function(t){return t.next()}),u=e.some(function(t){return t.done})),u?E():x(t,a++,n.apply(null,e.map(function(t){return t.value})))})},o}function ke(t,e){return L(t)?e:t.constructor(e)}function je(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function Oe(t){return lt(t.size),d(t)}function Se(t){return a(t)?n:u(t)?r:o}function Te(t){return Object.create((a(t)?A:u(t)?N:D).prototype)}function Ce(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):C.prototype.cacheResult.call(this)}function Ae(t,e){return t>e?1:te?-1:0}function on(t){if(t.size===1/0)return 0;var e=c(t),n=a(t),r=e?1:0,o=t.__iterate(n?e?function(t,e){r=31*r+un(it(t),it(e))|0}:function(t,e){r=r+un(it(t),it(e))|0}:e?function(t){r=31*r+it(t)|0}:function(t){r=r+it(t)|0});return an(o,r)}function an(t,e){return e=Nn(e,3432918353),e=Nn(e<<15|e>>>-15,461845907),e=Nn(e<<13|e>>>-13,5),e=(e+3864292196|0)^t,e=Nn(e^e>>>16,2246822507),e=Nn(e^e>>>13,3266489909),e=ot(e^e>>>16)}function un(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}var sn=Array.prototype.slice;t(n,e),t(r,e),t(o,e),e.isIterable=i,e.isKeyed=a,e.isIndexed=u,e.isAssociative=s,e.isOrdered=c,e.Keyed=n,e.Indexed=r,e.Set=o;var cn="@@__IMMUTABLE_ITERABLE__@@",ln="@@__IMMUTABLE_KEYED__@@",fn="@@__IMMUTABLE_INDEXED__@@",pn="@@__IMMUTABLE_ORDERED__@@",hn="delete",dn=5,vn=1<r?E():x(t,o,n[e?r-o++:o++])})},t(I,A),I.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},I.prototype.has=function(t){return this._object.hasOwnProperty(t)},I.prototype.__iterate=function(t,e){for(var n=this._object,r=this._keys,o=r.length-1,i=0;i<=o;i++){var a=r[e?o-i:i];if(t(n[a],a,this)===!1)return i+1}return i},I.prototype.__iterator=function(t,e){var n=this._object,r=this._keys,o=r.length-1,i=0;return new w(function(){var a=r[e?o-i:i];return i++>o?E():x(t,a,n[a])})},I.prototype[pn]=!0,t(R,N),R.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);var n=this._iterable,r=O(n),o=0;if(j(r))for(var i;!(i=r.next()).done&&t(i.value,o++,this)!==!1;);return o},R.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var n=this._iterable,r=O(n);if(!j(r))return new w(E);var o=0;return new w(function(){var e=r.next();return e.done?e:x(t,o++,e.value)})},t(P,N),P.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);for(var n=this._iterator,r=this._iteratorCache,o=0;o=r.length){var e=n.next();if(e.done)return e;r[o]=e.value}return x(t,o,r[o++])})};var Sn;t(X,N),X.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},X.prototype.get=function(t,e){return this.has(t)?this._value:e},X.prototype.includes=function(t){return J(this._value,t)},X.prototype.slice=function(t,e){var n=this.size;return m(t,e,n)?this:new X(this._value,_(e,n)-y(t,n))},X.prototype.reverse=function(){return this},X.prototype.indexOf=function(t){return J(this._value,t)?0:-1},X.prototype.lastIndexOf=function(t){return J(this._value,t)?this.size:-1},X.prototype.__iterate=function(t,e){for(var n=0;n=0&&e=0&&nn?E():x(t,i++,a)})},Z.prototype.equals=function(t){return t instanceof Z?this._start===t._start&&this._end===t._end&&this._step===t._step:Y(this,t)};var Cn;t(tt,e),t(et,tt),t(nt,tt),t(rt,tt),tt.Keyed=et,tt.Indexed=nt,tt.Set=rt;var An,Nn="function"==typeof Math.imul&&Math.imul(4294967295,2)===-2?Math.imul:function(t,e){t|=0,e|=0;var n=65535&t,r=65535&e;return n*r+((t>>>16)*r+n*(e>>>16)<<16>>>0)|0},Dn=Object.isExtensible,Mn=function(){try{return Object.defineProperty({},"@",{}),!0}catch(t){return!1}}(),In="function"==typeof WeakMap;In&&(An=new WeakMap);var Rn=0,Pn="__immutablehash__";"function"==typeof Symbol&&(Pn=Symbol(Pn));var Ln=16,Bn=255,qn=0,Un={};t(ft,et),ft.of=function(){var t=sn.call(arguments,0);return xt().withMutations(function(e){for(var n=0;n=t.length)throw new Error("Missing value for key: "+t[n]);e.set(t[n],t[n+1])}})},ft.prototype.toString=function(){return this.__toString("Map {","}")},ft.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},ft.prototype.set=function(t,e){return Et(this,t,e)},ft.prototype.setIn=function(t,e){return this.updateIn(t,mn,function(){return e})},ft.prototype.remove=function(t){return Et(this,t,mn)},ft.prototype.deleteIn=function(t){return this.updateIn(t,function(){return mn})},ft.prototype.update=function(t,e,n){return 1===arguments.length?t(this):this.updateIn([t],e,n)},ft.prototype.updateIn=function(t,e,n){n||(n=e,e=void 0);var r=It(this,Ne(t),e,n);return r===mn?void 0:r},ft.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):xt()},ft.prototype.merge=function(){return At(this,void 0,arguments)},ft.prototype.mergeWith=function(t){var e=sn.call(arguments,1);return At(this,t,e)},ft.prototype.mergeIn=function(t){var e=sn.call(arguments,1);return this.updateIn(t,xt(),function(t){return"function"==typeof t.merge?t.merge.apply(t,e):e[e.length-1]})},ft.prototype.mergeDeep=function(){return At(this,Nt,arguments)},ft.prototype.mergeDeepWith=function(t){var e=sn.call(arguments,1);return At(this,Dt(t),e)},ft.prototype.mergeDeepIn=function(t){var e=sn.call(arguments,1); -return this.updateIn(t,xt(),function(t){return"function"==typeof t.mergeDeep?t.mergeDeep.apply(t,e):e[e.length-1]})},ft.prototype.sort=function(t){return Qt(be(this,t))},ft.prototype.sortBy=function(t,e){return Qt(be(this,e,t))},ft.prototype.withMutations=function(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},ft.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new p)},ft.prototype.asImmutable=function(){return this.__ensureOwner()},ft.prototype.wasAltered=function(){return this.__altered},ft.prototype.__iterator=function(t,e){return new yt(this,t,e)},ft.prototype.__iterate=function(t,e){var n=this,r=0;return this._root&&this._root.iterate(function(e){return r++,t(e[1],e[0],n)},e),r},ft.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?wt(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},ft.isMap=pt;var Vn="@@__IMMUTABLE_MAP__@@",Fn=ft.prototype;Fn[Vn]=!0,Fn[hn]=Fn.remove,Fn.removeIn=Fn.deleteIn,ht.prototype.get=function(t,e,n,r){for(var o=this.entries,i=0,a=o.length;i=Hn)return St(t,s,r,o);var d=t&&t===this.ownerID,v=d?s:h(s);return p?u?c===l-1?v.pop():v[c]=v.pop():v[c]=[r,o]:v.push([r,o]),d?(this.entries=v,this):new ht(t,v)}},dt.prototype.get=function(t,e,n,r){void 0===e&&(e=it(n));var o=1<<((0===t?e:e>>>t)&gn),i=this.bitmap;return 0===(i&o)?r:this.nodes[Rt(i&o-1)].get(t+dn,e,n,r)},dt.prototype.update=function(t,e,n,r,o,i,a){void 0===n&&(n=it(r));var u=(0===e?n:n>>>e)&gn,s=1<=Wn)return Ct(t,p,c,u,d);if(l&&!d&&2===p.length&&jt(p[1^f]))return p[1^f];if(l&&d&&1===p.length&&jt(d))return d;var v=t&&t===this.ownerID,g=l?d?c:c^s:c|s,m=l?d?Pt(p,f,d,v):Bt(p,f,v):Lt(p,f,d,v);return v?(this.bitmap=g,this.nodes=m,this):new dt(t,g,m)},vt.prototype.get=function(t,e,n,r){void 0===e&&(e=it(n));var o=(0===t?e:e>>>t)&gn,i=this.nodes[o];return i?i.get(t+dn,e,n,r):r},vt.prototype.update=function(t,e,n,r,o,i,a){void 0===n&&(n=it(r));var u=(0===e?n:n>>>e)&gn,s=o===mn,c=this.nodes,l=c[u];if(s&&!l)return this;var f=kt(l,t,e+dn,n,r,o,i,a);if(f===l)return this;var p=this.count;if(l){if(!f&&(p--,p=0&&t>>e&gn;if(r>=this.array.length)return new Vt([],t);var o,i=0===r;if(e>0){var a=this.array[r];if(o=a&&a.removeBefore(t,e-dn,n),o===a&&i)return this}if(i&&!o)return this;var u=$t(this,t);if(!i)for(var s=0;s>>e&gn;if(r>=this.array.length)return this;var o;if(e>0){var i=this.array[r];if(o=i&&i.removeAfter(t,e-dn,n),o===i&&r===this.array.length-1)return this}var a=$t(this,t);return a.array.splice(r+1),o&&(a.array[r]=o),a};var Jn,Yn={};t(Qt,ft),Qt.of=function(){return this(arguments)},Qt.prototype.toString=function(){return this.__toString("OrderedMap {","}")},Qt.prototype.get=function(t,e){var n=this._map.get(t);return void 0!==n?this._list.get(n)[1]:e},Qt.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):ee()},Qt.prototype.set=function(t,e){return ne(this,t,e)},Qt.prototype.remove=function(t){return ne(this,t,mn)},Qt.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},Qt.prototype.__iterate=function(t,e){var n=this;return this._list.__iterate(function(e){return e&&t(e[1],e[0],n)},e)},Qt.prototype.__iterator=function(t,e){return this._list.fromEntrySeq().__iterator(t,e)},Qt.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t),n=this._list.__ensureOwner(t);return t?te(e,n,t,this.__hash):(this.__ownerID=t,this._map=e,this._list=n,this)},Qt.isOrderedMap=Zt,Qt.prototype[pn]=!0,Qt.prototype[hn]=Qt.prototype.remove;var Xn;t(re,A),re.prototype.get=function(t,e){return this._iter.get(t,e)},re.prototype.has=function(t){return this._iter.has(t)},re.prototype.valueSeq=function(){return this._iter.valueSeq()},re.prototype.reverse=function(){var t=this,e=ce(this,!0);return this._useKeys||(e.valueSeq=function(){return t._iter.toSeq().reverse()}),e},re.prototype.map=function(t,e){var n=this,r=se(this,t,e);return this._useKeys||(r.valueSeq=function(){return n._iter.toSeq().map(t,e)}),r},re.prototype.__iterate=function(t,e){var n,r=this;return this._iter.__iterate(this._useKeys?function(e,n){return t(e,n,r)}:(n=e?Oe(this):0,function(o){return t(o,e?--n:n++,r)}),e)},re.prototype.__iterator=function(t,e){if(this._useKeys)return this._iter.__iterator(t,e);var n=this._iter.__iterator(wn,e),r=e?Oe(this):0;return new w(function(){var o=n.next();return o.done?o:x(t,e?--r:r++,o.value,o)})},re.prototype[pn]=!0,t(oe,N),oe.prototype.includes=function(t){return this._iter.includes(t)},oe.prototype.__iterate=function(t,e){var n=this,r=0;return this._iter.__iterate(function(e){return t(e,r++,n)},e)},oe.prototype.__iterator=function(t,e){var n=this._iter.__iterator(wn,e),r=0;return new w(function(){var e=n.next();return e.done?e:x(t,r++,e.value,e)})},t(ie,D),ie.prototype.has=function(t){return this._iter.includes(t)},ie.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){return t(e,e,n)},e)},ie.prototype.__iterator=function(t,e){var n=this._iter.__iterator(wn,e);return new w(function(){var e=n.next();return e.done?e:x(t,e.value,e.value,e)})},t(ae,A),ae.prototype.entrySeq=function(){return this._iter.toSeq()},ae.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){if(e){je(e);var r=i(e);return t(r?e.get(1):e[1],r?e.get(0):e[0],n)}},e)},ae.prototype.__iterator=function(t,e){var n=this._iter.__iterator(wn,e);return new w(function(){for(;;){var e=n.next();if(e.done)return e;var r=e.value;if(r){je(r);var o=i(r);return x(t,o?r.get(0):r[0],o?r.get(1):r[1],e)}}})},oe.prototype.cacheResult=re.prototype.cacheResult=ie.prototype.cacheResult=ae.prototype.cacheResult=Ce,t(De,et),De.prototype.toString=function(){return this.__toString(Ie(this)+" {","}")},De.prototype.has=function(t){return this._defaultValues.hasOwnProperty(t)},De.prototype.get=function(t,e){if(!this.has(t))return e;var n=this._defaultValues[t];return this._map?this._map.get(t,n):n},De.prototype.clear=function(){if(this.__ownerID)return this._map&&this._map.clear(),this;var t=this.constructor;return t._empty||(t._empty=Me(this,xt()))},De.prototype.set=function(t,e){if(!this.has(t))throw new Error('Cannot set unknown key "'+t+'" on '+Ie(this));if(this._map&&!this._map.has(t)){var n=this._defaultValues[t];if(e===n)return this}var r=this._map&&this._map.set(t,e);return this.__ownerID||r===this._map?this:Me(this,r)},De.prototype.remove=function(t){if(!this.has(t))return this;var e=this._map&&this._map.remove(t);return this.__ownerID||e===this._map?this:Me(this,e)},De.prototype.wasAltered=function(){return this._map.wasAltered()},De.prototype.__iterator=function(t,e){var r=this;return n(this._defaultValues).map(function(t,e){return r.get(e)}).__iterator(t,e)},De.prototype.__iterate=function(t,e){var r=this;return n(this._defaultValues).map(function(t,e){return r.get(e)}).__iterate(t,e)},De.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map&&this._map.__ensureOwner(t);return t?Me(this,e,t):(this.__ownerID=t,this._map=e,this)};var Qn=De.prototype;Qn[hn]=Qn.remove,Qn.deleteIn=Qn.removeIn=Fn.removeIn,Qn.merge=Fn.merge,Qn.mergeWith=Fn.mergeWith,Qn.mergeIn=Fn.mergeIn,Qn.mergeDeep=Fn.mergeDeep,Qn.mergeDeepWith=Fn.mergeDeepWith,Qn.mergeDeepIn=Fn.mergeDeepIn,Qn.setIn=Fn.setIn,Qn.update=Fn.update,Qn.updateIn=Fn.updateIn,Qn.withMutations=Fn.withMutations,Qn.asMutable=Fn.asMutable,Qn.asImmutable=Fn.asImmutable,t(Le,rt),Le.of=function(){return this(arguments)},Le.fromKeys=function(t){return this(n(t).keySeq())},Le.prototype.toString=function(){return this.__toString("Set {","}")},Le.prototype.has=function(t){return this._map.has(t)},Le.prototype.add=function(t){return qe(this,this._map.set(t,!0))},Le.prototype.remove=function(t){return qe(this,this._map.remove(t))},Le.prototype.clear=function(){return qe(this,this._map.clear())},Le.prototype.union=function(){var t=sn.call(arguments,0);return t=t.filter(function(t){return 0!==t.size}),0===t.length?this:0!==this.size||this.__ownerID||1!==t.length?this.withMutations(function(e){for(var n=0;n=0;n--)e={value:arguments[n],next:e};return this.__ownerID?(this.size=t,this._head=e,this.__hash=void 0,this.__altered=!0,this):Ge(t,e)},Ke.prototype.pushAll=function(t){if(t=r(t),0===t.size)return this;lt(t.size);var e=this.size,n=this._head;return t.reverse().forEach(function(t){e++,n={value:t,next:n}}),this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):Ge(e,n)},Ke.prototype.pop=function(){return this.slice(1)},Ke.prototype.unshift=function(){return this.push.apply(this,arguments)},Ke.prototype.unshiftAll=function(t){return this.pushAll(t)},Ke.prototype.shift=function(){return this.pop.apply(this,arguments)},Ke.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Je()},Ke.prototype.slice=function(t,e){if(m(t,e,this.size))return this;var n=y(t,this.size),r=_(e,this.size);if(r!==this.size)return nt.prototype.slice.call(this,t,e);for(var o=this.size-n,i=this._head;n--;)i=i.next;return this.__ownerID?(this.size=o,this._head=i,this.__hash=void 0,this.__altered=!0,this):Ge(o,i)},Ke.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Ge(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Ke.prototype.__iterate=function(t,e){if(e)return this.reverse().__iterate(t);for(var n=0,r=this._head;r&&t(r.value,n++,this)!==!1;)r=r.next;return n},Ke.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var n=0,r=this._head;return new w(function(){if(r){var e=r.value;return r=r.next,x(t,n++,e)}return E()})},Ke.isStack=$e;var or="@@__IMMUTABLE_STACK__@@",ir=Ke.prototype;ir[or]=!0,ir.withMutations=Fn.withMutations,ir.asMutable=Fn.asMutable,ir.asImmutable=Fn.asImmutable,ir.wasAltered=Fn.wasAltered;var ar;e.Iterator=w,Ye(e,{toArray:function(){lt(this.size);var t=new Array(this.size||0);return this.valueSeq().__iterate(function(e,n){t[n]=e}),t},toIndexedSeq:function(){return new oe(this)},toJS:function(){return this.toSeq().map(function(t){return t&&"function"==typeof t.toJS?t.toJS():t}).__toJS()},toJSON:function(){return this.toSeq().map(function(t){return t&&"function"==typeof t.toJSON?t.toJSON():t}).__toJS()},toKeyedSeq:function(){return new re(this,!0)},toMap:function(){return ft(this.toKeyedSeq())},toObject:function(){lt(this.size);var t={};return this.__iterate(function(e,n){t[n]=e}),t},toOrderedMap:function(){return Qt(this.toKeyedSeq())},toOrderedSet:function(){return Fe(a(this)?this.valueSeq():this)},toSet:function(){return Le(a(this)?this.valueSeq():this)},toSetSeq:function(){return new ie(this)},toSeq:function(){return u(this)?this.toIndexedSeq():a(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Ke(a(this)?this.valueSeq():this)},toList:function(){return qt(a(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(t,e){return 0===this.size?t+e:t+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+e},concat:function(){var t=sn.call(arguments,0);return ke(this,ge(this,t))},includes:function(t){return this.some(function(e){return J(e,t)})},entries:function(){return this.__iterator(xn)},every:function(t,e){lt(this.size);var n=!0;return this.__iterate(function(r,o,i){if(!t.call(e,r,o,i))return n=!1,!1}),n},filter:function(t,e){return ke(this,le(this,t,e,!0))},find:function(t,e,n){var r=this.findEntry(t,e);return r?r[1]:n},forEach:function(t,e){return lt(this.size),this.__iterate(e?t.bind(e):t)},join:function(t){lt(this.size),t=void 0!==t?""+t:",";var e="",n=!0;return this.__iterate(function(r){n?n=!1:e+=t,e+=null!==r&&void 0!==r?r.toString():""}),e},keys:function(){return this.__iterator(bn)},map:function(t,e){return ke(this,se(this,t,e))},reduce:function(t,e,n){lt(this.size);var r,o;return arguments.length<2?o=!0:r=e,this.__iterate(function(e,i,a){o?(o=!1,r=e):r=t.call(n,r,e,i,a)}),r},reduceRight:function(t,e,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return ke(this,ce(this,!0))},slice:function(t,e){return ke(this,he(this,t,e,!0))},some:function(t,e){return!this.every(Ze(t),e)},sort:function(t){return ke(this,be(this,t))},values:function(){return this.__iterator(wn)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some(function(){return!0})},count:function(t,e){return d(t?this.toSeq().filter(t,e):this)},countBy:function(t,e){return fe(this,t,e)},equals:function(t){return Y(this,t)},entrySeq:function(){var t=this;if(t._cache)return new M(t._cache);var e=t.toSeq().map(Qe).toIndexedSeq();return e.fromEntrySeq=function(){return t.toSeq()},e},filterNot:function(t,e){return this.filter(Ze(t),e)},findEntry:function(t,e,n){var r=n;return this.__iterate(function(n,o,i){if(t.call(e,n,o,i))return r=[o,n],!1}),r},findKey:function(t,e){var n=this.findEntry(t,e);return n&&n[0]},findLast:function(t,e,n){return this.toKeyedSeq().reverse().find(t,e,n)},findLastEntry:function(t,e,n){return this.toKeyedSeq().reverse().findEntry(t,e,n)},findLastKey:function(t,e){return this.toKeyedSeq().reverse().findKey(t,e)},first:function(){return this.find(g)},flatMap:function(t,e){return ke(this,ye(this,t,e))},flatten:function(t){return ke(this,me(this,t,!0))},fromEntrySeq:function(){return new ae(this)},get:function(t,e){return this.find(function(e,n){return J(n,t)},void 0,e)},getIn:function(t,e){for(var n,r=this,o=Ne(t);!(n=o.next()).done;){var i=n.value;if(r=r&&r.get?r.get(i,mn):mn,r===mn)return e}return r},groupBy:function(t,e){return pe(this,t,e)},has:function(t){return this.get(t,mn)!==mn},hasIn:function(t){return this.getIn(t,mn)!==mn},isSubset:function(t){return t="function"==typeof t.includes?t:e(t),this.every(function(e){return t.includes(e)})},isSuperset:function(t){return t="function"==typeof t.isSubset?t:e(t),t.isSubset(this)},keyOf:function(t){return this.findKey(function(e){return J(e,t)})},keySeq:function(){return this.toSeq().map(Xe).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(t){return this.toKeyedSeq().reverse().keyOf(t)},max:function(t){return we(this,t)},maxBy:function(t,e){return we(this,e,t)},min:function(t){return we(this,t?tn(t):rn)},minBy:function(t,e){return we(this,e?tn(e):rn,t)},rest:function(){return this.slice(1)},skip:function(t){return this.slice(Math.max(0,t))},skipLast:function(t){return ke(this,this.toSeq().reverse().skip(t).reverse())},skipWhile:function(t,e){return ke(this,ve(this,t,e,!0))},skipUntil:function(t,e){return this.skipWhile(Ze(t),e)},sortBy:function(t,e){return ke(this,be(this,e,t))},take:function(t){return this.slice(0,Math.max(0,t))},takeLast:function(t){return ke(this,this.toSeq().reverse().take(t).reverse())},takeWhile:function(t,e){return ke(this,de(this,t,e))},takeUntil:function(t,e){return this.takeWhile(Ze(t),e)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=on(this))}});var ur=e.prototype;ur[cn]=!0,ur[jn]=ur.values,ur.__toJS=ur.toArray,ur.__toStringMapper=en,ur.inspect=ur.toSource=function(){return this.toString()},ur.chain=ur.flatMap,ur.contains=ur.includes,Ye(n,{flip:function(){return ke(this,ue(this))},mapEntries:function(t,e){var n=this,r=0;return ke(this,this.toSeq().map(function(o,i){return t.call(e,[i,o],r++,n)}).fromEntrySeq())},mapKeys:function(t,e){var n=this;return ke(this,this.toSeq().flip().map(function(r,o){return t.call(e,r,o,n)}).flip())}});var sr=n.prototype;sr[ln]=!0,sr[jn]=ur.entries,sr.__toJS=ur.toObject,sr.__toStringMapper=function(t,e){return JSON.stringify(e)+": "+en(t)},Ye(r,{toKeyedSeq:function(){return new re(this,!1)},filter:function(t,e){return ke(this,le(this,t,e,!1))},findIndex:function(t,e){var n=this.findEntry(t,e);return n?n[0]:-1},indexOf:function(t){var e=this.keyOf(t);return void 0===e?-1:e},lastIndexOf:function(t){var e=this.lastKeyOf(t);return void 0===e?-1:e},reverse:function(){return ke(this,ce(this,!1))},slice:function(t,e){return ke(this,he(this,t,e,!1))},splice:function(t,e){var n=arguments.length;if(e=Math.max(0|e,0),0===n||2===n&&!e)return this;t=y(t,t<0?this.count():this.size);var r=this.slice(0,t);return ke(this,1===n?r:r.concat(h(arguments,2),this.slice(t+e)))},findLastIndex:function(t,e){var n=this.findLastEntry(t,e);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(t){return ke(this,me(this,t,!1))},get:function(t,e){return t=v(this,t),t<0||this.size===1/0||void 0!==this.size&&t>this.size?e:this.find(function(e,n){return n===t},void 0,e)},has:function(t){return t=v(this,t),t>=0&&(void 0!==this.size?this.size===1/0||t0){if(++e>=r)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var r=800,o=16,i=Date.now;t.exports=n},function(t,e,n){function r(t,e,n,a,u,s){return i(t)&&i(e)&&(s.set(e,t),o(t,e,void 0,r,s),s.delete(e)),t}var o=n(39),i=n(32);t.exports=r},function(t,e,n){function r(t,e,n,l,f){t!==e&&a(e,function(a,c){if(s(a))f||(f=new o),u(t,e,c,n,r,l,f);else{var p=l?l(t[c],a,c+"",t,e,f):void 0;void 0===p&&(p=a),i(t,c,p)}},c)}var o=n(40),i=n(70),a=n(72),u=n(74),s=n(32),c=n(103);t.exports=r},function(t,e,n){function r(t){var e=this.__data__=new o(t);this.size=e.size}var o=n(41),i=n(49),a=n(50),u=n(51),s=n(52),c=n(53);r.prototype.clear=i,r.prototype.delete=a,r.prototype.get=u,r.prototype.has=s,r.prototype.set=c,t.exports=r},function(t,e,n){function r(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1}var o=n(44);t.exports=r},function(t,e,n){function r(t,e){var n=this.__data__,r=o(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}var o=n(44);t.exports=r},function(t,e,n){function r(){this.__data__=new o,this.size=0}var o=n(41);t.exports=r},function(t,e){function n(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}t.exports=n},function(t,e){function n(t){return this.__data__.get(t)}t.exports=n},function(t,e){function n(t){return this.__data__.has(t)}t.exports=n},function(t,e,n){function r(t,e){var n=this.__data__;if(n instanceof o){var r=n.__data__;if(!i||r.length-1&&t%1==0&&t<=r}var r=9007199254740991;t.exports=n},function(t,e,n){(function(t){var r=n(28),o=n(94),i="object"==typeof e&&e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,u=a&&a.exports===i,s=u?r.Buffer:void 0,c=s?s.isBuffer:void 0,l=c||o;t.exports=l}).call(e,n(76)(t))},function(t,e){function n(){return!1}t.exports=n},function(t,e,n){function r(t){if(!a(t)||o(t)!=u)return!1;var e=i(t);if(null===e)return!0;var n=f.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==p}var o=n(26),i=n(83),a=n(88),u="[object Object]",s=Function.prototype,c=Object.prototype,l=s.toString,f=c.hasOwnProperty,p=l.call(Object);t.exports=r},function(t,e,n){var r=n(97),o=n(98),i=n(99),a=i&&i.isTypedArray,u=a?o(a):r;t.exports=u},function(t,e,n){function r(t){return a(t)&&i(t.length)&&!!N[o(t)]}var o=n(26),i=n(92),a=n(88),u="[object Arguments]",s="[object Array]",c="[object Boolean]",l="[object Date]",f="[object Error]",p="[object Function]",h="[object Map]",d="[object Number]",v="[object Object]",g="[object RegExp]",m="[object Set]",y="[object String]",_="[object WeakMap]",b="[object ArrayBuffer]",w="[object DataView]",x="[object Float32Array]",E="[object Float64Array]",k="[object Int8Array]",j="[object Int16Array]",O="[object Int32Array]",S="[object Uint8Array]",T="[object Uint8ClampedArray]",C="[object Uint16Array]",A="[object Uint32Array]",N={};N[x]=N[E]=N[k]=N[j]=N[O]=N[S]=N[T]=N[C]=N[A]=!0,N[u]=N[s]=N[b]=N[c]=N[w]=N[l]=N[f]=N[p]=N[h]=N[d]=N[v]=N[g]=N[m]=N[y]=N[_]=!1,t.exports=r},function(t,e){function n(t){return function(e){return t(e)}}t.exports=n},function(t,e,n){(function(t){var r=n(29),o="object"==typeof e&&e&&!e.nodeType&&e,i=o&&"object"==typeof t&&t&&!t.nodeType&&t,a=i&&i.exports===o,u=a&&r.process,s=function(){try{return u&&u.binding&&u.binding("util")}catch(t){}}();t.exports=s}).call(e,n(76)(t))},function(t,e,n){function r(t){return o(t,i(t))}var o=n(101),i=n(103);t.exports=r},function(t,e,n){function r(t,e,n,r){var a=!n;n||(n={});for(var u=-1,s=e.length;++u-1&&t%1==0&&t1?n[o-1]:void 0,u=o>2?n[2]:void 0;for(a=t.length>3&&"function"==typeof a?(o--,a):void 0,u&&i(n[0],n[1],u)&&(a=o<3?void 0:a,o=1),e=Object(e);++r2?r-2:0);for(var o=2;o-1}function d(t,e,n){for(var r=-1,o=null==t?0:t.length;++r-1;);return n}function q(t,e){for(var n=t.length;n--&&k(e,t[n],0)>-1;);return n}function U(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}function V(t){return"\\"+nr[t]}function F(t,e){return null==t?ot:t[e]}function z(t){return $n.test(t)}function H(t){return Gn.test(t)}function W(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}function K(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function $(t,e){return function(n){return t(e(n))}}function G(t,e){for(var n=-1,r=t.length,o=0,i=[];++n>>1,Vt=[["ary",kt],["bind",mt],["bindKey",yt],["curry",bt],["curryRight",wt],["flip",Ot],["partial",xt],["partialRight",Et],["rearg",jt]],Ft="[object Arguments]",zt="[object Array]",Ht="[object AsyncFunction]",Wt="[object Boolean]",Kt="[object Date]",$t="[object DOMException]",Gt="[object Error]",Jt="[object Function]",Yt="[object GeneratorFunction]",Xt="[object Map]",Qt="[object Number]",Zt="[object Null]",te="[object Object]",ee="[object Promise]",ne="[object Proxy]",re="[object RegExp]",oe="[object Set]",ie="[object String]",ae="[object Symbol]",ue="[object Undefined]",se="[object WeakMap]",ce="[object WeakSet]",le="[object ArrayBuffer]",fe="[object DataView]",pe="[object Float32Array]",he="[object Float64Array]",de="[object Int8Array]",ve="[object Int16Array]",ge="[object Int32Array]",me="[object Uint8Array]",ye="[object Uint8ClampedArray]",_e="[object Uint16Array]",be="[object Uint32Array]",we=/\b__p \+= '';/g,xe=/\b(__p \+=) '' \+/g,Ee=/(__e\(.*?\)|\b__t\)) \+\n'';/g,ke=/&(?:amp|lt|gt|quot|#39);/g,je=/[&<>"']/g,Oe=RegExp(ke.source),Se=RegExp(je.source),Te=/<%-([\s\S]+?)%>/g,Ce=/<%([\s\S]+?)%>/g,Ae=/<%=([\s\S]+?)%>/g,Ne=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,De=/^\w*$/,Me=/^\./,Ie=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Re=/[\\^$.*+?()[\]{}|]/g,Pe=RegExp(Re.source),Le=/^\s+|\s+$/g,Be=/^\s+/,qe=/\s+$/,Ue=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ve=/\{\n\/\* \[wrapped with (.+)\] \*/,Fe=/,? & /,ze=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,He=/\\(\\)?/g,We=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Ke=/\w*$/,$e=/^[-+]0x[0-9a-f]+$/i,Ge=/^0b[01]+$/i,Je=/^\[object .+?Constructor\]$/,Ye=/^0o[0-7]+$/i,Xe=/^(?:0|[1-9]\d*)$/,Qe=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ze=/($^)/,tn=/['\n\r\u2028\u2029\\]/g,en="\\ud800-\\udfff",nn="\\u0300-\\u036f",rn="\\ufe20-\\ufe2f",on="\\u20d0-\\u20ff",an=nn+rn+on,un="\\u2700-\\u27bf",sn="a-z\\xdf-\\xf6\\xf8-\\xff",cn="\\xac\\xb1\\xd7\\xf7",ln="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",fn="\\u2000-\\u206f",pn=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",hn="A-Z\\xc0-\\xd6\\xd8-\\xde",dn="\\ufe0e\\ufe0f",vn=cn+ln+fn+pn,gn="['’]",mn="["+en+"]",yn="["+vn+"]",_n="["+an+"]",bn="\\d+",wn="["+un+"]",xn="["+sn+"]",En="[^"+en+vn+bn+un+sn+hn+"]",kn="\\ud83c[\\udffb-\\udfff]",jn="(?:"+_n+"|"+kn+")",On="[^"+en+"]",Sn="(?:\\ud83c[\\udde6-\\uddff]){2}",Tn="[\\ud800-\\udbff][\\udc00-\\udfff]",Cn="["+hn+"]",An="\\u200d",Nn="(?:"+xn+"|"+En+")",Dn="(?:"+Cn+"|"+En+")",Mn="(?:"+gn+"(?:d|ll|m|re|s|t|ve))?",In="(?:"+gn+"(?:D|LL|M|RE|S|T|VE))?",Rn=jn+"?",Pn="["+dn+"]?",Ln="(?:"+An+"(?:"+[On,Sn,Tn].join("|")+")"+Pn+Rn+")*",Bn="\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)",qn="\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)",Un=Pn+Rn+Ln,Vn="(?:"+[wn,Sn,Tn].join("|")+")"+Un,Fn="(?:"+[On+_n+"?",_n,Sn,Tn,mn].join("|")+")",zn=RegExp(gn,"g"),Hn=RegExp(_n,"g"),Wn=RegExp(kn+"(?="+kn+")|"+Fn+Un,"g"),Kn=RegExp([Cn+"?"+xn+"+"+Mn+"(?="+[yn,Cn,"$"].join("|")+")",Dn+"+"+In+"(?="+[yn,Cn+Nn,"$"].join("|")+")",Cn+"?"+Nn+"+"+Mn,Cn+"+"+In,qn,Bn,bn,Vn].join("|"),"g"),$n=RegExp("["+An+en+an+dn+"]"),Gn=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Jn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Yn=-1,Xn={};Xn[pe]=Xn[he]=Xn[de]=Xn[ve]=Xn[ge]=Xn[me]=Xn[ye]=Xn[_e]=Xn[be]=!0,Xn[Ft]=Xn[zt]=Xn[le]=Xn[Wt]=Xn[fe]=Xn[Kt]=Xn[Gt]=Xn[Jt]=Xn[Xt]=Xn[Qt]=Xn[te]=Xn[re]=Xn[oe]=Xn[ie]=Xn[se]=!1;var Qn={};Qn[Ft]=Qn[zt]=Qn[le]=Qn[fe]=Qn[Wt]=Qn[Kt]=Qn[pe]=Qn[he]=Qn[de]=Qn[ve]=Qn[ge]=Qn[Xt]=Qn[Qt]=Qn[te]=Qn[re]=Qn[oe]=Qn[ie]=Qn[ae]=Qn[me]=Qn[ye]=Qn[_e]=Qn[be]=!0,Qn[Gt]=Qn[Jt]=Qn[se]=!1;var Zn={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},tr={"&":"&","<":"<",">":">",'"':""","'":"'"},er={"&":"&","<":"<",">":">",""":'"',"'":"'"},nr={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},rr=parseFloat,or=parseInt,ir="object"==typeof t&&t&&t.Object===Object&&t,ar="object"==typeof self&&self&&self.Object===Object&&self,ur=ir||ar||Function("return this")(),sr="object"==typeof e&&e&&!e.nodeType&&e,cr=sr&&"object"==typeof o&&o&&!o.nodeType&&o,lr=cr&&cr.exports===sr,fr=lr&&ir.process,pr=function(){try{return fr&&fr.binding&&fr.binding("util")}catch(t){}}(),hr=pr&&pr.isArrayBuffer,dr=pr&&pr.isDate,vr=pr&&pr.isMap,gr=pr&&pr.isRegExp,mr=pr&&pr.isSet,yr=pr&&pr.isTypedArray,_r=T("length"),br=C(Zn),wr=C(tr),xr=C(er),Er=function t(e){function n(t){if(cs(t)&&!wp(t)&&!(t instanceof b)){if(t instanceof o)return t;if(bl.call(t,"__wrapped__"))return aa(t)}return new o(t)}function r(){}function o(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=ot}function b(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Bt,this.__views__=[]}function C(){var t=new b(this.__wrapped__);return t.__actions__=Vo(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Vo(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Vo(this.__views__),t}function X(){if(this.__filtered__){var t=new b(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function et(){var t=this.__wrapped__.value(),e=this.__dir__,n=wp(t),r=e<0,o=n?t.length:0,i=Ai(0,o,this.__views__),a=i.start,u=i.end,s=u-a,c=r?u:a-1,l=this.__iteratees__,f=l.length,p=0,h=Yl(s,this.__takeCount__);if(!n||!r&&o==s&&h==s)return xo(t,this.__actions__);var d=[];t:for(;s--&&p-1}function fn(t,e){var n=this.__data__,r=Mn(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function pn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function Un(t,e,n,r,o,i){var a,u=e&pt,s=e&ht,l=e&dt;if(n&&(a=o?n(t,r,o,i):n(t)),a!==ot)return a;if(!ss(t))return t;var f=wp(t);if(f){if(a=Mi(t),!u)return Vo(t,a)}else{var p=Nf(t),h=p==Jt||p==Yt;if(Ep(t))return Co(t,u);if(p==te||p==Ft||h&&!o){if(a=s||h?{}:Ii(t),!u)return s?Ho(t,Pn(a,t)):zo(t,Rn(a,t))}else{if(!Qn[p])return o?t:{};a=Ri(t,p,Un,u)}}i||(i=new wn);var d=i.get(t);if(d)return d;i.set(t,a);var v=l?s?xi:wi:s?Ws:Hs,g=f?ot:v(t);return c(g||t,function(r,o){g&&(o=r,r=t[o]),Dn(a,o,Un(r,e,n,o,t,i))}),a}function Vn(t){var e=Hs(t);return function(n){return Fn(n,t,e)}}function Fn(t,e,n){var r=n.length;if(null==t)return!r;for(t=fl(t);r--;){var o=n[r],i=e[o],a=t[o];if(a===ot&&!(o in t)||!i(a))return!1}return!0}function Wn(t,e,n){if("function"!=typeof t)throw new dl(st);return If(function(){t.apply(ot,n)},e)}function Kn(t,e,n,r){var o=-1,i=h,a=!0,u=t.length,s=[],c=e.length;if(!u)return s;n&&(e=v(e,R(n))),r?(i=d,a=!1):e.length>=at&&(i=L,a=!1,e=new yn(e));t:for(;++oo?0:o+n),r=r===ot||r>o?o:Os(r),r<0&&(r+=o),r=n>r?0:Ss(r);n0&&n(u)?e>1?er(u,e-1,n,r,o):g(o,u):r||(o[o.length]=u)}return o}function nr(t,e){return t&&wf(t,e,Hs)}function ir(t,e){return t&&xf(t,e,Hs)}function ar(t,e){return p(e,function(e){return is(t[e])})}function sr(t,e){e=So(e,t);for(var n=0,r=e.length;null!=t&&ne}function _r(t,e){return null!=t&&bl.call(t,e)}function Er(t,e){return null!=t&&e in fl(t)}function jr(t,e,n){return t>=Yl(e,n)&&t=120&&l.length>=120)?new yn(a&&l):ot}l=t[0];var f=-1,p=u[0];t:for(;++f-1;)u!==t&&Il.call(u,s,1),Il.call(t,s,1);return t}function eo(t,e){for(var n=t?e.length:0,r=n-1;n--;){var o=e[n];if(n==r||o!==i){var i=o;Bi(o)?Il.call(t,o,1):_o(t,o)}}return t}function no(t,e){return t+zl(Zl()*(e-t+1))}function ro(t,e,n,r){for(var o=-1,i=Jl(Fl((e-t)/(n||1)),0),a=al(i);i--;)a[r?i:++o]=t,t+=n;return a}function oo(t,e){var n="";if(!t||e<1||e>Rt)return n;do e%2&&(n+=t),e=zl(e/2),e&&(t+=t);while(e);return n}function io(t,e){return Rf(Xi(t,e,Ic),t+"")}function ao(t){return Tn(rc(t))}function uo(t,e){var n=rc(t);return na(n,qn(e,0,n.length))}function so(t,e,n,r){if(!ss(t))return t;e=So(e,t);for(var o=-1,i=e.length,a=i-1,u=t;null!=u&&++oo?0:o+e),n=n>o?o:n,n<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var i=al(o);++r>>1,a=t[i];null!==a&&!bs(a)&&(n?a<=e:a=at){var c=e?null:Sf(t);if(c)return J(c);a=!1,o=L,s=new yn}else s=e?[]:u;t:for(;++r=r?t:lo(t,e,n)}function Co(t,e){if(e)return t.slice();var n=t.length,r=Al?Al(n):new t.constructor(n);return t.copy(r),r}function Ao(t){var e=new t.constructor(t.byteLength);return new Cl(e).set(new Cl(t)),e}function No(t,e){var n=e?Ao(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Do(t,e,n){var r=e?n(K(t),pt):K(t);return m(r,i,new t.constructor)}function Mo(t){var e=new t.constructor(t.source,Ke.exec(t));return e.lastIndex=t.lastIndex,e}function Io(t,e,n){var r=e?n(J(t),pt):J(t);return m(r,a,new t.constructor)}function Ro(t){return gf?fl(gf.call(t)):{}}function Po(t,e){var n=e?Ao(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Lo(t,e){if(t!==e){var n=t!==ot,r=null===t,o=t===t,i=bs(t),a=e!==ot,u=null===e,s=e===e,c=bs(e);if(!u&&!c&&!i&&t>e||i&&a&&s&&!u&&!c||r&&a&&s||!n&&s||!o)return 1;if(!r&&!i&&!c&&t=u)return s;var c=n[r];return s*("desc"==c?-1:1)}}return t.index-e.index}function qo(t,e,n,r){for(var o=-1,i=t.length,a=n.length,u=-1,s=e.length,c=Jl(i-a,0),l=al(s+c),f=!r;++u1?n[o-1]:ot,a=o>2?n[2]:ot;for(i=t.length>3&&"function"==typeof i?(o--,i):ot,a&&qi(n[0],n[1],a)&&(i=o<3?ot:i,o=1),e=fl(e);++r-1?o[i?e[a]:a]:ot}}function ei(t){return bi(function(e){var n=e.length,r=n,i=o.prototype.thru;for(t&&e.reverse();r--;){var a=e[r];if("function"!=typeof a)throw new dl(st);if(i&&!u&&"wrapper"==Ei(a))var u=new o([],!0)}for(r=u?r:n;++r1&&y.reverse(),f&&su))return!1;var c=i.get(t);if(c&&i.get(e))return c==e;var l=-1,f=!0,p=n>?new yn:ot;for(i.set(t,e),i.set(e,t);++l1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Ue,"{\n/* [wrapped with "+e+"] */\n")}function Li(t){return wp(t)||bp(t)||!!(Rl&&t&&t[Rl])}function Bi(t,e){return e=null==e?Rt:e,!!e&&("number"==typeof t||Xe.test(t))&&t>-1&&t%1==0&&t0){if(++e>=Ct)return arguments[0]}else e=0;return t.apply(ot,arguments)}}function na(t,e){var n=-1,r=t.length,o=r-1;for(e=e===ot?r:e;++n=this.__values__.length,e=t?ot:this.__values__[this.__index__++];return{done:t,value:e}}function au(){return this}function uu(t){for(var e,n=this;n instanceof r;){var o=aa(n);o.__index__=0,o.__values__=ot,e?i.__wrapped__=o:e=o;var i=o;n=n.__wrapped__}return i.__wrapped__=t,e}function su(){var t=this.__wrapped__;if(t instanceof b){var e=t;return this.__actions__.length&&(e=new b(this)),e=e.reverse(),e.__actions__.push({func:nu,args:[Da],thisArg:ot}),new o(e,this.__chain__)}return this.thru(Da)}function cu(){return xo(this.__wrapped__,this.__actions__)}function lu(t,e,n){var r=wp(t)?f:$n;return n&&qi(t,e,n)&&(e=ot),r(t,ji(e,3))}function fu(t,e){var n=wp(t)?p:tr;return n(t,ji(e,3))}function pu(t,e){return er(yu(t,e),1)}function hu(t,e){return er(yu(t,e),It)}function du(t,e,n){return n=n===ot?1:Os(n),er(yu(t,e),n)}function vu(t,e){var n=wp(t)?c:_f;return n(t,ji(e,3))}function gu(t,e){var n=wp(t)?l:bf;return n(t,ji(e,3))}function mu(t,e,n,r){t=Yu(t)?t:rc(t),n=n&&!r?Os(n):0;var o=t.length;return n<0&&(n=Jl(o+n,0)),_s(t)?n<=o&&t.indexOf(e,n)>-1:!!o&&k(t,e,n)>-1}function yu(t,e){var n=wp(t)?v:Hr;return n(t,ji(e,3))}function _u(t,e,n,r){return null==t?[]:(wp(e)||(e=null==e?[]:[e]),n=r?ot:n,wp(n)||(n=null==n?[]:[n]),Yr(t,e,n))}function bu(t,e,n){var r=wp(t)?m:A,o=arguments.length<3;return r(t,ji(e,4),n,o,_f)}function wu(t,e,n){var r=wp(t)?y:A,o=arguments.length<3;return r(t,ji(e,4),n,o,bf)}function xu(t,e){var n=wp(t)?p:tr;return n(t,Pu(ji(e,3)))}function Eu(t){var e=wp(t)?Tn:ao;return e(t)}function ku(t,e,n){e=(n?qi(t,e,n):e===ot)?1:Os(e);var r=wp(t)?Cn:uo;return r(t,e)}function ju(t){var e=wp(t)?An:co;return e(t)}function Ou(t){if(null==t)return 0;if(Yu(t))return _s(t)?Z(t):t.length;var e=Nf(t);return e==Xt||e==oe?t.size:Vr(t).length}function Su(t,e,n){var r=wp(t)?_:fo;return n&&qi(t,e,n)&&(e=ot),r(t,ji(e,3))}function Tu(t,e){if("function"!=typeof e)throw new dl(st);return t=Os(t),function(){if(--t<1)return e.apply(this,arguments)}}function Cu(t,e,n){return e=n?ot:e,e=t&&null==e?t.length:e,hi(t,kt,ot,ot,ot,ot,e)}function Au(t,e){var n;if("function"!=typeof e)throw new dl(st);return t=Os(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=ot),n}}function Nu(t,e,n){e=n?ot:e;var r=hi(t,bt,ot,ot,ot,ot,ot,e);return r.placeholder=Nu.placeholder,r}function Du(t,e,n){e=n?ot:e;var r=hi(t,wt,ot,ot,ot,ot,ot,e);return r.placeholder=Du.placeholder,r}function Mu(t,e,n){function r(e){var n=p,r=h;return p=h=ot,y=e,v=t.apply(r,n)}function o(t){return y=t,g=If(u,e),_?r(t):v}function i(t){var n=t-m,r=t-y,o=e-n;return b?Yl(o,d-r):o}function a(t){var n=t-m,r=t-y;return m===ot||n>=e||n<0||b&&r>=d}function u(){var t=cp();return a(t)?s(t):void(g=If(u,i(t)))}function s(t){return g=ot,w&&p?r(t):(p=h=ot,v)}function c(){g!==ot&&Of(g),y=0,p=m=h=g=ot}function l(){return g===ot?v:s(cp())}function f(){var t=cp(),n=a(t);if(p=arguments,h=this,m=t,n){if(g===ot)return o(m);if(b)return g=If(u,e),r(m)}return g===ot&&(g=If(u,e)),v}var p,h,d,v,g,m,y=0,_=!1,b=!1,w=!0;if("function"!=typeof t)throw new dl(st);return e=Ts(e)||0,ss(n)&&(_=!!n.leading,b="maxWait"in n,d=b?Jl(Ts(n.maxWait)||0,e):d,w="trailing"in n?!!n.trailing:w),f.cancel=c,f.flush=l,f}function Iu(t){return hi(t,Ot)}function Ru(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new dl(st);var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=t.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(Ru.Cache||pn),n}function Pu(t){if("function"!=typeof t)throw new dl(st);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function Lu(t){return Au(2,t)}function Bu(t,e){if("function"!=typeof t)throw new dl(st);return e=e===ot?e:Os(e),io(t,e)}function qu(t,e){if("function"!=typeof t)throw new dl(st);return e=null==e?0:Jl(Os(e),0),io(function(n){var r=n[e],o=To(n,0,e);return r&&g(o,r),u(t,this,o)})}function Uu(t,e,n){var r=!0,o=!0;if("function"!=typeof t)throw new dl(st);return ss(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),Mu(t,e,{leading:r,maxWait:e,trailing:o})}function Vu(t){return Cu(t,1)}function Fu(t,e){return vp(Oo(e),t)}function zu(){if(!arguments.length)return[];var t=arguments[0];return wp(t)?t:[t]}function Hu(t){return Un(t,dt)}function Wu(t,e){return e="function"==typeof e?e:ot,Un(t,dt,e)}function Ku(t){return Un(t,pt|dt)}function $u(t,e){return e="function"==typeof e?e:ot,Un(t,pt|dt,e)}function Gu(t,e){return null==e||Fn(t,e,Hs(e))}function Ju(t,e){return t===e||t!==t&&e!==e}function Yu(t){return null!=t&&us(t.length)&&!is(t)}function Xu(t){return cs(t)&&Yu(t)}function Qu(t){return t===!0||t===!1||cs(t)&&fr(t)==Wt}function Zu(t){return cs(t)&&1===t.nodeType&&!ms(t)}function ts(t){if(null==t)return!0;if(Yu(t)&&(wp(t)||"string"==typeof t||"function"==typeof t.splice||Ep(t)||Tp(t)||bp(t)))return!t.length;var e=Nf(t);if(e==Xt||e==oe)return!t.size;if(Hi(t))return!Vr(t).length;for(var n in t)if(bl.call(t,n))return!1;return!0}function es(t,e){return Dr(t,e)}function ns(t,e,n){n="function"==typeof n?n:ot;var r=n?n(t,e):ot;return r===ot?Dr(t,e,ot,n):!!r}function rs(t){if(!cs(t))return!1;var e=fr(t);return e==Gt||e==$t||"string"==typeof t.message&&"string"==typeof t.name&&!ms(t)}function os(t){return"number"==typeof t&&Kl(t)}function is(t){if(!ss(t))return!1;var e=fr(t);return e==Jt||e==Yt||e==Ht||e==ne}function as(t){return"number"==typeof t&&t==Os(t)}function us(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=Rt}function ss(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function cs(t){return null!=t&&"object"==typeof t}function ls(t,e){return t===e||Rr(t,e,Si(e))}function fs(t,e,n){return n="function"==typeof n?n:ot,Rr(t,e,Si(e),n)}function ps(t){return gs(t)&&t!=+t}function hs(t){if(Df(t))throw new sl(ut);return Pr(t)}function ds(t){return null===t}function vs(t){return null==t}function gs(t){return"number"==typeof t||cs(t)&&fr(t)==Qt}function ms(t){if(!cs(t)||fr(t)!=te)return!1;var e=Nl(t);if(null===e)return!0;var n=bl.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&_l.call(n)==kl}function ys(t){return as(t)&&t>=-Rt&&t<=Rt}function _s(t){return"string"==typeof t||!wp(t)&&cs(t)&&fr(t)==ie}function bs(t){return"symbol"==typeof t||cs(t)&&fr(t)==ae}function ws(t){return t===ot}function xs(t){return cs(t)&&Nf(t)==se}function Es(t){return cs(t)&&fr(t)==ce}function ks(t){if(!t)return[];if(Yu(t))return _s(t)?tt(t):Vo(t);if(Pl&&t[Pl])return W(t[Pl]());var e=Nf(t),n=e==Xt?K:e==oe?J:rc;return n(t)}function js(t){if(!t)return 0===t?t:0;if(t=Ts(t),t===It||t===-It){var e=t<0?-1:1;return e*Pt}return t===t?t:0}function Os(t){var e=js(t),n=e%1;return e===e?n?e-n:e:0}function Ss(t){return t?qn(Os(t),0,Bt):0}function Ts(t){if("number"==typeof t)return t;if(bs(t))return Lt;if(ss(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=ss(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Le,"");var n=Ge.test(t);return n||Ye.test(t)?or(t.slice(2),n?2:8):$e.test(t)?Lt:+t}function Cs(t){return Fo(t,Ws(t))}function As(t){return t?qn(Os(t),-Rt,Rt):0===t?t:0}function Ns(t){return null==t?"":mo(t)}function Ds(t,e){var n=yf(t);return null==e?n:Rn(n,e)}function Ms(t,e){return x(t,ji(e,3),nr)}function Is(t,e){return x(t,ji(e,3),ir)}function Rs(t,e){return null==t?t:wf(t,ji(e,3),Ws)}function Ps(t,e){return null==t?t:xf(t,ji(e,3),Ws)}function Ls(t,e){return t&&nr(t,ji(e,3))}function Bs(t,e){return t&&ir(t,ji(e,3))}function qs(t){return null==t?[]:ar(t,Hs(t))}function Us(t){return null==t?[]:ar(t,Ws(t))}function Vs(t,e,n){var r=null==t?ot:sr(t,e);return r===ot?n:r}function Fs(t,e){return null!=t&&Di(t,e,_r)}function zs(t,e){return null!=t&&Di(t,e,Er)}function Hs(t){return Yu(t)?Sn(t):Vr(t)}function Ws(t){return Yu(t)?Sn(t,!0):Fr(t)}function Ks(t,e){var n={};return e=ji(e,3),nr(t,function(t,r,o){Ln(n,e(t,r,o),t)}),n}function $s(t,e){var n={};return e=ji(e,3),nr(t,function(t,r,o){Ln(n,r,e(t,r,o))}),n}function Gs(t,e){return Js(t,Pu(ji(e)))}function Js(t,e){if(null==t)return{};var n=v(xi(t),function(t){return[t]});return e=ji(e),Qr(t,n,function(t,n){return e(t,n[0])})}function Ys(t,e,n){e=So(e,t);var r=-1,o=e.length;for(o||(o=1,t=ot);++re){var r=t;t=e,e=r}if(n||t%1||e%1){var o=Zl();return Yl(t+o*(e-t+rr("1e-"+((o+"").length-1))),e)}return no(t,e)}function sc(t){return th(Ns(t).toLowerCase())}function cc(t){return t=Ns(t),t&&t.replace(Qe,br).replace(Hn,"")}function lc(t,e,n){t=Ns(t),e=mo(e);var r=t.length;n=n===ot?r:qn(Os(n),0,r);var o=n;return n-=e.length,n>=0&&t.slice(n,o)==e}function fc(t){return t=Ns(t),t&&Se.test(t)?t.replace(je,wr):t}function pc(t){return t=Ns(t),t&&Pe.test(t)?t.replace(Re,"\\$&"):t}function hc(t,e,n){t=Ns(t),e=Os(e);var r=e?Z(t):0;if(!e||r>=e)return t;var o=(e-r)/2;return ai(zl(o),n)+t+ai(Fl(o),n)}function dc(t,e,n){t=Ns(t),e=Os(e);var r=e?Z(t):0;return e&&r>>0)?(t=Ns(t),t&&("string"==typeof e||null!=e&&!Op(e))&&(e=mo(e),!e&&z(t))?To(tt(t),0,n):t.split(e,n)):[]}function bc(t,e,n){return t=Ns(t),n=null==n?0:qn(Os(n),0,t.length),e=mo(e),t.slice(n,n+e.length)==e}function wc(t,e,r){var o=n.templateSettings;r&&qi(t,e,r)&&(e=ot),t=Ns(t),e=Mp({},e,o,di);var i,a,u=Mp({},e.imports,o.imports,di),s=Hs(u),c=P(u,s),l=0,f=e.interpolate||Ze,p="__p += '",h=pl((e.escape||Ze).source+"|"+f.source+"|"+(f===Ae?We:Ze).source+"|"+(e.evaluate||Ze).source+"|$","g"),d="//# sourceURL="+("sourceURL"in e?e.sourceURL:"lodash.templateSources["+ ++Yn+"]")+"\n";t.replace(h,function(e,n,r,o,u,s){return r||(r=o),p+=t.slice(l,s).replace(tn,V),n&&(i=!0,p+="' +\n__e("+n+") +\n'"),u&&(a=!0,p+="';\n"+u+";\n__p += '"),r&&(p+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),l=s+e.length,e}),p+="';\n";var v=e.variable;v||(p="with (obj) {\n"+p+"\n}\n"),p=(a?p.replace(we,""):p).replace(xe,"$1").replace(Ee,"$1;"),p="function("+(v||"obj")+") {\n"+(v?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(a?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+p+"return __p\n}";var g=eh(function(){return cl(s,d+"return "+p).apply(ot,c)});if(g.source=p,rs(g))throw g;return g}function xc(t){return Ns(t).toLowerCase()}function Ec(t){return Ns(t).toUpperCase()}function kc(t,e,n){if(t=Ns(t),t&&(n||e===ot))return t.replace(Le,"");if(!t||!(e=mo(e)))return t;var r=tt(t),o=tt(e),i=B(r,o),a=q(r,o)+1;return To(r,i,a).join("")}function jc(t,e,n){if(t=Ns(t),t&&(n||e===ot))return t.replace(qe,"");if(!t||!(e=mo(e)))return t;var r=tt(t),o=q(r,tt(e))+1;return To(r,0,o).join("")}function Oc(t,e,n){if(t=Ns(t),t&&(n||e===ot))return t.replace(Be,"");if(!t||!(e=mo(e)))return t;var r=tt(t),o=B(r,tt(e));return To(r,o).join("")}function Sc(t,e){var n=St,r=Tt;if(ss(e)){var o="separator"in e?e.separator:o;n="length"in e?Os(e.length):n,r="omission"in e?mo(e.omission):r}t=Ns(t);var i=t.length;if(z(t)){var a=tt(t);i=a.length}if(n>=i)return t;var u=n-Z(r);if(u<1)return r;var s=a?To(a,0,u).join(""):t.slice(0,u);if(o===ot)return s+r;if(a&&(u+=s.length-u),Op(o)){if(t.slice(u).search(o)){var c,l=s;for(o.global||(o=pl(o.source,Ns(Ke.exec(o))+"g")),o.lastIndex=0;c=o.exec(l);)var f=c.index;s=s.slice(0,f===ot?u:f)}}else if(t.indexOf(mo(o),u)!=u){var p=s.lastIndexOf(o);p>-1&&(s=s.slice(0,p))}return s+r}function Tc(t){return t=Ns(t),t&&Oe.test(t)?t.replace(ke,xr):t}function Cc(t,e,n){return t=Ns(t),e=n?ot:e,e===ot?H(t)?rt(t):w(t):t.match(e)||[]}function Ac(t){var e=null==t?0:t.length,n=ji();return t=e?v(t,function(t){if("function"!=typeof t[1])throw new dl(st);return[n(t[0]),t[1]]}):[],io(function(n){for(var r=-1;++rRt)return[];var n=Bt,r=Yl(t,Bt);e=ji(e),t-=Bt;for(var o=M(r,e);++n1?t[e-1]:ot;return n="function"==typeof n?(t.pop(),n):ot,Xa(t,n)}),tp=bi(function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,i=function(e){return Bn(e,t)};return!(e>1||this.__actions__.length)&&r instanceof b&&Bi(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:nu,args:[i],thisArg:ot}),new o(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(ot),t})):this.thru(i)}),ep=Wo(function(t,e,n){bl.call(t,n)?++t[n]:Ln(t,n,1)}),np=ti(va),rp=ti(ga),op=Wo(function(t,e,n){bl.call(t,n)?t[n].push(e):Ln(t,n,[e])}),ip=io(function(t,e,n){var r=-1,o="function"==typeof e,i=Yu(t)?al(t.length):[];return _f(t,function(t){i[++r]=o?u(e,t,n):Tr(t,e,n)}),i}),ap=Wo(function(t,e,n){Ln(t,n,e)}),up=Wo(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),sp=io(function(t,e){if(null==t)return[];var n=e.length;return n>1&&qi(t,e[0],e[1])?e=[]:n>2&&qi(e[0],e[1],e[2])&&(e=[e[0]]),Yr(t,er(e,1),[])}),cp=Ul||function(){return ur.Date.now()},lp=io(function(t,e,n){var r=mt;if(n.length){var o=G(n,ki(lp));r|=xt}return hi(t,r,e,n,o)}),fp=io(function(t,e,n){var r=mt|yt;if(n.length){var o=G(n,ki(fp));r|=xt}return hi(e,r,t,n,o)}),pp=io(function(t,e){return Wn(t,1,e)}),hp=io(function(t,e,n){return Wn(t,Ts(e)||0,n)});Ru.Cache=pn;var dp=jf(function(t,e){e=1==e.length&&wp(e[0])?v(e[0],R(ji())):v(er(e,1),R(ji()));var n=e.length;return io(function(r){for(var o=-1,i=Yl(r.length,n);++o=e}),bp=Cr(function(){return arguments}())?Cr:function(t){return cs(t)&&bl.call(t,"callee")&&!Ml.call(t,"callee")},wp=al.isArray,xp=hr?R(hr):Ar,Ep=Wl||Wc,kp=dr?R(dr):Nr,jp=vr?R(vr):Ir,Op=gr?R(gr):Lr,Sp=mr?R(mr):Br,Tp=yr?R(yr):qr,Cp=ci(zr),Ap=ci(function(t,e){return t<=e}),Np=Ko(function(t,e){if(Hi(e)||Yu(e))return void Fo(e,Hs(e),t);for(var n in e)bl.call(e,n)&&Dn(t,n,e[n])}),Dp=Ko(function(t,e){Fo(e,Ws(e),t)}),Mp=Ko(function(t,e,n,r){Fo(e,Ws(e),t,r)}),Ip=Ko(function(t,e,n,r){Fo(e,Hs(e),t,r)}),Rp=bi(Bn),Pp=io(function(t){return t.push(ot,di),u(Mp,ot,t)}),Lp=io(function(t){return t.push(ot,vi),u(Fp,ot,t)}),Bp=ri(function(t,e,n){t[e]=n},Dc(Ic)),qp=ri(function(t,e,n){bl.call(t,e)?t[e].push(n):t[e]=[n]},ji),Up=io(Tr),Vp=Ko(function(t,e,n){$r(t,e,n)}),Fp=Ko(function(t,e,n,r){$r(t,e,n,r)}),zp=bi(function(t,e){var n={};if(null==t)return n;var r=!1;e=v(e,function(e){return e=So(e,t),r||(r=e.length>1),e}),Fo(t,xi(t),n),r&&(n=Un(n,pt|ht|dt,gi));for(var o=e.length;o--;)_o(n,e[o]);return n}),Hp=bi(function(t,e){return null==t?{}:Xr(t,e)}),Wp=pi(Hs),Kp=pi(Ws),$p=Xo(function(t,e,n){return e=e.toLowerCase(),t+(n?sc(e):e)}),Gp=Xo(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),Jp=Xo(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),Yp=Yo("toLowerCase"),Xp=Xo(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}),Qp=Xo(function(t,e,n){return t+(n?" ":"")+th(e)}),Zp=Xo(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),th=Yo("toUpperCase"),eh=io(function(t,e){try{return u(t,ot,e)}catch(t){return rs(t)?t:new sl(t)}}),nh=bi(function(t,e){return c(e,function(e){e=ra(e),Ln(t,e,lp(t[e],t))}),t}),rh=ei(),oh=ei(!0),ih=io(function(t,e){return function(n){return Tr(n,t,e)}}),ah=io(function(t,e){return function(n){return Tr(t,n,e)}}),uh=ii(v),sh=ii(f),ch=ii(_),lh=si(),fh=si(!0),ph=oi(function(t,e){return t+e},0),hh=fi("ceil"),dh=oi(function(t,e){return t/e},1),vh=fi("floor"),gh=oi(function(t,e){return t*e},1),mh=fi("round"),yh=oi(function(t,e){return t-e},0);return n.after=Tu,n.ary=Cu,n.assign=Np,n.assignIn=Dp,n.assignInWith=Mp,n.assignWith=Ip,n.at=Rp,n.before=Au,n.bind=lp,n.bindAll=nh,n.bindKey=fp,n.castArray=zu,n.chain=tu,n.chunk=ua,n.compact=sa,n.concat=ca,n.cond=Ac,n.conforms=Nc,n.constant=Dc,n.countBy=ep,n.create=Ds,n.curry=Nu,n.curryRight=Du,n.debounce=Mu,n.defaults=Pp,n.defaultsDeep=Lp,n.defer=pp,n.delay=hp,n.difference=Lf,n.differenceBy=Bf,n.differenceWith=qf,n.drop=la,n.dropRight=fa,n.dropRightWhile=pa,n.dropWhile=ha,n.fill=da,n.filter=fu,n.flatMap=pu,n.flatMapDeep=hu,n.flatMapDepth=du,n.flatten=ma,n.flattenDeep=ya,n.flattenDepth=_a,n.flip=Iu,n.flow=rh,n.flowRight=oh,n.fromPairs=ba,n.functions=qs,n.functionsIn=Us,n.groupBy=op,n.initial=Ea,n.intersection=Uf,n.intersectionBy=Vf,n.intersectionWith=Ff,n.invert=Bp,n.invertBy=qp,n.invokeMap=ip,n.iteratee=Rc,n.keyBy=ap,n.keys=Hs,n.keysIn=Ws,n.map=yu,n.mapKeys=Ks,n.mapValues=$s,n.matches=Pc,n.matchesProperty=Lc,n.memoize=Ru,n.merge=Vp,n.mergeWith=Fp,n.method=ih,n.methodOf=ah,n.mixin=Bc,n.negate=Pu,n.nthArg=Vc,n.omit=zp,n.omitBy=Gs,n.once=Lu,n.orderBy=_u,n.over=uh,n.overArgs=dp,n.overEvery=sh,n.overSome=ch,n.partial=vp,n.partialRight=gp,n.partition=up,n.pick=Hp,n.pickBy=Js,n.property=Fc,n.propertyOf=zc,n.pull=zf,n.pullAll=Ta,n.pullAllBy=Ca,n.pullAllWith=Aa,n.pullAt=Hf,n.range=lh,n.rangeRight=fh,n.rearg=mp,n.reject=xu,n.remove=Na,n.rest=Bu,n.reverse=Da,n.sampleSize=ku,n.set=Xs,n.setWith=Qs,n.shuffle=ju,n.slice=Ma,n.sortBy=sp,n.sortedUniq=Ua,n.sortedUniqBy=Va,n.split=_c,n.spread=qu,n.tail=Fa,n.take=za,n.takeRight=Ha,n.takeRightWhile=Wa,n.takeWhile=Ka,n.tap=eu,n.throttle=Uu,n.thru=nu,n.toArray=ks,n.toPairs=Wp,n.toPairsIn=Kp,n.toPath=Yc,n.toPlainObject=Cs,n.transform=Zs,n.unary=Vu,n.union=Wf,n.unionBy=Kf,n.unionWith=$f,n.uniq=$a,n.uniqBy=Ga,n.uniqWith=Ja,n.unset=tc,n.unzip=Ya,n.unzipWith=Xa,n.update=ec,n.updateWith=nc,n.values=rc,n.valuesIn=oc,n.without=Gf,n.words=Cc,n.wrap=Fu,n.xor=Jf,n.xorBy=Yf,n.xorWith=Xf,n.zip=Qf,n.zipObject=Qa,n.zipObjectDeep=Za,n.zipWith=Zf,n.entries=Wp,n.entriesIn=Kp,n.extend=Dp,n.extendWith=Mp,Bc(n,n),n.add=ph,n.attempt=eh,n.camelCase=$p,n.capitalize=sc,n.ceil=hh,n.clamp=ic,n.clone=Hu,n.cloneDeep=Ku,n.cloneDeepWith=$u,n.cloneWith=Wu,n.conformsTo=Gu,n.deburr=cc,n.defaultTo=Mc,n.divide=dh,n.endsWith=lc,n.eq=Ju,n.escape=fc,n.escapeRegExp=pc,n.every=lu,n.find=np,n.findIndex=va,n.findKey=Ms,n.findLast=rp,n.findLastIndex=ga,n.findLastKey=Is,n.floor=vh,n.forEach=vu,n.forEachRight=gu,n.forIn=Rs,n.forInRight=Ps,n.forOwn=Ls,n.forOwnRight=Bs,n.get=Vs,n.gt=yp,n.gte=_p,n.has=Fs,n.hasIn=zs,n.head=wa,n.identity=Ic,n.includes=mu,n.indexOf=xa,n.inRange=ac,n.invoke=Up,n.isArguments=bp,n.isArray=wp,n.isArrayBuffer=xp,n.isArrayLike=Yu,n.isArrayLikeObject=Xu,n.isBoolean=Qu,n.isBuffer=Ep,n.isDate=kp,n.isElement=Zu,n.isEmpty=ts,n.isEqual=es,n.isEqualWith=ns,n.isError=rs,n.isFinite=os,n.isFunction=is,n.isInteger=as,n.isLength=us,n.isMap=jp,n.isMatch=ls,n.isMatchWith=fs,n.isNaN=ps,n.isNative=hs,n.isNil=vs,n.isNull=ds,n.isNumber=gs,n.isObject=ss,n.isObjectLike=cs,n.isPlainObject=ms,n.isRegExp=Op,n.isSafeInteger=ys,n.isSet=Sp,n.isString=_s,n.isSymbol=bs,n.isTypedArray=Tp,n.isUndefined=ws,n.isWeakMap=xs,n.isWeakSet=Es,n.join=ka,n.kebabCase=Gp,n.last=ja,n.lastIndexOf=Oa,n.lowerCase=Jp,n.lowerFirst=Yp,n.lt=Cp,n.lte=Ap,n.max=Qc,n.maxBy=Zc,n.mean=tl,n.meanBy=el,n.min=nl,n.minBy=rl,n.stubArray=Hc,n.stubFalse=Wc,n.stubObject=Kc,n.stubString=$c,n.stubTrue=Gc,n.multiply=gh,n.nth=Sa,n.noConflict=qc,n.noop=Uc,n.now=cp,n.pad=hc,n.padEnd=dc,n.padStart=vc,n.parseInt=gc,n.random=uc,n.reduce=bu,n.reduceRight=wu,n.repeat=mc,n.replace=yc,n.result=Ys,n.round=mh,n.runInContext=t,n.sample=Eu,n.size=Ou,n.snakeCase=Xp,n.some=Su,n.sortedIndex=Ia,n.sortedIndexBy=Ra,n.sortedIndexOf=Pa,n.sortedLastIndex=La,n.sortedLastIndexBy=Ba,n.sortedLastIndexOf=qa,n.startCase=Qp,n.startsWith=bc,n.subtract=yh,n.sum=ol,n.sumBy=il,n.template=wc,n.times=Jc,n.toFinite=js,n.toInteger=Os,n.toLength=Ss,n.toLower=xc,n.toNumber=Ts,n.toSafeInteger=As,n.toString=Ns,n.toUpper=Ec,n.trim=kc,n.trimEnd=jc,n.trimStart=Oc,n.truncate=Sc,n.unescape=Tc,n.uniqueId=Xc,n.upperCase=Zp,n.upperFirst=th,n.each=vu,n.eachRight=gu,n.first=wa,Bc(n,function(){var t={};return nr(n,function(e,r){bl.call(n.prototype,r)||(t[r]=e)}),t}(),{chain:!1}),n.VERSION=it,c(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){n[t].placeholder=n}),c(["drop","take"],function(t,e){b.prototype[t]=function(n){n=n===ot?1:Jl(Os(n),0);var r=this.__filtered__&&!e?new b(this):this.clone();return r.__filtered__?r.__takeCount__=Yl(n,r.__takeCount__):r.__views__.push({size:Yl(n,Bt),type:t+(r.__dir__<0?"Right":"")}),r},b.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),c(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==Nt||n==Mt;b.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:ji(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),c(["head","last"],function(t,e){var n="take"+(e?"Right":"");b.prototype[t]=function(){return this[n](1).value()[0]}}),c(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");b.prototype[t]=function(){return this.__filtered__?new b(this):this[n](1)}}),b.prototype.compact=function(){return this.filter(Ic)},b.prototype.find=function(t){return this.filter(t).head()},b.prototype.findLast=function(t){return this.reverse().find(t)},b.prototype.invokeMap=io(function(t,e){return"function"==typeof t?new b(this):this.map(function(n){return Tr(n,t,e)})}),b.prototype.reject=function(t){return this.filter(Pu(ji(t)))},b.prototype.slice=function(t,e){t=Os(t);var n=this;return n.__filtered__&&(t>0||e<0)?new b(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==ot&&(e=Os(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},b.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},b.prototype.toArray=function(){return this.take(Bt)},nr(b.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),a=n[i?"take"+("last"==e?"Right":""):e],u=i||/^find/.test(e);a&&(n.prototype[e]=function(){var e=this.__wrapped__,s=i?[1]:arguments,c=e instanceof b,l=s[0],f=c||wp(e),p=function(t){var e=a.apply(n,g([t],s));return i&&h?e[0]:e};f&&r&&"function"==typeof l&&1!=l.length&&(c=f=!1);var h=this.__chain__,d=!!this.__actions__.length,v=u&&!h,m=c&&!d;if(!u&&f){e=m?e:new b(this);var y=t.apply(e,s);return y.__actions__.push({func:nu,args:[p],thisArg:ot}),new o(y,h)}return v&&m?t.apply(this,s):(y=this.thru(p),v?i?y.value()[0]:y.value():y)})}),c(["pop","push","shift","sort","splice","unshift"],function(t){var e=vl[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",o=/^(?:pop|shift)$/.test(t);n.prototype[t]=function(){var t=arguments;if(o&&!this.__chain__){var n=this.value();return e.apply(wp(n)?n:[],t)}return this[r](function(n){return e.apply(wp(n)?n:[],t)})}}),nr(b.prototype,function(t,e){var r=n[e];if(r){var o=r.name+"",i=cf[o]||(cf[o]=[]);i.push({name:e,func:r})}}),cf[ni(ot,yt).name]=[{name:"wrapper",func:ot}],b.prototype.clone=C,b.prototype.reverse=X,b.prototype.value=et,n.prototype.at=tp,n.prototype.chain=ru,n.prototype.commit=ou,n.prototype.next=iu,n.prototype.plant=uu,n.prototype.reverse=su,n.prototype.toJSON=n.prototype.valueOf=n.prototype.value=cu,n.prototype.first=n.prototype.head,Pl&&(n.prototype[Pl]=au),n},kr=Er();ur._=kr,r=function(){return kr}.call(e,n,e,o),!(r!==ot&&(o.exports=r))}).call(this)}).call(e,function(){return this}(),n(76)(t))},function(t,e,n){function r(t){return o(t,i|a)}var o=n(117),i=1,a=4;t.exports=r},function(t,e,n){function r(t,e,n,S,T,C){var A,M=e&E,I=e&k,P=e&j;if(n&&(A=T?n(t,S,T,C):n(t)),void 0!==A)return A;if(!w(t))return t;var L=_(t);if(L){if(A=g(t),!M)return l(t,A)}else{var B=v(t),q=B==N||B==D;if(b(t))return c(t,M);if(B==R||B==O||q&&!T){if(A=I||q?{}:y(t),!M)return I?p(t,s(A,t)):f(t,u(A,t))}else{if(!Q[B])return T?t:{};A=m(t,B,r,M)}}C||(C=new o);var U=C.get(t);if(U)return U;C.set(t,A);var V=P?I?d:h:I?keysIn:x,F=L?void 0:V(t);return i(F||t,function(o,i){F&&(i=o,o=t[i]),a(A,i,r(o,e,n,i,t,C))}),A}var o=n(40),i=n(118),a=n(102),u=n(119),s=n(123),c=n(75),l=n(80),f=n(124),p=n(128),h=n(131),d=n(133),v=n(134),g=n(139),m=n(140),y=n(81),_=n(89),b=n(93),w=n(32),x=n(120),E=1,k=2,j=4,O="[object Arguments]",S="[object Array]",T="[object Boolean]",C="[object Date]",A="[object Error]",N="[object Function]",D="[object GeneratorFunction]",M="[object Map]",I="[object Number]",R="[object Object]",P="[object RegExp]",L="[object Set]",B="[object String]",q="[object Symbol]",U="[object WeakMap]",V="[object ArrayBuffer]",F="[object DataView]",z="[object Float32Array]",H="[object Float64Array]",W="[object Int8Array]",K="[object Int16Array]",$="[object Int32Array]",G="[object Uint8Array]",J="[object Uint8ClampedArray]",Y="[object Uint16Array]",X="[object Uint32Array]",Q={};Q[O]=Q[S]=Q[V]=Q[F]=Q[T]=Q[C]=Q[z]=Q[H]=Q[W]=Q[K]=Q[$]=Q[M]=Q[I]=Q[R]=Q[P]=Q[L]=Q[B]=Q[q]=Q[G]=Q[J]=Q[Y]=Q[X]=!0,Q[A]=Q[N]=Q[U]=!1,t.exports=r},function(t,e){function n(t,e){for(var n=-1,r=null==t?0:t.length;++np))return!1;var d=l.get(t);if(d&&l.get(e))return d==e;var v=-1,g=!0,m=n&s?new o:void 0;for(l.set(t,e),l.set(e,t);++v=e?t:e)),t}t.exports=n},function(t,e,n){function r(t){var e=o(t),n=e%1;return e===e?n?e-n:e:0}var o=n(196);t.exports=r},function(t,e,n){function r(t){if(!t)return 0===t?t:0;if(t=o(t),t===i||t===-i){var e=t<0?-1:1;return e*a}return t===t?t:0}var o=n(197),i=1/0,a=1.7976931348623157e308;t.exports=r},function(t,e,n){function r(t){if("number"==typeof t)return t;if(i(t))return a;if(o(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=o(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(u,"");var n=c.test(t);return n||l.test(t)?f(t.slice(2),n?2:8):s.test(t)?a:+t}var o=n(32),i=n(175),a=NaN,u=/^\s+|\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,l=/^0o[0-7]+$/i,f=parseInt;t.exports=r},function(t,e,n){function r(t){if(null==t)return!0;if(s(t)&&(u(t)||"string"==typeof t||"function"==typeof t.splice||c(t)||f(t)||a(t)))return!t.length;var e=i(t);if(e==p||e==h)return!t.size;if(l(t))return!o(t).length;for(var n in t)if(v.call(t,n))return!1;return!0}var o=n(121),i=n(134),a=n(86),u=n(89),s=n(91),c=n(93),l=n(85),f=n(96),p="[object Map]",h="[object Set]",d=Object.prototype,v=d.hasOwnProperty;t.exports=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e0&&(r=a.default.apply(void 0,[r].concat(o(n.map(function(e){return t(e)}))))),(0,s.default)(r)});e.default=v},function(t,e,n){function r(){var t=arguments.length;if(!t)return[];for(var e=Array(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return o(u(n)?a(n):[n],i(e,1))}var o=n(130),i=n(201),a=n(80),u=n(89);t.exports=r},function(t,e,n){function r(t,e,n,a,u){var s=-1,c=t.length;for(n||(n=i),u||(u=[]);++s0&&n(l)?e>1?r(l,e-1,n,a,u):o(u,l):a||(u[u.length]=l)}return u}var o=n(130),i=n(202);t.exports=r},function(t,e,n){function r(t){return a(t)||i(t)||!!(u&&t&&t[u])}var o=n(27),i=n(86),a=n(89),u=o?o.isConcatSpreadable:void 0;t.exports=r},function(t,e,n){function r(t,e){var n=u(t)?o:i;return n(t,a(e,3))}var o=n(126),i=n(204),a=n(155),u=n(89);t.exports=r},function(t,e,n){function r(t,e){var n=[];return o(t,function(t,r,o){e(t,r,o)&&n.push(t)}),n}var o=n(190);t.exports=r},function(t,e,n){function r(t){return null==t?[]:o(t,i(t))}var o=n(206),i=n(120);t.exports=r},function(t,e,n){function r(t,e){return o(e,function(e){return t[e]})}var o=n(181);t.exports=r},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){var n=e.lineNumber,r=e.tagName;return{line:n,message:t,tagName:r,formattedMessage:"Line "+n+" ("+r+") — "+t}}},function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.registerMJRule=void 0;var i=n(114),a=o(i),u=n(209),s=r(u),c=s;e.registerMJRule=function(t,e){return"function"!=typeof t||1!==t.length?(0,a.default)(!1,"Your rule must be a function and must have one parameter which is the element to validate"):void(e?c[e]=t:c[t.name]=t)};e.default=c},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(210);Object.keys(r).forEach(function(t){"default"!==t&&"__esModule"!==t&&Object.defineProperty(e,t,{enumerable:!0,get:function(){return r[t]}})});var o=n(217);Object.keys(o).forEach(function(t){"default"!==t&&"__esModule"!==t&&Object.defineProperty(e,t,{enumerable:!0,get:function(){return o[t]}})});var i=n(218);Object.keys(i).forEach(function(t){"default"!==t&&"__esModule"!==t&&Object.defineProperty(e,t,{enumerable:!0,get:function(){return i[t]}})})},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.validateAttribute=void 0;var o=n(4),i=n(200),a=r(i),u=n(120),s=r(u),c=n(211),l=r(c),f=n(203),p=r(f),h=n(207),d=r(h),v=["mj-class"];e.validateAttribute=function(t){var e=t.attributes,n=t.tagName,r=o.elements[n];if(r){var i=(0,a.default)((0,s.default)(r.defaultMJMLDefinition.attributes),v),u=(0,p.default)((0,s.default)(e),function(t){return!(0,l.default)(i,t)});if(0!=u.length)return(0,d.default)((u.length>1?"Attributes":"Attribute")+" "+u.join(", ")+" "+(u.length>1?"are illegal":"is illegal"),t)}}},function(t,e,n){function r(t,e,n,r){t=i(t)?t:s(t),n=n&&!r?u(n):0;var l=t.length;return n<0&&(n=c(l+n,0)),a(t)?n<=l&&t.indexOf(e,n)>-1:!!l&&o(t,e,n)>-1}var o=n(212),i=n(91),a=n(216),u=n(195),s=n(205),c=Math.max;t.exports=r},function(t,e,n){function r(t,e,n){return e===e?a(t,e,n):o(t,i,n)}var o=n(213),i=n(214),a=n(215);t.exports=r},function(t,e){function n(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i/]*)>([^]*?)","gmi")},M=["mj-class","mj-all"],I=function(t){var e=[].concat(M);(0,_.default)(o({},a.default,s.default),function(t,n){var r=t.tagName||n;e.push(r)});var n=(0,S.default)(e,t.replace(/\$/g,"$"));return(0,h.default)(i.endingTags,u.endingTags).forEach(function(t){n=n.replace(D(t),v.default.replaceContentByCdata(t))}),n},R=function t(e,n){if(!e)throw new c.NullElementError("Null element found in mjmlElementParser");var r=n.substr(0,e.startIndex).match(/\n/g),o=r?r.length+1:1,a=e.tagName.toLowerCase(),u=(0,j.default)(v.default.getAttributes(e),function(t){return decodeURIComponent(t)}),s={tagName:a,attributes:u,lineNumber:o};if(i.endingTags.indexOf(a)!==-1){var l=v.default.parseXML(e);s.content=(0,C.default)(l(a).html().trim())}else{var p=v.default.getChildren(e);s.children=p?(0,f.default)((0,m.default)(p,function(t){return t.tagName}).map(function(e){return t(e,n)})):[]}return s},P=function(t){return(0,E.default)((0,f.default)((0,m.default)(v.default.getChildren(t),function(t){return t.tagName})),function(t){var e=v.default.parseXML(t),n=function t(n){var r=(0,w.default)(u.endingTags,n.tagName.toLowerCase());return{attributes:(0,j.default)(v.default.getAttributes(n),function(t){return decodeURIComponent(t)}),children:r?null:(0,f.default)((0,m.default)((0,N.default)(n.childNodes),function(t){return t.tagName})).map(t),content:r?(0,C.default)(e(n.tagName.toLowerCase()).html().trim()):null,tagName:n.tagName.toLowerCase()}};return n(t)})},L=function(t){var e=I(t),n=void 0,r=void 0;try{var o=v.default.parseXML(e);n=o("mjml > mj-body"),r=o("mjml > mj-head"),n.length>0&&(n=n.children().get(0))}catch(t){throw new c.ParseError("Error while parsing the file")}if(!n||n.length<1)throw new c.EmptyMJMLError('No root "" or "" found in the file, or "" doesn\'t contain a child element.');return{tagName:"mjml",children:[{tagName:"mj-head",children:r&&r.length>0?P(r.get(0)):[]},{tagName:"mj-body",children:[R(n,e)]}]}};e.default=L},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.registerMJHeadElement=e.endingTags=void 0;var r=n(115),o=e.endingTags=[],i=(e.registerMJHeadElement=function(){for(var t=arguments.length,e=Array(t),n=0;n1)a=e[0],s=e[1],u=e[2];else{var c=e[0];a=c.name,s=c.handler,u=c.endingTag}u&&!(0,r.includes)(o,a)&&o.push(a),i[a]=s},{});e.default=i},function(t,e){function n(t){for(var e=-1,n=null==t?0:t.length,r=0,o=[];++e"+t+""))},a.getAttributes=function(t){var e={};return Array.prototype.slice.call(t.attributes).forEach(function(t){return e[t.name]=t.value}),e},a.getChildren=function(t){return t.children},a.replaceContentByCdata=function(t){return"<"+t+"$1>"},a.getHTML=function(t){var e=t()[0];return""+e.documentElement.outerHTML}}else{var c=n(226),l=c.load("",{decodeEntities:!1}),f=function(t,e){return l=l.load(t,e),function(t){return t?l(t):l}};a.parseHTML=function(t){return f(t,{xmlMode:!1,decodeEntities:!1})},a.parseXML=function(t){return f(t,{xmlMode:!0,decodeEntities:!1,withStartIndices:!0})},a.getAttributes=function(t){return t.attribs||{}},a.getChildren=function(t){return t.childNodes},a.replaceContentByCdata=function(t){return"<"+t+"$1>"},a.getHTML=function(t){return t().html()}}e.default=a},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e.default=function(){return"object"===("undefined"==typeof window?"undefined":n(window))&&"object"===("undefined"==typeof document?"undefined":n(document))&&9===document.nodeType&&!(window.process&&window.process.type)}},function(t,e,n){var r,o;/*! - * jQuery JavaScript Library v3.2.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2017-03-20T18:59Z - */ -!function(e,n){"use strict";"object"==typeof t&&"object"==typeof t.exports?t.exports=e.document?n(e,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return n(t)}:n(e)}("undefined"!=typeof window?window:this,function(n,i){"use strict";function a(t,e){e=e||at;var n=e.createElement("script");n.text=t,e.head.appendChild(n).parentNode.removeChild(n)}function u(t){var e=!!t&&"length"in t&&t.length,n=_t.type(t);return"function"!==n&&!_t.isWindow(t)&&("array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function s(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}function c(t,e,n){return _t.isFunction(e)?_t.grep(t,function(t,r){return!!e.call(t,r,t)!==n}):e.nodeType?_t.grep(t,function(t){return t===e!==n}):"string"!=typeof e?_t.grep(t,function(t){return ft.call(e,t)>-1!==n}):Ct.test(e)?_t.filter(e,t,n):(e=_t.filter(e,t),_t.grep(t,function(t){return ft.call(e,t)>-1!==n&&1===t.nodeType}))}function l(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}function f(t){var e={};return _t.each(t.match(Rt)||[],function(t,n){e[n]=!0}),e}function p(t){return t}function h(t){throw t}function d(t,e,n,r){var o;try{t&&_t.isFunction(o=t.promise)?o.call(t).done(e).fail(n):t&&_t.isFunction(o=t.then)?o.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}function v(){at.removeEventListener("DOMContentLoaded",v),n.removeEventListener("load",v),_t.ready()}function g(){this.expando=_t.expando+g.uid++}function m(t){return"true"===t||"false"!==t&&("null"===t?null:t===+t+""?+t:Ft.test(t)?JSON.parse(t):t)}function y(t,e,n){var r;if(void 0===n&&1===t.nodeType)if(r="data-"+e.replace(zt,"-$&").toLowerCase(),n=t.getAttribute(r),"string"==typeof n){try{n=m(n)}catch(t){}Vt.set(t,e,n)}else n=void 0;return n}function _(t,e,n,r){var o,i=1,a=20,u=r?function(){return r.cur()}:function(){return _t.css(t,e,"")},s=u(),c=n&&n[3]||(_t.cssNumber[e]?"":"px"),l=(_t.cssNumber[e]||"px"!==c&&+s)&&Wt.exec(_t.css(t,e));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+s||1;do i=i||".5",l/=i,_t.style(t,e,l+c);while(i!==(i=u()/s)&&1!==i&&--a)}return n&&(l=+l||+s||0,o=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=o)),o}function b(t){var e,n=t.ownerDocument,r=t.nodeName,o=Jt[r];return o?o:(e=n.body.appendChild(n.createElement(r)),o=_t.css(e,"display"),e.parentNode.removeChild(e),"none"===o&&(o="block"),Jt[r]=o,o)}function w(t,e){for(var n,r,o=[],i=0,a=t.length;i-1)o&&o.push(i);else if(c=_t.contains(i.ownerDocument,i),a=x(f.appendChild(i),"script"),c&&E(a),n)for(l=0;i=a[l++];)Qt.test(i.type||"")&&n.push(i);return f}function j(){return!0}function O(){return!1}function S(){try{return at.activeElement}catch(t){}}function T(t,e,n,r,o,i){var a,u;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=void 0);for(u in e)T(t,u,n,r,e[u],i);return t}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&("string"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),o===!1)o=O;else if(!o)return t;return 1===i&&(a=o,o=function(t){return _t().off(t),a.apply(this,arguments)},o.guid=a.guid||(a.guid=_t.guid++)),t.each(function(){_t.event.add(this,e,o,r,n)})}function C(t,e){return s(t,"table")&&s(11!==e.nodeType?e:e.firstChild,"tr")?_t(">tbody",t)[0]||t:t}function A(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function N(t){var e=se.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function D(t,e){var n,r,o,i,a,u,s,c;if(1===e.nodeType){if(Ut.hasData(t)&&(i=Ut.access(t),a=Ut.set(e,i),c=i.events)){delete a.handle,a.events={};for(o in c)for(n=0,r=c[o].length;n1&&"string"==typeof d&&!mt.checkClone&&ue.test(d))return t.each(function(o){var i=t.eq(o);v&&(e[0]=d.call(this,o,i.html())),I(i,e,n,r)});if(p&&(o=k(e,t[0].ownerDocument,!1,t,r),i=o.firstChild,1===o.childNodes.length&&(o=i),i||r)){for(u=_t.map(x(o,"script"),A),s=u.length;f=0&&nE.cacheLength&&delete t[e.shift()],t[n+" "]=r}var e=[];return t}function r(t){return t[U]=!0,t}function o(t){var e=M.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function i(t,e){for(var n=t.split("|"),r=n.length;r--;)E.attrHandle[n[r]]=e}function a(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function u(t){return function(e){var n=e.nodeName.toLowerCase();return"input"===n&&e.type===t}}function s(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function c(t){return function(e){return"form"in e?e.parentNode&&e.disabled===!1?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&kt(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function l(t){return r(function(e){return e=+e,r(function(n,r){for(var o,i=t([],n.length,e),a=i.length;a--;)n[o=i[a]]&&(n[o]=!(r[o]=n[o]))})})}function f(t){return t&&"undefined"!=typeof t.getElementsByTagName&&t}function p(){}function h(t){for(var e=0,n=t.length,r="";e1?function(e,n,r){for(var o=t.length;o--;)if(!t[o](e,n,r))return!1;return!0}:t[0]}function g(t,n,r){for(var o=0,i=n.length;o-1&&(r[c]=!(a[c]=f))}}else _=m(_===a?_.splice(d,_.length):_),i?i(null,a,_,s):Q.apply(a,_)})}function _(t){for(var e,n,r,o=t.length,i=E.relative[t[0].type],a=i||E.relative[" "],u=i?1:0,s=d(function(t){return t===e},a,!0),c=d(function(t){return tt(e,t)>-1},a,!0),l=[function(t,n,r){var o=!i&&(r||n!==C)||((e=n).nodeType?s(t,n,r):c(t,n,r));return e=null,o}];u1&&v(l),u>1&&h(t.slice(0,u-1).concat({value:" "===t[u-2].type?"*":""})).replace(ut,"$1"),n,u0,i=t.length>0,a=function(r,a,u,s,c){var l,f,p,h=0,d="0",v=r&&[],g=[],y=C,_=r||i&&E.find.TAG("*",c),b=F+=null==y?1:Math.random()||.1,w=_.length;for(c&&(C=a===M||a||c);d!==w&&null!=(l=_[d]);d++){if(i&&l){for(f=0,a||l.ownerDocument===M||(D(l),u=!R);p=t[f++];)if(p(l,a||M,u)){s.push(l);break}c&&(F=b)}o&&((l=!p&&l)&&h--,r&&v.push(l))}if(h+=d,o&&d!==h){for(f=0;p=n[f++];)p(v,g,a,u);if(r){if(h>0)for(;d--;)v[d]||g[d]||(g[d]=Y.call(s));g=m(g)}Q.apply(s,g),c&&!r&&g.length>0&&h+n.length>1&&e.uniqueSort(s)}return c&&(F=b,C=y),v};return o?r(a):a}var w,x,E,k,j,O,S,T,C,A,N,D,M,I,R,P,L,B,q,U="sizzle"+1*new Date,V=t.document,F=0,z=0,H=n(),W=n(),K=n(),$=function(t,e){return t===e&&(N=!0),0},G={}.hasOwnProperty,J=[],Y=J.pop,X=J.push,Q=J.push,Z=J.slice,tt=function(t,e){for(var n=0,r=t.length;n+~]|"+nt+")"+nt+"*"),lt=new RegExp("="+nt+"*([^\\]'\"]*?)"+nt+"*\\]","g"),ft=new RegExp(it),pt=new RegExp("^"+rt+"$"),ht={ID:new RegExp("^#("+rt+")"),CLASS:new RegExp("^\\.("+rt+")"),TAG:new RegExp("^("+rt+"|[*])"),ATTR:new RegExp("^"+ot),PSEUDO:new RegExp("^"+it),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+nt+"*(even|odd|(([+-]|)(\\d*)n|)"+nt+"*(?:([+-]|)"+nt+"*(\\d+)|))"+nt+"*\\)|)","i"),bool:new RegExp("^(?:"+et+")$","i"),needsContext:new RegExp("^"+nt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+nt+"*((?:-\\d)?\\d*)"+nt+"*\\)|)(?=[^-]|$)","i")},dt=/^(?:input|select|textarea|button)$/i,vt=/^h\d$/i,gt=/^[^{]+\{\s*\[native \w/,mt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,yt=/[+~]/,_t=new RegExp("\\\\([\\da-f]{1,6}"+nt+"?|("+nt+")|.)","ig"),bt=function(t,e,n){var r="0x"+e-65536;return r!==r||n?e:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},wt=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,xt=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},Et=function(){D()},kt=d(function(t){return t.disabled===!0&&("form"in t||"label"in t)},{dir:"parentNode",next:"legend"});try{Q.apply(J=Z.call(V.childNodes),V.childNodes),J[V.childNodes.length].nodeType}catch(t){Q={apply:J.length?function(t,e){X.apply(t,Z.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}x=e.support={},j=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},D=e.setDocument=function(t){var e,n,r=t?t.ownerDocument||t:V;return r!==M&&9===r.nodeType&&r.documentElement?(M=r,I=M.documentElement,R=!j(M),V!==M&&(n=M.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Et,!1):n.attachEvent&&n.attachEvent("onunload",Et)),x.attributes=o(function(t){return t.className="i",!t.getAttribute("className")}),x.getElementsByTagName=o(function(t){return t.appendChild(M.createComment("")),!t.getElementsByTagName("*").length}),x.getElementsByClassName=gt.test(M.getElementsByClassName),x.getById=o(function(t){return I.appendChild(t).id=U,!M.getElementsByName||!M.getElementsByName(U).length}),x.getById?(E.filter.ID=function(t){var e=t.replace(_t,bt);return function(t){return t.getAttribute("id")===e}},E.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&R){var n=e.getElementById(t);return n?[n]:[]}}):(E.filter.ID=function(t){var e=t.replace(_t,bt);return function(t){var n="undefined"!=typeof t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}},E.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&R){var n,r,o,i=e.getElementById(t);if(i){if(n=i.getAttributeNode("id"),n&&n.value===t)return[i];for(o=e.getElementsByName(t),r=0;i=o[r++];)if(n=i.getAttributeNode("id"),n&&n.value===t)return[i]}return[]}}),E.find.TAG=x.getElementsByTagName?function(t,e){return"undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t):x.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],o=0,i=e.getElementsByTagName(t);if("*"===t){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},E.find.CLASS=x.getElementsByClassName&&function(t,e){if("undefined"!=typeof e.getElementsByClassName&&R)return e.getElementsByClassName(t)},L=[],P=[],(x.qsa=gt.test(M.querySelectorAll))&&(o(function(t){I.appendChild(t).innerHTML="",t.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+nt+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||P.push("\\["+nt+"*(?:value|"+et+")"),t.querySelectorAll("[id~="+U+"-]").length||P.push("~="),t.querySelectorAll(":checked").length||P.push(":checked"),t.querySelectorAll("a#"+U+"+*").length||P.push(".#.+[+~]")}),o(function(t){t.innerHTML="";var e=M.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&P.push("name"+nt+"*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&P.push(":enabled",":disabled"),I.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&P.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),P.push(",.*:")})),(x.matchesSelector=gt.test(B=I.matches||I.webkitMatchesSelector||I.mozMatchesSelector||I.oMatchesSelector||I.msMatchesSelector))&&o(function(t){x.disconnectedMatch=B.call(t,"*"),B.call(t,"[s!='']:x"),L.push("!=",it)}),P=P.length&&new RegExp(P.join("|")),L=L.length&&new RegExp(L.join("|")),e=gt.test(I.compareDocumentPosition),q=e||gt.test(I.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},$=e?function(t,e){if(t===e)return N=!0,0;var n=!t.compareDocumentPosition-!e.compareDocumentPosition;return n?n:(n=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&n||!x.sortDetached&&e.compareDocumentPosition(t)===n?t===M||t.ownerDocument===V&&q(V,t)?-1:e===M||e.ownerDocument===V&&q(V,e)?1:A?tt(A,t)-tt(A,e):0:4&n?-1:1)}:function(t,e){if(t===e)return N=!0,0;var n,r=0,o=t.parentNode,i=e.parentNode,u=[t],s=[e];if(!o||!i)return t===M?-1:e===M?1:o?-1:i?1:A?tt(A,t)-tt(A,e):0;if(o===i)return a(t,e);for(n=t;n=n.parentNode;)u.unshift(n);for(n=e;n=n.parentNode;)s.unshift(n);for(;u[r]===s[r];)r++;return r?a(u[r],s[r]):u[r]===V?-1:s[r]===V?1:0},M):M},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==M&&D(t),n=n.replace(lt,"='$1']"),x.matchesSelector&&R&&!K[n+" "]&&(!L||!L.test(n))&&(!P||!P.test(n)))try{var r=B.call(t,n);if(r||x.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){}return e(n,M,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==M&&D(t),q(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==M&&D(t);var n=E.attrHandle[e.toLowerCase()],r=n&&G.call(E.attrHandle,e.toLowerCase())?n(t,e,!R):void 0;return void 0!==r?r:x.attributes||!R?t.getAttribute(e):(r=t.getAttributeNode(e))&&r.specified?r.value:null},e.escape=function(t){return(t+"").replace(wt,xt)},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,n=[],r=0,o=0;if(N=!x.detectDuplicates,A=!x.sortStable&&t.slice(0),t.sort($),N){for(;e=t[o++];)e===t[o]&&(r=n.push(o));for(;r--;)t.splice(n[r],1)}return A=null,t},k=e.getText=function(t){var e,n="",r=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=k(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[r++];)n+=k(e);return n},E=e.selectors={cacheLength:50,createPseudo:r,match:ht,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(_t,bt),t[3]=(t[3]||t[4]||t[5]||"").replace(_t,bt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return ht.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&ft.test(n)&&(e=O(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(_t,bt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=H[t+" "];return e||(e=new RegExp("(^|"+nt+")"+t+"("+nt+"|$)"))&&H(t,function(t){return e.test("string"==typeof t.className&&t.className||"undefined"!=typeof t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(o){var i=e.attr(o,t);return null==i?"!="===n:!n||(i+="","="===n?i===r:"!="===n?i!==r:"^="===n?r&&0===i.indexOf(r):"*="===n?r&&i.indexOf(r)>-1:"$="===n?r&&i.slice(-r.length)===r:"~="===n?(" "+i.replace(at," ")+" ").indexOf(r)>-1:"|="===n&&(i===r||i.slice(0,r.length+1)===r+"-"))}},CHILD:function(t,e,n,r,o){var i="nth"!==t.slice(0,3),a="last"!==t.slice(-4),u="of-type"===e;return 1===r&&0===o?function(t){return!!t.parentNode}:function(e,n,s){var c,l,f,p,h,d,v=i!==a?"nextSibling":"previousSibling",g=e.parentNode,m=u&&e.nodeName.toLowerCase(),y=!s&&!u,_=!1;if(g){if(i){for(;v;){for(p=e;p=p[v];)if(u?p.nodeName.toLowerCase()===m:1===p.nodeType)return!1;d=v="only"===t&&!d&&"nextSibling"}return!0}if(d=[a?g.firstChild:g.lastChild],a&&y){for(p=g,f=p[U]||(p[U]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[t]||[],h=c[0]===F&&c[1],_=h&&c[2],p=h&&g.childNodes[h];p=++h&&p&&p[v]||(_=h=0)||d.pop();)if(1===p.nodeType&&++_&&p===e){l[t]=[F,h,_];break}}else if(y&&(p=e,f=p[U]||(p[U]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[t]||[],h=c[0]===F&&c[1],_=h),_===!1)for(;(p=++h&&p&&p[v]||(_=h=0)||d.pop())&&((u?p.nodeName.toLowerCase()!==m:1!==p.nodeType)||!++_||(y&&(f=p[U]||(p[U]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),l[t]=[F,_]),p!==e)););return _-=o,_===r||_%r===0&&_/r>=0}}},PSEUDO:function(t,n){var o,i=E.pseudos[t]||E.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return i[U]?i(n):i.length>1?(o=[t,t,"",n],E.setFilters.hasOwnProperty(t.toLowerCase())?r(function(t,e){for(var r,o=i(t,n),a=o.length;a--;)r=tt(t,o[a]),t[r]=!(e[r]=o[a])}):function(t){return i(t,0,o)}):i}},pseudos:{not:r(function(t){var e=[],n=[],o=S(t.replace(ut,"$1"));return o[U]?r(function(t,e,n,r){for(var i,a=o(t,null,r,[]),u=t.length;u--;)(i=a[u])&&(t[u]=!(e[u]=i))}):function(t,r,i){return e[0]=t,o(e,null,i,n),e[0]=null,!n.pop()}}),has:r(function(t){return function(n){return e(t,n).length>0}}),contains:r(function(t){return t=t.replace(_t,bt),function(e){return(e.textContent||e.innerText||k(e)).indexOf(t)>-1}}),lang:r(function(t){return pt.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(_t,bt).toLowerCase(),function(e){var n;do if(n=R?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===I},focus:function(t){return t===M.activeElement&&(!M.hasFocus||M.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:c(!1),disabled:c(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!E.pseudos.empty(t)},header:function(t){return vt.test(t.nodeName)},input:function(t){return dt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:l(function(){return[0]}),last:l(function(t,e){return[e-1]}),eq:l(function(t,e,n){return[n<0?n+e:n]}),even:l(function(t,e){for(var n=0;n=0;)t.push(r);return t}),gt:l(function(t,e,n){for(var r=n<0?n+e:n;++r2&&"ID"===(a=i[0]).type&&9===e.nodeType&&R&&E.relative[i[1].type]){if(e=(E.find.ID(a.matches[0].replace(_t,bt),e)||[])[0],!e)return n;c&&(e=e.parentNode),t=t.slice(i.shift().value.length)}for(o=ht.needsContext.test(t)?0:i.length;o--&&(a=i[o],!E.relative[u=a.type]);)if((s=E.find[u])&&(r=s(a.matches[0].replace(_t,bt),yt.test(i[0].type)&&f(e.parentNode)||e))){if(i.splice(o,1),t=r.length&&h(i),!t)return Q.apply(n,r),n;break}}return(c||S(t,l))(r,e,!R,n,!e||yt.test(t)&&f(e.parentNode)||e),n},x.sortStable=U.split("").sort($).join("")===U,x.detectDuplicates=!!N,D(),x.sortDetached=o(function(t){return 1&t.compareDocumentPosition(M.createElement("fieldset"))}),o(function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")})||i("type|href|height|width",function(t,e,n){if(!n)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),x.attributes&&o(function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||i("value",function(t,e,n){if(!n&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),o(function(t){return null==t.getAttribute("disabled")})||i(et,function(t,e,n){var r;if(!n)return t[e]===!0?e.toLowerCase():(r=t.getAttributeNode(e))&&r.specified?r.value:null}),e}(n);_t.find=kt,_t.expr=kt.selectors,_t.expr[":"]=_t.expr.pseudos,_t.uniqueSort=_t.unique=kt.uniqueSort,_t.text=kt.getText,_t.isXMLDoc=kt.isXML,_t.contains=kt.contains,_t.escapeSelector=kt.escape;var jt=function(t,e,n){for(var r=[],o=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(o&&_t(t).is(n))break;r.push(t)}return r},Ot=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},St=_t.expr.match.needsContext,Tt=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,Ct=/^.[^:#\[\.,]*$/;_t.filter=function(t,e,n){var r=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===r.nodeType?_t.find.matchesSelector(r,t)?[r]:[]:_t.find.matches(t,_t.grep(e,function(t){return 1===t.nodeType}))},_t.fn.extend({find:function(t){var e,n,r=this.length,o=this;if("string"!=typeof t)return this.pushStack(_t(t).filter(function(){for(e=0;e1?_t.uniqueSort(n):n},filter:function(t){return this.pushStack(c(this,t||[],!1))},not:function(t){return this.pushStack(c(this,t||[],!0))},is:function(t){return!!c(this,"string"==typeof t&&St.test(t)?_t(t):t||[],!1).length}});var At,Nt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Dt=_t.fn.init=function(t,e,n){var r,o;if(!t)return this;if(n=n||At,"string"==typeof t){if(r="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:Nt.exec(t),!r||!r[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(r[1]){if(e=e instanceof _t?e[0]:e,_t.merge(this,_t.parseHTML(r[1],e&&e.nodeType?e.ownerDocument||e:at,!0)),Tt.test(r[1])&&_t.isPlainObject(e))for(r in e)_t.isFunction(this[r])?this[r](e[r]):this.attr(r,e[r]);return this}return o=at.getElementById(r[2]),o&&(this[0]=o,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):_t.isFunction(t)?void 0!==n.ready?n.ready(t):t(_t):_t.makeArray(t,this)};Dt.prototype=_t.fn,At=_t(at);var Mt=/^(?:parents|prev(?:Until|All))/,It={children:!0,contents:!0,next:!0,prev:!0};_t.fn.extend({has:function(t){var e=_t(t,this),n=e.length;return this.filter(function(){for(var t=0;t-1:1===n.nodeType&&_t.find.matchesSelector(n,t))){i.push(n);break}return this.pushStack(i.length>1?_t.uniqueSort(i):i)},index:function(t){return t?"string"==typeof t?ft.call(_t(t),this[0]):ft.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(_t.uniqueSort(_t.merge(this.get(),_t(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),_t.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return jt(t,"parentNode")},parentsUntil:function(t,e,n){return jt(t,"parentNode",n)},next:function(t){return l(t,"nextSibling")},prev:function(t){return l(t,"previousSibling")},nextAll:function(t){return jt(t,"nextSibling")},prevAll:function(t){return jt(t,"previousSibling")},nextUntil:function(t,e,n){return jt(t,"nextSibling",n)},prevUntil:function(t,e,n){return jt(t,"previousSibling",n)},siblings:function(t){return Ot((t.parentNode||{}).firstChild,t)},children:function(t){return Ot(t.firstChild)},contents:function(t){return s(t,"iframe")?t.contentDocument:(s(t,"template")&&(t=t.content||t),_t.merge([],t.childNodes))}},function(t,e){_t.fn[t]=function(n,r){var o=_t.map(this,e,n);return"Until"!==t.slice(-5)&&(r=n),r&&"string"==typeof r&&(o=_t.filter(r,o)),this.length>1&&(It[t]||_t.uniqueSort(o),Mt.test(t)&&o.reverse()),this.pushStack(o)}});var Rt=/[^\x20\t\r\n\f]+/g;_t.Callbacks=function(t){t="string"==typeof t?f(t):_t.extend({},t);var e,n,r,o,i=[],a=[],u=-1,s=function(){for(o=o||t.once,r=e=!0;a.length;u=-1)for(n=a.shift();++u-1;)i.splice(n,1),n<=u&&u--}),this},has:function(t){return t?_t.inArray(t,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return o=a=[],i=n="",this},disabled:function(){return!i},lock:function(){return o=a=[],n||e||(i=n=""),this},locked:function(){return!!o},fireWith:function(t,n){return o||(n=n||[],n=[t,n.slice?n.slice():n],a.push(n),e||s()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},_t.extend({Deferred:function(t){var e=[["notify","progress",_t.Callbacks("memory"),_t.Callbacks("memory"),2],["resolve","done",_t.Callbacks("once memory"),_t.Callbacks("once memory"),0,"resolved"],["reject","fail",_t.Callbacks("once memory"),_t.Callbacks("once memory"),1,"rejected"]],r="pending",o={state:function(){return r},always:function(){return i.done(arguments).fail(arguments),this},catch:function(t){return o.then(null,t)},pipe:function(){var t=arguments;return _t.Deferred(function(n){_t.each(e,function(e,r){var o=_t.isFunction(t[r[4]])&&t[r[4]];i[r[1]](function(){var t=o&&o.apply(this,arguments);t&&_t.isFunction(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,o?[t]:arguments)})}),t=null}).promise()},then:function(t,r,o){function i(t,e,r,o){return function(){var u=this,s=arguments,c=function(){var n,c;if(!(t=a&&(r!==h&&(u=void 0,s=[n]),e.rejectWith(u,s))}};t?l():(_t.Deferred.getStackHook&&(l.stackTrace=_t.Deferred.getStackHook()),n.setTimeout(l))}}var a=0;return _t.Deferred(function(n){e[0][3].add(i(0,n,_t.isFunction(o)?o:p,n.notifyWith)),e[1][3].add(i(0,n,_t.isFunction(t)?t:p)),e[2][3].add(i(0,n,_t.isFunction(r)?r:h))}).promise()},promise:function(t){return null!=t?_t.extend(t,o):o}},i={};return _t.each(e,function(t,n){var a=n[2],u=n[5];o[n[1]]=a.add,u&&a.add(function(){r=u},e[3-t][2].disable,e[0][2].lock),a.add(n[3].fire),i[n[0]]=function(){return i[n[0]+"With"](this===i?void 0:this,arguments),this},i[n[0]+"With"]=a.fireWith}),o.promise(i),t&&t.call(i,i),i},when:function(t){var e=arguments.length,n=e,r=Array(n),o=st.call(arguments),i=_t.Deferred(),a=function(t){return function(n){r[t]=this,o[t]=arguments.length>1?st.call(arguments):n,--e||i.resolveWith(r,o)}};if(e<=1&&(d(t,i.done(a(n)).resolve,i.reject,!e),"pending"===i.state()||_t.isFunction(o[n]&&o[n].then)))return i.then();for(;n--;)d(o[n],a(n),i.reject);return i.promise()}});var Pt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;_t.Deferred.exceptionHook=function(t,e){n.console&&n.console.warn&&t&&Pt.test(t.name)&&n.console.warn("jQuery.Deferred exception: "+t.message,t.stack,e)},_t.readyException=function(t){n.setTimeout(function(){throw t})};var Lt=_t.Deferred();_t.fn.ready=function(t){return Lt.then(t).catch(function(t){_t.readyException(t)}),this},_t.extend({isReady:!1,readyWait:1,ready:function(t){(t===!0?--_t.readyWait:_t.isReady)||(_t.isReady=!0,t!==!0&&--_t.readyWait>0||Lt.resolveWith(at,[_t]))}}),_t.ready.then=Lt.then,"complete"===at.readyState||"loading"!==at.readyState&&!at.documentElement.doScroll?n.setTimeout(_t.ready):(at.addEventListener("DOMContentLoaded",v),n.addEventListener("load",v));var Bt=function(t,e,n,r,o,i,a){var u=0,s=t.length,c=null==n;if("object"===_t.type(n)){o=!0;for(u in n)Bt(t,e,u,n[u],!0,i,a)}else if(void 0!==r&&(o=!0,_t.isFunction(r)||(a=!0),c&&(a?(e.call(t,r),e=null):(c=e,e=function(t,e,n){return c.call(_t(t),n)})),e))for(;u1,null,!0)},removeData:function(t){return this.each(function(){Vt.remove(this,t)})}}),_t.extend({queue:function(t,e,n){var r;if(t)return e=(e||"fx")+"queue",r=Ut.get(t,e),n&&(!r||Array.isArray(n)?r=Ut.access(t,e,_t.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||"fx";var n=_t.queue(t,e),r=n.length,o=n.shift(),i=_t._queueHooks(t,e),a=function(){_t.dequeue(t,e)};"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===e&&n.unshift("inprogress"),delete i.stop,o.call(t,a,i)),!r&&i&&i.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return Ut.get(t,n)||Ut.access(t,n,{empty:_t.Callbacks("once memory").add(function(){Ut.remove(t,[e+"queue",n])})})}}),_t.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length\x20\t\r\n\f]+)/i,Qt=/^$|\/(?:java|ecma)script/i,Zt={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};Zt.optgroup=Zt.option,Zt.tbody=Zt.tfoot=Zt.colgroup=Zt.caption=Zt.thead, -Zt.th=Zt.td;var te=/<|&#?\w+;/;!function(){var t=at.createDocumentFragment(),e=t.appendChild(at.createElement("div")),n=at.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),e.appendChild(n),mt.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",mt.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var ee=at.documentElement,ne=/^key/,re=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,oe=/^([^.]*)(?:\.(.+)|)/;_t.event={global:{},add:function(t,e,n,r,o){var i,a,u,s,c,l,f,p,h,d,v,g=Ut.get(t);if(g)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&_t.find.matchesSelector(ee,o),n.guid||(n.guid=_t.guid++),(s=g.events)||(s=g.events={}),(a=g.handle)||(a=g.handle=function(e){return"undefined"!=typeof _t&&_t.event.triggered!==e.type?_t.event.dispatch.apply(t,arguments):void 0}),e=(e||"").match(Rt)||[""],c=e.length;c--;)u=oe.exec(e[c])||[],h=v=u[1],d=(u[2]||"").split(".").sort(),h&&(f=_t.event.special[h]||{},h=(o?f.delegateType:f.bindType)||h,f=_t.event.special[h]||{},l=_t.extend({type:h,origType:v,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&_t.expr.match.needsContext.test(o),namespace:d.join(".")},i),(p=s[h])||(p=s[h]=[],p.delegateCount=0,f.setup&&f.setup.call(t,r,d,a)!==!1||t.addEventListener&&t.addEventListener(h,a)),f.add&&(f.add.call(t,l),l.handler.guid||(l.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,l):p.push(l),_t.event.global[h]=!0)},remove:function(t,e,n,r,o){var i,a,u,s,c,l,f,p,h,d,v,g=Ut.hasData(t)&&Ut.get(t);if(g&&(s=g.events)){for(e=(e||"").match(Rt)||[""],c=e.length;c--;)if(u=oe.exec(e[c])||[],h=v=u[1],d=(u[2]||"").split(".").sort(),h){for(f=_t.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=s[h]||[],u=u[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=i=p.length;i--;)l=p[i],!o&&v!==l.origType||n&&n.guid!==l.guid||u&&!u.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(i,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(t,l));a&&!p.length&&(f.teardown&&f.teardown.call(t,d,g.handle)!==!1||_t.removeEvent(t,h,g.handle),delete s[h])}else for(h in s)_t.event.remove(t,h+e[c],n,r,!0);_t.isEmptyObject(s)&&Ut.remove(t,"handle events")}},dispatch:function(t){var e,n,r,o,i,a,u=_t.event.fix(t),s=new Array(arguments.length),c=(Ut.get(this,"events")||{})[u.type]||[],l=_t.event.special[u.type]||{};for(s[0]=u,e=1;e=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==t.type||c.disabled!==!0)){for(i=[],a={},n=0;n-1:_t.find(o,this,null,[c]).length),a[o]&&i.push(r);i.length&&u.push({elem:c,handlers:i})}return c=this,s\x20\t\r\n\f]*)[^>]*)\/>/gi,ae=/\s*$/g;_t.extend({htmlPrefilter:function(t){return t.replace(ie,"<$1>")},clone:function(t,e,n){var r,o,i,a,u=t.cloneNode(!0),s=_t.contains(t.ownerDocument,t);if(!(mt.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||_t.isXMLDoc(t)))for(a=x(u),i=x(t),r=0,o=i.length;r0&&E(a,!s&&x(t,"script")),u},cleanData:function(t){for(var e,n,r,o=_t.event.special,i=0;void 0!==(n=t[i]);i++)if(qt(n)){if(e=n[Ut.expando]){if(e.events)for(r in e.events)o[r]?_t.event.remove(n,r):_t.removeEvent(n,r,e.handle);n[Ut.expando]=void 0}n[Vt.expando]&&(n[Vt.expando]=void 0)}}}),_t.fn.extend({detach:function(t){return R(this,t,!0)},remove:function(t){return R(this,t)},text:function(t){return Bt(this,function(t){return void 0===t?_t.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return I(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=C(this,t);e.appendChild(t)}})},prepend:function(){return I(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=C(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return I(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return I(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(_t.cleanData(x(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return _t.clone(this,t,e)})},html:function(t){return Bt(this,function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!ae.test(t)&&!Zt[(Xt.exec(t)||["",""])[1].toLowerCase()]){t=_t.htmlPrefilter(t);try{for(;n1)}}),_t.Tween=z,z.prototype={constructor:z,init:function(t,e,n,r,o,i){this.elem=t,this.prop=n,this.easing=o||_t.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=r,this.unit=i||(_t.cssNumber[n]?"":"px")},cur:function(){var t=z.propHooks[this.prop];return t&&t.get?t.get(this):z.propHooks._default.get(this)},run:function(t){var e,n=z.propHooks[this.prop];return this.options.duration?this.pos=e=_t.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):z.propHooks._default.set(this),this}},z.prototype.init.prototype=z.prototype,z.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=_t.css(t.elem,t.prop,""),e&&"auto"!==e?e:0)},set:function(t){_t.fx.step[t.prop]?_t.fx.step[t.prop](t):1!==t.elem.nodeType||null==t.elem.style[_t.cssProps[t.prop]]&&!_t.cssHooks[t.prop]?t.elem[t.prop]=t.now:_t.style(t.elem,t.prop,t.now+t.unit)}}},z.propHooks.scrollTop=z.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},_t.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},_t.fx=z.prototype.init,_t.fx.step={};var _e,be,we=/^(?:toggle|show|hide)$/,xe=/queueHooks$/;_t.Animation=_t.extend(Y,{tweeners:{"*":[function(t,e){var n=this.createTween(t,e);return _(n.elem,t,Wt.exec(e),n),n}]},tweener:function(t,e){_t.isFunction(t)?(e=t,t=["*"]):t=t.match(Rt);for(var n,r=0,o=t.length;r1)},removeAttr:function(t){return this.each(function(){_t.removeAttr(this,t)})}}),_t.extend({attr:function(t,e,n){var r,o,i=t.nodeType;if(3!==i&&8!==i&&2!==i)return"undefined"==typeof t.getAttribute?_t.prop(t,e,n):(1===i&&_t.isXMLDoc(t)||(o=_t.attrHooks[e.toLowerCase()]||(_t.expr.match.bool.test(e)?Ee:void 0)),void 0!==n?null===n?void _t.removeAttr(t,e):o&&"set"in o&&void 0!==(r=o.set(t,n,e))?r:(t.setAttribute(e,n+""),n):o&&"get"in o&&null!==(r=o.get(t,e))?r:(r=_t.find.attr(t,e),null==r?void 0:r))},attrHooks:{type:{set:function(t,e){if(!mt.radioValue&&"radio"===e&&s(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,r=0,o=e&&e.match(Rt);if(o&&1===t.nodeType)for(;n=o[r++];)t.removeAttribute(n)}}),Ee={set:function(t,e,n){return e===!1?_t.removeAttr(t,n):t.setAttribute(n,n),n}},_t.each(_t.expr.match.bool.source.match(/\w+/g),function(t,e){var n=ke[e]||_t.find.attr;ke[e]=function(t,e,r){var o,i,a=e.toLowerCase();return r||(i=ke[a],ke[a]=o,o=null!=n(t,e,r)?a:null,ke[a]=i),o}});var je=/^(?:input|select|textarea|button)$/i,Oe=/^(?:a|area)$/i;_t.fn.extend({prop:function(t,e){return Bt(this,_t.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[_t.propFix[t]||t]})}}),_t.extend({prop:function(t,e,n){var r,o,i=t.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&_t.isXMLDoc(t)||(e=_t.propFix[e]||e,o=_t.propHooks[e]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(t,n,e))?r:t[e]=n:o&&"get"in o&&null!==(r=o.get(t,e))?r:t[e]},propHooks:{tabIndex:{get:function(t){var e=_t.find.attr(t,"tabindex");return e?parseInt(e,10):je.test(t.nodeName)||Oe.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),mt.optSelected||(_t.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),_t.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){_t.propFix[this.toLowerCase()]=this}),_t.fn.extend({addClass:function(t){var e,n,r,o,i,a,u,s=0;if(_t.isFunction(t))return this.each(function(e){_t(this).addClass(t.call(this,e,Q(this)))});if("string"==typeof t&&t)for(e=t.match(Rt)||[];n=this[s++];)if(o=Q(n),r=1===n.nodeType&&" "+X(o)+" "){for(a=0;i=e[a++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");u=X(r),o!==u&&n.setAttribute("class",u)}return this},removeClass:function(t){var e,n,r,o,i,a,u,s=0;if(_t.isFunction(t))return this.each(function(e){_t(this).removeClass(t.call(this,e,Q(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof t&&t)for(e=t.match(Rt)||[];n=this[s++];)if(o=Q(n),r=1===n.nodeType&&" "+X(o)+" "){for(a=0;i=e[a++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");u=X(r),o!==u&&n.setAttribute("class",u)}return this},toggleClass:function(t,e){var n=typeof t;return"boolean"==typeof e&&"string"===n?e?this.addClass(t):this.removeClass(t):_t.isFunction(t)?this.each(function(n){_t(this).toggleClass(t.call(this,n,Q(this),e),e)}):this.each(function(){var e,r,o,i;if("string"===n)for(r=0,o=_t(this),i=t.match(Rt)||[];e=i[r++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&"boolean"!==n||(e=Q(this),e&&Ut.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||t===!1?"":Ut.get(this,"__className__")||""))})},hasClass:function(t){var e,n,r=0;for(e=" "+t+" ";n=this[r++];)if(1===n.nodeType&&(" "+X(Q(n))+" ").indexOf(e)>-1)return!0;return!1}});var Se=/\r/g;_t.fn.extend({val:function(t){var e,n,r,o=this[0];{if(arguments.length)return r=_t.isFunction(t),this.each(function(n){var o;1===this.nodeType&&(o=r?t.call(this,n,_t(this).val()):t,null==o?o="":"number"==typeof o?o+="":Array.isArray(o)&&(o=_t.map(o,function(t){return null==t?"":t+""})),e=_t.valHooks[this.type]||_t.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))});if(o)return e=_t.valHooks[o.type]||_t.valHooks[o.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(n=e.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(Se,""):null==n?"":n)}}}),_t.extend({valHooks:{option:{get:function(t){var e=_t.find.attr(t,"value");return null!=e?e:X(_t.text(t))}},select:{get:function(t){var e,n,r,o=t.options,i=t.selectedIndex,a="select-one"===t.type,u=a?null:[],c=a?i+1:o.length;for(r=i<0?c:a?i:0;r-1)&&(n=!0);return n||(t.selectedIndex=-1),i}}}}),_t.each(["radio","checkbox"],function(){_t.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=_t.inArray(_t(t).val(),e)>-1}},mt.checkOn||(_t.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})});var Te=/^(?:focusinfocus|focusoutblur)$/;_t.extend(_t.event,{trigger:function(t,e,r,o){var i,a,u,s,c,l,f,p=[r||at],h=dt.call(t,"type")?t.type:t,d=dt.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||at,3!==r.nodeType&&8!==r.nodeType&&!Te.test(h+_t.event.triggered)&&(h.indexOf(".")>-1&&(d=h.split("."),h=d.shift(),d.sort()),c=h.indexOf(":")<0&&"on"+h,t=t[_t.expando]?t:new _t.Event(h,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=d.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),e=null==e?[t]:_t.makeArray(e,[t]),f=_t.event.special[h]||{},o||!f.trigger||f.trigger.apply(r,e)!==!1)){if(!o&&!f.noBubble&&!_t.isWindow(r)){for(s=f.delegateType||h,Te.test(s+h)||(a=a.parentNode);a;a=a.parentNode)p.push(a),u=a;u===(r.ownerDocument||at)&&p.push(u.defaultView||u.parentWindow||n)}for(i=0;(a=p[i++])&&!t.isPropagationStopped();)t.type=i>1?s:f.bindType||h,l=(Ut.get(a,"events")||{})[t.type]&&Ut.get(a,"handle"),l&&l.apply(a,e),l=c&&a[c],l&&l.apply&&qt(a)&&(t.result=l.apply(a,e),t.result===!1&&t.preventDefault());return t.type=h,o||t.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),e)!==!1||!qt(r)||c&&_t.isFunction(r[h])&&!_t.isWindow(r)&&(u=r[c],u&&(r[c]=null),_t.event.triggered=h,r[h](),_t.event.triggered=void 0,u&&(r[c]=u)),t.result}},simulate:function(t,e,n){var r=_t.extend(new _t.Event,n,{type:t,isSimulated:!0});_t.event.trigger(r,null,e)}}),_t.fn.extend({trigger:function(t,e){return this.each(function(){_t.event.trigger(t,e,this)})},triggerHandler:function(t,e){var n=this[0];if(n)return _t.event.trigger(t,e,n,!0)}}),_t.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(t,e){_t.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),_t.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),mt.focusin="onfocusin"in n,mt.focusin||_t.each({focus:"focusin",blur:"focusout"},function(t,e){var n=function(t){_t.event.simulate(e,t.target,_t.event.fix(t))};_t.event.special[e]={setup:function(){var r=this.ownerDocument||this,o=Ut.access(r,e);o||r.addEventListener(t,n,!0),Ut.access(r,e,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=Ut.access(r,e)-1;o?Ut.access(r,e,o):(r.removeEventListener(t,n,!0),Ut.remove(r,e))}}});var Ce=n.location,Ae=_t.now(),Ne=/\?/;_t.parseXML=function(t){var e;if(!t||"string"!=typeof t)return null;try{e=(new n.DOMParser).parseFromString(t,"text/xml")}catch(t){e=void 0}return e&&!e.getElementsByTagName("parsererror").length||_t.error("Invalid XML: "+t),e};var De=/\[\]$/,Me=/\r?\n/g,Ie=/^(?:submit|button|image|reset|file)$/i,Re=/^(?:input|select|textarea|keygen)/i;_t.param=function(t,e){var n,r=[],o=function(t,e){var n=_t.isFunction(e)?e():e;r[r.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(t)||t.jquery&&!_t.isPlainObject(t))_t.each(t,function(){o(this.name,this.value)});else for(n in t)Z(n,t[n],e,o);return r.join("&")},_t.fn.extend({serialize:function(){return _t.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=_t.prop(this,"elements");return t?_t.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!_t(this).is(":disabled")&&Re.test(this.nodeName)&&!Ie.test(t)&&(this.checked||!Yt.test(t))}).map(function(t,e){var n=_t(this).val();return null==n?null:Array.isArray(n)?_t.map(n,function(t){return{name:e.name,value:t.replace(Me,"\r\n")}}):{name:e.name,value:n.replace(Me,"\r\n")}}).get()}});var Pe=/%20/g,Le=/#.*$/,Be=/([?&])_=[^&]*/,qe=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ue=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ve=/^(?:GET|HEAD)$/,Fe=/^\/\//,ze={},He={},We="*/".concat("*"),Ke=at.createElement("a");Ke.href=Ce.href,_t.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ce.href,type:"GET",isLocal:Ue.test(Ce.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":We,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":_t.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?nt(nt(t,_t.ajaxSettings),e):nt(_t.ajaxSettings,t)},ajaxPrefilter:tt(ze),ajaxTransport:tt(He),ajax:function(t,e){function r(t,e,r,u){var c,p,h,b,w,x=e;l||(l=!0,s&&n.clearTimeout(s),o=void 0,a=u||"",E.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=rt(d,E,r)),b=ot(d,b,E,c),c?(d.ifModified&&(w=E.getResponseHeader("Last-Modified"),w&&(_t.lastModified[i]=w),w=E.getResponseHeader("etag"),w&&(_t.etag[i]=w)),204===t||"HEAD"===d.type?x="nocontent":304===t?x="notmodified":(x=b.state,p=b.data,h=b.error,c=!h)):(h=x,!t&&x||(x="error",t<0&&(t=0))),E.status=t,E.statusText=(e||x)+"",c?m.resolveWith(v,[p,x,E]):m.rejectWith(v,[E,x,h]),E.statusCode(_),_=void 0,f&&g.trigger(c?"ajaxSuccess":"ajaxError",[E,d,c?p:h]),y.fireWith(v,[E,x]),f&&(g.trigger("ajaxComplete",[E,d]),--_t.active||_t.event.trigger("ajaxStop")))}"object"==typeof t&&(e=t,t=void 0),e=e||{};var o,i,a,u,s,c,l,f,p,h,d=_t.ajaxSetup({},e),v=d.context||d,g=d.context&&(v.nodeType||v.jquery)?_t(v):_t.event,m=_t.Deferred(),y=_t.Callbacks("once memory"),_=d.statusCode||{},b={},w={},x="canceled",E={readyState:0,getResponseHeader:function(t){var e;if(l){if(!u)for(u={};e=qe.exec(a);)u[e[1].toLowerCase()]=e[2];e=u[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return l?a:null},setRequestHeader:function(t,e){return null==l&&(t=w[t.toLowerCase()]=w[t.toLowerCase()]||t,b[t]=e),this},overrideMimeType:function(t){return null==l&&(d.mimeType=t),this},statusCode:function(t){var e;if(t)if(l)E.always(t[E.status]);else for(e in t)_[e]=[_[e],t[e]];return this},abort:function(t){var e=t||x;return o&&o.abort(e),r(0,e),this}};if(m.promise(E),d.url=((t||d.url||Ce.href)+"").replace(Fe,Ce.protocol+"//"),d.type=e.method||e.type||d.method||d.type,d.dataTypes=(d.dataType||"*").toLowerCase().match(Rt)||[""],null==d.crossDomain){c=at.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=Ke.protocol+"//"+Ke.host!=c.protocol+"//"+c.host}catch(t){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=_t.param(d.data,d.traditional)),et(ze,d,e,E),l)return E;f=_t.event&&d.global,f&&0===_t.active++&&_t.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ve.test(d.type),i=d.url.replace(Le,""),d.hasContent?d.data&&d.processData&&0===(d.contentType||"").indexOf("application/x-www-form-urlencoded")&&(d.data=d.data.replace(Pe,"+")):(h=d.url.slice(i.length),d.data&&(i+=(Ne.test(i)?"&":"?")+d.data,delete d.data),d.cache===!1&&(i=i.replace(Be,"$1"),h=(Ne.test(i)?"&":"?")+"_="+Ae++ +h),d.url=i+h),d.ifModified&&(_t.lastModified[i]&&E.setRequestHeader("If-Modified-Since",_t.lastModified[i]),_t.etag[i]&&E.setRequestHeader("If-None-Match",_t.etag[i])),(d.data&&d.hasContent&&d.contentType!==!1||e.contentType)&&E.setRequestHeader("Content-Type",d.contentType),E.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+We+"; q=0.01":""):d.accepts["*"]);for(p in d.headers)E.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(v,E,d)===!1||l))return E.abort();if(x="abort",y.add(d.complete),E.done(d.success),E.fail(d.error),o=et(He,d,e,E)){if(E.readyState=1,f&&g.trigger("ajaxSend",[E,d]),l)return E;d.async&&d.timeout>0&&(s=n.setTimeout(function(){E.abort("timeout")},d.timeout));try{l=!1,o.send(b,r)}catch(t){if(l)throw t;r(-1,t)}}else r(-1,"No Transport");return E},getJSON:function(t,e,n){return _t.get(t,e,n,"json")},getScript:function(t,e){return _t.get(t,void 0,e,"script")}}),_t.each(["get","post"],function(t,e){_t[e]=function(t,n,r,o){return _t.isFunction(n)&&(o=o||r,r=n,n=void 0),_t.ajax(_t.extend({url:t,type:e,dataType:o,data:n,success:r},_t.isPlainObject(t)&&t))}}),_t._evalUrl=function(t){return _t.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},_t.fn.extend({wrapAll:function(t){var e;return this[0]&&(_t.isFunction(t)&&(t=t.call(this[0])),e=_t(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this},wrapInner:function(t){return _t.isFunction(t)?this.each(function(e){_t(this).wrapInner(t.call(this,e))}):this.each(function(){var e=_t(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=_t.isFunction(t);return this.each(function(n){_t(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(t){return this.parent(t).not("body").each(function(){_t(this).replaceWith(this.childNodes)}),this}}),_t.expr.pseudos.hidden=function(t){return!_t.expr.pseudos.visible(t)},_t.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length); -},_t.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(t){}};var $e={0:200,1223:204},Ge=_t.ajaxSettings.xhr();mt.cors=!!Ge&&"withCredentials"in Ge,mt.ajax=Ge=!!Ge,_t.ajaxTransport(function(t){var e,r;if(mt.cors||Ge&&!t.crossDomain)return{send:function(o,i){var a,u=t.xhr();if(u.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)u[a]=t.xhrFields[a];t.mimeType&&u.overrideMimeType&&u.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(a in o)u.setRequestHeader(a,o[a]);e=function(t){return function(){e&&(e=r=u.onload=u.onerror=u.onabort=u.onreadystatechange=null,"abort"===t?u.abort():"error"===t?"number"!=typeof u.status?i(0,"error"):i(u.status,u.statusText):i($e[u.status]||u.status,u.statusText,"text"!==(u.responseType||"text")||"string"!=typeof u.responseText?{binary:u.response}:{text:u.responseText},u.getAllResponseHeaders()))}},u.onload=e(),r=u.onerror=e("error"),void 0!==u.onabort?u.onabort=r:u.onreadystatechange=function(){4===u.readyState&&n.setTimeout(function(){e&&r()})},e=e("abort");try{u.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}}),_t.ajaxPrefilter(function(t){t.crossDomain&&(t.contents.script=!1)}),_t.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return _t.globalEval(t),t}}}),_t.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),_t.ajaxTransport("script",function(t){if(t.crossDomain){var e,n;return{send:function(r,o){e=_t(" - + {{#switch editor.mode}} {{#case "mjml"}} - - + {{/case}} {{#case "html"}} - {{/case}} {{/switch}} From b14bde2a6f7134c6fbc4d6ed71c2ace8968f8442 Mon Sep 17 00:00:00 2001 From: Adrian Woeltche Date: Wed, 11 Jul 2018 15:51:59 +0200 Subject: [PATCH 437/483] wrong file --- public/grapejs/dist/js/grapes.js | 51285 ----------------------------- 1 file changed, 51285 deletions(-) delete mode 100644 public/grapejs/dist/js/grapes.js diff --git a/public/grapejs/dist/js/grapes.js b/public/grapejs/dist/js/grapes.js deleted file mode 100644 index b1936d2e..00000000 --- a/public/grapejs/dist/js/grapes.js +++ /dev/null @@ -1,51285 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["grapesjs"] = factory(); - else - root["grapesjs"] = factory(); -})(typeof self !== 'undefined' ? self : this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 60); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Backbone.js 1.3.3 - -// (c) 2010-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Backbone may be freely distributed under the MIT license. -// For all details and documentation: -// http://backbonejs.org - -(function(factory) { - - // Establish the root object, `window` (`self`) in the browser, or `global` on the server. - // We use `self` instead of `window` for `WebWorker` support. - var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global); - - // Set up Backbone appropriately for the environment. Start with AMD. - if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1), __webpack_require__(10), exports], __WEBPACK_AMD_DEFINE_RESULT__ = (function(_, $, exports) { - // Export global even in AMD case in case this script is loaded with - // others that may still expect a global Backbone. - root.Backbone = factory(root, exports, _, $); - }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - - // Next for Node.js or CommonJS. jQuery may not be needed as a module. - } else if (typeof exports !== 'undefined') { - var _ = require('underscore'), $; - try { $ = require('jquery'); } catch (e) {} - factory(root, exports, _, $); - - // Finally, as a browser global. - } else { - root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$)); - } - -})(function(root, Backbone, _, $) { - - // Initial Setup - // ------------- - - // Save the previous value of the `Backbone` variable, so that it can be - // restored later on, if `noConflict` is used. - var previousBackbone = root.Backbone; - - // Create a local reference to a common array method we'll want to use later. - var slice = Array.prototype.slice; - - // Current version of the library. Keep in sync with `package.json`. - Backbone.VERSION = '1.3.3'; - - // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns - // the `$` variable. - Backbone.$ = $; - - // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable - // to its previous owner. Returns a reference to this Backbone object. - Backbone.noConflict = function() { - root.Backbone = previousBackbone; - return this; - }; - - // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option - // will fake `"PATCH"`, `"PUT"` and `"DELETE"` requests via the `_method` parameter and - // set a `X-Http-Method-Override` header. - Backbone.emulateHTTP = false; - - // Turn on `emulateJSON` to support legacy servers that can't deal with direct - // `application/json` requests ... this will encode the body as - // `application/x-www-form-urlencoded` instead and will send the model in a - // form param named `model`. - Backbone.emulateJSON = false; - - // Proxy Backbone class methods to Underscore functions, wrapping the model's - // `attributes` object or collection's `models` array behind the scenes. - // - // collection.filter(function(model) { return model.get('age') > 10 }); - // collection.each(this.addView); - // - // `Function#apply` can be slow so we use the method's arg count, if we know it. - var addMethod = function(length, method, attribute) { - switch (length) { - case 1: return function() { - return _[method](this[attribute]); - }; - case 2: return function(value) { - return _[method](this[attribute], value); - }; - case 3: return function(iteratee, context) { - return _[method](this[attribute], cb(iteratee, this), context); - }; - case 4: return function(iteratee, defaultVal, context) { - return _[method](this[attribute], cb(iteratee, this), defaultVal, context); - }; - default: return function() { - var args = slice.call(arguments); - args.unshift(this[attribute]); - return _[method].apply(_, args); - }; - } - }; - var addUnderscoreMethods = function(Class, methods, attribute) { - _.each(methods, function(length, method) { - if (_[method]) Class.prototype[method] = addMethod(length, method, attribute); - }); - }; - - // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`. - var cb = function(iteratee, instance) { - if (_.isFunction(iteratee)) return iteratee; - if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee); - if (_.isString(iteratee)) return function(model) { return model.get(iteratee); }; - return iteratee; - }; - var modelMatcher = function(attrs) { - var matcher = _.matches(attrs); - return function(model) { - return matcher(model.attributes); - }; - }; - - // Backbone.Events - // --------------- - - // A module that can be mixed in to *any object* in order to provide it with - // a custom event channel. You may bind a callback to an event with `on` or - // remove with `off`; `trigger`-ing an event fires all callbacks in - // succession. - // - // var object = {}; - // _.extend(object, Backbone.Events); - // object.on('expand', function(){ alert('expanded'); }); - // object.trigger('expand'); - // - var Events = Backbone.Events = {}; - - // Regular expression used to split event strings. - var eventSplitter = /\s+/; - - // Iterates over the standard `event, callback` (as well as the fancy multiple - // space-separated events `"change blur", callback` and jQuery-style event - // maps `{event: callback}`). - var eventsApi = function(iteratee, events, name, callback, opts) { - var i = 0, names; - if (name && typeof name === 'object') { - // Handle event maps. - if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback; - for (names = _.keys(name); i < names.length ; i++) { - events = eventsApi(iteratee, events, names[i], name[names[i]], opts); - } - } else if (name && eventSplitter.test(name)) { - // Handle space-separated event names by delegating them individually. - for (names = name.split(eventSplitter); i < names.length; i++) { - events = iteratee(events, names[i], callback, opts); - } - } else { - // Finally, standard events. - events = iteratee(events, name, callback, opts); - } - return events; - }; - - // Bind an event to a `callback` function. Passing `"all"` will bind - // the callback to all events fired. - Events.on = function(name, callback, context) { - return internalOn(this, name, callback, context); - }; - - // Guard the `listening` argument from the public API. - var internalOn = function(obj, name, callback, context, listening) { - obj._events = eventsApi(onApi, obj._events || {}, name, callback, { - context: context, - ctx: obj, - listening: listening - }); - - if (listening) { - var listeners = obj._listeners || (obj._listeners = {}); - listeners[listening.id] = listening; - } - - return obj; - }; - - // Inversion-of-control versions of `on`. Tell *this* object to listen to - // an event in another object... keeping track of what it's listening to - // for easier unbinding later. - Events.listenTo = function(obj, name, callback) { - if (!obj) return this; - var id = obj._listenId || (obj._listenId = _.uniqueId('l')); - var listeningTo = this._listeningTo || (this._listeningTo = {}); - var listening = listeningTo[id]; - - // This object is not listening to any other events on `obj` yet. - // Setup the necessary references to track the listening callbacks. - if (!listening) { - var thisId = this._listenId || (this._listenId = _.uniqueId('l')); - listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0}; - } - - // Bind callbacks on obj, and keep track of them on listening. - internalOn(obj, name, callback, this, listening); - return this; - }; - - // The reducing API that adds a callback to the `events` object. - var onApi = function(events, name, callback, options) { - if (callback) { - var handlers = events[name] || (events[name] = []); - var context = options.context, ctx = options.ctx, listening = options.listening; - if (listening) listening.count++; - - handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening}); - } - return events; - }; - - // Remove one or many callbacks. If `context` is null, removes all - // callbacks with that function. If `callback` is null, removes all - // callbacks for the event. If `name` is null, removes all bound - // callbacks for all events. - Events.off = function(name, callback, context) { - if (!this._events) return this; - this._events = eventsApi(offApi, this._events, name, callback, { - context: context, - listeners: this._listeners - }); - return this; - }; - - // Tell this object to stop listening to either specific events ... or - // to every object it's currently listening to. - Events.stopListening = function(obj, name, callback) { - var listeningTo = this._listeningTo; - if (!listeningTo) return this; - - var ids = obj ? [obj._listenId] : _.keys(listeningTo); - - for (var i = 0; i < ids.length; i++) { - var listening = listeningTo[ids[i]]; - - // If listening doesn't exist, this object is not currently - // listening to obj. Break out early. - if (!listening) break; - - listening.obj.off(name, callback, this); - } - - return this; - }; - - // The reducing API that removes a callback from the `events` object. - var offApi = function(events, name, callback, options) { - if (!events) return; - - var i = 0, listening; - var context = options.context, listeners = options.listeners; - - // Delete all events listeners and "drop" events. - if (!name && !callback && !context) { - var ids = _.keys(listeners); - for (; i < ids.length; i++) { - listening = listeners[ids[i]]; - delete listeners[listening.id]; - delete listening.listeningTo[listening.objId]; - } - return; - } - - var names = name ? [name] : _.keys(events); - for (; i < names.length; i++) { - name = names[i]; - var handlers = events[name]; - - // Bail out if there are no events stored. - if (!handlers) break; - - // Replace events if there are any remaining. Otherwise, clean up. - var remaining = []; - for (var j = 0; j < handlers.length; j++) { - var handler = handlers[j]; - if ( - callback && callback !== handler.callback && - callback !== handler.callback._callback || - context && context !== handler.context - ) { - remaining.push(handler); - } else { - listening = handler.listening; - if (listening && --listening.count === 0) { - delete listeners[listening.id]; - delete listening.listeningTo[listening.objId]; - } - } - } - - // Update tail event if the list has any events. Otherwise, clean up. - if (remaining.length) { - events[name] = remaining; - } else { - delete events[name]; - } - } - return events; - }; - - // Bind an event to only be triggered a single time. After the first time - // the callback is invoked, its listener will be removed. If multiple events - // are passed in using the space-separated syntax, the handler will fire - // once for each event, not once for a combination of all events. - Events.once = function(name, callback, context) { - // Map the event into a `{event: once}` object. - var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this)); - if (typeof name === 'string' && context == null) callback = void 0; - return this.on(events, callback, context); - }; - - // Inversion-of-control versions of `once`. - Events.listenToOnce = function(obj, name, callback) { - // Map the event into a `{event: once}` object. - var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj)); - return this.listenTo(obj, events); - }; - - // Reduces the event callbacks into a map of `{event: onceWrapper}`. - // `offer` unbinds the `onceWrapper` after it has been called. - var onceMap = function(map, name, callback, offer) { - if (callback) { - var once = map[name] = _.once(function() { - offer(name, once); - callback.apply(this, arguments); - }); - once._callback = callback; - } - return map; - }; - - // Trigger one or many events, firing all bound callbacks. Callbacks are - // passed the same arguments as `trigger` is, apart from the event name - // (unless you're listening on `"all"`, which will cause your callback to - // receive the true name of the event as the first argument). - Events.trigger = function(name) { - if (!this._events) return this; - - var length = Math.max(0, arguments.length - 1); - var args = Array(length); - for (var i = 0; i < length; i++) args[i] = arguments[i + 1]; - - eventsApi(triggerApi, this._events, name, void 0, args); - return this; - }; - - // Handles triggering the appropriate event callbacks. - var triggerApi = function(objEvents, name, callback, args) { - if (objEvents) { - var events = objEvents[name]; - var allEvents = objEvents.all; - if (events && allEvents) allEvents = allEvents.slice(); - if (events) triggerEvents(events, args); - if (allEvents) triggerEvents(allEvents, [name].concat(args)); - } - return objEvents; - }; - - // A difficult-to-believe, but optimized internal dispatch function for - // triggering events. Tries to keep the usual cases speedy (most internal - // Backbone events have 3 arguments). - var triggerEvents = function(events, args) { - var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2]; - switch (args.length) { - case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return; - case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return; - case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return; - case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return; - default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return; - } - }; - - // Aliases for backwards compatibility. - Events.bind = Events.on; - Events.unbind = Events.off; - - // Allow the `Backbone` object to serve as a global event bus, for folks who - // want global "pubsub" in a convenient place. - _.extend(Backbone, Events); - - // Backbone.Model - // -------------- - - // Backbone **Models** are the basic data object in the framework -- - // frequently representing a row in a table in a database on your server. - // A discrete chunk of data and a bunch of useful, related methods for - // performing computations and transformations on that data. - - // Create a new model with the specified attributes. A client id (`cid`) - // is automatically generated and assigned for you. - var Model = Backbone.Model = function(attributes, options) { - var attrs = attributes || {}; - options || (options = {}); - this.cid = _.uniqueId(this.cidPrefix); - this.attributes = {}; - if (options.collection) this.collection = options.collection; - if (options.parse) attrs = this.parse(attrs, options) || {}; - var defaults = _.result(this, 'defaults'); - attrs = _.defaults(_.extend({}, defaults, attrs), defaults); - this.set(attrs, options); - this.changed = {}; - this.initialize.apply(this, arguments); - }; - - // Attach all inheritable methods to the Model prototype. - _.extend(Model.prototype, Events, { - - // A hash of attributes whose current and previous value differ. - changed: null, - - // The value returned during the last failed validation. - validationError: null, - - // The default name for the JSON `id` attribute is `"id"`. MongoDB and - // CouchDB users may want to set this to `"_id"`. - idAttribute: 'id', - - // The prefix is used to create the client id which is used to identify models locally. - // You may want to override this if you're experiencing name clashes with model ids. - cidPrefix: 'c', - - // Initialize is an empty function by default. Override it with your own - // initialization logic. - initialize: function(){}, - - // Return a copy of the model's `attributes` object. - toJSON: function(options) { - return _.clone(this.attributes); - }, - - // Proxy `Backbone.sync` by default -- but override this if you need - // custom syncing semantics for *this* particular model. - sync: function() { - return Backbone.sync.apply(this, arguments); - }, - - // Get the value of an attribute. - get: function(attr) { - return this.attributes[attr]; - }, - - // Get the HTML-escaped value of an attribute. - escape: function(attr) { - return _.escape(this.get(attr)); - }, - - // Returns `true` if the attribute contains a value that is not null - // or undefined. - has: function(attr) { - return this.get(attr) != null; - }, - - // Special-cased proxy to underscore's `_.matches` method. - matches: function(attrs) { - return !!_.iteratee(attrs, this)(this.attributes); - }, - - // Set a hash of model attributes on the object, firing `"change"`. This is - // the core primitive operation of a model, updating the data and notifying - // anyone who needs to know about the change in state. The heart of the beast. - set: function(key, val, options) { - if (key == null) return this; - - // Handle both `"key", value` and `{key: value}` -style arguments. - var attrs; - if (typeof key === 'object') { - attrs = key; - options = val; - } else { - (attrs = {})[key] = val; - } - - options || (options = {}); - - // Run validation. - if (!this._validate(attrs, options)) return false; - - // Extract attributes and options. - var unset = options.unset; - var silent = options.silent; - var changes = []; - var changing = this._changing; - this._changing = true; - - if (!changing) { - this._previousAttributes = _.clone(this.attributes); - this.changed = {}; - } - - var current = this.attributes; - var changed = this.changed; - var prev = this._previousAttributes; - - // For each `set` attribute, update or delete the current value. - for (var attr in attrs) { - val = attrs[attr]; - if (!_.isEqual(current[attr], val)) changes.push(attr); - if (!_.isEqual(prev[attr], val)) { - changed[attr] = val; - } else { - delete changed[attr]; - } - unset ? delete current[attr] : current[attr] = val; - } - - // Update the `id`. - if (this.idAttribute in attrs) this.id = this.get(this.idAttribute); - - // Trigger all relevant attribute changes. - if (!silent) { - if (changes.length) this._pending = options; - for (var i = 0; i < changes.length; i++) { - this.trigger('change:' + changes[i], this, current[changes[i]], options); - } - } - - // You might be wondering why there's a `while` loop here. Changes can - // be recursively nested within `"change"` events. - if (changing) return this; - if (!silent) { - while (this._pending) { - options = this._pending; - this._pending = false; - this.trigger('change', this, options); - } - } - this._pending = false; - this._changing = false; - return this; - }, - - // Remove an attribute from the model, firing `"change"`. `unset` is a noop - // if the attribute doesn't exist. - unset: function(attr, options) { - return this.set(attr, void 0, _.extend({}, options, {unset: true})); - }, - - // Clear all attributes on the model, firing `"change"`. - clear: function(options) { - var attrs = {}; - for (var key in this.attributes) attrs[key] = void 0; - return this.set(attrs, _.extend({}, options, {unset: true})); - }, - - // Determine if the model has changed since the last `"change"` event. - // If you specify an attribute name, determine if that attribute has changed. - hasChanged: function(attr) { - if (attr == null) return !_.isEmpty(this.changed); - return _.has(this.changed, attr); - }, - - // Return an object containing all the attributes that have changed, or - // false if there are no changed attributes. Useful for determining what - // parts of a view need to be updated and/or what attributes need to be - // persisted to the server. Unset attributes will be set to undefined. - // You can also pass an attributes object to diff against the model, - // determining if there *would be* a change. - changedAttributes: function(diff) { - if (!diff) return this.hasChanged() ? _.clone(this.changed) : false; - var old = this._changing ? this._previousAttributes : this.attributes; - var changed = {}; - for (var attr in diff) { - var val = diff[attr]; - if (_.isEqual(old[attr], val)) continue; - changed[attr] = val; - } - return _.size(changed) ? changed : false; - }, - - // Get the previous value of an attribute, recorded at the time the last - // `"change"` event was fired. - previous: function(attr) { - if (attr == null || !this._previousAttributes) return null; - return this._previousAttributes[attr]; - }, - - // Get all of the attributes of the model at the time of the previous - // `"change"` event. - previousAttributes: function() { - return _.clone(this._previousAttributes); - }, - - // Fetch the model from the server, merging the response with the model's - // local attributes. Any changed attributes will trigger a "change" event. - fetch: function(options) { - options = _.extend({parse: true}, options); - var model = this; - var success = options.success; - options.success = function(resp) { - var serverAttrs = options.parse ? model.parse(resp, options) : resp; - if (!model.set(serverAttrs, options)) return false; - if (success) success.call(options.context, model, resp, options); - model.trigger('sync', model, resp, options); - }; - wrapError(this, options); - return this.sync('read', this, options); - }, - - // Set a hash of model attributes, and sync the model to the server. - // If the server returns an attributes hash that differs, the model's - // state will be `set` again. - save: function(key, val, options) { - // Handle both `"key", value` and `{key: value}` -style arguments. - var attrs; - if (key == null || typeof key === 'object') { - attrs = key; - options = val; - } else { - (attrs = {})[key] = val; - } - - options = _.extend({validate: true, parse: true}, options); - var wait = options.wait; - - // If we're not waiting and attributes exist, save acts as - // `set(attr).save(null, opts)` with validation. Otherwise, check if - // the model will be valid when the attributes, if any, are set. - if (attrs && !wait) { - if (!this.set(attrs, options)) return false; - } else if (!this._validate(attrs, options)) { - return false; - } - - // After a successful server-side save, the client is (optionally) - // updated with the server-side state. - var model = this; - var success = options.success; - var attributes = this.attributes; - options.success = function(resp) { - // Ensure attributes are restored during synchronous saves. - model.attributes = attributes; - var serverAttrs = options.parse ? model.parse(resp, options) : resp; - if (wait) serverAttrs = _.extend({}, attrs, serverAttrs); - if (serverAttrs && !model.set(serverAttrs, options)) return false; - if (success) success.call(options.context, model, resp, options); - model.trigger('sync', model, resp, options); - }; - wrapError(this, options); - - // Set temporary attributes if `{wait: true}` to properly find new ids. - if (attrs && wait) this.attributes = _.extend({}, attributes, attrs); - - var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update'); - if (method === 'patch' && !options.attrs) options.attrs = attrs; - var xhr = this.sync(method, this, options); - - // Restore attributes. - this.attributes = attributes; - - return xhr; - }, - - // Destroy this model on the server if it was already persisted. - // Optimistically removes the model from its collection, if it has one. - // If `wait: true` is passed, waits for the server to respond before removal. - destroy: function(options) { - options = options ? _.clone(options) : {}; - var model = this; - var success = options.success; - var wait = options.wait; - - var destroy = function() { - model.stopListening(); - model.trigger('destroy', model, model.collection, options); - }; - - options.success = function(resp) { - if (wait) destroy(); - if (success) success.call(options.context, model, resp, options); - if (!model.isNew()) model.trigger('sync', model, resp, options); - }; - - var xhr = false; - if (this.isNew()) { - _.defer(options.success); - } else { - wrapError(this, options); - xhr = this.sync('delete', this, options); - } - if (!wait) destroy(); - return xhr; - }, - - // Default URL for the model's representation on the server -- if you're - // using Backbone's restful methods, override this to change the endpoint - // that will be called. - url: function() { - var base = - _.result(this, 'urlRoot') || - _.result(this.collection, 'url') || - urlError(); - if (this.isNew()) return base; - var id = this.get(this.idAttribute); - return base.replace(/[^\/]$/, '$&/') + encodeURIComponent(id); - }, - - // **parse** converts a response into the hash of attributes to be `set` on - // the model. The default implementation is just to pass the response along. - parse: function(resp, options) { - return resp; - }, - - // Create a new model with identical attributes to this one. - clone: function() { - return new this.constructor(this.attributes); - }, - - // A model is new if it has never been saved to the server, and lacks an id. - isNew: function() { - return !this.has(this.idAttribute); - }, - - // Check if the model is currently in a valid state. - isValid: function(options) { - return this._validate({}, _.extend({}, options, {validate: true})); - }, - - // Run validation against the next complete set of model attributes, - // returning `true` if all is well. Otherwise, fire an `"invalid"` event. - _validate: function(attrs, options) { - if (!options.validate || !this.validate) return true; - attrs = _.extend({}, this.attributes, attrs); - var error = this.validationError = this.validate(attrs, options) || null; - if (!error) return true; - this.trigger('invalid', this, error, _.extend(options, {validationError: error})); - return false; - } - - }); - - // Underscore methods that we want to implement on the Model, mapped to the - // number of arguments they take. - var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0, - omit: 0, chain: 1, isEmpty: 1}; - - // Mix in each Underscore method as a proxy to `Model#attributes`. - addUnderscoreMethods(Model, modelMethods, 'attributes'); - - // Backbone.Collection - // ------------------- - - // If models tend to represent a single row of data, a Backbone Collection is - // more analogous to a table full of data ... or a small slice or page of that - // table, or a collection of rows that belong together for a particular reason - // -- all of the messages in this particular folder, all of the documents - // belonging to this particular author, and so on. Collections maintain - // indexes of their models, both in order, and for lookup by `id`. - - // Create a new **Collection**, perhaps to contain a specific type of `model`. - // If a `comparator` is specified, the Collection will maintain - // its models in sort order, as they're added and removed. - var Collection = Backbone.Collection = function(models, options) { - options || (options = {}); - if (options.model) this.model = options.model; - if (options.comparator !== void 0) this.comparator = options.comparator; - this._reset(); - this.initialize.apply(this, arguments); - if (models) this.reset(models, _.extend({silent: true}, options)); - }; - - // Default options for `Collection#set`. - var setOptions = {add: true, remove: true, merge: true}; - var addOptions = {add: true, remove: false}; - - // Splices `insert` into `array` at index `at`. - var splice = function(array, insert, at) { - at = Math.min(Math.max(at, 0), array.length); - var tail = Array(array.length - at); - var length = insert.length; - var i; - for (i = 0; i < tail.length; i++) tail[i] = array[i + at]; - for (i = 0; i < length; i++) array[i + at] = insert[i]; - for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i]; - }; - - // Define the Collection's inheritable methods. - _.extend(Collection.prototype, Events, { - - // The default model for a collection is just a **Backbone.Model**. - // This should be overridden in most cases. - model: Model, - - // Initialize is an empty function by default. Override it with your own - // initialization logic. - initialize: function(){}, - - // The JSON representation of a Collection is an array of the - // models' attributes. - toJSON: function(options) { - return this.map(function(model) { return model.toJSON(options); }); - }, - - // Proxy `Backbone.sync` by default. - sync: function() { - return Backbone.sync.apply(this, arguments); - }, - - // Add a model, or list of models to the set. `models` may be Backbone - // Models or raw JavaScript objects to be converted to Models, or any - // combination of the two. - add: function(models, options) { - return this.set(models, _.extend({merge: false}, options, addOptions)); - }, - - // Remove a model, or a list of models from the set. - remove: function(models, options) { - options = _.extend({}, options); - var singular = !_.isArray(models); - models = singular ? [models] : models.slice(); - var removed = this._removeModels(models, options); - if (!options.silent && removed.length) { - options.changes = {added: [], merged: [], removed: removed}; - this.trigger('update', this, options); - } - return singular ? removed[0] : removed; - }, - - // Update a collection by `set`-ing a new list of models, adding new ones, - // removing models that are no longer present, and merging models that - // already exist in the collection, as necessary. Similar to **Model#set**, - // the core operation for updating the data contained by the collection. - set: function(models, options) { - if (models == null) return; - - options = _.extend({}, setOptions, options); - if (options.parse && !this._isModel(models)) { - models = this.parse(models, options) || []; - } - - var singular = !_.isArray(models); - models = singular ? [models] : models.slice(); - - var at = options.at; - if (at != null) at = +at; - if (at > this.length) at = this.length; - if (at < 0) at += this.length + 1; - - var set = []; - var toAdd = []; - var toMerge = []; - var toRemove = []; - var modelMap = {}; - - var add = options.add; - var merge = options.merge; - var remove = options.remove; - - var sort = false; - var sortable = this.comparator && at == null && options.sort !== false; - var sortAttr = _.isString(this.comparator) ? this.comparator : null; - - // Turn bare objects into model references, and prevent invalid models - // from being added. - var model, i; - for (i = 0; i < models.length; i++) { - model = models[i]; - - // If a duplicate is found, prevent it from being added and - // optionally merge it into the existing model. - var existing = this.get(model); - if (existing) { - if (merge && model !== existing) { - var attrs = this._isModel(model) ? model.attributes : model; - if (options.parse) attrs = existing.parse(attrs, options); - existing.set(attrs, options); - toMerge.push(existing); - if (sortable && !sort) sort = existing.hasChanged(sortAttr); - } - if (!modelMap[existing.cid]) { - modelMap[existing.cid] = true; - set.push(existing); - } - models[i] = existing; - - // If this is a new, valid model, push it to the `toAdd` list. - } else if (add) { - model = models[i] = this._prepareModel(model, options); - if (model) { - toAdd.push(model); - this._addReference(model, options); - modelMap[model.cid] = true; - set.push(model); - } - } - } - - // Remove stale models. - if (remove) { - for (i = 0; i < this.length; i++) { - model = this.models[i]; - if (!modelMap[model.cid]) toRemove.push(model); - } - if (toRemove.length) this._removeModels(toRemove, options); - } - - // See if sorting is needed, update `length` and splice in new models. - var orderChanged = false; - var replace = !sortable && add && remove; - if (set.length && replace) { - orderChanged = this.length !== set.length || _.some(this.models, function(m, index) { - return m !== set[index]; - }); - this.models.length = 0; - splice(this.models, set, 0); - this.length = this.models.length; - } else if (toAdd.length) { - if (sortable) sort = true; - splice(this.models, toAdd, at == null ? this.length : at); - this.length = this.models.length; - } - - // Silently sort the collection if appropriate. - if (sort) this.sort({silent: true}); - - // Unless silenced, it's time to fire all appropriate add/sort/update events. - if (!options.silent) { - for (i = 0; i < toAdd.length; i++) { - if (at != null) options.index = at + i; - model = toAdd[i]; - model.trigger('add', model, this, options); - } - if (sort || orderChanged) this.trigger('sort', this, options); - if (toAdd.length || toRemove.length || toMerge.length) { - options.changes = { - added: toAdd, - removed: toRemove, - merged: toMerge - }; - this.trigger('update', this, options); - } - } - - // Return the added (or merged) model (or models). - return singular ? models[0] : models; - }, - - // When you have more items than you want to add or remove individually, - // you can reset the entire set with a new list of models, without firing - // any granular `add` or `remove` events. Fires `reset` when finished. - // Useful for bulk operations and optimizations. - reset: function(models, options) { - options = options ? _.clone(options) : {}; - for (var i = 0; i < this.models.length; i++) { - this._removeReference(this.models[i], options); - } - options.previousModels = this.models; - this._reset(); - models = this.add(models, _.extend({silent: true}, options)); - if (!options.silent) this.trigger('reset', this, options); - return models; - }, - - // Add a model to the end of the collection. - push: function(model, options) { - return this.add(model, _.extend({at: this.length}, options)); - }, - - // Remove a model from the end of the collection. - pop: function(options) { - var model = this.at(this.length - 1); - return this.remove(model, options); - }, - - // Add a model to the beginning of the collection. - unshift: function(model, options) { - return this.add(model, _.extend({at: 0}, options)); - }, - - // Remove a model from the beginning of the collection. - shift: function(options) { - var model = this.at(0); - return this.remove(model, options); - }, - - // Slice out a sub-array of models from the collection. - slice: function() { - return slice.apply(this.models, arguments); - }, - - // Get a model from the set by id, cid, model object with id or cid - // properties, or an attributes object that is transformed through modelId. - get: function(obj) { - if (obj == null) return void 0; - return this._byId[obj] || - this._byId[this.modelId(obj.attributes || obj)] || - obj.cid && this._byId[obj.cid]; - }, - - // Returns `true` if the model is in the collection. - has: function(obj) { - return this.get(obj) != null; - }, - - // Get the model at the given index. - at: function(index) { - if (index < 0) index += this.length; - return this.models[index]; - }, - - // Return models with matching attributes. Useful for simple cases of - // `filter`. - where: function(attrs, first) { - return this[first ? 'find' : 'filter'](attrs); - }, - - // Return the first model with matching attributes. Useful for simple cases - // of `find`. - findWhere: function(attrs) { - return this.where(attrs, true); - }, - - // Force the collection to re-sort itself. You don't need to call this under - // normal circumstances, as the set will maintain sort order as each item - // is added. - sort: function(options) { - var comparator = this.comparator; - if (!comparator) throw new Error('Cannot sort a set without a comparator'); - options || (options = {}); - - var length = comparator.length; - if (_.isFunction(comparator)) comparator = _.bind(comparator, this); - - // Run sort based on type of `comparator`. - if (length === 1 || _.isString(comparator)) { - this.models = this.sortBy(comparator); - } else { - this.models.sort(comparator); - } - if (!options.silent) this.trigger('sort', this, options); - return this; - }, - - // Pluck an attribute from each model in the collection. - pluck: function(attr) { - return this.map(attr + ''); - }, - - // Fetch the default set of models for this collection, resetting the - // collection when they arrive. If `reset: true` is passed, the response - // data will be passed through the `reset` method instead of `set`. - fetch: function(options) { - options = _.extend({parse: true}, options); - var success = options.success; - var collection = this; - options.success = function(resp) { - var method = options.reset ? 'reset' : 'set'; - collection[method](resp, options); - if (success) success.call(options.context, collection, resp, options); - collection.trigger('sync', collection, resp, options); - }; - wrapError(this, options); - return this.sync('read', this, options); - }, - - // Create a new instance of a model in this collection. Add the model to the - // collection immediately, unless `wait: true` is passed, in which case we - // wait for the server to agree. - create: function(model, options) { - options = options ? _.clone(options) : {}; - var wait = options.wait; - model = this._prepareModel(model, options); - if (!model) return false; - if (!wait) this.add(model, options); - var collection = this; - var success = options.success; - options.success = function(m, resp, callbackOpts) { - if (wait) collection.add(m, callbackOpts); - if (success) success.call(callbackOpts.context, m, resp, callbackOpts); - }; - model.save(null, options); - return model; - }, - - // **parse** converts a response into a list of models to be added to the - // collection. The default implementation is just to pass it through. - parse: function(resp, options) { - return resp; - }, - - // Create a new collection with an identical list of models as this one. - clone: function() { - return new this.constructor(this.models, { - model: this.model, - comparator: this.comparator - }); - }, - - // Define how to uniquely identify models in the collection. - modelId: function(attrs) { - return attrs[this.model.prototype.idAttribute || 'id']; - }, - - // Private method to reset all internal state. Called when the collection - // is first initialized or reset. - _reset: function() { - this.length = 0; - this.models = []; - this._byId = {}; - }, - - // Prepare a hash of attributes (or other model) to be added to this - // collection. - _prepareModel: function(attrs, options) { - if (this._isModel(attrs)) { - if (!attrs.collection) attrs.collection = this; - return attrs; - } - options = options ? _.clone(options) : {}; - options.collection = this; - var model = new this.model(attrs, options); - if (!model.validationError) return model; - this.trigger('invalid', this, model.validationError, options); - return false; - }, - - // Internal method called by both remove and set. - _removeModels: function(models, options) { - var removed = []; - for (var i = 0; i < models.length; i++) { - var model = this.get(models[i]); - if (!model) continue; - - var index = this.indexOf(model); - this.models.splice(index, 1); - this.length--; - - // Remove references before triggering 'remove' event to prevent an - // infinite loop. #3693 - delete this._byId[model.cid]; - var id = this.modelId(model.attributes); - if (id != null) delete this._byId[id]; - - if (!options.silent) { - options.index = index; - model.trigger('remove', model, this, options); - } - - removed.push(model); - this._removeReference(model, options); - } - return removed; - }, - - // Method for checking whether an object should be considered a model for - // the purposes of adding to the collection. - _isModel: function(model) { - return model instanceof Model; - }, - - // Internal method to create a model's ties to a collection. - _addReference: function(model, options) { - this._byId[model.cid] = model; - var id = this.modelId(model.attributes); - if (id != null) this._byId[id] = model; - model.on('all', this._onModelEvent, this); - }, - - // Internal method to sever a model's ties to a collection. - _removeReference: function(model, options) { - delete this._byId[model.cid]; - var id = this.modelId(model.attributes); - if (id != null) delete this._byId[id]; - if (this === model.collection) delete model.collection; - model.off('all', this._onModelEvent, this); - }, - - // Internal method called every time a model in the set fires an event. - // Sets need to update their indexes when models change ids. All other - // events simply proxy through. "add" and "remove" events that originate - // in other collections are ignored. - _onModelEvent: function(event, model, collection, options) { - if (model) { - if ((event === 'add' || event === 'remove') && collection !== this) return; - if (event === 'destroy') this.remove(model, options); - if (event === 'change') { - var prevId = this.modelId(model.previousAttributes()); - var id = this.modelId(model.attributes); - if (prevId !== id) { - if (prevId != null) delete this._byId[prevId]; - if (id != null) this._byId[id] = model; - } - } - } - this.trigger.apply(this, arguments); - } - - }); - - // Underscore methods that we want to implement on the Collection. - // 90% of the core usefulness of Backbone Collections is actually implemented - // right here: - var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0, - foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3, - select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3, - contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3, - head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3, - without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3, - isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3, - sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3}; - - // Mix in each Underscore method as a proxy to `Collection#models`. - addUnderscoreMethods(Collection, collectionMethods, 'models'); - - // Backbone.View - // ------------- - - // Backbone Views are almost more convention than they are actual code. A View - // is simply a JavaScript object that represents a logical chunk of UI in the - // DOM. This might be a single item, an entire list, a sidebar or panel, or - // even the surrounding frame which wraps your whole app. Defining a chunk of - // UI as a **View** allows you to define your DOM events declaratively, without - // having to worry about render order ... and makes it easy for the view to - // react to specific changes in the state of your models. - - // Creating a Backbone.View creates its initial element outside of the DOM, - // if an existing element is not provided... - var View = Backbone.View = function(options) { - this.cid = _.uniqueId('view'); - _.extend(this, _.pick(options, viewOptions)); - this._ensureElement(); - this.initialize.apply(this, arguments); - }; - - // Cached regex to split keys for `delegate`. - var delegateEventSplitter = /^(\S+)\s*(.*)$/; - - // List of view options to be set as properties. - var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events']; - - // Set up all inheritable **Backbone.View** properties and methods. - _.extend(View.prototype, Events, { - - // The default `tagName` of a View's element is `"div"`. - tagName: 'div', - - // jQuery delegate for element lookup, scoped to DOM elements within the - // current view. This should be preferred to global lookups where possible. - $: function(selector) { - return this.$el.find(selector); - }, - - // Initialize is an empty function by default. Override it with your own - // initialization logic. - initialize: function(){}, - - // **render** is the core function that your view should override, in order - // to populate its element (`this.el`), with the appropriate HTML. The - // convention is for **render** to always return `this`. - render: function() { - return this; - }, - - // Remove this view by taking the element out of the DOM, and removing any - // applicable Backbone.Events listeners. - remove: function() { - this._removeElement(); - this.stopListening(); - return this; - }, - - // Remove this view's element from the document and all event listeners - // attached to it. Exposed for subclasses using an alternative DOM - // manipulation API. - _removeElement: function() { - this.$el.remove(); - }, - - // Change the view's element (`this.el` property) and re-delegate the - // view's events on the new element. - setElement: function(element) { - this.undelegateEvents(); - this._setElement(element); - this.delegateEvents(); - return this; - }, - - // Creates the `this.el` and `this.$el` references for this view using the - // given `el`. `el` can be a CSS selector or an HTML string, a jQuery - // context or an element. Subclasses can override this to utilize an - // alternative DOM manipulation API and are only required to set the - // `this.el` property. - _setElement: function(el) { - this.$el = el instanceof Backbone.$ ? el : Backbone.$(el); - this.el = this.$el[0]; - }, - - // Set callbacks, where `this.events` is a hash of - // - // *{"event selector": "callback"}* - // - // { - // 'mousedown .title': 'edit', - // 'click .button': 'save', - // 'click .open': function(e) { ... } - // } - // - // pairs. Callbacks will be bound to the view, with `this` set properly. - // Uses event delegation for efficiency. - // Omitting the selector binds the event to `this.el`. - delegateEvents: function(events) { - events || (events = _.result(this, 'events')); - if (!events) return this; - this.undelegateEvents(); - for (var key in events) { - var method = events[key]; - if (!_.isFunction(method)) method = this[method]; - if (!method) continue; - var match = key.match(delegateEventSplitter); - this.delegate(match[1], match[2], _.bind(method, this)); - } - return this; - }, - - // Add a single event listener to the view's element (or a child element - // using `selector`). This only works for delegate-able events: not `focus`, - // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer. - delegate: function(eventName, selector, listener) { - this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener); - return this; - }, - - // Clears all callbacks previously bound to the view by `delegateEvents`. - // You usually don't need to use this, but may wish to if you have multiple - // Backbone views attached to the same DOM element. - undelegateEvents: function() { - if (this.$el) this.$el.off('.delegateEvents' + this.cid); - return this; - }, - - // A finer-grained `undelegateEvents` for removing a single delegated event. - // `selector` and `listener` are both optional. - undelegate: function(eventName, selector, listener) { - this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener); - return this; - }, - - // Produces a DOM element to be assigned to your view. Exposed for - // subclasses using an alternative DOM manipulation API. - _createElement: function(tagName) { - return document.createElement(tagName); - }, - - // Ensure that the View has a DOM element to render into. - // If `this.el` is a string, pass it through `$()`, take the first - // matching element, and re-assign it to `el`. Otherwise, create - // an element from the `id`, `className` and `tagName` properties. - _ensureElement: function() { - if (!this.el) { - var attrs = _.extend({}, _.result(this, 'attributes')); - if (this.id) attrs.id = _.result(this, 'id'); - if (this.className) attrs['class'] = _.result(this, 'className'); - this.setElement(this._createElement(_.result(this, 'tagName'))); - this._setAttributes(attrs); - } else { - this.setElement(_.result(this, 'el')); - } - }, - - // Set attributes from a hash on this view's element. Exposed for - // subclasses using an alternative DOM manipulation API. - _setAttributes: function(attributes) { - this.$el.attr(attributes); - } - - }); - - // Backbone.sync - // ------------- - - // Override this function to change the manner in which Backbone persists - // models to the server. You will be passed the type of request, and the - // model in question. By default, makes a RESTful Ajax request - // to the model's `url()`. Some possible customizations could be: - // - // * Use `setTimeout` to batch rapid-fire updates into a single request. - // * Send up the models as XML instead of JSON. - // * Persist models via WebSockets instead of Ajax. - // - // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests - // as `POST`, with a `_method` parameter containing the true HTTP method, - // as well as all requests with the body as `application/x-www-form-urlencoded` - // instead of `application/json` with the model in a param named `model`. - // Useful when interfacing with server-side languages like **PHP** that make - // it difficult to read the body of `PUT` requests. - Backbone.sync = function(method, model, options) { - var type = methodMap[method]; - - // Default options, unless specified. - _.defaults(options || (options = {}), { - emulateHTTP: Backbone.emulateHTTP, - emulateJSON: Backbone.emulateJSON - }); - - // Default JSON-request options. - var params = {type: type, dataType: 'json'}; - - // Ensure that we have a URL. - if (!options.url) { - params.url = _.result(model, 'url') || urlError(); - } - - // Ensure that we have the appropriate request data. - if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) { - params.contentType = 'application/json'; - params.data = JSON.stringify(options.attrs || model.toJSON(options)); - } - - // For older servers, emulate JSON by encoding the request into an HTML-form. - if (options.emulateJSON) { - params.contentType = 'application/x-www-form-urlencoded'; - params.data = params.data ? {model: params.data} : {}; - } - - // For older servers, emulate HTTP by mimicking the HTTP method with `_method` - // And an `X-HTTP-Method-Override` header. - if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) { - params.type = 'POST'; - if (options.emulateJSON) params.data._method = type; - var beforeSend = options.beforeSend; - options.beforeSend = function(xhr) { - xhr.setRequestHeader('X-HTTP-Method-Override', type); - if (beforeSend) return beforeSend.apply(this, arguments); - }; - } - - // Don't process data on a non-GET request. - if (params.type !== 'GET' && !options.emulateJSON) { - params.processData = false; - } - - // Pass along `textStatus` and `errorThrown` from jQuery. - var error = options.error; - options.error = function(xhr, textStatus, errorThrown) { - options.textStatus = textStatus; - options.errorThrown = errorThrown; - if (error) error.call(options.context, xhr, textStatus, errorThrown); - }; - - // Make the request, allowing the user to override any Ajax options. - var xhr = options.xhr = Backbone.ajax(_.extend(params, options)); - model.trigger('request', model, xhr, options); - return xhr; - }; - - // Map from CRUD to HTTP for our default `Backbone.sync` implementation. - var methodMap = { - 'create': 'POST', - 'update': 'PUT', - 'patch': 'PATCH', - 'delete': 'DELETE', - 'read': 'GET' - }; - - // Set the default implementation of `Backbone.ajax` to proxy through to `$`. - // Override this if you'd like to use a different library. - Backbone.ajax = function() { - return Backbone.$.ajax.apply(Backbone.$, arguments); - }; - - // Backbone.Router - // --------------- - - // Routers map faux-URLs to actions, and fire events when routes are - // matched. Creating a new one sets its `routes` hash, if not set statically. - var Router = Backbone.Router = function(options) { - options || (options = {}); - if (options.routes) this.routes = options.routes; - this._bindRoutes(); - this.initialize.apply(this, arguments); - }; - - // Cached regular expressions for matching named param parts and splatted - // parts of route strings. - var optionalParam = /\((.*?)\)/g; - var namedParam = /(\(\?)?:\w+/g; - var splatParam = /\*\w+/g; - var escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g; - - // Set up all inheritable **Backbone.Router** properties and methods. - _.extend(Router.prototype, Events, { - - // Initialize is an empty function by default. Override it with your own - // initialization logic. - initialize: function(){}, - - // Manually bind a single named route to a callback. For example: - // - // this.route('search/:query/p:num', 'search', function(query, num) { - // ... - // }); - // - route: function(route, name, callback) { - if (!_.isRegExp(route)) route = this._routeToRegExp(route); - if (_.isFunction(name)) { - callback = name; - name = ''; - } - if (!callback) callback = this[name]; - var router = this; - Backbone.history.route(route, function(fragment) { - var args = router._extractParameters(route, fragment); - if (router.execute(callback, args, name) !== false) { - router.trigger.apply(router, ['route:' + name].concat(args)); - router.trigger('route', name, args); - Backbone.history.trigger('route', router, name, args); - } - }); - return this; - }, - - // Execute a route handler with the provided parameters. This is an - // excellent place to do pre-route setup or post-route cleanup. - execute: function(callback, args, name) { - if (callback) callback.apply(this, args); - }, - - // Simple proxy to `Backbone.history` to save a fragment into the history. - navigate: function(fragment, options) { - Backbone.history.navigate(fragment, options); - return this; - }, - - // Bind all defined routes to `Backbone.history`. We have to reverse the - // order of the routes here to support behavior where the most general - // routes can be defined at the bottom of the route map. - _bindRoutes: function() { - if (!this.routes) return; - this.routes = _.result(this, 'routes'); - var route, routes = _.keys(this.routes); - while ((route = routes.pop()) != null) { - this.route(route, this.routes[route]); - } - }, - - // Convert a route string into a regular expression, suitable for matching - // against the current location hash. - _routeToRegExp: function(route) { - route = route.replace(escapeRegExp, '\\$&') - .replace(optionalParam, '(?:$1)?') - .replace(namedParam, function(match, optional) { - return optional ? match : '([^/?]+)'; - }) - .replace(splatParam, '([^?]*?)'); - return new RegExp('^' + route + '(?:\\?([\\s\\S]*))?$'); - }, - - // Given a route, and a URL fragment that it matches, return the array of - // extracted decoded parameters. Empty or unmatched parameters will be - // treated as `null` to normalize cross-browser behavior. - _extractParameters: function(route, fragment) { - var params = route.exec(fragment).slice(1); - return _.map(params, function(param, i) { - // Don't decode the search params. - if (i === params.length - 1) return param || null; - return param ? decodeURIComponent(param) : null; - }); - } - - }); - - // Backbone.History - // ---------------- - - // Handles cross-browser history management, based on either - // [pushState](http://diveintohtml5.info/history.html) and real URLs, or - // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange) - // and URL fragments. If the browser supports neither (old IE, natch), - // falls back to polling. - var History = Backbone.History = function() { - this.handlers = []; - this.checkUrl = _.bind(this.checkUrl, this); - - // Ensure that `History` can be used outside of the browser. - if (typeof window !== 'undefined') { - this.location = window.location; - this.history = window.history; - } - }; - - // Cached regex for stripping a leading hash/slash and trailing space. - var routeStripper = /^[#\/]|\s+$/g; - - // Cached regex for stripping leading and trailing slashes. - var rootStripper = /^\/+|\/+$/g; - - // Cached regex for stripping urls of hash. - var pathStripper = /#.*$/; - - // Has the history handling already been started? - History.started = false; - - // Set up all inheritable **Backbone.History** properties and methods. - _.extend(History.prototype, Events, { - - // The default interval to poll for hash changes, if necessary, is - // twenty times a second. - interval: 50, - - // Are we at the app root? - atRoot: function() { - var path = this.location.pathname.replace(/[^\/]$/, '$&/'); - return path === this.root && !this.getSearch(); - }, - - // Does the pathname match the root? - matchRoot: function() { - var path = this.decodeFragment(this.location.pathname); - var rootPath = path.slice(0, this.root.length - 1) + '/'; - return rootPath === this.root; - }, - - // Unicode characters in `location.pathname` are percent encoded so they're - // decoded for comparison. `%25` should not be decoded since it may be part - // of an encoded parameter. - decodeFragment: function(fragment) { - return decodeURI(fragment.replace(/%25/g, '%2525')); - }, - - // In IE6, the hash fragment and search params are incorrect if the - // fragment contains `?`. - getSearch: function() { - var match = this.location.href.replace(/#.*/, '').match(/\?.+/); - return match ? match[0] : ''; - }, - - // Gets the true hash value. Cannot use location.hash directly due to bug - // in Firefox where location.hash will always be decoded. - getHash: function(window) { - var match = (window || this).location.href.match(/#(.*)$/); - return match ? match[1] : ''; - }, - - // Get the pathname and search params, without the root. - getPath: function() { - var path = this.decodeFragment( - this.location.pathname + this.getSearch() - ).slice(this.root.length - 1); - return path.charAt(0) === '/' ? path.slice(1) : path; - }, - - // Get the cross-browser normalized URL fragment from the path or hash. - getFragment: function(fragment) { - if (fragment == null) { - if (this._usePushState || !this._wantsHashChange) { - fragment = this.getPath(); - } else { - fragment = this.getHash(); - } - } - return fragment.replace(routeStripper, ''); - }, - - // Start the hash change handling, returning `true` if the current URL matches - // an existing route, and `false` otherwise. - start: function(options) { - if (History.started) throw new Error('Backbone.history has already been started'); - History.started = true; - - // Figure out the initial configuration. Do we need an iframe? - // Is pushState desired ... is it available? - this.options = _.extend({root: '/'}, this.options, options); - this.root = this.options.root; - this._wantsHashChange = this.options.hashChange !== false; - this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7); - this._useHashChange = this._wantsHashChange && this._hasHashChange; - this._wantsPushState = !!this.options.pushState; - this._hasPushState = !!(this.history && this.history.pushState); - this._usePushState = this._wantsPushState && this._hasPushState; - this.fragment = this.getFragment(); - - // Normalize root to always include a leading and trailing slash. - this.root = ('/' + this.root + '/').replace(rootStripper, '/'); - - // Transition from hashChange to pushState or vice versa if both are - // requested. - if (this._wantsHashChange && this._wantsPushState) { - - // If we've started off with a route from a `pushState`-enabled - // browser, but we're currently in a browser that doesn't support it... - if (!this._hasPushState && !this.atRoot()) { - var rootPath = this.root.slice(0, -1) || '/'; - this.location.replace(rootPath + '#' + this.getPath()); - // Return immediately as browser will do redirect to new url - return true; - - // Or if we've started out with a hash-based route, but we're currently - // in a browser where it could be `pushState`-based instead... - } else if (this._hasPushState && this.atRoot()) { - this.navigate(this.getHash(), {replace: true}); - } - - } - - // Proxy an iframe to handle location events if the browser doesn't - // support the `hashchange` event, HTML5 history, or the user wants - // `hashChange` but not `pushState`. - if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) { - this.iframe = document.createElement('iframe'); - this.iframe.src = 'javascript:0'; - this.iframe.style.display = 'none'; - this.iframe.tabIndex = -1; - var body = document.body; - // Using `appendChild` will throw on IE < 9 if the document is not ready. - var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow; - iWindow.document.open(); - iWindow.document.close(); - iWindow.location.hash = '#' + this.fragment; - } - - // Add a cross-platform `addEventListener` shim for older browsers. - var addEventListener = window.addEventListener || function(eventName, listener) { - return attachEvent('on' + eventName, listener); - }; - - // Depending on whether we're using pushState or hashes, and whether - // 'onhashchange' is supported, determine how we check the URL state. - if (this._usePushState) { - addEventListener('popstate', this.checkUrl, false); - } else if (this._useHashChange && !this.iframe) { - addEventListener('hashchange', this.checkUrl, false); - } else if (this._wantsHashChange) { - this._checkUrlInterval = setInterval(this.checkUrl, this.interval); - } - - if (!this.options.silent) return this.loadUrl(); - }, - - // Disable Backbone.history, perhaps temporarily. Not useful in a real app, - // but possibly useful for unit testing Routers. - stop: function() { - // Add a cross-platform `removeEventListener` shim for older browsers. - var removeEventListener = window.removeEventListener || function(eventName, listener) { - return detachEvent('on' + eventName, listener); - }; - - // Remove window listeners. - if (this._usePushState) { - removeEventListener('popstate', this.checkUrl, false); - } else if (this._useHashChange && !this.iframe) { - removeEventListener('hashchange', this.checkUrl, false); - } - - // Clean up the iframe if necessary. - if (this.iframe) { - document.body.removeChild(this.iframe); - this.iframe = null; - } - - // Some environments will throw when clearing an undefined interval. - if (this._checkUrlInterval) clearInterval(this._checkUrlInterval); - History.started = false; - }, - - // Add a route to be tested when the fragment changes. Routes added later - // may override previous routes. - route: function(route, callback) { - this.handlers.unshift({route: route, callback: callback}); - }, - - // Checks the current URL to see if it has changed, and if it has, - // calls `loadUrl`, normalizing across the hidden iframe. - checkUrl: function(e) { - var current = this.getFragment(); - - // If the user pressed the back button, the iframe's hash will have - // changed and we should use that for comparison. - if (current === this.fragment && this.iframe) { - current = this.getHash(this.iframe.contentWindow); - } - - if (current === this.fragment) return false; - if (this.iframe) this.navigate(current); - this.loadUrl(); - }, - - // Attempt to load the current URL fragment. If a route succeeds with a - // match, returns `true`. If no defined routes matches the fragment, - // returns `false`. - loadUrl: function(fragment) { - // If the root doesn't match, no routes can match either. - if (!this.matchRoot()) return false; - fragment = this.fragment = this.getFragment(fragment); - return _.some(this.handlers, function(handler) { - if (handler.route.test(fragment)) { - handler.callback(fragment); - return true; - } - }); - }, - - // Save a fragment into the hash history, or replace the URL state if the - // 'replace' option is passed. You are responsible for properly URL-encoding - // the fragment in advance. - // - // The options object can contain `trigger: true` if you wish to have the - // route callback be fired (not usually desirable), or `replace: true`, if - // you wish to modify the current URL without adding an entry to the history. - navigate: function(fragment, options) { - if (!History.started) return false; - if (!options || options === true) options = {trigger: !!options}; - - // Normalize the fragment. - fragment = this.getFragment(fragment || ''); - - // Don't include a trailing slash on the root. - var rootPath = this.root; - if (fragment === '' || fragment.charAt(0) === '?') { - rootPath = rootPath.slice(0, -1) || '/'; - } - var url = rootPath + fragment; - - // Strip the hash and decode for matching. - fragment = this.decodeFragment(fragment.replace(pathStripper, '')); - - if (this.fragment === fragment) return; - this.fragment = fragment; - - // If pushState is available, we use it to set the fragment as a real URL. - if (this._usePushState) { - this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url); - - // If hash changes haven't been explicitly disabled, update the hash - // fragment to store history. - } else if (this._wantsHashChange) { - this._updateHash(this.location, fragment, options.replace); - if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) { - var iWindow = this.iframe.contentWindow; - - // Opening and closing the iframe tricks IE7 and earlier to push a - // history entry on hash-tag change. When replace is true, we don't - // want this. - if (!options.replace) { - iWindow.document.open(); - iWindow.document.close(); - } - - this._updateHash(iWindow.location, fragment, options.replace); - } - - // If you've told us that you explicitly don't want fallback hashchange- - // based history, then `navigate` becomes a page refresh. - } else { - return this.location.assign(url); - } - if (options.trigger) return this.loadUrl(fragment); - }, - - // Update the hash location, either replacing the current entry, or adding - // a new one to the browser history. - _updateHash: function(location, fragment, replace) { - if (replace) { - var href = location.href.replace(/(javascript:|#).*$/, ''); - location.replace(href + '#' + fragment); - } else { - // Some browsers require that `hash` contains a leading #. - location.hash = '#' + fragment; - } - } - - }); - - // Create the default Backbone.history. - Backbone.history = new History; - - // Helpers - // ------- - - // Helper function to correctly set up the prototype chain for subclasses. - // Similar to `goog.inherits`, but uses a hash of prototype properties and - // class properties to be extended. - var extend = function(protoProps, staticProps) { - var parent = this; - var child; - - // The constructor function for the new subclass is either defined by you - // (the "constructor" property in your `extend` definition), or defaulted - // by us to simply call the parent constructor. - if (protoProps && _.has(protoProps, 'constructor')) { - child = protoProps.constructor; - } else { - child = function(){ return parent.apply(this, arguments); }; - } - - // Add static properties to the constructor function, if supplied. - _.extend(child, parent, staticProps); - - // Set the prototype chain to inherit from `parent`, without calling - // `parent`'s constructor function and add the prototype properties. - child.prototype = _.create(parent.prototype, protoProps); - child.prototype.constructor = child; - - // Set a convenience property in case the parent's prototype is needed - // later. - child.__super__ = parent.prototype; - - return child; - }; - - // Set up inheritance for the model, collection, router, view and history. - Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend; - - // Throw an error when a URL is needed, and none is supplied. - var urlError = function() { - throw new Error('A "url" property or function must be specified'); - }; - - // Wrap an optional error callback with a fallback error event. - var wrapError = function(model, options) { - var error = options.error; - options.error = function(resp) { - if (error) error.call(options.context, model, resp, options); - model.trigger('error', model, resp, options); - }; - }; - - return Backbone; -}); - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.9.0 -// http://underscorejs.org -// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. - -(function() { - - // Baseline setup - // -------------- - - // Establish the root object, `window` (`self`) in the browser, `global` - // on the server, or `this` in some virtual machines. We use `self` - // instead of `window` for `WebWorker` support. - var root = typeof self == 'object' && self.self === self && self || - typeof global == 'object' && global.global === global && global || - this || - {}; - - // Save the previous value of the `_` variable. - var previousUnderscore = root._; - - // Save bytes in the minified (but not gzipped) version: - var ArrayProto = Array.prototype, ObjProto = Object.prototype; - var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; - - // Create quick reference variables for speed access to core prototypes. - var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; - - // All **ECMAScript 5** native function implementations that we hope to use - // are declared here. - var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create; - - // Naked function reference for surrogate-prototype-swapping. - var Ctor = function(){}; - - // Create a safe reference to the Underscore object for use below. - var _ = function(obj) { - if (obj instanceof _) return obj; - if (!(this instanceof _)) return new _(obj); - this._wrapped = obj; - }; - - // Export the Underscore object for **Node.js**, with - // backwards-compatibility for their old module API. If we're in - // the browser, add `_` as a global object. - // (`nodeType` is checked to ensure that `module` - // and `exports` are not HTML elements.) - if (typeof exports != 'undefined' && !exports.nodeType) { - if (typeof module != 'undefined' && !module.nodeType && module.exports) { - exports = module.exports = _; - } - exports._ = _; - } else { - root._ = _; - } - - // Current version. - _.VERSION = '1.9.0'; - - // Internal function that returns an efficient (for current engines) version - // of the passed-in callback, to be repeatedly applied in other Underscore - // functions. - var optimizeCb = function(func, context, argCount) { - if (context === void 0) return func; - switch (argCount == null ? 3 : argCount) { - case 1: return function(value) { - return func.call(context, value); - }; - // The 2-argument case is omitted because we’re not using it. - case 3: return function(value, index, collection) { - return func.call(context, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(context, accumulator, value, index, collection); - }; - } - return function() { - return func.apply(context, arguments); - }; - }; - - var builtinIteratee; - - // An internal function to generate callbacks that can be applied to each - // element in a collection, returning the desired result — either `identity`, - // an arbitrary callback, a property matcher, or a property accessor. - var cb = function(value, context, argCount) { - if (_.iteratee !== builtinIteratee) return _.iteratee(value, context); - if (value == null) return _.identity; - if (_.isFunction(value)) return optimizeCb(value, context, argCount); - if (_.isObject(value) && !_.isArray(value)) return _.matcher(value); - return _.property(value); - }; - - // External wrapper for our callback generator. Users may customize - // `_.iteratee` if they want additional predicate/iteratee shorthand styles. - // This abstraction hides the internal-only argCount argument. - _.iteratee = builtinIteratee = function(value, context) { - return cb(value, context, Infinity); - }; - - // Some functions take a variable number of arguments, or a few expected - // arguments at the beginning and then a variable number of values to operate - // on. This helper accumulates all remaining arguments past the function’s - // argument length (or an explicit `startIndex`), into an array that becomes - // the last argument. Similar to ES6’s "rest parameter". - var restArguments = function(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; - }; - - // An internal function for creating a new object that inherits from another. - var baseCreate = function(prototype) { - if (!_.isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; - }; - - var shallowProperty = function(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; - }; - - var deepGet = function(obj, path) { - var length = path.length; - for (var i = 0; i < length; i++) { - if (obj == null) return void 0; - obj = obj[path[i]]; - } - return length ? obj : void 0; - }; - - // Helper for collection methods to determine whether a collection - // should be iterated as an array or as an object. - // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength - // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 - var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; - var getLength = shallowProperty('length'); - var isArrayLike = function(collection) { - var length = getLength(collection); - return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; - }; - - // Collection Functions - // -------------------- - - // The cornerstone, an `each` implementation, aka `forEach`. - // Handles raw objects in addition to array-likes. Treats all - // sparse array-likes as if they were dense. - _.each = _.forEach = function(obj, iteratee, context) { - iteratee = optimizeCb(iteratee, context); - var i, length; - if (isArrayLike(obj)) { - for (i = 0, length = obj.length; i < length; i++) { - iteratee(obj[i], i, obj); - } - } else { - var keys = _.keys(obj); - for (i = 0, length = keys.length; i < length; i++) { - iteratee(obj[keys[i]], keys[i], obj); - } - } - return obj; - }; - - // Return the results of applying the iteratee to each element. - _.map = _.collect = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - results = Array(length); - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - results[index] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Create a reducing function iterating left or right. - var createReduce = function(dir) { - // Wrap code that reassigns argument variables in a separate function than - // the one that accesses `arguments.length` to avoid a perf hit. (#1991) - var reducer = function(obj, iteratee, memo, initial) { - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - index = dir > 0 ? 0 : length - 1; - if (!initial) { - memo = obj[keys ? keys[index] : index]; - index += dir; - } - for (; index >= 0 && index < length; index += dir) { - var currentKey = keys ? keys[index] : index; - memo = iteratee(memo, obj[currentKey], currentKey, obj); - } - return memo; - }; - - return function(obj, iteratee, memo, context) { - var initial = arguments.length >= 3; - return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial); - }; - }; - - // **Reduce** builds up a single result from a list of values, aka `inject`, - // or `foldl`. - _.reduce = _.foldl = _.inject = createReduce(1); - - // The right-associative version of reduce, also known as `foldr`. - _.reduceRight = _.foldr = createReduce(-1); - - // Return the first value which passes a truth test. Aliased as `detect`. - _.find = _.detect = function(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey; - var key = keyFinder(obj, predicate, context); - if (key !== void 0 && key !== -1) return obj[key]; - }; - - // Return all the elements that pass a truth test. - // Aliased as `select`. - _.filter = _.select = function(obj, predicate, context) { - var results = []; - predicate = cb(predicate, context); - _.each(obj, function(value, index, list) { - if (predicate(value, index, list)) results.push(value); - }); - return results; - }; - - // Return all the elements for which a truth test fails. - _.reject = function(obj, predicate, context) { - return _.filter(obj, _.negate(cb(predicate)), context); - }; - - // Determine whether all of the elements match a truth test. - // Aliased as `all`. - _.every = _.all = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (!predicate(obj[currentKey], currentKey, obj)) return false; - } - return true; - }; - - // Determine if at least one element in the object matches a truth test. - // Aliased as `any`. - _.some = _.any = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (predicate(obj[currentKey], currentKey, obj)) return true; - } - return false; - }; - - // Determine if the array or object contains a given item (using `===`). - // Aliased as `includes` and `include`. - _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - if (typeof fromIndex != 'number' || guard) fromIndex = 0; - return _.indexOf(obj, item, fromIndex) >= 0; - }; - - // Invoke a method (with arguments) on every item in a collection. - _.invoke = restArguments(function(obj, path, args) { - var contextPath, func; - if (_.isFunction(path)) { - func = path; - } else if (_.isArray(path)) { - contextPath = path.slice(0, -1); - path = path[path.length - 1]; - } - return _.map(obj, function(context) { - var method = func; - if (!method) { - if (contextPath && contextPath.length) { - context = deepGet(context, contextPath); - } - if (context == null) return void 0; - method = context[path]; - } - return method == null ? method : method.apply(context, args); - }); - }); - - // Convenience version of a common use case of `map`: fetching a property. - _.pluck = function(obj, key) { - return _.map(obj, _.property(key)); - }; - - // Convenience version of a common use case of `filter`: selecting only objects - // containing specific `key:value` pairs. - _.where = function(obj, attrs) { - return _.filter(obj, _.matcher(attrs)); - }; - - // Convenience version of a common use case of `find`: getting the first object - // containing specific `key:value` pairs. - _.findWhere = function(obj, attrs) { - return _.find(obj, _.matcher(attrs)); - }; - - // Return the maximum element (or element-based computation). - _.max = function(obj, iteratee, context) { - var result = -Infinity, lastComputed = -Infinity, - value, computed; - if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value != null && value > result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(v, index, list) { - computed = iteratee(v, index, list); - if (computed > lastComputed || computed === -Infinity && result === -Infinity) { - result = v; - lastComputed = computed; - } - }); - } - return result; - }; - - // Return the minimum element (or element-based computation). - _.min = function(obj, iteratee, context) { - var result = Infinity, lastComputed = Infinity, - value, computed; - if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value != null && value < result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(v, index, list) { - computed = iteratee(v, index, list); - if (computed < lastComputed || computed === Infinity && result === Infinity) { - result = v; - lastComputed = computed; - } - }); - } - return result; - }; - - // Shuffle a collection. - _.shuffle = function(obj) { - return _.sample(obj, Infinity); - }; - - // Sample **n** random values from a collection using the modern version of the - // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). - // If **n** is not specified, returns a single random element. - // The internal `guard` argument allows it to work with `map`. - _.sample = function(obj, n, guard) { - if (n == null || guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - return obj[_.random(obj.length - 1)]; - } - var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj); - var length = getLength(sample); - n = Math.max(Math.min(n, length), 0); - var last = length - 1; - for (var index = 0; index < n; index++) { - var rand = _.random(index, last); - var temp = sample[index]; - sample[index] = sample[rand]; - sample[rand] = temp; - } - return sample.slice(0, n); - }; - - // Sort the object's values by a criterion produced by an iteratee. - _.sortBy = function(obj, iteratee, context) { - var index = 0; - iteratee = cb(iteratee, context); - return _.pluck(_.map(obj, function(value, key, list) { - return { - value: value, - index: index++, - criteria: iteratee(value, key, list) - }; - }).sort(function(left, right) { - var a = left.criteria; - var b = right.criteria; - if (a !== b) { - if (a > b || a === void 0) return 1; - if (a < b || b === void 0) return -1; - } - return left.index - right.index; - }), 'value'); - }; - - // An internal function used for aggregate "group by" operations. - var group = function(behavior, partition) { - return function(obj, iteratee, context) { - var result = partition ? [[], []] : {}; - iteratee = cb(iteratee, context); - _.each(obj, function(value, index) { - var key = iteratee(value, index, obj); - behavior(result, value, key); - }); - return result; - }; - }; - - // Groups the object's values by a criterion. Pass either a string attribute - // to group by, or a function that returns the criterion. - _.groupBy = group(function(result, value, key) { - if (_.has(result, key)) result[key].push(value); else result[key] = [value]; - }); - - // Indexes the object's values by a criterion, similar to `groupBy`, but for - // when you know that your index values will be unique. - _.indexBy = group(function(result, value, key) { - result[key] = value; - }); - - // Counts instances of an object that group by a certain criterion. Pass - // either a string attribute to count by, or a function that returns the - // criterion. - _.countBy = group(function(result, value, key) { - if (_.has(result, key)) result[key]++; else result[key] = 1; - }); - - var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; - // Safely create a real, live array from anything iterable. - _.toArray = function(obj) { - if (!obj) return []; - if (_.isArray(obj)) return slice.call(obj); - if (_.isString(obj)) { - // Keep surrogate pair characters together - return obj.match(reStrSymbol); - } - if (isArrayLike(obj)) return _.map(obj, _.identity); - return _.values(obj); - }; - - // Return the number of elements in an object. - _.size = function(obj) { - if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : _.keys(obj).length; - }; - - // Split a collection into two arrays: one whose elements all satisfy the given - // predicate, and one whose elements all do not satisfy the predicate. - _.partition = group(function(result, value, pass) { - result[pass ? 0 : 1].push(value); - }, true); - - // Array Functions - // --------------- - - // Get the first element of an array. Passing **n** will return the first N - // values in the array. Aliased as `head` and `take`. The **guard** check - // allows it to work with `_.map`. - _.first = _.head = _.take = function(array, n, guard) { - if (array == null || array.length < 1) return void 0; - if (n == null || guard) return array[0]; - return _.initial(array, array.length - n); - }; - - // Returns everything but the last entry of the array. Especially useful on - // the arguments object. Passing **n** will return all the values in - // the array, excluding the last N. - _.initial = function(array, n, guard) { - return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); - }; - - // Get the last element of an array. Passing **n** will return the last N - // values in the array. - _.last = function(array, n, guard) { - if (array == null || array.length < 1) return void 0; - if (n == null || guard) return array[array.length - 1]; - return _.rest(array, Math.max(0, array.length - n)); - }; - - // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. - // Especially useful on the arguments object. Passing an **n** will return - // the rest N values in the array. - _.rest = _.tail = _.drop = function(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); - }; - - // Trim out all falsy values from an array. - _.compact = function(array) { - return _.filter(array, Boolean); - }; - - // Internal implementation of a recursive `flatten` function. - var flatten = function(input, shallow, strict, output) { - output = output || []; - var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { - var value = input[i]; - if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { - // Flatten current level of array or arguments object. - if (shallow) { - var j = 0, len = value.length; - while (j < len) output[idx++] = value[j++]; - } else { - flatten(value, shallow, strict, output); - idx = output.length; - } - } else if (!strict) { - output[idx++] = value; - } - } - return output; - }; - - // Flatten out an array, either recursively (by default), or just one level. - _.flatten = function(array, shallow) { - return flatten(array, shallow, false); - }; - - // Return a version of the array that does not contain the specified value(s). - _.without = restArguments(function(array, otherArrays) { - return _.difference(array, otherArrays); - }); - - // Produce a duplicate-free version of the array. If the array has already - // been sorted, you have the option of using a faster algorithm. - // The faster algorithm will not work with an iteratee if the iteratee - // is not a one-to-one function, so providing an iteratee will disable - // the faster algorithm. - // Aliased as `unique`. - _.uniq = _.unique = function(array, isSorted, iteratee, context) { - if (!_.isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!_.contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!_.contains(result, value)) { - result.push(value); - } - } - return result; - }; - - // Produce an array that contains the union: each distinct element from all of - // the passed-in arrays. - _.union = restArguments(function(arrays) { - return _.uniq(flatten(arrays, true, true)); - }); - - // Produce an array that contains every item shared between all the - // passed-in arrays. - _.intersection = function(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (_.contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!_.contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; - }; - - // Take the difference between one array and a number of other arrays. - // Only the elements present in just the first array will remain. - _.difference = restArguments(function(array, rest) { - rest = flatten(rest, true, true); - return _.filter(array, function(value){ - return !_.contains(rest, value); - }); - }); - - // Complement of _.zip. Unzip accepts an array of arrays and groups - // each array's elements on shared indices. - _.unzip = function(array) { - var length = array && _.max(array, getLength).length || 0; - var result = Array(length); - - for (var index = 0; index < length; index++) { - result[index] = _.pluck(array, index); - } - return result; - }; - - // Zip together multiple lists into a single array -- elements that share - // an index go together. - _.zip = restArguments(_.unzip); - - // Converts lists into objects. Pass either a single array of `[key, value]` - // pairs, or two parallel arrays of the same length -- one of keys, and one of - // the corresponding values. Passing by pairs is the reverse of _.pairs. - _.object = function(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; - } - } - return result; - }; - - // Generator function to create the findIndex and findLastIndex functions. - var createPredicateIndexFinder = function(dir) { - return function(array, predicate, context) { - predicate = cb(predicate, context); - var length = getLength(array); - var index = dir > 0 ? 0 : length - 1; - for (; index >= 0 && index < length; index += dir) { - if (predicate(array[index], index, array)) return index; - } - return -1; - }; - }; - - // Returns the first index on an array-like that passes a predicate test. - _.findIndex = createPredicateIndexFinder(1); - _.findLastIndex = createPredicateIndexFinder(-1); - - // Use a comparator function to figure out the smallest index at which - // an object should be inserted so as to maintain order. Uses binary search. - _.sortedIndex = function(array, obj, iteratee, context) { - iteratee = cb(iteratee, context, 1); - var value = iteratee(obj); - var low = 0, high = getLength(array); - while (low < high) { - var mid = Math.floor((low + high) / 2); - if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; - } - return low; - }; - - // Generator function to create the indexOf and lastIndexOf functions. - var createIndexFinder = function(dir, predicateFind, sortedIndex) { - return function(array, item, idx) { - var i = 0, length = getLength(array); - if (typeof idx == 'number') { - if (dir > 0) { - i = idx >= 0 ? idx : Math.max(idx + length, i); - } else { - length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; - } - } else if (sortedIndex && idx && length) { - idx = sortedIndex(array, item); - return array[idx] === item ? idx : -1; - } - if (item !== item) { - idx = predicateFind(slice.call(array, i, length), _.isNaN); - return idx >= 0 ? idx + i : -1; - } - for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { - if (array[idx] === item) return idx; - } - return -1; - }; - }; - - // Return the position of the first occurrence of an item in an array, - // or -1 if the item is not included in the array. - // If the array is large and already in sort order, pass `true` - // for **isSorted** to use binary search. - _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); - _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); - - // Generate an integer Array containing an arithmetic progression. A port of - // the native Python `range()` function. See - // [the Python documentation](http://docs.python.org/library/functions.html#range). - _.range = function(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } - - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; - } - - return range; - }; - - // Chunk a single array into multiple arrays, each containing `count` or fewer - // items. - _.chunk = function(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); - } - return result; - }; - - // Function (ahem) Functions - // ------------------ - - // Determines whether to execute a function as a constructor - // or a normal function with the provided arguments. - var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { - if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); - var self = baseCreate(sourceFunc.prototype); - var result = sourceFunc.apply(self, args); - if (_.isObject(result)) return result; - return self; - }; - - // Create a function bound to a given object (assigning `this`, and arguments, - // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if - // available. - _.bind = restArguments(function(func, context, args) { - if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); - var bound = restArguments(function(callArgs) { - return executeBound(func, bound, context, this, args.concat(callArgs)); - }); - return bound; - }); - - // Partially apply a function by creating a version that has had some of its - // arguments pre-filled, without changing its dynamic `this` context. _ acts - // as a placeholder by default, allowing any combination of arguments to be - // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument. - _.partial = restArguments(function(func, boundArgs) { - var placeholder = _.partial.placeholder; - var bound = function() { - var position = 0, length = boundArgs.length; - var args = Array(length); - for (var i = 0; i < length; i++) { - args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i]; - } - while (position < arguments.length) args.push(arguments[position++]); - return executeBound(func, bound, this, this, args); - }; - return bound; - }); - - _.partial.placeholder = _; - - // Bind a number of an object's methods to that object. Remaining arguments - // are the method names to be bound. Useful for ensuring that all callbacks - // defined on an object belong to it. - _.bindAll = restArguments(function(obj, keys) { - keys = flatten(keys, false, false); - var index = keys.length; - if (index < 1) throw new Error('bindAll must be passed function names'); - while (index--) { - var key = keys[index]; - obj[key] = _.bind(obj[key], obj); - } - }); - - // Memoize an expensive function by storing its results. - _.memoize = function(func, hasher) { - var memoize = function(key) { - var cache = memoize.cache; - var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); - return cache[address]; - }; - memoize.cache = {}; - return memoize; - }; - - // Delays a function for the given number of milliseconds, and then calls - // it with the arguments supplied. - _.delay = restArguments(function(func, wait, args) { - return setTimeout(function() { - return func.apply(null, args); - }, wait); - }); - - // Defers a function, scheduling it to run after the current call stack has - // cleared. - _.defer = _.partial(_.delay, _, 1); - - // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. Normally, the throttled function will run - // as much as it can, without ever going more than once per `wait` duration; - // but if you'd like to disable the execution on the leading edge, pass - // `{leading: false}`. To disable execution on the trailing edge, ditto. - _.throttle = function(func, wait, options) { - var timeout, context, args, result; - var previous = 0; - if (!options) options = {}; - - var later = function() { - previous = options.leading === false ? 0 : _.now(); - timeout = null; - result = func.apply(context, args); - if (!timeout) context = args = null; - }; - - var throttled = function() { - var now = _.now(); - if (!previous && options.leading === false) previous = now; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0 || remaining > wait) { - if (timeout) { - clearTimeout(timeout); - timeout = null; - } - previous = now; - result = func.apply(context, args); - if (!timeout) context = args = null; - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; - - throttled.cancel = function() { - clearTimeout(timeout); - previous = 0; - timeout = context = args = null; - }; - - return throttled; - }; - - // Returns a function, that, as long as it continues to be invoked, will not - // be triggered. The function will be called after it stops being called for - // N milliseconds. If `immediate` is passed, trigger the function on the - // leading edge, instead of the trailing. - _.debounce = function(func, wait, immediate) { - var timeout, result; - - var later = function(context, args) { - timeout = null; - if (args) result = func.apply(context, args); - }; - - var debounced = restArguments(function(args) { - if (timeout) clearTimeout(timeout); - if (immediate) { - var callNow = !timeout; - timeout = setTimeout(later, wait); - if (callNow) result = func.apply(this, args); - } else { - timeout = _.delay(later, wait, this, args); - } - - return result; - }); - - debounced.cancel = function() { - clearTimeout(timeout); - timeout = null; - }; - - return debounced; - }; - - // Returns the first function passed as an argument to the second, - // allowing you to adjust arguments, run code before and after, and - // conditionally execute the original function. - _.wrap = function(func, wrapper) { - return _.partial(wrapper, func); - }; - - // Returns a negated version of the passed-in predicate. - _.negate = function(predicate) { - return function() { - return !predicate.apply(this, arguments); - }; - }; - - // Returns a function that is the composition of a list of functions, each - // consuming the return value of the function that follows. - _.compose = function() { - var args = arguments; - var start = args.length - 1; - return function() { - var i = start; - var result = args[start].apply(this, arguments); - while (i--) result = args[i].call(this, result); - return result; - }; - }; - - // Returns a function that will only be executed on and after the Nth call. - _.after = function(times, func) { - return function() { - if (--times < 1) { - return func.apply(this, arguments); - } - }; - }; - - // Returns a function that will only be executed up to (but not including) the Nth call. - _.before = function(times, func) { - var memo; - return function() { - if (--times > 0) { - memo = func.apply(this, arguments); - } - if (times <= 1) func = null; - return memo; - }; - }; - - // Returns a function that will be executed at most one time, no matter how - // often you call it. Useful for lazy initialization. - _.once = _.partial(_.before, 2); - - _.restArguments = restArguments; - - // Object Functions - // ---------------- - - // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. - var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); - var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; - - var collectNonEnumProps = function(obj, keys) { - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = _.isFunction(constructor) && constructor.prototype || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { - keys.push(prop); - } - } - }; - - // Retrieve the names of an object's own properties. - // Delegates to **ECMAScript 5**'s native `Object.keys`. - _.keys = function(obj) { - if (!_.isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (_.has(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve all the property names of an object. - _.allKeys = function(obj) { - if (!_.isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve the values of an object's properties. - _.values = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[keys[i]]; - } - return values; - }; - - // Returns the results of applying the iteratee to each element of the object. - // In contrast to _.map it returns an object. - _.mapObject = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = _.keys(obj), - length = keys.length, - results = {}; - for (var index = 0; index < length; index++) { - var currentKey = keys[index]; - results[currentKey] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Convert an object into a list of `[key, value]` pairs. - // The opposite of _.object. - _.pairs = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [keys[i], obj[keys[i]]]; - } - return pairs; - }; - - // Invert the keys and values of an object. The values must be serializable. - _.invert = function(obj) { - var result = {}; - var keys = _.keys(obj); - for (var i = 0, length = keys.length; i < length; i++) { - result[obj[keys[i]]] = keys[i]; - } - return result; - }; - - // Return a sorted list of the function names available on the object. - // Aliased as `methods`. - _.functions = _.methods = function(obj) { - var names = []; - for (var key in obj) { - if (_.isFunction(obj[key])) names.push(key); - } - return names.sort(); - }; - - // An internal function for creating assigner functions. - var createAssigner = function(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; - }; - - // Extend a given object with all the properties in passed-in object(s). - _.extend = createAssigner(_.allKeys); - - // Assigns a given object with all the own properties in the passed-in object(s). - // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - _.extendOwn = _.assign = createAssigner(_.keys); - - // Returns the first key on an object that passes a predicate test. - _.findKey = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = _.keys(obj), key; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - if (predicate(obj[key], key, obj)) return key; - } - }; - - // Internal pick helper function to determine if `obj` has key `key`. - var keyInObj = function(value, key, obj) { - return key in obj; - }; - - // Return a copy of the object only containing the whitelisted properties. - _.pick = restArguments(function(obj, keys) { - var result = {}, iteratee = keys[0]; - if (obj == null) return result; - if (_.isFunction(iteratee)) { - if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); - keys = _.allKeys(obj); - } else { - iteratee = keyInObj; - keys = flatten(keys, false, false); - obj = Object(obj); - } - for (var i = 0, length = keys.length; i < length; i++) { - var key = keys[i]; - var value = obj[key]; - if (iteratee(value, key, obj)) result[key] = value; - } - return result; - }); - - // Return a copy of the object without the blacklisted properties. - _.omit = restArguments(function(obj, keys) { - var iteratee = keys[0], context; - if (_.isFunction(iteratee)) { - iteratee = _.negate(iteratee); - if (keys.length > 1) context = keys[1]; - } else { - keys = _.map(flatten(keys, false, false), String); - iteratee = function(value, key) { - return !_.contains(keys, key); - }; - } - return _.pick(obj, iteratee, context); - }); - - // Fill in a given object with default properties. - _.defaults = createAssigner(_.allKeys, true); - - // Creates an object that inherits from the given prototype object. - // If additional properties are provided then they will be added to the - // created object. - _.create = function(prototype, props) { - var result = baseCreate(prototype); - if (props) _.extendOwn(result, props); - return result; - }; - - // Create a (shallow-cloned) duplicate of an object. - _.clone = function(obj) { - if (!_.isObject(obj)) return obj; - return _.isArray(obj) ? obj.slice() : _.extend({}, obj); - }; - - // Invokes interceptor with the obj, and then returns obj. - // The primary purpose of this method is to "tap into" a method chain, in - // order to perform operations on intermediate results within the chain. - _.tap = function(obj, interceptor) { - interceptor(obj); - return obj; - }; - - // Returns whether an object has a given set of `key:value` pairs. - _.isMatch = function(object, attrs) { - var keys = _.keys(attrs), length = keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; - }; - - - // Internal recursive comparison function for `isEqual`. - var eq, deepEq; - eq = function(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); - }; - - // Internal recursive comparison function for `isEqual`. - deepEq = function(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _) a = a._wrapped; - if (b instanceof _) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - switch (className) { - // Strings, numbers, regular expressions, dates, and booleans are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - } - - var areArrays = className === '[object Array]'; - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && - _.isFunction(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var keys = _.keys(a), key; - length = keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (_.keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = keys[length]; - if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; - }; - - // Perform a deep comparison to check if two objects are equal. - _.isEqual = function(a, b) { - return eq(a, b); - }; - - // Is a given array, string, or object empty? - // An "empty" object has no enumerable own-properties. - _.isEmpty = function(obj) { - if (obj == null) return true; - if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; - return _.keys(obj).length === 0; - }; - - // Is a given value a DOM element? - _.isElement = function(obj) { - return !!(obj && obj.nodeType === 1); - }; - - // Is a given value an array? - // Delegates to ECMA5's native Array.isArray - _.isArray = nativeIsArray || function(obj) { - return toString.call(obj) === '[object Array]'; - }; - - // Is a given variable an object? - _.isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet. - _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) { - _['is' + name] = function(obj) { - return toString.call(obj) === '[object ' + name + ']'; - }; - }); - - // Define a fallback version of the method in browsers (ahem, IE < 9), where - // there isn't any inspectable "Arguments" type. - if (!_.isArguments(arguments)) { - _.isArguments = function(obj) { - return _.has(obj, 'callee'); - }; - } - - // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, - // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). - var nodelist = root.document && root.document.childNodes; - if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') { - _.isFunction = function(obj) { - return typeof obj == 'function' || false; - }; - } - - // Is a given object a finite number? - _.isFinite = function(obj) { - return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj)); - }; - - // Is the given value `NaN`? - _.isNaN = function(obj) { - return _.isNumber(obj) && isNaN(obj); - }; - - // Is a given value a boolean? - _.isBoolean = function(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; - }; - - // Is a given value equal to null? - _.isNull = function(obj) { - return obj === null; - }; - - // Is a given variable undefined? - _.isUndefined = function(obj) { - return obj === void 0; - }; - - // Shortcut function for checking if an object has a given property directly - // on itself (in other words, not on a prototype). - _.has = function(obj, path) { - if (!_.isArray(path)) { - return obj != null && hasOwnProperty.call(obj, path); - } - var length = path.length; - for (var i = 0; i < length; i++) { - var key = path[i]; - if (obj == null || !hasOwnProperty.call(obj, key)) { - return false; - } - obj = obj[key]; - } - return !!length; - }; - - // Utility Functions - // ----------------- - - // Run Underscore.js in *noConflict* mode, returning the `_` variable to its - // previous owner. Returns a reference to the Underscore object. - _.noConflict = function() { - root._ = previousUnderscore; - return this; - }; - - // Keep the identity function around for default iteratees. - _.identity = function(value) { - return value; - }; - - // Predicate-generating functions. Often useful outside of Underscore. - _.constant = function(value) { - return function() { - return value; - }; - }; - - _.noop = function(){}; - - // Creates a function that, when passed an object, will traverse that object’s - // properties down the given `path`, specified as an array of keys or indexes. - _.property = function(path) { - if (!_.isArray(path)) { - return shallowProperty(path); - } - return function(obj) { - return deepGet(obj, path); - }; - }; - - // Generates a function for a given object that returns a given property. - _.propertyOf = function(obj) { - if (obj == null) { - return function(){}; - } - return function(path) { - return !_.isArray(path) ? obj[path] : deepGet(obj, path); - }; - }; - - // Returns a predicate for checking whether an object has a given set of - // `key:value` pairs. - _.matcher = _.matches = function(attrs) { - attrs = _.extendOwn({}, attrs); - return function(obj) { - return _.isMatch(obj, attrs); - }; - }; - - // Run a function **n** times. - _.times = function(n, iteratee, context) { - var accum = Array(Math.max(0, n)); - iteratee = optimizeCb(iteratee, context, 1); - for (var i = 0; i < n; i++) accum[i] = iteratee(i); - return accum; - }; - - // Return a random integer between min and max (inclusive). - _.random = function(min, max) { - if (max == null) { - max = min; - min = 0; - } - return min + Math.floor(Math.random() * (max - min + 1)); - }; - - // A (possibly faster) way to get the current timestamp as an integer. - _.now = Date.now || function() { - return new Date().getTime(); - }; - - // List of HTML entities for escaping. - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - var unescapeMap = _.invert(escapeMap); - - // Functions for escaping and unescaping strings to/from HTML interpolation. - var createEscaper = function(map) { - var escaper = function(match) { - return map[match]; - }; - // Regexes for identifying a key that needs to be escaped. - var source = '(?:' + _.keys(map).join('|') + ')'; - var testRegexp = RegExp(source); - var replaceRegexp = RegExp(source, 'g'); - return function(string) { - string = string == null ? '' : '' + string; - return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; - }; - }; - _.escape = createEscaper(escapeMap); - _.unescape = createEscaper(unescapeMap); - - // Traverses the children of `obj` along `path`. If a child is a function, it - // is invoked with its parent as context. Returns the value of the final - // child, or `fallback` if any child is undefined. - _.result = function(obj, path, fallback) { - if (!_.isArray(path)) path = [path]; - var length = path.length; - if (!length) { - return _.isFunction(fallback) ? fallback.call(obj) : fallback; - } - for (var i = 0; i < length; i++) { - var prop = obj == null ? void 0 : obj[path[i]]; - if (prop === void 0) { - prop = fallback; - i = length; // Ensure we don't continue iterating. - } - obj = _.isFunction(prop) ? prop.call(obj) : prop; - } - return obj; - }; - - // Generate a unique integer id (unique within the entire client session). - // Useful for temporary DOM ids. - var idCounter = 0; - _.uniqueId = function(prefix) { - var id = ++idCounter + ''; - return prefix ? prefix + id : id; - }; - - // By default, Underscore uses ERB-style template delimiters, change the - // following template settings to use alternative delimiters. - _.templateSettings = { - evaluate: /<%([\s\S]+?)%>/g, - interpolate: /<%=([\s\S]+?)%>/g, - escape: /<%-([\s\S]+?)%>/g - }; - - // When customizing `templateSettings`, if you don't want to define an - // interpolation, evaluation or escaping regex, we need one that is - // guaranteed not to match. - var noMatch = /(.)^/; - - // Certain characters need to be escaped so that they can be put into a - // string literal. - var escapes = { - "'": "'", - '\\': '\\', - '\r': 'r', - '\n': 'n', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; - - var escapeChar = function(match) { - return '\\' + escapes[match]; - }; - - // JavaScript micro-templating, similar to John Resig's implementation. - // Underscore templating handles arbitrary delimiters, preserves whitespace, - // and correctly escapes quotes within interpolated code. - // NB: `oldSettings` only exists for backwards compatibility. - _.template = function(text, settings, oldSettings) { - if (!settings && oldSettings) settings = oldSettings; - settings = _.defaults({}, settings, _.templateSettings); - - // Combine delimiters into one regular expression via alternation. - var matcher = RegExp([ - (settings.escape || noMatch).source, - (settings.interpolate || noMatch).source, - (settings.evaluate || noMatch).source - ].join('|') + '|$', 'g'); - - // Compile the template source, escaping string literals appropriately. - var index = 0; - var source = "__p+='"; - text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { - source += text.slice(index, offset).replace(escapeRegExp, escapeChar); - index = offset + match.length; - - if (escape) { - source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; - } else if (interpolate) { - source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; - } else if (evaluate) { - source += "';\n" + evaluate + "\n__p+='"; - } - - // Adobe VMs need the match returned to produce the correct offset. - return match; - }); - source += "';\n"; - - // If a variable is not specified, place data values in local scope. - if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; - - source = "var __t,__p='',__j=Array.prototype.join," + - "print=function(){__p+=__j.call(arguments,'');};\n" + - source + 'return __p;\n'; - - var render; - try { - render = new Function(settings.variable || 'obj', '_', source); - } catch (e) { - e.source = source; - throw e; - } - - var template = function(data) { - return render.call(this, data, _); - }; - - // Provide the compiled source as a convenience for precompilation. - var argument = settings.variable || 'obj'; - template.source = 'function(' + argument + '){\n' + source + '}'; - - return template; - }; - - // Add a "chain" function. Start chaining a wrapped Underscore object. - _.chain = function(obj) { - var instance = _(obj); - instance._chain = true; - return instance; - }; - - // OOP - // --------------- - // If Underscore is called as a function, it returns a wrapped object that - // can be used OO-style. This wrapper holds altered versions of all the - // underscore functions. Wrapped objects may be chained. - - // Helper function to continue chaining intermediate results. - var chainResult = function(instance, obj) { - return instance._chain ? _(obj).chain() : obj; - }; - - // Add your own custom functions to the Underscore object. - _.mixin = function(obj) { - _.each(_.functions(obj), function(name) { - var func = _[name] = obj[name]; - _.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_, args)); - }; - }); - return _; - }; - - // Add all of the Underscore functions to the wrapper object. - _.mixin(_); - - // Add all mutator Array functions to the wrapper. - _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - var obj = this._wrapped; - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; - return chainResult(this, obj); - }; - }); - - // Add all accessor Array functions to the wrapper. - _.each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - return chainResult(this, method.apply(this._wrapped, arguments)); - }; - }); - - // Extracts the result from a wrapped and chained object. - _.prototype.value = function() { - return this._wrapped; - }; - - // Provide unwrapping proxy for some methods used in engine operations - // such as arithmetic and JSON stringification. - _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; - - _.prototype.toString = function() { - return String(this._wrapped); - }; - - // AMD registration happens at the end for compatibility with AMD loaders - // that may not enforce next-turn semantics on modules. Even though general - // practice for AMD registration is to be anonymous, underscore registers - // as a named module because, like jQuery, it is a base library that is - // popular enough to be bundled in a third party lib, but not be part of - // an AMD load request. Those cases could generate an error when an - // anonymous define() is called outside of a loader request. - if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { - return _; - }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } -}()); - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7), __webpack_require__(64)(module))) - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getUnitFromValue = exports.normalizeFloat = exports.shallowDiff = exports.getElement = exports.camelCase = exports.getModel = exports.matches = exports.upFirst = exports.hasDnd = exports.off = exports.on = undefined; - -var _underscore = __webpack_require__(1); - -var elProt = window.Element.prototype; -var matches = elProt.matches || elProt.webkitMatchesSelector || elProt.mozMatchesSelector || elProt.msMatchesSelector; - -/** - * Returns shallow diff between 2 objects - * @param {Object} objOrig - * @param {Objec} objNew - * @return {Object} - * @example - * var a = {foo: 'bar', baz: 1, faz: 'sop'}; - * var b = {foo: 'bar', baz: 2, bar: ''}; - * shallowDiff(a, b); - * // -> {baz: 2, faz: null, bar: ''}; - */ -var shallowDiff = function shallowDiff(objOrig, objNew) { - var result = {}; - var keysNew = (0, _underscore.keys)(objNew); - - for (var prop in objOrig) { - if (objOrig.hasOwnProperty(prop)) { - var origValue = objOrig[prop]; - var newValue = objNew[prop]; - - if (keysNew.indexOf(prop) >= 0) { - if (origValue !== newValue) { - result[prop] = newValue; - } - } else { - result[prop] = null; - } - } - } - - for (var _prop in objNew) { - if (objNew.hasOwnProperty(_prop)) { - if ((0, _underscore.isUndefined)(objOrig[_prop])) { - result[_prop] = objNew[_prop]; - } - } - } - - return result; -}; - -var on = function on(el, ev, fn) { - ev = ev.split(/\s+/); - el = el instanceof Array ? el : [el]; - - var _loop = function _loop(i) { - el.forEach(function (elem) { - return elem.addEventListener(ev[i], fn); - }); - }; - - for (var i = 0; i < ev.length; ++i) { - _loop(i); - } -}; - -var off = function off(el, ev, fn) { - ev = ev.split(/\s+/); - el = el instanceof Array ? el : [el]; - - var _loop2 = function _loop2(i) { - el.forEach(function (elem) { - return elem.removeEventListener(ev[i], fn); - }); - }; - - for (var i = 0; i < ev.length; ++i) { - _loop2(i); - } -}; - -var getUnitFromValue = function getUnitFromValue(value) { - return value.replace(parseFloat(value), ''); -}; - -var upFirst = function upFirst(value) { - return value[0].toUpperCase() + value.toLowerCase().slice(1); -}; - -var camelCase = function camelCase(value) { - var values = value.split('-'); - return values[0].toLowerCase() + values.slice(1).map(upFirst); -}; - -var normalizeFloat = function normalizeFloat(value) { - var step = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; - var valueDef = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - - var stepDecimals = 0; - if (isNaN(value)) return valueDef; - value = parseFloat(value); - - if (Math.floor(value) !== value) { - var side = step.toString().split('.')[1]; - stepDecimals = side ? side.length : 0; - } - - return stepDecimals ? parseFloat(value.toFixed(stepDecimals)) : value; -}; - -var hasDnd = function hasDnd(em) { - return 'draggable' in document.createElement('i') && (em ? em.get('Config').nativeDnD : 1); -}; - -/** - * Ensure to fetch the element from the input argument - * @param {HTMLElement|Component} el Component or HTML element - * @return {HTMLElement} - */ -var getElement = function getElement(el) { - if ((0, _underscore.isElement)(el)) { - return el; - } else if (el && el.getEl) { - return el.getEl(); - } -}; - -/** - * Ensure to fetch the model from the input argument - * @param {HTMLElement|Component} el Component or HTML element - * @return {Component} - */ -var getModel = function getModel(el, $) { - var model = el; - (0, _underscore.isElement)(el) && (model = $(el).data('model')); - return model; -}; - -exports.on = on; -exports.off = off; -exports.hasDnd = hasDnd; -exports.upFirst = upFirst; -exports.matches = matches; -exports.getModel = getModel; -exports.camelCase = camelCase; -exports.getElement = getElement; -exports.shallowDiff = shallowDiff; -exports.normalizeFloat = normalizeFloat; -exports.getUnitFromValue = getUnitFromValue; - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -var _underscore = __webpack_require__(1); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var ComponentsView = __webpack_require__(52); - -module.exports = _backbone2.default.View.extend({ - className: function className() { - return this.getClasses(); - }, - tagName: function tagName() { - return this.model.get('tagName'); - }, - initialize: function initialize() { - var opt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var model = this.model; - var config = opt.config || {}; - this.opts = opt; - this.config = config; - this.em = config.em || ''; - this.pfx = config.stylePrefix || ''; - this.ppfx = config.pStylePrefix || ''; - this.attr = model.get('attributes'); - this.classe = this.attr.class || []; - var $el = this.$el; - var classes = model.get('classes'); - this.listenTo(model, 'change:style', this.updateStyle); - this.listenTo(model, 'change:attributes', this.updateAttributes); - this.listenTo(model, 'change:highlightable', this.updateHighlight); - this.listenTo(model, 'change:status', this.updateStatus); - this.listenTo(model, 'change:state', this.updateState); - this.listenTo(model, 'change:script', this.render); - this.listenTo(model, 'change:content', this.updateContent); - this.listenTo(model, 'change', this.handleChange); - this.listenTo(classes, 'add remove change', this.updateClasses); - $el.data('model', model); - $el.data('collection', model.get('components')); - model.view = this; - classes.length && this.importClasses(); - this.init(); - }, - - - /** - * Initialize callback - */ - init: function init() {}, - - - /** - * Handle any property change - * @private - */ - handleChange: function handleChange() { - var model = this.model; - model.emitUpdate(); - - for (var prop in model.changed) { - model.emitUpdate(prop); - } - }, - - - /** - * Import, if possible, classes inside main container - * @private - * */ - importClasses: function importClasses() { - var clm = this.config.em.get('SelectorManager'); - - if (clm) { - this.model.get('classes').each(function (m) { - clm.add(m.get('name')); - }); - } - }, - - - /** - * Fires on state update. If the state is not empty will add a helper class - * @param {Event} e - * @private - * */ - updateState: function updateState(e) { - var cl = 'hc-state'; - var state = this.model.get('state'); - - if (state) { - this.$el.addClass(cl); - } else { - this.$el.removeClass(cl); - } - }, - - - /** - * Update item on status change - * @param {Event} e - * @private - * */ - updateStatus: function updateStatus() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var em = this.em; - var el = this.el; - var status = this.model.get('status'); - var pfx = this.pfx; - var ppfx = this.ppfx; - var selectedCls = pfx + 'selected'; - var selectedParentCls = selectedCls + '-parent'; - var freezedCls = ppfx + 'freezed'; - var hoveredCls = ppfx + 'hovered'; - var toRemove = [selectedCls, selectedParentCls, freezedCls, hoveredCls]; - this.$el.removeClass(toRemove.join(' ')); - var actualCls = el.getAttribute('class') || ''; - var cls = ''; - - switch (status) { - case 'selected': - cls = actualCls + ' ' + selectedCls; - break; - case 'selected-parent': - cls = actualCls + ' ' + selectedParentCls; - break; - case 'freezed': - cls = actualCls + ' ' + freezedCls; - break; - case 'freezed-selected': - cls = actualCls + ' ' + freezedCls + ' ' + selectedCls; - break; - case 'hovered': - cls = !opts.avoidHover ? actualCls + ' ' + hoveredCls : ''; - break; - } - - cls = cls.trim(); - cls && el.setAttribute('class', cls); - }, - - - /** - * Update highlight attribute - * @private - * */ - updateHighlight: function updateHighlight() { - var hl = this.model.get('highlightable'); - this.setAttribute('data-highlightable', hl ? 1 : ''); - }, - - - /** - * Update style attribute - * @private - * */ - updateStyle: function updateStyle() { - var em = this.em; - var model = this.model; - - if (em && em.get('avoidInlineStyle')) { - this.el.id = model.getId(); - var style = model.getStyle(); - !(0, _underscore.isEmpty)(style) && model.setStyle(style); - } else { - this.setAttribute('style', model.styleToString()); - } - }, - - - /** - * Update classe attribute - * @private - * */ - updateClasses: function updateClasses() { - var str = this.model.get('classes').pluck('name').join(' '); - this.setAttribute('class', str); - - // Regenerate status class - this.updateStatus(); - }, - - - /** - * Update single attribute - * @param {[type]} name [description] - * @param {[type]} value [description] - */ - setAttribute: function setAttribute(name, value) { - var el = this.$el; - value ? el.attr(name, value) : el.removeAttr(name); - }, - - - /** - * Get classes from attributes. - * This method is called before initialize - * - * @return {Array}|null - * @private - * */ - getClasses: function getClasses() { - var attr = this.model.get('attributes'), - classes = attr['class'] || []; - classes = (0, _underscore.isArray)(classes) ? classes : [classes]; - - if (classes.length) { - return classes.join(' '); - } else { - return null; - } - }, - - - /** - * Update attributes - * @private - * */ - updateAttributes: function updateAttributes() { - var model = this.model; - var attrs = { 'data-gjs-type': model.get('type') || 'default' }; - var attr = model.get('attributes'); - var src = model.get('src'); - - for (var key in attr) { - attrs[key] = attr[key]; - } - - src && (attrs.src = src); - this.$el.attr(attrs); - this.updateHighlight(); - this.updateStyle(); - }, - - - /** - * Update component content - * @private - * */ - updateContent: function updateContent() { - this.getChildrenContainer().innerHTML = this.model.get('content'); - }, - - - /** - * Prevent default helper - * @param {Event} e - * @private - */ - prevDef: function prevDef(e) { - e.preventDefault(); - }, - - - /** - * Render component's script - * @private - */ - updateScript: function updateScript() { - if (!this.model.get('script')) { - return; - } - - var em = this.em; - if (em) { - var canvas = em.get('Canvas'); - canvas.getCanvasView().updateScript(this); - } - }, - - - /** - * Return children container - * Differently from a simple component where children container is the - * component itself - * - * - * - * You could have the children container more deeper - * - *
    - *
    - *
    - *
    - * - *
    - *
    - *
    - * @return HTMLElement - * @private - */ - getChildrenContainer: function getChildrenContainer() { - var container = this.el; - - if (typeof this.getChildrenSelector == 'function') { - container = this.el.querySelector(this.getChildrenSelector()); - } else if (typeof this.getTemplate == 'function') { - // Need to find deepest first child - } - - return container; - }, - - - /** - * Render children components - * @private - */ - renderChildren: function renderChildren() { - var container = this.getChildrenContainer(); - var view = new ComponentsView({ - collection: this.model.get('components'), - config: this.config, - componentTypes: this.opts.componentTypes - }); - - view.render(container); - this.childrenView = view; - var childNodes = Array.prototype.slice.call(view.el.childNodes); - - for (var i = 0, len = childNodes.length; i < len; i++) { - container.appendChild(childNodes.shift()); - } - - // If the children container is not the same as the component - // (so likely fetched with getChildrenSelector()) is necessary - // to disable pointer-events for all nested components as they - // might prevent the component to be selected - if (container !== this.el) { - var disableNode = function disableNode(el) { - var children = Array.prototype.slice.call(el.children); - children.forEach(function (el) { - el.style['pointer-events'] = 'none'; - if (container !== el) { - disableNode(el); - } - }); - }; - disableNode(this.el); - } - }, - renderAttributes: function renderAttributes() { - this.updateAttributes(); - this.updateClasses(); - }, - render: function render() { - this.renderAttributes(); - this.updateContent(); - this.renderChildren(); - this.updateScript(); - this.onRender(); - return this; - }, - onRender: function onRender() {} -}); - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _underscore = __webpack_require__(1); - -var _mixins = __webpack_require__(2); - -var _Styleable = __webpack_require__(48); - -var _Styleable2 = _interopRequireDefault(_Styleable); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Backbone = __webpack_require__(0); -var Components = __webpack_require__(51); -var Selector = __webpack_require__(8); -var Selectors = __webpack_require__(11); -var Traits = __webpack_require__(154); -var componentList = {}; -var componentIndex = 0; - -var escapeRegExp = function escapeRegExp(str) { - return str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'); -}; - -var Component = Backbone.Model.extend(_Styleable2.default).extend({ - defaults: { - // HTML tag of the component - tagName: 'div', - - // Component type, eg. 'text', 'image', 'video', etc. - type: '', - - // Name of the component. Will be used, for example, in layers and badges - name: '', - - // True if the component is removable from the canvas - removable: true, - - // Indicates if it's possible to drag the component inside others - // Tip: Indicate an array of selectors where it could be dropped inside - draggable: true, - - // Indicates if it's possible to drop other components inside - // Tip: Indicate an array of selectors which could be dropped inside - droppable: true, - - // Set false if don't want to see the badge (with the name) over the component - badgable: true, - - // True if it's possible to style it - // Tip: - // Indicate an array of CSS properties which is possible to style, eg. ['color', 'width'] - // All other properties will be hidden from the style manager - stylable: true, - - // Indicate an array of style properties to show up which has been marked as `toRequire` - 'stylable-require': '', - - // Indicate an array of style properties which should be hidden from the style manager - unstylable: '', - - // Highlightable with 'dotted' style if true - highlightable: true, - - // True if it's possible to clone the component - copyable: true, - - // Indicates if it's possible to resize the component (at the moment implemented only on Image Components) - // It's also possible to pass an object as options for the Resizer - resizable: false, - - // Allow to edit the content of the component (used on Text components) - editable: false, - - // Hide the component inside Layers - layerable: true, - - // Allow component to be selected when clicked - selectable: true, - - // Shows a highlight outline when hovering on the element if true - hoverable: true, - - // This property is used by the HTML exporter as void elements do not - // have closing tag, eg.
    ,
    , etc. - void: false, - - // Indicates if the component is in some CSS state like ':hover', ':active', etc. - state: '', - - // State, eg. 'selected' - status: '', - - // Content of the component (not escaped) which will be appended before children rendering - content: '', - - // Component icon, this string will be inserted before the name, eg. '' - icon: '', - - // Component related style - style: '', - - // Key-value object of the component's attributes - attributes: '', - - // Array of classes - classes: '', - - // Component's javascript - script: '', - - // Traits - traits: ['id', 'title'], - - // Indicates an array of properties which will be inhereted by - // all NEW appended children - // - // If you create a model likes this - // removable: false, - // draggable: false, - // propagate: ['removable', 'draggable'] - // When you append some new component inside, the new added model - // will get the exact same properties indicated in `propagate` array - // (as the `propagate` property itself) - // - propagate: '', - - /** - * Set an array of items to show up inside the toolbar (eg. move, clone, delete) - * when the component is selected - * toolbar: [{ - * attributes: {class: 'fa fa-arrows'}, - * command: 'tlb-move', - * },{ - * attributes: {class: 'fa fa-clone'}, - * command: 'tlb-clone', - * }] - */ - toolbar: null - }, - - initialize: function initialize() { - var _this = this; - - var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var em = opt.em; - - // Propagate properties from parent if indicated - var parent = this.parent(); - var parentAttr = parent && parent.attributes; - - if (parentAttr && parentAttr.propagate) { - var newAttr = {}; - var toPropagate = parentAttr.propagate; - toPropagate.forEach(function (prop) { - return newAttr[prop] = parent.get(prop); - }); - newAttr.propagate = toPropagate; - newAttr = _extends({}, newAttr, props); - this.set(newAttr); - } - - var propagate = this.get('propagate'); - propagate && this.set('propagate', (0, _underscore.isArray)(propagate) ? propagate : [propagate]); - - // Check void elements - if (opt && opt.config && opt.config.voidElements.indexOf(this.get('tagName')) >= 0) { - this.set('void', true); - } - - opt.em = em; - this.opt = opt; - this.em = em; - this.config = opt.config || {}; - this.ccid = Component.createId(this); - this.set('attributes', this.get('attributes') || {}); - this.listenTo(this, 'change:script', this.scriptUpdated); - this.listenTo(this, 'change:traits', this.traitsUpdated); - this.listenTo(this, 'change:tagName', this.tagUpdated); - this.listenTo(this, 'change:attributes', this.attrUpdated); - this.initClasses(); - this.loadTraits(); - this.initComponents(); - this.initToolbar(); - this.set('status', ''); - - // Register global updates for collection properties - ['classes', 'traits'].forEach(function (name) { - return _this.listenTo(_this.get(name), 'add remove change', function () { - return _this.emitUpdate(name); - }); - }); - this.init(); - }, - - - /** - * Check component's type - * @param {string} type Component type - * @return {Boolean} - * @example - * model.is('image') - * // -> false - */ - is: function is(type) { - return !!(this.get('type') == type); - }, - - - /** - * Find inner models by query string - * ATTENTION: this method works only with alredy rendered component - * @param {string} query Query string - * @return {Array} Array of models - * @example - * model.find('div > .class'); - * // -> [Component, Component, ...] - */ - find: function find(query) { - var result = []; - - this.view.$el.find(query).each(function (el, i, $els) { - var $el = $els.eq(i); - var model = $el.data('model'); - model && result.push(model); - }); - - return result; - }, - - - /** - * Find closest model by query string - * ATTENTION: this method works only with alredy rendered component - * @param {string} query Query string - * @return {Component} - * @example - * model.closest('div'); - */ - closest: function closest(query) { - var result = this.view.$el.closest(query); - return result.length && result.data('model'); - }, - - - /** - * Once the tag is updated I have to remove the node and replace it - */ - tagUpdated: function tagUpdated() { - var coll = this.collection; - var at = coll.indexOf(this); - coll.remove(this); - coll.add(this, { at: at }); - }, - - - /** - * Replace a component with another one - * @param {String|Component} el Component or HTML string - * @return {Array|Component} New added component/s - * @private - */ - replaceWith: function replaceWith(el) { - var coll = this.collection; - var at = coll.indexOf(this); - coll.remove(this); - return coll.add(el, { at: at }); - }, - - - /** - * Emit changes for each updated attribute - */ - attrUpdated: function attrUpdated() { - var _this2 = this; - - var attrPrev = _extends({}, this.previous('attributes')); - var attrCurrent = _extends({}, this.get('attributes')); - var diff = (0, _mixins.shallowDiff)(attrPrev, attrCurrent); - (0, _underscore.keys)(diff).forEach(function (pr) { - return _this2.trigger('change:attributes:' + pr); - }); - }, - - - /** - * Update attributes of the model - * @param {Object} attrs Key value attributes - * @example - * model.setAttributes({id: 'test', 'data-key': 'value'}); - */ - setAttributes: function setAttributes(attrs) { - attrs = _extends({}, attrs); - - // Handle classes - var classes = attrs.class; - classes && this.setClass(classes); - delete attrs.class; - - // Handle style - var style = attrs.style; - style && this.setStyle(style); - delete attrs.style; - - this.set('attributes', attrs); - }, - - - /** - * Add attributes to the model - * @param {Object} attrs Key value attributes - * @example - * model.addAttributes({id: 'test'}); - */ - addAttributes: function addAttributes(attrs) { - var newAttrs = _extends({}, this.getAttributes(), attrs); - this.setAttributes(newAttrs); - }, - getStyle: function getStyle() { - var em = this.em; - - if (em && em.getConfig('avoidInlineStyle')) { - var state = this.get('state'); - var cc = em.get('CssComposer'); - var rule = cc.getIdRule(this.getId(), { state: state }); - this.rule = rule; - - if (rule) { - return rule.getStyle(); - } - } - - return _Styleable2.default.getStyle.call(this); - }, - setStyle: function setStyle() { - var _this3 = this; - - var prop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var em = this.em; - - if (em && em.getConfig('avoidInlineStyle')) { - prop = (0, _underscore.isString)(prop) ? this.parseStyle(prop) : prop; - prop = _extends({}, prop, this.get('style')); - var state = this.get('state'); - var cc = em.get('CssComposer'); - var propOrig = this.getStyle(); - this.rule = cc.setIdRule(this.getId(), prop, _extends({}, opts, { state: state })); - var diff = (0, _mixins.shallowDiff)(propOrig, prop); - this.set('style', {}, { silent: 1 }); - (0, _underscore.keys)(diff).forEach(function (pr) { - return _this3.trigger('change:style:' + pr); - }); - } else { - prop = _Styleable2.default.setStyle.apply(this, arguments); - } - - return prop; - }, - - - /** - * Return attributes - * @return {Object} - */ - getAttributes: function getAttributes() { - var em = this.em; - - var classes = []; - var attributes = _extends({}, this.get('attributes')); - var sm = em && em.get('SelectorManager'); - var id = this.getId(); - - // Add classes - this.get('classes').each(function (cls) { - return classes.push(cls.get('name')); - }); - classes.length && (attributes.class = classes.join(' ')); - - // If the rule is setted we need an ID attached to the component - if (!(0, _underscore.has)(attributes, 'id') && sm && sm.get(id, sm.Selector.TYPE_ID)) { - attributes.id = this.getId(); - } - - return attributes; - }, - - - /** - * Add classes - * @param {Array|string} classes Array or string of classes - * @return {Array} Array of added selectors - * @example - * model.addClass('class1'); - * model.addClass('class1 class2'); - * model.addClass(['class1', 'class2']); - * // -> [SelectorObject, ...] - */ - addClass: function addClass(classes) { - var added = this.em.get('SelectorManager').addClass(classes); - return this.get('classes').add(added); - }, - - - /** - * Set classes (resets current collection) - * @param {Array|string} classes Array or string of classes - * @return {Array} Array of added selectors - * @example - * model.setClass('class1'); - * model.setClass('class1 class2'); - * model.setClass(['class1', 'class2']); - * // -> [SelectorObject, ...] - */ - setClass: function setClass(classes) { - this.get('classes').reset(); - return this.addClass(classes); - }, - - - /** - * Remove classes - * @param {Array|string} classes Array or string of classes - * @return {Array} Array of removed selectors - * @example - * model.removeClass('class1'); - * model.removeClass('class1 class2'); - * model.removeClass(['class1', 'class2']); - * // -> [SelectorObject, ...] - */ - removeClass: function removeClass(classes) { - var removed = []; - classes = (0, _underscore.isArray)(classes) ? classes : [classes]; - var selectors = this.get('classes'); - var type = Selector.TYPE_CLASS; - - classes.forEach(function (classe) { - var classes = classe.split(' '); - classes.forEach(function (name) { - var selector = selectors.where({ name: name, type: type })[0]; - selector && removed.push(selectors.remove(selector)); - }); - }); - - return removed; - }, - initClasses: function initClasses() { - var classes = this.normalizeClasses(this.get('classes') || []); - this.set('classes', new Selectors(classes)); - return this; - }, - initComponents: function initComponents() { - // Have to add components after the init, otherwise the parent - // is not visible - var comps = new Components(null, this.opt); - comps.parent = this; - !this.opt.avoidChildren && comps.reset(this.get('components')); - this.set('components', comps); - return this; - }, - - - /** - * Initialize callback - */ - init: function init() {}, - - - /** - * Add new component children - * @param {Component|string} components Component to add - * @param {Object} [opts={}] Options, same as in `model.add()`(from backbone) - * @return {Array} Array of appended components - * @example - * someModel.get('components').length // -> 0 - * const videoComponent = someModel.append('
    ')[0]; - * // This will add 2 components (`video` and `div`) to your `someModel` - * someModel.get('components').length // -> 2 - * // You can pass components directly - * otherModel.append(otherModel2); - * otherModel.append([otherModel3, otherModel4]); - */ - append: function append(components) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var result = this.components().add(components, opts); - return (0, _underscore.isArray)(result) ? result : [result]; - }, - - - /** - * Set new collection if `components` are provided, otherwise the - * current collection is returned - * @param {Component|string} [components] Components to set - * @return {Collection|undefined} - * @example - * // Get current collection - * const collection = model.components(); - * // Set new collection - * model.components('
    '); - */ - components: function components(_components) { - var coll = this.get('components'); - - if ((0, _underscore.isUndefined)(_components)) { - return coll; - } else { - coll.reset(); - _components && this.append(_components); - } - }, - - - /** - * Get parent model - * @return {Component} - */ - parent: function parent() { - var coll = this.collection; - return coll && coll.parent; - }, - - - /** - * Script updated - */ - scriptUpdated: function scriptUpdated() { - this.set('scriptUpdated', 1); - }, - - - /** - * Once traits are updated I have to populates model's attributes - */ - traitsUpdated: function traitsUpdated() { - var found = 0; - var attrs = _extends({}, this.get('attributes')); - var traits = this.get('traits'); - - if (!(traits instanceof Traits)) { - this.loadTraits(); - return; - } - - traits.each(function (trait) { - found = 1; - if (!trait.get('changeProp')) { - var name = trait.get('name'); - var value = trait.getInitValue(); - if (name && value) { - attrs[name] = value; - } - } - }); - - found && this.set('attributes', attrs); - }, - - - /** - * Init toolbar - */ - initToolbar: function initToolbar() { - var model = this; - if (!model.get('toolbar')) { - var tb = []; - if (model.collection) { - tb.push({ - attributes: { class: 'fa fa-arrow-up' }, - command: 'select-parent' - }); - } - if (model.get('draggable')) { - tb.push({ - attributes: { class: 'fa fa-arrows', draggable: true }, - //events: hasDnd(this.em) ? { dragstart: 'execCommand' } : '', - command: 'tlb-move' - }); - } - if (model.get('copyable')) { - tb.push({ - attributes: { class: 'fa fa-clone' }, - command: 'tlb-clone' - }); - } - if (model.get('removable')) { - tb.push({ - attributes: { class: 'fa fa-trash-o' }, - command: 'tlb-delete' - }); - } - model.set('toolbar', tb); - } - }, - - - /** - * Load traits - * @param {Array} traits - * @private - */ - loadTraits: function loadTraits(traits) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var trt = new Traits([], this.opt); - trt.setTarget(this); - traits = traits || this.get('traits'); - - if (traits.length) { - trt.add(traits); - } - - this.set('traits', trt, opts); - return this; - }, - - - /** - * Normalize input classes from array to array of objects - * @param {Array} arr - * @return {Array} - * @private - */ - normalizeClasses: function normalizeClasses(arr) { - var res = []; - var em = this.em; - - if (!em) return; - - var clm = em.get('SelectorManager'); - if (!clm) return; - - arr.forEach(function (val) { - var name = ''; - - if (typeof val === 'string') name = val;else name = val.name; - - var model = clm.add(name); - res.push(model); - }); - return res; - }, - - - /** - * Override original clone method - * @private - */ - clone: function clone() { - var em = this.em; - var style = this.getStyle(); - var attr = _extends({}, this.attributes); - var opts = _extends({}, this.opt); - attr.attributes = _extends({}, attr.attributes); - delete attr.attributes.id; - attr.components = []; - attr.classes = []; - attr.traits = []; - - this.get('components').each(function (md, i) { - attr.components[i] = md.clone(); - }); - this.get('traits').each(function (md, i) { - attr.traits[i] = md.clone(); - }); - this.get('classes').each(function (md, i) { - attr.classes[i] = md.get('name'); - }); - - attr.status = ''; - attr.view = ''; - opts.collection = null; - - if (em && em.getConfig('avoidInlineStyle') && !(0, _underscore.isEmpty)(style)) { - attr.style = style; - } - - return new this.constructor(attr, opts); - }, - - - /** - * Get the name of the component - * @return {string} - * */ - getName: function getName() { - var customName = this.get('name') || this.get('custom-name'); - var tag = this.get('tagName'); - tag = tag == 'div' ? 'box' : tag; - var name = this.get('type') || tag; - name = name.charAt(0).toUpperCase() + name.slice(1); - return customName || name; - }, - - - /** - * Get the icon string - * @return {string} - */ - getIcon: function getIcon() { - var icon = this.get('icon'); - return icon ? icon + ' ' : ''; - }, - - - /** - * Return HTML string of the component - * @param {Object} opts Options - * @return {string} HTML string - * @private - */ - toHTML: function toHTML() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var model = this; - var attrs = []; - var classes = []; - var tag = model.get('tagName'); - var sTag = model.get('void'); - var customAttr = opts.attributes; - var attributes = this.getAttrToHTML(); - - // Get custom attributes if requested - if (customAttr) { - if ((0, _underscore.isFunction)(customAttr)) { - attributes = customAttr(model, attributes) || {}; - } else if ((0, _underscore.isObject)(customAttr)) { - attributes = customAttr; - } - } - - for (var attr in attributes) { - var val = attributes[attr]; - var value = (0, _underscore.isString)(val) ? val.replace(/"/g, '"') : val; - - if (!(0, _underscore.isUndefined)(value)) { - if ((0, _underscore.isBoolean)(value)) { - value && attrs.push(attr); - } else { - attrs.push(attr + '="' + value + '"'); - } - } - } - - var attrString = attrs.length ? ' ' + attrs.join(' ') : ''; - var code = '<' + tag + attrString + (sTag ? '/' : '') + '>' + model.get('content'); - model.get('components').each(function (comp) { - return code += comp.toHTML(opts); - }); - !sTag && (code += ''); - - return code; - }, - - - /** - * Returns object of attributes for HTML - * @return {Object} - * @private - */ - getAttrToHTML: function getAttrToHTML() { - var attr = this.getAttributes(); - delete attr.style; - return attr; - }, - - - /** - * Return a shallow copy of the model's attributes for JSON - * stringification. - * @return {Object} - * @private - */ - toJSON: function toJSON() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var obj = Backbone.Model.prototype.toJSON.apply(this, args); - obj.attributes = this.getAttributes(); - delete obj.attributes.class; - delete obj.toolbar; - - if (this.em.getConfig('avoidDefaults')) { - var defaults = (0, _underscore.result)(this, 'defaults'); - - (0, _underscore.forEach)(defaults, function (value, key) { - if (['type', 'content'].indexOf(key) === -1 && obj[key] === value) { - delete obj[key]; - } - }); - - if ((0, _underscore.isEmpty)(obj.type)) { - delete obj.type; - } - - (0, _underscore.forEach)(['attributes', 'style'], function (prop) { - if ((0, _underscore.isEmpty)(defaults[prop]) && (0, _underscore.isEmpty)(obj[prop])) { - delete obj[prop]; - } - }); - - (0, _underscore.forEach)(['classes', 'components'], function (prop) { - if ((0, _underscore.isEmpty)(defaults[prop]) && !obj[prop].length) { - delete obj[prop]; - } - }); - } - - return obj; - }, - - - /** - * Return model id - * @return {string} - */ - getId: function getId() { - var attrs = this.get('attributes') || {}; - return attrs.id || this.ccid || this.cid; - }, - - - /** - * Return model id - * @param {String} id - * @return {self} - */ - setId: function setId(id) { - var attrs = _extends({}, this.get('attributes')); - attrs.id = id; - this.set('attributes', attrs); - return this; - }, - - - /** - * Get the DOM element of the model. This works only of the - * model is alredy rendered - * @return {HTMLElement} - */ - getEl: function getEl() { - return this.view && this.view.el; - }, - - - /** - * Return script in string format, cleans 'function() {..' from scripts - * if it's a function - * @param {string|Function} script - * @return {string} - * @private - */ - getScriptString: function getScriptString(script) { - var _this4 = this; - - var scr = script || this.get('script'); - - if (!scr) { - return scr; - } - - // Need to convert script functions to strings - if (typeof scr == 'function') { - var scrStr = scr.toString().trim(); - scrStr = scrStr.replace(/^function[\s\w]*\(\)\s?\{/, '').replace(/\}$/, ''); - scr = scrStr.trim(); - } - - var config = this.em.getConfig(); - var tagVarStart = escapeRegExp(config.tagVarStart || '{[ '); - var tagVarEnd = escapeRegExp(config.tagVarEnd || ' ]}'); - var reg = new RegExp(tagVarStart + '([\\w\\d-]*)' + tagVarEnd, 'g'); - scr = scr.replace(reg, function (match, v) { - // If at least one match is found I have to track this change for a - // better optimization inside JS generator - _this4.scriptUpdated(); - return _this4.attributes[v] || ''; - }); - - return scr; - }, - emitUpdate: function emitUpdate(property) { - var em = this.em; - var event = 'component:update' + (property ? ':' + property : ''); - em && em.trigger(event, this); - }, - - - /** - * Execute callback function on all components - * @param {Function} clb Callback function, the model is passed as an argument - * @return {self} - */ - onAll: function onAll(clb) { - if ((0, _underscore.isFunction)(clb)) { - clb(this); - this.components().forEach(function (model) { - return model.onAll(clb); - }); - } - return this; - }, - - - /** - * Reset id of the component and any of its style rule - * @param {Object} [opts={}] Options - * @return {self} - */ - resetId: function resetId() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var em = this.em; - - var oldId = this.getId(); - if (!oldId) return; - var newId = Component.createId(this); - this.setId(newId); - var rule = em && em.get('CssComposer').getIdRule(oldId); - var selector = rule && rule.get('selectors').at(0); - selector && selector.set('name', newId); - return this; - } -}, { - /** - * Detect if the passed element is a valid component. - * In case the element is valid an object abstracted - * from the element will be returned - * @param {HTMLElement} - * @return {Object} - * @private - */ - isComponent: function isComponent(el) { - return { tagName: el.tagName ? el.tagName.toLowerCase() : '' }; - }, - - - /** - * Relying simply on the number of components becomes a problem when you - * store and load them back, you might hit collisions with new components - * @param {Model} model - * @return {string} - */ - createId: function createId(model) { - componentIndex++; - // Testing 1000000 components with `+ 2` returns 0 collisions - var ilen = componentIndex.toString().length + 2; - var uid = (Math.random() + 1.1).toString(36).slice(-ilen); - var nextId = 'i' + uid; - componentList[nextId] = model; - return nextId; - }, - getList: function getList() { - return componentList; - } -}); - -module.exports = Component; - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -var _underscore = __webpack_require__(1); - -var _mixins = __webpack_require__(2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var clearProp = 'data-clear-style'; - -module.exports = _backbone2.default.View.extend({ - template: function template(model) { - var pfx = this.pfx; - return '\n
    \n ' + this.templateLabel(model) + '\n
    \n
    \n ' + this.templateInput(model) + '\n
    \n '; - }, - templateLabel: function templateLabel(model) { - var pfx = this.pfx; - var icon = model.get('icon'); - var info = model.get('info'); - return '\n \n ' + model.get('name') + '\n \n \n '; - }, - templateInput: function templateInput(model) { - return '\n
    \n \n
    \n '; - }, - - - events: _defineProperty({ - change: 'inputValueChanged' - }, 'click [' + clearProp + ']', 'clear'), - - initialize: function initialize() { - var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - (0, _underscore.bindAll)(this, 'targetUpdated'); - this.config = o.config || {}; - var em = this.config.em; - this.em = em; - this.pfx = this.config.stylePrefix || ''; - this.ppfx = this.config.pStylePrefix || ''; - this.target = o.target || {}; - this.propTarget = o.propTarget || {}; - this.onChange = o.onChange; - this.onInputRender = o.onInputRender || {}; - this.customValue = o.customValue || {}; - var model = this.model; - this.property = model.get('property'); - this.input = null; - var pfx = this.pfx; - this.inputHolderId = '#' + pfx + 'input-holder'; - this.sector = model.collection && model.collection.sector; - model.view = this; - - if (!model.get('value')) { - model.set('value', model.getDefaultValue()); - } - - em && em.on('update:component:style:' + this.property, this.targetUpdated); - //em && em.on(`styleable:change:${this.property}`, this.targetUpdated); - this.listenTo(this.propTarget, 'update', this.targetUpdated); - this.listenTo(model, 'destroy remove', this.remove); - this.listenTo(model, 'change:value', this.modelValueChanged); - this.listenTo(model, 'targetUpdated', this.targetUpdated); - this.listenTo(model, 'change:visible', this.updateVisibility); - this.listenTo(model, 'change:status', this.updateStatus); - - var init = this.init && this.init.bind(this); - init && init(); - }, - - - /** - * Triggers when the status changes. The status indicates if the value of - * the proprerty is changed or inherited - * @private - */ - updateStatus: function updateStatus() { - var status = this.model.get('status'); - var pfx = this.pfx; - var ppfx = this.ppfx; - var config = this.config; - var updatedCls = ppfx + 'four-color'; - var computedCls = ppfx + 'color-warn'; - var labelEl = this.$el.children('.' + pfx + 'label'); - var clearStyle = this.getClearEl().style; - labelEl.removeClass(updatedCls + ' ' + computedCls); - clearStyle.display = 'none'; - - switch (status) { - case 'updated': - labelEl.addClass(updatedCls); - - if (config.clearProperties) { - clearStyle.display = 'inline'; - } - break; - case 'computed': - labelEl.addClass(computedCls); - break; - } - }, - - - /** - * Clear the property from the target - */ - clear: function clear(e) { - e && e.stopPropagation(); - this.model.clearValue(); - this.targetUpdated(); - }, - - - /** - * Get clear element - * @return {HTMLElement} - */ - getClearEl: function getClearEl() { - if (!this.clearEl) { - this.clearEl = this.el.querySelector('[' + clearProp + ']'); - } - - return this.clearEl; - }, - - - /** - * Returns selected target which should have 'style' property - * @return {Model|null} - */ - getTarget: function getTarget() { - return this.getTargetModel(); - }, - - - /** - * Returns Styleable model - * @return {Model|null} - */ - getTargetModel: function getTargetModel() { - return this.propTarget && this.propTarget.model; - }, - - - /** - * Returns helper Styleable model - * @return {Model|null} - */ - getHelperModel: function getHelperModel() { - return this.propTarget && this.propTarget.helper; - }, - - - /** - * Triggers when the value of element input/s is changed, so have to update - * the value of the model which will propogate those changes to the target - */ - inputValueChanged: function inputValueChanged(e) { - e && e.stopPropagation(); - this.model.setValue(this.getInputValue(), 1, { fromInput: 1 }); - this.elementUpdated(); - }, - - - /** - * Fired when the element of the property is updated - */ - elementUpdated: function elementUpdated() { - this.setStatus('updated'); - }, - setStatus: function setStatus(value) { - this.model.set('status', value); - var parent = this.model.parent; - parent && parent.set('status', value); - }, - - - /** - * Fired when the target is changed - * */ - targetUpdated: function targetUpdated() { - if (!this.checkVisibility()) { - return; - } - - var config = this.config; - var em = config.em; - var model = this.model; - var value = ''; - var status = ''; - var targetValue = this.getTargetValue({ ignoreDefault: 1 }); - var defaultValue = model.getDefaultValue(); - var computedValue = this.getComputedValue(); - - if (targetValue) { - value = targetValue; - - if (config.highlightChanged) { - status = 'updated'; - } - } else if (computedValue && config.showComputed && computedValue != defaultValue) { - value = computedValue; - - if (config.highlightComputed) { - status = 'computed'; - } - } else { - value = defaultValue; - status = ''; - } - - model.setValue(value, 0, { fromTarget: 1 }); - this.setStatus(status); - - if (em) { - em.trigger('styleManager:change', this); - em.trigger('styleManager:change:' + model.get('property'), this); - } - }, - checkVisibility: function checkVisibility() { - var result = 1; - - // Check if need to hide the property - if (this.config.hideNotStylable) { - if (!this.isTargetStylable() || !this.isComponentStylable()) { - this.hide(); - result = 0; - } else { - this.show(); - } - // Sector is not passed to Composite and Stack types - if (this.sector) { - this.sector.trigger('updateVisibility'); - } - } - - return result; - }, - - - /** - * Get the value of this property from the target (eg, Component, CSSRule) - * @param {Object} [opts] Options - * @param {Boolean} [options.fetchFromFunction] - * @param {Boolean} [options.ignoreDefault] - * @return string - * @private - */ - getTargetValue: function getTargetValue() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var result; - var model = this.model; - var target = this.getTargetModel(); - var customFetchValue = this.customValue; - - if (!target) { - return result; - } - - result = target.getStyle()[model.get('property')]; - - if (!result && !opts.ignoreDefault) { - result = model.getDefaultValue(); - } - - if (typeof customFetchValue == 'function' && !opts.ignoreCustomValue) { - var index = model.collection.indexOf(model); - var customValue = customFetchValue(this, index); - - if (customValue) { - result = customValue; - } - } - - return result; - }, - - - /** - * Returns computed value - * @return {String} - * @private - */ - getComputedValue: function getComputedValue() { - var target = this.propTarget; - var computed = target.computed || {}; - var computedDef = target.computedDefault || {}; - var avoid = this.config.avoidComputed || []; - var property = this.model.get('property'); - var notToSkip = avoid.indexOf(property) < 0; - var value = computed[property]; - var valueDef = computedDef[(0, _mixins.camelCase)(property)]; - return computed && notToSkip && valueDef !== value && value; - }, - - - /** - * Returns value from input - * @return {string} - */ - getInputValue: function getInputValue() { - var input = this.getInputEl(); - return input ? input.value : ''; - }, - - - /** - * Triggers when the `value` of the model changes, so the target and - * the input element should be updated - * @param {Object} e Event - * @param {Mixed} val Value - * @param {Object} opt Options - * */ - modelValueChanged: function modelValueChanged(e, val) { - var opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - var em = this.config.em; - var model = this.model; - var value = model.getFullValue(); - var target = this.getTarget(); - var onChange = this.onChange; - - // Avoid element update if the change comes from it - if (!opt.fromInput) { - this.setValue(value); - } - - // Check if component is allowed to be styled - if (!target || !this.isTargetStylable() || !this.isComponentStylable()) { - return; - } - - // Avoid target update if the changes comes from it - if (!opt.fromTarget) { - // The onChange is used by Composite/Stack properties, so I'd avoid sending - // it back if the change comes from one of those - if (onChange && !opt.fromParent) { - onChange(target, this, opt); - } else { - this.updateTargetStyle(value, null, opt); - } - } - - if (em) { - em.trigger('component:update', target); - em.trigger('component:styleUpdate', target); - em.trigger('component:styleUpdate:' + model.get('property'), target); - } - }, - - - /** - * Update target style - * @param {string} value - * @param {string} name - * @param {Object} opts - */ - updateTargetStyle: function updateTargetStyle(value) { - var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - var property = name || this.model.get('property'); - var target = this.getTarget(); - var style = target.getStyle(); - - if (value) { - style[property] = value; - } else { - delete style[property]; - } - - target.setStyle(style, opts); - - // Helper is used by `states` like ':hover' to show its preview - var helper = this.getHelperModel(); - helper && helper.setStyle(style, opts); - }, - - - /** - * Check if target is stylable with this property - * The target could be the Component as the CSS Rule - * @return {Boolean} - */ - isTargetStylable: function isTargetStylable(target) { - var trg = target || this.getTarget(); - var model = this.model; - var property = model.get('property'); - var toRequire = model.get('toRequire'); - var unstylable = trg.get('unstylable'); - var stylableReq = trg.get('stylable-require'); - var stylable = trg.get('stylable'); - - // Stylable could also be an array indicating with which property - // the target could be styled - if ((0, _underscore.isArray)(stylable)) { - stylable = stylable.indexOf(property) >= 0; - } - - // Check if the property was signed as unstylable - if ((0, _underscore.isArray)(unstylable)) { - stylable = unstylable.indexOf(property) < 0; - } - - // Check if the property is available only if requested - if (toRequire) { - stylable = stylableReq && stylableReq.indexOf(property) >= 0 || !target; - } - - return stylable; - }, - - - /** - * Check if the selected component is stylable with this property - * The target could be the Component as the CSS Rule - * @return {Boolean} - */ - isComponentStylable: function isComponentStylable() { - var em = this.em; - var component = em && em.getSelected(); - - if (!component) { - return true; - } - - return this.isTargetStylable(component); - }, - - - /** - * Passed a raw value you have to update the input element, generally - * is the value fetched from targets, so you can receive values with - * functions, units, etc. (eg. `rotateY(45deg)`) - * get also - * @param {string} value - * @private - */ - setRawValue: function setRawValue(value) { - this.setValue(this.model.parseValue(value)); - }, - - - /** - * Update the element input. - * Usually the value is a result of `model.getFullValue()` - * @param {String} value The value from the model - * */ - setValue: function setValue(value) { - var model = this.model; - var val = (0, _underscore.isUndefined)(value) ? model.getDefaultValue() : value; - var input = this.getInputEl(); - input && (input.value = val); - }, - getInputEl: function getInputEl() { - if (!this.input) { - this.input = this.el.querySelector('input'); - } - - return this.input; - }, - updateVisibility: function updateVisibility() { - this.el.style.display = this.model.get('visible') ? 'block' : 'none'; - }, - show: function show() { - this.model.set('visible', 1); - }, - hide: function hide() { - this.model.set('visible', 0); - }, - - - /** - * Clean input - * */ - cleanValue: function cleanValue() { - this.setValue(''); - }, - render: function render() { - var pfx = this.pfx; - var model = this.model; - var el = this.el; - el.innerHTML = this.template(model); - el.className = pfx + 'property ' + pfx + model.get('type'); - this.updateStatus(); - - var onRender = this.onRender && this.onRender.bind(this); - onRender && onRender(); - this.setValue(model.get('value'), { targetUpdate: 1 }); - } -}); - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// This is CodeMirror (http://codemirror.net), a code editor -// implemented in JavaScript on top of the browser's DOM. -// -// You can find some technical background for some of the code below -// at http://marijnhaverbeke.nl/blog/#cm-internals . - -(function (global, factory) { - true ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global.CodeMirror = factory()); -}(this, (function () { 'use strict'; - -// Kludges for bugs and behavior differences that can't be feature -// detected are enabled based on userAgent etc sniffing. -var userAgent = navigator.userAgent; -var platform = navigator.platform; - -var gecko = /gecko\/\d/i.test(userAgent); -var ie_upto10 = /MSIE \d/.test(userAgent); -var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); -var edge = /Edge\/(\d+)/.exec(userAgent); -var ie = ie_upto10 || ie_11up || edge; -var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); -var webkit = !edge && /WebKit\//.test(userAgent); -var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); -var chrome = !edge && /Chrome\//.test(userAgent); -var presto = /Opera\//.test(userAgent); -var safari = /Apple Computer/.test(navigator.vendor); -var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); -var phantom = /PhantomJS/.test(userAgent); - -var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent); -var android = /Android/.test(userAgent); -// This is woefully incomplete. Suggestions for alternative methods welcome. -var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); -var mac = ios || /Mac/.test(platform); -var chromeOS = /\bCrOS\b/.test(userAgent); -var windows = /win/i.test(platform); - -var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); -if (presto_version) { presto_version = Number(presto_version[1]); } -if (presto_version && presto_version >= 15) { presto = false; webkit = true; } -// Some browsers use the wrong event properties to signal cmd/ctrl on OS X -var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); -var captureRightClick = gecko || (ie && ie_version >= 9); - -function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } - -var rmClass = function(node, cls) { - var current = node.className; - var match = classTest(cls).exec(current); - if (match) { - var after = current.slice(match.index + match[0].length); - node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); - } -}; - -function removeChildren(e) { - for (var count = e.childNodes.length; count > 0; --count) - { e.removeChild(e.firstChild); } - return e -} - -function removeChildrenAndAdd(parent, e) { - return removeChildren(parent).appendChild(e) -} - -function elt(tag, content, className, style) { - var e = document.createElement(tag); - if (className) { e.className = className; } - if (style) { e.style.cssText = style; } - if (typeof content == "string") { e.appendChild(document.createTextNode(content)); } - else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } } - return e -} -// wrapper for elt, which removes the elt from the accessibility tree -function eltP(tag, content, className, style) { - var e = elt(tag, content, className, style); - e.setAttribute("role", "presentation"); - return e -} - -var range; -if (document.createRange) { range = function(node, start, end, endNode) { - var r = document.createRange(); - r.setEnd(endNode || node, end); - r.setStart(node, start); - return r -}; } -else { range = function(node, start, end) { - var r = document.body.createTextRange(); - try { r.moveToElementText(node.parentNode); } - catch(e) { return r } - r.collapse(true); - r.moveEnd("character", end); - r.moveStart("character", start); - return r -}; } - -function contains(parent, child) { - if (child.nodeType == 3) // Android browser always returns false when child is a textnode - { child = child.parentNode; } - if (parent.contains) - { return parent.contains(child) } - do { - if (child.nodeType == 11) { child = child.host; } - if (child == parent) { return true } - } while (child = child.parentNode) -} - -function activeElt() { - // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. - // IE < 10 will throw when accessed while the page is loading or in an iframe. - // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. - var activeElement; - try { - activeElement = document.activeElement; - } catch(e) { - activeElement = document.body || null; - } - while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) - { activeElement = activeElement.shadowRoot.activeElement; } - return activeElement -} - -function addClass(node, cls) { - var current = node.className; - if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; } -} -function joinClasses(a, b) { - var as = a.split(" "); - for (var i = 0; i < as.length; i++) - { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } } - return b -} - -var selectInput = function(node) { node.select(); }; -if (ios) // Mobile Safari apparently has a bug where select() is broken. - { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; } -else if (ie) // Suppress mysterious IE10 errors - { selectInput = function(node) { try { node.select(); } catch(_e) {} }; } - -function bind(f) { - var args = Array.prototype.slice.call(arguments, 1); - return function(){return f.apply(null, args)} -} - -function copyObj(obj, target, overwrite) { - if (!target) { target = {}; } - for (var prop in obj) - { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) - { target[prop] = obj[prop]; } } - return target -} - -// Counts the column offset in a string, taking tabs into account. -// Used mostly to find indentation. -function countColumn(string, end, tabSize, startIndex, startValue) { - if (end == null) { - end = string.search(/[^\s\u00a0]/); - if (end == -1) { end = string.length; } - } - for (var i = startIndex || 0, n = startValue || 0;;) { - var nextTab = string.indexOf("\t", i); - if (nextTab < 0 || nextTab >= end) - { return n + (end - i) } - n += nextTab - i; - n += tabSize - (n % tabSize); - i = nextTab + 1; - } -} - -var Delayed = function() {this.id = null;}; -Delayed.prototype.set = function (ms, f) { - clearTimeout(this.id); - this.id = setTimeout(f, ms); -}; - -function indexOf(array, elt) { - for (var i = 0; i < array.length; ++i) - { if (array[i] == elt) { return i } } - return -1 -} - -// Number of pixels added to scroller and sizer to hide scrollbar -var scrollerGap = 30; - -// Returned or thrown by various protocols to signal 'I'm not -// handling this'. -var Pass = {toString: function(){return "CodeMirror.Pass"}}; - -// Reused option objects for setSelection & friends -var sel_dontScroll = {scroll: false}; -var sel_mouse = {origin: "*mouse"}; -var sel_move = {origin: "+move"}; - -// The inverse of countColumn -- find the offset that corresponds to -// a particular column. -function findColumn(string, goal, tabSize) { - for (var pos = 0, col = 0;;) { - var nextTab = string.indexOf("\t", pos); - if (nextTab == -1) { nextTab = string.length; } - var skipped = nextTab - pos; - if (nextTab == string.length || col + skipped >= goal) - { return pos + Math.min(skipped, goal - col) } - col += nextTab - pos; - col += tabSize - (col % tabSize); - pos = nextTab + 1; - if (col >= goal) { return pos } - } -} - -var spaceStrs = [""]; -function spaceStr(n) { - while (spaceStrs.length <= n) - { spaceStrs.push(lst(spaceStrs) + " "); } - return spaceStrs[n] -} - -function lst(arr) { return arr[arr.length-1] } - -function map(array, f) { - var out = []; - for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); } - return out -} - -function insertSorted(array, value, score) { - var pos = 0, priority = score(value); - while (pos < array.length && score(array[pos]) <= priority) { pos++; } - array.splice(pos, 0, value); -} - -function nothing() {} - -function createObj(base, props) { - var inst; - if (Object.create) { - inst = Object.create(base); - } else { - nothing.prototype = base; - inst = new nothing(); - } - if (props) { copyObj(props, inst); } - return inst -} - -var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; -function isWordCharBasic(ch) { - return /\w/.test(ch) || ch > "\x80" && - (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)) -} -function isWordChar(ch, helper) { - if (!helper) { return isWordCharBasic(ch) } - if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true } - return helper.test(ch) -} - -function isEmpty(obj) { - for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } } - return true -} - -// Extending unicode characters. A series of a non-extending char + -// any number of extending chars is treated as a single unit as far -// as editing and measuring is concerned. This is not fully correct, -// since some scripts/fonts/browsers also treat other configurations -// of code points as a group. -var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; -function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) } - -// Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. -function skipExtendingChars(str, pos, dir) { - while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; } - return pos -} - -// Returns the value from the range [`from`; `to`] that satisfies -// `pred` and is closest to `from`. Assumes that at least `to` -// satisfies `pred`. Supports `from` being greater than `to`. -function findFirst(pred, from, to) { - // At any point we are certain `to` satisfies `pred`, don't know - // whether `from` does. - var dir = from > to ? -1 : 1; - for (;;) { - if (from == to) { return from } - var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF); - if (mid == from) { return pred(mid) ? from : to } - if (pred(mid)) { to = mid; } - else { from = mid + dir; } - } -} - -// The display handles the DOM integration, both for input reading -// and content drawing. It holds references to DOM nodes and -// display-related state. - -function Display(place, doc, input) { - var d = this; - this.input = input; - - // Covers bottom-right square when both scrollbars are present. - d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); - d.scrollbarFiller.setAttribute("cm-not-content", "true"); - // Covers bottom of gutter when coverGutterNextToScrollbar is on - // and h scrollbar is present. - d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); - d.gutterFiller.setAttribute("cm-not-content", "true"); - // Will contain the actual code, positioned to cover the viewport. - d.lineDiv = eltP("div", null, "CodeMirror-code"); - // Elements are added to these to represent selection and cursors. - d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); - d.cursorDiv = elt("div", null, "CodeMirror-cursors"); - // A visibility: hidden element used to find the size of things. - d.measure = elt("div", null, "CodeMirror-measure"); - // When lines outside of the viewport are measured, they are drawn in this. - d.lineMeasure = elt("div", null, "CodeMirror-measure"); - // Wraps everything that needs to exist inside the vertically-padded coordinate system - d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], - null, "position: relative; outline: none"); - var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); - // Moved around its parent to cover visible view. - d.mover = elt("div", [lines], null, "position: relative"); - // Set to the height of the document, allowing scrolling. - d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); - d.sizerWidth = null; - // Behavior of elts with overflow: auto and padding is - // inconsistent across browsers. This is used to ensure the - // scrollable area is big enough. - d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); - // Will contain the gutters, if any. - d.gutters = elt("div", null, "CodeMirror-gutters"); - d.lineGutter = null; - // Actual scrollable element. - d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); - d.scroller.setAttribute("tabIndex", "-1"); - // The element in which the editor lives. - d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); - - // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) - if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } - if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; } - - if (place) { - if (place.appendChild) { place.appendChild(d.wrapper); } - else { place(d.wrapper); } - } - - // Current rendered range (may be bigger than the view window). - d.viewFrom = d.viewTo = doc.first; - d.reportedViewFrom = d.reportedViewTo = doc.first; - // Information about the rendered lines. - d.view = []; - d.renderedView = null; - // Holds info about a single rendered line when it was rendered - // for measurement, while not in view. - d.externalMeasured = null; - // Empty space (in pixels) above the view - d.viewOffset = 0; - d.lastWrapHeight = d.lastWrapWidth = 0; - d.updateLineNumbers = null; - - d.nativeBarWidth = d.barHeight = d.barWidth = 0; - d.scrollbarsClipped = false; - - // Used to only resize the line number gutter when necessary (when - // the amount of lines crosses a boundary that makes its width change) - d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; - // Set to true when a non-horizontal-scrolling line widget is - // added. As an optimization, line widget aligning is skipped when - // this is false. - d.alignWidgets = false; - - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - - // Tracks the maximum line length so that the horizontal scrollbar - // can be kept static when scrolling. - d.maxLine = null; - d.maxLineLength = 0; - d.maxLineChanged = false; - - // Used for measuring wheel scrolling granularity - d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; - - // True when shift is held down. - d.shift = false; - - // Used to track whether anything happened since the context menu - // was opened. - d.selForContextMenu = null; - - d.activeTouch = null; - - input.init(d); -} - -// Find the line object corresponding to the given line number. -function getLine(doc, n) { - n -= doc.first; - if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") } - var chunk = doc; - while (!chunk.lines) { - for (var i = 0;; ++i) { - var child = chunk.children[i], sz = child.chunkSize(); - if (n < sz) { chunk = child; break } - n -= sz; - } - } - return chunk.lines[n] -} - -// Get the part of a document between two positions, as an array of -// strings. -function getBetween(doc, start, end) { - var out = [], n = start.line; - doc.iter(start.line, end.line + 1, function (line) { - var text = line.text; - if (n == end.line) { text = text.slice(0, end.ch); } - if (n == start.line) { text = text.slice(start.ch); } - out.push(text); - ++n; - }); - return out -} -// Get the lines between from and to, as array of strings. -function getLines(doc, from, to) { - var out = []; - doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value - return out -} - -// Update the height of a line, propagating the height change -// upwards to parent nodes. -function updateLineHeight(line, height) { - var diff = height - line.height; - if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } } -} - -// Given a line object, find its line number by walking up through -// its parent links. -function lineNo(line) { - if (line.parent == null) { return null } - var cur = line.parent, no = indexOf(cur.lines, line); - for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { - for (var i = 0;; ++i) { - if (chunk.children[i] == cur) { break } - no += chunk.children[i].chunkSize(); - } - } - return no + cur.first -} - -// Find the line at the given vertical position, using the height -// information in the document tree. -function lineAtHeight(chunk, h) { - var n = chunk.first; - outer: do { - for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { - var child = chunk.children[i$1], ch = child.height; - if (h < ch) { chunk = child; continue outer } - h -= ch; - n += child.chunkSize(); - } - return n - } while (!chunk.lines) - var i = 0; - for (; i < chunk.lines.length; ++i) { - var line = chunk.lines[i], lh = line.height; - if (h < lh) { break } - h -= lh; - } - return n + i -} - -function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size} - -function lineNumberFor(options, i) { - return String(options.lineNumberFormatter(i + options.firstLineNumber)) -} - -// A Pos instance represents a position within the text. -function Pos(line, ch, sticky) { - if ( sticky === void 0 ) sticky = null; - - if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) } - this.line = line; - this.ch = ch; - this.sticky = sticky; -} - -// Compare two positions, return 0 if they are the same, a negative -// number when a is less, and a positive number otherwise. -function cmp(a, b) { return a.line - b.line || a.ch - b.ch } - -function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 } - -function copyPos(x) {return Pos(x.line, x.ch)} -function maxPos(a, b) { return cmp(a, b) < 0 ? b : a } -function minPos(a, b) { return cmp(a, b) < 0 ? a : b } - -// Most of the external API clips given positions to make sure they -// actually exist within the document. -function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))} -function clipPos(doc, pos) { - if (pos.line < doc.first) { return Pos(doc.first, 0) } - var last = doc.first + doc.size - 1; - if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) } - return clipToLen(pos, getLine(doc, pos.line).text.length) -} -function clipToLen(pos, linelen) { - var ch = pos.ch; - if (ch == null || ch > linelen) { return Pos(pos.line, linelen) } - else if (ch < 0) { return Pos(pos.line, 0) } - else { return pos } -} -function clipPosArray(doc, array) { - var out = []; - for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); } - return out -} - -// Optimize some code when these features are not used. -var sawReadOnlySpans = false; -var sawCollapsedSpans = false; - -function seeReadOnlySpans() { - sawReadOnlySpans = true; -} - -function seeCollapsedSpans() { - sawCollapsedSpans = true; -} - -// TEXTMARKER SPANS - -function MarkedSpan(marker, from, to) { - this.marker = marker; - this.from = from; this.to = to; -} - -// Search an array of spans for a span matching the given marker. -function getMarkedSpanFor(spans, marker) { - if (spans) { for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if (span.marker == marker) { return span } - } } -} -// Remove a span from an array, returning undefined if no spans are -// left (we don't store arrays for lines without spans). -function removeMarkedSpan(spans, span) { - var r; - for (var i = 0; i < spans.length; ++i) - { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } } - return r -} -// Add a span to a line. -function addMarkedSpan(line, span) { - line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; - span.marker.attachLine(line); -} - -// Used for the algorithm that adjusts markers for a change in the -// document. These functions cut an array of spans at a given -// character position, returning an array of remaining chunks (or -// undefined if nothing remains). -function markedSpansBefore(old, startCh, isInsert) { - var nw; - if (old) { for (var i = 0; i < old.length; ++i) { - var span = old[i], marker = span.marker; - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); - if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); - } - } } - return nw -} -function markedSpansAfter(old, endCh, isInsert) { - var nw; - if (old) { for (var i = 0; i < old.length; ++i) { - var span = old[i], marker = span.marker; - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); - if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, - span.to == null ? null : span.to - endCh)); - } - } } - return nw -} - -// Given a change object, compute the new set of marker spans that -// cover the line in which the change took place. Removes spans -// entirely within the change, reconnects spans belonging to the -// same marker that appear on both sides of the change, and cuts off -// spans partially within the change. Returns an array of span -// arrays with one element for each line in (after) the change. -function stretchSpansOverChange(doc, change) { - if (change.full) { return null } - var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; - var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; - if (!oldFirst && !oldLast) { return null } - - var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; - // Get the spans that 'stick out' on both sides - var first = markedSpansBefore(oldFirst, startCh, isInsert); - var last = markedSpansAfter(oldLast, endCh, isInsert); - - // Next, merge those two ends - var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); - if (first) { - // Fix up .to properties of first - for (var i = 0; i < first.length; ++i) { - var span = first[i]; - if (span.to == null) { - var found = getMarkedSpanFor(last, span.marker); - if (!found) { span.to = startCh; } - else if (sameLine) { span.to = found.to == null ? null : found.to + offset; } - } - } - } - if (last) { - // Fix up .from in last (or move them into first in case of sameLine) - for (var i$1 = 0; i$1 < last.length; ++i$1) { - var span$1 = last[i$1]; - if (span$1.to != null) { span$1.to += offset; } - if (span$1.from == null) { - var found$1 = getMarkedSpanFor(first, span$1.marker); - if (!found$1) { - span$1.from = offset; - if (sameLine) { (first || (first = [])).push(span$1); } - } - } else { - span$1.from += offset; - if (sameLine) { (first || (first = [])).push(span$1); } - } - } - } - // Make sure we didn't create any zero-length spans - if (first) { first = clearEmptySpans(first); } - if (last && last != first) { last = clearEmptySpans(last); } - - var newMarkers = [first]; - if (!sameLine) { - // Fill gap with whole-line-spans - var gap = change.text.length - 2, gapMarkers; - if (gap > 0 && first) - { for (var i$2 = 0; i$2 < first.length; ++i$2) - { if (first[i$2].to == null) - { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } } - for (var i$3 = 0; i$3 < gap; ++i$3) - { newMarkers.push(gapMarkers); } - newMarkers.push(last); - } - return newMarkers -} - -// Remove spans that are empty and don't have a clearWhenEmpty -// option of false. -function clearEmptySpans(spans) { - for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) - { spans.splice(i--, 1); } - } - if (!spans.length) { return null } - return spans -} - -// Used to 'clip' out readOnly ranges when making a change. -function removeReadOnlyRanges(doc, from, to) { - var markers = null; - doc.iter(from.line, to.line + 1, function (line) { - if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { - var mark = line.markedSpans[i].marker; - if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) - { (markers || (markers = [])).push(mark); } - } } - }); - if (!markers) { return null } - var parts = [{from: from, to: to}]; - for (var i = 0; i < markers.length; ++i) { - var mk = markers[i], m = mk.find(0); - for (var j = 0; j < parts.length; ++j) { - var p = parts[j]; - if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue } - var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); - if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) - { newParts.push({from: p.from, to: m.from}); } - if (dto > 0 || !mk.inclusiveRight && !dto) - { newParts.push({from: m.to, to: p.to}); } - parts.splice.apply(parts, newParts); - j += newParts.length - 3; - } - } - return parts -} - -// Connect or disconnect spans from a line. -function detachMarkedSpans(line) { - var spans = line.markedSpans; - if (!spans) { return } - for (var i = 0; i < spans.length; ++i) - { spans[i].marker.detachLine(line); } - line.markedSpans = null; -} -function attachMarkedSpans(line, spans) { - if (!spans) { return } - for (var i = 0; i < spans.length; ++i) - { spans[i].marker.attachLine(line); } - line.markedSpans = spans; -} - -// Helpers used when computing which overlapping collapsed span -// counts as the larger one. -function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 } -function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 } - -// Returns a number indicating which of two overlapping collapsed -// spans is larger (and thus includes the other). Falls back to -// comparing ids when the spans cover exactly the same range. -function compareCollapsedMarkers(a, b) { - var lenDiff = a.lines.length - b.lines.length; - if (lenDiff != 0) { return lenDiff } - var aPos = a.find(), bPos = b.find(); - var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); - if (fromCmp) { return -fromCmp } - var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); - if (toCmp) { return toCmp } - return b.id - a.id -} - -// Find out whether a line ends or starts in a collapsed span. If -// so, return the marker for that span. -function collapsedSpanAtSide(line, start) { - var sps = sawCollapsedSpans && line.markedSpans, found; - if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { - sp = sps[i]; - if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && - (!found || compareCollapsedMarkers(found, sp.marker) < 0)) - { found = sp.marker; } - } } - return found -} -function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) } -function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) } - -function collapsedSpanAround(line, ch) { - var sps = sawCollapsedSpans && line.markedSpans, found; - if (sps) { for (var i = 0; i < sps.length; ++i) { - var sp = sps[i]; - if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && - (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; } - } } - return found -} - -// Test whether there exists a collapsed span that partially -// overlaps (covers the start or end, but not both) of a new span. -// Such overlap is not allowed. -function conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) { - var line = getLine(doc, lineNo$$1); - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) { for (var i = 0; i < sps.length; ++i) { - var sp = sps[i]; - if (!sp.marker.collapsed) { continue } - var found = sp.marker.find(0); - var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); - var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); - if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue } - if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || - fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) - { return true } - } } -} - -// A visual line is a line as drawn on the screen. Folding, for -// example, can cause multiple logical lines to appear on the same -// visual line. This finds the start of the visual line that the -// given line is part of (usually that is the line itself). -function visualLine(line) { - var merged; - while (merged = collapsedSpanAtStart(line)) - { line = merged.find(-1, true).line; } - return line -} - -function visualLineEnd(line) { - var merged; - while (merged = collapsedSpanAtEnd(line)) - { line = merged.find(1, true).line; } - return line -} - -// Returns an array of logical lines that continue the visual line -// started by the argument, or undefined if there are no such lines. -function visualLineContinued(line) { - var merged, lines; - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line - ;(lines || (lines = [])).push(line); - } - return lines -} - -// Get the line number of the start of the visual line that the -// given line number is part of. -function visualLineNo(doc, lineN) { - var line = getLine(doc, lineN), vis = visualLine(line); - if (line == vis) { return lineN } - return lineNo(vis) -} - -// Get the line number of the start of the next visual line after -// the given line. -function visualLineEndNo(doc, lineN) { - if (lineN > doc.lastLine()) { return lineN } - var line = getLine(doc, lineN), merged; - if (!lineIsHidden(doc, line)) { return lineN } - while (merged = collapsedSpanAtEnd(line)) - { line = merged.find(1, true).line; } - return lineNo(line) + 1 -} - -// Compute whether a line is hidden. Lines count as hidden when they -// are part of a visual line that starts with another line, or when -// they are entirely covered by collapsed, non-widget span. -function lineIsHidden(doc, line) { - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { - sp = sps[i]; - if (!sp.marker.collapsed) { continue } - if (sp.from == null) { return true } - if (sp.marker.widgetNode) { continue } - if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) - { return true } - } } -} -function lineIsHiddenInner(doc, line, span) { - if (span.to == null) { - var end = span.marker.find(1, true); - return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)) - } - if (span.marker.inclusiveRight && span.to == line.text.length) - { return true } - for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) { - sp = line.markedSpans[i]; - if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && - (sp.to == null || sp.to != span.from) && - (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && - lineIsHiddenInner(doc, line, sp)) { return true } - } -} - -// Find the height above the given line. -function heightAtLine(lineObj) { - lineObj = visualLine(lineObj); - - var h = 0, chunk = lineObj.parent; - for (var i = 0; i < chunk.lines.length; ++i) { - var line = chunk.lines[i]; - if (line == lineObj) { break } - else { h += line.height; } - } - for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { - for (var i$1 = 0; i$1 < p.children.length; ++i$1) { - var cur = p.children[i$1]; - if (cur == chunk) { break } - else { h += cur.height; } - } - } - return h -} - -// Compute the character length of a line, taking into account -// collapsed ranges (see markText) that might hide parts, and join -// other lines onto it. -function lineLength(line) { - if (line.height == 0) { return 0 } - var len = line.text.length, merged, cur = line; - while (merged = collapsedSpanAtStart(cur)) { - var found = merged.find(0, true); - cur = found.from.line; - len += found.from.ch - found.to.ch; - } - cur = line; - while (merged = collapsedSpanAtEnd(cur)) { - var found$1 = merged.find(0, true); - len -= cur.text.length - found$1.from.ch; - cur = found$1.to.line; - len += cur.text.length - found$1.to.ch; - } - return len -} - -// Find the longest line in the document. -function findMaxLine(cm) { - var d = cm.display, doc = cm.doc; - d.maxLine = getLine(doc, doc.first); - d.maxLineLength = lineLength(d.maxLine); - d.maxLineChanged = true; - doc.iter(function (line) { - var len = lineLength(line); - if (len > d.maxLineLength) { - d.maxLineLength = len; - d.maxLine = line; - } - }); -} - -// BIDI HELPERS - -function iterateBidiSections(order, from, to, f) { - if (!order) { return f(from, to, "ltr", 0) } - var found = false; - for (var i = 0; i < order.length; ++i) { - var part = order[i]; - if (part.from < to && part.to > from || from == to && part.to == from) { - f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i); - found = true; - } - } - if (!found) { f(from, to, "ltr"); } -} - -var bidiOther = null; -function getBidiPartAt(order, ch, sticky) { - var found; - bidiOther = null; - for (var i = 0; i < order.length; ++i) { - var cur = order[i]; - if (cur.from < ch && cur.to > ch) { return i } - if (cur.to == ch) { - if (cur.from != cur.to && sticky == "before") { found = i; } - else { bidiOther = i; } - } - if (cur.from == ch) { - if (cur.from != cur.to && sticky != "before") { found = i; } - else { bidiOther = i; } - } - } - return found != null ? found : bidiOther -} - -// Bidirectional ordering algorithm -// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm -// that this (partially) implements. - -// One-char codes used for character types: -// L (L): Left-to-Right -// R (R): Right-to-Left -// r (AL): Right-to-Left Arabic -// 1 (EN): European Number -// + (ES): European Number Separator -// % (ET): European Number Terminator -// n (AN): Arabic Number -// , (CS): Common Number Separator -// m (NSM): Non-Spacing Mark -// b (BN): Boundary Neutral -// s (B): Paragraph Separator -// t (S): Segment Separator -// w (WS): Whitespace -// N (ON): Other Neutrals - -// Returns null if characters are ordered as they appear -// (left-to-right), or an array of sections ({from, to, level} -// objects) in the order in which they occur visually. -var bidiOrdering = (function() { - // Character types for codepoints 0 to 0xff - var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; - // Character types for codepoints 0x600 to 0x6f9 - var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; - function charType(code) { - if (code <= 0xf7) { return lowTypes.charAt(code) } - else if (0x590 <= code && code <= 0x5f4) { return "R" } - else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) } - else if (0x6ee <= code && code <= 0x8ac) { return "r" } - else if (0x2000 <= code && code <= 0x200b) { return "w" } - else if (code == 0x200c) { return "b" } - else { return "L" } - } - - var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; - var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; - - function BidiSpan(level, from, to) { - this.level = level; - this.from = from; this.to = to; - } - - return function(str, direction) { - var outerType = direction == "ltr" ? "L" : "R"; - - if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false } - var len = str.length, types = []; - for (var i = 0; i < len; ++i) - { types.push(charType(str.charCodeAt(i))); } - - // W1. Examine each non-spacing mark (NSM) in the level run, and - // change the type of the NSM to the type of the previous - // character. If the NSM is at the start of the level run, it will - // get the type of sor. - for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { - var type = types[i$1]; - if (type == "m") { types[i$1] = prev; } - else { prev = type; } - } - - // W2. Search backwards from each instance of a European number - // until the first strong type (R, L, AL, or sor) is found. If an - // AL is found, change the type of the European number to Arabic - // number. - // W3. Change all ALs to R. - for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { - var type$1 = types[i$2]; - if (type$1 == "1" && cur == "r") { types[i$2] = "n"; } - else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } } - } - - // W4. A single European separator between two European numbers - // changes to a European number. A single common separator between - // two numbers of the same type changes to that type. - for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { - var type$2 = types[i$3]; - if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; } - else if (type$2 == "," && prev$1 == types[i$3+1] && - (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; } - prev$1 = type$2; - } - - // W5. A sequence of European terminators adjacent to European - // numbers changes to all European numbers. - // W6. Otherwise, separators and terminators change to Other - // Neutral. - for (var i$4 = 0; i$4 < len; ++i$4) { - var type$3 = types[i$4]; - if (type$3 == ",") { types[i$4] = "N"; } - else if (type$3 == "%") { - var end = (void 0); - for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} - var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; - for (var j = i$4; j < end; ++j) { types[j] = replace; } - i$4 = end - 1; - } - } - - // W7. Search backwards from each instance of a European number - // until the first strong type (R, L, or sor) is found. If an L is - // found, then change the type of the European number to L. - for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { - var type$4 = types[i$5]; - if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; } - else if (isStrong.test(type$4)) { cur$1 = type$4; } - } - - // N1. A sequence of neutrals takes the direction of the - // surrounding strong text if the text on both sides has the same - // direction. European and Arabic numbers act as if they were R in - // terms of their influence on neutrals. Start-of-level-run (sor) - // and end-of-level-run (eor) are used at level run boundaries. - // N2. Any remaining neutrals take the embedding direction. - for (var i$6 = 0; i$6 < len; ++i$6) { - if (isNeutral.test(types[i$6])) { - var end$1 = (void 0); - for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} - var before = (i$6 ? types[i$6-1] : outerType) == "L"; - var after = (end$1 < len ? types[end$1] : outerType) == "L"; - var replace$1 = before == after ? (before ? "L" : "R") : outerType; - for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; } - i$6 = end$1 - 1; - } - } - - // Here we depart from the documented algorithm, in order to avoid - // building up an actual levels array. Since there are only three - // levels (0, 1, 2) in an implementation that doesn't take - // explicit embedding into account, we can build up the order on - // the fly, without following the level-based algorithm. - var order = [], m; - for (var i$7 = 0; i$7 < len;) { - if (countsAsLeft.test(types[i$7])) { - var start = i$7; - for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} - order.push(new BidiSpan(0, start, i$7)); - } else { - var pos = i$7, at = order.length; - for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} - for (var j$2 = pos; j$2 < i$7;) { - if (countsAsNum.test(types[j$2])) { - if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); } - var nstart = j$2; - for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} - order.splice(at, 0, new BidiSpan(2, nstart, j$2)); - pos = j$2; - } else { ++j$2; } - } - if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); } - } - } - if (direction == "ltr") { - if (order[0].level == 1 && (m = str.match(/^\s+/))) { - order[0].from = m[0].length; - order.unshift(new BidiSpan(0, 0, m[0].length)); - } - if (lst(order).level == 1 && (m = str.match(/\s+$/))) { - lst(order).to -= m[0].length; - order.push(new BidiSpan(0, len - m[0].length, len)); - } - } - - return direction == "rtl" ? order.reverse() : order - } -})(); - -// Get the bidi ordering for the given line (and cache it). Returns -// false for lines that are fully left-to-right, and an array of -// BidiSpan objects otherwise. -function getOrder(line, direction) { - var order = line.order; - if (order == null) { order = line.order = bidiOrdering(line.text, direction); } - return order -} - -// EVENT HANDLING - -// Lightweight event framework. on/off also work on DOM nodes, -// registering native DOM handlers. - -var noHandlers = []; - -var on = function(emitter, type, f) { - if (emitter.addEventListener) { - emitter.addEventListener(type, f, false); - } else if (emitter.attachEvent) { - emitter.attachEvent("on" + type, f); - } else { - var map$$1 = emitter._handlers || (emitter._handlers = {}); - map$$1[type] = (map$$1[type] || noHandlers).concat(f); - } -}; - -function getHandlers(emitter, type) { - return emitter._handlers && emitter._handlers[type] || noHandlers -} - -function off(emitter, type, f) { - if (emitter.removeEventListener) { - emitter.removeEventListener(type, f, false); - } else if (emitter.detachEvent) { - emitter.detachEvent("on" + type, f); - } else { - var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type]; - if (arr) { - var index = indexOf(arr, f); - if (index > -1) - { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); } - } - } -} - -function signal(emitter, type /*, values...*/) { - var handlers = getHandlers(emitter, type); - if (!handlers.length) { return } - var args = Array.prototype.slice.call(arguments, 2); - for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); } -} - -// The DOM events that CodeMirror handles can be overridden by -// registering a (non-DOM) handler on the editor for the event name, -// and preventDefault-ing the event in that handler. -function signalDOMEvent(cm, e, override) { - if (typeof e == "string") - { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; } - signal(cm, override || e.type, cm, e); - return e_defaultPrevented(e) || e.codemirrorIgnore -} - -function signalCursorActivity(cm) { - var arr = cm._handlers && cm._handlers.cursorActivity; - if (!arr) { return } - var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); - for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1) - { set.push(arr[i]); } } -} - -function hasHandler(emitter, type) { - return getHandlers(emitter, type).length > 0 -} - -// Add on and off methods to a constructor's prototype, to make -// registering events on such objects more convenient. -function eventMixin(ctor) { - ctor.prototype.on = function(type, f) {on(this, type, f);}; - ctor.prototype.off = function(type, f) {off(this, type, f);}; -} - -// Due to the fact that we still support jurassic IE versions, some -// compatibility wrappers are needed. - -function e_preventDefault(e) { - if (e.preventDefault) { e.preventDefault(); } - else { e.returnValue = false; } -} -function e_stopPropagation(e) { - if (e.stopPropagation) { e.stopPropagation(); } - else { e.cancelBubble = true; } -} -function e_defaultPrevented(e) { - return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false -} -function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);} - -function e_target(e) {return e.target || e.srcElement} -function e_button(e) { - var b = e.which; - if (b == null) { - if (e.button & 1) { b = 1; } - else if (e.button & 2) { b = 3; } - else if (e.button & 4) { b = 2; } - } - if (mac && e.ctrlKey && b == 1) { b = 3; } - return b -} - -// Detect drag-and-drop -var dragAndDrop = function() { - // There is *some* kind of drag-and-drop support in IE6-8, but I - // couldn't get it to work yet. - if (ie && ie_version < 9) { return false } - var div = elt('div'); - return "draggable" in div || "dragDrop" in div -}(); - -var zwspSupported; -function zeroWidthElement(measure) { - if (zwspSupported == null) { - var test = elt("span", "\u200b"); - removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); - if (measure.firstChild.offsetHeight != 0) - { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); } - } - var node = zwspSupported ? elt("span", "\u200b") : - elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); - node.setAttribute("cm-text", ""); - return node -} - -// Feature-detect IE's crummy client rect reporting for bidi text -var badBidiRects; -function hasBadBidiRects(measure) { - if (badBidiRects != null) { return badBidiRects } - var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); - var r0 = range(txt, 0, 1).getBoundingClientRect(); - var r1 = range(txt, 1, 2).getBoundingClientRect(); - removeChildren(measure); - if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780) - return badBidiRects = (r1.right - r0.right < 3) -} - -// See if "".split is the broken IE version, if so, provide an -// alternative way to split lines. -var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { - var pos = 0, result = [], l = string.length; - while (pos <= l) { - var nl = string.indexOf("\n", pos); - if (nl == -1) { nl = string.length; } - var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); - var rt = line.indexOf("\r"); - if (rt != -1) { - result.push(line.slice(0, rt)); - pos += rt + 1; - } else { - result.push(line); - pos = nl + 1; - } - } - return result -} : function (string) { return string.split(/\r\n?|\n/); }; - -var hasSelection = window.getSelection ? function (te) { - try { return te.selectionStart != te.selectionEnd } - catch(e) { return false } -} : function (te) { - var range$$1; - try {range$$1 = te.ownerDocument.selection.createRange();} - catch(e) {} - if (!range$$1 || range$$1.parentElement() != te) { return false } - return range$$1.compareEndPoints("StartToEnd", range$$1) != 0 -}; - -var hasCopyEvent = (function () { - var e = elt("div"); - if ("oncopy" in e) { return true } - e.setAttribute("oncopy", "return;"); - return typeof e.oncopy == "function" -})(); - -var badZoomedRects = null; -function hasBadZoomedRects(measure) { - if (badZoomedRects != null) { return badZoomedRects } - var node = removeChildrenAndAdd(measure, elt("span", "x")); - var normal = node.getBoundingClientRect(); - var fromRange = range(node, 0, 1).getBoundingClientRect(); - return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1 -} - -// Known modes, by name and by MIME -var modes = {}; -var mimeModes = {}; - -// Extra arguments are stored as the mode's dependencies, which is -// used by (legacy) mechanisms like loadmode.js to automatically -// load a mode. (Preferred mechanism is the require/define calls.) -function defineMode(name, mode) { - if (arguments.length > 2) - { mode.dependencies = Array.prototype.slice.call(arguments, 2); } - modes[name] = mode; -} - -function defineMIME(mime, spec) { - mimeModes[mime] = spec; -} - -// Given a MIME type, a {name, ...options} config object, or a name -// string, return a mode config object. -function resolveMode(spec) { - if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { - spec = mimeModes[spec]; - } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { - var found = mimeModes[spec.name]; - if (typeof found == "string") { found = {name: found}; } - spec = createObj(found, spec); - spec.name = found.name; - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { - return resolveMode("application/xml") - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { - return resolveMode("application/json") - } - if (typeof spec == "string") { return {name: spec} } - else { return spec || {name: "null"} } -} - -// Given a mode spec (anything that resolveMode accepts), find and -// initialize an actual mode object. -function getMode(options, spec) { - spec = resolveMode(spec); - var mfactory = modes[spec.name]; - if (!mfactory) { return getMode(options, "text/plain") } - var modeObj = mfactory(options, spec); - if (modeExtensions.hasOwnProperty(spec.name)) { - var exts = modeExtensions[spec.name]; - for (var prop in exts) { - if (!exts.hasOwnProperty(prop)) { continue } - if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; } - modeObj[prop] = exts[prop]; - } - } - modeObj.name = spec.name; - if (spec.helperType) { modeObj.helperType = spec.helperType; } - if (spec.modeProps) { for (var prop$1 in spec.modeProps) - { modeObj[prop$1] = spec.modeProps[prop$1]; } } - - return modeObj -} - -// This can be used to attach properties to mode objects from -// outside the actual mode definition. -var modeExtensions = {}; -function extendMode(mode, properties) { - var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); - copyObj(properties, exts); -} - -function copyState(mode, state) { - if (state === true) { return state } - if (mode.copyState) { return mode.copyState(state) } - var nstate = {}; - for (var n in state) { - var val = state[n]; - if (val instanceof Array) { val = val.concat([]); } - nstate[n] = val; - } - return nstate -} - -// Given a mode and a state (for that mode), find the inner mode and -// state at the position that the state refers to. -function innerMode(mode, state) { - var info; - while (mode.innerMode) { - info = mode.innerMode(state); - if (!info || info.mode == mode) { break } - state = info.state; - mode = info.mode; - } - return info || {mode: mode, state: state} -} - -function startState(mode, a1, a2) { - return mode.startState ? mode.startState(a1, a2) : true -} - -// STRING STREAM - -// Fed to the mode parsers, provides helper functions to make -// parsers more succinct. - -var StringStream = function(string, tabSize, lineOracle) { - this.pos = this.start = 0; - this.string = string; - this.tabSize = tabSize || 8; - this.lastColumnPos = this.lastColumnValue = 0; - this.lineStart = 0; - this.lineOracle = lineOracle; -}; - -StringStream.prototype.eol = function () {return this.pos >= this.string.length}; -StringStream.prototype.sol = function () {return this.pos == this.lineStart}; -StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined}; -StringStream.prototype.next = function () { - if (this.pos < this.string.length) - { return this.string.charAt(this.pos++) } -}; -StringStream.prototype.eat = function (match) { - var ch = this.string.charAt(this.pos); - var ok; - if (typeof match == "string") { ok = ch == match; } - else { ok = ch && (match.test ? match.test(ch) : match(ch)); } - if (ok) {++this.pos; return ch} -}; -StringStream.prototype.eatWhile = function (match) { - var start = this.pos; - while (this.eat(match)){} - return this.pos > start -}; -StringStream.prototype.eatSpace = function () { - var this$1 = this; - - var start = this.pos; - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; } - return this.pos > start -}; -StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;}; -StringStream.prototype.skipTo = function (ch) { - var found = this.string.indexOf(ch, this.pos); - if (found > -1) {this.pos = found; return true} -}; -StringStream.prototype.backUp = function (n) {this.pos -= n;}; -StringStream.prototype.column = function () { - if (this.lastColumnPos < this.start) { - this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); - this.lastColumnPos = this.start; - } - return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) -}; -StringStream.prototype.indentation = function () { - return countColumn(this.string, null, this.tabSize) - - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) -}; -StringStream.prototype.match = function (pattern, consume, caseInsensitive) { - if (typeof pattern == "string") { - var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; }; - var substr = this.string.substr(this.pos, pattern.length); - if (cased(substr) == cased(pattern)) { - if (consume !== false) { this.pos += pattern.length; } - return true - } - } else { - var match = this.string.slice(this.pos).match(pattern); - if (match && match.index > 0) { return null } - if (match && consume !== false) { this.pos += match[0].length; } - return match - } -}; -StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)}; -StringStream.prototype.hideFirstChars = function (n, inner) { - this.lineStart += n; - try { return inner() } - finally { this.lineStart -= n; } -}; -StringStream.prototype.lookAhead = function (n) { - var oracle = this.lineOracle; - return oracle && oracle.lookAhead(n) -}; -StringStream.prototype.baseToken = function () { - var oracle = this.lineOracle; - return oracle && oracle.baseToken(this.pos) -}; - -var SavedContext = function(state, lookAhead) { - this.state = state; - this.lookAhead = lookAhead; -}; - -var Context = function(doc, state, line, lookAhead) { - this.state = state; - this.doc = doc; - this.line = line; - this.maxLookAhead = lookAhead || 0; - this.baseTokens = null; - this.baseTokenPos = 1; -}; - -Context.prototype.lookAhead = function (n) { - var line = this.doc.getLine(this.line + n); - if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; } - return line -}; - -Context.prototype.baseToken = function (n) { - var this$1 = this; - - if (!this.baseTokens) { return null } - while (this.baseTokens[this.baseTokenPos] <= n) - { this$1.baseTokenPos += 2; } - var type = this.baseTokens[this.baseTokenPos + 1]; - return {type: type && type.replace(/( |^)overlay .*/, ""), - size: this.baseTokens[this.baseTokenPos] - n} -}; - -Context.prototype.nextLine = function () { - this.line++; - if (this.maxLookAhead > 0) { this.maxLookAhead--; } -}; - -Context.fromSaved = function (doc, saved, line) { - if (saved instanceof SavedContext) - { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) } - else - { return new Context(doc, copyState(doc.mode, saved), line) } -}; - -Context.prototype.save = function (copy) { - var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state; - return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state -}; - - -// Compute a style array (an array starting with a mode generation -// -- for invalidation -- followed by pairs of end positions and -// style strings), which is used to highlight the tokens on the -// line. -function highlightLine(cm, line, context, forceToEnd) { - // A styles array always starts with a number identifying the - // mode/overlays that it is based on (for easy invalidation). - var st = [cm.state.modeGen], lineClasses = {}; - // Compute the base array of styles - runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); }, - lineClasses, forceToEnd); - var state = context.state; - - // Run overlays, adjust style array. - var loop = function ( o ) { - context.baseTokens = st; - var overlay = cm.state.overlays[o], i = 1, at = 0; - context.state = true; - runMode(cm, line.text, overlay.mode, context, function (end, style) { - var start = i; - // Ensure there's a token end at the current position, and that i points at it - while (at < end) { - var i_end = st[i]; - if (i_end > end) - { st.splice(i, 1, end, st[i+1], i_end); } - i += 2; - at = Math.min(end, i_end); - } - if (!style) { return } - if (overlay.opaque) { - st.splice(start, i - start, end, "overlay " + style); - i = start + 2; - } else { - for (; start < i; start += 2) { - var cur = st[start+1]; - st[start+1] = (cur ? cur + " " : "") + "overlay " + style; - } - } - }, lineClasses); - context.state = state; - context.baseTokens = null; - context.baseTokenPos = 1; - }; - - for (var o = 0; o < cm.state.overlays.length; ++o) loop( o ); - - return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null} -} - -function getLineStyles(cm, line, updateFrontier) { - if (!line.styles || line.styles[0] != cm.state.modeGen) { - var context = getContextBefore(cm, lineNo(line)); - var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state); - var result = highlightLine(cm, line, context); - if (resetState) { context.state = resetState; } - line.stateAfter = context.save(!resetState); - line.styles = result.styles; - if (result.classes) { line.styleClasses = result.classes; } - else if (line.styleClasses) { line.styleClasses = null; } - if (updateFrontier === cm.doc.highlightFrontier) - { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); } - } - return line.styles -} - -function getContextBefore(cm, n, precise) { - var doc = cm.doc, display = cm.display; - if (!doc.mode.startState) { return new Context(doc, true, n) } - var start = findStartLine(cm, n, precise); - var saved = start > doc.first && getLine(doc, start - 1).stateAfter; - var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start); - - doc.iter(start, n, function (line) { - processLine(cm, line.text, context); - var pos = context.line; - line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null; - context.nextLine(); - }); - if (precise) { doc.modeFrontier = context.line; } - return context -} - -// Lightweight form of highlight -- proceed over this line and -// update state, but don't save a style array. Used for lines that -// aren't currently visible. -function processLine(cm, text, context, startAt) { - var mode = cm.doc.mode; - var stream = new StringStream(text, cm.options.tabSize, context); - stream.start = stream.pos = startAt || 0; - if (text == "") { callBlankLine(mode, context.state); } - while (!stream.eol()) { - readToken(mode, stream, context.state); - stream.start = stream.pos; - } -} - -function callBlankLine(mode, state) { - if (mode.blankLine) { return mode.blankLine(state) } - if (!mode.innerMode) { return } - var inner = innerMode(mode, state); - if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) } -} - -function readToken(mode, stream, state, inner) { - for (var i = 0; i < 10; i++) { - if (inner) { inner[0] = innerMode(mode, state).mode; } - var style = mode.token(stream, state); - if (stream.pos > stream.start) { return style } - } - throw new Error("Mode " + mode.name + " failed to advance stream.") -} - -var Token = function(stream, type, state) { - this.start = stream.start; this.end = stream.pos; - this.string = stream.current(); - this.type = type || null; - this.state = state; -}; - -// Utility for getTokenAt and getLineTokens -function takeToken(cm, pos, precise, asArray) { - var doc = cm.doc, mode = doc.mode, style; - pos = clipPos(doc, pos); - var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise); - var stream = new StringStream(line.text, cm.options.tabSize, context), tokens; - if (asArray) { tokens = []; } - while ((asArray || stream.pos < pos.ch) && !stream.eol()) { - stream.start = stream.pos; - style = readToken(mode, stream, context.state); - if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); } - } - return asArray ? tokens : new Token(stream, style, context.state) -} - -function extractLineClasses(type, output) { - if (type) { for (;;) { - var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); - if (!lineClass) { break } - type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); - var prop = lineClass[1] ? "bgClass" : "textClass"; - if (output[prop] == null) - { output[prop] = lineClass[2]; } - else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) - { output[prop] += " " + lineClass[2]; } - } } - return type -} - -// Run the given mode's parser over a line, calling f for each token. -function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { - var flattenSpans = mode.flattenSpans; - if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; } - var curStart = 0, curStyle = null; - var stream = new StringStream(text, cm.options.tabSize, context), style; - var inner = cm.options.addModeClass && [null]; - if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); } - while (!stream.eol()) { - if (stream.pos > cm.options.maxHighlightLength) { - flattenSpans = false; - if (forceToEnd) { processLine(cm, text, context, stream.pos); } - stream.pos = text.length; - style = null; - } else { - style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses); - } - if (inner) { - var mName = inner[0].name; - if (mName) { style = "m-" + (style ? mName + " " + style : mName); } - } - if (!flattenSpans || curStyle != style) { - while (curStart < stream.start) { - curStart = Math.min(stream.start, curStart + 5000); - f(curStart, curStyle); - } - curStyle = style; - } - stream.start = stream.pos; - } - while (curStart < stream.pos) { - // Webkit seems to refuse to render text nodes longer than 57444 - // characters, and returns inaccurate measurements in nodes - // starting around 5000 chars. - var pos = Math.min(stream.pos, curStart + 5000); - f(pos, curStyle); - curStart = pos; - } -} - -// Finds the line to start with when starting a parse. Tries to -// find a line with a stateAfter, so that it can start with a -// valid state. If that fails, it returns the line with the -// smallest indentation, which tends to need the least context to -// parse correctly. -function findStartLine(cm, n, precise) { - var minindent, minline, doc = cm.doc; - var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); - for (var search = n; search > lim; --search) { - if (search <= doc.first) { return doc.first } - var line = getLine(doc, search - 1), after = line.stateAfter; - if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) - { return search } - var indented = countColumn(line.text, null, cm.options.tabSize); - if (minline == null || minindent > indented) { - minline = search - 1; - minindent = indented; - } - } - return minline -} - -function retreatFrontier(doc, n) { - doc.modeFrontier = Math.min(doc.modeFrontier, n); - if (doc.highlightFrontier < n - 10) { return } - var start = doc.first; - for (var line = n - 1; line > start; line--) { - var saved = getLine(doc, line).stateAfter; - // change is on 3 - // state on line 1 looked ahead 2 -- so saw 3 - // test 1 + 2 < 3 should cover this - if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { - start = line + 1; - break - } - } - doc.highlightFrontier = Math.min(doc.highlightFrontier, start); -} - -// LINE DATA STRUCTURE - -// Line objects. These hold state related to a line, including -// highlighting info (the styles array). -var Line = function(text, markedSpans, estimateHeight) { - this.text = text; - attachMarkedSpans(this, markedSpans); - this.height = estimateHeight ? estimateHeight(this) : 1; -}; - -Line.prototype.lineNo = function () { return lineNo(this) }; -eventMixin(Line); - -// Change the content (text, markers) of a line. Automatically -// invalidates cached information and tries to re-estimate the -// line's height. -function updateLine(line, text, markedSpans, estimateHeight) { - line.text = text; - if (line.stateAfter) { line.stateAfter = null; } - if (line.styles) { line.styles = null; } - if (line.order != null) { line.order = null; } - detachMarkedSpans(line); - attachMarkedSpans(line, markedSpans); - var estHeight = estimateHeight ? estimateHeight(line) : 1; - if (estHeight != line.height) { updateLineHeight(line, estHeight); } -} - -// Detach a line from the document tree and its markers. -function cleanUpLine(line) { - line.parent = null; - detachMarkedSpans(line); -} - -// Convert a style as returned by a mode (either null, or a string -// containing one or more styles) to a CSS style. This is cached, -// and also looks for line-wide styles. -var styleToClassCache = {}; -var styleToClassCacheWithMode = {}; -function interpretTokenStyle(style, options) { - if (!style || /^\s*$/.test(style)) { return null } - var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; - return cache[style] || - (cache[style] = style.replace(/\S+/g, "cm-$&")) -} - -// Render the DOM representation of the text of a line. Also builds -// up a 'line map', which points at the DOM nodes that represent -// specific stretches of text, and is used by the measuring code. -// The returned object contains the DOM node, this map, and -// information about line-wide styles that were set by the mode. -function buildLineContent(cm, lineView) { - // The padding-right forces the element to have a 'border', which - // is needed on Webkit to be able to get line-level bounding - // rectangles for it (in measureChar). - var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null); - var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content, - col: 0, pos: 0, cm: cm, - trailingSpace: false, - splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}; - lineView.measure = {}; - - // Iterate over the logical lines that make up this visual line. - for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { - var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0); - builder.pos = 0; - builder.addToken = buildToken; - // Optionally wire in some hacks into the token-rendering - // algorithm, to deal with browser quirks. - if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) - { builder.addToken = buildTokenBadBidi(builder.addToken, order); } - builder.map = []; - var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); - insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); - if (line.styleClasses) { - if (line.styleClasses.bgClass) - { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); } - if (line.styleClasses.textClass) - { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); } - } - - // Ensure at least a single node is present, for measuring. - if (builder.map.length == 0) - { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); } - - // Store the map and a cache object for the current logical line - if (i == 0) { - lineView.measure.map = builder.map; - lineView.measure.cache = {}; - } else { - (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map) - ;(lineView.measure.caches || (lineView.measure.caches = [])).push({}); - } - } - - // See issue #2901 - if (webkit) { - var last = builder.content.lastChild; - if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) - { builder.content.className = "cm-tab-wrap-hack"; } - } - - signal(cm, "renderLine", cm, lineView.line, builder.pre); - if (builder.pre.className) - { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); } - - return builder -} - -function defaultSpecialCharPlaceholder(ch) { - var token = elt("span", "\u2022", "cm-invalidchar"); - token.title = "\\u" + ch.charCodeAt(0).toString(16); - token.setAttribute("aria-label", token.title); - return token -} - -// Build up the DOM representation for a single token, and add it to -// the line map. Takes care to render special characters separately. -function buildToken(builder, text, style, startStyle, endStyle, title, css) { - if (!text) { return } - var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text; - var special = builder.cm.state.specialChars, mustWrap = false; - var content; - if (!special.test(text)) { - builder.col += text.length; - content = document.createTextNode(displayText); - builder.map.push(builder.pos, builder.pos + text.length, content); - if (ie && ie_version < 9) { mustWrap = true; } - builder.pos += text.length; - } else { - content = document.createDocumentFragment(); - var pos = 0; - while (true) { - special.lastIndex = pos; - var m = special.exec(text); - var skipped = m ? m.index - pos : text.length - pos; - if (skipped) { - var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); - if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); } - else { content.appendChild(txt); } - builder.map.push(builder.pos, builder.pos + skipped, txt); - builder.col += skipped; - builder.pos += skipped; - } - if (!m) { break } - pos += skipped + 1; - var txt$1 = (void 0); - if (m[0] == "\t") { - var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; - txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); - txt$1.setAttribute("role", "presentation"); - txt$1.setAttribute("cm-text", "\t"); - builder.col += tabWidth; - } else if (m[0] == "\r" || m[0] == "\n") { - txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); - txt$1.setAttribute("cm-text", m[0]); - builder.col += 1; - } else { - txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); - txt$1.setAttribute("cm-text", m[0]); - if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); } - else { content.appendChild(txt$1); } - builder.col += 1; - } - builder.map.push(builder.pos, builder.pos + 1, txt$1); - builder.pos++; - } - } - builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; - if (style || startStyle || endStyle || mustWrap || css) { - var fullStyle = style || ""; - if (startStyle) { fullStyle += startStyle; } - if (endStyle) { fullStyle += endStyle; } - var token = elt("span", [content], fullStyle, css); - if (title) { token.title = title; } - return builder.content.appendChild(token) - } - builder.content.appendChild(content); -} - -function splitSpaces(text, trailingBefore) { - if (text.length > 1 && !/ /.test(text)) { return text } - var spaceBefore = trailingBefore, result = ""; - for (var i = 0; i < text.length; i++) { - var ch = text.charAt(i); - if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) - { ch = "\u00a0"; } - result += ch; - spaceBefore = ch == " "; - } - return result -} - -// Work around nonsense dimensions being reported for stretches of -// right-to-left text. -function buildTokenBadBidi(inner, order) { - return function (builder, text, style, startStyle, endStyle, title, css) { - style = style ? style + " cm-force-border" : "cm-force-border"; - var start = builder.pos, end = start + text.length; - for (;;) { - // Find the part that overlaps with the start of this text - var part = (void 0); - for (var i = 0; i < order.length; i++) { - part = order[i]; - if (part.to > start && part.from <= start) { break } - } - if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) } - inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css); - startStyle = null; - text = text.slice(part.to - start); - start = part.to; - } - } -} - -function buildCollapsedSpan(builder, size, marker, ignoreWidget) { - var widget = !ignoreWidget && marker.widgetNode; - if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); } - if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { - if (!widget) - { widget = builder.content.appendChild(document.createElement("span")); } - widget.setAttribute("cm-marker", marker.id); - } - if (widget) { - builder.cm.display.input.setUneditable(widget); - builder.content.appendChild(widget); - } - builder.pos += size; - builder.trailingSpace = false; -} - -// Outputs a number of spans to make up a line, taking highlighting -// and marked text into account. -function insertLineContent(line, builder, styles) { - var spans = line.markedSpans, allText = line.text, at = 0; - if (!spans) { - for (var i$1 = 1; i$1 < styles.length; i$1+=2) - { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); } - return - } - - var len = allText.length, pos = 0, i = 1, text = "", style, css; - var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; - for (;;) { - if (nextChange == pos) { // Update current marker set - spanStyle = spanEndStyle = spanStartStyle = title = css = ""; - collapsed = null; nextChange = Infinity; - var foundBookmarks = [], endStyles = (void 0); - for (var j = 0; j < spans.length; ++j) { - var sp = spans[j], m = sp.marker; - if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { - foundBookmarks.push(m); - } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { - if (sp.to != null && sp.to != pos && nextChange > sp.to) { - nextChange = sp.to; - spanEndStyle = ""; - } - if (m.className) { spanStyle += " " + m.className; } - if (m.css) { css = (css ? css + ";" : "") + m.css; } - if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; } - if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); } - if (m.title && !title) { title = m.title; } - if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) - { collapsed = sp; } - } else if (sp.from > pos && nextChange > sp.from) { - nextChange = sp.from; - } - } - if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) - { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } } - - if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) - { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } } - if (collapsed && (collapsed.from || 0) == pos) { - buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, - collapsed.marker, collapsed.from == null); - if (collapsed.to == null) { return } - if (collapsed.to == pos) { collapsed = false; } - } - } - if (pos >= len) { break } - - var upto = Math.min(len, nextChange); - while (true) { - if (text) { - var end = pos + text.length; - if (!collapsed) { - var tokenText = end > upto ? text.slice(0, upto - pos) : text; - builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, - spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css); - } - if (end >= upto) {text = text.slice(upto - pos); pos = upto; break} - pos = end; - spanStartStyle = ""; - } - text = allText.slice(at, at = styles[i++]); - style = interpretTokenStyle(styles[i++], builder.cm.options); - } - } -} - - -// These objects are used to represent the visible (currently drawn) -// part of the document. A LineView may correspond to multiple -// logical lines, if those are connected by collapsed ranges. -function LineView(doc, line, lineN) { - // The starting line - this.line = line; - // Continuing lines, if any - this.rest = visualLineContinued(line); - // Number of logical lines in this visual line - this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; - this.node = this.text = null; - this.hidden = lineIsHidden(doc, line); -} - -// Create a range of LineView objects for the given lines. -function buildViewArray(cm, from, to) { - var array = [], nextPos; - for (var pos = from; pos < to; pos = nextPos) { - var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); - nextPos = pos + view.size; - array.push(view); - } - return array -} - -var operationGroup = null; - -function pushOperation(op) { - if (operationGroup) { - operationGroup.ops.push(op); - } else { - op.ownsGroup = operationGroup = { - ops: [op], - delayedCallbacks: [] - }; - } -} - -function fireCallbacksForOps(group) { - // Calls delayed callbacks and cursorActivity handlers until no - // new ones appear - var callbacks = group.delayedCallbacks, i = 0; - do { - for (; i < callbacks.length; i++) - { callbacks[i].call(null); } - for (var j = 0; j < group.ops.length; j++) { - var op = group.ops[j]; - if (op.cursorActivityHandlers) - { while (op.cursorActivityCalled < op.cursorActivityHandlers.length) - { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } } - } - } while (i < callbacks.length) -} - -function finishOperation(op, endCb) { - var group = op.ownsGroup; - if (!group) { return } - - try { fireCallbacksForOps(group); } - finally { - operationGroup = null; - endCb(group); - } -} - -var orphanDelayedCallbacks = null; - -// Often, we want to signal events at a point where we are in the -// middle of some work, but don't want the handler to start calling -// other methods on the editor, which might be in an inconsistent -// state or simply not expect any other events to happen. -// signalLater looks whether there are any handlers, and schedules -// them to be executed when the last operation ends, or, if no -// operation is active, when a timeout fires. -function signalLater(emitter, type /*, values...*/) { - var arr = getHandlers(emitter, type); - if (!arr.length) { return } - var args = Array.prototype.slice.call(arguments, 2), list; - if (operationGroup) { - list = operationGroup.delayedCallbacks; - } else if (orphanDelayedCallbacks) { - list = orphanDelayedCallbacks; - } else { - list = orphanDelayedCallbacks = []; - setTimeout(fireOrphanDelayed, 0); - } - var loop = function ( i ) { - list.push(function () { return arr[i].apply(null, args); }); - }; - - for (var i = 0; i < arr.length; ++i) - loop( i ); -} - -function fireOrphanDelayed() { - var delayed = orphanDelayedCallbacks; - orphanDelayedCallbacks = null; - for (var i = 0; i < delayed.length; ++i) { delayed[i](); } -} - -// When an aspect of a line changes, a string is added to -// lineView.changes. This updates the relevant part of the line's -// DOM structure. -function updateLineForChanges(cm, lineView, lineN, dims) { - for (var j = 0; j < lineView.changes.length; j++) { - var type = lineView.changes[j]; - if (type == "text") { updateLineText(cm, lineView); } - else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); } - else if (type == "class") { updateLineClasses(cm, lineView); } - else if (type == "widget") { updateLineWidgets(cm, lineView, dims); } - } - lineView.changes = null; -} - -// Lines with gutter elements, widgets or a background class need to -// be wrapped, and have the extra elements added to the wrapper div -function ensureLineWrapped(lineView) { - if (lineView.node == lineView.text) { - lineView.node = elt("div", null, null, "position: relative"); - if (lineView.text.parentNode) - { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); } - lineView.node.appendChild(lineView.text); - if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; } - } - return lineView.node -} - -function updateLineBackground(cm, lineView) { - var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; - if (cls) { cls += " CodeMirror-linebackground"; } - if (lineView.background) { - if (cls) { lineView.background.className = cls; } - else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } - } else if (cls) { - var wrap = ensureLineWrapped(lineView); - lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); - cm.display.input.setUneditable(lineView.background); - } -} - -// Wrapper around buildLineContent which will reuse the structure -// in display.externalMeasured when possible. -function getLineContent(cm, lineView) { - var ext = cm.display.externalMeasured; - if (ext && ext.line == lineView.line) { - cm.display.externalMeasured = null; - lineView.measure = ext.measure; - return ext.built - } - return buildLineContent(cm, lineView) -} - -// Redraw the line's text. Interacts with the background and text -// classes because the mode may output tokens that influence these -// classes. -function updateLineText(cm, lineView) { - var cls = lineView.text.className; - var built = getLineContent(cm, lineView); - if (lineView.text == lineView.node) { lineView.node = built.pre; } - lineView.text.parentNode.replaceChild(built.pre, lineView.text); - lineView.text = built.pre; - if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { - lineView.bgClass = built.bgClass; - lineView.textClass = built.textClass; - updateLineClasses(cm, lineView); - } else if (cls) { - lineView.text.className = cls; - } -} - -function updateLineClasses(cm, lineView) { - updateLineBackground(cm, lineView); - if (lineView.line.wrapClass) - { ensureLineWrapped(lineView).className = lineView.line.wrapClass; } - else if (lineView.node != lineView.text) - { lineView.node.className = ""; } - var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; - lineView.text.className = textClass || ""; -} - -function updateLineGutter(cm, lineView, lineN, dims) { - if (lineView.gutter) { - lineView.node.removeChild(lineView.gutter); - lineView.gutter = null; - } - if (lineView.gutterBackground) { - lineView.node.removeChild(lineView.gutterBackground); - lineView.gutterBackground = null; - } - if (lineView.line.gutterClass) { - var wrap = ensureLineWrapped(lineView); - lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, - ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px")); - cm.display.input.setUneditable(lineView.gutterBackground); - wrap.insertBefore(lineView.gutterBackground, lineView.text); - } - var markers = lineView.line.gutterMarkers; - if (cm.options.lineNumbers || markers) { - var wrap$1 = ensureLineWrapped(lineView); - var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px")); - cm.display.input.setUneditable(gutterWrap); - wrap$1.insertBefore(gutterWrap, lineView.text); - if (lineView.line.gutterClass) - { gutterWrap.className += " " + lineView.line.gutterClass; } - if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) - { lineView.lineNumber = gutterWrap.appendChild( - elt("div", lineNumberFor(cm.options, lineN), - "CodeMirror-linenumber CodeMirror-gutter-elt", - ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); } - if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) { - var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; - if (found) - { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", - ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); } - } } - } -} - -function updateLineWidgets(cm, lineView, dims) { - if (lineView.alignable) { lineView.alignable = null; } - for (var node = lineView.node.firstChild, next = (void 0); node; node = next) { - next = node.nextSibling; - if (node.className == "CodeMirror-linewidget") - { lineView.node.removeChild(node); } - } - insertLineWidgets(cm, lineView, dims); -} - -// Build a line's DOM representation from scratch -function buildLineElement(cm, lineView, lineN, dims) { - var built = getLineContent(cm, lineView); - lineView.text = lineView.node = built.pre; - if (built.bgClass) { lineView.bgClass = built.bgClass; } - if (built.textClass) { lineView.textClass = built.textClass; } - - updateLineClasses(cm, lineView); - updateLineGutter(cm, lineView, lineN, dims); - insertLineWidgets(cm, lineView, dims); - return lineView.node -} - -// A lineView may contain multiple logical lines (when merged by -// collapsed spans). The widgets for all of them need to be drawn. -function insertLineWidgets(cm, lineView, dims) { - insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); - if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) - { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } } -} - -function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { - if (!line.widgets) { return } - var wrap = ensureLineWrapped(lineView); - for (var i = 0, ws = line.widgets; i < ws.length; ++i) { - var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); - if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); } - positionLineWidget(widget, node, lineView, dims); - cm.display.input.setUneditable(node); - if (allowAbove && widget.above) - { wrap.insertBefore(node, lineView.gutter || lineView.text); } - else - { wrap.appendChild(node); } - signalLater(widget, "redraw"); - } -} - -function positionLineWidget(widget, node, lineView, dims) { - if (widget.noHScroll) { - (lineView.alignable || (lineView.alignable = [])).push(node); - var width = dims.wrapperWidth; - node.style.left = dims.fixedPos + "px"; - if (!widget.coverGutter) { - width -= dims.gutterTotalWidth; - node.style.paddingLeft = dims.gutterTotalWidth + "px"; - } - node.style.width = width + "px"; - } - if (widget.coverGutter) { - node.style.zIndex = 5; - node.style.position = "relative"; - if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; } - } -} - -function widgetHeight(widget) { - if (widget.height != null) { return widget.height } - var cm = widget.doc.cm; - if (!cm) { return 0 } - if (!contains(document.body, widget.node)) { - var parentStyle = "position: relative;"; - if (widget.coverGutter) - { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; } - if (widget.noHScroll) - { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; } - removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); - } - return widget.height = widget.node.parentNode.offsetHeight -} - -// Return true when the given mouse event happened in a widget -function eventInWidget(display, e) { - for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { - if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || - (n.parentNode == display.sizer && n != display.mover)) - { return true } - } -} - -// POSITION MEASUREMENT - -function paddingTop(display) {return display.lineSpace.offsetTop} -function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight} -function paddingH(display) { - if (display.cachedPaddingH) { return display.cachedPaddingH } - var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); - var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; - var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; - if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; } - return data -} - -function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth } -function displayWidth(cm) { - return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth -} -function displayHeight(cm) { - return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight -} - -// Ensure the lineView.wrapping.heights array is populated. This is -// an array of bottom offsets for the lines that make up a drawn -// line. When lineWrapping is on, there might be more than one -// height. -function ensureLineHeights(cm, lineView, rect) { - var wrapping = cm.options.lineWrapping; - var curWidth = wrapping && displayWidth(cm); - if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { - var heights = lineView.measure.heights = []; - if (wrapping) { - lineView.measure.width = curWidth; - var rects = lineView.text.firstChild.getClientRects(); - for (var i = 0; i < rects.length - 1; i++) { - var cur = rects[i], next = rects[i + 1]; - if (Math.abs(cur.bottom - next.bottom) > 2) - { heights.push((cur.bottom + next.top) / 2 - rect.top); } - } - } - heights.push(rect.bottom - rect.top); - } -} - -// Find a line map (mapping character offsets to text nodes) and a -// measurement cache for the given line number. (A line view might -// contain multiple lines when collapsed ranges are present.) -function mapFromLineView(lineView, line, lineN) { - if (lineView.line == line) - { return {map: lineView.measure.map, cache: lineView.measure.cache} } - for (var i = 0; i < lineView.rest.length; i++) - { if (lineView.rest[i] == line) - { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } } - for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) - { if (lineNo(lineView.rest[i$1]) > lineN) - { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } } -} - -// Render a line into the hidden node display.externalMeasured. Used -// when measurement is needed for a line that's not in the viewport. -function updateExternalMeasurement(cm, line) { - line = visualLine(line); - var lineN = lineNo(line); - var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); - view.lineN = lineN; - var built = view.built = buildLineContent(cm, view); - view.text = built.pre; - removeChildrenAndAdd(cm.display.lineMeasure, built.pre); - return view -} - -// Get a {top, bottom, left, right} box (in line-local coordinates) -// for a given character. -function measureChar(cm, line, ch, bias) { - return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias) -} - -// Find a line view that corresponds to the given line number. -function findViewForLine(cm, lineN) { - if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) - { return cm.display.view[findViewIndex(cm, lineN)] } - var ext = cm.display.externalMeasured; - if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) - { return ext } -} - -// Measurement can be split in two steps, the set-up work that -// applies to the whole line, and the measurement of the actual -// character. Functions like coordsChar, that need to do a lot of -// measurements in a row, can thus ensure that the set-up work is -// only done once. -function prepareMeasureForLine(cm, line) { - var lineN = lineNo(line); - var view = findViewForLine(cm, lineN); - if (view && !view.text) { - view = null; - } else if (view && view.changes) { - updateLineForChanges(cm, view, lineN, getDimensions(cm)); - cm.curOp.forceUpdate = true; - } - if (!view) - { view = updateExternalMeasurement(cm, line); } - - var info = mapFromLineView(view, line, lineN); - return { - line: line, view: view, rect: null, - map: info.map, cache: info.cache, before: info.before, - hasHeights: false - } -} - -// Given a prepared measurement object, measures the position of an -// actual character (or fetches it from the cache). -function measureCharPrepared(cm, prepared, ch, bias, varHeight) { - if (prepared.before) { ch = -1; } - var key = ch + (bias || ""), found; - if (prepared.cache.hasOwnProperty(key)) { - found = prepared.cache[key]; - } else { - if (!prepared.rect) - { prepared.rect = prepared.view.text.getBoundingClientRect(); } - if (!prepared.hasHeights) { - ensureLineHeights(cm, prepared.view, prepared.rect); - prepared.hasHeights = true; - } - found = measureCharInner(cm, prepared, ch, bias); - if (!found.bogus) { prepared.cache[key] = found; } - } - return {left: found.left, right: found.right, - top: varHeight ? found.rtop : found.top, - bottom: varHeight ? found.rbottom : found.bottom} -} - -var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; - -function nodeAndOffsetInLineMap(map$$1, ch, bias) { - var node, start, end, collapse, mStart, mEnd; - // First, search the line map for the text node corresponding to, - // or closest to, the target character. - for (var i = 0; i < map$$1.length; i += 3) { - mStart = map$$1[i]; - mEnd = map$$1[i + 1]; - if (ch < mStart) { - start = 0; end = 1; - collapse = "left"; - } else if (ch < mEnd) { - start = ch - mStart; - end = start + 1; - } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) { - end = mEnd - mStart; - start = end - 1; - if (ch >= mEnd) { collapse = "right"; } - } - if (start != null) { - node = map$$1[i + 2]; - if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) - { collapse = bias; } - if (bias == "left" && start == 0) - { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) { - node = map$$1[(i -= 3) + 2]; - collapse = "left"; - } } - if (bias == "right" && start == mEnd - mStart) - { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) { - node = map$$1[(i += 3) + 2]; - collapse = "right"; - } } - break - } - } - return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd} -} - -function getUsefulRect(rects, bias) { - var rect = nullRect; - if (bias == "left") { for (var i = 0; i < rects.length; i++) { - if ((rect = rects[i]).left != rect.right) { break } - } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { - if ((rect = rects[i$1]).left != rect.right) { break } - } } - return rect -} - -function measureCharInner(cm, prepared, ch, bias) { - var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); - var node = place.node, start = place.start, end = place.end, collapse = place.collapse; - - var rect; - if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. - for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned - while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; } - while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; } - if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) - { rect = node.parentNode.getBoundingClientRect(); } - else - { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); } - if (rect.left || rect.right || start == 0) { break } - end = start; - start = start - 1; - collapse = "right"; - } - if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); } - } else { // If it is a widget, simply get the box for the whole widget. - if (start > 0) { collapse = bias = "right"; } - var rects; - if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) - { rect = rects[bias == "right" ? rects.length - 1 : 0]; } - else - { rect = node.getBoundingClientRect(); } - } - if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { - var rSpan = node.parentNode.getClientRects()[0]; - if (rSpan) - { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; } - else - { rect = nullRect; } - } - - var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; - var mid = (rtop + rbot) / 2; - var heights = prepared.view.measure.heights; - var i = 0; - for (; i < heights.length - 1; i++) - { if (mid < heights[i]) { break } } - var top = i ? heights[i - 1] : 0, bot = heights[i]; - var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, - right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, - top: top, bottom: bot}; - if (!rect.left && !rect.right) { result.bogus = true; } - if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } - - return result -} - -// Work around problem with bounding client rects on ranges being -// returned incorrectly when zoomed on IE10 and below. -function maybeUpdateRectForZooming(measure, rect) { - if (!window.screen || screen.logicalXDPI == null || - screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) - { return rect } - var scaleX = screen.logicalXDPI / screen.deviceXDPI; - var scaleY = screen.logicalYDPI / screen.deviceYDPI; - return {left: rect.left * scaleX, right: rect.right * scaleX, - top: rect.top * scaleY, bottom: rect.bottom * scaleY} -} - -function clearLineMeasurementCacheFor(lineView) { - if (lineView.measure) { - lineView.measure.cache = {}; - lineView.measure.heights = null; - if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) - { lineView.measure.caches[i] = {}; } } - } -} - -function clearLineMeasurementCache(cm) { - cm.display.externalMeasure = null; - removeChildren(cm.display.lineMeasure); - for (var i = 0; i < cm.display.view.length; i++) - { clearLineMeasurementCacheFor(cm.display.view[i]); } -} - -function clearCaches(cm) { - clearLineMeasurementCache(cm); - cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; - if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; } - cm.display.lineNumChars = null; -} - -function pageScrollX() { - // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 - // which causes page_Offset and bounding client rects to use - // different reference viewports and invalidate our calculations. - if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) } - return window.pageXOffset || (document.documentElement || document.body).scrollLeft -} -function pageScrollY() { - if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) } - return window.pageYOffset || (document.documentElement || document.body).scrollTop -} - -function widgetTopHeight(lineObj) { - var height = 0; - if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above) - { height += widgetHeight(lineObj.widgets[i]); } } } - return height -} - -// Converts a {top, bottom, left, right} box from line-local -// coordinates into another coordinate system. Context may be one of -// "line", "div" (display.lineDiv), "local"./null (editor), "window", -// or "page". -function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { - if (!includeWidgets) { - var height = widgetTopHeight(lineObj); - rect.top += height; rect.bottom += height; - } - if (context == "line") { return rect } - if (!context) { context = "local"; } - var yOff = heightAtLine(lineObj); - if (context == "local") { yOff += paddingTop(cm.display); } - else { yOff -= cm.display.viewOffset; } - if (context == "page" || context == "window") { - var lOff = cm.display.lineSpace.getBoundingClientRect(); - yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); - var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); - rect.left += xOff; rect.right += xOff; - } - rect.top += yOff; rect.bottom += yOff; - return rect -} - -// Coverts a box from "div" coords to another coordinate system. -// Context may be "window", "page", "div", or "local"./null. -function fromCoordSystem(cm, coords, context) { - if (context == "div") { return coords } - var left = coords.left, top = coords.top; - // First move into "page" coordinate system - if (context == "page") { - left -= pageScrollX(); - top -= pageScrollY(); - } else if (context == "local" || !context) { - var localBox = cm.display.sizer.getBoundingClientRect(); - left += localBox.left; - top += localBox.top; - } - - var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); - return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top} -} - -function charCoords(cm, pos, context, lineObj, bias) { - if (!lineObj) { lineObj = getLine(cm.doc, pos.line); } - return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context) -} - -// Returns a box for a given cursor position, which may have an -// 'other' property containing the position of the secondary cursor -// on a bidi boundary. -// A cursor Pos(line, char, "before") is on the same visual line as `char - 1` -// and after `char - 1` in writing order of `char - 1` -// A cursor Pos(line, char, "after") is on the same visual line as `char` -// and before `char` in writing order of `char` -// Examples (upper-case letters are RTL, lower-case are LTR): -// Pos(0, 1, ...) -// before after -// ab a|b a|b -// aB a|B aB| -// Ab |Ab A|b -// AB B|A B|A -// Every position after the last character on a line is considered to stick -// to the last character on the line. -function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { - lineObj = lineObj || getLine(cm.doc, pos.line); - if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } - function get(ch, right) { - var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); - if (right) { m.left = m.right; } else { m.right = m.left; } - return intoCoordSystem(cm, lineObj, m, context) - } - var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky; - if (ch >= lineObj.text.length) { - ch = lineObj.text.length; - sticky = "before"; - } else if (ch <= 0) { - ch = 0; - sticky = "after"; - } - if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") } - - function getBidi(ch, partPos, invert) { - var part = order[partPos], right = part.level == 1; - return get(invert ? ch - 1 : ch, right != invert) - } - var partPos = getBidiPartAt(order, ch, sticky); - var other = bidiOther; - var val = getBidi(ch, partPos, sticky == "before"); - if (other != null) { val.other = getBidi(ch, other, sticky != "before"); } - return val -} - -// Used to cheaply estimate the coordinates for a position. Used for -// intermediate scroll updates. -function estimateCoords(cm, pos) { - var left = 0; - pos = clipPos(cm.doc, pos); - if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; } - var lineObj = getLine(cm.doc, pos.line); - var top = heightAtLine(lineObj) + paddingTop(cm.display); - return {left: left, right: left, top: top, bottom: top + lineObj.height} -} - -// Positions returned by coordsChar contain some extra information. -// xRel is the relative x position of the input coordinates compared -// to the found position (so xRel > 0 means the coordinates are to -// the right of the character position, for example). When outside -// is true, that means the coordinates lie outside the line's -// vertical range. -function PosWithInfo(line, ch, sticky, outside, xRel) { - var pos = Pos(line, ch, sticky); - pos.xRel = xRel; - if (outside) { pos.outside = true; } - return pos -} - -// Compute the character position closest to the given coordinates. -// Input must be lineSpace-local ("div" coordinate system). -function coordsChar(cm, x, y) { - var doc = cm.doc; - y += cm.display.viewOffset; - if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) } - var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; - if (lineN > last) - { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) } - if (x < 0) { x = 0; } - - var lineObj = getLine(doc, lineN); - for (;;) { - var found = coordsCharInner(cm, lineObj, lineN, x, y); - var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0)); - if (!collapsed) { return found } - var rangeEnd = collapsed.find(1); - if (rangeEnd.line == lineN) { return rangeEnd } - lineObj = getLine(doc, lineN = rangeEnd.line); - } -} - -function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { - y -= widgetTopHeight(lineObj); - var end = lineObj.text.length; - var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0); - end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end); - return {begin: begin, end: end} -} - -function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { - if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } - var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top; - return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop) -} - -// Returns true if the given side of a box is after the given -// coordinates, in top-to-bottom, left-to-right order. -function boxIsAfter(box, x, y, left) { - return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x -} - -function coordsCharInner(cm, lineObj, lineNo$$1, x, y) { - // Move y into line-local coordinate space - y -= heightAtLine(lineObj); - var preparedMeasure = prepareMeasureForLine(cm, lineObj); - // When directly calling `measureCharPrepared`, we have to adjust - // for the widgets at this line. - var widgetHeight$$1 = widgetTopHeight(lineObj); - var begin = 0, end = lineObj.text.length, ltr = true; - - var order = getOrder(lineObj, cm.doc.direction); - // If the line isn't plain left-to-right text, first figure out - // which bidi section the coordinates fall into. - if (order) { - var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart) - (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y); - ltr = part.level != 1; - // The awkward -1 offsets are needed because findFirst (called - // on these below) will treat its first bound as inclusive, - // second as exclusive, but we want to actually address the - // characters in the part's range - begin = ltr ? part.from : part.to - 1; - end = ltr ? part.to : part.from - 1; - } - - // A binary search to find the first character whose bounding box - // starts after the coordinates. If we run across any whose box wrap - // the coordinates, store that. - var chAround = null, boxAround = null; - var ch = findFirst(function (ch) { - var box = measureCharPrepared(cm, preparedMeasure, ch); - box.top += widgetHeight$$1; box.bottom += widgetHeight$$1; - if (!boxIsAfter(box, x, y, false)) { return false } - if (box.top <= y && box.left <= x) { - chAround = ch; - boxAround = box; - } - return true - }, begin, end); - - var baseX, sticky, outside = false; - // If a box around the coordinates was found, use that - if (boxAround) { - // Distinguish coordinates nearer to the left or right side of the box - var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr; - ch = chAround + (atStart ? 0 : 1); - sticky = atStart ? "after" : "before"; - baseX = atLeft ? boxAround.left : boxAround.right; - } else { - // (Adjust for extended bound, if necessary.) - if (!ltr && (ch == end || ch == begin)) { ch++; } - // To determine which side to associate with, get the box to the - // left of the character and compare it's vertical position to the - // coordinates - sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : - (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ? - "after" : "before"; - // Now get accurate coordinates for this place, in order to get a - // base X position - var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), "line", lineObj, preparedMeasure); - baseX = coords.left; - outside = y < coords.top || y >= coords.bottom; - } - - ch = skipExtendingChars(lineObj.text, ch, 1); - return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX) -} - -function coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) { - // Bidi parts are sorted left-to-right, and in a non-line-wrapping - // situation, we can take this ordering to correspond to the visual - // ordering. This finds the first part whose end is after the given - // coordinates. - var index = findFirst(function (i) { - var part = order[i], ltr = part.level != 1; - return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? "before" : "after"), - "line", lineObj, preparedMeasure), x, y, true) - }, 0, order.length - 1); - var part = order[index]; - // If this isn't the first part, the part's start is also after - // the coordinates, and the coordinates aren't on the same line as - // that start, move one part back. - if (index > 0) { - var ltr = part.level != 1; - var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? "after" : "before"), - "line", lineObj, preparedMeasure); - if (boxIsAfter(start, x, y, true) && start.top > y) - { part = order[index - 1]; } - } - return part -} - -function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { - // In a wrapped line, rtl text on wrapping boundaries can do things - // that don't correspond to the ordering in our `order` array at - // all, so a binary search doesn't work, and we want to return a - // part that only spans one line so that the binary search in - // coordsCharInner is safe. As such, we first find the extent of the - // wrapped line, and then do a flat search in which we discard any - // spans that aren't on the line. - var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y); - var begin = ref.begin; - var end = ref.end; - if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; } - var part = null, closestDist = null; - for (var i = 0; i < order.length; i++) { - var p = order[i]; - if (p.from >= end || p.to <= begin) { continue } - var ltr = p.level != 1; - var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; - // Weigh against spans ending before this, so that they are only - // picked if nothing ends after - var dist = endX < x ? x - endX + 1e9 : endX - x; - if (!part || closestDist > dist) { - part = p; - closestDist = dist; - } - } - if (!part) { part = order[order.length - 1]; } - // Clip the part to the wrapped line. - if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; } - if (part.to > end) { part = {from: part.from, to: end, level: part.level}; } - return part -} - -var measureText; -// Compute the default text height. -function textHeight(display) { - if (display.cachedTextHeight != null) { return display.cachedTextHeight } - if (measureText == null) { - measureText = elt("pre"); - // Measure a bunch of lines, for browsers that compute - // fractional heights. - for (var i = 0; i < 49; ++i) { - measureText.appendChild(document.createTextNode("x")); - measureText.appendChild(elt("br")); - } - measureText.appendChild(document.createTextNode("x")); - } - removeChildrenAndAdd(display.measure, measureText); - var height = measureText.offsetHeight / 50; - if (height > 3) { display.cachedTextHeight = height; } - removeChildren(display.measure); - return height || 1 -} - -// Compute the default character width. -function charWidth(display) { - if (display.cachedCharWidth != null) { return display.cachedCharWidth } - var anchor = elt("span", "xxxxxxxxxx"); - var pre = elt("pre", [anchor]); - removeChildrenAndAdd(display.measure, pre); - var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; - if (width > 2) { display.cachedCharWidth = width; } - return width || 10 -} - -// Do a bulk-read of the DOM positions and sizes needed to draw the -// view, so that we don't interleave reading and writing to the DOM. -function getDimensions(cm) { - var d = cm.display, left = {}, width = {}; - var gutterLeft = d.gutters.clientLeft; - for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { - left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; - width[cm.options.gutters[i]] = n.clientWidth; - } - return {fixedPos: compensateForHScroll(d), - gutterTotalWidth: d.gutters.offsetWidth, - gutterLeft: left, - gutterWidth: width, - wrapperWidth: d.wrapper.clientWidth} -} - -// Computes display.scroller.scrollLeft + display.gutters.offsetWidth, -// but using getBoundingClientRect to get a sub-pixel-accurate -// result. -function compensateForHScroll(display) { - return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left -} - -// Returns a function that estimates the height of a line, to use as -// first approximation until the line becomes visible (and is thus -// properly measurable). -function estimateHeight(cm) { - var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; - var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); - return function (line) { - if (lineIsHidden(cm.doc, line)) { return 0 } - - var widgetsHeight = 0; - if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) { - if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; } - } } - - if (wrapping) - { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th } - else - { return widgetsHeight + th } - } -} - -function estimateLineHeights(cm) { - var doc = cm.doc, est = estimateHeight(cm); - doc.iter(function (line) { - var estHeight = est(line); - if (estHeight != line.height) { updateLineHeight(line, estHeight); } - }); -} - -// Given a mouse event, find the corresponding position. If liberal -// is false, it checks whether a gutter or scrollbar was clicked, -// and returns null if it was. forRect is used by rectangular -// selections, and tries to estimate a character position even for -// coordinates beyond the right of the text. -function posFromMouse(cm, e, liberal, forRect) { - var display = cm.display; - if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null } - - var x, y, space = display.lineSpace.getBoundingClientRect(); - // Fails unpredictably on IE[67] when mouse is dragged around quickly. - try { x = e.clientX - space.left; y = e.clientY - space.top; } - catch (e) { return null } - var coords = coordsChar(cm, x, y), line; - if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { - var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; - coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); - } - return coords -} - -// Find the view element corresponding to a given line. Return null -// when the line isn't visible. -function findViewIndex(cm, n) { - if (n >= cm.display.viewTo) { return null } - n -= cm.display.viewFrom; - if (n < 0) { return null } - var view = cm.display.view; - for (var i = 0; i < view.length; i++) { - n -= view[i].size; - if (n < 0) { return i } - } -} - -function updateSelection(cm) { - cm.display.input.showSelection(cm.display.input.prepareSelection()); -} - -function prepareSelection(cm, primary) { - if ( primary === void 0 ) primary = true; - - var doc = cm.doc, result = {}; - var curFragment = result.cursors = document.createDocumentFragment(); - var selFragment = result.selection = document.createDocumentFragment(); - - for (var i = 0; i < doc.sel.ranges.length; i++) { - if (!primary && i == doc.sel.primIndex) { continue } - var range$$1 = doc.sel.ranges[i]; - if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue } - var collapsed = range$$1.empty(); - if (collapsed || cm.options.showCursorWhenSelecting) - { drawSelectionCursor(cm, range$$1.head, curFragment); } - if (!collapsed) - { drawSelectionRange(cm, range$$1, selFragment); } - } - return result -} - -// Draws a cursor for the given range -function drawSelectionCursor(cm, head, output) { - var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); - - var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); - cursor.style.left = pos.left + "px"; - cursor.style.top = pos.top + "px"; - cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; - - if (pos.other) { - // Secondary cursor, shown when on a 'jump' in bi-directional text - var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); - otherCursor.style.display = ""; - otherCursor.style.left = pos.other.left + "px"; - otherCursor.style.top = pos.other.top + "px"; - otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; - } -} - -function cmpCoords(a, b) { return a.top - b.top || a.left - b.left } - -// Draws the given range as a highlighted selection -function drawSelectionRange(cm, range$$1, output) { - var display = cm.display, doc = cm.doc; - var fragment = document.createDocumentFragment(); - var padding = paddingH(cm.display), leftSide = padding.left; - var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; - var docLTR = doc.direction == "ltr"; - - function add(left, top, width, bottom) { - if (top < 0) { top = 0; } - top = Math.round(top); - bottom = Math.round(bottom); - fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px"))); - } - - function drawForLine(line, fromArg, toArg) { - var lineObj = getLine(doc, line); - var lineLen = lineObj.text.length; - var start, end; - function coords(ch, bias) { - return charCoords(cm, Pos(line, ch), "div", lineObj, bias) - } - - function wrapX(pos, dir, side) { - var extent = wrappedLineExtentChar(cm, lineObj, null, pos); - var prop = (dir == "ltr") == (side == "after") ? "left" : "right"; - var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1); - return coords(ch, prop)[prop] - } - - var order = getOrder(lineObj, doc.direction); - iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) { - var ltr = dir == "ltr"; - var fromPos = coords(from, ltr ? "left" : "right"); - var toPos = coords(to - 1, ltr ? "right" : "left"); - - var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen; - var first = i == 0, last = !order || i == order.length - 1; - if (toPos.top - fromPos.top <= 3) { // Single line - var openLeft = (docLTR ? openStart : openEnd) && first; - var openRight = (docLTR ? openEnd : openStart) && last; - var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left; - var right = openRight ? rightSide : (ltr ? toPos : fromPos).right; - add(left, fromPos.top, right - left, fromPos.bottom); - } else { // Multiple lines - var topLeft, topRight, botLeft, botRight; - if (ltr) { - topLeft = docLTR && openStart && first ? leftSide : fromPos.left; - topRight = docLTR ? rightSide : wrapX(from, dir, "before"); - botLeft = docLTR ? leftSide : wrapX(to, dir, "after"); - botRight = docLTR && openEnd && last ? rightSide : toPos.right; - } else { - topLeft = !docLTR ? leftSide : wrapX(from, dir, "before"); - topRight = !docLTR && openStart && first ? rightSide : fromPos.right; - botLeft = !docLTR && openEnd && last ? leftSide : toPos.left; - botRight = !docLTR ? rightSide : wrapX(to, dir, "after"); - } - add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom); - if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); } - add(botLeft, toPos.top, botRight - botLeft, toPos.bottom); - } - - if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; } - if (cmpCoords(toPos, start) < 0) { start = toPos; } - if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; } - if (cmpCoords(toPos, end) < 0) { end = toPos; } - }); - return {start: start, end: end} - } - - var sFrom = range$$1.from(), sTo = range$$1.to(); - if (sFrom.line == sTo.line) { - drawForLine(sFrom.line, sFrom.ch, sTo.ch); - } else { - var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); - var singleVLine = visualLine(fromLine) == visualLine(toLine); - var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; - var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; - if (singleVLine) { - if (leftEnd.top < rightStart.top - 2) { - add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); - add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); - } else { - add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); - } - } - if (leftEnd.bottom < rightStart.top) - { add(leftSide, leftEnd.bottom, null, rightStart.top); } - } - - output.appendChild(fragment); -} - -// Cursor-blinking -function restartBlink(cm) { - if (!cm.state.focused) { return } - var display = cm.display; - clearInterval(display.blinker); - var on = true; - display.cursorDiv.style.visibility = ""; - if (cm.options.cursorBlinkRate > 0) - { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; }, - cm.options.cursorBlinkRate); } - else if (cm.options.cursorBlinkRate < 0) - { display.cursorDiv.style.visibility = "hidden"; } -} - -function ensureFocus(cm) { - if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); } -} - -function delayBlurEvent(cm) { - cm.state.delayingBlurEvent = true; - setTimeout(function () { if (cm.state.delayingBlurEvent) { - cm.state.delayingBlurEvent = false; - onBlur(cm); - } }, 100); -} - -function onFocus(cm, e) { - if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; } - - if (cm.options.readOnly == "nocursor") { return } - if (!cm.state.focused) { - signal(cm, "focus", cm, e); - cm.state.focused = true; - addClass(cm.display.wrapper, "CodeMirror-focused"); - // This test prevents this from firing when a context - // menu is closed (since the input reset would kill the - // select-all detection hack) - if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { - cm.display.input.reset(); - if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730 - } - cm.display.input.receivedFocus(); - } - restartBlink(cm); -} -function onBlur(cm, e) { - if (cm.state.delayingBlurEvent) { return } - - if (cm.state.focused) { - signal(cm, "blur", cm, e); - cm.state.focused = false; - rmClass(cm.display.wrapper, "CodeMirror-focused"); - } - clearInterval(cm.display.blinker); - setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150); -} - -// Read the actual heights of the rendered lines, and update their -// stored heights to match. -function updateHeightsInViewport(cm) { - var display = cm.display; - var prevBottom = display.lineDiv.offsetTop; - for (var i = 0; i < display.view.length; i++) { - var cur = display.view[i], height = (void 0); - if (cur.hidden) { continue } - if (ie && ie_version < 8) { - var bot = cur.node.offsetTop + cur.node.offsetHeight; - height = bot - prevBottom; - prevBottom = bot; - } else { - var box = cur.node.getBoundingClientRect(); - height = box.bottom - box.top; - } - var diff = cur.line.height - height; - if (height < 2) { height = textHeight(display); } - if (diff > .005 || diff < -.005) { - updateLineHeight(cur.line, height); - updateWidgetHeight(cur.line); - if (cur.rest) { for (var j = 0; j < cur.rest.length; j++) - { updateWidgetHeight(cur.rest[j]); } } - } - } -} - -// Read and store the height of line widgets associated with the -// given line. -function updateWidgetHeight(line) { - if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) { - var w = line.widgets[i], parent = w.node.parentNode; - if (parent) { w.height = parent.offsetHeight; } - } } -} - -// Compute the lines that are visible in a given viewport (defaults -// the the current scroll position). viewport may contain top, -// height, and ensure (see op.scrollToPos) properties. -function visibleLines(display, doc, viewport) { - var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; - top = Math.floor(top - paddingTop(display)); - var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; - - var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); - // Ensure is a {from: {line, ch}, to: {line, ch}} object, and - // forces those lines into the viewport (if possible). - if (viewport && viewport.ensure) { - var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; - if (ensureFrom < from) { - from = ensureFrom; - to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); - } else if (Math.min(ensureTo, doc.lastLine()) >= to) { - from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); - to = ensureTo; - } - } - return {from: from, to: Math.max(to, from + 1)} -} - -// Re-align line numbers and gutter marks to compensate for -// horizontal scrolling. -function alignHorizontally(cm) { - var display = cm.display, view = display.view; - if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return } - var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; - var gutterW = display.gutters.offsetWidth, left = comp + "px"; - for (var i = 0; i < view.length; i++) { if (!view[i].hidden) { - if (cm.options.fixedGutter) { - if (view[i].gutter) - { view[i].gutter.style.left = left; } - if (view[i].gutterBackground) - { view[i].gutterBackground.style.left = left; } - } - var align = view[i].alignable; - if (align) { for (var j = 0; j < align.length; j++) - { align[j].style.left = left; } } - } } - if (cm.options.fixedGutter) - { display.gutters.style.left = (comp + gutterW) + "px"; } -} - -// Used to ensure that the line number gutter is still the right -// size for the current document size. Returns true when an update -// is needed. -function maybeUpdateLineNumberWidth(cm) { - if (!cm.options.lineNumbers) { return false } - var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; - if (last.length != display.lineNumChars) { - var test = display.measure.appendChild(elt("div", [elt("div", last)], - "CodeMirror-linenumber CodeMirror-gutter-elt")); - var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; - display.lineGutter.style.width = ""; - display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; - display.lineNumWidth = display.lineNumInnerWidth + padding; - display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; - display.lineGutter.style.width = display.lineNumWidth + "px"; - updateGutterSpace(cm); - return true - } - return false -} - -// SCROLLING THINGS INTO VIEW - -// If an editor sits on the top or bottom of the window, partially -// scrolled out of view, this ensures that the cursor is visible. -function maybeScrollWindow(cm, rect) { - if (signalDOMEvent(cm, "scrollCursorIntoView")) { return } - - var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; - if (rect.top + box.top < 0) { doScroll = true; } - else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; } - if (doScroll != null && !phantom) { - var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;")); - cm.display.lineSpace.appendChild(scrollNode); - scrollNode.scrollIntoView(doScroll); - cm.display.lineSpace.removeChild(scrollNode); - } -} - -// Scroll a given position into view (immediately), verifying that -// it actually became visible (as line heights are accurately -// measured, the position of something may 'drift' during drawing). -function scrollPosIntoView(cm, pos, end, margin) { - if (margin == null) { margin = 0; } - var rect; - if (!cm.options.lineWrapping && pos == end) { - // Set pos and end to the cursor positions around the character pos sticks to - // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch - // If pos == Pos(_, 0, "before"), pos and end are unchanged - pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos; - end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; - } - for (var limit = 0; limit < 5; limit++) { - var changed = false; - var coords = cursorCoords(cm, pos); - var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); - rect = {left: Math.min(coords.left, endCoords.left), - top: Math.min(coords.top, endCoords.top) - margin, - right: Math.max(coords.left, endCoords.left), - bottom: Math.max(coords.bottom, endCoords.bottom) + margin}; - var scrollPos = calculateScrollPos(cm, rect); - var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; - if (scrollPos.scrollTop != null) { - updateScrollTop(cm, scrollPos.scrollTop); - if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; } - } - if (scrollPos.scrollLeft != null) { - setScrollLeft(cm, scrollPos.scrollLeft); - if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; } - } - if (!changed) { break } - } - return rect -} - -// Scroll a given set of coordinates into view (immediately). -function scrollIntoView(cm, rect) { - var scrollPos = calculateScrollPos(cm, rect); - if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); } - if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); } -} - -// Calculate a new scroll position needed to scroll the given -// rectangle into view. Returns an object with scrollTop and -// scrollLeft properties. When these are undefined, the -// vertical/horizontal position does not need to be adjusted. -function calculateScrollPos(cm, rect) { - var display = cm.display, snapMargin = textHeight(cm.display); - if (rect.top < 0) { rect.top = 0; } - var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; - var screen = displayHeight(cm), result = {}; - if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; } - var docBottom = cm.doc.height + paddingVert(display); - var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin; - if (rect.top < screentop) { - result.scrollTop = atTop ? 0 : rect.top; - } else if (rect.bottom > screentop + screen) { - var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen); - if (newTop != screentop) { result.scrollTop = newTop; } - } - - var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; - var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); - var tooWide = rect.right - rect.left > screenw; - if (tooWide) { rect.right = rect.left + screenw; } - if (rect.left < 10) - { result.scrollLeft = 0; } - else if (rect.left < screenleft) - { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); } - else if (rect.right > screenw + screenleft - 3) - { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; } - return result -} - -// Store a relative adjustment to the scroll position in the current -// operation (to be applied when the operation finishes). -function addToScrollTop(cm, top) { - if (top == null) { return } - resolveScrollToPos(cm); - cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; -} - -// Make sure that at the end of the operation the current cursor is -// shown. -function ensureCursorVisible(cm) { - resolveScrollToPos(cm); - var cur = cm.getCursor(); - cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin}; -} - -function scrollToCoords(cm, x, y) { - if (x != null || y != null) { resolveScrollToPos(cm); } - if (x != null) { cm.curOp.scrollLeft = x; } - if (y != null) { cm.curOp.scrollTop = y; } -} - -function scrollToRange(cm, range$$1) { - resolveScrollToPos(cm); - cm.curOp.scrollToPos = range$$1; -} - -// When an operation has its scrollToPos property set, and another -// scroll action is applied before the end of the operation, this -// 'simulates' scrolling that position into view in a cheap way, so -// that the effect of intermediate scroll commands is not ignored. -function resolveScrollToPos(cm) { - var range$$1 = cm.curOp.scrollToPos; - if (range$$1) { - cm.curOp.scrollToPos = null; - var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to); - scrollToCoordsRange(cm, from, to, range$$1.margin); - } -} - -function scrollToCoordsRange(cm, from, to, margin) { - var sPos = calculateScrollPos(cm, { - left: Math.min(from.left, to.left), - top: Math.min(from.top, to.top) - margin, - right: Math.max(from.right, to.right), - bottom: Math.max(from.bottom, to.bottom) + margin - }); - scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); -} - -// Sync the scrollable area and scrollbars, ensure the viewport -// covers the visible area. -function updateScrollTop(cm, val) { - if (Math.abs(cm.doc.scrollTop - val) < 2) { return } - if (!gecko) { updateDisplaySimple(cm, {top: val}); } - setScrollTop(cm, val, true); - if (gecko) { updateDisplaySimple(cm); } - startWorker(cm, 100); -} - -function setScrollTop(cm, val, forceScroll) { - val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val); - if (cm.display.scroller.scrollTop == val && !forceScroll) { return } - cm.doc.scrollTop = val; - cm.display.scrollbars.setScrollTop(val); - if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; } -} - -// Sync scroller and scrollbar, ensure the gutter elements are -// aligned. -function setScrollLeft(cm, val, isScroller, forceScroll) { - val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); - if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return } - cm.doc.scrollLeft = val; - alignHorizontally(cm); - if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; } - cm.display.scrollbars.setScrollLeft(val); -} - -// SCROLLBARS - -// Prepare DOM reads needed to update the scrollbars. Done in one -// shot to minimize update/measure roundtrips. -function measureForScrollbars(cm) { - var d = cm.display, gutterW = d.gutters.offsetWidth; - var docH = Math.round(cm.doc.height + paddingVert(cm.display)); - return { - clientHeight: d.scroller.clientHeight, - viewHeight: d.wrapper.clientHeight, - scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, - viewWidth: d.wrapper.clientWidth, - barLeft: cm.options.fixedGutter ? gutterW : 0, - docHeight: docH, - scrollHeight: docH + scrollGap(cm) + d.barHeight, - nativeBarWidth: d.nativeBarWidth, - gutterWidth: gutterW - } -} - -var NativeScrollbars = function(place, scroll, cm) { - this.cm = cm; - var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); - var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); - vert.tabIndex = horiz.tabIndex = -1; - place(vert); place(horiz); - - on(vert, "scroll", function () { - if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); } - }); - on(horiz, "scroll", function () { - if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); } - }); - - this.checkedZeroWidth = false; - // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). - if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; } -}; - -NativeScrollbars.prototype.update = function (measure) { - var needsH = measure.scrollWidth > measure.clientWidth + 1; - var needsV = measure.scrollHeight > measure.clientHeight + 1; - var sWidth = measure.nativeBarWidth; - - if (needsV) { - this.vert.style.display = "block"; - this.vert.style.bottom = needsH ? sWidth + "px" : "0"; - var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); - // A bug in IE8 can cause this value to be negative, so guard it. - this.vert.firstChild.style.height = - Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; - } else { - this.vert.style.display = ""; - this.vert.firstChild.style.height = "0"; - } - - if (needsH) { - this.horiz.style.display = "block"; - this.horiz.style.right = needsV ? sWidth + "px" : "0"; - this.horiz.style.left = measure.barLeft + "px"; - var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); - this.horiz.firstChild.style.width = - Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; - } else { - this.horiz.style.display = ""; - this.horiz.firstChild.style.width = "0"; - } - - if (!this.checkedZeroWidth && measure.clientHeight > 0) { - if (sWidth == 0) { this.zeroWidthHack(); } - this.checkedZeroWidth = true; - } - - return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0} -}; - -NativeScrollbars.prototype.setScrollLeft = function (pos) { - if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; } - if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); } -}; - -NativeScrollbars.prototype.setScrollTop = function (pos) { - if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; } - if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); } -}; - -NativeScrollbars.prototype.zeroWidthHack = function () { - var w = mac && !mac_geMountainLion ? "12px" : "18px"; - this.horiz.style.height = this.vert.style.width = w; - this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; - this.disableHoriz = new Delayed; - this.disableVert = new Delayed; -}; - -NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { - bar.style.pointerEvents = "auto"; - function maybeDisable() { - // To find out whether the scrollbar is still visible, we - // check whether the element under the pixel in the bottom - // right corner of the scrollbar box is the scrollbar box - // itself (when the bar is still visible) or its filler child - // (when the bar is hidden). If it is still visible, we keep - // it enabled, if it's hidden, we disable pointer events. - var box = bar.getBoundingClientRect(); - var elt$$1 = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) - : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); - if (elt$$1 != bar) { bar.style.pointerEvents = "none"; } - else { delay.set(1000, maybeDisable); } - } - delay.set(1000, maybeDisable); -}; - -NativeScrollbars.prototype.clear = function () { - var parent = this.horiz.parentNode; - parent.removeChild(this.horiz); - parent.removeChild(this.vert); -}; - -var NullScrollbars = function () {}; - -NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} }; -NullScrollbars.prototype.setScrollLeft = function () {}; -NullScrollbars.prototype.setScrollTop = function () {}; -NullScrollbars.prototype.clear = function () {}; - -function updateScrollbars(cm, measure) { - if (!measure) { measure = measureForScrollbars(cm); } - var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; - updateScrollbarsInner(cm, measure); - for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { - if (startWidth != cm.display.barWidth && cm.options.lineWrapping) - { updateHeightsInViewport(cm); } - updateScrollbarsInner(cm, measureForScrollbars(cm)); - startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; - } -} - -// Re-synchronize the fake scrollbars with the actual size of the -// content. -function updateScrollbarsInner(cm, measure) { - var d = cm.display; - var sizes = d.scrollbars.update(measure); - - d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; - d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; - d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; - - if (sizes.right && sizes.bottom) { - d.scrollbarFiller.style.display = "block"; - d.scrollbarFiller.style.height = sizes.bottom + "px"; - d.scrollbarFiller.style.width = sizes.right + "px"; - } else { d.scrollbarFiller.style.display = ""; } - if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { - d.gutterFiller.style.display = "block"; - d.gutterFiller.style.height = sizes.bottom + "px"; - d.gutterFiller.style.width = measure.gutterWidth + "px"; - } else { d.gutterFiller.style.display = ""; } -} - -var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; - -function initScrollbars(cm) { - if (cm.display.scrollbars) { - cm.display.scrollbars.clear(); - if (cm.display.scrollbars.addClass) - { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); } - } - - cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { - cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); - // Prevent clicks in the scrollbars from killing focus - on(node, "mousedown", function () { - if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); } - }); - node.setAttribute("cm-not-content", "true"); - }, function (pos, axis) { - if (axis == "horizontal") { setScrollLeft(cm, pos); } - else { updateScrollTop(cm, pos); } - }, cm); - if (cm.display.scrollbars.addClass) - { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); } -} - -// Operations are used to wrap a series of changes to the editor -// state in such a way that each change won't have to update the -// cursor and display (which would be awkward, slow, and -// error-prone). Instead, display updates are batched and then all -// combined and executed at once. - -var nextOpId = 0; -// Start a new operation. -function startOperation(cm) { - cm.curOp = { - cm: cm, - viewChanged: false, // Flag that indicates that lines might need to be redrawn - startHeight: cm.doc.height, // Used to detect need to update scrollbar - forceUpdate: false, // Used to force a redraw - updateInput: null, // Whether to reset the input textarea - typing: false, // Whether this reset should be careful to leave existing text (for compositing) - changeObjs: null, // Accumulated changes, for firing change events - cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on - cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already - selectionChanged: false, // Whether the selection needs to be redrawn - updateMaxLine: false, // Set when the widest line needs to be determined anew - scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet - scrollToPos: null, // Used to scroll to a specific position - focus: false, - id: ++nextOpId // Unique ID - }; - pushOperation(cm.curOp); -} - -// Finish an operation, updating the display and signalling delayed events -function endOperation(cm) { - var op = cm.curOp; - finishOperation(op, function (group) { - for (var i = 0; i < group.ops.length; i++) - { group.ops[i].cm.curOp = null; } - endOperations(group); - }); -} - -// The DOM updates done when an operation finishes are batched so -// that the minimum number of relayouts are required. -function endOperations(group) { - var ops = group.ops; - for (var i = 0; i < ops.length; i++) // Read DOM - { endOperation_R1(ops[i]); } - for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe) - { endOperation_W1(ops[i$1]); } - for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM - { endOperation_R2(ops[i$2]); } - for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe) - { endOperation_W2(ops[i$3]); } - for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM - { endOperation_finish(ops[i$4]); } -} - -function endOperation_R1(op) { - var cm = op.cm, display = cm.display; - maybeClipScrollbars(cm); - if (op.updateMaxLine) { findMaxLine(cm); } - - op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || - op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || - op.scrollToPos.to.line >= display.viewTo) || - display.maxLineChanged && cm.options.lineWrapping; - op.update = op.mustUpdate && - new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); -} - -function endOperation_W1(op) { - op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); -} - -function endOperation_R2(op) { - var cm = op.cm, display = cm.display; - if (op.updatedDisplay) { updateHeightsInViewport(cm); } - - op.barMeasure = measureForScrollbars(cm); - - // If the max line changed since it was last measured, measure it, - // and ensure the document's width matches it. - // updateDisplay_W2 will use these properties to do the actual resizing - if (display.maxLineChanged && !cm.options.lineWrapping) { - op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; - cm.display.sizerWidth = op.adjustWidthTo; - op.barMeasure.scrollWidth = - Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); - op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); - } - - if (op.updatedDisplay || op.selectionChanged) - { op.preparedSelection = display.input.prepareSelection(); } -} - -function endOperation_W2(op) { - var cm = op.cm; - - if (op.adjustWidthTo != null) { - cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; - if (op.maxScrollLeft < cm.doc.scrollLeft) - { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); } - cm.display.maxLineChanged = false; - } - - var takeFocus = op.focus && op.focus == activeElt(); - if (op.preparedSelection) - { cm.display.input.showSelection(op.preparedSelection, takeFocus); } - if (op.updatedDisplay || op.startHeight != cm.doc.height) - { updateScrollbars(cm, op.barMeasure); } - if (op.updatedDisplay) - { setDocumentHeight(cm, op.barMeasure); } - - if (op.selectionChanged) { restartBlink(cm); } - - if (cm.state.focused && op.updateInput) - { cm.display.input.reset(op.typing); } - if (takeFocus) { ensureFocus(op.cm); } -} - -function endOperation_finish(op) { - var cm = op.cm, display = cm.display, doc = cm.doc; - - if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); } - - // Abort mouse wheel delta measurement, when scrolling explicitly - if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) - { display.wheelStartX = display.wheelStartY = null; } - - // Propagate the scroll position to the actual DOM scroller - if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); } - - if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); } - // If we need to scroll a specific position into view, do so. - if (op.scrollToPos) { - var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), - clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); - maybeScrollWindow(cm, rect); - } - - // Fire events for markers that are hidden/unidden by editing or - // undoing - var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; - if (hidden) { for (var i = 0; i < hidden.length; ++i) - { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } } - if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1) - { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } } - - if (display.wrapper.offsetHeight) - { doc.scrollTop = cm.display.scroller.scrollTop; } - - // Fire change events, and delayed event handlers - if (op.changeObjs) - { signal(cm, "changes", cm, op.changeObjs); } - if (op.update) - { op.update.finish(); } -} - -// Run the given function in an operation -function runInOp(cm, f) { - if (cm.curOp) { return f() } - startOperation(cm); - try { return f() } - finally { endOperation(cm); } -} -// Wraps a function in an operation. Returns the wrapped function. -function operation(cm, f) { - return function() { - if (cm.curOp) { return f.apply(cm, arguments) } - startOperation(cm); - try { return f.apply(cm, arguments) } - finally { endOperation(cm); } - } -} -// Used to add methods to editor and doc instances, wrapping them in -// operations. -function methodOp(f) { - return function() { - if (this.curOp) { return f.apply(this, arguments) } - startOperation(this); - try { return f.apply(this, arguments) } - finally { endOperation(this); } - } -} -function docMethodOp(f) { - return function() { - var cm = this.cm; - if (!cm || cm.curOp) { return f.apply(this, arguments) } - startOperation(cm); - try { return f.apply(this, arguments) } - finally { endOperation(cm); } - } -} - -// Updates the display.view data structure for a given change to the -// document. From and to are in pre-change coordinates. Lendiff is -// the amount of lines added or subtracted by the change. This is -// used for changes that span multiple lines, or change the way -// lines are divided into visual lines. regLineChange (below) -// registers single-line changes. -function regChange(cm, from, to, lendiff) { - if (from == null) { from = cm.doc.first; } - if (to == null) { to = cm.doc.first + cm.doc.size; } - if (!lendiff) { lendiff = 0; } - - var display = cm.display; - if (lendiff && to < display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers > from)) - { display.updateLineNumbers = from; } - - cm.curOp.viewChanged = true; - - if (from >= display.viewTo) { // Change after - if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) - { resetView(cm); } - } else if (to <= display.viewFrom) { // Change before - if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { - resetView(cm); - } else { - display.viewFrom += lendiff; - display.viewTo += lendiff; - } - } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap - resetView(cm); - } else if (from <= display.viewFrom) { // Top overlap - var cut = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cut) { - display.view = display.view.slice(cut.index); - display.viewFrom = cut.lineN; - display.viewTo += lendiff; - } else { - resetView(cm); - } - } else if (to >= display.viewTo) { // Bottom overlap - var cut$1 = viewCuttingPoint(cm, from, from, -1); - if (cut$1) { - display.view = display.view.slice(0, cut$1.index); - display.viewTo = cut$1.lineN; - } else { - resetView(cm); - } - } else { // Gap in the middle - var cutTop = viewCuttingPoint(cm, from, from, -1); - var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cutTop && cutBot) { - display.view = display.view.slice(0, cutTop.index) - .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) - .concat(display.view.slice(cutBot.index)); - display.viewTo += lendiff; - } else { - resetView(cm); - } - } - - var ext = display.externalMeasured; - if (ext) { - if (to < ext.lineN) - { ext.lineN += lendiff; } - else if (from < ext.lineN + ext.size) - { display.externalMeasured = null; } - } -} - -// Register a change to a single line. Type must be one of "text", -// "gutter", "class", "widget" -function regLineChange(cm, line, type) { - cm.curOp.viewChanged = true; - var display = cm.display, ext = cm.display.externalMeasured; - if (ext && line >= ext.lineN && line < ext.lineN + ext.size) - { display.externalMeasured = null; } - - if (line < display.viewFrom || line >= display.viewTo) { return } - var lineView = display.view[findViewIndex(cm, line)]; - if (lineView.node == null) { return } - var arr = lineView.changes || (lineView.changes = []); - if (indexOf(arr, type) == -1) { arr.push(type); } -} - -// Clear the view. -function resetView(cm) { - cm.display.viewFrom = cm.display.viewTo = cm.doc.first; - cm.display.view = []; - cm.display.viewOffset = 0; -} - -function viewCuttingPoint(cm, oldN, newN, dir) { - var index = findViewIndex(cm, oldN), diff, view = cm.display.view; - if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) - { return {index: index, lineN: newN} } - var n = cm.display.viewFrom; - for (var i = 0; i < index; i++) - { n += view[i].size; } - if (n != oldN) { - if (dir > 0) { - if (index == view.length - 1) { return null } - diff = (n + view[index].size) - oldN; - index++; - } else { - diff = n - oldN; - } - oldN += diff; newN += diff; - } - while (visualLineNo(cm.doc, newN) != newN) { - if (index == (dir < 0 ? 0 : view.length - 1)) { return null } - newN += dir * view[index - (dir < 0 ? 1 : 0)].size; - index += dir; - } - return {index: index, lineN: newN} -} - -// Force the view to cover a given range, adding empty view element -// or clipping off existing ones as needed. -function adjustView(cm, from, to) { - var display = cm.display, view = display.view; - if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { - display.view = buildViewArray(cm, from, to); - display.viewFrom = from; - } else { - if (display.viewFrom > from) - { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); } - else if (display.viewFrom < from) - { display.view = display.view.slice(findViewIndex(cm, from)); } - display.viewFrom = from; - if (display.viewTo < to) - { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); } - else if (display.viewTo > to) - { display.view = display.view.slice(0, findViewIndex(cm, to)); } - } - display.viewTo = to; -} - -// Count the number of lines in the view whose DOM representation is -// out of date (or nonexistent). -function countDirtyView(cm) { - var view = cm.display.view, dirty = 0; - for (var i = 0; i < view.length; i++) { - var lineView = view[i]; - if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; } - } - return dirty -} - -// HIGHLIGHT WORKER - -function startWorker(cm, time) { - if (cm.doc.highlightFrontier < cm.display.viewTo) - { cm.state.highlight.set(time, bind(highlightWorker, cm)); } -} - -function highlightWorker(cm) { - var doc = cm.doc; - if (doc.highlightFrontier >= cm.display.viewTo) { return } - var end = +new Date + cm.options.workTime; - var context = getContextBefore(cm, doc.highlightFrontier); - var changedLines = []; - - doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { - if (context.line >= cm.display.viewFrom) { // Visible - var oldStyles = line.styles; - var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null; - var highlighted = highlightLine(cm, line, context, true); - if (resetState) { context.state = resetState; } - line.styles = highlighted.styles; - var oldCls = line.styleClasses, newCls = highlighted.classes; - if (newCls) { line.styleClasses = newCls; } - else if (oldCls) { line.styleClasses = null; } - var ischange = !oldStyles || oldStyles.length != line.styles.length || - oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); - for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; } - if (ischange) { changedLines.push(context.line); } - line.stateAfter = context.save(); - context.nextLine(); - } else { - if (line.text.length <= cm.options.maxHighlightLength) - { processLine(cm, line.text, context); } - line.stateAfter = context.line % 5 == 0 ? context.save() : null; - context.nextLine(); - } - if (+new Date > end) { - startWorker(cm, cm.options.workDelay); - return true - } - }); - doc.highlightFrontier = context.line; - doc.modeFrontier = Math.max(doc.modeFrontier, context.line); - if (changedLines.length) { runInOp(cm, function () { - for (var i = 0; i < changedLines.length; i++) - { regLineChange(cm, changedLines[i], "text"); } - }); } -} - -// DISPLAY DRAWING - -var DisplayUpdate = function(cm, viewport, force) { - var display = cm.display; - - this.viewport = viewport; - // Store some values that we'll need later (but don't want to force a relayout for) - this.visible = visibleLines(display, cm.doc, viewport); - this.editorIsHidden = !display.wrapper.offsetWidth; - this.wrapperHeight = display.wrapper.clientHeight; - this.wrapperWidth = display.wrapper.clientWidth; - this.oldDisplayWidth = displayWidth(cm); - this.force = force; - this.dims = getDimensions(cm); - this.events = []; -}; - -DisplayUpdate.prototype.signal = function (emitter, type) { - if (hasHandler(emitter, type)) - { this.events.push(arguments); } -}; -DisplayUpdate.prototype.finish = function () { - var this$1 = this; - - for (var i = 0; i < this.events.length; i++) - { signal.apply(null, this$1.events[i]); } -}; - -function maybeClipScrollbars(cm) { - var display = cm.display; - if (!display.scrollbarsClipped && display.scroller.offsetWidth) { - display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; - display.heightForcer.style.height = scrollGap(cm) + "px"; - display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; - display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; - display.scrollbarsClipped = true; - } -} - -function selectionSnapshot(cm) { - if (cm.hasFocus()) { return null } - var active = activeElt(); - if (!active || !contains(cm.display.lineDiv, active)) { return null } - var result = {activeElt: active}; - if (window.getSelection) { - var sel = window.getSelection(); - if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { - result.anchorNode = sel.anchorNode; - result.anchorOffset = sel.anchorOffset; - result.focusNode = sel.focusNode; - result.focusOffset = sel.focusOffset; - } - } - return result -} - -function restoreSelection(snapshot) { - if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return } - snapshot.activeElt.focus(); - if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { - var sel = window.getSelection(), range$$1 = document.createRange(); - range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset); - range$$1.collapse(false); - sel.removeAllRanges(); - sel.addRange(range$$1); - sel.extend(snapshot.focusNode, snapshot.focusOffset); - } -} - -// Does the actual updating of the line display. Bails out -// (returning false) when there is nothing to be done and forced is -// false. -function updateDisplayIfNeeded(cm, update) { - var display = cm.display, doc = cm.doc; - - if (update.editorIsHidden) { - resetView(cm); - return false - } - - // Bail out if the visible area is already rendered and nothing changed. - if (!update.force && - update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && - display.renderedView == display.view && countDirtyView(cm) == 0) - { return false } - - if (maybeUpdateLineNumberWidth(cm)) { - resetView(cm); - update.dims = getDimensions(cm); - } - - // Compute a suitable new viewport (from & to) - var end = doc.first + doc.size; - var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); - var to = Math.min(end, update.visible.to + cm.options.viewportMargin); - if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); } - if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); } - if (sawCollapsedSpans) { - from = visualLineNo(cm.doc, from); - to = visualLineEndNo(cm.doc, to); - } - - var different = from != display.viewFrom || to != display.viewTo || - display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; - adjustView(cm, from, to); - - display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); - // Position the mover div to align with the current scroll position - cm.display.mover.style.top = display.viewOffset + "px"; - - var toUpdate = countDirtyView(cm); - if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) - { return false } - - // For big changes, we hide the enclosing element during the - // update, since that speeds up the operations on most browsers. - var selSnapshot = selectionSnapshot(cm); - if (toUpdate > 4) { display.lineDiv.style.display = "none"; } - patchDisplay(cm, display.updateLineNumbers, update.dims); - if (toUpdate > 4) { display.lineDiv.style.display = ""; } - display.renderedView = display.view; - // There might have been a widget with a focused element that got - // hidden or updated, if so re-focus it. - restoreSelection(selSnapshot); - - // Prevent selection and cursors from interfering with the scroll - // width and height. - removeChildren(display.cursorDiv); - removeChildren(display.selectionDiv); - display.gutters.style.height = display.sizer.style.minHeight = 0; - - if (different) { - display.lastWrapHeight = update.wrapperHeight; - display.lastWrapWidth = update.wrapperWidth; - startWorker(cm, 400); - } - - display.updateLineNumbers = null; - - return true -} - -function postUpdateDisplay(cm, update) { - var viewport = update.viewport; - - for (var first = true;; first = false) { - if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { - // Clip forced viewport to actual scrollable area. - if (viewport && viewport.top != null) - { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; } - // Updated line heights might result in the drawn area not - // actually covering the viewport. Keep looping until it does. - update.visible = visibleLines(cm.display, cm.doc, viewport); - if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) - { break } - } - if (!updateDisplayIfNeeded(cm, update)) { break } - updateHeightsInViewport(cm); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - updateScrollbars(cm, barMeasure); - setDocumentHeight(cm, barMeasure); - update.force = false; - } - - update.signal(cm, "update", cm); - if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { - update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); - cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; - } -} - -function updateDisplaySimple(cm, viewport) { - var update = new DisplayUpdate(cm, viewport); - if (updateDisplayIfNeeded(cm, update)) { - updateHeightsInViewport(cm); - postUpdateDisplay(cm, update); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - updateScrollbars(cm, barMeasure); - setDocumentHeight(cm, barMeasure); - update.finish(); - } -} - -// Sync the actual display DOM structure with display.view, removing -// nodes for lines that are no longer in view, and creating the ones -// that are not there yet, and updating the ones that are out of -// date. -function patchDisplay(cm, updateNumbersFrom, dims) { - var display = cm.display, lineNumbers = cm.options.lineNumbers; - var container = display.lineDiv, cur = container.firstChild; - - function rm(node) { - var next = node.nextSibling; - // Works around a throw-scroll bug in OS X Webkit - if (webkit && mac && cm.display.currentWheelTarget == node) - { node.style.display = "none"; } - else - { node.parentNode.removeChild(node); } - return next - } - - var view = display.view, lineN = display.viewFrom; - // Loop over the elements in the view, syncing cur (the DOM nodes - // in display.lineDiv) with the view as we go. - for (var i = 0; i < view.length; i++) { - var lineView = view[i]; - if (lineView.hidden) { - } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet - var node = buildLineElement(cm, lineView, lineN, dims); - container.insertBefore(node, cur); - } else { // Already drawn - while (cur != lineView.node) { cur = rm(cur); } - var updateNumber = lineNumbers && updateNumbersFrom != null && - updateNumbersFrom <= lineN && lineView.lineNumber; - if (lineView.changes) { - if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; } - updateLineForChanges(cm, lineView, lineN, dims); - } - if (updateNumber) { - removeChildren(lineView.lineNumber); - lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); - } - cur = lineView.node.nextSibling; - } - lineN += lineView.size; - } - while (cur) { cur = rm(cur); } -} - -function updateGutterSpace(cm) { - var width = cm.display.gutters.offsetWidth; - cm.display.sizer.style.marginLeft = width + "px"; -} - -function setDocumentHeight(cm, measure) { - cm.display.sizer.style.minHeight = measure.docHeight + "px"; - cm.display.heightForcer.style.top = measure.docHeight + "px"; - cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"; -} - -// Rebuild the gutter elements, ensure the margin to the left of the -// code matches their width. -function updateGutters(cm) { - var gutters = cm.display.gutters, specs = cm.options.gutters; - removeChildren(gutters); - var i = 0; - for (; i < specs.length; ++i) { - var gutterClass = specs[i]; - var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); - if (gutterClass == "CodeMirror-linenumbers") { - cm.display.lineGutter = gElt; - gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; - } - } - gutters.style.display = i ? "" : "none"; - updateGutterSpace(cm); -} - -// Make sure the gutters options contains the element -// "CodeMirror-linenumbers" when the lineNumbers option is true. -function setGuttersForLineNumbers(options) { - var found = indexOf(options.gutters, "CodeMirror-linenumbers"); - if (found == -1 && options.lineNumbers) { - options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); - } else if (found > -1 && !options.lineNumbers) { - options.gutters = options.gutters.slice(0); - options.gutters.splice(found, 1); - } -} - -// Since the delta values reported on mouse wheel events are -// unstandardized between browsers and even browser versions, and -// generally horribly unpredictable, this code starts by measuring -// the scroll effect that the first few mouse wheel events have, -// and, from that, detects the way it can convert deltas to pixel -// offsets afterwards. -// -// The reason we want to know the amount a wheel event will scroll -// is that it gives us a chance to update the display before the -// actual scrolling happens, reducing flickering. - -var wheelSamples = 0; -var wheelPixelsPerUnit = null; -// Fill in a browser-detected starting value on browsers where we -// know one. These don't have to be accurate -- the result of them -// being wrong would just be a slight flicker on the first wheel -// scroll (if it is large enough). -if (ie) { wheelPixelsPerUnit = -.53; } -else if (gecko) { wheelPixelsPerUnit = 15; } -else if (chrome) { wheelPixelsPerUnit = -.7; } -else if (safari) { wheelPixelsPerUnit = -1/3; } - -function wheelEventDelta(e) { - var dx = e.wheelDeltaX, dy = e.wheelDeltaY; - if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; } - if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; } - else if (dy == null) { dy = e.wheelDelta; } - return {x: dx, y: dy} -} -function wheelEventPixels(e) { - var delta = wheelEventDelta(e); - delta.x *= wheelPixelsPerUnit; - delta.y *= wheelPixelsPerUnit; - return delta -} - -function onScrollWheel(cm, e) { - var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; - - var display = cm.display, scroll = display.scroller; - // Quit if there's nothing to scroll here - var canScrollX = scroll.scrollWidth > scroll.clientWidth; - var canScrollY = scroll.scrollHeight > scroll.clientHeight; - if (!(dx && canScrollX || dy && canScrollY)) { return } - - // Webkit browsers on OS X abort momentum scrolls when the target - // of the scroll event is removed from the scrollable element. - // This hack (see related code in patchDisplay) makes sure the - // element is kept around. - if (dy && mac && webkit) { - outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { - for (var i = 0; i < view.length; i++) { - if (view[i].node == cur) { - cm.display.currentWheelTarget = cur; - break outer - } - } - } - } - - // On some browsers, horizontal scrolling will cause redraws to - // happen before the gutter has been realigned, causing it to - // wriggle around in a most unseemly way. When we have an - // estimated pixels/delta value, we just handle horizontal - // scrolling entirely here. It'll be slightly off from native, but - // better than glitching out. - if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { - if (dy && canScrollY) - { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); } - setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit)); - // Only prevent default scrolling if vertical scrolling is - // actually possible. Otherwise, it causes vertical scroll - // jitter on OSX trackpads when deltaX is small and deltaY - // is large (issue #3579) - if (!dy || (dy && canScrollY)) - { e_preventDefault(e); } - display.wheelStartX = null; // Abort measurement, if in progress - return - } - - // 'Project' the visible viewport to cover the area that is being - // scrolled into view (if we know enough to estimate it). - if (dy && wheelPixelsPerUnit != null) { - var pixels = dy * wheelPixelsPerUnit; - var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; - if (pixels < 0) { top = Math.max(0, top + pixels - 50); } - else { bot = Math.min(cm.doc.height, bot + pixels + 50); } - updateDisplaySimple(cm, {top: top, bottom: bot}); - } - - if (wheelSamples < 20) { - if (display.wheelStartX == null) { - display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; - display.wheelDX = dx; display.wheelDY = dy; - setTimeout(function () { - if (display.wheelStartX == null) { return } - var movedX = scroll.scrollLeft - display.wheelStartX; - var movedY = scroll.scrollTop - display.wheelStartY; - var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || - (movedX && display.wheelDX && movedX / display.wheelDX); - display.wheelStartX = display.wheelStartY = null; - if (!sample) { return } - wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); - ++wheelSamples; - }, 200); - } else { - display.wheelDX += dx; display.wheelDY += dy; - } - } -} - -// Selection objects are immutable. A new one is created every time -// the selection changes. A selection is one or more non-overlapping -// (and non-touching) ranges, sorted, and an integer that indicates -// which one is the primary selection (the one that's scrolled into -// view, that getCursor returns, etc). -var Selection = function(ranges, primIndex) { - this.ranges = ranges; - this.primIndex = primIndex; -}; - -Selection.prototype.primary = function () { return this.ranges[this.primIndex] }; - -Selection.prototype.equals = function (other) { - var this$1 = this; - - if (other == this) { return true } - if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false } - for (var i = 0; i < this.ranges.length; i++) { - var here = this$1.ranges[i], there = other.ranges[i]; - if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false } - } - return true -}; - -Selection.prototype.deepCopy = function () { - var this$1 = this; - - var out = []; - for (var i = 0; i < this.ranges.length; i++) - { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); } - return new Selection(out, this.primIndex) -}; - -Selection.prototype.somethingSelected = function () { - var this$1 = this; - - for (var i = 0; i < this.ranges.length; i++) - { if (!this$1.ranges[i].empty()) { return true } } - return false -}; - -Selection.prototype.contains = function (pos, end) { - var this$1 = this; - - if (!end) { end = pos; } - for (var i = 0; i < this.ranges.length; i++) { - var range = this$1.ranges[i]; - if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) - { return i } - } - return -1 -}; - -var Range = function(anchor, head) { - this.anchor = anchor; this.head = head; -}; - -Range.prototype.from = function () { return minPos(this.anchor, this.head) }; -Range.prototype.to = function () { return maxPos(this.anchor, this.head) }; -Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch }; - -// Take an unsorted, potentially overlapping set of ranges, and -// build a selection out of it. 'Consumes' ranges array (modifying -// it). -function normalizeSelection(ranges, primIndex) { - var prim = ranges[primIndex]; - ranges.sort(function (a, b) { return cmp(a.from(), b.from()); }); - primIndex = indexOf(ranges, prim); - for (var i = 1; i < ranges.length; i++) { - var cur = ranges[i], prev = ranges[i - 1]; - if (cmp(prev.to(), cur.from()) >= 0) { - var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); - var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; - if (i <= primIndex) { --primIndex; } - ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); - } - } - return new Selection(ranges, primIndex) -} - -function simpleSelection(anchor, head) { - return new Selection([new Range(anchor, head || anchor)], 0) -} - -// Compute the position of the end of a change (its 'to' property -// refers to the pre-change end). -function changeEnd(change) { - if (!change.text) { return change.to } - return Pos(change.from.line + change.text.length - 1, - lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)) -} - -// Adjust a position to refer to the post-change position of the -// same text, or the end of the change if the change covers it. -function adjustForChange(pos, change) { - if (cmp(pos, change.from) < 0) { return pos } - if (cmp(pos, change.to) <= 0) { return changeEnd(change) } - - var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; - if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; } - return Pos(line, ch) -} - -function computeSelAfterChange(doc, change) { - var out = []; - for (var i = 0; i < doc.sel.ranges.length; i++) { - var range = doc.sel.ranges[i]; - out.push(new Range(adjustForChange(range.anchor, change), - adjustForChange(range.head, change))); - } - return normalizeSelection(out, doc.sel.primIndex) -} - -function offsetPos(pos, old, nw) { - if (pos.line == old.line) - { return Pos(nw.line, pos.ch - old.ch + nw.ch) } - else - { return Pos(nw.line + (pos.line - old.line), pos.ch) } -} - -// Used by replaceSelections to allow moving the selection to the -// start or around the replaced test. Hint may be "start" or "around". -function computeReplacedSel(doc, changes, hint) { - var out = []; - var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; - for (var i = 0; i < changes.length; i++) { - var change = changes[i]; - var from = offsetPos(change.from, oldPrev, newPrev); - var to = offsetPos(changeEnd(change), oldPrev, newPrev); - oldPrev = change.to; - newPrev = to; - if (hint == "around") { - var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; - out[i] = new Range(inv ? to : from, inv ? from : to); - } else { - out[i] = new Range(from, from); - } - } - return new Selection(out, doc.sel.primIndex) -} - -// Used to get the editor into a consistent state again when options change. - -function loadMode(cm) { - cm.doc.mode = getMode(cm.options, cm.doc.modeOption); - resetModeState(cm); -} - -function resetModeState(cm) { - cm.doc.iter(function (line) { - if (line.stateAfter) { line.stateAfter = null; } - if (line.styles) { line.styles = null; } - }); - cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; - startWorker(cm, 100); - cm.state.modeGen++; - if (cm.curOp) { regChange(cm); } -} - -// DOCUMENT DATA STRUCTURE - -// By default, updates that start and end at the beginning of a line -// are treated specially, in order to make the association of line -// widgets and marker elements with the text behave more intuitive. -function isWholeLineUpdate(doc, change) { - return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && - (!doc.cm || doc.cm.options.wholeLineUpdateBefore) -} - -// Perform a change on the document data structure. -function updateDoc(doc, change, markedSpans, estimateHeight$$1) { - function spansFor(n) {return markedSpans ? markedSpans[n] : null} - function update(line, text, spans) { - updateLine(line, text, spans, estimateHeight$$1); - signalLater(line, "change", line, change); - } - function linesFor(start, end) { - var result = []; - for (var i = start; i < end; ++i) - { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); } - return result - } - - var from = change.from, to = change.to, text = change.text; - var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); - var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; - - // Adjust the line structure - if (change.full) { - doc.insert(0, linesFor(0, text.length)); - doc.remove(text.length, doc.size - text.length); - } else if (isWholeLineUpdate(doc, change)) { - // This is a whole-line replace. Treated specially to make - // sure line objects move the way they are supposed to. - var added = linesFor(0, text.length - 1); - update(lastLine, lastLine.text, lastSpans); - if (nlines) { doc.remove(from.line, nlines); } - if (added.length) { doc.insert(from.line, added); } - } else if (firstLine == lastLine) { - if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); - } else { - var added$1 = linesFor(1, text.length - 1); - added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1)); - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - doc.insert(from.line + 1, added$1); - } - } else if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); - doc.remove(from.line + 1, nlines); - } else { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); - var added$2 = linesFor(1, text.length - 1); - if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); } - doc.insert(from.line + 1, added$2); - } - - signalLater(doc, "change", doc, change); -} - -// Call f for all linked documents. -function linkedDocs(doc, f, sharedHistOnly) { - function propagate(doc, skip, sharedHist) { - if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) { - var rel = doc.linked[i]; - if (rel.doc == skip) { continue } - var shared = sharedHist && rel.sharedHist; - if (sharedHistOnly && !shared) { continue } - f(rel.doc, shared); - propagate(rel.doc, doc, shared); - } } - } - propagate(doc, null, true); -} - -// Attach a document to an editor. -function attachDoc(cm, doc) { - if (doc.cm) { throw new Error("This document is already in use.") } - cm.doc = doc; - doc.cm = cm; - estimateLineHeights(cm); - loadMode(cm); - setDirectionClass(cm); - if (!cm.options.lineWrapping) { findMaxLine(cm); } - cm.options.mode = doc.modeOption; - regChange(cm); -} - -function setDirectionClass(cm) { - (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); -} - -function directionChanged(cm) { - runInOp(cm, function () { - setDirectionClass(cm); - regChange(cm); - }); -} - -function History(startGen) { - // Arrays of change events and selections. Doing something adds an - // event to done and clears undo. Undoing moves events from done - // to undone, redoing moves them in the other direction. - this.done = []; this.undone = []; - this.undoDepth = Infinity; - // Used to track when changes can be merged into a single undo - // event - this.lastModTime = this.lastSelTime = 0; - this.lastOp = this.lastSelOp = null; - this.lastOrigin = this.lastSelOrigin = null; - // Used by the isClean() method - this.generation = this.maxGeneration = startGen || 1; -} - -// Create a history change event from an updateDoc-style change -// object. -function historyChangeFromChange(doc, change) { - var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; - attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); - linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true); - return histChange -} - -// Pop all selection events off the end of a history array. Stop at -// a change event. -function clearSelectionEvents(array) { - while (array.length) { - var last = lst(array); - if (last.ranges) { array.pop(); } - else { break } - } -} - -// Find the top change event in the history. Pop off selection -// events that are in the way. -function lastChangeEvent(hist, force) { - if (force) { - clearSelectionEvents(hist.done); - return lst(hist.done) - } else if (hist.done.length && !lst(hist.done).ranges) { - return lst(hist.done) - } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { - hist.done.pop(); - return lst(hist.done) - } -} - -// Register a change in the history. Merges changes that are within -// a single operation, or are close together with an origin that -// allows merging (starting with "+") into a single event. -function addChangeToHistory(doc, change, selAfter, opId) { - var hist = doc.history; - hist.undone.length = 0; - var time = +new Date, cur; - var last; - - if ((hist.lastOp == opId || - hist.lastOrigin == change.origin && change.origin && - ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) || - change.origin.charAt(0) == "*")) && - (cur = lastChangeEvent(hist, hist.lastOp == opId))) { - // Merge this change into the last event - last = lst(cur.changes); - if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { - // Optimized case for simple insertion -- don't want to add - // new changesets for every character typed - last.to = changeEnd(change); - } else { - // Add new sub-event - cur.changes.push(historyChangeFromChange(doc, change)); - } - } else { - // Can not be merged, start a new event. - var before = lst(hist.done); - if (!before || !before.ranges) - { pushSelectionToHistory(doc.sel, hist.done); } - cur = {changes: [historyChangeFromChange(doc, change)], - generation: hist.generation}; - hist.done.push(cur); - while (hist.done.length > hist.undoDepth) { - hist.done.shift(); - if (!hist.done[0].ranges) { hist.done.shift(); } - } - } - hist.done.push(selAfter); - hist.generation = ++hist.maxGeneration; - hist.lastModTime = hist.lastSelTime = time; - hist.lastOp = hist.lastSelOp = opId; - hist.lastOrigin = hist.lastSelOrigin = change.origin; - - if (!last) { signal(doc, "historyAdded"); } -} - -function selectionEventCanBeMerged(doc, origin, prev, sel) { - var ch = origin.charAt(0); - return ch == "*" || - ch == "+" && - prev.ranges.length == sel.ranges.length && - prev.somethingSelected() == sel.somethingSelected() && - new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500) -} - -// Called whenever the selection changes, sets the new selection as -// the pending selection in the history, and pushes the old pending -// selection into the 'done' array when it was significantly -// different (in number of selected ranges, emptiness, or time). -function addSelectionToHistory(doc, sel, opId, options) { - var hist = doc.history, origin = options && options.origin; - - // A new event is started when the previous origin does not match - // the current, or the origins don't allow matching. Origins - // starting with * are always merged, those starting with + are - // merged when similar and close together in time. - if (opId == hist.lastSelOp || - (origin && hist.lastSelOrigin == origin && - (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || - selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) - { hist.done[hist.done.length - 1] = sel; } - else - { pushSelectionToHistory(sel, hist.done); } - - hist.lastSelTime = +new Date; - hist.lastSelOrigin = origin; - hist.lastSelOp = opId; - if (options && options.clearRedo !== false) - { clearSelectionEvents(hist.undone); } -} - -function pushSelectionToHistory(sel, dest) { - var top = lst(dest); - if (!(top && top.ranges && top.equals(sel))) - { dest.push(sel); } -} - -// Used to store marked span information in the history. -function attachLocalSpans(doc, change, from, to) { - var existing = change["spans_" + doc.id], n = 0; - doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { - if (line.markedSpans) - { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; } - ++n; - }); -} - -// When un/re-doing restores text containing marked spans, those -// that have been explicitly cleared should not be restored. -function removeClearedSpans(spans) { - if (!spans) { return null } - var out; - for (var i = 0; i < spans.length; ++i) { - if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } } - else if (out) { out.push(spans[i]); } - } - return !out ? spans : out.length ? out : null -} - -// Retrieve and filter the old marked spans stored in a change event. -function getOldSpans(doc, change) { - var found = change["spans_" + doc.id]; - if (!found) { return null } - var nw = []; - for (var i = 0; i < change.text.length; ++i) - { nw.push(removeClearedSpans(found[i])); } - return nw -} - -// Used for un/re-doing changes from the history. Combines the -// result of computing the existing spans with the set of spans that -// existed in the history (so that deleting around a span and then -// undoing brings back the span). -function mergeOldSpans(doc, change) { - var old = getOldSpans(doc, change); - var stretched = stretchSpansOverChange(doc, change); - if (!old) { return stretched } - if (!stretched) { return old } - - for (var i = 0; i < old.length; ++i) { - var oldCur = old[i], stretchCur = stretched[i]; - if (oldCur && stretchCur) { - spans: for (var j = 0; j < stretchCur.length; ++j) { - var span = stretchCur[j]; - for (var k = 0; k < oldCur.length; ++k) - { if (oldCur[k].marker == span.marker) { continue spans } } - oldCur.push(span); - } - } else if (stretchCur) { - old[i] = stretchCur; - } - } - return old -} - -// Used both to provide a JSON-safe object in .getHistory, and, when -// detaching a document, to split the history in two -function copyHistoryArray(events, newGroup, instantiateSel) { - var copy = []; - for (var i = 0; i < events.length; ++i) { - var event = events[i]; - if (event.ranges) { - copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); - continue - } - var changes = event.changes, newChanges = []; - copy.push({changes: newChanges}); - for (var j = 0; j < changes.length; ++j) { - var change = changes[j], m = (void 0); - newChanges.push({from: change.from, to: change.to, text: change.text}); - if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) { - if (indexOf(newGroup, Number(m[1])) > -1) { - lst(newChanges)[prop] = change[prop]; - delete change[prop]; - } - } } } - } - } - return copy -} - -// The 'scroll' parameter given to many of these indicated whether -// the new cursor position should be scrolled into view after -// modifying the selection. - -// If shift is held or the extend flag is set, extends a range to -// include a given position (and optionally a second position). -// Otherwise, simply returns the range between the given positions. -// Used for cursor motion and such. -function extendRange(range, head, other, extend) { - if (extend) { - var anchor = range.anchor; - if (other) { - var posBefore = cmp(head, anchor) < 0; - if (posBefore != (cmp(other, anchor) < 0)) { - anchor = head; - head = other; - } else if (posBefore != (cmp(head, other) < 0)) { - head = other; - } - } - return new Range(anchor, head) - } else { - return new Range(other || head, head) - } -} - -// Extend the primary selection range, discard the rest. -function extendSelection(doc, head, other, options, extend) { - if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); } - setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options); -} - -// Extend all selections (pos is an array of selections with length -// equal the number of selections) -function extendSelections(doc, heads, options) { - var out = []; - var extend = doc.cm && (doc.cm.display.shift || doc.extend); - for (var i = 0; i < doc.sel.ranges.length; i++) - { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); } - var newSel = normalizeSelection(out, doc.sel.primIndex); - setSelection(doc, newSel, options); -} - -// Updates a single range in the selection. -function replaceOneSelection(doc, i, range, options) { - var ranges = doc.sel.ranges.slice(0); - ranges[i] = range; - setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); -} - -// Reset the selection to a single range. -function setSimpleSelection(doc, anchor, head, options) { - setSelection(doc, simpleSelection(anchor, head), options); -} - -// Give beforeSelectionChange handlers a change to influence a -// selection update. -function filterSelectionChange(doc, sel, options) { - var obj = { - ranges: sel.ranges, - update: function(ranges) { - var this$1 = this; - - this.ranges = []; - for (var i = 0; i < ranges.length; i++) - { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), - clipPos(doc, ranges[i].head)); } - }, - origin: options && options.origin - }; - signal(doc, "beforeSelectionChange", doc, obj); - if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); } - if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) } - else { return sel } -} - -function setSelectionReplaceHistory(doc, sel, options) { - var done = doc.history.done, last = lst(done); - if (last && last.ranges) { - done[done.length - 1] = sel; - setSelectionNoUndo(doc, sel, options); - } else { - setSelection(doc, sel, options); - } -} - -// Set a new selection. -function setSelection(doc, sel, options) { - setSelectionNoUndo(doc, sel, options); - addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); -} - -function setSelectionNoUndo(doc, sel, options) { - if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) - { sel = filterSelectionChange(doc, sel, options); } - - var bias = options && options.bias || - (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); - setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); - - if (!(options && options.scroll === false) && doc.cm) - { ensureCursorVisible(doc.cm); } -} - -function setSelectionInner(doc, sel) { - if (sel.equals(doc.sel)) { return } - - doc.sel = sel; - - if (doc.cm) { - doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; - signalCursorActivity(doc.cm); - } - signalLater(doc, "cursorActivity", doc); -} - -// Verify that the selection does not partially select any atomic -// marked ranges. -function reCheckSelection(doc) { - setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)); -} - -// Return a selection that does not partially select any atomic -// ranges. -function skipAtomicInSelection(doc, sel, bias, mayClear) { - var out; - for (var i = 0; i < sel.ranges.length; i++) { - var range = sel.ranges[i]; - var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; - var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); - var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); - if (out || newAnchor != range.anchor || newHead != range.head) { - if (!out) { out = sel.ranges.slice(0, i); } - out[i] = new Range(newAnchor, newHead); - } - } - return out ? normalizeSelection(out, sel.primIndex) : sel -} - -function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { - var line = getLine(doc, pos.line); - if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { - var sp = line.markedSpans[i], m = sp.marker; - if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && - (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) { - if (mayClear) { - signal(m, "beforeCursorEnter"); - if (m.explicitlyCleared) { - if (!line.markedSpans) { break } - else {--i; continue} - } - } - if (!m.atomic) { continue } - - if (oldPos) { - var near = m.find(dir < 0 ? 1 : -1), diff = (void 0); - if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft) - { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); } - if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) - { return skipAtomicInner(doc, near, pos, dir, mayClear) } - } - - var far = m.find(dir < 0 ? -1 : 1); - if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight) - { far = movePos(doc, far, dir, far.line == pos.line ? line : null); } - return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null - } - } } - return pos -} - -// Ensure a given position is not inside an atomic range. -function skipAtomic(doc, pos, oldPos, bias, mayClear) { - var dir = bias || 1; - var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || - (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || - skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || - (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)); - if (!found) { - doc.cantEdit = true; - return Pos(doc.first, 0) - } - return found -} - -function movePos(doc, pos, dir, line) { - if (dir < 0 && pos.ch == 0) { - if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) } - else { return null } - } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { - if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) } - else { return null } - } else { - return new Pos(pos.line, pos.ch + dir) - } -} - -function selectAll(cm) { - cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); -} - -// UPDATING - -// Allow "beforeChange" event handlers to influence a change -function filterChange(doc, change, update) { - var obj = { - canceled: false, - from: change.from, - to: change.to, - text: change.text, - origin: change.origin, - cancel: function () { return obj.canceled = true; } - }; - if (update) { obj.update = function (from, to, text, origin) { - if (from) { obj.from = clipPos(doc, from); } - if (to) { obj.to = clipPos(doc, to); } - if (text) { obj.text = text; } - if (origin !== undefined) { obj.origin = origin; } - }; } - signal(doc, "beforeChange", doc, obj); - if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); } - - if (obj.canceled) { return null } - return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin} -} - -// Apply a change to a document, and add it to the document's -// history, and propagating it to all linked documents. -function makeChange(doc, change, ignoreReadOnly) { - if (doc.cm) { - if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) } - if (doc.cm.state.suppressEdits) { return } - } - - if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { - change = filterChange(doc, change, true); - if (!change) { return } - } - - // Possibly split or suppress the update based on the presence - // of read-only spans in its range. - var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); - if (split) { - for (var i = split.length - 1; i >= 0; --i) - { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); } - } else { - makeChangeInner(doc, change); - } -} - -function makeChangeInner(doc, change) { - if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return } - var selAfter = computeSelAfterChange(doc, change); - addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); - - makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); - var rebased = []; - - linkedDocs(doc, function (doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change); - rebased.push(doc.history); - } - makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); - }); -} - -// Revert a change stored in a document's history. -function makeChangeFromHistory(doc, type, allowSelectionOnly) { - var suppress = doc.cm && doc.cm.state.suppressEdits; - if (suppress && !allowSelectionOnly) { return } - - var hist = doc.history, event, selAfter = doc.sel; - var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; - - // Verify that there is a useable event (so that ctrl-z won't - // needlessly clear selection events) - var i = 0; - for (; i < source.length; i++) { - event = source[i]; - if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) - { break } - } - if (i == source.length) { return } - hist.lastOrigin = hist.lastSelOrigin = null; - - for (;;) { - event = source.pop(); - if (event.ranges) { - pushSelectionToHistory(event, dest); - if (allowSelectionOnly && !event.equals(doc.sel)) { - setSelection(doc, event, {clearRedo: false}); - return - } - selAfter = event; - } else if (suppress) { - source.push(event); - return - } else { break } - } - - // Build up a reverse change object to add to the opposite history - // stack (redo when undoing, and vice versa). - var antiChanges = []; - pushSelectionToHistory(selAfter, dest); - dest.push({changes: antiChanges, generation: hist.generation}); - hist.generation = event.generation || ++hist.maxGeneration; - - var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); - - var loop = function ( i ) { - var change = event.changes[i]; - change.origin = type; - if (filter && !filterChange(doc, change, false)) { - source.length = 0; - return {} - } - - antiChanges.push(historyChangeFromChange(doc, change)); - - var after = i ? computeSelAfterChange(doc, change) : lst(source); - makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); - if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); } - var rebased = []; - - // Propagate to the linked documents - linkedDocs(doc, function (doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change); - rebased.push(doc.history); - } - makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); - }); - }; - - for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { - var returned = loop( i$1 ); - - if ( returned ) return returned.v; - } -} - -// Sub-views need their line numbers shifted when text is added -// above or below them in the parent document. -function shiftDoc(doc, distance) { - if (distance == 0) { return } - doc.first += distance; - doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range( - Pos(range.anchor.line + distance, range.anchor.ch), - Pos(range.head.line + distance, range.head.ch) - ); }), doc.sel.primIndex); - if (doc.cm) { - regChange(doc.cm, doc.first, doc.first - distance, distance); - for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) - { regLineChange(doc.cm, l, "gutter"); } - } -} - -// More lower-level change function, handling only a single document -// (not linked ones). -function makeChangeSingleDoc(doc, change, selAfter, spans) { - if (doc.cm && !doc.cm.curOp) - { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) } - - if (change.to.line < doc.first) { - shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); - return - } - if (change.from.line > doc.lastLine()) { return } - - // Clip the change to the size of this doc - if (change.from.line < doc.first) { - var shift = change.text.length - 1 - (doc.first - change.from.line); - shiftDoc(doc, shift); - change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), - text: [lst(change.text)], origin: change.origin}; - } - var last = doc.lastLine(); - if (change.to.line > last) { - change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), - text: [change.text[0]], origin: change.origin}; - } - - change.removed = getBetween(doc, change.from, change.to); - - if (!selAfter) { selAfter = computeSelAfterChange(doc, change); } - if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); } - else { updateDoc(doc, change, spans); } - setSelectionNoUndo(doc, selAfter, sel_dontScroll); -} - -// Handle the interaction of a change to a document with the editor -// that this document is part of. -function makeChangeSingleDocInEditor(cm, change, spans) { - var doc = cm.doc, display = cm.display, from = change.from, to = change.to; - - var recomputeMaxLength = false, checkWidthStart = from.line; - if (!cm.options.lineWrapping) { - checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); - doc.iter(checkWidthStart, to.line + 1, function (line) { - if (line == display.maxLine) { - recomputeMaxLength = true; - return true - } - }); - } - - if (doc.sel.contains(change.from, change.to) > -1) - { signalCursorActivity(cm); } - - updateDoc(doc, change, spans, estimateHeight(cm)); - - if (!cm.options.lineWrapping) { - doc.iter(checkWidthStart, from.line + change.text.length, function (line) { - var len = lineLength(line); - if (len > display.maxLineLength) { - display.maxLine = line; - display.maxLineLength = len; - display.maxLineChanged = true; - recomputeMaxLength = false; - } - }); - if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; } - } - - retreatFrontier(doc, from.line); - startWorker(cm, 400); - - var lendiff = change.text.length - (to.line - from.line) - 1; - // Remember that these lines changed, for updating the display - if (change.full) - { regChange(cm); } - else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) - { regLineChange(cm, from.line, "text"); } - else - { regChange(cm, from.line, to.line + 1, lendiff); } - - var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); - if (changeHandler || changesHandler) { - var obj = { - from: from, to: to, - text: change.text, - removed: change.removed, - origin: change.origin - }; - if (changeHandler) { signalLater(cm, "change", cm, obj); } - if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); } - } - cm.display.selForContextMenu = null; -} - -function replaceRange(doc, code, from, to, origin) { - if (!to) { to = from; } - if (cmp(to, from) < 0) { var assign; - (assign = [to, from], from = assign[0], to = assign[1]); } - if (typeof code == "string") { code = doc.splitLines(code); } - makeChange(doc, {from: from, to: to, text: code, origin: origin}); -} - -// Rebasing/resetting history to deal with externally-sourced changes - -function rebaseHistSelSingle(pos, from, to, diff) { - if (to < pos.line) { - pos.line += diff; - } else if (from < pos.line) { - pos.line = from; - pos.ch = 0; - } -} - -// Tries to rebase an array of history events given a change in the -// document. If the change touches the same lines as the event, the -// event, and everything 'behind' it, is discarded. If the change is -// before the event, the event's positions are updated. Uses a -// copy-on-write scheme for the positions, to avoid having to -// reallocate them all on every rebase, but also avoid problems with -// shared position objects being unsafely updated. -function rebaseHistArray(array, from, to, diff) { - for (var i = 0; i < array.length; ++i) { - var sub = array[i], ok = true; - if (sub.ranges) { - if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } - for (var j = 0; j < sub.ranges.length; j++) { - rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); - rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); - } - continue - } - for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { - var cur = sub.changes[j$1]; - if (to < cur.from.line) { - cur.from = Pos(cur.from.line + diff, cur.from.ch); - cur.to = Pos(cur.to.line + diff, cur.to.ch); - } else if (from <= cur.to.line) { - ok = false; - break - } - } - if (!ok) { - array.splice(0, i + 1); - i = 0; - } - } -} - -function rebaseHist(hist, change) { - var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; - rebaseHistArray(hist.done, from, to, diff); - rebaseHistArray(hist.undone, from, to, diff); -} - -// Utility for applying a change to a line by handle or number, -// returning the number and optionally registering the line as -// changed. -function changeLine(doc, handle, changeType, op) { - var no = handle, line = handle; - if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); } - else { no = lineNo(handle); } - if (no == null) { return null } - if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); } - return line -} - -// The document is represented as a BTree consisting of leaves, with -// chunk of lines in them, and branches, with up to ten leaves or -// other branch nodes below them. The top node is always a branch -// node, and is the document object itself (meaning it has -// additional methods and properties). -// -// All nodes have parent links. The tree is used both to go from -// line numbers to line objects, and to go from objects to numbers. -// It also indexes by height, and is used to convert between height -// and line object, and to find the total height of the document. -// -// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html - -function LeafChunk(lines) { - var this$1 = this; - - this.lines = lines; - this.parent = null; - var height = 0; - for (var i = 0; i < lines.length; ++i) { - lines[i].parent = this$1; - height += lines[i].height; - } - this.height = height; -} - -LeafChunk.prototype = { - chunkSize: function() { return this.lines.length }, - - // Remove the n lines at offset 'at'. - removeInner: function(at, n) { - var this$1 = this; - - for (var i = at, e = at + n; i < e; ++i) { - var line = this$1.lines[i]; - this$1.height -= line.height; - cleanUpLine(line); - signalLater(line, "delete"); - } - this.lines.splice(at, n); - }, - - // Helper used to collapse a small branch into a single leaf. - collapse: function(lines) { - lines.push.apply(lines, this.lines); - }, - - // Insert the given array of lines at offset 'at', count them as - // having the given height. - insertInner: function(at, lines, height) { - var this$1 = this; - - this.height += height; - this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); - for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; } - }, - - // Used to iterate over a part of the tree. - iterN: function(at, n, op) { - var this$1 = this; - - for (var e = at + n; at < e; ++at) - { if (op(this$1.lines[at])) { return true } } - } -}; - -function BranchChunk(children) { - var this$1 = this; - - this.children = children; - var size = 0, height = 0; - for (var i = 0; i < children.length; ++i) { - var ch = children[i]; - size += ch.chunkSize(); height += ch.height; - ch.parent = this$1; - } - this.size = size; - this.height = height; - this.parent = null; -} - -BranchChunk.prototype = { - chunkSize: function() { return this.size }, - - removeInner: function(at, n) { - var this$1 = this; - - this.size -= n; - for (var i = 0; i < this.children.length; ++i) { - var child = this$1.children[i], sz = child.chunkSize(); - if (at < sz) { - var rm = Math.min(n, sz - at), oldHeight = child.height; - child.removeInner(at, rm); - this$1.height -= oldHeight - child.height; - if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; } - if ((n -= rm) == 0) { break } - at = 0; - } else { at -= sz; } - } - // If the result is smaller than 25 lines, ensure that it is a - // single leaf node. - if (this.size - n < 25 && - (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { - var lines = []; - this.collapse(lines); - this.children = [new LeafChunk(lines)]; - this.children[0].parent = this; - } - }, - - collapse: function(lines) { - var this$1 = this; - - for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); } - }, - - insertInner: function(at, lines, height) { - var this$1 = this; - - this.size += lines.length; - this.height += height; - for (var i = 0; i < this.children.length; ++i) { - var child = this$1.children[i], sz = child.chunkSize(); - if (at <= sz) { - child.insertInner(at, lines, height); - if (child.lines && child.lines.length > 50) { - // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. - // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. - var remaining = child.lines.length % 25 + 25; - for (var pos = remaining; pos < child.lines.length;) { - var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); - child.height -= leaf.height; - this$1.children.splice(++i, 0, leaf); - leaf.parent = this$1; - } - child.lines = child.lines.slice(0, remaining); - this$1.maybeSpill(); - } - break - } - at -= sz; - } - }, - - // When a node has grown, check whether it should be split. - maybeSpill: function() { - if (this.children.length <= 10) { return } - var me = this; - do { - var spilled = me.children.splice(me.children.length - 5, 5); - var sibling = new BranchChunk(spilled); - if (!me.parent) { // Become the parent node - var copy = new BranchChunk(me.children); - copy.parent = me; - me.children = [copy, sibling]; - me = copy; - } else { - me.size -= sibling.size; - me.height -= sibling.height; - var myIndex = indexOf(me.parent.children, me); - me.parent.children.splice(myIndex + 1, 0, sibling); - } - sibling.parent = me.parent; - } while (me.children.length > 10) - me.parent.maybeSpill(); - }, - - iterN: function(at, n, op) { - var this$1 = this; - - for (var i = 0; i < this.children.length; ++i) { - var child = this$1.children[i], sz = child.chunkSize(); - if (at < sz) { - var used = Math.min(n, sz - at); - if (child.iterN(at, used, op)) { return true } - if ((n -= used) == 0) { break } - at = 0; - } else { at -= sz; } - } - } -}; - -// Line widgets are block elements displayed above or below a line. - -var LineWidget = function(doc, node, options) { - var this$1 = this; - - if (options) { for (var opt in options) { if (options.hasOwnProperty(opt)) - { this$1[opt] = options[opt]; } } } - this.doc = doc; - this.node = node; -}; - -LineWidget.prototype.clear = function () { - var this$1 = this; - - var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); - if (no == null || !ws) { return } - for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } } - if (!ws.length) { line.widgets = null; } - var height = widgetHeight(this); - updateLineHeight(line, Math.max(0, line.height - height)); - if (cm) { - runInOp(cm, function () { - adjustScrollWhenAboveVisible(cm, line, -height); - regLineChange(cm, no, "widget"); - }); - signalLater(cm, "lineWidgetCleared", cm, this, no); - } -}; - -LineWidget.prototype.changed = function () { - var this$1 = this; - - var oldH = this.height, cm = this.doc.cm, line = this.line; - this.height = null; - var diff = widgetHeight(this) - oldH; - if (!diff) { return } - updateLineHeight(line, line.height + diff); - if (cm) { - runInOp(cm, function () { - cm.curOp.forceUpdate = true; - adjustScrollWhenAboveVisible(cm, line, diff); - signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)); - }); - } -}; -eventMixin(LineWidget); - -function adjustScrollWhenAboveVisible(cm, line, diff) { - if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) - { addToScrollTop(cm, diff); } -} - -function addLineWidget(doc, handle, node, options) { - var widget = new LineWidget(doc, node, options); - var cm = doc.cm; - if (cm && widget.noHScroll) { cm.display.alignWidgets = true; } - changeLine(doc, handle, "widget", function (line) { - var widgets = line.widgets || (line.widgets = []); - if (widget.insertAt == null) { widgets.push(widget); } - else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); } - widget.line = line; - if (cm && !lineIsHidden(doc, line)) { - var aboveVisible = heightAtLine(line) < doc.scrollTop; - updateLineHeight(line, line.height + widgetHeight(widget)); - if (aboveVisible) { addToScrollTop(cm, widget.height); } - cm.curOp.forceUpdate = true; - } - return true - }); - if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); } - return widget -} - -// TEXTMARKERS - -// Created with markText and setBookmark methods. A TextMarker is a -// handle that can be used to clear or find a marked position in the -// document. Line objects hold arrays (markedSpans) containing -// {from, to, marker} object pointing to such marker objects, and -// indicating that such a marker is present on that line. Multiple -// lines may point to the same marker when it spans across lines. -// The spans will have null for their from/to properties when the -// marker continues beyond the start/end of the line. Markers have -// links back to the lines they currently touch. - -// Collapsed markers have unique ids, in order to be able to order -// them, which is needed for uniquely determining an outer marker -// when they overlap (they may nest, but not partially overlap). -var nextMarkerId = 0; - -var TextMarker = function(doc, type) { - this.lines = []; - this.type = type; - this.doc = doc; - this.id = ++nextMarkerId; -}; - -// Clear the marker. -TextMarker.prototype.clear = function () { - var this$1 = this; - - if (this.explicitlyCleared) { return } - var cm = this.doc.cm, withOp = cm && !cm.curOp; - if (withOp) { startOperation(cm); } - if (hasHandler(this, "clear")) { - var found = this.find(); - if (found) { signalLater(this, "clear", found.from, found.to); } - } - var min = null, max = null; - for (var i = 0; i < this.lines.length; ++i) { - var line = this$1.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this$1); - if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), "text"); } - else if (cm) { - if (span.to != null) { max = lineNo(line); } - if (span.from != null) { min = lineNo(line); } - } - line.markedSpans = removeMarkedSpan(line.markedSpans, span); - if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm) - { updateLineHeight(line, textHeight(cm.display)); } - } - if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { - var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual); - if (len > cm.display.maxLineLength) { - cm.display.maxLine = visual; - cm.display.maxLineLength = len; - cm.display.maxLineChanged = true; - } - } } - - if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); } - this.lines.length = 0; - this.explicitlyCleared = true; - if (this.atomic && this.doc.cantEdit) { - this.doc.cantEdit = false; - if (cm) { reCheckSelection(cm.doc); } - } - if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); } - if (withOp) { endOperation(cm); } - if (this.parent) { this.parent.clear(); } -}; - -// Find the position of the marker in the document. Returns a {from, -// to} object by default. Side can be passed to get a specific side -// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the -// Pos objects returned contain a line object, rather than a line -// number (used to prevent looking up the same line twice). -TextMarker.prototype.find = function (side, lineObj) { - var this$1 = this; - - if (side == null && this.type == "bookmark") { side = 1; } - var from, to; - for (var i = 0; i < this.lines.length; ++i) { - var line = this$1.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this$1); - if (span.from != null) { - from = Pos(lineObj ? line : lineNo(line), span.from); - if (side == -1) { return from } - } - if (span.to != null) { - to = Pos(lineObj ? line : lineNo(line), span.to); - if (side == 1) { return to } - } - } - return from && {from: from, to: to} -}; - -// Signals that the marker's widget changed, and surrounding layout -// should be recomputed. -TextMarker.prototype.changed = function () { - var this$1 = this; - - var pos = this.find(-1, true), widget = this, cm = this.doc.cm; - if (!pos || !cm) { return } - runInOp(cm, function () { - var line = pos.line, lineN = lineNo(pos.line); - var view = findViewForLine(cm, lineN); - if (view) { - clearLineMeasurementCacheFor(view); - cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; - } - cm.curOp.updateMaxLine = true; - if (!lineIsHidden(widget.doc, line) && widget.height != null) { - var oldHeight = widget.height; - widget.height = null; - var dHeight = widgetHeight(widget) - oldHeight; - if (dHeight) - { updateLineHeight(line, line.height + dHeight); } - } - signalLater(cm, "markerChanged", cm, this$1); - }); -}; - -TextMarker.prototype.attachLine = function (line) { - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) - { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); } - } - this.lines.push(line); -}; - -TextMarker.prototype.detachLine = function (line) { - this.lines.splice(indexOf(this.lines, line), 1); - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); - } -}; -eventMixin(TextMarker); - -// Create a marker, wire it up to the right lines, and -function markText(doc, from, to, options, type) { - // Shared markers (across linked documents) are handled separately - // (markTextShared will call out to this again, once per - // document). - if (options && options.shared) { return markTextShared(doc, from, to, options, type) } - // Ensure we are in an operation. - if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) } - - var marker = new TextMarker(doc, type), diff = cmp(from, to); - if (options) { copyObj(options, marker, false); } - // Don't connect empty markers unless clearWhenEmpty is false - if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) - { return marker } - if (marker.replacedWith) { - // Showing up as a widget implies collapsed (widget replaces text) - marker.collapsed = true; - marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget"); - if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); } - if (options.insertLeft) { marker.widgetNode.insertLeft = true; } - } - if (marker.collapsed) { - if (conflictingCollapsedRange(doc, from.line, from, to, marker) || - from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) - { throw new Error("Inserting collapsed marker partially overlapping an existing one") } - seeCollapsedSpans(); - } - - if (marker.addToHistory) - { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); } - - var curLine = from.line, cm = doc.cm, updateMaxLine; - doc.iter(curLine, to.line + 1, function (line) { - if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) - { updateMaxLine = true; } - if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); } - addMarkedSpan(line, new MarkedSpan(marker, - curLine == from.line ? from.ch : null, - curLine == to.line ? to.ch : null)); - ++curLine; - }); - // lineIsHidden depends on the presence of the spans, so needs a second pass - if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) { - if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); } - }); } - - if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); } - - if (marker.readOnly) { - seeReadOnlySpans(); - if (doc.history.done.length || doc.history.undone.length) - { doc.clearHistory(); } - } - if (marker.collapsed) { - marker.id = ++nextMarkerId; - marker.atomic = true; - } - if (cm) { - // Sync editor state - if (updateMaxLine) { cm.curOp.updateMaxLine = true; } - if (marker.collapsed) - { regChange(cm, from.line, to.line + 1); } - else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) - { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } } - if (marker.atomic) { reCheckSelection(cm.doc); } - signalLater(cm, "markerAdded", cm, marker); - } - return marker -} - -// SHARED TEXTMARKERS - -// A shared marker spans multiple linked documents. It is -// implemented as a meta-marker-object controlling multiple normal -// markers. -var SharedTextMarker = function(markers, primary) { - var this$1 = this; - - this.markers = markers; - this.primary = primary; - for (var i = 0; i < markers.length; ++i) - { markers[i].parent = this$1; } -}; - -SharedTextMarker.prototype.clear = function () { - var this$1 = this; - - if (this.explicitlyCleared) { return } - this.explicitlyCleared = true; - for (var i = 0; i < this.markers.length; ++i) - { this$1.markers[i].clear(); } - signalLater(this, "clear"); -}; - -SharedTextMarker.prototype.find = function (side, lineObj) { - return this.primary.find(side, lineObj) -}; -eventMixin(SharedTextMarker); - -function markTextShared(doc, from, to, options, type) { - options = copyObj(options); - options.shared = false; - var markers = [markText(doc, from, to, options, type)], primary = markers[0]; - var widget = options.widgetNode; - linkedDocs(doc, function (doc) { - if (widget) { options.widgetNode = widget.cloneNode(true); } - markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); - for (var i = 0; i < doc.linked.length; ++i) - { if (doc.linked[i].isParent) { return } } - primary = lst(markers); - }); - return new SharedTextMarker(markers, primary) -} - -function findSharedMarkers(doc) { - return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; }) -} - -function copySharedMarkers(doc, markers) { - for (var i = 0; i < markers.length; i++) { - var marker = markers[i], pos = marker.find(); - var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); - if (cmp(mFrom, mTo)) { - var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); - marker.markers.push(subMark); - subMark.parent = marker; - } - } -} - -function detachSharedMarkers(markers) { - var loop = function ( i ) { - var marker = markers[i], linked = [marker.primary.doc]; - linkedDocs(marker.primary.doc, function (d) { return linked.push(d); }); - for (var j = 0; j < marker.markers.length; j++) { - var subMarker = marker.markers[j]; - if (indexOf(linked, subMarker.doc) == -1) { - subMarker.parent = null; - marker.markers.splice(j--, 1); - } - } - }; - - for (var i = 0; i < markers.length; i++) loop( i ); -} - -var nextDocId = 0; -var Doc = function(text, mode, firstLine, lineSep, direction) { - if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) } - if (firstLine == null) { firstLine = 0; } - - BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); - this.first = firstLine; - this.scrollTop = this.scrollLeft = 0; - this.cantEdit = false; - this.cleanGeneration = 1; - this.modeFrontier = this.highlightFrontier = firstLine; - var start = Pos(firstLine, 0); - this.sel = simpleSelection(start); - this.history = new History(null); - this.id = ++nextDocId; - this.modeOption = mode; - this.lineSep = lineSep; - this.direction = (direction == "rtl") ? "rtl" : "ltr"; - this.extend = false; - - if (typeof text == "string") { text = this.splitLines(text); } - updateDoc(this, {from: start, to: start, text: text}); - setSelection(this, simpleSelection(start), sel_dontScroll); -}; - -Doc.prototype = createObj(BranchChunk.prototype, { - constructor: Doc, - // Iterate over the document. Supports two forms -- with only one - // argument, it calls that for each line in the document. With - // three, it iterates over the range given by the first two (with - // the second being non-inclusive). - iter: function(from, to, op) { - if (op) { this.iterN(from - this.first, to - from, op); } - else { this.iterN(this.first, this.first + this.size, from); } - }, - - // Non-public interface for adding and removing lines. - insert: function(at, lines) { - var height = 0; - for (var i = 0; i < lines.length; ++i) { height += lines[i].height; } - this.insertInner(at - this.first, lines, height); - }, - remove: function(at, n) { this.removeInner(at - this.first, n); }, - - // From here, the methods are part of the public interface. Most - // are also available from CodeMirror (editor) instances. - - getValue: function(lineSep) { - var lines = getLines(this, this.first, this.first + this.size); - if (lineSep === false) { return lines } - return lines.join(lineSep || this.lineSeparator()) - }, - setValue: docMethodOp(function(code) { - var top = Pos(this.first, 0), last = this.first + this.size - 1; - makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), - text: this.splitLines(code), origin: "setValue", full: true}, true); - if (this.cm) { scrollToCoords(this.cm, 0, 0); } - setSelection(this, simpleSelection(top), sel_dontScroll); - }), - replaceRange: function(code, from, to, origin) { - from = clipPos(this, from); - to = to ? clipPos(this, to) : from; - replaceRange(this, code, from, to, origin); - }, - getRange: function(from, to, lineSep) { - var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); - if (lineSep === false) { return lines } - return lines.join(lineSep || this.lineSeparator()) - }, - - getLine: function(line) {var l = this.getLineHandle(line); return l && l.text}, - - getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }}, - getLineNumber: function(line) {return lineNo(line)}, - - getLineHandleVisualStart: function(line) { - if (typeof line == "number") { line = getLine(this, line); } - return visualLine(line) - }, - - lineCount: function() {return this.size}, - firstLine: function() {return this.first}, - lastLine: function() {return this.first + this.size - 1}, - - clipPos: function(pos) {return clipPos(this, pos)}, - - getCursor: function(start) { - var range$$1 = this.sel.primary(), pos; - if (start == null || start == "head") { pos = range$$1.head; } - else if (start == "anchor") { pos = range$$1.anchor; } - else if (start == "end" || start == "to" || start === false) { pos = range$$1.to(); } - else { pos = range$$1.from(); } - return pos - }, - listSelections: function() { return this.sel.ranges }, - somethingSelected: function() {return this.sel.somethingSelected()}, - - setCursor: docMethodOp(function(line, ch, options) { - setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); - }), - setSelection: docMethodOp(function(anchor, head, options) { - setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); - }), - extendSelection: docMethodOp(function(head, other, options) { - extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); - }), - extendSelections: docMethodOp(function(heads, options) { - extendSelections(this, clipPosArray(this, heads), options); - }), - extendSelectionsBy: docMethodOp(function(f, options) { - var heads = map(this.sel.ranges, f); - extendSelections(this, clipPosArray(this, heads), options); - }), - setSelections: docMethodOp(function(ranges, primary, options) { - var this$1 = this; - - if (!ranges.length) { return } - var out = []; - for (var i = 0; i < ranges.length; i++) - { out[i] = new Range(clipPos(this$1, ranges[i].anchor), - clipPos(this$1, ranges[i].head)); } - if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); } - setSelection(this, normalizeSelection(out, primary), options); - }), - addSelection: docMethodOp(function(anchor, head, options) { - var ranges = this.sel.ranges.slice(0); - ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); - setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); - }), - - getSelection: function(lineSep) { - var this$1 = this; - - var ranges = this.sel.ranges, lines; - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()); - lines = lines ? lines.concat(sel) : sel; - } - if (lineSep === false) { return lines } - else { return lines.join(lineSep || this.lineSeparator()) } - }, - getSelections: function(lineSep) { - var this$1 = this; - - var parts = [], ranges = this.sel.ranges; - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()); - if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); } - parts[i] = sel; - } - return parts - }, - replaceSelection: function(code, collapse, origin) { - var dup = []; - for (var i = 0; i < this.sel.ranges.length; i++) - { dup[i] = code; } - this.replaceSelections(dup, collapse, origin || "+input"); - }, - replaceSelections: docMethodOp(function(code, collapse, origin) { - var this$1 = this; - - var changes = [], sel = this.sel; - for (var i = 0; i < sel.ranges.length; i++) { - var range$$1 = sel.ranges[i]; - changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin}; - } - var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); - for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) - { makeChange(this$1, changes[i$1]); } - if (newSel) { setSelectionReplaceHistory(this, newSel); } - else if (this.cm) { ensureCursorVisible(this.cm); } - }), - undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), - redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), - undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), - redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), - - setExtending: function(val) {this.extend = val;}, - getExtending: function() {return this.extend}, - - historySize: function() { - var hist = this.history, done = 0, undone = 0; - for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } } - for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } } - return {undo: done, redo: undone} - }, - clearHistory: function() {this.history = new History(this.history.maxGeneration);}, - - markClean: function() { - this.cleanGeneration = this.changeGeneration(true); - }, - changeGeneration: function(forceSplit) { - if (forceSplit) - { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; } - return this.history.generation - }, - isClean: function (gen) { - return this.history.generation == (gen || this.cleanGeneration) - }, - - getHistory: function() { - return {done: copyHistoryArray(this.history.done), - undone: copyHistoryArray(this.history.undone)} - }, - setHistory: function(histData) { - var hist = this.history = new History(this.history.maxGeneration); - hist.done = copyHistoryArray(histData.done.slice(0), null, true); - hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); - }, - - setGutterMarker: docMethodOp(function(line, gutterID, value) { - return changeLine(this, line, "gutter", function (line) { - var markers = line.gutterMarkers || (line.gutterMarkers = {}); - markers[gutterID] = value; - if (!value && isEmpty(markers)) { line.gutterMarkers = null; } - return true - }) - }), - - clearGutter: docMethodOp(function(gutterID) { - var this$1 = this; - - this.iter(function (line) { - if (line.gutterMarkers && line.gutterMarkers[gutterID]) { - changeLine(this$1, line, "gutter", function () { - line.gutterMarkers[gutterID] = null; - if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; } - return true - }); - } - }); - }), - - lineInfo: function(line) { - var n; - if (typeof line == "number") { - if (!isLine(this, line)) { return null } - n = line; - line = getLine(this, line); - if (!line) { return null } - } else { - n = lineNo(line); - if (n == null) { return null } - } - return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, - textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, - widgets: line.widgets} - }, - - addLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass"; - if (!line[prop]) { line[prop] = cls; } - else if (classTest(cls).test(line[prop])) { return false } - else { line[prop] += " " + cls; } - return true - }) - }), - removeLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass"; - var cur = line[prop]; - if (!cur) { return false } - else if (cls == null) { line[prop] = null; } - else { - var found = cur.match(classTest(cls)); - if (!found) { return false } - var end = found.index + found[0].length; - line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; - } - return true - }) - }), - - addLineWidget: docMethodOp(function(handle, node, options) { - return addLineWidget(this, handle, node, options) - }), - removeLineWidget: function(widget) { widget.clear(); }, - - markText: function(from, to, options) { - return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range") - }, - setBookmark: function(pos, options) { - var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), - insertLeft: options && options.insertLeft, - clearWhenEmpty: false, shared: options && options.shared, - handleMouseEvents: options && options.handleMouseEvents}; - pos = clipPos(this, pos); - return markText(this, pos, pos, realOpts, "bookmark") - }, - findMarksAt: function(pos) { - pos = clipPos(this, pos); - var markers = [], spans = getLine(this, pos.line).markedSpans; - if (spans) { for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if ((span.from == null || span.from <= pos.ch) && - (span.to == null || span.to >= pos.ch)) - { markers.push(span.marker.parent || span.marker); } - } } - return markers - }, - findMarks: function(from, to, filter) { - from = clipPos(this, from); to = clipPos(this, to); - var found = [], lineNo$$1 = from.line; - this.iter(from.line, to.line + 1, function (line) { - var spans = line.markedSpans; - if (spans) { for (var i = 0; i < spans.length; i++) { - var span = spans[i]; - if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to || - span.from == null && lineNo$$1 != from.line || - span.from != null && lineNo$$1 == to.line && span.from >= to.ch) && - (!filter || filter(span.marker))) - { found.push(span.marker.parent || span.marker); } - } } - ++lineNo$$1; - }); - return found - }, - getAllMarks: function() { - var markers = []; - this.iter(function (line) { - var sps = line.markedSpans; - if (sps) { for (var i = 0; i < sps.length; ++i) - { if (sps[i].from != null) { markers.push(sps[i].marker); } } } - }); - return markers - }, - - posFromIndex: function(off) { - var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length; - this.iter(function (line) { - var sz = line.text.length + sepSize; - if (sz > off) { ch = off; return true } - off -= sz; - ++lineNo$$1; - }); - return clipPos(this, Pos(lineNo$$1, ch)) - }, - indexFromPos: function (coords) { - coords = clipPos(this, coords); - var index = coords.ch; - if (coords.line < this.first || coords.ch < 0) { return 0 } - var sepSize = this.lineSeparator().length; - this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value - index += line.text.length + sepSize; - }); - return index - }, - - copy: function(copyHistory) { - var doc = new Doc(getLines(this, this.first, this.first + this.size), - this.modeOption, this.first, this.lineSep, this.direction); - doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; - doc.sel = this.sel; - doc.extend = false; - if (copyHistory) { - doc.history.undoDepth = this.history.undoDepth; - doc.setHistory(this.getHistory()); - } - return doc - }, - - linkedDoc: function(options) { - if (!options) { options = {}; } - var from = this.first, to = this.first + this.size; - if (options.from != null && options.from > from) { from = options.from; } - if (options.to != null && options.to < to) { to = options.to; } - var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction); - if (options.sharedHist) { copy.history = this.history - ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); - copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; - copySharedMarkers(copy, findSharedMarkers(this)); - return copy - }, - unlinkDoc: function(other) { - var this$1 = this; - - if (other instanceof CodeMirror$1) { other = other.doc; } - if (this.linked) { for (var i = 0; i < this.linked.length; ++i) { - var link = this$1.linked[i]; - if (link.doc != other) { continue } - this$1.linked.splice(i, 1); - other.unlinkDoc(this$1); - detachSharedMarkers(findSharedMarkers(this$1)); - break - } } - // If the histories were shared, split them again - if (other.history == this.history) { - var splitIds = [other.id]; - linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true); - other.history = new History(null); - other.history.done = copyHistoryArray(this.history.done, splitIds); - other.history.undone = copyHistoryArray(this.history.undone, splitIds); - } - }, - iterLinkedDocs: function(f) {linkedDocs(this, f);}, - - getMode: function() {return this.mode}, - getEditor: function() {return this.cm}, - - splitLines: function(str) { - if (this.lineSep) { return str.split(this.lineSep) } - return splitLinesAuto(str) - }, - lineSeparator: function() { return this.lineSep || "\n" }, - - setDirection: docMethodOp(function (dir) { - if (dir != "rtl") { dir = "ltr"; } - if (dir == this.direction) { return } - this.direction = dir; - this.iter(function (line) { return line.order = null; }); - if (this.cm) { directionChanged(this.cm); } - }) -}); - -// Public alias. -Doc.prototype.eachLine = Doc.prototype.iter; - -// Kludge to work around strange IE behavior where it'll sometimes -// re-fire a series of drag-related events right after the drop (#1551) -var lastDrop = 0; - -function onDrop(e) { - var cm = this; - clearDragCursor(cm); - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) - { return } - e_preventDefault(e); - if (ie) { lastDrop = +new Date; } - var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; - if (!pos || cm.isReadOnly()) { return } - // Might be a file drop, in which case we simply extract the text - // and insert it. - if (files && files.length && window.FileReader && window.File) { - var n = files.length, text = Array(n), read = 0; - var loadFile = function (file, i) { - if (cm.options.allowDropFileTypes && - indexOf(cm.options.allowDropFileTypes, file.type) == -1) - { return } - - var reader = new FileReader; - reader.onload = operation(cm, function () { - var content = reader.result; - if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = ""; } - text[i] = content; - if (++read == n) { - pos = clipPos(cm.doc, pos); - var change = {from: pos, to: pos, - text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())), - origin: "paste"}; - makeChange(cm.doc, change); - setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); - } - }); - reader.readAsText(file); - }; - for (var i = 0; i < n; ++i) { loadFile(files[i], i); } - } else { // Normal drop - // Don't do a replace if the drop happened inside of the selected text. - if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { - cm.state.draggingText(e); - // Ensure the editor is re-focused - setTimeout(function () { return cm.display.input.focus(); }, 20); - return - } - try { - var text$1 = e.dataTransfer.getData("Text"); - if (text$1) { - var selected; - if (cm.state.draggingText && !cm.state.draggingText.copy) - { selected = cm.listSelections(); } - setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); - if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1) - { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } } - cm.replaceSelection(text$1, "around", "paste"); - cm.display.input.focus(); - } - } - catch(e){} - } -} - -function onDragStart(cm, e) { - if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return } - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return } - - e.dataTransfer.setData("Text", cm.getSelection()); - e.dataTransfer.effectAllowed = "copyMove"; - - // Use dummy image instead of default browsers image. - // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. - if (e.dataTransfer.setDragImage && !safari) { - var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); - img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; - if (presto) { - img.width = img.height = 1; - cm.display.wrapper.appendChild(img); - // Force a relayout, or Opera won't use our image for some obscure reason - img._top = img.offsetTop; - } - e.dataTransfer.setDragImage(img, 0, 0); - if (presto) { img.parentNode.removeChild(img); } - } -} - -function onDragOver(cm, e) { - var pos = posFromMouse(cm, e); - if (!pos) { return } - var frag = document.createDocumentFragment(); - drawSelectionCursor(cm, pos, frag); - if (!cm.display.dragCursor) { - cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); - cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); - } - removeChildrenAndAdd(cm.display.dragCursor, frag); -} - -function clearDragCursor(cm) { - if (cm.display.dragCursor) { - cm.display.lineSpace.removeChild(cm.display.dragCursor); - cm.display.dragCursor = null; - } -} - -// These must be handled carefully, because naively registering a -// handler for each editor will cause the editors to never be -// garbage collected. - -function forEachCodeMirror(f) { - if (!document.getElementsByClassName) { return } - var byClass = document.getElementsByClassName("CodeMirror"); - for (var i = 0; i < byClass.length; i++) { - var cm = byClass[i].CodeMirror; - if (cm) { f(cm); } - } -} - -var globalsRegistered = false; -function ensureGlobalHandlers() { - if (globalsRegistered) { return } - registerGlobalHandlers(); - globalsRegistered = true; -} -function registerGlobalHandlers() { - // When the window resizes, we need to refresh active editors. - var resizeTimer; - on(window, "resize", function () { - if (resizeTimer == null) { resizeTimer = setTimeout(function () { - resizeTimer = null; - forEachCodeMirror(onResize); - }, 100); } - }); - // When the window loses focus, we want to show the editor as blurred - on(window, "blur", function () { return forEachCodeMirror(onBlur); }); -} -// Called when the window resizes -function onResize(cm) { - var d = cm.display; - if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) - { return } - // Might be a text scaling operation, clear size caches. - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - d.scrollbarsClipped = false; - cm.setSize(); -} - -var keyNames = { - 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", - 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", - 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", - 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", - 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", 145: "ScrollLock", - 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", - 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", - 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" -}; - -// Number keys -for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); } -// Alphabetic keys -for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); } -// Function keys -for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; } - -var keyMap = {}; - -keyMap.basic = { - "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", - "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", - "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", - "Tab": "defaultTab", "Shift-Tab": "indentAuto", - "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", - "Esc": "singleSelection" -}; -// Note that the save and find-related commands aren't defined by -// default. User code or addons can define them. Unknown commands -// are simply ignored. -keyMap.pcDefault = { - "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", - "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", - "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", - "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", - "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", - "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", - "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", - fallthrough: "basic" -}; -// Very basic readline/emacs-style bindings, which are standard on Mac. -keyMap.emacsy = { - "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", - "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", - "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", - "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", - "Ctrl-O": "openLine" -}; -keyMap.macDefault = { - "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", - "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", - "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", - "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", - "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", - "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", - "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", - fallthrough: ["basic", "emacsy"] -}; -keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; - -// KEYMAP DISPATCH - -function normalizeKeyName(name) { - var parts = name.split(/-(?!$)/); - name = parts[parts.length - 1]; - var alt, ctrl, shift, cmd; - for (var i = 0; i < parts.length - 1; i++) { - var mod = parts[i]; - if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; } - else if (/^a(lt)?$/i.test(mod)) { alt = true; } - else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; } - else if (/^s(hift)?$/i.test(mod)) { shift = true; } - else { throw new Error("Unrecognized modifier name: " + mod) } - } - if (alt) { name = "Alt-" + name; } - if (ctrl) { name = "Ctrl-" + name; } - if (cmd) { name = "Cmd-" + name; } - if (shift) { name = "Shift-" + name; } - return name -} - -// This is a kludge to keep keymaps mostly working as raw objects -// (backwards compatibility) while at the same time support features -// like normalization and multi-stroke key bindings. It compiles a -// new normalized keymap, and then updates the old object to reflect -// this. -function normalizeKeyMap(keymap) { - var copy = {}; - for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) { - var value = keymap[keyname]; - if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue } - if (value == "...") { delete keymap[keyname]; continue } - - var keys = map(keyname.split(" "), normalizeKeyName); - for (var i = 0; i < keys.length; i++) { - var val = (void 0), name = (void 0); - if (i == keys.length - 1) { - name = keys.join(" "); - val = value; - } else { - name = keys.slice(0, i + 1).join(" "); - val = "..."; - } - var prev = copy[name]; - if (!prev) { copy[name] = val; } - else if (prev != val) { throw new Error("Inconsistent bindings for " + name) } - } - delete keymap[keyname]; - } } - for (var prop in copy) { keymap[prop] = copy[prop]; } - return keymap -} - -function lookupKey(key, map$$1, handle, context) { - map$$1 = getKeyMap(map$$1); - var found = map$$1.call ? map$$1.call(key, context) : map$$1[key]; - if (found === false) { return "nothing" } - if (found === "...") { return "multi" } - if (found != null && handle(found)) { return "handled" } - - if (map$$1.fallthrough) { - if (Object.prototype.toString.call(map$$1.fallthrough) != "[object Array]") - { return lookupKey(key, map$$1.fallthrough, handle, context) } - for (var i = 0; i < map$$1.fallthrough.length; i++) { - var result = lookupKey(key, map$$1.fallthrough[i], handle, context); - if (result) { return result } - } - } -} - -// Modifier key presses don't count as 'real' key presses for the -// purpose of keymap fallthrough. -function isModifierKey(value) { - var name = typeof value == "string" ? value : keyNames[value.keyCode]; - return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod" -} - -function addModifierNames(name, event, noShift) { - var base = name; - if (event.altKey && base != "Alt") { name = "Alt-" + name; } - if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; } - if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name; } - if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; } - return name -} - -// Look up the name of a key as indicated by an event object. -function keyName(event, noShift) { - if (presto && event.keyCode == 34 && event["char"]) { return false } - var name = keyNames[event.keyCode]; - if (name == null || event.altGraphKey) { return false } - // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause, - // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+) - if (event.keyCode == 3 && event.code) { name = event.code; } - return addModifierNames(name, event, noShift) -} - -function getKeyMap(val) { - return typeof val == "string" ? keyMap[val] : val -} - -// Helper for deleting text near the selection(s), used to implement -// backspace, delete, and similar functionality. -function deleteNearSelection(cm, compute) { - var ranges = cm.doc.sel.ranges, kill = []; - // Build up a set of ranges to kill first, merging overlapping - // ranges. - for (var i = 0; i < ranges.length; i++) { - var toKill = compute(ranges[i]); - while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { - var replaced = kill.pop(); - if (cmp(replaced.from, toKill.from) < 0) { - toKill.from = replaced.from; - break - } - } - kill.push(toKill); - } - // Next, remove those actual ranges. - runInOp(cm, function () { - for (var i = kill.length - 1; i >= 0; i--) - { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); } - ensureCursorVisible(cm); - }); -} - -function moveCharLogically(line, ch, dir) { - var target = skipExtendingChars(line.text, ch + dir, dir); - return target < 0 || target > line.text.length ? null : target -} - -function moveLogically(line, start, dir) { - var ch = moveCharLogically(line, start.ch, dir); - return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before") -} - -function endOfLine(visually, cm, lineObj, lineNo, dir) { - if (visually) { - var order = getOrder(lineObj, cm.doc.direction); - if (order) { - var part = dir < 0 ? lst(order) : order[0]; - var moveInStorageOrder = (dir < 0) == (part.level == 1); - var sticky = moveInStorageOrder ? "after" : "before"; - var ch; - // With a wrapped rtl chunk (possibly spanning multiple bidi parts), - // it could be that the last bidi part is not on the last visual line, - // since visual lines contain content order-consecutive chunks. - // Thus, in rtl, we are looking for the first (content-order) character - // in the rtl chunk that is on the last line (that is, the same line - // as the last (content-order) character). - if (part.level > 0 || cm.doc.direction == "rtl") { - var prep = prepareMeasureForLine(cm, lineObj); - ch = dir < 0 ? lineObj.text.length - 1 : 0; - var targetTop = measureCharPrepared(cm, prep, ch).top; - ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch); - if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); } - } else { ch = dir < 0 ? part.to : part.from; } - return new Pos(lineNo, ch, sticky) - } - } - return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after") -} - -function moveVisually(cm, line, start, dir) { - var bidi = getOrder(line, cm.doc.direction); - if (!bidi) { return moveLogically(line, start, dir) } - if (start.ch >= line.text.length) { - start.ch = line.text.length; - start.sticky = "before"; - } else if (start.ch <= 0) { - start.ch = 0; - start.sticky = "after"; - } - var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos]; - if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { - // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, - // nothing interesting happens. - return moveLogically(line, start, dir) - } - - var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); }; - var prep; - var getWrappedLineExtent = function (ch) { - if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} } - prep = prep || prepareMeasureForLine(cm, line); - return wrappedLineExtentChar(cm, line, prep, ch) - }; - var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch); - - if (cm.doc.direction == "rtl" || part.level == 1) { - var moveInStorageOrder = (part.level == 1) == (dir < 0); - var ch = mv(start, moveInStorageOrder ? 1 : -1); - if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) { - // Case 2: We move within an rtl part or in an rtl editor on the same visual line - var sticky = moveInStorageOrder ? "before" : "after"; - return new Pos(start.line, ch, sticky) - } - } - - // Case 3: Could not move within this bidi part in this visual line, so leave - // the current bidi part - - var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { - var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder - ? new Pos(start.line, mv(ch, 1), "before") - : new Pos(start.line, ch, "after"); }; - - for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { - var part = bidi[partPos]; - var moveInStorageOrder = (dir > 0) == (part.level != 1); - var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1); - if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) } - ch = moveInStorageOrder ? part.from : mv(part.to, -1); - if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) } - } - }; - - // Case 3a: Look for other bidi parts on the same visual line - var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent); - if (res) { return res } - - // Case 3b: Look for other bidi parts on the next visual line - var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1); - if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { - res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)); - if (res) { return res } - } - - // Case 4: Nowhere to move - return null -} - -// Commands are parameter-less actions that can be performed on an -// editor, mostly used for keybindings. -var commands = { - selectAll: selectAll, - singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, - killLine: function (cm) { return deleteNearSelection(cm, function (range) { - if (range.empty()) { - var len = getLine(cm.doc, range.head.line).text.length; - if (range.head.ch == len && range.head.line < cm.lastLine()) - { return {from: range.head, to: Pos(range.head.line + 1, 0)} } - else - { return {from: range.head, to: Pos(range.head.line, len)} } - } else { - return {from: range.from(), to: range.to()} - } - }); }, - deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({ - from: Pos(range.from().line, 0), - to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) - }); }); }, - delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({ - from: Pos(range.from().line, 0), to: range.from() - }); }); }, - delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { - var top = cm.charCoords(range.head, "div").top + 5; - var leftPos = cm.coordsChar({left: 0, top: top}, "div"); - return {from: leftPos, to: range.from()} - }); }, - delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) { - var top = cm.charCoords(range.head, "div").top + 5; - var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); - return {from: range.from(), to: rightPos } - }); }, - undo: function (cm) { return cm.undo(); }, - redo: function (cm) { return cm.redo(); }, - undoSelection: function (cm) { return cm.undoSelection(); }, - redoSelection: function (cm) { return cm.redoSelection(); }, - goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); }, - goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); }, - goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); }, - {origin: "+move", bias: 1} - ); }, - goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); }, - {origin: "+move", bias: 1} - ); }, - goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); }, - {origin: "+move", bias: -1} - ); }, - goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) { - var top = cm.cursorCoords(range.head, "div").top + 5; - return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") - }, sel_move); }, - goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) { - var top = cm.cursorCoords(range.head, "div").top + 5; - return cm.coordsChar({left: 0, top: top}, "div") - }, sel_move); }, - goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) { - var top = cm.cursorCoords(range.head, "div").top + 5; - var pos = cm.coordsChar({left: 0, top: top}, "div"); - if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) } - return pos - }, sel_move); }, - goLineUp: function (cm) { return cm.moveV(-1, "line"); }, - goLineDown: function (cm) { return cm.moveV(1, "line"); }, - goPageUp: function (cm) { return cm.moveV(-1, "page"); }, - goPageDown: function (cm) { return cm.moveV(1, "page"); }, - goCharLeft: function (cm) { return cm.moveH(-1, "char"); }, - goCharRight: function (cm) { return cm.moveH(1, "char"); }, - goColumnLeft: function (cm) { return cm.moveH(-1, "column"); }, - goColumnRight: function (cm) { return cm.moveH(1, "column"); }, - goWordLeft: function (cm) { return cm.moveH(-1, "word"); }, - goGroupRight: function (cm) { return cm.moveH(1, "group"); }, - goGroupLeft: function (cm) { return cm.moveH(-1, "group"); }, - goWordRight: function (cm) { return cm.moveH(1, "word"); }, - delCharBefore: function (cm) { return cm.deleteH(-1, "char"); }, - delCharAfter: function (cm) { return cm.deleteH(1, "char"); }, - delWordBefore: function (cm) { return cm.deleteH(-1, "word"); }, - delWordAfter: function (cm) { return cm.deleteH(1, "word"); }, - delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); }, - delGroupAfter: function (cm) { return cm.deleteH(1, "group"); }, - indentAuto: function (cm) { return cm.indentSelection("smart"); }, - indentMore: function (cm) { return cm.indentSelection("add"); }, - indentLess: function (cm) { return cm.indentSelection("subtract"); }, - insertTab: function (cm) { return cm.replaceSelection("\t"); }, - insertSoftTab: function (cm) { - var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; - for (var i = 0; i < ranges.length; i++) { - var pos = ranges[i].from(); - var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); - spaces.push(spaceStr(tabSize - col % tabSize)); - } - cm.replaceSelections(spaces); - }, - defaultTab: function (cm) { - if (cm.somethingSelected()) { cm.indentSelection("add"); } - else { cm.execCommand("insertTab"); } - }, - // Swap the two chars left and right of each selection's head. - // Move cursor behind the two swapped characters afterwards. - // - // Doesn't consider line feeds a character. - // Doesn't scan more than one line above to find a character. - // Doesn't do anything on an empty line. - // Doesn't do anything with non-empty selections. - transposeChars: function (cm) { return runInOp(cm, function () { - var ranges = cm.listSelections(), newSel = []; - for (var i = 0; i < ranges.length; i++) { - if (!ranges[i].empty()) { continue } - var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; - if (line) { - if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); } - if (cur.ch > 0) { - cur = new Pos(cur.line, cur.ch + 1); - cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), - Pos(cur.line, cur.ch - 2), cur, "+transpose"); - } else if (cur.line > cm.doc.first) { - var prev = getLine(cm.doc, cur.line - 1).text; - if (prev) { - cur = new Pos(cur.line, 1); - cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + - prev.charAt(prev.length - 1), - Pos(cur.line - 1, prev.length - 1), cur, "+transpose"); - } - } - } - newSel.push(new Range(cur, cur)); - } - cm.setSelections(newSel); - }); }, - newlineAndIndent: function (cm) { return runInOp(cm, function () { - var sels = cm.listSelections(); - for (var i = sels.length - 1; i >= 0; i--) - { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); } - sels = cm.listSelections(); - for (var i$1 = 0; i$1 < sels.length; i$1++) - { cm.indentLine(sels[i$1].from().line, null, true); } - ensureCursorVisible(cm); - }); }, - openLine: function (cm) { return cm.replaceSelection("\n", "start"); }, - toggleOverwrite: function (cm) { return cm.toggleOverwrite(); } -}; - - -function lineStart(cm, lineN) { - var line = getLine(cm.doc, lineN); - var visual = visualLine(line); - if (visual != line) { lineN = lineNo(visual); } - return endOfLine(true, cm, visual, lineN, 1) -} -function lineEnd(cm, lineN) { - var line = getLine(cm.doc, lineN); - var visual = visualLineEnd(line); - if (visual != line) { lineN = lineNo(visual); } - return endOfLine(true, cm, line, lineN, -1) -} -function lineStartSmart(cm, pos) { - var start = lineStart(cm, pos.line); - var line = getLine(cm.doc, start.line); - var order = getOrder(line, cm.doc.direction); - if (!order || order[0].level == 0) { - var firstNonWS = Math.max(0, line.text.search(/\S/)); - var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; - return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky) - } - return start -} - -// Run a handler that was bound to a key. -function doHandleBinding(cm, bound, dropShift) { - if (typeof bound == "string") { - bound = commands[bound]; - if (!bound) { return false } - } - // Ensure previous input has been read, so that the handler sees a - // consistent view of the document - cm.display.input.ensurePolled(); - var prevShift = cm.display.shift, done = false; - try { - if (cm.isReadOnly()) { cm.state.suppressEdits = true; } - if (dropShift) { cm.display.shift = false; } - done = bound(cm) != Pass; - } finally { - cm.display.shift = prevShift; - cm.state.suppressEdits = false; - } - return done -} - -function lookupKeyForEditor(cm, name, handle) { - for (var i = 0; i < cm.state.keyMaps.length; i++) { - var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); - if (result) { return result } - } - return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) - || lookupKey(name, cm.options.keyMap, handle, cm) -} - -// Note that, despite the name, this function is also used to check -// for bound mouse clicks. - -var stopSeq = new Delayed; - -function dispatchKey(cm, name, e, handle) { - var seq = cm.state.keySeq; - if (seq) { - if (isModifierKey(name)) { return "handled" } - if (/\'$/.test(name)) - { cm.state.keySeq = null; } - else - { stopSeq.set(50, function () { - if (cm.state.keySeq == seq) { - cm.state.keySeq = null; - cm.display.input.reset(); - } - }); } - if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true } - } - return dispatchKeyInner(cm, name, e, handle) -} - -function dispatchKeyInner(cm, name, e, handle) { - var result = lookupKeyForEditor(cm, name, handle); - - if (result == "multi") - { cm.state.keySeq = name; } - if (result == "handled") - { signalLater(cm, "keyHandled", cm, name, e); } - - if (result == "handled" || result == "multi") { - e_preventDefault(e); - restartBlink(cm); - } - - return !!result -} - -// Handle a key from the keydown event. -function handleKeyBinding(cm, e) { - var name = keyName(e, true); - if (!name) { return false } - - if (e.shiftKey && !cm.state.keySeq) { - // First try to resolve full name (including 'Shift-'). Failing - // that, see if there is a cursor-motion command (starting with - // 'go') bound to the keyname without 'Shift-'. - return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); }) - || dispatchKey(cm, name, e, function (b) { - if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) - { return doHandleBinding(cm, b) } - }) - } else { - return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); }) - } -} - -// Handle a key from the keypress event -function handleCharBinding(cm, e, ch) { - return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); }) -} - -var lastStoppedKey = null; -function onKeyDown(e) { - var cm = this; - cm.curOp.focus = activeElt(); - if (signalDOMEvent(cm, e)) { return } - // IE does strange things with escape. - if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; } - var code = e.keyCode; - cm.display.shift = code == 16 || e.shiftKey; - var handled = handleKeyBinding(cm, e); - if (presto) { - lastStoppedKey = handled ? code : null; - // Opera has no cut event... we try to at least catch the key combo - if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) - { cm.replaceSelection("", null, "cut"); } - } - - // Turn mouse into crosshair when Alt is held on Mac. - if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) - { showCrossHair(cm); } -} - -function showCrossHair(cm) { - var lineDiv = cm.display.lineDiv; - addClass(lineDiv, "CodeMirror-crosshair"); - - function up(e) { - if (e.keyCode == 18 || !e.altKey) { - rmClass(lineDiv, "CodeMirror-crosshair"); - off(document, "keyup", up); - off(document, "mouseover", up); - } - } - on(document, "keyup", up); - on(document, "mouseover", up); -} - -function onKeyUp(e) { - if (e.keyCode == 16) { this.doc.sel.shift = false; } - signalDOMEvent(this, e); -} - -function onKeyPress(e) { - var cm = this; - if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return } - var keyCode = e.keyCode, charCode = e.charCode; - if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return} - if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return } - var ch = String.fromCharCode(charCode == null ? keyCode : charCode); - // Some browsers fire keypress events for backspace - if (ch == "\x08") { return } - if (handleCharBinding(cm, e, ch)) { return } - cm.display.input.onKeyPress(e); -} - -var DOUBLECLICK_DELAY = 400; - -var PastClick = function(time, pos, button) { - this.time = time; - this.pos = pos; - this.button = button; -}; - -PastClick.prototype.compare = function (time, pos, button) { - return this.time + DOUBLECLICK_DELAY > time && - cmp(pos, this.pos) == 0 && button == this.button -}; - -var lastClick; -var lastDoubleClick; -function clickRepeat(pos, button) { - var now = +new Date; - if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { - lastClick = lastDoubleClick = null; - return "triple" - } else if (lastClick && lastClick.compare(now, pos, button)) { - lastDoubleClick = new PastClick(now, pos, button); - lastClick = null; - return "double" - } else { - lastClick = new PastClick(now, pos, button); - lastDoubleClick = null; - return "single" - } -} - -// A mouse down can be a single click, double click, triple click, -// start of selection drag, start of text drag, new cursor -// (ctrl-click), rectangle drag (alt-drag), or xwin -// middle-click-paste. Or it might be a click on something we should -// not interfere with, such as a scrollbar or widget. -function onMouseDown(e) { - var cm = this, display = cm.display; - if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return } - display.input.ensurePolled(); - display.shift = e.shiftKey; - - if (eventInWidget(display, e)) { - if (!webkit) { - // Briefly turn off draggability, to allow widgets to do - // normal dragging things. - display.scroller.draggable = false; - setTimeout(function () { return display.scroller.draggable = true; }, 100); - } - return - } - if (clickInGutter(cm, e)) { return } - var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single"; - window.focus(); - - // #3261: make sure, that we're not starting a second selection - if (button == 1 && cm.state.selectingText) - { cm.state.selectingText(e); } - - if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return } - - if (button == 1) { - if (pos) { leftButtonDown(cm, pos, repeat, e); } - else if (e_target(e) == display.scroller) { e_preventDefault(e); } - } else if (button == 2) { - if (pos) { extendSelection(cm.doc, pos); } - setTimeout(function () { return display.input.focus(); }, 20); - } else if (button == 3) { - if (captureRightClick) { onContextMenu(cm, e); } - else { delayBlurEvent(cm); } - } -} - -function handleMappedButton(cm, button, pos, repeat, event) { - var name = "Click"; - if (repeat == "double") { name = "Double" + name; } - else if (repeat == "triple") { name = "Triple" + name; } - name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; - - return dispatchKey(cm, addModifierNames(name, event), event, function (bound) { - if (typeof bound == "string") { bound = commands[bound]; } - if (!bound) { return false } - var done = false; - try { - if (cm.isReadOnly()) { cm.state.suppressEdits = true; } - done = bound(cm, pos) != Pass; - } finally { - cm.state.suppressEdits = false; - } - return done - }) -} - -function configureMouse(cm, repeat, event) { - var option = cm.getOption("configureMouse"); - var value = option ? option(cm, repeat, event) : {}; - if (value.unit == null) { - var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; - value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"; - } - if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; } - if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; } - if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); } - return value -} - -function leftButtonDown(cm, pos, repeat, event) { - if (ie) { setTimeout(bind(ensureFocus, cm), 0); } - else { cm.curOp.focus = activeElt(); } - - var behavior = configureMouse(cm, repeat, event); - - var sel = cm.doc.sel, contained; - if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && - repeat == "single" && (contained = sel.contains(pos)) > -1 && - (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && - (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) - { leftButtonStartDrag(cm, event, pos, behavior); } - else - { leftButtonSelect(cm, event, pos, behavior); } -} - -// Start a text drag. When it ends, see if any dragging actually -// happen, and treat as a click if it didn't. -function leftButtonStartDrag(cm, event, pos, behavior) { - var display = cm.display, moved = false; - var dragEnd = operation(cm, function (e) { - if (webkit) { display.scroller.draggable = false; } - cm.state.draggingText = false; - off(display.wrapper.ownerDocument, "mouseup", dragEnd); - off(display.wrapper.ownerDocument, "mousemove", mouseMove); - off(display.scroller, "dragstart", dragStart); - off(display.scroller, "drop", dragEnd); - if (!moved) { - e_preventDefault(e); - if (!behavior.addNew) - { extendSelection(cm.doc, pos, null, null, behavior.extend); } - // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) - if (webkit || ie && ie_version == 9) - { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); } - else - { display.input.focus(); } - } - }); - var mouseMove = function(e2) { - moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10; - }; - var dragStart = function () { return moved = true; }; - // Let the drag handler handle this. - if (webkit) { display.scroller.draggable = true; } - cm.state.draggingText = dragEnd; - dragEnd.copy = !behavior.moveOnDrag; - // IE's approach to draggable - if (display.scroller.dragDrop) { display.scroller.dragDrop(); } - on(display.wrapper.ownerDocument, "mouseup", dragEnd); - on(display.wrapper.ownerDocument, "mousemove", mouseMove); - on(display.scroller, "dragstart", dragStart); - on(display.scroller, "drop", dragEnd); - - delayBlurEvent(cm); - setTimeout(function () { return display.input.focus(); }, 20); -} - -function rangeForUnit(cm, pos, unit) { - if (unit == "char") { return new Range(pos, pos) } - if (unit == "word") { return cm.findWordAt(pos) } - if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) } - var result = unit(cm, pos); - return new Range(result.from, result.to) -} - -// Normal selection, as opposed to text dragging. -function leftButtonSelect(cm, event, start, behavior) { - var display = cm.display, doc = cm.doc; - e_preventDefault(event); - - var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; - if (behavior.addNew && !behavior.extend) { - ourIndex = doc.sel.contains(start); - if (ourIndex > -1) - { ourRange = ranges[ourIndex]; } - else - { ourRange = new Range(start, start); } - } else { - ourRange = doc.sel.primary(); - ourIndex = doc.sel.primIndex; - } - - if (behavior.unit == "rectangle") { - if (!behavior.addNew) { ourRange = new Range(start, start); } - start = posFromMouse(cm, event, true, true); - ourIndex = -1; - } else { - var range$$1 = rangeForUnit(cm, start, behavior.unit); - if (behavior.extend) - { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); } - else - { ourRange = range$$1; } - } - - if (!behavior.addNew) { - ourIndex = 0; - setSelection(doc, new Selection([ourRange], 0), sel_mouse); - startSel = doc.sel; - } else if (ourIndex == -1) { - ourIndex = ranges.length; - setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), - {scroll: false, origin: "*mouse"}); - } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { - setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), - {scroll: false, origin: "*mouse"}); - startSel = doc.sel; - } else { - replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); - } - - var lastPos = start; - function extendTo(pos) { - if (cmp(lastPos, pos) == 0) { return } - lastPos = pos; - - if (behavior.unit == "rectangle") { - var ranges = [], tabSize = cm.options.tabSize; - var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); - var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); - var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); - for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); - line <= end; line++) { - var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); - if (left == right) - { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); } - else if (text.length > leftPos) - { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } - } - if (!ranges.length) { ranges.push(new Range(start, start)); } - setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), - {origin: "*mouse", scroll: false}); - cm.scrollIntoView(pos); - } else { - var oldRange = ourRange; - var range$$1 = rangeForUnit(cm, pos, behavior.unit); - var anchor = oldRange.anchor, head; - if (cmp(range$$1.anchor, anchor) > 0) { - head = range$$1.head; - anchor = minPos(oldRange.from(), range$$1.anchor); - } else { - head = range$$1.anchor; - anchor = maxPos(oldRange.to(), range$$1.head); - } - var ranges$1 = startSel.ranges.slice(0); - ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)); - setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse); - } - } - - var editorSize = display.wrapper.getBoundingClientRect(); - // Used to ensure timeout re-tries don't fire when another extend - // happened in the meantime (clearTimeout isn't reliable -- at - // least on Chrome, the timeouts still happen even when cleared, - // if the clear happens after their scheduled firing time). - var counter = 0; - - function extend(e) { - var curCount = ++counter; - var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); - if (!cur) { return } - if (cmp(cur, lastPos) != 0) { - cm.curOp.focus = activeElt(); - extendTo(cur); - var visible = visibleLines(display, doc); - if (cur.line >= visible.to || cur.line < visible.from) - { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); } - } else { - var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; - if (outside) { setTimeout(operation(cm, function () { - if (counter != curCount) { return } - display.scroller.scrollTop += outside; - extend(e); - }), 50); } - } - } - - function done(e) { - cm.state.selectingText = false; - counter = Infinity; - e_preventDefault(e); - display.input.focus(); - off(display.wrapper.ownerDocument, "mousemove", move); - off(display.wrapper.ownerDocument, "mouseup", up); - doc.history.lastSelOrigin = null; - } - - var move = operation(cm, function (e) { - if (e.buttons === 0 || !e_button(e)) { done(e); } - else { extend(e); } - }); - var up = operation(cm, done); - cm.state.selectingText = up; - on(display.wrapper.ownerDocument, "mousemove", move); - on(display.wrapper.ownerDocument, "mouseup", up); -} - -// Used when mouse-selecting to adjust the anchor to the proper side -// of a bidi jump depending on the visual position of the head. -function bidiSimplify(cm, range$$1) { - var anchor = range$$1.anchor; - var head = range$$1.head; - var anchorLine = getLine(cm.doc, anchor.line); - if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 } - var order = getOrder(anchorLine); - if (!order) { return range$$1 } - var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index]; - if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 } - var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1); - if (boundary == 0 || boundary == order.length) { return range$$1 } - - // Compute the relative visual position of the head compared to the - // anchor (<0 is to the left, >0 to the right) - var leftSide; - if (head.line != anchor.line) { - leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0; - } else { - var headIndex = getBidiPartAt(order, head.ch, head.sticky); - var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1); - if (headIndex == boundary - 1 || headIndex == boundary) - { leftSide = dir < 0; } - else - { leftSide = dir > 0; } - } - - var usePart = order[boundary + (leftSide ? -1 : 0)]; - var from = leftSide == (usePart.level == 1); - var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before"; - return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head) -} - - -// Determines whether an event happened in the gutter, and fires the -// handlers for the corresponding event. -function gutterEvent(cm, e, type, prevent) { - var mX, mY; - if (e.touches) { - mX = e.touches[0].clientX; - mY = e.touches[0].clientY; - } else { - try { mX = e.clientX; mY = e.clientY; } - catch(e) { return false } - } - if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false } - if (prevent) { e_preventDefault(e); } - - var display = cm.display; - var lineBox = display.lineDiv.getBoundingClientRect(); - - if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) } - mY -= lineBox.top - display.viewOffset; - - for (var i = 0; i < cm.options.gutters.length; ++i) { - var g = display.gutters.childNodes[i]; - if (g && g.getBoundingClientRect().right >= mX) { - var line = lineAtHeight(cm.doc, mY); - var gutter = cm.options.gutters[i]; - signal(cm, type, cm, line, gutter, e); - return e_defaultPrevented(e) - } - } -} - -function clickInGutter(cm, e) { - return gutterEvent(cm, e, "gutterClick", true) -} - -// CONTEXT MENU HANDLING - -// To make the context menu work, we need to briefly unhide the -// textarea (making it as unobtrusive as possible) to let the -// right-click take effect on it. -function onContextMenu(cm, e) { - if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return } - if (signalDOMEvent(cm, e, "contextmenu")) { return } - cm.display.input.onContextMenu(e); -} - -function contextMenuInGutter(cm, e) { - if (!hasHandler(cm, "gutterContextMenu")) { return false } - return gutterEvent(cm, e, "gutterContextMenu", false) -} - -function themeChanged(cm) { - cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + - cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); - clearCaches(cm); -} - -var Init = {toString: function(){return "CodeMirror.Init"}}; - -var defaults = {}; -var optionHandlers = {}; - -function defineOptions(CodeMirror) { - var optionHandlers = CodeMirror.optionHandlers; - - function option(name, deflt, handle, notOnInit) { - CodeMirror.defaults[name] = deflt; - if (handle) { optionHandlers[name] = - notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; } - } - - CodeMirror.defineOption = option; - - // Passed to option handlers when there is no old value. - CodeMirror.Init = Init; - - // These two are, on init, called from the constructor because they - // have to be initialized before the editor can start at all. - option("value", "", function (cm, val) { return cm.setValue(val); }, true); - option("mode", null, function (cm, val) { - cm.doc.modeOption = val; - loadMode(cm); - }, true); - - option("indentUnit", 2, loadMode, true); - option("indentWithTabs", false); - option("smartIndent", true); - option("tabSize", 4, function (cm) { - resetModeState(cm); - clearCaches(cm); - regChange(cm); - }, true); - - option("lineSeparator", null, function (cm, val) { - cm.doc.lineSep = val; - if (!val) { return } - var newBreaks = [], lineNo = cm.doc.first; - cm.doc.iter(function (line) { - for (var pos = 0;;) { - var found = line.text.indexOf(val, pos); - if (found == -1) { break } - pos = found + val.length; - newBreaks.push(Pos(lineNo, found)); - } - lineNo++; - }); - for (var i = newBreaks.length - 1; i >= 0; i--) - { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); } - }); - option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g, function (cm, val, old) { - cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); - if (old != Init) { cm.refresh(); } - }); - option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true); - option("electricChars", true); - option("inputStyle", mobile ? "contenteditable" : "textarea", function () { - throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME - }, true); - option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true); - option("rtlMoveVisually", !windows); - option("wholeLineUpdateBefore", true); - - option("theme", "default", function (cm) { - themeChanged(cm); - guttersChanged(cm); - }, true); - option("keyMap", "default", function (cm, val, old) { - var next = getKeyMap(val); - var prev = old != Init && getKeyMap(old); - if (prev && prev.detach) { prev.detach(cm, next); } - if (next.attach) { next.attach(cm, prev || null); } - }); - option("extraKeys", null); - option("configureMouse", null); - - option("lineWrapping", false, wrappingChanged, true); - option("gutters", [], function (cm) { - setGuttersForLineNumbers(cm.options); - guttersChanged(cm); - }, true); - option("fixedGutter", true, function (cm, val) { - cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; - cm.refresh(); - }, true); - option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true); - option("scrollbarStyle", "native", function (cm) { - initScrollbars(cm); - updateScrollbars(cm); - cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); - cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); - }, true); - option("lineNumbers", false, function (cm) { - setGuttersForLineNumbers(cm.options); - guttersChanged(cm); - }, true); - option("firstLineNumber", 1, guttersChanged, true); - option("lineNumberFormatter", function (integer) { return integer; }, guttersChanged, true); - option("showCursorWhenSelecting", false, updateSelection, true); - - option("resetSelectionOnContextMenu", true); - option("lineWiseCopyCut", true); - option("pasteLinesPerSelection", true); - - option("readOnly", false, function (cm, val) { - if (val == "nocursor") { - onBlur(cm); - cm.display.input.blur(); - } - cm.display.input.readOnlyChanged(val); - }); - option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true); - option("dragDrop", true, dragDropChanged); - option("allowDropFileTypes", null); - - option("cursorBlinkRate", 530); - option("cursorScrollMargin", 0); - option("cursorHeight", 1, updateSelection, true); - option("singleCursorHeightPerLine", true, updateSelection, true); - option("workTime", 100); - option("workDelay", 100); - option("flattenSpans", true, resetModeState, true); - option("addModeClass", false, resetModeState, true); - option("pollInterval", 100); - option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; }); - option("historyEventDelay", 1250); - option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true); - option("maxHighlightLength", 10000, resetModeState, true); - option("moveInputWithCursor", true, function (cm, val) { - if (!val) { cm.display.input.resetPosition(); } - }); - - option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; }); - option("autofocus", null); - option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true); -} - -function guttersChanged(cm) { - updateGutters(cm); - regChange(cm); - alignHorizontally(cm); -} - -function dragDropChanged(cm, value, old) { - var wasOn = old && old != Init; - if (!value != !wasOn) { - var funcs = cm.display.dragFunctions; - var toggle = value ? on : off; - toggle(cm.display.scroller, "dragstart", funcs.start); - toggle(cm.display.scroller, "dragenter", funcs.enter); - toggle(cm.display.scroller, "dragover", funcs.over); - toggle(cm.display.scroller, "dragleave", funcs.leave); - toggle(cm.display.scroller, "drop", funcs.drop); - } -} - -function wrappingChanged(cm) { - if (cm.options.lineWrapping) { - addClass(cm.display.wrapper, "CodeMirror-wrap"); - cm.display.sizer.style.minWidth = ""; - cm.display.sizerWidth = null; - } else { - rmClass(cm.display.wrapper, "CodeMirror-wrap"); - findMaxLine(cm); - } - estimateLineHeights(cm); - regChange(cm); - clearCaches(cm); - setTimeout(function () { return updateScrollbars(cm); }, 100); -} - -// A CodeMirror instance represents an editor. This is the object -// that user code is usually dealing with. - -function CodeMirror$1(place, options) { - var this$1 = this; - - if (!(this instanceof CodeMirror$1)) { return new CodeMirror$1(place, options) } - - this.options = options = options ? copyObj(options) : {}; - // Determine effective options based on given values and defaults. - copyObj(defaults, options, false); - setGuttersForLineNumbers(options); - - var doc = options.value; - if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); } - this.doc = doc; - - var input = new CodeMirror$1.inputStyles[options.inputStyle](this); - var display = this.display = new Display(place, doc, input); - display.wrapper.CodeMirror = this; - updateGutters(this); - themeChanged(this); - if (options.lineWrapping) - { this.display.wrapper.className += " CodeMirror-wrap"; } - initScrollbars(this); - - this.state = { - keyMaps: [], // stores maps added by addKeyMap - overlays: [], // highlighting overlays, as added by addOverlay - modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info - overwrite: false, - delayingBlurEvent: false, - focused: false, - suppressEdits: false, // used to disable editing during key handlers when in readOnly mode - pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll - selectingText: false, - draggingText: false, - highlight: new Delayed(), // stores highlight worker timeout - keySeq: null, // Unfinished key sequence - specialChars: null - }; - - if (options.autofocus && !mobile) { display.input.focus(); } - - // Override magic textarea content restore that IE sometimes does - // on our hidden textarea on reload - if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); } - - registerEventHandlers(this); - ensureGlobalHandlers(); - - startOperation(this); - this.curOp.forceUpdate = true; - attachDoc(this, doc); - - if ((options.autofocus && !mobile) || this.hasFocus()) - { setTimeout(bind(onFocus, this), 20); } - else - { onBlur(this); } - - for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt)) - { optionHandlers[opt](this$1, options[opt], Init); } } - maybeUpdateLineNumberWidth(this); - if (options.finishInit) { options.finishInit(this); } - for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); } - endOperation(this); - // Suppress optimizelegibility in Webkit, since it breaks text - // measuring on line wrapping boundaries. - if (webkit && options.lineWrapping && - getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") - { display.lineDiv.style.textRendering = "auto"; } -} - -// The default configuration options. -CodeMirror$1.defaults = defaults; -// Functions to run when options are changed. -CodeMirror$1.optionHandlers = optionHandlers; - -// Attach the necessary event handlers when initializing the editor -function registerEventHandlers(cm) { - var d = cm.display; - on(d.scroller, "mousedown", operation(cm, onMouseDown)); - // Older IE's will not fire a second mousedown for a double click - if (ie && ie_version < 11) - { on(d.scroller, "dblclick", operation(cm, function (e) { - if (signalDOMEvent(cm, e)) { return } - var pos = posFromMouse(cm, e); - if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return } - e_preventDefault(e); - var word = cm.findWordAt(pos); - extendSelection(cm.doc, word.anchor, word.head); - })); } - else - { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); } - // Some browsers fire contextmenu *after* opening the menu, at - // which point we can't mess with it anymore. Context menu is - // handled in onMouseDown for these browsers. - if (!captureRightClick) { on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }); } - - // Used to suppress mouse event handling when a touch happens - var touchFinished, prevTouch = {end: 0}; - function finishTouch() { - if (d.activeTouch) { - touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000); - prevTouch = d.activeTouch; - prevTouch.end = +new Date; - } - } - function isMouseLikeTouchEvent(e) { - if (e.touches.length != 1) { return false } - var touch = e.touches[0]; - return touch.radiusX <= 1 && touch.radiusY <= 1 - } - function farAway(touch, other) { - if (other.left == null) { return true } - var dx = other.left - touch.left, dy = other.top - touch.top; - return dx * dx + dy * dy > 20 * 20 - } - on(d.scroller, "touchstart", function (e) { - if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { - d.input.ensurePolled(); - clearTimeout(touchFinished); - var now = +new Date; - d.activeTouch = {start: now, moved: false, - prev: now - prevTouch.end <= 300 ? prevTouch : null}; - if (e.touches.length == 1) { - d.activeTouch.left = e.touches[0].pageX; - d.activeTouch.top = e.touches[0].pageY; - } - } - }); - on(d.scroller, "touchmove", function () { - if (d.activeTouch) { d.activeTouch.moved = true; } - }); - on(d.scroller, "touchend", function (e) { - var touch = d.activeTouch; - if (touch && !eventInWidget(d, e) && touch.left != null && - !touch.moved && new Date - touch.start < 300) { - var pos = cm.coordsChar(d.activeTouch, "page"), range; - if (!touch.prev || farAway(touch, touch.prev)) // Single tap - { range = new Range(pos, pos); } - else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap - { range = cm.findWordAt(pos); } - else // Triple tap - { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); } - cm.setSelection(range.anchor, range.head); - cm.focus(); - e_preventDefault(e); - } - finishTouch(); - }); - on(d.scroller, "touchcancel", finishTouch); - - // Sync scrolling between fake scrollbars and real scrollable - // area, ensure viewport is updated when scrolling. - on(d.scroller, "scroll", function () { - if (d.scroller.clientHeight) { - updateScrollTop(cm, d.scroller.scrollTop); - setScrollLeft(cm, d.scroller.scrollLeft, true); - signal(cm, "scroll", cm); - } - }); - - // Listen to wheel events in order to try and update the viewport on time. - on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); }); - on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); }); - - // Prevent wrapper from ever scrolling - on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); - - d.dragFunctions = { - enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }}, - over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }}, - start: function (e) { return onDragStart(cm, e); }, - drop: operation(cm, onDrop), - leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }} - }; - - var inp = d.input.getField(); - on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); }); - on(inp, "keydown", operation(cm, onKeyDown)); - on(inp, "keypress", operation(cm, onKeyPress)); - on(inp, "focus", function (e) { return onFocus(cm, e); }); - on(inp, "blur", function (e) { return onBlur(cm, e); }); -} - -var initHooks = []; -CodeMirror$1.defineInitHook = function (f) { return initHooks.push(f); }; - -// Indent the given line. The how parameter can be "smart", -// "add"/null, "subtract", or "prev". When aggressive is false -// (typically set to true for forced single-line indents), empty -// lines are not indented, and places where the mode returns Pass -// are left alone. -function indentLine(cm, n, how, aggressive) { - var doc = cm.doc, state; - if (how == null) { how = "add"; } - if (how == "smart") { - // Fall back to "prev" when the mode doesn't have an indentation - // method. - if (!doc.mode.indent) { how = "prev"; } - else { state = getContextBefore(cm, n).state; } - } - - var tabSize = cm.options.tabSize; - var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); - if (line.stateAfter) { line.stateAfter = null; } - var curSpaceString = line.text.match(/^\s*/)[0], indentation; - if (!aggressive && !/\S/.test(line.text)) { - indentation = 0; - how = "not"; - } else if (how == "smart") { - indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); - if (indentation == Pass || indentation > 150) { - if (!aggressive) { return } - how = "prev"; - } - } - if (how == "prev") { - if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); } - else { indentation = 0; } - } else if (how == "add") { - indentation = curSpace + cm.options.indentUnit; - } else if (how == "subtract") { - indentation = curSpace - cm.options.indentUnit; - } else if (typeof how == "number") { - indentation = curSpace + how; - } - indentation = Math.max(0, indentation); - - var indentString = "", pos = 0; - if (cm.options.indentWithTabs) - { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} } - if (pos < indentation) { indentString += spaceStr(indentation - pos); } - - if (indentString != curSpaceString) { - replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); - line.stateAfter = null; - return true - } else { - // Ensure that, if the cursor was in the whitespace at the start - // of the line, it is moved to the end of that space. - for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { - var range = doc.sel.ranges[i$1]; - if (range.head.line == n && range.head.ch < curSpaceString.length) { - var pos$1 = Pos(n, curSpaceString.length); - replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)); - break - } - } - } -} - -// This will be set to a {lineWise: bool, text: [string]} object, so -// that, when pasting, we know what kind of selections the copied -// text was made out of. -var lastCopied = null; - -function setLastCopied(newLastCopied) { - lastCopied = newLastCopied; -} - -function applyTextInput(cm, inserted, deleted, sel, origin) { - var doc = cm.doc; - cm.display.shift = false; - if (!sel) { sel = doc.sel; } - - var paste = cm.state.pasteIncoming || origin == "paste"; - var textLines = splitLinesAuto(inserted), multiPaste = null; - // When pasting N lines into N selections, insert one line per selection - if (paste && sel.ranges.length > 1) { - if (lastCopied && lastCopied.text.join("\n") == inserted) { - if (sel.ranges.length % lastCopied.text.length == 0) { - multiPaste = []; - for (var i = 0; i < lastCopied.text.length; i++) - { multiPaste.push(doc.splitLines(lastCopied.text[i])); } - } - } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) { - multiPaste = map(textLines, function (l) { return [l]; }); - } - } - - var updateInput; - // Normal behavior is to insert the new text into every selection - for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { - var range$$1 = sel.ranges[i$1]; - var from = range$$1.from(), to = range$$1.to(); - if (range$$1.empty()) { - if (deleted && deleted > 0) // Handle deletion - { from = Pos(from.line, from.ch - deleted); } - else if (cm.state.overwrite && !paste) // Handle overwrite - { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); } - else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted) - { from = to = Pos(from.line, 0); } - } - updateInput = cm.curOp.updateInput; - var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, - origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")}; - makeChange(cm.doc, changeEvent); - signalLater(cm, "inputRead", cm, changeEvent); - } - if (inserted && !paste) - { triggerElectric(cm, inserted); } - - ensureCursorVisible(cm); - cm.curOp.updateInput = updateInput; - cm.curOp.typing = true; - cm.state.pasteIncoming = cm.state.cutIncoming = false; -} - -function handlePaste(e, cm) { - var pasted = e.clipboardData && e.clipboardData.getData("Text"); - if (pasted) { - e.preventDefault(); - if (!cm.isReadOnly() && !cm.options.disableInput) - { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); } - return true - } -} - -function triggerElectric(cm, inserted) { - // When an 'electric' character is inserted, immediately trigger a reindent - if (!cm.options.electricChars || !cm.options.smartIndent) { return } - var sel = cm.doc.sel; - - for (var i = sel.ranges.length - 1; i >= 0; i--) { - var range$$1 = sel.ranges[i]; - if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue } - var mode = cm.getModeAt(range$$1.head); - var indented = false; - if (mode.electricChars) { - for (var j = 0; j < mode.electricChars.length; j++) - { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { - indented = indentLine(cm, range$$1.head.line, "smart"); - break - } } - } else if (mode.electricInput) { - if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch))) - { indented = indentLine(cm, range$$1.head.line, "smart"); } - } - if (indented) { signalLater(cm, "electricInput", cm, range$$1.head.line); } - } -} - -function copyableRanges(cm) { - var text = [], ranges = []; - for (var i = 0; i < cm.doc.sel.ranges.length; i++) { - var line = cm.doc.sel.ranges[i].head.line; - var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; - ranges.push(lineRange); - text.push(cm.getRange(lineRange.anchor, lineRange.head)); - } - return {text: text, ranges: ranges} -} - -function disableBrowserMagic(field, spellcheck) { - field.setAttribute("autocorrect", "off"); - field.setAttribute("autocapitalize", "off"); - field.setAttribute("spellcheck", !!spellcheck); -} - -function hiddenTextarea() { - var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"); - var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); - // The textarea is kept positioned near the cursor to prevent the - // fact that it'll be scrolled into view on input from scrolling - // our fake cursor out of view. On webkit, when wrap=off, paste is - // very slow. So make the area wide instead. - if (webkit) { te.style.width = "1000px"; } - else { te.setAttribute("wrap", "off"); } - // If border: 0; -- iOS fails to open keyboard (issue #1287) - if (ios) { te.style.border = "1px solid black"; } - disableBrowserMagic(te); - return div -} - -// The publicly visible API. Note that methodOp(f) means -// 'wrap f in an operation, performed on its `this` parameter'. - -// This is not the complete set of editor methods. Most of the -// methods defined on the Doc type are also injected into -// CodeMirror.prototype, for backwards compatibility and -// convenience. - -var addEditorMethods = function(CodeMirror) { - var optionHandlers = CodeMirror.optionHandlers; - - var helpers = CodeMirror.helpers = {}; - - CodeMirror.prototype = { - constructor: CodeMirror, - focus: function(){window.focus(); this.display.input.focus();}, - - setOption: function(option, value) { - var options = this.options, old = options[option]; - if (options[option] == value && option != "mode") { return } - options[option] = value; - if (optionHandlers.hasOwnProperty(option)) - { operation(this, optionHandlers[option])(this, value, old); } - signal(this, "optionChange", this, option); - }, - - getOption: function(option) {return this.options[option]}, - getDoc: function() {return this.doc}, - - addKeyMap: function(map$$1, bottom) { - this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map$$1)); - }, - removeKeyMap: function(map$$1) { - var maps = this.state.keyMaps; - for (var i = 0; i < maps.length; ++i) - { if (maps[i] == map$$1 || maps[i].name == map$$1) { - maps.splice(i, 1); - return true - } } - }, - - addOverlay: methodOp(function(spec, options) { - var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); - if (mode.startState) { throw new Error("Overlays may not be stateful.") } - insertSorted(this.state.overlays, - {mode: mode, modeSpec: spec, opaque: options && options.opaque, - priority: (options && options.priority) || 0}, - function (overlay) { return overlay.priority; }); - this.state.modeGen++; - regChange(this); - }), - removeOverlay: methodOp(function(spec) { - var this$1 = this; - - var overlays = this.state.overlays; - for (var i = 0; i < overlays.length; ++i) { - var cur = overlays[i].modeSpec; - if (cur == spec || typeof spec == "string" && cur.name == spec) { - overlays.splice(i, 1); - this$1.state.modeGen++; - regChange(this$1); - return - } - } - }), - - indentLine: methodOp(function(n, dir, aggressive) { - if (typeof dir != "string" && typeof dir != "number") { - if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; } - else { dir = dir ? "add" : "subtract"; } - } - if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); } - }), - indentSelection: methodOp(function(how) { - var this$1 = this; - - var ranges = this.doc.sel.ranges, end = -1; - for (var i = 0; i < ranges.length; i++) { - var range$$1 = ranges[i]; - if (!range$$1.empty()) { - var from = range$$1.from(), to = range$$1.to(); - var start = Math.max(end, from.line); - end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; - for (var j = start; j < end; ++j) - { indentLine(this$1, j, how); } - var newRanges = this$1.doc.sel.ranges; - if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) - { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); } - } else if (range$$1.head.line > end) { - indentLine(this$1, range$$1.head.line, how, true); - end = range$$1.head.line; - if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); } - } - } - }), - - // Fetch the parser token for a given character. Useful for hacks - // that want to inspect the mode state (say, for completion). - getTokenAt: function(pos, precise) { - return takeToken(this, pos, precise) - }, - - getLineTokens: function(line, precise) { - return takeToken(this, Pos(line), precise, true) - }, - - getTokenTypeAt: function(pos) { - pos = clipPos(this.doc, pos); - var styles = getLineStyles(this, getLine(this.doc, pos.line)); - var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; - var type; - if (ch == 0) { type = styles[2]; } - else { for (;;) { - var mid = (before + after) >> 1; - if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; } - else if (styles[mid * 2 + 1] < ch) { before = mid + 1; } - else { type = styles[mid * 2 + 2]; break } - } } - var cut = type ? type.indexOf("overlay ") : -1; - return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1) - }, - - getModeAt: function(pos) { - var mode = this.doc.mode; - if (!mode.innerMode) { return mode } - return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode - }, - - getHelper: function(pos, type) { - return this.getHelpers(pos, type)[0] - }, - - getHelpers: function(pos, type) { - var this$1 = this; - - var found = []; - if (!helpers.hasOwnProperty(type)) { return found } - var help = helpers[type], mode = this.getModeAt(pos); - if (typeof mode[type] == "string") { - if (help[mode[type]]) { found.push(help[mode[type]]); } - } else if (mode[type]) { - for (var i = 0; i < mode[type].length; i++) { - var val = help[mode[type][i]]; - if (val) { found.push(val); } - } - } else if (mode.helperType && help[mode.helperType]) { - found.push(help[mode.helperType]); - } else if (help[mode.name]) { - found.push(help[mode.name]); - } - for (var i$1 = 0; i$1 < help._global.length; i$1++) { - var cur = help._global[i$1]; - if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1) - { found.push(cur.val); } - } - return found - }, - - getStateAfter: function(line, precise) { - var doc = this.doc; - line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); - return getContextBefore(this, line + 1, precise).state - }, - - cursorCoords: function(start, mode) { - var pos, range$$1 = this.doc.sel.primary(); - if (start == null) { pos = range$$1.head; } - else if (typeof start == "object") { pos = clipPos(this.doc, start); } - else { pos = start ? range$$1.from() : range$$1.to(); } - return cursorCoords(this, pos, mode || "page") - }, - - charCoords: function(pos, mode) { - return charCoords(this, clipPos(this.doc, pos), mode || "page") - }, - - coordsChar: function(coords, mode) { - coords = fromCoordSystem(this, coords, mode || "page"); - return coordsChar(this, coords.left, coords.top) - }, - - lineAtHeight: function(height, mode) { - height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; - return lineAtHeight(this.doc, height + this.display.viewOffset) - }, - heightAtLine: function(line, mode, includeWidgets) { - var end = false, lineObj; - if (typeof line == "number") { - var last = this.doc.first + this.doc.size - 1; - if (line < this.doc.first) { line = this.doc.first; } - else if (line > last) { line = last; end = true; } - lineObj = getLine(this.doc, line); - } else { - lineObj = line; - } - return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top + - (end ? this.doc.height - heightAtLine(lineObj) : 0) - }, - - defaultTextHeight: function() { return textHeight(this.display) }, - defaultCharWidth: function() { return charWidth(this.display) }, - - getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}}, - - addWidget: function(pos, node, scroll, vert, horiz) { - var display = this.display; - pos = cursorCoords(this, clipPos(this.doc, pos)); - var top = pos.bottom, left = pos.left; - node.style.position = "absolute"; - node.setAttribute("cm-ignore-events", "true"); - this.display.input.setUneditable(node); - display.sizer.appendChild(node); - if (vert == "over") { - top = pos.top; - } else if (vert == "above" || vert == "near") { - var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), - hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); - // Default to positioning above (if specified and possible); otherwise default to positioning below - if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) - { top = pos.top - node.offsetHeight; } - else if (pos.bottom + node.offsetHeight <= vspace) - { top = pos.bottom; } - if (left + node.offsetWidth > hspace) - { left = hspace - node.offsetWidth; } - } - node.style.top = top + "px"; - node.style.left = node.style.right = ""; - if (horiz == "right") { - left = display.sizer.clientWidth - node.offsetWidth; - node.style.right = "0px"; - } else { - if (horiz == "left") { left = 0; } - else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; } - node.style.left = left + "px"; - } - if (scroll) - { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); } - }, - - triggerOnKeyDown: methodOp(onKeyDown), - triggerOnKeyPress: methodOp(onKeyPress), - triggerOnKeyUp: onKeyUp, - triggerOnMouseDown: methodOp(onMouseDown), - - execCommand: function(cmd) { - if (commands.hasOwnProperty(cmd)) - { return commands[cmd].call(null, this) } - }, - - triggerElectric: methodOp(function(text) { triggerElectric(this, text); }), - - findPosH: function(from, amount, unit, visually) { - var this$1 = this; - - var dir = 1; - if (amount < 0) { dir = -1; amount = -amount; } - var cur = clipPos(this.doc, from); - for (var i = 0; i < amount; ++i) { - cur = findPosH(this$1.doc, cur, dir, unit, visually); - if (cur.hitSide) { break } - } - return cur - }, - - moveH: methodOp(function(dir, unit) { - var this$1 = this; - - this.extendSelectionsBy(function (range$$1) { - if (this$1.display.shift || this$1.doc.extend || range$$1.empty()) - { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) } - else - { return dir < 0 ? range$$1.from() : range$$1.to() } - }, sel_move); - }), - - deleteH: methodOp(function(dir, unit) { - var sel = this.doc.sel, doc = this.doc; - if (sel.somethingSelected()) - { doc.replaceSelection("", null, "+delete"); } - else - { deleteNearSelection(this, function (range$$1) { - var other = findPosH(doc, range$$1.head, dir, unit, false); - return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other} - }); } - }), - - findPosV: function(from, amount, unit, goalColumn) { - var this$1 = this; - - var dir = 1, x = goalColumn; - if (amount < 0) { dir = -1; amount = -amount; } - var cur = clipPos(this.doc, from); - for (var i = 0; i < amount; ++i) { - var coords = cursorCoords(this$1, cur, "div"); - if (x == null) { x = coords.left; } - else { coords.left = x; } - cur = findPosV(this$1, coords, dir, unit); - if (cur.hitSide) { break } - } - return cur - }, - - moveV: methodOp(function(dir, unit) { - var this$1 = this; - - var doc = this.doc, goals = []; - var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected(); - doc.extendSelectionsBy(function (range$$1) { - if (collapse) - { return dir < 0 ? range$$1.from() : range$$1.to() } - var headPos = cursorCoords(this$1, range$$1.head, "div"); - if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; } - goals.push(headPos.left); - var pos = findPosV(this$1, headPos, dir, unit); - if (unit == "page" && range$$1 == doc.sel.primary()) - { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); } - return pos - }, sel_move); - if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++) - { doc.sel.ranges[i].goalColumn = goals[i]; } } - }), - - // Find the word at the given position (as returned by coordsChar). - findWordAt: function(pos) { - var doc = this.doc, line = getLine(doc, pos.line).text; - var start = pos.ch, end = pos.ch; - if (line) { - var helper = this.getHelper(pos, "wordChars"); - if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; } - var startChar = line.charAt(start); - var check = isWordChar(startChar, helper) - ? function (ch) { return isWordChar(ch, helper); } - : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); } - : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); }; - while (start > 0 && check(line.charAt(start - 1))) { --start; } - while (end < line.length && check(line.charAt(end))) { ++end; } - } - return new Range(Pos(pos.line, start), Pos(pos.line, end)) - }, - - toggleOverwrite: function(value) { - if (value != null && value == this.state.overwrite) { return } - if (this.state.overwrite = !this.state.overwrite) - { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); } - else - { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); } - - signal(this, "overwriteToggle", this, this.state.overwrite); - }, - hasFocus: function() { return this.display.input.getField() == activeElt() }, - isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) }, - - scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }), - getScrollInfo: function() { - var scroller = this.display.scroller; - return {left: scroller.scrollLeft, top: scroller.scrollTop, - height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, - width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, - clientHeight: displayHeight(this), clientWidth: displayWidth(this)} - }, - - scrollIntoView: methodOp(function(range$$1, margin) { - if (range$$1 == null) { - range$$1 = {from: this.doc.sel.primary().head, to: null}; - if (margin == null) { margin = this.options.cursorScrollMargin; } - } else if (typeof range$$1 == "number") { - range$$1 = {from: Pos(range$$1, 0), to: null}; - } else if (range$$1.from == null) { - range$$1 = {from: range$$1, to: null}; - } - if (!range$$1.to) { range$$1.to = range$$1.from; } - range$$1.margin = margin || 0; - - if (range$$1.from.line != null) { - scrollToRange(this, range$$1); - } else { - scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin); - } - }), - - setSize: methodOp(function(width, height) { - var this$1 = this; - - var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; }; - if (width != null) { this.display.wrapper.style.width = interpret(width); } - if (height != null) { this.display.wrapper.style.height = interpret(height); } - if (this.options.lineWrapping) { clearLineMeasurementCache(this); } - var lineNo$$1 = this.display.viewFrom; - this.doc.iter(lineNo$$1, this.display.viewTo, function (line) { - if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) - { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, "widget"); break } } } - ++lineNo$$1; - }); - this.curOp.forceUpdate = true; - signal(this, "refresh", this); - }), - - operation: function(f){return runInOp(this, f)}, - startOperation: function(){return startOperation(this)}, - endOperation: function(){return endOperation(this)}, - - refresh: methodOp(function() { - var oldHeight = this.display.cachedTextHeight; - regChange(this); - this.curOp.forceUpdate = true; - clearCaches(this); - scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); - updateGutterSpace(this); - if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) - { estimateLineHeights(this); } - signal(this, "refresh", this); - }), - - swapDoc: methodOp(function(doc) { - var old = this.doc; - old.cm = null; - attachDoc(this, doc); - clearCaches(this); - this.display.input.reset(); - scrollToCoords(this, doc.scrollLeft, doc.scrollTop); - this.curOp.forceScroll = true; - signalLater(this, "swapDoc", this, old); - return old - }), - - getInputField: function(){return this.display.input.getField()}, - getWrapperElement: function(){return this.display.wrapper}, - getScrollerElement: function(){return this.display.scroller}, - getGutterElement: function(){return this.display.gutters} - }; - eventMixin(CodeMirror); - - CodeMirror.registerHelper = function(type, name, value) { - if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; } - helpers[type][name] = value; - }; - CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { - CodeMirror.registerHelper(type, name, value); - helpers[type]._global.push({pred: predicate, val: value}); - }; -}; - -// Used for horizontal relative motion. Dir is -1 or 1 (left or -// right), unit can be "char", "column" (like char, but doesn't -// cross line boundaries), "word" (across next word), or "group" (to -// the start of next group of word or non-word-non-whitespace -// chars). The visually param controls whether, in right-to-left -// text, direction 1 means to move towards the next index in the -// string, or towards the character to the right of the current -// position. The resulting position will have a hitSide=true -// property if it reached the end of the document. -function findPosH(doc, pos, dir, unit, visually) { - var oldPos = pos; - var origDir = dir; - var lineObj = getLine(doc, pos.line); - function findNextLine() { - var l = pos.line + dir; - if (l < doc.first || l >= doc.first + doc.size) { return false } - pos = new Pos(l, pos.ch, pos.sticky); - return lineObj = getLine(doc, l) - } - function moveOnce(boundToLine) { - var next; - if (visually) { - next = moveVisually(doc.cm, lineObj, pos, dir); - } else { - next = moveLogically(lineObj, pos, dir); - } - if (next == null) { - if (!boundToLine && findNextLine()) - { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); } - else - { return false } - } else { - pos = next; - } - return true - } - - if (unit == "char") { - moveOnce(); - } else if (unit == "column") { - moveOnce(true); - } else if (unit == "word" || unit == "group") { - var sawType = null, group = unit == "group"; - var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); - for (var first = true;; first = false) { - if (dir < 0 && !moveOnce(!first)) { break } - var cur = lineObj.text.charAt(pos.ch) || "\n"; - var type = isWordChar(cur, helper) ? "w" - : group && cur == "\n" ? "n" - : !group || /\s/.test(cur) ? null - : "p"; - if (group && !first && !type) { type = "s"; } - if (sawType && sawType != type) { - if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";} - break - } - - if (type) { sawType = type; } - if (dir > 0 && !moveOnce(!first)) { break } - } - } - var result = skipAtomic(doc, pos, oldPos, origDir, true); - if (equalCursorPos(oldPos, result)) { result.hitSide = true; } - return result -} - -// For relative vertical movement. Dir may be -1 or 1. Unit can be -// "page" or "line". The resulting position will have a hitSide=true -// property if it reached the end of the document. -function findPosV(cm, pos, dir, unit) { - var doc = cm.doc, x = pos.left, y; - if (unit == "page") { - var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); - var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3); - y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; - - } else if (unit == "line") { - y = dir > 0 ? pos.bottom + 3 : pos.top - 3; - } - var target; - for (;;) { - target = coordsChar(cm, x, y); - if (!target.outside) { break } - if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break } - y += dir * 5; - } - return target -} - -// CONTENTEDITABLE INPUT STYLE - -var ContentEditableInput = function(cm) { - this.cm = cm; - this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; - this.polling = new Delayed(); - this.composing = null; - this.gracePeriod = false; - this.readDOMTimeout = null; -}; - -ContentEditableInput.prototype.init = function (display) { - var this$1 = this; - - var input = this, cm = input.cm; - var div = input.div = display.lineDiv; - disableBrowserMagic(div, cm.options.spellcheck); - - on(div, "paste", function (e) { - if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } - // IE doesn't fire input events, so we schedule a read for the pasted content in this way - if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); } - }); - - on(div, "compositionstart", function (e) { - this$1.composing = {data: e.data, done: false}; - }); - on(div, "compositionupdate", function (e) { - if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; } - }); - on(div, "compositionend", function (e) { - if (this$1.composing) { - if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); } - this$1.composing.done = true; - } - }); - - on(div, "touchstart", function () { return input.forceCompositionEnd(); }); - - on(div, "input", function () { - if (!this$1.composing) { this$1.readFromDOMSoon(); } - }); - - function onCopyCut(e) { - if (signalDOMEvent(cm, e)) { return } - if (cm.somethingSelected()) { - setLastCopied({lineWise: false, text: cm.getSelections()}); - if (e.type == "cut") { cm.replaceSelection("", null, "cut"); } - } else if (!cm.options.lineWiseCopyCut) { - return - } else { - var ranges = copyableRanges(cm); - setLastCopied({lineWise: true, text: ranges.text}); - if (e.type == "cut") { - cm.operation(function () { - cm.setSelections(ranges.ranges, 0, sel_dontScroll); - cm.replaceSelection("", null, "cut"); - }); - } - } - if (e.clipboardData) { - e.clipboardData.clearData(); - var content = lastCopied.text.join("\n"); - // iOS exposes the clipboard API, but seems to discard content inserted into it - e.clipboardData.setData("Text", content); - if (e.clipboardData.getData("Text") == content) { - e.preventDefault(); - return - } - } - // Old-fashioned briefly-focus-a-textarea hack - var kludge = hiddenTextarea(), te = kludge.firstChild; - cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); - te.value = lastCopied.text.join("\n"); - var hadFocus = document.activeElement; - selectInput(te); - setTimeout(function () { - cm.display.lineSpace.removeChild(kludge); - hadFocus.focus(); - if (hadFocus == div) { input.showPrimarySelection(); } - }, 50); - } - on(div, "copy", onCopyCut); - on(div, "cut", onCopyCut); -}; - -ContentEditableInput.prototype.prepareSelection = function () { - var result = prepareSelection(this.cm, false); - result.focus = this.cm.state.focused; - return result -}; - -ContentEditableInput.prototype.showSelection = function (info, takeFocus) { - if (!info || !this.cm.display.view.length) { return } - if (info.focus || takeFocus) { this.showPrimarySelection(); } - this.showMultipleSelections(info); -}; - -ContentEditableInput.prototype.getSelection = function () { - return this.cm.display.wrapper.ownerDocument.getSelection() -}; - -ContentEditableInput.prototype.showPrimarySelection = function () { - var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary(); - var from = prim.from(), to = prim.to(); - - if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { - sel.removeAllRanges(); - return - } - - var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); - var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); - if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && - cmp(minPos(curAnchor, curFocus), from) == 0 && - cmp(maxPos(curAnchor, curFocus), to) == 0) - { return } - - var view = cm.display.view; - var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) || - {node: view[0].measure.map[2], offset: 0}; - var end = to.line < cm.display.viewTo && posToDOM(cm, to); - if (!end) { - var measure = view[view.length - 1].measure; - var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; - end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]}; - } - - if (!start || !end) { - sel.removeAllRanges(); - return - } - - var old = sel.rangeCount && sel.getRangeAt(0), rng; - try { rng = range(start.node, start.offset, end.offset, end.node); } - catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible - if (rng) { - if (!gecko && cm.state.focused) { - sel.collapse(start.node, start.offset); - if (!rng.collapsed) { - sel.removeAllRanges(); - sel.addRange(rng); - } - } else { - sel.removeAllRanges(); - sel.addRange(rng); - } - if (old && sel.anchorNode == null) { sel.addRange(old); } - else if (gecko) { this.startGracePeriod(); } - } - this.rememberSelection(); -}; - -ContentEditableInput.prototype.startGracePeriod = function () { - var this$1 = this; - - clearTimeout(this.gracePeriod); - this.gracePeriod = setTimeout(function () { - this$1.gracePeriod = false; - if (this$1.selectionChanged()) - { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); } - }, 20); -}; - -ContentEditableInput.prototype.showMultipleSelections = function (info) { - removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); - removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); -}; - -ContentEditableInput.prototype.rememberSelection = function () { - var sel = this.getSelection(); - this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; - this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; -}; - -ContentEditableInput.prototype.selectionInEditor = function () { - var sel = this.getSelection(); - if (!sel.rangeCount) { return false } - var node = sel.getRangeAt(0).commonAncestorContainer; - return contains(this.div, node) -}; - -ContentEditableInput.prototype.focus = function () { - if (this.cm.options.readOnly != "nocursor") { - if (!this.selectionInEditor()) - { this.showSelection(this.prepareSelection(), true); } - this.div.focus(); - } -}; -ContentEditableInput.prototype.blur = function () { this.div.blur(); }; -ContentEditableInput.prototype.getField = function () { return this.div }; - -ContentEditableInput.prototype.supportsTouch = function () { return true }; - -ContentEditableInput.prototype.receivedFocus = function () { - var input = this; - if (this.selectionInEditor()) - { this.pollSelection(); } - else - { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); } - - function poll() { - if (input.cm.state.focused) { - input.pollSelection(); - input.polling.set(input.cm.options.pollInterval, poll); - } - } - this.polling.set(this.cm.options.pollInterval, poll); -}; - -ContentEditableInput.prototype.selectionChanged = function () { - var sel = this.getSelection(); - return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || - sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset -}; - -ContentEditableInput.prototype.pollSelection = function () { - if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return } - var sel = this.getSelection(), cm = this.cm; - // On Android Chrome (version 56, at least), backspacing into an - // uneditable block element will put the cursor in that element, - // and then, because it's not editable, hide the virtual keyboard. - // Because Android doesn't allow us to actually detect backspace - // presses in a sane way, this code checks for when that happens - // and simulates a backspace press in this case. - if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) { - this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs}); - this.blur(); - this.focus(); - return - } - if (this.composing) { return } - this.rememberSelection(); - var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); - var head = domToPos(cm, sel.focusNode, sel.focusOffset); - if (anchor && head) { runInOp(cm, function () { - setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); - if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; } - }); } -}; - -ContentEditableInput.prototype.pollContent = function () { - if (this.readDOMTimeout != null) { - clearTimeout(this.readDOMTimeout); - this.readDOMTimeout = null; - } - - var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); - var from = sel.from(), to = sel.to(); - if (from.ch == 0 && from.line > cm.firstLine()) - { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); } - if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) - { to = Pos(to.line + 1, 0); } - if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false } - - var fromIndex, fromLine, fromNode; - if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { - fromLine = lineNo(display.view[0].line); - fromNode = display.view[0].node; - } else { - fromLine = lineNo(display.view[fromIndex].line); - fromNode = display.view[fromIndex - 1].node.nextSibling; - } - var toIndex = findViewIndex(cm, to.line); - var toLine, toNode; - if (toIndex == display.view.length - 1) { - toLine = display.viewTo - 1; - toNode = display.lineDiv.lastChild; - } else { - toLine = lineNo(display.view[toIndex + 1].line) - 1; - toNode = display.view[toIndex + 1].node.previousSibling; - } - - if (!fromNode) { return false } - var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); - var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); - while (newText.length > 1 && oldText.length > 1) { - if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } - else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } - else { break } - } - - var cutFront = 0, cutEnd = 0; - var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); - while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) - { ++cutFront; } - var newBot = lst(newText), oldBot = lst(oldText); - var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), - oldBot.length - (oldText.length == 1 ? cutFront : 0)); - while (cutEnd < maxCutEnd && - newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) - { ++cutEnd; } - // Try to move start of change to start of selection if ambiguous - if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { - while (cutFront && cutFront > from.ch && - newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { - cutFront--; - cutEnd++; - } - } - - newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, ""); - newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); - - var chFrom = Pos(fromLine, cutFront); - var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); - if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { - replaceRange(cm.doc, newText, chFrom, chTo, "+input"); - return true - } -}; - -ContentEditableInput.prototype.ensurePolled = function () { - this.forceCompositionEnd(); -}; -ContentEditableInput.prototype.reset = function () { - this.forceCompositionEnd(); -}; -ContentEditableInput.prototype.forceCompositionEnd = function () { - if (!this.composing) { return } - clearTimeout(this.readDOMTimeout); - this.composing = null; - this.updateFromDOM(); - this.div.blur(); - this.div.focus(); -}; -ContentEditableInput.prototype.readFromDOMSoon = function () { - var this$1 = this; - - if (this.readDOMTimeout != null) { return } - this.readDOMTimeout = setTimeout(function () { - this$1.readDOMTimeout = null; - if (this$1.composing) { - if (this$1.composing.done) { this$1.composing = null; } - else { return } - } - this$1.updateFromDOM(); - }, 80); -}; - -ContentEditableInput.prototype.updateFromDOM = function () { - var this$1 = this; - - if (this.cm.isReadOnly() || !this.pollContent()) - { runInOp(this.cm, function () { return regChange(this$1.cm); }); } -}; - -ContentEditableInput.prototype.setUneditable = function (node) { - node.contentEditable = "false"; -}; - -ContentEditableInput.prototype.onKeyPress = function (e) { - if (e.charCode == 0 || this.composing) { return } - e.preventDefault(); - if (!this.cm.isReadOnly()) - { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); } -}; - -ContentEditableInput.prototype.readOnlyChanged = function (val) { - this.div.contentEditable = String(val != "nocursor"); -}; - -ContentEditableInput.prototype.onContextMenu = function () {}; -ContentEditableInput.prototype.resetPosition = function () {}; - -ContentEditableInput.prototype.needsContentAttribute = true; - -function posToDOM(cm, pos) { - var view = findViewForLine(cm, pos.line); - if (!view || view.hidden) { return null } - var line = getLine(cm.doc, pos.line); - var info = mapFromLineView(view, line, pos.line); - - var order = getOrder(line, cm.doc.direction), side = "left"; - if (order) { - var partPos = getBidiPartAt(order, pos.ch); - side = partPos % 2 ? "right" : "left"; - } - var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); - result.offset = result.collapse == "right" ? result.end : result.start; - return result -} - -function isInGutter(node) { - for (var scan = node; scan; scan = scan.parentNode) - { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } } - return false -} - -function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos } - -function domTextBetween(cm, from, to, fromLine, toLine) { - var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false; - function recognizeMarker(id) { return function (marker) { return marker.id == id; } } - function close() { - if (closing) { - text += lineSep; - if (extraLinebreak) { text += lineSep; } - closing = extraLinebreak = false; - } - } - function addText(str) { - if (str) { - close(); - text += str; - } - } - function walk(node) { - if (node.nodeType == 1) { - var cmText = node.getAttribute("cm-text"); - if (cmText) { - addText(cmText); - return - } - var markerID = node.getAttribute("cm-marker"), range$$1; - if (markerID) { - var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); - if (found.length && (range$$1 = found[0].find(0))) - { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); } - return - } - if (node.getAttribute("contenteditable") == "false") { return } - var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName); - if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return } - - if (isBlock) { close(); } - for (var i = 0; i < node.childNodes.length; i++) - { walk(node.childNodes[i]); } - - if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; } - if (isBlock) { closing = true; } - } else if (node.nodeType == 3) { - addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); - } - } - for (;;) { - walk(from); - if (from == to) { break } - from = from.nextSibling; - extraLinebreak = false; - } - return text -} - -function domToPos(cm, node, offset) { - var lineNode; - if (node == cm.display.lineDiv) { - lineNode = cm.display.lineDiv.childNodes[offset]; - if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) } - node = null; offset = 0; - } else { - for (lineNode = node;; lineNode = lineNode.parentNode) { - if (!lineNode || lineNode == cm.display.lineDiv) { return null } - if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break } - } - } - for (var i = 0; i < cm.display.view.length; i++) { - var lineView = cm.display.view[i]; - if (lineView.node == lineNode) - { return locateNodeInLineView(lineView, node, offset) } - } -} - -function locateNodeInLineView(lineView, node, offset) { - var wrapper = lineView.text.firstChild, bad = false; - if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) } - if (node == wrapper) { - bad = true; - node = wrapper.childNodes[offset]; - offset = 0; - if (!node) { - var line = lineView.rest ? lst(lineView.rest) : lineView.line; - return badPos(Pos(lineNo(line), line.text.length), bad) - } - } - - var textNode = node.nodeType == 3 ? node : null, topNode = node; - if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { - textNode = node.firstChild; - if (offset) { offset = textNode.nodeValue.length; } - } - while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; } - var measure = lineView.measure, maps = measure.maps; - - function find(textNode, topNode, offset) { - for (var i = -1; i < (maps ? maps.length : 0); i++) { - var map$$1 = i < 0 ? measure.map : maps[i]; - for (var j = 0; j < map$$1.length; j += 3) { - var curNode = map$$1[j + 2]; - if (curNode == textNode || curNode == topNode) { - var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); - var ch = map$$1[j] + offset; - if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; } - return Pos(line, ch) - } - } - } - } - var found = find(textNode, topNode, offset); - if (found) { return badPos(found, bad) } - - // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems - for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { - found = find(after, after.firstChild, 0); - if (found) - { return badPos(Pos(found.line, found.ch - dist), bad) } - else - { dist += after.textContent.length; } - } - for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { - found = find(before, before.firstChild, -1); - if (found) - { return badPos(Pos(found.line, found.ch + dist$1), bad) } - else - { dist$1 += before.textContent.length; } - } -} - -// TEXTAREA INPUT STYLE - -var TextareaInput = function(cm) { - this.cm = cm; - // See input.poll and input.reset - this.prevInput = ""; - - // Flag that indicates whether we expect input to appear real soon - // now (after some event like 'keypress' or 'input') and are - // polling intensively. - this.pollingFast = false; - // Self-resetting timeout for the poller - this.polling = new Delayed(); - // Used to work around IE issue with selection being forgotten when focus moves away from textarea - this.hasSelection = false; - this.composing = null; -}; - -TextareaInput.prototype.init = function (display) { - var this$1 = this; - - var input = this, cm = this.cm; - this.createField(display); - var te = this.textarea; - - display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); - - // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) - if (ios) { te.style.width = "0px"; } - - on(te, "input", function () { - if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; } - input.poll(); - }); - - on(te, "paste", function (e) { - if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } - - cm.state.pasteIncoming = true; - input.fastPoll(); - }); - - function prepareCopyCut(e) { - if (signalDOMEvent(cm, e)) { return } - if (cm.somethingSelected()) { - setLastCopied({lineWise: false, text: cm.getSelections()}); - } else if (!cm.options.lineWiseCopyCut) { - return - } else { - var ranges = copyableRanges(cm); - setLastCopied({lineWise: true, text: ranges.text}); - if (e.type == "cut") { - cm.setSelections(ranges.ranges, null, sel_dontScroll); - } else { - input.prevInput = ""; - te.value = ranges.text.join("\n"); - selectInput(te); - } - } - if (e.type == "cut") { cm.state.cutIncoming = true; } - } - on(te, "cut", prepareCopyCut); - on(te, "copy", prepareCopyCut); - - on(display.scroller, "paste", function (e) { - if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return } - cm.state.pasteIncoming = true; - input.focus(); - }); - - // Prevent normal selection in the editor (we handle our own) - on(display.lineSpace, "selectstart", function (e) { - if (!eventInWidget(display, e)) { e_preventDefault(e); } - }); - - on(te, "compositionstart", function () { - var start = cm.getCursor("from"); - if (input.composing) { input.composing.range.clear(); } - input.composing = { - start: start, - range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) - }; - }); - on(te, "compositionend", function () { - if (input.composing) { - input.poll(); - input.composing.range.clear(); - input.composing = null; - } - }); -}; - -TextareaInput.prototype.createField = function (_display) { - // Wraps and hides input textarea - this.wrapper = hiddenTextarea(); - // The semihidden textarea that is focused when the editor is - // focused, and receives input. - this.textarea = this.wrapper.firstChild; -}; - -TextareaInput.prototype.prepareSelection = function () { - // Redraw the selection and/or cursor - var cm = this.cm, display = cm.display, doc = cm.doc; - var result = prepareSelection(cm); - - // Move the hidden textarea near the cursor to prevent scrolling artifacts - if (cm.options.moveInputWithCursor) { - var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); - var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); - result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, - headPos.top + lineOff.top - wrapOff.top)); - result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, - headPos.left + lineOff.left - wrapOff.left)); - } - - return result -}; - -TextareaInput.prototype.showSelection = function (drawn) { - var cm = this.cm, display = cm.display; - removeChildrenAndAdd(display.cursorDiv, drawn.cursors); - removeChildrenAndAdd(display.selectionDiv, drawn.selection); - if (drawn.teTop != null) { - this.wrapper.style.top = drawn.teTop + "px"; - this.wrapper.style.left = drawn.teLeft + "px"; - } -}; - -// Reset the input to correspond to the selection (or to be empty, -// when not typing and nothing is selected) -TextareaInput.prototype.reset = function (typing) { - if (this.contextMenuPending || this.composing) { return } - var cm = this.cm; - if (cm.somethingSelected()) { - this.prevInput = ""; - var content = cm.getSelection(); - this.textarea.value = content; - if (cm.state.focused) { selectInput(this.textarea); } - if (ie && ie_version >= 9) { this.hasSelection = content; } - } else if (!typing) { - this.prevInput = this.textarea.value = ""; - if (ie && ie_version >= 9) { this.hasSelection = null; } - } -}; - -TextareaInput.prototype.getField = function () { return this.textarea }; - -TextareaInput.prototype.supportsTouch = function () { return false }; - -TextareaInput.prototype.focus = function () { - if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { - try { this.textarea.focus(); } - catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM - } -}; - -TextareaInput.prototype.blur = function () { this.textarea.blur(); }; - -TextareaInput.prototype.resetPosition = function () { - this.wrapper.style.top = this.wrapper.style.left = 0; -}; - -TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); }; - -// Poll for input changes, using the normal rate of polling. This -// runs as long as the editor is focused. -TextareaInput.prototype.slowPoll = function () { - var this$1 = this; - - if (this.pollingFast) { return } - this.polling.set(this.cm.options.pollInterval, function () { - this$1.poll(); - if (this$1.cm.state.focused) { this$1.slowPoll(); } - }); -}; - -// When an event has just come in that is likely to add or change -// something in the input textarea, we poll faster, to ensure that -// the change appears on the screen quickly. -TextareaInput.prototype.fastPoll = function () { - var missed = false, input = this; - input.pollingFast = true; - function p() { - var changed = input.poll(); - if (!changed && !missed) {missed = true; input.polling.set(60, p);} - else {input.pollingFast = false; input.slowPoll();} - } - input.polling.set(20, p); -}; - -// Read input from the textarea, and update the document to match. -// When something is selected, it is present in the textarea, and -// selected (unless it is huge, in which case a placeholder is -// used). When nothing is selected, the cursor sits after previously -// seen text (can be empty), which is stored in prevInput (we must -// not reset the textarea when typing, because that breaks IME). -TextareaInput.prototype.poll = function () { - var this$1 = this; - - var cm = this.cm, input = this.textarea, prevInput = this.prevInput; - // Since this is called a *lot*, try to bail out as cheaply as - // possible when it is clear that nothing happened. hasSelection - // will be the case when there is a lot of text in the textarea, - // in which case reading its value would be expensive. - if (this.contextMenuPending || !cm.state.focused || - (hasSelection(input) && !prevInput && !this.composing) || - cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) - { return false } - - var text = input.value; - // If nothing changed, bail. - if (text == prevInput && !cm.somethingSelected()) { return false } - // Work around nonsensical selection resetting in IE9/10, and - // inexplicable appearance of private area unicode characters on - // some key combos in Mac (#2689). - if (ie && ie_version >= 9 && this.hasSelection === text || - mac && /[\uf700-\uf7ff]/.test(text)) { - cm.display.input.reset(); - return false - } - - if (cm.doc.sel == cm.display.selForContextMenu) { - var first = text.charCodeAt(0); - if (first == 0x200b && !prevInput) { prevInput = "\u200b"; } - if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") } - } - // Find the part of the input that is actually new - var same = 0, l = Math.min(prevInput.length, text.length); - while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; } - - runInOp(cm, function () { - applyTextInput(cm, text.slice(same), prevInput.length - same, - null, this$1.composing ? "*compose" : null); - - // Don't leave long text in the textarea, since it makes further polling slow - if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; } - else { this$1.prevInput = text; } - - if (this$1.composing) { - this$1.composing.range.clear(); - this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), - {className: "CodeMirror-composing"}); - } - }); - return true -}; - -TextareaInput.prototype.ensurePolled = function () { - if (this.pollingFast && this.poll()) { this.pollingFast = false; } -}; - -TextareaInput.prototype.onKeyPress = function () { - if (ie && ie_version >= 9) { this.hasSelection = null; } - this.fastPoll(); -}; - -TextareaInput.prototype.onContextMenu = function (e) { - var input = this, cm = input.cm, display = cm.display, te = input.textarea; - var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; - if (!pos || presto) { return } // Opera is difficult. - - // Reset the current text selection only if the click is done outside of the selection - // and 'resetSelectionOnContextMenu' option is true. - var reset = cm.options.resetSelectionOnContextMenu; - if (reset && cm.doc.sel.contains(pos) == -1) - { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); } - - var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText; - input.wrapper.style.cssText = "position: absolute"; - var wrapperBox = input.wrapper.getBoundingClientRect(); - te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; - var oldScrollY; - if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712) - display.input.focus(); - if (webkit) { window.scrollTo(null, oldScrollY); } - display.input.reset(); - // Adds "Select all" to context menu in FF - if (!cm.somethingSelected()) { te.value = input.prevInput = " "; } - input.contextMenuPending = true; - display.selForContextMenu = cm.doc.sel; - clearTimeout(display.detectingSelectAll); - - // Select-all will be greyed out if there's nothing to select, so - // this adds a zero-width space so that we can later check whether - // it got selected. - function prepareSelectAllHack() { - if (te.selectionStart != null) { - var selected = cm.somethingSelected(); - var extval = "\u200b" + (selected ? te.value : ""); - te.value = "\u21da"; // Used to catch context-menu undo - te.value = extval; - input.prevInput = selected ? "" : "\u200b"; - te.selectionStart = 1; te.selectionEnd = extval.length; - // Re-set this, in case some other handler touched the - // selection in the meantime. - display.selForContextMenu = cm.doc.sel; - } - } - function rehide() { - input.contextMenuPending = false; - input.wrapper.style.cssText = oldWrapperCSS; - te.style.cssText = oldCSS; - if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); } - - // Try to detect the user choosing select-all - if (te.selectionStart != null) { - if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); } - var i = 0, poll = function () { - if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && - te.selectionEnd > 0 && input.prevInput == "\u200b") { - operation(cm, selectAll)(cm); - } else if (i++ < 10) { - display.detectingSelectAll = setTimeout(poll, 500); - } else { - display.selForContextMenu = null; - display.input.reset(); - } - }; - display.detectingSelectAll = setTimeout(poll, 200); - } - } - - if (ie && ie_version >= 9) { prepareSelectAllHack(); } - if (captureRightClick) { - e_stop(e); - var mouseup = function () { - off(window, "mouseup", mouseup); - setTimeout(rehide, 20); - }; - on(window, "mouseup", mouseup); - } else { - setTimeout(rehide, 50); - } -}; - -TextareaInput.prototype.readOnlyChanged = function (val) { - if (!val) { this.reset(); } - this.textarea.disabled = val == "nocursor"; -}; - -TextareaInput.prototype.setUneditable = function () {}; - -TextareaInput.prototype.needsContentAttribute = false; - -function fromTextArea(textarea, options) { - options = options ? copyObj(options) : {}; - options.value = textarea.value; - if (!options.tabindex && textarea.tabIndex) - { options.tabindex = textarea.tabIndex; } - if (!options.placeholder && textarea.placeholder) - { options.placeholder = textarea.placeholder; } - // Set autofocus to true if this textarea is focused, or if it has - // autofocus and no other element is focused. - if (options.autofocus == null) { - var hasFocus = activeElt(); - options.autofocus = hasFocus == textarea || - textarea.getAttribute("autofocus") != null && hasFocus == document.body; - } - - function save() {textarea.value = cm.getValue();} - - var realSubmit; - if (textarea.form) { - on(textarea.form, "submit", save); - // Deplorable hack to make the submit method do the right thing. - if (!options.leaveSubmitMethodAlone) { - var form = textarea.form; - realSubmit = form.submit; - try { - var wrappedSubmit = form.submit = function () { - save(); - form.submit = realSubmit; - form.submit(); - form.submit = wrappedSubmit; - }; - } catch(e) {} - } - } - - options.finishInit = function (cm) { - cm.save = save; - cm.getTextArea = function () { return textarea; }; - cm.toTextArea = function () { - cm.toTextArea = isNaN; // Prevent this from being ran twice - save(); - textarea.parentNode.removeChild(cm.getWrapperElement()); - textarea.style.display = ""; - if (textarea.form) { - off(textarea.form, "submit", save); - if (typeof textarea.form.submit == "function") - { textarea.form.submit = realSubmit; } - } - }; - }; - - textarea.style.display = "none"; - var cm = CodeMirror$1(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); }, - options); - return cm -} - -function addLegacyProps(CodeMirror) { - CodeMirror.off = off; - CodeMirror.on = on; - CodeMirror.wheelEventPixels = wheelEventPixels; - CodeMirror.Doc = Doc; - CodeMirror.splitLines = splitLinesAuto; - CodeMirror.countColumn = countColumn; - CodeMirror.findColumn = findColumn; - CodeMirror.isWordChar = isWordCharBasic; - CodeMirror.Pass = Pass; - CodeMirror.signal = signal; - CodeMirror.Line = Line; - CodeMirror.changeEnd = changeEnd; - CodeMirror.scrollbarModel = scrollbarModel; - CodeMirror.Pos = Pos; - CodeMirror.cmpPos = cmp; - CodeMirror.modes = modes; - CodeMirror.mimeModes = mimeModes; - CodeMirror.resolveMode = resolveMode; - CodeMirror.getMode = getMode; - CodeMirror.modeExtensions = modeExtensions; - CodeMirror.extendMode = extendMode; - CodeMirror.copyState = copyState; - CodeMirror.startState = startState; - CodeMirror.innerMode = innerMode; - CodeMirror.commands = commands; - CodeMirror.keyMap = keyMap; - CodeMirror.keyName = keyName; - CodeMirror.isModifierKey = isModifierKey; - CodeMirror.lookupKey = lookupKey; - CodeMirror.normalizeKeyMap = normalizeKeyMap; - CodeMirror.StringStream = StringStream; - CodeMirror.SharedTextMarker = SharedTextMarker; - CodeMirror.TextMarker = TextMarker; - CodeMirror.LineWidget = LineWidget; - CodeMirror.e_preventDefault = e_preventDefault; - CodeMirror.e_stopPropagation = e_stopPropagation; - CodeMirror.e_stop = e_stop; - CodeMirror.addClass = addClass; - CodeMirror.contains = contains; - CodeMirror.rmClass = rmClass; - CodeMirror.keyNames = keyNames; -} - -// EDITOR CONSTRUCTOR - -defineOptions(CodeMirror$1); - -addEditorMethods(CodeMirror$1); - -// Set up methods on CodeMirror's prototype to redirect to the editor's document. -var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); -for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) - { CodeMirror$1.prototype[prop] = (function(method) { - return function() {return method.apply(this.doc, arguments)} - })(Doc.prototype[prop]); } } - -eventMixin(Doc); - -// INPUT HANDLING - -CodeMirror$1.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; - -// MODE DEFINITION AND QUERYING - -// Extra arguments are stored as the mode's dependencies, which is -// used by (legacy) mechanisms like loadmode.js to automatically -// load a mode. (Preferred mechanism is the require/define calls.) -CodeMirror$1.defineMode = function(name/*, mode, …*/) { - if (!CodeMirror$1.defaults.mode && name != "null") { CodeMirror$1.defaults.mode = name; } - defineMode.apply(this, arguments); -}; - -CodeMirror$1.defineMIME = defineMIME; - -// Minimal default mode. -CodeMirror$1.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); }); -CodeMirror$1.defineMIME("text/plain", "null"); - -// EXTENSIONS - -CodeMirror$1.defineExtension = function (name, func) { - CodeMirror$1.prototype[name] = func; -}; -CodeMirror$1.defineDocExtension = function (name, func) { - Doc.prototype[name] = func; -}; - -CodeMirror$1.fromTextArea = fromTextArea; - -addLegacyProps(CodeMirror$1); - -CodeMirror$1.version = "5.38.0"; - -return CodeMirror$1; - -}))); - - -/***/ }), -/* 7 */ -/***/ (function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1,eval)("this"); -} catch(e) { - // This works if the window reference is available - if(typeof window === "object") - g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }), -/* 8 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var Backbone = __webpack_require__(0); - -var TYPE_CLASS = 1; -var TYPE_ID = 2; - -var Selector = Backbone.Model.extend({ - idAttribute: 'name', - - defaults: { - name: '', - - label: '', - - // Type of the selector - type: TYPE_CLASS, - - // If not active it's not selectable by the style manager (uncheckboxed) - active: true, - - // Can't be seen by the style manager, therefore even by the user - // Will be rendered only in export code - private: false, - - // If true, can't be removed from the attacched element - protected: false - }, - - initialize: function initialize() { - var name = this.get('name'); - var label = this.get('label'); - - if (!name) { - this.set('name', label); - } else if (!label) { - this.set('label', name); - } - - this.set('name', Selector.escapeName(this.get('name'))); - }, - - - /** - * Get full selector name - * @return {string} - */ - getFullName: function getFullName() { - var init = ''; - - switch (this.get('type')) { - case TYPE_CLASS: - init = '.'; - break; - case TYPE_ID: - init = '#'; - break; - } - - return init + this.get('name'); - } -}, { - // All type selectors: https://developer.mozilla.org/it/docs/Web/CSS/CSS_Selectors - // Here I define only what I need - TYPE_CLASS: TYPE_CLASS, - - TYPE_ID: TYPE_ID, - - /** - * Escape string - * @param {string} name - * @return {string} - * @private - */ - escapeName: function escapeName(name) { - return ('' + name).trim().replace(/([^a-z0-9\w-]+)/gi, '-'); - } -}); - -module.exports = Selector; - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _underscore = __webpack_require__(1); - -var Backbone = __webpack_require__(0); -var $ = Backbone.$; - -module.exports = Backbone.View.extend({ - events: { - change: 'onChange' - }, - - attributes: function attributes() { - return this.model.get('attributes'); - }, - initialize: function initialize(o) { - var model = this.model; - var name = model.get('name'); - var target = model.target; - this.config = o.config || {}; - this.pfx = this.config.stylePrefix || ''; - this.ppfx = this.config.pStylePrefix || ''; - this.target = target; - this.className = this.pfx + 'trait'; - this.labelClass = this.ppfx + 'label'; - this.fieldClass = this.ppfx + 'field ' + this.ppfx + 'field-' + model.get('type'); - this.inputhClass = this.ppfx + 'input-holder'; - model.off('change:value', this.onValueChange); - this.listenTo(model, 'change:value', this.onValueChange); - model.view = this; - this.tmpl = '
    '; - }, - - - /** - * Fires when the input is changed - * @private - */ - onChange: function onChange() { - this.model.set('value', this.getInputEl().value); - }, - getValueForTarget: function getValueForTarget() { - return this.model.get('value'); - }, - setInputValue: function setInputValue(value) { - this.getInputEl().value = value; - }, - - - /** - * On change callback - * @private - */ - onValueChange: function onValueChange(model, value) { - var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - var mod = this.model; - var trg = this.target; - var name = mod.get('name'); - - if (opts.fromTarget) { - this.setInputValue(mod.get('value')); - } else { - var _value = this.getValueForTarget(); - mod.setTargetValue(_value, opts); - } - }, - - - /** - * Render label - * @private - */ - renderLabel: function renderLabel() { - var label = this.getLabel(); - this.$el.html('
    ' + label + '
    '); - }, - - - /** - * Returns label for the input - * @return {string} - * @private - */ - getLabel: function getLabel() { - var model = this.model; - var label = model.get('label') || model.get('name'); - return label.charAt(0).toUpperCase() + label.slice(1).replace(/-/g, ' '); - }, - - - /** - * Returns input element - * @return {HTMLElement} - * @private - */ - getInputEl: function getInputEl() { - if (!this.$input) { - var md = this.model; - var plh = md.get('placeholder') || md.get('default') || ''; - var type = md.get('type') || 'text'; - var min = md.get('min'); - var max = md.get('max'); - var value = this.getModelValue(); - var input = $(''); - - if (value) { - input.prop('value', value); - } - - if (min) { - input.prop('min', min); - } - - if (max) { - input.prop('max', max); - } - - this.$input = input; - } - return this.$input.get(0); - }, - getModelValue: function getModelValue() { - var value = void 0; - var model = this.model; - var target = this.target; - var name = model.get('name'); - - if (model.get('changeProp')) { - value = target.get(name); - } else { - var attrs = target.get('attributes'); - value = model.get('value') || attrs[name]; - } - - return !(0, _underscore.isUndefined)(value) ? value : ''; - }, - - - /** - * Renders input - * @private - * */ - renderField: function renderField() { - if (!this.$input) { - this.$el.append(this.tmpl); - var el = this.getInputEl(); - // I use prepand expecially for checkbox traits - var inputWrap = this.el.querySelector('.' + this.inputhClass); - inputWrap.insertBefore(el, inputWrap.childNodes[0]); - } - }, - render: function render() { - this.renderLabel(); - this.renderField(); - this.el.className = this.className; - return this; - } -}); - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__; - -/*! cash-dom 1.3.7, https://github.com/kenwheeler/cash @license MIT */ -;(function (root, factory) { - if (true) { - !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), - __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? - (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : - __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else if (typeof exports !== "undefined") { - module.exports = factory(); - } else { - root.cash = root.$ = factory(); - } -})(this, function () { - var doc = document, win = window, ArrayProto = Array.prototype, slice = ArrayProto.slice, filter = ArrayProto.filter, push = ArrayProto.push; - - var noop = function () {}, isFunction = function (item) { - // @see https://crbug.com/568448 - return typeof item === typeof noop && item.call; - }, isString = function (item) { - return typeof item === typeof ""; - }; - - var idMatch = /^#[\w-]*$/, classMatch = /^\.[\w-]*$/, htmlMatch = /<.+>/, singlet = /^\w+$/; - - function find(selector, context) { - context = context || doc; - var elems = (classMatch.test(selector) ? context.getElementsByClassName(selector.slice(1)) : singlet.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector)); - return elems; - } - - var frag; - function parseHTML(str) { - if (!frag) { - frag = doc.implementation.createHTMLDocument(null); - var base = frag.createElement("base"); - base.href = doc.location.href; - frag.head.appendChild(base); - } - - frag.body.innerHTML = str; - - return frag.body.childNodes; - } - - function onReady(fn) { - if (doc.readyState !== "loading") { - setTimeout(fn); - } else { - doc.addEventListener("DOMContentLoaded", fn); - } - } - - function Init(selector, context) { - if (!selector) { - return this; - } - - // If already a cash collection, don't do any further processing - if (selector.cash && selector !== win) { - return selector; - } - - var elems = selector, i = 0, length; - - if (isString(selector)) { - elems = (idMatch.test(selector) ? - // If an ID use the faster getElementById check - doc.getElementById(selector.slice(1)) : htmlMatch.test(selector) ? - // If HTML, parse it into real elements - parseHTML(selector) : - // else use `find` - find(selector, context)); - - // If function, use as shortcut for DOM ready - } else if (isFunction(selector)) { - onReady(selector);return this; - } - - if (!elems) { - return this; - } - - // If a single DOM element is passed in or received via ID, return the single element - if (elems.nodeType || elems === win) { - this[0] = elems; - this.length = 1; - } else { - // Treat like an array and loop through each item. - length = this.length = elems.length; - for (; i < length; i++) { - this[i] = elems[i]; - } - } - - return this; - } - - function cash(selector, context) { - return new Init(selector, context); - } - - var fn = cash.fn = cash.prototype = Init.prototype = { // jshint ignore:line - cash: true, - length: 0, - push: push, - splice: ArrayProto.splice, - map: ArrayProto.map, - init: Init - }; - - Object.defineProperty(fn, "constructor", { value: cash }); - - cash.parseHTML = parseHTML; - cash.noop = noop; - cash.isFunction = isFunction; - cash.isString = isString; - - cash.extend = fn.extend = function (target) { - target = target || {}; - - var args = slice.call(arguments), length = args.length, i = 1; - - if (args.length === 1) { - target = this; - i = 0; - } - - for (; i < length; i++) { - if (!args[i]) { - continue; - } - for (var key in args[i]) { - if (args[i].hasOwnProperty(key)) { - target[key] = args[i][key]; - } - } - } - - return target; - }; - - function each(collection, callback) { - var l = collection.length, i = 0; - - for (; i < l; i++) { - if (callback.call(collection[i], collection[i], i, collection) === false) { - break; - } - } - } - - function matches(el, selector) { - var m = el && (el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector || el.oMatchesSelector); - return !!m && m.call(el, selector); - } - - function getCompareFunction(selector) { - return ( - /* Use browser's `matches` function if string */ - isString(selector) ? matches : - /* Match a cash element */ - selector.cash ? function (el) { - return selector.is(el); - } : - /* Direct comparison */ - function (el, selector) { - return el === selector; - }); - } - - function unique(collection) { - return cash(slice.call(collection).filter(function (item, index, self) { - return self.indexOf(item) === index; - })); - } - - cash.extend({ - merge: function (first, second) { - var len = +second.length, i = first.length, j = 0; - - for (; j < len; i++, j++) { - first[i] = second[j]; - } - - first.length = i; - return first; - }, - - each: each, - matches: matches, - unique: unique, - isArray: Array.isArray, - isNumeric: function (n) { - return !isNaN(parseFloat(n)) && isFinite(n); - } - - }); - - var uid = cash.uid = "_cash" + Date.now(); - - function getDataCache(node) { - return (node[uid] = node[uid] || {}); - } - - function setData(node, key, value) { - return (getDataCache(node)[key] = value); - } - - function getData(node, key) { - var c = getDataCache(node); - if (c[key] === undefined) { - c[key] = node.dataset ? node.dataset[key] : cash(node).attr("data-" + key); - } - return c[key]; - } - - function removeData(node, key) { - var c = getDataCache(node); - if (c) { - delete c[key]; - } else if (node.dataset) { - delete node.dataset[key]; - } else { - cash(node).removeAttr("data-" + name); - } - } - - fn.extend({ - data: function (name, value) { - if (isString(name)) { - return (value === undefined ? getData(this[0], name) : this.each(function (v) { - return setData(v, name, value); - })); - } - - for (var key in name) { - this.data(key, name[key]); - } - - return this; - }, - - removeData: function (key) { - return this.each(function (v) { - return removeData(v, key); - }); - } - - }); - - var notWhiteMatch = /\S+/g; - - function getClasses(c) { - return isString(c) && c.match(notWhiteMatch); - } - - function hasClass(v, c) { - return (v.classList ? v.classList.contains(c) : new RegExp("(^| )" + c + "( |$)", "gi").test(v.className)); - } - - function addClass(v, c) { - if (v.classList) { - v.classList.add(c); - } else if (!hasClass(v, c)) { - v.className += " " + c; - } - } - - function removeClass(v, c) { - if (v.classList) { - v.classList.remove(c); - } else { - v.className = v.className.replace(c, ""); - } - } - - fn.extend({ - addClass: function (c) { - var classes = getClasses(c); - - return (classes ? this.each(function (v) { - each(classes, function (c) { - addClass(v, c); - }); - }) : this); - }, - - attr: function (name, value) { - if (!name) { - return undefined; - } - - if (isString(name)) { - if (value === undefined) { - return this[0] ? this[0].getAttribute ? this[0].getAttribute(name) : this[0][name] : undefined; - } - - return this.each(function (v) { - if (v.setAttribute) { - v.setAttribute(name, value); - } else { - v[name] = value; - } - }); - } - - for (var key in name) { - this.attr(key, name[key]); - } - - return this; - }, - - hasClass: function (c) { - var check = false, classes = getClasses(c); - if (classes && classes.length) { - this.each(function (v) { - check = hasClass(v, classes[0]); - return !check; - }); - } - return check; - }, - - prop: function (name, value) { - if (isString(name)) { - return (value === undefined ? this[0][name] : this.each(function (v) { - v[name] = value; - })); - } - - for (var key in name) { - this.prop(key, name[key]); - } - - return this; - }, - - removeAttr: function (name) { - return this.each(function (v) { - if (v.removeAttribute) { - v.removeAttribute(name); - } else { - delete v[name]; - } - }); - }, - - removeClass: function (c) { - if (!arguments.length) { - return this.attr("class", ""); - } - var classes = getClasses(c); - return (classes ? this.each(function (v) { - each(classes, function (c) { - removeClass(v, c); - }); - }) : this); - }, - - removeProp: function (name) { - return this.each(function (v) { - delete v[name]; - }); - }, - - toggleClass: function (c, state) { - if (state !== undefined) { - return this[state ? "addClass" : "removeClass"](c); - } - var classes = getClasses(c); - return (classes ? this.each(function (v) { - each(classes, function (c) { - if (hasClass(v, c)) { - removeClass(v, c); - } else { - addClass(v, c); - } - }); - }) : this); - } }); - - fn.extend({ - add: function (selector, context) { - return unique(cash.merge(this, cash(selector, context))); - }, - - each: function (callback) { - each(this, callback); - return this; - }, - - eq: function (index) { - return cash(this.get(index)); - }, - - filter: function (selector) { - if (!selector) { - return this; - } - - var comparator = (isFunction(selector) ? selector : getCompareFunction(selector)); - - return cash(filter.call(this, function (e) { - return comparator(e, selector); - })); - }, - - first: function () { - return this.eq(0); - }, - - get: function (index) { - if (index === undefined) { - return slice.call(this); - } - return (index < 0 ? this[index + this.length] : this[index]); - }, - - index: function (elem) { - var child = elem ? cash(elem)[0] : this[0], collection = elem ? this : cash(child).parent().children(); - return slice.call(collection).indexOf(child); - }, - - last: function () { - return this.eq(-1); - } - - }); - - var camelCase = (function () { - var camelRegex = /(?:^\w|[A-Z]|\b\w)/g, whiteSpace = /[\s-_]+/g; - return function (str) { - return str.replace(camelRegex, function (letter, index) { - return letter[index === 0 ? "toLowerCase" : "toUpperCase"](); - }).replace(whiteSpace, ""); - }; - }()); - - var getPrefixedProp = (function () { - var cache = {}, doc = document, div = doc.createElement("div"), style = div.style; - - return function (prop) { - prop = camelCase(prop); - if (cache[prop]) { - return cache[prop]; - } - - var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), prefixes = ["webkit", "moz", "ms", "o"], props = (prop + " " + (prefixes).join(ucProp + " ") + ucProp).split(" "); - - each(props, function (p) { - if (p in style) { - cache[p] = prop = cache[prop] = p; - return false; - } - }); - - return cache[prop]; - }; - }()); - - cash.prefixedProp = getPrefixedProp; - cash.camelCase = camelCase; - - fn.extend({ - css: function (prop, value) { - if (isString(prop)) { - prop = getPrefixedProp(prop); - return (arguments.length > 1 ? this.each(function (v) { - return v.style[prop] = value; - }) : win.getComputedStyle(this[0])[prop]); - } - - for (var key in prop) { - this.css(key, prop[key]); - } - - return this; - } - - }); - - function compute(el, prop) { - return parseInt(win.getComputedStyle(el[0], null)[prop], 10) || 0; - } - - each(["Width", "Height"], function (v) { - var lower = v.toLowerCase(); - - fn[lower] = function () { - return this[0].getBoundingClientRect()[lower]; - }; - - fn["inner" + v] = function () { - return this[0]["client" + v]; - }; - - fn["outer" + v] = function (margins) { - return this[0]["offset" + v] + (margins ? compute(this, "margin" + (v === "Width" ? "Left" : "Top")) + compute(this, "margin" + (v === "Width" ? "Right" : "Bottom")) : 0); - }; - }); - - function registerEvent(node, eventName, callback) { - var eventCache = getData(node, "_cashEvents") || setData(node, "_cashEvents", {}); - eventCache[eventName] = eventCache[eventName] || []; - eventCache[eventName].push(callback); - node.addEventListener(eventName, callback); - } - - function removeEvent(node, eventName, callback) { - var events = getData(node, "_cashEvents"), eventCache = (events && events[eventName]), index; - - if (!eventCache) { - return; - } - - if (callback) { - node.removeEventListener(eventName, callback); - index = eventCache.indexOf(callback); - if (index >= 0) { - eventCache.splice(index, 1); - } - } else { - each(eventCache, function (event) { - node.removeEventListener(eventName, event); - }); - eventCache = []; - } - } - - fn.extend({ - off: function (eventName, callback) { - return this.each(function (v) { - return removeEvent(v, eventName, callback); - }); - }, - - on: function (eventName, delegate, callback, runOnce) { - // jshint ignore:line - - var originalCallback; - - if (!isString(eventName)) { - for (var key in eventName) { - this.on(key, delegate, eventName[key]); - } - return this; - } - - if (isFunction(delegate)) { - callback = delegate; - delegate = null; - } - - if (eventName === "ready") { - onReady(callback); - return this; - } - - if (delegate) { - originalCallback = callback; - callback = function (e) { - var t = e.target; - - while (!matches(t, delegate)) { - if (t === this) { - return (t = false); - } - t = t.parentNode; - } - - if (t) { - originalCallback.call(t, e); - } - }; - } - - return this.each(function (v) { - var finalCallback = callback; - if (runOnce) { - finalCallback = function () { - callback.apply(this, arguments); - removeEvent(v, eventName, finalCallback); - }; - } - registerEvent(v, eventName, finalCallback); - }); - }, - - one: function (eventName, delegate, callback) { - return this.on(eventName, delegate, callback, true); - }, - - ready: onReady, - - trigger: function (eventName, data) { - var evt = doc.createEvent("HTMLEvents"); - evt.data = data; - evt.initEvent(eventName, true, false); - return this.each(function (v) { - return v.dispatchEvent(evt); - }); - } - - }); - - function encode(name, value) { - return "&" + encodeURIComponent(name) + "=" + encodeURIComponent(value).replace(/%20/g, "+"); - } - - function getSelectMultiple_(el) { - var values = []; - each(el.options, function (o) { - if (o.selected) { - values.push(o.value); - } - }); - return values.length ? values : null; - } - - function getSelectSingle_(el) { - var selectedIndex = el.selectedIndex; - return selectedIndex >= 0 ? el.options[selectedIndex].value : null; - } - - function getValue(el) { - var type = el.type; - if (!type) { - return null; - } - switch (type.toLowerCase()) { - case "select-one": - return getSelectSingle_(el); - case "select-multiple": - return getSelectMultiple_(el); - case "radio": - return (el.checked) ? el.value : null; - case "checkbox": - return (el.checked) ? el.value : null; - default: - return el.value ? el.value : null; - } - } - - fn.extend({ - serialize: function () { - var query = ""; - - each(this[0].elements || this, function (el) { - if (el.disabled || el.tagName === "FIELDSET") { - return; - } - var name = el.name; - switch (el.type.toLowerCase()) { - case "file": - case "reset": - case "submit": - case "button": - break; - case "select-multiple": - var values = getValue(el); - if (values !== null) { - each(values, function (value) { - query += encode(name, value); - }); - } - break; - default: - var value = getValue(el); - if (value !== null) { - query += encode(name, value); - } - } - }); - - return query.substr(1); - }, - - val: function (value) { - if (value === undefined) { - return getValue(this[0]); - } else { - return this.each(function (v) { - return v.value = value; - }); - } - } - - }); - - function insertElement(el, child, prepend) { - if (prepend) { - var first = el.childNodes[0]; - el.insertBefore(child, first); - } else { - el.appendChild(child); - } - } - - function insertContent(parent, child, prepend) { - var str = isString(child); - - if (!str && child.length) { - each(child, function (v) { - return insertContent(parent, v, prepend); - }); - return; - } - - each(parent, str ? function (v) { - return v.insertAdjacentHTML(prepend ? "afterbegin" : "beforeend", child); - } : function (v, i) { - return insertElement(v, (i === 0 ? child : child.cloneNode(true)), prepend); - }); - } - - fn.extend({ - after: function (selector) { - cash(selector).insertAfter(this); - return this; - }, - - append: function (content) { - insertContent(this, content); - return this; - }, - - appendTo: function (parent) { - insertContent(cash(parent), this); - return this; - }, - - before: function (selector) { - cash(selector).insertBefore(this); - return this; - }, - - clone: function () { - return cash(this.map(function (v) { - return v.cloneNode(true); - })); - }, - - empty: function () { - this.html(""); - return this; - }, - - html: function (content) { - if (content === undefined) { - return this[0].innerHTML; - } - var source = (content.nodeType ? content[0].outerHTML : content); - return this.each(function (v) { - return v.innerHTML = source; - }); - }, - - insertAfter: function (selector) { - var _this = this; - - - cash(selector).each(function (el, i) { - var parent = el.parentNode, sibling = el.nextSibling; - _this.each(function (v) { - parent.insertBefore((i === 0 ? v : v.cloneNode(true)), sibling); - }); - }); - - return this; - }, - - insertBefore: function (selector) { - var _this2 = this; - cash(selector).each(function (el, i) { - var parent = el.parentNode; - _this2.each(function (v) { - parent.insertBefore((i === 0 ? v : v.cloneNode(true)), el); - }); - }); - return this; - }, - - prepend: function (content) { - insertContent(this, content, true); - return this; - }, - - prependTo: function (parent) { - insertContent(cash(parent), this, true); - return this; - }, - - remove: function () { - return this.each(function (v) { - return v.parentNode.removeChild(v); - }); - }, - - text: function (content) { - if (content === undefined) { - return this[0].textContent; - } - return this.each(function (v) { - return v.textContent = content; - }); - } - - }); - - var docEl = doc.documentElement; - - fn.extend({ - position: function () { - var el = this[0]; - return { - left: el.offsetLeft, - top: el.offsetTop - }; - }, - - offset: function () { - var rect = this[0].getBoundingClientRect(); - return { - top: rect.top + win.pageYOffset - docEl.clientTop, - left: rect.left + win.pageXOffset - docEl.clientLeft - }; - }, - - offsetParent: function () { - return cash(this[0].offsetParent); - } - - }); - - fn.extend({ - children: function (selector) { - var elems = []; - this.each(function (el) { - push.apply(elems, el.children); - }); - elems = unique(elems); - - return (!selector ? elems : elems.filter(function (v) { - return matches(v, selector); - })); - }, - - closest: function (selector) { - if (!selector || this.length < 1) { - return cash(); - } - if (this.is(selector)) { - return this.filter(selector); - } - return this.parent().closest(selector); - }, - - is: function (selector) { - if (!selector) { - return false; - } - - var match = false, comparator = getCompareFunction(selector); - - this.each(function (el) { - match = comparator(el, selector); - return !match; - }); - - return match; - }, - - find: function (selector) { - if (!selector || selector.nodeType) { - return cash(selector && this.has(selector).length ? selector : null); - } - - var elems = []; - this.each(function (el) { - push.apply(elems, find(selector, el)); - }); - - return unique(elems); - }, - - has: function (selector) { - var comparator = (isString(selector) ? function (el) { - return find(selector, el).length !== 0; - } : function (el) { - return el.contains(selector); - }); - - return this.filter(comparator); - }, - - next: function () { - return cash(this[0].nextElementSibling); - }, - - not: function (selector) { - if (!selector) { - return this; - } - - var comparator = getCompareFunction(selector); - - return this.filter(function (el) { - return !comparator(el, selector); - }); - }, - - parent: function () { - var result = []; - - this.each(function (item) { - if (item && item.parentNode) { - result.push(item.parentNode); - } - }); - - return unique(result); - }, - - parents: function (selector) { - var last, result = []; - - this.each(function (item) { - last = item; - - while (last && last.parentNode && last !== doc.body.parentNode) { - last = last.parentNode; - - if (!selector || (selector && matches(last, selector))) { - result.push(last); - } - } - }); - - return unique(result); - }, - - prev: function () { - return cash(this[0].previousElementSibling); - }, - - siblings: function () { - var collection = this.parent().children(), el = this[0]; - - return collection.filter(function (i) { - return i !== el; - }); - } - - }); - - - return cash; -}); - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _underscore = __webpack_require__(1); - -var Selector = __webpack_require__(8); - -module.exports = __webpack_require__(0).Collection.extend({ - model: Selector, - - getStyleable: function getStyleable() { - return (0, _underscore.filter)(this.models, function (item) { - return item.get('active') && !item.get('private'); - }); - }, - getValid: function getValid() { - return (0, _underscore.filter)(this.models, function (item) { - return !item.get('private'); - }); - }, - getFullString: function getFullString(collection) { - var result = []; - var coll = collection || this; - coll.forEach(function (selector) { - return result.push(selector.getFullName()); - }); - return result.join('').trim(); - } -}); - -/***/ }), -/* 12 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _TypeableCollection = __webpack_require__(33); - -var _TypeableCollection2 = _interopRequireDefault(_TypeableCollection); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Property = __webpack_require__(13); - -module.exports = __webpack_require__(0).Collection.extend(_TypeableCollection2.default).extend({ - types: [{ - id: 'stack', - model: __webpack_require__(123), - view: __webpack_require__(35), - isType: function isType(value) { - if (value && value.type == 'stack') { - return value; - } - } - }, { - id: 'composite', - model: __webpack_require__(34), - view: __webpack_require__(17), - isType: function isType(value) { - if (value && value.type == 'composite') { - return value; - } - } - }, { - id: 'file', - model: Property, - view: __webpack_require__(41), - isType: function isType(value) { - if (value && value.type == 'file') { - return value; - } - } - }, { - id: 'color', - model: Property, - view: __webpack_require__(39), - isType: function isType(value) { - if (value && value.type == 'color') { - return value; - } - } - }, { - id: 'select', - model: __webpack_require__(42), - view: __webpack_require__(38), - isType: function isType(value) { - if (value && value.type == 'select') { - return value; - } - } - }, { - id: 'radio', - model: __webpack_require__(42), - view: __webpack_require__(37), - isType: function isType(value) { - if (value && value.type == 'radio') { - return value; - } - } - }, { - id: 'slider', - model: __webpack_require__(129), - view: __webpack_require__(130), - isType: function isType(value) { - if (value && value.type == 'slider') { - return value; - } - } - }, { - id: 'integer', - model: __webpack_require__(43), - view: __webpack_require__(15), - isType: function isType(value) { - if (value && value.type == 'integer') { - return value; - } - } - }, { - id: 'base', - model: Property, - view: __webpack_require__(5), - isType: function isType(value) { - value.type = 'base'; - return value; - } - }], - - deepClone: function deepClone() { - var collection = this.clone(); - collection.reset(collection.map(function (model) { - var cloned = model.clone(); - cloned.typeView = model.typeView; - return cloned; - })); - return collection; - }, - - - /** - * Parse a value and return an array splitted by properties - * @param {string} value - * @return {Array} - * @return - */ - parseValue: function parseValue(value) { - var _this = this; - - var properties = []; - var values = value.split(' '); - values.forEach(function (value, i) { - var property = _this.at(i); - if (!property) return; - properties.push(_extends({}, property.attributes, { value: value })); - }); - return properties; - }, - getFullValue: function getFullValue() { - var result = ''; - this.each(function (model) { - return result += model.getFullValue() + ' '; - }); - return result.trim(); - } -}); - -/***/ }), -/* 13 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _underscore = __webpack_require__(1); - -module.exports = __webpack_require__(0).Model.extend({ - defaults: { - name: '', - property: '', - type: '', - defaults: '', - info: '', - value: '', - icon: '', - functionName: '', - status: '', - visible: true, - fixedValues: ['initial', 'inherit'], - - // If true to the value will be added '!important' - important: 0, - - // If true, will be hidden by default and will show up only for targets - // which require this property (via `stylable-require`) - // Use case: - // you can add all SVG CSS properties with toRequire as true - // and then require them on SVG Components - toRequire: 0 - }, - - initialize: function initialize(opt) { - var o = opt || {}; - var name = this.get('name'); - var prop = this.get('property'); - - if (!name) { - this.set('name', prop.charAt(0).toUpperCase() + prop.slice(1).replace(/-/g, ' ')); - } - - var init = this.init && this.init.bind(this); - init && init(); - }, - - - /** - * Clear the value - * @return {this} - */ - clearValue: function clearValue() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - this.set({ value: undefined }, opts); - return this; - }, - - - /** - * Update value - * @param {any} value - * @param {Boolen} [complete=true] Indicates if it's a final state - * @param {Object} [opts={}] Options - */ - setValue: function setValue(value) { - var complete = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; - var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - var parsed = this.parseValue(value); - this.set(parsed, _extends({}, opts, { avoidStore: 1 })); - - // It's important to set an empty value, otherwise the - // UndoManager won't see the change - if (complete) { - this.set('value', '', opts); - this.set(parsed, opts); - } - }, - - - /** - * Like `setValue` but, in addition, prevents the update of the input element - * as the changes should come from the input itself. - * This method is useful with the definition of custom properties - * @param {any} value - * @param {Boolen} [complete=true] Indicates if it's a final state - * @param {Object} [opts={}] Options - */ - setValueFromInput: function setValueFromInput(value, complete) { - var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - this.setValue(value, complete, _extends({}, opts, { fromInput: 1 })); - }, - - - /** - * Parse a raw value, generally fetched from the target, for this property - * @param {string} value Raw value string - * @return {Object} - * @example - * // example with an Input type - * prop.parseValue('translateX(10deg)'); - * // -> { value: 10, unit: 'deg', functionName: 'translateX' } - * - */ - parseValue: function parseValue(value) { - var result = { value: value }; - var imp = '!important'; - - if ((0, _underscore.isString)(value) && value.indexOf(imp) !== -1) { - result.value = value.replace(imp, '').trim(); - result.important = 1; - } - - if (!this.get('functionName')) { - return result; - } - - var args = []; - var valueStr = '' + result.value; - var start = valueStr.indexOf('(') + 1; - var end = valueStr.lastIndexOf(')'); - args.push(start); - - // Will try even if the last closing parentheses is not found - if (end >= 0) { - args.push(end); - } - - result.value = String.prototype.substring.apply(valueStr, args); - return result; - }, - - - /** - * Get the default value - * @return {string} - * @private - */ - getDefaultValue: function getDefaultValue() { - return this.get('defaults'); - }, - - - /** - * Get a complete value of the property. - * This probably will replace the getValue when all - * properties models will be splitted - * @param {string} val Custom value to replace the one on the model - * @return {string} - * @private - */ - getFullValue: function getFullValue(val) { - var fn = this.get('functionName'); - var value = (0, _underscore.isUndefined)(val) ? this.get('value') : val; - - if (fn && !(0, _underscore.isUndefined)(value)) { - value = fn + '(' + value + ')'; - } - - if (this.get('important')) { - value = value + ' !important'; - } - - return value || ''; - } -}); - -/***/ }), -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var PropertyView = __webpack_require__(5); -var PropertyIntegerView = __webpack_require__(15); -var PropertyRadioView = __webpack_require__(37); -var PropertySelectView = __webpack_require__(38); -var PropertyColorView = __webpack_require__(39); -var PropertyFileView = __webpack_require__(41); -var PropertyCompositeView = __webpack_require__(17); -var PropertyStackView = __webpack_require__(35); - -module.exports = _backbone2.default.View.extend({ - initialize: function initialize(o) { - this.config = o.config || {}; - this.pfx = this.config.stylePrefix || ''; - this.target = o.target || {}; - this.propTarget = o.propTarget || {}; - this.onChange = o.onChange; - this.onInputRender = o.onInputRender || {}; - this.customValue = o.customValue || {}; - this.properties = []; - var coll = this.collection; - this.listenTo(coll, 'add', this.addTo); - this.listenTo(coll, 'reset', this.render); - }, - addTo: function addTo(model) { - this.add(model); - }, - add: function add(model, frag) { - var view = new model.typeView({ - model: model, - name: model.get('name'), - id: this.pfx + model.get('property'), - target: this.target, - propTarget: this.propTarget, - onChange: this.onChange, - onInputRender: this.onInputRender, - config: this.config - }); - - if (model.get('type') != 'composite') { - view.customValue = this.customValue; - } - - view.render(); - var el = view.el; - this.properties.push(view); - - if (frag) { - frag.appendChild(el); - } else { - this.el.appendChild(el); - } - }, - render: function render() { - var _this = this; - - this.properties = []; - var fragment = document.createDocumentFragment(); - this.collection.each(function (model) { - return _this.add(model, fragment); - }); - this.$el.append(fragment); - this.$el.attr('class', this.pfx + 'properties'); - return this; - } -}); - -/***/ }), -/* 15 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var InputNumber = __webpack_require__(18); -var PropertyView = __webpack_require__(5); -var $ = _backbone2.default.$; -var timeout = void 0; - -module.exports = PropertyView.extend({ - templateInput: function templateInput() { - return ''; - }, - init: function init() { - var model = this.model; - this.listenTo(model, 'change:unit', this.modelValueChanged); - this.listenTo(model, 'el:change', this.elementUpdated); - }, - setValue: function setValue(value) { - var parsed = this.model.parseValue(value); - value = '' + parsed.value + parsed.unit; - this.inputInst.setValue(value, { silent: 1 }); - }, - onRender: function onRender() { - var ppfx = this.ppfx; - - if (!this.input) { - var input = this.model.input; - input.ppfx = ppfx; - input.render(); - var fields = this.el.querySelector('.' + ppfx + 'fields'); - fields.appendChild(input.el); - this.$input = input.inputEl; - this.unit = input.unitEl; - this.$unit = $(this.unit); - this.input = this.$input.get(0); - this.inputInst = input; - } - } -}); - -/***/ }), -/* 16 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var Backbone = __webpack_require__(0); -var ComponentView = __webpack_require__(3); - -module.exports = ComponentView.extend({ - tagName: 'img', - - events: { - dblclick: 'openModal', - click: 'initResize' - }, - - initialize: function initialize(o) { - var model = this.model; - ComponentView.prototype.initialize.apply(this, arguments); - this.listenTo(model, 'change:src', this.updateSrc); - this.listenTo(model, 'dblclick active', this.openModal); - this.classEmpty = this.ppfx + 'plh-image'; - var config = this.config; - config.modal && (this.modal = config.modal); - config.am && (this.am = config.am); - this.fetchFile(); - }, - - - /** - * Fetch file if exists - */ - fetchFile: function fetchFile() { - var model = this.model; - var file = model.get('file'); - - if (file) { - var fu = this.em.get('AssetManager').FileUploader(); - fu.uploadFile({ - dataTransfer: { files: [file] } - }, function (res) { - var obj = res && res.data && res.data[0]; - var src = obj && obj.src; - src && model.set({ src: src }); - }); - model.set('file', ''); - } - }, - - - /** - * Update src attribute - * @private - * */ - updateSrc: function updateSrc() { - var model = this.model, - classEmpty = this.classEmpty, - $el = this.$el; - - var src = model.get('src'); - model.addAttributes({ src: src }); - $el[src ? 'removeClass' : 'addClass'](classEmpty); - }, - - - /** - * Open dialog for image changing - * @param {Object} e Event - * @private - * */ - openModal: function openModal(e) { - var em = this.opts.config.em; - var editor = em ? em.get('Editor') : ''; - - if (editor && this.model.get('editable')) { - editor.runCommand('open-assets', { - target: this.model, - types: ['image'], - accept: 'image/*', - onSelect: function onSelect() { - editor.Modal.close(); - editor.AssetManager.setTarget(null); - } - }); - } - }, - render: function render() { - this.updateAttributes(); - this.updateClasses(); - - var actCls = this.$el.attr('class') || ''; - if (!this.model.get('src')) this.$el.attr('class', (actCls + ' ' + this.classEmpty).trim()); - - // Avoid strange behaviours while try to drag - this.$el.attr('onmousedown', 'return false'); - return this; - } -}); - -/***/ }), -/* 17 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var PropertyView = __webpack_require__(5); -var $ = _backbone2.default.$; - -module.exports = PropertyView.extend({ - templateInput: function templateInput() { - var pfx = this.pfx; - return '\n
    \n \n
    \n '; - }, - inputValueChanged: function inputValueChanged() { - // If it's not detached (eg. 'padding: 1px 2px 3px 4px;') it will follow - // the same flow of PropertyView - if (!this.model.get('detached')) { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - PropertyView.prototype.inputValueChanged.apply(this, args); - } - }, - clear: function clear(e) { - var props = this.properties; - props && props.forEach(function (propView) { - return propView.clear(); - }); - PropertyView.prototype.clear.apply(this, arguments); - }, - - - /** - * Renders input - * */ - onRender: function onRender() { - var model = this.model; - var props = model.get('properties') || []; - var self = this; - this.properties = []; - - if (props.length) { - if (!this.$input) { - this.$input = $(''); - this.input = this.$input.get(0); - } - - if (!this.props) { - this.props = model.get('properties'); - } - - if (!this.$props) { - //Not yet supported nested composite - this.props.each(function (prop, index) { - if (prop && prop.get('type') == 'composite') { - this.props.remove(prop); - console.warn('Nested composite types not yet allowed.'); - } - prop.parent = model; - }, this); - - var PropertiesView = __webpack_require__(14); - var propsView = new PropertiesView(this.getPropsConfig()); - this.$props = propsView.render().$el; - this.properties = propsView.properties; - this.$el.find('#' + this.pfx + 'input-holder').append(this.$props); - } - } - }, - - - /** - * Returns configurations that should be past to properties - * @param {Object} opts - * @return {Object} - */ - getPropsConfig: function getPropsConfig(opts) { - var that = this; - var model = this.model; - - var result = { - config: this.config, - collection: this.props, - target: this.target, - propTarget: this.propTarget, - // On any change made to children I need to update composite value - onChange: function onChange(el, view, opts) { - model.set('value', model.getFullValue(), opts); - }, - - // Each child property will receive a full composite string, eg. '0px 0px 10px 0px' - // I need to extract from that string the corresponding one to that property. - customValue: function customValue(property, mIndex) { - return that.valueOnIndex(mIndex, property); - } - }; - - // If detached let follow its standard flow - if (model.get('detached')) { - delete result.onChange; - } - - return result; - }, - - - /** - * Extract string from composite value - * @param {number} index Index - * @param {Object} view Property view - * @return {string} - * */ - valueOnIndex: function valueOnIndex(index, view) { - var value = void 0; - var targetValue = this.getTargetValue({ ignoreDefault: 1 }); - - // If the target value of the composite is not empty I'll fetch - // the corresponding value from the requested index, otherwise try - // to get the value of the sub-property - if (targetValue) { - var values = targetValue.split(' '); - value = values[index]; - } else { - value = view && view.getTargetValue({ ignoreCustomValue: 1, ignoreDefault: 1 }); - } - - if (view) { - value = view.model.parseValue(value).value; - } - - return value; - } -}); - -/***/ }), -/* 18 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(_) { - -var _underscore = __webpack_require__(1); - -var _mixins = __webpack_require__(2); - -var Input = __webpack_require__(36); -var Backbone = __webpack_require__(0); -var $ = Backbone.$; - -module.exports = Input.extend({ - events: { - 'change input': 'handleChange', - 'change select': 'handleUnitChange', - 'click [data-arrow-up]': 'upArrowClick', - 'click [data-arrow-down]': 'downArrowClick', - 'mousedown [data-arrows]': 'downIncrement' - }, - - template: function template() { - var ppfx = this.ppfx; - return '\n \n \n
    \n
    \n
    \n
    \n '; - }, - inputClass: function inputClass() { - var ppfx = this.ppfx; - return this.opts.contClass || ppfx + 'field ' + ppfx + 'field-integer'; - }, - initialize: function initialize() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - Input.prototype.initialize.apply(this, arguments); - (0, _underscore.bindAll)(this, 'moveIncrement', 'upIncrement'); - this.doc = document; - this.listenTo(this.model, 'change:unit', this.handleModelChange); - }, - - - /** - * Set value to the model - * @param {string} value - * @param {Object} opts - */ - setValue: function setValue(value, opts) { - var opt = opts || {}; - var valid = this.validateInputValue(value, { deepCheck: 1 }); - var validObj = { value: valid.value }; - - // If found some unit value - if (valid.unit || valid.force) { - validObj.unit = valid.unit; - } - - this.model.set(validObj, opt); - - // Generally I get silent when I need to reflect data to view without - // reupdating the target - if (opt.silent) { - this.handleModelChange(); - } - }, - - - /** - * Handled when the view is changed - */ - handleChange: function handleChange(e) { - e.stopPropagation(); - this.setValue(this.getInputEl().value); - this.elementUpdated(); - }, - - - /** - * Handled when the view is changed - */ - handleUnitChange: function handleUnitChange(e) { - e.stopPropagation(); - var value = this.getUnitEl().value; - this.model.set('unit', value); - this.elementUpdated(); - }, - - - /** - * Fired when the element of the property is updated - */ - elementUpdated: function elementUpdated() { - this.model.trigger('el:change'); - }, - - - /** - * Updates the view when the model is changed - * */ - handleModelChange: function handleModelChange() { - var model = this.model; - this.getInputEl().value = model.get('value'); - var unitEl = this.getUnitEl(); - unitEl && (unitEl.value = model.get('unit') || ''); - }, - - - /** - * Get the unit element - * @return {HTMLElement} - */ - getUnitEl: function getUnitEl() { - if (!this.unitEl) { - var model = this.model; - var units = model.get('units') || []; - - if (units.length) { - var options = []; - - units.forEach(function (unit) { - var selected = unit == model.get('unit') ? 'selected' : ''; - options.push(''); - }); - - var temp = document.createElement('div'); - temp.innerHTML = ''; - this.unitEl = temp.firstChild; - } - } - - return this.unitEl; - }, - - - /** - * Invoked when the up arrow is clicked - * */ - upArrowClick: function upArrowClick() { - var model = this.model; - var step = model.get('step'); - var value = parseInt(model.get('value'), 10); - value = this.normalizeValue(value + step); - var valid = this.validateInputValue(value); - model.set('value', valid.value); - this.elementUpdated(); - }, - - - /** - * Invoked when the down arrow is clicked - * */ - downArrowClick: function downArrowClick() { - var model = this.model; - var step = model.get('step'); - var value = parseInt(model.get('value'), 10); - var val = this.normalizeValue(value - step); - var valid = this.validateInputValue(val); - model.set('value', valid.value); - this.elementUpdated(); - }, - - - /** - * Change easily integer input value with click&drag method - * @param Event - * - * @return void - * */ - downIncrement: function downIncrement(e) { - e.preventDefault(); - this.moved = 0; - var value = this.model.get('value'); - value = this.normalizeValue(value); - this.current = { y: e.pageY, val: value }; - (0, _mixins.on)(this.doc, 'mousemove', this.moveIncrement); - (0, _mixins.on)(this.doc, 'mouseup', this.upIncrement); - }, - - - /** While the increment is clicked, moving the mouse will update input value - * @param Object - * - * @return bool - * */ - moveIncrement: function moveIncrement(ev) { - this.moved = 1; - var model = this.model; - var step = model.get('step'); - var data = this.current; - var pos = this.normalizeValue(data.val + (data.y - ev.pageY) * step); - this.prValue = this.validateInputValue(pos).value; - model.set('value', this.prValue, { avoidStore: 1 }); - return false; - }, - - - /** - * Stop moveIncrement method - * */ - upIncrement: function upIncrement() { - var model = this.model; - var step = model.get('step'); - (0, _mixins.off)(this.doc, 'mouseup', this.upIncrement); - (0, _mixins.off)(this.doc, 'mousemove', this.moveIncrement); - - if (this.prValue && this.moved) { - var value = this.prValue - step; - model.set('value', value, { avoidStore: 1 }).set('value', value + step); - this.elementUpdated(); - } - }, - normalizeValue: function normalizeValue(value) { - var defValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - var model = this.model; - var step = model.get('step'); - var stepDecimals = 0; - - if (isNaN(value)) { - return defValue; - } - - value = parseFloat(value); - - if (Math.floor(value) !== value) { - var side = step.toString().split('.')[1]; - stepDecimals = side ? side.length : 0; - } - - return stepDecimals ? parseFloat(value.toFixed(stepDecimals)) : value; - }, - - - /** - * Validate input value - * @param {String} value Raw value - * @param {Object} opts Options - * @return {Object} Validated string - */ - validateInputValue: function validateInputValue(value, opts) { - var force = 0; - var opt = opts || {}; - var model = this.model; - var defValue = ''; //model.get('defaults'); - var val = !(0, _underscore.isUndefined)(value) ? value : defValue; - var units = model.get('units') || []; - var unit = model.get('unit') || units.length && units[0] || ''; - var max = model.get('max'); - var min = model.get('min'); - - if (opt.deepCheck) { - var fixed = model.get('fixedValues') || []; - - if (val) { - // If the value is one of the fixed values I leave it as it is - var regFixed = new RegExp('^' + fixed.join('|'), 'g'); - if (fixed.length && regFixed.test(val)) { - val = val.match(regFixed)[0]; - unit = ''; - force = 1; - } else { - var valCopy = val + ''; - val += ''; // Make it suitable for replace - val = parseFloat(val.replace(',', '.')); - val = !isNaN(val) ? val : defValue; - var uN = valCopy.replace(val, ''); - // Check if exists as unit - if (_.indexOf(units, uN) >= 0) unit = uN; - } - } - } - - if (!(0, _underscore.isUndefined)(max) && max !== '') val = val > max ? max : val; - if (!(0, _underscore.isUndefined)(min) && min !== '') val = val < min ? min : val; - - return { - force: force, - value: val, - unit: unit - }; - }, - render: function render() { - Input.prototype.render.call(this); - var unit = this.getUnitEl(); - unit && this.$el.find('.' + this.ppfx + 'field-units').get(0).appendChild(unit); - return this; - } -}); -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }), -/* 19 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var Component = __webpack_require__(4); - -module.exports = Component.extend({ - defaults: _extends({}, Component.prototype.defaults, { - type: 'tbody', - tagName: 'tbody', - draggable: ['table'], - droppable: ['tr'], - columns: 1, - rows: 1 - }), - - initialize: function initialize(o, opt) { - Component.prototype.initialize.apply(this, arguments); - var components = this.get('components'); - var columns = this.get('columns'); - var rows = this.get('rows'); - - // Init components if empty - if (!components.length) { - var rowsToAdd = []; - - while (rows--) { - var columnsToAdd = []; - var clm = columns; - - while (clm--) { - columnsToAdd.push({ - type: 'cell', - classes: ['cell'] - }); - } - - rowsToAdd.push({ - type: 'row', - classes: ['row'], - components: columnsToAdd - }); - } - - components.add(rowsToAdd); - } - } -}, { - isComponent: function isComponent(el) { - var result = ''; - - if (el.tagName == 'TBODY') { - result = { type: 'tbody' }; - } - - return result; - } -}); - -/***/ }), -/* 20 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var Component = __webpack_require__(4); - -module.exports = Component.extend({ - defaults: _extends({}, Component.prototype.defaults, { - type: 'image', - tagName: 'img', - src: '', - void: 1, - droppable: 0, - editable: 1, - highlightable: 0, - resizable: 1, - traits: ['alt'], - - // File to load asynchronously once the model is rendered - file: '' - }), - - initialize: function initialize(o, opt) { - Component.prototype.initialize.apply(this, arguments); - var attr = this.get('attributes'); - if (attr.src) this.set('src', attr.src); - }, - initToolbar: function initToolbar() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - Component.prototype.initToolbar.apply(this, args); - var em = this.em; - - if (em) { - var cmd = em.get('Commands'); - var cmdName = 'image-editor'; - - // Add Image Editor button only if the default command exists - if (cmd.has(cmdName)) { - var hasButtonBool = false; - var tb = this.get('toolbar'); - - for (var i = 0; i < tb.length; i++) { - if (tb[i].command === 'image-editor') { - hasButtonBool = true; - break; - } - } - - if (!hasButtonBool) { - tb.push({ - attributes: { class: 'fa fa-pencil' }, - command: cmdName - }); - this.set('toolbar', tb); - } - } - } - }, - - - /** - * Returns object of attributes for HTML - * @return {Object} - * @private - */ - getAttrToHTML: function getAttrToHTML() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - var attr = Component.prototype.getAttrToHTML.apply(this, args); - delete attr.onmousedown; - var src = this.get('src'); - if (src) attr.src = src; - return attr; - }, - - - /** - * Parse uri - * @param {string} uri - * @return {object} - * @private - */ - parseUri: function parseUri(uri) { - var el = document.createElement('a'); - el.href = uri; - var query = {}; - var qrs = el.search.substring(1).split('&'); - for (var i = 0; i < qrs.length; i++) { - var pair = qrs[i].split('='); - var name = decodeURIComponent(pair[0]); - if (name) query[name] = decodeURIComponent(pair[1]); - } - return { - hostname: el.hostname, - pathname: el.pathname, - protocol: el.protocol, - search: el.search, - hash: el.hash, - port: el.port, - query: query - }; - } -}, { - /** - * Detect if the passed element is a valid component. - * In case the element is valid an object abstracted - * from the element will be returned - * @param {HTMLElement} - * @return {Object} - * @private - */ - isComponent: function isComponent(el) { - var result = ''; - if (el.tagName == 'IMG') { - result = { type: 'image' }; - } - return result; - } -}); - -/***/ }), -/* 21 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var Component = __webpack_require__(4); - -module.exports = Component.extend({ - defaults: _extends({}, Component.prototype.defaults, { - type: 'text', - droppable: false, - editable: true - }) -}); - -/***/ }), -/* 22 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _underscore = __webpack_require__(1); - -var _mixins = __webpack_require__(2); - -var ToolbarView = __webpack_require__(194); -var Toolbar = __webpack_require__(196); -var key = __webpack_require__(24); -var $ = __webpack_require__(0).$; -var showOffsets = void 0; - -module.exports = { - init: function init(o) { - (0, _underscore.bindAll)(this, 'onHover', 'onOut', 'onClick', 'onKeyPress', 'onFrameScroll'); - }, - enable: function enable() { - this.frameOff = this.canvasOff = this.adjScroll = null; - var config = this.config.em.get('Config'); - this.startSelectComponent(); - var em = this.config.em; - showOffsets = 1; - - em.on('component:update', this.updateAttached, this); - em.on('change:canvasOffset', this.updateAttached, this); - }, - - - /** - * Start select component event - * @private - * */ - startSelectComponent: function startSelectComponent() { - this.toggleSelectComponent(1); - }, - - - /** - * Stop select component event - * @private - * */ - stopSelectComponent: function stopSelectComponent() { - this.toggleSelectComponent(); - }, - - - /** - * Toggle select component event - * @private - * */ - toggleSelectComponent: function toggleSelectComponent(enable) { - var em = this.em; - var method = enable ? 'on' : 'off'; - var methods = { on: _mixins.on, off: _mixins.off }; - var body = this.getCanvasBody(); - var win = this.getContentWindow(); - methods[method](body, 'mouseover', this.onHover); - methods[method](body, 'mouseout', this.onOut); - methods[method](body, 'click', this.onClick); - methods[method](win, 'scroll resize', this.onFrameScroll); - methods[method](win, 'keydown', this.onKeyPress); - em[method]('component:toggled', this.onSelect, this); - em[method]('change:componentHovered', this.onHovered, this); - }, - - - /** - * On key press event - * @private - * */ - onKeyPress: function onKeyPress(e) { - var key = e.which || e.keyCode; - var comp = this.editorModel.getSelected(); - var focused = this.frameEl.contentDocument.activeElement.tagName !== 'BODY'; - - // On CANC (46) or Backspace (8) - if (key == 8 || key == 46) { - if (!focused) e.preventDefault(); - if (comp && !focused) { - this.editor.runCommand('core:component-delete'); - } - } - }, - - - /** - * Hover command - * @param {Object} e - * @private - */ - onHover: function onHover(e) { - e.stopPropagation(); - var trg = e.target; - var model = $(trg).data('model'); - - // Adjust tools scroll top - if (!this.adjScroll) { - this.adjScroll = 1; - this.onFrameScroll(e); - this.updateAttached(); - } - - if (model && !model.get('hoverable')) { - var parent = model && model.parent(); - while (parent && !parent.get('hoverable')) { - parent = comp.parent(); - }model = parent; - } - - this.em.setHovered(model, { forceChange: 1 }); - }, - onHovered: function onHovered(em, component) { - var trg = component && component.getEl(); - if (trg) { - var pos = this.getElementPos(trg); - this.updateBadge(trg, pos); - this.updateHighlighter(trg, pos); - this.showElementOffset(trg, pos); - } - }, - - - /** - * Out command - * @param {Object} e - * @private - */ - onOut: function onOut(e) { - e.stopPropagation(); - this.hideBadge(); - this.hideHighlighter(); - this.hideElementOffset(); - }, - - - /** - * Show element offset viewer - * @param {HTMLElement} el - * @param {Object} pos - */ - showElementOffset: function showElementOffset(el, pos) { - var $el = $(el); - var model = $el.data('model'); - - if (model && model.get('status') == 'selected' || !showOffsets) { - return; - } - - this.editor.runCommand('show-offset', { - el: el, - elPos: pos - }); - }, - - - /** - * Hide element offset viewer - * @param {HTMLElement} el - * @param {Object} pos - */ - hideElementOffset: function hideElementOffset(el, pos) { - this.editor.stopCommand('show-offset'); - }, - - - /** - * Show fixed element offset viewer - * @param {HTMLElement} el - * @param {Object} pos - */ - showFixedElementOffset: function showFixedElementOffset(el, pos) { - this.editor.runCommand('show-offset', { - el: el, - elPos: pos, - state: 'Fixed' - }); - }, - - - /** - * Hide fixed element offset viewer - * @param {HTMLElement} el - * @param {Object} pos - */ - hideFixedElementOffset: function hideFixedElementOffset(el, pos) { - if (this.editor) this.editor.stopCommand('show-offset', { state: 'Fixed' }); - }, - - - /** - * Hide Highlighter element - */ - hideHighlighter: function hideHighlighter() { - this.canvas.getHighlighter().style.display = 'none'; - }, - - - /** - * On element click - * @param {Event} e - * @private - */ - onClick: function onClick(e) { - e.stopPropagation(); - var $el = $(e.target); - var editor = this.editor; - var model = $el.data('model'); - - if (!model) { - var parent = $el.parent(); - while (!model && parent) { - model = parent.data('model'); - parent = parent.parent(); - } - } - - if (model) { - if (model.get('selectable')) { - this.select(model, e); - } else { - var _parent = model.parent(); - while (_parent && !_parent.get('selectable')) { - _parent = _parent.parent(); - }this.select(_parent, e); - } - } - }, - - - /** - * Select component - * @param {Component} model - * @param {Event} event - */ - select: function select(model) { - var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (!model) return; - var ctrlKey = event.ctrlKey || event.metaKey; - var shiftKey = event.shiftKey; - var editor = this.editor; - - var multiple = editor.getConfig('multipleSelection'); - var em = this.em; - - if (ctrlKey && multiple) { - editor.selectToggle(model); - } else if (shiftKey && multiple) { - em.clearSelection(editor.Canvas.getWindow()); - var coll = model.collection; - var index = coll.indexOf(model); - var selAll = editor.getSelectedAll(); - var min = void 0, - max = void 0; - - // Fin min and max siblings - editor.getSelectedAll().forEach(function (sel) { - var selColl = sel.collection; - var selIndex = selColl.indexOf(sel); - if (selColl === coll) { - if (selIndex < index) { - // First model BEFORE the selected one - min = (0, _underscore.isUndefined)(min) ? selIndex : Math.max(min, selIndex); - } else if (selIndex > index) { - // First model AFTER the selected one - max = (0, _underscore.isUndefined)(max) ? selIndex : Math.min(max, selIndex); - } - } - }); - - if (!(0, _underscore.isUndefined)(min)) { - while (min !== index) { - editor.selectAdd(coll.at(min)); - min++; - } - } - - if (!(0, _underscore.isUndefined)(max)) { - while (max !== index) { - editor.selectAdd(coll.at(max)); - max--; - } - } - - editor.selectAdd(model); - } else { - editor.select(model); - } - - this.initResize(model); - }, - - - /** - * Update badge for the component - * @param {Object} Component - * @param {Object} pos Position object - * @private - * */ - updateBadge: function updateBadge(el, pos) { - var $el = $(el); - var canvas = this.canvas; - var config = canvas.getConfig(); - var customeLabel = config.customBadgeLabel; - this.cacheEl = el; - var model = $el.data('model'); - if (!model || !model.get('badgable')) return; - var badge = this.getBadge(); - var badgeLabel = model.getIcon() + model.getName(); - badgeLabel = customeLabel ? customeLabel(model) : badgeLabel; - badge.innerHTML = badgeLabel; - var bStyle = badge.style; - var u = 'px'; - bStyle.display = 'block'; - var canvasPos = canvas.getCanvasView().getPosition(); - if (canvasPos) { - var badgeH = badge ? badge.offsetHeight : 0; - var badgeW = badge ? badge.offsetWidth : 0; - var top = pos.top - badgeH < canvasPos.top ? canvasPos.top : pos.top - badgeH; - var left = pos.left + badgeW < canvasPos.left ? canvasPos.left : pos.left; - bStyle.top = top + u; - bStyle.left = left + u; - } - }, - - - /** - * Update highlighter element - * @param {HTMLElement} el - * @param {Object} pos Position object - * @private - */ - updateHighlighter: function updateHighlighter(el, pos) { - var $el = $(el); - var model = $el.data('model'); - - if (!model || !model.get('hoverable') || model.get('status') == 'selected') { - return; - } - - var hlEl = this.canvas.getHighlighter(); - var hlStyle = hlEl.style; - var unit = 'px'; - hlStyle.left = pos.left + unit; - hlStyle.top = pos.top + unit; - hlStyle.height = pos.height + unit; - hlStyle.width = pos.width + unit; - hlStyle.display = 'block'; - }, - - - /** - * Say what to do after the component was selected - * @param {Object} e - * @param {Object} el - * @private - * */ - onSelect: function onSelect() { - // Get the selected model directly from the Editor as the event might - // be triggered manually without the model - var model = this.em.getSelected(); - this.updateToolbar(model); - - if (model) { - var el = model.view.el; - this.showFixedElementOffset(el); - this.hideElementOffset(); - this.hideHighlighter(); - this.initResize(el); - } else { - this.editor.stopCommand('resize'); - } - }, - - - /** - * Init resizer on the element if possible - * @param {HTMLElement|Component} elem - * @private - */ - initResize: function initResize(elem) { - var em = this.em; - var editor = em ? em.get('Editor') : ''; - var config = em ? em.get('Config') : ''; - var pfx = config.stylePrefix || ''; - var attrName = 'data-' + pfx + 'handler'; - var resizeClass = pfx + 'resizing'; - var model = !(0, _underscore.isElement)(elem) ? elem : em.getSelected(); - var resizable = model.get('resizable'); - var el = (0, _underscore.isElement)(elem) ? elem : model.getEl(); - var options = {}; - var modelToStyle = void 0; - - var toggleBodyClass = function toggleBodyClass(method, e, opts) { - var docs = opts.docs; - docs && docs.forEach(function (doc) { - var body = doc.body; - var cls = body.className || ''; - body.className = (method == 'add' ? cls + ' ' + resizeClass : cls.replace(resizeClass, '')).trim(); - }); - }; - - if (editor && resizable) { - options = { - // Here the resizer is updated with the current element height and width - onStart: function onStart(e) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var el = opts.el, - config = opts.config, - resizer = opts.resizer; - var keyHeight = config.keyHeight, - keyWidth = config.keyWidth, - currentUnit = config.currentUnit; - - toggleBodyClass('add', e, opts); - modelToStyle = em.get('StyleManager').getModelToStyle(model); - var computedStyle = getComputedStyle(el); - var modelStyle = modelToStyle.getStyle(); - var currentWidth = modelStyle[keyWidth] || computedStyle[keyWidth]; - var currentHeight = modelStyle[keyHeight] || computedStyle[keyHeight]; - resizer.startDim.w = parseFloat(currentWidth); - resizer.startDim.h = parseFloat(currentHeight); - showOffsets = 0; - - if (currentUnit) { - config.unitHeight = (0, _mixins.getUnitFromValue)(currentHeight); - config.unitWidth = (0, _mixins.getUnitFromValue)(currentWidth); - } - }, - - - // Update all positioned elements (eg. component toolbar) - onMove: function onMove() { - editor.trigger('change:canvasOffset'); - }, - onEnd: function onEnd(e, opts) { - toggleBodyClass('remove', e, opts); - editor.trigger('change:canvasOffset'); - showOffsets = 1; - }, - updateTarget: function updateTarget(el, rect) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - if (!modelToStyle) { - return; - } - - var store = options.store, - selectedHandler = options.selectedHandler, - config = options.config; - var keyHeight = config.keyHeight, - keyWidth = config.keyWidth; - - var onlyHeight = ['tc', 'bc'].indexOf(selectedHandler) >= 0; - var onlyWidth = ['cl', 'cr'].indexOf(selectedHandler) >= 0; - var style = modelToStyle.getStyle(); - - if (!onlyHeight) { - style[keyWidth] = rect.w + config.unitWidth; - } - - if (!onlyWidth) { - style[keyHeight] = rect.h + config.unitHeight; - } - - modelToStyle.setStyle(style, { avoidStore: 1 }); - var updateEvent = 'update:component:style'; - em && em.trigger(updateEvent + ':' + keyHeight + ' ' + updateEvent + ':' + keyWidth); - - if (store) { - modelToStyle.trigger('change:style', modelToStyle, style, {}); - } - } - }; - - if ((typeof resizable === 'undefined' ? 'undefined' : _typeof(resizable)) == 'object') { - options = _extends({}, options, resizable); - } - editor.runCommand('resize', { el: el, options: options }); - - // On undo/redo the resizer rect is not updating, need somehow to call - // this.updateRect on undo/redo action - } else { - editor.stopCommand('resize'); - } - }, - - - /** - * Update toolbar if the component has one - * @param {Object} mod - */ - updateToolbar: function updateToolbar(mod) { - var em = this.config.em; - var model = mod == em ? em.getSelected() : mod; - var toolbarEl = this.canvas.getToolbarEl(); - var toolbarStyle = toolbarEl.style; - - if (!model) { - // By putting `toolbarStyle.display = 'none'` will cause kind - // of freezed effect with component selection (probably by iframe - // switching) - toolbarStyle.opacity = 0; - return; - } - - var toolbar = model.get('toolbar'); - var ppfx = this.ppfx; - var showToolbar = em.get('Config').showToolbar; - - if (showToolbar && toolbar && toolbar.length) { - toolbarStyle.opacity = ''; - toolbarStyle.display = ''; - if (!this.toolbar) { - toolbarEl.innerHTML = ''; - this.toolbar = new Toolbar(toolbar); - var toolbarView = new ToolbarView({ - collection: this.toolbar, - editor: this.editor - }); - toolbarEl.appendChild(toolbarView.render().el); - } - - this.toolbar.reset(toolbar); - var view = model.view; - view && this.updateToolbarPos(view.el); - } else { - toolbarStyle.display = 'none'; - } - }, - - - /** - * Update toolbar positions - * @param {HTMLElement} el - * @param {Object} pos - */ - updateToolbarPos: function updateToolbarPos(el, elPos) { - var unit = 'px'; - var toolbarEl = this.canvas.getToolbarEl(); - var toolbarStyle = toolbarEl.style; - var origDisp = toolbarStyle.display; - toolbarStyle.display = 'block'; - var pos = this.canvas.getTargetToElementDim(toolbarEl, el, { - elPos: elPos, - event: 'toolbarPosUpdate' - }); - if (pos) { - var leftPos = pos.left + pos.elementWidth - pos.targetWidth; - toolbarStyle.top = pos.top + unit; - toolbarStyle.left = (leftPos < 0 ? 0 : leftPos) + unit; - toolbarStyle.display = origDisp; - } - }, - - - /** - * Return canvas dimensions and positions - * @return {Object} - */ - getCanvasPosition: function getCanvasPosition() { - return this.canvas.getCanvasView().getPosition(); - }, - - - /** - * Removes all highlighting effects on components - * @private - * */ - clean: function clean() { - if (this.selEl) this.selEl.removeClass(this.hoverClass); - }, - - - /** - * Returns badge element - * @return {HTMLElement} - * @private - */ - getBadge: function getBadge() { - return this.canvas.getBadgeEl(); - }, - - - /** - * On frame scroll callback - * @private - */ - onFrameScroll: function onFrameScroll(e) { - var el = this.cacheEl; - if (el) { - var elPos = this.getElementPos(el); - this.updateBadge(el, elPos); - var model = this.em.getSelected(); - - if (model) { - this.updateToolbarPos(model.view.el); - } - } - }, - - - /** - * Update attached elements, eg. component toolbar - * @return {[type]} [description] - */ - updateAttached: function updateAttached(updated) { - var model = this.em.getSelected(); - - if (model) { - var view = model.view; - this.updateToolbarPos(view.el); - this.showFixedElementOffset(view.el); - } - }, - - - /** - * Returns element's data info - * @param {HTMLElement} el - * @return {Object} - * @private - */ - getElementPos: function getElementPos(el, badge) { - return this.canvas.getCanvasView().getElementPos(el); - }, - - - /** - * Hide badge - * @private - * */ - hideBadge: function hideBadge() { - this.getBadge().style.display = 'none'; - }, - - - /** - * Clean previous model from different states - * @param {Component} model - * @private - */ - cleanPrevious: function cleanPrevious(model) { - model && model.set({ - status: '', - state: '' - }); - }, - - - /** - * Returns content window - * @private - */ - getContentWindow: function getContentWindow() { - return this.frameEl.contentWindow; - }, - run: function run(editor) { - this.editor = editor && editor.get('Editor'); - this.enable(); - this.onSelect(); - }, - stop: function stop(editor, sender) { - var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - var em = this.em; - this.stopSelectComponent(); - !opts.preserveSelected && em.setSelected(null); - this.clean(); - this.hideBadge(); - this.hideFixedElementOffset(); - this.canvas.getToolbarEl().style.display = 'none'; - - em.off('component:update', this.updateAttached, this); - em.off('change:canvasOffset', this.updateAttached, this); - } -}; - -/***/ }), -/* 23 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _underscore = __webpack_require__(1); - -var _underscore2 = _interopRequireDefault(_underscore); - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SelectPosition = __webpack_require__(57); -var $ = _backbone2.default.$; - -module.exports = _underscore2.default.extend({}, SelectPosition, { - init: function init(opt) { - _underscore2.default.bindAll(this, 'startDraw', 'draw', 'endDraw', 'rollback'); - this.config = opt || {}; - this.hType = this.config.newFixedH ? 'height' : 'min-height'; - this.allowDraw = 1; - }, - - - /** - * Start with enabling to select position and listening to start drawning - * @private - * */ - enable: function enable() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - SelectPosition.enable.apply(this, args); - this.$wr.css('cursor', 'crosshair'); - if (this.allowDraw) this.$wr.on('mousedown', this.startDraw); - this.ghost = this.canvas.getGhostEl(); - }, - - - /** - * Start drawing component - * @param {Object} e Event - * @private - * */ - startDraw: function startDraw(e) { - e.preventDefault(); - this.stopSelectPosition(); - this.ghost.style.display = 'block'; - this.frameOff = this.getOffsetDim(); - this.startPos = { - top: e.pageY + this.frameOff.top, - left: e.pageX + this.frameOff.left - }; - this.isDragged = false; - this.tempComponent = { style: {} }; - this.beforeDraw(this.tempComponent); - this.updateSize(this.startPos.top, this.startPos.left, 0, 0); - this.toggleEvents(1); - }, - - - /** - * Enable/Disable events - * @param {Boolean} enable - */ - toggleEvents: function toggleEvents(enable) { - var method = enable ? 'on' : 'off'; - this.$wr[method]('mousemove', this.draw); - this.$wr[method]('mouseup', this.endDraw); - this.$canvas[method]('mousemove', this.draw); - $(document)[method]('mouseup', this.endDraw); - $(document)[method]('keypress', this.rollback); - }, - - - /** - * While drawing the component - * @param {Object} e Event - * @private - * */ - draw: function draw(e) { - this.isDragged = true; - this.updateComponentSize(e); - }, - - - /** - * End drawing component - * @param {Object} e Event - * @private - * */ - endDraw: function endDraw(e) { - this.toggleEvents(); - var model = {}; - // Only if the mouse was moved - if (this.isDragged) { - this.updateComponentSize(e); - this.setRequirements(this.tempComponent); - var lp = this.sorter.lastPos; - model = this.create(this.sorter.target, this.tempComponent, lp.index, lp.method); - this.sorter.prevTarget = null; - } - this.ghost.style.display = 'none'; - this.startSelectPosition(); - this.afterDraw(model); - }, - - - /** - * Create new component inside the target - * @param {Object} target Tha target collection - * @param {Object} component New component to create - * @param {number} index Index inside the collection, 0 if no children inside - * @param {string} method Before or after of the children - * @param {Object} opts Options - */ - create: function create(target, component, index, method, opts) { - index = method === 'after' ? index + 1 : index; - var opt = opts || {}; - var $trg = $(target); - var trgModel = $trg.data('model'); - var trgCollection = $trg.data('collection'); - var droppable = trgModel ? trgModel.get('droppable') : 1; - opt.at = index; - if (trgCollection && droppable) return trgCollection.add(component, opt);else console.warn('Invalid target position'); - }, - - - /** - * Check and set basic requirements for the component - * @param {Object} component New component to be created - * @return {Object} Component updated - * @private - * */ - setRequirements: function setRequirements(component) { - var c = this.config; - var compStl = component.style; - // Check min width - if (compStl.width.replace(/\D/g, '') < c.minComponentW) compStl.width = c.minComponentW + 'px'; - // Check min height - if (compStl[this.hType].replace(/\D/g, '') < c.minComponentH) compStl[this.hType] = c.minComponentH + 'px'; - // Set overflow in case of fixed height - if (c.newFixedH) compStl.overflow = 'auto'; - if (!this.absoluteMode) { - delete compStl.left; - delete compStl.top; - } else compStl.position = 'absolute'; - var lp = this.sorter.lastPos; - - if (this.nearFloat(lp.index, lp.method, this.sorter.lastDims)) compStl.float = 'left'; - - if (this.config.firstCentered && this.getCanvasWrapper() == this.sorter.target) { - compStl.margin = '0 auto'; - } - - return component; - }, - - - /** - * Update new component size while drawing - * @param {Object} e Event - * @private - * */ - updateComponentSize: function updateComponentSize(e) { - var y = e.pageY + this.frameOff.top; - var x = e.pageX + this.frameOff.left; - var start = this.startPos; - var top = start.top; - var left = start.left; - var height = y - top; - var width = x - left; - if (x < left) { - left = x; - width = start.left - x; - } - if (y < top) { - top = y; - height = start.top - y; - } - this.updateSize(top, left, width, height); - }, - - - /** - * Update size - * @private - */ - updateSize: function updateSize(top, left, width, height) { - var u = 'px'; - var ghStl = this.ghost.style; - var compStl = this.tempComponent.style; - ghStl.top = compStl.top = top + u; - ghStl.left = compStl.left = left + u; - ghStl.width = compStl.width = width + u; - ghStl[this.hType] = compStl[this.hType] = height + u; - }, - - - /** - * Used to bring the previous situation before event started - * @param {Object} e Event - * @param {Boolean} forse Indicates if rollback in anycase - * @private - * */ - rollback: function rollback(e, force) { - var key = e.which || e.keyCode; - if (key == this.config.ESCAPE_KEY || force) { - this.isDragged = false; - this.endDraw(); - } - return; - }, - - - /** - * This event is triggered at the beginning of a draw operation - * @param {Object} component Object component before creation - * @private - * */ - beforeDraw: function beforeDraw(component) { - component.editable = false; //set this component editable - }, - - - /** - * This event is triggered at the end of a draw operation - * @param {Object} model Component model created - * @private - * */ - afterDraw: function afterDraw(model) {}, - run: function run(editor, sender, opts) { - this.editor = editor; - this.sender = sender; - this.$wr = this.$wrapper; - this.enable(); - }, - stop: function stop() { - this.stopSelectPosition(); - this.$wrapper.css('cursor', ''); - this.$wrapper.unbind(); - } -}); - -/***/ }), -/* 24 */ -/***/ (function(module, exports, __webpack_require__) { - -// keymaster.js -// (c) 2011-2013 Thomas Fuchs -// keymaster.js may be freely distributed under the MIT license. - -;(function(global){ - var k, - _handlers = {}, - _mods = { 16: false, 18: false, 17: false, 91: false }, - _scope = 'all', - // modifier keys - _MODIFIERS = { - '⇧': 16, shift: 16, - '⌥': 18, alt: 18, option: 18, - '⌃': 17, ctrl: 17, control: 17, - '⌘': 91, command: 91 - }, - // special keys - _MAP = { - backspace: 8, tab: 9, clear: 12, - enter: 13, 'return': 13, - esc: 27, escape: 27, space: 32, - left: 37, up: 38, - right: 39, down: 40, - del: 46, 'delete': 46, - home: 36, end: 35, - pageup: 33, pagedown: 34, - ',': 188, '.': 190, '/': 191, - '`': 192, '-': 189, '=': 187, - ';': 186, '\'': 222, - '[': 219, ']': 221, '\\': 220 - }, - code = function(x){ - return _MAP[x] || x.toUpperCase().charCodeAt(0); - }, - _downKeys = []; - - for(k=1;k<20;k++) _MAP['f'+k] = 111+k; - - // IE doesn't support Array#indexOf, so have a simple replacement - function index(array, item){ - var i = array.length; - while(i--) if(array[i]===item) return i; - return -1; - } - - // for comparing mods before unassignment - function compareArray(a1, a2) { - if (a1.length != a2.length) return false; - for (var i = 0; i < a1.length; i++) { - if (a1[i] !== a2[i]) return false; - } - return true; - } - - var modifierMap = { - 16:'shiftKey', - 18:'altKey', - 17:'ctrlKey', - 91:'metaKey' - }; - function updateModifierKey(event) { - for(k in _mods) _mods[k] = event[modifierMap[k]]; - }; - - // handle keydown event - function dispatch(event) { - var key, handler, k, i, modifiersMatch, scope; - key = event.keyCode; - - if (index(_downKeys, key) == -1) { - _downKeys.push(key); - } - - // if a modifier key, set the key. property to true and return - if(key == 93 || key == 224) key = 91; // right command on webkit, command on Gecko - if(key in _mods) { - _mods[key] = true; - // 'assignKey' from inside this closure is exported to window.key - for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = true; - return; - } - updateModifierKey(event); - - // see if we need to ignore the keypress (filter() can can be overridden) - // by default ignore key presses if a select, textarea, or input is focused - if(!assignKey.filter.call(this, event)) return; - - // abort if no potentially matching shortcuts found - if (!(key in _handlers)) return; - - scope = getScope(); - - // for each potential shortcut - for (i = 0; i < _handlers[key].length; i++) { - handler = _handlers[key][i]; - - // see if it's in the current scope - if(handler.scope == scope || handler.scope == 'all'){ - // check if modifiers match if any - modifiersMatch = handler.mods.length > 0; - for(k in _mods) - if((!_mods[k] && index(handler.mods, +k) > -1) || - (_mods[k] && index(handler.mods, +k) == -1)) modifiersMatch = false; - // call the handler and stop the event if neccessary - if((handler.mods.length == 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch){ - if(handler.method(event, handler)===false){ - if(event.preventDefault) event.preventDefault(); - else event.returnValue = false; - if(event.stopPropagation) event.stopPropagation(); - if(event.cancelBubble) event.cancelBubble = true; - } - } - } - } - }; - - // unset modifier keys on keyup - function clearModifier(event){ - var key = event.keyCode, k, - i = index(_downKeys, key); - - // remove key from _downKeys - if (i >= 0) { - _downKeys.splice(i, 1); - } - - if(key == 93 || key == 224) key = 91; - if(key in _mods) { - _mods[key] = false; - for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = false; - } - }; - - function resetModifiers() { - for(k in _mods) _mods[k] = false; - for(k in _MODIFIERS) assignKey[k] = false; - }; - - // parse and assign shortcut - function assignKey(key, scope, method){ - var keys, mods; - keys = getKeys(key); - if (method === undefined) { - method = scope; - scope = 'all'; - } - - // for each shortcut - for (var i = 0; i < keys.length; i++) { - // set modifier keys if any - mods = []; - key = keys[i].split('+'); - if (key.length > 1){ - mods = getMods(key); - key = [key[key.length-1]]; - } - // convert to keycode and... - key = key[0] - key = code(key); - // ...store handler - if (!(key in _handlers)) _handlers[key] = []; - _handlers[key].push({ shortcut: keys[i], scope: scope, method: method, key: keys[i], mods: mods }); - } - }; - - // unbind all handlers for given key in current scope - function unbindKey(key, scope) { - var multipleKeys, keys, - mods = [], - i, j, obj; - - multipleKeys = getKeys(key); - - for (j = 0; j < multipleKeys.length; j++) { - keys = multipleKeys[j].split('+'); - - if (keys.length > 1) { - mods = getMods(keys); - key = keys[keys.length - 1]; - } - - key = code(key); - - if (scope === undefined) { - scope = getScope(); - } - if (!_handlers[key]) { - return; - } - for (i = 0; i < _handlers[key].length; i++) { - obj = _handlers[key][i]; - // only clear handlers if correct scope and mods match - if (obj.scope === scope && compareArray(obj.mods, mods)) { - _handlers[key][i] = {}; - } - } - } - }; - - // Returns true if the key with code 'keyCode' is currently down - // Converts strings into key codes. - function isPressed(keyCode) { - if (typeof(keyCode)=='string') { - keyCode = code(keyCode); - } - return index(_downKeys, keyCode) != -1; - } - - function getPressedKeyCodes() { - return _downKeys.slice(0); - } - - function filter(event){ - var tagName = (event.target || event.srcElement).tagName; - // ignore keypressed in any elements that support keyboard data input - return !(tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA'); - } - - // initialize key. to false - for(k in _MODIFIERS) assignKey[k] = false; - - // set current scope (default 'all') - function setScope(scope){ _scope = scope || 'all' }; - function getScope(){ return _scope || 'all' }; - - // delete all handlers for a given scope - function deleteScope(scope){ - var key, handlers, i; - - for (key in _handlers) { - handlers = _handlers[key]; - for (i = 0; i < handlers.length; ) { - if (handlers[i].scope === scope) handlers.splice(i, 1); - else i++; - } - } - }; - - // abstract key logic for assign and unassign - function getKeys(key) { - var keys; - key = key.replace(/\s/g, ''); - keys = key.split(','); - if ((keys[keys.length - 1]) == '') { - keys[keys.length - 2] += ','; - } - return keys; - } - - // abstract mods logic for assign and unassign - function getMods(key) { - var mods = key.slice(0, key.length - 1); - for (var mi = 0; mi < mods.length; mi++) - mods[mi] = _MODIFIERS[mods[mi]]; - return mods; - } - - // cross-browser events - function addEvent(object, event, method) { - if (object.addEventListener) - object.addEventListener(event, method, false); - else if(object.attachEvent) - object.attachEvent('on'+event, function(){ method(window.event) }); - }; - - // set the handlers globally on document - addEvent(document, 'keydown', function(event) { dispatch(event) }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48 - addEvent(document, 'keyup', clearModifier); - - // reset modifiers to false whenever the window is (re)focused. - addEvent(window, 'focus', resetModifiers); - - // store previously defined key - var previousKey = global.key; - - // restore previously defined key and return reference to our key object - function noConflict() { - var k = global.key; - global.key = previousKey; - return k; - } - - // set window.key and window.key.set/get/deleteScope, and the default filter - global.key = assignKey; - global.key.setScope = setScope; - global.key.getScope = getScope; - global.key.deleteScope = deleteScope; - global.key.filter = filter; - global.key.isPressed = isPressed; - global.key.getPressedKeyCodes = getPressedKeyCodes; - global.key.noConflict = noConflict; - global.key.unbind = unbindKey; - - if(true) module.exports = assignKey; - -})(this); - - -/***/ }), -/* 25 */ -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.8.3 -// http://underscorejs.org -// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. - -(function() { - - // Baseline setup - // -------------- - - // Establish the root object, `window` in the browser, or `exports` on the server. - var root = this; - - // Save the previous value of the `_` variable. - var previousUnderscore = root._; - - // Save bytes in the minified (but not gzipped) version: - var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; - - // Create quick reference variables for speed access to core prototypes. - var - push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; - - // All **ECMAScript 5** native function implementations that we hope to use - // are declared here. - var - nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeBind = FuncProto.bind, - nativeCreate = Object.create; - - // Naked function reference for surrogate-prototype-swapping. - var Ctor = function(){}; - - // Create a safe reference to the Underscore object for use below. - var _ = function(obj) { - if (obj instanceof _) return obj; - if (!(this instanceof _)) return new _(obj); - this._wrapped = obj; - }; - - // Export the Underscore object for **Node.js**, with - // backwards-compatibility for the old `require()` API. If we're in - // the browser, add `_` as a global object. - if (true) { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = _; - } - exports._ = _; - } else { - root._ = _; - } - - // Current version. - _.VERSION = '1.8.3'; - - // Internal function that returns an efficient (for current engines) version - // of the passed-in callback, to be repeatedly applied in other Underscore - // functions. - var optimizeCb = function(func, context, argCount) { - if (context === void 0) return func; - switch (argCount == null ? 3 : argCount) { - case 1: return function(value) { - return func.call(context, value); - }; - case 2: return function(value, other) { - return func.call(context, value, other); - }; - case 3: return function(value, index, collection) { - return func.call(context, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(context, accumulator, value, index, collection); - }; - } - return function() { - return func.apply(context, arguments); - }; - }; - - // A mostly-internal function to generate callbacks that can be applied - // to each element in a collection, returning the desired result — either - // identity, an arbitrary callback, a property matcher, or a property accessor. - var cb = function(value, context, argCount) { - if (value == null) return _.identity; - if (_.isFunction(value)) return optimizeCb(value, context, argCount); - if (_.isObject(value)) return _.matcher(value); - return _.property(value); - }; - _.iteratee = function(value, context) { - return cb(value, context, Infinity); - }; - - // An internal function for creating assigner functions. - var createAssigner = function(keysFunc, undefinedOnly) { - return function(obj) { - var length = arguments.length; - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; - }; - - // An internal function for creating a new object that inherits from another. - var baseCreate = function(prototype) { - if (!_.isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; - }; - - var property = function(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; - }; - - // Helper for collection methods to determine whether a collection - // should be iterated as an array or as an object - // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength - // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 - var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; - var getLength = property('length'); - var isArrayLike = function(collection) { - var length = getLength(collection); - return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; - }; - - // Collection Functions - // -------------------- - - // The cornerstone, an `each` implementation, aka `forEach`. - // Handles raw objects in addition to array-likes. Treats all - // sparse array-likes as if they were dense. - _.each = _.forEach = function(obj, iteratee, context) { - iteratee = optimizeCb(iteratee, context); - var i, length; - if (isArrayLike(obj)) { - for (i = 0, length = obj.length; i < length; i++) { - iteratee(obj[i], i, obj); - } - } else { - var keys = _.keys(obj); - for (i = 0, length = keys.length; i < length; i++) { - iteratee(obj[keys[i]], keys[i], obj); - } - } - return obj; - }; - - // Return the results of applying the iteratee to each element. - _.map = _.collect = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - results = Array(length); - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - results[index] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Create a reducing function iterating left or right. - function createReduce(dir) { - // Optimized iterator function as using arguments.length - // in the main function will deoptimize the, see #1991. - function iterator(obj, iteratee, memo, keys, index, length) { - for (; index >= 0 && index < length; index += dir) { - var currentKey = keys ? keys[index] : index; - memo = iteratee(memo, obj[currentKey], currentKey, obj); - } - return memo; - } - - return function(obj, iteratee, memo, context) { - iteratee = optimizeCb(iteratee, context, 4); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - index = dir > 0 ? 0 : length - 1; - // Determine the initial value if none is provided. - if (arguments.length < 3) { - memo = obj[keys ? keys[index] : index]; - index += dir; - } - return iterator(obj, iteratee, memo, keys, index, length); - }; - } - - // **Reduce** builds up a single result from a list of values, aka `inject`, - // or `foldl`. - _.reduce = _.foldl = _.inject = createReduce(1); - - // The right-associative version of reduce, also known as `foldr`. - _.reduceRight = _.foldr = createReduce(-1); - - // Return the first value which passes a truth test. Aliased as `detect`. - _.find = _.detect = function(obj, predicate, context) { - var key; - if (isArrayLike(obj)) { - key = _.findIndex(obj, predicate, context); - } else { - key = _.findKey(obj, predicate, context); - } - if (key !== void 0 && key !== -1) return obj[key]; - }; - - // Return all the elements that pass a truth test. - // Aliased as `select`. - _.filter = _.select = function(obj, predicate, context) { - var results = []; - predicate = cb(predicate, context); - _.each(obj, function(value, index, list) { - if (predicate(value, index, list)) results.push(value); - }); - return results; - }; - - // Return all the elements for which a truth test fails. - _.reject = function(obj, predicate, context) { - return _.filter(obj, _.negate(cb(predicate)), context); - }; - - // Determine whether all of the elements match a truth test. - // Aliased as `all`. - _.every = _.all = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (!predicate(obj[currentKey], currentKey, obj)) return false; - } - return true; - }; - - // Determine if at least one element in the object matches a truth test. - // Aliased as `any`. - _.some = _.any = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (predicate(obj[currentKey], currentKey, obj)) return true; - } - return false; - }; - - // Determine if the array or object contains a given item (using `===`). - // Aliased as `includes` and `include`. - _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - if (typeof fromIndex != 'number' || guard) fromIndex = 0; - return _.indexOf(obj, item, fromIndex) >= 0; - }; - - // Invoke a method (with arguments) on every item in a collection. - _.invoke = function(obj, method) { - var args = slice.call(arguments, 2); - var isFunc = _.isFunction(method); - return _.map(obj, function(value) { - var func = isFunc ? method : value[method]; - return func == null ? func : func.apply(value, args); - }); - }; - - // Convenience version of a common use case of `map`: fetching a property. - _.pluck = function(obj, key) { - return _.map(obj, _.property(key)); - }; - - // Convenience version of a common use case of `filter`: selecting only objects - // containing specific `key:value` pairs. - _.where = function(obj, attrs) { - return _.filter(obj, _.matcher(attrs)); - }; - - // Convenience version of a common use case of `find`: getting the first object - // containing specific `key:value` pairs. - _.findWhere = function(obj, attrs) { - return _.find(obj, _.matcher(attrs)); - }; - - // Return the maximum element (or element-based computation). - _.max = function(obj, iteratee, context) { - var result = -Infinity, lastComputed = -Infinity, - value, computed; - if (iteratee == null && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value > result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(value, index, list) { - computed = iteratee(value, index, list); - if (computed > lastComputed || computed === -Infinity && result === -Infinity) { - result = value; - lastComputed = computed; - } - }); - } - return result; - }; - - // Return the minimum element (or element-based computation). - _.min = function(obj, iteratee, context) { - var result = Infinity, lastComputed = Infinity, - value, computed; - if (iteratee == null && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value < result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(value, index, list) { - computed = iteratee(value, index, list); - if (computed < lastComputed || computed === Infinity && result === Infinity) { - result = value; - lastComputed = computed; - } - }); - } - return result; - }; - - // Shuffle a collection, using the modern version of the - // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). - _.shuffle = function(obj) { - var set = isArrayLike(obj) ? obj : _.values(obj); - var length = set.length; - var shuffled = Array(length); - for (var index = 0, rand; index < length; index++) { - rand = _.random(0, index); - if (rand !== index) shuffled[index] = shuffled[rand]; - shuffled[rand] = set[index]; - } - return shuffled; - }; - - // Sample **n** random values from a collection. - // If **n** is not specified, returns a single random element. - // The internal `guard` argument allows it to work with `map`. - _.sample = function(obj, n, guard) { - if (n == null || guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - return obj[_.random(obj.length - 1)]; - } - return _.shuffle(obj).slice(0, Math.max(0, n)); - }; - - // Sort the object's values by a criterion produced by an iteratee. - _.sortBy = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - return _.pluck(_.map(obj, function(value, index, list) { - return { - value: value, - index: index, - criteria: iteratee(value, index, list) - }; - }).sort(function(left, right) { - var a = left.criteria; - var b = right.criteria; - if (a !== b) { - if (a > b || a === void 0) return 1; - if (a < b || b === void 0) return -1; - } - return left.index - right.index; - }), 'value'); - }; - - // An internal function used for aggregate "group by" operations. - var group = function(behavior) { - return function(obj, iteratee, context) { - var result = {}; - iteratee = cb(iteratee, context); - _.each(obj, function(value, index) { - var key = iteratee(value, index, obj); - behavior(result, value, key); - }); - return result; - }; - }; - - // Groups the object's values by a criterion. Pass either a string attribute - // to group by, or a function that returns the criterion. - _.groupBy = group(function(result, value, key) { - if (_.has(result, key)) result[key].push(value); else result[key] = [value]; - }); - - // Indexes the object's values by a criterion, similar to `groupBy`, but for - // when you know that your index values will be unique. - _.indexBy = group(function(result, value, key) { - result[key] = value; - }); - - // Counts instances of an object that group by a certain criterion. Pass - // either a string attribute to count by, or a function that returns the - // criterion. - _.countBy = group(function(result, value, key) { - if (_.has(result, key)) result[key]++; else result[key] = 1; - }); - - // Safely create a real, live array from anything iterable. - _.toArray = function(obj) { - if (!obj) return []; - if (_.isArray(obj)) return slice.call(obj); - if (isArrayLike(obj)) return _.map(obj, _.identity); - return _.values(obj); - }; - - // Return the number of elements in an object. - _.size = function(obj) { - if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : _.keys(obj).length; - }; - - // Split a collection into two arrays: one whose elements all satisfy the given - // predicate, and one whose elements all do not satisfy the predicate. - _.partition = function(obj, predicate, context) { - predicate = cb(predicate, context); - var pass = [], fail = []; - _.each(obj, function(value, key, obj) { - (predicate(value, key, obj) ? pass : fail).push(value); - }); - return [pass, fail]; - }; - - // Array Functions - // --------------- - - // Get the first element of an array. Passing **n** will return the first N - // values in the array. Aliased as `head` and `take`. The **guard** check - // allows it to work with `_.map`. - _.first = _.head = _.take = function(array, n, guard) { - if (array == null) return void 0; - if (n == null || guard) return array[0]; - return _.initial(array, array.length - n); - }; - - // Returns everything but the last entry of the array. Especially useful on - // the arguments object. Passing **n** will return all the values in - // the array, excluding the last N. - _.initial = function(array, n, guard) { - return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); - }; - - // Get the last element of an array. Passing **n** will return the last N - // values in the array. - _.last = function(array, n, guard) { - if (array == null) return void 0; - if (n == null || guard) return array[array.length - 1]; - return _.rest(array, Math.max(0, array.length - n)); - }; - - // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. - // Especially useful on the arguments object. Passing an **n** will return - // the rest N values in the array. - _.rest = _.tail = _.drop = function(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); - }; - - // Trim out all falsy values from an array. - _.compact = function(array) { - return _.filter(array, _.identity); - }; - - // Internal implementation of a recursive `flatten` function. - var flatten = function(input, shallow, strict, startIndex) { - var output = [], idx = 0; - for (var i = startIndex || 0, length = getLength(input); i < length; i++) { - var value = input[i]; - if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { - //flatten current level of array or arguments object - if (!shallow) value = flatten(value, shallow, strict); - var j = 0, len = value.length; - output.length += len; - while (j < len) { - output[idx++] = value[j++]; - } - } else if (!strict) { - output[idx++] = value; - } - } - return output; - }; - - // Flatten out an array, either recursively (by default), or just one level. - _.flatten = function(array, shallow) { - return flatten(array, shallow, false); - }; - - // Return a version of the array that does not contain the specified value(s). - _.without = function(array) { - return _.difference(array, slice.call(arguments, 1)); - }; - - // Produce a duplicate-free version of the array. If the array has already - // been sorted, you have the option of using a faster algorithm. - // Aliased as `unique`. - _.uniq = _.unique = function(array, isSorted, iteratee, context) { - if (!_.isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!_.contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!_.contains(result, value)) { - result.push(value); - } - } - return result; - }; - - // Produce an array that contains the union: each distinct element from all of - // the passed-in arrays. - _.union = function() { - return _.uniq(flatten(arguments, true, true)); - }; - - // Produce an array that contains every item shared between all the - // passed-in arrays. - _.intersection = function(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (_.contains(result, item)) continue; - for (var j = 1; j < argsLength; j++) { - if (!_.contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; - }; - - // Take the difference between one array and a number of other arrays. - // Only the elements present in just the first array will remain. - _.difference = function(array) { - var rest = flatten(arguments, true, true, 1); - return _.filter(array, function(value){ - return !_.contains(rest, value); - }); - }; - - // Zip together multiple lists into a single array -- elements that share - // an index go together. - _.zip = function() { - return _.unzip(arguments); - }; - - // Complement of _.zip. Unzip accepts an array of arrays and groups - // each array's elements on shared indices - _.unzip = function(array) { - var length = array && _.max(array, getLength).length || 0; - var result = Array(length); - - for (var index = 0; index < length; index++) { - result[index] = _.pluck(array, index); - } - return result; - }; - - // Converts lists into objects. Pass either a single array of `[key, value]` - // pairs, or two parallel arrays of the same length -- one of keys, and one of - // the corresponding values. - _.object = function(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; - } - } - return result; - }; - - // Generator function to create the findIndex and findLastIndex functions - function createPredicateIndexFinder(dir) { - return function(array, predicate, context) { - predicate = cb(predicate, context); - var length = getLength(array); - var index = dir > 0 ? 0 : length - 1; - for (; index >= 0 && index < length; index += dir) { - if (predicate(array[index], index, array)) return index; - } - return -1; - }; - } - - // Returns the first index on an array-like that passes a predicate test - _.findIndex = createPredicateIndexFinder(1); - _.findLastIndex = createPredicateIndexFinder(-1); - - // Use a comparator function to figure out the smallest index at which - // an object should be inserted so as to maintain order. Uses binary search. - _.sortedIndex = function(array, obj, iteratee, context) { - iteratee = cb(iteratee, context, 1); - var value = iteratee(obj); - var low = 0, high = getLength(array); - while (low < high) { - var mid = Math.floor((low + high) / 2); - if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; - } - return low; - }; - - // Generator function to create the indexOf and lastIndexOf functions - function createIndexFinder(dir, predicateFind, sortedIndex) { - return function(array, item, idx) { - var i = 0, length = getLength(array); - if (typeof idx == 'number') { - if (dir > 0) { - i = idx >= 0 ? idx : Math.max(idx + length, i); - } else { - length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; - } - } else if (sortedIndex && idx && length) { - idx = sortedIndex(array, item); - return array[idx] === item ? idx : -1; - } - if (item !== item) { - idx = predicateFind(slice.call(array, i, length), _.isNaN); - return idx >= 0 ? idx + i : -1; - } - for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { - if (array[idx] === item) return idx; - } - return -1; - }; - } - - // Return the position of the first occurrence of an item in an array, - // or -1 if the item is not included in the array. - // If the array is large and already in sort order, pass `true` - // for **isSorted** to use binary search. - _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); - _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); - - // Generate an integer Array containing an arithmetic progression. A port of - // the native Python `range()` function. See - // [the Python documentation](http://docs.python.org/library/functions.html#range). - _.range = function(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - step = step || 1; - - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; - } - - return range; - }; - - // Function (ahem) Functions - // ------------------ - - // Determines whether to execute a function as a constructor - // or a normal function with the provided arguments - var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { - if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); - var self = baseCreate(sourceFunc.prototype); - var result = sourceFunc.apply(self, args); - if (_.isObject(result)) return result; - return self; - }; - - // Create a function bound to a given object (assigning `this`, and arguments, - // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if - // available. - _.bind = function(func, context) { - if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); - if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); - var args = slice.call(arguments, 2); - var bound = function() { - return executeBound(func, bound, context, this, args.concat(slice.call(arguments))); - }; - return bound; - }; - - // Partially apply a function by creating a version that has had some of its - // arguments pre-filled, without changing its dynamic `this` context. _ acts - // as a placeholder, allowing any combination of arguments to be pre-filled. - _.partial = function(func) { - var boundArgs = slice.call(arguments, 1); - var bound = function() { - var position = 0, length = boundArgs.length; - var args = Array(length); - for (var i = 0; i < length; i++) { - args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i]; - } - while (position < arguments.length) args.push(arguments[position++]); - return executeBound(func, bound, this, this, args); - }; - return bound; - }; - - // Bind a number of an object's methods to that object. Remaining arguments - // are the method names to be bound. Useful for ensuring that all callbacks - // defined on an object belong to it. - _.bindAll = function(obj) { - var i, length = arguments.length, key; - if (length <= 1) throw new Error('bindAll must be passed function names'); - for (i = 1; i < length; i++) { - key = arguments[i]; - obj[key] = _.bind(obj[key], obj); - } - return obj; - }; - - // Memoize an expensive function by storing its results. - _.memoize = function(func, hasher) { - var memoize = function(key) { - var cache = memoize.cache; - var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); - return cache[address]; - }; - memoize.cache = {}; - return memoize; - }; - - // Delays a function for the given number of milliseconds, and then calls - // it with the arguments supplied. - _.delay = function(func, wait) { - var args = slice.call(arguments, 2); - return setTimeout(function(){ - return func.apply(null, args); - }, wait); - }; - - // Defers a function, scheduling it to run after the current call stack has - // cleared. - _.defer = _.partial(_.delay, _, 1); - - // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. Normally, the throttled function will run - // as much as it can, without ever going more than once per `wait` duration; - // but if you'd like to disable the execution on the leading edge, pass - // `{leading: false}`. To disable execution on the trailing edge, ditto. - _.throttle = function(func, wait, options) { - var context, args, result; - var timeout = null; - var previous = 0; - if (!options) options = {}; - var later = function() { - previous = options.leading === false ? 0 : _.now(); - timeout = null; - result = func.apply(context, args); - if (!timeout) context = args = null; - }; - return function() { - var now = _.now(); - if (!previous && options.leading === false) previous = now; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0 || remaining > wait) { - if (timeout) { - clearTimeout(timeout); - timeout = null; - } - previous = now; - result = func.apply(context, args); - if (!timeout) context = args = null; - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; - }; - - // Returns a function, that, as long as it continues to be invoked, will not - // be triggered. The function will be called after it stops being called for - // N milliseconds. If `immediate` is passed, trigger the function on the - // leading edge, instead of the trailing. - _.debounce = function(func, wait, immediate) { - var timeout, args, context, timestamp, result; - - var later = function() { - var last = _.now() - timestamp; - - if (last < wait && last >= 0) { - timeout = setTimeout(later, wait - last); - } else { - timeout = null; - if (!immediate) { - result = func.apply(context, args); - if (!timeout) context = args = null; - } - } - }; - - return function() { - context = this; - args = arguments; - timestamp = _.now(); - var callNow = immediate && !timeout; - if (!timeout) timeout = setTimeout(later, wait); - if (callNow) { - result = func.apply(context, args); - context = args = null; - } - - return result; - }; - }; - - // Returns the first function passed as an argument to the second, - // allowing you to adjust arguments, run code before and after, and - // conditionally execute the original function. - _.wrap = function(func, wrapper) { - return _.partial(wrapper, func); - }; - - // Returns a negated version of the passed-in predicate. - _.negate = function(predicate) { - return function() { - return !predicate.apply(this, arguments); - }; - }; - - // Returns a function that is the composition of a list of functions, each - // consuming the return value of the function that follows. - _.compose = function() { - var args = arguments; - var start = args.length - 1; - return function() { - var i = start; - var result = args[start].apply(this, arguments); - while (i--) result = args[i].call(this, result); - return result; - }; - }; - - // Returns a function that will only be executed on and after the Nth call. - _.after = function(times, func) { - return function() { - if (--times < 1) { - return func.apply(this, arguments); - } - }; - }; - - // Returns a function that will only be executed up to (but not including) the Nth call. - _.before = function(times, func) { - var memo; - return function() { - if (--times > 0) { - memo = func.apply(this, arguments); - } - if (times <= 1) func = null; - return memo; - }; - }; - - // Returns a function that will be executed at most one time, no matter how - // often you call it. Useful for lazy initialization. - _.once = _.partial(_.before, 2); - - // Object Functions - // ---------------- - - // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. - var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); - var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; - - function collectNonEnumProps(obj, keys) { - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { - keys.push(prop); - } - } - } - - // Retrieve the names of an object's own properties. - // Delegates to **ECMAScript 5**'s native `Object.keys` - _.keys = function(obj) { - if (!_.isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (_.has(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve all the property names of an object. - _.allKeys = function(obj) { - if (!_.isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve the values of an object's properties. - _.values = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[keys[i]]; - } - return values; - }; - - // Returns the results of applying the iteratee to each element of the object - // In contrast to _.map it returns an object - _.mapObject = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = _.keys(obj), - length = keys.length, - results = {}, - currentKey; - for (var index = 0; index < length; index++) { - currentKey = keys[index]; - results[currentKey] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Convert an object into a list of `[key, value]` pairs. - _.pairs = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [keys[i], obj[keys[i]]]; - } - return pairs; - }; - - // Invert the keys and values of an object. The values must be serializable. - _.invert = function(obj) { - var result = {}; - var keys = _.keys(obj); - for (var i = 0, length = keys.length; i < length; i++) { - result[obj[keys[i]]] = keys[i]; - } - return result; - }; - - // Return a sorted list of the function names available on the object. - // Aliased as `methods` - _.functions = _.methods = function(obj) { - var names = []; - for (var key in obj) { - if (_.isFunction(obj[key])) names.push(key); - } - return names.sort(); - }; - - // Extend a given object with all the properties in passed-in object(s). - _.extend = createAssigner(_.allKeys); - - // Assigns a given object with all the own properties in the passed-in object(s) - // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - _.extendOwn = _.assign = createAssigner(_.keys); - - // Returns the first key on an object that passes a predicate test - _.findKey = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = _.keys(obj), key; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - if (predicate(obj[key], key, obj)) return key; - } - }; - - // Return a copy of the object only containing the whitelisted properties. - _.pick = function(object, oiteratee, context) { - var result = {}, obj = object, iteratee, keys; - if (obj == null) return result; - if (_.isFunction(oiteratee)) { - keys = _.allKeys(obj); - iteratee = optimizeCb(oiteratee, context); - } else { - keys = flatten(arguments, false, false, 1); - iteratee = function(value, key, obj) { return key in obj; }; - obj = Object(obj); - } - for (var i = 0, length = keys.length; i < length; i++) { - var key = keys[i]; - var value = obj[key]; - if (iteratee(value, key, obj)) result[key] = value; - } - return result; - }; - - // Return a copy of the object without the blacklisted properties. - _.omit = function(obj, iteratee, context) { - if (_.isFunction(iteratee)) { - iteratee = _.negate(iteratee); - } else { - var keys = _.map(flatten(arguments, false, false, 1), String); - iteratee = function(value, key) { - return !_.contains(keys, key); - }; - } - return _.pick(obj, iteratee, context); - }; - - // Fill in a given object with default properties. - _.defaults = createAssigner(_.allKeys, true); - - // Creates an object that inherits from the given prototype object. - // If additional properties are provided then they will be added to the - // created object. - _.create = function(prototype, props) { - var result = baseCreate(prototype); - if (props) _.extendOwn(result, props); - return result; - }; - - // Create a (shallow-cloned) duplicate of an object. - _.clone = function(obj) { - if (!_.isObject(obj)) return obj; - return _.isArray(obj) ? obj.slice() : _.extend({}, obj); - }; - - // Invokes interceptor with the obj, and then returns obj. - // The primary purpose of this method is to "tap into" a method chain, in - // order to perform operations on intermediate results within the chain. - _.tap = function(obj, interceptor) { - interceptor(obj); - return obj; - }; - - // Returns whether an object has a given set of `key:value` pairs. - _.isMatch = function(object, attrs) { - var keys = _.keys(attrs), length = keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; - }; - - - // Internal recursive comparison function for `isEqual`. - var eq = function(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // A strict comparison is necessary because `null == undefined`. - if (a == null || b == null) return a === b; - // Unwrap any wrapped objects. - if (a instanceof _) a = a._wrapped; - if (b instanceof _) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - switch (className) { - // Strings, numbers, regular expressions, dates, and booleans are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - } - - var areArrays = className === '[object Array]'; - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && - _.isFunction(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var keys = _.keys(a), key; - length = keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (_.keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = keys[length]; - if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; - }; - - // Perform a deep comparison to check if two objects are equal. - _.isEqual = function(a, b) { - return eq(a, b); - }; - - // Is a given array, string, or object empty? - // An "empty" object has no enumerable own-properties. - _.isEmpty = function(obj) { - if (obj == null) return true; - if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; - return _.keys(obj).length === 0; - }; - - // Is a given value a DOM element? - _.isElement = function(obj) { - return !!(obj && obj.nodeType === 1); - }; - - // Is a given value an array? - // Delegates to ECMA5's native Array.isArray - _.isArray = nativeIsArray || function(obj) { - return toString.call(obj) === '[object Array]'; - }; - - // Is a given variable an object? - _.isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. - _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { - _['is' + name] = function(obj) { - return toString.call(obj) === '[object ' + name + ']'; - }; - }); - - // Define a fallback version of the method in browsers (ahem, IE < 9), where - // there isn't any inspectable "Arguments" type. - if (!_.isArguments(arguments)) { - _.isArguments = function(obj) { - return _.has(obj, 'callee'); - }; - } - - // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, - // IE 11 (#1621), and in Safari 8 (#1929). - if (typeof /./ != 'function' && typeof Int8Array != 'object') { - _.isFunction = function(obj) { - return typeof obj == 'function' || false; - }; - } - - // Is a given object a finite number? - _.isFinite = function(obj) { - return isFinite(obj) && !isNaN(parseFloat(obj)); - }; - - // Is the given value `NaN`? (NaN is the only number which does not equal itself). - _.isNaN = function(obj) { - return _.isNumber(obj) && obj !== +obj; - }; - - // Is a given value a boolean? - _.isBoolean = function(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; - }; - - // Is a given value equal to null? - _.isNull = function(obj) { - return obj === null; - }; - - // Is a given variable undefined? - _.isUndefined = function(obj) { - return obj === void 0; - }; - - // Shortcut function for checking if an object has a given property directly - // on itself (in other words, not on a prototype). - _.has = function(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); - }; - - // Utility Functions - // ----------------- - - // Run Underscore.js in *noConflict* mode, returning the `_` variable to its - // previous owner. Returns a reference to the Underscore object. - _.noConflict = function() { - root._ = previousUnderscore; - return this; - }; - - // Keep the identity function around for default iteratees. - _.identity = function(value) { - return value; - }; - - // Predicate-generating functions. Often useful outside of Underscore. - _.constant = function(value) { - return function() { - return value; - }; - }; - - _.noop = function(){}; - - _.property = property; - - // Generates a function for a given object that returns a given property. - _.propertyOf = function(obj) { - return obj == null ? function(){} : function(key) { - return obj[key]; - }; - }; - - // Returns a predicate for checking whether an object has a given set of - // `key:value` pairs. - _.matcher = _.matches = function(attrs) { - attrs = _.extendOwn({}, attrs); - return function(obj) { - return _.isMatch(obj, attrs); - }; - }; - - // Run a function **n** times. - _.times = function(n, iteratee, context) { - var accum = Array(Math.max(0, n)); - iteratee = optimizeCb(iteratee, context, 1); - for (var i = 0; i < n; i++) accum[i] = iteratee(i); - return accum; - }; - - // Return a random integer between min and max (inclusive). - _.random = function(min, max) { - if (max == null) { - max = min; - min = 0; - } - return min + Math.floor(Math.random() * (max - min + 1)); - }; - - // A (possibly faster) way to get the current timestamp as an integer. - _.now = Date.now || function() { - return new Date().getTime(); - }; - - // List of HTML entities for escaping. - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - var unescapeMap = _.invert(escapeMap); - - // Functions for escaping and unescaping strings to/from HTML interpolation. - var createEscaper = function(map) { - var escaper = function(match) { - return map[match]; - }; - // Regexes for identifying a key that needs to be escaped - var source = '(?:' + _.keys(map).join('|') + ')'; - var testRegexp = RegExp(source); - var replaceRegexp = RegExp(source, 'g'); - return function(string) { - string = string == null ? '' : '' + string; - return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; - }; - }; - _.escape = createEscaper(escapeMap); - _.unescape = createEscaper(unescapeMap); - - // If the value of the named `property` is a function then invoke it with the - // `object` as context; otherwise, return it. - _.result = function(object, property, fallback) { - var value = object == null ? void 0 : object[property]; - if (value === void 0) { - value = fallback; - } - return _.isFunction(value) ? value.call(object) : value; - }; - - // Generate a unique integer id (unique within the entire client session). - // Useful for temporary DOM ids. - var idCounter = 0; - _.uniqueId = function(prefix) { - var id = ++idCounter + ''; - return prefix ? prefix + id : id; - }; - - // By default, Underscore uses ERB-style template delimiters, change the - // following template settings to use alternative delimiters. - _.templateSettings = { - evaluate : /<%([\s\S]+?)%>/g, - interpolate : /<%=([\s\S]+?)%>/g, - escape : /<%-([\s\S]+?)%>/g - }; - - // When customizing `templateSettings`, if you don't want to define an - // interpolation, evaluation or escaping regex, we need one that is - // guaranteed not to match. - var noMatch = /(.)^/; - - // Certain characters need to be escaped so that they can be put into a - // string literal. - var escapes = { - "'": "'", - '\\': '\\', - '\r': 'r', - '\n': 'n', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - var escaper = /\\|'|\r|\n|\u2028|\u2029/g; - - var escapeChar = function(match) { - return '\\' + escapes[match]; - }; - - // JavaScript micro-templating, similar to John Resig's implementation. - // Underscore templating handles arbitrary delimiters, preserves whitespace, - // and correctly escapes quotes within interpolated code. - // NB: `oldSettings` only exists for backwards compatibility. - _.template = function(text, settings, oldSettings) { - if (!settings && oldSettings) settings = oldSettings; - settings = _.defaults({}, settings, _.templateSettings); - - // Combine delimiters into one regular expression via alternation. - var matcher = RegExp([ - (settings.escape || noMatch).source, - (settings.interpolate || noMatch).source, - (settings.evaluate || noMatch).source - ].join('|') + '|$', 'g'); - - // Compile the template source, escaping string literals appropriately. - var index = 0; - var source = "__p+='"; - text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { - source += text.slice(index, offset).replace(escaper, escapeChar); - index = offset + match.length; - - if (escape) { - source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; - } else if (interpolate) { - source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; - } else if (evaluate) { - source += "';\n" + evaluate + "\n__p+='"; - } - - // Adobe VMs need the match returned to produce the correct offest. - return match; - }); - source += "';\n"; - - // If a variable is not specified, place data values in local scope. - if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; - - source = "var __t,__p='',__j=Array.prototype.join," + - "print=function(){__p+=__j.call(arguments,'');};\n" + - source + 'return __p;\n'; - - try { - var render = new Function(settings.variable || 'obj', '_', source); - } catch (e) { - e.source = source; - throw e; - } - - var template = function(data) { - return render.call(this, data, _); - }; - - // Provide the compiled source as a convenience for precompilation. - var argument = settings.variable || 'obj'; - template.source = 'function(' + argument + '){\n' + source + '}'; - - return template; - }; - - // Add a "chain" function. Start chaining a wrapped Underscore object. - _.chain = function(obj) { - var instance = _(obj); - instance._chain = true; - return instance; - }; - - // OOP - // --------------- - // If Underscore is called as a function, it returns a wrapped object that - // can be used OO-style. This wrapper holds altered versions of all the - // underscore functions. Wrapped objects may be chained. - - // Helper function to continue chaining intermediate results. - var result = function(instance, obj) { - return instance._chain ? _(obj).chain() : obj; - }; - - // Add your own custom functions to the Underscore object. - _.mixin = function(obj) { - _.each(_.functions(obj), function(name) { - var func = _[name] = obj[name]; - _.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return result(this, func.apply(_, args)); - }; - }); - }; - - // Add all of the Underscore functions to the wrapper object. - _.mixin(_); - - // Add all mutator Array functions to the wrapper. - _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - var obj = this._wrapped; - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; - return result(this, obj); - }; - }); - - // Add all accessor Array functions to the wrapper. - _.each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - return result(this, method.apply(this._wrapped, arguments)); - }; - }); - - // Extracts the result from a wrapped and chained object. - _.prototype.value = function() { - return this._wrapped; - }; - - // Provide unwrapping proxy for some methods used in engine operations - // such as arithmetic and JSON stringification. - _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; - - _.prototype.toString = function() { - return '' + this._wrapped; - }; - - // AMD registration happens at the end for compatibility with AMD loaders - // that may not enforce next-turn semantics on modules. Even though general - // practice for AMD registration is to be anonymous, underscore registers - // as a named module because, like jQuery, it is a base library that is - // popular enough to be bundled in a third party lib, but not be part of - // an AMD load request. Those cases could generate an error when an - // anonymous define() is called outside of a loader request. - if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { - return _; - }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } -}.call(this)); - - -/***/ }), -/* 26 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _promisePolyfill = __webpack_require__(77); - -var _promisePolyfill2 = _interopRequireDefault(_promisePolyfill); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -window.Promise = window.Promise || _promisePolyfill2.default; - -exports.default = typeof fetch == 'function' ? fetch.bind() : function (url, options) { - return new _promisePolyfill2.default(function (res, rej) { - var req = new XMLHttpRequest(); - req.open(options.method || 'get', url); - req.withCredentials = options.credentials == 'include'; - - for (var k in options.headers || {}) { - req.setRequestHeader(k, options.headers[k]); - } - - req.onload = function (e) { - return res({ - status: req.status, - statusText: req.statusText, - text: function text() { - return _promisePolyfill2.default.resolve(req.responseText); - } - }); - }; - req.onerror = rej; - - // Actually, fetch doesn't support onProgress feature - if (req.upload && options.onProgress) { - req.upload.onprogress = options.onProgress; - } - - // Include body only if present - options.body ? req.send(options.body) : req.send(); - }); -}; - -/***/ }), -/* 27 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = function (config) { - var TEXT_NODE = 'span'; - var c = config; - var modelAttrStart = 'data-gjs-'; - - return { - compTypes: '', - - /** - * Parse style string to object - * @param {string} str - * @return {Object} - * @example - * var stl = ParserHtml.parseStyle('color:black; width:100px; test:value;'); - * console.log(stl); - * // {color: 'black', width: '100px', test: 'value'} - */ - parseStyle: function parseStyle(str) { - var result = {}; - var decls = str.split(';'); - for (var i = 0, len = decls.length; i < len; i++) { - var decl = decls[i].trim(); - if (!decl) continue; - var prop = decl.split(':'); - result[prop[0].trim()] = prop.slice(1).join(':').trim(); - } - return result; - }, - - - /** - * Parse class string to array - * @param {string} str - * @return {Array} - * @example - * var res = ParserHtml.parseClass('test1 test2 test3'); - * console.log(res); - * // ['test1', 'test2', 'test3'] - */ - parseClass: function parseClass(str) { - var result = []; - var cls = str.split(' '); - for (var i = 0, len = cls.length; i < len; i++) { - var cl = cls[i].trim(); - if (!cl) continue; - result.push(cl); - } - return result; - }, - - - /** - * Get data from the node element - * @param {HTMLElement} el DOM element to traverse - * @return {Array} - */ - parseNode: function parseNode(el) { - var result = []; - var nodes = el.childNodes; - - for (var i = 0, len = nodes.length; i < len; i++) { - var node = nodes[i]; - var attrs = node.attributes || []; - var attrsLen = attrs.length; - var nodePrev = result[result.length - 1]; - var nodeChild = node.childNodes.length; - var ct = this.compTypes; - var model = {}; - - // Start with understanding what kind of component it is - if (ct) { - var obj = ''; - var type = node.getAttribute && node.getAttribute(modelAttrStart + 'type'); - - // If the type is already defined, use it - if (type) { - model = { type: type }; - } else { - // Iterate over all available Component Types and - // the first with a valid result will be that component - for (var it = 0; it < ct.length; it++) { - obj = ct[it].model.isComponent(node); - if (obj) break; - } - - model = obj; - } - } - - // Set tag name if not yet done - if (!model.tagName) { - model.tagName = node.tagName ? node.tagName.toLowerCase() : ''; - } - - if (attrsLen) { - model.attributes = {}; - } - - // Parse attributes - for (var j = 0; j < attrsLen; j++) { - var nodeName = attrs[j].nodeName; - var nodeValue = attrs[j].nodeValue; - - // Isolate attributes - if (nodeName == 'style') { - model.style = this.parseStyle(nodeValue); - } else if (nodeName == 'class') { - model.classes = this.parseClass(nodeValue); - } else if (nodeName == 'contenteditable') { - continue; - } else if (nodeName.indexOf(modelAttrStart) === 0) { - var modelAttr = nodeName.replace(modelAttrStart, ''); - var valueLen = nodeValue.length; - var firstChar = nodeValue && nodeValue.substr(0, 1); - var lastChar = nodeValue && nodeValue.substr(valueLen - 1); - nodeValue = nodeValue === 'true' ? true : nodeValue; - nodeValue = nodeValue === 'false' ? false : nodeValue; - - // Try to parse JSON where it's possible - // I can get false positive here (eg. a selector '[data-attr]') - // so put it under try/catch and let fail silently - try { - nodeValue = firstChar == '{' && lastChar == '}' || firstChar == '[' && lastChar == ']' ? JSON.parse(nodeValue) : nodeValue; - } catch (e) {} - - model[modelAttr] = nodeValue; - } else { - model.attributes[nodeName] = nodeValue; - } - } - - // Check for nested elements but avoid it if already provided - if (nodeChild && !model.components) { - // Avoid infinite nested text nodes - var firstChild = node.childNodes[0]; - - // If there is only one child and it's a TEXTNODE - // just make it content of the current node - if (nodeChild === 1 && firstChild.nodeType === 3) { - !model.type && (model.type = 'text'); - model.content = firstChild.nodeValue; - } else { - model.components = this.parseNode(node); - } - } - - // Check if it's a text node and if could be moved to the prevous model - if (model.type == 'textnode') { - if (nodePrev && nodePrev.type == 'textnode') { - nodePrev.content += model.content; - continue; - } - - // Throw away empty nodes (keep spaces) - if (!config.keepEmptyTextNodes) { - var content = node.nodeValue; - if (content != ' ' && !content.trim()) { - continue; - } - } - } - - // If all children are texts and there is some textnode the parent should - // be text too otherwise I'm unable to edit texnodes - var comps = model.components; - if (!model.type && comps) { - var allTxt = 1; - var foundTextNode = 0; - - for (var ci = 0; ci < comps.length; ci++) { - var comp = comps[ci]; - var cType = comp.type; - - if (['text', 'textnode'].indexOf(cType) < 0 && c.textTags.indexOf(comp.tagName) < 0) { - allTxt = 0; - break; - } - - if (cType == 'textnode') { - foundTextNode = 1; - } - } - - if (allTxt && foundTextNode) { - model.type = 'text'; - } - } - - // If tagName is still empty and is not a textnode, do not push it - if (!model.tagName && model.type != 'textnode') { - continue; - } - - result.push(model); - } - - return result; - }, - - - /** - * Parse HTML string to a desired model object - * @param {string} str HTML string - * @param {ParserCss} parserCss In case there is style tags inside HTML - * @return {Object} - */ - parse: function parse(str, parserCss) { - var config = c.em && c.em.get('Config') || {}; - var res = { html: '', css: '' }; - var el = document.createElement('div'); - el.innerHTML = str; - var scripts = el.querySelectorAll('script'); - var i = scripts.length; - - // Remove all scripts - if (!config.allowScripts) { - while (i--) { - scripts[i].parentNode.removeChild(scripts[i]); - } - } - - // Detach style tags and parse them - if (parserCss) { - var styleStr = ''; - var styles = el.querySelectorAll('style'); - var j = styles.length; - - while (j--) { - styleStr = styles[j].innerHTML + styleStr; - styles[j].parentNode.removeChild(styles[j]); - } - - if (styleStr) res.css = parserCss.parse(styleStr); - } - - var result = this.parseNode(el); - - if (result.length == 1) result = result[0]; - - res.html = result; - - return res; - } - }; -}; - -/***/ }), -/* 28 */ -/***/ (function(module, exports, __webpack_require__) { - -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (true) // CommonJS - mod(__webpack_require__(6)); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.defineMode("css", function(config, parserConfig) { - var inline = parserConfig.inline - if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); - - var indentUnit = config.indentUnit, - tokenHooks = parserConfig.tokenHooks, - documentTypes = parserConfig.documentTypes || {}, - mediaTypes = parserConfig.mediaTypes || {}, - mediaFeatures = parserConfig.mediaFeatures || {}, - mediaValueKeywords = parserConfig.mediaValueKeywords || {}, - propertyKeywords = parserConfig.propertyKeywords || {}, - nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {}, - fontProperties = parserConfig.fontProperties || {}, - counterDescriptors = parserConfig.counterDescriptors || {}, - colorKeywords = parserConfig.colorKeywords || {}, - valueKeywords = parserConfig.valueKeywords || {}, - allowNested = parserConfig.allowNested, - lineComment = parserConfig.lineComment, - supportsAtComponent = parserConfig.supportsAtComponent === true; - - var type, override; - function ret(style, tp) { type = tp; return style; } - - // Tokenizers - - function tokenBase(stream, state) { - var ch = stream.next(); - if (tokenHooks[ch]) { - var result = tokenHooks[ch](stream, state); - if (result !== false) return result; - } - if (ch == "@") { - stream.eatWhile(/[\w\\\-]/); - return ret("def", stream.current()); - } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { - return ret(null, "compare"); - } else if (ch == "\"" || ch == "'") { - state.tokenize = tokenString(ch); - return state.tokenize(stream, state); - } else if (ch == "#") { - stream.eatWhile(/[\w\\\-]/); - return ret("atom", "hash"); - } else if (ch == "!") { - stream.match(/^\s*\w*/); - return ret("keyword", "important"); - } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { - stream.eatWhile(/[\w.%]/); - return ret("number", "unit"); - } else if (ch === "-") { - if (/[\d.]/.test(stream.peek())) { - stream.eatWhile(/[\w.%]/); - return ret("number", "unit"); - } else if (stream.match(/^-[\w\\\-]+/)) { - stream.eatWhile(/[\w\\\-]/); - if (stream.match(/^\s*:/, false)) - return ret("variable-2", "variable-definition"); - return ret("variable-2", "variable"); - } else if (stream.match(/^\w+-/)) { - return ret("meta", "meta"); - } - } else if (/[,+>*\/]/.test(ch)) { - return ret(null, "select-op"); - } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { - return ret("qualifier", "qualifier"); - } else if (/[:;{}\[\]\(\)]/.test(ch)) { - return ret(null, ch); - } else if (((ch == "u" || ch == "U") && stream.match(/rl(-prefix)?\(/i)) || - ((ch == "d" || ch == "D") && stream.match("omain(", true, true)) || - ((ch == "r" || ch == "R") && stream.match("egexp(", true, true))) { - stream.backUp(1); - state.tokenize = tokenParenthesized; - return ret("property", "word"); - } else if (/[\w\\\-]/.test(ch)) { - stream.eatWhile(/[\w\\\-]/); - return ret("property", "word"); - } else { - return ret(null, null); - } - } - - function tokenString(quote) { - return function(stream, state) { - var escaped = false, ch; - while ((ch = stream.next()) != null) { - if (ch == quote && !escaped) { - if (quote == ")") stream.backUp(1); - break; - } - escaped = !escaped && ch == "\\"; - } - if (ch == quote || !escaped && quote != ")") state.tokenize = null; - return ret("string", "string"); - }; - } - - function tokenParenthesized(stream, state) { - stream.next(); // Must be '(' - if (!stream.match(/\s*[\"\')]/, false)) - state.tokenize = tokenString(")"); - else - state.tokenize = null; - return ret(null, "("); - } - - // Context management - - function Context(type, indent, prev) { - this.type = type; - this.indent = indent; - this.prev = prev; - } - - function pushContext(state, stream, type, indent) { - state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context); - return type; - } - - function popContext(state) { - if (state.context.prev) - state.context = state.context.prev; - return state.context.type; - } - - function pass(type, stream, state) { - return states[state.context.type](type, stream, state); - } - function popAndPass(type, stream, state, n) { - for (var i = n || 1; i > 0; i--) - state.context = state.context.prev; - return pass(type, stream, state); - } - - // Parser - - function wordAsValue(stream) { - var word = stream.current().toLowerCase(); - if (valueKeywords.hasOwnProperty(word)) - override = "atom"; - else if (colorKeywords.hasOwnProperty(word)) - override = "keyword"; - else - override = "variable"; - } - - var states = {}; - - states.top = function(type, stream, state) { - if (type == "{") { - return pushContext(state, stream, "block"); - } else if (type == "}" && state.context.prev) { - return popContext(state); - } else if (supportsAtComponent && /@component/i.test(type)) { - return pushContext(state, stream, "atComponentBlock"); - } else if (/^@(-moz-)?document$/i.test(type)) { - return pushContext(state, stream, "documentTypes"); - } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) { - return pushContext(state, stream, "atBlock"); - } else if (/^@(font-face|counter-style)/i.test(type)) { - state.stateArg = type; - return "restricted_atBlock_before"; - } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) { - return "keyframes"; - } else if (type && type.charAt(0) == "@") { - return pushContext(state, stream, "at"); - } else if (type == "hash") { - override = "builtin"; - } else if (type == "word") { - override = "tag"; - } else if (type == "variable-definition") { - return "maybeprop"; - } else if (type == "interpolation") { - return pushContext(state, stream, "interpolation"); - } else if (type == ":") { - return "pseudo"; - } else if (allowNested && type == "(") { - return pushContext(state, stream, "parens"); - } - return state.context.type; - }; - - states.block = function(type, stream, state) { - if (type == "word") { - var word = stream.current().toLowerCase(); - if (propertyKeywords.hasOwnProperty(word)) { - override = "property"; - return "maybeprop"; - } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) { - override = "string-2"; - return "maybeprop"; - } else if (allowNested) { - override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; - return "block"; - } else { - override += " error"; - return "maybeprop"; - } - } else if (type == "meta") { - return "block"; - } else if (!allowNested && (type == "hash" || type == "qualifier")) { - override = "error"; - return "block"; - } else { - return states.top(type, stream, state); - } - }; - - states.maybeprop = function(type, stream, state) { - if (type == ":") return pushContext(state, stream, "prop"); - return pass(type, stream, state); - }; - - states.prop = function(type, stream, state) { - if (type == ";") return popContext(state); - if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); - if (type == "}" || type == "{") return popAndPass(type, stream, state); - if (type == "(") return pushContext(state, stream, "parens"); - - if (type == "hash" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) { - override += " error"; - } else if (type == "word") { - wordAsValue(stream); - } else if (type == "interpolation") { - return pushContext(state, stream, "interpolation"); - } - return "prop"; - }; - - states.propBlock = function(type, _stream, state) { - if (type == "}") return popContext(state); - if (type == "word") { override = "property"; return "maybeprop"; } - return state.context.type; - }; - - states.parens = function(type, stream, state) { - if (type == "{" || type == "}") return popAndPass(type, stream, state); - if (type == ")") return popContext(state); - if (type == "(") return pushContext(state, stream, "parens"); - if (type == "interpolation") return pushContext(state, stream, "interpolation"); - if (type == "word") wordAsValue(stream); - return "parens"; - }; - - states.pseudo = function(type, stream, state) { - if (type == "meta") return "pseudo"; - - if (type == "word") { - override = "variable-3"; - return state.context.type; - } - return pass(type, stream, state); - }; - - states.documentTypes = function(type, stream, state) { - if (type == "word" && documentTypes.hasOwnProperty(stream.current())) { - override = "tag"; - return state.context.type; - } else { - return states.atBlock(type, stream, state); - } - }; - - states.atBlock = function(type, stream, state) { - if (type == "(") return pushContext(state, stream, "atBlock_parens"); - if (type == "}" || type == ";") return popAndPass(type, stream, state); - if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); - - if (type == "interpolation") return pushContext(state, stream, "interpolation"); - - if (type == "word") { - var word = stream.current().toLowerCase(); - if (word == "only" || word == "not" || word == "and" || word == "or") - override = "keyword"; - else if (mediaTypes.hasOwnProperty(word)) - override = "attribute"; - else if (mediaFeatures.hasOwnProperty(word)) - override = "property"; - else if (mediaValueKeywords.hasOwnProperty(word)) - override = "keyword"; - else if (propertyKeywords.hasOwnProperty(word)) - override = "property"; - else if (nonStandardPropertyKeywords.hasOwnProperty(word)) - override = "string-2"; - else if (valueKeywords.hasOwnProperty(word)) - override = "atom"; - else if (colorKeywords.hasOwnProperty(word)) - override = "keyword"; - else - override = "error"; - } - return state.context.type; - }; - - states.atComponentBlock = function(type, stream, state) { - if (type == "}") - return popAndPass(type, stream, state); - if (type == "{") - return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false); - if (type == "word") - override = "error"; - return state.context.type; - }; - - states.atBlock_parens = function(type, stream, state) { - if (type == ")") return popContext(state); - if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); - return states.atBlock(type, stream, state); - }; - - states.restricted_atBlock_before = function(type, stream, state) { - if (type == "{") - return pushContext(state, stream, "restricted_atBlock"); - if (type == "word" && state.stateArg == "@counter-style") { - override = "variable"; - return "restricted_atBlock_before"; - } - return pass(type, stream, state); - }; - - states.restricted_atBlock = function(type, stream, state) { - if (type == "}") { - state.stateArg = null; - return popContext(state); - } - if (type == "word") { - if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) || - (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase()))) - override = "error"; - else - override = "property"; - return "maybeprop"; - } - return "restricted_atBlock"; - }; - - states.keyframes = function(type, stream, state) { - if (type == "word") { override = "variable"; return "keyframes"; } - if (type == "{") return pushContext(state, stream, "top"); - return pass(type, stream, state); - }; - - states.at = function(type, stream, state) { - if (type == ";") return popContext(state); - if (type == "{" || type == "}") return popAndPass(type, stream, state); - if (type == "word") override = "tag"; - else if (type == "hash") override = "builtin"; - return "at"; - }; - - states.interpolation = function(type, stream, state) { - if (type == "}") return popContext(state); - if (type == "{" || type == ";") return popAndPass(type, stream, state); - if (type == "word") override = "variable"; - else if (type != "variable" && type != "(" && type != ")") override = "error"; - return "interpolation"; - }; - - return { - startState: function(base) { - return {tokenize: null, - state: inline ? "block" : "top", - stateArg: null, - context: new Context(inline ? "block" : "top", base || 0, null)}; - }, - - token: function(stream, state) { - if (!state.tokenize && stream.eatSpace()) return null; - var style = (state.tokenize || tokenBase)(stream, state); - if (style && typeof style == "object") { - type = style[1]; - style = style[0]; - } - override = style; - if (type != "comment") - state.state = states[state.state](type, stream, state); - return override; - }, - - indent: function(state, textAfter) { - var cx = state.context, ch = textAfter && textAfter.charAt(0); - var indent = cx.indent; - if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; - if (cx.prev) { - if (ch == "}" && (cx.type == "block" || cx.type == "top" || - cx.type == "interpolation" || cx.type == "restricted_atBlock")) { - // Resume indentation from parent context. - cx = cx.prev; - indent = cx.indent; - } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || - ch == "{" && (cx.type == "at" || cx.type == "atBlock")) { - // Dedent relative to current context. - indent = Math.max(0, cx.indent - indentUnit); - } - } - return indent; - }, - - electricChars: "}", - blockCommentStart: "/*", - blockCommentEnd: "*/", - blockCommentContinue: " * ", - lineComment: lineComment, - fold: "brace" - }; -}); - - function keySet(array) { - var keys = {}; - for (var i = 0; i < array.length; ++i) { - keys[array[i].toLowerCase()] = true; - } - return keys; - } - - var documentTypes_ = [ - "domain", "regexp", "url", "url-prefix" - ], documentTypes = keySet(documentTypes_); - - var mediaTypes_ = [ - "all", "aural", "braille", "handheld", "print", "projection", "screen", - "tty", "tv", "embossed" - ], mediaTypes = keySet(mediaTypes_); - - var mediaFeatures_ = [ - "width", "min-width", "max-width", "height", "min-height", "max-height", - "device-width", "min-device-width", "max-device-width", "device-height", - "min-device-height", "max-device-height", "aspect-ratio", - "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", - "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", - "max-color", "color-index", "min-color-index", "max-color-index", - "monochrome", "min-monochrome", "max-monochrome", "resolution", - "min-resolution", "max-resolution", "scan", "grid", "orientation", - "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", - "pointer", "any-pointer", "hover", "any-hover" - ], mediaFeatures = keySet(mediaFeatures_); - - var mediaValueKeywords_ = [ - "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", - "interlace", "progressive" - ], mediaValueKeywords = keySet(mediaValueKeywords_); - - var propertyKeywords_ = [ - "align-content", "align-items", "align-self", "alignment-adjust", - "alignment-baseline", "anchor-point", "animation", "animation-delay", - "animation-direction", "animation-duration", "animation-fill-mode", - "animation-iteration-count", "animation-name", "animation-play-state", - "animation-timing-function", "appearance", "azimuth", "backface-visibility", - "background", "background-attachment", "background-blend-mode", "background-clip", - "background-color", "background-image", "background-origin", "background-position", - "background-repeat", "background-size", "baseline-shift", "binding", - "bleed", "bookmark-label", "bookmark-level", "bookmark-state", - "bookmark-target", "border", "border-bottom", "border-bottom-color", - "border-bottom-left-radius", "border-bottom-right-radius", - "border-bottom-style", "border-bottom-width", "border-collapse", - "border-color", "border-image", "border-image-outset", - "border-image-repeat", "border-image-slice", "border-image-source", - "border-image-width", "border-left", "border-left-color", - "border-left-style", "border-left-width", "border-radius", "border-right", - "border-right-color", "border-right-style", "border-right-width", - "border-spacing", "border-style", "border-top", "border-top-color", - "border-top-left-radius", "border-top-right-radius", "border-top-style", - "border-top-width", "border-width", "bottom", "box-decoration-break", - "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", - "caption-side", "caret-color", "clear", "clip", "color", "color-profile", "column-count", - "column-fill", "column-gap", "column-rule", "column-rule-color", - "column-rule-style", "column-rule-width", "column-span", "column-width", - "columns", "content", "counter-increment", "counter-reset", "crop", "cue", - "cue-after", "cue-before", "cursor", "direction", "display", - "dominant-baseline", "drop-initial-after-adjust", - "drop-initial-after-align", "drop-initial-before-adjust", - "drop-initial-before-align", "drop-initial-size", "drop-initial-value", - "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", - "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", - "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings", - "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", - "font-stretch", "font-style", "font-synthesis", "font-variant", - "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", - "font-variant-ligatures", "font-variant-numeric", "font-variant-position", - "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", - "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-gap", - "grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", - "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", - "grid-template-rows", "hanging-punctuation", "height", "hyphens", - "icon", "image-orientation", "image-rendering", "image-resolution", - "inline-box-align", "justify-content", "justify-items", "justify-self", "left", "letter-spacing", - "line-break", "line-height", "line-stacking", "line-stacking-ruby", - "line-stacking-shift", "line-stacking-strategy", "list-style", - "list-style-image", "list-style-position", "list-style-type", "margin", - "margin-bottom", "margin-left", "margin-right", "margin-top", - "marks", "marquee-direction", "marquee-loop", - "marquee-play-count", "marquee-speed", "marquee-style", "max-height", - "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", - "nav-left", "nav-right", "nav-up", "object-fit", "object-position", - "opacity", "order", "orphans", "outline", - "outline-color", "outline-offset", "outline-style", "outline-width", - "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", - "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", - "page", "page-break-after", "page-break-before", "page-break-inside", - "page-policy", "pause", "pause-after", "pause-before", "perspective", - "perspective-origin", "pitch", "pitch-range", "place-content", "place-items", "place-self", "play-during", "position", - "presentation-level", "punctuation-trim", "quotes", "region-break-after", - "region-break-before", "region-break-inside", "region-fragment", - "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", - "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", - "ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin", - "shape-outside", "size", "speak", "speak-as", "speak-header", - "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", - "tab-size", "table-layout", "target", "target-name", "target-new", - "target-position", "text-align", "text-align-last", "text-decoration", - "text-decoration-color", "text-decoration-line", "text-decoration-skip", - "text-decoration-style", "text-emphasis", "text-emphasis-color", - "text-emphasis-position", "text-emphasis-style", "text-height", - "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", - "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", - "text-wrap", "top", "transform", "transform-origin", "transform-style", - "transition", "transition-delay", "transition-duration", - "transition-property", "transition-timing-function", "unicode-bidi", - "user-select", "vertical-align", "visibility", "voice-balance", "voice-duration", - "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", - "voice-volume", "volume", "white-space", "widows", "width", "will-change", "word-break", - "word-spacing", "word-wrap", "z-index", - // SVG-specific - "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", - "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", - "color-interpolation", "color-interpolation-filters", - "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", - "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", - "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", - "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", - "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", - "glyph-orientation-vertical", "text-anchor", "writing-mode" - ], propertyKeywords = keySet(propertyKeywords_); - - var nonStandardPropertyKeywords_ = [ - "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", - "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", - "scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside", - "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", - "searchfield-results-decoration", "zoom" - ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); - - var fontProperties_ = [ - "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", - "font-stretch", "font-weight", "font-style" - ], fontProperties = keySet(fontProperties_); - - var counterDescriptors_ = [ - "additive-symbols", "fallback", "negative", "pad", "prefix", "range", - "speak-as", "suffix", "symbols", "system" - ], counterDescriptors = keySet(counterDescriptors_); - - var colorKeywords_ = [ - "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", - "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", - "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", - "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", - "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", - "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", - "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", - "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", - "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", - "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", - "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", - "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", - "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", - "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", - "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", - "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", - "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", - "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", - "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", - "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", - "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", - "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", - "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", - "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", - "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", - "whitesmoke", "yellow", "yellowgreen" - ], colorKeywords = keySet(colorKeywords_); - - var valueKeywords_ = [ - "above", "absolute", "activeborder", "additive", "activecaption", "afar", - "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", - "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", - "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page", - "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary", - "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", - "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", - "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", - "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", - "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", - "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", - "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", - "compact", "condensed", "contain", "content", "contents", - "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", - "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", - "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", - "destination-in", "destination-out", "destination-over", "devanagari", "difference", - "disc", "discard", "disclosure-closed", "disclosure-open", "document", - "dot-dash", "dot-dot-dash", - "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", - "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", - "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", - "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", - "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", - "ethiopic-halehame-gez", "ethiopic-halehame-om-et", - "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", - "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", - "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", - "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", - "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove", - "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", - "help", "hidden", "hide", "higher", "highlight", "highlighttext", - "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore", - "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", - "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", - "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", - "italic", "japanese-formal", "japanese-informal", "justify", "kannada", - "katakana", "katakana-iroha", "keep-all", "khmer", - "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", - "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", - "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", - "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", - "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", - "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "match", "matrix", "matrix3d", - "media-controls-background", "media-current-time-display", - "media-fullscreen-button", "media-mute-button", "media-play-button", - "media-return-to-realtime-button", "media-rewind-button", - "media-seek-back-button", "media-seek-forward-button", "media-slider", - "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", - "media-volume-slider-container", "media-volume-sliderthumb", "medium", - "menu", "menulist", "menulist-button", "menulist-text", - "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", - "mix", "mongolian", "monospace", "move", "multiple", "multiply", "myanmar", "n-resize", - "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", - "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", - "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote", - "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", - "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", - "painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter", - "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", - "progress", "push-button", "radial-gradient", "radio", "read-only", - "read-write", "read-write-plaintext-only", "rectangle", "region", - "relative", "repeat", "repeating-linear-gradient", - "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", - "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", - "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", - "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", - "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", - "searchfield-cancel-button", "searchfield-decoration", - "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end", - "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", - "simp-chinese-formal", "simp-chinese-informal", "single", - "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", - "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", - "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", - "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square", - "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub", - "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", - "table-caption", "table-cell", "table-column", "table-column-group", - "table-footer-group", "table-header-group", "table-row", "table-row-group", - "tamil", - "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", - "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", - "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", - "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", - "trad-chinese-formal", "trad-chinese-informal", "transform", - "translate", "translate3d", "translateX", "translateY", "translateZ", - "transparent", "ultra-condensed", "ultra-expanded", "underline", "unset", "up", - "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", - "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", - "var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", - "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", - "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", - "xx-large", "xx-small" - ], valueKeywords = keySet(valueKeywords_); - - var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_) - .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_) - .concat(valueKeywords_); - CodeMirror.registerHelper("hintWords", "css", allWords); - - function tokenCComment(stream, state) { - var maybeEnd = false, ch; - while ((ch = stream.next()) != null) { - if (maybeEnd && ch == "/") { - state.tokenize = null; - break; - } - maybeEnd = (ch == "*"); - } - return ["comment", "comment"]; - } - - CodeMirror.defineMIME("text/css", { - documentTypes: documentTypes, - mediaTypes: mediaTypes, - mediaFeatures: mediaFeatures, - mediaValueKeywords: mediaValueKeywords, - propertyKeywords: propertyKeywords, - nonStandardPropertyKeywords: nonStandardPropertyKeywords, - fontProperties: fontProperties, - counterDescriptors: counterDescriptors, - colorKeywords: colorKeywords, - valueKeywords: valueKeywords, - tokenHooks: { - "/": function(stream, state) { - if (!stream.eat("*")) return false; - state.tokenize = tokenCComment; - return tokenCComment(stream, state); - } - }, - name: "css" - }); - - CodeMirror.defineMIME("text/x-scss", { - mediaTypes: mediaTypes, - mediaFeatures: mediaFeatures, - mediaValueKeywords: mediaValueKeywords, - propertyKeywords: propertyKeywords, - nonStandardPropertyKeywords: nonStandardPropertyKeywords, - colorKeywords: colorKeywords, - valueKeywords: valueKeywords, - fontProperties: fontProperties, - allowNested: true, - lineComment: "//", - tokenHooks: { - "/": function(stream, state) { - if (stream.eat("/")) { - stream.skipToEnd(); - return ["comment", "comment"]; - } else if (stream.eat("*")) { - state.tokenize = tokenCComment; - return tokenCComment(stream, state); - } else { - return ["operator", "operator"]; - } - }, - ":": function(stream) { - if (stream.match(/\s*\{/, false)) - return [null, null] - return false; - }, - "$": function(stream) { - stream.match(/^[\w-]+/); - if (stream.match(/^\s*:/, false)) - return ["variable-2", "variable-definition"]; - return ["variable-2", "variable"]; - }, - "#": function(stream) { - if (!stream.eat("{")) return false; - return [null, "interpolation"]; - } - }, - name: "css", - helperType: "scss" - }); - - CodeMirror.defineMIME("text/x-less", { - mediaTypes: mediaTypes, - mediaFeatures: mediaFeatures, - mediaValueKeywords: mediaValueKeywords, - propertyKeywords: propertyKeywords, - nonStandardPropertyKeywords: nonStandardPropertyKeywords, - colorKeywords: colorKeywords, - valueKeywords: valueKeywords, - fontProperties: fontProperties, - allowNested: true, - lineComment: "//", - tokenHooks: { - "/": function(stream, state) { - if (stream.eat("/")) { - stream.skipToEnd(); - return ["comment", "comment"]; - } else if (stream.eat("*")) { - state.tokenize = tokenCComment; - return tokenCComment(stream, state); - } else { - return ["operator", "operator"]; - } - }, - "@": function(stream) { - if (stream.eat("{")) return [null, "interpolation"]; - if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false; - stream.eatWhile(/[\w\\\-]/); - if (stream.match(/^\s*:/, false)) - return ["variable-2", "variable-definition"]; - return ["variable-2", "variable"]; - }, - "&": function() { - return ["atom", "atom"]; - } - }, - name: "css", - helperType: "less" - }); - - CodeMirror.defineMIME("text/x-gss", { - documentTypes: documentTypes, - mediaTypes: mediaTypes, - mediaFeatures: mediaFeatures, - propertyKeywords: propertyKeywords, - nonStandardPropertyKeywords: nonStandardPropertyKeywords, - fontProperties: fontProperties, - counterDescriptors: counterDescriptors, - colorKeywords: colorKeywords, - valueKeywords: valueKeywords, - supportsAtComponent: true, - tokenHooks: { - "/": function(stream, state) { - if (!stream.eat("*")) return false; - state.tokenize = tokenCComment; - return tokenCComment(stream, state); - } - }, - name: "css", - helperType: "gss" - }); - -}); - - -/***/ }), -/* 29 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var Backbone = __webpack_require__(0); -var Buttons = __webpack_require__(30); - -module.exports = Backbone.Model.extend({ - defaults: { - id: '', - content: '', - visible: true, - buttons: [], - attributes: {} - }, - - initialize: function initialize(options) { - this.btn = this.get('buttons') || []; - this.buttons = new Buttons(this.btn); - this.set('buttons', this.buttons); - } -}); - -/***/ }), -/* 30 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var Backbone = __webpack_require__(0); -var Button = __webpack_require__(112); - -module.exports = Backbone.Collection.extend({ - model: Button, - - /** - * Deactivate all buttons, except one passed - * @param {Object} except Model to ignore - * @param {Boolean} r Recursive flag - * - * @return void - * */ - deactivateAllExceptOne: function deactivateAllExceptOne(except, r) { - this.forEach(function (model, index) { - if (model !== except) { - model.set('active', false); - if (r && model.get('buttons').length) model.get('buttons').deactivateAllExceptOne(except, r); - } - }); - }, - - - /** - * Deactivate all buttons - * @param {String} ctx Context string - * - * @return void - * */ - deactivateAll: function deactivateAll(ctx) { - var context = ctx || ''; - this.forEach(function (model, index) { - if (model.get('context') == context) { - model.set('active', false); - if (model.get('buttons').length) model.get('buttons').deactivateAll(context); - } - }); - }, - - - /** - * Disables all buttons - * @param {String} ctx Context string - * - * @return void - * */ - disableAllButtons: function disableAllButtons(ctx) { - var context = ctx || ''; - this.forEach(function (model, index) { - if (model.get('context') == context) { - model.set('disable', true); - if (model.get('buttons').length) model.get('buttons').disableAllButtons(context); - } - }); - }, - - - /** - * Disables all buttons, except one passed - * @param {Object} except Model to ignore - * @param {Boolean} r Recursive flag - * - * @return void - * */ - disableAllButtonsExceptOne: function disableAllButtonsExceptOne(except, r) { - this.forEach(function (model, index) { - if (model !== except) { - model.set('disable', true); - if (r && model.get('buttons').length) model.get('buttons').disableAllButtonsExceptOne(except, r); - } - }); - } -}); - -/***/ }), -/* 31 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var Backbone = __webpack_require__(0); -var ButtonsView = __webpack_require__(114); - -module.exports = Backbone.View.extend({ - initialize: function initialize(o) { - var config = o.config || {}; - var model = this.model; - this.config = config; - this.pfx = config.stylePrefix || ''; - this.ppfx = config.pStylePrefix || ''; - this.buttons = model.get('buttons'); - this.className = this.pfx + 'panel'; - this.id = this.pfx + model.get('id'); - this.listenTo(model, 'change:appendContent', this.appendContent); - this.listenTo(model, 'change:content', this.updateContent); - model.view = this; - }, - - - /** - * Append content of the panel - * */ - appendContent: function appendContent() { - this.$el.append(this.model.get('appendContent')); - }, - - - /** - * Update content - * */ - updateContent: function updateContent() { - this.$el.html(this.model.get('content')); - }, - attributes: function attributes() { - return this.model.get('attributes'); - }, - initResize: function initResize() { - var em = this.config.em; - var editor = em ? em.get('Editor') : ''; - var resizable = this.model.get('resizable'); - - if (editor && resizable) { - var resz = resizable === true ? [1, 1, 1, 1] : resizable; - var resLen = resz.length; - var tc, - cr, - bc, - cl = 0; - - // Choose which sides of the panel are resizable - if (resLen == 2) { - tc = resz[0]; - bc = resz[0]; - cr = resz[1]; - cl = resz[1]; - } else if (resLen == 4) { - tc = resz[0]; - cr = resz[1]; - bc = resz[2]; - cl = resz[3]; - } - - var resizer = editor.Utils.Resizer.init(_extends({ - tc: tc, - cr: cr, - bc: bc, - cl: cl, - tl: 0, - tr: 0, - bl: 0, - br: 0, - appendTo: this.el, - silentFrames: 1, - avoidContainerUpdate: 1, - prefix: editor.getConfig().stylePrefix, - onEnd: function onEnd() { - em && em.trigger('change:canvasOffset'); - }, - - posFetcher: function posFetcher(el, _ref) { - var target = _ref.target; - - var style = el.style; - var config = resizer.getConfig(); - var keyWidth = config.keyWidth; - var keyHeight = config.keyHeight; - var rect = el.getBoundingClientRect(); - var forContainer = target == 'container'; - var styleWidth = style[keyWidth]; - var styleHeight = style[keyHeight]; - var width = styleWidth && !forContainer ? parseFloat(styleWidth) : rect.width; - var height = styleHeight && !forContainer ? parseFloat(styleHeight) : rect.height; - return { - left: 0, - top: 0, - width: width, - height: height - }; - } - }, resizable)); - resizer.blur = function () {}; - resizer.focus(this.el); - } - }, - render: function render() { - var $el = this.$el; - var ppfx = this.ppfx; - var cls = this.className + ' ' + this.id + ' ' + ppfx + 'one-bg ' + ppfx + 'two-color'; - $el.addClass(cls); - - if (this.buttons.length) { - var buttons = new ButtonsView({ - collection: this.buttons, - config: this.config - }); - $el.append(buttons.render().el); - } - - $el.append(this.model.get('content')); - return this; - } -}); - -/***/ }), -/* 32 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** - * With Style Manager you basically build categories (called sectors) of CSS properties which could - * be used to custom components and classes. - * You can init the editor with all sectors and properties via configuration - * - * ```js - * var editor = grapesjs.init({ - * ... - * styleManager: {...} // Check below for the possible properties - * ... - * }); - * ``` - * - * Before using methods you should get first the module from the editor instance, in this way: - * - * ```js - * var styleManager = editor.StyleManager; - * ``` - * - * @module StyleManager - * @param {Object} config Configurations - * @param {Array} [config.sectors=[]] Array of possible sectors - * @example - * ... - * styleManager: { - * sectors: [{ - * id: 'dim', - * name: 'Dimension', - * properties: [{ - * name: 'Width', - * property: 'width', - * type: 'integer', - * units: ['px', '%'], - * defaults: 'auto', - * min: 0, - }], - * }], - * } - * ... - */ - - -var _underscore = __webpack_require__(1); - -module.exports = function () { - var c = {}, - defaults = __webpack_require__(120), - Sectors = __webpack_require__(121), - Properties = __webpack_require__(12), - SectorsView = __webpack_require__(132); - var properties = void 0; - var sectors, SectView; - - return { - /** - * Name of the module - * @type {String} - * @private - */ - name: 'StyleManager', - - /** - * Get configuration object - * @return {Object} - * @private - */ - getConfig: function getConfig() { - return c; - }, - - - /** - * Initialize module. Automatically called with a new instance of the editor - * @param {Object} config Configurations - */ - init: function init(config) { - c = config || {}; - for (var name in defaults) { - if (!(name in c)) c[name] = defaults[name]; - } - - var ppfx = c.pStylePrefix; - if (ppfx) c.stylePrefix = ppfx + c.stylePrefix; - - properties = new Properties(); - sectors = new Sectors(c.sectors, c); - SectView = new SectorsView({ - collection: sectors, - target: c.em, - config: c - }); - return this; - }, - postRender: function postRender() { - var elTo = this.getConfig().appendTo; - - if (elTo) { - var el = (0, _underscore.isElement)(elTo) ? elTo : document.querySelector(elTo); - el.appendChild(this.render()); - } - }, - - - /** - * Add new sector to the collection. If the sector with the same id already exists, - * that one will be returned - * @param {string} id Sector id - * @param {Object} sector Object representing sector - * @param {string} [sector.name=''] Sector's label - * @param {Boolean} [sector.open=true] Indicates if the sector should be opened - * @param {Array} [sector.properties=[]] Array of properties - * @return {Sector} Added Sector - * @example - * var sector = styleManager.addSector('mySector',{ - * name: 'My sector', - * open: true, - * properties: [{ name: 'My property'}] - * }); - * */ - addSector: function addSector(id, sector) { - var result = this.getSector(id); - if (!result) { - sector.id = id; - result = sectors.add(sector); - } - return result; - }, - - - /** - * Get sector by id - * @param {string} id Sector id - * @return {Sector|null} - * @example - * var sector = styleManager.getSector('mySector'); - * */ - getSector: function getSector(id) { - var res = sectors.where({ id: id }); - return res.length ? res[0] : null; - }, - - - /** - * Remove a sector by id - * @param {string} id Sector id - * @return {Sector} Removed sector - * @example - * const removed = styleManager.removeSector('mySector'); - */ - removeSector: function removeSector(id) { - return this.getSectors().remove(this.getSector(id)); - }, - - - /** - * Get all sectors - * @return {Sectors} Collection of sectors - * */ - getSectors: function getSectors() { - return sectors; - }, - - - /** - * Add property to the sector identified by id - * @param {string} sectorId Sector id - * @param {Object} property Property object - * @param {string} [property.name=''] Name of the property - * @param {string} [property.property=''] CSS property, eg. `min-height` - * @param {string} [property.type=''] Type of the property: integer | radio | select | color | file | composite | stack - * @param {Array} [property.units=[]] Unit of measure available, eg. ['px','%','em']. Only for integer type - * @param {string} [property.unit=''] Default selected unit from `units`. Only for integer type - * @param {number} [property.min=null] Min possible value. Only for integer type - * @param {number} [property.max=null] Max possible value. Only for integer type - * @param {string} [property.defaults=''] Default value - * @param {string} [property.info=''] Some description - * @param {string} [property.icon=''] Class name. If exists no text will be displayed - * @param {Boolean} [property.preview=false] Show layers preview. Only for stack type - * @param {string} [property.functionName=''] Indicates if value need to be wrapped in some function, for istance `transform: rotate(90deg)` - * @param {Array} [property.properties=[]] Nested properties for composite and stack type - * @param {Array} [property.layers=[]] Layers for stack properties - * @param {Array} [property.list=[]] List of possible options for radio and select types - * @return {Property|null} Added Property or `null` in case sector doesn't exist - * @example - * var property = styleManager.addProperty('mySector',{ - * name: 'Minimum height', - * property: 'min-height', - * type: 'select', - * defaults: '100px', - * list: [{ - * value: '100px', - * name: '100', - * },{ - * value: '200px', - * name: '200', - * }], - * }); - */ - addProperty: function addProperty(sectorId, property) { - var prop = null; - var sector = this.getSector(sectorId); - - if (sector) prop = sector.get('properties').add(property); - - return prop; - }, - - - /** - * Get property by its CSS name and sector id - * @param {string} sectorId Sector id - * @param {string} name CSS property name, eg. 'min-height' - * @return {Property|null} - * @example - * var property = styleManager.getProperty('mySector','min-height'); - */ - getProperty: function getProperty(sectorId, name) { - var prop = null; - var sector = this.getSector(sectorId); - - if (sector) { - prop = sector.get('properties').where({ property: name }); - prop = prop.length == 1 ? prop[0] : prop; - } - - return prop; - }, - - - /** - * Remove a property from the sector - * @param {string} sectorId Sector id - * @param {string} name CSS property name, eg. 'min-height' - * @return {Property} Removed property - * @example - * const property = styleManager.removeProperty('mySector', 'min-height'); - */ - removeProperty: function removeProperty(sectorId, name) { - var props = this.getProperties(sectorId); - return props && props.remove(this.getProperty(sectorId, name)); - }, - - - /** - * Get properties of the sector - * @param {string} sectorId Sector id - * @return {Properties} Collection of properties - * @example - * var properties = styleManager.getProperties('mySector'); - */ - getProperties: function getProperties(sectorId) { - var props = null; - var sector = this.getSector(sectorId); - - if (sector) props = sector.get('properties'); - - return props; - }, - - - /** - * Get what to style inside Style Manager. If you select the component - * without classes the entity is the Component itself and all changes will - * go inside its 'style' property. Otherwise, if the selected component has - * one or more classes, the function will return the corresponding CSS Rule - * @param {Model} model - * @return {Model} - */ - getModelToStyle: function getModelToStyle(model) { - var em = c.em; - var classes = model.get('classes'); - var id = model.getId(); - - if (em) { - var config = em.getConfig(); - var um = em.get('UndoManager'); - var cssC = em.get('CssComposer'); - var state = !config.devicePreviewMode ? model.get('state') : ''; - var valid = classes.getStyleable(); - var hasClasses = valid.length; - var opts = { state: state }; - var rule = void 0; - - // I stop undo manager here as after adding the CSSRule (generally after - // selecting the component) and calling undo() it will remove the rule from - // the collection, therefore updating it in style manager will not affect it - // #268 - um.stop(); - - if (hasClasses) { - var deviceW = em.getCurrentMedia(); - rule = cssC.get(valid, state, deviceW); - - if (!rule) { - rule = cssC.add(valid, state, deviceW); - rule.setStyle(model.getStyle()); - model.setStyle({}); - } - } else if (config.avoidInlineStyle) { - rule = cssC.getIdRule(id, opts); - !rule && (rule = cssC.setIdRule(id, {}, opts)); - } - - rule && (model = rule); - um.start(); - } - - return model; - }, - - - /** - * Add new property type - * @param {string} id Type ID - * @param {Object} definition Definition of the type. Each definition contains - * `model` (business logic), `view` (presentation logic) - * and `isType` function which recognize the type of the - * passed entity - * addType('my-type', { - * model: {}, - * view: {}, - * isType: (value) => { - * if (value && value.type == 'my-type') { - * return value; - * } - * }, - * }) - */ - addType: function addType(id, definition) { - properties.addType(id, definition); - }, - - - /** - * Get type - * @param {string} id Type ID - * @return {Object} Type definition - */ - getType: function getType(id) { - return properties.getType(id); - }, - - - /** - * Get all types - * @return {Array} - */ - getTypes: function getTypes() { - return properties.getTypes(); - }, - - - /** - * Create new property from type - * @param {string} id Type ID - * @param {Object} [options={}] Options - * @param {Object} [options.model={}] Custom model object - * @param {Object} [options.view={}] Custom view object - * @return {PropertyView} - * @example - * const propView = styleManager.createType('integer', { - * model: {units: ['px', 'rem']} - * }); - * propView.render(); - * propView.model.on('change:value', ...); - * someContainer.appendChild(propView.el); - */ - createType: function createType(id) { - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref$model = _ref.model, - model = _ref$model === undefined ? {} : _ref$model, - _ref$view = _ref.view, - view = _ref$view === undefined ? {} : _ref$view; - - var type = this.getType(id); - - if (type) { - return new type.view(_extends({ - model: new type.model(model), - config: c - }, view)); - } - }, - - - /** - * Render sectors and properties - * @return {HTMLElement} - * */ - render: function render() { - return SectView.render().el; - } - }; -}; - -/***/ }), -/* 33 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(Backbone) { - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var Model = Backbone.Model; -var View = Backbone.View; - -exports.default = { - types: [], - - initialize: function initialize(models, opts) { - var _this = this; - - this.model = function () { - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var Model = void 0, - View = void 0, - type = void 0; - - if (attrs && attrs.type) { - var baseType = _this.getBaseType(); - type = _this.getType(attrs.type); - Model = type ? type.model : baseType.model; - View = type ? type.view : baseType.view; - } else { - var typeFound = _this.recognizeType(attrs); - type = typeFound.type; - Model = type.model; - View = type.view; - attrs = typeFound.attributes; - } - - var model = new Model(attrs, options); - model.typeView = View; - return model; - }; - var init = this.init && this.init.bind(this); - init && init(); - }, - - - /** - * Recognize type by any value - * @param {mixed} value - * @return {Object} Found type - */ - recognizeType: function recognizeType(value) { - var types = this.getTypes(); - - for (var i = 0; i < types.length; i++) { - var type = types[i]; - var typeFound = type.isType(value); - typeFound = typeof typeFound == 'boolean' && typeFound ? { type: type.id } : typeFound; - - if (typeFound) { - return { - type: type, - attributes: typeFound - }; - } - } - - // If, for any reason, the type is not found it'll return the base one - return { - type: this.getBaseType(), - attributes: value - }; - }, - - - /** - * Returns the base type (last object in the stack) - * @return {Object} - */ - getBaseType: function getBaseType() { - var types = this.getTypes(); - return types[types.length - 1]; - }, - - - /** - * Get types - * @return {Array} - */ - getTypes: function getTypes() { - return this.types; - }, - - - /** - * Get type - * @param {string} id Type ID - * @return {Object} Type definition - */ - getType: function getType(id) { - var types = this.getTypes(); - - for (var i = 0; i < types.length; i++) { - var type = types[i]; - if (type.id === id) { - return type; - } - } - }, - - - /** - * Add new type - * @param {string} id Type ID - * @param {Object} definition Definition of the type. Each definition contains - * `model` (business logic), `view` (presentation logic) - * and `isType` function which recognize the type of the - * passed entity - * addType('my-type', { - * model: {}, - * view: {}, - * isType: (value) => {}, - * }) - */ - addType: function addType(id, definition) { - var type = this.getType(id); - var baseType = this.getBaseType(); - var ModelInst = type ? type.model : baseType.model; - var ViewInst = type ? type.view : baseType.view; - var model = definition.model, - view = definition.view, - isType = definition.isType; - - model = model instanceof Model ? model : ModelInst.extend(model || {}); - view = view instanceof View ? view : ViewInst.extend(view || {}); - - if (type) { - type.model = model; - type.view = view; - type.isType = isType || type.isType; - } else { - definition.id = id; - definition.model = model; - definition.view = view; - definition.isType = isType || function (value) { - if (value && value.type == id) { - return true; - } - }; - this.getTypes().unshift(definition); - } - } -}; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) - -/***/ }), -/* 34 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var Property = __webpack_require__(13); - -module.exports = Property.extend({ - defaults: _extends({}, Property.prototype.defaults, { - // 'background' is a good example where to make a difference - // between detached and not - // - // - NOT detached (default) - // background: url(..) no-repeat center ...; - // - Detached - // background-image: url(); - // background-repeat: repeat; - // ... - detached: 0, - - // Array of sub properties - properties: [], - - // Separator between properties - separator: ' ' - }), - - init: function init() { - var properties = this.get('properties') || []; - var Properties = __webpack_require__(12); - this.set('properties', new Properties(properties)); - this.listenTo(this, 'change:value', this.updateValues); - }, - - - /** - * Clear the value - * @return {this} - */ - clearValue: function clearValue() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - this.get('properties').each(function (property) { - return property.clearValue(); - }); - return Property.prototype.clearValue.apply(this, arguments); - }, - - - /** - * Update property values - */ - updateValues: function updateValues() { - var values = this.getFullValue().split(this.get('separator')); - this.get('properties').each(function (property, i) { - var len = values.length; - // Try to get value from a shorthand: - // 11px -> 11px 11px 11px 11xp - // 11px 22px -> 11px 22px 11px 22xp - var value = values[i] || values[i % len + (len != 1 && len % 2 ? 1 : 0)]; - // There some issue with UndoManager - //property.setValue(value, 0, {fromParent: 1}); - }); - }, - - - /** - * Returns default value - * @param {Boolean} defaultProps Force to get defaults from properties - * @return {string} - */ - getDefaultValue: function getDefaultValue(defaultProps) { - var value = this.get('defaults'); - - if (value && !defaultProps) { - return value; - } - - value = ''; - var properties = this.get('properties'); - properties.each(function (prop, index) { - return value += prop.getDefaultValue() + ' '; - }); - return value.trim(); - }, - getFullValue: function getFullValue() { - if (this.get('detached')) { - return ''; - } - - return this.get('properties').getFullValue(); - } -}); - -/***/ }), -/* 35 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var PropertyCompositeView = __webpack_require__(17); -var LayersView = __webpack_require__(127); - -module.exports = PropertyCompositeView.extend({ - templateInput: function templateInput() { - var pfx = this.pfx; - var ppfx = this.ppfx; - return '\n
    \n \n
    \n
    \n '; - }, - init: function init() { - var model = this.model; - var pfx = this.pfx; - model.set('stackIndex', null); - this.events['click [data-add-layer]'] = 'addLayer'; - this.listenTo(model, 'change:stackIndex', this.indexChanged); - this.listenTo(model, 'updateValue', this.inputValueChanged); - this.delegateEvents(); - }, - clear: function clear(e) { - e && e.stopPropagation(); - this.model.get('layers').reset(); - this.model.clearValue(); - this.targetUpdated(); - }, - - - /** - * Fired when the target is updated. - * With detached mode the component will be always empty as its value - * so we gonna check all props and find if it has any difference - * */ - targetUpdated: function targetUpdated() { - if (!this.model.get('detached')) { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - PropertyCompositeView.prototype.targetUpdated.apply(this, args); - } else { - this.checkVisibility(); - } - - this.refreshLayers(); - }, - - - /** - * Returns the collection of layers - * @return {Collection} - */ - getLayers: function getLayers() { - return this.model.get('layers'); - }, - - - /** - * Triggered when another layer has been selected. - * This allow to move all rendered properties to a new - * selected layer - * @param {Event} - * - * @return {Object} - * */ - indexChanged: function indexChanged(e) { - var model = this.model; - this.getLayers().active(model.get('stackIndex')); - }, - addLayer: function addLayer() { - var model = this.model; - var layers = this.getLayers(); - var properties = model.get('properties').deepClone(); - properties.each(function (property) { - return property.set('value', ''); - }); - var layer = layers.add({ properties: properties }); - - // In detached mode inputValueChanged will add new 'layer value' - // to all subprops - this.inputValueChanged(); - - // This will set subprops with a new default values - model.set('stackIndex', layers.indexOf(layer)); - }, - inputValueChanged: function inputValueChanged() { - var model = this.model; - this.elementUpdated(); - - // If not detached I'll just put all the values from layers to property - // eg. background: layer1Value, layer2Value, layer3Value, ... - if (!model.get('detached')) { - model.set('value', this.getLayerValues()); - } else { - model.get('properties').each(function (prop) { - return prop.trigger('change:value'); - }); - } - }, - - - /** - * There is no need to handle input update by the property itself, - * this will be done by layers - * @private - */ - setValue: function setValue() {}, - - - /** - * Create value by layers - * @return string - * */ - getLayerValues: function getLayerValues() { - return this.getLayers().getFullValue(); - }, - - - /** - * Refresh layers - * */ - refreshLayers: function refreshLayers() { - var layersObj = []; - var model = this.model; - var layers = this.getLayers(); - var detached = model.get('detached'); - - // With detached layers values will be assigned to their properties - if (detached) { - var target = this.getTarget(); - var style = target ? target.getStyle() : {}; - layersObj = layers.getLayersFromStyle(style); - } else { - var value = this.getTargetValue(); - value = value == model.getDefaultValue() ? '' : value; - layersObj = layers.getLayersFromValue(value); - } - - layers.reset(); - layers.add(layersObj); - model.set({ stackIndex: null }, { silent: true }); - }, - onRender: function onRender() { - var self = this; - var model = this.model; - var fieldEl = this.el.querySelector('[data-layers-wrapper]'); - var PropertiesView = __webpack_require__(14); - var propsConfig = { - target: this.target, - propTarget: this.propTarget, - - // Things to do when a single sub-property is changed - onChange: function onChange(el, view, opt) { - var subModel = view.model; - - if (model.get('detached')) { - var subProp = subModel.get('property'); - var values = self.getLayers().getPropertyValues(subProp); - view.updateTargetStyle(values, null, opt); - } else { - model.set('value', model.getFullValue(), opt); - } - } - }; - var layers = new LayersView({ - collection: this.getLayers(), - stackModel: model, - preview: model.get('preview'), - config: this.config, - propsConfig: propsConfig - }).render().el; - - // Will use it to propogate changes - new PropertiesView({ - target: this.target, - collection: this.model.get('properties'), - stackModel: model, - config: this.config, - onChange: propsConfig.onChange, - propTarget: propsConfig.propTarget, - customValue: propsConfig.customValue - }).render(); - - //model.get('properties') - fieldEl.appendChild(layers); - } -}); - -/***/ }), -/* 36 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var Backbone = __webpack_require__(0); -var $ = Backbone.$; - -module.exports = Backbone.View.extend({ - events: { - change: 'handleChange' - }, - - template: function template() { - return ''; - }, - inputClass: function inputClass() { - return this.ppfx + 'field'; - }, - holderClass: function holderClass() { - return this.ppfx + 'input-holder'; - }, - initialize: function initialize() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var ppfx = opts.ppfx || ''; - this.opts = opts; - this.ppfx = ppfx; - this.em = opts.target || {}; - this.listenTo(this.model, 'change:value', this.handleModelChange); - }, - - - /** - * Fired when the element of the property is updated - */ - elementUpdated: function elementUpdated() { - this.model.trigger('el:change'); - }, - - - /** - * Set value to the input element - * @param {string} value - */ - setValue: function setValue(value) { - var model = this.model; - var val = value || model.get('defaults'); - var input = this.getInputEl(); - input && (input.value = val); - }, - - - /** - * Updates the view when the model is changed - * */ - handleModelChange: function handleModelChange(model, value, opts) { - this.setValue(value, opts); - }, - - - /** - * Handled when the view is changed - */ - handleChange: function handleChange(e) { - e.stopPropagation(); - var value = this.getInputEl().value; - this.model.set({ value: value }, { fromInput: 1 }); - this.elementUpdated(); - }, - - - /** - * Get the input element - * @return {HTMLElement} - */ - getInputEl: function getInputEl() { - if (!this.inputEl) { - var plh = this.model.get('defaults') || ''; - this.inputEl = $(''); - } - - return this.inputEl.get(0); - }, - render: function render() { - var el = this.$el; - el.addClass(this.inputClass()); - el.html(this.template()); - el.find('.' + this.holderClass()).append(this.getInputEl()); - return this; - } -}); - -/***/ }), -/* 37 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = __webpack_require__(5).extend({ - templateInput: function templateInput() { - var pfx = this.pfx; - var ppfx = this.ppfx; - return '\n
    \n
    \n '; - }, - onRender: function onRender() { - var pfx = this.pfx; - var ppfx = this.ppfx; - var itemCls = ppfx + 'radio-item-label'; - var model = this.model; - var prop = model.get('property'); - var options = model.get('list') || model.get('options') || []; - - if (!this.input) { - if (options && options.length) { - var inputStr = ''; - - options.forEach(function (el) { - var cl = el.className ? el.className + ' ' + pfx + 'icon ' + itemCls : ''; - var id = prop + '-' + el.value; - var labelTxt = el.name || el.value; - var titleAttr = el.title ? 'title="' + el.title + '"' : ''; - inputStr += '\n
    \n \n \n
    \n '; - }); - - var inputHld = this.el.querySelector('.' + ppfx + 'field'); - inputHld.innerHTML = '
    ' + inputStr + '
    '; - this.input = inputHld.firstChild; - } - } - }, - getInputValue: function getInputValue() { - var inputChk = this.getCheckedEl(); - return inputChk ? inputChk.value : ''; - }, - getCheckedEl: function getCheckedEl() { - var input = this.getInputEl(); - return input ? input.querySelector('input:checked') : ''; - }, - setValue: function setValue(value) { - var model = this.model; - var val = value || model.get('value') || model.getDefaultValue(); - var input = this.getInputEl(); - var inputIn = input ? input.querySelector('[value="' + val + '"]') : ''; - - if (inputIn) { - inputIn.checked = true; - } else { - var inputChk = this.getCheckedEl(); - inputChk && (inputChk.checked = false); - } - } -}); - -/***/ }), -/* 38 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -var _PropertyView = __webpack_require__(5); - -var _PropertyView2 = _interopRequireDefault(_PropertyView); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var $ = _backbone2.default.$; - -module.exports = _PropertyView2.default.extend({ - templateInput: function templateInput() { - var pfx = this.pfx; - var ppfx = this.ppfx; - return '\n
    \n \n
    \n
    \n
    \n
    \n '; - }, - initialize: function initialize() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - _PropertyView2.default.prototype.initialize.apply(this, args); - this.listenTo(this.model, 'change:options', this.updateOptions); - }, - updateOptions: function updateOptions() { - this.input = null; - this.onRender(); - }, - onRender: function onRender() { - var pfx = this.pfx; - var options = this.model.getOptions(); - - if (!this.input) { - var optionsStr = ''; - - options.forEach(function (option) { - var name = option.name || option.value; - var style = option.style ? option.style.replace(/"/g, '"') : ''; - var styleAttr = style ? 'style="' + style + '"' : ''; - var value = option.value.replace(/"/g, '"'); - optionsStr += ''; - }); - - var inputH = this.el.querySelector('#' + pfx + 'input-holder'); - inputH.innerHTML = ''; - this.input = inputH.firstChild; - } - } -}); - -/***/ }), -/* 39 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var InputColor = __webpack_require__(40); - -module.exports = __webpack_require__(15).extend({ - setValue: function setValue(value) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - opts = _extends({}, opts, { silent: 1 }); - this.inputInst.setValue(value, opts); - }, - onRender: function onRender() { - if (!this.input) { - var ppfx = this.ppfx; - var inputColor = new InputColor({ - target: this.target, - model: this.model, - ppfx: ppfx - }); - var input = inputColor.render(); - this.el.querySelector('.' + ppfx + 'fields').appendChild(input.el); - this.$input = input.inputEl; - this.$color = input.colorEl; - this.input = this.$input.get(0); - this.inputInst = input; - } - } -}); - -/***/ }), -/* 40 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -var _underscore = __webpack_require__(1); - -var _ColorPicker = __webpack_require__(126); - -var _ColorPicker2 = _interopRequireDefault(_ColorPicker); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Input = __webpack_require__(36); -var $ = _backbone2.default.$; -(0, _ColorPicker2.default)($); - -module.exports = Input.extend({ - template: function template() { - var ppfx = this.ppfx; - return '\n
    \n
    \n
    \n
    \n
    \n
    \n '; - }, - inputClass: function inputClass() { - var ppfx = this.ppfx; - return ppfx + 'field ' + ppfx + 'field-color'; - }, - holderClass: function holderClass() { - return this.ppfx + 'input-holder'; - }, - - - /** - * Set value to the model - * @param {string} val - * @param {Object} opts - */ - setValue: function setValue(val) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var model = this.model; - var def = model.get('defaults'); - var value = !(0, _underscore.isUndefined)(val) ? val : !(0, _underscore.isUndefined)(def) ? def : ''; - var inputEl = this.getInputEl(); - var colorEl = this.getColorEl(); - var valueClr = value != 'none' ? value : ''; - inputEl.value = value; - colorEl.get(0).style.backgroundColor = valueClr; - - // This prevents from adding multiple thumbs in spectrum - if (opts.fromTarget) { - colorEl.spectrum('set', valueClr); - this.noneColor = value == 'none'; - } - }, - - - /** - * Get the color input element - * @return {HTMLElement} - */ - getColorEl: function getColorEl() { - if (!this.colorEl) { - var self = this; - var ppfx = this.ppfx; - var model = this.model; - - var colorEl = $('
    '); - var cpStyle = colorEl.get(0).style; - var elToAppend = this.em && this.em.config ? this.em.config.el : ''; - var colorPickerConfig = this.em && this.em.getConfig && this.em.getConfig('colorPicker') || {}; - var getColor = function getColor(color) { - var cl = color.getAlpha() == 1 ? color.toHexString() : color.toRgbString(); - return cl.replace(/ /g, ''); - }; - - var changed = 0; - var previousColor = void 0; - this.$el.find('[data-colorp-c]').append(colorEl); - colorEl.spectrum(_extends({ - containerClassName: ppfx + 'one-bg ' + ppfx + 'two-color', - appendTo: elToAppend || 'body', - maxSelectionSize: 8, - showPalette: true, - showAlpha: true, - chooseText: 'Ok', - cancelText: '⨯', - palette: [] - - }, colorPickerConfig, { - move: function move(color) { - var cl = getColor(color); - cpStyle.backgroundColor = cl; - model.setValueFromInput(cl, 0); - }, - change: function change(color) { - changed = 1; - var cl = getColor(color); - cpStyle.backgroundColor = cl; - model.setValueFromInput(cl); - self.noneColor = 0; - }, - show: function show(color) { - changed = 0; - previousColor = getColor(color); - }, - hide: function hide(color) { - if (!changed && previousColor) { - if (self.noneColor) { - previousColor = ''; - } - cpStyle.backgroundColor = previousColor; - colorEl.spectrum('set', previousColor); - model.setValueFromInput(previousColor, 0); - } - } - })); - - this.colorEl = colorEl; - } - return this.colorEl; - }, - render: function render() { - Input.prototype.render.call(this); - // This will make the color input available on render - this.getColorEl(); - return this; - } -}); - -/***/ }), -/* 41 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var PropertyView = __webpack_require__(5); -var $ = _backbone2.default.$; - -module.exports = PropertyView.extend({ - templateInput: function templateInput() { - var pfx = this.pfx; - var ppfx = this.ppfx; - var assetsLabel = this.config.assetsLabel || 'Images'; - return '\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n '; - }, - init: function init() { - var em = this.em; - this.modal = em.get('Modal'); - this.am = em.get('AssetManager'); - this.events['click #' + this.pfx + 'close'] = 'removeFile'; - this.events['click #' + this.pfx + 'images'] = 'openAssetManager'; - this.delegateEvents(); - }, - onRender: function onRender() { - if (!this.$input) { - var plh = this.model.getDefaultValue(); - this.$input = $(''); - } - - if (!this.$preview) { - this.$preview = this.$el.find('#' + this.pfx + 'preview-file'); - } - - if (!this.$previewBox) { - this.$previewBox = this.$el.find('#' + this.pfx + 'preview-box'); - } - - this.setValue(this.componentValue, 0); - }, - setValue: function setValue(value, f) { - PropertyView.prototype.setValue.apply(this, arguments); - this.setPreviewView(value && value != this.model.getDefaultValue()); - this.setPreview(value); - }, - - - /** - * Change visibility of the preview box - * @param bool Visibility - * - * @return void - * */ - setPreviewView: function setPreviewView(v) { - var pv = this.$previewBox; - pv && pv[v ? 'addClass' : 'removeClass'](this.pfx + 'show'); - }, - - - /** - * Spread url - * @param string Url - * - * @return void - * */ - spreadUrl: function spreadUrl(url) { - this.model.set('value', url); - this.setPreviewView(1); - }, - - - /** - * Shows file preview - * @param string Value - * */ - setPreview: function setPreview(value) { - var preview = this.$preview; - value = value && value.indexOf('url(') < 0 ? 'url(' + value + ')' : value; - preview && preview.css('background-image', value); - }, - - - /** @inheritdoc */ - cleanValue: function cleanValue() { - this.setPreviewView(0); - this.model.set({ value: '' }, { silent: true }); - }, - - - /** - * Remove file from input - * - * @return void - * */ - removeFile: function removeFile() { - this.model.set('value', this.model.getDefaultValue()); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - PropertyView.prototype.cleanValue.apply(this, args); - this.setPreviewView(0); - }, - - - /** - * Open dialog for image selecting - * @param {Object} e Event - * - * @return void - * */ - openAssetManager: function openAssetManager(e) { - var that = this; - var em = this.em; - var editor = em ? em.get('Editor') : ''; - - if (editor) { - this.modal.setTitle('Select image'); - this.modal.setContent(this.am.getContainer()); - this.am.setTarget(null); - editor.runCommand('open-assets', { - target: this.model, - onSelect: function onSelect(target) { - that.modal.close(); - that.spreadUrl(target.get('src')); - } - }); - } - } -}); - -/***/ }), -/* 42 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -var Property = __webpack_require__(13); - -module.exports = Property.extend({ - defaults: function defaults() { - return _extends({}, Property.prototype.defaults, { - // Array of options, eg. [{name: 'Label ', value: '100'}] - options: [] - }); - }, - - initialize: function initialize() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - Property.prototype.initialize.apply(this, args); - this.listenTo(this, 'change:options', this.onOptionChange); - }, - onOptionChange: function onOptionChange() { - this.set('list', this.get('options')); - }, - getOptions: function getOptions() { - var _attributes = this.attributes, - options = _attributes.options, - list = _attributes.list; - - return options && options.length ? options : list; - }, - setOptions: function setOptions() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - - this.set('options', opts); - return this; - }, - addOption: function addOption(opt) { - if (opt) { - var opts = this.getOptions(); - this.setOptions([].concat(_toConsumableArray(opts), [opt])); - } - return this; - } -}); - -/***/ }), -/* 43 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _underscore = __webpack_require__(1); - -var Property = __webpack_require__(13); -var InputNumber = __webpack_require__(18); - -module.exports = Property.extend({ - defaults: _extends({}, Property.prototype.defaults, { - // Array of units, eg. ['px', '%'] - units: [], - - // Selected unit, eg. 'px' - unit: '', - - // Integer value steps - step: 1, - - // Minimum value - min: '', - - // Maximum value - max: '' - }), - - init: function init() { - var unit = this.get('unit'); - var units = this.get('units'); - this.input = new InputNumber({ model: this }); - - if (units.length && !unit) { - this.set('unit', units[0]); - } - }, - clearValue: function clearValue() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - this.set({ value: undefined, unit: undefined }, opts); - return this; - }, - parseValue: function parseValue(val) { - var parsed = Property.prototype.parseValue.apply(this, arguments); - - var _input$validateInputV = this.input.validateInputValue(parsed.value, { - deepCheck: 1 - }), - value = _input$validateInputV.value, - unit = _input$validateInputV.unit; - - parsed.value = value; - parsed.unit = unit; - return parsed; - }, - getFullValue: function getFullValue() { - var value = this.get('value'); - var unit = this.get('unit'); - value = !(0, _underscore.isUndefined)(value) ? value : ''; - unit = !(0, _underscore.isUndefined)(unit) && value ? unit : ''; - value = '' + value + unit; - return Property.prototype.getFullValue.apply(this, [value]); - } -}); - -/***/ }), -/* 44 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = __webpack_require__(45).extend({ - events: { - 'click [data-toggle=asset-remove]': 'onRemove', - click: 'onClick', - dblclick: 'onDblClick' - }, - - getPreview: function getPreview() { - var pfx = this.pfx; - var src = this.model.get('src'); - return '\n
    \n
    \n '; - }, - getInfo: function getInfo() { - var pfx = this.pfx; - var model = this.model; - var name = model.get('name'); - var width = model.get('width'); - var height = model.get('height'); - var unit = model.get('unitDim'); - var dim = width && height ? width + 'x' + height + unit : ''; - name = name || model.getFilename(); - return '\n
    ' + name + '
    \n
    ' + dim + '
    \n '; - }, - init: function init(o) { - var pfx = this.pfx; - this.className += ' ' + pfx + 'asset-image'; - }, - - - /** - * Triggered when the asset is clicked - * @private - * */ - onClick: function onClick() { - var onClick = this.config.onClick; - var model = this.model; - this.collection.trigger('deselectAll'); - this.$el.addClass(this.pfx + 'highlight'); - - if (typeof onClick === 'function') { - onClick(model); - } else { - this.updateTarget(this.collection.target); - } - }, - - - /** - * Triggered when the asset is double clicked - * @private - * */ - onDblClick: function onDblClick() { - var em = this.em; - var onDblClick = this.config.onDblClick; - var model = this.model; - - if (typeof onDblClick === 'function') { - onDblClick(model); - } else { - this.updateTarget(this.collection.target); - em && em.get('Modal').close(); - } - - var onSelect = this.collection.onSelect; - if (typeof onSelect == 'function') { - onSelect(this.model); - } - }, - - - /** - * Remove asset from collection - * @private - * */ - onRemove: function onRemove(e) { - e.stopImmediatePropagation(); - this.model.collection.remove(this.model); - } -}); - -/***/ }), -/* 45 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(_) { - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = _backbone2.default.View.extend({ - initialize: function initialize() { - var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - this.options = o; - this.collection = o.collection; - var config = o.config || {}; - this.config = config; - this.pfx = config.stylePrefix || ''; - this.ppfx = config.pStylePrefix || ''; - this.em = config.em; - this.className = this.pfx + 'asset'; - this.listenTo(this.model, 'destroy remove', this.remove); - this.model.view = this; - var init = this.init && this.init.bind(this); - init && init(o); - }, - template: function template() { - var pfx = this.pfx; - return '\n
    \n ' + this.getPreview() + '\n
    \n
    \n ' + this.getInfo() + '\n
    \n
    \n ⨯\n
    \n '; - }, - - - /** - * Update target if exists - * @param {Model} target - * @private - * */ - updateTarget: function updateTarget(target) { - if (target && target.set) { - target.set('attributes', _.clone(target.get('attributes'))); - target.set('src', this.model.get('src')); - } - }, - getPreview: function getPreview() { - return ''; - }, - getInfo: function getInfo() { - return ''; - }, - render: function render() { - var el = this.el; - el.innerHTML = this.template(this, this.model); - el.className = this.className; - return this; - } -}); -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }), -/* 46 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _underscore = __webpack_require__(1); - -var _underscore2 = _interopRequireDefault(_underscore); - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -var _fetch = __webpack_require__(26); - -var _fetch2 = _interopRequireDefault(_fetch); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = _backbone2.default.View.extend({ - template: _underscore2.default.template('\n
    \n
    <%= title %>
    \n multiple/>\n
    \n
    \n '), - - events: {}, - - initialize: function initialize() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - this.options = opts; - var c = opts.config || {}; - this.config = c; - this.pfx = c.stylePrefix || ''; - this.ppfx = c.pStylePrefix || ''; - this.target = this.options.globalCollection || {}; - this.uploadId = this.pfx + 'uploadFile'; - this.disabled = c.disableUpload !== undefined ? c.disableUpload : !c.upload && !c.embedAsBase64; - this.events['change #' + this.uploadId] = 'uploadFile'; - var uploadFile = c.uploadFile; - - if (uploadFile) { - this.uploadFile = uploadFile.bind(this); - } else if (c.embedAsBase64) { - this.uploadFile = this.constructor.embedAsBase64; - } - - this.delegateEvents(); - }, - - - /** - * Triggered before the upload is started - * @private - */ - onUploadStart: function onUploadStart() { - var em = this.config.em; - em && em.trigger('asset:upload:start'); - }, - - - /** - * Triggered after the upload is ended - * @param {Object|string} res End result - * @private - */ - onUploadEnd: function onUploadEnd(res) { - var em = this.config.em; - em && em.trigger('asset:upload:end', res); - }, - - - /** - * Triggered on upload error - * @param {Object} err Error - * @private - */ - onUploadError: function onUploadError(err) { - var em = this.config.em; - console.error(err); - this.onUploadEnd(err); - em && em.trigger('asset:upload:error', err); - }, - - - /** - * Triggered on upload response - * @param {string} text Response text - * @private - */ - onUploadResponse: function onUploadResponse(text, clb) { - var em = this.config.em; - var config = this.config; - var target = this.target; - var json = typeof text === 'string' ? JSON.parse(text) : text; - em && em.trigger('asset:upload:response', json); - - if (config.autoAdd && target) { - target.add(json.data, { at: 0 }); - } - - this.onUploadEnd(text); - clb && clb(json); - }, - - - /** - * Upload files - * @param {Object} e Event - * @return {Promise} - * @private - * */ - uploadFile: function uploadFile(e, clb) { - var _this = this; - - var files = e.dataTransfer ? e.dataTransfer.files : e.target.files; - var body = new FormData(); - var config = this.config; - var params = config.params; - - for (var i = 0; i < files.length; i++) { - body.append(config.uploadName + '[]', files[i]); - } - - for (var param in params) { - body.append(param, params[param]); - } - - var target = this.target; - var url = config.upload; - var headers = config.headers; - var reqHead = 'X-Requested-With'; - - if (typeof headers[reqHead] == 'undefined') { - headers[reqHead] = 'XMLHttpRequest'; - } - - if (url) { - this.onUploadStart(); - return (0, _fetch2.default)(url, { - method: 'post', - credentials: 'include', - headers: headers, - body: body - }).then(function (res) { - return (res.status / 200 | 0) == 1 ? res.text() : res.text().then(function (text) { - return Promise.reject(text); - }); - }).then(function (text) { - return _this.onUploadResponse(text, clb); - }).catch(function (err) { - return _this.onUploadError(err); - }); - } - }, - - - /** - * Make input file droppable - * @private - * */ - initDrop: function initDrop() { - var that = this; - if (!this.uploadForm) { - this.uploadForm = this.$el.find('form').get(0); - if ('draggable' in this.uploadForm) { - var uploadFile = this.uploadFile; - this.uploadForm.ondragover = function () { - this.className = that.pfx + 'hover'; - return false; - }; - this.uploadForm.ondragleave = function () { - this.className = ''; - return false; - }; - this.uploadForm.ondrop = function (e) { - this.className = ''; - e.preventDefault(); - that.uploadFile(e); - return; - }; - } - } - }, - initDropzone: function initDropzone(ev) { - var _this2 = this; - - var addedCls = 0; - var c = this.config; - var em = ev.model; - var edEl = ev.el; - var editor = em.get('Editor'); - var container = em.get('Config').el; - var frameEl = em.get('Canvas').getBody(); - var ppfx = this.ppfx; - var updatedCls = ppfx + 'dropzone-active'; - var dropzoneCls = ppfx + 'dropzone'; - var cleanEditorElCls = function cleanEditorElCls() { - edEl.className = edEl.className.replace(updatedCls, '').trim(); - addedCls = 0; - }; - var onDragOver = function onDragOver() { - if (!addedCls) { - edEl.className += ' ' + updatedCls; - addedCls = 1; - } - return false; - }; - var onDragLeave = function onDragLeave() { - cleanEditorElCls(); - return false; - }; - var onDrop = function onDrop(e) { - cleanEditorElCls(); - e.preventDefault(); - e.stopPropagation(); - _this2.uploadFile(e); - - if (c.openAssetsOnDrop && editor) { - var target = editor.getSelected(); - editor.runCommand('open-assets', { - target: target, - onSelect: function onSelect() { - editor.Modal.close(); - editor.AssetManager.setTarget(null); - } - }); - } - - return false; - }; - - ev.$el.append('
    ' + c.dropzoneContent + '
    '); - cleanEditorElCls(); - - if ('draggable' in edEl) { - [edEl, frameEl].forEach(function (item) { - item.ondragover = onDragOver; - item.ondragleave = onDragLeave; - item.ondrop = onDrop; - }); - } - }, - render: function render() { - this.$el.html(this.template({ - title: this.config.uploadText, - uploadId: this.uploadId, - disabled: this.disabled, - pfx: this.pfx - })); - this.initDrop(); - this.$el.attr('class', this.pfx + 'file-uploader'); - return this; - } -}, { - embedAsBase64: function embedAsBase64(e, clb) { - var _this3 = this; - - // List files dropped - var files = e.dataTransfer ? e.dataTransfer.files : e.target.files; - var response = { data: [] }; - - // Unlikely, widely supported now - if (!FileReader) { - this.onUploadError(new Error('Unsupported platform, FileReader is not defined')); - return; - } - - var promises = []; - var mimeTypeMatcher = /^(.+)\/(.+)$/; - - var _loop = function _loop(file) { - // For each file a reader (to read the base64 URL) - // and a promise (to track and merge results and errors) - var promise = new Promise(function (resolve, reject) { - var reader = new FileReader(); - reader.addEventListener('load', function (event) { - var type = void 0; - var name = file.name; - - // Try to find the MIME type of the file. - var match = mimeTypeMatcher.exec(file.type); - if (match) { - type = match[1]; // The first part in the MIME, "image" in image/png - } else { - type = file.type; - } - - /* - // Show local video files, http://jsfiddle.net/dsbonev/cCCZ2/embedded/result,js,html,css/ - var URL = window.URL || window.webkitURL - var file = this.files[0] - var type = file.type - var videoNode = document.createElement('video'); - var canPlay = videoNode.canPlayType(type) // can use also for 'audio' types - if (canPlay === '') canPlay = 'no' - var message = 'Can play type "' + type + '": ' + canPlay - var isError = canPlay === 'no' - displayMessage(message, isError) - if (isError) { - return - } - var fileURL = URL.createObjectURL(file) - videoNode.src = fileURL - */ - - // If it's an image, try to find its size - if (type === 'image') { - var data = { - src: reader.result, - name: name, - type: type, - height: 0, - width: 0 - }; - - var image = new Image(); - image.addEventListener('error', function (error) { - reject(error); - }); - image.addEventListener('load', function () { - data.height = image.height; - data.width = image.width; - resolve(data); - }); - image.src = data.src; - } else if (type) { - // Not an image, but has a type - resolve({ - src: reader.result, - name: name, - type: type - }); - } else { - // No type found, resolve with the URL only - resolve(reader.result); - } - }); - reader.addEventListener('error', function (error) { - reject(error); - }); - reader.addEventListener('abort', function (error) { - reject('Aborted'); - }); - - reader.readAsDataURL(file); - }); - - promises.push(promise); - }; - - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = files[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var file = _step.value; - - _loop(file); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - Promise.all(promises).then(function (data) { - response.data = data; - _this3.onUploadResponse(response, clb); - }, function (error) { - _this3.onUploadError(error); - }); - } -}); - -/***/ }), -/* 47 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _underscore = __webpack_require__(1); - -var _underscore2 = _interopRequireDefault(_underscore); - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -var _Styleable = __webpack_require__(48); - -var _Styleable2 = _interopRequireDefault(_Styleable); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Selectors = __webpack_require__(11); - -module.exports = _backbone2.default.Model.extend(_Styleable2.default).extend({ - defaults: { - // Css selectors - selectors: {}, - - // Additional string css selectors - selectorsAdd: '', - - // Css properties style - style: {}, - - // On which device width this rule should be rendered, eg. @media (max-width: 1000px) - mediaText: '', - - // State of the rule, eg: hover | pressed | focused - state: '', - - // Indicates if the rule is stylable - stylable: true, - - // Type of at-rule, eg. 'media', 'font-face', etc. - atRuleType: '', - - // This particolar property is used only on at-rules, like 'page' or - // 'font-face', where the block containes only style declarations - singleAtRule: 0, - - // If true, sets '!important' on all properties - // You can use an array to specify properties to set important - // Used in view - important: 0 - }, - - initialize: function initialize(c) { - var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - this.config = c || {}; - var em = opt.em; - var selectors = this.config.selectors || []; - this.em = em; - - if (em) { - var sm = em.get('SelectorManager'); - var slct = []; - selectors.forEach(function (selector) { - slct.push(sm.add(selector)); - }); - selectors = slct; - } - - this.set('selectors', new Selectors(selectors)); - }, - - - /** - * Returns an at-rule statement if possible, eg. '@media (...)', '@keyframes' - * @return {string} - */ - getAtRule: function getAtRule() { - var type = this.get('atRuleType'); - var condition = this.get('mediaText'); - // Avoid breaks with the last condition - var typeStr = type ? '@' + type : condition ? '@media' : ''; - - return typeStr + (condition && typeStr ? ' ' + condition : ''); - }, - - - /** - * Return selectors fo the rule as a string - * @return {string} - */ - selectorsToString: function selectorsToString() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var result = []; - var state = this.get('state'); - var addSelector = this.get('selectorsAdd'); - var selectors = this.get('selectors').getFullString(); - var stateStr = state ? ':' + state : ''; - selectors && result.push('' + selectors + stateStr); - addSelector && !opts.skipAdd && result.push(addSelector); - return result.join(', '); - }, - - - /** - * Get declaration block - * @param {Object} [opts={}] Options - * @return {string} - */ - getDeclaration: function getDeclaration() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var result = ''; - var selectors = this.selectorsToString(); - var style = this.styleToString(opts); - var singleAtRule = this.get('singleAtRule'); - - if ((selectors || singleAtRule) && style) { - result = singleAtRule ? style : selectors + '{' + style + '}'; - } - - return result; - }, - - - /** - * Returns CSS string of the rule - * @param {Object} [opts={}] Options - * @return {string} - */ - toCSS: function toCSS() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var result = ''; - var atRule = this.getAtRule(); - var block = this.getDeclaration(opts); - block && (result = block); - - if (atRule && result) { - result = atRule + '{' + result + '}'; - } - - return result; - }, - toJSON: function toJSON() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var obj = _backbone2.default.Model.prototype.toJSON.apply(this, args); - - if (this.em.getConfig('avoidDefaults')) { - var defaults = this.defaults; - - (0, _underscore.forEach)(defaults, function (value, key) { - if (obj[key] === value) { - delete obj[key]; - } - }); - - if ((0, _underscore.isEmpty)(obj.selectors)) delete obj.selectors; - if ((0, _underscore.isEmpty)(obj.style)) delete obj.style; - } - - return obj; - }, - - - /** - * Compare the actual model with parameters - * @param {Object} selectors Collection of selectors - * @param {String} state Css rule state - * @param {String} width For which device this style is oriented - * @param {Object} ruleProps Other rule props - * @return {Boolean} - * @private - */ - compare: function compare(selectors, state, width) { - var ruleProps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - - var st = state || ''; - var wd = width || ''; - var selectorsAdd = ruleProps.selectorsAdd || ''; - var atRuleType = ruleProps.atRuleType || ''; - var cId = 'cid'; - //var a1 = _.pluck(selectors.models || selectors, cId); - //var a2 = _.pluck(this.get('selectors').models, cId); - if (!(selectors instanceof Array) && !selectors.models) selectors = [selectors]; - var a1 = _underscore2.default.map(selectors.models || selectors, function (model) { - return model.get('name'); - }); - var a2 = _underscore2.default.map(this.get('selectors').models, function (model) { - return model.get('name'); - }); - var f = false; - - if (a1.length !== a2.length) return f; - - for (var i = 0; i < a1.length; i++) { - var re = 0; - for (var j = 0; j < a2.length; j++) { - if (a1[i] === a2[j]) re = 1; - } - if (re === 0) return f; - } - - if (this.get('state') !== st || this.get('mediaText') !== wd || this.get('selectorsAdd') !== selectorsAdd || this.get('atRuleType') !== atRuleType) { - return f; - } - - return true; - } -}); - -/***/ }), -/* 48 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _underscore = __webpack_require__(1); - -var _mixins = __webpack_require__(2); - -var _ParserHtml = __webpack_require__(27); - -var _ParserHtml2 = _interopRequireDefault(_ParserHtml); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var parseStyle = (0, _ParserHtml2.default)().parseStyle; -exports.default = { - parseStyle: parseStyle, - - /** - * To trigger the style change event on models I have to - * pass a new object instance - * @param {Object} prop - * @return {Object} - */ - extendStyle: function extendStyle(prop) { - return _extends({}, this.getStyle(), prop); - }, - - - /** - * Get style object - * @return {Object} - */ - getStyle: function getStyle() { - return _extends({}, this.get('style')); - }, - - - /** - * Set new style object - * @param {Object|string} prop - * @param {Object} opts - * @return {Object} Applied properties - */ - setStyle: function setStyle() { - var _this = this; - - var prop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if ((0, _underscore.isString)(prop)) { - prop = parseStyle(prop); - } - - var propOrig = this.getStyle(); - var propNew = _extends({}, prop); - this.set('style', propNew, opts); - var diff = (0, _mixins.shallowDiff)(propOrig, propNew); - (0, _underscore.keys)(diff).forEach(function (pr) { - var em = _this.em; - _this.trigger('change:style:' + pr); - if (em) { - em.trigger('styleable:change', _this, pr); - em.trigger('styleable:change:' + pr, _this, pr); - } - }); - - return propNew; - }, - - - /** - * Add style property - * @param {Object|string} prop - * @param {string} value - * @example - * this.addStyle({color: 'red'}); - * this.addStyle('color', 'blue'); - */ - addStyle: function addStyle(prop) { - var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - if (typeof prop == 'string') { - prop = { - prop: value - }; - } else { - opts = value || {}; - } - - prop = this.extendStyle(prop); - this.setStyle(prop, opts); - }, - - - /** - * Remove style property - * @param {string} prop - */ - removeStyle: function removeStyle(prop) { - var style = this.getStyle(); - delete style[prop]; - this.setStyle(style); - }, - - - /** - * Returns string of style properties - * @param {Object} [opts={}] Options - * @return {String} - */ - styleToString: function styleToString() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var result = []; - var style = this.getStyle(); - - for (var prop in style) { - var imp = opts.important; - var important = (0, _underscore.isArray)(imp) ? imp.indexOf(prop) >= 0 : imp; - var value = '' + style[prop] + (important ? ' !important' : ''); - result.push(prop + ':' + value + ';'); - } - - return result.join(''); - } -}; - -/***/ }), -/* 49 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = __webpack_require__(0).View.extend({ - tagName: 'style', - - initialize: function initialize() { - var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - this.config = o.config || {}; - var model = this.model; - var toTrack = 'change:style change:state change:mediaText'; - this.listenTo(model, toTrack, this.render); - this.listenTo(model, 'destroy remove', this.remove); - this.listenTo(model.get('selectors'), 'change', this.render); - }, - render: function render() { - var model = this.model; - var important = model.get('important'); - this.el.innerHTML = this.model.toCSS({ important: important }); - return this; - } -}); - -/***/ }), -/* 50 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var Backbone = __webpack_require__(0); - -module.exports = Backbone.View.extend({ - // Default view - itemView: '', - - // Defines the View per type - itemsView: '', - - itemType: 'type', - - initialize: function initialize(opts, config) { - this.config = config || {}; - }, - - - /** - * Add new model to the collection - * @param {Model} model - * @private - * */ - addTo: function addTo(model) { - this.add(model); - }, - - - /** - * Render new model inside the view - * @param {Model} model - * @param {Object} fragment Fragment collection - * @private - * */ - add: function add(model, fragment) { - var frag = fragment || null; - var itemView = this.itemView; - var typeField = model.get(this.itemType); - if (this.itemsView && this.itemsView[typeField]) { - itemView = this.itemsView[typeField]; - } - var view = new itemView({ - model: model, - config: this.config - }, this.config); - var rendered = view.render().el; - - if (frag) frag.appendChild(rendered);else this.$el.append(rendered); - }, - render: function render() { - var frag = document.createDocumentFragment(); - this.$el.empty(); - - if (this.collection.length) this.collection.each(function (model) { - this.add(model, frag); - }, this); - - this.$el.append(frag); - return this; - } -}); - -/***/ }), -/* 51 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _underscore = __webpack_require__(1); - -var Backbone = __webpack_require__(0); - -module.exports = Backbone.Collection.extend({ - initialize: function initialize(models) { - var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - this.listenTo(this, 'add', this.onAdd); - this.config = opt.config; - this.em = opt.em; - - this.model = function (attrs, options) { - var model; - var df = opt.componentTypes; - options.em = opt.em; - options.config = opt.config; - options.componentTypes = df; - - for (var it = 0; it < df.length; it++) { - var dfId = df[it].id; - if (dfId == attrs.type) { - model = df[it].model; - break; - } - } - - if (!model) { - // get the last one - model = df[df.length - 1].model; - } - - return new model(attrs, options); - }; - }, - add: function add(models) { - var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (typeof models === 'string') { - var cssc = this.em.get('CssComposer'); - var parsed = this.em.get('Parser').parseHtml(models); - models = parsed.html; - - if (parsed.css && cssc) { - var avoidUpdateStyle = opt.avoidUpdateStyle; - - var added = cssc.addCollection(parsed.css, { - extend: 1, - avoidUpdateStyle: avoidUpdateStyle - }); - } - } - - return Backbone.Collection.prototype.add.apply(this, [models, opt]); - }, - onAdd: function onAdd(model, c, opts) { - var em = this.em; - var style = model.getStyle(); - var avoidInline = em && em.getConfig('avoidInlineStyle'); - - if (!(0, _underscore.isEmpty)(style) && !avoidInline && em && em.get && em.getConfig('forceClass')) { - var name = model.cid; - var rule = em.get('CssComposer').setClassRule(name, style); - model.setStyle({}); - model.addClass(name); - } - } -}); - -/***/ }), -/* 52 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -var _underscore = __webpack_require__(1); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = _backbone2.default.View.extend({ - initialize: function initialize(o) { - this.opts = o || {}; - this.config = o.config || {}; - var coll = this.collection; - this.listenTo(coll, 'add', this.addTo); - this.listenTo(coll, 'reset', this.resetChildren); - this.listenTo(coll, 'remove', this.removeChildren); - }, - removeChildren: function removeChildren(removed) { - var em = this.config.em; - var view = removed.view; - if (!view) return; - view.remove.apply(view); - var children = view.childrenView; - children && children.stopListening(); - em && em.trigger('component:remove', removed); - }, - - - /** - * Add to collection - * @param {Model} model - * @param {Collection} coll - * @param {Object} opts - * @private - * */ - addTo: function addTo(model) { - var coll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - var em = this.config.em; - var i = this.collection.indexOf(model); - this.addToCollection(model, null, i); - - if (em && !opts.temporary) { - em.trigger('component:add', model); - } - }, - - - /** - * Add new object to collection - * @param {Object} Model - * @param {Object} Fragment collection - * @param {Integer} Index of append - * - * @return {Object} Object rendered - * @private - * */ - addToCollection: function addToCollection(model, fragmentEl, index) { - if (!this.compView) this.compView = __webpack_require__(3); - var fragment = fragmentEl || null, - viewObject = this.compView; - - var dt = this.opts.componentTypes; - - var type = model.get('type'); - - for (var it = 0; it < dt.length; it++) { - var dtId = dt[it].id; - if (dtId == type) { - viewObject = dt[it].view; - break; - } - } - //viewObject = dt[type] ? dt[type].view : dt.default.view; - - var view = new viewObject({ - model: model, - config: this.config, - componentTypes: dt - }); - var rendered = view.render().el; - if (view.model.get('type') == 'textnode') rendered = document.createTextNode(view.model.get('content')); - - if (fragment) { - fragment.appendChild(rendered); - } else { - var parent = this.parentEl; - var children = parent.childNodes; - - if (!(0, _underscore.isUndefined)(index)) { - var lastIndex = children.length == index; - - // If the added model is the last of collection - // need to change the logic of append - if (lastIndex) { - index--; - } - - // In case the added is new in the collection index will be -1 - if (lastIndex || !children.length) { - parent.appendChild(rendered); - } else { - parent.insertBefore(rendered, children[index]); - } - } else { - parent.appendChild(rendered); - } - } - - return rendered; - }, - resetChildren: function resetChildren() { - var _this = this; - - this.parentEl.innerHTML = ''; - this.collection.each(function (model) { - return _this.addToCollection(model); - }); - }, - render: function render(parent) { - var _this2 = this; - - var el = this.el; - var frag = document.createDocumentFragment(); - this.parentEl = parent || this.el; - this.collection.each(function (model) { - return _this2.addToCollection(model, frag); - }); - el.innerHTML = ''; - el.appendChild(frag); - return this; - } -}); - -/***/ }), -/* 53 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var Backbone = __webpack_require__(0); -var ComponentView = __webpack_require__(54); - -module.exports = ComponentView.extend({ - render: function render() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - ComponentView.prototype.render.apply(this, args); - - // I need capturing instead of bubbling as bubbled clicks from other - // children will execute the link event - this.el.addEventListener('click', this.prevDef, true); - - return this; - } -}); - -/***/ }), -/* 54 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _mixins = __webpack_require__(2); - -var ComponentView = __webpack_require__(3); - -module.exports = ComponentView.extend({ - events: { - dblclick: 'enableEditing', - input: 'onInput' - }, - - initialize: function initialize(o) { - ComponentView.prototype.initialize.apply(this, arguments); - this.disableEditing = this.disableEditing.bind(this); - var model = this.model; - var em = this.em; - this.listenTo(model, 'focus active', this.enableEditing); - this.listenTo(model, 'change:content', this.updateContent); - this.rte = em && em.get('RichTextEditor'); - }, - - - /** - * Enable element content editing - * @private - * */ - enableEditing: function enableEditing(e) { - e && e.stopPropagation && e.stopPropagation(); - var rte = this.rte; - - if (this.rteEnabled || !this.model.get('editable')) { - return; - } - - if (rte) { - try { - this.activeRte = rte.enable(this, this.activeRte); - } catch (err) { - console.error(err); - } - } - - this.rteEnabled = 1; - this.toggleEvents(1); - }, - - - /** - * Disable element content editing - * @private - * */ - disableEditing: function disableEditing() { - var model = this.model; - var editable = model.get('editable'); - var rte = this.rte; - - if (rte && editable) { - try { - rte.disable(this, this.activeRte); - } catch (err) { - console.error(err); - } - - var content = this.getChildrenContainer().innerHTML; - var comps = model.get('components'); - comps.length && comps.reset(); - model.set('content', ''); - - // If there is a custom RTE the content is just baked staticly - // inside 'content' - if (rte.customRte) { - // Avoid double content by removing its children components - // and force to trigger change - model.set('content', content); - } else { - var clean = function clean(model) { - model.set({ - editable: 0, - highlightable: 0, - removable: 0, - draggable: 0, - copyable: 0, - toolbar: '' - }); - model.get('components').each(function (model) { - return clean(model); - }); - }; - - // Avoid re-render on reset with silent option - model.trigger('change:content', model); - comps.add(content); - comps.each(function (model) { - return clean(model); - }); - comps.trigger('resetNavigator'); - } - } - - this.rteEnabled = 0; - this.toggleEvents(); - }, - - - /** - * Callback on input event - * @param {Event} e - */ - onInput: function onInput(e) { - var em = this.em; - - // Update toolbars - - em && em.trigger('change:canvasOffset'); - }, - - - /** - * Isolate disable propagation method - * @param {Event} - * @private - * */ - disablePropagation: function disablePropagation(e) { - e.stopPropagation(); - }, - - - /** - * Enable/Disable events - * @param {Boolean} enable - */ - toggleEvents: function toggleEvents(enable) { - var method = enable ? 'on' : 'off'; - var mixins = { on: _mixins.on, off: _mixins.off }; - this.em.setEditing(enable); - - // The ownerDocument is from the frame - var elDocs = [this.el.ownerDocument, document]; - mixins.off(elDocs, 'mousedown', this.disableEditing); - mixins[method](elDocs, 'mousedown', this.disableEditing); - - // Avoid closing edit mode on component click - this.$el.off('mousedown', this.disablePropagation); - this.$el[method]('mousedown', this.disablePropagation); - } -}); - -/***/ }), -/* 55 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _config = __webpack_require__(181); - -var _config2 = _interopRequireDefault(_config); - -var _ItemView = __webpack_require__(56); - -var _ItemView2 = _interopRequireDefault(_ItemView); - -var _underscore = __webpack_require__(1); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = function () { - var em = void 0; - var layers = void 0; - var config = {}; - - return { - name: 'LayerManager', - - init: function init() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - config = _extends({}, _config2.default, opts); - config.stylePrefix = opts.pStylePrefix; - em = config.em; - - return this; - }, - getConfig: function getConfig() { - return config; - }, - onLoad: function onLoad() { - layers = new _ItemView2.default({ - level: 0, - config: config, - opened: config.opened || {}, - model: em.get('DomComponents').getWrapper() - }); - em && em.on('component:selected', this.componentChanged); - this.componentChanged(); - }, - postRender: function postRender() { - var elTo = config.appendTo; - var root = config.root; - root && this.setRoot(root); - - if (elTo) { - var el = (0, _underscore.isElement)(elTo) ? elTo : document.querySelector(elTo); - el.appendChild(this.render()); - } - }, - - - /** - * Set new root for layers - * @param {HTMLElement|Component|String} el Component to be set as the root - * @return {self} - */ - setRoot: function setRoot(el) { - layers.setRoot(el); - return this; - }, - - - /** - * Get the root of layers - * @return {Component} - */ - getRoot: function getRoot() { - return layers.model; - }, - - - /** - * Return the view of layers - * @return {View} - */ - getAll: function getAll() { - return layers; - }, - - - /** - * Triggered when the selected component is changed - * @private - */ - componentChanged: function componentChanged(selected) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (opts.fromLayers) return; - var opened = em.get('opened'); - var model = em.getSelected(); - var scroll = config.scrollLayers; - var parent = model && model.collection ? model.collection.parent : null; - for (var cid in opened) { - opened[cid].set('open', 0); - }while (parent) { - parent.set('open', 1); - opened[parent.cid] = parent; - parent = parent.collection ? parent.collection.parent : null; - } - - if (model && scroll) { - var el = model.viewLayer && model.viewLayer.el; - el && el.scrollIntoView(scroll); - } - }, - render: function render() { - return layers.render().el; - } - }; -}; - -/***/ }), -/* 56 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _underscore = __webpack_require__(1); - -var _mixins = __webpack_require__(2); - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var ComponentView = __webpack_require__(3); -var inputProp = 'contentEditable'; -var $ = _backbone2.default.$; -var ItemsView = void 0; - -module.exports = _backbone2.default.View.extend({ - events: { - 'mousedown [data-toggle-move]': 'startSort', - 'click [data-toggle-visible]': 'toggleVisibility', - 'click [data-toggle-select]': 'handleSelect', - 'mouseover [data-toggle-select]': 'handleHover', - 'click [data-toggle-open]': 'toggleOpening', - 'dblclick [data-name]': 'handleEdit', - 'focusout [data-name]': 'handleEditEnd' - }, - - template: function template(model) { - var pfx = this.pfx; - var ppfx = this.ppfx; - var hidable = this.config.hidable; - var count = this.countChildren(model); - var addClass = !count ? this.clsNoChild : ''; - var clsTitle = this.clsTitle + ' ' + addClass; - var clsTitleC = this.clsTitleC + ' ' + ppfx + 'one-bg'; - var clsCaret = this.clsCaret + ' fa fa-chevron-right'; - var clsInput = this.inputNameCls + ' ' + ppfx + 'no-app'; - var level = this.level + 1; - var gut = 30 + level * 10 + 'px'; - var name = model.getName(); - - return '\n ' + (hidable ? '' : '') + '\n
    \n
    \n
    \n \n ' + model.getIcon() + '\n ' + name + '\n
    \n
    \n
    \n
    ' + (count || '') + '
    \n
    \n \n
    \n
    '; - }, - initialize: function initialize() { - var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - this.opt = o; - this.level = o.level; - this.config = o.config; - this.em = o.config.em; - this.ppfx = this.em.get('Config').stylePrefix; - this.sorter = o.sorter || ''; - this.pfx = this.config.stylePrefix; - var pfx = this.pfx; - var ppfx = this.ppfx; - var model = this.model; - var components = model.get('components'); - model.set('open', false); - this.listenTo(components, 'remove add change reset', this.checkChildren); - this.listenTo(model, 'change:status', this.updateStatus); - this.listenTo(model, 'change:open', this.updateOpening); - this.listenTo(model, 'change:style:display', this.updateVisibility); - this.className = pfx + 'layer no-select ' + ppfx + 'two-color'; - this.inputNameCls = ppfx + 'layer-name'; - this.clsTitleC = pfx + 'layer-title-c'; - this.clsTitle = pfx + 'layer-title'; - this.clsCaret = pfx + 'layer-caret'; - this.clsCount = pfx + 'layer-count'; - this.clsMove = pfx + 'layer-move'; - this.clsChildren = pfx + 'layer-children'; - this.clsNoChild = pfx + 'layer-no-chld'; - this.$el.data('model', model); - this.$el.data('collection', components); - model.viewLayer = this; - }, - getVisibilityEl: function getVisibilityEl() { - if (!this.eyeEl) { - this.eyeEl = this.$el.children('.' + this.pfx + 'layer-vis'); - } - - return this.eyeEl; - }, - updateVisibility: function updateVisibility() { - var pfx = this.pfx; - var model = this.model; - var hClass = pfx + 'layer-hidden'; - var hideIcon = 'fa-eye-slash'; - var hidden = model.getStyle().display == 'none'; - var method = hidden ? 'addClass' : 'removeClass'; - this.$el[method](hClass); - this.getVisibilityEl()[method](hideIcon); - }, - - - /** - * Toggle visibility - * @param Event - * - * @return void - * */ - toggleVisibility: function toggleVisibility(e) { - e && e.stopPropagation(); - var model = this.model; - var style = model.getStyle(); - var hidden = style.display == 'none'; - - if (hidden) { - delete style.display; - } else { - style.display = 'none'; - } - - model.setStyle(style); - }, - - - /** - * Handle the edit of the component name - */ - handleEdit: function handleEdit(e) { - e && e.stopPropagation(); - var inputEl = this.getInputName(); - inputEl[inputProp] = true; - inputEl.focus(); - }, - - - /** - * Handle with the end of editing of the component name - */ - handleEditEnd: function handleEditEnd(e) { - e && e.stopPropagation(); - var inputEl = this.getInputName(); - var name = inputEl.textContent; - inputEl[inputProp] = false; - this.model.set({ name: name }); - }, - - - /** - * Get the input containing the name of the component - * @return {HTMLElement} - */ - getInputName: function getInputName() { - if (!this.inputName) { - this.inputName = this.el.querySelector('.' + this.inputNameCls); - } - return this.inputName; - }, - - - /** - * Update item opening - * - * @return void - * */ - updateOpening: function updateOpening() { - var opened = this.opt.opened || {}; - var model = this.model; - var chvDown = 'fa-chevron-down'; - - if (model.get('open')) { - this.$el.addClass('open'); - this.getCaret().addClass(chvDown); - opened[model.cid] = model; - } else { - this.$el.removeClass('open'); - this.getCaret().removeClass(chvDown); - delete opened[model.cid]; - } - }, - - - /** - * Toggle item opening - * @param {Object} e - * - * @return void - * */ - toggleOpening: function toggleOpening(e) { - e.stopPropagation(); - - if (!this.model.get('components').length) return; - - this.model.set('open', !this.model.get('open')); - }, - - - /** - * Handle component selection - */ - handleSelect: function handleSelect(e) { - e.stopPropagation(); - var em = this.em, - config = this.config; - - - if (em) { - var model = this.model; - em.setSelected(model, { fromLayers: 1 }); - var scroll = config.scrollCanvas; - scroll && em.get('Canvas').scrollTo(model, scroll); - } - }, - - - /** - * Handle component selection - */ - handleHover: function handleHover(e) { - e.stopPropagation(); - var em = this.em, - config = this.config, - model = this.model; - - em && config.showHover && em.setHovered(model, { fromLayers: 1 }); - }, - - - /** - * Delegate to sorter - * @param Event - * */ - startSort: function startSort(e) { - e.stopPropagation(); - var sorter = this.sorter; - // Right or middel click - if (e.button !== 0) return; - sorter && sorter.startSort(e.target); - }, - - - /** - * Freeze item - * @return void - * */ - freeze: function freeze() { - this.$el.addClass(this.pfx + 'opac50'); - this.model.set('open', 0); - }, - - - /** - * Unfreeze item - * @return void - * */ - unfreeze: function unfreeze() { - this.$el.removeClass(this.pfx + 'opac50'); - }, - - - /** - * Update item on status change - * @param Event - * */ - updateStatus: function updateStatus(e) { - ComponentView.prototype.updateStatus.apply(this, [{ - avoidHover: !this.config.highlightHover - }]); - }, - - - /** - * Check if component is visible - * - * @return bool - * */ - isVisible: function isVisible() { - var css = this.model.get('style'), - pr = css.display; - if (pr && pr == 'none') return; - return 1; - }, - - - /** - * Update item aspect after children changes - * - * @return void - * */ - checkChildren: function checkChildren() { - var model = this.model; - var c = this.countChildren(model); - var pfx = this.pfx; - var noChildCls = this.clsNoChild; - var title = this.$el.children('.' + this.clsTitleC).children('.' + this.clsTitle); - - if (!this.cnt) { - this.cnt = this.$el.children('.' + this.clsCount); - } - - if (c) { - title.removeClass(noChildCls); - this.cnt.html(c); - } else { - title.addClass(noChildCls); - this.cnt.empty(); - model.set('open', 0); - } - }, - - - /** - * Count children inside model - * @param {Object} model - * @return {number} - * @private - */ - countChildren: function countChildren(model) { - var count = 0; - model.get('components').each(function (m) { - var isCountable = this.opt.isCountable; - var hide = this.config.hideTextnode; - if (isCountable && !isCountable(m, hide)) return; - count++; - }, this); - return count; - }, - getCaret: function getCaret() { - if (!this.caret || !this.caret.length) { - var pfx = this.pfx; - this.caret = this.$el.children('.' + this.clsTitleC).find('.' + this.clsCaret); - } - - return this.caret; - }, - setRoot: function setRoot(el) { - el = (0, _underscore.isString)(el) ? this.em.getWrapper().find(el)[0] : el; - var model = (0, _mixins.getModel)(el, $); - if (!model) return; - this.stopListening(); - this.model = model; - this.initialize(this.opt); - this.render(); - }, - render: function render() { - var model = this.model; - var pfx = this.pfx; - var vis = this.isVisible(); - var el = this.$el.empty(); - var level = this.level + 1; - - if ((0, _underscore.isUndefined)(ItemsView)) { - ItemsView = __webpack_require__(182); - } - - var children = new ItemsView({ - collection: model.get('components'), - config: this.config, - sorter: this.sorter, - opened: this.opt.opened, - parent: model, - level: level - }).render().$el; - - if (!this.config.showWrapper && level === 1) { - el.append(children); - } else { - el.html(this.template(model)); - el.find('.' + this.clsChildren).append(children); - } - - if (!model.get('draggable') || !this.config.sortable) { - el.children('.' + this.clsMove).remove(); - } - - !vis && (this.className += ' ' + pfx + 'hide'); - el.attr('class', this.className); - this.updateOpening(); - this.updateStatus(); - this.updateVisibility(); - return this; - } -}); - -/***/ }), -/* 57 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var $ = _backbone2.default.$; - -module.exports = { - /** - * Start select position event - * @param {HTMLElement} trg - * @private - * */ - startSelectPosition: function startSelectPosition(trg, doc) { - this.isPointed = false; - var utils = this.editorModel.get('Utils'); - if (utils && !this.sorter) this.sorter = new utils.Sorter({ - container: this.getCanvasBody(), - placer: this.canvas.getPlacerEl(), - containerSel: '*', - itemSel: '*', - pfx: this.ppfx, - direction: 'a', - document: doc, - wmargin: 1, - nested: 1, - em: this.editorModel, - canvasRelative: 1 - }); - trg && this.sorter.startSort(trg); - }, - - - /** - * Get frame position - * @return {Object} - * @private - */ - getOffsetDim: function getOffsetDim() { - var frameOff = this.offset(this.canvas.getFrameEl()); - var canvasOff = this.offset(this.canvas.getElement()); - var top = frameOff.top - canvasOff.top; - var left = frameOff.left - canvasOff.left; - return { top: top, left: left }; - }, - - - /** - * Stop select position event - * @private - * */ - stopSelectPosition: function stopSelectPosition() { - this.posTargetCollection = null; - this.posIndex = this.posMethod == 'after' && this.cDim.length !== 0 ? this.posIndex + 1 : this.posIndex; //Normalize - if (this.sorter) { - this.sorter.moved = 0; - this.sorter.endMove(); - } - if (this.cDim) { - this.posIsLastEl = this.cDim.length !== 0 && this.posMethod == 'after' && this.posIndex == this.cDim.length; - this.posTargetEl = this.cDim.length === 0 ? $(this.outsideElem) : !this.posIsLastEl && this.cDim[this.posIndex] ? $(this.cDim[this.posIndex][5]).parent() : $(this.outsideElem); - this.posTargetModel = this.posTargetEl.data('model'); - this.posTargetCollection = this.posTargetEl.data('model-comp'); - } - }, - - - /** - * Enabel select position - * @private - */ - enable: function enable() { - this.startSelectPosition(); - }, - - - /** - * Check if the pointer is near to the float component - * @param {number} index - * @param {string} method - * @param {Array} dims - * @return {Boolean} - * @private - * */ - nearFloat: function nearFloat(index, method, dims) { - var i = index || 0; - var m = method || 'before'; - var len = dims.length; - var isLast = len !== 0 && m == 'after' && i == len; - if (len !== 0 && (!isLast && !dims[i][4] || dims[i - 1] && !dims[i - 1][4] || isLast && !dims[i - 1][4])) return 1; - return 0; - }, - run: function run() { - this.enable(); - }, - stop: function stop() { - this.stopSelectPosition(); - this.$wrapper.css('cursor', ''); - this.$wrapper.unbind(); - } -}; - -/***/ }), -/* 58 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _underscore = __webpack_require__(1); - -var _underscore2 = _interopRequireDefault(_underscore); - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var CreateComponent = __webpack_require__(23); - -module.exports = _underscore2.default.extend({}, CreateComponent, { - init: function init() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - CreateComponent.init.apply(this, args); - _underscore2.default.bindAll(this, 'insertComponent'); - this.allowDraw = 0; - }, - - - /** - * Run method - * @private - * */ - run: function run(em, sender, options) { - this.em = em; - this.sender = sender; - this.opt = options || {}; - this.$wr = this.$wrapper; - this.enable(); - }, - enable: function enable() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - CreateComponent.enable.apply(this, args); - this.$wr.on('click', this.insertComponent); - }, - - - /** - * Start insert event - * @private - * */ - insertComponent: function insertComponent() { - this.$wr.off('click', this.insertComponent); - this.stopSelectPosition(); - var object = this.buildContent(); - this.beforeInsert(object); - var index = this.sorter.lastPos.index; - // By default, collections do not trigger add event, so silent is used - var model = this.create(this.sorter.target, object, index, null, { - silent: false - }); - - if (this.opt.terminateAfterInsert && this.sender) this.sender.set('active', false);else this.enable(); - - if (!model) return; - - this.afterInsert(model, this); - }, - - - /** - * Trigger before insert - * @param {Object} obj - * @private - * */ - beforeInsert: function beforeInsert(obj) {}, - - - /** - * Trigger after insert - * @param {Object} model Model created after insert - * @private - * */ - afterInsert: function afterInsert(model) {}, - - - /** - * Create different object, based on content, to insert inside canvas - * - * @return {Object} - * @private - * */ - buildContent: function buildContent() { - return this.opt.content || {}; - } -}); - -/***/ }), -/* 59 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = _backbone2.default.Model.extend({ - defaults: { - id: '', - label: '', - open: true, - attributes: {} - } -}); - -/***/ }), -/* 60 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _cashDom = __webpack_require__(10); - -var _cashDom2 = _interopRequireDefault(_cashDom); - -var _editor = __webpack_require__(61); - -var _editor2 = _interopRequireDefault(_editor); - -var _underscore = __webpack_require__(1); - -var _polyfills = __webpack_require__(230); - -var _polyfills2 = _interopRequireDefault(_polyfills); - -var _plugin_manager = __webpack_require__(231); - -var _plugin_manager2 = _interopRequireDefault(_plugin_manager); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _polyfills2.default)(); - -module.exports = function () { - var plugins = new _plugin_manager2.default(); - var editors = []; - var defaultConfig = { - // If true renders editor on init - autorender: 1, - - // Array of plugins to init - plugins: [], - - // Custom options for plugins - pluginsOpts: {} - }; - - return { - $: _cashDom2.default, - - editors: editors, - - plugins: plugins, - - // Will be replaced on build - version: '0.14.21', - - /** - * Initializes an editor based on passed options - * @param {Object} config Configuration object - * @param {string|HTMLElement} config.container Selector which indicates where render the editor - * @param {Boolean} [config.autorender=true] If true, auto-render the content - * @param {Array} [config.plugins=[]] Array of plugins to execute on start - * @param {Object} [config.pluginsOpts={}] Custom options for plugins - * @return {Editor} Editor instance - * @example - * var editor = grapesjs.init({ - * container: '#myeditor', - * components: '
    Hello world
    ', - * style: '.hello{color: red}', - * }) - */ - init: function init() { - var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var els = config.container; - if (!els) throw new Error("'container' is required"); - config = _extends({}, defaultConfig, config); - config.el = (0, _underscore.isElement)(els) ? els : document.querySelector(els); - var editor = new _editor2.default(config).init(); - - // Load plugins - config.plugins.forEach(function (pluginId) { - var plugin = plugins.get(pluginId); - - if (plugin) { - plugin(editor, config.pluginsOpts[pluginId] || {}); - } else { - console.warn('Plugin ' + pluginId + ' not found'); - } - }); - - // Execute `onLoad` on modules once all plugins are initialized. - // A plugin might have extended/added some custom type so this - // is a good point to load stuff like components, css rules, etc. - editor.getModel().loadOnStart(); - config.autorender && editor.render(); - editors.push(editor); - - return editor; - } - }; -}(); - -/***/ }), -/* 61 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _cashDom = __webpack_require__(10); - -var _cashDom2 = _interopRequireDefault(_cashDom); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = function (config) { - var c = config || {}, - defaults = __webpack_require__(62), - EditorModel = __webpack_require__(63), - EditorView = __webpack_require__(229); - - for (var name in defaults) { - if (!(name in c)) c[name] = defaults[name]; - } - - c.pStylePrefix = c.stylePrefix; - var em = new EditorModel(c); - var editorView = new EditorView({ - model: em, - config: c - }); - - return { - $: _cashDom2.default, - - /** - * @property {EditorModel} - * @private - */ - editor: em, - - /** - * @property {DomComponents} - * @private - */ - DomComponents: em.get('DomComponents'), - - /** - * @property {LayerManager} - * @private - */ - LayerManager: em.get('LayerManager'), - - /** - * @property {CssComposer} - * @private - */ - CssComposer: em.get('CssComposer'), - - /** - * @property {StorageManager} - * @private - */ - StorageManager: em.get('StorageManager'), - - /** - * @property {AssetManager} - */ - AssetManager: em.get('AssetManager'), - - /** - * @property {BlockManager} - * @private - */ - BlockManager: em.get('BlockManager'), - - /** - * @property {TraitManager} - * @private - */ - TraitManager: em.get('TraitManager'), - - /** - * @property {SelectorManager} - * @private - */ - SelectorManager: em.get('SelectorManager'), - - /** - * @property {CodeManager} - * @private - */ - CodeManager: em.get('CodeManager'), - - /** - * @property {Commands} - * @private - */ - Commands: em.get('Commands'), - - /** - * @property {Keymaps} - * @private - */ - Keymaps: em.get('Keymaps'), - - /** - * @property {Modal} - * @private - */ - Modal: em.get('Modal'), - - /** - * @property {Panels} - * @private - */ - Panels: em.get('Panels'), - - /** - * @property {StyleManager} - * @private - */ - StyleManager: em.get('StyleManager'), - - /** - * @property {Canvas} - * @private - */ - Canvas: em.get('Canvas'), - - /** - * @property {UndoManager} - * @private - */ - UndoManager: em.get('UndoManager'), - - /** - * @property {DeviceManager} - * @private - */ - DeviceManager: em.get('DeviceManager'), - - /** - * @property {RichTextEditor} - * @private - */ - RichTextEditor: em.get('RichTextEditor'), - - /** - * @property {Utils} - * @private - */ - Utils: em.get('Utils'), - - /** - * @property {Utils} - * @private - */ - Config: em.get('Config'), - - /** - * Initialize editor model - * @return {this} - * @private - */ - init: function init() { - em.init(this); - return this; - }, - - - /** - * Returns configuration object - * @param {string} [prop] Property name - * @return {any} Returns the configuration object or - * the value of the specified property - */ - getConfig: function getConfig(prop) { - return em.getConfig(prop); - }, - - - /** - * Returns HTML built inside canvas - * @return {string} HTML string - */ - getHtml: function getHtml(opts) { - return em.getHtml(opts); - }, - - - /** - * Returns CSS built inside canvas - * @param {Object} [opts={}] Options - * @return {string} CSS string - */ - getCss: function getCss(opts) { - return em.getCss(opts); - }, - - - /** - * Returns JS of all components - * @return {string} JS string - */ - getJs: function getJs() { - return em.getJs(); - }, - - - /** - * Returns components in JSON format object - * @return {Object} - */ - getComponents: function getComponents() { - return em.get('DomComponents').getComponents(); - }, - - - /** - * Set components inside editor's canvas. This method overrides actual components - * @param {Array|Object|string} components HTML string or components model - * @return {this} - * @example - * editor.setComponents('
    New component
    '); - * // or - * editor.setComponents({ - * type: 'text', - * classes:['cls'], - * content: 'New component' - * }); - */ - setComponents: function setComponents(components) { - em.setComponents(components); - return this; - }, - - - /** - * Add components - * @param {Array|Object|string} components HTML string or components model - * @param {Object} opts Options - * @param {Boolean} [opts.avoidUpdateStyle=false] If the HTML string contains styles, - * by default, they will be created and, if already exist, updated. When this option - * is true, styles already created will not be updated. - * @return {Model|Array} - * @example - * editor.addComponents('
    New component
    '); - * // or - * editor.addComponents({ - * type: 'text', - * classes:['cls'], - * content: 'New component' - * }); - */ - addComponents: function addComponents(components, opts) { - return this.getComponents().add(components, opts); - }, - - - /** - * Returns style in JSON format object - * @return {Object} - */ - getStyle: function getStyle() { - return em.get('CssComposer').getAll(); - }, - - - /** - * Set style inside editor's canvas. This method overrides actual style - * @param {Array|Object|string} style CSS string or style model - * @return {this} - * @example - * editor.setStyle('.cls{color: red}'); - * //or - * editor.setStyle({ - * selectors: ['cls'] - * style: { color: 'red' } - * }); - */ - setStyle: function setStyle(style) { - em.setStyle(style); - return this; - }, - - - /** - * Returns the last selected component, if there is one - * @return {Model} - */ - getSelected: function getSelected() { - return em.getSelected(); - }, - - - /** - * Returns an array of all selected components - * @return {Array} - */ - getSelectedAll: function getSelectedAll() { - return em.getSelectedAll(); - }, - - - /** - * Get a stylable entity from the selected component. - * If you select a component without classes the entity is the Component - * itself and all changes will go inside its 'style' attribute. Otherwise, - * if the selected component has one or more classes, the function will - * return the corresponding CSS Rule - * @return {Model} - */ - getSelectedToStyle: function getSelectedToStyle() { - var selected = em.getSelected(); - - if (selected) { - return this.StyleManager.getModelToStyle(selected); - } - }, - - - /** - * Select a component - * @param {Component|HTMLElement} el Component to select - * @return {this} - * @example - * // Select dropped block - * editor.on('block:drag:stop', function(model) { - * editor.select(model); - * }); - */ - select: function select(el) { - em.setSelected(el); - return this; - }, - - - /** - * Add component to selection - * @param {Component|HTMLElement|Array} el Component to select - * @return {this} - * @example - * editor.selectAdd(model); - */ - selectAdd: function selectAdd(el) { - em.addSelected(el); - return this; - }, - - - /** - * Remove component from selection - * @param {Component|HTMLElement|Array} el Component to select - * @return {this} - * @example - * editor.selectRemove(model); - */ - selectRemove: function selectRemove(el) { - em.removeSelected(el); - return this; - }, - - - /** - * Toggle component selection - * @param {Component|HTMLElement|Array} el Component to select - * @return {this} - * @example - * editor.selectToggle(model); - */ - selectToggle: function selectToggle(el) { - em.toggleSelected(el); - return this; - }, - - - /** - * Set device to the editor. If the device exists it will - * change the canvas to the proper width - * @param {string} name Name of the device - * @return {this} - * @example - * editor.setDevice('Tablet'); - */ - setDevice: function setDevice(name) { - em.set('device', name); - return this; - }, - - - /** - * Return the actual active device - * @return {string} Device name - * @example - * var device = editor.getDevice(); - * console.log(device); - * // 'Tablet' - */ - getDevice: function getDevice() { - return em.get('device'); - }, - - - /** - * Execute command - * @param {string} id Command ID - * @param {Object} options Custom options - * @return {*} The return is defined by the command - * @example - * editor.runCommand('myCommand', {someValue: 1}); - */ - runCommand: function runCommand(id) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var result = void 0; - var command = em.get('Commands').get(id); - if (command) result = command.callRun(this, options); - - return result; - }, - - - /** - * Stop the command if stop method was provided - * @param {string} id Command ID - * @param {Object} options Custom options - * @return {*} The return is defined by the command - * @example - * editor.stopCommand('myCommand', {someValue: 1}); - */ - stopCommand: function stopCommand(id) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var result = void 0; - var command = em.get('Commands').get(id); - if (command) result = command.callStop(this, options); - - return result; - }, - - - /** - * Store data to the current storage - * @param {Function} clb Callback function - * @return {Object} Stored data - */ - store: function store(clb) { - return em.store(clb); - }, - - - /** - * Load data from the current storage - * @param {Function} clb Callback function - * @return {Object} Stored data - */ - load: function load(clb) { - return em.load(clb); - }, - - - /** - * Returns container element. The one which was indicated as 'container' - * on init method - * @return {HTMLElement} - */ - getContainer: function getContainer() { - return c.el; - }, - - - /** - * Return the count of changes made to the content and not yet stored. - * This count resets at any `store()` - * @return {number} - */ - getDirtyCount: function getDirtyCount() { - return em.getDirtyCount(); - }, - - - /** - * Update editor dimensions and refresh data useful for positioning of tools - * - * This method could be useful when you update, for example, some position - * of the editor element (eg. canvas, panels, etc.) with CSS, where without - * refresh you'll get misleading position of tools (eg. rich text editor, - * component highlighter, etc.) - * - * @private - */ - refresh: function refresh() { - em.refreshCanvas(); - }, - - - /** - * Replace the built-in Rich Text Editor with a custom one. - * @param {Object} obj Custom RTE Interface - * @example - * editor.setCustomRte({ - * // Function for enabling custom RTE - * // el is the HTMLElement of the double clicked Text Component - * // rte is the same instance you have returned the first time you call - * // enable(). This is useful if need to check if the RTE is already enabled so - * // ion this case you'll need to return the RTE and the end of the function - * enable: function(el, rte) { - * rte = new MyCustomRte(el, {}); // this depends on the Custom RTE API - * ... - * return rte; // return the RTE instance - * }, - * - * // Disable the editor, called for example when you unfocus the Text Component - * disable: function(el, rte) { - * rte.blur(); // this depends on the Custom RTE API - * } - * - * // Called when the Text Component is focused again. If you returned the RTE instance - * // from the enable function, the enable won't be called again instead will call focus, - * // in this case to avoid double binding of the editor - * focus: function (el, rte) { - * rte.focus(); // this depends on the Custom RTE API - * } - * }); - */ - setCustomRte: function setCustomRte(obj) { - this.RichTextEditor.customRte = obj; - }, - - - /** - * Attach event - * @param {string} event Event name - * @param {Function} callback Callback function - * @return {this} - */ - on: function on(event, callback) { - return em.on(event, callback); - }, - - - /** - * Detach event - * @param {string} event Event name - * @param {Function} callback Callback function - * @return {this} - */ - off: function off(event, callback) { - return em.off(event, callback); - }, - - - /** - * Trigger event - * @param {string} event Event to trigger - * @return {this} - */ - trigger: function trigger(event) { - return em.trigger.apply(em, arguments); - }, - - - /** - * Destroy the editor - */ - destroy: function destroy() { - return em.destroyAll(); - }, - - - /** - * Returns editor element - * @return {HTMLElement} - * @private - */ - getEl: function getEl() { - return editorView.el; - }, - - - /** - * Returns editor model - * @return {Model} - * @private - */ - getModel: function getModel() { - return em; - }, - - - /** - * Render editor - * @return {HTMLElement} - */ - render: function render() { - var _this = this; - - // Do post render stuff after the iframe is loaded otherwise it'll - // be empty during tests - em.on('loaded', function () { - _this.UndoManager.clear(); - em.get('modules').forEach(function (module) { - module.postRender && module.postRender(editorView); - }); - }); - - editorView.render(); - return editorView.el; - } - }; -}; /** - * Editor class contains the top level API which you'll probably use to custom the editor or extend it with plugins. - * You get the Editor instance on init method - * - * ```js - * var editor = grapesjs.init({...}); - * ``` - * - * # Available Events - * - * ## Components - * * `component:add` - Triggered when a new component is added to the editor, the model is passed as an argument to the callback - * * `component:remove` - Triggered when a component is removed, the model is passed as an argument to the callback - * * `component:clone` - Triggered when a new component is added by a clone command, the model is passed as an argument to the callback - * * `component:update` - Triggered when a component is updated (moved, styled, etc.), the model is passed as an argument to the callback - * * `component:update:{propertyName}` - Listen any property change, the model is passed as an argument to the callback - * * `component:styleUpdate` - Triggered when the style of the component is updated, the model is passed as an argument to the callback - * * `component:styleUpdate:{propertyName}` - Listen for a specific style property change, the model is passed as an argument to the callback - * * `component:selected` - New component selected, the selected model is passed as an argument to the callback - * * `component:deselected` - Component deselected, the deselected model is passed as an argument to the callback - * * `component:toggled` - Component selection changed, toggled model is passed as an argument to the callback - * ## Blocks - * * `block:add` - New block added - * * `block:remove` - Block removed - * * `block:drag:start` - Started dragging block, model of the block is passed as an argument - * * `block:drag` - Dragging block, the block's model and the drag event are passed as arguments - * * `block:drag:stop` - Dragging of the block is stopped. As agruments for the callback you get, the dropped component model (if dropped successfully) and the model of the block - * ## Assets - * * `asset:add` - New asset added - * * `asset:remove` - Asset removed - * * `asset:upload:start` - Before the upload is started - * * `asset:upload:end` - After the upload is ended - * * `asset:upload:error` - On any error in upload, passes the error as an argument - * * `asset:upload:response` - On upload response, passes the result as an argument - * ## Keymaps - * * `keymap:add` - New keymap added. The new keyamp object is passed as an argument - * * `keymap:remove` - Keymap removed. The removed keyamp object is passed as an argument - * * `keymap:emit` - Some keymap emitted, in arguments you get keymapId, shortcutUsed, Event - * * `keymap:emit:{keymapId}` - `keymapId` emitted, in arguments you get keymapId, shortcutUsed, Event - * ## Style Manager - * * `styleManager:change` - Triggered on style property change from new selected component, the view of the property is passed as an argument to the callback - * * `styleManager:change:{propertyName}` - As above but for a specific style property - * ## Storages - * * `storage:start` - Before the storage request is started - * * `storage:start:store` - Before the store request. The object to store is passed as an argumnet (which you can edit) - * * `storage:start:load` - Before the load request. Items to load are passed as an argumnet (which you can edit) - * * `storage:load` - Triggered when something was loaded from the storage, loaded object passed as an argumnet - * * `storage:store` - Triggered when something is stored to the storage, stored object passed as an argumnet - * * `storage:end` - After the storage request is ended - * * `storage:end:store` - After the store request - * * `storage:end:load` - After the load request - * * `storage:error` - On any error on storage request, passes the error as an argument - * * `storage:error:store` - Error on store request, passes the error as an argument - * * `storage:error:load` - Error on load request, passes the error as an argument - * ## Canvas - * * `canvas:dragenter` - When something is dragged inside the canvas, `DataTransfer` instance passed as an argument - * * `canvas:dragover` - When something is dragging on canvas, `DataTransfer` instance passed as an argument - * * `canvas:drop` - Something is dropped in canvas, `DataTransfer` instance and the dropped model are passed as arguments - * * `canvas:dragend` - When a drag operation is ended, `DataTransfer` instance passed as an argument - * * `canvas:dragdata` - On any dataTransfer parse, `DataTransfer` instance and the `result` are passed as arguments. - * By changing `result.content` you're able to customize what is dropped - * ## Selectors - * * `selector:add` - Triggers when a new selector/class is created - * ## RTE - * * `rte:enable` - RTE enabled. The view, on which RTE is enabled, is passed as an argument - * * `rte:disable` - RTE disabled. The view, on which RTE is disabled, is passed as an argument - * ## Commands - * * `run:{commandName}` - Triggered when some command is called to run (eg. editor.runCommand('preview')) - * * `stop:{commandName}` - Triggered when some command is called to stop (eg. editor.stopCommand('preview')) - * * `run:{commandName}:before` - Triggered before the command is called - * * `stop:{commandName}:before` - Triggered before the command is called to stop - * * `abort:{commandName}` - Triggered when the command execution is aborted (`editor.on(`run:preview:before`, opts => opts.abort = 1);`) - * ## General - * * `canvasScroll` - Triggered when the canvas is scrolle - * * `undo` - Undo executed - * * `redo` - Redo executed - * * `load` - When the editor is loaded - * - * @param {Object} config Configurations - * @param {string} config.container='' Selector for the editor container, eg. '#myEditor' - * @param {string|Array} [config.components=''] HTML string or object of components - * @param {string|Array} [config.style=''] CSS string or object of rules - * @param {Boolean} [config.fromElement=false] If true, will fetch HTML and CSS from selected container - * @param {Boolean} [config.undoManager=true] Enable/Disable undo manager - * @param {Boolean} [config.autorender=true] If true renders editor on init - * @param {Boolean} [config.noticeOnUnload=true] Enable/Disable alert message before unload the page - * @param {string} [config.height='900px'] Height for the editor container - * @param {string} [config.width='100%'] Width for the editor container - * @param {Object} [config.storage={}] Storage manager configuration, see the relative documentation - * @param {Object} [config.styleManager={}] Style manager configuration, see the relative documentation - * @param {Object} [config.commands={}] Commands configuration, see the relative documentation - * @param {Object} [config.domComponents={}] Components configuration, see the relative documentation - * @param {Object} [config.panels={}] Panels configuration, see the relative documentation - * @param {Object} [config.showDevices=true] If true render a select of available devices inside style manager panel - * @param {Boolean} [config.keepEmptyTextNodes=false] If false, removes empty text nodes when parsed (unless they contain a space) - * @param {string} [config.defaultCommand='select-comp'] Command to execute when no other command is running - * @param {Array} [config.plugins=[]] Array of plugins to execute on start - * @param {Object} [config.pluginsOpts={}] Custom options for plugins - * @example - * var editor = grapesjs.init({ - * container : '#gjs', - * components: '
    Hello world!
    ', - * style: '.txt-red{color: red}', - * }); - */ - -/***/ }), -/* 62 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = { - // Style prefix - stylePrefix: 'gjs-', - - // HTML string or object of components - components: '', - - // CSS string or object of rules - style: '', - - // If true, will fetch HTML and CSS from selected container - fromElement: 0, - - // Show an alert before unload the page with unsaved changes - noticeOnUnload: true, - - // Show paddings and margins - showOffsets: false, - - // Show paddings and margins on selected component - showOffsetsSelected: false, - - // On creation of a new Component (via object), if the 'style' attribute is not - // empty, all those roles will be moved in its new class - forceClass: true, - - // Height for the editor container - height: '900px', - - // Width for the editor container - width: '100%', - - // By default Grapes injects base CSS into the canvas. For example, it sets body margin to 0 - // and sets a default background color of white. This CSS is desired in most cases. - // use this property if you wish to overwrite the base CSS to your own CSS. This is most - // useful if for example your template is not based off a document with 0 as body margin. - baseCss: '\n * {\n box-sizing: border-box;\n }\n html, body, #wrapper {\n min-height: 100%;\n }\n body {\n margin: 0;\n height: 100%;\n background-color: #fff\n }\n #wrapper {\n overflow: auto;\n overflow-x: hidden;\n }\n\n * ::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.1)\n }\n\n * ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.2)\n }\n\n * ::-webkit-scrollbar {\n width: 10px\n }\n ', - - // CSS that could only be seen (for instance, inside the code viewer) - protectedCss: '* { box-sizing: border-box; } body {margin: 0;}', - - // CSS for the iframe which containing the canvas, useful if you need to custom something inside - // (eg. the style of the selected component) - canvasCss: '', - - // Default command - defaultCommand: 'select-comp', - - // Show a toolbar when the component is selected - showToolbar: 1, - - // Allow script tag importing - allowScripts: 0, - - // If true render a select of available devices - showDevices: 1, - - // When enabled, on device change media rules won't be created - devicePreviewMode: 0, - - // THe condition to use for media queries, eg. 'max-width' - // Comes handy for mobile-first cases - mediaCondition: 'max-width', - - // Starting tag for variable inside scripts in Components - tagVarStart: '{[ ', - - // Ending tag for variable inside scripts in Components - tagVarEnd: ' ]}', - - // When false, removes empty text nodes when parsed, unless they contain a space - keepEmptyTextNodes: 0, - - // Return JS of components inside HTML from 'editor.getHtml()' - jsInHtml: true, - - // Enable native HTML5 drag and drop - nativeDnD: 1, - - // Enable multiple selection - multipleSelection: 1, - - // Show the wrapper component in the final code, eg. in editor.getHtml() - exportWrapper: 0, - - // The wrapper, if visible, will be shown as a `` - wrappesIsBody: 1, - - // Usually when you update the `style` of the component this changes the - // element's `style` attribute. Unfortunately, inline styling doesn't allow - // use of media queries (@media) or even pseudo selectors (eg. :hover). - // When `avoidInlineStyle` is true all styles are inserted inside the css rule - avoidInlineStyle: 0, - - // Avoid default properties from storable JSON data, like `components` and `styles`. - // With this option enabled your data will be smaller (usefull if need to - // save some storage space) - avoidDefaults: 0, - - // (experimental) - // The structure of components is always on the screen but it's not the same - // for style rules. When you delete a component you might leave a lot of styles - // which will never be used again, therefore they might be removed. - // With this option set to true, styles not used from the CSS generator (so in - // any case where `CssGenerator.build` is used) will be removed automatically. - // But be careful, not always leaving the style not used mean you wouldn't - // use it later, but this option comes really handy when deal with big templates. - clearStyles: 0, - - // Dom element - el: '', - - // Configurations for Undo Manager - undoManager: {}, - - //Configurations for Asset Manager - assetManager: {}, - - //Configurations for Canvas - canvas: {}, - - //Configurations for Layers - layers: {}, - - //Configurations for Storage Manager - storageManager: {}, - - //Configurations for Rich Text Editor - rte: {}, - - //Configurations for DomComponents - domComponents: {}, - - //Configurations for Modal Dialog - modal: {}, - - //Configurations for Code Manager - codeManager: {}, - - //Configurations for Panels - panels: {}, - - //Configurations for Commands - commands: {}, - - //Configurations for Css Composer - cssComposer: {}, - - //Configurations for Selector Manager - selectorManager: {}, - - //Configurations for Device Manager - deviceManager: { - devices: [{ - name: 'Desktop', - width: '' - }, { - name: 'Tablet', - width: '768px', - widthMedia: '992px' - }, { - name: 'Mobile landscape', - width: '568px', - widthMedia: '768px' - }, { - name: 'Mobile portrait', - width: '320px', - widthMedia: '480px' - }] - }, - - //Configurations for Style Manager - styleManager: { - sectors: [{ - name: 'General', - open: false, - buildProps: ['float', 'display', 'position', 'top', 'right', 'left', 'bottom'] - }, { - name: 'Dimension', - open: false, - buildProps: ['width', 'height', 'max-width', 'min-height', 'margin', 'padding'] - }, { - name: 'Typography', - open: false, - buildProps: ['font-family', 'font-size', 'font-weight', 'letter-spacing', 'color', 'line-height', 'text-align', 'text-shadow'], - properties: [{ - property: 'text-align', - list: [{ value: 'left', className: 'fa fa-align-left' }, { value: 'center', className: 'fa fa-align-center' }, { value: 'right', className: 'fa fa-align-right' }, { value: 'justify', className: 'fa fa-align-justify' }] - }] - }, { - name: 'Decorations', - open: false, - buildProps: ['border-radius-c', 'background-color', 'border-radius', 'border', 'box-shadow', 'background'] - }, { - name: 'Extra', - open: false, - buildProps: ['transition', 'perspective', 'transform'] - }] - }, - - // Configurations for Block Manager - blockManager: {}, - - // Configurations for Trait Manager - traitManager: {}, - - // Texts - textViewCode: 'Code', - - // Keep unused styles within the editor - keepUnusedStyles: 0 -}; - -/***/ }), -/* 63 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _underscore = __webpack_require__(1); - -var _mixins = __webpack_require__(2); - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -var deps = [__webpack_require__(65), __webpack_require__(69), __webpack_require__(70), __webpack_require__(73), __webpack_require__(82), __webpack_require__(87), __webpack_require__(90), __webpack_require__(94), __webpack_require__(98), __webpack_require__(110), __webpack_require__(117), __webpack_require__(32), __webpack_require__(134), __webpack_require__(140), __webpack_require__(145), __webpack_require__(152), __webpack_require__(55), __webpack_require__(183), __webpack_require__(190), __webpack_require__(220)]; - -var Backbone = __webpack_require__(0); -var Collection = Backbone.Collection; - -var timedInterval = void 0; - -__webpack_require__(228)({ - Backbone: Backbone, - $: Backbone.$ -}); - -var $ = Backbone.$; - -module.exports = Backbone.Model.extend({ - defaults: function defaults() { - return { - editing: 0, - selected: new Collection(), - clipboard: null, - designerMode: false, - componentHovered: null, - previousModel: null, - changesCount: 0, - storables: [], - modules: [], - toLoad: [], - opened: {}, - device: '' - }; - }, - initialize: function initialize() { - var _this = this; - - var c = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - this.config = c; - this.set('Config', c); - this.set('modules', []); - this.set('toLoad', []); - this.set('storables', []); - - if (c.el && c.fromElement) this.config.components = c.el.innerHTML; - this.attrsOrig = c.el ? [].concat(_toConsumableArray(c.el.attributes)).reduce(function (res, next) { - res[next.nodeName] = next.nodeValue; - return res; - }, {}) : ''; - - // Load modules - deps.forEach(function (name) { - return _this.loadModule(name); - }); - this.on('change:componentHovered', this.componentHovered, this); - this.on('change:changesCount', this.updateChanges, this); - - // Deprecations - [{ from: 'change:selectedComponent', to: 'component:toggled' }].forEach(function (event) { - var eventFrom = event.from; - var eventTo = event.to; - _this.listenTo(_this, eventFrom, function () { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - _this.trigger.apply(_this, [eventTo].concat(args)); - console.warn('The event \'' + eventFrom + '\' is deprecated, replace it with \'' + eventTo + '\''); - }); - }); - }, - - - /** - * Get configurations - * @param {string} [prop] Property name - * @return {any} Returns the configuration object or - * the value of the specified property - */ - getConfig: function getConfig(prop) { - var config = this.config; - return (0, _underscore.isUndefined)(prop) ? config : config[prop]; - }, - - - /** - * Should be called after all modules and plugins are loaded - * @param {Function} clb - * @private - */ - loadOnStart: function loadOnStart() { - var _this2 = this; - - var clb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - var sm = this.get('StorageManager'); - - // Generally, with `onLoad`, the module will try to load the data from - // its configurations - this.get('toLoad').forEach(function (module) { - module.onLoad(); - }); - - // Stuff to do post load - var postLoad = function postLoad() { - var modules = _this2.get('modules'); - modules.forEach(function (module) { - return module.postLoad && module.postLoad(_this2); - }); - clb && clb(); - }; - - if (sm && sm.canAutoload()) { - this.load(postLoad); - } else { - postLoad(); - } - }, - - - /** - * Set the alert before unload in case it's requested - * and there are unsaved changes - * @private - */ - updateChanges: function updateChanges() { - var stm = this.get('StorageManager'); - var changes = this.get('changesCount'); - - if (this.config.noticeOnUnload && changes) { - window.onbeforeunload = function (e) { - return 1; - }; - } else { - window.onbeforeunload = null; - } - - if (stm.isAutosave() && changes >= stm.getStepsBeforeSave()) { - this.store(); - } - }, - - - /** - * Load generic module - * @param {String} moduleName Module name - * @return {this} - * @private - */ - loadModule: function loadModule(moduleName) { - var c = this.config; - var Mod = new moduleName(); - var name = Mod.name.charAt(0).toLowerCase() + Mod.name.slice(1); - var cfg = c[name] || c[Mod.name] || {}; - cfg.pStylePrefix = c.pStylePrefix || ''; - - // Check if module is storable - var sm = this.get('StorageManager'); - - if (Mod.storageKey && Mod.store && Mod.load && sm) { - cfg.stm = sm; - var storables = this.get('storables'); - storables.push(Mod); - this.set('storables', storables); - } - - cfg.em = this; - Mod.init(_extends({}, cfg)); - - // Bind the module to the editor model if public - !Mod.private && this.set(Mod.name, Mod); - Mod.onLoad && this.get('toLoad').push(Mod); - this.get('modules').push(Mod); - return this; - }, - - - /** - * Initialize editor model and set editor instance - * @param {Editor} editor Editor instance - * @return {this} - * @private - */ - init: function init(editor) { - this.set('Editor', editor); - }, - getEditor: function getEditor() { - return this.get('Editor'); - }, - - - /** - * This method handles updates on the editor and tries to store them - * if requested and if the changesCount is exceeded - * @param {Object} model - * @param {any} val Value - * @param {Object} opt Options - * @private - * */ - handleUpdates: function handleUpdates(model, val) { - var _this3 = this; - - var opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - // Component has been added temporarily - do not update storage or record changes - if (opt.temporary) { - return; - } - - timedInterval && clearInterval(timedInterval); - timedInterval = setTimeout(function () { - if (!opt.avoidStore) { - _this3.set('changesCount', _this3.get('changesCount') + 1, opt); - } - }, 0); - }, - - - /** - * Callback on component hover - * @param {Object} Model - * @param {Mixed} New value - * @param {Object} Options - * @private - * */ - componentHovered: function componentHovered(editor, component, options) { - var prev = this.previous('componentHovered'); - prev && this.trigger('component:unhovered', prev, options); - component && this.trigger('component:hovered', component, options); - }, - - - /** - * Returns model of the selected component - * @return {Component|null} - * @private - */ - getSelected: function getSelected() { - return this.get('selected').last(); - }, - - - /** - * Returns an array of all selected components - * @return {Array} - * @private - */ - getSelectedAll: function getSelectedAll() { - return this.get('selected').models; - }, - - - /** - * Select a component - * @param {Component|HTMLElement} el Component to select - * @param {Object} [opts={}] Options, optional - * @private - */ - setSelected: function setSelected(el) { - var _this4 = this; - - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var multiple = (0, _underscore.isArray)(el); - var els = multiple ? el : [el]; - var selected = this.get('selected'); - - // If an array is passed remove all selected - // expect those yet to be selected - multiple && this.removeSelected(selected.filter(function (s) { - return !(0, _underscore.contains)(els, s); - })); - - els.forEach(function (el) { - var model = (0, _mixins.getModel)(el, $); - if (model && !model.get('selectable')) return; - !multiple && _this4.removeSelected(selected.filter(function (s) { - return s !== model; - })); - _this4.addSelected(model, opts); - }); - }, - - - /** - * Add component to selection - * @param {Component|HTMLElement} el Component to select - * @param {Object} [opts={}] Options, optional - * @private - */ - addSelected: function addSelected(el) { - var _this5 = this; - - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var model = (0, _mixins.getModel)(el, $); - var models = (0, _underscore.isArray)(model) ? model : [model]; - - models.forEach(function (model) { - if (model && !model.get('selectable')) return; - _this5.get('selected').push(model, opts); - }); - }, - - - /** - * Remove component from selection - * @param {Component|HTMLElement} el Component to select - * @param {Object} [opts={}] Options, optional - * @private - */ - removeSelected: function removeSelected(el) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - this.get('selected').remove((0, _mixins.getModel)(el, $), opts); - }, - - - /** - * Toggle component selection - * @param {Component|HTMLElement} el Component to select - * @param {Object} [opts={}] Options, optional - * @private - */ - toggleSelected: function toggleSelected(el) { - var _this6 = this; - - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var model = (0, _mixins.getModel)(el, $); - var models = (0, _underscore.isArray)(model) ? model : [model]; - - models.forEach(function (model) { - if (_this6.get('selected').contains(model)) { - _this6.removeSelected(model, opts); - } else { - _this6.addSelected(model, opts); - } - }); - }, - - - /** - * Hover a component - * @param {Component|HTMLElement} el Component to select - * @param {Object} [opts={}] Options, optional - * @private - */ - setHovered: function setHovered(el) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var model = (0, _mixins.getModel)(el, $); - if (model && !model.get('hoverable')) return; - opts.forceChange && this.set('componentHovered', ''); - this.set('componentHovered', model, opts); - }, - - - /** - * Set components inside editor's canvas. This method overrides actual components - * @param {Object|string} components HTML string or components model - * @return {this} - * @private - */ - setComponents: function setComponents(components) { - return this.get('DomComponents').setComponents(components); - }, - - - /** - * Returns components model from the editor's canvas - * @return {Components} - * @private - */ - getComponents: function getComponents() { - var cmp = this.get('DomComponents'); - var cm = this.get('CodeManager'); - - if (!cmp || !cm) return; - - var wrp = cmp.getComponents(); - return cm.getCode(wrp, 'json'); - }, - - - /** - * Set style inside editor's canvas. This method overrides actual style - * @param {Object|string} style CSS string or style model - * @return {this} - * @private - */ - setStyle: function setStyle(style) { - var rules = this.get('CssComposer').getAll(); - for (var i = 0, len = rules.length; i < len; i++) { - rules.pop(); - }rules.add(style); - return this; - }, - - - /** - * Returns rules/style model from the editor's canvas - * @return {Rules} - * @private - */ - getStyle: function getStyle() { - return this.get('CssComposer').getAll(); - }, - - - /** - * Returns HTML built inside canvas - * @return {string} HTML string - * @private - */ - getHtml: function getHtml() { - var config = this.config; - var exportWrapper = config.exportWrapper; - var wrappesIsBody = config.wrappesIsBody; - var js = config.jsInHtml ? this.getJs() : ''; - var wrp = this.get('DomComponents').getComponent(); - var html = this.get('CodeManager').getCode(wrp, 'html', { - exportWrapper: exportWrapper, - wrappesIsBody: wrappesIsBody - }); - html += js ? '' : ''; - return html; - }, - - - /** - * Returns CSS built inside canvas - * @param {Object} [opts={}] Options - * @return {string} CSS string - * @private - */ - getCss: function getCss() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var config = this.config; - var wrappesIsBody = config.wrappesIsBody; - var avoidProt = opts.avoidProtected; - var keepUnusedStyles = !(0, _underscore.isUndefined)(opts.keepUnusedStyles) ? opts.keepUnusedStyles : config.keepUnusedStyles; - var cssc = this.get('CssComposer'); - var wrp = this.get('DomComponents').getComponent(); - var protCss = !avoidProt ? config.protectedCss : ''; - - return protCss + this.get('CodeManager').getCode(wrp, 'css', { - cssc: cssc, - wrappesIsBody: wrappesIsBody, - keepUnusedStyles: keepUnusedStyles - }); - }, - - - /** - * Returns JS of all components - * @return {string} JS string - * @private - */ - getJs: function getJs() { - var wrp = this.get('DomComponents').getWrapper(); - return this.get('CodeManager').getCode(wrp, 'js').trim(); - }, - - - /** - * Store data to the current storage - * @param {Function} clb Callback function - * @return {Object} Stored data - * @private - */ - store: function store(clb) { - var _this7 = this; - - var sm = this.get('StorageManager'); - var store = {}; - if (!sm) return; - - // Fetch what to store - this.get('storables').forEach(function (m) { - var obj = m.store(1); - for (var el in obj) { - store[el] = obj[el]; - } - }); - - sm.store(store, function (res) { - clb && clb(res); - _this7.set('changesCount', 0); - _this7.trigger('storage:store', store); - }); - - return store; - }, - - - /** - * Load data from the current storage - * @param {Function} clb Callback function - * @private - */ - load: function load() { - var _this8 = this; - - var clb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - this.getCacheLoad(1, function (res) { - _this8.get('storables').forEach(function (module) { - return module.load(res); - }); - clb && clb(res); - }); - }, - - - /** - * Returns cached load - * @param {Boolean} force Force to reload - * @param {Function} clb Callback function - * @return {Object} - * @private - */ - getCacheLoad: function getCacheLoad(force, clb) { - var _this9 = this; - - var f = force ? 1 : 0; - if (this.cacheLoad && !f) return this.cacheLoad; - var sm = this.get('StorageManager'); - var load = []; - - if (!sm) return {}; - - this.get('storables').forEach(function (m) { - var key = m.storageKey; - key = typeof key === 'function' ? key() : key; - var keys = key instanceof Array ? key : [key]; - keys.forEach(function (k) { - load.push(k); - }); - }); - - sm.load(load, function (res) { - _this9.cacheLoad = res; - clb && clb(res); - setTimeout(function () { - return _this9.trigger('storage:load', res); - }, 0); - }); - }, - - - /** - * Returns device model by name - * @return {Device|null} - * @private - */ - getDeviceModel: function getDeviceModel() { - var name = this.get('device'); - return this.get('DeviceManager').get(name); - }, - - - /** - * Run default command if setted - * @param {Object} [opts={}] Options - * @private - */ - runDefault: function runDefault() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var command = this.get('Commands').get(this.config.defaultCommand); - if (!command || this.defaultRunning) return; - command.stop(this, this, opts); - command.run(this, this, opts); - this.defaultRunning = 1; - }, - - - /** - * Stop default command - * @param {Object} [opts={}] Options - * @private - */ - stopDefault: function stopDefault() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var command = this.get('Commands').get(this.config.defaultCommand); - if (!command) return; - command.stop(this, this, opts); - this.defaultRunning = 0; - }, - - - /** - * Update canvas dimensions and refresh data useful for tools positioning - * @private - */ - refreshCanvas: function refreshCanvas() { - this.set('canvasOffset', this.get('Canvas').getOffset()); - }, - - - /** - * Clear all selected stuf inside the window, sometimes is useful to call before - * doing some dragging opearation - * @param {Window} win If not passed the current one will be used - * @private - */ - clearSelection: function clearSelection(win) { - var w = win || window; - w.getSelection().removeAllRanges(); - }, - - - /** - * Get the current media text - * @return {string} - */ - getCurrentMedia: function getCurrentMedia() { - var config = this.config; - var device = this.getDeviceModel(); - var condition = config.mediaCondition; - var preview = config.devicePreviewMode; - var width = device && device.get('widthMedia'); - return device && width && !preview ? '(' + condition + ': ' + width + ')' : ''; - }, - - - /** - * Return the component wrapper - * @return {Component} - */ - getWrapper: function getWrapper() { - return this.get('DomComponents').getWrapper(); - }, - - - /** - * Return the count of changes made to the content and not yet stored. - * This count resets at any `store()` - * @return {number} - */ - getDirtyCount: function getDirtyCount() { - return this.get('changesCount'); - }, - - - /** - * Destroy editor - */ - destroyAll: function destroyAll() { - var _attributes = this.attributes, - DomComponents = _attributes.DomComponents, - CssComposer = _attributes.CssComposer, - UndoManager = _attributes.UndoManager, - Panels = _attributes.Panels, - Canvas = _attributes.Canvas; - - DomComponents.clear(); - CssComposer.clear(); - UndoManager.clear().removeAll(); - Panels.getPanels().reset(); - Canvas.getCanvasView().remove(); - this.view.remove(); - this.stopListening(); - $(this.config.el).empty().attr(this.attrsOrig); - }, - setEditing: function setEditing(value) { - this.set('editing', value); - return this; - }, - isEditing: function isEditing() { - return !!this.get('editing'); - }, - - - /** - * Set/get data from the HTMLElement - * @param {HTMLElement} el - * @param {string} name Data name - * @param {any} value Date value - * @return {any} - * @private - */ - data: function data(el, name, value) { - var varName = '_gjs-data'; - - if (!el[varName]) { - el[varName] = {}; - } - - if ((0, _underscore.isUndefined)(value)) { - return el[varName][name]; - } else { - el[varName][name] = value; - } - } -}); - -/***/ }), -/* 64 */ -/***/ (function(module, exports) { - -module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - if(!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - get: function() { - return module.l; - } - }); - Object.defineProperty(module, "id", { - enumerable: true, - get: function() { - return module.i; - } - }); - module.webpackPolyfill = 1; - } - return module; -}; - - -/***/ }), -/* 65 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = function () { - var Sorter = __webpack_require__(66); - var Resizer = __webpack_require__(67); - var Dragger = __webpack_require__(68); - - return { - /** - * Name of the module - * @type {String} - * @private - */ - name: 'Utils', - - /** - * Initialize module - */ - init: function init() { - return this; - }, - - - Sorter: Sorter, - Resizer: Resizer, - Dragger: Dragger - }; -}; - -/***/ }), -/* 66 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(_) { - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -var _underscore = __webpack_require__(1); - -var _mixins = __webpack_require__(2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var $ = _backbone2.default.$; - -module.exports = _backbone2.default.View.extend({ - initialize: function initialize(opt) { - this.opt = opt || {}; - _.bindAll(this, 'startSort', 'onMove', 'endMove', 'rollback', 'udpateOffset', 'moveDragHelper'); - var o = opt || {}; - this.elT = 0; - this.elL = 0; - this.borderOffset = o.borderOffset || 10; - - var el = o.container; - this.el = typeof el === 'string' ? document.querySelector(el) : el; - this.$el = $(this.el); - - this.containerSel = o.containerSel || 'div'; - this.itemSel = o.itemSel || 'div'; - this.draggable = o.draggable || true; - this.nested = o.nested || 0; - this.pfx = o.pfx || ''; - this.ppfx = o.ppfx || ''; - this.freezeClass = o.freezeClass || this.pfx + 'freezed'; - this.onStart = o.onStart || ''; - this.onEndMove = o.onEndMove || ''; - this.direction = o.direction || 'v'; // v (vertical), h (horizontal), a (auto) - this.onMoveClb = o.onMove || ''; - this.relative = o.relative || 0; - this.ignoreViewChildren = o.ignoreViewChildren || 0; - this.ignoreModels = o.ignoreModels || 0; - this.plh = o.placer || ''; - // Frame offset - this.wmargin = o.wmargin || 0; - this.offTop = o.offsetTop || 0; - this.offLeft = o.offsetLeft || 0; - this.document = o.document || document; - this.$document = $(this.document); - this.dropContent = null; - this.em = o.em || ''; - this.dragHelper = null; - this.canvasRelative = o.canvasRelative || 0; - this.selectOnEnd = !o.avoidSelectOnEnd; - - if (this.em && this.em.on) { - this.em.on('change:canvasOffset', this.udpateOffset); - this.udpateOffset(); - } - }, - getContainerEl: function getContainerEl() { - if (!this.el) { - var el = this.opt.container; - this.el = typeof el === 'string' ? document.querySelector(el) : el; - this.$el = $(this.el); - } - return this.el; - }, - getDocuments: function getDocuments() { - var em = this.em; - var canvasDoc = em && em.get('Canvas').getBody().ownerDocument; - var docs = [document]; - canvasDoc && docs.push(canvasDoc); - return docs; - }, - - - /** - * Triggered when the offset of the editro is changed - */ - udpateOffset: function udpateOffset() { - var offset = this.em.get('canvasOffset'); - this.offTop = offset.top; - this.offLeft = offset.left; - }, - - - /** - * Set content to drop - * @param {String|Object} content - */ - setDropContent: function setDropContent(content) { - this.dropContent = content; - }, - - - /** - * Toggle cursor while sorting - * @param {Boolean} active - */ - toggleSortCursor: function toggleSortCursor(active) { - var em = this.em; - var body = document.body; - var pfx = this.ppfx || this.pfx; - var sortCls = pfx + 'grabbing'; - var emBody = em ? em.get('Canvas').getBody() : ''; - - // Avoid updating body className as it causes a huge repaint - // Noticeable with "fast" drag of blocks - if (active) { - em && em.get('Canvas').startAutoscroll(); - //body.className += ' ' + sortCls; - //if (em) emBody.className += ' ' + sortCls; - } else { - em && em.get('Canvas').stopAutoscroll(); - //body.className = body.className.replace(sortCls, '').trim(); - //if(em) emBody.className = emBody.className.replace(sortCls, '').trim(); - } - }, - - - /** - * Set drag helper - * @param {HTMLElement} el - * @param {Event} event - */ - setDragHelper: function setDragHelper(el, event) { - var ev = event || ''; - var clonedEl = el.cloneNode(1); - var rect = el.getBoundingClientRect(); - var computed = getComputedStyle(el); - var style = ''; - - for (var i = 0; i < computed.length; i++) { - var prop = computed[i]; - style += prop + ':' + computed.getPropertyValue(prop) + ';'; - } - - document.body.appendChild(clonedEl); - clonedEl.className += ' ' + this.pfx + 'bdrag'; - clonedEl.setAttribute('style', style); - this.dragHelper = clonedEl; - clonedEl.style.width = rect.width + 'px'; - clonedEl.style.height = rect.height + 'px'; - ev && this.moveDragHelper(ev); - - // Listen mouse move events - if (this.em) { - $(this.em.get('Canvas').getBody().ownerDocument).off('mousemove', this.moveDragHelper).on('mousemove', this.moveDragHelper); - } - $(document).off('mousemove', this.moveDragHelper).on('mousemove', this.moveDragHelper); - }, - - - /** - * Update the position of the helper - * @param {Event} e - */ - moveDragHelper: function moveDragHelper(e) { - var doc = e.target.ownerDocument; - - if (!this.dragHelper || !doc) { - return; - } - - var posY = e.pageY; - var posX = e.pageX; - var addTop = 0; - var addLeft = 0; - var window = doc.defaultView || doc.parentWindow; - var frame = window.frameElement; - var dragHelperStyle = this.dragHelper.style; - - // If frame is present that means mouse has moved over the editor's canvas, - // which is rendered inside the iframe and the mouse move event comes from - // the iframe, not the parent window. Mouse position relative to the frame's - // parent window needs to account for the frame's position relative to the - // parent window. - if (frame) { - var frameRect = frame.getBoundingClientRect(); - addTop = frameRect.top + document.documentElement.scrollTop; - addLeft = frameRect.left + document.documentElement.scrollLeft; - posY = e.clientY; - posX = e.clientX; - } - - dragHelperStyle.top = posY + addTop + 'px'; - dragHelperStyle.left = posX + addLeft + 'px'; - }, - - - /** - * Returns true if the element matches with selector - * @param {Element} el - * @param {String} selector - * @return {Boolean} - */ - matches: function matches(el, selector, useBody) { - return _mixins.matches.call(el, selector); - }, - - - /** - * Closest parent - * @param {Element} el - * @param {String} selector - * @return {Element|null} - */ - closest: function closest(el, selector) { - if (!el) return; - var elem = el.parentNode; - while (elem && elem.nodeType === 1) { - if (this.matches(elem, selector)) return elem; - elem = elem.parentNode; - } - return null; - }, - - - /** - * Get the offset of the element - * @param {HTMLElement} el - * @return {Object} - */ - offset: function offset(el) { - var rect = el.getBoundingClientRect(); - return { - top: rect.top + document.body.scrollTop, - left: rect.left + document.body.scrollLeft - }; - }, - - - /** - * Create placeholder - * @return {HTMLElement} - */ - createPlaceholder: function createPlaceholder() { - var pfx = this.pfx; - var el = document.createElement('div'); - var ins = document.createElement('div'); - el.className = pfx + 'placeholder'; - el.style.display = 'none'; - el.style['pointer-events'] = 'none'; - ins.className = pfx + 'placeholder-int'; - el.appendChild(ins); - return el; - }, - - - /** - * Picking component to move - * @param {HTMLElement} src - * */ - startSort: function startSort(src) { - var em = this.em; - var itemSel = this.itemSel; - var contSel = this.containerSel; - var container = this.getContainerEl(); - var docs = this.getDocuments(); - var onStart = this.onStart; - var srcModel = void 0; - var plh = this.plh; - this.dropModel = null; - this.moved = 0; - - // Check if the start element is a valid one, if not get the - // closest valid one - if (src && !this.matches(src, itemSel + ', ' + contSel)) { - src = this.closest(src, itemSel); - } - - this.eV = src; - - // Create placeholder if not yet exists - if (!plh) { - plh = this.createPlaceholder(); - container.appendChild(plh); - this.plh = plh; - } - - if (src) { - srcModel = this.getSourceModel(src); - srcModel && srcModel.set && srcModel.set('status', 'freezed'); - } - - (0, _mixins.on)(container, 'mousemove dragover', this.onMove); - (0, _mixins.on)(docs, 'mouseup dragend', this.endMove); - (0, _mixins.on)(docs, 'keydown', this.rollback); - onStart && onStart(); - - // Avoid strange effects on dragging - em && em.clearSelection(); - this.toggleSortCursor(1); - - em && em.trigger('sorter:drag:start', src, srcModel); - }, - - - /** - * Get the model from HTMLElement target - * @return {Model|null} - */ - getTargetModel: function getTargetModel(el) { - var elem = el || this.target; - return $(elem).data('model'); - }, - - - /** - * Get the model of the current source element (element to drag) - * @return {Model} - */ - getSourceModel: function getSourceModel(source) { - var src = source || this.eV; - var dropContent = this.dropContent; - var dropModel = this.dropModel; - var em = this.em; - - if (dropContent && em) { - if (!dropModel) { - var comps = em.get('DomComponents').getComponents(); - var opts = { - avoidStore: 1, - avoidChildren: 1, - avoidUpdateStyle: 1, - temporary: 1 - }; - var tempModel = comps.add(dropContent, opts); - dropModel = comps.remove(tempModel, opts); - this.dropModel = dropModel instanceof Array ? dropModel[0] : dropModel; - } - return dropModel; - } - - if (src) { - return $(src).data('model'); - } - }, - - - /** - * Highlight target - * @param {Model|null} model - */ - selectTargetModel: function selectTargetModel(model) { - if (model instanceof _backbone2.default.Collection) { - return; - } - - var prevModel = this.targetModel; - if (prevModel) { - prevModel.set('status', ''); - } - - if (model && model.set) { - model.set('status', 'selected-parent'); - this.targetModel = model; - } - }, - - - /** - * During move - * @param {Event} e - * */ - onMove: function onMove(e) { - var em = this.em; - this.moved = 1; - - // Turn placeholder visibile - var plh = this.plh; - var dsp = plh.style.display; - if (!dsp || dsp === 'none') plh.style.display = 'block'; - - // Cache all necessary positions - var eO = this.offset(this.el); - this.elT = this.wmargin ? Math.abs(eO.top) : eO.top; - this.elL = this.wmargin ? Math.abs(eO.left) : eO.left; - var rY = e.pageY - this.elT + this.el.scrollTop; - var rX = e.pageX - this.elL + this.el.scrollLeft; - - if (this.canvasRelative && em) { - var mousePos = em.get('Canvas').getMouseRelativeCanvas(e); - rX = mousePos.x; - rY = mousePos.y; - } - - this.rX = rX; - this.rY = rY; - this.eventMove = e; - - //var targetNew = this.getTargetFromEl(e.target); - var dims = this.dimsFromTarget(e.target, rX, rY); - var target = this.target; - var targetModel = this.getTargetModel(target); - this.selectTargetModel(targetModel); - - this.lastDims = dims; - var pos = this.findPosition(dims, rX, rY); - // If there is a significant changes with the pointer - if (!this.lastPos || this.lastPos.index != pos.index || this.lastPos.method != pos.method) { - this.movePlaceholder(this.plh, dims, pos, this.prevTargetDim); - if (!this.$plh) this.$plh = $(this.plh); - - // With canvasRelative the offset is calculated automatically for - // each element - if (!this.canvasRelative) { - if (this.offTop) this.$plh.css('top', '+=' + this.offTop + 'px'); - if (this.offLeft) this.$plh.css('left', '+=' + this.offLeft + 'px'); - } - - this.lastPos = pos; - } - - if (typeof this.onMoveClb === 'function') this.onMoveClb(e); - - em && em.trigger('sorter:drag', { - target: target, - targetModel: targetModel, - dims: dims, - pos: pos, - x: rX, - y: rY - }); - }, - - - /** - * Returns true if the elements is in flow, so is not in flow where - * for example the component is with float:left - * @param {HTMLElement} el - * @param {HTMLElement} parent - * @return {Boolean} - * @private - * */ - isInFlow: function isInFlow(el, parent) { - if (!el) return false; - - parent = parent || document.body; - var ch = -1, - h; - var elem = el; - h = elem.offsetHeight; - if ( /*h < ch || */!this.styleInFlow(elem, parent)) return false;else return true; - }, - - - /** - * Check if el has style to be in flow - * @param {HTMLElement} el - * @param {HTMLElement} parent - * @return {Boolean} - * @private - */ - styleInFlow: function styleInFlow(el, parent) { - var style = el.style; - var $el = $(el); - if (style.overflow && style.overflow !== 'visible') return; - if ($el.css('float') !== 'none') return; - if (parent && $(parent).css('display') == 'flex') return; - switch (style.position) { - case 'static': - case 'relative': - case '': - break; - default: - return; - } - switch (el.tagName) { - case 'TR': - case 'TBODY': - case 'THEAD': - case 'TFOOT': - return true; - } - switch ($el.css('display')) { - case 'block': - case 'list-item': - case 'table': - case 'flex': - return true; - } - return; - }, - - - /** - * Check if the target is valid with the actual source - * @param {HTMLElement} trg - * @return {Boolean} - */ - validTarget: function validTarget(trg, src) { - var srcModel = this.getSourceModel(src); - src = srcModel && srcModel.view && srcModel.view.el; - var trgModel = this.getTargetModel(trg); - trg = trgModel && trgModel.view && trgModel.view.el; - var result = { - valid: true, - src: src, - srcModel: srcModel, - trg: trg, - trgModel: trgModel - }; - - if (!src || !trg) { - result.valid = false; - return result; - } - - // Check if the target could accept the source - var droppable = trgModel.get('droppable'); - droppable = droppable instanceof _backbone2.default.Collection ? 1 : droppable; - droppable = droppable instanceof Array ? droppable.join(', ') : droppable; - result.dropInfo = droppable; - droppable = (0, _underscore.isString)(droppable) ? this.matches(src, droppable) : droppable; - result.droppable = droppable; - - // check if the source is draggable in target - var draggable = srcModel.get('draggable'); - draggable = draggable instanceof Array ? draggable.join(', ') : draggable; - result.dragInfo = draggable; - draggable = (0, _underscore.isString)(draggable) ? this.matches(trg, draggable) : draggable; - result.draggable = draggable; - - if (!droppable || !draggable) { - result.valid = false; - } - - return result; - }, - - - /** - * Get dimensions of nodes relative to the coordinates - * @param {HTMLElement} target - * @param {number} rX Relative X position - * @param {number} rY Relative Y position - * @return {Array} - */ - dimsFromTarget: function dimsFromTarget(target, rX, rY) { - var em = this.em; - var dims = []; - - if (!target) { - return dims; - } - - // Select the first valuable target - if (!this.matches(target, this.itemSel + ', ' + this.containerSel)) { - target = this.closest(target, this.itemSel); - } - - // If draggable is an array the target will be one of those - if (this.draggable instanceof Array) { - target = this.closest(target, this.draggable.join(',')); - } - - if (!target) { - return dims; - } - - // Check if the target is different from the previous one - if (this.prevTarget && this.prevTarget != target) { - this.prevTarget = null; - } - - // New target found - if (!this.prevTarget) { - this.targetP = this.closest(target, this.containerSel); - - // Check if the source is valid with the target - var validResult = this.validTarget(target); - em && em.trigger('sorter:drag:validation', validResult); - - if (!validResult.valid && this.targetP) { - return this.dimsFromTarget(this.targetP, rX, rY); - } - - this.prevTarget = target; - this.prevTargetDim = this.getDim(target); - this.cacheDimsP = this.getChildrenDim(this.targetP); - this.cacheDims = this.getChildrenDim(target); - } - - // If the target is the previous one will return the cached dims - if (this.prevTarget == target) dims = this.cacheDims; - - // Target when I will drop element to sort - this.target = this.prevTarget; - - // Generally, on any new target the poiner enters inside its area and - // triggers nearBorders(), so have to take care of this - if (this.nearBorders(this.prevTargetDim, rX, rY) || !this.nested && !this.cacheDims.length) { - var targetParent = this.targetP; - - if (targetParent && this.validTarget(targetParent).valid) { - dims = this.cacheDimsP; - this.target = targetParent; - } - } - - this.lastPos = null; - return dims; - }, - - - /** - * Get valid target from element - * This method should replace dimsFromTarget() - * @param {HTMLElement} el - * @return {HTMLElement} - */ - getTargetFromEl: function getTargetFromEl(el) { - var target = el; - var targetParent = void 0; - var targetPrev = this.targetPrev; - var em = this.em; - var containerSel = this.containerSel; - var itemSel = this.itemSel; - - // Select the first valuable target - if (!this.matches(target, itemSel + ', ' + containerSel)) { - target = this.closest(target, itemSel); - } - - // If draggable is an array the target will be one of those - // TODO check if this options is used somewhere - if (this.draggable instanceof Array) { - target = this.closest(target, this.draggable.join(',')); - } - - // Check if the target is different from the previous one - if (targetPrev && targetPrev != target) { - this.targetPrev = ''; - } - - // New target found - if (!this.targetPrev) { - targetParent = this.closest(target, containerSel); - - // If the current target is not valid (src/trg reasons) try with - // the parent one (if exists) - var validResult = this.validTarget(target); - em && em.trigger('sorter:drag:validation', validResult); - - if (!validResult.valid && targetParent) { - return this.getTargetFromEl(targetParent); - } - - this.targetPrev = target; - } - - // Generally, on any new target the poiner enters inside its area and - // triggers nearBorders(), so have to take care of this - if (this.nearElBorders(target)) { - targetParent = this.closest(target, containerSel); - - if (targetParent && this.validTarget(targetParent).valid) { - target = targetParent; - } - } - - return target; - }, - - - /** - * Check if the current pointer is neare to element borders - * @return {Boolen} - */ - nearElBorders: function nearElBorders(el) { - var off = 10; - var rect = el.getBoundingClientRect(); - var body = el.ownerDocument.body; - - var _getCurrentPos = this.getCurrentPos(), - x = _getCurrentPos.x, - y = _getCurrentPos.y; - - var top = rect.top + body.scrollTop; - var left = rect.left + body.scrollLeft; - var width = rect.width; - var height = rect.height; - - if (y < top + off || // near top edge - y > top + height - off || // near bottom edge - x < left + off || // near left edge - x > left + width - off // near right edge - ) { - return 1; - } - }, - getCurrentPos: function getCurrentPos() { - var ev = this.eventMove; - var x = ev.pageX || 0; - var y = ev.pageY || 0; - return { x: x, y: y }; - }, - - - /** - * Returns dimensions and positions about the element - * @param {HTMLElement} el - * @return {Array} - */ - getDim: function getDim(el) { - var top, left, height, width; - - if (this.canvasRelative && this.em) { - var pos = this.em.get('Canvas').getElementPos(el); - var styles = window.getComputedStyle(el); - var marginTop = parseFloat(styles['marginTop']); - var marginBottom = parseFloat(styles['marginBottom']); - var marginRight = parseFloat(styles['marginRight']); - var marginLeft = parseFloat(styles['marginLeft']); - top = pos.top - marginTop; - left = pos.left - marginLeft; - height = pos.height + marginTop + marginBottom; - width = pos.width + marginLeft + marginRight; - } else { - var o = this.offset(el); - top = this.relative ? el.offsetTop : o.top - (this.wmargin ? -1 : 1) * this.elT; - left = this.relative ? el.offsetLeft : o.left - (this.wmargin ? -1 : 1) * this.elL; - height = el.offsetHeight; - width = el.offsetWidth; - } - - return [top, left, height, width]; - }, - - - /** - * Get children dimensions - * @param {HTMLELement} el Element root - * @retun {Array} - * */ - getChildrenDim: function getChildrenDim(trg) { - var dims = []; - if (!trg) return dims; - - // Get children based on getChildrenContainer - var trgModel = this.getTargetModel(trg); - if (trgModel && trgModel.view && !this.ignoreViewChildren) { - trg = trgModel.view.getChildrenContainer(); - } - - var ch = trg.children; - - for (var i = 0, len = ch.length; i < len; i++) { - var el = ch[i]; - - if (!this.matches(el, this.itemSel)) { - continue; - } - - var dim = this.getDim(el); - var dir = this.direction; - - if (dir == 'v') dir = true;else if (dir == 'h') dir = false;else dir = this.isInFlow(el, trg); - - dim.push(dir); - dim.push(el); - dims.push(dim); - } - - return dims; - }, - - - /** - * Check if the coordinates are near to the borders - * @param {Array} dim - * @param {number} rX Relative X position - * @param {number} rY Relative Y position - * @return {Boolean} - * */ - nearBorders: function nearBorders(dim, rX, rY) { - var result = 0; - var off = this.borderOffset; - var x = rX || 0; - var y = rY || 0; - var t = dim[0]; - var l = dim[1]; - var h = dim[2]; - var w = dim[3]; - if (t + off > y || y > t + h - off || l + off > x || x > l + w - off) result = 1; - - return !!result; - }, - - - /** - * Find the position based on passed dimensions and coordinates - * @param {Array} dims Dimensions of nodes to parse - * @param {number} posX X coordindate - * @param {number} posY Y coordindate - * @retun {Object} - * */ - findPosition: function findPosition(dims, posX, posY) { - var result = { index: 0, method: 'before' }; - var leftLimit = 0, - xLimit = 0, - dimRight = 0, - yLimit = 0, - xCenter = 0, - yCenter = 0, - dimDown = 0, - dim = 0; - // Each dim is: Top, Left, Height, Width - for (var i = 0, len = dims.length; i < len; i++) { - dim = dims[i]; - // Right position of the element. Left + Width - dimRight = dim[1] + dim[3]; - // Bottom position of the element. Top + Height - dimDown = dim[0] + dim[2]; - // X center position of the element. Left + (Width / 2) - xCenter = dim[1] + dim[3] / 2; - // Y center position of the element. Top + (Height / 2) - yCenter = dim[0] + dim[2] / 2; - // Skip if over the limits - if (xLimit && dim[1] > xLimit || yLimit && yCenter >= yLimit || // >= avoid issue with clearfixes - leftLimit && dimRight < leftLimit) continue; - result.index = i; - // If it's not in flow (like 'float' element) - if (!dim[4]) { - if (posY < dimDown) yLimit = dimDown; - //If x lefter than center - if (posX < xCenter) { - xLimit = xCenter; - result.method = 'before'; - } else { - leftLimit = xCenter; - result.method = 'after'; - } - } else { - // If y upper than center - if (posY < yCenter) { - result.method = 'before'; - break; - } else result.method = 'after'; // After last element - } - } - return result; - }, - - - /** - * Updates the position of the placeholder - * @param {HTMLElement} phl - * @param {Array} dims - * @param {Object} pos Position object - * @param {Array} trgDim target dimensions - * */ - movePlaceholder: function movePlaceholder(plh, dims, pos, trgDim) { - var marg = 0, - t = 0, - l = 0, - w = 0, - h = 0, - un = 'px', - margI = 5, - brdCol = '#62c462', - brd = 3, - method = pos.method; - var elDim = dims[pos.index]; - plh.style.borderColor = 'transparent ' + brdCol; - plh.style.borderWidth = brd + un + ' ' + (brd + 2) + un; - plh.style.margin = '-' + brd + 'px 0 0'; - if (elDim) { - // If it's not in flow (like 'float' element) - if (!elDim[4]) { - w = 'auto'; - h = elDim[2] - marg * 2 + un; - t = elDim[0] + marg; - l = method == 'before' ? elDim[1] - marg : elDim[1] + elDim[3] - marg; - plh.style.borderColor = brdCol + ' transparent'; - plh.style.borderWidth = brd + 2 + un + ' ' + brd + un; - plh.style.margin = '0 0 0 -' + brd + 'px'; - } else { - w = elDim[3] + un; - h = 'auto'; - t = method == 'before' ? elDim[0] - marg : elDim[0] + elDim[2] - marg; - l = elDim[1]; - } - } else { - if (!this.nested) { - plh.style.display = 'none'; - return; - } - if (trgDim) { - t = trgDim[0] + margI; - l = trgDim[1] + margI; - w = parseInt(trgDim[3]) - margI * 2 + un; - h = 'auto'; - } - } - plh.style.top = t + un; - plh.style.left = l + un; - if (w) plh.style.width = w; - if (h) plh.style.height = h; - }, - - - /** - * Leave item - * @param event - * - * @return void - * */ - endMove: function endMove(e) { - var _this = this; - - var created; - var moved = [null]; - var docs = this.getDocuments(); - var container = this.getContainerEl(); - var onEndMove = this.onEndMove; - var target = this.target, - lastPos = this.lastPos; - - (0, _mixins.off)(container, 'mousemove dragover', this.onMove); - (0, _mixins.off)(docs, 'mouseup dragend', this.endMove); - (0, _mixins.off)(docs, 'keydown', this.rollback); - //this.$document.off('mouseup', this.endMove); - //this.$document.off('keydown', this.rollback); - this.plh.style.display = 'none'; - var clsReg = new RegExp('(?:^|\\s)' + this.freezeClass + '(?!\\S)', 'gi'); - var src = this.eV; - - if (src && this.selectOnEnd) { - var srcModel = this.getSourceModel(); - if (srcModel && srcModel.set) { - srcModel.set('status', ''); - srcModel.set('status', 'selected'); - } - } - - if (this.moved) { - var toMove = this.toMove; - var toMoveArr = (0, _underscore.isArray)(toMove) ? toMove : toMove ? [toMove] : [src]; - toMoveArr.forEach(function (model) { - moved.push(_this.move(target, model, lastPos)); - }); - } - - if (this.plh) this.plh.style.display = 'none'; - var dragHelper = this.dragHelper; - - if (dragHelper) { - dragHelper.parentNode.removeChild(dragHelper); - this.dragHelper = null; - } - - this.selectTargetModel(); - this.toggleSortCursor(); - - this.toMove = null; - (0, _underscore.isFunction)(onEndMove) && moved.forEach(function (m) { - return onEndMove(m, _this); - }); - }, - - - /** - * Move component to new position - * @param {HTMLElement} dst Destination target - * @param {HTMLElement} src Element to move - * @param {Object} pos Object with position coordinates - * */ - move: function move(dst, src, pos) { - var em = this.em; - var srcEl = (0, _mixins.getElement)(src); - em && em.trigger('component:dragEnd:before', dst, srcEl, pos); // @depricated - var warns = []; - var index = pos.index; - var modelToDrop, modelTemp, created; - var validResult = this.validTarget(dst, srcEl); - var targetCollection = $(dst).data('collection'); - var model = validResult.srcModel; - var droppable = validResult.droppable; - var draggable = validResult.draggable; - var dropInfo = validResult.dropInfo; - var dragInfo = validResult.dragInfo; - var dropContent = this.dropContent; - droppable = validResult.trgModel instanceof _backbone2.default.Collection ? 1 : droppable; - - if (targetCollection && droppable && draggable) { - index = pos.method === 'after' ? index + 1 : index; - var opts = { at: index, noIncrement: 1 }; - - if (!dropContent) { - // Putting `avoidStore` here will make the UndoManager behave wrong - opts.temporary = 1; - modelTemp = targetCollection.add({}, _extends({}, opts)); - - if (model) { - modelToDrop = model.collection.remove(model); - } - } else { - modelToDrop = dropContent; - opts.silent = false; - opts.avoidUpdateStyle = 1; - } - - created = targetCollection.add(modelToDrop, opts); - - if (!dropContent) { - targetCollection.remove(modelTemp); - } else { - this.dropContent = null; - } - - // This will cause to recalculate children dimensions - this.prevTarget = null; - } else { - if (!targetCollection) { - warns.push('Target collection not found'); - } - - if (!droppable) { - warns.push('Target is not droppable, accepts [' + dropInfo + ']'); - } - - if (!draggable) { - warns.push('Component not draggable, acceptable by [' + dragInfo + ']'); - } - - console.warn('Invalid target position: ' + warns.join(', ')); - } - - em && em.trigger('component:dragEnd', targetCollection, modelToDrop, warns); // @depricated - em && em.trigger('sorter:drag:end', targetCollection, modelToDrop, warns); - - return created; - }, - - - /** - * Rollback to previous situation - * @param {Event} - * @param {Bool} Indicates if rollback in anycase - * */ - rollback: function rollback(e) { - (0, _mixins.off)(this.getDocuments(), 'keydown', this.rollback); - var key = e.which || e.keyCode; - - if (key == 27) { - this.moved = 0; - this.endMove(); - } - } -}); -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1))) - -/***/ }), -/* 67 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _underscore = __webpack_require__(1); - -var _mixins = __webpack_require__(2); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var defaultOpts = { - // Function which returns custom X and Y coordinates of the mouse - mousePosFetcher: null, - // Indicates custom target updating strategy - updateTarget: null, - // Function which gets HTMLElement as an arg and returns it relative position - ratioDefault: 0, - posFetcher: null, - onStart: null, - onMove: null, - onEnd: null, - - // Resize unit step - step: 1, - - // Minimum dimension - minDim: 32, - - // Maximum dimension - maxDim: '', - - // Unit used for height resizing - unitHeight: 'px', - - // Unit used for width resizing - unitWidth: 'px', - - // The key used for height resizing - keyHeight: 'height', - - // The key used for width resizing - keyWidth: 'width', - - // If true, will override unitHeight and unitWidth, on start, with units - // from the current focused element (currently used only in SelectComponent) - currentUnit: 1, - - // With this option active the mousemove event won't be altered when - // the pointer comes over iframes - silentFrames: 0, - - // If true the container of handlers won't be updated - avoidContainerUpdate: 0, - - // Handlers - tl: 1, // Top left - tc: 1, // Top center - tr: 1, // Top right - cl: 1, // Center left - cr: 1, // Center right - bl: 1, // Bottom left - bc: 1, // Bottom center - br: 1 // Bottom right -}; - -var createHandler = function createHandler(name, opts) { - var pfx = opts.prefix || ''; - var el = document.createElement('i'); - el.className = pfx + 'resizer-h ' + pfx + 'resizer-h-' + name; - el.setAttribute('data-' + pfx + 'handler', name); - return el; -}; - -var getBoundingRect = function getBoundingRect(el, win) { - var w = win || window; - var rect = el.getBoundingClientRect(); - return { - left: rect.left + w.pageXOffset, - top: rect.top + w.pageYOffset, - width: rect.width, - height: rect.height - }; -}; - -var Resizer = function () { - /** - * Init the Resizer with options - * @param {Object} options - */ - function Resizer() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Resizer); - - this.setOptions(opts); - (0, _underscore.bindAll)(this, 'handleKeyDown', 'handleMouseDown', 'move', 'stop'); - return this; - } - - /** - * Get current connfiguration options - * @return {Object} - */ - - - _createClass(Resizer, [{ - key: 'getConfig', - value: function getConfig() { - return this.opts; - } - - /** - * Setup options - * @param {Object} options - */ - - }, { - key: 'setOptions', - value: function setOptions() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - this.opts = (0, _underscore.defaults)(options, defaultOpts); - this.setup(); - } - - /** - * Setup resizer - */ - - }, { - key: 'setup', - value: function setup() { - var opts = this.opts; - var pfx = opts.prefix || ''; - var appendTo = opts.appendTo || document.body; - var container = this.container; - - // Create container if not yet exist - if (!container) { - container = document.createElement('div'); - container.className = pfx + 'resizer-c'; - appendTo.appendChild(container); - this.container = container; - } - - while (container.firstChild) { - container.removeChild(container.firstChild); - } - - // Create handlers - var handlers = {}; - ['tl', 'tc', 'tr', 'cl', 'cr', 'bl', 'bc', 'br'].forEach(function (hdl) { - return handlers[hdl] = opts[hdl] ? createHandler(hdl, opts) : ''; - }); - - for (var n in handlers) { - var handler = handlers[n]; - handler && container.appendChild(handler); - } - - this.handlers = handlers; - this.mousePosFetcher = opts.mousePosFetcher; - this.updateTarget = opts.updateTarget; - this.posFetcher = opts.posFetcher; - this.onStart = opts.onStart; - this.onMove = opts.onMove; - this.onEnd = opts.onEnd; - } - - /** - * Toggle iframes pointer event - * @param {Boolean} silent If true, iframes will be silented - */ - - }, { - key: 'toggleFrames', - value: function toggleFrames(silent) { - if (this.opts.silentFrames) { - var frames = document.querySelectorAll('iframe'); - (0, _underscore.each)(frames, function (frame) { - return frame.style.pointerEvents = silent ? 'none' : ''; - }); - } - } - - /** - * Detects if the passed element is a resize handler - * @param {HTMLElement} el - * @return {Boolean} - */ - - }, { - key: 'isHandler', - value: function isHandler(el) { - var handlers = this.handlers; - - for (var n in handlers) { - if (handlers[n] === el) return true; - } - - return false; - } - - /** - * Returns the focused element - * @return {HTMLElement} - */ - - }, { - key: 'getFocusedEl', - value: function getFocusedEl() { - return this.el; - } - - /** - * Returns documents - */ - - }, { - key: 'getDocumentEl', - value: function getDocumentEl() { - return [this.el.ownerDocument, document]; - } - - /** - * Return element position - * @param {HTMLElement} el - * @param {Object} opts Custom options - * @return {Object} - */ - - }, { - key: 'getElementPos', - value: function getElementPos(el) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var posFetcher = this.posFetcher || ''; - return posFetcher ? posFetcher(el, opts) : getBoundingRect(el); - } - - /** - * Focus resizer on the element, attaches handlers to it - * @param {HTMLElement} el - */ - - }, { - key: 'focus', - value: function focus(el) { - // Avoid focusing on already focused element - if (el && el === this.el) { - return; - } - - // Show the handlers - this.el = el; - var config = this.opts; - var unit = 'px'; - var rect = this.getElementPos(el, { target: 'container' }); - var container = this.container; - var contStyle = container.style; - - if (!config.avoidContainerUpdate) { - contStyle.left = rect.left + unit; - contStyle.top = rect.top + unit; - contStyle.width = rect.width + unit; - contStyle.height = rect.height + unit; - contStyle.display = 'block'; - } - - (0, _mixins.on)(this.getDocumentEl(), 'mousedown', this.handleMouseDown); - } - - /** - * Blur from element - */ - - }, { - key: 'blur', - value: function blur() { - this.container.style.display = 'none'; - - if (this.el) { - (0, _mixins.off)(this.getDocumentEl(), 'mousedown', this.handleMouseDown); - this.el = null; - } - } - - /** - * Start resizing - * @param {Event} e - */ - - }, { - key: 'start', - value: function start(e) { - //Right or middel click - if (e.button !== 0) return; - e.preventDefault(); - e.stopPropagation(); - var el = this.el; - var resizer = this; - var config = this.opts || {}; - var attrName = 'data-' + config.prefix + 'handler'; - var rect = this.getElementPos(el, { target: 'el' }); - this.handlerAttr = e.target.getAttribute(attrName); - this.clickedHandler = e.target; - this.startDim = { - t: rect.top, - l: rect.left, - w: rect.width, - h: rect.height - }; - this.rectDim = { - t: rect.top, - l: rect.left, - w: rect.width, - h: rect.height - }; - this.startPos = { - x: e.clientX, - y: e.clientY - }; - - // Listen events - var doc = this.getDocumentEl(); - (0, _mixins.on)(doc, 'mousemove', this.move); - (0, _mixins.on)(doc, 'keydown', this.handleKeyDown); - (0, _mixins.on)(doc, 'mouseup', this.stop); - (0, _underscore.isFunction)(this.onStart) && this.onStart(e, { docs: doc, config: config, el: el, resizer: resizer }); - this.toggleFrames(1); - this.move(e); - } - - /** - * While resizing - * @param {Event} e - */ - - }, { - key: 'move', - value: function move(e) { - var onMove = this.onMove; - var mouseFetch = this.mousePosFetcher; - var currentPos = mouseFetch ? mouseFetch(e) : { - x: e.clientX, - y: e.clientY - }; - - this.currentPos = currentPos; - this.delta = { - x: currentPos.x - this.startPos.x, - y: currentPos.y - this.startPos.y - }; - this.keys = { - shift: e.shiftKey, - ctrl: e.ctrlKey, - alt: e.altKey - }; - - this.rectDim = this.calc(this); - this.updateRect(0); - - // Move callback - onMove && onMove(e); - - // In case the mouse button was released outside of the window - if (e.which === 0) { - this.stop(e); - } - } - - /** - * Stop resizing - * @param {Event} e - */ - - }, { - key: 'stop', - value: function stop(e) { - var config = this.opts; - var doc = this.getDocumentEl(); - (0, _mixins.off)(doc, 'mousemove', this.move); - (0, _mixins.off)(doc, 'keydown', this.handleKeyDown); - (0, _mixins.off)(doc, 'mouseup', this.stop); - this.updateRect(1); - this.toggleFrames(); - (0, _underscore.isFunction)(this.onEnd) && this.onEnd(e, { docs: doc, config: config }); - } - - /** - * Update rect - */ - - }, { - key: 'updateRect', - value: function updateRect(store) { - var el = this.el; - var resizer = this; - var config = this.opts; - var rect = this.rectDim; - var conStyle = this.container.style; - var updateTarget = this.updateTarget; - var selectedHandler = this.getSelectedHandler(); - var unitHeight = config.unitHeight, - unitWidth = config.unitWidth, - keyWidth = config.keyWidth, - keyHeight = config.keyHeight; - - // Use custom updating strategy if requested - - if ((0, _underscore.isFunction)(updateTarget)) { - updateTarget(el, rect, { - store: store, - selectedHandler: selectedHandler, - resizer: resizer, - config: config - }); - } else { - var elStyle = el.style; - elStyle[keyWidth] = rect.w + unitWidth; - elStyle[keyHeight] = rect.h + unitHeight; - } - - var unitRect = 'px'; - var rectEl = this.getElementPos(el, { target: 'container' }); - if (!config.avoidContainerUpdate) { - conStyle.left = rectEl.left + unitRect; - conStyle.top = rectEl.top + unitRect; - conStyle.width = rectEl.width + unitRect; - conStyle.height = rectEl.height + unitRect; - } - } - - /** - * Get selected handler name - * @return {string} - */ - - }, { - key: 'getSelectedHandler', - value: function getSelectedHandler() { - var handlers = this.handlers; - - if (!this.selectedHandler) { - return; - } - - for (var n in handlers) { - if (handlers[n] === this.selectedHandler) return n; - } - } - - /** - * Handle ESC key - * @param {Event} e - */ - - }, { - key: 'handleKeyDown', - value: function handleKeyDown(e) { - if (e.keyCode === 27) { - // Rollback to initial dimensions - this.rectDim = this.startDim; - this.stop(e); - } - } - - /** - * Handle mousedown to check if it's possible to start resizing - * @param {Event} e - */ - - }, { - key: 'handleMouseDown', - value: function handleMouseDown(e) { - var el = e.target; - if (this.isHandler(el)) { - this.selectedHandler = el; - this.start(e); - } else if (el !== this.el) { - this.selectedHandler = ''; - this.blur(); - } - } - - /** - * All positioning logic - * @return {Object} - */ - - }, { - key: 'calc', - value: function calc(data) { - var value = void 0; - var opts = this.opts || {}; - var step = opts.step; - var startDim = this.startDim; - var minDim = opts.minDim; - var maxDim = opts.maxDim; - var deltaX = data.delta.x; - var deltaY = data.delta.y; - var startW = startDim.w; - var startH = startDim.h; - var box = { - t: 0, - l: 0, - w: startW, - h: startH - }; - - if (!data) return; - - var attr = data.handlerAttr; - if (~attr.indexOf('r')) { - value = (0, _mixins.normalizeFloat)(startW + deltaX * step, step); - value = Math.max(minDim, value); - maxDim && (value = Math.min(maxDim, value)); - box.w = value; - } - if (~attr.indexOf('b')) { - value = (0, _mixins.normalizeFloat)(startH + deltaY * step, step); - value = Math.max(minDim, value); - maxDim && (value = Math.min(maxDim, value)); - box.h = value; - } - if (~attr.indexOf('l')) { - value = (0, _mixins.normalizeFloat)(startW - deltaX * step, step); - value = Math.max(minDim, value); - maxDim && (value = Math.min(maxDim, value)); - box.w = value; - } - if (~attr.indexOf('t')) { - value = (0, _mixins.normalizeFloat)(startH - deltaY * step, step); - value = Math.max(minDim, value); - maxDim && (value = Math.min(maxDim, value)); - box.h = value; - } - - // Enforce aspect ratio (unless shift key is being held) - var ratioActive = opts.ratioDefault ? !data.keys.shift : data.keys.shift; - if (attr.indexOf('c') < 0 && ratioActive) { - var ratio = startDim.w / startDim.h; - if (box.w / box.h > ratio) { - box.h = Math.round(box.w / ratio); - } else { - box.w = Math.round(box.h * ratio); - } - } - - if (~attr.indexOf('l')) { - box.l = startDim.w - box.w; - } - if (~attr.indexOf('t')) { - box.t = startDim.h - box.h; - } - - return box; - } - }]); - - return Resizer; -}(); - -module.exports = { - init: function init(opts) { - return new Resizer(opts); - } -}; - -/***/ }), -/* 68 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _backbone = __webpack_require__(0); - -var _backbone2 = _interopRequireDefault(_backbone); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var $ = _backbone2.default.$; - -var getBoundingRect = function getBoundingRect(el, win) { - var w = win || window; - var rect = el.getBoundingClientRect(); - return { - left: rect.left + w.pageXOffset, - top: rect.top + w.pageYOffset, - width: rect.width, - height: rect.height - }; -}; - -module.exports = { - // TODO move to opts - setKey: function setKey(keys, command) { - //key(keys, command); - }, - - - /** - * Return element position - * @param {HTMLElement} el - * @return {Object} - */ - getElementRect: function getElementRect(el) { - var posFetcher = this.opts.posFetcher || ''; - return posFetcher ? posFetcher(el, { - avoidFrameOffset: 1 - }) : getBoundingRect(el); - }, - - - /** - * Init the resizer - * @param {Object} opts - */ - init: function init(opts) { - this.setOptions(opts); - this.handleMouseDown = this.handleMouseDown.bind(this); - this.drag = this.drag.bind(this); - this.move = this.move.bind(this); - this.stop = this.stop.bind(this); - this.setKey('up, right, down, left', this.handleKey); - return this; - }, - - - /** - * Update options - * @param {Object} options - */ - setOptions: function setOptions(opts) { - this.opts = opts || {}; - }, - - - /** - * Focus dragger on the element - * @param {HTMLElement} el - */ - focus: function focus(el) { - // Avoid focusing on already focused element - if (el && el === this.el) { - return; - } - - this.getDocumentEl(el); - this.blur(); - this.el = el; - this.handlers = this.opts.dragHandlers || [el]; - - var elRect = this.getElementRect(el); //<-- TODO have wrong top:left - this.elRect = elRect; - this.startTop = elRect.top; - this.startLeft = elRect.left; - - // TODO init snapper - - this.getDocumentEl().on('mousedown', this.handleMouseDown); - }, - - - /** - * Blur from the focused element - */ - blur: function blur() { - this.getDocumentEl().off('mousedown', this.handleMouseDown); - this.el = null; - }, - - - /** - * Start dragging - * @param {Event} e - */ - start: function start(e) { - this.startPos = this.getMousePos(e); - var docs = this.getDocumentEl(); - docs.on('mousemove', this.drag); - docs.on('mouseup', this.stop); - - // Start callback - var onStart = this.opts.onStart; - if (typeof onStart === 'function') { - onStart(e, { - docs: docs, - el: this.el, - start: this.startPos, - elRect: this.elRect - }); - } - - this.drag(e); - }, - - - /** - * Stop dragging - */ - stop: function stop(e) { - var docs = this.getDocumentEl(); - docs.off('mousemove', this.drag); - docs.off('mouseup', this.stop); - this.lockedAxis = null; - - // Stop callback - var onEnd = this.opts.onEnd; - if (typeof onEnd === 'function') { - onEnd(e, { - docs: docs, - delta: this.delta, - end: { - x: this.startLeft + this.delta.x, - y: this.startTop + this.delta.y - } - }); - } - }, - - - /** - * Handle mousedown to check if it's possible to drag - * @param {Event} e - */ - handleMouseDown: function handleMouseDown(e) { - var el = e.target; - if (this.isHandler(el)) { - this.start(e); - } - }, - - - /** - * Detects if the clicked element is a valid handler - * @param {HTMLElement} el - * @return {Boolean} - */ - isHandler: function isHandler(el) { - var handlers = this.handlers; - - for (var n in handlers) { - if (handlers[n] === el) return true; - } - - return false; - }, - - - /** - * Handle key press - * @param {Event} e - * @param {Object} handler - */ - handleKey: function handleKey(e, handler) { - switch (handler.shortcut) { - case 'up': - this.move(0, -1); - break; - case 'right': - this.move(1, 0); - break; - case 'down': - this.move(0, 1); - break; - case 'left': - this.move(-1, 0); - break; - } - }, - - - /** - * Returns documents - */ - getDocumentEl: function getDocumentEl(el) { - var el = el || this.el; - if (!this.$doc) { - var docs = [document]; - if (el) { - docs.push(el.ownerDocument); - } - this.$doc = $(docs); - } - return this.$doc; - }, - - - /** - * Get mouse coordinates - * @param {Event} event - * @return {Object} - */ - getMousePos: function getMousePos(e) { - var mouseFetch = this.opts.mousePosFetcher; - return mouseFetch ? mouseFetch(e) : { - x: e.clientX, - y: e.clientY - }; - }, - - - /** - * Drag event - * @param {Event} event - */ - drag: function drag(e) { - var lockedAxis = this.lockedAxis; - var currentPos = this.getMousePos(e); - var delta = { - x: currentPos.x - this.startPos.x, - y: currentPos.y - this.startPos.y - }; - // Lock one axis - if (e.shiftKey) { - if (!lockedAxis) { - var relX = delta.x; - var relY = delta.y; - var absX = Math.abs(relX); - var absY = Math.abs(relY); - - // Vertical or Horizontal lock - if (relY >= absX || relY <= -absX) { - lockedAxis = 'x'; - } else if (relX > absY || relX < -absY) { - lockedAxis = 'y'; - } - } - } else { - lockedAxis = null; - } - - if (lockedAxis === 'x') { - delta.x = this.startPos.x; - } - - if (lockedAxis === 'y') { - delta.y = this.startPos.y; - } - - this.lockedAxis = lockedAxis; - this.delta = delta; - this.move(delta.x, delta.y); - - // Drag callback - var onDrag = this.opts.onDrag; - if (typeof onDrag === 'function') { - onDrag(e, { - delta: delta, - current: { - x: this.startLeft + delta.x, - y: this.startTop + delta.y - }, - lockedAxis: lockedAxis - }); - } - - // In case the mouse button was released outside of the window - if (e.which === 0) { - this.stop(e); - } - }, - - - /** - * Move the element - * @param {integer} x - * @param {integer} y - */ - move: function move(x, y) { - this.moveX(x); - this.moveY(y); - }, - - /** - * Move in x direction - * @param {integer} x - */ - moveX: function moveX(x) { - var el = this.el; - var opts = this.opts; - var xPos = this.startLeft + x; - var setX = this.opts.setX; - - if (typeof setX === 'function') { - setX(xPos, { - el: el, - start: this.startLeft, - delta: x - }); - } else { - el.style.left = xPos + 'px'; - } - }, - - - /** - * Move in y direction - * @param {integer} y - */ - moveY: function moveY(y) { - var el = this.el; - var opts = this.opts; - var yPos = this.startTop + y; - var setY = this.opts.setY; - - if (typeof setY === 'function') { - setY(yPos, { - el: el, - start: this.startTop, - delta: y - }); - } else { - el.style.top = yPos + 'px'; - } - } -}; - -/***/ }), -/* 69 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** - * This module allows to create shortcuts for functions and commands (via command id) - * - * You can access the module in this way - * ```js - * const keymaps = editor.Keymaps; - * ``` - * - */ - - -var _underscore = __webpack_require__(1); - -var keymaster = __webpack_require__(24); - -module.exports = function () { - var em = void 0; - var config = void 0; - var keymaps = {}; - var configDef = { - defaults: { - 'core:undo': { - keys: '⌘+z, ctrl+z', - handler: 'core:undo' - }, - 'core:redo': { - keys: '⌘+shift+z, ctrl+shift+z', - handler: 'core:redo' - }, - 'core:copy': { - keys: '⌘+c, ctrl+c', - handler: 'core:copy' - }, - 'core:paste': { - keys: '⌘+v, ctrl+v', - handler: 'core:paste' - }, - 'core:component-next': { - keys: 's', - handler: 'core:component-next' - }, - 'core:component-prev': { - keys: 'w', - handler: 'core:component-prev' - }, - 'core:component-enter': { - keys: 'd', - handler: 'core:component-enter' - }, - 'core:component-exit': { - keys: 'a', - handler: 'core:component-exit' - } - } - }; - - return { - keymaster: keymaster, - - name: 'Keymaps', - - /** - * Get module configurations - * @return {Object} Configuration object - */ - getConfig: function getConfig() { - return config; - }, - - - /** - * Initialize module - * @param {Object} config Configurations - * @private - */ - init: function init() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - config = _extends({}, configDef, opts); - em = config.em; - this.em = em; - return this; - }, - onLoad: function onLoad() { - var defKeys = config.defaults; - - for (var id in defKeys) { - var value = defKeys[id]; - this.add(id, value.keys, value.handler); - } - }, - - - /** - * Add new keymap - * @param {string} id Keymap id - * @param {string} keys Keymap keys, eg. `ctrl+a`, `⌘+z, ctrl+z` - * @param {Function|string} handler Keymap handler, might be a function - * @return {Object} Added keymap - * or just a command id as a string - * @example - * // 'ns' is just a custom namespace - * keymaps.add('ns:my-keymap', '⌘+j, ⌘+u, ctrl+j, alt+u', editor => { - * console.log('do stuff'); - * }); - * // or - * keymaps.add('ns:my-keymap', '⌘+s, ctrl+s', 'some-gjs-command'); - * - * // listen to events - * editor.on('keymap:emit', (id, shortcut, e) => { - * // ... - * }) - */ - add: function add(id, keys, handler) { - var em = this.em; - var cmd = em.get('Commands'); - var editor = em.getEditor(); - var keymap = { id: id, keys: keys, handler: handler }; - var pk = keymaps[id]; - pk && this.remove(id); - keymaps[id] = keymap; - keymaster(keys, function (e, h) { - // It's safer putting handlers resolution inside the callback - handler = (0, _underscore.isString)(handler) ? cmd.get(handler) : handler; - (typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) == 'object' ? handler.run(editor) : handler(editor); - var args = [id, h.shortcut, e]; - em.trigger.apply(em, ['keymap:emit'].concat(args)); - em.trigger.apply(em, ['keymap:emit:' + id].concat(args)); - }); - em.trigger('keymap:add', keymap); - return keymap; - }, - - - /** - * Get the keymap by id - * @param {string} id Keymap id - * @return {Object} Keymap object - * @example - * keymaps.get('ns:my-keymap'); - * // -> {keys, handler}; - */ - get: function get(id) { - return keymaps[id]; - }, - - - /** - * Get all keymaps - * @return {Object} - * @example - * keymaps.getAll(); - * // -> {id1: {}, id2: {}}; - */ - getAll: function getAll() { - return keymaps; - }, - - - /** - * Remove the keymap by id - * @param {string} id Keymap id - * @return {Object} Removed keymap - * @example - * keymaps.remove('ns:my-keymap'); - * // -> {keys, handler}; - */ - remove: function remove(id) { - var em = this.em; - var keymap = this.get(id); - - if (keymap) { - delete keymaps[id]; - keymaster.unbind(keymap.keys); - em && em.trigger('keymap:remove', keymap); - return keymap; - } - } - }; -}; - -/***/ }), -/* 70 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** - * This module allows to manage the stack of changes applied in canvas - * - * You can access the module in this way - * ```js - * const um = editor.UndoManager; - * ``` - * - */ - - -var _backboneUndo = __webpack_require__(71); - -var _backboneUndo2 = _interopRequireDefault(_backboneUndo); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = function () { - var em = void 0; - var um = void 0; - var config = void 0; - var beforeCache = void 0; - var configDef = {}; - - return { - name: 'UndoManager', - - /** - * Initialize module - * @param {Object} config Configurations - * @private - */ - init: function init() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - config = _extends({}, opts, configDef); - em = config.em; - this.em = em; - um = new _backboneUndo2.default({ track: true, register: [] }); - um.changeUndoType('change', { condition: false }); - um.changeUndoType('add', { - on: function on(model, collection) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - if (options.avoidStore) return; - return { - object: collection, - before: undefined, - after: model, - options: _extends({}, options) - }; - } - }); - um.changeUndoType('remove', { - on: function on(model, collection) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - if (options.avoidStore) return; - return { - object: collection, - before: model, - after: undefined, - options: _extends({}, options) - }; - } - }); - var customUndoType = { - on: function on(object, value) { - var opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - !beforeCache && (beforeCache = object.previousAttributes()); - - if (opt.avoidStore) { - return; - } else { - var result = { - object: object, - before: beforeCache, - after: object.toJSON() - }; - beforeCache = null; - return result; - } - }, - undo: function undo(model, bf, af, opt) { - model.set(bf); - }, - redo: function redo(model, bf, af, opt) { - model.set(af); - } - }; - - var events = ['style', 'attributes', 'content', 'src']; - events.forEach(function (ev) { - return um.addUndoType('change:' + ev, customUndoType); - }); - um.on('undo redo', function () { - return em.trigger('component:toggled change:canvasOffset'); - }); - ['undo', 'redo'].forEach(function (ev) { - return um.on(ev, function () { - return em.trigger(ev); - }); - }); - - return this; - }, - - - /** - * Get module configurations - * @return {Object} Configuration object - * @example - * const config = um.getConfig(); - * // { ... } - */ - getConfig: function getConfig() { - return config; - }, - - - /** - * Add an entity (Model/Collection) to track - * Note: New Components and CSSRules will be added automatically - * @param {Model|Collection} entity Entity to track - * @return {this} - * @example - * um.add(someModelOrCollection); - */ - add: function add(entity) { - um.register(entity); - return this; - }, - - - /** - * Remove and stop tracking the entity (Model/Collection) - * @param {Model|Collection} entity Entity to remove - * @return {this} - * @example - * um.remove(someModelOrCollection); - */ - remove: function remove(entity) { - um.unregister(entity); - return this; - }, - - - /** - * Remove all entities - * @return {this} - * @example - * um.removeAll(); - */ - removeAll: function removeAll() { - um.unregisterAll(); - return this; - }, - - - /** - * Start/resume tracking changes - * @return {this} - * @example - * um.start(); - */ - start: function start() { - um.startTracking(); - return this; - }, - - - /** - * Stop tracking changes - * @return {this} - * @example - * um.stop(); - */ - stop: function stop() { - um.stopTracking(); - return this; - }, - - - /** - * Undo last change - * @return {this} - * @example - * um.undo(); - */ - undo: function undo() { - if (!em.get('Canvas').isInputFocused()) um.undo(1); - return this; - }, - - - /** - * Undo all changes - * @return {this} - * @example - * um.undoAll(); - */ - undoAll: function undoAll() { - um.undoAll(); - return this; - }, - - - /** - * Redo last change - * @return {this} - * @example - * um.redo(); - */ - redo: function redo() { - if (!em.get('Canvas').isInputFocused()) um.redo(1); - return this; - }, - - - /** - * Redo all changes - * @return {this} - * @example - * um.redoAll(); - */ - redoAll: function redoAll() { - um.redoAll(); - return this; - }, - - - /** - * Checks if exists an available undo - * @return {Boolean} - * @example - * um.hasUndo(); - */ - hasUndo: function hasUndo() { - return um.isAvailable('undo'); - }, - - - /** - * Checks if exists an available redo - * @return {Boolean} - * @example - * um.hasRedo(); - */ - hasRedo: function hasRedo() { - return um.isAvailable('redo'); - }, - - - /** - * Get stack of changes - * @return {Collection} - * @example - * const stack = um.getStack(); - * stack.each(item => ...); - */ - getStack: function getStack() { - return um.stack; - }, - - - /** - * Clear the stack - * @return {this} - * @example - * um.clear(); - */ - clear: function clear() { - um.clear(); - return this; - }, - getInstance: function getInstance() { - return um; - } - }; -}; - -/***/ }), -/* 71 */ -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! - * Backbone.Undo.js v0.2 - * - * Copyright (c)2013 Oliver Sartun - * Released under the MIT License - * - * Documentation and full license available at - * https://github.com/osartun/Backbone.Undo.js - */ - - -(function (factory) { - if (true) { - // AMD support - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(25), __webpack_require__(72)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), - __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? - (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else if (typeof exports !== 'undefined') { - // CommonJS support - module.exports = factory( - require("underscore"), - require("backbone") - ); - } else { - // Non-modular execution - factory(_, Backbone); - } -})(function (_, Backbone) { - - var core_slice = Array.prototype.slice; - - /** - * As call is faster than apply, this is a faster version of apply as it uses call. - * - * @param {Function} fn The function to execute - * @param {Object} ctx The context the function should be called in - * @param {Array} args The array of arguments that should be applied to the function - * @return Forwards whatever the called function returns - */ - function apply (fn, ctx, args) { - return args.length <= 4 ? - fn.call(ctx, args[0], args[1], args[2], args[3]) : - fn.apply(ctx, args); - } - - /** - * Uses slice on an array or an array-like object. - * - * @param {Array|Object} arr The array or array-like object. - * @param {Number} [index] The index from where the array should be sliced. Default is 0. - * @return {Array} The sliced array - */ - function slice (arr, index) { - return core_slice.call(arr, index); - } - - /** - * Checks if an object has one or more specific keys. The keys - * don't have to be an owned property. - * You can call this function either this way: - * hasKeys(obj, ["a", "b", "c"]) - * or this way: - * hasKeys(obj, "a", "b", "c") - * - * @param {Object} obj The object to check on - * @param {Array} keys The keys to check for - * @return {Boolean} True, if the object has all those keys - */ - function hasKeys (obj, keys) { - if (obj == null) return false; - if (!_.isArray(keys)) { - keys = slice(arguments, 1); - } - return _.all(keys, function (key) { - return key in obj; - }); - } - - /** - * Returns a number that is unique per call stack. The number gets - * changed after the call stack has been completely processed. - * - * @return {number} MagicFusionIndex - */ - var getMagicFusionIndex = (function () { - // If you add several models to a collection or set several - // attributes on a model all in sequence and yet all for - // example in one function, then several Undo-Actions are - // generated. - // If you want to undo your last action only the last model - // would be removed from the collection or the last set - // attribute would be changed back to its previous value. - // To prevent that we have to figure out a way to combine - // all those actions that happened "at the same time". - // Timestamps aren't exact enough. A complex routine could - // run several milliseconds and in that time produce a lot - // of actions with different timestamps. - // Instead we take advantage of the single-threadedness of - // JavaScript: - - var callstackWasIndexed = false, magicFusionIndex = -1; - function indexCycle() { - magicFusionIndex++; - callstackWasIndexed = true; - _.defer(function () { - // Here comes the magic. With a Timeout of 0 - // milliseconds this function gets called whenever - // the current callstack is completed - callstackWasIndexed = false; - }) - } - return function () { - if (!callstackWasIndexed) { - indexCycle(); - } - return magicFusionIndex; - } - })(); - - /** - * To prevent binding a listener several times to one - * object, we register the objects in an ObjectRegistry - * - * @constructor - */ - function ObjectRegistry () { - // This uses two different ways of storing - // objects: In case the object has a cid - // (which Backbone objects typically have) - // it uses this cid as an index. That way - // the Array's length attribute doesn't - // change and the object isn't an item - // in the array, but an object-property. - // Otherwise it's added to the Array as an - // item. - // That way we can use the fast property- - // lookup and only have to fall back to - // iterating over the array in case - // non-Backbone-objects are registered. - this.registeredObjects = []; - // To return a list of all registered - // objects in the 'get' method we have to - // store the objects that have a cid in - // an additional array. - this.cidIndexes = []; - } - ObjectRegistry.prototype = { - /** - * Returns whether the object is already registered in this ObjectRegistry or not. - * - * @this {ObjectRegistry} - * @param {Object} obj The object to check - * @return {Boolean} True if the object is already registered - */ - isRegistered: function (obj) { - // This is where we get a performance boost - // by using the two different ways of storing - // objects. - return obj && obj.cid ? this.registeredObjects[obj.cid] : _.contains(this.registeredObjects, obj); - }, - /** - * Registers an object in this ObjectRegistry. - * - * @this {ObjectRegistry} - * @param {Object} obj The object to register - * @return {undefined} - */ - register: function (obj) { - if (!this.isRegistered(obj)) { - if (obj && obj.cid) { - this.registeredObjects[obj.cid] = obj; - this.cidIndexes.push(obj.cid); - } else { - this.registeredObjects.push(obj); - } - return true; - } - return false; - }, - /** - * Unregisters an object from this ObjectRegistry. - * - * @this {ObjectRegistry} - * @param {Object} obj The object to unregister - * @return {undefined} - */ - unregister: function (obj) { - if (this.isRegistered(obj)) { - if (obj && obj.cid) { - delete this.registeredObjects[obj.cid]; - this.cidIndexes.splice(_.indexOf(this.cidIndexes, obj.cid), 1); - } else { - var i = _.indexOf(this.registeredObjects, obj); - this.registeredObjects.splice(i, 1); - } - return true; - } - return false; - }, - /** - * Returns an array of all objects that are currently in this ObjectRegistry. - * - * @return {Array} An array of all the objects which are currently in the ObjectRegistry - */ - get: function () { - return (_.map(this.cidIndexes, function (cid) {return this.registeredObjects[cid];}, this)).concat(this.registeredObjects); - } - } - - /** - * Binds or unbinds the "all"-listener for one or more objects. - * - * @param {String} which Either "on" or "off" - * @param {Object[]} objects Array of the objects on which the "all"-listener should be bound / unbound to - * @param {Function} [fn] The function that should be bound / unbound. Optional in case of "off" - * @param {Object} [ctx] The context the function should be called in - * @return {undefined} - */ - function onoff(which, objects, fn, ctx) { - for (var i = 0, l = objects.length, obj; i < l; i++) { - obj = objects[i]; - if (!obj) continue; - if (which === "on") { - if (!ctx.objectRegistry.register(obj)) { - // register returned false, so obj was already registered - continue; - } - } else { - if (!ctx.objectRegistry.unregister(obj)) { - // unregister returned false, so obj wasn't registered - continue; - } - } - if (_.isFunction(obj[which])) { - obj[which]("all", fn, ctx); - } - } - } - - /** - * Calls the undo/redo-function for a specific action. - * - * @param {String} which Either "undo" or "redo" - * @param {Object} action The Action's attributes - * @return {undefined} - */ - function actionUndoRedo (which, action) { - var type = action.type, undoTypes = action.undoTypes, fn = !undoTypes[type] || undoTypes[type][which]; - if (_.isFunction(fn)) { - fn(action.object, action.before, action.after, action.options); - } - } - - /** - * The main undo/redo function. - * - * @param {String} which Either "undo" or "redo" - * @param {UndoManager} manager The UndoManager-instance on which an "undo"/"redo"-Event is triggered afterwards - * @param {UndoStack} stack The UndoStack on which we perform - * @param {Boolean} magic If true, undoes / redoes all actions with the same magicFusionIndex - * @param {Boolean} everything If true, undoes / redoes every action that had been tracked - * @return {undefined} - */ - function managerUndoRedo (which, manager, stack, magic, everything) { - if (stack.isCurrentlyUndoRedoing || - (which === "undo" && stack.pointer === -1) || - (which === "redo" && stack.pointer === stack.length - 1)) { - // We're either currently in an undo- / redo-process or - // we reached the end of the stack - return; - } - stack.isCurrentlyUndoRedoing = true; - var action, actions, isUndo = which === "undo"; - if (everything) { - // Undo / Redo all steps until you reach the stack's beginning / end - actions = isUndo && stack.pointer === stack.length - 1 || // If at the stack's end calling undo - !isUndo && stack.pointer === -1 ? // or at the stack's beginning calling redo - _.clone(stack.models) : // => Take all the models. Otherwise: - core_slice.apply(stack.models, isUndo ? [0, stack.pointer] : [stack.pointer, stack.length - 1]); - } else { - // Undo / Redo only one step - action = stack.at(isUndo ? stack.pointer : stack.pointer + 1); - actions = magic ? stack.where({"magicFusionIndex": action.get("magicFusionIndex")}) : [action]; - } - - stack.pointer += (isUndo ? -1 : 1) * actions.length; - while (action = isUndo ? actions.pop() : actions.shift()) { - // Here we're calling the Action's undo / redo method - action[which](); - } - stack.isCurrentlyUndoRedoing = false; - - manager.trigger(which, manager); - } - - /** - * Checks whether an UndoAction should be created or not. Therefore it checks - * whether a "condition" property is set in the undoTypes-object of the specific - * event type. If not, it returns true. If it's set and a boolean, it returns it. - * If it's a function, it returns its result, converting it into a boolean. - * Otherwise it returns true. - * - * @param {Object} undoTypesType The object within the UndoTypes that holds the function for this event type (i.e. "change") - * @param {Arguments} args The arguments the "condition" function is called with - * @return {Boolean} True, if an UndoAction should be created - */ - function validateUndoActionCreation (undoTypesType, args) { - var condition = undoTypesType.condition, type = typeof condition; - return type === "function" ? !!apply(condition, undoTypesType, args) : - type === "boolean" ? condition : true; - } - - /** - * Adds an Undo-Action to the stack. - * - * @param {UndoStack} stack The undostack the action should be added to. - * @param {String} type The event type (i.e. "change") - * @param {Arguments} args The arguments passed to the undoTypes' "on"-handler - * @param {OwnedUndoTypes} undoTypes The undoTypes-object which has the "on"-handler - * @return {undefined} - */ - function addToStack(stack, type, args, undoTypes) { - if (stack.track && !stack.isCurrentlyUndoRedoing && type in undoTypes && - validateUndoActionCreation(undoTypes[type], args)) { - // An UndoAction should be created - var res = apply(undoTypes[type]["on"], undoTypes[type], args), diff; - if (hasKeys(res, "object", "before", "after")) { - res.type = type; - res.magicFusionIndex = getMagicFusionIndex(); - res.undoTypes = undoTypes; - if (stack.pointer < stack.length - 1) { - // New Actions must always be added to the end of the stack. - // If the pointer is not pointed to the last action in the - // stack, presumably because actions were undone before, then - // all following actions must be discarded - var diff = stack.length - stack.pointer - 1; - while (diff--) { - stack.pop(); - } - } - stack.pointer = stack.length; - stack.add(res); - if (stack.length > stack.maximumStackLength) { - stack.shift(); - stack.pointer--; - } - } - } - } - - - /** - * Predefined UndoTypes object with default handlers for the most common events. - * @type {Object} - */ - var UndoTypes = { - "add": { - "undo": function (collection, ignore, model, options) { - // Undo add = remove - collection.remove(model, options); - }, - "redo": function (collection, ignore, model, options) { - // Redo add = add - if (options.index) { - options.at = options.index; - } - collection.add(model, options); - }, - "on": function (model, collection, options) { - return { - object: collection, - before: undefined, - after: model, - options: _.clone(options) - }; - } - }, - "remove": { - "undo": function (collection, model, ignore, options) { - if ("index" in options) { - options.at = options.index; - } - collection.add(model, options); - }, - "redo": function (collection, model, ignore, options) { - collection.remove(model, options); - }, - "on": function (model, collection, options) { - return { - object: collection, - before: model, - after: undefined, - options: _.clone(options) - }; - } - }, - "change": { - "undo": function (model, before, after, options) { - if (_.isEmpty(before)) { - _.each(_.keys(after), model.unset, model); - } else { - model.set(before); - if (options && options.unsetData && options.unsetData.before && options.unsetData.before.length) { - _.each(options.unsetData.before, model.unset, model); - } - } - }, - "redo": function (model, before, after, options) { - if (_.isEmpty(after)) { - _.each(_.keys(before), model.unset, model); - } else { - model.set(after); - if (options && options.unsetData && options.unsetData.after && options.unsetData.after.length) { - _.each(options.unsetData.after, model.unset, model); - } - } - }, - "on": function (model, options) { - var - afterAttributes = model.changedAttributes(), - keysAfter = _.keys(afterAttributes), - previousAttributes = _.pick(model.previousAttributes(), keysAfter), - keysPrevious = _.keys(previousAttributes), - unsetData = (options || (options = {})).unsetData = { - after: [], - before: [] - }; - - if (keysAfter.length != keysPrevious.length) { - // There are new attributes or old attributes have been unset - if (keysAfter.length > keysPrevious.length) { - // New attributes have been added - _.each(keysAfter, function (val) { - if (!(val in previousAttributes)) { - unsetData.before.push(val); - } - }, this); - } else { - // Old attributes have been unset - _.each(keysPrevious, function (val) { - if (!(val in afterAttributes)) { - unsetData.after.push(val); - } - }) - } - } - return { - object: model, - before: previousAttributes, - after: afterAttributes, - options: _.clone(options) - }; - } - }, - "reset": { - "undo": function (collection, before, after) { - collection.reset(before); - }, - "redo": function (collection, before, after) { - collection.reset(after); - }, - "on": function (collection, options) { - return { - object: collection, - before: options.previousModels, - after: _.clone(collection.models) - }; - } - } - }; - - /** - * Every UndoManager instance has an own undoTypes object - * which is an instance of OwnedUndoTypes. OwnedUndoTypes' - * prototype is the global UndoTypes object. Changes to the - * global UndoTypes object take effect on every instance of - * UndoManager as the object is its prototype. And yet every - * local UndoTypes object can be changed individually. - * - * @constructor - */ - function OwnedUndoTypes () {} - OwnedUndoTypes.prototype = UndoTypes; - - /** - * Adds, changes or removes an undo-type from an UndoTypes-object. - * You can call it this way: - * manipulateUndoType (1, "reset", {"on": function () {}}, undoTypes) - * or this way to perform bulk actions: - * manipulateUndoType (1, {"reset": {"on": function () {}}}, undoTypes) - * In case of removing undo-types you can pass an Array for performing - * bulk actions: - * manipulateUndoType(2, ["reset", "change"], undoTypes) - * - * @param {Number} manipType Indicates the kind of action to execute: 0 for add, 1 for change, 2 for remove - * @param {String|Object|Array} undoType The type of undoType that should be added/changed/removed. Can be an object / array to perform bulk actions - * @param {Object} [fns] Object with the functions to add / change. Is optional in case you passed an object as undoType that contains these functions - * @param {OwnedUndoTypes|UndoTypes} undoTypesInstance The undoTypes object to act on - * @return {undefined} - */ - function manipulateUndoType (manipType, undoType, fns, undoTypesInstance) { - // manipType, passed by the calling function - // 0: add - // 1: change - // 2: remove - if (typeof undoType === "object") { - // bulk action. Iterate over this data. - return _.each(undoType, function (val, key) { - if (manipType === 2) { // remove - // undoType is an array - manipulateUndoType (manipType, val, fns, undoTypesInstance); - } else { - // undoType is an object - manipulateUndoType (manipType, key, val, fns); - } - }) - } - - switch (manipType) { - case 0: // add - if (hasKeys(fns, "undo", "redo", "on") && _.all(_.pick(fns, "undo", "redo", "on"), _.isFunction)) { - undoTypesInstance[undoType] = fns; - } - break; - case 1: // change - if (undoTypesInstance[undoType] && _.isObject(fns)) { - // undoTypeInstance[undoType] may be a prototype's property - // So, if we did this _.extend(undoTypeInstance[undoType], fns) - // we would extend the object on the prototype which means - // that this change would have a global effect - // Instead we just want to manipulate this instance. That's why - // we're doing this: - undoTypesInstance[undoType] = _.extend({}, undoTypesInstance[undoType], fns); - } - break; - case 2: // remove - delete undoTypesInstance[undoType]; - break; - } - return this; - } - - /** - * Instantiating "Action" creates the UndoActions that - * are collected in an UndoStack. It holds all relevant - * data to undo / redo an action and has an undo / redo - * method. - */ - var Action = Backbone.Model.extend({ - defaults: { - type: null, // "add", "change", "reset", etc. - object: null, // The object on which the action occurred - before: null, // The previous values which were changed with this action - after: null, // The values after this action - magicFusionIndex: null // The magicFusionIndex helps to combine - // all actions that occurred "at the same time" to undo/redo them altogether - }, - /** - * Undoes this action. - * @param {OwnedUndoTypes|UndoTypes} undoTypes The undoTypes object which contains the "undo"-handler that should be used - * @return {undefined} - */ - undo: function (undoTypes) { - actionUndoRedo("undo", this.attributes); - }, - /** - * Redoes this action. - * @param {OwnedUndoTypes|UndoTypes} undoTypes The undoTypes object which contains the "redo"-handler that should be used - * @return {undefined} - */ - redo: function (undoTypes) { - actionUndoRedo("redo", this.attributes); - } - }), - /** - * An UndoStack is a collection of UndoActions in - * chronological order. - */ - UndoStack = Backbone.Collection.extend({ - model: Action, - pointer: -1, // The pointer indicates the index where we are located within the stack. We start at -1 - track: false, - isCurrentlyUndoRedoing: false, - maximumStackLength: Infinity, - setMaxLength: function (val) { - this.maximumStackLength = val; - } - }), - /** - * An instance of UndoManager can keep track of - * changes to objects and helps to undo them. - */ - UndoManager = Backbone.Model.extend({ - defaults: { - maximumStackLength: Infinity, - track: false - }, - /** - * The constructor function. - * @param {attr} [attr] Object with parameters. The available parameters are: - * - maximumStackLength {number} Set the undo-stack's maximum size - * - track {boolean} Start tracking changes right away - * @return {undefined} - */ - initialize: function (attr) { - this.stack = new UndoStack; - this.objectRegistry = new ObjectRegistry(); - this.undoTypes = new OwnedUndoTypes(); - - // sync the maximumStackLength attribute with our stack - this.stack.setMaxLength(this.get("maximumStackLength")); - this.on("change:maximumStackLength", function (model, value) { - this.stack.setMaxLength(value); - }, this); - - // Start tracking, if attr.track == true - if (attr && attr.track) { - this.startTracking(); - } - - // Register objects passed in the "register" attribute - if (attr && attr.register) { - if (_.isArray(attr.register) || _.isArguments(attr.register)) { - apply(this.register, this, attr.register); - } else { - this.register(attr.register); - } - } - }, - /** - * Starts tracking. Changes of registered objects won't be processed until you've called this function - * @return {undefined} - */ - startTracking: function () { - this.set("track", true); - this.stack.track = true; - }, - /** - * Stops tracking. Afterwards changes of registered objects won't be processed. - * @return {undefined} - */ - stopTracking: function () { - this.set("track", false); - this.stack.track = false; - }, - /** - * Return the state of the tracking - * @return {boolean} - */ - isTracking: function () { - return this.get("track"); - }, - /** - * This is the "all"-handler which is bound to registered - * objects. It creates an UndoAction from the event and adds - * it to the stack. - * - * @param {String} type The event type - * @return {undefined} - */ - _addToStack: function (type) { - addToStack(this.stack, type, slice(arguments, 1), this.undoTypes); - }, - /** - * Registers one or more objects to track their changes. - * @param {...Object} obj The object or objects of which changes should be tracked - * @return {undefined} - */ - register: function () { - onoff("on", arguments, this._addToStack, this); - }, - /** - * Unregisters one or more objects. - * @param {...Object} obj The object or objects of which changes shouldn't be tracked any longer - * @return {undefined} - */ - unregister: function () { - onoff("off", arguments, this._addToStack, this); - }, - /** - * Unregisters all previously registered objects. - * @return {undefined} - */ - unregisterAll: function () { - apply(this.unregister, this, this.objectRegistry.get()); - }, - /** - * Undoes the last action or the last set of actions in case 'magic' is true. - * @param {Boolean} [magic] If true, all actions that happened basically at the same time are undone together - * @return {undefined} - */ - undo: function (magic) { - managerUndoRedo("undo", this, this.stack, magic); - }, - - /** - * Undoes all actions ever tracked by the undo manager - * @return {undefined} - */ - undoAll: function () { - managerUndoRedo("undo", this, this.stack, false, true); - }, - - /** - * Redoes a previously undone action or a set of actions. - * @param {Boolean} [magic] If true, all actions that happened basically at the same time are redone together - * @return {undefined} - */ - redo: function (magic) { - managerUndoRedo("redo", this, this.stack, magic); - }, - - /** - * Redoes all actions ever tracked by the undo manager - * @return {undefined} - */ - redoAll: function () { - managerUndoRedo("redo", this, this.stack, false, true); - }, - /** - * Checks if there's an action in the stack that can be undone / redone - * @param {String} type Either "undo" or "redo" - * @return {Boolean} True if there is a set of actions which can be undone / redone - */ - isAvailable: function (type) { - var s = this.stack, l = s.length; - - switch (type) { - case "undo": return l > 0 && s.pointer > -1; - case "redo": return l > 0 && s.pointer < l - 1; - default: return false; - } - }, - /** - * Sets the stack-reference to the stack of another undoManager. - * @param {UndoManager} undoManager The undoManager whose stack-reference is set to this stack - * @return {undefined} - */ - merge: function (undoManager) { - // This sets the stack-reference to the stack of another - // undoManager so that the stack of this other undoManager - // is used by two different managers. - // This enables to set up a main-undoManager and besides it - // several others for special, exceptional cases (by using - // instance-based custom UndoTypes). Models / collections - // which need this special treatment are only registered at - // those special undoManagers. Those special ones are then - // merged into the main-undoManager to write on its stack. - // That way it's easier to manage exceptional cases. - var args = _.isArray(undoManager) ? undoManager : slice(arguments), manager; - while (manager = args.pop()) { - if (manager instanceof UndoManager && - manager.stack instanceof UndoStack) { - // set the stack reference to our stack - manager.stack = this.stack; - } - } - }, - /** - * Add an UndoType to this specific UndoManager-instance. - * @param {String} type The event this UndoType is made for - * @param {Object} fns An object of functions that are called to generate the data for an UndoAction or to process it. Must have the properties "undo", "redo" and "on". Can have the property "condition". - * @return {undefined} - */ - addUndoType: function (type, fns) { - manipulateUndoType(0, type, fns, this.undoTypes); - }, - /** - * Overwrite properties of an existing UndoType for this specific UndoManager-instance. - * @param {String} type The event the UndoType is made for - * @param {Object} fns An object of functions that are called to generate the data for an UndoAction or to process it. It extends the existing object. - * @return {undefined} - */ - changeUndoType: function (type, fns) { - manipulateUndoType(1, type, fns, this.undoTypes); - }, - /** - * Remove one or more UndoTypes of this specific UndoManager-instance to fall back to the global UndoTypes. - * @param {String|Array} type The event the UndoType that should be removed is made for. You can also pass an array of events. - * @return {undefined} - */ - removeUndoType: function (type) { - manipulateUndoType(2, type, undefined, this.undoTypes); - }, - - /** - * Removes all actions from the stack. - * @return {undefined} - */ - clear: function() { - this.stack.reset(); - this.stack.pointer = -1; - } - }); - - _.extend(UndoManager, { - /** - * Change the UndoManager's default attributes - * @param {Object} defaultAttributes An object with the new default values. - * @return {undefined} - */ - defaults: function (defaultAttributes) { - _.extend(UndoManager.prototype.defaults, defaultAttributes); - }, - /** - * Add an UndoType to the global UndoTypes-object. - * @param {String} type The event this UndoType is made for - * @param {Object} fns An object of functions that are called to generate the data for an UndoAction or to process it. Must have the properties "undo", "redo" and "on". Can have the property "condition". - * @return {undefined} - */ - "addUndoType": function (type, fns) { - manipulateUndoType(0, type, fns, UndoTypes); - }, - /** - * Overwrite properties of an existing UndoType in the global UndoTypes-object. - * @param {String} type The event the UndoType is made for - * @param {Object} fns An object of functions that are called to generate the data for an UndoAction or to process it. It extends the existing object. - * @return {undefined} - */ - "changeUndoType": function (type, fns) { - manipulateUndoType(1, type, fns, UndoTypes) - }, - /** - * Remove one or more UndoTypes of this specific UndoManager-instance to fall back to the global UndoTypes. - * @param {String|Array} type The event the UndoType that should be removed is made for. You can also pass an array of events. - * @return {undefined} - */ - "removeUndoType": function (type) { - manipulateUndoType(2, type, undefined, UndoTypes); - } - }) - - return Backbone.UndoManager = UndoManager; - -}); - - -/***/ }), -/* 72 */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Backbone.js 1.2.1 - -// (c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Backbone may be freely distributed under the MIT license. -// For all details and documentation: -// http://backbonejs.org - -(function(factory) { - - // Establish the root object, `window` (`self`) in the browser, or `global` on the server. - // We use `self` instead of `window` for `WebWorker` support. - var root = (typeof self == 'object' && self.self == self && self) || - (typeof global == 'object' && global.global == global && global); - - // Set up Backbone appropriately for the environment. Start with AMD. - if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(25), __webpack_require__(10), exports], __WEBPACK_AMD_DEFINE_RESULT__ = (function(_, $, exports) { - // Export global even in AMD case in case this script is loaded with - // others that may still expect a global Backbone. - root.Backbone = factory(root, exports, _, $); - }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - - // Next for Node.js or CommonJS. jQuery may not be needed as a module. - } else if (typeof exports !== 'undefined') { - var _ = require('underscore'), $; - try { $ = require('jquery'); } catch(e) {} - factory(root, exports, _, $); - - // Finally, as a browser global. - } else { - root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$)); - } - -}(function(root, Backbone, _, $) { - - // Initial Setup - // ------------- - - // Save the previous value of the `Backbone` variable, so that it can be - // restored later on, if `noConflict` is used. - var previousBackbone = root.Backbone; - - // Create a local reference to a common array method we'll want to use later. - var slice = [].slice; - - // Current version of the library. Keep in sync with `package.json`. - Backbone.VERSION = '1.2.1'; - - // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns - // the `$` variable. - Backbone.$ = $; - - // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable - // to its previous owner. Returns a reference to this Backbone object. - Backbone.noConflict = function() { - root.Backbone = previousBackbone; - return this; - }; - - // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option - // will fake `"PATCH"`, `"PUT"` and `"DELETE"` requests via the `_method` parameter and - // set a `X-Http-Method-Override` header. - Backbone.emulateHTTP = false; - - // Turn on `emulateJSON` to support legacy servers that can't deal with direct - // `application/json` requests ... this will encode the body as - // `application/x-www-form-urlencoded` instead and will send the model in a - // form param named `model`. - Backbone.emulateJSON = false; - - // Proxy Underscore methods to a Backbone class' prototype using a - // particular attribute as the data argument - var addMethod = function(length, method, attribute) { - switch (length) { - case 1: return function() { - return _[method](this[attribute]); - }; - case 2: return function(value) { - return _[method](this[attribute], value); - }; - case 3: return function(iteratee, context) { - return _[method](this[attribute], iteratee, context); - }; - case 4: return function(iteratee, defaultVal, context) { - return _[method](this[attribute], iteratee, defaultVal, context); - }; - default: return function() { - var args = slice.call(arguments); - args.unshift(this[attribute]); - return _[method].apply(_, args); - }; - } - }; - var addUnderscoreMethods = function(Class, methods, attribute) { - _.each(methods, function(length, method) { - if (_[method]) Class.prototype[method] = addMethod(length, method, attribute); - }); - }; - - // Backbone.Events - // --------------- - - // A module that can be mixed in to *any object* in order to provide it with - // custom events. You may bind with `on` or remove with `off` callback - // functions to an event; `trigger`-ing an event fires all callbacks in - // succession. - // - // var object = {}; - // _.extend(object, Backbone.Events); - // object.on('expand', function(){ alert('expanded'); }); - // object.trigger('expand'); - // - var Events = Backbone.Events = {}; - - // Regular expression used to split event strings. - var eventSplitter = /\s+/; - - // Iterates over the standard `event, callback` (as well as the fancy multiple - // space-separated events `"change blur", callback` and jQuery-style event - // maps `{event: callback}`), reducing them by manipulating `memo`. - // Passes a normalized single event name and callback, as well as any - // optional `opts`. - var eventsApi = function(iteratee, memo, name, callback, opts) { - var i = 0, names; - if (name && typeof name === 'object') { - // Handle event maps. - if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback; - for (names = _.keys(name); i < names.length ; i++) { - memo = iteratee(memo, names[i], name[names[i]], opts); - } - } else if (name && eventSplitter.test(name)) { - // Handle space separated event names. - for (names = name.split(eventSplitter); i < names.length; i++) { - memo = iteratee(memo, names[i], callback, opts); - } - } else { - memo = iteratee(memo, name, callback, opts); - } - return memo; - }; - - // Bind an event to a `callback` function. Passing `"all"` will bind - // the callback to all events fired. - Events.on = function(name, callback, context) { - return internalOn(this, name, callback, context); - }; - - // An internal use `on` function, used to guard the `listening` argument from - // the public API. - var internalOn = function(obj, name, callback, context, listening) { - obj._events = eventsApi(onApi, obj._events || {}, name, callback, { - context: context, - ctx: obj, - listening: listening - }); - - if (listening) { - var listeners = obj._listeners || (obj._listeners = {}); - listeners[listening.id] = listening; - } - - return obj; - }; - - // Inversion-of-control versions of `on`. Tell *this* object to listen to - // an event in another object... keeping track of what it's listening to. - Events.listenTo = function(obj, name, callback) { - if (!obj) return this; - var id = obj._listenId || (obj._listenId = _.uniqueId('l')); - var listeningTo = this._listeningTo || (this._listeningTo = {}); - var listening = listeningTo[id]; - - // This object is not listening to any other events on `obj` yet. - // Setup the necessary references to track the listening callbacks. - if (!listening) { - var thisId = this._listenId || (this._listenId = _.uniqueId('l')); - listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0}; - } - - // Bind callbacks on obj, and keep track of them on listening. - internalOn(obj, name, callback, this, listening); - return this; - }; - - // The reducing API that adds a callback to the `events` object. - var onApi = function(events, name, callback, options) { - if (callback) { - var handlers = events[name] || (events[name] = []); - var context = options.context, ctx = options.ctx, listening = options.listening; - if (listening) listening.count++; - - handlers.push({ callback: callback, context: context, ctx: context || ctx, listening: listening }); - } - return events; - }; - - // Remove one or many callbacks. If `context` is null, removes all - // callbacks with that function. If `callback` is null, removes all - // callbacks for the event. If `name` is null, removes all bound - // callbacks for all events. - Events.off = function(name, callback, context) { - if (!this._events) return this; - this._events = eventsApi(offApi, this._events, name, callback, { - context: context, - listeners: this._listeners - }); - return this; - }; - - // Tell this object to stop listening to either specific events ... or - // to every object it's currently listening to. - Events.stopListening = function(obj, name, callback) { - var listeningTo = this._listeningTo; - if (!listeningTo) return this; - - var ids = obj ? [obj._listenId] : _.keys(listeningTo); - - for (var i = 0; i < ids.length; i++) { - var listening = listeningTo[ids[i]]; - - // If listening doesn't exist, this object is not currently - // listening to obj. Break out early. - if (!listening) break; - - listening.obj.off(name, callback, this); - } - if (_.isEmpty(listeningTo)) this._listeningTo = void 0; - - return this; - }; - - // The reducing API that removes a callback from the `events` object. - var offApi = function(events, name, callback, options) { - // No events to consider. - if (!events) return; - - var i = 0, listening; - var context = options.context, listeners = options.listeners; - - // Delete all events listeners and "drop" events. - if (!name && !callback && !context) { - var ids = _.keys(listeners); - for (; i < ids.length; i++) { - listening = listeners[ids[i]]; - delete listeners[listening.id]; - delete listening.listeningTo[listening.objId]; - } - return; - } - - var names = name ? [name] : _.keys(events); - for (; i < names.length; i++) { - name = names[i]; - var handlers = events[name]; - - // Bail out if there are no events stored. - if (!handlers) break; - - // Replace events if there are any remaining. Otherwise, clean up. - var remaining = []; - for (var j = 0; j < handlers.length; j++) { - var handler = handlers[j]; - if ( - callback && callback !== handler.callback && - callback !== handler.callback._callback || - context && context !== handler.context - ) { - remaining.push(handler); - } else { - listening = handler.listening; - if (listening && --listening.count === 0) { - delete listeners[listening.id]; - delete listening.listeningTo[listening.objId]; - } - } - } - - // Update tail event if the list has any events. Otherwise, clean up. - if (remaining.length) { - events[name] = remaining; - } else { - delete events[name]; - } - } - if (_.size(events)) return events; - }; - - // Bind an event to only be triggered a single time. After the first time - // the callback is invoked, it will be removed. When multiple events are - // passed in using the space-separated syntax, the event will fire once for every - // event you passed in, not once for a combination of all events - Events.once = function(name, callback, context) { - // Map the event into a `{event: once}` object. - var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this)); - return this.on(events, void 0, context); - }; - - // Inversion-of-control versions of `once`. - Events.listenToOnce = function(obj, name, callback) { - // Map the event into a `{event: once}` object. - var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj)); - return this.listenTo(obj, events); - }; - - // Reduces the event callbacks into a map of `{event: onceWrapper}`. - // `offer` unbinds the `onceWrapper` after it has been called. - var onceMap = function(map, name, callback, offer) { - if (callback) { - var once = map[name] = _.once(function() { - offer(name, once); - callback.apply(this, arguments); - }); - once._callback = callback; - } - return map; - }; - - // Trigger one or many events, firing all bound callbacks. Callbacks are - // passed the same arguments as `trigger` is, apart from the event name - // (unless you're listening on `"all"`, which will cause your callback to - // receive the true name of the event as the first argument). - Events.trigger = function(name) { - if (!this._events) return this; - - var length = Math.max(0, arguments.length - 1); - var args = Array(length); - for (var i = 0; i < length; i++) args[i] = arguments[i + 1]; - - eventsApi(triggerApi, this._events, name, void 0, args); - return this; - }; - - // Handles triggering the appropriate event callbacks. - var triggerApi = function(objEvents, name, cb, args) { - if (objEvents) { - var events = objEvents[name]; - var allEvents = objEvents.all; - if (events && allEvents) allEvents = allEvents.slice(); - if (events) triggerEvents(events, args); - if (allEvents) triggerEvents(allEvents, [name].concat(args)); - } - return objEvents; - }; - - // A difficult-to-believe, but optimized internal dispatch function for - // triggering events. Tries to keep the usual cases speedy (most internal - // Backbone events have 3 arguments). - var triggerEvents = function(events, args) { - var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2]; - switch (args.length) { - case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return; - case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return; - case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return; - case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return; - default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return; - } - }; - - // Aliases for backwards compatibility. - Events.bind = Events.on; - Events.unbind = Events.off; - - // Allow the `Backbone` object to serve as a global event bus, for folks who - // want global "pubsub" in a convenient place. - _.extend(Backbone, Events); - - // Backbone.Model - // -------------- - - // Backbone **Models** are the basic data object in the framework -- - // frequently representing a row in a table in a database on your server. - // A discrete chunk of data and a bunch of useful, related methods for - // performing computations and transformations on that data. - - // Create a new model with the specified attributes. A client id (`cid`) - // is automatically generated and assigned for you. - var Model = Backbone.Model = function(attributes, options) { - var attrs = attributes || {}; - options || (options = {}); - this.cid = _.uniqueId(this.cidPrefix); - this.attributes = {}; - if (options.collection) this.collection = options.collection; - if (options.parse) attrs = this.parse(attrs, options) || {}; - attrs = _.defaults({}, attrs, _.result(this, 'defaults')); - this.set(attrs, options); - this.changed = {}; - this.initialize.apply(this, arguments); - }; - - // Attach all inheritable methods to the Model prototype. - _.extend(Model.prototype, Events, { - - // A hash of attributes whose current and previous value differ. - changed: null, - - // The value returned during the last failed validation. - validationError: null, - - // The default name for the JSON `id` attribute is `"id"`. MongoDB and - // CouchDB users may want to set this to `"_id"`. - idAttribute: 'id', - - // The prefix is used to create the client id which is used to identify models locally. - // You may want to override this if you're experiencing name clashes with model ids. - cidPrefix: 'c', - - // Initialize is an empty function by default. Override it with your own - // initialization logic. - initialize: function(){}, - - // Return a copy of the model's `attributes` object. - toJSON: function(options) { - return _.clone(this.attributes); - }, - - // Proxy `Backbone.sync` by default -- but override this if you need - // custom syncing semantics for *this* particular model. - sync: function() { - return Backbone.sync.apply(this, arguments); - }, - - // Get the value of an attribute. - get: function(attr) { - return this.attributes[attr]; - }, - - // Get the HTML-escaped value of an attribute. - escape: function(attr) { - return _.escape(this.get(attr)); - }, - - // Returns `true` if the attribute contains a value that is not null - // or undefined. - has: function(attr) { - return this.get(attr) != null; - }, - - // Special-cased proxy to underscore's `_.matches` method. - matches: function(attrs) { - return !!_.iteratee(attrs, this)(this.attributes); - }, - - // Set a hash of model attributes on the object, firing `"change"`. This is - // the core primitive operation of a model, updating the data and notifying - // anyone who needs to know about the change in state. The heart of the beast. - set: function(key, val, options) { - if (key == null) return this; - - // Handle both `"key", value` and `{key: value}` -style arguments. - var attrs; - if (typeof key === 'object') { - attrs = key; - options = val; - } else { - (attrs = {})[key] = val; - } - - options || (options = {}); - - // Run validation. - if (!this._validate(attrs, options)) return false; - - // Extract attributes and options. - var unset = options.unset; - var silent = options.silent; - var changes = []; - var changing = this._changing; - this._changing = true; - - if (!changing) { - this._previousAttributes = _.clone(this.attributes); - this.changed = {}; - } - - var current = this.attributes; - var changed = this.changed; - var prev = this._previousAttributes; - - // Check for changes of `id`. - if (this.idAttribute in attrs) this.id = attrs[this.idAttribute]; - - // For each `set` attribute, update or delete the current value. - for (var attr in attrs) { - val = attrs[attr]; - if (!_.isEqual(current[attr], val)) changes.push(attr); - if (!_.isEqual(prev[attr], val)) { - changed[attr] = val; - } else { - delete changed[attr]; - } - unset ? delete current[attr] : current[attr] = val; - } - - // Trigger all relevant attribute changes. - if (!silent) { - if (changes.length) this._pending = options; - for (var i = 0; i < changes.length; i++) { - this.trigger('change:' + changes[i], this, current[changes[i]], options); - } - } - - // You might be wondering why there's a `while` loop here. Changes can - // be recursively nested within `"change"` events. - if (changing) return this; - if (!silent) { - while (this._pending) { - options = this._pending; - this._pending = false; - this.trigger('change', this, options); - } - } - this._pending = false; - this._changing = false; - return this; - }, - - // Remove an attribute from the model, firing `"change"`. `unset` is a noop - // if the attribute doesn't exist. - unset: function(attr, options) { - return this.set(attr, void 0, _.extend({}, options, {unset: true})); - }, - - // Clear all attributes on the model, firing `"change"`. - clear: function(options) { - var attrs = {}; - for (var key in this.attributes) attrs[key] = void 0; - return this.set(attrs, _.extend({}, options, {unset: true})); - }, - - // Determine if the model has changed since the last `"change"` event. - // If you specify an attribute name, determine if that attribute has changed. - hasChanged: function(attr) { - if (attr == null) return !_.isEmpty(this.changed); - return _.has(this.changed, attr); - }, - - // Return an object containing all the attributes that have changed, or - // false if there are no changed attributes. Useful for determining what - // parts of a view need to be updated and/or what attributes need to be - // persisted to the server. Unset attributes will be set to undefined. - // You can also pass an attributes object to diff against the model, - // determining if there *would be* a change. - changedAttributes: function(diff) { - if (!diff) return this.hasChanged() ? _.clone(this.changed) : false; - var old = this._changing ? this._previousAttributes : this.attributes; - var changed = {}; - for (var attr in diff) { - var val = diff[attr]; - if (_.isEqual(old[attr], val)) continue; - changed[attr] = val; - } - return _.size(changed) ? changed : false; - }, - - // Get the previous value of an attribute, recorded at the time the last - // `"change"` event was fired. - previous: function(attr) { - if (attr == null || !this._previousAttributes) return null; - return this._previousAttributes[attr]; - }, - - // Get all of the attributes of the model at the time of the previous - // `"change"` event. - previousAttributes: function() { - return _.clone(this._previousAttributes); - }, - - // Fetch the model from the server, merging the response with the model's - // local attributes. Any changed attributes will trigger a "change" event. - fetch: function(options) { - options = _.extend({parse: true}, options); - var model = this; - var success = options.success; - options.success = function(resp) { - var serverAttrs = options.parse ? model.parse(resp, options) : resp; - if (!model.set(serverAttrs, options)) return false; - if (success) success.call(options.context, model, resp, options); - model.trigger('sync', model, resp, options); - }; - wrapError(this, options); - return this.sync('read', this, options); - }, - - // Set a hash of model attributes, and sync the model to the server. - // If the server returns an attributes hash that differs, the model's - // state will be `set` again. - save: function(key, val, options) { - // Handle both `"key", value` and `{key: value}` -style arguments. - var attrs; - if (key == null || typeof key === 'object') { - attrs = key; - options = val; - } else { - (attrs = {})[key] = val; - } - - options = _.extend({validate: true, parse: true}, options); - var wait = options.wait; - - // If we're not waiting and attributes exist, save acts as - // `set(attr).save(null, opts)` with validation. Otherwise, check if - // the model will be valid when the attributes, if any, are set. - if (attrs && !wait) { - if (!this.set(attrs, options)) return false; - } else { - if (!this._validate(attrs, options)) return false; - } - - // After a successful server-side save, the client is (optionally) - // updated with the server-side state. - var model = this; - var success = options.success; - var attributes = this.attributes; - options.success = function(resp) { - // Ensure attributes are restored during synchronous saves. - model.attributes = attributes; - var serverAttrs = options.parse ? model.parse(resp, options) : resp; - if (wait) serverAttrs = _.extend({}, attrs, serverAttrs); - if (serverAttrs && !model.set(serverAttrs, options)) return false; - if (success) success.call(options.context, model, resp, options); - model.trigger('sync', model, resp, options); - }; - wrapError(this, options); - - // Set temporary attributes if `{wait: true}` to properly find new ids. - if (attrs && wait) this.attributes = _.extend({}, attributes, attrs); - - var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update'); - if (method === 'patch' && !options.attrs) options.attrs = attrs; - var xhr = this.sync(method, this, options); - - // Restore attributes. - this.attributes = attributes; - - return xhr; - }, - - // Destroy this model on the server if it was already persisted. - // Optimistically removes the model from its collection, if it has one. - // If `wait: true` is passed, waits for the server to respond before removal. - destroy: function(options) { - options = options ? _.clone(options) : {}; - var model = this; - var success = options.success; - var wait = options.wait; - - var destroy = function() { - model.stopListening(); - model.trigger('destroy', model, model.collection, options); - }; - - options.success = function(resp) { - if (wait) destroy(); - if (success) success.call(options.context, model, resp, options); - if (!model.isNew()) model.trigger('sync', model, resp, options); - }; - - var xhr = false; - if (this.isNew()) { - _.defer(options.success); - } else { - wrapError(this, options); - xhr = this.sync('delete', this, options); - } - if (!wait) destroy(); - return xhr; - }, - - // Default URL for the model's representation on the server -- if you're - // using Backbone's restful methods, override this to change the endpoint - // that will be called. - url: function() { - var base = - _.result(this, 'urlRoot') || - _.result(this.collection, 'url') || - urlError(); - if (this.isNew()) return base; - var id = this.get(this.idAttribute); - return base.replace(/[^\/]$/, '$&/') + encodeURIComponent(id); - }, - - // **parse** converts a response into the hash of attributes to be `set` on - // the model. The default implementation is just to pass the response along. - parse: function(resp, options) { - return resp; - }, - - // Create a new model with identical attributes to this one. - clone: function() { - return new this.constructor(this.attributes); - }, - - // A model is new if it has never been saved to the server, and lacks an id. - isNew: function() { - return !this.has(this.idAttribute); - }, - - // Check if the model is currently in a valid state. - isValid: function(options) { - return this._validate({}, _.defaults({validate: true}, options)); - }, - - // Run validation against the next complete set of model attributes, - // returning `true` if all is well. Otherwise, fire an `"invalid"` event. - _validate: function(attrs, options) { - if (!options.validate || !this.validate) return true; - attrs = _.extend({}, this.attributes, attrs); - var error = this.validationError = this.validate(attrs, options) || null; - if (!error) return true; - this.trigger('invalid', this, error, _.extend(options, {validationError: error})); - return false; - } - - }); - - // Underscore methods that we want to implement on the Model. - var modelMethods = { keys: 1, values: 1, pairs: 1, invert: 1, pick: 0, - omit: 0, chain: 1, isEmpty: 1 }; - - // Mix in each Underscore method as a proxy to `Model#attributes`. - addUnderscoreMethods(Model, modelMethods, 'attributes'); - - // Backbone.Collection - // ------------------- - - // If models tend to represent a single row of data, a Backbone Collection is - // more analogous to a table full of data ... or a small slice or page of that - // table, or a collection of rows that belong together for a particular reason - // -- all of the messages in this particular folder, all of the documents - // belonging to this particular author, and so on. Collections maintain - // indexes of their models, both in order, and for lookup by `id`. - - // Create a new **Collection**, perhaps to contain a specific type of `model`. - // If a `comparator` is specified, the Collection will maintain - // its models in sort order, as they're added and removed. - var Collection = Backbone.Collection = function(models, options) { - options || (options = {}); - if (options.model) this.model = options.model; - if (options.comparator !== void 0) this.comparator = options.comparator; - this._reset(); - this.initialize.apply(this, arguments); - if (models) this.reset(models, _.extend({silent: true}, options)); - }; - - // Default options for `Collection#set`. - var setOptions = {add: true, remove: true, merge: true}; - var addOptions = {add: true, remove: false}; - - // Define the Collection's inheritable methods. - _.extend(Collection.prototype, Events, { - - // The default model for a collection is just a **Backbone.Model**. - // This should be overridden in most cases. - model: Model, - - // Initialize is an empty function by default. Override it with your own - // initialization logic. - initialize: function(){}, - - // The JSON representation of a Collection is an array of the - // models' attributes. - toJSON: function(options) { - return this.map(function(model) { return model.toJSON(options); }); - }, - - // Proxy `Backbone.sync` by default. - sync: function() { - return Backbone.sync.apply(this, arguments); - }, - - // Add a model, or list of models to the set. - add: function(models, options) { - return this.set(models, _.extend({merge: false}, options, addOptions)); - }, - - // Remove a model, or a list of models from the set. - remove: function(models, options) { - options = _.extend({}, options); - var singular = !_.isArray(models); - models = singular ? [models] : _.clone(models); - var removed = this._removeModels(models, options); - if (!options.silent && removed) this.trigger('update', this, options); - return singular ? removed[0] : removed; - }, - - // Update a collection by `set`-ing a new list of models, adding new ones, - // removing models that are no longer present, and merging models that - // already exist in the collection, as necessary. Similar to **Model#set**, - // the core operation for updating the data contained by the collection. - set: function(models, options) { - options = _.defaults({}, options, setOptions); - if (options.parse && !this._isModel(models)) models = this.parse(models, options); - var singular = !_.isArray(models); - models = singular ? (models ? [models] : []) : models.slice(); - var id, model, attrs, existing, sort; - var at = options.at; - if (at != null) at = +at; - if (at < 0) at += this.length + 1; - var sortable = this.comparator && (at == null) && options.sort !== false; - var sortAttr = _.isString(this.comparator) ? this.comparator : null; - var toAdd = [], toRemove = [], modelMap = {}; - var add = options.add, merge = options.merge, remove = options.remove; - var order = !sortable && add && remove ? [] : false; - var orderChanged = false; - - // Turn bare objects into model references, and prevent invalid models - // from being added. - for (var i = 0; i < models.length; i++) { - attrs = models[i]; - - // If a duplicate is found, prevent it from being added and - // optionally merge it into the existing model. - if (existing = this.get(attrs)) { - if (remove) modelMap[existing.cid] = true; - if (merge && attrs !== existing) { - attrs = this._isModel(attrs) ? attrs.attributes : attrs; - if (options.parse) attrs = existing.parse(attrs, options); - existing.set(attrs, options); - if (sortable && !sort && existing.hasChanged(sortAttr)) sort = true; - } - models[i] = existing; - - // If this is a new, valid model, push it to the `toAdd` list. - } else if (add) { - model = models[i] = this._prepareModel(attrs, options); - if (!model) continue; - toAdd.push(model); - this._addReference(model, options); - } - - // Do not add multiple models with the same `id`. - model = existing || model; - if (!model) continue; - id = this.modelId(model.attributes); - if (order && (model.isNew() || !modelMap[id])) { - order.push(model); - - // Check to see if this is actually a new model at this index. - orderChanged = orderChanged || !this.models[i] || model.cid !== this.models[i].cid; - } - - modelMap[id] = true; - } - - // Remove nonexistent models if appropriate. - if (remove) { - for (var i = 0; i < this.length; i++) { - if (!modelMap[(model = this.models[i]).cid]) toRemove.push(model); - } - if (toRemove.length) this._removeModels(toRemove, options); - } - - // See if sorting is needed, update `length` and splice in new models. - if (toAdd.length || orderChanged) { - if (sortable) sort = true; - this.length += toAdd.length; - if (at != null) { - for (var i = 0; i < toAdd.length; i++) { - this.models.splice(at + i, 0, toAdd[i]); - } - } else { - if (order) this.models.length = 0; - var orderedModels = order || toAdd; - for (var i = 0; i < orderedModels.length; i++) { - this.models.push(orderedModels[i]); - } - } - } - - // Silently sort the collection if appropriate. - if (sort) this.sort({silent: true}); - - // Unless silenced, it's time to fire all appropriate add/sort events. - if (!options.silent) { - var addOpts = at != null ? _.clone(options) : options; - for (var i = 0; i < toAdd.length; i++) { - if (at != null) addOpts.index = at + i; - (model = toAdd[i]).trigger('add', model, this, addOpts); - } - if (sort || orderChanged) this.trigger('sort', this, options); - if (toAdd.length || toRemove.length) this.trigger('update', this, options); - } - - // Return the added (or merged) model (or models). - return singular ? models[0] : models; - }, - - // When you have more items than you want to add or remove individually, - // you can reset the entire set with a new list of models, without firing - // any granular `add` or `remove` events. Fires `reset` when finished. - // Useful for bulk operations and optimizations. - reset: function(models, options) { - options = options ? _.clone(options) : {}; - for (var i = 0; i < this.models.length; i++) { - this._removeReference(this.models[i], options); - } - options.previousModels = this.models; - this._reset(); - models = this.add(models, _.extend({silent: true}, options)); - if (!options.silent) this.trigger('reset', this, options); - return models; - }, - - // Add a model to the end of the collection. - push: function(model, options) { - return this.add(model, _.extend({at: this.length}, options)); - }, - - // Remove a model from the end of the collection. - pop: function(options) { - var model = this.at(this.length - 1); - return this.remove(model, options); - }, - - // Add a model to the beginning of the collection. - unshift: function(model, options) { - return this.add(model, _.extend({at: 0}, options)); - }, - - // Remove a model from the beginning of the collection. - shift: function(options) { - var model = this.at(0); - return this.remove(model, options); - }, - - // Slice out a sub-array of models from the collection. - slice: function() { - return slice.apply(this.models, arguments); - }, - - // Get a model from the set by id. - get: function(obj) { - if (obj == null) return void 0; - var id = this.modelId(this._isModel(obj) ? obj.attributes : obj); - return this._byId[obj] || this._byId[id] || this._byId[obj.cid]; - }, - - // Get the model at the given index. - at: function(index) { - if (index < 0) index += this.length; - return this.models[index]; - }, - - // Return models with matching attributes. Useful for simple cases of - // `filter`. - where: function(attrs, first) { - var matches = _.matches(attrs); - return this[first ? 'find' : 'filter'](function(model) { - return matches(model.attributes); - }); - }, - - // Return the first model with matching attributes. Useful for simple cases - // of `find`. - findWhere: function(attrs) { - return this.where(attrs, true); - }, - - // Force the collection to re-sort itself. You don't need to call this under - // normal circumstances, as the set will maintain sort order as each item - // is added. - sort: function(options) { - if (!this.comparator) throw new Error('Cannot sort a set without a comparator'); - options || (options = {}); - - // Run sort based on type of `comparator`. - if (_.isString(this.comparator) || this.comparator.length === 1) { - this.models = this.sortBy(this.comparator, this); - } else { - this.models.sort(_.bind(this.comparator, this)); - } - - if (!options.silent) this.trigger('sort', this, options); - return this; - }, - - // Pluck an attribute from each model in the collection. - pluck: function(attr) { - return _.invoke(this.models, 'get', attr); - }, - - // Fetch the default set of models for this collection, resetting the - // collection when they arrive. If `reset: true` is passed, the response - // data will be passed through the `reset` method instead of `set`. - fetch: function(options) { - options = _.extend({parse: true}, options); - var success = options.success; - var collection = this; - options.success = function(resp) { - var method = options.reset ? 'reset' : 'set'; - collection[method](resp, options); - if (success) success.call(options.context, collection, resp, options); - collection.trigger('sync', collection, resp, options); - }; - wrapError(this, options); - return this.sync('read', this, options); - }, - - // Create a new instance of a model in this collection. Add the model to the - // collection immediately, unless `wait: true` is passed, in which case we - // wait for the server to agree. - create: function(model, options) { - options = options ? _.clone(options) : {}; - var wait = options.wait; - model = this._prepareModel(model, options); - if (!model) return false; - if (!wait) this.add(model, options); - var collection = this; - var success = options.success; - options.success = function(model, resp, callbackOpts) { - if (wait) collection.add(model, callbackOpts); - if (success) success.call(callbackOpts.context, model, resp, callbackOpts); - }; - model.save(null, options); - return model; - }, - - // **parse** converts a response into a list of models to be added to the - // collection. The default implementation is just to pass it through. - parse: function(resp, options) { - return resp; - }, - - // Create a new collection with an identical list of models as this one. - clone: function() { - return new this.constructor(this.models, { - model: this.model, - comparator: this.comparator - }); - }, - - // Define how to uniquely identify models in the collection. - modelId: function (attrs) { - return attrs[this.model.prototype.idAttribute || 'id']; - }, - - // Private method to reset all internal state. Called when the collection - // is first initialized or reset. - _reset: function() { - this.length = 0; - this.models = []; - this._byId = {}; - }, - - // Prepare a hash of attributes (or other model) to be added to this - // collection. - _prepareModel: function(attrs, options) { - if (this._isModel(attrs)) { - if (!attrs.collection) attrs.collection = this; - return attrs; - } - options = options ? _.clone(options) : {}; - options.collection = this; - var model = new this.model(attrs, options); - if (!model.validationError) return model; - this.trigger('invalid', this, model.validationError, options); - return false; - }, - - // Internal method called by both remove and set. - // Returns removed models, or false if nothing is removed. - _removeModels: function(models, options) { - var removed = []; - for (var i = 0; i < models.length; i++) { - var model = this.get(models[i]); - if (!model) continue; - - var index = this.indexOf(model); - this.models.splice(index, 1); - this.length--; - - if (!options.silent) { - options.index = index; - model.trigger('remove', model, this, options); - } - - removed.push(model); - this._removeReference(model, options); - } - return removed.length ? removed : false; - }, - - // Method for checking whether an object should be considered a model for - // the purposes of adding to the collection. - _isModel: function (model) { - return model instanceof Model; - }, - - // Internal method to create a model's ties to a collection. - _addReference: function(model, options) { - this._byId[model.cid] = model; - var id = this.modelId(model.attributes); - if (id != null) this._byId[id] = model; - model.on('all', this._onModelEvent, this); - }, - - // Internal method to sever a model's ties to a collection. - _removeReference: function(model, options) { - delete this._byId[model.cid]; - var id = this.modelId(model.attributes); - if (id != null) delete this._byId[id]; - if (this === model.collection) delete model.collection; - model.off('all', this._onModelEvent, this); - }, - - // Internal method called every time a model in the set fires an event. - // Sets need to update their indexes when models change ids. All other - // events simply proxy through. "add" and "remove" events that originate - // in other collections are ignored. - _onModelEvent: function(event, model, collection, options) { - if ((event === 'add' || event === 'remove') && collection !== this) return; - if (event === 'destroy') this.remove(model, options); - if (event === 'change') { - var prevId = this.modelId(model.previousAttributes()); - var id = this.modelId(model.attributes); - if (prevId !== id) { - if (prevId != null) delete this._byId[prevId]; - if (id != null) this._byId[id] = model; - } - } - this.trigger.apply(this, arguments); - } - - }); - - // Underscore methods that we want to implement on the Collection. - // 90% of the core usefulness of Backbone Collections is actually implemented - // right here: - var collectionMethods = { forEach: 3, each: 3, map: 3, collect: 3, reduce: 4, - foldl: 4, inject: 4, reduceRight: 4, foldr: 4, find: 3, detect: 3, filter: 3, - select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 2, - contains: 2, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3, - head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3, - without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3, - isEmpty: 1, chain: 1, sample: 3, partition: 3 }; - - // Mix in each Underscore method as a proxy to `Collection#models`. - addUnderscoreMethods(Collection, collectionMethods, 'models'); - - // Underscore methods that take a property name as an argument. - var attributeMethods = ['groupBy', 'countBy', 'sortBy', 'indexBy']; - - // Use attributes instead of properties. - _.each(attributeMethods, function(method) { - if (!_[method]) return; - Collection.prototype[method] = function(value, context) { - var iterator = _.isFunction(value) ? value : function(model) { - return model.get(value); - }; - return _[method](this.models, iterator, context); - }; - }); - - // Backbone.View - // ------------- - - // Backbone Views are almost more convention than they are actual code. A View - // is simply a JavaScript object that represents a logical chunk of UI in the - // DOM. This might be a single item, an entire list, a sidebar or panel, or - // even the surrounding frame which wraps your whole app. Defining a chunk of - // UI as a **View** allows you to define your DOM events declaratively, without - // having to worry about render order ... and makes it easy for the view to - // react to specific changes in the state of your models. - - // Creating a Backbone.View creates its initial element outside of the DOM, - // if an existing element is not provided... - var View = Backbone.View = function(options) { - this.cid = _.uniqueId('view'); - _.extend(this, _.pick(options, viewOptions)); - this._ensureElement(); - this.initialize.apply(this, arguments); - }; - - // Cached regex to split keys for `delegate`. - var delegateEventSplitter = /^(\S+)\s*(.*)$/; - - // List of view options to be merged as properties. - var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events']; - - // Set up all inheritable **Backbone.View** properties and methods. - _.extend(View.prototype, Events, { - - // The default `tagName` of a View's element is `"div"`. - tagName: 'div', - - // jQuery delegate for element lookup, scoped to DOM elements within the - // current view. This should be preferred to global lookups where possible. - $: function(selector) { - return this.$el.find(selector); - }, - - // Initialize is an empty function by default. Override it with your own - // initialization logic. - initialize: function(){}, - - // **render** is the core function that your view should override, in order - // to populate its element (`this.el`), with the appropriate HTML. The - // convention is for **render** to always return `this`. - render: function() { - return this; - }, - - // Remove this view by taking the element out of the DOM, and removing any - // applicable Backbone.Events listeners. - remove: function() { - this._removeElement(); - this.stopListening(); - return this; - }, - - // Remove this view's element from the document and all event listeners - // attached to it. Exposed for subclasses using an alternative DOM - // manipulation API. - _removeElement: function() { - this.$el.remove(); - }, - - // Change the view's element (`this.el` property) and re-delegate the - // view's events on the new element. - setElement: function(element) { - this.undelegateEvents(); - this._setElement(element); - this.delegateEvents(); - return this; - }, - - // Creates the `this.el` and `this.$el` references for this view using the - // given `el`. `el` can be a CSS selector or an HTML string, a jQuery - // context or an element. Subclasses can override this to utilize an - // alternative DOM manipulation API and are only required to set the - // `this.el` property. - _setElement: function(el) { - this.$el = el instanceof Backbone.$ ? el : Backbone.$(el); - this.el = this.$el[0]; - }, - - // Set callbacks, where `this.events` is a hash of - // - // *{"event selector": "callback"}* - // - // { - // 'mousedown .title': 'edit', - // 'click .button': 'save', - // 'click .open': function(e) { ... } - // } - // - // pairs. Callbacks will be bound to the view, with `this` set properly. - // Uses event delegation for efficiency. - // Omitting the selector binds the event to `this.el`. - delegateEvents: function(events) { - events || (events = _.result(this, 'events')); - if (!events) return this; - this.undelegateEvents(); - for (var key in events) { - var method = events[key]; - if (!_.isFunction(method)) method = this[method]; - if (!method) continue; - var match = key.match(delegateEventSplitter); - this.delegate(match[1], match[2], _.bind(method, this)); - } - return this; - }, - - // Add a single event listener to the view's element (or a child element - // using `selector`). This only works for delegate-able events: not `focus`, - // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer. - delegate: function(eventName, selector, listener) { - this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener); - return this; - }, - - // Clears all callbacks previously bound to the view by `delegateEvents`. - // You usually don't need to use this, but may wish to if you have multiple - // Backbone views attached to the same DOM element. - undelegateEvents: function() { - if (this.$el) this.$el.off('.delegateEvents' + this.cid); - return this; - }, - - // A finer-grained `undelegateEvents` for removing a single delegated event. - // `selector` and `listener` are both optional. - undelegate: function(eventName, selector, listener) { - this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener); - return this; - }, - - // Produces a DOM element to be assigned to your view. Exposed for - // subclasses using an alternative DOM manipulation API. - _createElement: function(tagName) { - return document.createElement(tagName); - }, - - // Ensure that the View has a DOM element to render into. - // If `this.el` is a string, pass it through `$()`, take the first - // matching element, and re-assign it to `el`. Otherwise, create - // an element from the `id`, `className` and `tagName` properties. - _ensureElement: function() { - if (!this.el) { - var attrs = _.extend({}, _.result(this, 'attributes')); - if (this.id) attrs.id = _.result(this, 'id'); - if (this.className) attrs['class'] = _.result(this, 'className'); - this.setElement(this._createElement(_.result(this, 'tagName'))); - this._setAttributes(attrs); - } else { - this.setElement(_.result(this, 'el')); - } - }, - - // Set attributes from a hash on this view's element. Exposed for - // subclasses using an alternative DOM manipulation API. - _setAttributes: function(attributes) { - this.$el.attr(attributes); - } - - }); - - // Backbone.sync - // ------------- - - // Override this function to change the manner in which Backbone persists - // models to the server. You will be passed the type of request, and the - // model in question. By default, makes a RESTful Ajax request - // to the model's `url()`. Some possible customizations could be: - // - // * Use `setTimeout` to batch rapid-fire updates into a single request. - // * Send up the models as XML instead of JSON. - // * Persist models via WebSockets instead of Ajax. - // - // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests - // as `POST`, with a `_method` parameter containing the true HTTP method, - // as well as all requests with the body as `application/x-www-form-urlencoded` - // instead of `application/json` with the model in a param named `model`. - // Useful when interfacing with server-side languages like **PHP** that make - // it difficult to read the body of `PUT` requests. - Backbone.sync = function(method, model, options) { - var type = methodMap[method]; - - // Default options, unless specified. - _.defaults(options || (options = {}), { - emulateHTTP: Backbone.emulateHTTP, - emulateJSON: Backbone.emulateJSON - }); - - // Default JSON-request options. - var params = {type: type, dataType: 'json'}; - - // Ensure that we have a URL. - if (!options.url) { - params.url = _.result(model, 'url') || urlError(); - } - - // Ensure that we have the appropriate request data. - if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) { - params.contentType = 'application/json'; - params.data = JSON.stringify(options.attrs || model.toJSON(options)); - } - - // For older servers, emulate JSON by encoding the request into an HTML-form. - if (options.emulateJSON) { - params.contentType = 'application/x-www-form-urlencoded'; - params.data = params.data ? {model: params.data} : {}; - } - - // For older servers, emulate HTTP by mimicking the HTTP method with `_method` - // And an `X-HTTP-Method-Override` header. - if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) { - params.type = 'POST'; - if (options.emulateJSON) params.data._method = type; - var beforeSend = options.beforeSend; - options.beforeSend = function(xhr) { - xhr.setRequestHeader('X-HTTP-Method-Override', type); - if (beforeSend) return beforeSend.apply(this, arguments); - }; - } - - // Don't process data on a non-GET request. - if (params.type !== 'GET' && !options.emulateJSON) { - params.processData = false; - } - - // Pass along `textStatus` and `errorThrown` from jQuery. - var error = options.error; - options.error = function(xhr, textStatus, errorThrown) { - options.textStatus = textStatus; - options.errorThrown = errorThrown; - if (error) error.call(options.context, xhr, textStatus, errorThrown); - }; - - // Make the request, allowing the user to override any Ajax options. - var xhr = options.xhr = Backbone.ajax(_.extend(params, options)); - model.trigger('request', model, xhr, options); - return xhr; - }; - - // Map from CRUD to HTTP for our default `Backbone.sync` implementation. - var methodMap = { - 'create': 'POST', - 'update': 'PUT', - 'patch': 'PATCH', - 'delete': 'DELETE', - 'read': 'GET' - }; - - // Set the default implementation of `Backbone.ajax` to proxy through to `$`. - // Override this if you'd like to use a different library. - Backbone.ajax = function() { - return Backbone.$.ajax.apply(Backbone.$, arguments); - }; - - // Backbone.Router - // --------------- - - // Routers map faux-URLs to actions, and fire events when routes are - // matched. Creating a new one sets its `routes` hash, if not set statically. - var Router = Backbone.Router = function(options) { - options || (options = {}); - if (options.routes) this.routes = options.routes; - this._bindRoutes(); - this.initialize.apply(this, arguments); - }; - - // Cached regular expressions for matching named param parts and splatted - // parts of route strings. - var optionalParam = /\((.*?)\)/g; - var namedParam = /(\(\?)?:\w+/g; - var splatParam = /\*\w+/g; - var escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g; - - // Set up all inheritable **Backbone.Router** properties and methods. - _.extend(Router.prototype, Events, { - - // Initialize is an empty function by default. Override it with your own - // initialization logic. - initialize: function(){}, - - // Manually bind a single named route to a callback. For example: - // - // this.route('search/:query/p:num', 'search', function(query, num) { - // ... - // }); - // - route: function(route, name, callback) { - if (!_.isRegExp(route)) route = this._routeToRegExp(route); - if (_.isFunction(name)) { - callback = name; - name = ''; - } - if (!callback) callback = this[name]; - var router = this; - Backbone.history.route(route, function(fragment) { - var args = router._extractParameters(route, fragment); - if (router.execute(callback, args, name) !== false) { - router.trigger.apply(router, ['route:' + name].concat(args)); - router.trigger('route', name, args); - Backbone.history.trigger('route', router, name, args); - } - }); - return this; - }, - - // Execute a route handler with the provided parameters. This is an - // excellent place to do pre-route setup or post-route cleanup. - execute: function(callback, args, name) { - if (callback) callback.apply(this, args); - }, - - // Simple proxy to `Backbone.history` to save a fragment into the history. - navigate: function(fragment, options) { - Backbone.history.navigate(fragment, options); - return this; - }, - - // Bind all defined routes to `Backbone.history`. We have to reverse the - // order of the routes here to support behavior where the most general - // routes can be defined at the bottom of the route map. - _bindRoutes: function() { - if (!this.routes) return; - this.routes = _.result(this, 'routes'); - var route, routes = _.keys(this.routes); - while ((route = routes.pop()) != null) { - this.route(route, this.routes[route]); - } - }, - - // Convert a route string into a regular expression, suitable for matching - // against the current location hash. - _routeToRegExp: function(route) { - route = route.replace(escapeRegExp, '\\$&') - .replace(optionalParam, '(?:$1)?') - .replace(namedParam, function(match, optional) { - return optional ? match : '([^/?]+)'; - }) - .replace(splatParam, '([^?]*?)'); - return new RegExp('^' + route + '(?:\\?([\\s\\S]*))?$'); - }, - - // Given a route, and a URL fragment that it matches, return the array of - // extracted decoded parameters. Empty or unmatched parameters will be - // treated as `null` to normalize cross-browser behavior. - _extractParameters: function(route, fragment) { - var params = route.exec(fragment).slice(1); - return _.map(params, function(param, i) { - // Don't decode the search params. - if (i === params.length - 1) return param || null; - return param ? decodeURIComponent(param) : null; - }); - } - - }); - - // Backbone.History - // ---------------- - - // Handles cross-browser history management, based on either - // [pushState](http://diveintohtml5.info/history.html) and real URLs, or - // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange) - // and URL fragments. If the browser supports neither (old IE, natch), - // falls back to polling. - var History = Backbone.History = function() { - this.handlers = []; - _.bindAll(this, 'checkUrl'); - - // Ensure that `History` can be used outside of the browser. - if (typeof window !== 'undefined') { - this.location = window.location; - this.history = window.history; - } - }; - - // Cached regex for stripping a leading hash/slash and trailing space. - var routeStripper = /^[#\/]|\s+$/g; - - // Cached regex for stripping leading and trailing slashes. - var rootStripper = /^\/+|\/+$/g; - - // Cached regex for stripping urls of hash. - var pathStripper = /#.*$/; - - // Has the history handling already been started? - History.started = false; - - // Set up all inheritable **Backbone.History** properties and methods. - _.extend(History.prototype, Events, { - - // The default interval to poll for hash changes, if necessary, is - // twenty times a second. - interval: 50, - - // Are we at the app root? - atRoot: function() { - var path = this.location.pathname.replace(/[^\/]$/, '$&/'); - return path === this.root && !this.getSearch(); - }, - - // Does the pathname match the root? - matchRoot: function() { - var path = this.decodeFragment(this.location.pathname); - var root = path.slice(0, this.root.length - 1) + '/'; - return root === this.root; - }, - - // Unicode characters in `location.pathname` are percent encoded so they're - // decoded for comparison. `%25` should not be decoded since it may be part - // of an encoded parameter. - decodeFragment: function(fragment) { - return decodeURI(fragment.replace(/%25/g, '%2525')); - }, - - // In IE6, the hash fragment and search params are incorrect if the - // fragment contains `?`. - getSearch: function() { - var match = this.location.href.replace(/#.*/, '').match(/\?.+/); - return match ? match[0] : ''; - }, - - // Gets the true hash value. Cannot use location.hash directly due to bug - // in Firefox where location.hash will always be decoded. - getHash: function(window) { - var match = (window || this).location.href.match(/#(.*)$/); - return match ? match[1] : ''; - }, - - // Get the pathname and search params, without the root. - getPath: function() { - var path = this.decodeFragment( - this.location.pathname + this.getSearch() - ).slice(this.root.length - 1); - return path.charAt(0) === '/' ? path.slice(1) : path; - }, - - // Get the cross-browser normalized URL fragment from the path or hash. - getFragment: function(fragment) { - if (fragment == null) { - if (this._usePushState || !this._wantsHashChange) { - fragment = this.getPath(); - } else { - fragment = this.getHash(); - } - } - return fragment.replace(routeStripper, ''); - }, - - // Start the hash change handling, returning `true` if the current URL matches - // an existing route, and `false` otherwise. - start: function(options) { - if (History.started) throw new Error('Backbone.history has already been started'); - History.started = true; - - // Figure out the initial configuration. Do we need an iframe? - // Is pushState desired ... is it available? - this.options = _.extend({root: '/'}, this.options, options); - this.root = this.options.root; - this._wantsHashChange = this.options.hashChange !== false; - this._hasHashChange = 'onhashchange' in window; - this._useHashChange = this._wantsHashChange && this._hasHashChange; - this._wantsPushState = !!this.options.pushState; - this._hasPushState = !!(this.history && this.history.pushState); - this._usePushState = this._wantsPushState && this._hasPushState; - this.fragment = this.getFragment(); - - // Normalize root to always include a leading and trailing slash. - this.root = ('/' + this.root + '/').replace(rootStripper, '/'); - - // Transition from hashChange to pushState or vice versa if both are - // requested. - if (this._wantsHashChange && this._wantsPushState) { - - // If we've started off with a route from a `pushState`-enabled - // browser, but we're currently in a browser that doesn't support it... - if (!this._hasPushState && !this.atRoot()) { - var root = this.root.slice(0, -1) || '/'; - this.location.replace(root + '#' + this.getPath()); - // Return immediately as browser will do redirect to new url - return true; - - // Or if we've started out with a hash-based route, but we're currently - // in a browser where it could be `pushState`-based instead... - } else if (this._hasPushState && this.atRoot()) { - this.navigate(this.getHash(), {replace: true}); - } - - } - - // Proxy an iframe to handle location events if the browser doesn't - // support the `hashchange` event, HTML5 history, or the user wants - // `hashChange` but not `pushState`. - if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) { - this.iframe = document.createElement('iframe'); - this.iframe.src = 'javascript:0'; - this.iframe.style.display = 'none'; - this.iframe.tabIndex = -1; - var body = document.body; - // Using `appendChild` will throw on IE < 9 if the document is not ready. - var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow; - iWindow.document.open(); - iWindow.document.close(); - iWindow.location.hash = '#' + this.fragment; - } - - // Add a cross-platform `addEventListener` shim for older browsers. - var addEventListener = window.addEventListener || function (eventName, listener) { - return attachEvent('on' + eventName, listener); - }; - - // Depending on whether we're using pushState or hashes, and whether - // 'onhashchange' is supported, determine how we check the URL state. - if (this._usePushState) { - addEventListener('popstate', this.checkUrl, false); - } else if (this._useHashChange && !this.iframe) { - addEventListener('hashchange', this.checkUrl, false); - } else if (this._wantsHashChange) { - this._checkUrlInterval = setInterval(this.checkUrl, this.interval); - } - - if (!this.options.silent) return this.loadUrl(); - }, - - // Disable Backbone.history, perhaps temporarily. Not useful in a real app, - // but possibly useful for unit testing Routers. - stop: function() { - // Add a cross-platform `removeEventListener` shim for older browsers. - var removeEventListener = window.removeEventListener || function (eventName, listener) { - return detachEvent('on' + eventName, listener); - }; - - // Remove window listeners. - if (this._usePushState) { - removeEventListener('popstate', this.checkUrl, false); - } else if (this._useHashChange && !this.iframe) { - removeEventListener('hashchange', this.checkUrl, false); - } - - // Clean up the iframe if necessary. - if (this.iframe) { - document.body.removeChild(this.iframe); - this.iframe = null; - } - - // Some environments will throw when clearing an undefined interval. - if (this._checkUrlInterval) clearInterval(this._checkUrlInterval); - History.started = false; - }, - - // Add a route to be tested when the fragment changes. Routes added later - // may override previous routes. - route: function(route, callback) { - this.handlers.unshift({route: route, callback: callback}); - }, - - // Checks the current URL to see if it has changed, and if it has, - // calls `loadUrl`, normalizing across the hidden iframe. - checkUrl: function(e) { - var current = this.getFragment(); - - // If the user pressed the back button, the iframe's hash will have - // changed and we should use that for comparison. - if (current === this.fragment && this.iframe) { - current = this.getHash(this.iframe.contentWindow); - } - - if (current === this.fragment) return false; - if (this.iframe) this.navigate(current); - this.loadUrl(); - }, - - // Attempt to load the current URL fragment. If a route succeeds with a - // match, returns `true`. If no defined routes matches the fragment, - // returns `false`. - loadUrl: function(fragment) { - // If the root doesn't match, no routes can match either. - if (!this.matchRoot()) return false; - fragment = this.fragment = this.getFragment(fragment); - return _.any(this.handlers, function(handler) { - if (handler.route.test(fragment)) { - handler.callback(fragment); - return true; - } - }); - }, - - // Save a fragment into the hash history, or replace the URL state if the - // 'replace' option is passed. You are responsible for properly URL-encoding - // the fragment in advance. - // - // The options object can contain `trigger: true` if you wish to have the - // route callback be fired (not usually desirable), or `replace: true`, if - // you wish to modify the current URL without adding an entry to the history. - navigate: function(fragment, options) { - if (!History.started) return false; - if (!options || options === true) options = {trigger: !!options}; - - // Normalize the fragment. - fragment = this.getFragment(fragment || ''); - - // Don't include a trailing slash on the root. - var root = this.root; - if (fragment === '' || fragment.charAt(0) === '?') { - root = root.slice(0, -1) || '/'; - } - var url = root + fragment; - - // Strip the hash and decode for matching. - fragment = this.decodeFragment(fragment.replace(pathStripper, '')); - - if (this.fragment === fragment) return; - this.fragment = fragment; - - // If pushState is available, we use it to set the fragment as a real URL. - if (this._usePushState) { - this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url); - - // If hash changes haven't been explicitly disabled, update the hash - // fragment to store history. - } else if (this._wantsHashChange) { - this._updateHash(this.location, fragment, options.replace); - if (this.iframe && (fragment !== this.getHash(this.iframe.contentWindow))) { - var iWindow = this.iframe.contentWindow; - - // Opening and closing the iframe tricks IE7 and earlier to push a - // history entry on hash-tag change. When replace is true, we don't - // want this. - if (!options.replace) { - iWindow.document.open(); - iWindow.document.close(); - } - - this._updateHash(iWindow.location, fragment, options.replace); - } - - // If you've told us that you explicitly don't want fallback hashchange- - // based history, then `navigate` becomes a page refresh. - } else { - return this.location.assign(url); - } - if (options.trigger) return this.loadUrl(fragment); - }, - - // Update the hash location, either replacing the current entry, or adding - // a new one to the browser history. - _updateHash: function(location, fragment, replace) { - if (replace) { - var href = location.href.replace(/(javascript:|#).*$/, ''); - location.replace(href + '#' + fragment); - } else { - // Some browsers require that `hash` contains a leading #. - location.hash = '#' + fragment; - } - } - - }); - - // Create the default Backbone.history. - Backbone.history = new History; - - // Helpers - // ------- - - // Helper function to correctly set up the prototype chain for subclasses. - // Similar to `goog.inherits`, but uses a hash of prototype properties and - // class properties to be extended. - var extend = function(protoProps, staticProps) { - var parent = this; - var child; - - // The constructor function for the new subclass is either defined by you - // (the "constructor" property in your `extend` definition), or defaulted - // by us to simply call the parent constructor. - if (protoProps && _.has(protoProps, 'constructor')) { - child = protoProps.constructor; - } else { - child = function(){ return parent.apply(this, arguments); }; - } - - // Add static properties to the constructor function, if supplied. - _.extend(child, parent, staticProps); - - // Set the prototype chain to inherit from `parent`, without calling - // `parent` constructor function. - var Surrogate = function(){ this.constructor = child; }; - Surrogate.prototype = parent.prototype; - child.prototype = new Surrogate; - - // Add prototype properties (instance properties) to the subclass, - // if supplied. - if (protoProps) _.extend(child.prototype, protoProps); - - // Set a convenience property in case the parent's prototype is needed - // later. - child.__super__ = parent.prototype; - - return child; - }; - - // Set up inheritance for the model, collection, router, view and history. - Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend; - - // Throw an error when a URL is needed, and none is supplied. - var urlError = function() { - throw new Error('A "url" property or function must be specified'); - }; - - // Wrap an optional error callback with a fallback error event. - var wrapError = function(model, options) { - var error = options.error; - options.error = function(resp) { - if (error) error.call(options.context, model, resp, options); - model.trigger('error', model, resp, options); - }; - }; - - return Backbone; - -})); - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) - -/***/ }), -/* 73 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/** - * Before using methods you should get first the module from the editor instance, in this way: - * - * ```js - * var storageManager = editor.StorageManager; - * ``` - */ -module.exports = function () { - var c = {}, - defaults = __webpack_require__(74), - LocalStorage = __webpack_require__(75), - RemoteStorage = __webpack_require__(76); - - var em = void 0; - var storages = {}; - var defaultStorages = {}; - var eventStart = 'storage:start'; - var eventEnd = 'storage:end'; - var eventError = 'storage:error'; - - return { - /** - * Name of the module - * @type {String} - * @private - */ - name: 'StorageManager', - - /** - * Initialize module. Automatically called with a new instance of the editor - * @param {Object} config Configurations - * @param {string} [config.id='gjs-'] The prefix for the fields, useful to differentiate storing/loading - * with multiple editors on the same page. For example, in local storage, the item of HTML will be saved like 'gjs-html' - * @param {Boolean} [config.autosave=true] Indicates if autosave mode is enabled, works in conjunction with stepsBeforeSave - * @param {number} [config.stepsBeforeSave=1] If autosave enabled, indicates how many steps/changes are necessary - * before autosave is triggered - * @param {string} [config.type='local'] Default storage type. Available: 'local' | 'remote' | ''(do not store) - * @private - * @example - * ... - * { - * autosave: false, - * type: 'remote', - * } - * ... - */ - init: function init(config) { - c = config || {}; - em = c.em; - - for (var name in defaults) { - if (!(name in c)) c[name] = defaults[name]; - } - - defaultStorages.remote = new RemoteStorage(c); - defaultStorages.local = new LocalStorage(c); - c.currentStorage = c.type; - this.loadDefaultProviders().setCurrent(c.type); - return this; - }, - - - /** - * Get configuration object - * @return {Object} - * */ - getConfig: function getConfig() { - return c; - }, - - - /** - * Checks if autosave is enabled - * @return {Boolean} - * */ - isAutosave: function isAutosave() { - return !!c.autosave; - }, - - - /** - * Set autosave value - * @param {Boolean} v - * @return {this} - * */ - setAutosave: function setAutosave(v) { - c.autosave = !!v; - return this; - }, - - - /** - * Returns number of steps required before trigger autosave - * @return {number} - * */ - getStepsBeforeSave: function getStepsBeforeSave() { - return c.stepsBeforeSave; - }, - - - /** - * Set steps required before trigger autosave - * @param {number} v - * @return {this} - * */ - setStepsBeforeSave: function setStepsBeforeSave(v) { - c.stepsBeforeSave = v; - return this; - }, - - - /** - * Add new storage - * @param {string} id Storage ID - * @param {Object} storage Storage wrapper - * @param {Function} storage.load Load method - * @param {Function} storage.store Store method - * @return {this} - * @example - * storageManager.add('local2', { - * load: function(keys, clb, clbErr) { - * var res = {}; - * for (var i = 0, len = keys.length; i < len; i++){ - * var v = localStorage.getItem(keys[i]); - * if(v) res[keys[i]] = v; - * } - * clb(res); // might be called inside some async method - * // In case of errors... - * // clbErr('Went something wrong'); - * }, - * store: function(data, clb, clbErr) { - * for(var key in data) - * localStorage.setItem(key, data[key]); - * clb(); // might be called inside some async method - * } - * }); - * */ - add: function add(id, storage) { - storages[id] = storage; - return this; - }, - - - /** - * Returns storage by id - * @param {string} id Storage ID - * @return {Object|null} - * */ - get: function get(id) { - return storages[id] || null; - }, - - - /** - * Returns all storages - * @return {Array} - * */ - getStorages: function getStorages() { - return storages; - }, - - - /** - * Returns current storage type - * @return {string} - * */ - getCurrent: function getCurrent() { - return c.currentStorage; - }, - - - /** - * Set current storage type - * @param {string} id Storage ID - * @return {this} - * */ - setCurrent: function setCurrent(id) { - c.currentStorage = id; - return this; - }, - - - /** - * Store key-value resources in the current storage - * @param {Object} data Data in key-value format, eg. {item1: value1, item2: value2} - * @param {Function} clb Callback function - * @return {Object|null} - * @example - * storageManager.store({item1: value1, item2: value2}); - * */ - store: function store(data, clb) { - var _this = this; - - var st = this.get(this.getCurrent()); - var toStore = {}; - this.onStart('store', data); - - for (var key in data) { - toStore[c.id + key] = data[key]; - } - - return st ? st.store(toStore, function (res) { - clb && clb(res); - _this.onEnd('store', res); - }, function (err) { - _this.onError('store', err); - }) : null; - }, - - - /** - * Load resource from the current storage by keys - * @param {string|Array} keys Keys to load - * @param {Function} clb Callback function - * @example - * storageManager.load(['item1', 'item2'], res => { - * // res -> {item1: value1, item2: value2} - * }); - * storageManager.load('item1', res => { - * // res -> {item1: value1} - * }); - * */ - load: function load(keys, clb) { - var _this2 = this; - - var st = this.get(this.getCurrent()); - var keysF = []; - var result = {}; - - if (typeof keys === 'string') keys = [keys]; - this.onStart('load', keys); - - for (var i = 0, len = keys.length; i < len; i++) { - keysF.push(c.id + keys[i]); - } - - if (st) { - st.load(keysF, function (res) { - // Restore keys name - var reg = new RegExp('^' + c.id + ''); - for (var itemKey in res) { - var itemKeyR = itemKey.replace(reg, ''); - result[itemKeyR] = res[itemKey]; - } - - clb && clb(result); - _this2.onEnd('load', result); - }, function (err) { - _this2.onError('load', err); - }); - } else { - clb && clb(result); - } - }, - - - /** - * Load default storages - * @return {this} - * @private - * */ - loadDefaultProviders: function loadDefaultProviders() { - for (var id in defaultStorages) { - this.add(id, defaultStorages[id]); - }return this; - }, - - - /** - * Get current storage - * @return {Storage} - * */ - getCurrentStorage: function getCurrentStorage() { - return this.get(this.getCurrent()); - }, - - - /** - * On start callback - * @private - */ - onStart: function onStart(ctx, data) { - if (em) { - em.trigger(eventStart); - ctx && em.trigger(eventStart + ':' + ctx, data); - } - }, - - - /** - * On end callback - * @private - */ - onEnd: function onEnd(ctx, data) { - if (em) { - em.trigger(eventEnd); - ctx && em.trigger(eventEnd + ':' + ctx, data); - } - }, - - - /** - * On error callback - * @private - */ - onError: function onError(ctx, data) { - if (em) { - em.trigger(eventError, data); - ctx && em.trigger(eventError + ':' + ctx, data); - this.onEnd(ctx, data); - } - }, - - - /** - * Check if autoload is possible - * @return {Boolean} - * @private - * */ - canAutoload: function canAutoload() { - var storage = this.getCurrentStorage(); - return storage && this.getConfig().autoload; - } - }; -}; - -/***/ }), -/* 74 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = { - // Prefix identifier that will be used inside storing and loading - id: 'gjs-', - - // Enable/Disable autosaving - autosave: 1, - - // Indicates if load data inside editor after init - autoload: 1, - - // Indicates which storage to use. Available: local | remote - type: 'local', - - // If autosave enabled, indicates how many steps (general changes to structure) - // need to be done before save. Useful with remoteStorage to reduce remote calls - stepsBeforeSave: 1, - - //Enable/Disable components model (JSON format) - storeComponents: 1, - - //Enable/Disable styles model (JSON format) - storeStyles: 1, - - //Enable/Disable saving HTML template - storeHtml: 1, - - //Enable/Disable saving CSS template - storeCss: 1, - - // ONLY FOR LOCAL STORAGE - // If enabled, checks if browser supports Local Storage - checkLocal: 1, - - // ONLY FOR REMOTE STORAGE - // Custom parameters to pass with the remote storage request, eg. csrf token - params: {}, - - // Custom headers for the remote storage request - headers: {}, - - // Endpoint where to save all stuff - urlStore: '', - - // Endpoint where to fetch data - urlLoad: '', - - //Callback before request - beforeSend: function beforeSend(jqXHR, settings) {}, - - - //Callback after request - onComplete: function onComplete(jqXHR, status) {}, - - - // set contentType paramater of $.ajax - // true: application/json; charset=utf-8' - // false: 'x-www-form-urlencoded' - contentTypeJson: false -}; - -/***/ }), -/* 75 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var Backbone = __webpack_require__(0); - -module.exports = Backbone.Model.extend({ - defaults: { - checkLocal: true - }, - - /** - * @private - */ - store: function store(data, clb) { - this.checkStorageEnvironment(); - - for (var key in data) { - localStorage.setItem(key, data[key]); - }if (typeof clb == 'function') { - clb(); - } - }, - - - /** - * @private - */ - load: function load(keys, clb) { - this.checkStorageEnvironment(); - var result = {}; - - for (var i = 0, len = keys.length; i < len; i++) { - var value = localStorage.getItem(keys[i]); - if (value) result[keys[i]] = value; - } - - if (typeof clb == 'function') { - clb(result); - } - - return result; - }, - - - /** - * @private - */ - remove: function remove(keys) { - this.checkStorageEnvironment(); - - for (var i = 0, len = keys.length; i < len; i++) { - localStorage.removeItem(keys[i]); - } - }, - - - /** - * Check storage environment - * @private - * */ - checkStorageEnvironment: function checkStorageEnvironment() { - if (this.get('checkLocal') && !localStorage) console.warn("Your browser doesn't support localStorage"); - } -}); - -/***/ }), -/* 76 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _fetch = __webpack_require__(26); - -var _fetch2 = _interopRequireDefault(_fetch); - -var _underscore = __webpack_require__(1); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = __webpack_require__(0).Model.extend({ - fetch: _fetch2.default, - - defaults: { - urlStore: '', - urlLoad: '', - params: {}, - beforeSend: function beforeSend() {}, - onComplete: function onComplete() {}, - - contentTypeJson: false - }, - - /** - * Triggered before the request is started - * @private - */ - onStart: function onStart() { - var em = this.get('em'); - var before = this.get('beforeSend'); - before && before(); - }, - - - /** - * Triggered on request error - * @param {Object} err Error - * @param {Function} [clbErr] Error callback - * @private - */ - onError: function onError(err, clbErr) { - if (clbErr) { - clbErr(err); - } else { - var em = this.get('em'); - console.error(err); - em && em.trigger('storage:error', err); - } - }, - - - /** - * Triggered on request response - * @param {string} text Response text - * @private - */ - onResponse: function onResponse(text, clb) { - var em = this.get('em'); - var complete = this.get('onComplete'); - var typeJson = this.get('contentTypeJson'); - var parsable = text && typeof text === 'string'; - var res = typeJson && parsable ? JSON.parse(text) : text; - complete && complete(res); - clb && clb(res); - em && em.trigger('storage:response', res); - }, - store: function store(data, clb, clbErr) { - var body = {}; - - for (var key in data) { - body[key] = data[key]; - } - - this.request(this.get('urlStore'), { body: body }, clb, clbErr); - }, - load: function load(keys, clb, clbErr) { - this.request(this.get('urlLoad'), { method: 'get' }, clb, clbErr); - }, - - - /** - * Execute remote request - * @param {string} url Url - * @param {Object} [opts={}] Options - * @param {Function} [clb=null] Callback - * @param {Function} [clbErr=null] Error callback - * @private - */ - request: function request(url) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var _this = this; - - var clb = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var clbErr = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - - var typeJson = this.get('contentTypeJson'); - var headers = this.get('headers') || {}; - var params = this.get('params'); - var reqHead = 'X-Requested-With'; - var typeHead = 'Content-Type'; - var bodyObj = opts.body || {}; - var fetchOptions = void 0; - var body = void 0; - - for (var param in params) { - bodyObj[param] = params[param]; - } - - if ((0, _underscore.isUndefined)(headers[reqHead])) { - headers[reqHead] = 'XMLHttpRequest'; - } - - // With `fetch`, have to send FormData without any 'Content-Type' - // https://stackoverflow.com/questions/39280438/fetch-missing-boundary-in-multipart-form-data-post - - if ((0, _underscore.isUndefined)(headers[typeHead]) && typeJson) { - headers[typeHead] = 'application/json; charset=utf-8'; - } - - if (typeJson) { - body = JSON.stringify(bodyObj); - } else { - body = new FormData(); - - for (var bodyKey in bodyObj) { - body.append(bodyKey, bodyObj[bodyKey]); - } - } - fetchOptions = { - method: opts.method || 'post', - credentials: 'include', - headers: headers - }; - - // Body should only be included on POST method - if (fetchOptions.method === 'post') { - fetchOptions.body = body; - } - - this.onStart(); - this.fetch(url, fetchOptions).then(function (res) { - return (res.status / 200 | 0) == 1 ? res.text() : res.text().then(function (text) { - return Promise.reject(text); - }); - }).then(function (text) { - return _this.onResponse(text, clb); - }).catch(function (err) { - return _this.onError(err, clbErr); - }); - } -}); - -/***/ }), -/* 77 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(setImmediate) { - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _finally = __webpack_require__(81); - -var _finally2 = _interopRequireDefault(_finally); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// Store setTimeout reference so promise-polyfill will be unaffected by -// other code modifying setTimeout (like sinon.useFakeTimers()) -var setTimeoutFunc = setTimeout; - -function noop() {} - -// Polyfill for Function.prototype.bind -function bind(fn, thisArg) { - return function () { - fn.apply(thisArg, arguments); - }; -} - -function Promise(fn) { - if (!(this instanceof Promise)) throw new TypeError('Promises must be constructed via new'); - if (typeof fn !== 'function') throw new TypeError('not a function'); - this._state = 0; - this._handled = false; - this._value = undefined; - this._deferreds = []; - - doResolve(fn, this); -} - -function handle(self, deferred) { - while (self._state === 3) { - self = self._value; - } - if (self._state === 0) { - self._deferreds.push(deferred); - return; - } - self._handled = true; - Promise._immediateFn(function () { - var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; - if (cb === null) { - (self._state === 1 ? resolve : reject)(deferred.promise, self._value); - return; - } - var ret; - try { - ret = cb(self._value); - } catch (e) { - reject(deferred.promise, e); - return; - } - resolve(deferred.promise, ret); - }); -} - -function resolve(self, newValue) { - try { - // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure - if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.'); - if (newValue && ((typeof newValue === 'undefined' ? 'undefined' : _typeof(newValue)) === 'object' || typeof newValue === 'function')) { - var then = newValue.then; - if (newValue instanceof Promise) { - self._state = 3; - self._value = newValue; - finale(self); - return; - } else if (typeof then === 'function') { - doResolve(bind(then, newValue), self); - return; - } - } - self._state = 1; - self._value = newValue; - finale(self); - } catch (e) { - reject(self, e); - } -} - -function reject(self, newValue) { - self._state = 2; - self._value = newValue; - finale(self); -} - -function finale(self) { - if (self._state === 2 && self._deferreds.length === 0) { - Promise._immediateFn(function () { - if (!self._handled) { - Promise._unhandledRejectionFn(self._value); - } - }); - } - - for (var i = 0, len = self._deferreds.length; i < len; i++) { - handle(self, self._deferreds[i]); - } - self._deferreds = null; -} - -function Handler(onFulfilled, onRejected, promise) { - this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; - this.onRejected = typeof onRejected === 'function' ? onRejected : null; - this.promise = promise; -} - -/** - * Take a potentially misbehaving resolver function and make sure - * onFulfilled and onRejected are only called once. - * - * Makes no guarantees about asynchrony. - */ -function doResolve(fn, self) { - var done = false; - try { - fn(function (value) { - if (done) return; - done = true; - resolve(self, value); - }, function (reason) { - if (done) return; - done = true; - reject(self, reason); - }); - } catch (ex) { - if (done) return; - done = true; - reject(self, ex); - } -} - -Promise.prototype['catch'] = function (onRejected) { - return this.then(null, onRejected); -}; - -Promise.prototype.then = function (onFulfilled, onRejected) { - var prom = new this.constructor(noop); - - handle(this, new Handler(onFulfilled, onRejected, prom)); - return prom; -}; - -Promise.prototype['finally'] = _finally2.default; - -Promise.all = function (arr) { - return new Promise(function (resolve, reject) { - if (!arr || typeof arr.length === 'undefined') throw new TypeError('Promise.all accepts an array'); - var args = Array.prototype.slice.call(arr); - if (args.length === 0) return resolve([]); - var remaining = args.length; - - function res(i, val) { - try { - if (val && ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' || typeof val === 'function')) { - var then = val.then; - if (typeof then === 'function') { - then.call(val, function (val) { - res(i, val); - }, reject); - return; - } - } - args[i] = val; - if (--remaining === 0) { - resolve(args); - } - } catch (ex) { - reject(ex); - } - } - - for (var i = 0; i < args.length; i++) { - res(i, args[i]); - } - }); -}; - -Promise.resolve = function (value) { - if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.constructor === Promise) { - return value; - } - - return new Promise(function (resolve) { - resolve(value); - }); -}; - -Promise.reject = function (value) { - return new Promise(function (resolve, reject) { - reject(value); - }); -}; - -Promise.race = function (values) { - return new Promise(function (resolve, reject) { - for (var i = 0, len = values.length; i < len; i++) { - values[i].then(resolve, reject); - } - }); -}; - -// Use polyfill for setImmediate for performance gains -Promise._immediateFn = typeof setImmediate === 'function' && function (fn) { - setImmediate(fn); -} || function (fn) { - setTimeoutFunc(fn, 0); -}; - -Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) { - if (typeof console !== 'undefined' && console) { - console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console - } -}; - -exports.default = Promise; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(78).setImmediate)) - -/***/ }), -/* 78 */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global) {var apply = Function.prototype.apply; - -// DOM APIs, for completeness - -exports.setTimeout = function() { - return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); -}; -exports.setInterval = function() { - return new Timeout(apply.call(setInterval, window, arguments), clearInterval); -}; -exports.clearTimeout = -exports.clearInterval = function(timeout) { - if (timeout) { - timeout.close(); - } -}; - -function Timeout(id, clearFn) { - this._id = id; - this._clearFn = clearFn; -} -Timeout.prototype.unref = Timeout.prototype.ref = function() {}; -Timeout.prototype.close = function() { - this._clearFn.call(window, this._id); -}; - -// Does not start the time, just sets up the members needed. -exports.enroll = function(item, msecs) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = msecs; -}; - -exports.unenroll = function(item) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = -1; -}; - -exports._unrefActive = exports.active = function(item) { - clearTimeout(item._idleTimeoutId); - - var msecs = item._idleTimeout; - if (msecs >= 0) { - item._idleTimeoutId = setTimeout(function onTimeout() { - if (item._onTimeout) - item._onTimeout(); - }, msecs); - } -}; - -// setimmediate attaches itself to the global object -__webpack_require__(79); -// On some exotic environments, it's not clear which object `setimmeidate` was -// able to install onto. Search each possibility in the same order as the -// `setimmediate` library. -exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) || - (typeof global !== "undefined" && global.setImmediate) || - (this && this.setImmediate); -exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) || - (typeof global !== "undefined" && global.clearImmediate) || - (this && this.clearImmediate); - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) - -/***/ }), -/* 79 */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) { - "use strict"; - - if (global.setImmediate) { - return; - } - - var nextHandle = 1; // Spec says greater than zero - var tasksByHandle = {}; - var currentlyRunningATask = false; - var doc = global.document; - var registerImmediate; - - function setImmediate(callback) { - // Callback can either be a function or a string - if (typeof callback !== "function") { - callback = new Function("" + callback); - } - // Copy function arguments - var args = new Array(arguments.length - 1); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i + 1]; - } - // Store and register the task - var task = { callback: callback, args: args }; - tasksByHandle[nextHandle] = task; - registerImmediate(nextHandle); - return nextHandle++; - } - - function clearImmediate(handle) { - delete tasksByHandle[handle]; - } - - function run(task) { - var callback = task.callback; - var args = task.args; - switch (args.length) { - case 0: - callback(); - break; - case 1: - callback(args[0]); - break; - case 2: - callback(args[0], args[1]); - break; - case 3: - callback(args[0], args[1], args[2]); - break; - default: - callback.apply(undefined, args); - break; - } - } - - function runIfPresent(handle) { - // From the spec: "Wait until any invocations of this algorithm started before this one have completed." - // So if we're currently running a task, we'll need to delay this invocation. - if (currentlyRunningATask) { - // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a - // "too much recursion" error. - setTimeout(runIfPresent, 0, handle); - } else { - var task = tasksByHandle[handle]; - if (task) { - currentlyRunningATask = true; - try { - run(task); - } finally { - clearImmediate(handle); - currentlyRunningATask = false; - } - } - } - } - - function installNextTickImplementation() { - registerImmediate = function(handle) { - process.nextTick(function () { runIfPresent(handle); }); - }; - } - - function canUsePostMessage() { - // The test against `importScripts` prevents this implementation from being installed inside a web worker, - // where `global.postMessage` means something completely different and can't be used for this purpose. - if (global.postMessage && !global.importScripts) { - var postMessageIsAsynchronous = true; - var oldOnMessage = global.onmessage; - global.onmessage = function() { - postMessageIsAsynchronous = false; - }; - global.postMessage("", "*"); - global.onmessage = oldOnMessage; - return postMessageIsAsynchronous; - } - } - - function installPostMessageImplementation() { - // Installs an event handler on `global` for the `message` event: see - // * https://developer.mozilla.org/en/DOM/window.postMessage - // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages - - var messagePrefix = "setImmediate$" + Math.random() + "$"; - var onGlobalMessage = function(event) { - if (event.source === global && - typeof event.data === "string" && - event.data.indexOf(messagePrefix) === 0) { - runIfPresent(+event.data.slice(messagePrefix.length)); - } - }; - - if (global.addEventListener) { - global.addEventListener("message", onGlobalMessage, false); - } else { - global.attachEvent("onmessage", onGlobalMessage); - } - - registerImmediate = function(handle) { - global.postMessage(messagePrefix + handle, "*"); - }; - } - - function installMessageChannelImplementation() { - var channel = new MessageChannel(); - channel.port1.onmessage = function(event) { - var handle = event.data; - runIfPresent(handle); - }; - - registerImmediate = function(handle) { - channel.port2.postMessage(handle); - }; - } - - function installReadyStateChangeImplementation() { - var html = doc.documentElement; - registerImmediate = function(handle) { - // Create a {{/case}} {{#case "html"}} + {{/case}} {{/switch}} From 7327fdbeab8c9359dc4da3cabfb0cad5c88cabf5 Mon Sep 17 00:00:00 2001 From: Adrian Woeltche Date: Wed, 11 Jul 2018 16:34:20 +0200 Subject: [PATCH 440/483] fixes removed as they cause problems with new version that seems to have implemented own fixes, hopefuly without side effects --- views/grapejs/editor.hbs | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/views/grapejs/editor.hbs b/views/grapejs/editor.hbs index 207160e3..25c0cbca 100644 --- a/views/grapejs/editor.hbs +++ b/views/grapejs/editor.hbs @@ -40,18 +40,6 @@ #merge-tag-reference-container table th { padding: 5px 20px 5px 0; } - - /* Fixed width sidebar */ - #gjs > .gjs-editor > .gjs-cv-canvas { width: 100% !important; padding-right: 300px !important; } - #gjs-pn-views, #gjs-pn-views-container { width: 300px !important; } - #gjs-pn-options { right: 300px !important; } - #gjs-pn-commands { width: 100% !important; padding-right: 310px !important; } - - /* Hide the fullscreen button - doesn't work from within our iFrame */ - #gjs-pn-options .gjs-pn-btn.fa.fa-arrows-alt { display: none !important; } - - /* Hide pencil icon on image toolbar, issue #195 */ - .gjs-toolbar > div > div.fa-pencil { display: none; } From 65f25bb009bc4e05d610899227c3dcbc0c23ff47 Mon Sep 17 00:00:00 2001 From: Adrian Woeltche Date: Wed, 11 Jul 2018 17:26:50 +0200 Subject: [PATCH 441/483] more updates --- .../dist/css/grapesjs-preset-newsletter.css | 6 +-- public/grapejs/dist/css/material.css | 2 +- public/grapejs/dist/css/toastr.min.css | 2 +- public/grapejs/dist/css/tooltip.css | 2 +- .../dist/js/grapesjs-preset-newsletter.min.js | 37 ++++++++----------- 5 files changed, 21 insertions(+), 28 deletions(-) diff --git a/public/grapejs/dist/css/grapesjs-preset-newsletter.css b/public/grapejs/dist/css/grapesjs-preset-newsletter.css index 13f90f64..9776fcc2 100644 --- a/public/grapejs/dist/css/grapesjs-preset-newsletter.css +++ b/public/grapejs/dist/css/grapesjs-preset-newsletter.css @@ -1,4 +1,5 @@ -/* #008f73 #4c9790 */ +/* Class names prefixes */ +/* Colors / Theme */ .gjs-clm-tags .gjs-sm-title, .gjs-sm-sector .gjs-sm-title { border-top: none; } @@ -42,8 +43,7 @@ .gjs-sm-sector .gjs-sm-composite.gjs-clm-field, .gjs-sm-sector .gjs-sm-field.gjs-sm-composite, .gjs-sm-sector .gjs-sm-stack #gjs-sm-add { - color: #a0aabf; - /* #a0aabf #d0d6e2 */ } + color: #a0aabf; } #gjs-rte-toolbar, .gjs-bg-main, diff --git a/public/grapejs/dist/css/material.css b/public/grapejs/dist/css/material.css index 1bc89d6b..91ed6cef 100644 --- a/public/grapejs/dist/css/material.css +++ b/public/grapejs/dist/css/material.css @@ -50,4 +50,4 @@ .cm-s-material .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; -} \ No newline at end of file +} diff --git a/public/grapejs/dist/css/toastr.min.css b/public/grapejs/dist/css/toastr.min.css index 095b99ca..9b283103 100644 --- a/public/grapejs/dist/css/toastr.min.css +++ b/public/grapejs/dist/css/toastr.min.css @@ -3,4 +3,4 @@ * please go to https://cdnjs.com/libraries/toastr.js and pick a certain version you want to use, * make sure you copy the url from the website since the url may change between versions. * */ -.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#FFF}.toast-message a:hover{color:#CCC;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#FFF;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);line-height:1}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}.rtl .toast-close-button{left:-.3em;float:left;right:.3em}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999;pointer-events:none}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#FFF;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>div.rtl{direction:rtl;padding:15px 50px 15px 15px;background-position:right 15px center}#toast-container>div:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin-left:auto;margin-right:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin-left:auto;margin-right:auto}.toast{background-color:#030303}.toast-success{background-color:#51A351}.toast-error{background-color:#BD362F}.toast-info{background-color:#2F96B4}.toast-warning{background-color:#F89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{right:-.2em;top:-.2em}#toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{right:-.2em;top:-.2em}#toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}#toast-container>div.rtl{padding:15px 50px 15px 15px}} \ No newline at end of file +.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#FFF}.toast-message a:hover{color:#CCC;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#FFF;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);line-height:1}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}.rtl .toast-close-button{left:-.3em;float:left;right:.3em}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999;pointer-events:none}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#FFF;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>div.rtl{direction:rtl;padding:15px 50px 15px 15px;background-position:right 15px center}#toast-container>div:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin-left:auto;margin-right:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin-left:auto;margin-right:auto}.toast{background-color:#030303}.toast-success{background-color:#51A351}.toast-error{background-color:#BD362F}.toast-info{background-color:#2F96B4}.toast-warning{background-color:#F89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{right:-.2em;top:-.2em}#toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{right:-.2em;top:-.2em}#toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}#toast-container>div.rtl{padding:15px 50px 15px 15px}} diff --git a/public/grapejs/dist/css/tooltip.css b/public/grapejs/dist/css/tooltip.css index c9a3160d..01bf81b7 100644 --- a/public/grapejs/dist/css/tooltip.css +++ b/public/grapejs/dist/css/tooltip.css @@ -85,4 +85,4 @@ -webkit-transform: translate(-0.5rem, 50%); -ms-transform: translate(-0.5rem, 50%); transform: translate(-0.5rem, 50%); -} \ No newline at end of file +} diff --git a/public/grapejs/dist/js/grapesjs-preset-newsletter.min.js b/public/grapejs/dist/js/grapesjs-preset-newsletter.min.js index 839adeef..2d33b946 100644 --- a/public/grapejs/dist/js/grapesjs-preset-newsletter.min.js +++ b/public/grapejs/dist/js/grapesjs-preset-newsletter.min.js @@ -1,22 +1,15 @@ -/*! grapesjs-preset-newsletter - 0.2.3 */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports["grapesjs-preset-newsletter"]=e():t["grapesjs-preset-newsletter"]=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return t[n].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";grapesjs.plugins.add("gjs-preset-newsletter",function(t,e){var n=e||{},i=t.getConfig(),o=i.stylePrefix,a={editor:t,pfx:o||"",cmdOpenImport:"gjs-open-import-template",cmdTglImages:"gjs-toggle-images",modalTitleImport:"Import template",modalTitleExport:"Export template",modalLabelImport:"",modalLabelExport:"",modalBtnImport:"Import",codeViewerTheme:"hopscotch",importPlaceholder:"",defaultTemplate:"",inlineCss:1,cellStyle:{padding:0,margin:0,"vertical-align":"top"},tableStyle:{height:"150px",margin:"0 auto 10px auto",padding:"5px 5px 5px 5px",width:"100%"}};i.devicePreviewMode=1;for(var s in a)s in n||(n[s]=a[s]);var u=r(1);u(n);var c=r(106);c(n);var l=r(107);l(n);var f=r(108);f(n),!t.getHtml()&&n.defaultTemplate&&(t.setComponents(n.defaultTemplate),t.editor.initChildrenComp(t.DomComponents.getWrapper())),t.on("change:selectedComponent",function(){var e=t.Panels.getButton("views","open-layers");if((!e||!e.get("active"))&&t.editor.get("selectedComponent")){var r=t.Panels.getButton("views","open-sm");r&&r.set("active",1)}}),t.on("load",function(){var e=t.Panels.getButton("views","open-blocks");e&&e.set("active",1),t.trigger("change:canvasOffset")})})},function(t,e,r){var n;n=function(){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.editor,n=e.Commands,i=r(2),o=r(3),a=r(105);n.add(t.cmdOpenImport,i(t)),n.add(t.cmdTglImages,a(t)),n.add("export-template",o(t)),n.add("undo",{run:function(t,e){e.set("active",0),t.UndoManager.undo(1)}}),n.add("redo",{run:function(t,e){e.set("active",0),t.UndoManager.redo(1)}}),n.add("set-device-desktop",{run:function(t){t.setDevice("Desktop")}}),n.add("set-device-tablet",{run:function(t){t.setDevice("Tablet")}}),n.add("set-device-mobile",{run:function(t){t.setDevice("Mobile portrait")}})}}.call(e,r,e,t),!(void 0!==n&&(t.exports=n))},function(t,e,r){var n;n=function(){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.editor,r=e&&e.CodeManager.getViewer("CodeMirror").clone(),n=document.createElement("button"),i=document.createElement("div"),o=t.pfx||"";return n.innerHTML=t.modalBtnImport,n.className=o+"btn-prim "+o+"btn-import",n.onclick=function(){var t=r.editor.getValue();e.DomComponents.getWrapper().set("content",""),e.setComponents(t),e.Modal.close()},r.set({codeName:"htmlmixed",theme:t.codeViewerTheme,readOnly:0}),{run:function(e,a){var s=e.Modal,u=(s.getContentEl(),r.editor);if(s.setTitle(t.modalTitleImport),!u){var c=document.createElement("textarea");if(t.modalLabelImport){var l=document.createElement("div");l.className=o+"import-label",l.innerHTML=t.modalLabelImport,i.appendChild(l)}i.appendChild(c),i.appendChild(n),r.init(c),u=r.editor}s.setContent(""),s.setContent(i),r.setContent(t.importPlaceholder||""),s.open(),u.refresh(),a&&a.set("active",0)}}}}.call(e,r,e,t),!(void 0!==n&&(t.exports=n))},function(t,e,r){var n;n=function(){var t=r(4);return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.editor,n=r&&r.CodeManager.getViewer("CodeMirror").clone(),i=document.createElement("div"),o=e.pfx||"",a=r.Commands;return n.set({codeName:"htmlmixed",theme:e.codeViewerTheme}),a.add(o+"get-inlined-html",{run:function(e){var r=e.getHtml()+("");return t(r)}}),{run:function(r,a){var s=r.Modal,u=(s.getContentEl(),n.editor);if(s.setTitle(e.modalTitleExport),!u){var c=document.createElement("textarea");if(e.modalLabelExport){var l=document.createElement("div");l.className=o+"export-label",l.innerHTML=e.modalLabelExport,i.appendChild(l)}i.appendChild(c),n.init(c),u=n.editor,u.setOption("lineWrapping",1)}s.setContent(""),s.setContent(i);var f=r.getHtml()+("");n.setContent(e.inlineCss?t(f):f),s.open(),u.refresh(),a&&a.set("active",0)}}}}.call(e,r,e,t),!(void 0!==n&&(t.exports=n))},function(t,e,r){"use strict";var n=r(5),i=r(104),o=i(function(t,e){return n(t,{xmlMode:e&&e.xmlMode},a,[e])}),a=function(t,e){return o.juiceDocument(t,e)};o.inlineContent=function(t,e,r){return n(t,{xmlMode:r&&r.xmlMode},o.inlineDocument,[e,r])},t.exports=o},function(t,e,r){"use strict";var n=r(6),i=r(94),o=function(t,e){return e=i.extend({decodeEntities:!1},e||{}),t=u(t),n.load(t,e)},a=function(e){var r=t.exports.codeBlocks;return Object.keys(r).forEach(function(t){var n=new RegExp(r[t].start+"((.|\\s)*?)"+r[t].end,"g");e=e.replace(n,function(e,n){return""})}),e},s=function(e){var r=t.exports.codeBlocks;return Object.keys(r).forEach(function(t){var n=new RegExp("","g");e=e.replace(n,function(e,n){return r[t].start+n+r[t].end})}),e},u=function(t){return a(t)},c=function(t){return s(t)};t.exports=function(t,e,r,n){var i=o(t,e),a=[i];a.push.apply(a,n);var s=r.apply(void 0,a)||i;return e&&e.xmlMode?s.xml():c(s.html())},t.exports.codeBlocks={EJS:{start:"<%",end:"%>"},HBS:{start:"{{",end:"}}"}}},function(t,e,r){e=t.exports=r(7),e.version=r(93).version},function(t,e,r){var n=r(8),i=r(61).isHtml,o={extend:r(62),bind:r(63),forEach:r(64),defaults:r(65)},a=[r(66),r(83),r(87),r(89),r(91)],s=t.exports=function(t,e,r,a){return this instanceof s?(this.options=o.defaults(a||{},this.options),t?(r&&("string"==typeof r&&(r=n(r,this.options)),this._root=s.call(this,r)),t.cheerio?t:(u(t)&&(t=[t]),Array.isArray(t)?(o.forEach(t,o.bind(function(t,e){this[e]=t},this)),this.length=t.length,this):"string"==typeof t&&i(t)?s.call(this,n(t,this.options).children):(e?"string"==typeof e?i(e)?(e=n(e,this.options),e=s.call(this,e)):(t=[e,t].join(" "),e=this._root):e.cheerio||(e=s.call(this,e)):e=this._root,e?e.find(t):this))):this):new s(t,e,r,a)};o.extend(s,r(67)),s.prototype.cheerio="[cheerio object]",s.prototype.options={withDomLvl1:!0,normalizeWhitespace:!1,xmlMode:!1,decodeEntities:!0},s.prototype.length=0,s.prototype.splice=Array.prototype.splice,s.prototype._make=function(t,e){var r=new this.constructor(t,e,this._root,this.options);return r.prevObject=this,r},s.prototype.toArray=function(){return this.get()},a.forEach(function(t){o.extend(s.prototype,t)});var u=function(t){return t.name||"text"===t.type||"comment"===t.type}},function(t,e,r){(function(n){var i=r(13);e=t.exports=function(t,r){var n=e.evaluate(t,r),i=e.evaluate("",r)[0];return i.type="root",e.update(n,i),i},e.evaluate=function(t,e){var r;return r="string"==typeof t||n.isBuffer(t)?i.parseDOM(t,e):t},e.update=function(t,e){Array.isArray(t)||(t=[t]),e?e.children=t:e=null;for(var r=0;r - * @license MIT - */ -"use strict";function i(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}function o(){return t.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,r){if(o()=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function v(e){return+e!=e&&(e=0),t.alloc(+e)}function y(e,r){if(t.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var i=!1;;)switch(r){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return H(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return W(e).length;default:if(i)return H(e).length;r=(""+r).toLowerCase(),i=!0}}function b(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,e>>>=0,r<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return R(this,e,r);case"utf8":case"utf-8":return T(this,e,r);case"ascii":return L(this,e,r);case"latin1":case"binary":return D(this,e,r);case"base64":return O(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return N(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function m(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function _(e,r,n,i,o){if(0===e.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof r&&(r=t.from(r,i)),t.isBuffer(r))return 0===r.length?-1:w(e,r,n,i,o);if("number"==typeof r)return r&=255,t.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,r,n):Uint8Array.prototype.lastIndexOf.call(e,r,n):w(e,[r],n,i,o);throw new TypeError("val must be string, number or Buffer")}function w(t,e,r,n,i){function o(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}var a=1,s=t.length,u=e.length;if(void 0!==n&&(n=String(n).toLowerCase(),"ucs2"===n||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,r/=2}var c;if(i){var l=-1;for(c=r;cs&&(r=s-u),c=r;c>=0;c--){for(var f=!0,h=0;hi&&(n=i)):n=i;var o=e.length;if(o%2!==0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a239?4:o>223?3:o>191?2:1;if(i+s<=r){var u,c,l,f;switch(s){case 1:o<128&&(a=o);break;case 2:u=t[i+1],128===(192&u)&&(f=(31&o)<<6|63&u,f>127&&(a=f));break;case 3:u=t[i+1],c=t[i+2],128===(192&u)&&128===(192&c)&&(f=(15&o)<<12|(63&u)<<6|63&c,f>2047&&(f<55296||f>57343)&&(a=f));break;case 4:u=t[i+1],c=t[i+2],l=t[i+3],128===(192&u)&&128===(192&c)&&128===(192&l)&&(f=(15&o)<<18|(63&u)<<12|(63&c)<<6|63&l,f>65535&&f<1114112&&(a=f))}}null===a?(a=65533,s=1):a>65535&&(a-=65536,n.push(a>>>10&1023|55296),a=56320|1023&a),n.push(a),i+=s}return C(n)}function C(t){var e=t.length;if(e<=tt)return String.fromCharCode.apply(String,t);for(var r="",n=0;nn)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function B(e,r,n,i,o,a){if(!t.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>o||re.length)throw new RangeError("Index out of range")}function q(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function M(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function I(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function U(t,e,r,n,i){return i||I(t,e,r,4,3.4028234663852886e38,-3.4028234663852886e38),Z.write(t,e,r,n,23,4),r+4}function F(t,e,r,n,i){return i||I(t,e,r,8,1.7976931348623157e308,-1.7976931348623157e308),Z.write(t,e,r,n,52,8),r+8}function V(t){if(t=$(t).replace(et,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function $(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function z(t){return t<16?"0"+t.toString(16):t.toString(16)}function H(t,e){e=e||1/0;for(var r,n=t.length,i=null,o=[],a=0;a55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function G(t){for(var e=[],r=0;r>8,i=r%256,o.push(i),o.push(n);return o}function W(t){return Q.toByteArray(V(t))}function X(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function J(t){return t!==t}var Q=r(10),Z=r(11),K=r(12);e.Buffer=t,e.SlowBuffer=v,e.INSPECT_MAX_BYTES=50,t.TYPED_ARRAY_SUPPORT=void 0!==n.TYPED_ARRAY_SUPPORT?n.TYPED_ARRAY_SUPPORT:i(),e.kMaxLength=o(),t.poolSize=8192,t._augment=function(e){return e.__proto__=t.prototype,e},t.from=function(t,e,r){return s(null,t,e,r)},t.TYPED_ARRAY_SUPPORT&&(t.prototype.__proto__=Uint8Array.prototype,t.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&t[Symbol.species]===t&&Object.defineProperty(t,Symbol.species,{value:null,configurable:!0})),t.alloc=function(t,e,r){return c(null,t,e,r)},t.allocUnsafe=function(t){return l(null,t)},t.allocUnsafeSlow=function(t){return l(null,t)},t.isBuffer=function(t){return!(null==t||!t._isBuffer)},t.compare=function(e,r){if(!t.isBuffer(e)||!t.isBuffer(r))throw new TypeError("Arguments must be Buffers");if(e===r)return 0;for(var n=e.length,i=r.length,o=0,a=Math.min(n,i);o0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},t.prototype.compare=function(e,r,n,i,o){if(!t.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===o&&(o=this.length),r<0||n>e.length||i<0||o>this.length)throw new RangeError("out of range index");if(i>=o&&r>=n)return 0;if(i>=o)return-1;if(r>=n)return 1;if(r>>>=0,n>>>=0,i>>>=0,o>>>=0,this===e)return 0;for(var a=o-i,s=n-r,u=Math.min(a,s),c=this.slice(i,o),l=e.slice(r,n),f=0;fi)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return x(this,t,e,r);case"utf8":case"utf-8":return j(this,t,e,r);case"ascii":return A(this,t,e,r);case"latin1":case"binary":return S(this,t,e,r);case"base64":return E(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},t.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var tt=4096;t.prototype.slice=function(e,r){var n=this.length;e=~~e,r=void 0===r?n:~~r,e<0?(e+=n,e<0&&(e=0)):e>n&&(e=n),r<0?(r+=n,r<0&&(r=0)):r>n&&(r=n),r0&&(i*=256);)n+=this[t+--e]*i;return n},t.prototype.readUInt8=function(t,e){return e||P(t,1,this.length),this[t]},t.prototype.readUInt16LE=function(t,e){return e||P(t,2,this.length),this[t]|this[t+1]<<8},t.prototype.readUInt16BE=function(t,e){return e||P(t,2,this.length),this[t]<<8|this[t+1]},t.prototype.readUInt32LE=function(t,e){return e||P(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},t.prototype.readUInt32BE=function(t,e){return e||P(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},t.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||P(t,e,this.length);for(var n=this[t],i=1,o=0;++o=i&&(n-=Math.pow(2,8*e)),n},t.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||P(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},t.prototype.readInt8=function(t,e){return e||P(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},t.prototype.readInt16LE=function(t,e){e||P(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt16BE=function(t,e){e||P(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt32LE=function(t,e){return e||P(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},t.prototype.readInt32BE=function(t,e){return e||P(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},t.prototype.readFloatLE=function(t,e){return e||P(t,4,this.length),Z.read(this,t,!0,23,4)},t.prototype.readFloatBE=function(t,e){return e||P(t,4,this.length),Z.read(this,t,!1,23,4)},t.prototype.readDoubleLE=function(t,e){return e||P(t,8,this.length),Z.read(this,t,!0,52,8)},t.prototype.readDoubleBE=function(t,e){return e||P(t,8,this.length),Z.read(this,t,!1,52,8)},t.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e|=0,r|=0,!n){var i=Math.pow(2,8*r)-1;B(this,t,e,r,i,0)}var o=1,a=0;for(this[e]=255&t;++a=0&&(a*=256);)this[e+o]=t/a&255;return e+r},t.prototype.writeUInt8=function(e,r,n){return e=+e,r|=0,n||B(this,e,r,1,255,0),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[r]=255&e,r+1},t.prototype.writeUInt16LE=function(e,r,n){return e=+e,r|=0,n||B(this,e,r,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):q(this,e,r,!0),r+2},t.prototype.writeUInt16BE=function(e,r,n){return e=+e,r|=0,n||B(this,e,r,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):q(this,e,r,!1),r+2},t.prototype.writeUInt32LE=function(e,r,n){return e=+e,r|=0,n||B(this,e,r,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[r+3]=e>>>24,this[r+2]=e>>>16,this[r+1]=e>>>8,this[r]=255&e):M(this,e,r,!0),r+4},t.prototype.writeUInt32BE=function(e,r,n){return e=+e,r|=0,n||B(this,e,r,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):M(this,e,r,!1),r+4},t.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o>0)-s&255;return e+r},t.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var o=r-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+r},t.prototype.writeInt8=function(e,r,n){return e=+e,r|=0,n||B(this,e,r,1,127,-128),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[r]=255&e,r+1},t.prototype.writeInt16LE=function(e,r,n){return e=+e,r|=0,n||B(this,e,r,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):q(this,e,r,!0),r+2},t.prototype.writeInt16BE=function(e,r,n){return e=+e,r|=0,n||B(this,e,r,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):q(this,e,r,!1),r+2},t.prototype.writeInt32LE=function(e,r,n){return e=+e,r|=0,n||B(this,e,r,4,2147483647,-2147483648),t.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8,this[r+2]=e>>>16,this[r+3]=e>>>24):M(this,e,r,!0),r+4},t.prototype.writeInt32BE=function(e,r,n){return e=+e,r|=0,n||B(this,e,r,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):M(this,e,r,!1),r+4},t.prototype.writeFloatLE=function(t,e,r){return U(this,t,e,!0,r)},t.prototype.writeFloatBE=function(t,e,r){return U(this,t,e,!1,r)},t.prototype.writeDoubleLE=function(t,e,r){return F(this,t,e,!0,r)},t.prototype.writeDoubleBE=function(t,e,r){return F(this,t,e,!1,r)},t.prototype.copy=function(e,r,n,i){if(n||(n=0),i||0===i||(i=this.length),r>=e.length&&(r=e.length),r||(r=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-r=0;--o)e[o+r]=this[o+n];else if(a<1e3||!t.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var a;if("number"==typeof e)for(a=r;a0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function n(t){return 3*t.length/4-r(t)}function i(t){var e,n,i,o,a,s,u=t.length;a=r(t),s=new l(3*u/4-a),i=a>0?u-4:u;var f=0;for(e=0,n=0;e>16&255,s[f++]=o>>8&255,s[f++]=255&o;return 2===a?(o=c[t.charCodeAt(e)]<<2|c[t.charCodeAt(e+1)]>>4,s[f++]=255&o):1===a&&(o=c[t.charCodeAt(e)]<<10|c[t.charCodeAt(e+1)]<<4|c[t.charCodeAt(e+2)]>>2,s[f++]=o>>8&255,s[f++]=255&o),s}function o(t){return u[t>>18&63]+u[t>>12&63]+u[t>>6&63]+u[63&t]}function a(t,e,r){for(var n,i=[],a=e;al?l:c+s));return 1===n?(e=t[r-1],i+=u[e>>2],i+=u[e<<4&63],i+="=="):2===n&&(e=(t[r-2]<<8)+t[r-1],i+=u[e>>10],i+=u[e>>4&63],i+=u[e<<2&63],i+="="),o.push(i),o.join("")}e.byteLength=n,e.toByteArray=i,e.fromByteArray=s;for(var u=[],c=[],l="undefined"!=typeof Uint8Array?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,p=f.length;h>1,l=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,o=p&(1<<-l)-1,p>>=-l,l+=s;l>0;o=256*o+t[e+f],f+=h,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=n;l>0;a=256*a+t[e+f],f+=h,l-=8);if(0===o)o=1-c;else{if(o===u)return a?NaN:(p?-1:1)*(1/0);a+=Math.pow(2,n),o-=c}return(p?-1:1)*a*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var a,s,u,c=8*o-i-1,l=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),e+=a+f>=1?h/u:h*Math.pow(2,1-f),e*u>=2&&(a++,u/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(e*u-1)*Math.pow(2,i),a+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(a=a<0;t[r+p]=255&a,p+=d,a/=256,c-=8);t[r+p-d]|=128*g}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){function n(e,r){return delete t.exports[e],t.exports[e]=r,r}var i=r(14),o=r(23);t.exports={Parser:i,Tokenizer:r(15),ElementType:r(24),DomHandler:o,get FeedHandler(){return n("FeedHandler",r(27))},get Stream(){return n("Stream",r(28))},get WritableStream(){return n("WritableStream",r(29))},get ProxyHandler(){return n("ProxyHandler",r(47))},get DomUtils(){return n("DomUtils",r(48))},get CollectingHandler(){return n("CollectingHandler",r(60))},DefaultHandler:o,get RssHandler(){return n("RssHandler",this.FeedHandler)},parseDOM:function(t,e){var r=new o(e);return new i(r,e).end(t),r.dom},parseFeed:function(e,r){var n=new t.exports.FeedHandler(r);return new i(n,r).end(e),n.dom},createDomStream:function(t,e,r){var n=new o(t,e,r);return new i(n,e)},EVENTS:{attribute:2,cdatastart:0,cdataend:0,text:1,processinginstruction:2,comment:1,commentend:0,closetag:1,opentag:2,opentagname:1,error:1,end:0}}},function(t,e,r){function n(t,e){this._options=e||{},this._cbs=t||{},this._tagname="",this._attribname="",this._attribvalue="",this._attribs=null,this._stack=[],this.startIndex=0,this.endIndex=null,this._lowerCaseTagNames="lowerCaseTags"in this._options?!!this._options.lowerCaseTags:!this._options.xmlMode,this._lowerCaseAttributeNames="lowerCaseAttributeNames"in this._options?!!this._options.lowerCaseAttributeNames:!this._options.xmlMode,this._options.Tokenizer&&(i=this._options.Tokenizer),this._tokenizer=new i(this._options,this),this._cbs.onparserinit&&this._cbs.onparserinit(this)}var i=r(15),o={input:!0,option:!0,optgroup:!0,select:!0,button:!0,datalist:!0,textarea:!0},a={tr:{tr:!0,th:!0,td:!0},th:{th:!0},td:{thead:!0,th:!0,td:!0},body:{head:!0,link:!0,script:!0},li:{li:!0},p:{p:!0},h1:{p:!0},h2:{p:!0},h3:{p:!0},h4:{p:!0},h5:{p:!0},h6:{p:!0},select:o,input:o,output:o,button:o,datalist:o,textarea:o,option:{option:!0},optgroup:{optgroup:!0}},s={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,path:!0,circle:!0,ellipse:!0,line:!0,rect:!0,use:!0,stop:!0,polyline:!0,polygon:!0},u=/\s|\//;r(21)(n,r(22).EventEmitter),n.prototype._updatePosition=function(t){null===this.endIndex?this._tokenizer._sectionStart<=t?this.startIndex=0:this.startIndex=this._tokenizer._sectionStart-t:this.startIndex=this.endIndex+1,this.endIndex=this._tokenizer.getAbsoluteIndex()},n.prototype.ontext=function(t){this._updatePosition(1),this.endIndex--,this._cbs.ontext&&this._cbs.ontext(t)},n.prototype.onopentagname=function(t){if(this._lowerCaseTagNames&&(t=t.toLowerCase()),this._tagname=t,!this._options.xmlMode&&t in a)for(var e;(e=this._stack[this._stack.length-1])in a[t];this.onclosetag(e));!this._options.xmlMode&&t in s||this._stack.push(t),this._cbs.onopentagname&&this._cbs.onopentagname(t),this._cbs.onopentag&&(this._attribs={})},n.prototype.onopentagend=function(){this._updatePosition(1),this._attribs&&(this._cbs.onopentag&&this._cbs.onopentag(this._tagname,this._attribs),this._attribs=null),!this._options.xmlMode&&this._cbs.onclosetag&&this._tagname in s&&this._cbs.onclosetag(this._tagname),this._tagname=""},n.prototype.onclosetag=function(t){if(this._updatePosition(1),this._lowerCaseTagNames&&(t=t.toLowerCase()),!this._stack.length||t in s&&!this._options.xmlMode)this._options.xmlMode||"br"!==t&&"p"!==t||(this.onopentagname(t),this._closeCurrentTag());else{var e=this._stack.lastIndexOf(t);if(e!==-1)if(this._cbs.onclosetag)for(e=this._stack.length-e;e--;)this._cbs.onclosetag(this._stack.pop());else this._stack.length=e;else"p"!==t||this._options.xmlMode||(this.onopentagname(t),this._closeCurrentTag())}},n.prototype.onselfclosingtag=function(){this._options.xmlMode||this._options.recognizeSelfClosing?this._closeCurrentTag():this.onopentagend()},n.prototype._closeCurrentTag=function(){var t=this._tagname;this.onopentagend(),this._stack[this._stack.length-1]===t&&(this._cbs.onclosetag&&this._cbs.onclosetag(t),this._stack.pop())},n.prototype.onattribname=function(t){this._lowerCaseAttributeNames&&(t=t.toLowerCase()),this._attribname=t},n.prototype.onattribdata=function(t){this._attribvalue+=t},n.prototype.onattribend=function(){this._cbs.onattribute&&this._cbs.onattribute(this._attribname,this._attribvalue),this._attribs&&!Object.prototype.hasOwnProperty.call(this._attribs,this._attribname)&&(this._attribs[this._attribname]=this._attribvalue),this._attribname="",this._attribvalue=""},n.prototype._getInstructionName=function(t){var e=t.search(u),r=e<0?t:t.substr(0,e);return this._lowerCaseTagNames&&(r=r.toLowerCase()),r},n.prototype.ondeclaration=function(t){if(this._cbs.onprocessinginstruction){var e=this._getInstructionName(t);this._cbs.onprocessinginstruction("!"+e,"!"+t)}},n.prototype.onprocessinginstruction=function(t){if(this._cbs.onprocessinginstruction){var e=this._getInstructionName(t);this._cbs.onprocessinginstruction("?"+e,"?"+t)}},n.prototype.oncomment=function(t){this._updatePosition(4),this._cbs.oncomment&&this._cbs.oncomment(t),this._cbs.oncommentend&&this._cbs.oncommentend()},n.prototype.oncdata=function(t){this._updatePosition(1),this._options.xmlMode||this._options.recognizeCDATA?(this._cbs.oncdatastart&&this._cbs.oncdatastart(),this._cbs.ontext&&this._cbs.ontext(t),this._cbs.oncdataend&&this._cbs.oncdataend()):this.oncomment("[CDATA["+t+"]]")},n.prototype.onerror=function(t){this._cbs.onerror&&this._cbs.onerror(t)},n.prototype.onend=function(){if(this._cbs.onclosetag)for(var t=this._stack.length;t>0;this._cbs.onclosetag(this._stack[--t]));this._cbs.onend&&this._cbs.onend()},n.prototype.reset=function(){this._cbs.onreset&&this._cbs.onreset(),this._tokenizer.reset(),this._tagname="",this._attribname="",this._attribs=null,this._stack=[],this._cbs.onparserinit&&this._cbs.onparserinit(this)},n.prototype.parseComplete=function(t){this.reset(),this.end(t)},n.prototype.write=function(t){this._tokenizer.write(t)},n.prototype.end=function(t){this._tokenizer.end(t)},n.prototype.pause=function(){this._tokenizer.pause()},n.prototype.resume=function(){this._tokenizer.resume()},n.prototype.parseChunk=n.prototype.write,n.prototype.done=n.prototype.end,t.exports=n},function(t,e,r){function n(t){return" "===t||"\n"===t||"\t"===t||"\f"===t||"\r"===t}function i(t,e){return function(r){r===t&&(this._state=e)}}function o(t,e,r){var n=t.toLowerCase();return t===n?function(t){t===n?this._state=e:(this._state=r,this._index--)}:function(i){i===n||i===t?this._state=e:(this._state=r,this._index--)}}function a(t,e){var r=t.toLowerCase();return function(n){n===r||n===t?this._state=e:(this._state=g,this._index--)}}function s(t,e){this._state=p,this._buffer="",this._sectionStart=0,this._index=0,this._bufferOffset=0,this._baseState=p,this._special=gt,this._cbs=e,this._running=!0,this._ended=!1,this._xmlMode=!(!t||!t.xmlMode),this._decodeEntities=!(!t||!t.decodeEntities)}t.exports=s;var u=r(16),c=r(18),l=r(19),f=r(20),h=0,p=h++,d=h++,g=h++,v=h++,y=h++,b=h++,m=h++,_=h++,w=h++,x=h++,j=h++,A=h++,S=h++,E=h++,k=h++,O=h++,T=h++,C=h++,L=h++,D=h++,R=h++,N=h++,P=h++,B=h++,q=h++,M=h++,I=h++,U=h++,F=h++,V=h++,$=h++,z=h++,H=h++,G=h++,Y=h++,W=h++,X=h++,J=h++,Q=h++,Z=h++,K=h++,tt=h++,et=h++,rt=h++,nt=h++,it=h++,ot=h++,at=h++,st=h++,ut=h++,ct=h++,lt=h++,ft=h++,ht=h++,pt=h++,dt=0,gt=dt++,vt=dt++,yt=dt++;s.prototype._stateText=function(t){"<"===t?(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._state=d,this._sectionStart=this._index):this._decodeEntities&&this._special===gt&&"&"===t&&(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._baseState=p,this._state=ct,this._sectionStart=this._index)},s.prototype._stateBeforeTagName=function(t){"/"===t?this._state=y:"<"===t?(this._cbs.ontext(this._getSection()),this._sectionStart=this._index):">"===t||this._special!==gt||n(t)?this._state=p:"!"===t?(this._state=k,this._sectionStart=this._index+1):"?"===t?(this._state=T,this._sectionStart=this._index+1):(this._state=this._xmlMode||"s"!==t&&"S"!==t?g:$,this._sectionStart=this._index)},s.prototype._stateInTagName=function(t){("/"===t||">"===t||n(t))&&(this._emitToken("onopentagname"),this._state=_,this._index--)},s.prototype._stateBeforeCloseingTagName=function(t){n(t)||(">"===t?this._state=p:this._special!==gt?"s"===t||"S"===t?this._state=z:(this._state=p,this._index--):(this._state=b,this._sectionStart=this._index))},s.prototype._stateInCloseingTagName=function(t){(">"===t||n(t))&&(this._emitToken("onclosetag"),this._state=m,this._index--)},s.prototype._stateAfterCloseingTagName=function(t){">"===t&&(this._state=p,this._sectionStart=this._index+1)},s.prototype._stateBeforeAttributeName=function(t){">"===t?(this._cbs.onopentagend(),this._state=p,this._sectionStart=this._index+1):"/"===t?this._state=v:n(t)||(this._state=w,this._sectionStart=this._index)},s.prototype._stateInSelfClosingTag=function(t){">"===t?(this._cbs.onselfclosingtag(),this._state=p,this._sectionStart=this._index+1):n(t)||(this._state=_,this._index--)},s.prototype._stateInAttributeName=function(t){("="===t||"/"===t||">"===t||n(t))&&(this._cbs.onattribname(this._getSection()),this._sectionStart=-1,this._state=x,this._index--)},s.prototype._stateAfterAttributeName=function(t){"="===t?this._state=j:"/"===t||">"===t?(this._cbs.onattribend(),this._state=_,this._index--):n(t)||(this._cbs.onattribend(),this._state=w,this._sectionStart=this._index)},s.prototype._stateBeforeAttributeValue=function(t){'"'===t?(this._state=A,this._sectionStart=this._index+1):"'"===t?(this._state=S,this._sectionStart=this._index+1):n(t)||(this._state=E,this._sectionStart=this._index,this._index--)},s.prototype._stateInAttributeValueDoubleQuotes=function(t){'"'===t?(this._emitToken("onattribdata"),this._cbs.onattribend(), -this._state=_):this._decodeEntities&&"&"===t&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=ct,this._sectionStart=this._index)},s.prototype._stateInAttributeValueSingleQuotes=function(t){"'"===t?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=_):this._decodeEntities&&"&"===t&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=ct,this._sectionStart=this._index)},s.prototype._stateInAttributeValueNoQuotes=function(t){n(t)||">"===t?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=_,this._index--):this._decodeEntities&&"&"===t&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=ct,this._sectionStart=this._index)},s.prototype._stateBeforeDeclaration=function(t){this._state="["===t?N:"-"===t?C:O},s.prototype._stateInDeclaration=function(t){">"===t&&(this._cbs.ondeclaration(this._getSection()),this._state=p,this._sectionStart=this._index+1)},s.prototype._stateInProcessingInstruction=function(t){">"===t&&(this._cbs.onprocessinginstruction(this._getSection()),this._state=p,this._sectionStart=this._index+1)},s.prototype._stateBeforeComment=function(t){"-"===t?(this._state=L,this._sectionStart=this._index+1):this._state=O},s.prototype._stateInComment=function(t){"-"===t&&(this._state=D)},s.prototype._stateAfterComment1=function(t){"-"===t?this._state=R:this._state=L},s.prototype._stateAfterComment2=function(t){">"===t?(this._cbs.oncomment(this._buffer.substring(this._sectionStart,this._index-2)),this._state=p,this._sectionStart=this._index+1):"-"!==t&&(this._state=L)},s.prototype._stateBeforeCdata1=o("C",P,O),s.prototype._stateBeforeCdata2=o("D",B,O),s.prototype._stateBeforeCdata3=o("A",q,O),s.prototype._stateBeforeCdata4=o("T",M,O),s.prototype._stateBeforeCdata5=o("A",I,O),s.prototype._stateBeforeCdata6=function(t){"["===t?(this._state=U,this._sectionStart=this._index+1):(this._state=O,this._index--)},s.prototype._stateInCdata=function(t){"]"===t&&(this._state=F)},s.prototype._stateAfterCdata1=i("]",V),s.prototype._stateAfterCdata2=function(t){">"===t?(this._cbs.oncdata(this._buffer.substring(this._sectionStart,this._index-2)),this._state=p,this._sectionStart=this._index+1):"]"!==t&&(this._state=U)},s.prototype._stateBeforeSpecial=function(t){"c"===t||"C"===t?this._state=H:"t"===t||"T"===t?this._state=et:(this._state=g,this._index--)},s.prototype._stateBeforeSpecialEnd=function(t){this._special!==vt||"c"!==t&&"C"!==t?this._special!==yt||"t"!==t&&"T"!==t?this._state=p:this._state=ot:this._state=J},s.prototype._stateBeforeScript1=a("R",G),s.prototype._stateBeforeScript2=a("I",Y),s.prototype._stateBeforeScript3=a("P",W),s.prototype._stateBeforeScript4=a("T",X),s.prototype._stateBeforeScript5=function(t){("/"===t||">"===t||n(t))&&(this._special=vt),this._state=g,this._index--},s.prototype._stateAfterScript1=o("R",Q,p),s.prototype._stateAfterScript2=o("I",Z,p),s.prototype._stateAfterScript3=o("P",K,p),s.prototype._stateAfterScript4=o("T",tt,p),s.prototype._stateAfterScript5=function(t){">"===t||n(t)?(this._special=gt,this._state=b,this._sectionStart=this._index-6,this._index--):this._state=p},s.prototype._stateBeforeStyle1=a("Y",rt),s.prototype._stateBeforeStyle2=a("L",nt),s.prototype._stateBeforeStyle3=a("E",it),s.prototype._stateBeforeStyle4=function(t){("/"===t||">"===t||n(t))&&(this._special=yt),this._state=g,this._index--},s.prototype._stateAfterStyle1=o("Y",at,p),s.prototype._stateAfterStyle2=o("L",st,p),s.prototype._stateAfterStyle3=o("E",ut,p),s.prototype._stateAfterStyle4=function(t){">"===t||n(t)?(this._special=gt,this._state=b,this._sectionStart=this._index-5,this._index--):this._state=p},s.prototype._stateBeforeEntity=o("#",lt,ft),s.prototype._stateBeforeNumericEntity=o("X",pt,ht),s.prototype._parseNamedEntityStrict=function(){if(this._sectionStart+16&&(e=6);e>=2;){var r=this._buffer.substr(t,e);if(l.hasOwnProperty(r))return this._emitPartial(l[r]),void(this._sectionStart+=e+1);e--}},s.prototype._stateInNamedEntity=function(t){";"===t?(this._parseNamedEntityStrict(),this._sectionStart+1"z")&&(t<"A"||t>"Z")&&(t<"0"||t>"9")&&(this._xmlMode||this._sectionStart+1===this._index||(this._baseState!==p?"="!==t&&this._parseNamedEntityStrict():this._parseLegacyEntity()),this._state=this._baseState,this._index--)},s.prototype._decodeNumericEntity=function(t,e){var r=this._sectionStart+t;if(r!==this._index){var n=this._buffer.substring(r,this._index),i=parseInt(n,e);this._emitPartial(u(i)),this._sectionStart=this._index}else this._sectionStart--;this._state=this._baseState},s.prototype._stateInNumericEntity=function(t){";"===t?(this._decodeNumericEntity(2,10),this._sectionStart++):(t<"0"||t>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(2,10),this._index--)},s.prototype._stateInHexEntity=function(t){";"===t?(this._decodeNumericEntity(3,16),this._sectionStart++):(t<"a"||t>"f")&&(t<"A"||t>"F")&&(t<"0"||t>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(3,16),this._index--)},s.prototype._cleanup=function(){this._sectionStart<0?(this._buffer="",this._bufferOffset+=this._index,this._index=0):this._running&&(this._state===p?(this._sectionStart!==this._index&&this._cbs.ontext(this._buffer.substr(this._sectionStart)),this._buffer="",this._bufferOffset+=this._index,this._index=0):this._sectionStart===this._index?(this._buffer="",this._bufferOffset+=this._index,this._index=0):(this._buffer=this._buffer.substr(this._sectionStart),this._index-=this._sectionStart,this._bufferOffset+=this._sectionStart),this._sectionStart=0)},s.prototype.write=function(t){this._ended&&this._cbs.onerror(Error(".write() after done!")),this._buffer+=t,this._parse()},s.prototype._parse=function(){for(;this._index=55296&&t<=57343||t>1114111)return"�";t in i&&(t=i[t]);var e="";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+=String.fromCharCode(t)}var i=r(17);t.exports=n},function(t,e){t.exports={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}},function(t,e){t.exports={Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",amp:"&",AMP:"&",andand:"⩕",And:"⩓",and:"∧",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angmsd:"∡",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",apacir:"⩯",ap:"≈",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxHd:"╤",boxhD:"╥",boxHD:"╦",boxhu:"┴",boxHu:"╧",boxhU:"╨",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsolb:"⧅",bsol:"\\",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",capand:"⩄",capbrcup:"⩉",capcap:"⩋",cap:"∩",Cap:"⋒",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cir:"○",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cup:"∪",Cup:"⋓",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",Darr:"↡",dArr:"⇓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",ddagger:"‡",ddarr:"⇊",DD:"ⅅ",dd:"ⅆ",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrowBar:"⤓",downarrow:"↓",DownArrow:"↓",Downarrow:"⇓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVectorBar:"⥖",DownLeftVector:"↽",DownRightTeeVector:"⥟",DownRightVectorBar:"⥗",DownRightVector:"⇁",DownTeeArrow:"↧",DownTee:"⊤",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",Ecirc:"Ê",ecirc:"ê",ecir:"≖",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",edot:"ė",eDot:"≑",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp13:" ",emsp14:" ",emsp:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",ge:"≥",gE:"≧",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",gescc:"⪩",ges:"⩾",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gla:"⪥",gl:"≷",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",gtcc:"⪧",gtcir:"⩺",gt:">",GT:">",Gt:"≫",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",harrcir:"⥈",harr:"↔",hArr:"⇔",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",Im:"ℑ",imof:"⊷",imped:"Ƶ",Implies:"⇒",incare:"℅",in:"∈",infin:"∞",infintie:"⧝",inodot:"ı",intcal:"⊺",int:"∫",Int:"∬",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larrb:"⇤",larrbfs:"⤟",larr:"←",Larr:"↞",lArr:"⇐",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",latail:"⤙",lAtail:"⤛",lat:"⪫",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",LeftArrowBar:"⇤",leftarrow:"←",LeftArrow:"←",Leftarrow:"⇐",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVectorBar:"⥙",LeftDownVector:"⇃",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTeeArrow:"↤",LeftTee:"⊣",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangleBar:"⧏",LeftTriangle:"⊲",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVectorBar:"⥘",LeftUpVector:"↿",LeftVectorBar:"⥒",LeftVector:"↼",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",lescc:"⪨",les:"⩽",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",llarr:"⇇",ll:"≪",Ll:"⋘",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoustache:"⎰",lmoust:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftrightarrow:"⟷",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longmapsto:"⟼",longrightarrow:"⟶",LongRightArrow:"⟶",Longrightarrow:"⟹",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",ltcc:"⪦",ltcir:"⩹",lt:"<",LT:"<",Lt:"≪",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",midast:"*",midcir:"⫰",mid:"∣",middot:"·",minusb:"⊟",minus:"−",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natural:"♮",naturals:"ℕ",natur:"♮",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",ne:"≠",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nlE:"≦̸",nle:"≰",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangleBar:"⧏̸",NotLeftTriangle:"⋪",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangleBar:"⧐̸",NotRightTriangle:"⋫",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",nparallel:"∦",npar:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",nprec:"⊀",npreceq:"⪯̸",npre:"⪯̸",nrarrc:"⤳̸",nrarr:"↛",nrArr:"⇏",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",Ocirc:"Ô",ocirc:"ô",ocir:"⊚",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",orarr:"↻",Or:"⩔",or:"∨",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",otimesas:"⨶",Otimes:"⨷",otimes:"⊗",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",para:"¶",parallel:"∥",par:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plus:"+",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",prap:"⪷",Pr:"⪻",pr:"≺",prcue:"≼",precapprox:"⪷",prec:"≺",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",pre:"⪯",prE:"⪳",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportional:"∝",Proportion:"∷",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarr:"→",Rarr:"↠",rArr:"⇒",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",Re:"ℜ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrowBar:"⇥",rightarrow:"→",RightArrow:"→",Rightarrow:"⇒",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVectorBar:"⥕",RightDownVector:"⇂",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTeeArrow:"↦",RightTee:"⊢",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangleBar:"⧐",RightTriangle:"⊳",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVectorBar:"⥔",RightUpVector:"↾",RightVectorBar:"⥓",RightVector:"⇀",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoustache:"⎱",rmoust:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",scap:"⪸",Scaron:"Š",scaron:"š",Sc:"⪼",sc:"≻",sccue:"≽",sce:"⪰",scE:"⪴",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdotb:"⊡",sdot:"⋅",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",solbar:"⌿",solb:"⧄",sol:"/",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squ:"□",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succapprox:"⪸",succ:"≻",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺", -succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup1:"¹",sup2:"²",sup3:"³",sup:"⊃",Sup:"⋑",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",therefore:"∴",Therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",ThinSpace:" ",thinsp:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",timesbar:"⨱",timesb:"⊠",times:"×",timesd:"⨰",tint:"∭",toea:"⤨",topbot:"⌶",topcir:"⫱",top:"⊤",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",uarr:"↑",Uarr:"↟",uArr:"⇑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrowBar:"⤒",uparrow:"↑",UpArrow:"↑",Uparrow:"⇑",UpArrowDownArrow:"⇅",updownarrow:"↕",UpDownArrow:"↕",Updownarrow:"⇕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTeeArrow:"↥",UpTee:"⊥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",Vcy:"В",vcy:"в",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",veebar:"⊻",vee:"∨",Vee:"⋁",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xharr:"⟷",xhArr:"⟺",Xi:"Ξ",xi:"ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",yuml:"ÿ",Yuml:"Ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",zfr:"𝔷",Zfr:"ℨ",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}},function(t,e){t.exports={Aacute:"Á",aacute:"á",Acirc:"Â",acirc:"â",acute:"´",AElig:"Æ",aelig:"æ",Agrave:"À",agrave:"à",amp:"&",AMP:"&",Aring:"Å",aring:"å",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",brvbar:"¦",Ccedil:"Ç",ccedil:"ç",cedil:"¸",cent:"¢",copy:"©",COPY:"©",curren:"¤",deg:"°",divide:"÷",Eacute:"É",eacute:"é",Ecirc:"Ê",ecirc:"ê",Egrave:"È",egrave:"è",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",frac12:"½",frac14:"¼",frac34:"¾",gt:">",GT:">",Iacute:"Í",iacute:"í",Icirc:"Î",icirc:"î",iexcl:"¡",Igrave:"Ì",igrave:"ì",iquest:"¿",Iuml:"Ï",iuml:"ï",laquo:"«",lt:"<",LT:"<",macr:"¯",micro:"µ",middot:"·",nbsp:" ",not:"¬",Ntilde:"Ñ",ntilde:"ñ",Oacute:"Ó",oacute:"ó",Ocirc:"Ô",ocirc:"ô",Ograve:"Ò",ograve:"ò",ordf:"ª",ordm:"º",Oslash:"Ø",oslash:"ø",Otilde:"Õ",otilde:"õ",Ouml:"Ö",ouml:"ö",para:"¶",plusmn:"±",pound:"£",quot:'"',QUOT:'"',raquo:"»",reg:"®",REG:"®",sect:"§",shy:"­",sup1:"¹",sup2:"²",sup3:"³",szlig:"ß",THORN:"Þ",thorn:"þ",times:"×",Uacute:"Ú",uacute:"ú",Ucirc:"Û",ucirc:"û",Ugrave:"Ù",ugrave:"ù",uml:"¨",Uuml:"Ü",uuml:"ü",Yacute:"Ý",yacute:"ý",yen:"¥",yuml:"ÿ"}},function(t,e){t.exports={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function n(t){return"function"==typeof t}function i(t){return"number"==typeof t}function o(t){return"object"==typeof t&&null!==t}function a(t){return void 0===t}t.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(t){if(!i(t)||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},r.prototype.emit=function(t){var e,r,i,s,u,c;if(this._events||(this._events={}),"error"===t&&(!this._events.error||o(this._events.error)&&!this._events.error.length)){if(e=arguments[1],e instanceof Error)throw e;var l=new Error('Uncaught, unspecified "error" event. ('+e+")");throw l.context=e,l}if(r=this._events[t],a(r))return!1;if(n(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),r.apply(this,s)}else if(o(r))for(s=Array.prototype.slice.call(arguments,1),c=r.slice(),i=c.length,u=0;u0&&this._events[t].length>i&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace())),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(t,e){function r(){this.removeListener(t,r),i||(i=!0,e.apply(this,arguments))}if(!n(e))throw TypeError("listener must be a function");var i=!1;return r.listener=e,this.on(t,r),this},r.prototype.removeListener=function(t,e){var r,i,a,s;if(!n(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(r=this._events[t],a=r.length,i=-1,r===e||n(r.listener)&&r.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(r)){for(s=a;s-- >0;)if(r[s]===e||r[s].listener&&r[s].listener===e){i=s;break}if(i<0)return this;1===r.length?(r.length=0,delete this._events[t]):r.splice(i,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},r.prototype.removeAllListeners=function(t){var e,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[t],n(r))this.removeListener(t,r);else if(r)for(;r.length;)this.removeListener(t,r[r.length-1]);return delete this._events[t],this},r.prototype.listeners=function(t){var e;return e=this._events&&this._events[t]?n(this._events[t])?[this._events[t]]:this._events[t].slice():[]},r.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(n(e))return 1;if(e)return e.length}return 0},r.listenerCount=function(t,e){return t.listenerCount(e)}},function(t,e,r){function n(t,e,r){"object"==typeof t?(r=e,e=t,t=null):"function"==typeof e&&(r=e,e=u),this._callback=t,this._options=e||u,this._elementCB=r,this.dom=[],this._done=!1,this._tagStack=[],this._parser=this._parser||null}var i=r(24),o=/\s+/g,a=r(25),s=r(26),u={normalizeWhitespace:!1,withStartIndices:!1};n.prototype.onparserinit=function(t){this._parser=t},n.prototype.onreset=function(){n.call(this,this._callback,this._options,this._elementCB)},n.prototype.onend=function(){this._done||(this._done=!0,this._parser=null,this._handleCallback(null))},n.prototype._handleCallback=n.prototype.onerror=function(t){if("function"==typeof this._callback)this._callback(t,this.dom);else if(t)throw t},n.prototype.onclosetag=function(){var t=this._tagStack.pop();this._elementCB&&this._elementCB(t)},n.prototype._addDomElement=function(t){var e=this._tagStack[this._tagStack.length-1],r=e?e.children:this.dom,n=r[r.length-1];t.next=null,this._options.withStartIndices&&(t.startIndex=this._parser.startIndex),this._options.withDomLvl1&&(t.__proto__="tag"===t.type?s:a),n?(t.prev=n,n.next=t):t.prev=null,r.push(t),t.parent=e||null},n.prototype.onopentag=function(t,e){var r={type:"script"===t?i.Script:"style"===t?i.Style:i.Tag,name:t,attribs:e,children:[]};this._addDomElement(r),this._tagStack.push(r)},n.prototype.ontext=function(t){var e,r=this._options.normalizeWhitespace||this._options.ignoreWhitespace;!this._tagStack.length&&this.dom.length&&(e=this.dom[this.dom.length-1]).type===i.Text?r?e.data=(e.data+t).replace(o," "):e.data+=t:this._tagStack.length&&(e=this._tagStack[this._tagStack.length-1])&&(e=e.children[e.children.length-1])&&e.type===i.Text?r?e.data=(e.data+t).replace(o," "):e.data+=t:(r&&(t=t.replace(o," ")),this._addDomElement({data:t,type:i.Text}))},n.prototype.oncomment=function(t){var e=this._tagStack[this._tagStack.length-1];if(e&&e.type===i.Comment)return void(e.data+=t);var r={data:t,type:i.Comment};this._addDomElement(r),this._tagStack.push(r)},n.prototype.oncdatastart=function(){var t={children:[{data:"",type:i.Text}],type:i.CDATA};this._addDomElement(t),this._tagStack.push(t)},n.prototype.oncommentend=n.prototype.oncdataend=function(){this._tagStack.pop()},n.prototype.onprocessinginstruction=function(t,e){this._addDomElement({name:t,data:e,type:i.Directive})},t.exports=n},function(t,e){t.exports={Text:"text",Directive:"directive",Comment:"comment",Script:"script",Style:"style",Tag:"tag",CDATA:"cdata",Doctype:"doctype",isTag:function(t){return"tag"===t.type||"script"===t.type||"style"===t.type}}},function(t,e){var r=t.exports={get firstChild(){var t=this.children;return t&&t[0]||null},get lastChild(){var t=this.children;return t&&t[t.length-1]||null},get nodeType(){return i[this.type]||i.element}},n={tagName:"name",childNodes:"children",parentNode:"parent",previousSibling:"prev",nextSibling:"next",nodeValue:"data"},i={element:1,text:3,cdata:4,comment:8};Object.keys(n).forEach(function(t){var e=n[t];Object.defineProperty(r,t,{get:function(){return this[e]||null},set:function(t){return this[e]=t,t}})})},function(t,e,r){var n=r(25),i=t.exports=Object.create(n),o={tagName:"name"};Object.keys(o).forEach(function(t){var e=o[t];Object.defineProperty(i,t,{get:function(){return this[e]||null},set:function(t){return this[e]=t,t}})})},function(t,e,r){function n(t,e){this.init(t,e)}function i(t,e){return l.getElementsByTagName(t,e,!0)}function o(t,e){return l.getElementsByTagName(t,e,!0,1)[0]}function a(t,e,r){return l.getText(l.getElementsByTagName(t,e,r,1)).trim()}function s(t,e,r,n,i){var o=a(r,n,i);o&&(t[e]=o)}var u=r(13),c=u.DomHandler,l=u.DomUtils;r(21)(n,c),n.prototype.init=c;var f=function(t){return"rss"===t||"feed"===t||"rdf:RDF"===t};n.prototype.onend=function(){var t,e,r={},n=o(f,this.dom);n&&("feed"===n.name?(e=n.children,r.type="atom",s(r,"id","id",e),s(r,"title","title",e),(t=o("link",e))&&(t=t.attribs)&&(t=t.href)&&(r.link=t),s(r,"description","subtitle",e),(t=a("updated",e))&&(r.updated=new Date(t)),s(r,"author","email",e,!0),r.items=i("entry",e).map(function(t){var e,r={};return t=t.children,s(r,"id","id",t),s(r,"title","title",t),(e=o("link",t))&&(e=e.attribs)&&(e=e.href)&&(r.link=e),(e=a("summary",t)||a("content",t))&&(r.description=e),(e=a("updated",t))&&(r.pubDate=new Date(e)),r})):(e=o("channel",n.children).children,r.type=n.name.substr(0,3),r.id="",s(r,"title","title",e),s(r,"link","link",e),s(r,"description","description",e),(t=a("lastBuildDate",e))&&(r.updated=new Date(t)),s(r,"author","managingEditor",e,!0),r.items=i("item",n.children).map(function(t){var e,r={};return t=t.children,s(r,"id","guid",t),s(r,"title","title",t),s(r,"link","link",t),s(r,"description","description",t),(e=a("pubDate",t))&&(r.pubDate=new Date(e)),r}))),this.dom=r,c.prototype._handleCallback.call(this,n?null:Error("couldn't find root of feed"))},t.exports=n},function(t,e,r){function n(t){o.call(this,new i(this),t)}function i(t){this.scope=t}t.exports=n;var o=r(29);r(21)(n,o),n.prototype.readable=!0;var a=r(13).EVENTS;Object.keys(a).forEach(function(t){if(0===a[t])i.prototype["on"+t]=function(){this.scope.emit(t)};else if(1===a[t])i.prototype["on"+t]=function(e){this.scope.emit(t,e)};else{if(2!==a[t])throw Error("wrong number of arguments!");i.prototype["on"+t]=function(e,r){this.scope.emit(t,e,r)}}})},function(t,e,r){function n(t,e){var r=this._parser=new i(t,e),n=this._decoder=new a;o.call(this,{decodeStrings:!1}),this.once("finish",function(){r.end(n.end())})}t.exports=n;var i=r(14),o=r(30).Writable||r(46).Writable,a=r(39).StringDecoder,s=r(9).Buffer;r(21)(n,o),o.prototype._write=function(t,e,r){t instanceof s&&(t=this._decoder.write(t)),this._parser.write(t),r()}},function(t,e,r){function n(){i.call(this)}t.exports=n;var i=r(22).EventEmitter,o=r(21);o(n,i),n.Readable=r(31),n.Writable=r(42),n.Duplex=r(43),n.Transform=r(44),n.PassThrough=r(45),n.Stream=n,n.prototype.pipe=function(t,e){function r(e){t.writable&&!1===t.write(e)&&c.pause&&c.pause()}function n(){c.readable&&c.resume&&c.resume()}function o(){l||(l=!0,t.end())}function a(){l||(l=!0,"function"==typeof t.destroy&&t.destroy())}function s(t){if(u(),0===i.listenerCount(this,"error"))throw t}function u(){c.removeListener("data",r),t.removeListener("drain",n),c.removeListener("end",o),c.removeListener("close",a),c.removeListener("error",s),t.removeListener("error",s),c.removeListener("end",u),c.removeListener("close",u),t.removeListener("close",u)}var c=this;c.on("data",r),t.on("drain",n),t._isStdio||e&&e.end===!1||(c.on("end",o),c.on("close",a));var l=!1;return c.on("error",s),t.on("error",s),c.on("end",u),c.on("close",u),t.on("close",u),t.emit("pipe",c),t}},function(t,e,r){(function(n){e=t.exports=r(33),e.Stream=r(30),e.Readable=e,e.Writable=r(38),e.Duplex=r(37),e.Transform=r(40),e.PassThrough=r(41),n.browser||"disable"!==n.env.READABLE_STREAM||(t.exports=r(30))}).call(e,r(32))},function(t,e){function r(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function i(t){if(l===setTimeout)return setTimeout(t,0);if((l===r||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function o(t){if(f===clearTimeout)return clearTimeout(t);if((f===n||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(t);try{return f(t)}catch(e){try{return f.call(null,t)}catch(e){return f.call(this,t)}}}function a(){g&&p&&(g=!1,p.length?d=p.concat(d):v=-1,d.length&&s())}function s(){if(!g){var t=i(a);g=!0;for(var e=d.length;e;){for(p=d,d=[];++v1)for(var r=1;r0)if(e.ended&&!i){var s=new Error("stream.push() after EOF");t.emit("error",s)}else if(e.endEmitted&&i){var s=new Error("stream.unshift() after end event");t.emit("error",s)}else!e.decoder||i||n||(r=e.decoder.write(r)),i||(e.reading=!1),e.flowing&&0===e.length&&!e.sync?(t.emit("data",r),t.read(0)):(e.length+=e.objectMode?1:r.length,i?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&f(t)),p(t,e);else i||(e.reading=!1);return a(e)}function a(t){return!t.ended&&(t.needReadable||t.length=C)t=C;else{t--;for(var e=1;e<32;e<<=1)t|=t>>e;t++}return t}function u(t,e){return 0===e.length&&e.ended?0:e.objectMode?0===t?0:1:isNaN(t)||k.isNull(t)?e.flowing&&e.buffer.length?e.buffer[0].length:e.length:t<=0?0:(t>e.highWaterMark&&(e.highWaterMark=s(t)),t>e.length?e.ended?e.length:(e.needReadable=!0,0):t)}function c(t,e){var r=null;return k.isBuffer(e)||k.isString(e)||k.isNullOrUndefined(e)||t.objectMode||(r=new TypeError("Invalid non-string/buffer chunk")),r}function l(t,e){if(e.decoder&&!e.ended){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,f(t)}function f(t){var r=t._readableState;r.needReadable=!1,r.emittedReadable||(T("emitReadable",r.flowing),r.emittedReadable=!0,r.sync?e.nextTick(function(){h(t)}):h(t))}function h(t){T("emit readable"),t.emit("readable"),b(t)}function p(t,r){r.readingMore||(r.readingMore=!0,e.nextTick(function(){d(t,r)}))}function d(t,e){for(var r=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=i)r=o?n.join(""):A.concat(n,i),n.length=0;else if(t0)throw new Error("endReadable called on non-empty stream");r.endEmitted||(r.ended=!0,e.nextTick(function(){r.endEmitted||0!==r.length||(r.endEmitted=!0,t.readable=!1,t.emit("end"))}))}function w(t,e){for(var r=0,n=t.length;r0)&&(e.emittedReadable=!1),0===t&&e.needReadable&&(e.length>=e.highWaterMark||e.ended))return T("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?_(this):f(this),null;if(t=u(t,e),0===t&&e.ended)return 0===e.length&&_(this),null;var n=e.needReadable;T("need readable",n),(0===e.length||e.length-t0?m(t,e):null,k.isNull(i)&&(e.needReadable=!0,t=0),e.length-=t,0!==e.length||e.ended||(e.needReadable=!0),r!==t&&e.ended&&0===e.length&&_(this),k.isNull(i)||this.emit("data",i),i},i.prototype._read=function(t){this.emit("error",new Error("not implemented"))},i.prototype.pipe=function(t,r){function n(t){T("onunpipe"),t===f&&o()}function i(){T("onend"),t.end()}function o(){T("cleanup"),t.removeListener("close",u),t.removeListener("finish",c),t.removeListener("drain",v),t.removeListener("error",s),t.removeListener("unpipe",n),f.removeListener("end",i),f.removeListener("end",o),f.removeListener("data",a),!h.awaitDrain||t._writableState&&!t._writableState.needDrain||v()}function a(e){T("ondata");var r=t.write(e);!1===r&&(T("false write response, pause",f._readableState.awaitDrain),f._readableState.awaitDrain++,f.pause())}function s(e){T("onerror",e),l(),t.removeListener("error",s),0===S.listenerCount(t,"error")&&t.emit("error",e)}function u(){t.removeListener("finish",c),l()}function c(){T("onfinish"),t.removeListener("close",u),l()}function l(){T("unpipe"),f.unpipe(t)}var f=this,h=this._readableState;switch(h.pipesCount){case 0:h.pipes=t;break;case 1:h.pipes=[h.pipes,t];break;default:h.pipes.push(t)}h.pipesCount+=1,T("pipe count=%d opts=%j",h.pipesCount,r);var p=(!r||r.end!==!1)&&t!==e.stdout&&t!==e.stderr,d=p?i:o;h.endEmitted?e.nextTick(d):f.once("end",d),t.on("unpipe",n);var v=g(f);return t.on("drain",v),f.on("data",a),t._events&&t._events.error?j(t._events.error)?t._events.error.unshift(s):t._events.error=[s,t._events.error]:t.on("error",s),t.once("close",u),t.once("finish",c),t.emit("pipe",f),h.flowing||(T("pipe resume"),f.resume()),t},i.prototype.unpipe=function(t){var e=this._readableState;if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this),this);if(!t){var r=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var i=0;i1){for(var r=[],n=0;n=this.charLength-this.charReceived?this.charLength-this.charReceived:t.length;if(t.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived=55296&&n<=56319)){if(this.charReceived=this.charLength=0,0===t.length)return e;break}this.charLength+=this.surrogateSize,e=""}this.detectIncompleteChar(t);var i=t.length;this.charLength&&(t.copy(this.charBuffer,0,t.length-this.charReceived,i),i-=this.charReceived),e+=t.toString(this.encoding,0,i);var i=e.length-1,n=e.charCodeAt(i);if(n>=55296&&n<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),t.copy(this.charBuffer,0,0,o),e.substring(0,i)}return e},c.prototype.detectIncompleteChar=function(t){for(var e=t.length>=3?3:t.length;e>0;e--){var r=t[t.length-e];if(1==e&&r>>5==6){this.charLength=2;break}if(e<=2&&r>>4==14){this.charLength=3;break}if(e<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=e},c.prototype.end=function(t){var e="";if(t&&t.length&&(e=this.write(t)),this.charReceived){var r=this.charReceived,n=this.charBuffer,i=this.encoding;e+=n.slice(0,r).toString(i)}return e}},function(t,e,r){function n(t,e){this.afterTransform=function(t,r){return i(e,t,r)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null}function i(t,e,r){var n=t._transformState;n.transforming=!1;var i=n.writecb;if(!i)return t.emit("error",new Error("no writecb in Transform class"));n.writechunk=null,n.writecb=null,u.isNullOrUndefined(r)||t.push(r),i&&i(e);var o=t._readableState;o.reading=!1,(o.needReadable||o.length",t.children&&(r+=d(t.children,e)),p[t.name]&&!e.xmlMode||(r+="")):r+="/>",r}function o(t){return"<"+t.data+">"}function a(t,e){var r=t.data||"";return!e.decodeEntities||t.parent&&t.parent.name in h||(r=l.encodeXML(r)),r}function s(t){return""}function u(t){return""}var c=r(51),l=r(52),f={__proto__:null,allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,hidden:!0,ismap:!0,loop:!0,multiple:!0,muted:!0,open:!0,readonly:!0,required:!0,reversed:!0,scoped:!0,seamless:!0,selected:!0,typemustmatch:!0},h={__proto__:null,style:!0,script:!0,xmp:!0,iframe:!0,noembed:!0,noframes:!0,plaintext:!0,noscript:!0},p={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},d=t.exports=function(t,e){Array.isArray(t)||t.cheerio||(t=[t]),e=e||{};for(var r="",n=0;n0&&(o=i(t,o,r,n),a=a.concat(o),n-=o.length,n<=0)));s++);return a}function o(t,e){for(var r=0,n=e.length;r0&&(r=a(t,e[n].children)));return r}function s(t,e){for(var r=0,n=e.length;r0&&s(t,e[r].children)))return!0;return!1}function u(t,e){for(var r=[],n=0,i=e.length;n0&&(r=r.concat(u(t,e[n].children))));return r}var c=r(24).isTag;t.exports={filter:n,find:i,findOneChild:o,findOne:a,existsOne:s,findAll:u}},function(t,e,r){function n(t,e){return"function"==typeof e?function(r){return r.attribs&&e(r.attribs[t])}:function(r){return r.attribs&&r.attribs[t]===e}}function i(t,e){return function(r){return t(r)||e(r)}}var o=r(24),a=e.isTag=o.isTag;e.testElement=function(t,e){for(var r in t)if(t.hasOwnProperty(r)){if("tag_name"===r){if(!a(e)||!t.tag_name(e.name))return!1}else if("tag_type"===r){if(!t.tag_type(e.type))return!1}else if("tag_contains"===r){if(a(e)||!t.tag_contains(e.data))return!1}else if(!e.attribs||!t[r](e.attribs[r]))return!1}else;return!0};var s={tag_name:function(t){return"function"==typeof t?function(e){return a(e)&&t(e.name)}:"*"===t?a:function(e){return a(e)&&e.name===t}},tag_type:function(t){return"function"==typeof t?function(e){return t(e.type)}:function(e){return e.type===t}},tag_contains:function(t){return"function"==typeof t?function(e){return!a(e)&&t(e.data)}:function(e){return!a(e)&&e.data===t}}};e.getElements=function(t,e,r,o){var a=Object.keys(t).map(function(e){var r=t[e];return e in s?s[e](r):n(e,r)});return 0===a.length?[]:this.filter(a.reduce(i),e,r,o)},e.getElementById=function(t,e,r){return Array.isArray(e)||(e=[e]),this.findOne(n("id",t),e,r!==!1)},e.getElementsByTagName=function(t,e,r,n){return this.filter(s.tag_name(t),e,r,n)},e.getElementsByTagType=function(t,e,r,n){return this.filter(s.tag_type(t),e,r,n)}},function(t,e){e.removeSubsets=function(t){for(var e,r,n,i=t.length;--i>-1;){for(e=r=t[i],t[i]=null,n=!0;r;){if(t.indexOf(r)>-1){n=!1,t.splice(i,1);break}r=r.parent}n&&(t[i]=e)}return t};var r={DISCONNECTED:1,PRECEDING:2,FOLLOWING:4,CONTAINS:8,CONTAINED_BY:16},n=e.compareDocumentPosition=function(t,e){var n,i,o,a,s,u,c=[],l=[];if(t===e)return 0;for(n=t;n;)c.unshift(n),n=n.parent;for(n=e;n;)l.unshift(n),n=n.parent;for(u=0;c[u]===l[u];)u++;return 0===u?r.DISCONNECTED:(i=c[u-1],o=i.children,a=c[u],s=l[u],o.indexOf(a)>o.indexOf(s)?i===e?r.FOLLOWING|r.CONTAINED_BY:r.FOLLOWING:i===t?r.PRECEDING|r.CONTAINS:r.PRECEDING)};e.uniqueSort=function(t){var e,i,o=t.length;for(t=t.slice();--o>-1;)e=t[o],i=t.indexOf(e),i>-1&&i)[^>]*$|#([\w\-]*)$)/;e.isHtml=function(t){if("<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&t.length>=3)return!0;var e=a.exec(t);return!(!e||!e[1])}},function(t,e){function r(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function n(t,e){for(var r=-1,n=Array(t);++r1?r[i-1]:void 0,a=i>2?r[2]:void 0;for(o=t.length>3&&"function"==typeof o?(i--,o):void 0,a&&f(r[0],r[1],a)&&(o=i<3?void 0:o,i=1),e=Object(e);++n-1&&t%1==0&&t-1&&t%1==0&&t<=j}function _(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function w(t){return!!t&&"object"==typeof t}function x(t){return v(t)?i(t,!0):a(t)}var j=9007199254740991,A="[object Arguments]",S="[object Function]",E="[object GeneratorFunction]",k=/^(?:0|[1-9]\d*)$/,O=Object.prototype,T=O.hasOwnProperty,C=O.toString,L=O.propertyIsEnumerable,D=Math.max,R=Array.isArray,N=c(function(t,e){u(e,x(e),t)});t.exports=N},function(t,e){(function(e){function r(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function n(t,e){for(var r=-1,n=t?t.length:0;++r-1}function o(t,e,r,n){for(var i=t.length,o=r+(n?1:-1);n?o--:++o1&&E.reverse(),p&&c1?"& ":"")+e[n],e=e.join(r>2?", ":" "),t.replace(ft,"{\n/* [wrapped with "+e+"] */\n")}function T(t,e){return e=null==e?rt:e,!!e&&("number"==typeof t||bt.test(t))&&t>-1&&t%1==0&&t2?t:void 0}(),Pt=Nt?function(t,e,r){var n=e+"";return Nt(t,"toString",{configurable:!0,enumerable:!1,value:F(O(n,R(k(n),r)))})}:V,Bt=d(function(t,e,r){var n=H;if(r.length){var i=f(r,S(Bt));n|=J}return A(t,n,e,r,i)});Bt.placeholder={},t.exports=Bt}).call(e,function(){return this}())},function(t,e){function r(t,e){for(var r=-1,n=t?t.length:0;++r-1&&t%1==0&&t-1&&t%1==0&&t<=x}function b(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function m(t){return!!t&&"object"==typeof t}function _(t){return d(t)?o(t):s(t)}function w(t){return t}var x=9007199254740991,j="[object Arguments]",A="[object Function]",S="[object GeneratorFunction]",E=/^(?:0|[1-9]\d*)$/,k=Object.prototype,O=k.hasOwnProperty,T=k.toString,C=k.propertyIsEnumerable,L=i(Object.keys,Object),D=u(a),R=c(),N=Array.isArray;t.exports=h},function(t,e){function r(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function n(t,e){for(var r=-1,n=Array(t);++r1?r[i-1]:void 0,a=i>2?r[2]:void 0;for(o=t.length>3&&"function"==typeof o?(i--,o):void 0,a&&h(r[0],r[1],a)&&(o=i<3?void 0:o,i=1),e=Object(e);++n-1&&t%1==0&&t-1&&t%1==0&&t<=A}function w(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function x(t){return!!t&&"object"==typeof t}function j(t){return y(t)?i(t,!0):s(t)}var A=9007199254740991,S="[object Arguments]",E="[object Function]",k="[object GeneratorFunction]",O=/^(?:0|[1-9]\d*)$/,T=Object.prototype,C=T.hasOwnProperty,L=T.toString,D=T.propertyIsEnumerable,R=Math.max,N=Array.isArray,P=l(function(t,e,r,n){c(e,j(e),t,n)}),B=u(function(t){return t.push(void 0,o),r(P,void 0,t)});t.exports=B},function(t,e,r){var n=r(67),i=r(61),o=i.isTag,a=i.domEach,s=Object.prototype.hasOwnProperty,u=i.camelCase,c=i.cssCase,l=/\s+/,f="data-",h={forEach:r(64),extend:r(62),some:r(82)},p={null:null,true:!0,false:!1},d=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,g=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,v=function(t,e){if(t&&o(t))return t.attribs||(t.attribs={}),e?s.call(t.attribs,e)?d.test(e)?e:t.attribs[e]:"option"===t.name&&"value"===e?n.text(t.children):"input"!==t.name||"radio"!==t.attribs.type&&"checkbox"!==t.attribs.type||"value"!==e?void 0:"on":t.attribs},y=function(t,e,r){null===r?x(t,e):t.attribs[e]=r+""};e.attr=function(t,e){return"object"==typeof t||void 0!==e?"function"==typeof e?a(this,function(r,n){y(n,t,e.call(n,r,n.attribs[t]))}):a(this,function(r,n){o(n)&&("object"==typeof t?h.forEach(t,function(t,e){y(n,e,t)}):y(n,t,e))}):v(this[0],t)};var b=function(t,e){if(t&&o(t))return t.hasOwnProperty(e)?t[e]:d.test(e)?void 0!==v(t,e):v(t,e)},m=function(t,e,r){t[e]=d.test(e)?!!r:r};e.prop=function(t,e){var r,n=0;if("string"==typeof t&&void 0===e){switch(t){case"style":r=this.css(),h.forEach(r,function(t,e){r[n++]=e}),r.length=n;break;case"tagName":case"nodeName":r=this[0].name.toUpperCase();break;default:r=b(this[0],t)}return r}if("object"==typeof t||void 0!==e)return"function"==typeof e?a(this,function(r,n){m(n,t,e.call(n,r,b(n,t)))}):a(this,function(r,n){o(n)&&("object"==typeof t?h.forEach(t,function(t,e){m(n,e,t)}):m(n,t,e))})};var _=function(t,e,r){return t.data||(t.data={}),"object"==typeof e?h.extend(t.data,e):void("string"==typeof e&&void 0!==r?t.data[e]=r:"object"==typeof e&&h.extend(t.data,e))},w=function(t,e){var r,n,i,o,a,l,h,d=1===arguments.length;for(d?(r=Object.keys(t.attribs).filter(function(t){return t.slice(0,f.length)===f}),i=r.map(function(t){return u(t.slice(f.length))})):(r=[f+c(e)],i=[e]),l=0,h=r.length;l-1;)if(r=o+t.length,(0===o||l.test(i[o-1]))&&(r===i.length||l.test(i[r])))return!0})},e.addClass=function(t){if("function"==typeof t)return a(this,function(r,n){ -var i=n.attribs.class||"";e.addClass.call([n],t.call(n,r,i))});if(!t||"string"!=typeof t)return this;for(var r=t.split(l),n=this.length,i=0;i=0&&(u.splice(a,1),s=!0,c--);s&&(e.attribs.class=u.join(" "))}}))},e.toggleClass=function(t,r){if("function"==typeof t)return a(this,function(n,i){e.toggleClass.call([i],t.call(i,n,i.attribs.class||"",r),r)});if(!t||"string"!=typeof t)return this;for(var n,i,s=t.split(l),u=s.length,c="boolean"==typeof r?r?1:-1:0,f=this.length,h=0;h=0&&i<0?n.push(s[p]):c<=0&&i>=0&&n.splice(i,1);this[h].attribs.class=n.join(" ")}return this},e.is=function(t){return!!t&&this.filter(t).length>0}},function(t,e,r){function n(t,e,r){if(e)"string"==typeof e&&(e=o(e,t._root,r));else{if(!t._root||!t._root.children)return"";e=t._root.children}return i(e,r)}var i=r(50),o=r(68),a=r(8),s={merge:r(80),defaults:r(65)};e.load=function(t,n){var i=r(7);n=s.defaults(n||{},i.prototype.options);var o=a(t,n),u=function(t,e,r,a){return this instanceof u?(a=s.defaults(a||{},n),i.call(this,t,e,r||o,a)):new u(t,e,r,a)};return u.prototype=Object.create(i.prototype),u.prototype.constructor=u,u.fn=u.prototype,u.prototype._originalRoot=o,s.merge(u,e),u._root=o,u._options=n,u},e.html=function(t,e){var i=r(7);return"[object Object]"!==Object.prototype.toString.call(t)||e||"length"in t||"type"in t||(e=t,t=void 0),e=s.defaults(e||{},this._options,i.prototype.options),n(this,t,e)},e.xml=function(t){var e=s.defaults({xmlMode:!0},this._options);return n(this,t,e)},e.text=function(t){t||(t=this.root());for(var r,n="",i=t.length,o=0;o1&&"scope"!==e)throw new SyntaxError("pseudo-selector :"+e+" requires an argument")}else if(1===t.length)throw new SyntaxError("pseudo-selector :"+e+" doesn't have any arguments")}var s=r(48),u=s.isTag,c=s.getText,l=s.getParent,f=s.getChildren,h=s.getSiblings,p=s.hasAttrib,d=s.getName,g=s.getAttributeValue,v=r(70),y=r(74).rules.equals,b=r(73),m=b.trueFunc,_=b.falseFunc,w={contains:function(t,e){return function(r){return t(r)&&c(r).indexOf(e)>=0}},icontains:function(t,e){var r=e.toLowerCase();return function(e){return t(e)&&c(e).toLowerCase().indexOf(r)>=0}},"nth-child":function(t,e){var r=v(e);return r===_?r:r===m?o(t):function(e){for(var n=h(e),i=0,o=0;i=0;o--)if(u(n[o])){if(n[o]===e)break;i++}return r(i)&&t(e)}},"nth-of-type":function(t,e){var r=v(e);return r===_?r:r===m?o(t):function(e){for(var n=h(e),i=0,o=0;o=0;o--)if(u(n[o])){if(n[o]===e)break;d(n[o])===d(e)&&i++}return r(i)&&t(e)}},root:function(t){return function(e){return!l(e)&&t(e)}},scope:function(t,e,r,n){return n&&0!==n.length?1===n.length?function(e){return n[0]===e&&t(e)}:function(e){return n.indexOf(e)>=0&&t(e)}:w.root(t)},checkbox:i("type","checkbox"),file:i("type","file"),password:i("type","password"),radio:i("type","radio"),reset:i("type","reset"),image:i("type","image"),submit:i("type","submit")},x={empty:function(t){return!f(t).some(function(t){return u(t)||"text"===t.type})},"first-child":function(t){return n(h(t))===t},"last-child":function(t){for(var e=h(t),r=e.length-1;r>=0;r--){if(e[r]===t)return!0;if(u(e[r]))break}return!1},"first-of-type":function(t){for(var e=h(t),r=0;r=0;r--)if(u(e[r])){if(e[r]===t)return!0;if(d(e[r])===d(t))break}return!1},"only-of-type":function(t){for(var e=h(t),r=0,n=e.length;r=r};var n=r%e;return n<0&&(n+=e),e>1?function(t){return t>=r&&t%e===n}:(e*=-1,function(t){return t<=r&&t%e===n})}t.exports=n;var i=r(73),o=i.trueFunc,a=i.falseFunc},function(t,e){t.exports={trueFunc:function(){return!0},falseFunc:function(){return!1}}},function(t,e,r){var n=r(48),i=n.hasAttrib,o=n.getAttributeValue,a=r(73).falseFunc,s=/[-[\]{}()*+?.,\\^$|#\s]/g,u={__proto__:null,equals:function(t,e){var r=e.name,n=e.value;return e.ignoreCase?(n=n.toLowerCase(),function(e){var i=o(e,r);return null!=i&&i.toLowerCase()===n&&t(e)}):function(e){return o(e,r)===n&&t(e)}},hyphen:function(t,e){var r=e.name,n=e.value,i=n.length;return e.ignoreCase?(n=n.toLowerCase(),function(e){var a=o(e,r);return null!=a&&(a.length===i||"-"===a.charAt(i))&&a.substr(0,i).toLowerCase()===n&&t(e)}):function(e){var a=o(e,r);return null!=a&&a.substr(0,i)===n&&(a.length===i||"-"===a.charAt(i))&&t(e)}},element:function(t,e){var r=e.name,n=e.value;if(/\s/.test(n))return a;n=n.replace(s,"\\$&");var i="(?:^|\\s)"+n+"(?:$|\\s)",u=e.ignoreCase?"i":"",c=new RegExp(i,u);return function(e){var n=o(e,r);return null!=n&&c.test(n)&&t(e)}},exists:function(t,e){var r=e.name;return function(e){return i(e,r)&&t(e)}},start:function(t,e){var r=e.name,n=e.value,i=n.length;return 0===i?a:e.ignoreCase?(n=n.toLowerCase(),function(e){var a=o(e,r);return null!=a&&a.substr(0,i).toLowerCase()===n&&t(e)}):function(e){var a=o(e,r);return null!=a&&a.substr(0,i)===n&&t(e)}},end:function(t,e){var r=e.name,n=e.value,i=-n.length;return 0===i?a:e.ignoreCase?(n=n.toLowerCase(),function(e){var a=o(e,r);return null!=a&&a.substr(i).toLowerCase()===n&&t(e)}):function(e){var a=o(e,r);return null!=a&&a.substr(i)===n&&t(e)}},any:function(t,e){var r=e.name,n=e.value;if(""===n)return a;if(e.ignoreCase){var i=new RegExp(n.replace(s,"\\$&"),"i");return function(e){var n=o(e,r);return null!=n&&i.test(n)&&t(e)}}return function(e){var i=o(e,r);return null!=i&&i.indexOf(n)>=0&&t(e)}},not:function(t,e){var r=e.name,n=e.value;return""===n?function(e){return!!o(e,r)&&t(e)}:e.ignoreCase?(n=n.toLowerCase(),function(e){var i=o(e,r);return null!=i&&i.toLowerCase()!==n&&t(e)}):function(e){return o(e,r)!==n&&t(e)}}};t.exports={compile:function(t,e,r){if(r&&r.strict&&(e.ignoreCase||"not"===e.action))throw SyntaxError("Unsupported attribute selector");return u[e.action](t,e)},rules:u}},function(t,e,r){function n(t,e,r){var n=o(t,e,r);return i(n)}function i(t){return function(e){return g(e)&&t(e)}}function o(t,e,r){var n=p(t,e);return u(n,e,r)}function a(t){return"pseudo"===t.type&&("scope"===t.name||Array.isArray(t.data)&&t.data.some(function(t){return t.some(a)}))}function s(t,e){var r=!!e&&!!e.length&&e.every(function(t){return t===A||!!S(t)});t.forEach(function(t){if(t.length>0&&c(t[0])&&"descendant"!==t[0].type);else{if(!r||a(t))return;t.unshift(x)}t.unshift(j)})}function u(t,e,r){t=t.filter(function(t){return t.length>0}),t.forEach(y);var n=Array.isArray(r);return r=e&&e.context||r,r&&!n&&(r=[r]),s(t,r),t.map(function(t){return l(t,e,r,n)}).reduce(f,_)}function c(t){return w[t.type]<0}function l(t,e,r,n){var i=n&&"scope"===t[0].name&&"descendant"===t[1].type;return t.reduce(function(t,n,o){return t===_?t:v[n.type](t,n,e,r,i&&1===o)},e&&e.rootFunc||m)}function f(t,e){return e===_||t===m?t:t===_||e===m?e:function(r){return t(r)||e(r)}}function h(t){return t.some(c)}t.exports=n,t.exports.compileUnsafe=o,t.exports.compileToken=u;var p=r(76),d=r(48),g=d.isTag,v=r(77),y=r(78),b=r(73),m=b.trueFunc,_=b.falseFunc,w=r(79),x={type:"descendant"},j={type:"pseudo",name:"scope"},A={},S=d.getParent,E=r(69),k=E.filters,O=d.existsOne,g=d.isTag,T=d.getChildren;k.not=function(t,e,r,n){var i={xmlMode:!(!r||!r.xmlMode),strict:!(!r||!r.strict)};if(i.strict&&(e.length>1||e.some(h)))throw new SyntaxError("complex selectors in :not aren't allowed in strict mode");var o=u(e,i,n);return o===_?t:o===m?_:function(e){return!o(e)&&t(e)}},k.has=function(t,e,r){var n={xmlMode:!(!r||!r.xmlMode),strict:!(!r||!r.strict)},o=e.some(h)?[A]:null,a=u(e,n,o);return a===_?_:a===m?function(e){return T(e).some(g)&&t(e)}:(a=i(a),o?function(e){return t(e)&&(o[0]=e,O(a,T(e)))}:function(e){return t(e)&&O(a,T(e))})},k.matches=function(t,e,r,n){var i={xmlMode:!(!r||!r.xmlMode),strict:!(!r||!r.strict),rootFunc:t};return u(e,i,n)}},function(t,e){"use strict";function r(t,e,r){var n="0x"+e-65536;return n!==n||r?e:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)}function n(t){return t.replace(c,r)}function i(t){return" "===t||"\n"===t||"\t"===t||"\f"===t||"\r"===t}function o(t,e){var r=[];if(t=a(r,t+"",e),""!==t)throw new SyntaxError("Unmatched selector: "+t);return r}function a(t,e,r){function o(){var t=e.match(u)[0];return e=e.substr(t.length),n(t)}function c(t){for(;i(e.charAt(t));)t++;e=e.substr(t)}var y,b,m,_,w=[],x=!1;for(c(0);""!==e;)if(b=e.charAt(0),i(b))x=!0,c(1);else if(b in h)w.push({type:h[b]}),x=!1,c(1);else if(","===b){if(0===w.length)throw new SyntaxError("empty sub-selector");t.push(w),w=[],x=!1,c(1)}else if(x&&(w.length>0&&w.push({type:"descendant"}),x=!1),"*"===b)e=e.substr(1),w.push({type:"universal"});else if(b in p)e=e.substr(1),w.push({type:"attribute",name:p[b][0],action:p[b][1],value:o(),ignoreCase:!1});else if("["===b){if(e=e.substr(1),y=e.match(l),!y)throw new SyntaxError("Malformed attribute selector: "+e);e=e.substr(y[0].length),m=n(y[1]),r&&("lowerCaseAttributeNames"in r?!r.lowerCaseAttributeNames:r.xmlMode)||(m=m.toLowerCase()),w.push({type:"attribute",name:m,action:f[y[2]],value:n(y[4]||y[5]||""),ignoreCase:!!y[6]})}else if(":"===b){if(":"===e.charAt(1)){e=e.substr(2),w.push({type:"pseudo-element",name:o().toLowerCase()});continue}if(e=e.substr(1),m=o().toLowerCase(),y=null,"("===e.charAt(0))if(m in d){_=e.charAt(1);var j=_ in v;if(e=e.substr(j+1),y=[],e=a(y,e,r),j){if(e.charAt(0)!==_)throw new SyntaxError("unmatched quotes in :"+m);e=e.substr(1)}if(")"!==e.charAt(0))throw new SyntaxError("missing closing parenthesis in :"+m+" "+e);e=e.substr(1)}else{for(var A=1,S=1;S>0&&A0&&0===e.length)throw new SyntaxError("empty sub-selector");t.push(e)}t.exports=o;var u=/^(?:\\.|[\w\-\u00c0-\uFFFF])+/,c=/\\([\da-f]{1,6}\s?|(\s)|.)/gi,l=/^\s*((?:\\.|[\w\u00c0-\uFFFF\-])+)\s*(?:(\S?)=\s*(?:(['"])(.*?)\3|(#?(?:\\.|[\w\u00c0-\uFFFF\-])*)|)|)\s*(i)?\]/,f={__proto__:null,undefined:"exists","":"equals","~":"element","^":"start",$:"end","*":"any","!":"not","|":"hyphen"},h={__proto__:null,">":"child","<":"parent","~":"sibling","+":"adjacent"},p={__proto__:null,"#":["id","equals"],".":["class","element"]},d={__proto__:null,has:!0,not:!0,matches:!0},g={__proto__:null,contains:!0,icontains:!0},v={__proto__:null,'"':!0,"'":!0}},function(t,e,r){var n=r(48),i=n.isTag,o=n.getParent,a=n.getChildren,s=n.getSiblings,u=n.getName;t.exports={__proto__:null,attribute:r(74).compile,pseudo:r(69).compile,tag:function(t,e){var r=e.name;return function(e){return u(e)===r&&t(e)}},descendant:function(t,e,r,n,i){return function(e){if(i&&t(e))return!0;for(var r=!1;!r&&(e=o(e));)r=t(e);return r}},parent:function(t,e,r){function n(e){return i(e)&&t(e)}if(r&&r.strict)throw SyntaxError("Parent selector isn't part of CSS3");return function(t){return a(t).some(n)}},child:function(t){return function(e){var r=o(e);return!!r&&t(r)}},sibling:function(t){return function(e){for(var r=s(e),n=0;n=0&&n>=1);else if(e===o.pseudo)if(t.data)if("has"===t.name||"contains"===t.name)e=0;else if("matches"===t.name||"not"===t.name){e=0;for(var r=0;re&&(e=n)}t.data.length>1&&e>0&&(e-=1)}else e=1;else e=3;return e}t.exports=n;var o=r(79),a={__proto__:null,exists:10,equals:8,not:7,start:6,end:6,any:5,hyphen:4,element:4}},function(t,e){t.exports={universal:50,tag:30,attribute:1,pseudo:0,descendant:-1,child:-1,parent:-1,sibling:-1,adjacent:-1}},function(t,e,r){(function(t,r){function n(t,e){return t.set(e[0],e[1]),t}function i(t,e){return t.add(e),t}function o(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function a(t,e){for(var r=-1,n=t?t.length:0;++r-1}function k(t,e){var r=this.__data__,n=$(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function O(t){var e=-1,r=t?t.length:0;for(this.clear();++e1?r[i-1]:void 0,a=i>2?r[2]:void 0;for(o=t.length>3&&"function"==typeof o?(i--,o):void 0,a&&wt(r[0],r[1],a)&&(o=i<3?void 0:o,i=1),e=Object(e);++n-1&&t%1==0&&t-1&&t%1==0&&t<=$t}function Rt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Nt(t){return!!t&&"object"==typeof t}function Pt(t){if(!Nt(t)||Ue.call(t)!=Kt||h(t))return!1;var e=He(t);if(null===e)return!0;var r=Me.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&qe.call(r)==Ie}function Bt(t){return ft(t,Mt(t))}function qt(t){return Tt(t)?U(t):Q(t)}function Mt(t){return Tt(t)?U(t,!0):Z(t)}function It(){return[]}function Ut(){return!1}var Ft=200,Vt="__lodash_hash_undefined__",$t=9007199254740991,zt="[object Arguments]",Ht="[object Array]",Gt="[object Boolean]",Yt="[object Date]",Wt="[object Error]",Xt="[object Function]",Jt="[object GeneratorFunction]",Qt="[object Map]",Zt="[object Number]",Kt="[object Object]",te="[object Promise]",ee="[object RegExp]",re="[object Set]",ne="[object String]",ie="[object Symbol]",oe="[object WeakMap]",ae="[object ArrayBuffer]",se="[object DataView]",ue="[object Float32Array]",ce="[object Float64Array]",le="[object Int8Array]",fe="[object Int16Array]",he="[object Int32Array]",pe="[object Uint8Array]",de="[object Uint8ClampedArray]",ge="[object Uint16Array]",ve="[object Uint32Array]",ye=/[\\^$.*+?()[\]{}|]/g,be=/\w*$/,me=/^\[object .+?Constructor\]$/,_e=/^(?:0|[1-9]\d*)$/,we={};we[ue]=we[ce]=we[le]=we[fe]=we[he]=we[pe]=we[de]=we[ge]=we[ve]=!0,we[zt]=we[Ht]=we[ae]=we[Gt]=we[se]=we[Yt]=we[Wt]=we[Xt]=we[Qt]=we[Zt]=we[Kt]=we[ee]=we[re]=we[ne]=we[oe]=!1;var xe={};xe[zt]=xe[Ht]=xe[ae]=xe[se]=xe[Gt]=xe[Yt]=xe[ue]=xe[ce]=xe[le]=xe[fe]=xe[he]=xe[Qt]=xe[Zt]=xe[Kt]=xe[ee]=xe[re]=xe[ne]=xe[ie]=xe[pe]=xe[de]=xe[ge]=xe[ve]=!0,xe[Wt]=xe[Xt]=xe[oe]=!1;var je="object"==typeof t&&t&&t.Object===Object&&t,Ae="object"==typeof self&&self&&self.Object===Object&&self,Se=je||Ae||Function("return this")(),Ee="object"==typeof e&&e&&!e.nodeType&&e,ke=Ee&&"object"==typeof r&&r&&!r.nodeType&&r,Oe=ke&&ke.exports===Ee,Te=Oe&&je.process,Ce=function(){try{return Te&&Te.binding("util")}catch(t){}}(),Le=Ce&&Ce.isTypedArray,De=Array.prototype,Re=Function.prototype,Ne=Object.prototype,Pe=Se["__core-js_shared__"],Be=function(){var t=/[^.]+$/.exec(Pe&&Pe.keys&&Pe.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),qe=Re.toString,Me=Ne.hasOwnProperty,Ie=qe.call(Object),Ue=Ne.toString,Fe=RegExp("^"+qe.call(Me).replace(ye,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ve=Oe?Se.Buffer:void 0,$e=Se.Symbol,ze=Se.Uint8Array,He=d(Object.getPrototypeOf,Object),Ge=Object.create,Ye=Ne.propertyIsEnumerable,We=De.splice,Xe=Object.getOwnPropertySymbols,Je=Ve?Ve.isBuffer:void 0,Qe=d(Object.keys,Object),Ze=Math.max,Ke=vt(Se,"DataView"),tr=vt(Se,"Map"),er=vt(Se,"Promise"),rr=vt(Se,"Set"),nr=vt(Se,"WeakMap"),ir=vt(Object,"create"),or=Et(Ke),ar=Et(tr),sr=Et(er),ur=Et(rr),cr=Et(nr),lr=$e?$e.prototype:void 0,fr=lr?lr.valueOf:void 0;v.prototype.clear=y,v.prototype.delete=b,v.prototype.get=m,v.prototype.has=_,v.prototype.set=w,x.prototype.clear=j,x.prototype.delete=A,x.prototype.get=S,x.prototype.has=E,x.prototype.set=k,O.prototype.clear=T,O.prototype.delete=C,O.prototype.get=L,O.prototype.has=D,O.prototype.set=R,N.prototype.clear=P,N.prototype.delete=B,N.prototype.get=q,N.prototype.has=M,N.prototype.set=I;var hr=Xe?d(Xe,Object):It,pr=W;(Ke&&pr(new Ke(new ArrayBuffer(1)))!=se||tr&&pr(new tr)!=Qt||er&&pr(er.resolve())!=te||rr&&pr(new rr)!=re||nr&&pr(new nr)!=oe)&&(pr=function(t){var e=Ue.call(t),r=e==Kt?t.constructor:void 0,n=r?Et(r):void 0;if(n)switch(n){case or:return se;case ar:return Qt;case sr:return te;case ur:return re;case cr:return oe}return e});var dr=Array.isArray,gr=Je||Ut,vr=Le?l(Le):J,yr=pt(function(t,e,r){K(t,e,r)});r.exports=yr}).call(e,function(){return this}(),r(81)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},function(t,e,r){(function(t,r){function n(t,e){for(var r=-1,n=t?t.length:0;++r-1}function j(t,e){var r=this.__data__,n=U(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function A(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&$t?new C:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Gt}function Lt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Dt(t){return!!t&&"object"==typeof t}function Rt(t){return"symbol"==typeof t||Dt(t)&&He.call(t)==se}function Nt(t){return null==t?"":rt(t)}function Pt(t,e,r){var n=null==t?void 0:V(t,e);return void 0===n?r:n}function Bt(t,e){return null!=t&&ht(t,e,z)}function qt(t){return kt(t)?I(t):Q(t)}function Mt(t){return t}function It(t){return gt(t)?i(wt(t)):tt(t)}var Ut=200,Ft="Expected a function",Vt="__lodash_hash_undefined__",$t=1,zt=2,Ht=1/0,Gt=9007199254740991,Yt="[object Arguments]",Wt="[object Array]",Xt="[object Boolean]",Jt="[object Date]",Qt="[object Error]",Zt="[object Function]",Kt="[object GeneratorFunction]",te="[object Map]",ee="[object Number]",re="[object Object]",ne="[object Promise]",ie="[object RegExp]",oe="[object Set]",ae="[object String]",se="[object Symbol]",ue="[object WeakMap]",ce="[object ArrayBuffer]",le="[object DataView]",fe="[object Float32Array]",he="[object Float64Array]",pe="[object Int8Array]",de="[object Int16Array]",ge="[object Int32Array]",ve="[object Uint8Array]",ye="[object Uint8ClampedArray]",be="[object Uint16Array]",me="[object Uint32Array]",_e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,we=/^\w*$/,xe=/^\./,je=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ae=/[\\^$.*+?()[\]{}|]/g,Se=/\\(\\)?/g,Ee=/^\[object .+?Constructor\]$/,ke=/^(?:0|[1-9]\d*)$/,Oe={};Oe[fe]=Oe[he]=Oe[pe]=Oe[de]=Oe[ge]=Oe[ve]=Oe[ye]=Oe[be]=Oe[me]=!0,Oe[Yt]=Oe[Wt]=Oe[ce]=Oe[Xt]=Oe[le]=Oe[Jt]=Oe[Qt]=Oe[Zt]=Oe[te]=Oe[ee]=Oe[re]=Oe[ie]=Oe[oe]=Oe[ae]=Oe[ue]=!1;var Te="object"==typeof t&&t&&t.Object===Object&&t,Ce="object"==typeof self&&self&&self.Object===Object&&self,Le=Te||Ce||Function("return this")(),De="object"==typeof e&&e&&!e.nodeType&&e,Re=De&&"object"==typeof r&&r&&!r.nodeType&&r,Ne=Re&&Re.exports===De,Pe=Ne&&Te.process,Be=function(){try{return Pe&&Pe.binding("util")}catch(t){}}(),qe=Be&&Be.isTypedArray,Me=Array.prototype,Ie=Function.prototype,Ue=Object.prototype,Fe=Le["__core-js_shared__"],Ve=function(){var t=/[^.]+$/.exec(Fe&&Fe.keys&&Fe.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),$e=Ie.toString,ze=Ue.hasOwnProperty,He=Ue.toString,Ge=RegExp("^"+$e.call(ze).replace(Ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ye=Le.Symbol,We=Le.Uint8Array,Xe=Ue.propertyIsEnumerable,Je=Me.splice,Qe=l(Object.keys,Object),Ze=ft(Le,"DataView"),Ke=ft(Le,"Map"),tr=ft(Le,"Promise"),er=ft(Le,"Set"),rr=ft(Le,"WeakMap"),nr=ft(Object,"create"),ir=xt(Ze),or=xt(Ke),ar=xt(tr),sr=xt(er),ur=xt(rr),cr=Ye?Ye.prototype:void 0,lr=cr?cr.valueOf:void 0,fr=cr?cr.toString:void 0;h.prototype.clear=p,h.prototype.delete=d,h.prototype.get=g,h.prototype.has=v,h.prototype.set=y,b.prototype.clear=m,b.prototype.delete=_,b.prototype.get=w,b.prototype.has=x,b.prototype.set=j,A.prototype.clear=S,A.prototype.delete=E,A.prototype.get=k,A.prototype.has=O,A.prototype.set=T,C.prototype.add=C.prototype.push=L,C.prototype.has=D,R.prototype.clear=N,R.prototype.delete=P,R.prototype.get=B,R.prototype.has=q,R.prototype.set=M;var hr=it(F),pr=ot(),dr=$;(Ze&&dr(new Ze(new ArrayBuffer(1)))!=le||Ke&&dr(new Ke)!=te||tr&&dr(tr.resolve())!=ne||er&&dr(new er)!=oe||rr&&dr(new rr)!=ue)&&(dr=function(t){var e=He.call(t),r=e==re?t.constructor:void 0,n=r?xt(r):void 0;if(n)switch(n){case ir:return le;case or:return te;case ar:return ne;case sr:return oe;case ur:return ue}return e});var gr=At(function(t){t=Nt(t);var e=[];return xe.test(t)&&e.push(""),t.replace(je,function(t,r,n,i){e.push(n?i.replace(Se,"$1"):r||t)}),e});At.Cache=A;var vr=Array.isArray,yr=qe?a(qe):X;r.exports=jt}).call(e,function(){return this}(),r(81)(t))},function(t,e,r){function n(t,r,n,i){for(var o=[];r&&o.length0})},e.first=function(){return this.length>1?this._make(this[0]):this},e.last=function(){return this.length>1?this._make(this[this.length-1]):this},e.eq=function(t){return t=+t,0===t&&this.length<=1?this:(t<0&&(t=this.length+t),this[t]?this._make(this[t]):this._make([]))},e.get=function(t){return null==t?Array.prototype.slice.call(this):this[t<0?this.length+t:t]},e.index=function(t){var e,r;return 0===arguments.length?(e=this.parent().children(),r=this[0]):"string"==typeof t?(e=this._make(t),r=this[0]):(e=this,r=t.cheerio?t[0]:t),e.get().indexOf(r)},e.slice=function(){return this._make([].slice.apply(this,arguments))},e.end=function(){return this.prevObject||this._make([])},e.add=function(t,e){for(var r=this._make(t,e),n=s(r.get().concat(this.get())),i=0;i-1}function A(t,e){var r=this.__data__,n=F(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function S(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&zt?new L:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Yt}function Dt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Rt(t){return!!t&&"object"==typeof t}function Nt(t){return"symbol"==typeof t||Rt(t)&&Ge.call(t)==ue}function Pt(t){return null==t?"":nt(t)}function Bt(t,e,r){var n=null==t?void 0:z(t,e);return void 0===n?r:n}function qt(t,e){return null!=t&&pt(t,e,G)}function Mt(t){return Ot(t)?U(t):K(t)}function It(t){return t}function Ut(t){return gt(t)?o(wt(t)):rt(t)}var Ft=200,Vt="Expected a function",$t="__lodash_hash_undefined__",zt=1,Ht=2,Gt=1/0,Yt=9007199254740991,Wt="[object Arguments]",Xt="[object Array]",Jt="[object Boolean]",Qt="[object Date]",Zt="[object Error]",Kt="[object Function]",te="[object GeneratorFunction]",ee="[object Map]",re="[object Number]",ne="[object Object]",ie="[object Promise]",oe="[object RegExp]",ae="[object Set]",se="[object String]",ue="[object Symbol]",ce="[object WeakMap]",le="[object ArrayBuffer]",fe="[object DataView]",he="[object Float32Array]",pe="[object Float64Array]",de="[object Int8Array]",ge="[object Int16Array]",ve="[object Int32Array]",ye="[object Uint8Array]",be="[object Uint8ClampedArray]",me="[object Uint16Array]",_e="[object Uint32Array]",we=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xe=/^\w*$/,je=/^\./,Ae=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Se=/[\\^$.*+?()[\]{}|]/g,Ee=/\\(\\)?/g,ke=/^\[object .+?Constructor\]$/,Oe=/^(?:0|[1-9]\d*)$/,Te={};Te[he]=Te[pe]=Te[de]=Te[ge]=Te[ve]=Te[ye]=Te[be]=Te[me]=Te[_e]=!0,Te[Wt]=Te[Xt]=Te[le]=Te[Jt]=Te[fe]=Te[Qt]=Te[Zt]=Te[Kt]=Te[ee]=Te[re]=Te[ne]=Te[oe]=Te[ae]=Te[se]=Te[ce]=!1;var Ce="object"==typeof t&&t&&t.Object===Object&&t,Le="object"==typeof self&&self&&self.Object===Object&&self,De=Ce||Le||Function("return this")(),Re="object"==typeof e&&e&&!e.nodeType&&e,Ne=Re&&"object"==typeof r&&r&&!r.nodeType&&r,Pe=Ne&&Ne.exports===Re,Be=Pe&&Ce.process,qe=function(){try{return Be&&Be.binding("util")}catch(t){}}(),Me=qe&&qe.isTypedArray,Ie=Array.prototype,Ue=Function.prototype,Fe=Object.prototype,Ve=De["__core-js_shared__"],$e=function(){var t=/[^.]+$/.exec(Ve&&Ve.keys&&Ve.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),ze=Ue.toString,He=Fe.hasOwnProperty,Ge=Fe.toString,Ye=RegExp("^"+ze.call(He).replace(Se,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),We=De.Symbol,Xe=De.Uint8Array,Je=Fe.propertyIsEnumerable,Qe=Ie.splice,Ze=f(Object.keys,Object),Ke=ht(De,"DataView"),tr=ht(De,"Map"),er=ht(De,"Promise"),rr=ht(De,"Set"),nr=ht(De,"WeakMap"),ir=ht(Object,"create"),or=xt(Ke),ar=xt(tr),sr=xt(er),ur=xt(rr),cr=xt(nr),lr=We?We.prototype:void 0,fr=lr?lr.valueOf:void 0,hr=lr?lr.toString:void 0;p.prototype.clear=d,p.prototype.delete=g,p.prototype.get=v,p.prototype.has=y,p.prototype.set=b,m.prototype.clear=_,m.prototype.delete=w,m.prototype.get=x,m.prototype.has=j,m.prototype.set=A,S.prototype.clear=E,S.prototype.delete=k,S.prototype.get=O,S.prototype.has=T,S.prototype.set=C,L.prototype.add=L.prototype.push=D,L.prototype.has=R,N.prototype.clear=P,N.prototype.delete=B,N.prototype.get=q,N.prototype.has=M,N.prototype.set=I;var pr=ot($),dr=at(),gr=H;(Ke&&gr(new Ke(new ArrayBuffer(1)))!=fe||tr&&gr(new tr)!=ee||er&&gr(er.resolve())!=ie||rr&&gr(new rr)!=ae||nr&&gr(new nr)!=ce)&&(gr=function(t){var e=Ge.call(t),r=e==ne?t.constructor:void 0,n=r?xt(r):void 0;if(n)switch(n){case or:return fe;case ar:return ee;case sr:return ie;case ur:return ae;case cr:return ce}return e});var vr=At(function(t){t=Pt(t);var e=[];return je.test(t)&&e.push(""),t.replace(Ae,function(t,r,n,i){e.push(n?i.replace(Ee,"$1"):r||t)}),e});At.Cache=S;var yr=Array.isArray,br=Me?s(Me):Q;r.exports=jt}).call(e,function(){return this}(),r(81)(t))},function(t,e,r){(function(t,r){function n(t,e){for(var r=-1,n=t?t.length:0,i=0,o=[];++r-1}function A(t,e){var r=this.__data__,n=F(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function S(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&$t?new L:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Gt}function Lt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Dt(t){return!!t&&"object"==typeof t}function Rt(t){return"symbol"==typeof t||Dt(t)&&He.call(t)==se}function Nt(t){return null==t?"":nt(t)}function Pt(t,e,r){var n=null==t?void 0:z(t,e);return void 0===n?r:n}function Bt(t,e){return null!=t&&pt(t,e,G)}function qt(t){return kt(t)?U(t):K(t)}function Mt(t){return t}function It(t){return gt(t)?o(wt(t)):rt(t)}var Ut=200,Ft="Expected a function",Vt="__lodash_hash_undefined__",$t=1,zt=2,Ht=1/0,Gt=9007199254740991,Yt="[object Arguments]",Wt="[object Array]",Xt="[object Boolean]",Jt="[object Date]",Qt="[object Error]",Zt="[object Function]",Kt="[object GeneratorFunction]",te="[object Map]",ee="[object Number]",re="[object Object]",ne="[object Promise]",ie="[object RegExp]",oe="[object Set]",ae="[object String]",se="[object Symbol]",ue="[object WeakMap]",ce="[object ArrayBuffer]",le="[object DataView]",fe="[object Float32Array]",he="[object Float64Array]",pe="[object Int8Array]",de="[object Int16Array]",ge="[object Int32Array]",ve="[object Uint8Array]",ye="[object Uint8ClampedArray]",be="[object Uint16Array]",me="[object Uint32Array]",_e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,we=/^\w*$/,xe=/^\./,je=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ae=/[\\^$.*+?()[\]{}|]/g,Se=/\\(\\)?/g,Ee=/^\[object .+?Constructor\]$/,ke=/^(?:0|[1-9]\d*)$/,Oe={};Oe[fe]=Oe[he]=Oe[pe]=Oe[de]=Oe[ge]=Oe[ve]=Oe[ye]=Oe[be]=Oe[me]=!0,Oe[Yt]=Oe[Wt]=Oe[ce]=Oe[Xt]=Oe[le]=Oe[Jt]=Oe[Qt]=Oe[Zt]=Oe[te]=Oe[ee]=Oe[re]=Oe[ie]=Oe[oe]=Oe[ae]=Oe[ue]=!1;var Te="object"==typeof t&&t&&t.Object===Object&&t,Ce="object"==typeof self&&self&&self.Object===Object&&self,Le=Te||Ce||Function("return this")(),De="object"==typeof e&&e&&!e.nodeType&&e,Re=De&&"object"==typeof r&&r&&!r.nodeType&&r,Ne=Re&&Re.exports===De,Pe=Ne&&Te.process,Be=function(){try{return Pe&&Pe.binding("util")}catch(t){}}(),qe=Be&&Be.isTypedArray,Me=Array.prototype,Ie=Function.prototype,Ue=Object.prototype,Fe=Le["__core-js_shared__"],Ve=function(){var t=/[^.]+$/.exec(Fe&&Fe.keys&&Fe.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),$e=Ie.toString,ze=Ue.hasOwnProperty,He=Ue.toString,Ge=RegExp("^"+$e.call(ze).replace(Ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ye=Le.Symbol,We=Le.Uint8Array,Xe=Ue.propertyIsEnumerable,Je=Me.splice,Qe=f(Object.keys,Object),Ze=ht(Le,"DataView"),Ke=ht(Le,"Map"),tr=ht(Le,"Promise"),er=ht(Le,"Set"),rr=ht(Le,"WeakMap"),nr=ht(Object,"create"),ir=xt(Ze),or=xt(Ke),ar=xt(tr),sr=xt(er),ur=xt(rr),cr=Ye?Ye.prototype:void 0,lr=cr?cr.valueOf:void 0,fr=cr?cr.toString:void 0;p.prototype.clear=d,p.prototype.delete=g,p.prototype.get=v,p.prototype.has=y,p.prototype.set=b,m.prototype.clear=_,m.prototype.delete=w,m.prototype.get=x,m.prototype.has=j,m.prototype.set=A,S.prototype.clear=E,S.prototype.delete=k,S.prototype.get=O,S.prototype.has=T,S.prototype.set=C,L.prototype.add=L.prototype.push=D,L.prototype.has=R,N.prototype.clear=P,N.prototype.delete=B,N.prototype.get=q,N.prototype.has=M,N.prototype.set=I;var hr=ot($),pr=at(),dr=H;(Ze&&dr(new Ze(new ArrayBuffer(1)))!=le||Ke&&dr(new Ke)!=te||tr&&dr(tr.resolve())!=ne||er&&dr(new er)!=oe||rr&&dr(new rr)!=ue)&&(dr=function(t){var e=He.call(t),r=e==re?t.constructor:void 0,n=r?xt(r):void 0;if(n)switch(n){case ir:return le;case or:return te;case ar:return ne;case sr:return oe;case ur:return ue}return e});var gr=At(function(t){t=Nt(t);var e=[];return xe.test(t)&&e.push(""),t.replace(je,function(t,r,n,i){e.push(n?i.replace(Se,"$1"):r||t)}),e});At.Cache=S;var vr=Array.isArray,yr=qe?s(qe):Q;r.exports=jt}).call(e,function(){return this}(),r(81)(t))},function(t,e,r){(function(t,r){function n(t,e,r,n){var i=-1,o=t?t.length:0;for(n&&o&&(r=t[++i]);++i-1}function S(t,e){var r=this.__data__,n=V(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function E(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&$t?new D:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Gt}function Lt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Dt(t){return!!t&&"object"==typeof t}function Rt(t){return"symbol"==typeof t||Dt(t)&&He.call(t)==se}function Nt(t){return null==t?"":nt(t)}function Pt(t,e,r){var n=null==t?void 0:z(t,e);return void 0===n?r:n}function Bt(t,e){return null!=t&&pt(t,e,G)}function qt(t){return kt(t)?F(t):K(t)}function Mt(t){return t}function It(t){return gt(t)?o(wt(t)):rt(t)}var Ut=200,Ft="Expected a function",Vt="__lodash_hash_undefined__",$t=1,zt=2,Ht=1/0,Gt=9007199254740991,Yt="[object Arguments]",Wt="[object Array]",Xt="[object Boolean]",Jt="[object Date]",Qt="[object Error]",Zt="[object Function]",Kt="[object GeneratorFunction]",te="[object Map]",ee="[object Number]",re="[object Object]",ne="[object Promise]",ie="[object RegExp]",oe="[object Set]",ae="[object String]",se="[object Symbol]",ue="[object WeakMap]",ce="[object ArrayBuffer]",le="[object DataView]",fe="[object Float32Array]",he="[object Float64Array]",pe="[object Int8Array]",de="[object Int16Array]",ge="[object Int32Array]",ve="[object Uint8Array]",ye="[object Uint8ClampedArray]",be="[object Uint16Array]",me="[object Uint32Array]",_e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,we=/^\w*$/,xe=/^\./,je=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ae=/[\\^$.*+?()[\]{}|]/g,Se=/\\(\\)?/g,Ee=/^\[object .+?Constructor\]$/,ke=/^(?:0|[1-9]\d*)$/,Oe={};Oe[fe]=Oe[he]=Oe[pe]=Oe[de]=Oe[ge]=Oe[ve]=Oe[ye]=Oe[be]=Oe[me]=!0,Oe[Yt]=Oe[Wt]=Oe[ce]=Oe[Xt]=Oe[le]=Oe[Jt]=Oe[Qt]=Oe[Zt]=Oe[te]=Oe[ee]=Oe[re]=Oe[ie]=Oe[oe]=Oe[ae]=Oe[ue]=!1;var Te="object"==typeof t&&t&&t.Object===Object&&t,Ce="object"==typeof self&&self&&self.Object===Object&&self,Le=Te||Ce||Function("return this")(),De="object"==typeof e&&e&&!e.nodeType&&e,Re=De&&"object"==typeof r&&r&&!r.nodeType&&r,Ne=Re&&Re.exports===De,Pe=Ne&&Te.process,Be=function(){try{return Pe&&Pe.binding("util")}catch(t){}}(),qe=Be&&Be.isTypedArray,Me=Array.prototype,Ie=Function.prototype,Ue=Object.prototype,Fe=Le["__core-js_shared__"],Ve=function(){var t=/[^.]+$/.exec(Fe&&Fe.keys&&Fe.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),$e=Ie.toString,ze=Ue.hasOwnProperty,He=Ue.toString,Ge=RegExp("^"+$e.call(ze).replace(Ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ye=Le.Symbol,We=Le.Uint8Array,Xe=Ue.propertyIsEnumerable,Je=Me.splice,Qe=h(Object.keys,Object),Ze=ht(Le,"DataView"),Ke=ht(Le,"Map"),tr=ht(Le,"Promise"),er=ht(Le,"Set"),rr=ht(Le,"WeakMap"),nr=ht(Object,"create"),ir=xt(Ze),or=xt(Ke),ar=xt(tr),sr=xt(er),ur=xt(rr),cr=Ye?Ye.prototype:void 0,lr=cr?cr.valueOf:void 0,fr=cr?cr.toString:void 0;d.prototype.clear=g,d.prototype.delete=v,d.prototype.get=y,d.prototype.has=b,d.prototype.set=m,_.prototype.clear=w,_.prototype.delete=x,_.prototype.get=j,_.prototype.has=A,_.prototype.set=S,E.prototype.clear=k,E.prototype.delete=O,E.prototype.get=T,E.prototype.has=C,E.prototype.set=L,D.prototype.add=D.prototype.push=R,D.prototype.has=N,P.prototype.clear=B,P.prototype.delete=q,P.prototype.get=M,P.prototype.has=I,P.prototype.set=U;var hr=ot($),pr=at(),dr=H;(Ze&&dr(new Ze(new ArrayBuffer(1)))!=le||Ke&&dr(new Ke)!=te||tr&&dr(tr.resolve())!=ne||er&&dr(new er)!=oe||rr&&dr(new rr)!=ue)&&(dr=function(t){var e=He.call(t),r=e==re?t.constructor:void 0,n=r?xt(r):void 0;if(n)switch(n){case ir:return le;case or:return te;case ar:return ne;case sr:return oe;case ur:return ue}return e});var gr=At(function(t){t=Nt(t);var e=[];return xe.test(t)&&e.push(""),t.replace(je,function(t,r,n,i){e.push(n?i.replace(Se,"$1"):r||t)}),e});At.Cache=E;var vr=Array.isArray,yr=qe?u(qe):Q;r.exports=jt}).call(e,function(){return this}(),r(81)(t))},function(t,e,r){var n=r(8),i=r(67),o=n.update,a=n.evaluate,s=r(61),u=s.domEach,c=s.cloneDom,l=s.isHtml,f=Array.prototype.slice,h={flatten:r(88),bind:r(63),forEach:r(64)};e._makeDomArray=function(t,e){return null==t?[]:t.cheerio?e?c(t.get(),t.options):t.get():Array.isArray(t)?h.flatten(t.map(function(t){return this._makeDomArray(t,e)},this)):"string"==typeof t?a(t,this.options):e?c([t]):[t]};var p=function(t){return function(){var e=f.call(arguments),r=this.length-1;return u(this,function(n,o){var a,s;s="function"==typeof e[0]?e[0].call(o,n,i.html(o.children)):e,a=this._makeDomArray(s,n-1&&(c.children.splice(s,1),i===c&&e>s&&l[0]--),u.root=null,u.parent=i,u.prev&&(u.prev.next=u.next||null),u.next&&(u.next.prev=u.prev||null),u.prev=n[o-1]||f,u.next=n[o+1]||h;return f&&(f.next=n[0]),h&&(h.prev=n[n.length-1]),t.splice.apply(t,l)};e.appendTo=function(t){return t.cheerio||(t=this.constructor.call(this.constructor,t,null,this._originalRoot)),t.append(this),this},e.prependTo=function(t){return t.cheerio||(t=this.constructor.call(this.constructor,t,null,this._originalRoot)),t.prepend(this),this},e.append=p(function(t,e,r){d(e,e.length,0,t,r)}),e.prepend=p(function(t,e,r){d(e,0,0,t,r)}),e.wrap=function(t){var e="function"==typeof t&&t,r=this.length-1;return h.forEach(this,h.bind(function(n,i){var a,s,u=n.parent||n.root,c=u.children;u&&(e&&(t=e.call(n,i)),"string"!=typeof t||l(t)||(t=this.parents().last().find(t).clone()),a=this._makeDomArray(t,i0&&o(l)?e>1?n(l,e-1,o,a,s):r(s,l):a||(s[s.length]=l)}return s}function i(t){return E(t)||a(t)||!!(S&&t&&t[S])}function o(t){var e=t?t.length:0;return e?n(t,1):[]}function a(t){return u(t)&&w.call(t,"callee")&&(!A.call(t,"callee")||x.call(t)==d)}function s(t){return null!=t&&l(t.length)&&!c(t)}function u(t){return h(t)&&s(t)}function c(t){var e=f(t)?x.call(t):"";return e==g||e==v}function l(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=p}function f(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function h(t){return!!t&&"object"==typeof t}var p=9007199254740991,d="[object Arguments]",g="[object Function]",v="[object GeneratorFunction]",y="object"==typeof e&&e&&e.Object===Object&&e,b="object"==typeof self&&self&&self.Object===Object&&self,m=y||b||Function("return this")(),_=Object.prototype,w=_.hasOwnProperty,x=_.toString,j=m.Symbol,A=_.propertyIsEnumerable,S=j?j.isConcatSpreadable:void 0,E=Array.isArray;t.exports=o}).call(e,function(){return this}())},function(t,e,r){function n(t,e,r,a){if("string"==typeof e){var s=i(t);"function"==typeof r&&(r=r.call(t,a,s[e])),""===r?delete s[e]:null!=r&&(s[e]=r),t.attribs.style=o(s)}else"object"==typeof e&&Object.keys(e).forEach(function(r){n(t,r,e[r])})}function i(t,e){var r=a(t.attribs.style);return"string"==typeof e?r[e]:Array.isArray(e)?u.pick(r,e):r}function o(t){return Object.keys(t||{}).reduce(function(e,r){return e+=""+(e?" ":"")+r+": "+t[r]+";"},"")}function a(t){return t=(t||"").trim(),t?t.split(";").reduce(function(t,e){var r=e.indexOf(":");return r<1||r===e.length-1?t:(t[e.slice(0,r).trim()]=e.slice(r+1).trim(),t)},{}):{}}var s=r(61).domEach,u={pick:r(90)},c=Object.prototype.toString;e.css=function(t,e){return 2===arguments.length||"[object Object]"===c.call(t)?s(this,function(r,i){n(i,t,e,r)}):i(this[0],t)}},function(t,e){(function(e){function r(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function n(t,e){for(var r=-1,n=t?t.length:0,i=Array(n);++r0&&r(l)?e>1?o(l,e-1,r,n,a):i(a,l):n||(a[a.length]=l)}return a}function a(t,e){return t=Object(t),s(t,e,function(e,r){return r in t})}function s(t,e,r){for(var n=-1,i=e.length,o={};++n-1&&t%1==0&&t<=_}function v(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function y(t){return!!t&&"object"==typeof t}function b(t){return"symbol"==typeof t||y(t)&&C.call(t)==A}var m=1/0,_=9007199254740991,w="[object Arguments]",x="[object Function]",j="[object GeneratorFunction]",A="[object Symbol]",S="object"==typeof e&&e&&e.Object===Object&&e,E="object"==typeof self&&self&&self.Object===Object&&self,k=S||E||Function("return this")(),O=Object.prototype,T=O.hasOwnProperty,C=O.toString,L=k.Symbol,D=O.propertyIsEnumerable,R=L?L.isConcatSpreadable:void 0,N=Math.max,P=Array.isArray,B=u(function(t,e){return null==t?{}:a(t,n(o(e,1),l))});t.exports=B}).call(e,function(){return this}())},function(t,e,r){var n="input,select,textarea,keygen",i=/%20/g,o=/\r?\n/g,a={map:r(92)};e.serialize=function(){var t=this.serializeArray(),e=a.map(t,function(t){return encodeURIComponent(t.name)+"="+encodeURIComponent(t.value)});return e.join("&").replace(i,"+")},e.serializeArray=function(){var t=this.constructor;return this.map(function(){var e=this,r=t(e);return"form"===e.name?r.find(n).toArray():r.filter(n).toArray()}).filter('[name!=""]:not(:disabled):not(:submit, :button, :image, :reset, :file):matches([checked], :not(:checkbox, :radio))').map(function(e,r){var n=t(r),i=n.attr("name"),s=n.val();return null==s?null:Array.isArray(s)?a.map(s,function(t){return{name:i,value:t.replace(o,"\r\n")}}):{name:i,value:s.replace(o,"\r\n")}}).get()}},function(t,e,r){(function(t,r){function n(t,e){for(var r=-1,n=t?t.length:0,i=Array(n);++r-1}function A(t,e){var r=this.__data__,n=F(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function S(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&$t?new L:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Gt}function Lt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Dt(t){return!!t&&"object"==typeof t}function Rt(t){return"symbol"==typeof t||Dt(t)&&He.call(t)==se}function Nt(t){return null==t?"":nt(t)}function Pt(t,e,r){var n=null==t?void 0:$(t,e);return void 0===n?r:n}function Bt(t,e){return null!=t&&pt(t,e,H)}function qt(t){return kt(t)?U(t):Z(t)}function Mt(t){return t}function It(t){return gt(t)?o(wt(t)):rt(t)}var Ut=200,Ft="Expected a function",Vt="__lodash_hash_undefined__",$t=1,zt=2,Ht=1/0,Gt=9007199254740991,Yt="[object Arguments]",Wt="[object Array]",Xt="[object Boolean]",Jt="[object Date]",Qt="[object Error]",Zt="[object Function]",Kt="[object GeneratorFunction]",te="[object Map]",ee="[object Number]",re="[object Object]",ne="[object Promise]",ie="[object RegExp]",oe="[object Set]",ae="[object String]",se="[object Symbol]",ue="[object WeakMap]",ce="[object ArrayBuffer]",le="[object DataView]",fe="[object Float32Array]",he="[object Float64Array]",pe="[object Int8Array]",de="[object Int16Array]",ge="[object Int32Array]",ve="[object Uint8Array]",ye="[object Uint8ClampedArray]",be="[object Uint16Array]",me="[object Uint32Array]",_e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,we=/^\w*$/,xe=/^\./,je=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ae=/[\\^$.*+?()[\]{}|]/g,Se=/\\(\\)?/g,Ee=/^\[object .+?Constructor\]$/,ke=/^(?:0|[1-9]\d*)$/,Oe={};Oe[fe]=Oe[he]=Oe[pe]=Oe[de]=Oe[ge]=Oe[ve]=Oe[ye]=Oe[be]=Oe[me]=!0,Oe[Yt]=Oe[Wt]=Oe[ce]=Oe[Xt]=Oe[le]=Oe[Jt]=Oe[Qt]=Oe[Zt]=Oe[te]=Oe[ee]=Oe[re]=Oe[ie]=Oe[oe]=Oe[ae]=Oe[ue]=!1;var Te="object"==typeof t&&t&&t.Object===Object&&t,Ce="object"==typeof self&&self&&self.Object===Object&&self,Le=Te||Ce||Function("return this")(),De="object"==typeof e&&e&&!e.nodeType&&e,Re=De&&"object"==typeof r&&r&&!r.nodeType&&r,Ne=Re&&Re.exports===De,Pe=Ne&&Te.process,Be=function(){try{return Pe&&Pe.binding("util")}catch(t){}}(),qe=Be&&Be.isTypedArray,Me=Array.prototype,Ie=Function.prototype,Ue=Object.prototype,Fe=Le["__core-js_shared__"],Ve=function(){var t=/[^.]+$/.exec(Fe&&Fe.keys&&Fe.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),$e=Ie.toString,ze=Ue.hasOwnProperty,He=Ue.toString,Ge=RegExp("^"+$e.call(ze).replace(Ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ye=Le.Symbol,We=Le.Uint8Array,Xe=Ue.propertyIsEnumerable,Je=Me.splice,Qe=f(Object.keys,Object),Ze=ht(Le,"DataView"),Ke=ht(Le,"Map"),tr=ht(Le,"Promise"),er=ht(Le,"Set"),rr=ht(Le,"WeakMap"),nr=ht(Object,"create"),ir=xt(Ze),or=xt(Ke),ar=xt(tr),sr=xt(er),ur=xt(rr),cr=Ye?Ye.prototype:void 0,lr=cr?cr.valueOf:void 0,fr=cr?cr.toString:void 0;p.prototype.clear=d,p.prototype.delete=g,p.prototype.get=v,p.prototype.has=y,p.prototype.set=b,m.prototype.clear=_,m.prototype.delete=w,m.prototype.get=x,m.prototype.has=j,m.prototype.set=A,S.prototype.clear=E,S.prototype.delete=k,S.prototype.get=O,S.prototype.has=T,S.prototype.set=C,L.prototype.add=L.prototype.push=D,L.prototype.has=R,N.prototype.clear=P,N.prototype.delete=B,N.prototype.get=q,N.prototype.has=M,N.prototype.set=I;var hr=ot(V),pr=at(),dr=z;(Ze&&dr(new Ze(new ArrayBuffer(1)))!=le||Ke&&dr(new Ke)!=te||tr&&dr(tr.resolve())!=ne||er&&dr(new er)!=oe||rr&&dr(new rr)!=ue)&&(dr=function(t){var e=He.call(t),r=e==re?t.constructor:void 0,n=r?xt(r):void 0;if(n)switch(n){case ir:return le;case or:return te;case ar:return ne;case sr:return oe;case ur:return ue}return e});var gr=At(function(t){t=Nt(t);var e=[];return xe.test(t)&&e.push(""),t.replace(je,function(t,r,n,i){e.push(n?i.replace(Se,"$1"):r||t)}),e});At.Cache=S;var vr=Array.isArray,yr=qe?s(qe):J;r.exports=jt}).call(e,function(){return this}(),r(81)(t))},function(t,e){t.exports={name:"cheerio",version:"0.22.0",description:"Tiny, fast, and elegant implementation of core jQuery designed specifically for the server",author:"Matt Mueller (mat.io)",license:"MIT",keywords:["htmlparser","jquery","selector","scraper","parser","html"],repository:{type:"git",url:"git://github.com/cheeriojs/cheerio.git"},main:"./index.js",files:["index.js","lib"],engines:{node:">= 0.6"},dependencies:{"css-select":"~1.2.0","dom-serializer":"~0.1.0",entities:"~1.1.1",htmlparser2:"^3.9.1","lodash.assignin":"^4.0.9","lodash.bind":"^4.1.4","lodash.defaults":"^4.0.1","lodash.filter":"^4.4.0","lodash.flatten":"^4.2.0","lodash.foreach":"^4.3.0","lodash.map":"^4.4.0","lodash.merge":"^4.4.0","lodash.pick":"^4.2.1","lodash.reduce":"^4.4.0","lodash.reject":"^4.4.0","lodash.some":"^4.4.0"},devDependencies:{benchmark:"^2.1.0",coveralls:"^2.11.9","expect.js":"~0.3.1",istanbul:"^0.4.3",jsdom:"^9.2.1",jquery:"^3.0.0",jshint:"^2.9.2",mocha:"^2.5.3",xyz:"~0.5.0"},scripts:{test:"make test"}}},function(t,e,r){"use strict";var n=r(95),i={}.hasOwnProperty,o=r(100),a=r(101),s=r(103);e.Selector=a,e.Property=s,/** - * Returns an array of the selectors. - * - * @license Sizzle CSS Selector Engine - MIT - * @param {String} selectorText from mensch - * @api public - */ -e.extract=function(t){for(var e=0,r=[],n="",i=0,o=t.length;i=0;u--)(e.fontFaces&&"font-face"===i[u].type||e.mediaQueries&&"media"===i[u].type)&&a.push(n.stringify({stylesheet:{rules:[i[u]]}},{comments:!1,indentation:" "})),s=i[u].position.start;return 0!==a.length&&o.EOL+a.join(o.EOL)+o.EOL},e.normalizeLineEndings=function(t){return t.replace(/\r\n/g,"\n").replace(/\n/g,"\r\n")},e.compareFunc=function(t,e){for(var r=Math.min(t.length,e.length),n=0;ne[n]?1:-1;return t.length-e.length},e.compare=function(t,r){return 1==e.compareFunc(t,r)?t:r},e.extend=function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);return t},e.getDefaultOptions=function(t){var r=e.extend({extraCss:"",insertPreservedExtraCss:!0,applyStyleTags:!0,removeStyleTags:!0,preserveMediaQueries:!0,preserveFontFaces:!0,applyWidthAttributes:!0,applyHeightAttributes:!0,applyAttributesTableElements:!0,url:""},t);return r.webResources=r.webResources||{},r}},function(t,e,r){t.exports={lex:r(96),parse:r(98),stringify:r(99)}},function(t,e,r){function n(t){function e(){return p(),t[_]}function r(t){return t?A[A.length-1-t]:j}function n(e){var r=_+1;return e===t.slice(r,r+e.length)}function s(e){var r=t.slice(_).indexOf(e);return r>0&&r}function u(t){return t===c(1)}function c(e){return t[_+(e||1)]}function l(){var t=A.pop();return j=A[A.length-1],t}function f(t){return j=t,A.push(j),A.length}function h(t){var e=j;return A[A.length-1]=j=t,e}function p(e){if(1==(e||1))"\n"==t[_]?(x++,m=1):m++,_++;else{var r=t.slice(_,_+e).split("\n");r.length>1&&(x+=r.length-1,m=1),m+=r[r.length-1].length,_+=e}}function d(){S.end={line:x,col:m},i&&a("addToken:",JSON.stringify(S,null,2)),E.push(S),b="",S={}}function g(t){S={type:t,start:{line:x,col:m}}}var v,y,b="",m=0,_=-1,w=0,x=1,j="before-selector",A=[j],S={},E=[],k=["media","keyframes",{name:"-webkit-keyframes",type:"keyframes",prefix:"-webkit-"},{name:"-moz-keyframes",type:"keyframes",prefix:"-moz-"},{name:"-ms-keyframes",type:"keyframes",prefix:"-ms-"},{name:"-o-keyframes",type:"keyframes",prefix:"-o-"},"font-face",{name:"import",state:"before-at-value"},{name:"charset",state:"before-at-value"},"supports","viewport",{name:"namespace",state:"before-at-value"},"document",{name:"-moz-document",type:"document",prefix:"-moz-"},"page"];for(o&&(v=Date.now());y=e();)switch(i&&a(y,r()),y){case" ":switch(r()){case"selector":case"value":case"value-paren":case"at-group":case"at-value":case"comment":case"double-string":case"single-string":b+=y}break;case"\n":case"\t":case"\r":case"\f":switch(r()){case"value":case"value-paren":case"at-group":case"comment":case"single-string":case"double-string":case"selector":b+=y;break;case"at-value":"\n"===y&&(S.value=b.trim(),d(),l())}break;case":":switch(r()){case"name":S.name=b.trim(),b="",h("before-value");break;case"before-selector":b+=y,g("selector"),f("selector");break;case"before-value":h("value"),b+=y;break;default:b+=y}break;case";":switch(r()){case"name":case"before-value":case"value":b.trim().length>0&&(S.value=b.trim(),d()),h("before-name");break;case"value-paren":b+=y;break;case"at-value":S.value=b.trim(),d(),l();break;case"before-name":break;default:b+=y}break;case"{":switch(r()){case"selector":if("\\"===c(-1)){b+=y;break}S.text=b.trim(),d(),h("before-name"),w+=1;break;case"at-group":switch(S.name=b.trim(),S.type){case"font-face":case"viewport":case"page":f("before-name");break;default:f("before-selector")}d(),w+=1;break;case"name":case"at-rule":S.name=b.trim(),d(),f("before-name"),w+=1;break;case"comment":case"double-string":case"single-string":b+=y;break;case"before-value":h("value"),b+=y}break;case"}":switch(r()){case"before-name":case"name":case"before-value":case"value":b&&(S.value=b.trim()),S.name&&S.value&&d(),g("end"),d(),l(),"at-group"===r()&&(g("at-group-end"),d(),l()),w>0&&(w-=1);break;case"at-group":case"before-selector":case"selector":if("\\"===c(-1)){b+=y;break}w>0&&"at-group"===r(1)&&(g("at-group-end"),d()),w>1&&l(),w>0&&(w-=1);break;case"double-string":case"single-string":case"comment":b+=y}break;case'"':case"'":switch(r()){case"double-string":'"'===y&&"\\"!==c(-1)&&l();break;case"single-string":"'"===y&&"\\"!==c(-1)&&l();break;case"before-at-value":h("at-value"),f('"'===y?"double-string":"single-string");break;case"before-value":h("value"),f('"'===y?"double-string":"single-string");break;case"comment":break;default:"\\"!==c(-1)&&f('"'===y?"double-string":"single-string")}b+=y;break;case"/":switch(r()){case"comment":case"double-string":case"single-string":b+=y;break;case"before-value":case"selector":case"name":case"value":if(u("*")){var O=s("*/");O&&p(O+1)}else"before-value"==r()&&h("value"),b+=y;break;default:u("*")?(g("comment"),f("comment"),p()):b+=y}break;case"*":switch(r()){case"comment":u("/")?(S.text=b,p(),d(),l()):b+=y;break;case"before-selector":b+=y,g("selector"),f("selector");break;case"before-value":h("value"),b+=y;break;default:b+=y}break;case"@":switch(r()){case"comment":case"double-string":case"single-string":b+=y;break;case"before-value":h("value"),b+=y;break;default:for(var T,C,L=!1,D=0,R=k.length;!L&&D+)\\s*|(\\s+)|(+|\\*)|\\#(+)|\\.(+)|\\[\\s*(+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)".replace(//,"["+i(">+~`!@$%^&={}\\;/g,"(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])").replace(//g,"(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])")),s=function(t){this.combinator=t||" ",this.tag="*"};s.prototype.toString=function(){if(!this.raw){var t,e,r="";if(r+=this.tag||"*",this.id&&(r+="#"+this.id),this.classes&&(r+="."+this.classList.join(".")),this.attributes)for(t=0;e=this.attributes[t++];)r+="["+e.name+(e.operator?e.operator+'"'+e.value+'"':"")+"]";if(this.pseudos)for(t=0;e=this.pseudos[t++];)r+=":"+e.name,e.value&&(r+="("+e.value+")");this.raw=r}return this.raw};var u=function(){this.length=0};u.prototype.toString=function(){if(!this.raw){for(var t,e="",r=0;t=this[r++];)1!==r&&(e+=" ")," "!==t.combinator&&(e+=t.combinator+" "),e+=t;this.raw=e}return this.raw};var c=function(t,e,r,n,a,c,l,f,h,p,d,g,v,y,b,m){var _,w;if((e||!this.length)&&(_=this[this.length++]=new u,e))return"";if(_||(_=this[this.length-1]),(r||n||!_.length)&&(w=_[_.length++]=new s(r)),w||(w=_[_.length-1]),a)w.tag=o(a);else if(c)w.id=o(c);else if(l){var x=o(l),j=w.classes||(w.classes={});if(!j[x]){j[x]=i(l);var A=w.classList||(w.classList=[]);A.push(x),A.sort()}}else v?(m=m||b,(w.pseudos||(w.pseudos=[])).push({type:1==g.length?"class":"element",name:o(v),escapedName:i(v),value:m?o(m):null,escapedValue:m?i(m):null})):f&&(d=d?i(d):null,(w.attributes||(w.attributes=[])).push({operator:h,name:o(f),escapedName:i(f),value:d?o(d):null,escapedValue:d?i(d):null}));return""},l=function(t){this.length=0;for(var e,r=this,n=t;t;){if(e=t.replace(a,function(){return c.apply(r,arguments)}),e===t)throw new Error(n+" is an invalid expression");t=e}};l.prototype.toString=function(){if(!this.raw){for(var t,e=[],r=0;t=this[r++];)e.push(t);this.raw=e.join(", ")}return this.raw};var f={},h=function(t){return null==t?null:(t=(""+t).replace(/^\s+|\s+$/g,""),f[t]||(f[t]=new l(t)))};t.exports=h},function(t,e,r){"use strict";function n(t,e,r,n,i){this.prop=t,this.value=e,this.selector=r,this.priority=n||0,this.additionalPriority=i||[]}t.exports=e=n;var i=r(94);n.prototype.compareFunc=function(t){var e=[];e.push.apply(e,this.selector.specificity()),e.push.apply(e,this.additionalPriority),e[0]+=this.priority;var r=[];return r.push.apply(r,t.selector.specificity()),r.push.apply(r,t.additionalPriority),r[0]+=t.priority,i.compareFunc(e,r)},n.prototype.compare=function(t){var e=this.compareFunc(t);return 1===e?this:t},n.prototype.toString=function(){return this.prop+": "+this.value.replace(/['"]+/g,"")+";"}},function(t,e,r){"use strict";var n=r(94);t.exports=function(t){function e(e,o,s){function u(r){for(var o=r[0],u=r[1],c=new n.Selector(o),l=c.parsed(),f=i(l),h=0;h=0)return}}if(f){var b=l[l.length-1],m=b.pseudos;b.pseudos=a(b.pseudos),o=l.toString(),b.pseudos=m}var _;try{_=e(o)}catch(t){return}_.each(function(){function r(e,r){for(var o=0,a=e.length;o=0)){if(f){var o="pseudo"+f,a=i[o];a||(a=i[o]=e("").get(0),a.pseudoElementType=f,a.pseudoElementParent=i,i[o]=a),i=a}if(!i.styleProps){if(i.styleProps={},e(i).attr(g)){var l="* { "+e(i).attr(g)+" } ";r(n.parseCSS(l)[0][1],new n.Selector("")}}}function r(t){if("none"===t||"normal"===t)return"";var e=t.match(/^\s*url\s*\(\s*(.*?)\s*\)\s*$/i);if(e){var r=e[1].replace(/^['"]|['"]$/g,"");return{img:r}}return t=t.slice(1,t.length-1),t=t.replace(/\\/g,"")}function i(t){if(0!==t.length){var e=t[t.length-1].pseudos;if(e)for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},function t(e,r){var n="##";e.each(function(e){if("image"==e.get("type")){var i=e.get("src");r?i==n&&e.set("src",e.get("src_bkp")):i!=n&&(e.set("src_bkp",e.get("src")),e.set("src",n))}t(e.get("components"),r)})});return{run:function(e){var r=e.getComponents();t(r)},stop:function(e){var r=e.getComponents();t(r,1)}}}}.call(e,r,e,t),!(void 0!==n&&(t.exports=n))},function(t,e,r){var n;n=function(){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e="",r="",n=t.editor,i=t.tableStyle||{},o=t.cellStyle||{},a=n.BlockManager;for(var s in i)e+=s+": "+i[s]+"; ";for(var u in o)r+=u+": "+o[u]+"; ";a.getAll().reset(),a.add("sect100",{label:"1 Section",attributes:{class:"gjs-fonts gjs-f-b1"},content:'\n \n \n \n
    '}),a.add("sect50",{label:"1/2 Section",attributes:{class:"gjs-fonts gjs-f-b2"},content:'\n \n \n \n \n
    '}),a.add("sect30",{label:"1/3 Section",attributes:{class:"gjs-fonts gjs-f-b3"},content:'\n \n \n \n \n \n
    '}),a.add("sect37",{label:"3/7 Section",attributes:{class:"gjs-fonts gjs-f-b37"},content:'\n \n \n \n \n
    '}),a.add("button",{label:"Button",content:'Button',attributes:{class:"gjs-fonts gjs-f-button"}}),a.add("divider",{label:"Divider",content:'\n \n \n \n
    \n ',attributes:{class:"gjs-fonts gjs-f-divider"}}),a.add("text",{label:"Text",attributes:{class:"gjs-fonts gjs-f-text"},content:{type:"text",content:"Insert your text here",style:{padding:"10px"},activeOnRender:1}}),a.add("text-sect",{label:"Text section",content:'

    Insert title here

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua

    ',attributes:{class:"gjs-fonts gjs-f-h1p"}}),a.add("image",{label:"Image",attributes:{class:"gjs-fonts gjs-f-image"},content:{type:"image",style:{color:"black"},activeOnRender:1}}),a.add("quote",{label:"Quote",content:'
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ',attributes:{class:"fa fa-quote-right"}}),a.add("link",{label:"Link",attributes:{class:"fa fa-link"},content:{type:"link",content:"Link",style:{color:"#3b97e3"}}}),a.add("link-block",{label:"Link Block",attributes:{class:"fa fa-link"},content:{type:"link",editable:!1,droppable:!0,style:{display:"inline-block",padding:"5px","min-height":"50px","min-width":"50px"}}});var c='\n \n \n \n
    \n Image\n\n \n \n \n \n
    \n

    Title here\n

    \n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt\n

    \n
    \n\n
    ';a.add("grid-items",{label:"Grid items",content:'\n \n \n \n \n
    '+c+''+c+"
    ",attributes:{class:"fa fa-th"}});var l='\n \n \n \n
    \n \n \n \n \n \n
    \n Image\n \n

    Title here\n

    \n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt\n

    \n
    \n
    ';a.add("list-items",{label:"List items",content:l+l,attributes:{class:"fa fa-th-list"}})}}.call(e,r,e,t),!(void 0!==n&&(t.exports=n))},function(t,e,r){function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var i;i=function(){var t="title",e="data-tooltip-pos",r=function(t){t.each(function(t){var r=t.get("attributes");r[e]="bottom",t.set("attributes",r)})};return function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=i.editor,a=o.Panels,s=a.getPanel("options");if(a.addButton("options",{id:i.cmdOpenImport,className:"fa fa-download",command:i.cmdOpenImport,attributes:n({},t,i.modalTitleImport)}),a.addButton("options",{id:i.cmdTglImages,className:"fa fa-warning",command:i.cmdTglImages,attributes:n({},t,"Toggle images")}),s){var u=s.get("buttons");u.each(function(t){var r=t.get("attributes");r[e]="bottom",t.set("attributes",r)});var c=a.addButton("options","preview");c&&u.remove(c)}var l=a.getPanel("commands");if(l){var f,h=l.get("buttons");h.reset(),h.add({id:"move-comp",command:"move-comp",className:"fa fa-arrows",attributes:(f={},n(f,t,"Move"),n(f,e,"bottom"),f),stopDefaultCommand:1}),h.add([{id:"undo",className:"fa fa-undo",command:"undo",attributes:n({},t,"Undo")},{id:"redo",className:"fa fa-repeat",command:"redo",attributes:n({},t,"Redo")}]),r(h)}o.getConfig().showDevices=0;var p=a.addPanel({id:"devices-c"}),d=p.get("buttons");p.get("buttons").add([{id:"deviceDesktop",command:"set-device-desktop",className:"fa fa-desktop",attributes:n({},t,"Desktop"),active:1},{id:"deviceTablet",command:"set-device-tablet",className:"fa fa-tablet",attributes:n({},t,"Tablet")},{id:"deviceMobile",command:"set-device-mobile",className:"fa fa-mobile",attributes:n({},t,"Mobile")}]),r(d)}}.call(e,r,e,t),!(void 0!==i&&(t.exports=i))},function(t,e,r){var n;n=function(){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.editor,r=e.StyleManager.getSectors();e.on("load",function(){r.reset(),r.add([{name:"Dimension",open:!1,buildProps:["width","height","max-width","min-height","margin","padding"],properties:[{property:"margin",properties:[{name:"Top",property:"margin-top"},{name:"Left",property:"margin-left"},{name:"Right",property:"margin-right"},{name:"Bottom",property:"margin-bottom"}]},{property:"padding",properties:[{name:"Top",property:"padding-top"},{name:"Right",property:"padding-right"},{name:"Bottom",property:"padding-bottom"},{name:"Left",property:"padding-left"}]}]},{name:"Typography",open:!1,buildProps:["font-family","font-size","font-weight","letter-spacing","color","line-height","text-align","text-decoration","font-style","vertical-align","text-shadow"],properties:[{name:"Font",property:"font-family"},{name:"Weight",property:"font-weight"},{name:"Font color",property:"color"},{property:"text-align",type:"radio",defaults:"left",list:[{value:"left",name:"Left",className:"fa fa-align-left"},{value:"center",name:"Center",className:"fa fa-align-center"},{value:"right",name:"Right",className:"fa fa-align-right"},{value:"justify",name:"Justify",className:"fa fa-align-justify"}]},{property:"text-decoration",type:"radio",defaults:"none",list:[{value:"none",name:"None",className:"fa fa-times"},{value:"underline",name:"underline",className:"fa fa-underline"},{value:"line-through",name:"Line-through",className:"fa fa-strikethrough"}]},{property:"font-style",type:"radio",defaults:"normal",list:[{value:"normal",name:"Normal",className:"fa fa-font"},{value:"italic",name:"Italic",className:"fa fa-italic"}]},{property:"vertical-align",type:"select",defaults:"baseline",list:[{value:"baseline"},{value:"top"},{value:"middle"},{value:"bottom"}]},{property:"text-shadow",properties:[{name:"X position",property:"text-shadow-h"},{name:"Y position",property:"text-shadow-v"},{name:"Blur",property:"text-shadow-blur"},{name:"Color",property:"text-shadow-color"}]}]},{name:"Decorations",open:!1,buildProps:["background-color","border-collapse","border-radius","border","background"],properties:[{property:"background-color",name:"Background"},{property:"border-radius",properties:[{name:"Top",property:"border-top-left-radius"},{name:"Right",property:"border-top-right-radius"},{name:"Bottom",property:"border-bottom-left-radius"},{name:"Left",property:"border-bottom-right-radius"}]},{property:"border-collapse",type:"radio",defaults:"separate",list:[{value:"separate",name:"No"},{value:"collapse",name:"Yes"}]},{property:"border",properties:[{name:"Width",property:"border-width",defaults:"0"},{name:"Style",property:"border-style"},{name:"Color",property:"border-color"}]},{property:"background",properties:[{name:"Image",property:"background-image"},{name:"Repeat",property:"background-repeat"},{name:"Position",property:"background-position"},{name:"Attachment",property:"background-attachment"},{name:"Size",property:"background-size"}]}]}])})}}.call(e,r,e,t),!(void 0!==n&&(t.exports=n))}])}); +/*! grapesjs-preset-newsletter - 0.2.15 */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports["grapesjs-preset-newsletter"]=e():t["grapesjs-preset-newsletter"]=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var r={};return e.m=t,e.c=r,e.d=function(t,r,n){e.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,"a",r),r},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=46)}([function(t,e){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e,r){"use strict";function n(t){if(!(this instanceof n))return new n(t);c.call(this,t),l.call(this,t),t&&!1===t.readable&&(this.readable=!1),t&&!1===t.writable&&(this.writable=!1),this.allowHalfOpen=!0,t&&!1===t.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",i)}function i(){this.allowHalfOpen||this._writableState.ended||a(o,this)}function o(t){t.end()}var a=r(14),s=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};t.exports=n;var u=r(9);u.inherits=r(1);var c=r(36),l=r(21);u.inherits(n,c);for(var f=s(l.prototype),h=0;h=n())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n().toString(16)+" bytes");return 0|t}function g(t){return+t!=t&&(t=0),o.alloc(+t)}function v(t,e){if(o.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return z(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return G(t).length;default:if(n)return z(t).length;e=(""+e).toLowerCase(),n=!0}}function y(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,e>>>=0,r<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return B(this,e,r);case"utf8":case"utf-8":return T(this,e,r);case"ascii":return L(this,e,r);case"latin1":case"binary":return C(this,e,r);case"base64":return E(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return D(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function b(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function m(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=o.from(e,n)),o.isBuffer(e))return 0===e.length?-1:_(t,e,r,n,i);if("number"==typeof e)return e&=255,o.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):_(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function _(t,e,r,n,i){function o(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}var a=1,s=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,r/=2}var c;if(i){var l=-1;for(c=r;cs&&(r=s-u),c=r;c>=0;c--){for(var f=!0,h=0;hi&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a239?4:o>223?3:o>191?2:1;if(i+s<=r){var u,c,l,f;switch(s){case 1:o<128&&(a=o);break;case 2:u=t[i+1],128==(192&u)&&(f=(31&o)<<6|63&u)>127&&(a=f);break;case 3:u=t[i+1],c=t[i+2],128==(192&u)&&128==(192&c)&&(f=(15&o)<<12|(63&u)<<6|63&c)>2047&&(f<55296||f>57343)&&(a=f);break;case 4:u=t[i+1],c=t[i+2],l=t[i+3],128==(192&u)&&128==(192&c)&&128==(192&l)&&(f=(15&o)<<18|(63&u)<<12|(63&c)<<6|63&l)>65535&&f<1114112&&(a=f)}}null===a?(a=65533,s=1):a>65535&&(a-=65536,n.push(a>>>10&1023|55296),a=56320|1023&a),n.push(a),i+=s}return O(n)}function O(t){var e=t.length;if(e<=K)return String.fromCharCode.apply(String,t);for(var r="",n=0;nn)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function P(t,e,r,n,i,a){if(!o.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function q(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function M(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function I(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function N(t,e,r,n,i){return i||I(t,e,r,4,3.4028234663852886e38,-3.4028234663852886e38),X.write(t,e,r,n,23,4),r+4}function U(t,e,r,n,i){return i||I(t,e,r,8,1.7976931348623157e308,-1.7976931348623157e308),X.write(t,e,r,n,52,8),r+8}function F(t){if(t=V(t).replace(tt,""),t.length<2)return"";for(;t.length%4!=0;)t+="=";return t}function V(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function $(t){return t<16?"0"+t.toString(16):t.toString(16)}function z(t,e){e=e||1/0;for(var r,n=t.length,i=null,o=[],a=0;a55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function H(t){for(var e=[],r=0;r>8,i=r%256,o.push(i),o.push(n);return o}function G(t){return Q.toByteArray(F(t))}function Y(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function J(t){return t!==t}/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +var Q=r(53),X=r(54),Z=r(29);e.Buffer=o,e.SlowBuffer=g,e.INSPECT_MAX_BYTES=50,o.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}(),e.kMaxLength=n(),o.poolSize=8192,o._augment=function(t){return t.__proto__=o.prototype,t},o.from=function(t,e,r){return a(null,t,e,r)},o.TYPED_ARRAY_SUPPORT&&(o.prototype.__proto__=Uint8Array.prototype,o.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&o[Symbol.species]===o&&Object.defineProperty(o,Symbol.species,{value:null,configurable:!0})),o.alloc=function(t,e,r){return u(null,t,e,r)},o.allocUnsafe=function(t){return c(null,t)},o.allocUnsafeSlow=function(t){return c(null,t)},o.isBuffer=function(t){return!(null==t||!t._isBuffer)},o.compare=function(t,e){if(!o.isBuffer(t)||!o.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},o.prototype.compare=function(t,e,r,n,i){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,i>>>=0,this===t)return 0;for(var a=i-n,s=r-e,u=Math.min(a,s),c=this.slice(n,i),l=t.slice(e,r),f=0;fi)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return w(this,t,e,r);case"utf8":case"utf-8":return x(this,t,e,r);case"ascii":return S(this,t,e,r);case"latin1":case"binary":return j(this,t,e,r);case"base64":return k(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var K=4096;o.prototype.slice=function(t,e){var r=this.length;t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(i*=256);)n+=this[t+--e]*i;return n},o.prototype.readUInt8=function(t,e){return e||R(t,1,this.length),this[t]},o.prototype.readUInt16LE=function(t,e){return e||R(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUInt16BE=function(t,e){return e||R(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUInt32LE=function(t,e){return e||R(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUInt32BE=function(t,e){return e||R(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||R(t,e,this.length);for(var n=this[t],i=1,o=0;++o=i&&(n-=Math.pow(2,8*e)),n},o.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||R(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},o.prototype.readInt8=function(t,e){return e||R(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},o.prototype.readInt16LE=function(t,e){e||R(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(t,e){e||R(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(t,e){return e||R(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,e){return e||R(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readFloatLE=function(t,e){return e||R(t,4,this.length),X.read(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,e){return e||R(t,4,this.length),X.read(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,e){return e||R(t,8,this.length),X.read(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,e){return e||R(t,8,this.length),X.read(this,t,!1,52,8)},o.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e|=0,r|=0,!n){P(this,t,e,r,Math.pow(2,8*r)-1,0)}var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+r},o.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||P(this,t,e,1,255,0),o.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},o.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||P(this,t,e,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):q(this,t,e,!0),e+2},o.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||P(this,t,e,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):q(this,t,e,!1),e+2},o.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||P(this,t,e,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):M(this,t,e,!0),e+4},o.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||P(this,t,e,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):M(this,t,e,!1),e+4},o.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);P(this,t,e,r,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o>0)-s&255;return e+r},o.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);P(this,t,e,r,i-1,-i)}var o=r-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+r},o.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||P(this,t,e,1,127,-128),o.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},o.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||P(this,t,e,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):q(this,t,e,!0),e+2},o.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||P(this,t,e,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):q(this,t,e,!1),e+2},o.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||P(this,t,e,4,2147483647,-2147483648),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):M(this,t,e,!0),e+4},o.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||P(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):M(this,t,e,!1),e+4},o.prototype.writeFloatLE=function(t,e,r){return N(this,t,e,!0,r)},o.prototype.writeFloatBE=function(t,e,r){return N(this,t,e,!1,r)},o.prototype.writeDoubleLE=function(t,e,r){return U(this,t,e,!0,r)},o.prototype.writeDoubleBE=function(t,e,r){return U(this,t,e,!1,r)},o.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+r];else if(a<1e3||!o.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,t||(t=0);var a;if("number"==typeof t)for(a=e;a1)for(var r=1;r)[^>]*$|#([\w\-]*)$)/;e.isHtml=function(t){if("<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&t.length>=3)return!0;var e=a.exec(t);return!(!e||!e[1])}},function(t,e){t.exports={trueFunc:function(){return!0},falseFunc:function(){return!1}}},function(t,e,r){(function(n){var i=r(3);e=t.exports=function(t,r){var n=e.evaluate(t,r),i=e.evaluate("",r)[0];return i.type="root",e.update(n,i),i},e.evaluate=function(t,e){return"string"==typeof t||n.isBuffer(t)?i.parseDOM(t,e):t},e.update=function(t,e){Array.isArray(t)||(t=[t]),e?e.children=t:e=null;for(var r=0;r0&&this._events[t].length>i&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace()),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(t,e){function r(){this.removeListener(t,r),i||(i=!0,e.apply(this,arguments))}if(!n(e))throw TypeError("listener must be a function");var i=!1;return r.listener=e,this.on(t,r),this},r.prototype.removeListener=function(t,e){var r,i,a,s;if(!n(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(r=this._events[t],a=r.length,i=-1,r===e||n(r.listener)&&r.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(r)){for(s=a;s-- >0;)if(r[s]===e||r[s].listener&&r[s].listener===e){i=s;break}if(i<0)return this;1===r.length?(r.length=0,delete this._events[t]):r.splice(i,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},r.prototype.removeAllListeners=function(t){var e,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[t],n(r))this.removeListener(t,r);else if(r)for(;r.length;)this.removeListener(t,r[r.length-1]);return delete this._events[t],this},r.prototype.listeners=function(t){return this._events&&this._events[t]?n(this._events[t])?[this._events[t]]:this._events[t].slice():[]},r.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(n(e))return 1;if(e)return e.length}return 0},r.listenerCount=function(t,e){return t.listenerCount(e)}},function(t,e,r){"use strict";(function(e){function r(t,r,n,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,a,s=arguments.length;switch(s){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick(function(){t.call(null,r)});case 3:return e.nextTick(function(){t.call(null,r,n)});case 4:return e.nextTick(function(){t.call(null,r,n,i)});default:for(o=new Array(s-1),a=0;a-1&&t%1==0&&t-1&&t%1==0&&t<=m}function g(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function v(t){return!!t&&"object"==typeof t}function y(t){return f(t)?i(t):a(t)}function b(t){return t}var m=9007199254740991,_="[object Arguments]",w="[object Function]",x="[object GeneratorFunction]",S=/^(?:0|[1-9]\d*)$/,j=Object.prototype,k=j.hasOwnProperty,A=j.toString,E=j.propertyIsEnumerable,T=function(t,e){return function(r){return t(e(r))}}(Object.keys,Object),O=function(t,e){return function(r,n){if(null==r)return r;if(!f(r))return t(r,n);for(var i=r.length,o=e?i:-1,a=Object(r);(e?o--:++o",GT:">",Gt:"≫",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",harrcir:"⥈",harr:"↔",hArr:"⇔",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",Im:"ℑ",imof:"⊷",imped:"Ƶ",Implies:"⇒",incare:"℅",in:"∈",infin:"∞",infintie:"⧝",inodot:"ı",intcal:"⊺",int:"∫",Int:"∬",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larrb:"⇤",larrbfs:"⤟",larr:"←",Larr:"↞",lArr:"⇐",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",latail:"⤙",lAtail:"⤛",lat:"⪫",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",LeftArrowBar:"⇤",leftarrow:"←",LeftArrow:"←",Leftarrow:"⇐",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVectorBar:"⥙",LeftDownVector:"⇃",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTeeArrow:"↤",LeftTee:"⊣",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangleBar:"⧏",LeftTriangle:"⊲",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVectorBar:"⥘",LeftUpVector:"↿",LeftVectorBar:"⥒",LeftVector:"↼",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",lescc:"⪨",les:"⩽",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",llarr:"⇇",ll:"≪",Ll:"⋘",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoustache:"⎰",lmoust:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftrightarrow:"⟷",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longmapsto:"⟼",longrightarrow:"⟶",LongRightArrow:"⟶",Longrightarrow:"⟹",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",ltcc:"⪦",ltcir:"⩹",lt:"<",LT:"<",Lt:"≪",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",midast:"*",midcir:"⫰",mid:"∣",middot:"·",minusb:"⊟",minus:"−",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natural:"♮",naturals:"ℕ",natur:"♮",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",ne:"≠",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nlE:"≦̸",nle:"≰",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangleBar:"⧏̸",NotLeftTriangle:"⋪",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangleBar:"⧐̸",NotRightTriangle:"⋫",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",nparallel:"∦",npar:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",nprec:"⊀",npreceq:"⪯̸",npre:"⪯̸",nrarrc:"⤳̸",nrarr:"↛",nrArr:"⇏",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",Ocirc:"Ô",ocirc:"ô",ocir:"⊚",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",orarr:"↻",Or:"⩔",or:"∨",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",otimesas:"⨶",Otimes:"⨷",otimes:"⊗",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",para:"¶",parallel:"∥",par:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plus:"+",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",prap:"⪷",Pr:"⪻",pr:"≺",prcue:"≼",precapprox:"⪷",prec:"≺",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",pre:"⪯",prE:"⪳",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportional:"∝",Proportion:"∷",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarr:"→",Rarr:"↠",rArr:"⇒",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",Re:"ℜ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrowBar:"⇥",rightarrow:"→",RightArrow:"→",Rightarrow:"⇒",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVectorBar:"⥕",RightDownVector:"⇂",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTeeArrow:"↦",RightTee:"⊢",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangleBar:"⧐",RightTriangle:"⊳",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVectorBar:"⥔",RightUpVector:"↾",RightVectorBar:"⥓",RightVector:"⇀",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoustache:"⎱",rmoust:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",scap:"⪸",Scaron:"Š",scaron:"š",Sc:"⪼",sc:"≻",sccue:"≽",sce:"⪰",scE:"⪴",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdotb:"⊡",sdot:"⋅",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",solbar:"⌿",solb:"⧄",sol:"/",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squ:"□",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succapprox:"⪸",succ:"≻",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup1:"¹",sup2:"²",sup3:"³",sup:"⊃",Sup:"⋑",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",therefore:"∴",Therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",ThinSpace:" ",thinsp:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",timesbar:"⨱",timesb:"⊠",times:"×",timesd:"⨰",tint:"∭",toea:"⤨",topbot:"⌶",topcir:"⫱",top:"⊤",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",uarr:"↑",Uarr:"↟",uArr:"⇑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrowBar:"⤒",uparrow:"↑",UpArrow:"↑",Uparrow:"⇑",UpArrowDownArrow:"⇅",updownarrow:"↕",UpDownArrow:"↕",Updownarrow:"⇕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTeeArrow:"↥",UpTee:"⊥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",Vcy:"В",vcy:"в",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",veebar:"⊻",vee:"∨",Vee:"⋁",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xharr:"⟷",xhArr:"⟺",Xi:"Ξ",xi:"ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",yuml:"ÿ",Yuml:"Ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",zfr:"𝔷",Zfr:"ℨ",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}},function(t,e){t.exports={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}},function(t,e,r){e=t.exports=r(36),e.Stream=e,e.Readable=e,e.Writable=r(21),e.Duplex=r(2),e.Transform=r(39),e.PassThrough=r(66)},function(t,e,r){function n(t,e){for(var r in t)e[r]=t[r]}function i(t,e,r){return a(t,e,r)}var o=r(6),a=o.Buffer;a.from&&a.alloc&&a.allocUnsafe&&a.allocUnsafeSlow?t.exports=o:(n(o,e),e.Buffer=i),n(a,i),i.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return a(t,e,r)},i.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var n=a(t);return void 0!==e?"string"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n},i.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return a(t)},i.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return o.SlowBuffer(t)}},function(t,e,r){"use strict";(function(e,n,i){function o(t){var e=this;this.next=null,this.entry=null,this.finish=function(){E(e,t)}}function a(t){return R.from(t)}function s(t){return R.isBuffer(t)||t instanceof P}function u(){}function c(t,e){O=O||r(2),t=t||{},this.objectMode=!!t.objectMode,e instanceof O&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var n=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=n||0===n?n:i,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a=!1===t.decodeStrings;this.decodeStrings=!a,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){b(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function l(t){if(O=O||r(2),!(M.call(l,this)||this instanceof O))return new l(t);this._writableState=new c(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),D.call(this)}function f(t,e){var r=new Error("write after end");t.emit("error",r),T(e,r)}function h(t,e,r,n){var i=!0,o=!1;return null===r?o=new TypeError("May not write null values to stream"):"string"==typeof r||void 0===r||e.objectMode||(o=new TypeError("Invalid non-string/buffer chunk")),o&&(t.emit("error",o),T(n,o),i=!1),i}function p(t,e,r){return t.objectMode||!1===t.decodeStrings||"string"!=typeof e||(e=R.from(e,r)),e}function d(t,e,r,n,i,o){if(!r){var a=p(e,n,i);n!==a&&(r=!0,i="buffer",n=a)}var s=e.objectMode?1:n.length;e.length+=s;var u=e.length-1?n:T;l.WritableState=c;var C=r(9);C.inherits=r(1);var B={deprecate:r(65)},D=r(37),R=r(20).Buffer,P=i.Uint8Array||function(){},q=r(38);C.inherits(l,D),c.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(c.prototype,"buffer",{get:B.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}}();var M;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(M=Function.prototype[Symbol.hasInstance],Object.defineProperty(l,Symbol.hasInstance,{value:function(t){return!!M.call(this,t)||t&&t._writableState instanceof c}})):M=function(t){return t instanceof this},l.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},l.prototype.write=function(t,e,r){var n=this._writableState,i=!1,o=s(t)&&!n.objectMode;return o&&!R.isBuffer(t)&&(t=a(t)),"function"==typeof e&&(r=e,e=null),o?e="buffer":e||(e=n.defaultEncoding),"function"!=typeof r&&(r=u),n.ended?f(this,r):(o||h(this,n,t,r))&&(n.pendingcb++,i=d(this,n,o,t,e,r)),i},l.prototype.cork=function(){this._writableState.corked++},l.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.finished||t.bufferProcessing||!t.bufferedRequest||w(this,t))},l.prototype.setDefaultEncoding=function(t){if("string"==typeof t&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},l.prototype._write=function(t,e,r){r(new Error("_write() is not implemented"))},l.prototype._writev=null,l.prototype.end=function(t,e,r){var n=this._writableState;"function"==typeof t?(r=t,t=null,e=null):"function"==typeof e&&(r=e,e=null),null!==t&&void 0!==t&&this.write(t,e),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||A(this,n,r)},Object.defineProperty(l.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),l.prototype.destroy=q.destroy,l.prototype._undestroy=q.undestroy,l.prototype._destroy=function(t,e){this.end(),e(t)}}).call(e,r(8),r(63).setImmediate,r(0))},function(t,e,r){function n(t){if(t&&!u(t))throw new Error("Unknown encoding: "+t)}function i(t){return t.toString(this.encoding)}function o(t){this.charReceived=t.length%2,this.charLength=this.charReceived?2:0}function a(t){this.charReceived=t.length%3,this.charLength=this.charReceived?3:0}var s=r(6).Buffer,u=s.isEncoding||function(t){switch(t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},c=e.StringDecoder=function(t){switch(this.encoding=(t||"utf8").toLowerCase().replace(/[-_]/,""),n(t),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=o;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=a;break;default:return void(this.write=i)}this.charBuffer=new s(6),this.charReceived=0,this.charLength=0};c.prototype.write=function(t){for(var e="";this.charLength;){var r=t.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:t.length;if(t.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived=55296&&n<=56319)){if(this.charReceived=this.charLength=0,0===t.length)return e;break}this.charLength+=this.surrogateSize,e=""}this.detectIncompleteChar(t);var i=t.length;this.charLength&&(t.copy(this.charBuffer,0,t.length-this.charReceived,i),i-=this.charReceived),e+=t.toString(this.encoding,0,i);var i=e.length-1,n=e.charCodeAt(i);if(n>=55296&&n<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),t.copy(this.charBuffer,0,0,o),e.substring(0,i)}return e},c.prototype.detectIncompleteChar=function(t){for(var e=t.length>=3?3:t.length;e>0;e--){var r=t[t.length-e];if(1==e&&r>>5==6){this.charLength=2;break}if(e<=2&&r>>4==14){this.charLength=3;break}if(e<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=e},c.prototype.end=function(t){var e="";if(t&&t.length&&(e=this.write(t)),this.charReceived){var r=this.charReceived,n=this.charBuffer,i=this.encoding;e+=n.slice(0,r).toString(i)}return e}},function(t,e,r){function n(t,e){if(t){var r,n="";for(var i in t)r=t[i],n&&(n+=" "),!r&&f[i]?n+=i:n+=i+'="'+(e.decodeEntities?l.encodeXML(r):r)+'"';return n}}function i(t,e){"svg"===t.name&&(e={decodeEntities:e.decodeEntities,xmlMode:!0});var r="<"+t.name,i=n(t.attribs,e);return i&&(r+=" "+i),!e.xmlMode||t.children&&0!==t.children.length?(r+=">",t.children&&(r+=d(t.children,e)),p[t.name]&&!e.xmlMode||(r+="")):r+="/>",r}function o(t){return"<"+t.data+">"}function a(t,e){var r=t.data||"";return!e.decodeEntities||t.parent&&t.parent.name in h||(r=l.encodeXML(r)),r}function s(t){return""}function u(t){return"\x3c!--"+t.data+"--\x3e"}var c=r(74),l=r(75),f={__proto__:null,allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,hidden:!0,ismap:!0,loop:!0,multiple:!0,muted:!0,open:!0,readonly:!0,required:!0,reversed:!0,scoped:!0,seamless:!0,selected:!0,typemustmatch:!0},h={__proto__:null,style:!0,script:!0,xmp:!0,iframe:!0,noembed:!0,noframes:!0,plaintext:!0,noscript:!0},p={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},d=t.exports=function(t,e){Array.isArray(t)||t.cheerio||(t=[t]),e=e||{};for(var r="",n=0;n-1}function o(t,e,r,n){for(var i=t.length,o=r+(n?1:-1);n?o--:++o1&&A.reverse(),p&&c1?"& ":"")+e[n],e=e.join(r>2?", ":" "),t.replace(ct,"{\n/* [wrapped with "+e+"] */\n")}function T(t,e){return!!(e=null==e?tt:e)&&("number"==typeof t||vt.test(t))&&t>-1&&t%1==0&&t2?t:void 0}(),Dt=Bt?function(t,e,r){var n=e+"";return Bt(t,"toString",{configurable:!0,enumerable:!1,value:U(E(n,B(A(n),r)))})}:F,Rt=function(t,e){return e=Lt(void 0===e?t.length-1:e,0),function(){for(var n=arguments,i=-1,o=Lt(n.length-e,0),a=Array(o);++i1&&"scope"!==e)throw new SyntaxError("pseudo-selector :"+e+" requires an argument")}else if(1===t.length)throw new SyntaxError("pseudo-selector :"+e+" doesn't have any arguments")}var s=r(4),u=s.isTag,c=s.getText,l=s.getParent,f=s.getChildren,h=s.getSiblings,p=s.hasAttrib,d=s.getName,g=s.getAttributeValue,v=r(85),y=r(43).rules.equals,b=r(11),m=b.trueFunc,_=b.falseFunc,w={contains:function(t,e){return function(r){return t(r)&&c(r).indexOf(e)>=0}},icontains:function(t,e){var r=e.toLowerCase();return function(e){return t(e)&&c(e).toLowerCase().indexOf(r)>=0}},"nth-child":function(t,e){var r=v(e);return r===_?r:r===m?o(t):function(e){for(var n=h(e),i=0,o=0;i=0;o--)if(u(n[o])){if(n[o]===e)break;i++}return r(i)&&t(e)}},"nth-of-type":function(t,e){var r=v(e);return r===_?r:r===m?o(t):function(e){for(var n=h(e),i=0,o=0;o=0;o--)if(u(n[o])){if(n[o]===e)break;d(n[o])===d(e)&&i++}return r(i)&&t(e)}},root:function(t){return function(e){return!l(e)&&t(e)}},scope:function(t,e,r,n){return n&&0!==n.length?1===n.length?function(e){return n[0]===e&&t(e)}:function(e){return n.indexOf(e)>=0&&t(e)}:w.root(t)},checkbox:i("type","checkbox"),file:i("type","file"),password:i("type","password"),radio:i("type","radio"),reset:i("type","reset"),image:i("type","image"),submit:i("type","submit")},x={empty:function(t){return!f(t).some(function(t){return u(t)||"text"===t.type})},"first-child":function(t){return n(h(t))===t},"last-child":function(t){for(var e=h(t),r=e.length-1;r>=0;r--){if(e[r]===t)return!0;if(u(e[r]))break}return!1},"first-of-type":function(t){for(var e=h(t),r=0;r=0;r--)if(u(e[r])){if(e[r]===t)return!0;if(d(e[r])===d(t))break}return!1},"only-of-type":function(t){for(var e=h(t),r=0,n=e.length;r=0;a--)(e.fontFaces&&"font-face"===i[a].type||e.mediaQueries&&"media"===i[a].type)&&o.unshift(n.stringify({stylesheet:{rules:[i[a]]}},{comments:!1,indentation:" "})),i[a].position.start;return 0!==o.length&&"\n"+o.join("\n")+"\n"},e.normalizeLineEndings=function(t){return t.replace(/\r\n/g,"\n").replace(/\n/g,"\r\n")},e.compareFunc=function(t,e){for(var r=Math.min(t.length,e.length),n=0;ne[n]?1:-1;return t.length-e.length},e.compare=function(t,r){return 1==e.compareFunc(t,r)?t:r},e.extend=function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);return t},e.getDefaultOptions=function(t){var r=e.extend({extraCss:"",insertPreservedExtraCss:!0,applyStyleTags:!0,removeStyleTags:!0,preserveMediaQueries:!0,preserveFontFaces:!0,applyWidthAttributes:!0,applyHeightAttributes:!0,applyAttributesTableElements:!0,url:""},t);return r.webResources=r.webResources||{},r}},function(t,e,r){(function(r){function n(t){return i.bind(null,t)}function i(t){var e=[].slice.call(arguments,1);e.unshift("["+t+"]"),r.stderr.write(e.join(" ")+"\n")}e=t.exports=n}).call(e,r(8))},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){function n(t,e){this._options=e||{},this._cbs=t||{},this._tagname="",this._attribname="",this._attribvalue="",this._attribs=null,this._stack=[],this.startIndex=0,this.endIndex=null,this._lowerCaseTagNames="lowerCaseTags"in this._options?!!this._options.lowerCaseTags:!this._options.xmlMode,this._lowerCaseAttributeNames="lowerCaseAttributeNames"in this._options?!!this._options.lowerCaseAttributeNames:!this._options.xmlMode,this._options.Tokenizer&&(i=this._options.Tokenizer),this._tokenizer=new i(this._options,this),this._cbs.onparserinit&&this._cbs.onparserinit(this)}var i=r(31),o={input:!0,option:!0,optgroup:!0,select:!0,button:!0,datalist:!0,textarea:!0},a={tr:{tr:!0,th:!0,td:!0},th:{th:!0},td:{thead:!0,th:!0,td:!0},body:{head:!0,link:!0,script:!0},li:{li:!0},p:{p:!0},h1:{p:!0},h2:{p:!0},h3:{p:!0},h4:{p:!0},h5:{p:!0},h6:{p:!0},select:o,input:o,output:o,button:o,datalist:o,textarea:o,option:{option:!0},optgroup:{optgroup:!0}},s={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,path:!0,circle:!0,ellipse:!0,line:!0,rect:!0,use:!0,stop:!0,polyline:!0,polygon:!0},u=/\s|\//;r(1)(n,r(13).EventEmitter),n.prototype._updatePosition=function(t){null===this.endIndex?this._tokenizer._sectionStart<=t?this.startIndex=0:this.startIndex=this._tokenizer._sectionStart-t:this.startIndex=this.endIndex+1,this.endIndex=this._tokenizer.getAbsoluteIndex()},n.prototype.ontext=function(t){this._updatePosition(1),this.endIndex--,this._cbs.ontext&&this._cbs.ontext(t)},n.prototype.onopentagname=function(t){if(this._lowerCaseTagNames&&(t=t.toLowerCase()),this._tagname=t,!this._options.xmlMode&&t in a)for(var e;(e=this._stack[this._stack.length-1])in a[t];this.onclosetag(e));!this._options.xmlMode&&t in s||this._stack.push(t),this._cbs.onopentagname&&this._cbs.onopentagname(t),this._cbs.onopentag&&(this._attribs={})},n.prototype.onopentagend=function(){this._updatePosition(1),this._attribs&&(this._cbs.onopentag&&this._cbs.onopentag(this._tagname,this._attribs),this._attribs=null),!this._options.xmlMode&&this._cbs.onclosetag&&this._tagname in s&&this._cbs.onclosetag(this._tagname),this._tagname=""},n.prototype.onclosetag=function(t){if(this._updatePosition(1),this._lowerCaseTagNames&&(t=t.toLowerCase()),!this._stack.length||t in s&&!this._options.xmlMode)this._options.xmlMode||"br"!==t&&"p"!==t||(this.onopentagname(t),this._closeCurrentTag());else{var e=this._stack.lastIndexOf(t);if(-1!==e)if(this._cbs.onclosetag)for(e=this._stack.length-e;e--;)this._cbs.onclosetag(this._stack.pop());else this._stack.length=e;else"p"!==t||this._options.xmlMode||(this.onopentagname(t),this._closeCurrentTag())}},n.prototype.onselfclosingtag=function(){this._options.xmlMode||this._options.recognizeSelfClosing?this._closeCurrentTag():this.onopentagend()},n.prototype._closeCurrentTag=function(){var t=this._tagname;this.onopentagend(),this._stack[this._stack.length-1]===t&&(this._cbs.onclosetag&&this._cbs.onclosetag(t),this._stack.pop())},n.prototype.onattribname=function(t){this._lowerCaseAttributeNames&&(t=t.toLowerCase()),this._attribname=t},n.prototype.onattribdata=function(t){this._attribvalue+=t},n.prototype.onattribend=function(){this._cbs.onattribute&&this._cbs.onattribute(this._attribname,this._attribvalue),this._attribs&&!Object.prototype.hasOwnProperty.call(this._attribs,this._attribname)&&(this._attribs[this._attribname]=this._attribvalue),this._attribname="",this._attribvalue=""},n.prototype._getInstructionName=function(t){var e=t.search(u),r=e<0?t:t.substr(0,e);return this._lowerCaseTagNames&&(r=r.toLowerCase()),r},n.prototype.ondeclaration=function(t){if(this._cbs.onprocessinginstruction){var e=this._getInstructionName(t);this._cbs.onprocessinginstruction("!"+e,"!"+t)}},n.prototype.onprocessinginstruction=function(t){if(this._cbs.onprocessinginstruction){var e=this._getInstructionName(t);this._cbs.onprocessinginstruction("?"+e,"?"+t)}},n.prototype.oncomment=function(t){this._updatePosition(4),this._cbs.oncomment&&this._cbs.oncomment(t),this._cbs.oncommentend&&this._cbs.oncommentend()},n.prototype.oncdata=function(t){this._updatePosition(1),this._options.xmlMode||this._options.recognizeCDATA?(this._cbs.oncdatastart&&this._cbs.oncdatastart(),this._cbs.ontext&&this._cbs.ontext(t),this._cbs.oncdataend&&this._cbs.oncdataend()):this.oncomment("[CDATA["+t+"]]")},n.prototype.onerror=function(t){this._cbs.onerror&&this._cbs.onerror(t)},n.prototype.onend=function(){if(this._cbs.onclosetag)for(var t=this._stack.length;t>0;this._cbs.onclosetag(this._stack[--t]));this._cbs.onend&&this._cbs.onend()},n.prototype.reset=function(){this._cbs.onreset&&this._cbs.onreset(),this._tokenizer.reset(),this._tagname="",this._attribname="",this._attribs=null,this._stack=[],this._cbs.onparserinit&&this._cbs.onparserinit(this)},n.prototype.parseComplete=function(t){this.reset(),this.end(t)},n.prototype.write=function(t){this._tokenizer.write(t)},n.prototype.end=function(t){this._tokenizer.end(t)},n.prototype.pause=function(){this._tokenizer.pause()},n.prototype.resume=function(){this._tokenizer.resume()},n.prototype.parseChunk=n.prototype.write,n.prototype.done=n.prototype.end,t.exports=n},function(t,e,r){function n(t){return" "===t||"\n"===t||"\t"===t||"\f"===t||"\r"===t}function i(t,e,r){var n=t.toLowerCase();return t===n?function(t){t===n?this._state=e:(this._state=r,this._index--)}:function(i){i===n||i===t?this._state=e:(this._state=r,this._index--)}}function o(t,e){var r=t.toLowerCase();return function(n){n===r||n===t?this._state=e:(this._state=d,this._index--)}}function a(t,e){this._state=h,this._buffer="",this._sectionStart=0,this._index=0,this._bufferOffset=0,this._baseState=h,this._special=dt,this._cbs=e,this._running=!0,this._ended=!1,this._xmlMode=!(!t||!t.xmlMode),this._decodeEntities=!(!t||!t.decodeEntities)}t.exports=a;var s=r(32),u=r(17),c=r(33),l=r(18),f=0,h=f++,p=f++,d=f++,g=f++,v=f++,y=f++,b=f++,m=f++,_=f++,w=f++,x=f++,S=f++,j=f++,k=f++,A=f++,E=f++,T=f++,O=f++,L=f++,C=f++,B=f++,D=f++,R=f++,P=f++,q=f++,M=f++,I=f++,N=f++,U=f++,F=f++,V=f++,$=f++,z=f++,H=f++,W=f++,G=f++,Y=f++,J=f++,Q=f++,X=f++,Z=f++,K=f++,tt=f++,et=f++,rt=f++,nt=f++,it=f++,ot=f++,at=f++,st=f++,ut=f++,ct=f++,lt=f++,ft=f++,ht=f++,pt=0,dt=pt++,gt=pt++,vt=pt++;a.prototype._stateText=function(t){"<"===t?(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._state=p,this._sectionStart=this._index):this._decodeEntities&&this._special===dt&&"&"===t&&(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._baseState=h,this._state=ut,this._sectionStart=this._index)},a.prototype._stateBeforeTagName=function(t){"/"===t?this._state=v:"<"===t?(this._cbs.ontext(this._getSection()),this._sectionStart=this._index):">"===t||this._special!==dt||n(t)?this._state=h:"!"===t?(this._state=A,this._sectionStart=this._index+1):"?"===t?(this._state=T,this._sectionStart=this._index+1):(this._state=this._xmlMode||"s"!==t&&"S"!==t?d:V,this._sectionStart=this._index)},a.prototype._stateInTagName=function(t){("/"===t||">"===t||n(t))&&(this._emitToken("onopentagname"),this._state=m,this._index--)},a.prototype._stateBeforeCloseingTagName=function(t){n(t)||(">"===t?this._state=h:this._special!==dt?"s"===t||"S"===t?this._state=$:(this._state=h,this._index--):(this._state=y,this._sectionStart=this._index))},a.prototype._stateInCloseingTagName=function(t){(">"===t||n(t))&&(this._emitToken("onclosetag"),this._state=b,this._index--)},a.prototype._stateAfterCloseingTagName=function(t){">"===t&&(this._state=h,this._sectionStart=this._index+1)},a.prototype._stateBeforeAttributeName=function(t){">"===t?(this._cbs.onopentagend(),this._state=h,this._sectionStart=this._index+1):"/"===t?this._state=g:n(t)||(this._state=_,this._sectionStart=this._index)},a.prototype._stateInSelfClosingTag=function(t){">"===t?(this._cbs.onselfclosingtag(),this._state=h,this._sectionStart=this._index+1):n(t)||(this._state=m,this._index--)},a.prototype._stateInAttributeName=function(t){("="===t||"/"===t||">"===t||n(t))&&(this._cbs.onattribname(this._getSection()),this._sectionStart=-1,this._state=w,this._index--)},a.prototype._stateAfterAttributeName=function(t){"="===t?this._state=x:"/"===t||">"===t?(this._cbs.onattribend(),this._state=m,this._index--):n(t)||(this._cbs.onattribend(),this._state=_,this._sectionStart=this._index)},a.prototype._stateBeforeAttributeValue=function(t){'"'===t?(this._state=S,this._sectionStart=this._index+1):"'"===t?(this._state=j,this._sectionStart=this._index+1):n(t)||(this._state=k,this._sectionStart=this._index,this._index--)},a.prototype._stateInAttributeValueDoubleQuotes=function(t){'"'===t?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=m):this._decodeEntities&&"&"===t&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=ut,this._sectionStart=this._index)},a.prototype._stateInAttributeValueSingleQuotes=function(t){"'"===t?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=m):this._decodeEntities&&"&"===t&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=ut,this._sectionStart=this._index)},a.prototype._stateInAttributeValueNoQuotes=function(t){n(t)||">"===t?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=m,this._index--):this._decodeEntities&&"&"===t&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=ut,this._sectionStart=this._index)},a.prototype._stateBeforeDeclaration=function(t){this._state="["===t?D:"-"===t?O:E},a.prototype._stateInDeclaration=function(t){">"===t&&(this._cbs.ondeclaration(this._getSection()),this._state=h,this._sectionStart=this._index+1)},a.prototype._stateInProcessingInstruction=function(t){">"===t&&(this._cbs.onprocessinginstruction(this._getSection()),this._state=h,this._sectionStart=this._index+1)},a.prototype._stateBeforeComment=function(t){"-"===t?(this._state=L,this._sectionStart=this._index+1):this._state=E},a.prototype._stateInComment=function(t){"-"===t&&(this._state=C)},a.prototype._stateAfterComment1=function(t){this._state="-"===t?B:L},a.prototype._stateAfterComment2=function(t){">"===t?(this._cbs.oncomment(this._buffer.substring(this._sectionStart,this._index-2)),this._state=h,this._sectionStart=this._index+1):"-"!==t&&(this._state=L)},a.prototype._stateBeforeCdata1=i("C",R,E),a.prototype._stateBeforeCdata2=i("D",P,E),a.prototype._stateBeforeCdata3=i("A",q,E),a.prototype._stateBeforeCdata4=i("T",M,E),a.prototype._stateBeforeCdata5=i("A",I,E),a.prototype._stateBeforeCdata6=function(t){"["===t?(this._state=N,this._sectionStart=this._index+1):(this._state=E,this._index--)},a.prototype._stateInCdata=function(t){"]"===t&&(this._state=U)},a.prototype._stateAfterCdata1=function(t,e){return function(r){r===t&&(this._state=e)}}("]",F),a.prototype._stateAfterCdata2=function(t){">"===t?(this._cbs.oncdata(this._buffer.substring(this._sectionStart,this._index-2)),this._state=h,this._sectionStart=this._index+1):"]"!==t&&(this._state=N)},a.prototype._stateBeforeSpecial=function(t){"c"===t||"C"===t?this._state=z:"t"===t||"T"===t?this._state=tt:(this._state=d,this._index--)},a.prototype._stateBeforeSpecialEnd=function(t){this._special!==gt||"c"!==t&&"C"!==t?this._special!==vt||"t"!==t&&"T"!==t?this._state=h:this._state=it:this._state=J},a.prototype._stateBeforeScript1=o("R",H),a.prototype._stateBeforeScript2=o("I",W),a.prototype._stateBeforeScript3=o("P",G),a.prototype._stateBeforeScript4=o("T",Y),a.prototype._stateBeforeScript5=function(t){("/"===t||">"===t||n(t))&&(this._special=gt),this._state=d,this._index--},a.prototype._stateAfterScript1=i("R",Q,h),a.prototype._stateAfterScript2=i("I",X,h),a.prototype._stateAfterScript3=i("P",Z,h),a.prototype._stateAfterScript4=i("T",K,h),a.prototype._stateAfterScript5=function(t){">"===t||n(t)?(this._special=dt,this._state=y,this._sectionStart=this._index-6,this._index--):this._state=h},a.prototype._stateBeforeStyle1=o("Y",et),a.prototype._stateBeforeStyle2=o("L",rt),a.prototype._stateBeforeStyle3=o("E",nt),a.prototype._stateBeforeStyle4=function(t){("/"===t||">"===t||n(t))&&(this._special=vt),this._state=d,this._index--},a.prototype._stateAfterStyle1=i("Y",ot,h),a.prototype._stateAfterStyle2=i("L",at,h),a.prototype._stateAfterStyle3=i("E",st,h),a.prototype._stateAfterStyle4=function(t){">"===t||n(t)?(this._special=dt,this._state=y,this._sectionStart=this._index-5,this._index--):this._state=h},a.prototype._stateBeforeEntity=i("#",ct,lt),a.prototype._stateBeforeNumericEntity=i("X",ht,ft),a.prototype._parseNamedEntityStrict=function(){if(this._sectionStart+16&&(e=6);e>=2;){var r=this._buffer.substr(t,e);if(c.hasOwnProperty(r))return this._emitPartial(c[r]),void(this._sectionStart+=e+1);e--}},a.prototype._stateInNamedEntity=function(t){";"===t?(this._parseNamedEntityStrict(),this._sectionStart+1"z")&&(t<"A"||t>"Z")&&(t<"0"||t>"9")&&(this._xmlMode||this._sectionStart+1===this._index||(this._baseState!==h?"="!==t&&this._parseNamedEntityStrict():this._parseLegacyEntity()),this._state=this._baseState,this._index--)},a.prototype._decodeNumericEntity=function(t,e){var r=this._sectionStart+t;if(r!==this._index){var n=this._buffer.substring(r,this._index),i=parseInt(n,e);this._emitPartial(s(i)),this._sectionStart=this._index}else this._sectionStart--;this._state=this._baseState},a.prototype._stateInNumericEntity=function(t){";"===t?(this._decodeNumericEntity(2,10),this._sectionStart++):(t<"0"||t>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(2,10),this._index--)},a.prototype._stateInHexEntity=function(t){";"===t?(this._decodeNumericEntity(3,16),this._sectionStart++):(t<"a"||t>"f")&&(t<"A"||t>"F")&&(t<"0"||t>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(3,16),this._index--)},a.prototype._cleanup=function(){this._sectionStart<0?(this._buffer="",this._bufferOffset+=this._index,this._index=0):this._running&&(this._state===h?(this._sectionStart!==this._index&&this._cbs.ontext(this._buffer.substr(this._sectionStart)),this._buffer="",this._bufferOffset+=this._index,this._index=0):this._sectionStart===this._index?(this._buffer="",this._bufferOffset+=this._index,this._index=0):(this._buffer=this._buffer.substr(this._sectionStart),this._index-=this._sectionStart,this._bufferOffset+=this._sectionStart),this._sectionStart=0)},a.prototype.write=function(t){this._ended&&this._cbs.onerror(Error(".write() after done!")),this._buffer+=t,this._parse()},a.prototype._parse=function(){for(;this._index=55296&&t<=57343||t>1114111)return"�";t in i&&(t=i[t]);var e="";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+=String.fromCharCode(t)}var i=r(55);t.exports=n},function(t,e){t.exports={Aacute:"Á",aacute:"á",Acirc:"Â",acirc:"â",acute:"´",AElig:"Æ",aelig:"æ",Agrave:"À",agrave:"à",amp:"&",AMP:"&",Aring:"Å",aring:"å",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",brvbar:"¦",Ccedil:"Ç",ccedil:"ç",cedil:"¸",cent:"¢",copy:"©",COPY:"©",curren:"¤",deg:"°",divide:"÷",Eacute:"É",eacute:"é",Ecirc:"Ê",ecirc:"ê",Egrave:"È",egrave:"è",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",frac12:"½",frac14:"¼",frac34:"¾",gt:">",GT:">",Iacute:"Í",iacute:"í",Icirc:"Î",icirc:"î",iexcl:"¡",Igrave:"Ì",igrave:"ì",iquest:"¿",Iuml:"Ï",iuml:"ï",laquo:"«",lt:"<",LT:"<",macr:"¯",micro:"µ",middot:"·",nbsp:" ",not:"¬",Ntilde:"Ñ",ntilde:"ñ",Oacute:"Ó",oacute:"ó",Ocirc:"Ô",ocirc:"ô",Ograve:"Ò",ograve:"ò",ordf:"ª",ordm:"º",Oslash:"Ø",oslash:"ø",Otilde:"Õ",otilde:"õ",Ouml:"Ö",ouml:"ö",para:"¶",plusmn:"±",pound:"£",quot:'"',QUOT:'"',raquo:"»",reg:"®",REG:"®",sect:"§",shy:"­",sup1:"¹",sup2:"²",sup3:"³",szlig:"ß",THORN:"Þ",thorn:"þ",times:"×",Uacute:"Ú",uacute:"ú",Ucirc:"Û",ucirc:"û",Ugrave:"Ù",ugrave:"ù",uml:"¨",Uuml:"Ü",uuml:"ü",Yacute:"Ý",yacute:"ý",yen:"¥",yuml:"ÿ"}},function(t,e){var r=t.exports={get firstChild(){var t=this.children;return t&&t[0]||null},get lastChild(){var t=this.children;return t&&t[t.length-1]||null},get nodeType(){return i[this.type]||i.element}},n={tagName:"name",childNodes:"children",parentNode:"parent",previousSibling:"prev",nextSibling:"next",nodeValue:"data"},i={element:1,text:3,cdata:4,comment:8};Object.keys(n).forEach(function(t){var e=n[t];Object.defineProperty(r,t,{get:function(){return this[e]||null},set:function(t){return this[e]=t,t}})})},function(t,e,r){function n(t,e){var r=this._parser=new i(t,e),n=this._decoder=new a;o.call(this,{decodeStrings:!1}),this.once("finish",function(){r.end(n.end())})}t.exports=n;var i=r(30),o=r(60).Writable||r(71).Writable,a=r(22).StringDecoder,s=r(6).Buffer;r(1)(n,o),o.prototype._write=function(t,e,r){t instanceof s&&(t=this._decoder.write(t)),this._parser.write(t),r()}},function(t,e,r){"use strict";(function(e,n){function i(t){return M.from(t)}function o(t){return M.isBuffer(t)||t instanceof I}function a(t,e,r){if("function"==typeof t.prependListener)return t.prependListener(e,r);t._events&&t._events[e]?R(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r)}function s(t,e){D=D||r(2),t=t||{},this.objectMode=!!t.objectMode,e instanceof D&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var n=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=n||0===n?n:i,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new $,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(V||(V=r(22).StringDecoder),this.decoder=new V(t.encoding),this.encoding=t.encoding)}function u(t){if(D=D||r(2),!(this instanceof u))return new u(t);this._readableState=new s(t,this),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),q.call(this)}function c(t,e,r,n,o){var a=t._readableState;if(null===e)a.reading=!1,g(t,a);else{var s;o||(s=f(a,e)),s?t.emit("error",s):a.objectMode||e&&e.length>0?("string"==typeof e||a.objectMode||Object.getPrototypeOf(e)===M.prototype||(e=i(e)),n?a.endEmitted?t.emit("error",new Error("stream.unshift() after end event")):l(t,a,e,!0):a.ended?t.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!r?(e=a.decoder.write(e),a.objectMode||0!==e.length?l(t,a,e,!1):b(t,a)):l(t,a,e,!1))):n||(a.reading=!1)}return h(a)}function l(t,e,r,n){e.flowing&&0===e.length&&!e.sync?(t.emit("data",r),t.read(0)):(e.length+=e.objectMode?1:r.length,n?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&v(t)),b(t,e)}function f(t,e){var r;return o(e)||"string"==typeof e||void 0===e||t.objectMode||(r=new TypeError("Invalid non-string/buffer chunk")),r}function h(t){return!t.ended&&(t.needReadable||t.length=W?t=W:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function d(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=p(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function g(t,e){if(!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,v(t)}}function v(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(F("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?B(y,t):y(t))}function y(t){F("emit readable"),t.emit("readable"),j(t)}function b(t,e){e.readingMore||(e.readingMore=!0,B(m,t,e))}function m(t,e){for(var r=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=e.length?(r=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):r=A(t,e.buffer,e.decoder),r}function A(t,e,r){var n;return to.length?o.length:t;if(a===o.length?i+=o:i+=o.slice(0,t),0===(t-=a)){a===o.length?(++n,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(a));break}++n}return e.length-=n,i}function T(t,e){var r=M.allocUnsafe(t),n=e.head,i=1;for(n.data.copy(r),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(r,r.length-t,0,a),0===(t-=a)){a===o.length?(++i,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(a));break}++i}return e.length-=i,r}function O(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,B(L,e,t))}function L(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function C(t,e){for(var r=0,n=t.length;r=e.highWaterMark||e.ended))return F("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?O(this):v(this),null;if(0===(t=d(t,e))&&e.ended)return 0===e.length&&O(this),null;var n=e.needReadable;F("need readable",n),(0===e.length||e.length-t0?k(t,e):null,null===i?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&O(this)),null!==i&&this.emit("data",i),i},u.prototype._read=function(t){this.emit("error",new Error("_read() is not implemented"))},u.prototype.pipe=function(t,e){function r(t,e){F("onunpipe"),t===h&&e&&!1===e.hasUnpiped&&(e.hasUnpiped=!0,o())}function i(){F("onend"),t.end()}function o(){F("cleanup"),t.removeListener("close",c),t.removeListener("finish",l),t.removeListener("drain",v),t.removeListener("error",u),t.removeListener("unpipe",r),h.removeListener("end",i),h.removeListener("end",f),h.removeListener("data",s),y=!0,!p.awaitDrain||t._writableState&&!t._writableState.needDrain||v()}function s(e){F("ondata"),b=!1,!1!==t.write(e)||b||((1===p.pipesCount&&p.pipes===t||p.pipesCount>1&&-1!==C(p.pipes,t))&&!y&&(F("false write response, pause",h._readableState.awaitDrain),h._readableState.awaitDrain++,b=!0),h.pause())}function u(e){F("onerror",e),f(),t.removeListener("error",u),0===P(t,"error")&&t.emit("error",e)}function c(){t.removeListener("finish",l),f()}function l(){F("onfinish"),t.removeListener("close",c),f()}function f(){F("unpipe"),h.unpipe(t)}var h=this,p=this._readableState;switch(p.pipesCount){case 0:p.pipes=t;break;case 1:p.pipes=[p.pipes,t];break;default:p.pipes.push(t)}p.pipesCount+=1,F("pipe count=%d opts=%j",p.pipesCount,e);var d=(!e||!1!==e.end)&&t!==n.stdout&&t!==n.stderr,g=d?i:f;p.endEmitted?B(g):h.once("end",g),t.on("unpipe",r);var v=_(h);t.on("drain",v);var y=!1,b=!1;return h.on("data",s),a(t,"error",u),t.once("close",c),t.once("finish",l),t.emit("pipe",h),p.flowing||(F("pipe resume"),h.resume()),t},u.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var n=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o-1&&t%1==0&&t-1&&t%1==0&&t<=x}function m(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function _(t){return!!t&&"object"==typeof t}function w(t){return g(t)?i(t,!0):a(t)}var x=9007199254740991,S="[object Arguments]",j="[object Function]",k="[object GeneratorFunction]",A=/^(?:0|[1-9]\d*)$/,E=Object.prototype,T=E.hasOwnProperty,O=E.toString,L=E.propertyIsEnumerable,C=Math.max,B=Array.isArray,D=function(t){return s(function(e,r){var n=-1,i=r.length,o=i>1?r[i-1]:void 0,a=i>2?r[2]:void 0;for(o=t.length>3&&"function"==typeof o?(i--,o):void 0,a&&l(r[0],r[1],a)&&(o=i<3?void 0:o,i=1),e=Object(e);++n-1&&t%1==0&&t-1&&t%1==0&&t<=S}function _(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function w(t){return!!t&&"object"==typeof t}function x(t){return v(t)?i(t,!0):s(t)}var S=9007199254740991,j="[object Arguments]",k="[object Function]",A="[object GeneratorFunction]",E=/^(?:0|[1-9]\d*)$/,T=Object.prototype,O=T.hasOwnProperty,L=T.toString,C=T.propertyIsEnumerable,B=Math.max,D=Array.isArray,R=function(t){return u(function(e,r){var n=-1,i=r.length,o=i>1?r[i-1]:void 0,a=i>2?r[2]:void 0;for(o=t.length>3&&"function"==typeof o?(i--,o):void 0,a&&f(r[0],r[1],a)&&(o=i<3?void 0:o,i=1),e=Object(e);++n=0&&t(e)}},not:function(t,e){var r=e.name,n=e.value;return""===n?function(e){return!!o(e,r)&&t(e)}:e.ignoreCase?(n=n.toLowerCase(),function(e){var i=o(e,r);return null!=i&&i.toLowerCase()!==n&&t(e)}):function(e){return o(e,r)!==n&&t(e)}}};t.exports={compile:function(t,e,r){if(r&&r.strict&&(e.ignoreCase||"not"===e.action))throw SyntaxError("Unsupported attribute selector");return u[e.action](t,e)},rules:u}},function(t,e){t.exports={universal:50,tag:30,attribute:1,pseudo:0,descendant:-1,child:-1,parent:-1,sibling:-1,adjacent:-1}},function(t,e,r){function n(t){function e(t){return t?w[w.length-1-t]:_}function r(t){return t===n(1)}function n(e){return t[y+(e||1)]}function s(){var t=w.pop();return _=w[w.length-1],t}function u(t){return _=t,w.push(_),w.length}function c(t){var e=_;return w[w.length-1]=_=t,e}function l(e){if(1==(e||1))"\n"==t[y]?(m++,v=1):v++,y++;else{var r=t.slice(y,y+e).split("\n");r.length>1&&(m+=r.length-1,v=1),v+=r[r.length-1].length,y+=e}}function f(){x.end={line:m,col:v},i&&a("addToken:",JSON.stringify(x,null,2)),S.push(x),g="",x={}}function h(t){x={type:t,start:{line:m,col:v}}}var p,d,g="",v=0,y=-1,b=0,m=1,_="before-selector",w=[_],x={},S=[],j=["media","keyframes",{name:"-webkit-keyframes",type:"keyframes",prefix:"-webkit-"},{name:"-moz-keyframes",type:"keyframes",prefix:"-moz-"},{name:"-ms-keyframes",type:"keyframes",prefix:"-ms-"},{name:"-o-keyframes",type:"keyframes",prefix:"-o-"},"font-face",{name:"import",state:"before-at-value"},{name:"charset",state:"before-at-value"},"supports","viewport",{name:"namespace",state:"before-at-value"},"document",{name:"-moz-document",type:"document",prefix:"-moz-"},"page"];for(o&&(p=Date.now());d=function(){return l(),t[y]}();)switch(i&&a(d,e()),d){case" ":switch(e()){case"selector":case"value":case"value-paren":case"at-group":case"at-value":case"comment":case"double-string":case"single-string":g+=d}break;case"\n":case"\t":case"\r":case"\f":switch(e()){case"value":case"value-paren":case"at-group":case"comment":case"single-string":case"double-string":case"selector":g+=d;break;case"at-value":"\n"===d&&(x.value=g.trim(),f(),s())}break;case":":switch(e()){case"name":x.name=g.trim(),g="",c("before-value");break;case"before-selector":g+=d,h("selector"),u("selector");break;case"before-value":c("value"),g+=d;break;default:g+=d}break;case";":switch(e()){case"name":case"before-value":case"value":g.trim().length>0&&(x.value=g.trim(),f()),c("before-name");break;case"value-paren":g+=d;break;case"at-value":x.value=g.trim(),f(),s();break;case"before-name":break;default:g+=d}break;case"{":switch(e()){case"selector":if("\\"===n(-1)){g+=d;break}x.text=g.trim(),f(),c("before-name"),b+=1;break;case"at-group":switch(x.name=g.trim(),x.type){case"font-face":case"viewport":case"page":u("before-name");break;default:u("before-selector")}f(),b+=1;break;case"name":case"at-rule":x.name=g.trim(),f(),u("before-name"),b+=1;break;case"comment":case"double-string":case"single-string":g+=d;break;case"before-value":c("value"),g+=d}break;case"}":switch(e()){case"before-name":case"name":case"before-value":case"value":g&&(x.value=g.trim()),x.name&&x.value&&f(),h("end"),f(),s(),"at-group"===e()&&(h("at-group-end"),f(),s()),b>0&&(b-=1);break;case"at-group":case"before-selector":case"selector":if("\\"===n(-1)){g+=d;break}b>0&&"at-group"===e(1)&&(h("at-group-end"),f()),b>1&&s(),b>0&&(b-=1);break;case"double-string":case"single-string":case"comment":g+=d}break;case'"':case"'":switch(e()){case"double-string":'"'===d&&"\\"!==n(-1)&&s();break;case"single-string":"'"===d&&"\\"!==n(-1)&&s();break;case"before-at-value":c("at-value"),u('"'===d?"double-string":"single-string");break;case"before-value":c("value"),u('"'===d?"double-string":"single-string");break;case"comment":break;default:"\\"!==n(-1)&&u('"'===d?"double-string":"single-string")}g+=d;break;case"/":switch(e()){case"comment":case"double-string":case"single-string":g+=d;break;case"before-value":case"selector":case"name":case"value":if(r("*")){var k=function(e){var r=t.slice(y).indexOf(e);return r>0&&r}("*/");k&&l(k+1)}else"before-value"==e()&&c("value"),g+=d;break;default:r("*")?(h("comment"),u("comment"),l()):g+=d}break;case"*":switch(e()){case"comment":r("/")?(x.text=g,l(),f(),s()):g+=d;break;case"before-selector":g+=d,h("selector"),u("selector");break;case"before-value":c("value"),g+=d;break;default:g+=d}break;case"@":switch(e()){case"comment":case"double-string":case"single-string":g+=d;break;case"before-value":c("value"),g+=d;break;default:for(var A,E,T=!1,O=0,L=j.length;!T&&O0&&void 0!==arguments[0]?arguments[0]:{},e=t.editor,n=e.Commands,i=r(48),o=r(49),a=r(112);n.add(t.cmdOpenImport,i(t)),n.add(t.cmdTglImages,a(t)),e.on("load",function(){n.add("export-template",o(t))}),n.add("undo",{run:function(t,e){e.set("active",0),t.UndoManager.undo(1)}}),n.add("redo",{run:function(t,e){e.set("active",0),t.UndoManager.redo(1)}}),n.add("set-device-desktop",{run:function(t){t.setDevice("Desktop")}}),n.add("set-device-tablet",{run:function(t){t.setDevice("Tablet")}}),n.add("set-device-mobile",{run:function(t){t.setDevice("Mobile portrait")}})}}.call(e,r,e,t))&&(t.exports=n)},function(t,e,r){"use strict";var n;void 0!==(n=function(){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.editor,r=e&&e.CodeManager.getViewer("CodeMirror").clone(),n=document.createElement("button"),i=document.createElement("div"),o=t.pfx||"";return n.innerHTML=t.modalBtnImport,n.className=o+"btn-prim "+o+"btn-import",n.onclick=function(){var t=r.editor.getValue();e.DomComponents.getWrapper().set("content",""),e.setComponents(t),e.Modal.close()},r.set({codeName:"htmlmixed",theme:t.codeViewerTheme,readOnly:0}),{run:function(e,a){var s=e.Modal,u=(s.getContentEl(),r.editor);if(s.setTitle(t.modalTitleImport),!u){var c=document.createElement("textarea");if(t.modalLabelImport){var l=document.createElement("div");l.className=o+"import-label",l.innerHTML=t.modalLabelImport,i.appendChild(l)}i.appendChild(c),i.appendChild(n),r.init(c),u=r.editor}s.setContent(""),s.setContent(i),r.setContent(t.importPlaceholder||""),s.open(),u.refresh(),a&&a.set("active",0)}}}}.call(e,r,e,t))&&(t.exports=n)},function(t,e,r){"use strict";var n;void 0!==(n=function(){var t=r(50);return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.editor,n=r&&r.CodeManager.getViewer("CodeMirror").clone(),i=document.createElement("div"),o=e.pfx||"",a=r.Commands;return n.set({codeName:"htmlmixed",theme:e.codeViewerTheme}),a.add(o+"get-inlined-html",{run:function(e){var r=e.getHtml()+"";return t(r)}}),{run:function(r,a){var s=r.Modal,u=(s.getContentEl(),n.editor);if(s.setTitle(e.modalTitleExport),!u){var c=document.createElement("textarea");if(e.modalLabelExport){var l=document.createElement("div");l.className=o+"export-label",l.innerHTML=e.modalLabelExport,i.appendChild(l)}i.appendChild(c),n.init(c),u=n.editor,u.setOption("lineWrapping",1)}s.setContent(i);var f=r.getHtml()+"";n.setContent(e.inlineCss?t(f):f),s.open(),u.refresh(),a&&a.set&&a.set("active",0)}}}}.call(e,r,e,t))&&(t.exports=n)},function(t,e,r){"use strict";var n=r(51),i=r(111),o=i(function(t,e){return n(t,{xmlMode:e&&e.xmlMode},a,[e])}),a=function(t,e){return o.juiceDocument(t,e)};o.inlineContent=function(t,e,r){return n(t,{xmlMode:r&&r.xmlMode},o.inlineDocument,[e,r])},t.exports=o},function(t,e,r){"use strict";var n=r(52),i=r(27),o=function(t,e){return e=i.extend({decodeEntities:!1},e||{}),t=u(t),n.load(t,e)},a=function(e){var r=t.exports.codeBlocks;return Object.keys(r).forEach(function(t){var n=new RegExp(r[t].start+"((.|\\s)*?)"+r[t].end,"g");e=e.replace(n,function(e,n){return"\x3c!--"+t+" "+r[t].start+n+r[t].end+" --\x3e"})}),e},s=function(e){var r=t.exports.codeBlocks;return Object.keys(r).forEach(function(t){var n=new RegExp("\x3c!--"+t+" "+r[t].start+"((.|\\s)*?)"+r[t].end+" --\x3e","g");e=e.replace(n,function(e,n){return r[t].start+n+r[t].end})}),e},u=function(t){return a(t)},c=function(t){return s(t)};t.exports=function(t,e,r,n){var i=o(t,e),a=[i];a.push.apply(a,n);var s=r.apply(void 0,a)||i;return e&&e.xmlMode?s.xml():c(s.html())},t.exports.codeBlocks={EJS:{start:"<%",end:"%>"},HBS:{start:"{{",end:"}}"}}},function(t,e,r){e=t.exports=r(16),e.version=r(104).version},function(t,e,r){"use strict";function n(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function i(t){return 3*t.length/4-n(t)}function o(t){var e,r,i,o,a,s,u=t.length;a=n(t),s=new f(3*u/4-a),i=a>0?u-4:u;var c=0;for(e=0,r=0;e>16&255,s[c++]=o>>8&255,s[c++]=255&o;return 2===a?(o=l[t.charCodeAt(e)]<<2|l[t.charCodeAt(e+1)]>>4,s[c++]=255&o):1===a&&(o=l[t.charCodeAt(e)]<<10|l[t.charCodeAt(e+1)]<<4|l[t.charCodeAt(e+2)]>>2,s[c++]=o>>8&255,s[c++]=255&o),s}function a(t){return c[t>>18&63]+c[t>>12&63]+c[t>>6&63]+c[63&t]}function s(t,e,r){for(var n,i=[],o=e;ou?u:a+16383));return 1===n?(e=t[r-1],i+=c[e>>2],i+=c[e<<4&63],i+="=="):2===n&&(e=(t[r-2]<<8)+t[r-1],i+=c[e>>10],i+=c[e>>4&63],i+=c[e<<2&63],i+="="),o.push(i),o.join("")}e.byteLength=i,e.toByteArray=o,e.fromByteArray=u;for(var c=[],l=[],f="undefined"!=typeof Uint8Array?Uint8Array:Array,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=0,d=h.length;p>1,l=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,o=p&(1<<-l)-1,p>>=-l,l+=s;l>0;o=256*o+t[e+f],f+=h,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=n;l>0;a=256*a+t[e+f],f+=h,l-=8);if(0===o)o=1-c;else{if(o===u)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,n),o-=c}return(p?-1:1)*a*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var a,s,u,c=8*o-i-1,l=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),e+=a+f>=1?h/u:h*Math.pow(2,1-f),e*u>=2&&(a++,u/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(e*u-1)*Math.pow(2,i),a+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(a=a<0;t[r+p]=255&a,p+=d,a/=256,c-=8);t[r+p-d]|=128*g}},function(t,e){t.exports={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}},function(t,e,r){function n(t,e,r){"object"==typeof t?(r=e,e=t,t=null):"function"==typeof e&&(r=e,e=u),this._callback=t,this._options=e||u,this._elementCB=r,this.dom=[],this._done=!1,this._tagStack=[],this._parser=this._parser||null}var i=r(7),o=/\s+/g,a=r(34),s=r(57),u={normalizeWhitespace:!1,withStartIndices:!1};n.prototype.onparserinit=function(t){this._parser=t},n.prototype.onreset=function(){n.call(this,this._callback,this._options,this._elementCB)},n.prototype.onend=function(){this._done||(this._done=!0,this._parser=null,this._handleCallback(null))},n.prototype._handleCallback=n.prototype.onerror=function(t){if("function"==typeof this._callback)this._callback(t,this.dom);else if(t)throw t},n.prototype.onclosetag=function(){var t=this._tagStack.pop();this._elementCB&&this._elementCB(t)},n.prototype._addDomElement=function(t){var e=this._tagStack[this._tagStack.length-1],r=e?e.children:this.dom,n=r[r.length-1];t.next=null,this._options.withStartIndices&&(t.startIndex=this._parser.startIndex),this._options.withDomLvl1&&(t.__proto__="tag"===t.type?s:a),n?(t.prev=n,n.next=t):t.prev=null,r.push(t),t.parent=e||null},n.prototype.onopentag=function(t,e){var r={type:"script"===t?i.Script:"style"===t?i.Style:i.Tag,name:t,attribs:e,children:[]};this._addDomElement(r),this._tagStack.push(r)},n.prototype.ontext=function(t){var e,r=this._options.normalizeWhitespace||this._options.ignoreWhitespace;!this._tagStack.length&&this.dom.length&&(e=this.dom[this.dom.length-1]).type===i.Text?r?e.data=(e.data+t).replace(o," "):e.data+=t:this._tagStack.length&&(e=this._tagStack[this._tagStack.length-1])&&(e=e.children[e.children.length-1])&&e.type===i.Text?r?e.data=(e.data+t).replace(o," "):e.data+=t:(r&&(t=t.replace(o," ")),this._addDomElement({data:t,type:i.Text}))},n.prototype.oncomment=function(t){var e=this._tagStack[this._tagStack.length-1];if(e&&e.type===i.Comment)return void(e.data+=t);var r={data:t,type:i.Comment};this._addDomElement(r),this._tagStack.push(r)},n.prototype.oncdatastart=function(){var t={children:[{data:"",type:i.Text}],type:i.CDATA};this._addDomElement(t),this._tagStack.push(t)},n.prototype.oncommentend=n.prototype.oncdataend=function(){this._tagStack.pop()},n.prototype.onprocessinginstruction=function(t,e){this._addDomElement({name:t,data:e,type:i.Directive})},t.exports=n},function(t,e,r){var n=r(34),i=t.exports=Object.create(n),o={tagName:"name"};Object.keys(o).forEach(function(t){var e=o[t];Object.defineProperty(i,t,{get:function(){return this[e]||null},set:function(t){return this[e]=t,t}})})},function(t,e,r){function n(t,e){this.init(t,e)}function i(t,e){return l.getElementsByTagName(t,e,!0)}function o(t,e){return l.getElementsByTagName(t,e,!0,1)[0]}function a(t,e,r){return l.getText(l.getElementsByTagName(t,e,r,1)).trim()}function s(t,e,r,n,i){var o=a(r,n,i);o&&(t[e]=o)}var u=r(3),c=u.DomHandler,l=u.DomUtils;r(1)(n,c),n.prototype.init=c;var f=function(t){return"rss"===t||"feed"===t||"rdf:RDF"===t};n.prototype.onend=function(){var t,e,r={},n=o(f,this.dom);n&&("feed"===n.name?(e=n.children,r.type="atom",s(r,"id","id",e),s(r,"title","title",e),(t=o("link",e))&&(t=t.attribs)&&(t=t.href)&&(r.link=t),s(r,"description","subtitle",e),(t=a("updated",e))&&(r.updated=new Date(t)),s(r,"author","email",e,!0),r.items=i("entry",e).map(function(t){var e,r={};return t=t.children,s(r,"id","id",t),s(r,"title","title",t),(e=o("link",t))&&(e=e.attribs)&&(e=e.href)&&(r.link=e),(e=a("summary",t)||a("content",t))&&(r.description=e),(e=a("updated",t))&&(r.pubDate=new Date(e)),r})):(e=o("channel",n.children).children,r.type=n.name.substr(0,3),r.id="",s(r,"title","title",e),s(r,"link","link",e),s(r,"description","description",e),(t=a("lastBuildDate",e))&&(r.updated=new Date(t)),s(r,"author","managingEditor",e,!0),r.items=i("item",n.children).map(function(t){var e,r={};return t=t.children,s(r,"id","guid",t),s(r,"title","title",t),s(r,"link","link",t),s(r,"description","description",t),(e=a("pubDate",t))&&(r.pubDate=new Date(e)),r}))),this.dom=r,c.prototype._handleCallback.call(this,n?null:Error("couldn't find root of feed"))},t.exports=n},function(t,e,r){function n(t){o.call(this,new i(this),t)}function i(t){this.scope=t}t.exports=n;var o=r(35);r(1)(n,o),n.prototype.readable=!0;var a=r(3).EVENTS;Object.keys(a).forEach(function(t){if(0===a[t])i.prototype["on"+t]=function(){this.scope.emit(t)};else if(1===a[t])i.prototype["on"+t]=function(e){this.scope.emit(t,e)};else{if(2!==a[t])throw Error("wrong number of arguments!");i.prototype["on"+t]=function(e,r){this.scope.emit(t,e,r)}}})},function(t,e,r){function n(){i.call(this)}t.exports=n;var i=r(13).EventEmitter;r(1)(n,i),n.Readable=r(19),n.Writable=r(67),n.Duplex=r(68),n.Transform=r(69),n.PassThrough=r(70),n.Stream=n,n.prototype.pipe=function(t,e){function r(e){t.writable&&!1===t.write(e)&&c.pause&&c.pause()}function n(){c.readable&&c.resume&&c.resume()}function o(){l||(l=!0,t.end())}function a(){l||(l=!0,"function"==typeof t.destroy&&t.destroy())}function s(t){if(u(),0===i.listenerCount(this,"error"))throw t}function u(){c.removeListener("data",r),t.removeListener("drain",n),c.removeListener("end",o),c.removeListener("close",a),c.removeListener("error",s),t.removeListener("error",s),c.removeListener("end",u),c.removeListener("close",u),t.removeListener("close",u)}var c=this;c.on("data",r),t.on("drain",n),t._isStdio||e&&!1===e.end||(c.on("end",o),c.on("close",a));var l=!1;return c.on("error",s),t.on("error",s),c.on("end",u),c.on("close",u),t.on("close",u),t.emit("pipe",c),t}},function(t,e){},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e,r){t.copy(e,r)}var o=r(20).Buffer;t.exports=function(){function t(){n(this,t),this.head=null,this.tail=null,this.length=0}return t.prototype.push=function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length},t.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},t.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0},t.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,r=""+e.data;e=e.next;)r+=t+e.data;return r},t.prototype.concat=function(t){if(0===this.length)return o.alloc(0);if(1===this.length)return this.head.data;for(var e=o.allocUnsafe(t>>>0),r=this.head,n=0;r;)i(r.data,e,n),n+=r.data.length,r=r.next;return e},t}()},function(t,e,r){function n(t,e){this._id=t,this._clearFn=e}var i=Function.prototype.apply;e.setTimeout=function(){return new n(i.call(setTimeout,window,arguments),clearTimeout)},e.setInterval=function(){return new n(i.call(setInterval,window,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},n.prototype.unref=n.prototype.ref=function(){},n.prototype.close=function(){this._clearFn.call(window,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},r(64),e.setImmediate=setImmediate,e.clearImmediate=clearImmediate},function(t,e,r){(function(t,e){!function(t,r){"use strict";function n(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),r=0;r0&&(o=i(t,o,r,n),a=a.concat(o),(n-=o.length)<=0)));s++);return a}function o(t,e){for(var r=0,n=e.length;r0&&(r=a(t,e[n].children)));return r}function s(t,e){for(var r=0,n=e.length;r0&&s(t,e[r].children)))return!0;return!1}function u(t,e){for(var r=[],n=0,i=e.length;n0&&(r=r.concat(u(t,e[n].children))));return r}var c=r(7).isTag;t.exports={filter:n,find:i,findOneChild:o,findOne:a,existsOne:s,findAll:u}},function(t,e,r){function n(t,e){return"function"==typeof e?function(r){return r.attribs&&e(r.attribs[t])}:function(r){return r.attribs&&r.attribs[t]===e}}function i(t,e){return function(r){return t(r)||e(r)}}var o=r(7),a=e.isTag=o.isTag;e.testElement=function(t,e){for(var r in t)if(t.hasOwnProperty(r)){if("tag_name"===r){if(!a(e)||!t.tag_name(e.name))return!1}else if("tag_type"===r){if(!t.tag_type(e.type))return!1}else if("tag_contains"===r){if(a(e)||!t.tag_contains(e.data))return!1}else if(!e.attribs||!t[r](e.attribs[r]))return!1}else;return!0};var s={tag_name:function(t){return"function"==typeof t?function(e){return a(e)&&t(e.name)}:"*"===t?a:function(e){return a(e)&&e.name===t}},tag_type:function(t){return"function"==typeof t?function(e){return t(e.type)}:function(e){return e.type===t}},tag_contains:function(t){return"function"==typeof t?function(e){return!a(e)&&t(e.data)}:function(e){return!a(e)&&e.data===t}}};e.getElements=function(t,e,r,o){var a=Object.keys(t).map(function(e){var r=t[e];return e in s?s[e](r):n(e,r)});return 0===a.length?[]:this.filter(a.reduce(i),e,r,o)},e.getElementById=function(t,e,r){return Array.isArray(e)||(e=[e]),this.findOne(n("id",t),e,!1!==r)},e.getElementsByTagName=function(t,e,r,n){return this.filter(s.tag_name(t),e,r,n)},e.getElementsByTagType=function(t,e,r,n){return this.filter(s.tag_type(t),e,r,n)}},function(t,e){e.removeSubsets=function(t){for(var e,r,n,i=t.length;--i>-1;){for(e=r=t[i],t[i]=null,n=!0;r;){if(t.indexOf(r)>-1){n=!1,t.splice(i,1);break}r=r.parent}n&&(t[i]=e)}return t};var r={DISCONNECTED:1,PRECEDING:2,FOLLOWING:4,CONTAINS:8,CONTAINED_BY:16},n=e.compareDocumentPosition=function(t,e){var n,i,o,a,s,u,c=[],l=[];if(t===e)return 0;for(n=t;n;)c.unshift(n),n=n.parent;for(n=e;n;)l.unshift(n),n=n.parent;for(u=0;c[u]===l[u];)u++;return 0===u?r.DISCONNECTED:(i=c[u-1],o=i.children,a=c[u],s=l[u],o.indexOf(a)>o.indexOf(s)?i===e?r.FOLLOWING|r.CONTAINED_BY:r.FOLLOWING:i===t?r.PRECEDING|r.CONTAINS:r.PRECEDING)};e.uniqueSort=function(t){var e,i,o=t.length;for(t=t.slice();--o>-1;)e=t[o],(i=t.indexOf(e))>-1&&i-1;)if(r=o+t.length,(0===o||l.test(i[o-1]))&&(r===i.length||l.test(i[r])))return!0})},e.addClass=function(t){if("function"==typeof t)return a(this,function(r,n){var i=n.attribs.class||"";e.addClass.call([n],t.call(n,r,i))});if(!t||"string"!=typeof t)return this;for(var r=t.split(l),n=this.length,i=0;i=0&&(u.splice(a,1),s=!0,c--);s&&(e.attribs.class=u.join(" "))}}))},e.toggleClass=function(t,r){if("function"==typeof t)return a(this,function(n,i){e.toggleClass.call([i],t.call(i,n,i.attribs.class||"",r),r)});if(!t||"string"!=typeof t)return this;for(var n,i,s=t.split(l),u=s.length,c="boolean"==typeof r?r?1:-1:0,f=this.length,h=0;h=0&&i<0?n.push(s[p]):c<=0&&i>=0&&n.splice(i,1);this[h].attribs.class=n.join(" ")}return this},e.is=function(t){return!!t&&this.filter(t).length>0}},function(t,e,r){var n=r(86),i=r(87);t.exports=function(t){return i(n(t))},t.exports.parse=n,t.exports.compile=i},function(t,e){function r(t){if("even"===(t=t.trim().toLowerCase()))return[2,0];if("odd"===t)return[2,1];var e=t.match(n);if(!e)throw new SyntaxError("n-th rule couldn't be parsed ('"+t+"')");var r;return e[1]?(r=parseInt(e[1],10),isNaN(r)&&(r="-"===e[1].charAt(0)?-1:1)):r=0,[r,e[3]?parseInt((e[2]||"")+e[3],10):0]}t.exports=r;var n=/^([+\-]?\d*n)?\s*(?:([+\-]?)\s*(\d+))?$/},function(t,e,r){function n(t){var e=t[0],r=t[1]-1;if(r<0&&e<=0)return a;if(-1===e)return function(t){return t<=r};if(0===e)return function(t){return t===r};if(1===e)return r<0?o:function(t){return t>=r};var n=r%e;return n<0&&(n+=e),e>1?function(t){return t>=r&&t%e===n}:(e*=-1,function(t){return t<=r&&t%e===n})}t.exports=n;var i=r(11),o=i.trueFunc,a=i.falseFunc},function(t,e,r){function n(t,e,r){return i(o(t,e,r))}function i(t){return function(e){return g(e)&&t(e)}}function o(t,e,r){return u(p(t,e),e,r)}function a(t){return"pseudo"===t.type&&("scope"===t.name||Array.isArray(t.data)&&t.data.some(function(t){return t.some(a)}))}function s(t,e){var r=!!e&&!!e.length&&e.every(function(t){return t===j||!!k(t)});t.forEach(function(t){if(t.length>0&&c(t[0])&&"descendant"!==t[0].type);else{if(!r||a(t))return;t.unshift(x)}t.unshift(S)})}function u(t,e,r){t=t.filter(function(t){return t.length>0}),t.forEach(y);var n=Array.isArray(r);return r=e&&e.context||r,r&&!n&&(r=[r]),s(t,r),t.map(function(t){return l(t,e,r,n)}).reduce(f,_)}function c(t){return w[t.type]<0}function l(t,e,r,n){var i=n&&"scope"===t[0].name&&"descendant"===t[1].type;return t.reduce(function(t,n,o){return t===_?t:v[n.type](t,n,e,r,i&&1===o)},e&&e.rootFunc||m)}function f(t,e){return e===_||t===m?t:t===_||e===m?e:function(r){return t(r)||e(r)}}function h(t){return t.some(c)}t.exports=n,t.exports.compileUnsafe=o,t.exports.compileToken=u;var p=r(89),d=r(4),g=d.isTag,v=r(90),y=r(91),b=r(11),m=b.trueFunc,_=b.falseFunc,w=r(44),x={type:"descendant"},S={type:"pseudo",name:"scope"},j={},k=d.getParent,A=r(26),E=A.filters,T=d.existsOne,g=d.isTag,O=d.getChildren;E.not=function(t,e,r,n){var i={xmlMode:!(!r||!r.xmlMode),strict:!(!r||!r.strict)};if(i.strict&&(e.length>1||e.some(h)))throw new SyntaxError("complex selectors in :not aren't allowed in strict mode");var o=u(e,i,n);return o===_?t:o===m?_:function(e){return!o(e)&&t(e)}},E.has=function(t,e,r){var n={xmlMode:!(!r||!r.xmlMode),strict:!(!r||!r.strict)},o=e.some(h)?[j]:null,a=u(e,n,o);return a===_?_:a===m?function(e){return O(e).some(g)&&t(e)}:(a=i(a),o?function(e){return t(e)&&(o[0]=e,T(a,O(e)))}:function(e){return t(e)&&T(a,O(e))})},E.matches=function(t,e,r,n){return u(e,{xmlMode:!(!r||!r.xmlMode),strict:!(!r||!r.strict),rootFunc:t},n)}},function(t,e,r){"use strict";function n(t,e,r){var n="0x"+e-65536;return n!==n||r?e:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)}function i(t){return t.replace(l,n)}function o(t){return" "===t||"\n"===t||"\t"===t||"\f"===t||"\r"===t}function a(t,e){var r=[];if(""!==(t=s(r,t+"",e)))throw new SyntaxError("Unmatched selector: "+t);return r}function s(t,e,r){function n(){var t=e.match(c)[0];return e=e.substr(t.length),i(t)}function a(t){for(;o(e.charAt(t));)t++;e=e.substr(t)}var l,b,m,_,w=[],x=!1;for(a(0);""!==e;)if(b=e.charAt(0),o(b))x=!0,a(1);else if(b in p)w.push({type:p[b]}),x=!1,a(1);else if(","===b){if(0===w.length)throw new SyntaxError("empty sub-selector");t.push(w),w=[],x=!1,a(1)}else if(x&&(w.length>0&&w.push({type:"descendant"}),x=!1),"*"===b)e=e.substr(1),w.push({type:"universal"});else if(b in d)e=e.substr(1),w.push({type:"attribute",name:d[b][0],action:d[b][1],value:n(),ignoreCase:!1});else if("["===b){if(e=e.substr(1),!(l=e.match(f)))throw new SyntaxError("Malformed attribute selector: "+e);e=e.substr(l[0].length),m=i(l[1]),r&&("lowerCaseAttributeNames"in r?!r.lowerCaseAttributeNames:r.xmlMode)||(m=m.toLowerCase()),w.push({type:"attribute",name:m,action:h[l[2]],value:i(l[4]||l[5]||""),ignoreCase:!!l[6]})}else if(":"===b){if(":"===e.charAt(1)){e=e.substr(2),w.push({type:"pseudo-element",name:n().toLowerCase()});continue}if(e=e.substr(1),m=n().toLowerCase(),l=null,"("===e.charAt(0))if(m in g){_=e.charAt(1);var S=_ in y;if(e=e.substr(S+1),l=[],e=s(l,e,r),S){if(e.charAt(0)!==_)throw new SyntaxError("unmatched quotes in :"+m);e=e.substr(1)}if(")"!==e.charAt(0))throw new SyntaxError("missing closing parenthesis in :"+m+" "+e);e=e.substr(1)}else{for(var j=1,k=1;k>0&&j0&&0===e.length)throw new SyntaxError("empty sub-selector");t.push(e)}t.exports=a;var c=/^(?:\\.|[\w\-\u00c0-\uFFFF])+/,l=/\\([\da-f]{1,6}\s?|(\s)|.)/gi,f=/^\s*((?:\\.|[\w\u00c0-\uFFFF\-])+)\s*(?:(\S?)=\s*(?:(['"])(.*?)\3|(#?(?:\\.|[\w\u00c0-\uFFFF\-])*)|)|)\s*(i)?\]/,h={__proto__:null,undefined:"exists","":"equals","~":"element","^":"start",$:"end","*":"any","!":"not","|":"hyphen"},p={__proto__:null,">":"child","<":"parent","~":"sibling","+":"adjacent"},d={__proto__:null,"#":["id","equals"],".":["class","element"]},g={__proto__:null,has:!0,not:!0,matches:!0},v={__proto__:null,contains:!0,icontains:!0},y={__proto__:null,'"':!0,"'":!0}},function(t,e,r){var n=r(4),i=n.isTag,o=n.getParent,a=n.getChildren,s=n.getSiblings,u=n.getName;t.exports={__proto__:null,attribute:r(43).compile,pseudo:r(26).compile,tag:function(t,e){var r=e.name;return function(e){return u(e)===r&&t(e)}},descendant:function(t,e,r,n,i){return function(e){if(i&&t(e))return!0;for(var r=!1;!r&&(e=o(e));)r=t(e);return r}},parent:function(t,e,r){function n(e){return i(e)&&t(e)}if(r&&r.strict)throw SyntaxError("Parent selector isn't part of CSS3");return function(t){return a(t).some(n)}},child:function(t){return function(e){var r=o(e);return!!r&&t(r)}},sibling:function(t){return function(e){for(var r=s(e),n=0;n=0&&n>=1);else if(e===o.pseudo)if(t.data)if("has"===t.name||"contains"===t.name)e=0;else if("matches"===t.name||"not"===t.name){e=0;for(var r=0;re&&(e=n)}t.data.length>1&&e>0&&(e-=1)}else e=1;else e=3;return e}t.exports=n;var o=r(44),a={__proto__:null,exists:10,equals:8,not:7,start:6,end:6,any:5,hyphen:4,element:4}},function(t,e,r){(function(t,r){function n(t,e){return t.set(e[0],e[1]),t}function i(t,e){return t.add(e),t}function o(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function a(t,e){for(var r=-1,n=t?t.length:0;++r-1}function A(t,e){var r=this.__data__,n=V(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function E(t){var e=-1,r=t?t.length:0;for(this.clear();++e-1&&t%1==0&&t-1&&t%1==0&&t<=Ft}function Ct(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Bt(t){return!!t&&"object"==typeof t}function Dt(t){if(!Bt(t)||Pe.call(t)!=Jt||f(t))return!1;var e=Ue(t);if(null===e)return!0;var r=De.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&Be.call(r)==Re}function Rt(t){return lt(t,qt(t))}function Pt(t){return Et(t)?N(t):Q(t)}function qt(t){return Et(t)?N(t,!0):X(t)}function Mt(){return[]}function It(){return!1}var Nt=200,Ut="__lodash_hash_undefined__",Ft=9007199254740991,Vt="[object Arguments]",$t="[object Boolean]",zt="[object Date]",Ht="[object Function]",Wt="[object GeneratorFunction]",Gt="[object Map]",Yt="[object Number]",Jt="[object Object]",Qt="[object RegExp]",Xt="[object Set]",Zt="[object String]",Kt="[object Symbol]",te="[object WeakMap]",ee="[object ArrayBuffer]",re="[object DataView]",ne="[object Float32Array]",ie="[object Float64Array]",oe="[object Int8Array]",ae="[object Int16Array]",se="[object Int32Array]",ue="[object Uint8Array]",ce="[object Uint8ClampedArray]",le="[object Uint16Array]",fe="[object Uint32Array]",he=/[\\^$.*+?()[\]{}|]/g,pe=/\w*$/,de=/^\[object .+?Constructor\]$/,ge=/^(?:0|[1-9]\d*)$/,ve={};ve[ne]=ve[ie]=ve[oe]=ve[ae]=ve[se]=ve[ue]=ve[ce]=ve[le]=ve[fe]=!0,ve[Vt]=ve["[object Array]"]=ve[ee]=ve[$t]=ve[re]=ve[zt]=ve["[object Error]"]=ve[Ht]=ve[Gt]=ve[Yt]=ve[Jt]=ve[Qt]=ve[Xt]=ve[Zt]=ve[te]=!1;var ye={};ye[Vt]=ye["[object Array]"]=ye[ee]=ye[re]=ye[$t]=ye[zt]=ye[ne]=ye[ie]=ye[oe]=ye[ae]=ye[se]=ye[Gt]=ye[Yt]=ye[Jt]=ye[Qt]=ye[Xt]=ye[Zt]=ye[Kt]=ye[ue]=ye[ce]=ye[le]=ye[fe]=!0,ye["[object Error]"]=ye[Ht]=ye[te]=!1;var be="object"==typeof t&&t&&t.Object===Object&&t,me="object"==typeof self&&self&&self.Object===Object&&self,_e=be||me||Function("return this")(),we="object"==typeof e&&e&&!e.nodeType&&e,xe=we&&"object"==typeof r&&r&&!r.nodeType&&r,Se=xe&&xe.exports===we,je=Se&&be.process,ke=function(){try{return je&&je.binding("util")}catch(t){}}(),Ae=ke&&ke.isTypedArray,Ee=Array.prototype,Te=Function.prototype,Oe=Object.prototype,Le=_e["__core-js_shared__"],Ce=function(){var t=/[^.]+$/.exec(Le&&Le.keys&&Le.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),Be=Te.toString,De=Oe.hasOwnProperty,Re=Be.call(Object),Pe=Oe.toString,qe=RegExp("^"+Be.call(De).replace(he,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Me=Se?_e.Buffer:void 0,Ie=_e.Symbol,Ne=_e.Uint8Array,Ue=p(Object.getPrototypeOf,Object),Fe=Object.create,Ve=Oe.propertyIsEnumerable,$e=Ee.splice,ze=Object.getOwnPropertySymbols,He=Me?Me.isBuffer:void 0,We=p(Object.keys,Object),Ge=Math.max,Ye=dt(_e,"DataView"),Je=dt(_e,"Map"),Qe=dt(_e,"Promise"),Xe=dt(_e,"Set"),Ze=dt(_e,"WeakMap"),Ke=dt(Object,"create"),tr=jt(Ye),er=jt(Je),rr=jt(Qe),nr=jt(Xe),ir=jt(Ze),or=Ie?Ie.prototype:void 0,ar=or?or.valueOf:void 0;g.prototype.clear=v,g.prototype.delete=y,g.prototype.get=b,g.prototype.has=m,g.prototype.set=_,w.prototype.clear=x,w.prototype.delete=S,w.prototype.get=j,w.prototype.has=k,w.prototype.set=A,E.prototype.clear=T,E.prototype.delete=O,E.prototype.get=L,E.prototype.has=C,E.prototype.set=B,D.prototype.clear=R,D.prototype.delete=P,D.prototype.get=q,D.prototype.has=M,D.prototype.set=I;var sr=ze?p(ze,Object):Mt,ur=G;(Ye&&ur(new Ye(new ArrayBuffer(1)))!=re||Je&&ur(new Je)!=Gt||Qe&&"[object Promise]"!=ur(Qe.resolve())||Xe&&ur(new Xe)!=Xt||Ze&&ur(new Ze)!=te)&&(ur=function(t){var e=Pe.call(t),r=e==Jt?t.constructor:void 0,n=r?jt(r):void 0;if(n)switch(n){case tr:return re;case er:return Gt;case rr:return"[object Promise]";case nr:return Xt;case ir:return te}return e});var cr=Array.isArray,lr=He||It,fr=Ae?function(t){return function(e){return t(e)}}(Ae):J,hr=function(t){return tt(function(e,r){var n=-1,i=r.length,o=i>1?r[i-1]:void 0,a=i>2?r[2]:void 0;for(o=t.length>3&&"function"==typeof o?(i--,o):void 0,a&&mt(r[0],r[1],a)&&(o=i<3?void 0:o,i=1),e=Object(e);++n-1}function w(t,e){var r=this.__data__,n=I(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function x(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&Nt?new T:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Vt}function Et(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Tt(t){return!!t&&"object"==typeof t}function Ot(t){return"symbol"==typeof t||Tt(t)&&Le.call(t)==re}function Lt(t){return null==t?"":tt(t)}function Ct(t,e,r){var n=null==t?void 0:U(t,e);return void 0===n?r:n}function Bt(t,e){return null!=t&&ut(t,e,V)}function Dt(t){return St(t)?M(t):J(t)}function Rt(t){return t}function Pt(t){return ft(t)?i(yt(t)):Z(t)}var qt=200,Mt="Expected a function",It="__lodash_hash_undefined__",Nt=1,Ut=2,Ft=1/0,Vt=9007199254740991,$t="[object Arguments]",zt="[object Array]",Ht="[object Boolean]",Wt="[object Date]",Gt="[object Error]",Yt="[object Function]",Jt="[object GeneratorFunction]",Qt="[object Map]",Xt="[object Number]",Zt="[object Object]",Kt="[object RegExp]",te="[object Set]",ee="[object String]",re="[object Symbol]",ne="[object ArrayBuffer]",ie="[object DataView]",oe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ae=/^\w*$/,se=/^\./,ue=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ce=/[\\^$.*+?()[\]{}|]/g,le=/\\(\\)?/g,fe=/^\[object .+?Constructor\]$/,he=/^(?:0|[1-9]\d*)$/,pe={};pe["[object Float32Array]"]=pe["[object Float64Array]"]=pe["[object Int8Array]"]=pe["[object Int16Array]"]=pe["[object Int32Array]"]=pe["[object Uint8Array]"]=pe["[object Uint8ClampedArray]"]=pe["[object Uint16Array]"]=pe["[object Uint32Array]"]=!0,pe[$t]=pe[zt]=pe[ne]=pe[Ht]=pe[ie]=pe[Wt]=pe[Gt]=pe[Yt]=pe[Qt]=pe[Xt]=pe[Zt]=pe[Kt]=pe[te]=pe[ee]=pe["[object WeakMap]"]=!1;var de="object"==typeof t&&t&&t.Object===Object&&t,ge="object"==typeof self&&self&&self.Object===Object&&self,ve=de||ge||Function("return this")(),ye="object"==typeof e&&e&&!e.nodeType&&e,be=ye&&"object"==typeof r&&r&&!r.nodeType&&r,me=be&&be.exports===ye,_e=me&&de.process,we=function(){try{return _e&&_e.binding("util")}catch(t){}}(),xe=we&&we.isTypedArray,Se=Array.prototype,je=Function.prototype,ke=Object.prototype,Ae=ve["__core-js_shared__"],Ee=function(){var t=/[^.]+$/.exec(Ae&&Ae.keys&&Ae.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),Te=je.toString,Oe=ke.hasOwnProperty,Le=ke.toString,Ce=RegExp("^"+Te.call(Oe).replace(ce,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Be=ve.Symbol,De=ve.Uint8Array,Re=ke.propertyIsEnumerable,Pe=Se.splice,qe=function(t,e){return function(r){return t(e(r))}}(Object.keys,Object),Me=st(ve,"DataView"),Ie=st(ve,"Map"),Ne=st(ve,"Promise"),Ue=st(ve,"Set"),Fe=st(ve,"WeakMap"),Ve=st(Object,"create"),$e=bt(Me),ze=bt(Ie),He=bt(Ne),We=bt(Ue),Ge=bt(Fe),Ye=Be?Be.prototype:void 0,Je=Ye?Ye.valueOf:void 0,Qe=Ye?Ye.toString:void 0;l.prototype.clear=f,l.prototype.delete=h,l.prototype.get=p,l.prototype.has=d,l.prototype.set=g,v.prototype.clear=y,v.prototype.delete=b,v.prototype.get=m,v.prototype.has=_,v.prototype.set=w,x.prototype.clear=S,x.prototype.delete=j,x.prototype.get=k,x.prototype.has=A,x.prototype.set=E,T.prototype.add=T.prototype.push=O,T.prototype.has=L,C.prototype.clear=B,C.prototype.delete=D,C.prototype.get=R,C.prototype.has=P,C.prototype.set=q;var Xe=function(t,e){return function(r,n){if(null==r)return r;if(!St(r))return t(r,n);for(var i=r.length,o=e?i:-1,a=Object(r);(e?o--:++o0})},e.first=function(){return this.length>1?this._make(this[0]):this},e.last=function(){return this.length>1?this._make(this[this.length-1]):this},e.eq=function(t){return 0===(t=+t)&&this.length<=1?this:(t<0&&(t=this.length+t),this[t]?this._make(this[t]):this._make([]))},e.get=function(t){return null==t?Array.prototype.slice.call(this):this[t<0?this.length+t:t]},e.index=function(t){var e,r;return 0===arguments.length?(e=this.parent().children(),r=this[0]):"string"==typeof t?(e=this._make(t),r=this[0]):(e=this,r=t.cheerio?t[0]:t),e.get().indexOf(r)},e.slice=function(){return this._make([].slice.apply(this,arguments))},e.end=function(){return this.prevObject||this._make([])},e.add=function(t,e){for(var r=this._make(t,e),n=s(r.get().concat(this.get())),i=0;i-1}function x(t,e){var r=this.__data__,n=N(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function S(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&Ut?new O:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=$t}function Tt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Ot(t){return!!t&&"object"==typeof t}function Lt(t){return"symbol"==typeof t||Ot(t)&&Ce.call(t)==ne}function Ct(t){return null==t?"":et(t)}function Bt(t,e,r){var n=null==t?void 0:V(t,e);return void 0===n?r:n}function Dt(t,e){return null!=t&&ct(t,e,z)}function Rt(t){return jt(t)?I(t):X(t)}function Pt(t){return t}function qt(t){return ft(t)?o(yt(t)):tt(t)}var Mt=200,It="Expected a function",Nt="__lodash_hash_undefined__",Ut=1,Ft=2,Vt=1/0,$t=9007199254740991,zt="[object Arguments]",Ht="[object Array]",Wt="[object Boolean]",Gt="[object Date]",Yt="[object Error]",Jt="[object Function]",Qt="[object GeneratorFunction]",Xt="[object Map]",Zt="[object Number]",Kt="[object Object]",te="[object RegExp]",ee="[object Set]",re="[object String]",ne="[object Symbol]",ie="[object ArrayBuffer]",oe="[object DataView]",ae=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,se=/^\w*$/,ue=/^\./,ce=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,le=/[\\^$.*+?()[\]{}|]/g,fe=/\\(\\)?/g,he=/^\[object .+?Constructor\]$/,pe=/^(?:0|[1-9]\d*)$/,de={};de["[object Float32Array]"]=de["[object Float64Array]"]=de["[object Int8Array]"]=de["[object Int16Array]"]=de["[object Int32Array]"]=de["[object Uint8Array]"]=de["[object Uint8ClampedArray]"]=de["[object Uint16Array]"]=de["[object Uint32Array]"]=!0,de[zt]=de[Ht]=de[ie]=de[Wt]=de[oe]=de[Gt]=de[Yt]=de[Jt]=de[Xt]=de[Zt]=de[Kt]=de[te]=de[ee]=de[re]=de["[object WeakMap]"]=!1;var ge="object"==typeof t&&t&&t.Object===Object&&t,ve="object"==typeof self&&self&&self.Object===Object&&self,ye=ge||ve||Function("return this")(),be="object"==typeof e&&e&&!e.nodeType&&e,me=be&&"object"==typeof r&&r&&!r.nodeType&&r,_e=me&&me.exports===be,we=_e&&ge.process,xe=function(){try{return we&&we.binding("util")}catch(t){}}(),Se=xe&&xe.isTypedArray,je=Array.prototype,ke=Function.prototype,Ae=Object.prototype,Ee=ye["__core-js_shared__"],Te=function(){var t=/[^.]+$/.exec(Ee&&Ee.keys&&Ee.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),Oe=ke.toString,Le=Ae.hasOwnProperty,Ce=Ae.toString,Be=RegExp("^"+Oe.call(Le).replace(le,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),De=ye.Symbol,Re=ye.Uint8Array,Pe=Ae.propertyIsEnumerable,qe=je.splice,Me=function(t,e){return function(r){return t(e(r))}}(Object.keys,Object),Ie=ut(ye,"DataView"),Ne=ut(ye,"Map"),Ue=ut(ye,"Promise"),Fe=ut(ye,"Set"),Ve=ut(ye,"WeakMap"),$e=ut(Object,"create"),ze=bt(Ie),He=bt(Ne),We=bt(Ue),Ge=bt(Fe),Ye=bt(Ve),Je=De?De.prototype:void 0,Qe=Je?Je.valueOf:void 0,Xe=Je?Je.toString:void 0;f.prototype.clear=h,f.prototype.delete=p,f.prototype.get=d,f.prototype.has=g,f.prototype.set=v,y.prototype.clear=b,y.prototype.delete=m,y.prototype.get=_,y.prototype.has=w,y.prototype.set=x,S.prototype.clear=j,S.prototype.delete=k,S.prototype.get=A,S.prototype.has=E,S.prototype.set=T,O.prototype.add=O.prototype.push=L,O.prototype.has=C,B.prototype.clear=D,B.prototype.delete=R,B.prototype.get=P,B.prototype.has=q,B.prototype.set=M;var Ze=function(t,e){return function(r,n){if(null==r)return r;if(!jt(r))return t(r,n);for(var i=r.length,o=e?i:-1,a=Object(r);(e?o--:++o-1}function x(t,e){var r=this.__data__,n=N(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function S(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&Nt?new O:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Vt}function Et(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Tt(t){return!!t&&"object"==typeof t}function Ot(t){return"symbol"==typeof t||Tt(t)&&Le.call(t)==re}function Lt(t){return null==t?"":et(t)}function Ct(t,e,r){var n=null==t?void 0:V(t,e);return void 0===n?r:n}function Bt(t,e){return null!=t&&ct(t,e,z)}function Dt(t){return St(t)?I(t):X(t)}function Rt(t){return t}function Pt(t){return ft(t)?o(yt(t)):tt(t)}var qt=200,Mt="Expected a function",It="__lodash_hash_undefined__",Nt=1,Ut=2,Ft=1/0,Vt=9007199254740991,$t="[object Arguments]",zt="[object Array]",Ht="[object Boolean]",Wt="[object Date]",Gt="[object Error]",Yt="[object Function]",Jt="[object GeneratorFunction]",Qt="[object Map]",Xt="[object Number]",Zt="[object Object]",Kt="[object RegExp]",te="[object Set]",ee="[object String]",re="[object Symbol]",ne="[object ArrayBuffer]",ie="[object DataView]",oe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ae=/^\w*$/,se=/^\./,ue=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ce=/[\\^$.*+?()[\]{}|]/g,le=/\\(\\)?/g,fe=/^\[object .+?Constructor\]$/,he=/^(?:0|[1-9]\d*)$/,pe={};pe["[object Float32Array]"]=pe["[object Float64Array]"]=pe["[object Int8Array]"]=pe["[object Int16Array]"]=pe["[object Int32Array]"]=pe["[object Uint8Array]"]=pe["[object Uint8ClampedArray]"]=pe["[object Uint16Array]"]=pe["[object Uint32Array]"]=!0,pe[$t]=pe[zt]=pe[ne]=pe[Ht]=pe[ie]=pe[Wt]=pe[Gt]=pe[Yt]=pe[Qt]=pe[Xt]=pe[Zt]=pe[Kt]=pe[te]=pe[ee]=pe["[object WeakMap]"]=!1;var de="object"==typeof t&&t&&t.Object===Object&&t,ge="object"==typeof self&&self&&self.Object===Object&&self,ve=de||ge||Function("return this")(),ye="object"==typeof e&&e&&!e.nodeType&&e,be=ye&&"object"==typeof r&&r&&!r.nodeType&&r,me=be&&be.exports===ye,_e=me&&de.process,we=function(){try{return _e&&_e.binding("util")}catch(t){}}(),xe=we&&we.isTypedArray,Se=Array.prototype,je=Function.prototype,ke=Object.prototype,Ae=ve["__core-js_shared__"],Ee=function(){var t=/[^.]+$/.exec(Ae&&Ae.keys&&Ae.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),Te=je.toString,Oe=ke.hasOwnProperty,Le=ke.toString,Ce=RegExp("^"+Te.call(Oe).replace(ce,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Be=ve.Symbol,De=ve.Uint8Array,Re=ke.propertyIsEnumerable,Pe=Se.splice,qe=function(t,e){return function(r){return t(e(r))}}(Object.keys,Object),Me=ut(ve,"DataView"),Ie=ut(ve,"Map"),Ne=ut(ve,"Promise"),Ue=ut(ve,"Set"),Fe=ut(ve,"WeakMap"),Ve=ut(Object,"create"),$e=bt(Me),ze=bt(Ie),He=bt(Ne),We=bt(Ue),Ge=bt(Fe),Ye=Be?Be.prototype:void 0,Je=Ye?Ye.valueOf:void 0,Qe=Ye?Ye.toString:void 0;f.prototype.clear=h,f.prototype.delete=p,f.prototype.get=d,f.prototype.has=g,f.prototype.set=v,y.prototype.clear=b,y.prototype.delete=m,y.prototype.get=_,y.prototype.has=w,y.prototype.set=x,S.prototype.clear=j,S.prototype.delete=k,S.prototype.get=A,S.prototype.has=E,S.prototype.set=T,O.prototype.add=O.prototype.push=L,O.prototype.has=C,B.prototype.clear=D,B.prototype.delete=R,B.prototype.get=P,B.prototype.has=q,B.prototype.set=M;var Xe=function(t,e){return function(r,n){if(null==r)return r;if(!St(r))return t(r,n);for(var i=r.length,o=e?i:-1,a=Object(r);(e?o--:++o-1}function S(t,e){var r=this.__data__,n=U(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function j(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&Nt?new L:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Vt}function Et(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Tt(t){return!!t&&"object"==typeof t}function Ot(t){return"symbol"==typeof t||Tt(t)&&Le.call(t)==re}function Lt(t){return null==t?"":et(t)}function Ct(t,e,r){var n=null==t?void 0:V(t,e);return void 0===n?r:n}function Bt(t,e){return null!=t&&ct(t,e,z)}function Dt(t){return St(t)?N(t):X(t)}function Rt(t){return t}function Pt(t){return ft(t)?o(yt(t)):tt(t)}var qt=200,Mt="Expected a function",It="__lodash_hash_undefined__",Nt=1,Ut=2,Ft=1/0,Vt=9007199254740991,$t="[object Arguments]",zt="[object Array]",Ht="[object Boolean]",Wt="[object Date]",Gt="[object Error]",Yt="[object Function]",Jt="[object GeneratorFunction]",Qt="[object Map]",Xt="[object Number]",Zt="[object Object]",Kt="[object RegExp]",te="[object Set]",ee="[object String]",re="[object Symbol]",ne="[object ArrayBuffer]",ie="[object DataView]",oe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ae=/^\w*$/,se=/^\./,ue=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ce=/[\\^$.*+?()[\]{}|]/g,le=/\\(\\)?/g,fe=/^\[object .+?Constructor\]$/,he=/^(?:0|[1-9]\d*)$/,pe={};pe["[object Float32Array]"]=pe["[object Float64Array]"]=pe["[object Int8Array]"]=pe["[object Int16Array]"]=pe["[object Int32Array]"]=pe["[object Uint8Array]"]=pe["[object Uint8ClampedArray]"]=pe["[object Uint16Array]"]=pe["[object Uint32Array]"]=!0,pe[$t]=pe[zt]=pe[ne]=pe[Ht]=pe[ie]=pe[Wt]=pe[Gt]=pe[Yt]=pe[Qt]=pe[Xt]=pe[Zt]=pe[Kt]=pe[te]=pe[ee]=pe["[object WeakMap]"]=!1;var de="object"==typeof t&&t&&t.Object===Object&&t,ge="object"==typeof self&&self&&self.Object===Object&&self,ve=de||ge||Function("return this")(),ye="object"==typeof e&&e&&!e.nodeType&&e,be=ye&&"object"==typeof r&&r&&!r.nodeType&&r,me=be&&be.exports===ye,_e=me&&de.process,we=function(){try{return _e&&_e.binding("util")}catch(t){}}(),xe=we&&we.isTypedArray,Se=Array.prototype,je=Function.prototype,ke=Object.prototype,Ae=ve["__core-js_shared__"],Ee=function(){var t=/[^.]+$/.exec(Ae&&Ae.keys&&Ae.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),Te=je.toString,Oe=ke.hasOwnProperty,Le=ke.toString,Ce=RegExp("^"+Te.call(Oe).replace(ce,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Be=ve.Symbol,De=ve.Uint8Array,Re=ke.propertyIsEnumerable,Pe=Se.splice,qe=function(t,e){return function(r){return t(e(r))}}(Object.keys,Object),Me=ut(ve,"DataView"),Ie=ut(ve,"Map"),Ne=ut(ve,"Promise"),Ue=ut(ve,"Set"),Fe=ut(ve,"WeakMap"),Ve=ut(Object,"create"),$e=bt(Me),ze=bt(Ie),He=bt(Ne),We=bt(Ue),Ge=bt(Fe),Ye=Be?Be.prototype:void 0,Je=Ye?Ye.valueOf:void 0,Qe=Ye?Ye.toString:void 0;h.prototype.clear=p,h.prototype.delete=d,h.prototype.get=g,h.prototype.has=v,h.prototype.set=y,b.prototype.clear=m,b.prototype.delete=_,b.prototype.get=w,b.prototype.has=x,b.prototype.set=S,j.prototype.clear=k,j.prototype.delete=A,j.prototype.get=E,j.prototype.has=T,j.prototype.set=O,L.prototype.add=L.prototype.push=C,L.prototype.has=B,D.prototype.clear=R,D.prototype.delete=P,D.prototype.get=q,D.prototype.has=M,D.prototype.set=I;var Xe=function(t,e){return function(r,n){if(null==r)return r;if(!St(r))return t(r,n);for(var i=r.length,o=e?i:-1,a=Object(r);(e?o--:++o-1&&(c.children.splice(s,1),i===c&&e>s&&l[0]--),u.root=null,u.parent=i,u.prev&&(u.prev.next=u.next||null),u.next&&(u.next.prev=u.prev||null),u.prev=n[o-1]||f,u.next=n[o+1]||h;return f&&(f.next=n[0]),h&&(h.prev=n[n.length-1]),t.splice.apply(t,l)};e.appendTo=function(t){return t.cheerio||(t=this.constructor.call(this.constructor,t,null,this._originalRoot)),t.append(this),this},e.prependTo=function(t){return t.cheerio||(t=this.constructor.call(this.constructor,t,null,this._originalRoot)),t.prepend(this),this},e.append=p(function(t,e,r){d(e,e.length,0,t,r)}),e.prepend=p(function(t,e,r){d(e,0,0,t,r)}),e.wrap=function(t){var e="function"==typeof t&&t,r=this.length-1;return h.forEach(this,h.bind(function(n,i){var a,s,u=n.parent||n.root,c=u.children;u&&(e&&(t=e.call(n,i)),"string"!=typeof t||l(t)||(t=this.parents().last().find(t).clone()),a=this._makeDomArray(t,i0&&o(l)?e>1?n(l,e-1,o,a,s):r(s,l):a||(s[s.length]=l)}return s}function i(t){return A(t)||a(t)||!!(k&&t&&t[k])}function o(t){return(t?t.length:0)?n(t,1):[]}function a(t){return u(t)&&w.call(t,"callee")&&(!j.call(t,"callee")||x.call(t)==d)}function s(t){return null!=t&&l(t.length)&&!c(t)}function u(t){return h(t)&&s(t)}function c(t){var e=f(t)?x.call(t):"";return e==g||e==v}function l(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=p}function f(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function h(t){return!!t&&"object"==typeof t}var p=9007199254740991,d="[object Arguments]",g="[object Function]",v="[object GeneratorFunction]",y="object"==typeof e&&e&&e.Object===Object&&e,b="object"==typeof self&&self&&self.Object===Object&&self,m=y||b||Function("return this")(),_=Object.prototype,w=_.hasOwnProperty,x=_.toString,S=m.Symbol,j=_.propertyIsEnumerable,k=S?S.isConcatSpreadable:void 0,A=Array.isArray;t.exports=o}).call(e,r(0))},function(t,e,r){function n(t,e,r,a){if("string"==typeof e){var s=i(t);"function"==typeof r&&(r=r.call(t,a,s[e])),""===r?delete s[e]:null!=r&&(s[e]=r),t.attribs.style=o(s)}else"object"==typeof e&&Object.keys(e).forEach(function(r){n(t,r,e[r])})}function i(t,e){var r=a(t.attribs.style);return"string"==typeof e?r[e]:Array.isArray(e)?u.pick(r,e):r}function o(t){return Object.keys(t||{}).reduce(function(e,r){return e+=(e?" ":"")+r+": "+t[r]+";"},"")}function a(t){return t=(t||"").trim(),t?t.split(";").reduce(function(t,e){var r=e.indexOf(":");return r<1||r===e.length-1?t:(t[e.slice(0,r).trim()]=e.slice(r+1).trim(),t)},{}):{}}var s=r(10).domEach,u={pick:r(101)},c=Object.prototype.toString;e.css=function(t,e){return 2===arguments.length||"[object Object]"===c.call(t)?s(this,function(r,i){n(i,t,e,r)}):i(this[0],t)}},function(t,e,r){(function(e){function r(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function n(t,e){for(var r=-1,n=t?t.length:0,i=Array(n);++r0&&r(l)?e>1?o(l,e-1,r,n,a):i(a,l):n||(a[a.length]=l)}return a}function a(t,e){return t=Object(t),s(t,e,function(e,r){return r in t})}function s(t,e,r){for(var n=-1,i=e.length,o={};++n-1&&t%1==0&&t<=m}function g(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function v(t){return!!t&&"object"==typeof t}function y(t){return"symbol"==typeof t||v(t)&&O.call(t)==S}var b=1/0,m=9007199254740991,_="[object Arguments]",w="[object Function]",x="[object GeneratorFunction]",S="[object Symbol]",j="object"==typeof e&&e&&e.Object===Object&&e,k="object"==typeof self&&self&&self.Object===Object&&self,A=j||k||Function("return this")(),E=Object.prototype,T=E.hasOwnProperty,O=E.toString,L=A.Symbol,C=E.propertyIsEnumerable,B=L?L.isConcatSpreadable:void 0,D=Math.max,R=Array.isArray,P=function(t,e){return e=D(void 0===e?t.length-1:e,0),function(){for(var n=arguments,i=-1,o=D(n.length-e,0),a=Array(o);++i-1}function x(t,e){var r=this.__data__,n=N(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}function S(t){var e=-1,r=t?t.length:0;for(this.clear();++eu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var f=-1,h=!0,p=o&Nt?new O:void 0;for(a.set(t,e),a.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Vt}function Et(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Tt(t){return!!t&&"object"==typeof t}function Ot(t){return"symbol"==typeof t||Tt(t)&&Le.call(t)==re}function Lt(t){return null==t?"":et(t)}function Ct(t,e,r){var n=null==t?void 0:F(t,e);return void 0===n?r:n}function Bt(t,e){return null!=t&&ct(t,e,$)}function Dt(t){return St(t)?I(t):Q(t)}function Rt(t){return t}function Pt(t){return ft(t)?o(yt(t)):tt(t)}var qt=200,Mt="Expected a function",It="__lodash_hash_undefined__",Nt=1,Ut=2,Ft=1/0,Vt=9007199254740991,$t="[object Arguments]",zt="[object Array]",Ht="[object Boolean]",Wt="[object Date]",Gt="[object Error]",Yt="[object Function]",Jt="[object GeneratorFunction]",Qt="[object Map]",Xt="[object Number]",Zt="[object Object]",Kt="[object RegExp]",te="[object Set]",ee="[object String]",re="[object Symbol]",ne="[object ArrayBuffer]",ie="[object DataView]",oe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ae=/^\w*$/,se=/^\./,ue=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ce=/[\\^$.*+?()[\]{}|]/g,le=/\\(\\)?/g,fe=/^\[object .+?Constructor\]$/,he=/^(?:0|[1-9]\d*)$/,pe={};pe["[object Float32Array]"]=pe["[object Float64Array]"]=pe["[object Int8Array]"]=pe["[object Int16Array]"]=pe["[object Int32Array]"]=pe["[object Uint8Array]"]=pe["[object Uint8ClampedArray]"]=pe["[object Uint16Array]"]=pe["[object Uint32Array]"]=!0,pe[$t]=pe[zt]=pe[ne]=pe[Ht]=pe[ie]=pe[Wt]=pe[Gt]=pe[Yt]=pe[Qt]=pe[Xt]=pe[Zt]=pe[Kt]=pe[te]=pe[ee]=pe["[object WeakMap]"]=!1;var de="object"==typeof t&&t&&t.Object===Object&&t,ge="object"==typeof self&&self&&self.Object===Object&&self,ve=de||ge||Function("return this")(),ye="object"==typeof e&&e&&!e.nodeType&&e,be=ye&&"object"==typeof r&&r&&!r.nodeType&&r,me=be&&be.exports===ye,_e=me&&de.process,we=function(){try{return _e&&_e.binding("util")}catch(t){}}(),xe=we&&we.isTypedArray,Se=Array.prototype,je=Function.prototype,ke=Object.prototype,Ae=ve["__core-js_shared__"],Ee=function(){var t=/[^.]+$/.exec(Ae&&Ae.keys&&Ae.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),Te=je.toString,Oe=ke.hasOwnProperty,Le=ke.toString,Ce=RegExp("^"+Te.call(Oe).replace(ce,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Be=ve.Symbol,De=ve.Uint8Array,Re=ke.propertyIsEnumerable,Pe=Se.splice,qe=function(t,e){return function(r){return t(e(r))}}(Object.keys,Object),Me=ut(ve,"DataView"),Ie=ut(ve,"Map"),Ne=ut(ve,"Promise"),Ue=ut(ve,"Set"),Fe=ut(ve,"WeakMap"),Ve=ut(Object,"create"),$e=bt(Me),ze=bt(Ie),He=bt(Ne),We=bt(Ue),Ge=bt(Fe),Ye=Be?Be.prototype:void 0,Je=Ye?Ye.valueOf:void 0,Qe=Ye?Ye.toString:void 0;f.prototype.clear=h,f.prototype.delete=p,f.prototype.get=d,f.prototype.has=g,f.prototype.set=v,y.prototype.clear=b,y.prototype.delete=m,y.prototype.get=_,y.prototype.has=w,y.prototype.set=x,S.prototype.clear=j,S.prototype.delete=k,S.prototype.get=A,S.prototype.has=E,S.prototype.set=T,O.prototype.add=O.prototype.push=L,O.prototype.has=C,B.prototype.clear=D,B.prototype.delete=R,B.prototype.get=P,B.prototype.has=q,B.prototype.set=M;var Xe=function(t,e){return function(r,n){if(null==r)return r;if(!St(r))return t(r,n);for(var i=r.length,o=e?i:-1,a=Object(r);(e?o--:++o (mat.io)",license:"MIT",keywords:["htmlparser","jquery","selector","scraper","parser","html"],repository:{type:"git",url:"git://github.com/cheeriojs/cheerio.git"},main:"./index.js",files:["index.js","lib"],engines:{node:">= 0.6"},dependencies:{"css-select":"~1.2.0","dom-serializer":"~0.1.0",entities:"~1.1.1",htmlparser2:"^3.9.1","lodash.assignin":"^4.0.9","lodash.bind":"^4.1.4","lodash.defaults":"^4.0.1","lodash.filter":"^4.4.0","lodash.flatten":"^4.2.0","lodash.foreach":"^4.3.0","lodash.map":"^4.4.0","lodash.merge":"^4.4.0","lodash.pick":"^4.2.1","lodash.reduce":"^4.4.0","lodash.reject":"^4.4.0","lodash.some":"^4.4.0"},devDependencies:{benchmark:"^2.1.0",coveralls:"^2.11.9","expect.js":"~0.3.1",istanbul:"^0.4.3",jsdom:"^9.2.1",jquery:"^3.0.0",jshint:"^2.9.2",mocha:"^2.5.3",xyz:"~0.5.0"},scripts:{test:"make test"}}},function(t,e,r){t.exports={lex:r(45),parse:r(106),stringify:r(107)}},function(t,e,r){function n(t,e){var r;e||(e={}),w=!!e.comments,S=!!e.position,x=0,j=Array.isArray(t)?t.slice():_(t);var n,i,a=[];for(b&&(r=Date.now());i=o();)(n=p(i))&&a.push(n);return b&&m("ran in",Date.now()-r+"ms"),{type:"stylesheet",stylesheet:{rules:a}}}function i(t,e){e||(e={});for(var r,n=["type","name","value"],i={},o=0;o+)\\s*|(\\s+)|(+|\\*)|\\#(+)|\\.(+)|\\[\\s*(+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)".replace(//,"["+o(">+~`!@$%^&={}\\;/g,"(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])").replace(//g,"(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])")),u=function(t){this.combinator=t||" ",this.tag="*"};u.prototype.toString=function(){if(!this.raw){var t,e,r="";if(r+=this.tag||"*",this.id&&(r+="#"+this.id),this.classes&&(r+="."+this.classList.join(".")),this.attributes)for(t=0;e=this.attributes[t++];)r+="["+e.name+(e.operator?e.operator+'"'+e.value+'"':"")+"]";if(this.pseudos)for(t=0;e=this.pseudos[t++];)r+=":"+e.name,e.value&&(r+="("+e.value+")");this.raw=r}return this.raw};var c=function(){this.length=0};c.prototype.toString=function(){if(!this.raw){for(var t,e="",r=0;t=this[r++];)1!==r&&(e+=" ")," "!==t.combinator&&(e+=t.combinator+" "),e+=t;this.raw=e}return this.raw};var l=function(t,e,r,n,i,s,l,f,h,p,d,g,v,y,b,m){var _,w;if((e||!this.length)&&(_=this[this.length++]=new c,e))return"";if(_||(_=this[this.length-1]),(r||n||!_.length)&&(w=_[_.length++]=new u(r)),w||(w=_[_.length-1]),i)w.tag=a(i);else if(s)w.id=a(s);else if(l){var x=a(l),S=w.classes||(w.classes={});if(!S[x]){S[x]=o(l);var j=w.classList||(w.classList=[]);j.push(x),j.sort()}}else v?(m=m||b,(w.pseudos||(w.pseudos=[])).push({type:1==g.length?"class":"element",name:a(v),escapedName:o(v),value:m?a(m):null,escapedValue:m?o(m):null})):f&&(d=d?o(d):null,(w.attributes||(w.attributes=[])).push({operator:h,name:a(f),escapedName:o(f),value:d?a(d):null,escapedValue:d?o(d):null}));return""},f=function(t){this.length=0;for(var e,r=this,n=t;t;){if((e=t.replace(s,function(){return l.apply(r,arguments)}))===t)throw new Error(n+" is an invalid expression");t=e}};f.prototype.toString=function(){if(!this.raw){for(var t,e=[],r=0;t=this[r++];)e.push(t);this.raw=e.join(", ")}return this.raw};var h={},p=function(t){return null==t?null:(t=(""+t).replace(/^\s+|\s+$/g,""),h[t]||(h[t]=new f(t)))};t.exports=p},function(t,e,r){"use strict";function n(t,e,r,n,i){this.prop=t,this.value=e,this.selector=r,this.priority=n||0,this.additionalPriority=i||[]}t.exports=n;var i=r(27);n.prototype.compareFunc=function(t){var e=[];e.push.apply(e,this.selector.specificity()),e.push.apply(e,this.additionalPriority),e[0]+=this.priority;var r=[];return r.push.apply(r,t.selector.specificity()),r.push.apply(r,t.additionalPriority),r[0]+=t.priority,i.compareFunc(e,r)},n.prototype.compare=function(t){return 1===this.compareFunc(t)?this:t},n.prototype.toString=function(){return this.prop+": "+this.value.replace(/['"]+/g,"")+";"}},function(t,e,r){"use strict";var n=r(27);t.exports=function(t){function e(e,o,s){function u(r){for(var o=r[0],u=r[1],c=new n.Selector(o),l=c.parsed(),f=i(l),h=0;h=0)return}}if(f){var b=l[l.length-1],m=b.pseudos;b.pseudos=a(b.pseudos),o=l.toString(),b.pseudos=m}var _;try{_=e(o)}catch(t){return}_.each(function(){function r(e,r){for(var o=0,a=e.length;o=0)){if(f){var o="pseudo"+f,a=i[o];a||(a=i[o]=e("").get(0),a.pseudoElementType=f,a.pseudoElementParent=i,i[o]=a),i=a}if(!i.styleProps){if(i.styleProps={},e(i).attr(v)){var l="* { "+e(i).attr(v)+" } ";r(n.parseCSS(l)[0][1],new n.Selector("")}}}function r(t){if("none"===t||"normal"===t)return"";var e=t.match(/^\s*url\s*\(\s*(.*?)\s*\)\s*$/i);if(e){return{img:e[1].replace(/^['"]|['"]$/g,"")}}return t=t.slice(1,t.length-1),t=t.replace(/\\/g,"")}function i(t){if(0!==t.length){var e=t[t.length-1].pseudos;if(e)for(var r=0;r0&&void 0!==arguments[0]&&arguments[0],function t(e,r){e.each(function(e){if("image"==e.get("type")){var n=e.get("src");r?"##"==n&&e.set("src",e.get("src_bkp")):"##"!=n&&(e.set("src_bkp",e.get("src")),e.set("src","##"))}t(e.get("components"),r)})});return{run:function(e){var r=e.getComponents();t(r)},stop:function(e){var r=e.getComponents();t(r,1)}}}}.call(e,r,e,t))&&(t.exports=n)},function(t,e,r){"use strict";var n;void 0!==(n=function(){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e="",r="",n=t.editor,i=t.tableStyle||{},o=t.cellStyle||{},a=n.BlockManager;for(var s in i)e+=s+": "+i[s]+"; ";for(var u in o)r+=u+": "+o[u]+"; ";a.getAll().reset(),a.add("sect100",{label:t.sect100BlkLabel,category:t.categoryLabel,attributes:{class:"gjs-fonts gjs-f-b1"},content:'\n \n \n \n
    '}),a.add("sect50",{label:t.sect50BlkLabel,category:t.categoryLabel,attributes:{class:"gjs-fonts gjs-f-b2"},content:'\n \n \n \n \n
    '}),a.add("sect30",{label:t.sect30BlkLabel,category:t.categoryLabel,attributes:{class:"gjs-fonts gjs-f-b3"},content:'\n \n \n \n \n \n
    '}),a.add("sect37",{label:t.sect37BlkLabel,category:t.categoryLabel,attributes:{class:"gjs-fonts gjs-f-b37"},content:'\n \n \n \n \n
    '}),a.add("button",{label:t.buttonBlkLabel,category:t.categoryLabel,content:'Button',attributes:{class:"gjs-fonts gjs-f-button"}}),a.add("divider",{label:t.dividerBlkLabel,category:t.categoryLabel,content:'\n \n \n \n
    \n ',attributes:{class:"gjs-fonts gjs-f-divider"}}),a.add("text",{label:t.textBlkLabel,category:t.categoryLabel,attributes:{class:"gjs-fonts gjs-f-text"},content:{type:"text",content:"Insert your text here",style:{padding:"10px"},activeOnRender:1}}),a.add("text-sect",{label:t.textSectionBlkLabel,category:t.categoryLabel,content:'

    Insert title here

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua

    ',attributes:{class:"gjs-fonts gjs-f-h1p"}}),a.add("image",{label:t.imageBlkLabel,category:t.categoryLabel,attributes:{class:"gjs-fonts gjs-f-image"},content:{type:"image",style:{color:"black"},activeOnRender:1}}),a.add("quote",{label:t.quoteBlkLabel,category:t.categoryLabel,content:'
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore ipsum dolor sit
    ',attributes:{class:"fa fa-quote-right"}}),a.add("link",{label:t.linkBlkLabel,category:t.categoryLabel,attributes:{class:"fa fa-link"},content:{type:"link",content:"Link",style:{color:"#3b97e3"}}}),a.add("link-block",{label:t.linkBlockBlkLabel,category:t.categoryLabel,attributes:{class:"fa fa-link"},content:{type:"link",editable:!1,droppable:!0,style:{display:"inline-block",padding:"5px","min-height":"50px","min-width":"50px"}}});var c='\n \n \n \n
    \n Image\n \n \n \n \n
    \n

    Title here

    \n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt

    \n
    \n
    ';a.add("grid-items",{label:t.gridItemsBlkLabel,category:t.categoryLabel,content:'\n \n \n \n \n
    '+c+''+c+"
    ",attributes:{class:"fa fa-th"}});var l='\n \n \n \n
    \n \n \n \n \n \n
    \n Image\n \n

    Title here

    \n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt

    \n
    \n
    ';a.add("list-items",{label:t.listItemsBlkLabel,category:t.categoryLabel,content:l+l,attributes:{class:"fa fa-th-list"}})}}.call(e,r,e,t))&&(t.exports=n)},function(t,e,r){"use strict";function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var i;void 0!==(i=function(){var t=function(t){t.each(function(t){var e=t.get("attributes");e["data-tooltip-pos"]="bottom",t.set("attributes",e)})};return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.editor,i=r.Panels,o=i.getPanel("options");if(i.addButton("options",{id:e.cmdOpenImport,className:"fa fa-download",command:e.cmdOpenImport,attributes:n({},"title",e.modalTitleImport)}),i.addButton("options",{id:e.cmdTglImages,className:"fa fa-warning",command:e.cmdTglImages,attributes:n({},"title",e.cmtTglImagesLabel)}),o){var a=o.get("buttons");a.each(function(t){var e=t.get("attributes");e["data-tooltip-pos"]="bottom",t.set("attributes",e)});var s=i.addButton("options","preview");s&&a.remove(s)}var u=i.getPanel("commands");if(u){var c=u.get("buttons");c.reset(),c.add([{id:"undo",className:"fa fa-undo",command:"undo",attributes:n({},"title",e.cmdBtnUndoLabel)},{id:"redo",className:"fa fa-repeat",command:"redo",attributes:n({},"title",e.cmdBtnRedoLabel)}]),t(c)}r.getConfig().showDevices=0;var l=i.addPanel({id:"devices-c"}),f=l.get("buttons");l.get("buttons").add([{id:"deviceDesktop",command:"set-device-desktop",className:"fa fa-desktop",attributes:n({},"title",e.cmdBtnDesktopLabel),active:1},{id:"deviceTablet",command:"set-device-tablet",className:"fa fa-tablet",attributes:n({},"title",e.cmdBtnTabletLabel)},{id:"deviceMobile",command:"set-device-mobile",className:"fa fa-mobile",attributes:n({},"title",e.cmdBtnMobileLabel)}]),t(f)}}.call(e,r,e,t))&&(t.exports=i)},function(t,e,r){"use strict";var n;void 0!==(n=function(){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.editor,r=e.StyleManager.getSectors();e.on("load",function(){r.reset(),r.add(t.styleManagerSectors)})}}.call(e,r,e,t))&&(t.exports=n)}])}); \ No newline at end of file From 44fe8882b876bdfd9990110496d16f819dc64ac3 Mon Sep 17 00:00:00 2001 From: Raphael Hittich Date: Fri, 27 Jul 2018 14:46:46 +0200 Subject: [PATCH 442/483] Add X-Mailer header option in settings to override or disable it. --- meta.json | 2 +- routes/settings.js | 2 +- services/sender.js | 4 ++-- setup/sql/upgrade-00031.sql | 15 +++++++++++++++ views/settings.hbs | 8 ++++++++ 5 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 setup/sql/upgrade-00031.sql diff --git a/meta.json b/meta.json index 5d511080..d8161091 100644 --- a/meta.json +++ b/meta.json @@ -1,3 +1,3 @@ { - "schemaVersion": 30 + "schemaVersion": 31 } diff --git a/routes/settings.js b/routes/settings.js index 6ac92446..e3fdb6d6 100644 --- a/routes/settings.js +++ b/routes/settings.js @@ -16,7 +16,7 @@ let _ = require('../lib/translate')._; let settings = require('../lib/models/settings'); -let allowedKeys = ['service_url', 'smtp_hostname', 'smtp_port', 'smtp_encryption', 'smtp_disable_auth', 'smtp_user', 'smtp_pass', 'admin_email', 'smtp_log', 'smtp_max_connections', 'smtp_max_messages', 'smtp_self_signed', 'default_from', 'default_address', 'default_subject', 'default_homepage', 'default_postaddress', 'default_sender', 'verp_hostname', 'verp_use', 'disable_wysiwyg', 'pgp_private_key', 'pgp_passphrase', 'ua_code', 'shoutout', 'disable_confirmations', 'smtp_throttling', 'dkim_api_key', 'dkim_private_key', 'dkim_selector', 'dkim_domain', 'mail_transport', 'ses_key', 'ses_secret', 'ses_region']; +let allowedKeys = ['service_url', 'smtp_hostname', 'smtp_port', 'smtp_encryption', 'smtp_disable_auth', 'smtp_user', 'smtp_pass', 'admin_email', 'smtp_log', 'smtp_max_connections', 'smtp_max_messages', 'smtp_self_signed', 'default_from', 'default_address', 'default_subject', 'default_homepage', 'default_postaddress', 'default_sender', 'verp_hostname', 'verp_use', 'disable_wysiwyg', 'pgp_private_key', 'pgp_passphrase', 'ua_code', 'shoutout', 'disable_confirmations', 'smtp_throttling', 'dkim_api_key', 'dkim_private_key', 'dkim_selector', 'dkim_domain', 'mail_transport', 'ses_key', 'ses_secret', 'ses_region', 'x_mailer']; router.all('/*', (req, res, next) => { if (!req.user) { diff --git a/services/sender.js b/services/sender.js index 1e22d1b1..3c2293ff 100644 --- a/services/sender.js +++ b/services/sender.js @@ -312,7 +312,7 @@ function formatMessage(message, callback) { return callback(new Error(_('List not found'))); } - settings.list(['serviceUrl', 'verpUse', 'verpHostname'], (err, configItems) => { + settings.list(['serviceUrl', 'verpUse', 'verpHostname', 'xMailer'], (err, configItems) => { if (err) { return callback(err); } @@ -390,7 +390,7 @@ function formatMessage(message, callback) { address: campaign.address }, replyTo: campaign.replyTo, - xMailer: 'Mailtrain Mailer (+https://mailtrain.org)', + xMailer: configItems.xMailer ? configItems.xMailer : false, to: { name: [].concat(message.subscription.firstName || []).concat(message.subscription.lastName || []).join(' '), address: message.subscription.email diff --git a/setup/sql/upgrade-00031.sql b/setup/sql/upgrade-00031.sql new file mode 100644 index 00000000..9aa0d801 --- /dev/null +++ b/setup/sql/upgrade-00031.sql @@ -0,0 +1,15 @@ +# Header section +# Define incrementing schema version number +SET @schema_version = '31'; + +# Set default X-Mailer header value +LOCK TABLES `settings` WRITE; +INSERT INTO `settings` (`key`, `value`) VALUES ('x_mailer','Mailtrain Mailer (+https://mailtrain.org)') ON DUPLICATE KEY UPDATE `value`='Mailtrain Mailer (+https://mailtrain.org)'; +UNLOCK TABLES; + +# Footer section. Updates schema version in settings +LOCK TABLES `settings` WRITE; +/*!40000 ALTER TABLE `settings` DISABLE KEYS */; +INSERT INTO `settings` (`key`, `value`) VALUES('db_schema_version', @schema_version) ON DUPLICATE KEY UPDATE `value`=@schema_version; +/*!40000 ALTER TABLE `settings` ENABLE KEYS */; +UNLOCK TABLES; diff --git a/views/settings.hbs b/views/settings.hbs index 52472225..ab232a4f 100644 --- a/views/settings.hbs +++ b/views/settings.hbs @@ -74,6 +74,14 @@ +
    + +
    + + {{#translate}}Set a custom X-Mailer header value or leave empty to disable it{{/translate}} +
    +
    +
    From 4bd1e994b27420ba366d9b0429e9014e5bf01f13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Kov=C3=A1cs?= Date: Sun, 29 Jul 2018 01:38:29 +0200 Subject: [PATCH 443/483] warn on failed login --- lib/passport.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/passport.js b/lib/passport.js index 9e1f0fc0..7e6dea09 100644 --- a/lib/passport.js +++ b/lib/passport.js @@ -60,6 +60,7 @@ module.exports.login = (req, res, next) => { return next(err); } if (!user) { + log.warn('auth', `[client ${req.ip}] authentication failure`); req.flash('danger', info && info.message || _('Failed to authenticate user')); return res.redirect('/users/login' + (req.body.next ? '?next=' + encodeURIComponent(req.body.next) : '')); } From 920f83398897c10ea72100e2ee84e86a463d6628 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Kov=C3=A1cs?= Date: Sun, 29 Jul 2018 03:07:10 +0200 Subject: [PATCH 444/483] Hungarian trans wip --- languages/hu_HU.po | 4515 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 4515 insertions(+) create mode 100644 languages/hu_HU.po diff --git a/languages/hu_HU.po b/languages/hu_HU.po new file mode 100644 index 00000000..ebed60bd --- /dev/null +++ b/languages/hu_HU.po @@ -0,0 +1,4515 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Language-Team: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2018-07-29 03:02+0200\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2018-07-29 01:47+0200\n" +"X-Generator: Poedit 1.8.7.1\n" +"Last-Translator: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: hu_HU\n" + +#: views/archive/layout.hbs:1 views/layout.hbs:1 +msgid "Self hosted email newsletter app" +msgstr "Saját üzemeltetésű hírlevél-program" + +#: views/blacklist.hbs:1 views/campaigns/blacklisted.hbs:1 +#: views/campaigns/bounced.hbs:1 views/campaigns/campaigns.hbs:1 +#: views/campaigns/clicked.hbs:1 views/campaigns/complained.hbs:1 +#: views/campaigns/create-rss.hbs:1 views/campaigns/create-triggered.hbs:1 +#: views/campaigns/create.hbs:1 views/campaigns/delivered.hbs:1 +#: views/campaigns/edit-rss.hbs:1 views/campaigns/edit-triggered.hbs:1 +#: views/campaigns/edit.hbs:1 views/campaigns/opened.hbs:1 +#: views/campaigns/unsubscribed.hbs:1 views/campaigns/upload-attachment.hbs:1 +#: views/campaigns/view.hbs:1 views/lists/create.hbs:1 views/lists/edit.hbs:1 +#: views/lists/fields/create.hbs:1 views/lists/fields/edit.hbs:1 +#: views/lists/fields/fields.hbs:1 views/lists/forms/create.hbs:1 +#: views/lists/forms/edit.hbs:1 views/lists/forms/forms.hbs:1 +#: views/lists/lists.hbs:1 views/lists/segments/create.hbs:1 +#: views/lists/segments/edit.hbs:1 views/lists/segments/rule-configure.hbs:1 +#: views/lists/segments/rule-create.hbs:1 views/lists/segments/rule-edit.hbs:1 +#: views/lists/segments/segments.hbs:1 views/lists/segments/view.hbs:1 +#: views/lists/subscription/add.hbs:1 views/lists/subscription/edit.hbs:1 +#: views/lists/subscription/import-failed.hbs:1 +#: views/lists/subscription/import-preview.hbs:1 +#: views/lists/subscription/import.hbs:1 views/lists/view.hbs:1 +#: views/report-templates/create.hbs:1 views/report-templates/edit.hbs:1 +#: views/report-templates/report-templates.hbs:1 +#: views/reports/create-select-template.hbs:1 views/reports/create.hbs:1 +#: views/reports/edit.hbs:1 views/reports/output.hbs:1 +#: views/reports/reports.hbs:1 views/reports/view.hbs:1 views/settings.hbs:1 +#: views/templates/create.hbs:1 views/templates/edit.hbs:1 +#: views/templates/templates.hbs:1 views/triggers/create-select.hbs:1 +#: views/triggers/create.hbs:1 views/triggers/edit.hbs:1 +#: views/triggers/triggered.hbs:1 views/triggers/triggers.hbs:1 +#: views/users/account.hbs:1 views/users/api.hbs:1 views/users/forgot.hbs:1 +#: views/users/login.hbs:1 views/users/reset.hbs:1 app.js:169 +msgid "Home" +msgstr "Nyitólap" + +#: views/blacklist.hbs:2 views/blacklist.hbs:3 views/layout.hbs:7 +#: views/lists/subscription/edit.hbs:15 +msgid "Blacklist" +msgstr "Feketelista" + +#: views/blacklist.hbs:4 views/users/api.hbs:76 +msgid "Add email to blacklist" +msgstr "Email feketelistázása" + +#: views/blacklist.hbs:5 +msgid "Add" +msgstr "Hozzáadás" + +#: views/blacklist.hbs:6 +msgid "Email" +msgstr "Email" + +#: views/campaigns/blacklisted.hbs:2 views/campaigns/bounced.hbs:2 +#: views/campaigns/campaigns.hbs:2 views/campaigns/campaigns.hbs:7 +#: views/campaigns/clicked.hbs:2 views/campaigns/complained.hbs:2 +#: views/campaigns/create-rss.hbs:2 views/campaigns/create-triggered.hbs:2 +#: views/campaigns/create.hbs:2 views/campaigns/delivered.hbs:2 +#: views/campaigns/edit-rss.hbs:2 views/campaigns/edit-triggered.hbs:2 +#: views/campaigns/edit.hbs:2 views/campaigns/opened.hbs:2 +#: views/campaigns/unsubscribed.hbs:2 views/campaigns/upload-attachment.hbs:2 +#: views/campaigns/view.hbs:2 lib/tools.js:133 routes/campaigns.js:35 +msgid "Campaigns" +msgstr "Kampányok" + +#: views/campaigns/blacklisted.hbs:3 views/campaigns/blacklisted.hbs:4 +msgid "Blacklisted info" +msgstr "Feketelista info" + +#: views/campaigns/blacklisted.hbs:5 views/campaigns/bounced.hbs:5 +#: views/campaigns/clicked.hbs:5 views/campaigns/complained.hbs:5 +#: views/campaigns/delivered.hbs:5 views/campaigns/edit-rss.hbs:5 +#: views/campaigns/edit-triggered.hbs:5 views/campaigns/edit.hbs:5 +#: views/campaigns/opened.hbs:5 views/campaigns/unsubscribed.hbs:5 +#: views/campaigns/upload-attachment.hbs:6 +msgid "View campaign" +msgstr "Kampány megtekintése" + +#: views/campaigns/blacklisted.hbs:6 +msgid "Subscribers who blacklisted by global blacklist:" +msgstr "Feliratkozók, akik szerepelnek a globális feketelistán" + +#: views/campaigns/blacklisted.hbs:7 views/campaigns/bounced.hbs:7 +#: views/campaigns/clicked.hbs:15 views/campaigns/complained.hbs:7 +#: views/campaigns/delivered.hbs:7 views/campaigns/opened.hbs:9 +#: views/campaigns/unsubscribed.hbs:7 +#: views/lists/subscription/import-failed.hbs:8 views/lists/view.hbs:19 +#: views/triggers/triggered.hbs:6 +msgid "Address" +msgstr "Cím" + +#: views/campaigns/blacklisted.hbs:8 views/campaigns/bounced.hbs:8 +#: views/campaigns/clicked.hbs:16 views/campaigns/complained.hbs:8 +#: views/campaigns/delivered.hbs:8 views/campaigns/opened.hbs:10 +#: views/campaigns/unsubscribed.hbs:8 views/lists/subscription/add.hbs:6 +#: views/lists/subscription/edit.hbs:7 +#: views/lists/subscription/import-preview.hbs:7 views/lists/view.hbs:20 +#: views/subscription/partials/subscription-custom-fields.hbs:3 +#: views/triggers/triggered.hbs:7 +msgid "First Name" +msgstr "Keresztnév" + +#: views/campaigns/blacklisted.hbs:9 views/campaigns/bounced.hbs:9 +#: views/campaigns/clicked.hbs:17 views/campaigns/complained.hbs:9 +#: views/campaigns/delivered.hbs:9 views/campaigns/opened.hbs:11 +#: views/campaigns/unsubscribed.hbs:9 views/lists/subscription/add.hbs:7 +#: views/lists/subscription/edit.hbs:8 +#: views/lists/subscription/import-preview.hbs:8 views/lists/view.hbs:21 +#: views/subscription/partials/subscription-custom-fields.hbs:4 +#: views/triggers/triggered.hbs:8 +msgid "Last Name" +msgstr "Vezetéknév" + +#: views/campaigns/blacklisted.hbs:10 +msgid "Reason" +msgstr "Ok" + +#: views/campaigns/blacklisted.hbs:11 +msgid "Time" +msgstr "Időpont" + +#: views/campaigns/bounced.hbs:3 views/campaigns/bounced.hbs:4 +msgid "Bounced info" +msgstr "Visszapattanás info" + +#: views/campaigns/bounced.hbs:6 +msgid "Subscribers who bounced and were unsubscribed:" +msgstr "Feliratkozók, akik visszapattanás miatt le lettek íratva:" + +#: views/campaigns/bounced.hbs:10 views/campaigns/complained.hbs:10 +#: views/campaigns/delivered.hbs:10 views/campaigns/unsubscribed.hbs:10 +msgid "SMTP response" +msgstr "SMTP válasz" + +#: views/campaigns/bounced.hbs:11 +msgid "Bounce time" +msgstr "Visszapattanás ideje" + +#: views/campaigns/campaigns.hbs:3 views/campaigns/create-triggered.hbs:26 +#: views/campaigns/create.hbs:3 views/campaigns/create.hbs:4 +#: views/campaigns/create.hbs:28 +msgid "Create Campaign" +msgstr "Kampány létrehozása" + +#: views/campaigns/campaigns.hbs:4 +msgid "Regular Campaign" +msgstr "Sima kampány" + +#: views/campaigns/campaigns.hbs:5 +msgid "RSS Campaign" +msgstr "RSS kampány" + +#: views/campaigns/campaigns.hbs:6 +msgid "Triggered Campaign" +msgstr "" + +#: views/campaigns/campaigns.hbs:8 views/campaigns/create-rss.hbs:6 +#: views/campaigns/create-triggered.hbs:5 views/campaigns/create.hbs:5 +#: views/campaigns/edit-rss.hbs:8 views/campaigns/edit-triggered.hbs:9 +#: views/campaigns/edit.hbs:10 views/campaigns/view.hbs:73 +#: views/lists/create.hbs:5 views/lists/edit.hbs:6 +#: views/lists/fields/fields.hbs:6 views/lists/forms/forms.hbs:6 +#: views/lists/lists.hbs:5 views/lists/segments/segments.hbs:6 +#: views/report-templates/partials/report-template-fields.hbs:1 +#: views/report-templates/report-templates.hbs:10 +#: views/reports/partials/report-fields.hbs:1 +#: views/reports/partials/report-fields.hbs:5 +#: views/reports/partials/report-fields.hbs:9 views/reports/reports.hbs:6 +#: views/templates/templates.hbs:5 views/triggers/triggers.hbs:5 +msgid "Name" +msgstr "Név" + +#: views/campaigns/campaigns.hbs:9 views/campaigns/create-rss.hbs:8 +#: views/campaigns/create-triggered.hbs:7 views/campaigns/create.hbs:7 +#: views/campaigns/edit-rss.hbs:10 views/campaigns/edit-triggered.hbs:11 +#: views/campaigns/edit.hbs:12 views/campaigns/view.hbs:74 +#: views/lists/create.hbs:7 views/lists/edit.hbs:10 +#: views/lists/forms/edit.hbs:9 views/lists/forms/forms.hbs:7 +#: views/lists/lists.hbs:8 views/mosaico/editor.hbs:3 +#: views/partials/merge-tag-reference.hbs:4 +#: views/report-templates/partials/report-template-fields.hbs:3 +#: views/report-templates/report-templates.hbs:11 +#: views/reports/partials/report-fields.hbs:3 +#: views/reports/partials/report-fields.hbs:6 views/reports/reports.hbs:8 +#: views/templates/create.hbs:9 views/templates/edit.hbs:8 +#: views/templates/templates.hbs:6 views/triggers/create.hbs:7 +#: views/triggers/edit.hbs:8 views/triggers/triggers.hbs:7 +msgid "Description" +msgstr "Leírás" + +#: views/campaigns/campaigns.hbs:10 views/campaigns/view.hbs:75 +#: views/lists/view.hbs:22 views/lists/view.hbs:30 +#: views/triggers/triggers.hbs:6 +msgid "Status" +msgstr "Státusz" + +#: views/campaigns/campaigns.hbs:11 views/campaigns/view.hbs:76 +#: views/lists/view.hbs:23 views/lists/view.hbs:24 +#: views/report-templates/report-templates.hbs:12 +#: views/reports/partials/report-fields.hbs:7 views/reports/reports.hbs:9 +msgid "Created" +msgstr "Létrehozva" + +#: views/campaigns/clicked.hbs:3 views/campaigns/clicked.hbs:4 +msgid "Link info" +msgstr "Link információ" + +#: views/campaigns/clicked.hbs:6 views/campaigns/view.hbs:63 +msgid "URL" +msgstr "URL" + +#: views/campaigns/clicked.hbs:7 views/campaigns/view.hbs:64 +msgid "Clicks" +msgstr "Kattintások" + +#: views/campaigns/clicked.hbs:8 views/campaigns/view.hbs:65 +msgid "% of clicks" +msgstr "%-a a kattintásoknak" + +#: views/campaigns/clicked.hbs:9 views/campaigns/view.hbs:66 +msgid "% of messages" +msgstr "%-a az üzeneteknek" + +#: views/campaigns/clicked.hbs:10 views/campaigns/view.hbs:69 +msgid "Aggregated clicks" +msgstr "Összesített kattintások" + +#: views/campaigns/clicked.hbs:11 +msgid "Subscribers who clicked on a link:" +msgstr "Feliratkozók, akik rákattintottak egy linkre:" + +#: views/campaigns/clicked.hbs:12 +msgid "Subscribers who clicked on this link:" +msgstr "Feliratkozók, akik rákattintottak erre a linkre:" + +#: views/campaigns/clicked.hbs:13 views/campaigns/opened.hbs:7 +msgid "Stats by country" +msgstr "Országok szerinti statisztika" + +#: views/campaigns/clicked.hbs:14 views/campaigns/opened.hbs:8 +msgid "Stats by device type" +msgstr "Eszköz szerinti statisztika" + +#: views/campaigns/clicked.hbs:18 +msgid "First click time" +msgstr "" + +#: views/campaigns/clicked.hbs:19 +msgid "Click count" +msgstr "Kattintások száma" + +#: views/campaigns/complained.hbs:3 views/campaigns/complained.hbs:4 +msgid "Complained info" +msgstr "Reklamálások info" + +#: views/campaigns/complained.hbs:6 +msgid "Subscribers who complained and were unsubscribed:" +msgstr "Felhasználók, akik reklamáltak, ezért le lettek íratva" + +#: views/campaigns/complained.hbs:11 +msgid "Complain time" +msgstr "Reklamálás ideje" + +#: views/campaigns/create-rss.hbs:3 views/campaigns/create-rss.hbs:4 +#: views/campaigns/create-rss.hbs:21 +msgid "Create RSS Campaign" +msgstr "RSS kampány létrehozása" + +#: views/campaigns/create-rss.hbs:5 views/campaigns/edit-rss.hbs:6 +msgid "" +"RSS campaign sets up a tracker against selected RSS feed address. Whenever a " +"new entry is found from this feed it is sent to selected list as an email " +"message." +msgstr "" + +#: views/campaigns/create-rss.hbs:7 views/campaigns/create-triggered.hbs:6 +#: views/campaigns/create.hbs:6 views/campaigns/edit-rss.hbs:9 +#: views/campaigns/edit-triggered.hbs:10 views/campaigns/edit.hbs:11 +msgid "Campaign Name" +msgstr "Kampány neve" + +#: views/campaigns/create-rss.hbs:9 views/campaigns/create-triggered.hbs:8 +#: views/campaigns/create.hbs:8 views/campaigns/edit-rss.hbs:11 +#: views/campaigns/edit-triggered.hbs:12 views/campaigns/edit.hbs:13 +#: views/lists/create.hbs:8 views/lists/edit.hbs:11 +#: views/report-templates/partials/report-template-fields.hbs:4 +#: views/reports/partials/report-fields.hbs:4 views/templates/create.hbs:11 +#: views/templates/edit.hbs:10 views/triggers/create.hbs:9 +#: views/triggers/edit.hbs:10 +msgid "HTML is allowed" +msgstr "HTML megengedett" + +#: views/campaigns/create-rss.hbs:10 views/campaigns/create-triggered.hbs:9 +#: views/campaigns/create.hbs:9 views/campaigns/edit-rss.hbs:12 +#: views/campaigns/edit-triggered.hbs:13 views/campaigns/edit.hbs:14 +#: views/campaigns/view.hbs:6 views/triggers/create-select.hbs:6 +#: views/triggers/create.hbs:10 views/triggers/edit.hbs:12 +#: views/triggers/triggers.hbs:8 +msgid "List" +msgstr "Lista" + +#: views/campaigns/create-rss.hbs:11 views/campaigns/create-triggered.hbs:10 +#: views/campaigns/create-triggered.hbs:14 views/campaigns/create.hbs:10 +#: views/campaigns/create.hbs:14 views/campaigns/edit-rss.hbs:13 +#: views/campaigns/edit-triggered.hbs:14 views/campaigns/edit.hbs:15 +#: views/lists/fields/create.hbs:27 views/lists/fields/edit.hbs:28 +#: views/lists/segments/create.hbs:9 views/lists/segments/edit.hbs:10 +#: views/lists/segments/rule-create.hbs:7 views/lists/subscription/add.hbs:10 +#: views/lists/subscription/add.hbs:12 views/lists/subscription/edit.hbs:11 +#: views/lists/subscription/import-preview.hbs:5 +#: views/reports/partials/report-select-template.hbs:2 +#: views/subscription/partials/subscription-custom-fields.hbs:9 +#: views/templates/create.hbs:8 views/triggers/create-select.hbs:7 +#: views/triggers/create.hbs:17 views/triggers/create.hbs:20 +#: views/triggers/create.hbs:22 views/triggers/create.hbs:26 +#: views/triggers/edit.hbs:19 views/triggers/edit.hbs:22 +#: views/triggers/edit.hbs:24 views/triggers/edit.hbs:28 +msgid "Select" +msgstr "Kiválasztás" + +#: views/campaigns/create-rss.hbs:12 views/campaigns/create-triggered.hbs:11 +#: views/campaigns/create.hbs:11 views/campaigns/edit-rss.hbs:14 +#: views/campaigns/edit-triggered.hbs:15 views/campaigns/edit.hbs:16 +#: views/triggers/create-select.hbs:8 views/triggers/create.hbs:11 +#: views/triggers/edit.hbs:13 +msgid "subscribers" +msgstr "feliratkozók" + +#: views/campaigns/create-rss.hbs:13 views/campaigns/edit-rss.hbs:15 +msgid "RSS Feed Url" +msgstr "RSS URL-je" + +#: views/campaigns/create-rss.hbs:14 views/campaigns/edit-rss.hbs:16 +msgid "" +"New entries from this RSS URL are sent out to list subscribers as email " +"messages" +msgstr "" + +#: views/campaigns/create-rss.hbs:15 views/campaigns/create-triggered.hbs:18 +#: views/campaigns/create.hbs:18 views/campaigns/edit-rss.hbs:18 +#: views/campaigns/edit-triggered.hbs:16 views/campaigns/edit.hbs:17 +#: views/campaigns/view.hbs:12 +msgid "Email \"from name\"" +msgstr "Email feladó neve" + +#: views/campaigns/create-rss.hbs:16 views/campaigns/create-triggered.hbs:19 +#: views/campaigns/create.hbs:19 views/campaigns/edit-rss.hbs:19 +#: views/campaigns/edit-triggered.hbs:17 views/campaigns/edit.hbs:18 +#: views/settings.hbs:23 +msgid "This is the name your emails will come from" +msgstr "Ez az a név, ami alatt az emailek meg fognak jelenni" + +#: views/campaigns/create-rss.hbs:17 views/campaigns/create-triggered.hbs:20 +#: views/campaigns/create.hbs:20 views/campaigns/edit-rss.hbs:20 +#: views/campaigns/edit-triggered.hbs:18 views/campaigns/edit.hbs:19 +#: views/campaigns/view.hbs:13 +msgid "Email \"from\" address" +msgstr "Email feladó címe" + +#: views/campaigns/create-rss.hbs:18 views/campaigns/create-triggered.hbs:21 +#: views/campaigns/edit-rss.hbs:21 views/campaigns/edit-triggered.hbs:19 +#: views/settings.hbs:25 +msgid "This is the address people will send replies to" +msgstr "Ez a cím, amiről érkezni látják majd a leveleket" + +#: views/campaigns/create-rss.hbs:19 views/campaigns/create-triggered.hbs:24 +#: views/campaigns/create.hbs:26 views/campaigns/edit-rss.hbs:22 +#: views/campaigns/edit-triggered.hbs:22 views/campaigns/edit.hbs:25 +msgid "Disable opened tracking" +msgstr "Megnyitások követésének letiltása" + +#: views/campaigns/create-rss.hbs:20 views/campaigns/create-triggered.hbs:25 +#: views/campaigns/create.hbs:27 views/campaigns/edit-rss.hbs:23 +#: views/campaigns/edit-triggered.hbs:23 views/campaigns/edit.hbs:26 +msgid "Disable clicked tracking" +msgstr "Kattintások követésének letiltása" + +#: views/campaigns/create-triggered.hbs:3 +#: views/campaigns/create-triggered.hbs:4 +msgid "Create Triggered Campaign" +msgstr "" + +#: views/campaigns/create-triggered.hbs:12 views/campaigns/create.hbs:12 +#: views/campaigns/edit-triggered.hbs:7 views/campaigns/edit.hbs:7 +#: views/lists/fields/create.hbs:31 views/lists/fields/edit.hbs:33 +#: views/reports/reports.hbs:7 views/templates/create.hbs:13 +msgid "Template" +msgstr "Sablon" + +#: views/campaigns/create-triggered.hbs:13 views/campaigns/create.hbs:13 +msgid "Select a template:" +msgstr "Sablon kiválasztása:" + +#: views/campaigns/create-triggered.hbs:15 views/campaigns/create.hbs:15 +msgid "Selecting a template creates a campaign specific copy from it" +msgstr "" + +#: views/campaigns/create-triggered.hbs:16 views/campaigns/create.hbs:16 +msgid "Or alternatively use an URL as the message content source:" +msgstr "" + +#: views/campaigns/create-triggered.hbs:17 views/campaigns/create.hbs:17 +#: views/campaigns/edit-triggered.hbs:26 views/campaigns/edit.hbs:29 +msgid "" +"If a message is sent then this URL will be POSTed to using Merge Tags as " +"POST body. Use this if you want to generate the HTML message yourself" +msgstr "" + +#: views/campaigns/create-triggered.hbs:22 views/campaigns/create.hbs:24 +#: views/campaigns/edit-triggered.hbs:20 views/campaigns/edit.hbs:23 +#: views/campaigns/view.hbs:15 +msgid "Email \"subject line\"" +msgstr "Email tárgya" + +#: views/campaigns/create-triggered.hbs:23 views/campaigns/create.hbs:25 +#: views/campaigns/edit-triggered.hbs:21 views/campaigns/edit.hbs:24 +#: views/settings.hbs:27 +msgid "Keep it relevant and non-spammy" +msgstr "" + +#: views/campaigns/create.hbs:21 views/campaigns/edit.hbs:20 +msgid "" +"This is the address people will send replies to unless reply-to address is " +"set" +msgstr "" + +#: views/campaigns/create.hbs:22 views/campaigns/edit.hbs:21 +#: views/campaigns/view.hbs:14 +msgid "Email \"reply-to\" address" +msgstr "" + +#: views/campaigns/create.hbs:23 views/campaigns/edit.hbs:22 +msgid "If set, this is the address people will send replies to" +msgstr "" + +#: views/campaigns/delivered.hbs:3 views/campaigns/delivered.hbs:4 +msgid "Delivered info" +msgstr "" + +#: views/campaigns/delivered.hbs:6 +msgid "Subscribers who received the message and did not bounce/unsubscribe:" +msgstr "" + +#: views/campaigns/delivered.hbs:11 +msgid "Delivery time" +msgstr "" + +#: views/campaigns/edit-rss.hbs:3 views/campaigns/edit-rss.hbs:4 +msgid "Edit RSS Campaign" +msgstr "" + +#: views/campaigns/edit-rss.hbs:7 views/campaigns/edit-triggered.hbs:8 +#: views/campaigns/edit.hbs:9 views/settings.hbs:4 views/users/account.hbs:6 +msgid "General Settings" +msgstr "" + +#: views/campaigns/edit-rss.hbs:17 +msgid "" +"Use special merge tag [RSS_ENTRY] to mark the position for the RSS post " +"content. Additionally you can use any valid merge tag as well." +msgstr "" + +#: views/campaigns/edit-rss.hbs:24 views/campaigns/edit-triggered.hbs:27 +#: views/campaigns/edit.hbs:35 +msgid "Delete Campaign" +msgstr "Kampány törlése" + +#: views/campaigns/edit-rss.hbs:25 views/campaigns/edit-triggered.hbs:28 +#: views/campaigns/edit.hbs:36 views/lists/edit.hbs:22 +#: views/lists/fields/edit.hbs:39 views/lists/forms/edit.hbs:33 +#: views/lists/forms/forms.hbs:12 views/lists/segments/edit.hbs:14 +#: views/lists/segments/rule-edit.hbs:38 views/lists/subscription/edit.hbs:18 +#: views/reports/edit.hbs:6 views/settings.hbs:97 views/templates/edit.hbs:13 +#: views/triggers/edit.hbs:30 views/users/account.hbs:18 +msgid "Update" +msgstr "Frissítés" + +#: views/campaigns/edit-triggered.hbs:3 views/campaigns/edit-triggered.hbs:4 +msgid "Edit Triggered Campaign" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:6 views/campaigns/edit.hbs:6 +#: routes/forms.js:143 +msgid "General" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:24 views/campaigns/edit.hbs:27 +msgid "Template Settings" +msgstr "" + +#: views/campaigns/edit-triggered.hbs:25 views/campaigns/edit.hbs:28 +msgid "Template URL" +msgstr "" + +#: views/campaigns/edit.hbs:3 views/campaigns/edit.hbs:4 +#: views/campaigns/upload-attachment.hbs:3 +#: views/campaigns/upload-attachment.hbs:5 views/campaigns/view.hbs:3 +msgid "Edit Campaign" +msgstr "Kampány szerkesztése" + +#: views/campaigns/edit.hbs:8 views/campaigns/edit.hbs:30 +msgid "Attachments" +msgstr "Csatolmányok" + +#: views/campaigns/edit.hbs:31 +msgid "File" +msgstr "File" + +#: views/campaigns/edit.hbs:32 +msgid "Size" +msgstr "Méret" + +#: views/campaigns/edit.hbs:33 views/campaigns/view.hbs:68 +#: views/lists/fields/fields.hbs:12 views/lists/forms/forms.hbs:9 +#: views/lists/view.hbs:33 +msgid "No data available in table" +msgstr "" + +#: views/campaigns/edit.hbs:34 views/campaigns/upload-attachment.hbs:4 +msgid "Add Attachment" +msgstr "" + +#: views/campaigns/opened.hbs:3 views/campaigns/opened.hbs:4 +msgid "Opened info" +msgstr "" + +#: views/campaigns/opened.hbs:6 +msgid "Subscribers who opened this message:" +msgstr "" + +#: views/campaigns/opened.hbs:12 +msgid "First open" +msgstr "" + +#: views/campaigns/opened.hbs:13 +msgid "Opened count" +msgstr "" + +#: views/campaigns/unsubscribed.hbs:3 views/campaigns/unsubscribed.hbs:4 +msgid "Unsubscribed info" +msgstr "" + +#: views/campaigns/unsubscribed.hbs:6 +msgid "Subscribers who unsubscribed:" +msgstr "" + +#: views/campaigns/unsubscribed.hbs:11 views/campaigns/view.hbs:28 +#: views/lists/subscription/import.hbs:13 routes/lists.js:206 +msgid "Unsubscribed" +msgstr "" + +#: views/campaigns/upload-attachment.hbs:7 +msgid "Upload" +msgstr "Feltöltés" + +#: views/campaigns/view.hbs:4 +msgid "Overview" +msgstr "" + +#: views/campaigns/view.hbs:5 +msgid "Links" +msgstr "" + +#: views/campaigns/view.hbs:7 +msgid "Feed URL" +msgstr "" + +#: views/campaigns/view.hbs:8 +msgid "Last check" +msgstr "" + +#: views/campaigns/view.hbs:9 +msgid "Not yet checked" +msgstr "" + +#: views/campaigns/view.hbs:10 +msgid "activate campaign to start checking feed for new messages" +msgstr "" + +#: views/campaigns/view.hbs:11 +msgid "RSS status" +msgstr "" + +#: views/campaigns/view.hbs:16 +msgid "Preview campaign as" +msgstr "" + +#: views/campaigns/view.hbs:17 +msgid "Add new test user" +msgstr "" + +#: views/campaigns/view.hbs:18 +msgid "No test users yet, create one here" +msgstr "" + +#: views/campaigns/view.hbs:19 +msgid "Go" +msgstr "" + +#: views/campaigns/view.hbs:20 lib/models/triggers.js:26 +msgid "Delivered" +msgstr "" + +#: views/campaigns/view.hbs:21 +msgid "List subscribers who received this message" +msgstr "" + +#: views/campaigns/view.hbs:22 +msgid "Blacklisted" +msgstr "" + +#: views/campaigns/view.hbs:23 +msgid "List subscribers who blacklisted by global blacklist" +msgstr "" + +#: views/campaigns/view.hbs:24 routes/lists.js:206 +msgid "Bounced" +msgstr "" + +#: views/campaigns/view.hbs:25 +msgid "List subscribers who bounced" +msgstr "" + +#: views/campaigns/view.hbs:26 +msgid "Complaints" +msgstr "" + +#: views/campaigns/view.hbs:27 +msgid "List subscribers who complained for this message" +msgstr "" + +#: views/campaigns/view.hbs:29 +msgid "List subscribers who unsubscribed after this message" +msgstr "" + +#: views/campaigns/view.hbs:30 +msgid "Opened" +msgstr "" + +#: views/campaigns/view.hbs:31 +msgid "List subscribers who opened this message" +msgstr "" + +#: views/campaigns/view.hbs:32 +msgid "Clicked" +msgstr "" + +#: views/campaigns/view.hbs:33 views/campaigns/view.hbs:70 +msgid "List subscribers who clicked on a link" +msgstr "" + +#: views/campaigns/view.hbs:34 +msgid "" +"Are you sure? This action would start sending messages to the selected list" +msgstr "" + +#: views/campaigns/view.hbs:35 +msgid "Delay sending" +msgstr "" + +#: views/campaigns/view.hbs:36 +msgid "hours" +msgstr "óra" + +#: views/campaigns/view.hbs:37 +msgid "minutes" +msgstr "perc" + +#: views/campaigns/view.hbs:38 +msgid "Send to subscribers:" +msgstr "" + +#: views/campaigns/view.hbs:39 +msgid "Are you sure? This action would reset scheduling" +msgstr "" + +#: views/campaigns/view.hbs:40 +msgid "Cancel" +msgstr "Mégse" + +#: views/campaigns/view.hbs:41 +msgid "Sending scheduled" +msgstr "" + +#: views/campaigns/view.hbs:42 views/campaigns/view.hbs:54 +msgid "Pause" +msgstr "" + +#: views/campaigns/view.hbs:43 routes/campaigns.js:253 +msgid "Sending" +msgstr "Küldés folyamatban" + +#: views/campaigns/view.hbs:44 views/campaigns/view.hbs:48 +msgid "" +"Are you sure? This action would resume sending messages to the selected list" +msgstr "" + +#: views/campaigns/view.hbs:45 views/campaigns/view.hbs:49 +msgid "Are you sure? This action would reset all stats about current progress" +msgstr "" + +#: views/campaigns/view.hbs:46 +msgid "Resume" +msgstr "Folytatás" + +#: views/campaigns/view.hbs:47 views/campaigns/view.hbs:51 +msgid "Reset" +msgstr "" + +#: views/campaigns/view.hbs:50 +msgid "Continue" +msgstr "Tovább" + +#: views/campaigns/view.hbs:52 +msgid "" +"All messages sent! Hit \"Continue\" if you you want to send this campaign to " +"new subscribers" +msgstr "" + +#: views/campaigns/view.hbs:53 +msgid "" +"Are you sure? This action would pause sending new entries in RSS feed as " +"email messages to the selected list" +msgstr "" + +#: views/campaigns/view.hbs:55 views/campaigns/view.hbs:59 +msgid "Campaign status:" +msgstr "Kampány státusza" + +#: views/campaigns/view.hbs:56 +msgid "ACTIVE" +msgstr "AKTÍV" + +#: views/campaigns/view.hbs:57 +msgid "" +"Are you sure? This action would start sending new entries in RSS feed as " +"email messages to the selected list" +msgstr "" + +#: views/campaigns/view.hbs:58 +msgid "Activate" +msgstr "Aktív" + +#: views/campaigns/view.hbs:60 +msgid "INACTIVE" +msgstr "INAKTÍV" + +#: views/campaigns/view.hbs:61 +msgid "" +"This is a triggered campaign. Messages are only sent to subscribers that hit " +"some trigger that invokes this campaign" +msgstr "" + +#: views/campaigns/view.hbs:62 +msgid "see more" +msgstr "" + +#: views/campaigns/view.hbs:67 +msgid "List subscribers who clicked this link" +msgstr "" + +#: views/campaigns/view.hbs:71 +msgid "" +"Clicks are counted as unique subscribers that clicked on a specific link or " +"on any link (in aggregated view)" +msgstr "" + +#: views/campaigns/view.hbs:72 +msgid "" +"If a new entry is found from campaign feed a new subcampaign is created of " +"that entry and it will be listed here" +msgstr "" + +#: views/emails/password-reset-html.hbs:1 +#: views/emails/password-reset-text.hbs:1 +msgid "Change your password" +msgstr "Jelszó megváltoztatása" + +#: views/emails/password-reset-html.hbs:2 +#: views/emails/password-reset-text.hbs:2 +msgid "We have received a password change request for your Mailtrain account:" +msgstr "" + +#: views/emails/password-reset-html.hbs:3 +#: views/emails/password-reset-text.hbs:3 +msgid "Reset password" +msgstr "" + +#: views/emails/password-reset-html.hbs:4 +#: views/emails/password-reset-text.hbs:4 +msgid "" +"If you did not ask to change your password, then you can ignore this email " +"and your password will not be changed." +msgstr "" + +#: views/emails/rss-html.hbs:1 views/emails/stationery-html.hbs:3 +#: views/emails/stationery-text.hbs:3 +msgid "Preferences" +msgstr "Beállítások" + +#: views/emails/rss-html.hbs:2 views/emails/stationery-html.hbs:4 +#: views/emails/stationery-text.hbs:4 views/lists/forms/edit.hbs:20 +#: views/lists/subscription/edit.hbs:16 +#: views/subscription/partials/subscription-unsubscribe-form.hbs:2 +#: views/subscription/web-manage.mjml.hbs:3 +#: views/subscription/web-unsubscribe.mjml.hbs:1 +#: views/subscription/web-unsubscribe.mjml.hbs:2 routes/forms.js:223 +#: routes/lists.js:288 +msgid "Unsubscribe" +msgstr "Leiratkozás" + +#: views/emails/rss-html.hbs:3 views/emails/stationery-html.hbs:5 +#: views/emails/stationery-text.hbs:5 +msgid "View this email in your browser" +msgstr "Üzenet megtekintése böngészőben" + +#: views/emails/stationery-html.hbs:1 views/emails/stationery-text.hbs:1 +msgid "Hey [FIRST_NAME/Customer]," +msgstr "Kedves [FIRST_NAME/Customer]!" + +#: views/emails/stationery-html.hbs:2 views/emails/stationery-text.hbs:2 +msgid "Cheers," +msgstr "Üdvözlettel," + +#: views/index.hbs:1 +msgid "List Management" +msgstr "A lista kezelői" + +#: views/index.hbs:2 +msgid "" +"Mailtrain allows you to easily manage even very large lists. Million " +"subscribers? Not a problem. You can add subscribers manually, through the " +"API or import from a CSV file. All lists come with support for custom fields " +"and merge tags as well." +msgstr "" + +#: views/index.hbs:3 views/index.hbs:7 views/index.hbs:10 views/index.hbs:13 +#: views/index.hbs:16 views/index.hbs:19 views/index.hbs:22 views/index.hbs:25 +#: views/index.hbs:28 +msgid "Show more" +msgstr "" + +#: views/index.hbs:4 views/lists/fields/create.hbs:3 +#: views/lists/fields/edit.hbs:3 views/lists/fields/fields.hbs:3 +#: views/lists/fields/fields.hbs:5 views/lists/view.hbs:6 +msgid "Custom Fields" +msgstr "" + +#: views/index.hbs:5 +msgid "" +"Text fields, numbers, drop downs or checkboxes, Mailtrain has them all. " +"Every custom field can be included in the generated newsletters through " +"merge tags." +msgstr "" + +#: views/index.hbs:6 +msgid "Mailtrain also supports custom forms." +msgstr "" + +#: views/index.hbs:8 +msgid "List Segmentation" +msgstr "" + +#: views/index.hbs:9 +msgid "" +"Send messages only to list subscribers that match predefined segmentation " +"rules. No need to create separate lists with small differences." +msgstr "" + +#: views/index.hbs:11 +msgid "RSS Campaigns" +msgstr "" + +#: views/index.hbs:12 +msgid "" +"Setup Mailtrain to track RSS feeds and if a new entry is detected in a feed " +"then Mailtrain auto-generates a new campaign using entry data as message " +"contents and sends it to selected subscribers." +msgstr "" + +#: views/index.hbs:14 +msgid "GPG Encryption" +msgstr "" + +#: views/index.hbs:15 +msgid "" +"If a list has a custom field for a GPG Public Key set then subscribers can " +"upload their GPG public key to receive encrypted messages from the list." +msgstr "" + +#: views/index.hbs:17 +msgid "Click Stats" +msgstr "" + +#: views/index.hbs:18 +msgid "" +"After a campaign is sent, check individual click statistics for every link " +"included in the message." +msgstr "" + +#: views/index.hbs:20 +msgid "Template Editors" +msgstr "" + +#: views/index.hbs:21 +msgid "" +"Mailtrain ships with GrapeJS and Mosaico built in, two advanced template " +"editors. Mailtrain also offers a code editor if you prefer to handcraft the " +"HTML yourself." +msgstr "" + +#: views/index.hbs:23 +msgid "Send via Any Provider" +msgstr "" + +#: views/index.hbs:24 +msgid "" +"You can use any provider that supports SMTP protocol to send out your " +"newsletters. Bounce and complaints handling via webhooks is supported for " +"SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA." +msgstr "" + +#: views/index.hbs:26 lib/tools.js:137 +msgid "Automation" +msgstr "" + +#: views/index.hbs:27 +msgid "" +"Define automation triggers to send specific messages when a user activates " +"the trigger." +msgstr "" + +#: views/layout.hbs:2 +msgid "Toggle navigation" +msgstr "" + +#: views/layout.hbs:3 +msgid "Wiki" +msgstr "Wiki" + +#: views/layout.hbs:4 +msgid "Blog" +msgstr "Blog" + +#: views/layout.hbs:5 views/users/account.hbs:2 views/users/account.hbs:3 +msgid "Account" +msgstr "Fiók" + +#: views/layout.hbs:6 views/settings.hbs:2 views/settings.hbs:3 +msgid "Settings" +msgstr "Beállítások" + +#: views/layout.hbs:8 views/users/api.hbs:2 views/users/api.hbs:3 +msgid "API" +msgstr "API" + +#: views/layout.hbs:9 +msgid "Log out" +msgstr "Kijelentkezés" + +#: views/layout.hbs:10 views/users/forgot.hbs:2 views/users/login.hbs:2 +#: views/users/login.hbs:3 views/users/login.hbs:9 views/users/reset.hbs:2 +msgid "Sign in" +msgstr "Bejelentkezés" + +#: views/layout.hbs:11 +msgid "Self Hosted Newsletter App Built on Top of Nodemailer" +msgstr "" + +#: views/layout.hbs:12 views/layout.hbs:14 +msgid "Source on GitHub" +msgstr "Forráskód a GitHub-on" + +#: views/layout.hbs:13 +msgid "Subscribe to Our Newsletter" +msgstr "" + +#: views/lists/create.hbs:2 views/lists/edit.hbs:2 +#: views/lists/fields/create.hbs:2 views/lists/fields/edit.hbs:2 +#: views/lists/fields/fields.hbs:2 views/lists/forms/create.hbs:2 +#: views/lists/forms/edit.hbs:2 views/lists/forms/forms.hbs:2 +#: views/lists/lists.hbs:2 views/lists/lists.hbs:4 +#: views/lists/segments/create.hbs:2 views/lists/segments/edit.hbs:2 +#: views/lists/segments/rule-configure.hbs:2 +#: views/lists/segments/rule-create.hbs:2 views/lists/segments/rule-edit.hbs:2 +#: views/lists/segments/segments.hbs:2 views/lists/segments/view.hbs:2 +#: views/lists/subscription/add.hbs:2 views/lists/subscription/edit.hbs:2 +#: views/lists/subscription/import-failed.hbs:2 +#: views/lists/subscription/import-preview.hbs:2 +#: views/lists/subscription/import.hbs:2 views/lists/view.hbs:2 +#: lib/tools.js:125 routes/lists.js:59 +msgid "Lists" +msgstr "Listák" + +#: views/lists/create.hbs:3 views/lists/create.hbs:4 views/lists/create.hbs:13 +#: views/lists/lists.hbs:3 +msgid "Create List" +msgstr "Lista létrehozása" + +#: views/lists/create.hbs:6 views/lists/edit.hbs:7 +msgid "List Name" +msgstr "Lista neve" + +#: views/lists/create.hbs:9 views/lists/edit.hbs:15 +#: views/triggers/create.hbs:15 views/triggers/edit.hbs:17 +msgid "Subscription" +msgstr "Feliratkozás" + +#: views/lists/create.hbs:10 views/lists/edit.hbs:16 +msgid "Allow public users to subscribe themselves" +msgstr "" + +#: views/lists/create.hbs:11 views/lists/edit.hbs:17 +msgid "Unsubscription" +msgstr "Leiratkozás" + +#: views/lists/create.hbs:12 views/lists/edit.hbs:18 +msgid "Select how an unsuscription request by subscriber is handled." +msgstr "" + +#: views/lists/edit.hbs:3 views/lists/edit.hbs:4 views/lists/view.hbs:8 +msgid "Edit List" +msgstr "Lista szerkesztése" + +#: views/lists/edit.hbs:5 +msgid "View List" +msgstr "Lista megtekintése" + +#: views/lists/edit.hbs:8 +msgid "List ID" +msgstr "Lista ID" + +#: views/lists/edit.hbs:9 +msgid "This is the list ID displayed to the subscribers" +msgstr "" + +#: views/lists/edit.hbs:12 +msgid "Custom Form" +msgstr "Egyedi űrlap" + +#: views/lists/edit.hbs:13 views/lists/forms/forms.hbs:11 +msgid "Default Mailtrain Form" +msgstr "Alapértelmezett Mailtrain űrlap" + +#: views/lists/edit.hbs:14 +msgid "" +"The custom form used for this list. You can create a form here." +msgstr "" + +#: views/lists/edit.hbs:19 +msgid "Unsubscribe Header" +msgstr "" + +#: views/lists/edit.hbs:20 +msgid "Do not send List-Unsubscribe headers" +msgstr "" + +#: views/lists/edit.hbs:21 +msgid "Delete List" +msgstr "Lista törlése" + +#: views/lists/fields/create.hbs:4 +msgid "Create Field" +msgstr "Mező létrehozása" + +#: views/lists/fields/create.hbs:5 views/lists/fields/fields.hbs:4 +msgid "Create Custom Field" +msgstr "" + +#: views/lists/fields/create.hbs:6 views/lists/fields/create.hbs:7 +#: views/lists/fields/edit.hbs:7 views/lists/fields/edit.hbs:8 +msgid "Field Name" +msgstr "" + +#: views/lists/fields/create.hbs:8 views/lists/fields/edit.hbs:9 +msgid "Field Type" +msgstr "" + +#: views/lists/fields/create.hbs:9 views/lists/fields/edit.hbs:10 +#: lib/models/fields.js:17 +msgid "Text" +msgstr "Szöveg" + +#: views/lists/fields/create.hbs:10 views/lists/fields/edit.hbs:11 +#: lib/models/fields.js:21 +msgid "Number" +msgstr "Szám" + +#: views/lists/fields/create.hbs:11 views/lists/fields/edit.hbs:12 +#: lib/models/fields.js:18 +msgid "Website" +msgstr "Weboldal" + +#: views/lists/fields/create.hbs:12 views/lists/fields/edit.hbs:13 +#: lib/models/fields.js:20 +msgid "GPG Public Key" +msgstr "GPG publikus kulcs" + +#: views/lists/fields/create.hbs:13 views/lists/fields/edit.hbs:14 +#: lib/models/fields.js:19 +msgid "Multi-line text" +msgstr "Többsoros szöveg" + +#: views/lists/fields/create.hbs:14 views/lists/fields/edit.hbs:15 +msgid "JSON" +msgstr "JSON" + +#: views/lists/fields/create.hbs:15 views/lists/fields/edit.hbs:16 +msgid "Date" +msgstr "Dátum" + +#: views/lists/fields/create.hbs:16 views/lists/fields/edit.hbs:17 +msgid "Date (MM/DD/YYYY)" +msgstr "Dátum (HH/NN/ÉÉÉÉ)" + +#: views/lists/fields/create.hbs:17 views/lists/fields/edit.hbs:18 +#: lib/models/fields.js:26 +msgid "Date (DD/MM/YYYY)" +msgstr "Dátum (NN/HH/ÉÉÉÉ)" + +#: views/lists/fields/create.hbs:18 views/lists/fields/edit.hbs:19 +msgid "Birthday" +msgstr "Születésnap" + +#: views/lists/fields/create.hbs:19 views/lists/fields/edit.hbs:20 +#: lib/models/fields.js:27 +msgid "Birthday (MM/DD)" +msgstr "Születésnap (HH/NN)" + +#: views/lists/fields/create.hbs:20 views/lists/fields/edit.hbs:21 +#: lib/models/fields.js:28 +msgid "Birthday (DD/MM)" +msgstr "Születésnap (NN/HH)" + +#: views/lists/fields/create.hbs:21 views/lists/fields/edit.hbs:22 +msgid "Grouped" +msgstr "Csoportosított" + +#: views/lists/fields/create.hbs:22 views/lists/fields/edit.hbs:23 +msgid "Drop Downs" +msgstr "Lenyíló menük" + +#: views/lists/fields/create.hbs:23 views/lists/fields/edit.hbs:24 +#: lib/models/fields.js:22 +msgid "Radio Buttons" +msgstr "Rádió gombok" + +#: views/lists/fields/create.hbs:24 views/lists/fields/edit.hbs:25 +#: lib/models/fields.js:23 +msgid "Checkboxes" +msgstr "Jelölőmezők" + +#: views/lists/fields/create.hbs:25 views/lists/fields/edit.hbs:26 +msgid "Option for a group value" +msgstr "" + +#: views/lists/fields/create.hbs:26 views/lists/fields/edit.hbs:27 +msgid "Group" +msgstr "" + +#: views/lists/fields/create.hbs:28 views/lists/fields/edit.hbs:29 +msgid "Required for group options" +msgstr "" + +#: views/lists/fields/create.hbs:29 views/lists/fields/create.hbs:30 +#: views/lists/fields/edit.hbs:35 views/lists/fields/edit.hbs:36 +#: views/lists/fields/fields.hbs:9 +msgid "Default merge tag value" +msgstr "" + +#: views/lists/fields/create.hbs:32 views/lists/fields/edit.hbs:34 +msgid "" +"For group elements like checkboxes you can control the appearance of the " +"merge tag with an optional template. The template uses handlebars syntax and " +"you can find all values from {{values}} array, for example " +"{{#each values}} {{this}} {{/each}}. If template is not defined " +"then multiple values are joined with commas. You can also use this template " +"to render JSON values (if the JSON is an array then the array is exposed as " +"values, otherwise you can access the JSON keys directly)." +msgstr "" + +#: views/lists/fields/create.hbs:33 views/lists/fields/edit.hbs:37 +msgid "Visible" +msgstr "Látható" + +#: views/lists/fields/create.hbs:34 +msgid "Add Field" +msgstr "Mező hozzáadása" + +#: views/lists/fields/edit.hbs:4 +msgid "Edit Field" +msgstr "Mező szerkesztése" + +#: views/lists/fields/edit.hbs:5 +msgid "Edit Custom Field" +msgstr "" + +#: views/lists/fields/edit.hbs:6 +msgid "Back to fields" +msgstr "" + +#: views/lists/fields/edit.hbs:30 views/lists/fields/fields.hbs:8 +#: views/mosaico/editor.hbs:2 views/partials/merge-tag-reference.hbs:3 +msgid "Merge tag" +msgstr "" + +#: views/lists/fields/edit.hbs:31 +msgid "Merge Tag" +msgstr "" + +#: views/lists/fields/edit.hbs:32 +msgid "Put this tag in your content:" +msgstr "" + +#: views/lists/fields/edit.hbs:38 +msgid "Delete Field" +msgstr "Mező törlése" + +#: views/lists/fields/fields.hbs:7 views/lists/view.hbs:26 +#: views/report-templates/partials/report-template-fields.hbs:5 +msgid "Type" +msgstr "Típus" + +#: views/lists/fields/fields.hbs:10 views/lists/fields/fields.hbs:11 +#: views/lists/forms/edit.hbs:26 views/lists/forms/forms.hbs:8 +#: views/lists/segments/segments.hbs:8 views/lists/segments/view.hbs:12 +#: views/triggers/triggers.hbs:14 routes/campaigns.js:276 +#: routes/campaigns.js:568 routes/campaigns.js:657 routes/campaigns.js:706 +#: routes/lists.js:170 routes/lists.js:257 routes/report-templates.js:51 +#: routes/templates.js:183 routes/triggers.js:297 +msgid "Edit" +msgstr "Szerkesztés" + +#: views/lists/forms/create.hbs:3 views/lists/forms/edit.hbs:3 +#: views/lists/forms/forms.hbs:3 views/lists/forms/forms.hbs:5 +#: views/lists/view.hbs:5 +msgid "Custom Forms" +msgstr "" + +#: views/lists/forms/create.hbs:4 +msgid "Create Form" +msgstr "" + +#: views/lists/forms/create.hbs:5 views/lists/forms/forms.hbs:4 +msgid "Create Custom Form" +msgstr "" + +#: views/lists/forms/create.hbs:6 views/lists/forms/create.hbs:7 +#: views/lists/forms/edit.hbs:7 views/lists/forms/edit.hbs:8 +msgid "Form Name" +msgstr "" + +#: views/lists/forms/create.hbs:8 +msgid "Add Form" +msgstr "" + +#: views/lists/forms/edit.hbs:4 +msgid "Edit Form" +msgstr "" + +#: views/lists/forms/edit.hbs:5 +msgid "Edit Custom Form" +msgstr "" + +#: views/lists/forms/edit.hbs:6 +msgid "Back to forms" +msgstr "" + +#: views/lists/forms/edit.hbs:10 +msgid "Optional comments about this form" +msgstr "" + +#: views/lists/forms/edit.hbs:11 +msgid "Form Preview" +msgstr "Űrlap előnézete" + +#: views/lists/forms/edit.hbs:12 +msgid "" +"Note: These links are solely for a quick preview. If you submit a preview " +"form you'll get redirected to the list's default form." +msgstr "" + +#: views/lists/forms/edit.hbs:13 views/lists/subscription/add.hbs:16 +#: views/subscription/mail-unsubscription-confirmed-html.mjml.hbs:4 +#: views/subscription/mail-unsubscription-confirmed-text.hbs:4 +#: routes/forms.js:157 routes/lists.js:288 +msgid "Subscribe" +msgstr "Feliratkozás" + +#: views/lists/forms/edit.hbs:14 +msgid "Confirm Subscription Notice" +msgstr "" + +#: views/lists/forms/edit.hbs:15 +msgid "Confirm Unsubscription Notice" +msgstr "" + +#: views/lists/forms/edit.hbs:16 +msgid "Subscribed Notice" +msgstr "" + +#: views/lists/forms/edit.hbs:17 +msgid "Updated Notice" +msgstr "" + +#: views/lists/forms/edit.hbs:18 +msgid "Unsubscribed Notice" +msgstr "" + +#: views/lists/forms/edit.hbs:19 +msgid "Manual Unsubscribe Notice" +msgstr "" + +#: views/lists/forms/edit.hbs:21 routes/forms.js:205 +msgid "Manage" +msgstr "" + +#: views/lists/forms/edit.hbs:22 +msgid "Manage Address" +msgstr "" + +#: views/lists/forms/edit.hbs:23 +msgid "Create a test user for additional options" +msgstr "" + +#: views/lists/forms/edit.hbs:24 views/report-templates/create.hbs:3 +#: views/report-templates/edit.hbs:3 +#: views/report-templates/report-templates.hbs:3 views/templates/create.hbs:2 +#: views/templates/edit.hbs:2 views/templates/templates.hbs:2 +#: views/templates/templates.hbs:4 lib/tools.js:129 routes/templates.js:27 +msgid "Templates" +msgstr "Sablonok" + +#: views/lists/forms/edit.hbs:25 +msgid "Fields" +msgstr "Mezők" + +#: views/lists/forms/edit.hbs:27 +msgid "Form Fields" +msgstr "" + +#: views/lists/forms/edit.hbs:28 +msgid "Fields hidden on subscription page:" +msgstr "" + +#: views/lists/forms/edit.hbs:29 +msgid "Fields shown on subscription page:" +msgstr "" + +#: views/lists/forms/edit.hbs:30 +msgid "Fields hidden on preferences page:" +msgstr "" + +#: views/lists/forms/edit.hbs:31 +msgid "Fields shown on preferences page:" +msgstr "" + +#: views/lists/forms/edit.hbs:32 +msgid "Delete Form" +msgstr "" + +#: views/lists/forms/forms.hbs:10 +msgid "The default form for this list is:" +msgstr "" + +#: views/lists/lists.hbs:6 +msgid "ID" +msgstr "ID" + +#: views/lists/lists.hbs:7 views/reports/partials/report-fields.hbs:10 +msgid "Subscribers" +msgstr "Feliratkozók" + +#: views/lists/segments/create.hbs:3 views/lists/segments/edit.hbs:3 +#: views/lists/segments/rule-configure.hbs:3 +#: views/lists/segments/rule-create.hbs:3 views/lists/segments/rule-edit.hbs:3 +#: views/lists/segments/segments.hbs:3 views/lists/segments/segments.hbs:5 +#: views/lists/segments/view.hbs:3 views/lists/view.hbs:7 +#: views/lists/view.hbs:14 +msgid "Segments" +msgstr "" + +#: views/lists/segments/create.hbs:4 views/lists/segments/create.hbs:5 +#: views/lists/segments/rule-configure.hbs:4 +#: views/lists/segments/rule-create.hbs:4 views/lists/segments/rule-edit.hbs:4 +#: views/lists/segments/segments.hbs:4 +msgid "Create Segment" +msgstr "" + +#: views/lists/segments/create.hbs:6 views/lists/segments/create.hbs:7 +#: views/lists/segments/edit.hbs:7 views/lists/segments/edit.hbs:8 +msgid "Segment Name" +msgstr "" + +#: views/lists/segments/create.hbs:8 views/lists/segments/edit.hbs:9 +msgid "Rule match" +msgstr "" + +#: views/lists/segments/create.hbs:10 views/lists/segments/edit.hbs:11 +msgid "All rules must match" +msgstr "" + +#: views/lists/segments/create.hbs:11 views/lists/segments/edit.hbs:12 +msgid "Any rule can match" +msgstr "" + +#: views/lists/segments/create.hbs:12 +msgid "Add Segment" +msgstr "" + +#: views/lists/segments/edit.hbs:4 views/lists/segments/edit.hbs:5 +#: views/lists/segments/view.hbs:6 views/lists/view.hbs:12 +msgid "Edit Segment" +msgstr "" + +#: views/lists/segments/edit.hbs:6 +msgid "Back to segments" +msgstr "" + +#: views/lists/segments/edit.hbs:13 +msgid "Delete Segment" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:5 +#: views/lists/segments/rule-create.hbs:5 views/lists/segments/rule-edit.hbs:5 +#: views/lists/segments/view.hbs:4 +msgid "Create Rule" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:6 +#: views/lists/segments/rule-create.hbs:6 views/lists/segments/rule-edit.hbs:6 +#: views/lists/segments/view.hbs:10 +msgid "Rule" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:7 +#: views/lists/segments/rule-configure.hbs:8 +#: views/lists/segments/rule-configure.hbs:10 +#: views/lists/segments/rule-configure.hbs:13 +#: views/lists/segments/rule-configure.hbs:25 +#: views/lists/segments/rule-configure.hbs:30 +#: views/lists/segments/rule-edit.hbs:7 views/lists/segments/rule-edit.hbs:8 +#: views/lists/segments/rule-edit.hbs:10 views/lists/segments/rule-edit.hbs:15 +#: views/lists/segments/rule-edit.hbs:29 views/lists/segments/rule-edit.hbs:34 +#: views/lists/segments/view.hbs:11 +msgid "Value" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:9 +#: views/lists/segments/rule-edit.hbs:9 +msgid "" +"Use % for wildcard character, e.g. \"%test\" to match all values that end " +"with \"test\"" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:11 +#: views/lists/segments/rule-configure.hbs:14 +#: views/lists/segments/rule-configure.hbs:26 +#: views/lists/segments/rule-edit.hbs:11 views/lists/segments/rule-edit.hbs:16 +#: views/lists/segments/rule-edit.hbs:30 +msgid "Use exact match" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:12 +#: views/lists/segments/rule-configure.hbs:15 +#: views/lists/segments/rule-configure.hbs:27 +#: views/lists/segments/rule-edit.hbs:12 views/lists/segments/rule-edit.hbs:17 +#: views/lists/segments/rule-edit.hbs:31 +msgid "Use range match" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:16 +#: views/lists/segments/rule-edit.hbs:20 +msgid "Use relative range match" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:17 +#: views/lists/segments/rule-configure.hbs:28 +#: views/lists/segments/rule-edit.hbs:13 views/lists/segments/rule-edit.hbs:18 +#: views/lists/segments/rule-edit.hbs:21 views/lists/segments/rule-edit.hbs:32 +msgid "From" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:18 +#: views/lists/segments/rule-configure.hbs:22 +#: views/lists/segments/rule-edit.hbs:22 views/lists/segments/rule-edit.hbs:26 +msgid "days" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:19 +#: views/lists/segments/rule-configure.hbs:23 +#: views/lists/segments/rule-edit.hbs:23 views/lists/segments/rule-edit.hbs:27 +msgid "before today" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:20 +#: views/lists/segments/rule-configure.hbs:24 +#: views/lists/segments/rule-edit.hbs:24 views/lists/segments/rule-edit.hbs:28 +msgid "after today" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:21 +#: views/lists/segments/rule-configure.hbs:29 +#: views/lists/segments/rule-edit.hbs:14 views/lists/segments/rule-edit.hbs:19 +#: views/lists/segments/rule-edit.hbs:25 views/lists/segments/rule-edit.hbs:33 +msgid "to" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:31 +#: views/lists/segments/rule-edit.hbs:35 lib/models/segments.js:156 +#: lib/models/segments.js:418 +msgid "Selected" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:32 +#: views/lists/segments/rule-edit.hbs:36 lib/models/segments.js:156 +#: lib/models/segments.js:418 +msgid "Not selected" +msgstr "" + +#: views/lists/segments/rule-configure.hbs:33 +msgid "Add Rule" +msgstr "" + +#: views/lists/segments/rule-create.hbs:8 +#: views/lists/subscription/import.hbs:18 +#: views/reports/create-select-template.hbs:5 +#: views/triggers/create-select.hbs:9 +msgid "Next" +msgstr "Következő" + +#: views/lists/segments/rule-edit.hbs:37 +msgid "Delete Rule" +msgstr "" + +#: views/lists/segments/segments.hbs:7 +msgid "Match" +msgstr "" + +#: views/lists/segments/view.hbs:5 views/lists/view.hbs:13 +msgid "Segment" +msgstr "" + +#: views/lists/segments/view.hbs:7 +msgid "Match rules" +msgstr "" + +#: views/lists/segments/view.hbs:8 +msgid "Matching subscribers" +msgstr "" + +#: views/lists/segments/view.hbs:9 +msgid "show" +msgstr "" + +#: views/lists/subscription/add.hbs:3 views/lists/subscription/add.hbs:4 +msgid "Add subscriber" +msgstr "Feliratkozó hozzáadása" + +#: views/lists/subscription/add.hbs:5 +#: views/subscription/partials/subscription-custom-fields.hbs:1 +#: views/users/account.hbs:7 +msgid "Email Address" +msgstr "Email cím" + +#: views/lists/subscription/add.hbs:8 views/lists/subscription/edit.hbs:9 +#: views/settings.hbs:80 views/settings.hbs:95 +#: views/subscription/partials/subscription-custom-fields.hbs:6 +msgid "Begins with" +msgstr "" + +#: views/lists/subscription/add.hbs:9 views/lists/subscription/edit.hbs:10 +msgid "" +"Insert a GPG public key that will be used to encrypt messages sent this " +"subscriber" +msgstr "" + +#: views/lists/subscription/add.hbs:11 views/lists/subscription/edit.hbs:12 +#: views/lists/subscription/import-preview.hbs:9 +msgid "Timezone" +msgstr "" + +#: views/lists/subscription/add.hbs:13 views/lists/subscription/edit.hbs:13 +msgid "Test user?" +msgstr "Teszt felhasználó?" + +#: views/lists/subscription/add.hbs:14 views/lists/subscription/edit.hbs:14 +msgid "" +"If checked then this subscription can be used for previewing campaign " +"messages" +msgstr "" + +#: views/lists/subscription/add.hbs:15 +msgid "" +"This person will not receive a confirmation email so make sure that you have " +"permission to email them." +msgstr "" + +#: views/lists/subscription/edit.hbs:3 views/lists/subscription/edit.hbs:4 +msgid "Edit subscriber" +msgstr "" + +#: views/lists/subscription/edit.hbs:5 +#: views/lists/subscription/import-failed.hbs:5 +msgid "Back to list" +msgstr "" + +#: views/lists/subscription/edit.hbs:6 +#: views/lists/subscription/import-preview.hbs:6 +#: views/subscription/partials/subscription-unsubscribe-form.hbs:1 +#: lib/helpers.js:42 lib/models/segments.js:11 +msgid "Email address" +msgstr "" + +#: views/lists/subscription/edit.hbs:17 +msgid "Delete Subscription" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:3 +msgid "Import status" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:4 +msgid "Failed addresses" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:6 +msgid "" +"Role-based addresses like postmaster@example.com are blocked when importing. " +"Subscribers with role-based email addresses can join your list using the " +"subscription form" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:7 +msgid "see here" +msgstr "" + +#: views/lists/subscription/import-failed.hbs:9 +msgid "Fail reason" +msgstr "" + +#: views/lists/subscription/import-preview.hbs:3 +#: views/lists/subscription/import-preview.hbs:4 +#: views/lists/subscription/import.hbs:3 views/lists/subscription/import.hbs:4 +msgid "Import subscribers" +msgstr "" + +#: views/lists/subscription/import-preview.hbs:10 views/users/api.hbs:21 +#: views/users/api.hbs:36 views/users/api.hbs:44 views/users/api.hbs:52 +#: views/users/api.hbs:64 views/users/api.hbs:75 views/users/api.hbs:83 +#: views/users/api.hbs:91 views/users/api.hbs:96 views/users/api.hbs:101 +#: views/users/api.hbs:106 +msgid "Example" +msgstr "" + +#: views/lists/subscription/import-preview.hbs:11 +msgid "Start import" +msgstr "" + +#: views/lists/subscription/import.hbs:5 +msgid "CSV File" +msgstr "" + +#: views/lists/subscription/import.hbs:6 +msgid "The first line must contain column headings" +msgstr "" + +#: views/lists/subscription/import.hbs:7 +msgid "CSV delimiter" +msgstr "" + +#: views/lists/subscription/import.hbs:8 +msgid "Categorize the imported subscribers as" +msgstr "" + +#: views/lists/subscription/import.hbs:9 routes/lists.js:206 +msgid "Subscribed" +msgstr "" + +#: views/lists/subscription/import.hbs:10 +msgid "Regular subscriber addresses" +msgstr "" + +#: views/lists/subscription/import.hbs:11 +msgid "Subscribed (Force)" +msgstr "" + +#: views/lists/subscription/import.hbs:12 +msgid "Regular subscriber addresses, resubscribe users that have unsubscribed" +msgstr "" + +#: views/lists/subscription/import.hbs:14 +msgid "Suppressed emails that will be unsubscribed from your list" +msgstr "" + +#: views/lists/subscription/import.hbs:15 +msgid "Check imported emails" +msgstr "" + +#: views/lists/subscription/import.hbs:16 views/triggers/triggers.hbs:12 +msgid "Enabled" +msgstr "" + +#: views/lists/subscription/import.hbs:17 views/triggers/triggers.hbs:13 +msgid "Disabled" +msgstr "" + +#: views/lists/view.hbs:3 +msgid "Subscription Form" +msgstr "" + +#: views/lists/view.hbs:4 +msgid "List Actions" +msgstr "" + +#: views/lists/view.hbs:9 views/triggers/create-select.hbs:3 +#: views/triggers/create-select.hbs:4 views/triggers/create.hbs:3 +#: views/triggers/create.hbs:4 views/triggers/create.hbs:27 +#: views/triggers/triggers.hbs:3 +msgid "Create Trigger" +msgstr "" + +#: views/lists/view.hbs:10 +msgid "Add Subscriber" +msgstr "" + +#: views/lists/view.hbs:11 +msgid "Import Subscribers" +msgstr "" + +#: views/lists/view.hbs:15 +msgid "Create New Segment" +msgstr "" + +#: views/lists/view.hbs:16 +msgid "Filter" +msgstr "" + +#: views/lists/view.hbs:17 +msgid "Subscriptions" +msgstr "" + +#: views/lists/view.hbs:18 +msgid "Imports" +msgstr "" + +#: views/lists/view.hbs:25 routes/campaigns.js:255 routes/lists.js:300 +msgid "Finished" +msgstr "" + +#: views/lists/view.hbs:27 +msgid "Added" +msgstr "" + +#: views/lists/view.hbs:28 +msgid "Updated" +msgstr "" + +#: views/lists/view.hbs:29 +msgid "Failed" +msgstr "" + +#: views/lists/view.hbs:31 +msgid "" +"Are you sure? This action should only be called to resolve stalled imports" +msgstr "" + +#: views/lists/view.hbs:32 +msgid "Restart" +msgstr "" + +#: views/mosaico/editor.hbs:1 views/partials/merge-tag-reference.hbs:1 +msgid "Merge tag reference" +msgstr "" + +#: views/mosaico/editor.hbs:4 +msgid "MOSAICO Responsive Email Designer" +msgstr "" + +#: views/mosaico/editor.hbs:5 +msgid "Sucessfully saved" +msgstr "Sikeres mentés" + +#: views/mosaico/editor.hbs:6 +msgid "An error occured while saving the document" +msgstr "A dokumentum mentése közben hiba lépett fel." + +#: views/mosaico/editor.hbs:7 +msgid "Unsaved changes will be lost. Close now?" +msgstr "Az el nem mentett változtatások el fognak veszni. Bezárja?" + +#: views/mosaico/editor.hbs:8 views/mosaico/editor.hbs:9 +msgid "Tags" +msgstr "Címkék" + +#: views/partials/codeeditor.hbs:1 views/partials/grapejs.hbs:1 +#: views/partials/mosaico.hbs:1 views/partials/summernote.hbs:1 +msgid "Template content (HTML)" +msgstr "Sablon tartalma (HTML)" + +#: views/partials/editor-navbar.hbs:1 +msgid "SAVE" +msgstr "MENTÉS" + +#: views/partials/editor-navbar.hbs:2 +msgid "SAVING" +msgstr "MENTÉS FOLYMATBAN" + +#: views/partials/editor-navbar.hbs:3 +msgid "CLOSE" +msgstr "BEZÁRÁS" + +#: views/partials/grapejs.hbs:2 +msgid "Open GrapeJS" +msgstr "GrapeJS megnyitása" + +#: views/partials/html-preview.hbs:1 +msgid "Toggle HTML preview" +msgstr "" + +#: views/partials/html-to-text.hbs:1 +msgid "" +"To extract the text from HTML click here." +msgstr "" + +#: views/partials/html-to-text.hbs:2 +msgid "" +"Please note that your existing plaintext in the field above will be " +"overwritten. This feature uses the Premailer API, a third party " +"service. Their Terms of Service and Privacy Policy apply." +msgstr "" + +#: views/partials/html-to-text.hbs:3 +msgid "An error occurred while talking to the server" +msgstr "" + +#: views/partials/merge-tag-reference.hbs:2 +msgid "" +"Merge tags are tags that are replaced before sending out the message. The " +"format of the merge tag is the following: [TAG_NAME] or " +"[TAG_NAME/fallback] where fallback is an optional " +"text value used when TAG_NAME is empty." +msgstr "" + +#: views/partials/modal-carousel.hbs:1 +msgid "{{title}}" +msgstr "" + +#: views/partials/mosaico.hbs:2 +msgid "Open Mosaico" +msgstr "Mosaico megnyitása" + +#: views/partials/plaintext.hbs:1 +msgid "Template content (plaintext)" +msgstr "Sablon tartalma (sima szöveg)" + +#: views/report-templates/create.hbs:2 views/report-templates/edit.hbs:2 +#: views/report-templates/report-templates.hbs:2 +#: views/reports/create-select-template.hbs:2 views/reports/create.hbs:2 +#: views/reports/edit.hbs:2 views/reports/output.hbs:2 +#: views/reports/reports.hbs:2 views/reports/reports.hbs:5 +#: views/reports/view.hbs:2 lib/tools.js:144 routes/reports.js:31 +msgid "Reports" +msgstr "Jelentések" + +#: views/report-templates/create.hbs:4 views/report-templates/create.hbs:6 +#: views/report-templates/report-templates.hbs:4 views/templates/create.hbs:3 +#: views/templates/create.hbs:4 views/templates/create.hbs:12 +#: views/templates/templates.hbs:3 +msgid "Create Template" +msgstr "Sablon létrehozása" + +#: views/report-templates/create.hbs:5 routes/report-templates.js:231 +msgid "Create Report Template" +msgstr "" + +#: views/report-templates/edit.hbs:4 views/templates/edit.hbs:3 +#: views/templates/edit.hbs:4 +msgid "Edit Template" +msgstr "" + +#: views/report-templates/edit.hbs:5 routes/report-templates.js:262 +msgid "Edit Report Template" +msgstr "" + +#: views/report-templates/edit.hbs:6 views/templates/edit.hbs:12 +msgid "Delete Template" +msgstr "" + +#: views/report-templates/edit.hbs:7 +msgid "Update and Stay" +msgstr "" + +#: views/report-templates/edit.hbs:8 +msgid "Update and Leave" +msgstr "" + +#: views/report-templates/partials/report-template-fields.hbs:2 +msgid "Template Name" +msgstr "" + +#: views/report-templates/partials/report-template-fields.hbs:6 +msgid "User selectable fields" +msgstr "" + +#: views/report-templates/partials/report-template-fields.hbs:7 +msgid "Data processing code" +msgstr "" + +#: views/report-templates/partials/report-template-fields.hbs:8 +msgid "Rendering template" +msgstr "" + +#: views/report-templates/report-templates.hbs:5 +msgid "Blank" +msgstr "" + +#: views/report-templates/report-templates.hbs:6 +msgid "All Subscribers" +msgstr "" + +#: views/report-templates/report-templates.hbs:7 +msgid "Grouped Subscribers" +msgstr "" + +#: views/report-templates/report-templates.hbs:8 +msgid "Export List as CSV" +msgstr "" + +#: views/report-templates/report-templates.hbs:9 views/reports/reports.hbs:4 +#: routes/report-templates.js:29 +msgid "Report Templates" +msgstr "" + +#: views/reports/create-select-template.hbs:3 +#: views/reports/create-select-template.hbs:4 views/reports/create.hbs:3 +#: views/reports/create.hbs:4 views/reports/create.hbs:5 +#: views/reports/reports.hbs:3 routes/reports.js:81 +msgid "Create Report" +msgstr "" + +#: views/reports/edit.hbs:3 views/reports/edit.hbs:4 routes/reports.js:151 +msgid "Edit Report" +msgstr "" + +#: views/reports/edit.hbs:5 +msgid "Delete Report" +msgstr "" + +#: views/reports/partials/report-fields.hbs:2 +msgid "Report Name" +msgstr "" + +#: views/reports/partials/report-fields.hbs:8 +#: views/reports/partials/report-fields.hbs:11 +msgid "" +"Select a campaign in the table above by clicking on the respective row " +"number." +msgstr "" + +#: views/reports/partials/report-select-template.hbs:1 +msgid "Report Template" +msgstr "" + +#: views/settings.hbs:5 +msgid "Service Address (URL)" +msgstr "" + +#: views/settings.hbs:6 +msgid "Enter the URL this service can be reached from" +msgstr "" + +#: views/settings.hbs:7 +msgid "Admin Email" +msgstr "" + +#: views/settings.hbs:8 +msgid "" +"Enter the email address that will be used as \"from\" for system messages" +msgstr "" + +#: views/settings.hbs:9 +msgid "Disable WYSIWYG editor" +msgstr "" + +#: views/settings.hbs:10 +msgid "If checked then message editor displays HTML code without the preview" +msgstr "" + +#: views/settings.hbs:11 +msgid "Disable subscription confirmation messages" +msgstr "" + +#: views/settings.hbs:12 +msgid "" +"If checked then do not send a confirmation message that states the " +"subscriber is now subscribed or unsubscribed. This does not disable double " +"opt-in messages." +msgstr "" + +#: views/settings.hbs:13 +msgid "Tracking ID" +msgstr "" + +#: views/settings.hbs:14 +msgid "Enter Google Analytics tracking code" +msgstr "" + +#: views/settings.hbs:15 +msgid "Frontpage shout out" +msgstr "" + +#: views/settings.hbs:16 +msgid "HTML code shown in the front page header section" +msgstr "" + +#: views/settings.hbs:17 +msgid "Campaign defaults" +msgstr "" + +#: views/settings.hbs:18 +msgid "Sender name" +msgstr "" + +#: views/settings.hbs:19 +msgid "Sender name, eg. My Awesome Company Ltd." +msgstr "" + +#: views/settings.hbs:20 +msgid "Default address" +msgstr "Alapértelmezett postai cím" + +#: views/settings.hbs:21 +msgid "" +"Contact address to provide, eg. 1234 Main Street, Anywhere, MA 01234, USA" +msgstr "" + +#: views/settings.hbs:22 +msgid "Default \"from name\"" +msgstr "" + +#: views/settings.hbs:24 +msgid "Default \"from\" email" +msgstr "" + +#: views/settings.hbs:26 +msgid "Default \"subject line\"" +msgstr "" + +#: views/settings.hbs:28 +msgid "Default homepage (URL)" +msgstr "" + +#: views/settings.hbs:29 +msgid "URL to redirect the subscribed users to, eg. http://example.com/" +msgstr "" + +#: views/settings.hbs:30 +msgid "Mailer Settings" +msgstr "" + +#: views/settings.hbs:31 +msgid "These settings are required to send out e-mail messages" +msgstr "" + +#: views/settings.hbs:32 +msgid "SMTP" +msgstr "" + +#: views/settings.hbs:33 +msgid "AWS SES" +msgstr "" + +#: views/settings.hbs:34 +msgid "Use SMTP for sending mail" +msgstr "" + +#: views/settings.hbs:35 +msgid "Hostname" +msgstr "" + +#: views/settings.hbs:36 +msgid "Port" +msgstr "" + +#: views/settings.hbs:37 +msgid "Port, eg. 465. Autodetected if left blank" +msgstr "" + +#: views/settings.hbs:38 +msgid "Encryption" +msgstr "" + +#: views/settings.hbs:39 +msgid "Disable SMTP authentication" +msgstr "" + +#: views/settings.hbs:40 views/users/forgot.hbs:9 views/users/login.hbs:4 +#: views/users/login.hbs:5 +msgid "Username" +msgstr "Felhasználónév" + +#: views/settings.hbs:41 +msgid "Username, eg. myaccount@example.com" +msgstr "" + +#: views/settings.hbs:42 views/settings.hbs:43 views/users/login.hbs:6 +#: views/users/login.hbs:7 +msgid "Password" +msgstr "Jelszó" + +#: views/settings.hbs:44 +msgid "Use SES API for sending mail" +msgstr "" + +#: views/settings.hbs:45 +msgid "Access Key" +msgstr "" + +#: views/settings.hbs:46 +msgid "AWS Access Key Id" +msgstr "" + +#: views/settings.hbs:47 +msgid "Secret Key" +msgstr "" + +#: views/settings.hbs:48 +msgid "AWS Secret Access Key" +msgstr "" + +#: views/settings.hbs:49 +msgid "Region" +msgstr "" + +#: views/settings.hbs:50 +msgid "Checking" +msgstr "" + +#: views/settings.hbs:51 +msgid "Check Mailer config" +msgstr "" + +#: views/settings.hbs:52 +msgid "Advanced Mailer settings" +msgstr "" + +#: views/settings.hbs:53 +msgid "Log SMTP transactions" +msgstr "" + +#: views/settings.hbs:54 +msgid "Allow self-signed certificates" +msgstr "" + +#: views/settings.hbs:55 +msgid "Max connections" +msgstr "" + +#: views/settings.hbs:56 +msgid "The count of max connections, eg. 10" +msgstr "" + +#: views/settings.hbs:57 +msgid "" +"The count of maximum simultaneous connections to make against the SMTP " +"server (defaults to 5). This limit is per sending process." +msgstr "" + +#: views/settings.hbs:58 +msgid "Max messages" +msgstr "" + +#: views/settings.hbs:59 +msgid "The count of max messages, eg. 100" +msgstr "" + +#: views/settings.hbs:60 +msgid "" +"The number of messages to send through a single connection before the " +"connection is closed and reopened (defaults to 100)" +msgstr "" + +#: views/settings.hbs:61 +msgid "Throttling" +msgstr "" + +#: views/settings.hbs:62 +msgid "Messages per hour eg. 1000" +msgstr "" + +#: views/settings.hbs:63 +msgid "" +"Maximum number of messages to send in an hour. Leave empty or zero for no " +"throttling. If your provider uses a different speed limit (messages/minute " +"or messages/second) then convert this limit into messages/hour (1m/s => " +"3600m/h). This limit is per sending process." +msgstr "" + +#: views/settings.hbs:64 +msgid "VERP bounce handling" +msgstr "" + +#: views/settings.hbs:65 +msgid "" +"Mailtrain is able to use VERP based routing to detect bounces. In this case " +"the message is sent to the recipient using a custom VERP address as the " +"return path of the message. If the message is not accepted a bounce email is " +"sent to this special VERP address and thus a bounce is detected." +msgstr "" + +#: views/settings.hbs:66 +msgid "" +"To get VERP working you need to set up a DNS MX record that points to your " +"Mailtrain hostname. You must also ensure that Mailtrain VERP interface is " +"available from port 25 of your server (port 25 usually requires root user " +"privileges). This way if anyone tries to send email to someuser@verp-" +"hostname then the email should end up to this server." +msgstr "" + +#: views/settings.hbs:67 +msgid "" +"VERP usually only works if you are using your own SMTP server. Regular relay " +"services (SES, SparkPost, Gmail etc.) tend to remove the VERP address from " +"the message." +msgstr "" + +#: views/settings.hbs:68 +msgid "Use VERP to catch bounces" +msgstr "" + +#: views/settings.hbs:69 +msgid "Server hostname" +msgstr "" + +#: views/settings.hbs:70 +msgid "The VERP server hostname, eg. bounces.example.com" +msgstr "" + +#: views/settings.hbs:71 +msgid "" +"VERP bounce handling server hostname. This hostname is used in the SMTP " +"envelope FROM address and the MX DNS records should point to this server" +msgstr "" + +#: views/settings.hbs:72 +msgid "" +"VERP bounce handling server is not enabled. Modify your server configuration " +"file and restart server to enable it" +msgstr "" + +#: views/settings.hbs:73 +msgid "GPG Signing" +msgstr "" + +#: views/settings.hbs:74 +msgid "" +"Only messages that are encrypted can be signed. Subsribers who have not set " +"up a GPG public key in their profile receive normal email messages. Users " +"with GPG key set receive encrypted messages and if you have signing key also " +"set, the messages are signed with this key." +msgstr "" + +#: views/settings.hbs:75 +msgid "" +"Do not use sensitive keys here. The private key and passphrase are not " +"encrypted in the database." +msgstr "" + +#: views/settings.hbs:76 +msgid "Private Key Passphrase" +msgstr "" + +#: views/settings.hbs:77 +msgid "Passphrase for the key if set" +msgstr "" + +#: views/settings.hbs:78 +msgid "Only fill this if your private key is encrypted with a passphrase" +msgstr "" + +#: views/settings.hbs:79 +msgid "GPG Private Key" +msgstr "" + +#: views/settings.hbs:81 +msgid "" +"This value is optional. If you do not provide a private key GPG encrypted " +"messages are sent without signing." +msgstr "" + +#: views/settings.hbs:82 +msgid "DKIM Signing by ZoneMTA" +msgstr "" + +#: views/settings.hbs:83 +msgid "" +"If you are using ZoneMTA then Mailtrain can provide a DKIM key for signing " +"all outgoing messages. Other services usually provide their own means to " +"DKIM sign your messages" +msgstr "" + +#: views/settings.hbs:84 +msgid "" +"Do not use sensitive keys here. The private key is not encrypted in the " +"database." +msgstr "" + +#: views/settings.hbs:85 +msgid "ZoneMTA DKIM API Key" +msgstr "" + +#: views/settings.hbs:86 +msgid "Some secret value" +msgstr "" + +#: views/settings.hbs:87 +msgid "" +"Secret value known to ZoneMTA for requesting DKIM key information. If this " +"value was generated by the Mailtrain installation script then you can keep " +"it as it is" +msgstr "" + +#: views/settings.hbs:88 +msgid "DKIM domain" +msgstr "" + +#: views/settings.hbs:89 +msgid "Domain name for the DKIM key" +msgstr "" + +#: views/settings.hbs:90 +msgid "Leave blank to use the sender email address domain" +msgstr "" + +#: views/settings.hbs:91 views/settings.hbs:92 +msgid "DKIM key selector" +msgstr "" + +#: views/settings.hbs:93 +msgid "Signing is disabled without a valid selector value" +msgstr "" + +#: views/settings.hbs:94 +msgid "DKIM Private Key" +msgstr "" + +#: views/settings.hbs:96 +msgid "" +"This value is optional. If you do not provide a private key then messages " +"are not signed." +msgstr "" + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:1 +#: views/subscription/mail-already-subscribed-text.hbs:1 +#: lib/models/subscriptions.js:174 lib/models/subscriptions.js:895 +msgid "Email address already registered" +msgstr "Ezt az email címet már regisztrálták." + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:2 +#: views/subscription/mail-already-subscribed-text.hbs:2 +msgid "" +"We have received a subscription request. Your email address is however " +"already registered." +msgstr "" +"Megkaptuk a feliratkozási kérelmét, viszont címe már eddig is regisztrálva " +"volt." + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:3 +#: views/subscription/mail-already-subscribed-text.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. Your existing " +"subscription won't be affected." +msgstr "" +"Ha véletlenül kapta ezt a levelet, egyszerűen törölje. A feliratkozás " +"státusza nem fog változni." + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:4 +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:3 +msgid "If you want to modify your subscription then you can " +msgstr "Ha szeretné megváltoztatni feliratkozását, akkor" + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:5 +#: views/subscription/mail-already-subscribed-text.hbs:5 +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:4 +#: views/subscription/mail-subscription-confirmed-text.hbs:4 +msgid "manage your preferences" +msgstr "módosíthatja beállításait" + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:6 +#: views/subscription/mail-already-subscribed-text.hbs:6 +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:5 +#: views/subscription/mail-subscription-confirmed-text.hbs:5 +#: views/users/login.hbs:10 +msgid "or" +msgstr "vagy" + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:7 +#: views/subscription/mail-already-subscribed-text.hbs:7 +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:6 +#: views/subscription/mail-subscription-confirmed-text.hbs:6 +msgid "unsubscribe here" +msgstr "leiratkozhat itt" + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:8 +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:7 +#: views/subscription/web-confirm-subscription-notice.mjml.hbs:3 +#: views/subscription/web-confirm-unsubscription-notice.mjml.hbs:3 +#: views/subscription/web-manual-unsubscribe-notice.mjml.hbs:4 +#: views/subscription/web-subscribed-notice.mjml.hbs:4 +#: views/subscription/web-unsubscribed-notice.mjml.hbs:3 +#: views/subscription/web-updated-notice.mjml.hbs:3 +msgid "Return to our website" +msgstr "Visszatérés az odalunkra" + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:9 +#: views/subscription/mail-already-subscribed-text.hbs:8 +#: views/subscription/mail-confirm-address-change-html.mjml.hbs:4 +#: views/subscription/mail-confirm-address-change-text.hbs:4 +#: views/subscription/mail-confirm-subscription-html.mjml.hbs:4 +#: views/subscription/mail-confirm-subscription-text.hbs:4 +#: views/subscription/mail-confirm-unsubscription-html.mjml.hbs:4 +#: views/subscription/mail-confirm-unsubscription-text.hbs:4 +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:8 +#: views/subscription/mail-subscription-confirmed-text.hbs:7 +#: views/subscription/mail-unsubscription-confirmed-html.mjml.hbs:5 +#: views/subscription/mail-unsubscription-confirmed-text.hbs:5 +msgid "For questions about this list, please contact:" +msgstr "A listával kapcsolatos kérdéseivel itt tud megkeresni minket:" + +#: views/subscription/mail-already-subscribed-text.hbs:4 +#: views/subscription/mail-subscription-confirmed-text.hbs:3 +msgid "If you want to modify your subscription then you can:" +msgstr "Ha szeretné megváltoztatni feliratkozását, akkor" + +#: views/subscription/mail-confirm-address-change-html.mjml.hbs:1 +#: views/subscription/mail-confirm-address-change-text.hbs:1 +msgid "Please Confirm Subscription Address Change" +msgstr "Kérjük erősítse meg a feliratkozáshoz használt emailcímének változását" + +#: views/subscription/mail-confirm-address-change-html.mjml.hbs:2 +#: views/subscription/mail-confirm-address-change-text.hbs:2 +msgid "Yes, subscribe this email address to the list" +msgstr "Igen, szeretnék feliratkozni a listára ezzel az email-lel." + +#: views/subscription/mail-confirm-address-change-html.mjml.hbs:3 +#: views/subscription/mail-confirm-subscription-html.mjml.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"subscribed if you don't click the confirmation link above." +msgstr "" +"Ha nem ön kérte ezt a levelet, nyugodtan törölheti. Ha nem kattint a fenti " +"linkre, továbbra is feliratkozva marad." + +#: views/subscription/mail-confirm-address-change-text.hbs:3 +#: views/subscription/mail-confirm-subscription-text.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"subscribed unless you click the confirmation link above." +msgstr "" +"Ha nem ön kérte ezt a levelet, nyugodtan törölheti. Ha nem kattint a fenti " +"linkre, nem vesszük fel a listára." + +#: views/subscription/mail-confirm-subscription-html.mjml.hbs:1 +#: views/subscription/mail-confirm-subscription-text.hbs:1 +#: views/subscription/mail-confirm-unsubscription-text.hbs:1 +#: routes/subscription.js:432 +msgid "Please Confirm Subscription" +msgstr "Erősítse meg a feliratkozást" + +#: views/subscription/mail-confirm-subscription-html.mjml.hbs:2 +#: views/subscription/mail-confirm-subscription-text.hbs:2 +msgid "Yes, subscribe me to this list" +msgstr "Igen, szeretnék feliratkozni a listára." + +#: views/subscription/mail-confirm-unsubscription-html.mjml.hbs:1 +msgid "Please Confirm Unsubscription" +msgstr "Erősítse meg a leiratkozást" + +#: views/subscription/mail-confirm-unsubscription-html.mjml.hbs:2 +#: views/subscription/mail-confirm-unsubscription-text.hbs:2 +msgid "Yes, unsubscribe me from this list" +msgstr "Igen, szeretnék leiratkozni a listáról." + +#: views/subscription/mail-confirm-unsubscription-html.mjml.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"unsubscribed if you don't click the confirmation link above." +msgstr "" +"Ha nem ön kérte ezt a levelet, nyugodtan törölheti. Ha nem kattint a fenti " +"linkre, továbbra is feliratkozva marad." + +#: views/subscription/mail-confirm-unsubscription-text.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"unsubscribed unless you click the confirmation link above." +msgstr "" +"Ha nem ön kérte ezt a levelet, nyugodtan törölheti. Ha nem kattint a fenti " +"linkre, továbbra is feliratkozva marad." + +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:1 +#: views/subscription/mail-subscription-confirmed-text.hbs:1 +#: views/subscription/web-subscribed-notice.mjml.hbs:1 +msgid "Subscription Confirmed" +msgstr "Feliratkozás megerősítve" + +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:2 +msgid "Your subscription to our list has been confirmed" +msgstr "A listára való feliratkozása megerősítve." + +#: views/subscription/mail-subscription-confirmed-text.hbs:2 +#: views/subscription/web-subscribed-notice.mjml.hbs:2 +msgid "Your subscription to our list has been confirmed." +msgstr "A listára való feliratkozása megerősítve." + +#: views/subscription/mail-unsubscription-confirmed-html.mjml.hbs:1 +#: views/subscription/mail-unsubscription-confirmed-text.hbs:1 +msgid "You Are Now Unsubscribed" +msgstr "Leiratkozott a listáról." + +#: views/subscription/mail-unsubscription-confirmed-html.mjml.hbs:2 +msgid "We have removed your email address from our list" +msgstr "Email címét eltávolítottuk a listánkról." + +#: views/subscription/mail-unsubscription-confirmed-html.mjml.hbs:3 +#: views/subscription/mail-unsubscription-confirmed-text.hbs:3 +msgid "If you unsubscribed by mistake, you can re-subscribe at:" +msgstr "Ha véletlenül iratkozott le, újra feliratkozhat itt:" + +#: views/subscription/mail-unsubscription-confirmed-text.hbs:2 +msgid "We have removed your email address from our list." +msgstr "Email címét eltávolítottuk a listánkról." + +#: views/subscription/partials/subscription-custom-fields.hbs:2 +msgid "want to change it?" +msgstr "meg akarja változtatni?" + +#: views/subscription/partials/subscription-custom-fields.hbs:5 +msgid "Download signature verification key" +msgstr "" + +#: views/subscription/partials/subscription-custom-fields.hbs:7 +msgid "" +"Insert your GPG public key here to encrypt messages sent to your address" +msgstr "Adja meg publikus GPG kulcsát, hogy kódolt üzeneteket küldhessünk" + +#: views/subscription/partials/subscription-custom-fields.hbs:8 +msgid "optional" +msgstr "nem kötelező" + +#: views/subscription/partials/subscription-flash-messages.hbs:1 +#: views/subscription/partials/subscription-flash-messages.hbs:3 +msgid "Warning!" +msgstr "Figyelem!" + +#: views/subscription/partials/subscription-flash-messages.hbs:2 +msgid "If JavaScript was not enabled then no confirmation message was sent" +msgstr "" +"Ha a JavaScript nem volt engedélyezve, akkor nem küldünk megerősítő levelet." + +#: views/subscription/partials/subscription-flash-messages.hbs:4 +msgid "JavaScript must be enabled in order for this form to work" +msgstr "Engedélyezni kell a JavaScriptet az űrlap használatához." + +#: views/subscription/partials/subscription-manage-address-form.hbs:1 +msgid "Existing Email Address" +msgstr "Eddigi email cím" + +#: views/subscription/partials/subscription-manage-address-form.hbs:2 +msgid "New Email Address" +msgstr "Új email cím" + +#: views/subscription/partials/subscription-manage-address-form.hbs:3 +msgid "Your new email address" +msgstr "Az ön új email címe" + +#: views/subscription/partials/subscription-manage-address-form.hbs:4 +msgid "" +"You will receive a confirmation request to your new email address that you " +"need to accept before your email is actually changed" +msgstr "" +"Küldünk egy megerősítést kérő üzenetet az új email címére. Az új cím csak " +"akkor lép érvénybe, ha az üzenetben rákattint a megerősítésre." + +#: views/subscription/partials/subscription-manage-address-form.hbs:5 +#: views/subscription/web-manage-address.mjml.hbs:2 +msgid "Update Email Address" +msgstr "Email cím cseréje" + +#: views/subscription/partials/subscription-manage-form.hbs:1 +#: views/subscription/web-manage.mjml.hbs:2 +msgid "Update Profile" +msgstr "Profil frissítése" + +#: views/subscription/partials/subscription-subscribe-form.hbs:1 +#: views/subscription/web-subscribe.mjml.hbs:2 +#: views/subscription/widget-subscribe.hbs:1 +msgid "Subscribe to list" +msgstr "Feliratkozás" + +#: views/subscription/web-confirm-subscription-notice.mjml.hbs:1 +#: views/subscription/web-confirm-unsubscription-notice.mjml.hbs:1 +#: views/subscription/widget-subscribe.hbs:4 +msgid "Almost Finished" +msgstr "Majdnem kész" + +#: views/subscription/web-confirm-subscription-notice.mjml.hbs:2 +#: views/subscription/widget-subscribe.hbs:5 +msgid "" +"We need to confirm your email address. To complete the subscription process, " +"please click the link in the email we just sent you." +msgstr "" +"Meg kell erősítenie email címét. A feliratkozás befejezéséhez kattintson a " +"linkre, amit a megerősítést kérő üzenetben küldtünk." + +#: views/subscription/web-confirm-unsubscription-notice.mjml.hbs:2 +msgid "" +"We need to confirm your email address. To complete the unsubscription " +"process, please click the link in the email we just sent you." +msgstr "" +"Meg kell erősítenie email címét. A leiratkozás befejezéséhez kattintson a " +"linkre, amit a megerősítést kérő üzenetben küldtünk." + +#: views/subscription/web-manage-address.mjml.hbs:1 +msgid "Update Your Email Address" +msgstr "Email cím frissítése" + +#: views/subscription/web-manage.mjml.hbs:1 +msgid "Update Your Preferences" +msgstr "Beállítások frissítése" + +#: views/subscription/web-manual-unsubscribe-notice.mjml.hbs:1 +msgid "Online Unsubscription Is Not Possible" +msgstr "Nem lehetséges az online feliratkozás." + +#: views/subscription/web-manual-unsubscribe-notice.mjml.hbs:2 +msgid "Please contact us at" +msgstr "Vegye fel velünk a kapcsolatot itt:" + +#: views/subscription/web-manual-unsubscribe-notice.mjml.hbs:3 +msgid "to get removed from the list" +msgstr "hogy eltávolítsuk a listáról." + +#: views/subscription/web-subscribe.mjml.hbs:1 +msgid "Subscribe to List" +msgstr "Feliratkozás a listára" + +#: views/subscription/web-subscribed-notice.mjml.hbs:3 +msgid "Thank you for subscribing!" +msgstr "Köszönjük, hogy feliratkozott!" + +#: views/subscription/web-unsubscribed-notice.mjml.hbs:1 +msgid "Unsubscribe Successful" +msgstr "Sikeresen leiratkozott." + +#: views/subscription/web-unsubscribed-notice.mjml.hbs:2 +msgid "You have been removed from:" +msgstr "El lett távolítva innen:" + +#: views/subscription/web-updated-notice.mjml.hbs:1 +msgid "Profile Updated" +msgstr "Profil frissítve." + +#: views/subscription/web-updated-notice.mjml.hbs:2 +msgid "Your profile information has been updated." +msgstr "A profilja frissült." + +#: views/subscription/widget-subscribe.hbs:2 +msgid "Sending ..." +msgstr "Küldés..." + +#: views/subscription/widget-subscribe.hbs:3 +msgid "It looks like you are already subscribed to this list." +msgstr "Úgy tűnik, korábban már feliratkozott a listára." + +#: views/templates/create.hbs:5 views/templates/edit.hbs:6 +msgid "Template name" +msgstr "Sablon neve" + +#: views/templates/create.hbs:6 views/templates/edit.hbs:7 +msgid "Name for this template, eg. Newsletter" +msgstr "" + +#: views/templates/create.hbs:7 +msgid "HTML Editor" +msgstr "HTML szerkesztő" + +#: views/templates/create.hbs:10 views/templates/edit.hbs:9 +msgid "Optional comments about this template" +msgstr "" + +#: views/templates/edit.hbs:5 +msgid "Back to templates" +msgstr "" + +#: views/templates/edit.hbs:11 +msgid "Duplicate" +msgstr "Duplikálás" + +#: views/triggers/create-select.hbs:2 views/triggers/create.hbs:2 +#: views/triggers/edit.hbs:2 views/triggers/triggered.hbs:2 +#: views/triggers/triggers.hbs:2 views/triggers/triggers.hbs:4 +msgid "Automation Triggers" +msgstr "" + +#: views/triggers/create-select.hbs:5 +msgid "Select a list for the trigger" +msgstr "" + +#: views/triggers/create.hbs:5 views/triggers/edit.hbs:6 +msgid "Trigger name" +msgstr "" + +#: views/triggers/create.hbs:6 views/triggers/edit.hbs:7 +msgid "Name for this trigger, eg. Inactive subscribers" +msgstr "" + +#: views/triggers/create.hbs:8 views/triggers/edit.hbs:9 +msgid "Optional comments about this trigger" +msgstr "" + +#: views/triggers/create.hbs:12 views/triggers/edit.hbs:14 +msgid "Trigger rule" +msgstr "" + +#: views/triggers/create.hbs:13 views/triggers/edit.hbs:15 +msgid "Trigger fires" +msgstr "" + +#: views/triggers/create.hbs:14 views/triggers/edit.hbs:16 +msgid "days after:" +msgstr "" + +#: views/triggers/create.hbs:16 views/triggers/create.hbs:21 +#: views/triggers/edit.hbs:18 views/triggers/edit.hbs:23 +msgid "Event" +msgstr "" + +#: views/triggers/create.hbs:18 views/triggers/create.hbs:19 +#: views/triggers/create.hbs:25 views/triggers/edit.hbs:20 +#: views/triggers/edit.hbs:21 views/triggers/edit.hbs:27 +msgid "Campaign" +msgstr "" + +#: views/triggers/create.hbs:23 views/triggers/edit.hbs:25 +msgid "Trigger action" +msgstr "" + +#: views/triggers/create.hbs:24 views/triggers/edit.hbs:26 +msgid "Send campaign" +msgstr "" + +#: views/triggers/edit.hbs:3 views/triggers/edit.hbs:4 +msgid "Edit Trigger" +msgstr "" + +#: views/triggers/edit.hbs:5 +msgid "Back to triggers" +msgstr "" + +#: views/triggers/edit.hbs:11 +msgid "Trigger is enabled" +msgstr "" + +#: views/triggers/edit.hbs:29 +msgid "Delete Trigger" +msgstr "" + +#: views/triggers/triggered.hbs:3 +msgid "Triggered" +msgstr "" + +#: views/triggers/triggered.hbs:4 +msgid "Triggered subscribers" +msgstr "" + +#: views/triggers/triggered.hbs:5 +msgid "Subscribers who caused this trigger to fire" +msgstr "" + +#: views/triggers/triggered.hbs:9 +msgid "Triggered time" +msgstr "" + +#: views/triggers/triggers.hbs:9 +msgid "Trigger" +msgstr "" + +#: views/triggers/triggers.hbs:10 +msgid "Target Campaign" +msgstr "" + +#: views/triggers/triggers.hbs:11 +msgid "Triggered count" +msgstr "" + +#: views/users/account.hbs:4 +msgid "This account is managed through LDAP." +msgstr "" + +#: views/users/account.hbs:5 +msgid "Associated Email Address" +msgstr "" + +#: views/users/account.hbs:8 +msgid "Your e-mail address" +msgstr "" + +#: views/users/account.hbs:9 +msgid "" +"This address is used for account recovery in case you lose your password" +msgstr "" + +#: views/users/account.hbs:10 +msgid "Password change" +msgstr "" + +#: views/users/account.hbs:11 +msgid "" +"You only need to fill out this form if you want to change your current " +"password" +msgstr "" + +#: views/users/account.hbs:12 views/users/account.hbs:13 +msgid "Current Password" +msgstr "" + +#: views/users/account.hbs:14 views/users/account.hbs:15 +#: views/users/reset.hbs:6 views/users/reset.hbs:7 +msgid "New Password" +msgstr "" + +#: views/users/account.hbs:16 views/users/reset.hbs:8 +msgid "Confirm Password" +msgstr "" + +#: views/users/account.hbs:17 views/users/reset.hbs:9 +msgid "Confirm New Password" +msgstr "" + +#: views/users/api.hbs:4 +msgid "Are you sure? Resetting would invalidate the currently existing token." +msgstr "" + +#: views/users/api.hbs:5 +msgid "Are you sure?" +msgstr "" + +#: views/users/api.hbs:6 +msgid "Reset Access Token" +msgstr "" + +#: views/users/api.hbs:7 +msgid "Generate Access Token" +msgstr "" + +#: views/users/api.hbs:8 +msgid "Personal access token:" +msgstr "" + +#: views/users/api.hbs:9 +msgid "Access token not yet generated" +msgstr "" + +#: views/users/api.hbs:10 +msgid "Notes about the API" +msgstr "" + +#: views/users/api.hbs:11 +msgid "" +"API response is a JSON structure with error and data properties. If the response error has a value set then " +"the request failed." +msgstr "" + +#: views/users/api.hbs:12 +msgid "" +"You need to define proper Content-Type when making a request. " +"You can either use application/x-www-form-urlencoded for normal " +"form data or application/json for a JSON payload. Using " +"multipart/form-data is not supported." +msgstr "" + +#: views/users/api.hbs:13 +msgid "Get list of subscriptions" +msgstr "" + +#: views/users/api.hbs:14 +msgid "" +"Retrieve a list of subscriptions to the list referenced by :listId. All " +"fields of the subscribers will be returned. Note that custom fields will " +"have generated names." +msgstr "" + +#: views/users/api.hbs:15 views/users/api.hbs:24 views/users/api.hbs:26 +#: views/users/api.hbs:39 views/users/api.hbs:41 views/users/api.hbs:47 +#: views/users/api.hbs:49 views/users/api.hbs:55 views/users/api.hbs:57 +#: views/users/api.hbs:67 views/users/api.hbs:78 views/users/api.hbs:80 +#: views/users/api.hbs:86 views/users/api.hbs:88 views/users/api.hbs:94 +#: views/users/api.hbs:99 views/users/api.hbs:104 +msgid "arguments" +msgstr "" + +#: views/users/api.hbs:16 views/users/api.hbs:25 views/users/api.hbs:40 +#: views/users/api.hbs:48 views/users/api.hbs:56 views/users/api.hbs:68 +#: views/users/api.hbs:79 views/users/api.hbs:87 views/users/api.hbs:95 +#: views/users/api.hbs:100 views/users/api.hbs:105 +msgid "your personal access token" +msgstr "" + +#: views/users/api.hbs:17 views/users/api.hbs:69 +msgid "Start position" +msgstr "" + +#: views/users/api.hbs:18 views/users/api.hbs:70 +msgid "optional, default 0" +msgstr "" + +#: views/users/api.hbs:19 +msgid "limit subscription count in response" +msgstr "" + +#: views/users/api.hbs:20 views/users/api.hbs:72 +msgid "optional, default 10000" +msgstr "" + +#: views/users/api.hbs:22 +msgid "Add subscription" +msgstr "" + +#: views/users/api.hbs:23 +msgid "" +"This API call either inserts a new subscription or updates existing. Fields " +"not included are left as is, so if you update only LAST_NAME value, then " +"FIRST_NAME is kept untouched for an existing subscription." +msgstr "" + +#: views/users/api.hbs:27 views/users/api.hbs:42 views/users/api.hbs:50 +msgid "subscriber's email address" +msgstr "" + +#: views/users/api.hbs:28 views/users/api.hbs:43 views/users/api.hbs:51 +#: views/users/api.hbs:59 views/users/api.hbs:82 views/users/api.hbs:90 +msgid "required" +msgstr "" + +#: views/users/api.hbs:29 +msgid "subscriber's first name" +msgstr "feliratkozó keresztneve" + +#: views/users/api.hbs:30 +msgid "subscriber's last name" +msgstr "feliratkozó vezetékneve" + +#: views/users/api.hbs:31 +msgid "" +"subscriber's timezone (eg. \"Europe/Tallinn\", \"PST\" or \"UTC\"). If not " +"set defaults to \"UTC\"" +msgstr "" +"Feliratkozó időzónája (pl.: \"Europe/Budapest\", \"CEST\", \"UTC\"). " +"Alapértelmezés szerint \"UTC\"." + +#: views/users/api.hbs:32 +msgid "" +"custom field value. Use yes/no for option group values (checkboxes, radios, " +"drop downs)" +msgstr "" + +#: views/users/api.hbs:33 +msgid "Additional POST arguments" +msgstr "" + +#: views/users/api.hbs:34 +msgid "" +"set to \"yes\" if you want to make sure the email is marked as subscribed " +"even if it was previously marked as unsubscribed. If the email was already " +"unsubscribed/blocked then subscription status is not changed" +msgstr "" + +#: views/users/api.hbs:35 +msgid "" +"set to \"yes\" if you want to send confirmation email to the subscriber " +"before actually marking as subscribed" +msgstr "" + +#: views/users/api.hbs:37 +msgid "Remove subscription" +msgstr "" + +#: views/users/api.hbs:38 +msgid "This API call marks a subscription as unsubscribed" +msgstr "" + +#: views/users/api.hbs:45 +msgid "Delete subscription" +msgstr "" + +#: views/users/api.hbs:46 +msgid "This API call deletes a subscription" +msgstr "" + +#: views/users/api.hbs:53 +msgid "Add new custom field" +msgstr "" + +#: views/users/api.hbs:54 +msgid "This API call creates a new custom field for a list." +msgstr "" + +#: views/users/api.hbs:58 +msgid "field name" +msgstr "" + +#: views/users/api.hbs:60 +msgid "one of the following types:" +msgstr "" + +#: views/users/api.hbs:61 +msgid "" +"If the type is 'option' then you also need to specify the parent element ID" +msgstr "" + +#: views/users/api.hbs:62 +msgid "" +"Template for the group element. If not set, then values of the elements are " +"joined with commas" +msgstr "" + +#: views/users/api.hbs:63 +msgid "" +"if not visible then the subscriber can not view or modify this value at the " +"profile page" +msgstr "" + +#: views/users/api.hbs:65 +msgid "Get list of blacklisted emails" +msgstr "" + +#: views/users/api.hbs:66 +msgid "This API call get list of blacklisted emails." +msgstr "" + +#: views/users/api.hbs:71 +msgid "limit emails count in response" +msgstr "" + +#: views/users/api.hbs:73 +msgid "filter by part of email" +msgstr "" + +#: views/users/api.hbs:74 +msgid "optional, default ''" +msgstr "" + +#: views/users/api.hbs:77 +msgid "This API call either add emails to blacklist" +msgstr "" + +#: views/users/api.hbs:81 views/users/api.hbs:89 +msgid "email address" +msgstr "" + +#: views/users/api.hbs:84 +msgid "Delete email from blacklist" +msgstr "" + +#: views/users/api.hbs:85 +msgid "This API call either delete emails from blacklist" +msgstr "" + +#: views/users/api.hbs:92 +msgid "Get the lists a user has subscribed to" +msgstr "" + +#: views/users/api.hbs:93 +msgid "Retrieve the lists that the user with :email has subscribed to. " +msgstr "" + +#: views/users/api.hbs:97 +msgid "Get all lists" +msgstr "" + +#: views/users/api.hbs:98 +msgid "Retrieve every list. " +msgstr "" + +#: views/users/api.hbs:102 +msgid "Get list by id" +msgstr "" + +#: views/users/api.hbs:103 +msgid "Retrieve the list with :id " +msgstr "" + +#: views/users/forgot.hbs:3 views/users/reset.hbs:3 +msgid "Password Reset" +msgstr "" + +#: views/users/forgot.hbs:4 +msgid "Reset your password?" +msgstr "" + +#: views/users/forgot.hbs:5 +msgid "Accounts are managed through LDAP." +msgstr "" + +#: views/users/forgot.hbs:6 views/users/reset.hbs:10 +msgid "Reset Password" +msgstr "" + +#: views/users/forgot.hbs:7 +msgid "" +"Please provide the username or email address that you used when you signed " +"up for your Mailtrain account." +msgstr "" + +#: views/users/forgot.hbs:8 +msgid "We will send you an email that will allow you to reset your password." +msgstr "" + +#: views/users/forgot.hbs:10 +msgid "Username or email address" +msgstr "" + +#: views/users/forgot.hbs:11 +msgid "Send verification email" +msgstr "" + +#: views/users/login.hbs:8 +msgid "Remember me" +msgstr "Emlékezzen rám" + +#: views/users/login.hbs:11 views/users/login.hbs:12 +msgid "Forgot password?" +msgstr "Elfelejtett jelszó" + +#: views/users/reset.hbs:4 +msgid "Choose your new password" +msgstr "" + +#: views/users/reset.hbs:5 +msgid "Please enter a new password." +msgstr "" + +#: lib/editor-helpers.js:17 routes/templates.js:95 +msgid "Could not find template with specified ID" +msgstr "" + +#: lib/editor-helpers.js:33 routes/archive.js:145 routes/campaigns.js:131 +#: routes/campaigns.js:284 routes/campaigns.js:379 routes/campaigns.js:427 +#: routes/campaigns.js:467 routes/campaigns.js:844 routes/campaigns.js:867 +#: routes/campaigns.js:886 routes/campaigns.js:908 routes/triggers.js:146 +msgid "Could not find campaign with specified ID" +msgstr "" + +#: lib/editor-helpers.js:47 routes/editorapi.js:320 +msgid "Invalid resource type" +msgstr "" + +#: lib/feed.js:31 +msgid "Bad status code %s" +msgstr "" + +#: lib/helpers.js:33 +msgid "URL that points to the unsubscribe page" +msgstr "" + +#: lib/helpers.js:36 +msgid "URL that points to the preferences page of the subscriber" +msgstr "" + +#: lib/helpers.js:39 +msgid "URL to preview the message in a browser" +msgstr "" + +#: lib/helpers.js:45 lib/models/segments.js:31 +msgid "First name" +msgstr "Keresztnév" + +#: lib/helpers.js:48 lib/models/segments.js:35 +msgid "Last name" +msgstr "Vezetéknév" + +#: lib/helpers.js:51 +msgid "Full name (first and last name combined)" +msgstr "Teljes név (vezetéknév + keresztnév)" + +#: lib/helpers.js:54 +msgid "Unique ID that identifies the recipient" +msgstr "" + +#: lib/helpers.js:57 +msgid "Unique ID that identifies the list used for this campaign" +msgstr "" + +#: lib/helpers.js:60 +msgid "Unique ID that identifies current campaign" +msgstr "" + +#: lib/helpers.js:68 lib/helpers.js:80 +msgid "content from an RSS entry" +msgstr "" + +#: lib/helpers.js:71 +msgid "RSS entry title" +msgstr "" + +#: lib/helpers.js:74 +msgid "RSS entry date" +msgstr "" + +#: lib/helpers.js:77 +msgid "RSS entry link" +msgstr "" + +#: lib/helpers.js:83 +msgid "RSS entry summary" +msgstr "" + +#: lib/helpers.js:86 +msgid "RSS entry image URL" +msgstr "" + +#: lib/mailer.js:245 +msgid "Invalid mail transport" +msgstr "" + +#: lib/models/campaigns.js:105 lib/models/campaigns.js:132 +#: lib/models/campaigns.js:205 lib/models/campaigns.js:328 +#: lib/models/campaigns.js:590 lib/models/campaigns.js:723 +msgid "Missing Campaign ID" +msgstr "" + +#: lib/models/campaigns.js:241 +msgid "Emtpy or too large attahcment" +msgstr "" + +#: lib/models/campaigns.js:408 lib/models/campaigns.js:600 +msgid "Campaign Name must be set" +msgstr "" + +#: lib/models/campaigns.js:412 +msgid "RSS URL must be set and needs to be a valid URL" +msgstr "" + +#: lib/models/campaigns.js:568 +msgid "Selected template not found" +msgstr "" + +#: lib/models/campaigns.js:924 +msgid "Invalid or missing message ID" +msgstr "" + +#: lib/models/campaigns.js:1065 +msgid "Unrecognized message status" +msgstr "" + +#: lib/models/confirmations.js:27 +msgid "Could not store confirmation data" +msgstr "" + +#: lib/models/fields.js:24 +msgid "Drop Down" +msgstr "" + +#: lib/models/fields.js:25 +msgid "Date (MM/DD/YYY)" +msgstr "Dátum (NN/HH/ÉÉÉÉ)" + +#: lib/models/fields.js:29 +msgid "JSON value for custom rendering" +msgstr "" + +#: lib/models/fields.js:30 +msgid "Option" +msgstr "" + +#: lib/models/fields.js:53 lib/models/fields.js:98 lib/models/fields.js:123 +#: lib/models/forms.js:46 lib/models/lists.js:115 lib/models/lists.js:150 +#: lib/models/lists.js:265 lib/models/segments.js:43 lib/models/segments.js:176 +#: lib/models/subscriptions.js:79 lib/models/subscriptions.js:390 +#: lib/models/subscriptions.js:566 lib/models/subscriptions.js:657 +#: lib/models/subscriptions.js:710 lib/models/subscriptions.js:773 +#: lib/models/subscriptions.js:816 +msgid "Missing List ID" +msgstr "" + +#: lib/models/fields.js:129 +msgid "Option field requires a group to be selected" +msgstr "" + +#: lib/models/fields.js:149 lib/models/fields.js:199 +msgid "Missing Field ID" +msgstr "" + +#: lib/models/fields.js:153 lib/models/segments.js:185 +#: lib/models/segments.js:225 +msgid "Field Name must be set" +msgstr "" + +#: lib/models/fields.js:216 +msgid "Custom field not found" +msgstr "" + +#: lib/models/fields.js:289 +msgid "Unknown column type %s" +msgstr "" + +#: lib/models/fields.js:293 +msgid "Missing column name" +msgstr "" + +#: lib/models/fields.js:297 +msgid "Missing list ID" +msgstr "" + +#: lib/models/fields.js:305 +msgid "Provided List ID not found" +msgstr "" + +#: lib/models/forms.js:70 lib/models/forms.js:113 lib/models/forms.js:201 +#: lib/models/forms.js:291 +msgid "Missing Form ID" +msgstr "" + +#: lib/models/forms.js:121 lib/models/forms.js:205 +msgid "Form Name must be set" +msgstr "" + +#: lib/models/forms.js:307 +msgid "Custom form not found" +msgstr "" + +#: lib/models/links.js:337 routes/campaigns.js:533 routes/campaigns.js:581 +#: routes/campaigns.js:621 routes/campaigns.js:671 services/sender.js:305 +msgid "Campaign not found" +msgstr "" + +#: lib/models/links.js:345 routes/lists.js:181 services/sender.js:312 +msgid "List not found" +msgstr "Lista nem található." + +#: lib/models/links.js:353 +msgid "Subscription not found" +msgstr "" + +#: lib/models/lists.js:167 lib/models/lists.js:211 +msgid "List Name must be set" +msgstr "" + +#: lib/models/lists.js:294 +msgid "Missing List CID" +msgstr "" + +#: lib/models/report-templates.js:26 lib/models/report-templates.js:70 +#: lib/models/report-templates.js:142 +msgid "Missing report template ID" +msgstr "" + +#: lib/models/report-templates.js:77 +msgid "Report template name must be set" +msgstr "" + +#: lib/models/reports.js:40 lib/models/reports.js:110 lib/models/reports.js:188 +msgid "Missing report ID" +msgstr "" + +#: lib/models/reports.js:116 +msgid "Report name must be set" +msgstr "" + +#: lib/models/segments.js:15 +msgid "Signup country" +msgstr "" + +#: lib/models/segments.js:19 lib/models/triggers.js:12 +msgid "Sign up date" +msgstr "Feliratkozás ideje" + +#: lib/models/segments.js:23 lib/models/triggers.js:16 +msgid "Latest open" +msgstr "" + +#: lib/models/segments.js:27 lib/models/triggers.js:20 +msgid "Latest click" +msgstr "" + +#: lib/models/segments.js:69 lib/models/segments.js:216 +#: lib/models/segments.js:256 lib/models/segments.js:278 +msgid "Missing Segment ID" +msgstr "" + +#: lib/models/segments.js:85 lib/models/segments.js:549 +#: lib/models/segments.js:658 +msgid "Segment not found" +msgstr "" + +#: lib/models/segments.js:146 lib/models/segments.js:147 +#: lib/models/segments.js:408 lib/models/segments.js:409 +msgid "%s days after today" +msgstr "" + +#: lib/models/segments.js:146 lib/models/segments.js:147 +#: lib/models/segments.js:408 lib/models/segments.js:409 +msgid "%s days before today" +msgstr "" + +#: lib/models/segments.js:148 lib/models/segments.js:410 +msgid "today" +msgstr "" + +#: lib/models/segments.js:189 lib/models/segments.js:229 +msgid "Invalid segment rule type" +msgstr "" + +#: lib/models/segments.js:289 lib/models/segments.js:454 routes/segments.js:266 +#: routes/segments.js:300 routes/segments.js:370 routes/segments.js:381 +msgid "Selected segment not found" +msgstr "" + +#: lib/models/segments.js:294 lib/models/segments.js:459 routes/segments.js:272 +#: routes/segments.js:306 routes/segments.js:387 +msgid "Invalid rule type" +msgstr "" + +#: lib/models/segments.js:358 lib/models/segments.js:434 +#: lib/models/segments.js:524 +msgid "Missing Rule ID" +msgstr "" + +#: lib/models/segments.js:374 +msgid "Specified rule not found" +msgstr "" + +#: lib/models/segments.js:385 +msgid "Specified segment not found" +msgstr "" + +#: lib/models/segments.js:445 +msgid "Selected rule not found" +msgstr "" + +#: lib/models/subscriptions.js:257 lib/models/subscriptions.js:287 +#: lib/models/subscriptions.js:394 +msgid "Missing Subscription ID" +msgstr "" + +#: lib/models/subscriptions.js:315 +msgid "Missing Subscription email address" +msgstr "" + +#: lib/models/subscriptions.js:570 lib/models/subscriptions.js:820 +msgid "Missing subscription ID" +msgstr "" + +#: lib/models/subscriptions.js:661 lib/models/subscriptions.js:714 +#: lib/models/subscriptions.js:750 +msgid "Missing Import ID" +msgstr "" + +#: lib/models/subscriptions.js:842 +msgid "Unknown subscription ID" +msgstr "" + +#: lib/models/subscriptions.js:847 routes/subscription.js:639 +msgid "Nothing seems to be changed" +msgstr "" + +#: lib/models/subscriptions.js:913 routes/subscription.js:473 +#: routes/subscription.js:545 routes/subscription.js:581 +#: routes/subscription.js:697 routes/subscription.js:772 +msgid "Subscription not found in this list" +msgstr "" + +#: lib/models/templates.js:26 lib/models/templates.js:102 +#: lib/models/templates.js:157 +msgid "Missing Template ID" +msgstr "" + +#: lib/models/templates.js:55 lib/models/templates.js:106 +msgid "Template Name must be set" +msgstr "" + +#: lib/models/templates.js:147 +msgid "Template does not exist" +msgstr "" + +#: lib/models/triggers.js:29 +msgid "Has Opened" +msgstr "" + +#: lib/models/triggers.js:32 +msgid "Has Clicked" +msgstr "" + +#: lib/models/triggers.js:35 +msgid "Not Opened" +msgstr "" + +#: lib/models/triggers.js:38 +msgid "Not Clicked" +msgstr "" + +#: lib/models/triggers.js:178 lib/models/triggers.js:215 +msgid "Missing or invalid list ID" +msgstr "" + +#: lib/models/triggers.js:182 lib/models/triggers.js:267 +msgid "Days in the past are not allowed" +msgstr "" + +#: lib/models/triggers.js:186 lib/models/triggers.js:207 +#: lib/models/triggers.js:271 lib/models/triggers.js:292 +msgid "Missing or invalid trigger rule" +msgstr "" + +#: lib/models/triggers.js:193 lib/models/triggers.js:278 +msgid "Invalid subscription configuration" +msgstr "" + +#: lib/models/triggers.js:200 lib/models/triggers.js:285 +msgid "Invalid campaign configuration" +msgstr "" + +#: lib/models/triggers.js:203 lib/models/triggers.js:288 +msgid "A campaing can not be a target for itself" +msgstr "" + +#: lib/models/triggers.js:236 +msgid "Could not store trigger row" +msgstr "" + +#: lib/models/triggers.js:253 +msgid "Missing or invalid Trigger ID" +msgstr "" + +#: lib/models/triggers.js:320 +msgid "Missing Trigger ID" +msgstr "" + +#: lib/models/users.js:103 +msgid "Could not store user row" +msgstr "" + +#: lib/models/users.js:173 +msgid "Email Address must be set" +msgstr "" + +#: lib/models/users.js:184 +msgid "Failed to check user data" +msgstr "" + +#: lib/models/users.js:195 +msgid "" +"Can't change email as another user with the same email address already exists" +msgstr "" + +#: lib/models/users.js:212 +msgid "Incorrect current password" +msgstr "" + +#: lib/models/users.js:216 +msgid "New password not set" +msgstr "" + +#: lib/models/users.js:220 +msgid "Passwords do not match" +msgstr "" + +#: lib/models/users.js:258 +msgid "User ID not set" +msgstr "" + +#: lib/models/users.js:286 +msgid "Username must be set" +msgstr "" + +#: lib/models/users.js:323 +msgid "Mailer password change request" +msgstr "" + +#: lib/models/users.js:347 lib/models/users.js:367 +msgid "Missing username or reset token" +msgstr "" + +#: lib/models/users.js:371 +msgid "Invalid new password" +msgstr "" + +#: lib/passport.js:49 +msgid "%s logged out" +msgstr "" + +#: lib/passport.js:64 +msgid "Failed to authenticate user" +msgstr "" + +#: lib/passport.js:80 +msgid "Logged in as %s" +msgstr "" + +#: lib/passport.js:180 +msgid "Incorrect username or password" +msgstr "" + +#: lib/subscription-mail-helpers.js:28 +msgid "%s: Subscription Confirmed" +msgstr "" + +#: lib/subscription-mail-helpers.js:39 +msgid "%s: Email Address Already Registered" +msgstr "" + +#: lib/subscription-mail-helpers.js:49 +msgid "%s: Please Confirm Email Change in Subscription" +msgstr "" + +#: lib/subscription-mail-helpers.js:59 +msgid "%s: Please Confirm Subscription" +msgstr "" + +#: lib/subscription-mail-helpers.js:69 +msgid "%s: Please Confirm Unsubscription" +msgstr "" + +#: lib/subscription-mail-helpers.js:76 +msgid "%s: Unsubscription Confirmed" +msgstr "" + +#: lib/tools.js:154 +msgid "Blocked email address \"%s\"" +msgstr "" + +#: lib/tools.js:163 +msgid "Invalid email address \"%s\"." +msgstr "" + +#: lib/tools.js:166 +msgid "MX record not found for domain" +msgstr "" + +#: lib/tools.js:169 +msgid "Address domain not found" +msgstr "" + +#: lib/tools.js:172 +msgid "Address domain name is required" +msgstr "" + +#: routes/archive.js:31 routes/archive.js:43 routes/archive.js:55 app.js:230 +msgid "Not Found" +msgstr "" + +#: routes/archive.js:121 services/sender.js:454 +msgid "Received status code %s from %s" +msgstr "" + +#: routes/archive.js:153 routes/campaigns.js:894 +msgid "Attachment not found" +msgstr "" + +#: routes/blacklist.js:13 routes/campaigns.js:26 routes/editorapi.js:32 +#: routes/fields.js:13 routes/forms.js:16 routes/grapejs.js:15 +#: routes/lists.js:50 routes/mosaico.js:14 routes/report-templates.js:20 +#: routes/reports.js:22 routes/segments.js:13 routes/settings.js:23 +#: routes/templates.js:18 routes/triggers.js:18 routes/users.js:75 +#: routes/users.js:120 +msgid "Need to be logged in to access restricted content" +msgstr "" + +#: routes/campaigns.js:117 +msgid "Could not create campaign" +msgstr "" + +#: routes/campaigns.js:120 +msgid "Campaign “%s” created" +msgstr "" + +#: routes/campaigns.js:209 +msgid "Campaign settings updated" +msgstr "" + +#: routes/campaigns.js:211 +msgid "Campaign settings not updated" +msgstr "" + +#: routes/campaigns.js:227 routes/campaigns.js:744 +msgid "Campaign deleted" +msgstr "" + +#: routes/campaigns.js:229 routes/campaigns.js:746 +msgid "Could not delete specified campaign" +msgstr "" + +#: routes/campaigns.js:248 +msgid "Idling" +msgstr "" + +#: routes/campaigns.js:251 +msgid "Scheduled" +msgstr "" + +#: routes/campaigns.js:257 +msgid "Paused" +msgstr "" + +#: routes/campaigns.js:259 +msgid "Inactive" +msgstr "" + +#: routes/campaigns.js:261 +msgid "Active" +msgstr "" + +#: routes/campaigns.js:263 +msgid "Other" +msgstr "" + +#: routes/campaigns.js:421 +msgid "Unknown status selector" +msgstr "" + +#: routes/campaigns.js:762 +msgid "Scheduled sending" +msgstr "" + +#: routes/campaigns.js:764 +msgid "Could not schedule sending" +msgstr "" + +#: routes/campaigns.js:776 +msgid "Sending resumed" +msgstr "" + +#: routes/campaigns.js:778 +msgid "Could not resume sending" +msgstr "" + +#: routes/campaigns.js:790 +msgid "Sending reset" +msgstr "" + +#: routes/campaigns.js:792 +msgid "Could not reset sending" +msgstr "" + +#: routes/campaigns.js:804 routes/campaigns.js:832 +msgid "Sending paused" +msgstr "" + +#: routes/campaigns.js:806 routes/campaigns.js:834 +msgid "Could not pause sending" +msgstr "" + +#: routes/campaigns.js:818 +msgid "Sending activated" +msgstr "" + +#: routes/campaigns.js:820 +msgid "Could not activate sending" +msgstr "" + +#: routes/campaigns.js:855 +msgid "Attachment uploaded" +msgstr "" + +#: routes/campaigns.js:857 +msgid "Could not store attachment" +msgstr "" + +#: routes/campaigns.js:874 +msgid "Attachment deleted" +msgstr "" + +#: routes/campaigns.js:876 +msgid "Could not delete attachment" +msgstr "" + +#: routes/editorapi.js:38 +msgid "Invalid editor name" +msgstr "" + +#: routes/editorapi.js:146 +msgid "Method not supported" +msgstr "" + +#: routes/editorapi.js:381 +msgid "Invalid resource type or ID" +msgstr "" + +#: routes/fields.js:28 routes/fields.js:64 routes/fields.js:118 +#: routes/forms.js:31 routes/forms.js:63 routes/forms.js:94 +#: routes/segments.js:28 routes/segments.js:59 routes/segments.js:102 +#: routes/segments.js:151 routes/segments.js:223 routes/segments.js:255 +#: routes/segments.js:289 routes/segments.js:336 routes/segments.js:359 +msgid "Selected list ID not found" +msgstr "" + +#: routes/fields.js:102 +msgid "Could not create custom field" +msgstr "" + +#: routes/fields.js:129 +msgid "Selected field not found" +msgstr "" + +#: routes/fields.js:165 +msgid "Field settings updated" +msgstr "" + +#: routes/fields.js:167 +msgid "Field settings not updated" +msgstr "" + +#: routes/fields.js:183 +msgid "Custom field deleted" +msgstr "" + +#: routes/fields.js:185 +msgid "Could not delete specified field" +msgstr "" + +#: routes/forms.js:78 +msgid "Could not create custom form" +msgstr "" + +#: routes/forms.js:105 +msgid "Selected form not found" +msgstr "" + +#: routes/forms.js:136 +msgid "The plaintext version for this email" +msgstr "" + +#: routes/forms.js:137 +msgid "Custom forms use MJML for formatting" +msgstr "" + +#: routes/forms.js:138 +msgid "See the MJML documentation here" +msgstr "" + +#: routes/forms.js:146 +msgid "Layout" +msgstr "" + +#: routes/forms.js:152 +msgid "Form Input Style" +msgstr "" + +#: routes/forms.js:154 +msgid "" +"This CSS stylesheet defines the appearance of form input elements and alerts" +msgstr "" + +#: routes/forms.js:160 +msgid "Web - Subscribe" +msgstr "" + +#: routes/forms.js:165 +msgid "Web - Confirm Subscription Notice" +msgstr "" + +#: routes/forms.js:170 +msgid "Mail - Confirm Subscription (MJML)" +msgstr "" + +#: routes/forms.js:175 +msgid "Mail - Confirm Subscription (Text)" +msgstr "" + +#: routes/forms.js:180 +msgid "Mail - Already Subscribed (MJML)" +msgstr "" + +#: routes/forms.js:185 +msgid "Mail - Already Subscribed (Text)" +msgstr "" + +#: routes/forms.js:190 +msgid "Web - Subscribed Notice" +msgstr "" + +#: routes/forms.js:195 +msgid "Mail - Subscription Confirmed (MJML)" +msgstr "" + +#: routes/forms.js:200 +msgid "Mail - Subscription Confirmed (Text)" +msgstr "" + +#: routes/forms.js:208 +msgid "Web - Manage Preferences" +msgstr "" + +#: routes/forms.js:213 +msgid "Web - Manage Address" +msgstr "" + +#: routes/forms.js:218 +msgid "Web - Updated Notice" +msgstr "" + +#: routes/forms.js:226 +msgid "Web - Unsubscribe" +msgstr "" + +#: routes/forms.js:231 +msgid "Web - Confirm Unsubscription Notice" +msgstr "" + +#: routes/forms.js:236 +msgid "Mail - Confirm Unsubscription (MJML)" +msgstr "" + +#: routes/forms.js:241 +msgid "Mail - Confirm Unsubscription (Text)" +msgstr "" + +#: routes/forms.js:246 +msgid "Mail - Confirm Address Change (MJML)" +msgstr "" + +#: routes/forms.js:251 +msgid "Mail - Confirm Address Change (Text)" +msgstr "" + +#: routes/forms.js:256 +msgid "Web - Unsubscribed Notice" +msgstr "" + +#: routes/forms.js:261 +msgid "Mail - Unsubscription Confirmed (MJML)" +msgstr "" + +#: routes/forms.js:266 +msgid "Mail - Unsubscription Confirmed (Text)" +msgstr "" + +#: routes/forms.js:271 +msgid "Web - Manual Unsubscribe Notice" +msgstr "" + +#: routes/forms.js:309 +msgid "Form settings updated" +msgstr "" + +#: routes/forms.js:311 +msgid "Form settings not updated" +msgstr "" + +#: routes/forms.js:327 +msgid "Custom form deleted" +msgstr "" + +#: routes/forms.js:329 +msgid "Could not delete specified form" +msgstr "" + +#: routes/index.js:11 +msgid "Self Hosted Newsletter App" +msgstr "" + +#: routes/links.js:39 +msgid "Oops, we couldn't find a link for the URL you clicked" +msgstr "" + +#: routes/lists.js:82 +msgid "Could not create list" +msgstr "" + +#: routes/lists.js:85 +msgid "List created" +msgstr "Lista létrehozva" + +#: routes/lists.js:93 routes/lists.js:271 routes/lists.js:336 +#: routes/lists.js:375 routes/lists.js:444 routes/lists.js:469 +#: routes/lists.js:514 routes/lists.js:536 routes/lists.js:565 +#: routes/lists.js:657 routes/lists.js:714 routes/lists.js:741 +msgid "Could not find list with specified ID" +msgstr "" + +#: routes/lists.js:122 +msgid "List settings updated" +msgstr "" + +#: routes/lists.js:124 +msgid "List settings not updated" +msgstr "" + +#: routes/lists.js:142 +msgid "List deleted" +msgstr "Lista törölve" + +#: routes/lists.js:144 +msgid "Could not delete specified list" +msgstr "" + +#: routes/lists.js:206 +msgid "Unknown" +msgstr "" + +#: routes/lists.js:206 +msgid "Complained" +msgstr "" + +#: routes/lists.js:237 +msgid "Invalid key" +msgstr "" + +#: routes/lists.js:239 +msgid "Expired key" +msgstr "" + +#: routes/lists.js:241 +msgid "Revoked key" +msgstr "" + +#: routes/lists.js:288 +msgid "Force Subscribe" +msgstr "" + +#: routes/lists.js:291 +msgid "Initializing" +msgstr "" + +#: routes/lists.js:294 +msgid "Initialized" +msgstr "" + +#: routes/lists.js:297 +msgid "Importing" +msgstr "" + +#: routes/lists.js:303 +msgid "Errored" +msgstr "" + +#: routes/lists.js:381 routes/lists.js:450 routes/lists.js:475 +msgid "Could not find subscriber with specified ID" +msgstr "" + +#: routes/lists.js:427 +msgid "Could not add subscription" +msgstr "" + +#: routes/lists.js:432 +msgid "%s was successfully added to your list" +msgstr "" + +#: routes/lists.js:434 +msgid "%s was not added to your list" +msgstr "" + +#: routes/lists.js:456 +msgid "Could not unsubscribe user" +msgstr "" + +#: routes/lists.js:459 +msgid "%s was successfully unsubscribed from your list" +msgstr "" + +#: routes/lists.js:479 +msgid "%s was successfully removed from your list" +msgstr "" + +#: routes/lists.js:491 +msgid "Another subscriber with email address %s already exists" +msgstr "" + +#: routes/lists.js:498 +msgid "Subscription settings updated" +msgstr "" + +#: routes/lists.js:500 +msgid "Subscription settings not updated" +msgstr "" + +#: routes/lists.js:542 routes/lists.js:663 routes/lists.js:699 +#: routes/lists.js:727 routes/lists.js:747 +msgid "Could not find import data with specified ID" +msgstr "" + +#: routes/lists.js:573 +msgid "Could not process CSV" +msgstr "" + +#: routes/lists.js:589 +msgid "Could not create importer" +msgstr "" + +#: routes/lists.js:643 +msgid "Empty file" +msgstr "" + +#: routes/lists.js:646 +msgid "Too few rows" +msgstr "" + +#: routes/lists.js:703 +msgid "Import started" +msgstr "" + +#: routes/lists.js:731 +msgid "Import restarted" +msgstr "" + +#: routes/lists.js:797 +msgid "One-step (i.e. no email with confirmation link)" +msgstr "" + +#: routes/lists.js:803 +msgid "" +"One-step with unsubscription form (i.e. no email with confirmation link)" +msgstr "" + +#: routes/lists.js:809 +msgid "Two-step (i.e. an email with confirmation link will be sent)" +msgstr "" + +#: routes/lists.js:815 +msgid "" +"Two-step with unsubscription form (i.e. an email with confirmation link will " +"be sent)" +msgstr "" + +#: routes/lists.js:821 +msgid "" +"Manual (i.e. unsubscription has to be performed by the list administrator)" +msgstr "" + +#: routes/report-templates.js:246 +msgid "Could not create report template" +msgstr "" + +#: routes/report-templates.js:249 +msgid "Report template “%s” created" +msgstr "" + +#: routes/report-templates.js:257 +msgid "Could not find report template with specified ID" +msgstr "" + +#: routes/report-templates.js:280 +msgid "Report template updated" +msgstr "" + +#: routes/report-templates.js:282 +msgid "Report template not updated" +msgstr "" + +#: routes/report-templates.js:298 +msgid "Report template deleted" +msgstr "" + +#: routes/report-templates.js:300 +msgid "Could not delete specified report template" +msgstr "" + +#: routes/reports.js:124 routes/reports.js:130 +msgid "Could not create report" +msgstr "" + +#: routes/reports.js:135 +msgid "Report “%s” created" +msgstr "" + +#: routes/reports.js:146 routes/reports.js:224 routes/reports.js:239 +#: routes/reports.js:265 routes/reports.js:275 +msgid "Could not find report with specified ID" +msgstr "" + +#: routes/reports.js:188 routes/reports.js:194 +msgid "Could not update report" +msgstr "" + +#: routes/reports.js:197 +msgid "Report updated" +msgstr "" + +#: routes/reports.js:199 +msgid "Report not updated" +msgstr "" + +#: routes/reports.js:212 +msgid "Report deleted" +msgstr "" + +#: routes/reports.js:214 +msgid "Could not delete specified report" +msgstr "" + +#: routes/reports.js:230 +msgid "Could not find report template" +msgstr "" + +#: routes/reports.js:260 +msgid "Unknown type of template" +msgstr "" + +#: routes/segments.js:86 +msgid "Could not create segment" +msgstr "" + +#: routes/segments.js:89 +msgid "Segment created" +msgstr "" + +#: routes/segments.js:113 +msgid "Selected segment ID not found" +msgstr "" + +#: routes/segments.js:188 +msgid "Segment settings updated" +msgstr "" + +#: routes/segments.js:190 +msgid "Segment settings not updated" +msgstr "" + +#: routes/segments.js:206 +msgid "Segment deleted" +msgstr "" + +#: routes/segments.js:208 +msgid "Could not delete specified segment" +msgstr "" + +#: routes/segments.js:342 +msgid "Could not create rule" +msgstr "" + +#: routes/segments.js:345 +msgid "Rule created" +msgstr "" + +#: routes/segments.js:410 +msgid "Rule settings updated" +msgstr "" + +#: routes/segments.js:412 +msgid "Rule settings not updated" +msgstr "" + +#: routes/segments.js:428 +msgid "Rule deleted" +msgstr "" + +#: routes/segments.js:430 +msgid "Could not delete specified rule" +msgstr "" + +#: routes/settings.js:39 +msgid "Use TLS" +msgstr "" + +#: routes/settings.js:40 +msgid "usually selected for port 465" +msgstr "" + +#: routes/settings.js:44 +msgid "Use STARTTLS" +msgstr "" + +#: routes/settings.js:45 +msgid "usually selected for port 587 and 25" +msgstr "" + +#: routes/settings.js:49 +msgid "Do not use encryption" +msgstr "" + +#: routes/settings.js:115 +msgid "Settings updated" +msgstr "" + +#: routes/settings.js:173 +msgid "Invalid mail transport type" +msgstr "" + +#: routes/settings.js:184 +msgid "Invalid Access Key" +msgstr "" + +#: routes/settings.js:187 +msgid "Invalid AWS credentials" +msgstr "" + +#: routes/settings.js:190 +msgid "Connection refused, check hostname and port." +msgstr "" + +#: routes/settings.js:195 +msgid "" +"Did not receive greeting message from server. This might happen when " +"connecting to a TLS port without using TLS." +msgstr "" + +#: routes/settings.js:197 +msgid "Did not receive greeting message from server." +msgstr "" + +#: routes/settings.js:200 +msgid "" +"Connection timed out. Check your firewall settings, destination port is " +"probably blocked." +msgstr "" + +#: routes/settings.js:205 +msgid "Authentication not accepted, server expects STARTTLS to be used." +msgstr "" + +#: routes/settings.js:207 +msgid "Authentication failed, check username and password." +msgstr "" + +#: routes/settings.js:217 +msgid "Failed Mailer verification." +msgstr "" + +#: routes/settings.js:217 +msgid "Server responded with: \"%s\"" +msgstr "" + +#: routes/settings.js:221 +msgid "Mailer settings verified, ready to send some mail!" +msgstr "" + +#: routes/subscription.js:33 +msgid "Not allowed by CORS" +msgstr "" + +#: routes/subscription.js:61 routes/subscription.js:176 +#: routes/subscription.js:286 routes/subscription.js:382 +#: routes/subscription.js:459 routes/subscription.js:535 +#: routes/subscription.js:566 routes/subscription.js:626 +#: routes/subscription.js:682 routes/subscription.js:760 +#: routes/subscription.js:897 +msgid "Selected list not found" +msgstr "" + +#: routes/subscription.js:93 +msgid "Could not save subscription" +msgstr "" + +#: routes/subscription.js:118 +msgid "Subscriber info corrupted or missing" +msgstr "" + +#: routes/subscription.js:136 +msgid "Email address changed" +msgstr "Email cím megváltoztatva." + +#: routes/subscription.js:179 routes/subscription.js:385 +msgid "The list does not allow public subscriptions." +msgstr "A lista nem fogad nyilvános feliratkozásokat." + +#: routes/subscription.js:355 routes/subscription.js:357 +msgid "Email address not set" +msgstr "Email cím nincs megadva." + +#: routes/subscription.js:653 +msgid "" +"An email with further instructions has been sent to the provided address" +msgstr "A további teendőket tartalmazó levelet kiküldtük a megadott címre. " + +#: routes/subscription.js:861 routes/subscription.js:877 +msgid "Public key is not set" +msgstr "Publikus kulcs nincs megadva." + +#: routes/templates.js:84 +msgid "Could not create template" +msgstr "" + +#: routes/templates.js:87 +msgid "Template created" +msgstr "Sablon létrehozva." + +#: routes/templates.js:126 +msgid "Template settings updated" +msgstr "" + +#: routes/templates.js:128 +msgid "Template settings not updated" +msgstr "" + +#: routes/templates.js:144 +msgid "Template duplicated" +msgstr "" + +#: routes/templates.js:146 +msgid "Could not duplicate specified template" +msgstr "" + +#: routes/templates.js:157 +msgid "Template deleted" +msgstr "Sablon törölve." + +#: routes/templates.js:159 +msgid "Could not delete specified template" +msgstr "" + +#: routes/triggers.js:62 routes/triggers.js:79 routes/triggers.js:154 +msgid "Could not find selected list" +msgstr "" + +#: routes/triggers.js:131 +msgid "Could not create trigger" +msgstr "" + +#: routes/triggers.js:138 +msgid "Trigger “%s” created" +msgstr "" + +#: routes/triggers.js:214 +msgid "Trigger settings updated" +msgstr "" + +#: routes/triggers.js:216 +msgid "Trigger settings not updated" +msgstr "" + +#: routes/triggers.js:228 +msgid "Trigger deleted" +msgstr "" + +#: routes/triggers.js:230 +msgid "Could not delete specified trigger" +msgstr "" + +#: routes/triggers.js:242 +msgid "Could not find trigger with specified ID" +msgstr "" + +#: routes/triggers.js:255 +msgid "Trigger not found" +msgstr "" + +#: routes/users.js:32 +msgid "" +"An email with password reset instructions has been sent to your email " +"address, if it exists on our system." +msgstr "" + +#: routes/users.js:46 routes/users.js:64 +msgid "Unknown or expired reset token" +msgstr "" + +#: routes/users.js:66 +msgid "Your password has been changed successfully" +msgstr "A jelszava sikeresen megváltoztatva." + +#: routes/users.js:87 +msgid "User data not found" +msgstr "" + +#: routes/users.js:110 +msgid "Access token updated" +msgstr "" + +#: routes/users.js:112 +msgid "Access token not updated" +msgstr "" + +#: routes/users.js:139 +msgid "Account information updated" +msgstr "" + +#: routes/users.js:141 +msgid "Account information not updated" +msgstr "" + +#: services/feedcheck.js:51 +msgid "Feed error: %s" +msgstr "" + +#: services/feedcheck.js:54 +msgid "Found %s new campaign messages from feed" +msgstr "" + +#: services/feedcheck.js:56 +msgid "Found nothing new from the feed" +msgstr "" + +#: services/feedcheck.js:146 +msgid "RSS entry %s" +msgstr "RSS bejegyzés %s" + +#: services/importer.js:249 +msgid "Could not access import file" +msgstr "" + +#: services/triggers.js:51 +msgid "Unknown trigger type %s" +msgstr "" From 9b1ab6fc5b4876ab90b2366653f871dfb490b178 Mon Sep 17 00:00:00 2001 From: Adrian Woeltche Date: Tue, 31 Jul 2018 13:54:43 +0200 Subject: [PATCH 445/483] another grapejs update and fix for images --- public/grapejs/dist/css/grapes.min.css | 2 +- public/grapejs/dist/js/grapes.min.js | 10 ++++++---- views/grapejs/editor.hbs | 4 +++- views/grapejs/layout-editor.hbs | 4 ++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/public/grapejs/dist/css/grapes.min.css b/public/grapejs/dist/css/grapes.min.css index 4f8b24c2..c321b38e 100755 --- a/public/grapejs/dist/css/grapes.min.css +++ b/public/grapejs/dist/css/grapes.min.css @@ -1,4 +1,4 @@ .sp-container{position:absolute;top:0;left:0;display:inline-block;*display:inline;*zoom:1;z-index:9999994;overflow:hidden}.sp-container.sp-flat{position:relative}.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.sp-top{position:relative;width:100%;display:inline-block}.sp-top-inner{position:absolute;top:0;left:0;bottom:0;right:0}.sp-color{position:absolute;top:0;left:0;bottom:0;right:20%}.sp-hue{position:absolute;top:0;right:0;bottom:0;left:84%;height:100%}.sp-clear-enabled .sp-hue{top:33px;height:77.5%}.sp-fill{padding-top:80%}.sp-sat,.sp-val{position:absolute;top:0;left:0;right:0;bottom:0}.sp-alpha-enabled .sp-top{margin-bottom:18px}.sp-alpha-enabled .sp-alpha{display:block}.sp-alpha-handle{position:absolute;top:-4px;bottom:-4px;width:6px;left:50%;cursor:pointer;border:1px solid black;background:white;opacity:.8}.sp-alpha{display:none;position:absolute;bottom:-14px;right:0;left:0;height:8px}.sp-alpha-inner{border:solid 1px #333}.sp-clear{display:none}.sp-clear.sp-clear-display{background-position:center}.sp-clear-enabled .sp-clear{display:block;position:absolute;top:0px;right:0;bottom:0;left:84%;height:28px}.sp-container,.sp-replacer,.sp-preview,.sp-dragger,.sp-slider,.sp-alpha,.sp-clear,.sp-alpha-handle,.sp-container.sp-dragging .sp-input,.sp-container button{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}.sp-container.sp-input-disabled .sp-input-container{display:none}.sp-container.sp-buttons-disabled .sp-button-container{display:none}.sp-container.sp-palette-buttons-disabled .sp-palette-button-container{display:none}.sp-palette-only .sp-picker-container{display:none}.sp-palette-disabled .sp-palette-container{display:none}.sp-initial-disabled .sp-initial{display:none}.sp-sat{background-image:-webkit-gradient(linear, 0 0, 100% 0, from(#fff), to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:-moz-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:-o-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:-ms-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:linear-gradient(to right, #fff, rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";filter:progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81')}.sp-val{background-image:-webkit-gradient(linear, 0 100%, 0 0, from(#000), to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:-o-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:linear-gradient(to top, #000, rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000')}.sp-hue{background:-moz-linear-gradient(top, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:-ms-linear-gradient(top, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:-o-linear-gradient(top, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:-webkit-gradient(linear, left top, left bottom, from(red), color-stop(0.17, #ff0), color-stop(0.33, lime), color-stop(0.5, cyan), color-stop(0.67, blue), color-stop(0.83, #f0f), to(red));background:-webkit-linear-gradient(top, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:linear-gradient(to bottom, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%)}.sp-1{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00')}.sp-2{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00')}.sp-3{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff')}.sp-4{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff')}.sp-5{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff')}.sp-6{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000')}.sp-hidden{display:none !important}.sp-cf:before,.sp-cf:after{content:"";display:table}.sp-cf:after{clear:both}.sp-cf{*zoom:1}@media (max-device-width: 480px){.sp-color{right:40%}.sp-hue{left:63%}.sp-fill{padding-top:60%}}.sp-dragger{border-radius:5px;height:5px;width:5px;border:1px solid #fff;background:#000;cursor:pointer;position:absolute;top:0;left:0}.sp-slider{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:white;opacity:.8}.sp-container{border-radius:0;background-color:#ECECEC;border:solid 1px #f0c49B;padding:0}.sp-container,.sp-container button,.sp-container input,.sp-color,.sp-hue,.sp-clear{font:normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.sp-top{margin-bottom:3px}.sp-color,.sp-hue,.sp-clear{border:solid 1px #666}.sp-input-container{float:right;width:100px;margin-bottom:4px}.sp-initial-disabled .sp-input-container{width:100%}.sp-input{font-size:12px !important;border:1px inset;padding:4px 5px;margin:0;width:100%;background:transparent;border-radius:3px;color:#222}.sp-input:focus{border:1px solid orange}.sp-input.sp-validation-error{border:1px solid red;background:#fdd}.sp-picker-container,.sp-palette-container{float:left;position:relative;padding:10px;padding-bottom:300px;margin-bottom:-290px}.sp-picker-container{width:172px;border-left:solid 1px #fff}.sp-palette-container{border-right:solid 1px #ccc}.sp-palette-only .sp-palette-container{border:0}.sp-palette .sp-thumb-el{display:block;position:relative;float:left;width:24px;height:15px;margin:3px;cursor:pointer;border:solid 2px transparent}.sp-palette .sp-thumb-el:hover,.sp-palette .sp-thumb-el.sp-thumb-active{border-color:orange}.sp-thumb-el{position:relative}.sp-initial{float:left;border:solid 1px #333}.sp-initial span{width:30px;height:25px;border:none;display:block;float:left;margin:0}.sp-initial .sp-clear-display{background-position:center}.sp-palette-button-container,.sp-button-container{float:right}.sp-replacer{margin:0;overflow:hidden;cursor:pointer;padding:4px;display:inline-block;*zoom:1;*display:inline;border:solid 1px #91765d;background:#eee;color:#333;vertical-align:middle}.sp-replacer:hover,.sp-replacer.sp-active{border-color:#F0C49B;color:#111}.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}.sp-dd{padding:2px 0;height:16px;line-height:16px;float:left;font-size:10px}.sp-preview{position:relative;width:25px;height:20px;border:solid 1px #222;margin-right:5px;float:left;z-index:0}.sp-palette{*width:220px;max-width:220px}.sp-palette .sp-thumb-el{width:16px;height:16px;margin:2px 1px;border:solid 1px #d0d0d0}.sp-container{padding-bottom:0}.sp-container button{background-color:#eeeeee;background-image:-webkit-linear-gradient(top, #eee, #ccc);background-image:-moz-linear-gradient(top, #eee, #ccc);background-image:-ms-linear-gradient(top, #eee, #ccc);background-image:-o-linear-gradient(top, #eee, #ccc);background-image:linear-gradient(to bottom, #eee, #ccc);border:1px solid #ccc;border-bottom:1px solid #bbb;border-radius:3px;color:#333;font-size:14px;line-height:1;padding:5px 4px;text-align:center;text-shadow:0 1px 0 #eee;vertical-align:middle}.sp-container button:hover{background-color:#dddddd;background-image:-webkit-linear-gradient(top, #ddd, #bbb);background-image:-moz-linear-gradient(top, #ddd, #bbb);background-image:-ms-linear-gradient(top, #ddd, #bbb);background-image:-o-linear-gradient(top, #ddd, #bbb);background-image:linear-gradient(to bottom, #ddd, #bbb);border:1px solid #bbb;border-bottom:1px solid #999;cursor:pointer;text-shadow:0 1px 0 #ddd}.sp-container button:active{border:1px solid #aaa;border-bottom:1px solid #888;-webkit-box-shadow:inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;-moz-box-shadow:inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;-ms-box-shadow:inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;-o-box-shadow:inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;box-shadow:inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee}.sp-cancel{font-size:11px;color:#d93f3f !important;margin:0;padding:2px;margin-right:5px;vertical-align:middle;text-decoration:none}.sp-cancel:hover{color:#d93f3f !important;text-decoration:underline}.sp-palette span:hover,.sp-palette span.sp-thumb-active{border-color:#000}.sp-preview,.sp-alpha,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-preview-inner,.sp-alpha-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}.sp-palette .sp-thumb-inner{background-position:50% 50%;background-repeat:no-repeat}.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==)}/*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.CodeMirror{font-family:monospace;height:300px;color:black;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,0.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{0%{}50%{background-color:transparent}100%{}}@-webkit-keyframes blink{0%{}50%{background-color:transparent}100%{}}@keyframes blink{0%{}50%{background-color:transparent}100%{}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:#f00}.cm-invalidchar{color:#f00}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,0.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:0.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,0.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:none}.cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.cm-s-hopscotch span.cm-comment{color:#b33508}.cm-s-hopscotch span.cm-atom{color:#c85e7c}.cm-s-hopscotch span.cm-number{color:#c85e7c}.cm-s-hopscotch span.cm-property,.cm-s-hopscotch span.cm-attribute{color:#8fc13e}.cm-s-hopscotch span.cm-keyword{color:#dd464c}.cm-s-hopscotch span.cm-string{color:#fdcc59}.cm-s-hopscotch span.cm-variable{color:#8fc13e}.cm-s-hopscotch span.cm-variable-2{color:#1290bf}.cm-s-hopscotch span.cm-def{color:#fd8b19}.cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.cm-s-hopscotch span.cm-tag{color:#dd464c}.cm-s-hopscotch span.cm-link{color:#c85e7c}.cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:white !important}.cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}@font-face{font-family:'font3336';src:url("../fonts/main-fonts.eot?v=20");src:url("../fonts/main-fonts.woff?v=20") format("woff"),url("../fonts/main-fonts.ttf?v=20") format("truetype"),url("../fonts/main-fonts.svg?v=20") format("svg"),url("../fonts/main-fonts.eot?v=20") format("embedded-opentype");font-weight:normal;font-style:normal}.gjs-one-bg{background-color:#444}.gjs-one-color{color:#444}.gjs-one-color-h:hover{color:#444}.gjs-two-bg{background-color:#ddd}.gjs-two-color{color:#ddd}.gjs-two-color-h:hover{color:#ddd}.gjs-three-bg{background-color:#804f7b}.gjs-three-color{color:#804f7b}.gjs-three-color-h:hover{color:#804f7b}.gjs-four-bg{background-color:#d278c9}.gjs-four-color{color:#d278c9}.gjs-four-color-h:hover{color:#d278c9}.gjs-bg-main,.gjs-off-prv,.gjs-sm-sector .gjs-sm-colorp-c,.gjs-clm-tags .gjs-sm-colorp-c{background-color:#444}.gjs-color-main,.gjs-off-prv,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add{color:#ddd;fill:#ddd}.gjs-color-active{color:#f8f8f8;fill:#f8f8f8}.gjs-color-warn{color:#ffca6f;fill:#ffca6f}.gjs-color-hl{color:#71b7f1;fill:#71b7f1}.gjs-fonts::before{display:block;font:normal normal normal 14px font3336;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:5em}.gjs-f-b1::before{content:'Q'}.gjs-f-b2::before{content:'W'}.gjs-f-b3::before{content:'E'}.gjs-f-b37::before{content:'R'}.gjs-f-hero::before{content:'T'}.gjs-f-h1p::before{content:'y'}.gjs-f-3ba::before{content:'u'}.gjs-f-image::before{content:'I'}.gjs-f-text::before{content:'o'}.gjs-f-quo::before{content:'p'}.gjs-f-button::before{content:'B'}.gjs-f-divider::before{content:'D'}.gjs-invis-invis,.gjs-clm-tags #gjs-clm-new,.gjs-no-app{background-color:transparent;border:none;color:inherit}.gjs-no-app{height:10px}.gjs-test::btn{color:'#fff'}.opac50,.gjs-clm-tags #gjs-clm-close{opacity:.5;filter:alpha(opacity=50)}.gjs-checker-bg,.gjs-field-colorp-c,.checker-bg,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==")}.gjs-no-user-select,.gjs-grabbing,.gjs-grabbing *,.gjs-layer-name,.gjs-rte-toolbar{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-no-pointer-events,.gjs-resizer-c,.gjs-margin-v-el,.gjs-padding-v-el,.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{pointer-events:none}.gjs-bdrag{pointer-events:none !important;position:absolute !important;z-index:10 !important;width:auto}.gjs-drag-helper{background-color:#3b97e3 !important;pointer-events:none !important;position:absolute !important;z-index:10 !important;transform:scale(0.3) !important;transform-origin:top left !important;-webkit-transform-origin:top left !important;margin:15px !important;transition:none !important;outline:none !important}.gjs-grabbing,.gjs-grabbing *{cursor:grabbing !important;cursor:-webkit-grabbing !important}.gjs-grabbing{overflow:hidden}.gjs-off-prv{position:relative;z-index:10;padding:5px;cursor:pointer}.gjs-editor-cont ::-webkit-scrollbar-track{background:rgba(0,0,0,0.1)}.gjs-editor-cont ::-webkit-scrollbar-thumb{background-color:rgba(255,255,255,0.2)}.gjs-editor-cont ::-webkit-scrollbar{width:8px}.clear{clear:both}.no-select,.gjs-com-no-select,.gjs-com-no-select img,.gjs-category-title,.gjs-sm-sector .gjs-sm-title,.gjs-clm-tags .gjs-sm-title,.gjs-block-category .gjs-title,.gjs-layer-title,.gjs-clm-tags #gjs-clm-close{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-editor{font-family:Helvetica,sans-serif;font-size:.75rem;position:relative;box-sizing:border-box;height:100%}.gjs-freezed,.gjs-freezed{opacity:.5;filter:alpha(opacity=50);pointer-events:none}.gjs-traits-label{border-bottom:1px solid rgba(0,0,0,0.2);font-weight:lighter;margin-bottom:5px;padding:10px;text-align:left}.gjs-trt-header{font-weight:lighter;padding:10px}.gjs-trt-trait{display:flex;justify-content:start;padding:5px 10px;font-weight:lighter}.gjs-trt-traits{font-size:.75rem}.gjs-trt-trait .gjs-label{width:30%;text-align:left;text-overflow:ellipsis;overflow:hidden}.gjs-trt-trait .gjs-field{width:70%}.gjs-cv-canvas{background-color:rgba(0,0,0,0.15);box-sizing:border-box;width:85%;height:calc(100% - 40px);bottom:0;overflow:hidden;z-index:1;position:absolute;left:0;top:40px}.gjs-cv-canvas .gjs-ghost{display:none;pointer-events:none;background-color:#5b5b5b;border:2px dashed #ccc;position:absolute;z-index:10;opacity:.55;filter:alpha(opacity=55)}.gjs-cv-canvas .gjs-highlighter,.gjs-cv-canvas .gjs-highlighter-sel{position:absolute;outline:1px solid #3b97e3;outline-offset:-1px;pointer-events:none}.gjs-cv-canvas .gjs-highlighter-warning{outline:3px solid #ffca6f}.gjs-cv-canvas .gjs-highlighter-sel{outline:3px solid #3b97e3}.gjs-cv-canvas #gjs-tools{width:100%;position:absolute;top:0;left:0;outline:none}.gjs-cv-canvas>div:first-child{background-color:#fff;position:relative;height:100%;overflow:auto;width:100%}.gjs-cv-canvas *{box-sizing:border-box}.gjs-frame{outline:medium none;height:100%;width:100%;border:none;margin:auto;display:block;transition:width 0.35s ease,height 0.35s ease;position:absolute;top:0;bottom:0;left:0;right:0}.gjs-toolbar{position:absolute;background-color:#3b97e3;color:white;z-index:10}.gjs-toolbar-item{padding:5px 7px;font-size:0.8rem;cursor:pointer}.gjs-resizer-c{position:absolute;left:0;top:0;width:100%;height:100%;z-index:9}.gjs-margin-v-el,.gjs-padding-v-el,.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{opacity:.1;filter:alpha(opacity=10);position:absolute;background-color:yellow}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{opacity:.2;filter:alpha(opacity=20)}.gjs-padding-v-el,.gjs-fixedpadding-v-el{background-color:navy}.gjs-resizer-h{pointer-events:all;position:absolute;border:3px solid #3b97e3;width:10px;height:10px;background-color:#fff;margin:-5px}.gjs-resizer-h-tl{top:0;left:0;cursor:nwse-resize}.gjs-resizer-h-tr{top:0;right:0;cursor:nesw-resize}.gjs-resizer-h-tc{top:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-cl{left:0;margin:auto -5px;top:0;bottom:0;cursor:ew-resize}.gjs-resizer-h-cr{margin:auto -5px;top:0;bottom:0;right:0;cursor:ew-resize}.gjs-resizer-h-bl{bottom:0;left:0;cursor:nesw-resize}.gjs-resizer-h-bc{bottom:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-br{bottom:0;right:0;cursor:nwse-resize}.gjs-pn-panel .gjs-resizer-h{background-color:rgba(0,0,0,0.2);border:none;opacity:0;transition:opacity 0.25s}.gjs-pn-panel .gjs-resizer-h:hover{opacity:1}.gjs-pn-panel .gjs-resizer-h-tc,.gjs-pn-panel .gjs-resizer-h-bc{margin:0 auto;width:100%}.gjs-pn-panel .gjs-resizer-h-cr,.gjs-pn-panel .gjs-resizer-h-cl{margin:auto 0;height:100%}.gjs-resizing .gjs-highlighter,.gjs-resizing .gjs-badge{display:none !important}.gjs-resizing-tl *{cursor:nwse-resize !important}.gjs-resizing-tr *{cursor:nesw-resize !important}.gjs-resizing-tc *{cursor:ns-resize !important}.gjs-resizing-cl *{cursor:ew-resize !important}.gjs-resizing-cr *{cursor:ew-resize !important}.gjs-resizing-bl *{cursor:nesw-resize !important}.gjs-resizing-bc *{cursor:ns-resize !important}.gjs-resizing-br *{cursor:nwse-resize !important}.btn-cl,.gjs-mdl-btn-close,.gjs-am-close{opacity:.3;filter:alpha(opacity=30);font-size:25px;cursor:pointer}.btn-cl:hover,.gjs-mdl-btn-close:hover,.gjs-am-close:hover{opacity:.7;filter:alpha(opacity=70)}.no-dots,.ui-resizable-handle{border:none !important;margin:0 !important;outline:none !important}.gjs-com-dashed *{outline:1px dashed #888;outline-offset:-2px;box-sizing:border-box}.gjs-cv-canvas .gjs-comp-selected{outline:3px solid #3b97e3 !important}*.gjs-com-hover,div.gjs-com-hover{outline:1px solid #3b97e3}*.gjs-com-hover-delete,div.gjs-com-hover-delete{outline:2px solid #dd3636;opacity:.5;filter:alpha(opacity=50)}*.gjs-com-hover-move,div.gjs-com-hover-move{outline:3px solid #ffca6f}.gjs-com-badge,.gjs-com-badge-red,.gjs-badge{pointer-events:none;background-color:#3b97e3;color:#fff;padding:2px 5px;position:absolute;z-index:1;font-size:12px;outline:none;display:none}.gjs-com-badge-red{background-color:#dd3636}.gjs-badge-warning{background-color:#ffca6f}.gjs-placeholder,.gjs-com-placeholder,.gjs-placeholder{position:absolute;z-index:10;pointer-events:none;display:none}.gjs-placeholder,.gjs-placeholder{border-style:solid !important;border-color:#62c462;outline:none;box-sizing:border-box;transition:top .2s,left .2s,width .2s,height .2s}.gjs-placeholder-int,.gjs-com-placeholder-int,.gjs-placeholder-int{background-color:#62c462;box-shadow:0 0 3px rgba(0,0,0,0.2);height:100%;width:100%;pointer-events:none;padding:1.5px;outline:none}.gjs-pn-panel{display:inline-block;position:absolute;box-sizing:border-box;text-align:center;padding:5px;z-index:3}.gjs-pn-panel .icon-undo,.gjs-pn-panel .icon-redo{font-size:20px;height:30px;width:25px}.gjs-pn-commands{width:85%;left:0;top:0;box-shadow:0 0 5px rgba(0,0,0,0.2)}.gjs-pn-options{right:15%;top:0}.gjs-pn-views{border-bottom:2px solid rgba(0,0,0,0.2);right:0;width:15%;z-index:4}.gjs-pn-views-container{height:100%;padding:42px 0 0;right:0;width:15%;overflow:auto;box-shadow:0 0 5px rgba(0,0,0,0.2)}.gjs-pn-buttons{align-items:center;display:flex;justify-content:space-between}.gjs-pn-btn{box-sizing:border-box;height:30px;width:30px;line-height:21px;background-color:transparent;border:none;font-size:18px;margin-right:5px;border-radius:2px;padding:5px;position:relative;cursor:pointer}.gjs-pn-btn.gjs-pn-active{background-color:rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.25) inset}.gjs-comp-image-placeholder{display:block;background-color:#f5f5f5;color:#777;height:50px;width:50px;line-height:50px;outline:3px solid #ffca6f;outline-offset:-3px;text-align:center;font-size:16.66667px;cursor:pointer}.gjs-comp-image-placeholder.fa-picture-o::after{content:"\f03e"}.gjs-label{line-height:18px}.gjs-fields{display:flex}.gjs-select{padding:0;width:100%}.gjs-select select{padding-right:10px}.gjs-select:-moz-focusring,.gjs-select select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,0.7)}.gjs-input:focus,.gjs-button:focus,.gjs-btn-prim:focus,.gjs-select:focus,.gjs-select select:focus{outline:none}.gjs-field input,.gjs-field select,.gjs-field textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;color:inherit;border:none;background-color:transparent;box-sizing:border-box;width:100%;position:relative;padding:5px;z-index:1}.gjs-field input:focus,.gjs-field select:focus,.gjs-field textarea:focus{outline:none}.gjs-field-range{flex:9 1 auto}.gjs-field-integer input{padding-right:30px}.gjs-select option,.gjs-clm-select option,.gjs-sm-select option,.gjs-fields option,.gjs-sm-unit option{background-color:#444;color:#ddd}.gjs-field{background-color:rgba(0,0,0,0.2);border:none;box-shadow:none;border-radius:2px;box-sizing:border-box;padding:0;position:relative}.gjs-field textarea{resize:vertical}.gjs-field .gjs-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;z-index:0}.gjs-field .gjs-d-s-arrow{bottom:0;top:0;margin:auto;right:5px;border-top:4px solid rgba(255,255,255,0.7);position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-field-arrows{position:absolute;cursor:ns-resize;margin:auto;height:20px;width:9px;z-index:10;bottom:0;right:3px;top:0}.gjs-field-color,.gjs-field-radio{width:100%}.gjs-field-color input{padding-right:22px;box-sizing:border-box}.gjs-field-colorp{border-left:1px solid rgba(0,0,0,0.2);box-sizing:border-box;height:100%;padding:2px;position:absolute;right:0;top:0;width:22px;z-index:10}.gjs-field-colorp .gjs-checker-bg,.gjs-field-colorp .gjs-field-colorp-c{height:100%;width:100%;border-radius:1px}.gjs-field-colorp-c{height:100%;position:relative;width:100%}.gjs-field-color-picker{background-color:#ddd;cursor:pointer;height:100%;width:100%;box-shadow:0 0 1px rgba(0,0,0,0.2);border-radius:1px;position:absolute;top:0}.gjs-field-checkbox{padding:0;width:auto !important}.gjs-field-checkbox input{display:none}.gjs-field-checkbox input:checked+.gjs-chk-icon{border-color:rgba(255,255,255,0.5);border-width:0 2px 2px 0;border-style:solid}.gjs-radio-item{flex:1 1 auto;text-align:center;border-left:1px solid rgba(0,0,0,0.2)}.gjs-radio-item:first-child{border:none}.gjs-radio-item:hover{background:rgba(0,0,0,0.2)}.gjs-radio-item input{display:none}.gjs-radio-item input:checked+.gjs-radio-item-label{background-color:rgba(255,255,255,0.2)}.gjs-radio-items{display:flex}.gjs-radio-item-label{cursor:pointer;display:block;padding:5px}.gjs-field-units{position:absolute;margin:auto;right:10px;bottom:0;top:0}.gjs-field-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,0.7);cursor:pointer}.gjs-field-arrow-u,.gjs-field-arrow-d{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,0.7);bottom:4px;cursor:pointer}.gjs-field-arrow-u{border-bottom:4px solid rgba(255,255,255,0.7);border-top:none;top:4px}.gjs-field-select{padding:0}.gjs-field-range{background-color:transparent;border:none;box-shadow:none;padding:0}.gjs-field-range input{margin:0;height:100%}.gjs-field-range input:focus{outline:none}.gjs-field-range input::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;height:10px;width:10px;border:1px solid rgba(0,0,0,0.2);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-moz-range-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,0.2);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-ms-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,0.2);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-moz-range-track{background-color:rgba(0,0,0,0.2);border-radius:1px;margin-top:3px;height:3px}.gjs-field-range input::-webkit-slider-runnable-track{background-color:rgba(0,0,0,0.2);border-radius:1px;margin-top:3px;height:3px}.gjs-field-range input::-ms-track{background-color:rgba(0,0,0,0.2);border-radius:1px;margin-top:3px;height:3px}.gjs-btn-prim{color:inherit;background-color:rgba(255,255,255,0.1);border-radius:2px;padding:3px 6px;padding:5px;cursor:pointer;border:none}.gjs-btn-prim:active{background-color:rgba(255,255,255,0.1)}.gjs-chk-icon{-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);box-sizing:border-box;display:block;height:14px;margin:0 5px;width:6px;cursor:pointer}.gjs-add-trasp{background:none;border:none;color:#ddd;cursor:pointer;font-size:1em;border-radius:2px;opacity:.75;filter:alpha(opacity=75)}.gjs-add-trasp:hover{opacity:1;filter:alpha(opacity=100)}.gjs-add-trasp:active{background-color:rgba(0,0,0,0.2)}.gjs-devices-c{display:flex;align-items:center;padding:3px}.gjs-devices-c .gjs-device-label{flex-grow:2;text-align:left;margin-right:10px}.gjs-devices-c .gjs-select{flex-grow:20}.gjs-devices-c .gjs-add-trasp{flex-grow:1;margin-left:5px}.gjs-category-open,.gjs-sm-sector.gjs-sm-open,.gjs-sm-open.gjs-clm-tags,.gjs-block-category.gjs-open{border-bottom:1px solid rgba(0,0,0,0.25)}.gjs-category-title,.gjs-sm-sector .gjs-sm-title,.gjs-clm-tags .gjs-sm-title,.gjs-block-category .gjs-title,.gjs-layer-title{font-weight:lighter;background-color:rgba(0,0,0,0.1);letter-spacing:1px;padding:9px 10px 9px 20px;border-bottom:1px solid rgba(0,0,0,0.25);text-align:left;position:relative;cursor:pointer}.gjs-sm-clear{line-height:0;cursor:pointer}.gjs-sm-header{font-weight:lighter;padding:10px}.gjs-sm-properties{font-size:.75rem;padding:10px 5px;display:flex;flex-wrap:wrap;align-items:flex-end;box-sizing:border-box;width:100%}.gjs-sm-label{margin:5px 5px 3px 0}.gjs-sm-close-btn,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.2;filter:alpha(opacity=20)}.gjs-sm-close-btn:hover,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-sm-sector,.gjs-clm-tags{clear:both;font-weight:lighter;text-align:left}.gjs-sm-sector #gjs-sm-caret,.gjs-clm-tags #gjs-sm-caret{padding-right:5px;font-size:11px}.gjs-sm-sector .gjs-sm-field,.gjs-clm-tags .gjs-sm-field,.gjs-sm-sector .gjs-clm-field,.gjs-clm-tags .gjs-clm-field{width:100%;position:relative}.gjs-sm-sector .gjs-sm-field input,.gjs-clm-tags .gjs-sm-field input,.gjs-sm-sector .gjs-clm-field input,.gjs-clm-tags .gjs-clm-field input,.gjs-sm-sector .gjs-sm-field select,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field select,.gjs-clm-tags .gjs-clm-field select{background-color:transparent;color:rgba(255,255,255,0.7);border:none;width:100%}.gjs-sm-sector .gjs-sm-field input,.gjs-clm-tags .gjs-sm-field input,.gjs-sm-sector .gjs-clm-field input,.gjs-clm-tags .gjs-clm-field input{box-sizing:border-box}.gjs-sm-sector .gjs-sm-field select,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field select,.gjs-clm-tags .gjs-clm-field select{position:relative;z-index:1;-webkit-appearance:none;-moz-appearance:none;appearance:none}.gjs-sm-sector .gjs-sm-field select::-ms-expand,.gjs-clm-tags .gjs-sm-field select::-ms-expand,.gjs-sm-sector .gjs-clm-field select::-ms-expand,.gjs-clm-tags .gjs-clm-field select::-ms-expand{display:none}.gjs-sm-sector .gjs-sm-field select:-moz-focusring,.gjs-clm-tags .gjs-sm-field select:-moz-focusring,.gjs-sm-sector .gjs-clm-field select:-moz-focusring,.gjs-clm-tags .gjs-clm-field select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,0.7)}.gjs-sm-sector .gjs-sm-field input:focus,.gjs-clm-tags .gjs-sm-field input:focus,.gjs-sm-sector .gjs-clm-field input:focus,.gjs-clm-tags .gjs-clm-field input:focus,.gjs-sm-sector .gjs-sm-field select:focus,.gjs-clm-tags .gjs-sm-field select:focus,.gjs-sm-sector .gjs-clm-field select:focus,.gjs-clm-tags .gjs-clm-field select:focus{outline:none}.gjs-sm-sector .gjs-sm-field .gjs-sm-unit,.gjs-clm-tags .gjs-sm-field .gjs-sm-unit,.gjs-sm-sector .gjs-clm-field .gjs-sm-unit,.gjs-clm-tags .gjs-clm-field .gjs-sm-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,0.7);cursor:pointer}.gjs-sm-sector .gjs-sm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-sm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-clm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-clm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;cursor:ns-resize}.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow{cursor:pointer}.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow{border-bottom:4px solid rgba(255,255,255,0.7);top:4px}.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow{border-top:4px solid rgba(255,255,255,0.7);bottom:4px}.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow{bottom:7px}.gjs-sm-sector .gjs-sm-field.gjs-sm-color,.gjs-clm-tags .gjs-sm-field.gjs-sm-color,.gjs-sm-sector .gjs-sm-color.gjs-clm-field,.gjs-clm-tags .gjs-sm-color.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-input,.gjs-clm-tags .gjs-sm-field.gjs-sm-input,.gjs-sm-sector .gjs-sm-input.gjs-clm-field,.gjs-clm-tags .gjs-sm-input.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-integer,.gjs-clm-tags .gjs-sm-field.gjs-sm-integer,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-list.gjs-clm-field,.gjs-clm-tags .gjs-sm-list.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-clm-tags .gjs-clm-select{background-color:rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.1);box-shadow:1px 1px 0 rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);border-radius:2px;box-sizing:border-box;padding:0 5px}.gjs-sm-sector .gjs-sm-field.gjs-sm-composite,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-composite.gjs-clm-field{border-radius:2px}.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-clm-tags .gjs-clm-select{padding:0}.gjs-sm-sector .gjs-sm-field.gjs-sm-select select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field select,.gjs-clm-tags .gjs-sm-select.gjs-clm-field select,.gjs-sm-sector .gjs-clm-select select,.gjs-clm-tags .gjs-clm-select select{height:20px}.gjs-sm-sector .gjs-sm-field.gjs-sm-select option,.gjs-clm-tags .gjs-sm-field.gjs-sm-select option,.gjs-sm-sector .gjs-sm-select.gjs-clm-field option,.gjs-clm-tags .gjs-sm-select.gjs-clm-field option,.gjs-sm-sector .gjs-clm-select option,.gjs-clm-tags .gjs-clm-select option{padding:3px 0}.gjs-sm-sector .gjs-sm-field.gjs-sm-composite,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-composite.gjs-clm-field{background-color:rgba(0,0,0,0.1);border:1px solid rgba(0,0,0,0.25)}.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-list.gjs-clm-field,.gjs-clm-tags .gjs-sm-list.gjs-clm-field{width:auto;padding:0;overflow:hidden;float:left}.gjs-sm-sector .gjs-sm-field.gjs-sm-list input,.gjs-clm-tags .gjs-sm-field.gjs-sm-list input,.gjs-sm-sector .gjs-sm-list.gjs-clm-field input,.gjs-clm-tags .gjs-sm-list.gjs-clm-field input{display:none}.gjs-sm-sector .gjs-sm-field.gjs-sm-list label,.gjs-clm-tags .gjs-sm-field.gjs-sm-list label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field label{cursor:pointer;padding:5px;display:block}.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label{background-color:rgba(255,255,255,0.2)}.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-icon,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-icon{background-repeat:no-repeat;background-position:center;text-shadow:none;line-height:normal}.gjs-sm-sector .gjs-sm-field.gjs-sm-integer select,.gjs-clm-tags .gjs-sm-field.gjs-sm-integer select,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field select,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field select{width:auto;padding:0}.gjs-sm-sector .gjs-sm-list .gjs-sm-el,.gjs-clm-tags .gjs-sm-list .gjs-sm-el{float:left;border-left:1px solid rgba(0,0,0,0.2)}.gjs-sm-sector .gjs-sm-list .gjs-sm-el:first-child,.gjs-clm-tags .gjs-sm-list .gjs-sm-el:first-child{border:none}.gjs-sm-sector .gjs-sm-list .gjs-sm-el:hover,.gjs-clm-tags .gjs-sm-list .gjs-sm-el:hover{background:rgba(0,0,0,0.2)}.gjs-sm-sector .gjs-sm-slider .gjs-field-integer,.gjs-clm-tags .gjs-sm-slider .gjs-field-integer{flex:1 1 65px}.gjs-sm-sector .gjs-sm-property,.gjs-clm-tags .gjs-sm-property{box-sizing:border-box;float:left;width:50%;margin-bottom:5px;padding:0 5px}.gjs-sm-sector .gjs-sm-property.gjs-sm-composite,.gjs-clm-tags .gjs-sm-property.gjs-sm-composite,.gjs-sm-sector .gjs-sm-property.gjs-sm-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-list,.gjs-clm-tags .gjs-sm-property.gjs-sm-list,.gjs-sm-sector .gjs-sm-property.gjs-sm-radio,.gjs-clm-tags .gjs-sm-property.gjs-sm-radio,.gjs-sm-sector .gjs-sm-property.gjs-sm-stack,.gjs-clm-tags .gjs-sm-property.gjs-sm-stack,.gjs-sm-sector .gjs-sm-property.gjs-sm-slider,.gjs-clm-tags .gjs-sm-property.gjs-sm-slider,.gjs-sm-sector .gjs-sm-property.gjs-sm-color,.gjs-clm-tags .gjs-sm-property.gjs-sm-color{width:100%}.gjs-sm-sector .gjs-sm-property .gjs-sm-btn,.gjs-clm-tags .gjs-sm-property .gjs-sm-btn{background-color:rgba(33,33,33,0.2);border-radius:2px;box-shadow:1px 1px 0 rgba(5,5,5,0.2),1px 1px 0 rgba(43,43,43,0.2) inset;padding:5px;position:relative;text-align:center;height:auto;width:100%;cursor:pointer;color:#ddd;box-sizing:border-box;text-shadow:-1px -1px 0 rgba(0,0,0,0.2);border:none;opacity:.85;filter:alpha(opacity=85)}.gjs-sm-sector .gjs-sm-property .gjs-sm-btn-c,.gjs-clm-tags .gjs-sm-property .gjs-sm-btn-c{box-sizing:border-box;float:left;width:100%}.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box{background-color:rgba(255,255,255,0.05);border-radius:2px;margin-top:5px;position:relative;overflow:hidden}.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show{border:1px solid rgba(252,252,252,0.05);padding:3px 20px}.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{top:-5px;display:block}.gjs-sm-sector .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file{height:50px}.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file{background-size:auto 100%;background-repeat:no-repeat;background-position:center center}.gjs-sm-sector .gjs-sm-property .gjs-sm-layers,.gjs-clm-tags .gjs-sm-property .gjs-sm-layers{margin-top:5px;padding:1px 3px;min-height:30px}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer{background-color:rgba(255,255,255,0.055);border-radius:2px;margin:2px 0;padding:7px;position:relative;cursor:pointer}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{height:15px;position:absolute;right:27px;top:6px;width:15px}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box{border-radius:2px}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.5;filter:alpha(opacity=50)}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover{opacity:.8;filter:alpha(opacity=80)}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview{background-color:white;height:100%;width:100%;background-size:cover !important}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-active,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-active{background-color:rgba(255,255,255,0.12)}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box{display:none}.gjs-sm-sector #gjs-sm-text-shadow #gjs-sm-preview::after,.gjs-clm-tags #gjs-sm-text-shadow #gjs-sm-preview::after{color:#000;content:"T";font-weight:900;line-height:17px;padding:0 4px}.gjs-sm-sector .gjs-sm-stack .gjs-sm-properties,.gjs-clm-tags .gjs-sm-stack .gjs-sm-properties{padding:5px 0 0}.gjs-sm-sector .gjs-sm-stack #gjs-sm-add,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add{background:none;border:none;cursor:pointer;outline:none;font-size:22px;line-height:10px;position:absolute;right:0;top:-17px;opacity:0.75}.gjs-sm-sector .gjs-sm-stack #gjs-sm-add:hover,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add:hover{opacity:1;filter:alpha(opacity=100)}.gjs-sm-sector .gjs-sm-colorp-c,.gjs-clm-tags .gjs-sm-colorp-c{height:100%;width:20px;position:absolute;right:0;top:0;box-sizing:border-box;border-radius:2px;padding:2px}.gjs-sm-sector .gjs-sm-colorp-c .gjs-checker-bg,.gjs-clm-tags .gjs-sm-colorp-c .gjs-checker-bg,.gjs-sm-sector .gjs-sm-colorp-c .gjs-field-colorp-c,.gjs-clm-tags .gjs-sm-colorp-c .gjs-field-colorp-c{height:100%;width:100%;border-radius:1px}.gjs-sm-sector .gjs-sm-color-picker,.gjs-clm-tags .gjs-sm-color-picker{background-color:#ddd;cursor:pointer;height:16px;width:100%;margin-top:-16px;box-shadow:0 0 1px rgba(0,0,0,0.2);border-radius:1px}.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-upload,.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-upload{left:0;top:0;position:absolute;width:100%;opacity:0;cursor:pointer}.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-label,.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-label{padding:2px 0}.gjs-sm-layer>#gjs-sm-move{opacity:.7;filter:alpha(opacity=70);cursor:move;font-size:12px;float:left;margin:0 5px 0 0}.gjs-sm-layer>#gjs-sm-move:hover{opacity:.9;filter:alpha(opacity=90)}.gjs-blocks-c{display:flex;flex-wrap:wrap;justify-content:flex-start}.gjs-block-categories{display:flex;flex-direction:column}.gjs-block-category{width:100%}.gjs-block-category .gjs-caret-icon{margin-right:5px}.gjs-block{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;width:45%;padding:1em;box-sizing:border-box;min-height:90px;cursor:all-scroll;font-size:11px;font-weight:lighter;text-align:center;display:flex;flex-direction:column;justify-content:space-between;border:1px solid rgba(0,0,0,0.2);border-radius:3px;margin:10px 2.5% 5px;box-shadow:0 1px 0 0 rgba(0,0,0,0.15);transition:all 0.2s ease 0s;transition-property:box-shadow, color}.gjs-block:hover{box-shadow:0 3px 4px 0 rgba(0,0,0,0.15)}.gjs-block-svg{width:54px;fill:currentColor}.gjs-block-svg-path{fill:currentColor}.gjs-block.fa{font-size:2em;line-height:2em;padding:11px}.gjs-block-label{line-height:normal;font-size:0.65rem;font-weight:normal;font-family:Helvetica, sans-serif;overflow:hidden;text-overflow:ellipsis}.gjs-block.gjs-bdrag{width:auto;padding:0}.gjs-selected-parent{border:1px solid #ffca6f}.gjs-opac50{opacity:.5;filter:alpha(opacity=50)}.gjs-layer{font-weight:lighter;text-align:left;position:relative;background-color:rgba(0,0,0,0.1);font-size:.75rem}.gjs-layer-hidden{opacity:.55;filter:alpha(opacity=55)}.gjs-layer-count{position:absolute;right:27px;top:9px}.gjs-layer-vis{height:auto !important;width:auto !important;left:0;top:0;padding:7px 5px 7px 10px;position:absolute;cursor:pointer;z-index:1}.gjs-layer-caret{font-size:0.5rem;width:8px;padding:2px;cursor:pointer;position:absolute;left:-9px;top:6px;opacity:.7;filter:alpha(opacity=70)}.gjs-layer-caret:hover{opacity:1;filter:alpha(opacity=100)}.gjs-layer-title{padding:3px 10px 5px 30px;display:flex;align-items:center}.gjs-layer-title-inn{position:relative}.gjs-layer-name{padding:5px;display:inline-block;box-sizing:content-box}.gjs-layer>.gjs-layer-children{display:none}.gjs-layer.open>.gjs-layer-children{display:block}.gjs-layer-no-chld>.gjs-layer-title-inn>.gjs-layer-caret{display:none}.gjs-layer-move{padding:7px 10px 7px 5px;position:absolute;font-size:12px;cursor:move;right:0;top:0}.gjs-layer.gjs-hovered .gjs-layer-title{background-color:rgba(255,255,255,0.015)}.gjs-layer.gjs-selected .gjs-layer-title{background-color:rgba(255,255,255,0.1)}.gjs-layers{position:relative;height:100%}.gjs-layers #gjs-placeholder{width:100%;position:absolute}.gjs-layers #gjs-placeholder #gjs-plh-int{height:100%;padding:1px}.gjs-layers #gjs-placeholder #gjs-plh-int.gjs-insert{background-color:#62c462}.gjs-clm-tags{font-size:.75rem;padding:10px 5px}.gjs-clm-tags #gjs-clm-label,.gjs-clm-tags #gjs-clm-sel{padding:7px 0;float:left}.gjs-clm-tags #gjs-clm-sel{font-style:italic;margin-left:5px}.gjs-clm-tags #gjs-clm-status-c{float:right}.gjs-clm-tags #gjs-clm-tags-field{clear:both;padding:5px;margin-bottom:5px}.gjs-clm-tags #gjs-clm-tags-c{display:inline-block;vertical-align:top}.gjs-clm-tags #gjs-clm-add-tag{background-color:rgba(255,255,255,0.15);border-radius:2px;padding:5px 6px;box-shadow:1px 1px 0 rgba(255,255,255,0.2) inset;border:1px solid rgba(0,0,0,0.15);cursor:pointer}.gjs-clm-tags #gjs-clm-new{color:#ddd;padding:5px 6px;display:none}.gjs-clm-tags .gjs-clm-tag{display:inline-block;border-radius:3px;margin:0 3px 3px 0;padding:5px;cursor:default}.gjs-clm-tags #gjs-clm-close{font-size:20px;line-height:0;cursor:pointer;color:rgba(255,255,255,0.9)}.gjs-clm-tags #gjs-clm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-clm-tags #gjs-clm-checkbox{color:rgba(255,255,255,0.9);vertical-align:middle;cursor:pointer;font-size:9px}.gjs-clm-tags #gjs-clm-tag-label{padding:0 3px;cursor:text}.gjs-mdl-backlayer{opacity:.5;filter:alpha(opacity=50);background-color:#000;position:absolute;top:0;left:0;z-index:1;width:100%;height:100%}.gjs-mdl-container{font-family:Helvetica,sans-serif;position:absolute;top:0;left:0;z-index:10;width:100%;height:100%}.gjs-mdl-dialog{text-shadow:-1px -1px 0 rgba(0,0,0,0.05);animation:gjs-slide-down 0.215s;margin:30px auto 0;max-width:850px;width:90%;border-radius:3px;font-weight:lighter;position:relative;z-index:2}.gjs-mdl-title{font-size:1rem}.gjs-mdl-btn-close{position:absolute;right:15px;top:5px}.gjs-mdl-active .gjs-mdl-dialog{animation:gjs-mdl-slide-down 0.216s}.gjs-mdl-header,.gjs-mdl-content{padding:10px 15px;clear:both}.gjs-mdl-header{position:relative;border-bottom:1px solid rgba(0,0,0,0.2);padding:15px 15px 7px}.gjs-export-dl::after{content:"";clear:both;display:block;margin-bottom:10px}.gjs-dropzone{display:none;opacity:0;position:absolute;top:0;left:0;z-index:11;width:100%;height:100%;transition:opacity 0.25s;pointer-events:none}.gjs-dropzone-active .gjs-dropzone{display:block;opacity:1}.gjs-am-assets{height:290px;overflow:auto;clear:both;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:flex-start}.gjs-am-assets-header{padding:5px}.gjs-am-add-asset .gjs-am-add-field{width:70%;float:left}.gjs-am-add-asset button{width:25%;float:right}.gjs-am-preview-cont{position:relative;height:70px;width:30%;background-color:#444;border-radius:2px;float:left;overflow:hidden}.gjs-am-preview{position:absolute;background-position:center center;background-size:cover;background-repeat:no-repeat;height:100%;width:100%;z-index:1}.gjs-am-preview-bg{opacity:.5;filter:alpha(opacity=50);position:absolute;height:100%;width:100%;z-index:0}.gjs-am-dimensions{opacity:.5;filter:alpha(opacity=50);font-size:10px}.gjs-am-meta{width:70%;float:left;font-size:12px;padding:5px 0 0 5px;box-sizing:border-box}.gjs-am-meta>div{margin-bottom:5px}.gjs-am-close{cursor:pointer;position:absolute;right:5px;top:0;display:none}.gjs-am-asset{border-bottom:1px solid rgba(0,0,0,0.2);padding:5px;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.gjs-am-asset:hover .gjs-am-close{display:block}.gjs-am-highlight{background-color:rgba(255,255,255,0.1)}.gjs-am-assets-cont{background-color:rgba(0,0,0,0.1);border-radius:3px;box-sizing:border-box;padding:10px;width:45%;float:right;height:325px;overflow:hidden}.gjs-am-file-uploader{width:55%;float:left}.gjs-am-file-uploader>form{background-color:rgba(0,0,0,0.1);border:2px dashed;border-radius:3px;position:relative;text-align:center;margin-bottom:15px}.gjs-am-file-uploader>form.gjs-am-hover{border:2px solid #62c462;color:#75cb75}.gjs-am-file-uploader>form.gjs-am-disabled{border-color:red}.gjs-am-file-uploader>form #gjs-am-uploadFile{opacity:0;filter:alpha(opacity=0);padding:150px 10px;width:100%;box-sizing:border-box}.gjs-am-file-uploader #gjs-am-title{position:absolute;padding:150px 10px;width:100%}.gjs-cm-editor-c{float:left;box-sizing:border-box;width:50%}.gjs-cm-editor-c .CodeMirror{height:450px}.gjs-cm-editor{font-size:12px}.gjs-cm-editor#gjs-cm-htmlmixed{padding-right:10px;border-right:1px solid rgba(0,0,0,0.2)}.gjs-cm-editor#gjs-cm-htmlmixed #gjs-cm-title{color:#a97d44}.gjs-cm-editor#gjs-cm-css{padding-left:10px}.gjs-cm-editor#gjs-cm-css #gjs-cm-title{color:#ddca7e}.gjs-cm-editor #gjs-cm-title{background-color:rgba(0,0,0,0.2);font-size:12px;padding:5px 10px 3px;text-align:right}.gjs-rte-toolbar{border:1px solid rgba(0,0,0,0.2);position:absolute;border-radius:3px;z-index:10}.gjs-rte-actionbar{display:flex}.gjs-rte-action{display:flex;align-items:center;justify-content:center;padding:5px;min-width:25px;border-right:1px solid rgba(0,0,0,0.2);text-align:center;cursor:pointer;outline:none}.gjs-rte-action:last-child{border-right:none}.gjs-rte-action:hover{background-color:rgba(255,255,255,0.1)}.gjs-rte-active{background-color:rgba(0,0,0,0.2)}.gjs-editor-cont .sp-hue,.gjs-editor-cont .sp-slider{cursor:row-resize}.gjs-editor-cont .sp-color,.gjs-editor-cont .sp-dragger{cursor:crosshair}.gjs-editor-cont .sp-alpha-inner,.gjs-editor-cont .sp-alpha-handle{cursor:col-resize}.gjs-editor-cont .sp-hue{left:90%}.gjs-editor-cont .sp-color{right:15%}.gjs-editor-cont .sp-container{border:1px solid rgba(0,0,0,0.2);box-shadow:0 0 7px rgba(0,0,0,0.2);border-radius:3px}.gjs-editor-cont .sp-picker-container{border:none}.gjs-editor-cont .colpick_dark .colpick_color{outline:1px solid rgba(0,0,0,0.2)}.gjs-editor-cont .sp-cancel,.gjs-editor-cont .sp-cancel:hover{bottom:-8px;color:#777 !important;font-size:25px;left:0;position:absolute;text-decoration:none}.gjs-editor-cont .sp-alpha-handle{background-color:#ccc;border:1px solid #555;width:4px}.gjs-editor-cont .sp-color,.gjs-editor-cont .sp-hue{border:1px solid #333333}.gjs-editor-cont .sp-slider{background-color:#ccc;border:1px solid #555;height:3px;left:-4px;width:22px}.gjs-editor-cont .sp-dragger{background:transparent;box-shadow:0 0 0 1px #111}.gjs-editor-cont .sp-button-container{float:none;width:100%;position:relative;text-align:right}.gjs-editor-cont .sp-container button,.gjs-editor-cont .sp-container button:hover,.gjs-editor-cont .sp-container button:active{background:rgba(0,0,0,0.2);border-color:rgba(0,0,0,0.2);color:#ddd;text-shadow:none;box-shadow:none;padding:3px 5px}.gjs-editor-cont .sp-palette-container{border:none;float:none;margin:0;padding:5px 10px 0}.gjs-editor-cont .sp-palette .sp-thumb-el,.gjs-editor-cont .sp-palette .sp-thumb-el:hover{border:1px solid rgba(0,0,0,0.9)}.gjs-editor-cont .sp-palette .sp-thumb-el:hover,.gjs-editor-cont .sp-palette .sp-thumb-el.sp-thumb-active{border-color:rgba(0,0,0,0.9)}.gjs-hidden{display:none}@keyframes gjs-slide-down{0%{transform:translate(0, -3rem);opacity:0}100%{transform:translate(0, 0);opacity:1}}@keyframes gjs-slide-up{0%{transform:translate(0, 0);opacity:1}100%{transform:translate(0, -3rem);opacity:0}}.cm-s-hopscotch span.cm-error{color:#ffffff} + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.CodeMirror{font-family:monospace;height:300px;color:black;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,0.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{0%{}50%{background-color:transparent}100%{}}@-webkit-keyframes blink{0%{}50%{background-color:transparent}100%{}}@keyframes blink{0%{}50%{background-color:transparent}100%{}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:#f00}.cm-invalidchar{color:#f00}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,0.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:0.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,0.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:none}.cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.cm-s-hopscotch div.CodeMirror-selected{background:#433b42 !important}.cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0px}.cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498 !important}.cm-s-hopscotch span.cm-comment{color:#b33508}.cm-s-hopscotch span.cm-atom{color:#c85e7c}.cm-s-hopscotch span.cm-number{color:#c85e7c}.cm-s-hopscotch span.cm-property,.cm-s-hopscotch span.cm-attribute{color:#8fc13e}.cm-s-hopscotch span.cm-keyword{color:#dd464c}.cm-s-hopscotch span.cm-string{color:#fdcc59}.cm-s-hopscotch span.cm-variable{color:#8fc13e}.cm-s-hopscotch span.cm-variable-2{color:#1290bf}.cm-s-hopscotch span.cm-def{color:#fd8b19}.cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.cm-s-hopscotch span.cm-tag{color:#dd464c}.cm-s-hopscotch span.cm-link{color:#c85e7c}.cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:white !important}.cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}@font-face{font-family:'font3336';src:url("../fonts/main-fonts.eot?v=20");src:url("../fonts/main-fonts.woff?v=20") format("woff"),url("../fonts/main-fonts.ttf?v=20") format("truetype"),url("../fonts/main-fonts.svg?v=20") format("svg"),url("../fonts/main-fonts.eot?v=20") format("embedded-opentype");font-weight:normal;font-style:normal}.gjs-one-bg{background-color:#444}.gjs-one-color{color:#444}.gjs-one-color-h:hover{color:#444}.gjs-two-bg{background-color:#ddd}.gjs-two-color{color:#ddd}.gjs-two-color-h:hover{color:#ddd}.gjs-three-bg{background-color:#804f7b}.gjs-three-color{color:#804f7b}.gjs-three-color-h:hover{color:#804f7b}.gjs-four-bg{background-color:#d278c9}.gjs-four-color{color:#d278c9}.gjs-four-color-h:hover{color:#d278c9}.gjs-bg-main,.gjs-off-prv,.gjs-sm-sector .gjs-sm-colorp-c,.gjs-clm-tags .gjs-sm-colorp-c{background-color:#444}.gjs-color-main,.gjs-off-prv,.gjs-sm-sector .gjs-sm-stack #gjs-sm-add,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add{color:#ddd;fill:#ddd}.gjs-color-active{color:#f8f8f8;fill:#f8f8f8}.gjs-color-warn{color:#ffca6f;fill:#ffca6f}.gjs-color-hl{color:#71b7f1;fill:#71b7f1}.gjs-fonts::before{display:block;font:normal normal normal 14px font3336;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:5em}.gjs-f-b1::before{content:'Q'}.gjs-f-b2::before{content:'W'}.gjs-f-b3::before{content:'E'}.gjs-f-b37::before{content:'R'}.gjs-f-hero::before{content:'T'}.gjs-f-h1p::before{content:'y'}.gjs-f-3ba::before{content:'u'}.gjs-f-image::before{content:'I'}.gjs-f-text::before{content:'o'}.gjs-f-quo::before{content:'p'}.gjs-f-button::before{content:'B'}.gjs-f-divider::before{content:'D'}.gjs-invis-invis,.gjs-clm-tags #gjs-clm-new,.gjs-no-app{background-color:transparent;border:none;color:inherit}.gjs-no-app{height:10px}.gjs-test::btn{color:'#fff'}.opac50,.gjs-clm-tags #gjs-clm-close{opacity:.5;filter:alpha(opacity=50)}.gjs-checker-bg,.gjs-field-colorp-c,.checker-bg,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==")}.gjs-no-user-select,.gjs-grabbing,.gjs-grabbing *,.gjs-layer-name,.gjs-rte-toolbar{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-no-pointer-events,.gjs-resizer-c,.gjs-margin-v-el,.gjs-padding-v-el,.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{pointer-events:none}.gjs-bdrag{pointer-events:none !important;position:absolute !important;z-index:10 !important;width:auto}.gjs-drag-helper{background-color:#3b97e3 !important;pointer-events:none !important;position:absolute !important;z-index:10 !important;transform:scale(0.3) !important;transform-origin:top left !important;-webkit-transform-origin:top left !important;margin:15px !important;transition:none !important;outline:none !important}.gjs-grabbing,.gjs-grabbing *{cursor:grabbing !important;cursor:-webkit-grabbing !important}.gjs-grabbing{overflow:hidden}.gjs-off-prv{position:relative;z-index:10;padding:5px;cursor:pointer}.gjs-editor-cont ::-webkit-scrollbar-track{background:rgba(0,0,0,0.1)}.gjs-editor-cont ::-webkit-scrollbar-thumb{background-color:rgba(255,255,255,0.2)}.gjs-editor-cont ::-webkit-scrollbar{width:8px}.clear{clear:both}.no-select,.gjs-com-no-select,.gjs-com-no-select img,.gjs-category-title,.gjs-sm-sector .gjs-sm-title,.gjs-clm-tags .gjs-sm-title,.gjs-block-category .gjs-title,.gjs-layer-title,.gjs-clm-tags #gjs-clm-close{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.gjs-editor{font-family:Helvetica,sans-serif;font-size:.75rem;position:relative;box-sizing:border-box;height:100%}.gjs-freezed,.gjs-freezed{opacity:.5;filter:alpha(opacity=50);pointer-events:none}.gjs-traits-label{border-bottom:1px solid rgba(0,0,0,0.2);font-weight:lighter;margin-bottom:5px;padding:10px;text-align:left}.gjs-trt-header{font-weight:lighter;padding:10px}.gjs-trt-trait{display:flex;justify-content:start;padding:5px 10px;font-weight:lighter}.gjs-trt-traits{font-size:.75rem}.gjs-trt-trait .gjs-label{width:30%;text-align:left;text-overflow:ellipsis;overflow:hidden}.gjs-trt-trait .gjs-field{width:70%}.gjs-cv-canvas{background-color:rgba(0,0,0,0.15);box-sizing:border-box;width:85%;height:calc(100% - 40px);bottom:0;overflow:hidden;z-index:1;position:absolute;left:0;top:40px}.gjs-cv-canvas .gjs-ghost{display:none;pointer-events:none;background-color:#5b5b5b;border:2px dashed #ccc;position:absolute;z-index:10;opacity:.55;filter:alpha(opacity=55)}.gjs-cv-canvas .gjs-highlighter,.gjs-cv-canvas .gjs-highlighter-sel{position:absolute;outline:1px solid #3b97e3;outline-offset:-1px;pointer-events:none}.gjs-cv-canvas .gjs-highlighter-warning{outline:3px solid #ffca6f}.gjs-cv-canvas .gjs-highlighter-sel{outline:3px solid #3b97e3}.gjs-cv-canvas #gjs-tools{width:100%;position:absolute;top:0;left:0;outline:none}.gjs-cv-canvas>div:first-child{background-color:#fff;position:relative;height:100%;overflow:auto;width:100%}.gjs-cv-canvas *{box-sizing:border-box}.gjs-frame{outline:medium none;height:100%;width:100%;border:none;margin:auto;display:block;transition:width 0.35s ease,height 0.35s ease;position:absolute;top:0;bottom:0;left:0;right:0}.gjs-toolbar{position:absolute;background-color:#3b97e3;color:white;z-index:10;top:0;left:0}.gjs-toolbar-item{padding:5px 7px;font-size:0.8rem;cursor:pointer;width:26px;vertical-align:middle;display:inline-block}.gjs-toolbar-item svg{fill:currentColor;vertical-align:middle}.gjs-resizer-c{position:absolute;left:0;top:0;width:100%;height:100%;z-index:9}.gjs-margin-v-el,.gjs-padding-v-el,.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{opacity:.1;filter:alpha(opacity=10);position:absolute;background-color:yellow}.gjs-fixedmargin-v-el,.gjs-fixedpadding-v-el{opacity:.2;filter:alpha(opacity=20)}.gjs-padding-v-el,.gjs-fixedpadding-v-el{background-color:navy}.gjs-resizer-h{pointer-events:all;position:absolute;border:3px solid #3b97e3;width:10px;height:10px;background-color:#fff;margin:-5px}.gjs-resizer-h-tl{top:0;left:0;cursor:nwse-resize}.gjs-resizer-h-tr{top:0;right:0;cursor:nesw-resize}.gjs-resizer-h-tc{top:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-cl{left:0;margin:auto -5px;top:0;bottom:0;cursor:ew-resize}.gjs-resizer-h-cr{margin:auto -5px;top:0;bottom:0;right:0;cursor:ew-resize}.gjs-resizer-h-bl{bottom:0;left:0;cursor:nesw-resize}.gjs-resizer-h-bc{bottom:0;margin:-5px auto;left:0;right:0;cursor:ns-resize}.gjs-resizer-h-br{bottom:0;right:0;cursor:nwse-resize}.gjs-pn-panel .gjs-resizer-h{background-color:rgba(0,0,0,0.2);border:none;opacity:0;transition:opacity 0.25s}.gjs-pn-panel .gjs-resizer-h:hover{opacity:1}.gjs-pn-panel .gjs-resizer-h-tc,.gjs-pn-panel .gjs-resizer-h-bc{margin:0 auto;width:100%}.gjs-pn-panel .gjs-resizer-h-cr,.gjs-pn-panel .gjs-resizer-h-cl{margin:auto 0;height:100%}.gjs-resizing .gjs-highlighter,.gjs-resizing .gjs-badge{display:none !important}.gjs-resizing-tl *{cursor:nwse-resize !important}.gjs-resizing-tr *{cursor:nesw-resize !important}.gjs-resizing-tc *{cursor:ns-resize !important}.gjs-resizing-cl *{cursor:ew-resize !important}.gjs-resizing-cr *{cursor:ew-resize !important}.gjs-resizing-bl *{cursor:nesw-resize !important}.gjs-resizing-bc *{cursor:ns-resize !important}.gjs-resizing-br *{cursor:nwse-resize !important}.btn-cl,.gjs-mdl-btn-close,.gjs-am-close{opacity:.3;filter:alpha(opacity=30);font-size:25px;cursor:pointer}.btn-cl:hover,.gjs-mdl-btn-close:hover,.gjs-am-close:hover{opacity:.7;filter:alpha(opacity=70)}.no-dots,.ui-resizable-handle{border:none !important;margin:0 !important;outline:none !important}.gjs-com-dashed *{outline:1px dashed #888;outline-offset:-2px;box-sizing:border-box}.gjs-cv-canvas .gjs-comp-selected{outline:3px solid #3b97e3 !important}*.gjs-com-hover,div.gjs-com-hover{outline:1px solid #3b97e3}*.gjs-com-hover-delete,div.gjs-com-hover-delete{outline:2px solid #dd3636;opacity:.5;filter:alpha(opacity=50)}*.gjs-com-hover-move,div.gjs-com-hover-move{outline:3px solid #ffca6f}.gjs-com-badge,.gjs-com-badge-red,.gjs-badge{pointer-events:none;background-color:#3b97e3;color:#fff;padding:2px 5px;position:absolute;z-index:1;font-size:12px;outline:none;display:none}.gjs-com-badge-red{background-color:#dd3636}.gjs-badge-warning{background-color:#ffca6f}.gjs-placeholder,.gjs-com-placeholder,.gjs-placeholder{position:absolute;z-index:10;pointer-events:none;display:none}.gjs-placeholder,.gjs-placeholder{border-style:solid !important;border-color:#62c462;outline:none;box-sizing:border-box;transition:top .2s,left .2s,width .2s,height .2s}.gjs-placeholder-int,.gjs-com-placeholder-int,.gjs-placeholder-int{background-color:#62c462;box-shadow:0 0 3px rgba(0,0,0,0.2);height:100%;width:100%;pointer-events:none;padding:1.5px;outline:none}.gjs-pn-panel{display:inline-block;position:absolute;box-sizing:border-box;text-align:center;padding:5px;z-index:3}.gjs-pn-panel .icon-undo,.gjs-pn-panel .icon-redo{font-size:20px;height:30px;width:25px}.gjs-pn-commands{width:85%;left:0;top:0;box-shadow:0 0 5px rgba(0,0,0,0.2)}.gjs-pn-options{right:15%;top:0}.gjs-pn-views{border-bottom:2px solid rgba(0,0,0,0.2);right:0;width:15%;z-index:4}.gjs-pn-views-container{height:100%;padding:42px 0 0;right:0;width:15%;overflow:auto;box-shadow:0 0 5px rgba(0,0,0,0.2)}.gjs-pn-buttons{align-items:center;display:flex;justify-content:space-between}.gjs-pn-btn{box-sizing:border-box;min-height:30px;min-width:30px;line-height:21px;background-color:transparent;border:none;font-size:18px;margin-right:5px;border-radius:2px;padding:4px;position:relative;cursor:pointer}.gjs-pn-btn.gjs-pn-active{background-color:rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.25) inset}.gjs-pn-btn svg{fill:currentColor}.gjs-comp-image-placeholder{display:block;background-color:#f5f5f5;color:#777;height:50px;width:50px;line-height:50px;outline:3px solid #ffca6f;outline-offset:-3px;text-align:center;font-size:16.66667px;cursor:pointer}.gjs-comp-image-placeholder.fa-picture-o::after{content:"\f03e"}.gjs-label{line-height:18px}.gjs-fields{display:flex}.gjs-select{padding:0;width:100%}.gjs-select select{padding-right:10px}.gjs-select:-moz-focusring,.gjs-select select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,0.7)}.gjs-input:focus,.gjs-button:focus,.gjs-btn-prim:focus,.gjs-select:focus,.gjs-select select:focus{outline:none}.gjs-field input,.gjs-field select,.gjs-field textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;color:inherit;border:none;background-color:transparent;box-sizing:border-box;width:100%;position:relative;padding:5px;z-index:1}.gjs-field input:focus,.gjs-field select:focus,.gjs-field textarea:focus{outline:none}.gjs-field-range{flex:9 1 auto}.gjs-field-integer input{padding-right:30px}.gjs-select option,.gjs-clm-select option,.gjs-sm-select option,.gjs-fields option,.gjs-sm-unit option{background-color:#444;color:#ddd}.gjs-field{background-color:rgba(0,0,0,0.2);border:none;box-shadow:none;border-radius:2px;box-sizing:border-box;padding:0;position:relative}.gjs-field textarea{resize:vertical}.gjs-field .gjs-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;z-index:0}.gjs-field .gjs-d-s-arrow{bottom:0;top:0;margin:auto;right:5px;border-top:4px solid rgba(255,255,255,0.7);position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-field-arrows{position:absolute;cursor:ns-resize;margin:auto;height:20px;width:9px;z-index:10;bottom:0;right:3px;top:0}.gjs-field-color,.gjs-field-radio{width:100%}.gjs-field-color input{padding-right:22px;box-sizing:border-box}.gjs-field-colorp{border-left:1px solid rgba(0,0,0,0.2);box-sizing:border-box;height:100%;padding:2px;position:absolute;right:0;top:0;width:22px;z-index:10}.gjs-field-colorp .gjs-checker-bg,.gjs-field-colorp .gjs-field-colorp-c{height:100%;width:100%;border-radius:1px}.gjs-field-colorp-c{height:100%;position:relative;width:100%}.gjs-field-color-picker{background-color:#ddd;cursor:pointer;height:100%;width:100%;box-shadow:0 0 1px rgba(0,0,0,0.2);border-radius:1px;position:absolute;top:0}.gjs-field-checkbox{padding:0;width:auto !important}.gjs-field-checkbox input{display:none}.gjs-field-checkbox input:checked+.gjs-chk-icon{border-color:rgba(255,255,255,0.5);border-width:0 2px 2px 0;border-style:solid}.gjs-radio-item{flex:1 1 auto;text-align:center;border-left:1px solid rgba(0,0,0,0.2)}.gjs-radio-item:first-child{border:none}.gjs-radio-item:hover{background:rgba(0,0,0,0.2)}.gjs-radio-item input{display:none}.gjs-radio-item input:checked+.gjs-radio-item-label{background-color:rgba(255,255,255,0.2)}.gjs-radio-items{display:flex}.gjs-radio-item-label{cursor:pointer;display:block;padding:5px}.gjs-field-units{position:absolute;margin:auto;right:10px;bottom:0;top:0}.gjs-field-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,0.7);cursor:pointer}.gjs-field-arrow-u,.gjs-field-arrow-d{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,0.7);bottom:4px;cursor:pointer}.gjs-field-arrow-u{border-bottom:4px solid rgba(255,255,255,0.7);border-top:none;top:4px}.gjs-field-select{padding:0}.gjs-field-range{background-color:transparent;border:none;box-shadow:none;padding:0}.gjs-field-range input{margin:0;height:100%}.gjs-field-range input:focus{outline:none}.gjs-field-range input::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;height:10px;width:10px;border:1px solid rgba(0,0,0,0.2);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-moz-range-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,0.2);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-ms-thumb{height:10px;width:10px;border:1px solid rgba(0,0,0,0.2);border-radius:100%;background-color:#ddd;cursor:pointer}.gjs-field-range input::-moz-range-track{background-color:rgba(0,0,0,0.2);border-radius:1px;margin-top:3px;height:3px}.gjs-field-range input::-webkit-slider-runnable-track{background-color:rgba(0,0,0,0.2);border-radius:1px;margin-top:3px;height:3px}.gjs-field-range input::-ms-track{background-color:rgba(0,0,0,0.2);border-radius:1px;margin-top:3px;height:3px}.gjs-btn-prim{color:inherit;background-color:rgba(255,255,255,0.1);border-radius:2px;padding:3px 6px;padding:5px;cursor:pointer;border:none}.gjs-btn-prim:active{background-color:rgba(255,255,255,0.1)}.gjs-chk-icon{-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);box-sizing:border-box;display:block;height:14px;margin:0 5px;width:6px;cursor:pointer}.gjs-add-trasp{background:none;border:none;color:#ddd;cursor:pointer;font-size:1em;border-radius:2px;opacity:.75;filter:alpha(opacity=75)}.gjs-add-trasp:hover{opacity:1;filter:alpha(opacity=100)}.gjs-add-trasp:active{background-color:rgba(0,0,0,0.2)}.gjs-devices-c{display:flex;align-items:center;padding:3px}.gjs-devices-c .gjs-device-label{flex-grow:2;text-align:left;margin-right:10px}.gjs-devices-c .gjs-select{flex-grow:20}.gjs-devices-c .gjs-add-trasp{flex-grow:1;margin-left:5px}.gjs-category-open,.gjs-sm-sector.gjs-sm-open,.gjs-sm-open.gjs-clm-tags,.gjs-block-category.gjs-open{border-bottom:1px solid rgba(0,0,0,0.25)}.gjs-category-title,.gjs-sm-sector .gjs-sm-title,.gjs-clm-tags .gjs-sm-title,.gjs-block-category .gjs-title,.gjs-layer-title{font-weight:lighter;background-color:rgba(0,0,0,0.1);letter-spacing:1px;padding:9px 10px 9px 20px;border-bottom:1px solid rgba(0,0,0,0.25);text-align:left;position:relative;cursor:pointer}.gjs-sm-clear{line-height:0;cursor:pointer}.gjs-sm-header{font-weight:lighter;padding:10px}.gjs-sm-properties{font-size:.75rem;padding:10px 5px;display:flex;flex-wrap:wrap;align-items:flex-end;box-sizing:border-box;width:100%}.gjs-sm-label{margin:5px 5px 3px 0}.gjs-sm-close-btn,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.2;filter:alpha(opacity=20)}.gjs-sm-close-btn:hover,.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-sm-sector,.gjs-clm-tags{clear:both;font-weight:lighter;text-align:left}.gjs-sm-sector #gjs-sm-caret,.gjs-clm-tags #gjs-sm-caret{padding-right:5px;font-size:11px}.gjs-sm-sector .gjs-sm-field,.gjs-clm-tags .gjs-sm-field,.gjs-sm-sector .gjs-clm-field,.gjs-clm-tags .gjs-clm-field{width:100%;position:relative}.gjs-sm-sector .gjs-sm-field input,.gjs-clm-tags .gjs-sm-field input,.gjs-sm-sector .gjs-clm-field input,.gjs-clm-tags .gjs-clm-field input,.gjs-sm-sector .gjs-sm-field select,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field select,.gjs-clm-tags .gjs-clm-field select{background-color:transparent;color:rgba(255,255,255,0.7);border:none;width:100%}.gjs-sm-sector .gjs-sm-field input,.gjs-clm-tags .gjs-sm-field input,.gjs-sm-sector .gjs-clm-field input,.gjs-clm-tags .gjs-clm-field input{box-sizing:border-box}.gjs-sm-sector .gjs-sm-field select,.gjs-clm-tags .gjs-sm-field select,.gjs-sm-sector .gjs-clm-field select,.gjs-clm-tags .gjs-clm-field select{position:relative;z-index:1;-webkit-appearance:none;-moz-appearance:none;appearance:none}.gjs-sm-sector .gjs-sm-field select::-ms-expand,.gjs-clm-tags .gjs-sm-field select::-ms-expand,.gjs-sm-sector .gjs-clm-field select::-ms-expand,.gjs-clm-tags .gjs-clm-field select::-ms-expand{display:none}.gjs-sm-sector .gjs-sm-field select:-moz-focusring,.gjs-clm-tags .gjs-sm-field select:-moz-focusring,.gjs-sm-sector .gjs-clm-field select:-moz-focusring,.gjs-clm-tags .gjs-clm-field select:-moz-focusring{color:transparent;text-shadow:0 0 0 rgba(255,255,255,0.7)}.gjs-sm-sector .gjs-sm-field input:focus,.gjs-clm-tags .gjs-sm-field input:focus,.gjs-sm-sector .gjs-clm-field input:focus,.gjs-clm-tags .gjs-clm-field input:focus,.gjs-sm-sector .gjs-sm-field select:focus,.gjs-clm-tags .gjs-sm-field select:focus,.gjs-sm-sector .gjs-clm-field select:focus,.gjs-clm-tags .gjs-clm-field select:focus{outline:none}.gjs-sm-sector .gjs-sm-field .gjs-sm-unit,.gjs-clm-tags .gjs-sm-field .gjs-sm-unit,.gjs-sm-sector .gjs-clm-field .gjs-sm-unit,.gjs-clm-tags .gjs-clm-field .gjs-sm-unit{position:absolute;right:10px;top:3px;font-size:10px;color:rgba(255,255,255,0.7);cursor:pointer}.gjs-sm-sector .gjs-sm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-clm-sel-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-sm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-clm-field .gjs-sm-int-arrows,.gjs-clm-tags .gjs-clm-field .gjs-sm-int-arrows,.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow{height:100%;width:9px;position:absolute;right:0;top:0;cursor:ns-resize}.gjs-sm-sector .gjs-sm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-sel-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-sel-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-sel-arrow{cursor:pointer}.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow{position:absolute;height:0;width:0;border-left:3px solid transparent;border-right:4px solid transparent;cursor:pointer}.gjs-sm-sector .gjs-sm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-u-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-u-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-u-arrow{border-bottom:4px solid rgba(255,255,255,0.7);top:4px}.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow{border-top:4px solid rgba(255,255,255,0.7);bottom:4px}.gjs-sm-sector .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-clm-d-s-arrow,.gjs-sm-sector .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-sm-field .gjs-sm-d-s-arrow,.gjs-sm-sector .gjs-clm-field .gjs-sm-d-s-arrow,.gjs-clm-tags .gjs-clm-field .gjs-sm-d-s-arrow{bottom:7px}.gjs-sm-sector .gjs-sm-field.gjs-sm-color,.gjs-clm-tags .gjs-sm-field.gjs-sm-color,.gjs-sm-sector .gjs-sm-color.gjs-clm-field,.gjs-clm-tags .gjs-sm-color.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-input,.gjs-clm-tags .gjs-sm-field.gjs-sm-input,.gjs-sm-sector .gjs-sm-input.gjs-clm-field,.gjs-clm-tags .gjs-sm-input.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-integer,.gjs-clm-tags .gjs-sm-field.gjs-sm-integer,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-list.gjs-clm-field,.gjs-clm-tags .gjs-sm-list.gjs-clm-field,.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-clm-tags .gjs-clm-select{background-color:rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.1);box-shadow:1px 1px 0 rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);border-radius:2px;box-sizing:border-box;padding:0 5px}.gjs-sm-sector .gjs-sm-field.gjs-sm-composite,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-composite.gjs-clm-field{border-radius:2px}.gjs-sm-sector .gjs-sm-field.gjs-sm-select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field,.gjs-clm-tags .gjs-sm-select.gjs-clm-field,.gjs-sm-sector .gjs-clm-select,.gjs-clm-tags .gjs-clm-select{padding:0}.gjs-sm-sector .gjs-sm-field.gjs-sm-select select,.gjs-clm-tags .gjs-sm-field.gjs-sm-select select,.gjs-sm-sector .gjs-sm-select.gjs-clm-field select,.gjs-clm-tags .gjs-sm-select.gjs-clm-field select,.gjs-sm-sector .gjs-clm-select select,.gjs-clm-tags .gjs-clm-select select{height:20px}.gjs-sm-sector .gjs-sm-field.gjs-sm-select option,.gjs-clm-tags .gjs-sm-field.gjs-sm-select option,.gjs-sm-sector .gjs-sm-select.gjs-clm-field option,.gjs-clm-tags .gjs-sm-select.gjs-clm-field option,.gjs-sm-sector .gjs-clm-select option,.gjs-clm-tags .gjs-clm-select option{padding:3px 0}.gjs-sm-sector .gjs-sm-field.gjs-sm-composite,.gjs-clm-tags .gjs-sm-field.gjs-sm-composite,.gjs-sm-sector .gjs-sm-composite.gjs-clm-field,.gjs-clm-tags .gjs-sm-composite.gjs-clm-field{background-color:rgba(0,0,0,0.1);border:1px solid rgba(0,0,0,0.25)}.gjs-sm-sector .gjs-sm-field.gjs-sm-list,.gjs-clm-tags .gjs-sm-field.gjs-sm-list,.gjs-sm-sector .gjs-sm-list.gjs-clm-field,.gjs-clm-tags .gjs-sm-list.gjs-clm-field{width:auto;padding:0;overflow:hidden;float:left}.gjs-sm-sector .gjs-sm-field.gjs-sm-list input,.gjs-clm-tags .gjs-sm-field.gjs-sm-list input,.gjs-sm-sector .gjs-sm-list.gjs-clm-field input,.gjs-clm-tags .gjs-sm-list.gjs-clm-field input{display:none}.gjs-sm-sector .gjs-sm-field.gjs-sm-list label,.gjs-clm-tags .gjs-sm-field.gjs-sm-list label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field label{cursor:pointer;padding:5px;display:block}.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-radio:checked+label,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-radio:checked+label{background-color:rgba(255,255,255,0.2)}.gjs-sm-sector .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-clm-tags .gjs-sm-field.gjs-sm-list .gjs-sm-icon,.gjs-sm-sector .gjs-sm-list.gjs-clm-field .gjs-sm-icon,.gjs-clm-tags .gjs-sm-list.gjs-clm-field .gjs-sm-icon{background-repeat:no-repeat;background-position:center;text-shadow:none;line-height:normal}.gjs-sm-sector .gjs-sm-field.gjs-sm-integer select,.gjs-clm-tags .gjs-sm-field.gjs-sm-integer select,.gjs-sm-sector .gjs-sm-integer.gjs-clm-field select,.gjs-clm-tags .gjs-sm-integer.gjs-clm-field select{width:auto;padding:0}.gjs-sm-sector .gjs-sm-list .gjs-sm-el,.gjs-clm-tags .gjs-sm-list .gjs-sm-el{float:left;border-left:1px solid rgba(0,0,0,0.2)}.gjs-sm-sector .gjs-sm-list .gjs-sm-el:first-child,.gjs-clm-tags .gjs-sm-list .gjs-sm-el:first-child{border:none}.gjs-sm-sector .gjs-sm-list .gjs-sm-el:hover,.gjs-clm-tags .gjs-sm-list .gjs-sm-el:hover{background:rgba(0,0,0,0.2)}.gjs-sm-sector .gjs-sm-slider .gjs-field-integer,.gjs-clm-tags .gjs-sm-slider .gjs-field-integer{flex:1 1 65px}.gjs-sm-sector .gjs-sm-property,.gjs-clm-tags .gjs-sm-property{box-sizing:border-box;float:left;width:50%;margin-bottom:5px;padding:0 5px}.gjs-sm-sector .gjs-sm-property.gjs-sm-composite,.gjs-clm-tags .gjs-sm-property.gjs-sm-composite,.gjs-sm-sector .gjs-sm-property.gjs-sm-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-file,.gjs-sm-sector .gjs-sm-property.gjs-sm-list,.gjs-clm-tags .gjs-sm-property.gjs-sm-list,.gjs-sm-sector .gjs-sm-property.gjs-sm-radio,.gjs-clm-tags .gjs-sm-property.gjs-sm-radio,.gjs-sm-sector .gjs-sm-property.gjs-sm-stack,.gjs-clm-tags .gjs-sm-property.gjs-sm-stack,.gjs-sm-sector .gjs-sm-property.gjs-sm-slider,.gjs-clm-tags .gjs-sm-property.gjs-sm-slider,.gjs-sm-sector .gjs-sm-property.gjs-sm-color,.gjs-clm-tags .gjs-sm-property.gjs-sm-color{width:100%}.gjs-sm-sector .gjs-sm-property .gjs-sm-btn,.gjs-clm-tags .gjs-sm-property .gjs-sm-btn{background-color:rgba(33,33,33,0.2);border-radius:2px;box-shadow:1px 1px 0 rgba(5,5,5,0.2),1px 1px 0 rgba(43,43,43,0.2) inset;padding:5px;position:relative;text-align:center;height:auto;width:100%;cursor:pointer;color:#ddd;box-sizing:border-box;text-shadow:-1px -1px 0 rgba(0,0,0,0.2);border:none;opacity:.85;filter:alpha(opacity=85)}.gjs-sm-sector .gjs-sm-property .gjs-sm-btn-c,.gjs-clm-tags .gjs-sm-property .gjs-sm-btn-c{box-sizing:border-box;float:left;width:100%}.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box{background-color:rgba(255,255,255,0.05);border-radius:2px;margin-top:5px;position:relative;overflow:hidden}.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box.gjs-sm-show{border:1px solid rgba(252,252,252,0.05);padding:3px 20px}.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-box #gjs-sm-close{top:-5px;display:block}.gjs-sm-sector .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-file .gjs-sm-show #gjs-sm-preview-file{height:50px}.gjs-sm-sector .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file,.gjs-clm-tags .gjs-sm-property.gjs-sm-file #gjs-sm-preview-file{background-size:auto 100%;background-repeat:no-repeat;background-position:center center}.gjs-sm-sector .gjs-sm-property .gjs-sm-layers,.gjs-clm-tags .gjs-sm-property .gjs-sm-layers{margin-top:5px;padding:1px 3px;min-height:30px}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer{background-color:rgba(255,255,255,0.055);border-radius:2px;margin:2px 0;padding:7px;position:relative;cursor:pointer}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box{height:15px;position:absolute;right:27px;top:6px;width:15px}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview,.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-preview-box{border-radius:2px}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer{display:block;font-size:23px;position:absolute;cursor:pointer;right:5px;top:0;opacity:.5;filter:alpha(opacity=50)}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer #gjs-sm-close-layer:hover{opacity:.8;filter:alpha(opacity=80)}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer>#gjs-sm-preview-box #gjs-sm-preview{background-color:white;height:100%;width:100%;background-size:cover !important}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-active,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-active{background-color:rgba(255,255,255,0.12)}.gjs-sm-sector .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box,.gjs-clm-tags .gjs-sm-property .gjs-sm-layer.gjs-sm-no-preview #gjs-sm-preview-box{display:none}.gjs-sm-sector #gjs-sm-text-shadow #gjs-sm-preview::after,.gjs-clm-tags #gjs-sm-text-shadow #gjs-sm-preview::after{color:#000;content:"T";font-weight:900;line-height:17px;padding:0 4px}.gjs-sm-sector .gjs-sm-stack .gjs-sm-properties,.gjs-clm-tags .gjs-sm-stack .gjs-sm-properties{padding:5px 0 0}.gjs-sm-sector .gjs-sm-stack #gjs-sm-add,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add{background:none;border:none;cursor:pointer;outline:none;font-size:22px;line-height:10px;position:absolute;right:0;top:-17px;opacity:0.75}.gjs-sm-sector .gjs-sm-stack #gjs-sm-add:hover,.gjs-clm-tags .gjs-sm-stack #gjs-sm-add:hover{opacity:1;filter:alpha(opacity=100)}.gjs-sm-sector .gjs-sm-colorp-c,.gjs-clm-tags .gjs-sm-colorp-c{height:100%;width:20px;position:absolute;right:0;top:0;box-sizing:border-box;border-radius:2px;padding:2px}.gjs-sm-sector .gjs-sm-colorp-c .gjs-checker-bg,.gjs-clm-tags .gjs-sm-colorp-c .gjs-checker-bg,.gjs-sm-sector .gjs-sm-colorp-c .gjs-field-colorp-c,.gjs-clm-tags .gjs-sm-colorp-c .gjs-field-colorp-c{height:100%;width:100%;border-radius:1px}.gjs-sm-sector .gjs-sm-color-picker,.gjs-clm-tags .gjs-sm-color-picker{background-color:#ddd;cursor:pointer;height:16px;width:100%;margin-top:-16px;box-shadow:0 0 1px rgba(0,0,0,0.2);border-radius:1px}.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-upload,.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-upload{left:0;top:0;position:absolute;width:100%;opacity:0;cursor:pointer}.gjs-sm-sector .gjs-sm-btn-upload #gjs-sm-label,.gjs-clm-tags .gjs-sm-btn-upload #gjs-sm-label{padding:2px 0}.gjs-sm-layer>#gjs-sm-move{opacity:.7;filter:alpha(opacity=70);cursor:move;font-size:12px;float:left;margin:0 5px 0 0}.gjs-sm-layer>#gjs-sm-move:hover{opacity:.9;filter:alpha(opacity=90)}.gjs-blocks-c{display:flex;flex-wrap:wrap;justify-content:flex-start}.gjs-block-categories{display:flex;flex-direction:column}.gjs-block-category{width:100%}.gjs-block-category .gjs-caret-icon{margin-right:5px}.gjs-block{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;width:45%;min-width:45px;padding:1em;box-sizing:border-box;min-height:90px;cursor:all-scroll;font-size:11px;font-weight:lighter;text-align:center;display:flex;flex-direction:column;justify-content:space-between;border:1px solid rgba(0,0,0,0.2);border-radius:3px;margin:10px 2.5% 5px;box-shadow:0 1px 0 0 rgba(0,0,0,0.15);transition:all 0.2s ease 0s;transition-property:box-shadow, color}.gjs-block:hover{box-shadow:0 3px 4px 0 rgba(0,0,0,0.15)}.gjs-block svg{fill:currentColor}.gjs-block-svg{width:54px;fill:currentColor}.gjs-block-svg-path{fill:currentColor}.gjs-block.fa{font-size:2em;line-height:2em;padding:11px}.gjs-block-label{line-height:normal;font-size:0.65rem;font-weight:normal;font-family:Helvetica, sans-serif;overflow:hidden;text-overflow:ellipsis}.gjs-block.gjs-bdrag{width:auto;padding:0}.gjs-selected-parent{border:1px solid #ffca6f}.gjs-opac50{opacity:.5;filter:alpha(opacity=50)}.gjs-layer{font-weight:lighter;text-align:left;position:relative;background-color:rgba(0,0,0,0.1);font-size:.75rem}.gjs-layer-hidden{opacity:.55;filter:alpha(opacity=55)}.gjs-layer-count{position:absolute;right:27px;top:9px}.gjs-layer-vis{height:auto !important;width:auto !important;left:0;top:0;padding:7px 5px 7px 10px;position:absolute;cursor:pointer;z-index:1}.gjs-layer-caret{font-size:0.5rem;width:8px;padding:2px;cursor:pointer;position:absolute;left:-9px;top:6px;opacity:.7;filter:alpha(opacity=70)}.gjs-layer-caret:hover{opacity:1;filter:alpha(opacity=100)}.gjs-layer-title{padding:3px 10px 5px 30px;display:flex;align-items:center}.gjs-layer-title-inn{position:relative}.gjs-layer-name{padding:5px;display:inline-block;box-sizing:content-box}.gjs-layer>.gjs-layer-children{display:none}.gjs-layer.open>.gjs-layer-children{display:block}.gjs-layer-no-chld>.gjs-layer-title-inn>.gjs-layer-caret{display:none}.gjs-layer-move{padding:7px 10px 7px 5px;position:absolute;font-size:12px;cursor:move;right:0;top:0}.gjs-layer.gjs-hovered .gjs-layer-title{background-color:rgba(255,255,255,0.015)}.gjs-layer.gjs-selected .gjs-layer-title{background-color:rgba(255,255,255,0.1)}.gjs-layers{position:relative;height:100%}.gjs-layers #gjs-placeholder{width:100%;position:absolute}.gjs-layers #gjs-placeholder #gjs-plh-int{height:100%;padding:1px}.gjs-layers #gjs-placeholder #gjs-plh-int.gjs-insert{background-color:#62c462}.gjs-clm-tags{font-size:.75rem;padding:10px 5px}.gjs-clm-tags #gjs-clm-label,.gjs-clm-tags #gjs-clm-sel{padding:7px 0;float:left}.gjs-clm-tags #gjs-clm-sel{font-style:italic;margin-left:5px}.gjs-clm-tags #gjs-clm-status-c{float:right}.gjs-clm-tags #gjs-clm-tags-field{clear:both;padding:5px;margin-bottom:5px}.gjs-clm-tags #gjs-clm-tags-c{display:inline-block;vertical-align:top}.gjs-clm-tags #gjs-clm-add-tag{background-color:rgba(255,255,255,0.15);border-radius:2px;padding:5px 6px;box-shadow:1px 1px 0 rgba(255,255,255,0.2) inset;border:1px solid rgba(0,0,0,0.15);cursor:pointer}.gjs-clm-tags #gjs-clm-new{color:#ddd;padding:5px 6px;display:none}.gjs-clm-tags .gjs-clm-tag{display:inline-block;border-radius:3px;margin:0 3px 3px 0;padding:5px;cursor:default}.gjs-clm-tags #gjs-clm-close{font-size:20px;line-height:0;cursor:pointer;color:rgba(255,255,255,0.9)}.gjs-clm-tags #gjs-clm-close:hover{opacity:.7;filter:alpha(opacity=70)}.gjs-clm-tags #gjs-clm-checkbox{color:rgba(255,255,255,0.9);vertical-align:middle;cursor:pointer;font-size:9px}.gjs-clm-tags #gjs-clm-tag-label{padding:0 3px;cursor:text}.gjs-mdl-container{font-family:Helvetica,sans-serif;overflow-y:auto;position:fixed;background-color:rgba(0,0,0,0.5);display:flex;top:0;left:0;right:0;bottom:0;z-index:100}.gjs-mdl-dialog{text-shadow:-1px -1px 0 rgba(0,0,0,0.05);animation:gjs-slide-down 0.215s;margin:auto;max-width:850px;width:90%;border-radius:3px;font-weight:lighter;position:relative;z-index:2}.gjs-mdl-title{font-size:1rem}.gjs-mdl-btn-close{position:absolute;right:15px;top:5px}.gjs-mdl-active .gjs-mdl-dialog{animation:gjs-mdl-slide-down 0.216s}.gjs-mdl-header,.gjs-mdl-content{padding:10px 15px;clear:both}.gjs-mdl-header{position:relative;border-bottom:1px solid rgba(0,0,0,0.2);padding:15px 15px 7px}.gjs-export-dl::after{content:"";clear:both;display:block;margin-bottom:10px}.gjs-dropzone{display:none;opacity:0;position:absolute;top:0;left:0;z-index:11;width:100%;height:100%;transition:opacity 0.25s;pointer-events:none}.gjs-dropzone-active .gjs-dropzone{display:block;opacity:1}.gjs-am-assets{height:290px;overflow:auto;clear:both;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:flex-start}.gjs-am-assets-header{padding:5px}.gjs-am-add-asset .gjs-am-add-field{width:70%;float:left}.gjs-am-add-asset button{width:25%;float:right}.gjs-am-preview-cont{position:relative;height:70px;width:30%;background-color:#444;border-radius:2px;float:left;overflow:hidden}.gjs-am-preview{position:absolute;background-position:center center;background-size:cover;background-repeat:no-repeat;height:100%;width:100%;z-index:1}.gjs-am-preview-bg{opacity:.5;filter:alpha(opacity=50);position:absolute;height:100%;width:100%;z-index:0}.gjs-am-dimensions{opacity:.5;filter:alpha(opacity=50);font-size:10px}.gjs-am-meta{width:70%;float:left;font-size:12px;padding:5px 0 0 5px;box-sizing:border-box}.gjs-am-meta>div{margin-bottom:5px}.gjs-am-close{cursor:pointer;position:absolute;right:5px;top:0;display:none}.gjs-am-asset{border-bottom:1px solid rgba(0,0,0,0.2);padding:5px;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.gjs-am-asset:hover .gjs-am-close{display:block}.gjs-am-highlight{background-color:rgba(255,255,255,0.1)}.gjs-am-assets-cont{background-color:rgba(0,0,0,0.1);border-radius:3px;box-sizing:border-box;padding:10px;width:45%;float:right;height:325px;overflow:hidden}.gjs-am-file-uploader{width:55%;float:left}.gjs-am-file-uploader>form{background-color:rgba(0,0,0,0.1);border:2px dashed;border-radius:3px;position:relative;text-align:center;margin-bottom:15px}.gjs-am-file-uploader>form.gjs-am-hover{border:2px solid #62c462;color:#75cb75}.gjs-am-file-uploader>form.gjs-am-disabled{border-color:red}.gjs-am-file-uploader>form #gjs-am-uploadFile{opacity:0;filter:alpha(opacity=0);padding:150px 10px;width:100%;box-sizing:border-box}.gjs-am-file-uploader #gjs-am-title{position:absolute;padding:150px 10px;width:100%}.gjs-cm-editor-c{float:left;box-sizing:border-box;width:50%}.gjs-cm-editor-c .CodeMirror{height:450px}.gjs-cm-editor{font-size:12px}.gjs-cm-editor#gjs-cm-htmlmixed{padding-right:10px;border-right:1px solid rgba(0,0,0,0.2)}.gjs-cm-editor#gjs-cm-htmlmixed #gjs-cm-title{color:#a97d44}.gjs-cm-editor#gjs-cm-css{padding-left:10px}.gjs-cm-editor#gjs-cm-css #gjs-cm-title{color:#ddca7e}.gjs-cm-editor #gjs-cm-title{background-color:rgba(0,0,0,0.2);font-size:12px;padding:5px 10px 3px;text-align:right}.gjs-rte-toolbar{border:1px solid rgba(0,0,0,0.2);position:absolute;border-radius:3px;z-index:10}.gjs-rte-actionbar{display:flex}.gjs-rte-action{display:flex;align-items:center;justify-content:center;padding:5px;min-width:25px;border-right:1px solid rgba(0,0,0,0.2);text-align:center;cursor:pointer;outline:none}.gjs-rte-action:last-child{border-right:none}.gjs-rte-action:hover{background-color:rgba(255,255,255,0.1)}.gjs-rte-active{background-color:rgba(0,0,0,0.2)}.gjs-editor-cont .sp-hue,.gjs-editor-cont .sp-slider{cursor:row-resize}.gjs-editor-cont .sp-color,.gjs-editor-cont .sp-dragger{cursor:crosshair}.gjs-editor-cont .sp-alpha-inner,.gjs-editor-cont .sp-alpha-handle{cursor:col-resize}.gjs-editor-cont .sp-hue{left:90%}.gjs-editor-cont .sp-color{right:15%}.gjs-editor-cont .sp-container{border:1px solid rgba(0,0,0,0.2);box-shadow:0 0 7px rgba(0,0,0,0.2);border-radius:3px}.gjs-editor-cont .sp-picker-container{border:none}.gjs-editor-cont .colpick_dark .colpick_color{outline:1px solid rgba(0,0,0,0.2)}.gjs-editor-cont .sp-cancel,.gjs-editor-cont .sp-cancel:hover{bottom:-8px;color:#777 !important;font-size:25px;left:0;position:absolute;text-decoration:none}.gjs-editor-cont .sp-alpha-handle{background-color:#ccc;border:1px solid #555;width:4px}.gjs-editor-cont .sp-color,.gjs-editor-cont .sp-hue{border:1px solid #333333}.gjs-editor-cont .sp-slider{background-color:#ccc;border:1px solid #555;height:3px;left:-4px;width:22px}.gjs-editor-cont .sp-dragger{background:transparent;box-shadow:0 0 0 1px #111}.gjs-editor-cont .sp-button-container{float:none;width:100%;position:relative;text-align:right}.gjs-editor-cont .sp-container button,.gjs-editor-cont .sp-container button:hover,.gjs-editor-cont .sp-container button:active{background:rgba(0,0,0,0.2);border-color:rgba(0,0,0,0.2);color:#ddd;text-shadow:none;box-shadow:none;padding:3px 5px}.gjs-editor-cont .sp-palette-container{border:none;float:none;margin:0;padding:5px 10px 0}.gjs-editor-cont .sp-palette .sp-thumb-el,.gjs-editor-cont .sp-palette .sp-thumb-el:hover{border:1px solid rgba(0,0,0,0.9)}.gjs-editor-cont .sp-palette .sp-thumb-el:hover,.gjs-editor-cont .sp-palette .sp-thumb-el.sp-thumb-active{border-color:rgba(0,0,0,0.9)}.gjs-hidden{display:none}@keyframes gjs-slide-down{0%{transform:translate(0, -3rem);opacity:0}100%{transform:translate(0, 0);opacity:1}}@keyframes gjs-slide-up{0%{transform:translate(0, 0);opacity:1}100%{transform:translate(0, -3rem);opacity:0}}.cm-s-hopscotch span.cm-error{color:#ffffff} diff --git a/public/grapejs/dist/js/grapes.min.js b/public/grapejs/dist/js/grapes.min.js index f484d660..5ae4a192 100755 --- a/public/grapejs/dist/js/grapes.min.js +++ b/public/grapejs/dist/js/grapes.min.js @@ -1,5 +1,7 @@ -/*! grapesjs - 0.14.21 */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.grapesjs=e():t.grapesjs=e()}("undefined"!=typeof self?self:this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=60)}([function(t,e,n){(function(i){var r,o;!function(s){var a="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i;r=[n(1),n(10),e],void 0!==(o=function(t,e,n){a.Backbone=s(a,n,t,e)}.apply(e,r))&&(t.exports=o)}(function(t,e,n,i){var r=t.Backbone,o=Array.prototype.slice;e.VERSION="1.3.3",e.$=i,e.noConflict=function(){return t.Backbone=r,this},e.emulateHTTP=!1,e.emulateJSON=!1;var s=function(t,e,i){switch(t){case 1:return function(){return n[e](this[i])};case 2:return function(t){return n[e](this[i],t)};case 3:return function(t,r){return n[e](this[i],l(t,this),r)};case 4:return function(t,r,o){return n[e](this[i],l(t,this),r,o)};default:return function(){var t=o.call(arguments);return t.unshift(this[i]),n[e].apply(n,t)}}},a=function(t,e,i){n.each(e,function(e,r){n[r]&&(t.prototype[r]=s(e,r,i))})},l=function(t,e){return n.isFunction(t)?t:n.isObject(t)&&!e._isModel(t)?c(t):n.isString(t)?function(e){return e.get(t)}:t},c=function(t){var e=n.matches(t);return function(t){return e(t.attributes)}},u=e.Events={},h=/\s+/,d=function(t,e,i,r,o){var s,a=0;if(i&&"object"==typeof i){void 0!==r&&"context"in o&&void 0===o.context&&(o.context=r);for(s=n.keys(i);athis.length&&(r=this.length),r<0&&(r+=this.length+1);var o,s,a=[],l=[],c=[],u=[],h={},d=e.add,f=e.merge,p=e.remove,g=!1,v=this.comparator&&null==r&&!1!==e.sort,m=n.isString(this.comparator)?this.comparator:null;for(s=0;s7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(I,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";return this.location.replace(e+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var i=document.body,r=i.insertBefore(this.iframe,i.firstChild).contentWindow;r.document.open(),r.document.close(),r.location.hash="#"+this.fragment}var o=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState?o("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?o("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};this._usePushState?t("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&t("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),N.started=!1},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe&&(e=this.getHash(this.iframe.contentWindow)),e===this.fragment)return!1;this.iframe&&this.navigate(e),this.loadUrl()},loadUrl:function(t){return!!this.matchRoot()&&(t=this.fragment=this.getFragment(t),n.some(this.handlers,function(e){if(e.route.test(t))return e.callback(t),!0}))},navigate:function(t,e){if(!N.started)return!1;e&&!0!==e||(e={trigger:!!e}),t=this.getFragment(t||"");var n=this.root;""!==t&&"?"!==t.charAt(0)||(n=n.slice(0,-1)||"/");var i=n+t;if(t=this.decodeFragment(t.replace(F,"")),this.fragment!==t){if(this.fragment=t,this._usePushState)this.history[e.replace?"replaceState":"pushState"]({},document.title,i);else{if(!this._wantsHashChange)return this.location.assign(i);if(this._updateHash(this.location,t,e.replace),this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var r=this.iframe.contentWindow;e.replace||(r.document.open(),r.document.close()),this._updateHash(r.location,t,e.replace)}}return e.trigger?this.loadUrl(t):void 0}},_updateHash:function(t,e,n){if(n){var i=t.href.replace(/(javascript:|#).*$/,"");t.replace(i+"#"+e)}else t.hash="#"+e}}),e.history=new N;var R=function(t,e){var i,r=this;return i=t&&n.has(t,"constructor")?t.constructor:function(){return r.apply(this,arguments)},n.extend(i,r,e),i.prototype=n.create(r.prototype,t),i.prototype.constructor=i,i.__super__=r.prototype,i};b.extend=x.extend=A.extend=S.extend=N.extend=R;var z=function(){throw new Error('A "url" property or function must be specified')},H=function(t,e){var n=e.error;e.error=function(i){n&&n.call(e.context,t,i,e),t.trigger("error",t,i,e)}};return e})}).call(e,n(7))},function(t,e,n){(function(t,n){var i,r;!function(){var o="object"==typeof self&&self.self===self&&self||"object"==typeof t&&t.global===t&&t||this||{},s=o._,a=Array.prototype,l=Object.prototype,c="undefined"!=typeof Symbol?Symbol.prototype:null,u=a.push,h=a.slice,d=l.toString,f=l.hasOwnProperty,p=Array.isArray,g=Object.keys,v=Object.create,m=function(){},y=function(t){return t instanceof y?t:this instanceof y?void(this._wrapped=t):new y(t)};void 0===e||e.nodeType?o._=y:(void 0!==n&&!n.nodeType&&n.exports&&(e=n.exports=y),e._=y),y.VERSION="1.9.0";var b,x=function(t,e,n){if(void 0===e)return t;switch(null==n?3:n){case 1:return function(n){return t.call(e,n)};case 3:return function(n,i,r){return t.call(e,n,i,r)};case 4:return function(n,i,r,o){return t.call(e,n,i,r,o)}}return function(){return t.apply(e,arguments)}},w=function(t,e,n){return y.iteratee!==b?y.iteratee(t,e):null==t?y.identity:y.isFunction(t)?x(t,e,n):y.isObject(t)&&!y.isArray(t)?y.matcher(t):y.property(t)};y.iteratee=b=function(t,e){return w(t,e,1/0)};var C=function(t,e){return e=null==e?t.length-1:+e,function(){for(var n=Math.max(arguments.length-e,0),i=Array(n),r=0;r=0&&e<=E};y.each=y.forEach=function(t,e,n){e=x(e,n);var i,r;if(A(t))for(i=0,r=t.length;i0?0:s-1;for(r||(i=e[o?o[a]:a],a+=t);a>=0&&a=3;return e(t,x(n,r,4),i,o)}};y.reduce=y.foldl=y.inject=O(1),y.reduceRight=y.foldr=O(-1),y.find=y.detect=function(t,e,n){var i=A(t)?y.findIndex:y.findKey,r=i(t,e,n);if(void 0!==r&&-1!==r)return t[r]},y.filter=y.select=function(t,e,n){var i=[];return e=w(e,n),y.each(t,function(t,n,r){e(t,n,r)&&i.push(t)}),i},y.reject=function(t,e,n){return y.filter(t,y.negate(w(e)),n)},y.every=y.all=function(t,e,n){e=w(e,n);for(var i=!A(t)&&y.keys(t),r=(i||t).length,o=0;o=0},y.invoke=C(function(t,e,n){var i,r;return y.isFunction(e)?r=e:y.isArray(e)&&(i=e.slice(0,-1),e=e[e.length-1]),y.map(t,function(t){var o=r;if(!o){if(i&&i.length&&(t=T(t,i)),null==t)return;o=t[e]}return null==o?o:o.apply(t,n)})}),y.pluck=function(t,e){return y.map(t,y.property(e))},y.where=function(t,e){return y.filter(t,y.matcher(e))},y.findWhere=function(t,e){return y.find(t,y.matcher(e))},y.max=function(t,e,n){var i,r,o=-1/0,s=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t){t=A(t)?t:y.values(t);for(var a=0,l=t.length;ao&&(o=i)}else e=w(e,n),y.each(t,function(t,n,i){((r=e(t,n,i))>s||r===-1/0&&o===-1/0)&&(o=t,s=r)});return o},y.min=function(t,e,n){var i,r,o=1/0,s=1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t){t=A(t)?t:y.values(t);for(var a=0,l=t.length;ai||void 0===n)return 1;if(n0?0:r-1;o>=0&&o0?s=o>=0?o:Math.max(o+a,s):a=o>=0?Math.min(o+1,a):o+a+1;else if(n&&o&&a)return o=n(i,r),i[o]===r?o:-1;if(r!==r)return o=e(h.call(i,s,a),y.isNaN),o>=0?o+s:-1;for(o=t>0?s:a-1;o>=0&&oe?(i&&(clearTimeout(i),i=null),a=c,s=t.apply(r,o),i||(r=o=null)):i||!1===n.trailing||(i=setTimeout(l,u)),s};return c.cancel=function(){clearTimeout(i),a=0,i=r=o=null},c},y.debounce=function(t,e,n){var i,r,o=function(e,n){i=null,n&&(r=t.apply(e,n))},s=C(function(s){if(i&&clearTimeout(i),n){var a=!i;i=setTimeout(o,e),a&&(r=t.apply(this,s))}else i=y.delay(o,e,this,s);return r});return s.cancel=function(){clearTimeout(i),i=null},s},y.wrap=function(t,e){return y.partial(e,t)},y.negate=function(t){return function(){return!t.apply(this,arguments)}},y.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,i=t[e].apply(this,arguments);n--;)i=t[n].call(this,i);return i}},y.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},y.before=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},y.once=y.partial(y.before,2),y.restArguments=C;var F=!{toString:null}.propertyIsEnumerable("toString"),R=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],z=function(t,e){var n=R.length,i=t.constructor,r=y.isFunction(i)&&i.prototype||l,o="constructor";for(y.has(t,o)&&!y.contains(e,o)&&e.push(o);n--;)(o=R[n])in t&&t[o]!==r[o]&&!y.contains(e,o)&&e.push(o)};y.keys=function(t){if(!y.isObject(t))return[];if(g)return g(t);var e=[];for(var n in t)y.has(t,n)&&e.push(n);return F&&z(t,e),e},y.allKeys=function(t){if(!y.isObject(t))return[];var e=[];for(var n in t)e.push(n);return F&&z(t,e),e},y.values=function(t){for(var e=y.keys(t),n=e.length,i=Array(n),r=0;r1&&(i=x(i,e[1])),e=y.allKeys(t)):(i=V,e=_(e,!1,!1),t=Object(t));for(var r=0,o=e.length;r1&&(n=e[1])):(e=y.map(_(e,!1,!1),String),i=function(t,n){return!y.contains(e,n)}),y.pick(t,i,n)}),y.defaults=H(y.allKeys,!0),y.create=function(t,e){var n=k(t);return e&&y.extendOwn(n,e),n},y.clone=function(t){return y.isObject(t)?y.isArray(t)?t.slice():y.extend({},t):t},y.tap=function(t,e){return e(t),t},y.isMatch=function(t,e){var n=y.keys(e),i=n.length;if(null==t)return!i;for(var r=Object(t),o=0;o":">",'"':""","'":"'","`":"`"},U=y.invert(W),q=function(t){var e=function(e){return t[e]},n="(?:"+y.keys(t).join("|")+")",i=RegExp(n),r=RegExp(n,"g");return function(t){return t=null==t?"":""+t,i.test(t)?t.replace(r,e):t}};y.escape=q(W),y.unescape=q(U),y.result=function(t,e,n){y.isArray(e)||(e=[e]);var i=e.length;if(!i)return y.isFunction(n)?n.call(t):n;for(var r=0;r/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var G=/(.)^/,Y={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},X=/\\|'|\r|\n|\u2028|\u2029/g,J=function(t){return"\\"+Y[t]};y.template=function(t,e,n){!e&&n&&(e=n),e=y.defaults({},e,y.templateSettings);var i=RegExp([(e.escape||G).source,(e.interpolate||G).source,(e.evaluate||G).source].join("|")+"|$","g"),r=0,o="__p+='";t.replace(i,function(e,n,i,s,a){return o+=t.slice(r,a).replace(X,J),r=a+e.length,n?o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":i?o+="'+\n((__t=("+i+"))==null?'':__t)+\n'":s&&(o+="';\n"+s+"\n__p+='"),e}),o+="';\n",e.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";var s;try{s=new Function(e.variable||"obj","_",o)}catch(t){throw t.source=o,t}var a=function(t){return s.call(this,t,y)};return a.source="function("+(e.variable||"obj")+"){\n"+o+"}",a},y.chain=function(t){var e=y(t);return e._chain=!0,e};var Z=function(t,e){return t._chain?y(e).chain():e};y.mixin=function(t){return y.each(y.functions(t),function(e){var n=y[e]=t[e];y.prototype[e]=function(){var t=[this._wrapped];return u.apply(t,arguments),Z(this,n.apply(y,t))}}),y},y.mixin(y),y.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=a[t];y.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],Z(this,n)}}),y.each(["concat","join","slice"],function(t){var e=a[t];y.prototype[t]=function(){return Z(this,e.apply(this._wrapped,arguments))}}),y.prototype.value=function(){return this._wrapped},y.prototype.valueOf=y.prototype.toJSON=y.prototype.value,y.prototype.toString=function(){return String(this._wrapped)},i=[],void 0!==(r=function(){return y}.apply(e,i))&&(n.exports=r)}()}).call(e,n(7),n(64)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getUnitFromValue=e.normalizeFloat=e.shallowDiff=e.getElement=e.camelCase=e.getModel=e.matches=e.upFirst=e.hasDnd=e.off=e.on=void 0;var i=n(1),r=window.Element.prototype,o=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector,s=function(t,e){var n={},r=(0,i.keys)(e);for(var o in t)if(t.hasOwnProperty(o)){var s=t[o],a=e[o];r.indexOf(o)>=0?s!==a&&(n[o]=a):n[o]=null}for(var l in e)e.hasOwnProperty(l)&&(0,i.isUndefined)(t[l])&&(n[l]=e[l]);return n},a=function(t,e,n){e=e.split(/\s+/),t=t instanceof Array?t:[t];for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=0;if(isNaN(t))return n;if(t=parseFloat(t),Math.floor(t)!==t){var r=e.toString().split(".")[1];i=r?r.length:0}return i?parseFloat(t.toFixed(i)):t},f=function(t){return"draggable"in document.createElement("i")&&(t?t.get("Config").nativeDnD:1)},p=function(t){return(0,i.isElement)(t)?t:t&&t.getEl?t.getEl():void 0},g=function(t,e){var n=t;return(0,i.isElement)(t)&&(n=e(t).data("model")),n};e.on=a,e.off=l,e.hasDnd=f,e.upFirst=u,e.matches=o,e.getModel=g,e.camelCase=h,e.getElement=p,e.shallowDiff=s,e.normalizeFloat=d,e.getUnitFromValue=c},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(1),s=n(52);t.exports=r.default.View.extend({className:function(){return this.getClasses()},tagName:function(){return this.model.get("tagName")},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.model,n=t.config||{};this.opts=t,this.config=n,this.em=n.em||"",this.pfx=n.stylePrefix||"",this.ppfx=n.pStylePrefix||"",this.attr=e.get("attributes"),this.classe=this.attr.class||[];var i=this.$el,r=e.get("classes");this.listenTo(e,"change:style",this.updateStyle),this.listenTo(e,"change:attributes",this.updateAttributes),this.listenTo(e,"change:highlightable",this.updateHighlight),this.listenTo(e,"change:status",this.updateStatus),this.listenTo(e,"change:state",this.updateState),this.listenTo(e,"change:script",this.render),this.listenTo(e,"change:content",this.updateContent),this.listenTo(e,"change",this.handleChange),this.listenTo(r,"add remove change",this.updateClasses),i.data("model",e),i.data("collection",e.get("components")),e.view=this,r.length&&this.importClasses(),this.init()},init:function(){},handleChange:function(){var t=this.model;t.emitUpdate();for(var e in t.changed)t.emitUpdate(e)},importClasses:function(){var t=this.config.em.get("SelectorManager");t&&this.model.get("classes").each(function(e){t.add(e.get("name"))})},updateState:function(t){var e="hc-state";this.model.get("state")?this.$el.addClass(e):this.$el.removeClass(e)},updateStatus:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=(this.em,this.el),n=this.model.get("status"),i=this.pfx,r=this.ppfx,o=i+"selected",s=o+"-parent",a=r+"freezed",l=r+"hovered",c=[o,s,a,l];this.$el.removeClass(c.join(" "));var u=e.getAttribute("class")||"",h="";switch(n){case"selected":h=u+" "+o;break;case"selected-parent":h=u+" "+s;break;case"freezed":h=u+" "+a;break;case"freezed-selected":h=u+" "+a+" "+o;break;case"hovered":h=t.avoidHover?"":u+" "+l}(h=h.trim())&&e.setAttribute("class",h)},updateHighlight:function(){var t=this.model.get("highlightable");this.setAttribute("data-highlightable",t?1:"")},updateStyle:function(){var t=this.em,e=this.model;if(t&&t.get("avoidInlineStyle")){this.el.id=e.getId();var n=e.getStyle();!(0,o.isEmpty)(n)&&e.setStyle(n)}else this.setAttribute("style",e.styleToString())},updateClasses:function(){var t=this.model.get("classes").pluck("name").join(" ");this.setAttribute("class",t),this.updateStatus()},setAttribute:function(t,e){var n=this.$el;e?n.attr(t,e):n.removeAttr(t)},getClasses:function(){var t=this.model.get("attributes"),e=t.class||[];return e=(0,o.isArray)(e)?e:[e],e.length?e.join(" "):null},updateAttributes:function(){var t=this.model,e={"data-gjs-type":t.get("type")||"default"},n=t.get("attributes"),i=t.get("src");for(var r in n)e[r]=n[r];i&&(e.src=i),this.$el.attr(e),this.updateHighlight(),this.updateStyle()},updateContent:function(){this.getChildrenContainer().innerHTML=this.model.get("content")},prevDef:function(t){t.preventDefault()},updateScript:function(){if(this.model.get("script")){var t=this.em;if(t){t.get("Canvas").getCanvasView().updateScript(this)}}},getChildrenContainer:function(){var t=this.el;return"function"==typeof this.getChildrenSelector?t=this.el.querySelector(this.getChildrenSelector()):this.getTemplate,t},renderChildren:function(){var t=this.getChildrenContainer(),e=new s({collection:this.model.get("components"),config:this.config,componentTypes:this.opts.componentTypes});e.render(t),this.childrenView=e;for(var n=Array.prototype.slice.call(e.el.childNodes),i=0,r=n.length;i0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=n.em,s=this.parent(),a=s&&s.attributes;if(a&&a.propagate){var l={},c=a.propagate;c.forEach(function(t){return l[t]=s.get(t)}),l.propagate=c,l=i({},l,e),this.set(l)}var u=this.get("propagate");u&&this.set("propagate",(0,r.isArray)(u)?u:[u]),n&&n.config&&n.config.voidElements.indexOf(this.get("tagName"))>=0&&this.set("void",!0),n.em=o,this.opt=n,this.em=o,this.config=n.config||{},this.ccid=v.createId(this),this.set("attributes",this.get("attributes")||{}),this.listenTo(this,"change:script",this.scriptUpdated),this.listenTo(this,"change:traits",this.traitsUpdated),this.listenTo(this,"change:tagName",this.tagUpdated),this.listenTo(this,"change:attributes",this.attrUpdated),this.initClasses(),this.loadTraits(),this.initComponents(),this.initToolbar(),this.set("status",""),["classes","traits"].forEach(function(e){return t.listenTo(t.get(e),"add remove change",function(){return t.emitUpdate(e)})}),this.init()},is:function(t){return!(this.get("type")!=t)},find:function(t){var e=[];return this.view.$el.find(t).each(function(t,n,i){var r=i.eq(n),o=r.data("model");o&&e.push(o)}),e},closest:function(t){var e=this.view.$el.closest(t);return e.length&&e.data("model")},tagUpdated:function(){var t=this.collection,e=t.indexOf(this);t.remove(this),t.add(this,{at:e})},replaceWith:function(t){var e=this.collection,n=e.indexOf(this);return e.remove(this),e.add(t,{at:n})},attrUpdated:function(){var t=this,e=i({},this.previous("attributes")),n=i({},this.get("attributes")),s=(0,o.shallowDiff)(e,n);(0,r.keys)(s).forEach(function(e){return t.trigger("change:attributes:"+e)})},setAttributes:function(t){t=i({},t);var e=t.class;e&&this.setClass(e),delete t.class;var n=t.style;n&&this.setStyle(n),delete t.style,this.set("attributes",t)},addAttributes:function(t){var e=i({},this.getAttributes(),t);this.setAttributes(e)},getStyle:function(){var t=this.em;if(t&&t.getConfig("avoidInlineStyle")){var e=this.get("state"),n=t.get("CssComposer"),i=n.getIdRule(this.getId(),{state:e});if(this.rule=i,i)return i.getStyle()}return a.default.getStyle.call(this)},setStyle:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=this.em;if(s&&s.getConfig("avoidInlineStyle")){e=(0,r.isString)(e)?this.parseStyle(e):e,e=i({},e,this.get("style"));var l=this.get("state"),c=s.get("CssComposer"),u=this.getStyle();this.rule=c.setIdRule(this.getId(),e,i({},n,{state:l}));var h=(0,o.shallowDiff)(u,e);this.set("style",{},{silent:1}),(0,r.keys)(h).forEach(function(e){return t.trigger("change:style:"+e)})}else e=a.default.setStyle.apply(this,arguments);return e},getAttributes:function(){var t=this.em,e=[],n=i({},this.get("attributes")),o=t&&t.get("SelectorManager"),s=this.getId();return this.get("classes").each(function(t){return e.push(t.get("name"))}),e.length&&(n.class=e.join(" ")),!(0,r.has)(n,"id")&&o&&o.get(s,o.Selector.TYPE_ID)&&(n.id=this.getId()),n},addClass:function(t){var e=this.em.get("SelectorManager").addClass(t);return this.get("classes").add(e)},setClass:function(t){return this.get("classes").reset(),this.addClass(t)},removeClass:function(t){var e=[];t=(0,r.isArray)(t)?t:[t];var n=this.get("classes"),i=u.TYPE_CLASS;return t.forEach(function(t){t.split(" ").forEach(function(t){var r=n.where({name:t,type:i})[0];r&&e.push(n.remove(r))})}),e},initClasses:function(){var t=this.normalizeClasses(this.get("classes")||[]);return this.set("classes",new h(t)),this},initComponents:function(){var t=new c(null,this.opt);return t.parent=this,!this.opt.avoidChildren&&t.reset(this.get("components")),this.set("components",t),this},init:function(){},append:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.components().add(t,e);return(0,r.isArray)(n)?n:[n]},components:function(t){var e=this.get("components");if((0,r.isUndefined)(t))return e;e.reset(),t&&this.append(t)},parent:function(){var t=this.collection;return t&&t.parent},scriptUpdated:function(){this.set("scriptUpdated",1)},traitsUpdated:function(){var t=0,e=i({},this.get("attributes")),n=this.get("traits");if(!(n instanceof d))return void this.loadTraits();n.each(function(n){if(t=1,!n.get("changeProp")){var i=n.get("name"),r=n.getInitValue();i&&r&&(e[i]=r)}}),t&&this.set("attributes",e)},initToolbar:function(){var t=this;if(!t.get("toolbar")){var e=[];t.collection&&e.push({attributes:{class:"fa fa-arrow-up"},command:"select-parent"}),t.get("draggable")&&e.push({attributes:{class:"fa fa-arrows",draggable:!0},command:"tlb-move"}),t.get("copyable")&&e.push({attributes:{class:"fa fa-clone"},command:"tlb-clone"}),t.get("removable")&&e.push({attributes:{class:"fa fa-trash-o"},command:"tlb-delete"}),t.set("toolbar",e)}},loadTraits:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=new d([],this.opt);return n.setTarget(this),t=t||this.get("traits"),t.length&&n.add(t),this.set("traits",n,e),this},normalizeClasses:function(t){var e=[],n=this.em;if(n){var i=n.get("SelectorManager");if(i)return t.forEach(function(t){var n="";n="string"==typeof t?t:t.name;var r=i.add(n);e.push(r)}),e}},clone:function(){var t=this.em,e=this.getStyle(),n=i({},this.attributes),o=i({},this.opt);return n.attributes=i({},n.attributes),delete n.attributes.id,n.components=[],n.classes=[],n.traits=[],this.get("components").each(function(t,e){n.components[e]=t.clone()}),this.get("traits").each(function(t,e){n.traits[e]=t.clone()}),this.get("classes").each(function(t,e){n.classes[e]=t.get("name")}),n.status="",n.view="",o.collection=null,t&&t.getConfig("avoidInlineStyle")&&!(0,r.isEmpty)(e)&&(n.style=e),new this.constructor(n,o)},getName:function(){var t=this.get("name")||this.get("custom-name"),e=this.get("tagName");e="div"==e?"box":e;var n=this.get("type")||e;return n=n.charAt(0).toUpperCase()+n.slice(1),t||n},getIcon:function(){var t=this.get("icon");return t?t+" ":""},toHTML:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this,n=[],i=e.get("tagName"),o=e.get("void"),s=t.attributes,a=this.getAttrToHTML();s&&((0,r.isFunction)(s)?a=s(e,a)||{}:(0,r.isObject)(s)&&(a=s));for(var l in a){var c=a[l],u=(0,r.isString)(c)?c.replace(/"/g,"""):c;(0,r.isUndefined)(u)||((0,r.isBoolean)(u)?u&&n.push(l):n.push(l+'="'+u+'"'))}var h=n.length?" "+n.join(" "):"",d="<"+i+h+(o?"/":"")+">"+e.get("content");return e.get("components").each(function(e){return d+=e.toHTML(t)}),!o&&(d+=""),d},getAttrToHTML:function(){var t=this.getAttributes();return delete t.style,t},toJSON:function(){for(var t=arguments.length,e=Array(t),n=0;n0&&void 0!==arguments[0]&&arguments[0],this.em),e=this.getId();if(e){var n=v.createId(this);this.setId(n);var i=t&&t.get("CssComposer").getIdRule(e),r=i&&i.get("selectors").at(0);return r&&r.set("name",n),this}}},{isComponent:function(t){return{tagName:t.tagName?t.tagName.toLowerCase():""}},createId:function(t){p++;var e=p.toString().length+2,n=(Math.random()+1.1).toString(36).slice(-e),i="i"+n;return f[i]=t,i},getList:function(){return f}});t.exports=v},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(1),s=n(2);t.exports=r.default.View.extend({template:function(t){return'\n
    \n '+this.templateLabel(t)+'\n
    \n
    \n '+this.templateInput(t)+"\n
    \n "},templateLabel:function(t){var e=this.pfx;return'\n \n '+t.get("name")+'\n \n \n '},templateInput:function(t){return'\n
    \n \n
    \n '},events:function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}({change:"inputValueChanged"},"click [data-clear-style]","clear"),initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,o.bindAll)(this,"targetUpdated"),this.config=t.config||{};var e=this.config.em;this.em=e,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=t.target||{},this.propTarget=t.propTarget||{},this.onChange=t.onChange,this.onInputRender=t.onInputRender||{},this.customValue=t.customValue||{};var n=this.model;this.property=n.get("property"),this.input=null;var i=this.pfx;this.inputHolderId="#"+i+"input-holder",this.sector=n.collection&&n.collection.sector,n.view=this,n.get("value")||n.set("value",n.getDefaultValue()),e&&e.on("update:component:style:"+this.property,this.targetUpdated),this.listenTo(this.propTarget,"update",this.targetUpdated),this.listenTo(n,"destroy remove",this.remove),this.listenTo(n,"change:value",this.modelValueChanged),this.listenTo(n,"targetUpdated",this.targetUpdated),this.listenTo(n,"change:visible",this.updateVisibility),this.listenTo(n,"change:status",this.updateStatus);var r=this.init&&this.init.bind(this);r&&r()},updateStatus:function(){var t=this.model.get("status"),e=this.pfx,n=this.ppfx,i=this.config,r=n+"four-color",o=n+"color-warn",s=this.$el.children("."+e+"label"),a=this.getClearEl().style;switch(s.removeClass(r+" "+o),a.display="none",t){case"updated":s.addClass(r),i.clearProperties&&(a.display="inline");break;case"computed":s.addClass(o)}},clear:function(t){t&&t.stopPropagation(),this.model.clearValue(),this.targetUpdated()},getClearEl:function(){return this.clearEl||(this.clearEl=this.el.querySelector("[data-clear-style]")),this.clearEl},getTarget:function(){return this.getTargetModel()},getTargetModel:function(){return this.propTarget&&this.propTarget.model},getHelperModel:function(){return this.propTarget&&this.propTarget.helper},inputValueChanged:function(t){t&&t.stopPropagation(),this.model.setValue(this.getInputValue(),1,{fromInput:1}),this.elementUpdated()},elementUpdated:function(){this.setStatus("updated")},setStatus:function(t){this.model.set("status",t);var e=this.model.parent;e&&e.set("status",t)},targetUpdated:function(){if(this.checkVisibility()){var t=this.config,e=t.em,n=this.model,i="",r="",o=this.getTargetValue({ignoreDefault:1}),s=n.getDefaultValue(),a=this.getComputedValue();o?(i=o,t.highlightChanged&&(r="updated")):a&&t.showComputed&&a!=s?(i=a,t.highlightComputed&&(r="computed")):(i=s,r=""),n.setValue(i,0,{fromTarget:1}),this.setStatus(r),e&&(e.trigger("styleManager:change",this),e.trigger("styleManager:change:"+n.get("property"),this))}},checkVisibility:function(){var t=1;return this.config.hideNotStylable&&(this.isTargetStylable()&&this.isComponentStylable()?this.show():(this.hide(),t=0),this.sector&&this.sector.trigger("updateVisibility")),t},getTargetValue:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.model,i=this.getTargetModel(),r=this.customValue;if(!i)return t;if(t=i.getStyle()[n.get("property")],t||e.ignoreDefault||(t=n.getDefaultValue()),"function"==typeof r&&!e.ignoreCustomValue){var o=n.collection.indexOf(n),s=r(this,o);s&&(t=s)}return t},getComputedValue:function(){var t=this.propTarget,e=t.computed||{},n=t.computedDefault||{},i=this.config.avoidComputed||[],r=this.model.get("property"),o=i.indexOf(r)<0,a=e[r],l=n[(0,s.camelCase)(r)];return e&&o&&l!==a&&a},getInputValue:function(){var t=this.getInputEl();return t?t.value:""},modelValueChanged:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.config.em,r=this.model,o=r.getFullValue(),s=this.getTarget(),a=this.onChange;n.fromInput||this.setValue(o),s&&this.isTargetStylable()&&this.isComponentStylable()&&(n.fromTarget||(a&&!n.fromParent?a(s,this,n):this.updateTargetStyle(o,null,n)),i&&(i.trigger("component:update",s),i.trigger("component:styleUpdate",s),i.trigger("component:styleUpdate:"+r.get("property"),s)))},updateTargetStyle:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=e||this.model.get("property"),r=this.getTarget(),o=r.getStyle();t?o[i]=t:delete o[i],r.setStyle(o,n);var s=this.getHelperModel();s&&s.setStyle(o,n)},isTargetStylable:function(t){var e=t||this.getTarget(),n=this.model,i=n.get("property"),r=n.get("toRequire"),s=e.get("unstylable"),a=e.get("stylable-require"),l=e.get("stylable");return(0,o.isArray)(l)&&(l=l.indexOf(i)>=0),(0,o.isArray)(s)&&(l=s.indexOf(i)<0),r&&(l=a&&a.indexOf(i)>=0||!t),l},isComponentStylable:function(){var t=this.em,e=t&&t.getSelected();return!e||this.isTargetStylable(e)},setRawValue:function(t){this.setValue(this.model.parseValue(t))},setValue:function(t){var e=this.model,n=(0,o.isUndefined)(t)?e.getDefaultValue():t,i=this.getInputEl();i&&(i.value=n)},getInputEl:function(){return this.input||(this.input=this.el.querySelector("input")),this.input},updateVisibility:function(){this.el.style.display=this.model.get("visible")?"block":"none"},show:function(){this.model.set("visible",1)},hide:function(){this.model.set("visible",0)},cleanValue:function(){this.setValue("")},render:function(){var t=this.pfx,e=this.model,n=this.el;n.innerHTML=this.template(e),n.className=t+"property "+t+e.get("type"),this.updateStatus();var i=this.onRender&&this.onRender.bind(this);i&&i(),this.setValue(e.get("value"),{targetUpdate:1})}})},function(t,e,n){!function(e,n){t.exports=n()}(0,function(){"use strict";function t(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}function e(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function n(t,n){return e(t).appendChild(n)}function i(t,e,n,i){var r=document.createElement(t);if(n&&(r.className=n),i&&(r.style.cssText=i),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var o=0;o=e)return s+(e-o);s+=a-o,s+=n-s%n,o=a+1}}function d(t,e){for(var n=0;n=e)return i+Math.min(s,e-r);if(r+=o-i,r+=n-r%n,i=o+1,r>=e)return i}}function p(t){for(;Gs.length<=t;)Gs.push(g(Gs)+" ");return Gs[t]}function g(t){return t[t.length-1]}function v(t,e){for(var n=[],i=0;i"€"&&(t.toUpperCase()!=t.toLowerCase()||Ys.test(t))}function w(t,e){return e?!!(e.source.indexOf("\\w")>-1&&x(t))||e.test(t):x(t)}function C(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}function k(t){return t.charCodeAt(0)>=768&&Xs.test(t)}function S(t,e,n){for(;(n<0?e>0:en?-1:1;;){if(e==n)return e;var r=(e+n)/2,o=i<0?Math.ceil(r):Math.floor(r);if(o==e)return t(o)?e:n;t(o)?n=o:e=o+i}}function E(t,e,n){var o=this;this.input=n,o.scrollbarFiller=i("div",null,"CodeMirror-scrollbar-filler"),o.scrollbarFiller.setAttribute("cm-not-content","true"),o.gutterFiller=i("div",null,"CodeMirror-gutter-filler"),o.gutterFiller.setAttribute("cm-not-content","true"),o.lineDiv=r("div",null,"CodeMirror-code"),o.selectionDiv=i("div",null,null,"position: relative; z-index: 1"),o.cursorDiv=i("div",null,"CodeMirror-cursors"),o.measure=i("div",null,"CodeMirror-measure"),o.lineMeasure=i("div",null,"CodeMirror-measure"),o.lineSpace=r("div",[o.measure,o.lineMeasure,o.selectionDiv,o.cursorDiv,o.lineDiv],null,"position: relative; outline: none");var s=r("div",[o.lineSpace],"CodeMirror-lines");o.mover=i("div",[s],null,"position: relative"),o.sizer=i("div",[o.mover],"CodeMirror-sizer"),o.sizerWidth=null,o.heightForcer=i("div",null,null,"position: absolute; height: "+Bs+"px; width: 1px;"),o.gutters=i("div",null,"CodeMirror-gutters"),o.lineGutter=null,o.scroller=i("div",[o.sizer,o.heightForcer,o.gutters],"CodeMirror-scroll"),o.scroller.setAttribute("tabIndex","-1"),o.wrapper=i("div",[o.scrollbarFiller,o.gutterFiller,o.scroller],"CodeMirror"),bs&&xs<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),ws||gs&&Ps||(o.scroller.draggable=!0),t&&(t.appendChild?t.appendChild(o.wrapper):t(o.wrapper)),o.viewFrom=o.viewTo=e.first,o.reportedViewFrom=o.reportedViewTo=e.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,n.init(o)}function M(t,e){if((e-=t.first)<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");for(var n=t;!n.lines;)for(var i=0;;++i){var r=n.children[i],o=r.chunkSize();if(e=t.first&&en?I(n,M(t,n).text.length):B(e,M(t,e.line).text.length)}function B(t,e){var n=t.ch;return null==n||n>e?I(t.line,e):n<0?I(t.line,0):t}function W(t,e){for(var n=[],i=0;i=e:o.to>e);(i||(i=[])).push(new K(s,o.from,l?null:o.to))}}return i}function Z(t,e,n){var i;if(t)for(var r=0;r=e:o.to>e);if(a||o.from==e&&"bookmark"==s.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(s.inclusiveLeft?o.from<=e:o.from0&&a)for(var w=0;w0)){var u=[l,1],h=F(c.from,a.from),f=F(c.to,a.to);(h<0||!s.inclusiveLeft&&!h)&&u.push({from:c.from,to:a.from}),(f>0||!s.inclusiveRight&&!f)&&u.push({from:a.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function nt(t){var e=t.markedSpans;if(e){for(var n=0;ne)&&(!n||st(n,o.marker)<0)&&(n=o.marker)}return n}function ht(t,e,n,i,r){var o=M(t,e),s=Zs&&o.markedSpans;if(s)for(var a=0;a=0&&h<=0||u<=0&&h>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?F(c.to,n)>=0:F(c.to,n)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?F(c.from,i)<=0:F(c.from,i)<0)))return!0}}}function dt(t){for(var e;e=lt(t);)t=e.find(-1,!0).line;return t}function ft(t){for(var e;e=ct(t);)t=e.find(1,!0).line;return t}function pt(t){for(var e,n;e=ct(t);)t=e.find(1,!0).line,(n||(n=[])).push(t);return n}function gt(t,e){var n=M(t,e),i=dt(n);return n==i?e:L(i)}function vt(t,e){if(e>t.lastLine())return e;var n,i=M(t,e);if(!mt(t,i))return e;for(;n=ct(i);)i=n.find(1,!0).line;return L(i)+1}function mt(t,e){var n=Zs&&e.markedSpans;if(n)for(var i=void 0,r=0;re.maxLineLength&&(e.maxLineLength=n,e.maxLine=t)})}function Ct(t,e,n,i){if(!t)return i(e,n,"ltr",0);for(var r=!1,o=0;oe||e==n&&s.to==e)&&(i(Math.max(s.from,e),Math.min(s.to,n),1==s.level?"rtl":"ltr",o),r=!0)}r||i(e,n,"ltr")}function kt(t,e,n){var i;Qs=null;for(var r=0;re)return r;o.to==e&&(o.from!=o.to&&"before"==n?i=r:Qs=r),o.from==e&&(o.from!=o.to&&"before"!=n?i=r:Qs=r)}return null!=i?i:Qs}function St(t,e){var n=t.order;return null==n&&(n=t.order=ta(t.text,e)),n}function Tt(t,e){return t._handlers&&t._handlers[e]||ea}function Et(t,e,n){if(t.removeEventListener)t.removeEventListener(e,n,!1);else if(t.detachEvent)t.detachEvent("on"+e,n);else{var i=t._handlers,r=i&&i[e];if(r){var o=d(r,n);o>-1&&(i[e]=r.slice(0,o).concat(r.slice(o+1)))}}}function Mt(t,e){var n=Tt(t,e);if(n.length)for(var i=Array.prototype.slice.call(arguments,2),r=0;r0}function Lt(t){t.prototype.on=function(t,e){na(this,t,e)},t.prototype.off=function(t,e){Et(this,t,e)}}function _t(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function Nt(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function Dt(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function It(t){_t(t),Nt(t)}function Ft(t){return t.target||t.srcElement}function Rt(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),Ls&&t.ctrlKey&&1==e&&(e=3),e}function zt(t){if(null==js){var e=i("span","​");n(t,i("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(js=e.offsetWidth<=1&&e.offsetHeight>2&&!(bs&&xs<8))}var r=js?i("span","​"):i("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function Ht(t){if(null!=$s)return $s;var i=n(t,document.createTextNode("AخA")),r=Is(i,0,1).getBoundingClientRect(),o=Is(i,1,2).getBoundingClientRect();return e(t),!(!r||r.left==r.right)&&($s=o.right-r.right<3)}function Vt(t){if(null!=aa)return aa;var e=n(t,i("span","x")),r=e.getBoundingClientRect(),o=Is(e,0,1).getBoundingClientRect();return aa=Math.abs(r.left-o.left)>1}function jt(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),la[t]=e}function $t(t,e){ca[t]=e}function Bt(t){if("string"==typeof t&&ca.hasOwnProperty(t))t=ca[t];else if(t&&"string"==typeof t.name&&ca.hasOwnProperty(t.name)){var e=ca[t.name];"string"==typeof e&&(e={name:e}),t=b(e,t),t.name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Bt("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Bt("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Wt(t,e){e=Bt(e);var n=la[e.name];if(!n)return Wt(t,"text/plain");var i=n(t,e);if(ua.hasOwnProperty(e.name)){var r=ua[e.name];for(var o in r)r.hasOwnProperty(o)&&(i.hasOwnProperty(o)&&(i["_"+o]=i[o]),i[o]=r[o])}if(i.name=e.name,e.helperType&&(i.helperType=e.helperType),e.modeProps)for(var s in e.modeProps)i[s]=e.modeProps[s];return i}function Ut(t,e){u(e,ua.hasOwnProperty(t)?ua[t]:ua[t]={})}function qt(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var n={};for(var i in e){var r=e[i];r instanceof Array&&(r=r.concat([])),n[i]=r}return n}function Kt(t,e){for(var n;t.innerMode&&(n=t.innerMode(e))&&n.mode!=t;)e=n.state,t=n.mode;return n||{mode:t,state:e}}function Gt(t,e,n){return!t.startState||t.startState(e,n)}function Yt(t,e,n,i){var r=[t.state.modeGen],o={};ie(t,e.text,t.doc.mode,n,function(t,e){return r.push(t,e)},o,i);for(var s=n.state,a=0;at&&r.splice(l,1,t,r[l+1],i),l+=2,c=Math.min(t,i)}if(e)if(a.opaque)r.splice(n,l-n,t,"overlay "+e),l=n+2;else for(;nt.options.maxHighlightLength&&qt(t.doc.mode,i.state),o=Yt(t,e,i);r&&(i.state=r),e.stateAfter=i.save(!r),e.styles=o.styles,o.classes?e.styleClasses=o.classes:e.styleClasses&&(e.styleClasses=null),n===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Jt(t,e,n){var i=t.doc,r=t.display;if(!i.mode.startState)return new fa(i,!0,e);var o=re(t,e,n),s=o>i.first&&M(i,o-1).stateAfter,a=s?fa.fromSaved(i,s,o):new fa(i,Gt(i.mode),o);return i.iter(o,e,function(n){Zt(t,n.text,a);var i=a.line;n.stateAfter=i==e-1||i%5==0||i>=r.viewFrom&&ie.start)return o}throw new Error("Mode "+t.name+" failed to advance stream.")}function ee(t,e,n,i){var r,o=t.doc,s=o.mode;e=$(o,e);var a,l=M(o,e.line),c=Jt(t,e.line,n),u=new ha(l.text,t.options.tabSize,c);for(i&&(a=[]);(i||u.post.options.maxHighlightLength?(a=!1,s&&Zt(t,e,i,h.pos),h.pos=e.length,l=null):l=ne(te(n,h,i.state,d),o),d){var f=d[0].name;f&&(l="m-"+(l?f+" "+l:f))}if(!a||u!=l){for(;cs;--a){if(a<=o.first)return o.first;var l=M(o,a-1),c=l.stateAfter;if(c&&(!n||a+(c instanceof da?c.lookAhead:0)<=o.modeFrontier))return a;var u=h(l.text,null,t.options.tabSize);(null==r||i>u)&&(r=a-1,i=u)}return r}function oe(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontiern;i--){var r=M(t,i).stateAfter;if(r&&(!(r instanceof da)||i+r.lookAhead1&&!/ /.test(t))return t;for(var n=e,i="",r=0;rc&&h.from<=c));d++);if(h.to>=u)return t(n,i,r,o,s,a,l);t(n,i.slice(0,h.to-c),r,o,null,a,l),o=null,i=i.slice(h.to-c),c=h.to}}}function pe(t,e,n,i){var r=!i&&n.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!i&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",n.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function ge(t,e,n){var i=t.markedSpans,r=t.text,o=0;if(i)for(var s,a,l,c,u,h,d,f=r.length,p=0,g=1,v="",m=0;;){if(m==p){l=c=u=h=a="",d=null,m=1/0;for(var y=[],b=void 0,x=0;xp||C.collapsed&&w.to==p&&w.from==p)?(null!=w.to&&w.to!=p&&m>w.to&&(m=w.to,c=""),C.className&&(l+=" "+C.className),C.css&&(a=(a?a+";":"")+C.css),C.startStyle&&w.from==p&&(u+=" "+C.startStyle),C.endStyle&&w.to==m&&(b||(b=[])).push(C.endStyle,w.to),C.title&&!h&&(h=C.title),C.collapsed&&(!d||st(d.marker,C)<0)&&(d=w)):w.from>p&&m>w.from&&(m=w.from)}if(b)for(var k=0;k=f)break;for(var T=Math.min(f,m);;){if(v){var E=p+v.length;if(!d){var M=E>T?v.slice(0,T-p):v;e.addToken(e,M,s?s+l:l,u,p+M.length==m?c:"",h,a)}if(E>=T){v=v.slice(T-p),p=T;break}p=E,u=""}v=r.slice(o,o=n[g++]),s=le(n[g++],e.cm.options)}}else for(var A=1;A2&&o.push((l.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}function We(t,e,n){if(t.line==e)return{map:t.measure.map,cache:t.measure.cache};for(var i=0;in)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}function Ue(t,e){e=dt(e);var i=L(e),r=t.display.externalMeasured=new ve(t.doc,e,i);r.lineN=i;var o=r.built=ce(t,r);return r.text=o.pre,n(t.display.lineMeasure,o.pre),r}function qe(t,e,n,i){return Ye(t,Ge(t,e),n,i)}function Ke(t,e){if(e>=t.display.viewFrom&&e=n.lineN&&ee)&&(o=l-a,r=o-1,e>=l&&(s="right")),null!=r){if(i=t[c+2],a==l&&n==(i.insertLeft?"left":"right")&&(s=n),"left"==n&&0==r)for(;c&&t[c-2]==t[c-3]&&t[c-1].insertLeft;)i=t[2+(c-=3)],s="left";if("right"==n&&r==l-a)for(;c=0&&(n=t[r]).left==n.right;r--);return n}function Ze(t,e,n,i){var r,o=Xe(e.map,n,i),s=o.node,a=o.start,l=o.end,c=o.collapse;if(3==s.nodeType){for(var u=0;u<4;u++){for(;a&&k(e.line.text.charAt(o.coverStart+a));)--a;for(;o.coverStart+l0&&(c=i="right");var h;r=t.options.lineWrapping&&(h=s.getClientRects()).length>1?h["right"==i?h.length-1:0]:s.getBoundingClientRect()}if(bs&&xs<9&&!a&&(!r||!r.left&&!r.right)){var d=s.parentNode.getClientRects()[0];r=d?{left:d.left,right:d.left+wn(t.display),top:d.top,bottom:d.bottom}:wa}for(var f=r.top-e.rect.top,p=r.bottom-e.rect.top,g=(f+p)/2,v=e.view.measure.heights,m=0;m=i.text.length?(c=i.text.length,u="before"):c<=0&&(c=0,u="after"),!l)return s("before"==u?c-1:c,"before"==u);var h=kt(l,c,u),d=Qs,f=a(c,h,"before"==u);return null!=d&&(f.other=a(c,d,"before"!=u)),f}function hn(t,e){var n=0;e=$(t.doc,e),t.options.lineWrapping||(n=wn(t.display)*e.ch);var i=M(t.doc,e.line),r=bt(i)+Re(t.display);return{left:n,right:n,top:r,bottom:r+i.height}}function dn(t,e,n,i,r){var o=I(t,e,n);return o.xRel=r,i&&(o.outside=!0),o}function fn(t,e,n){var i=t.doc;if((n+=t.display.viewOffset)<0)return dn(i.first,0,null,!0,-1);var r=_(i,n),o=i.first+i.size-1;if(r>o)return dn(i.first+i.size-1,M(i,o).text.length,null,!0,1);e<0&&(e=0);for(var s=M(i,r);;){var a=mn(t,s,r,e,n),l=ut(s,a.ch+(a.xRel>0?1:0));if(!l)return a;var c=l.find(1);if(c.line==r)return c;s=M(i,r=c.line)}}function pn(t,e,n,i){i-=sn(e);var r=e.text.length,o=T(function(e){return Ye(t,n,e-1).bottom<=i},r,0);return r=T(function(e){return Ye(t,n,e).top>i},o,r),{begin:o,end:r}}function gn(t,e,n,i){return n||(n=Ge(t,e)),pn(t,e,n,an(t,e,Ye(t,n,i),"line").top)}function vn(t,e,n,i){return!(t.bottom<=n)&&(t.top>n||(i?t.left:t.right)>e)}function mn(t,e,n,i,r){r-=bt(e);var o=Ge(t,e),s=sn(e),a=0,l=e.text.length,c=!0,u=St(e,t.doc.direction);if(u){var h=(t.options.lineWrapping?bn:yn)(t,e,n,o,u,i,r);c=1!=h.level,a=c?h.from:h.to-1,l=c?h.to:h.from-1}var d,f,p=null,g=null,v=T(function(e){var n=Ye(t,o,e);return n.top+=s,n.bottom+=s,!!vn(n,i,r,!1)&&(n.top<=r&&n.left<=i&&(p=e,g=n),!0)},a,l),m=!1;if(g){var y=i-g.left=x.bottom}return v=S(e.text,v,1),dn(n,v,f,m,i-d)}function yn(t,e,n,i,r,o,s){var a=T(function(a){var l=r[a],c=1!=l.level;return vn(un(t,I(n,c?l.to:l.from,c?"before":"after"),"line",e,i),o,s,!0)},0,r.length-1),l=r[a];if(a>0){var c=1!=l.level,u=un(t,I(n,c?l.from:l.to,c?"after":"before"),"line",e,i);vn(u,o,s,!0)&&u.top>s&&(l=r[a-1])}return l}function bn(t,e,n,i,r,o,s){var a=pn(t,e,i,s),l=a.begin,c=a.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,h=null,d=0;d=c||f.to<=l)){var p=1!=f.level,g=Ye(t,i,p?Math.min(c,f.to)-1:Math.max(l,f.from)).right,v=gv)&&(u=f,h=v)}}return u||(u=r[r.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function xn(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==va){va=i("pre");for(var r=0;r<49;++r)va.appendChild(document.createTextNode("x")),va.appendChild(i("br"));va.appendChild(document.createTextNode("x"))}n(t.measure,va);var o=va.offsetHeight/50;return o>3&&(t.cachedTextHeight=o),e(t.measure),o||1}function wn(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=i("span","xxxxxxxxxx"),r=i("pre",[e]);n(t.measure,r);var o=e.getBoundingClientRect(),s=(o.right-o.left)/10;return s>2&&(t.cachedCharWidth=s),s||10}function Cn(t){for(var e=t.display,n={},i={},r=e.gutters.clientLeft,o=e.gutters.firstChild,s=0;o;o=o.nextSibling,++s)n[t.options.gutters[s]]=o.offsetLeft+o.clientLeft+r,i[t.options.gutters[s]]=o.clientWidth;return{fixedPos:kn(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:n,gutterWidth:i,wrapperWidth:e.wrapper.clientWidth}}function kn(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function Sn(t){var e=xn(t.display),n=t.options.lineWrapping,i=n&&Math.max(5,t.display.scroller.clientWidth/wn(t.display)-3);return function(r){if(mt(t.doc,r))return 0;var o=0;if(r.widgets)for(var s=0;s=t.display.viewTo)return null;if((e-=t.display.viewFrom)<0)return null;for(var n=t.display.view,i=0;i=t.display.viewTo||a.to().line0?e.blinker=setInterval(function(){return e.cursorDiv.style.visibility=(n=!n)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function Dn(t){t.state.focused||(t.display.input.focus(),Fn(t))}function In(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,Rn(t))},100)}function Fn(t,e){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(Mt(t,"focus",t,e),t.state.focused=!0,a(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),ws&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),Nn(t))}function Rn(t,e){t.state.delayingBlurEvent||(t.state.focused&&(Mt(t,"blur",t,e),t.state.focused=!1,zs(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function zn(t){for(var e=t.display,n=e.lineDiv.offsetTop,i=0;i.005||l<-.005)&&(P(r.line,o),Hn(r.line),r.rest))for(var c=0;c=s&&(o=_(e,bt(M(e,l))-t.wrapper.clientHeight),s=l)}return{from:o,to:Math.max(s,o+1)}}function jn(t){var e=t.display,n=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var i=kn(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,o=i+"px",s=0;s(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!Ms){var s=i("div","​",null,"position: absolute;\n top: "+(e.top-n.viewOffset-Re(t.display))+"px;\n height: "+(e.bottom-e.top+Ve(t)+n.barHeight)+"px;\n left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(s),s.scrollIntoView(o),t.display.lineSpace.removeChild(s)}}}function Wn(t,e,n,i){null==i&&(i=0);var r;t.options.lineWrapping||e!=n||(e=e.ch?I(e.line,"before"==e.sticky?e.ch-1:e.ch,"after"):e,n="before"==e.sticky?I(e.line,e.ch+1,"before"):e);for(var o=0;o<5;o++){var s=!1,a=un(t,e),l=n&&n!=e?un(t,n):a;r={left:Math.min(a.left,l.left),top:Math.min(a.top,l.top)-i,right:Math.max(a.left,l.left),bottom:Math.max(a.bottom,l.bottom)+i};var c=qn(t,r),u=t.doc.scrollTop,h=t.doc.scrollLeft;if(null!=c.scrollTop&&(Qn(t,c.scrollTop),Math.abs(t.doc.scrollTop-u)>1&&(s=!0)),null!=c.scrollLeft&&(ei(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-h)>1&&(s=!0)),!s)break}return r}function Un(t,e){var n=qn(t,e);null!=n.scrollTop&&Qn(t,n.scrollTop),null!=n.scrollLeft&&ei(t,n.scrollLeft)}function qn(t,e){var n=t.display,i=xn(t.display);e.top<0&&(e.top=0);var r=t.curOp&&null!=t.curOp.scrollTop?t.curOp.scrollTop:n.scroller.scrollTop,o=$e(t),s={};e.bottom-e.top>o&&(e.bottom=e.top+o);var a=t.doc.height+ze(n),l=e.topa-i;if(e.topr+o){var u=Math.min(e.top,(c?a:e.bottom)-o);u!=r&&(s.scrollTop=u)}var h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:n.scroller.scrollLeft,d=je(t)-(t.options.fixedGutter?n.gutters.offsetWidth:0),f=e.right-e.left>d;return f&&(e.right=e.left+d),e.left<10?s.scrollLeft=0:e.leftd+h-3&&(s.scrollLeft=e.right+(f?0:10)-d),s}function Kn(t,e){null!=e&&(Jn(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function Gn(t){Jn(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function Yn(t,e,n){null==e&&null==n||Jn(t),null!=e&&(t.curOp.scrollLeft=e),null!=n&&(t.curOp.scrollTop=n)}function Xn(t,e){Jn(t),t.curOp.scrollToPos=e}function Jn(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;Zn(t,hn(t,e.from),hn(t,e.to),e.margin)}}function Zn(t,e,n,i){var r=qn(t,{left:Math.min(e.left,n.left),top:Math.min(e.top,n.top)-i,right:Math.max(e.right,n.right),bottom:Math.max(e.bottom,n.bottom)+i});Yn(t,r.scrollLeft,r.scrollTop)}function Qn(t,e){Math.abs(t.doc.scrollTop-e)<2||(gs||Li(t,{top:e}),ti(t,e,!0),gs&&Li(t),Si(t,100))}function ti(t,e,n){e=Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e),(t.display.scroller.scrollTop!=e||n)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function ei(t,e,n,i){e=Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth),(n?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!i||(t.doc.scrollLeft=e,jn(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function ni(t){var e=t.display,n=e.gutters.offsetWidth,i=Math.round(t.doc.height+ze(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?n:0,docHeight:i,scrollHeight:i+Ve(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:n}}function ii(t,e){e||(e=ni(t));var n=t.display.barWidth,i=t.display.barHeight;ri(t,e);for(var r=0;r<4&&n!=t.display.barWidth||i!=t.display.barHeight;r++)n!=t.display.barWidth&&t.options.lineWrapping&&zn(t),ri(t,ni(t)),n=t.display.barWidth,i=t.display.barHeight}function ri(t,e){var n=t.display,i=n.scrollbars.update(e);n.sizer.style.paddingRight=(n.barWidth=i.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=i.bottom)+"px",n.heightForcer.style.borderBottom=i.bottom+"px solid transparent",i.right&&i.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=i.bottom+"px",n.scrollbarFiller.style.width=i.right+"px"):n.scrollbarFiller.style.display="",i.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=i.bottom+"px",n.gutterFiller.style.width=e.gutterWidth+"px"):n.gutterFiller.style.display=""}function oi(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&zs(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Sa[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),na(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,n){"horizontal"==n?ei(t,e):Qn(t,e)},t),t.display.scrollbars.addClass&&a(t.display.wrapper,t.display.scrollbars.addClass)}function si(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ta},ye(t.curOp)}function ai(t){xe(t.curOp,function(t){for(var e=0;e=n.viewTo)||n.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new Ea(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function ui(t){t.updatedDisplay=t.mustUpdate&&Oi(t.cm,t.update)}function hi(t){var e=t.cm,n=e.display;t.updatedDisplay&&zn(e),t.barMeasure=ni(e),n.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=qe(e,n.maxLine,n.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+t.adjustWidthTo+Ve(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+t.adjustWidthTo-je(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=n.input.prepareSelection())}function di(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLefte)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Zs&>(t.doc,e)r.viewFrom?xi(t):(r.viewFrom+=i,r.viewTo+=i);else if(e<=r.viewFrom&&n>=r.viewTo)xi(t);else if(e<=r.viewFrom){var o=wi(t,n,n+i,1);o?(r.view=r.view.slice(o.index),r.viewFrom=o.lineN,r.viewTo+=i):xi(t)}else if(n>=r.viewTo){var s=wi(t,e,e,-1);s?(r.view=r.view.slice(0,s.index),r.viewTo=s.lineN):xi(t)}else{var a=wi(t,e,e,-1),l=wi(t,n,n+i,1);a&&l?(r.view=r.view.slice(0,a.index).concat(me(t,a.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=i):xi(t)}var c=r.externalMeasured;c&&(n=r.lineN&&e=i.viewTo)){var o=i.view[Mn(t,e)];if(null!=o.node){var s=o.changes||(o.changes=[]);-1==d(s,n)&&s.push(n)}}}function xi(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function wi(t,e,n,i){var r,o=Mn(t,e),s=t.display.view;if(!Zs||n==t.doc.first+t.doc.size)return{index:o,lineN:n};for(var a=t.display.viewFrom,l=0;l0){if(o==s.length-1)return null;r=a+s[o].size-e,o++}else r=a-e;e+=r,n+=r}for(;gt(t.doc,n)!=n;){if(o==(i<0?0:s.length-1))return null;n+=i*s[o-(i<0?1:0)].size,o+=i}return{index:o,lineN:n}}function Ci(t,e,n){var i=t.display;0==i.view.length||e>=i.viewTo||n<=i.viewFrom?(i.view=me(t,e,n),i.viewFrom=e):(i.viewFrom>e?i.view=me(t,e,i.viewFrom).concat(i.view):i.viewFromn&&(i.view=i.view.slice(0,Mn(t,n)))),i.viewTo=n}function ki(t){for(var e=t.display.view,n=0,i=0;i=t.display.viewTo)){var n=+new Date+t.options.workTime,i=Jt(t,e.highlightFrontier),r=[];e.iter(i.line,Math.min(e.first+e.size,t.display.viewTo+500),function(o){if(i.line>=t.display.viewFrom){var s=o.styles,a=o.text.length>t.options.maxHighlightLength?qt(e.mode,i.state):null,l=Yt(t,o,i,!0);a&&(i.state=a),o.styles=l.styles;var c=o.styleClasses,u=l.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var h=!s||s.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),d=0;!h&&dn)return Si(t,t.options.workDelay),!0}),e.highlightFrontier=i.line,e.modeFrontier=Math.max(e.modeFrontier,i.line),r.length&&pi(t,function(){for(var e=0;e=i.viewFrom&&n.visible.to<=i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo)&&i.renderedView==i.view&&0==ki(t))return!1;$n(t)&&(xi(t),n.dims=Cn(t));var o=r.first+r.size,s=Math.max(n.visible.from-t.options.viewportMargin,r.first),a=Math.min(o,n.visible.to+t.options.viewportMargin);i.viewFroma&&i.viewTo-a<20&&(a=Math.min(o,i.viewTo)),Zs&&(s=gt(t.doc,s),a=vt(t.doc,a));var l=s!=i.viewFrom||a!=i.viewTo||i.lastWrapHeight!=n.wrapperHeight||i.lastWrapWidth!=n.wrapperWidth;Ci(t,s,a),i.viewOffset=bt(M(t.doc,i.viewFrom)),t.display.mover.style.top=i.viewOffset+"px";var c=ki(t);if(!l&&0==c&&!n.force&&i.renderedView==i.view&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo))return!1;var u=Mi(t);return c>4&&(i.lineDiv.style.display="none"),_i(t,i.updateLineNumbers,n.dims),c>4&&(i.lineDiv.style.display=""),i.renderedView=i.view,Ai(u),e(i.cursorDiv),e(i.selectionDiv),i.gutters.style.height=i.sizer.style.minHeight=0,l&&(i.lastWrapHeight=n.wrapperHeight,i.lastWrapWidth=n.wrapperWidth,Si(t,400)),i.updateLineNumbers=null,!0}function Pi(t,e){for(var n=e.viewport,i=!0;(i&&t.options.lineWrapping&&e.oldDisplayWidth!=je(t)||(n&&null!=n.top&&(n={top:Math.min(t.doc.height+ze(t.display)-$e(t),n.top)}),e.visible=Vn(t.display,t.doc,n),!(e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)))&&Oi(t,e);i=!1){zn(t);var r=ni(t);An(t),ii(t,r),Di(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function Li(t,e){var n=new Ea(t,e);if(Oi(t,n)){zn(t),Pi(t,n);var i=ni(t);An(t),ii(t,i),Di(t,i),n.finish()}}function _i(t,n,i){function r(e){var n=e.nextSibling;return ws&&Ls&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),n}for(var o=t.display,s=t.options.lineNumbers,a=o.lineDiv,l=a.firstChild,c=o.view,u=o.viewFrom,h=0;h-1&&(p=!1),ke(t,f,u,i)),p&&(e(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(D(t.options,u)))),l=f.node.nextSibling}else{var g=Le(t,f,u,i);a.insertBefore(g,l)}u+=f.size}for(;l;)l=r(l)}function Ni(t){var e=t.display.gutters.offsetWidth;t.display.sizer.style.marginLeft=e+"px"}function Di(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+Ve(t)+"px"}function Ii(t){var n=t.display.gutters,r=t.options.gutters;e(n);for(var o=0;o-1&&!t.lineNumbers&&(t.gutters=t.gutters.slice(0),t.gutters.splice(e,1))}function Ri(t){var e=t.wheelDeltaX,n=t.wheelDeltaY;return null==e&&t.detail&&t.axis==t.HORIZONTAL_AXIS&&(e=t.detail),null==n&&t.detail&&t.axis==t.VERTICAL_AXIS?n=t.detail:null==n&&(n=t.wheelDelta),{x:e,y:n}}function zi(t){var e=Ri(t);return e.x*=Aa,e.y*=Aa,e}function Hi(t,e){var n=Ri(e),i=n.x,r=n.y,o=t.display,s=o.scroller,a=s.scrollWidth>s.clientWidth,l=s.scrollHeight>s.clientHeight;if(i&&a||r&&l){if(r&&Ls&&ws)t:for(var c=e.target,u=o.view;c!=s;c=c.parentNode)for(var h=0;h=0){var s=V(o.from(),r.from()),a=H(o.to(),r.to()),l=o.empty()?r.from()==r.head:o.from()==o.head;i<=e&&--e,t.splice(--i,2,new Pa(l?a:s,l?s:a))}}return new Oa(t,e)}function ji(t,e){return new Oa([new Pa(t,e||t)],0)}function $i(t){return t.text?I(t.from.line+t.text.length-1,g(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function Bi(t,e){if(F(t,e.from)<0)return t;if(F(t,e.to)<=0)return $i(e);var n=t.line+e.text.length-(e.to.line-e.from.line)-1,i=t.ch;return t.line==e.to.line&&(i+=$i(e).ch-e.to.ch),I(n,i)}function Wi(t,e){for(var n=[],i=0;i1&&t.remove(a.line+1,p-1),t.insert(a.line+1,y)}we(t,"change",t,e)}function Ji(t,e,n){function i(t,r,o){if(t.linked)for(var s=0;s1&&!t.done[t.done.length-2].ranges?(t.done.pop(),g(t.done)):void 0}function or(t,e,n,i){var r=t.history;r.undone.length=0;var o,s,a=+new Date;if((r.lastOp==i||r.lastOrigin==e.origin&&e.origin&&("+"==e.origin.charAt(0)&&r.lastModTime>a-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(o=rr(r,r.lastOp==i)))s=g(o.changes),0==F(e.from,e.to)&&0==F(e.from,s.to)?s.to=$i(e):o.changes.push(nr(t,e));else{var l=g(r.done);for(l&&l.ranges||lr(t.sel,r.done),o={changes:[nr(t,e)],generation:r.generation},r.done.push(o);r.done.length>r.undoDepth;)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(n),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=a,r.lastOp=r.lastSelOp=i,r.lastOrigin=r.lastSelOrigin=e.origin,s||Mt(t,"historyAdded")}function sr(t,e,n,i){var r=e.charAt(0);return"*"==r||"+"==r&&n.ranges.length==i.ranges.length&&n.somethingSelected()==i.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}function ar(t,e,n,i){var r=t.history,o=i&&i.origin;n==r.lastSelOp||o&&r.lastSelOrigin==o&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==o||sr(t,o,g(r.done),e))?r.done[r.done.length-1]=e:lr(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=o,r.lastSelOp=n,i&&!1!==i.clearRedo&&ir(r.undone)}function lr(t,e){var n=g(e);n&&n.ranges&&n.equals(t)||e.push(t)}function cr(t,e,n,i){var r=e["spans_"+t.id],o=0;t.iter(Math.max(t.first,n),Math.min(t.first+t.size,i),function(n){n.markedSpans&&((r||(r=e["spans_"+t.id]={}))[o]=n.markedSpans),++o})}function ur(t){if(!t)return null;for(var e,n=0;n-1&&(g(a)[h]=c[h],delete c[h])}}}return i}function pr(t,e,n,i){if(i){var r=t.anchor;if(n){var o=F(e,r)<0;o!=F(n,r)<0?(r=e,e=n):o!=F(e,n)<0&&(e=n)}return new Pa(r,e)}return new Pa(n||e,e)}function gr(t,e,n,i,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),wr(t,new Oa([pr(t.sel.primary(),e,n,r)],0),i)}function vr(t,e,n){for(var i=[],r=t.cm&&(t.cm.display.shift||t.extend),o=0;o=e.ch:a.to>e.ch))){if(r&&(Mt(l,"beforeCursorEnter"),l.explicitlyCleared)){if(o.markedSpans){--s;continue}break}if(!l.atomic)continue;if(n){var c=l.find(i<0?1:-1),u=void 0;if((i<0?l.inclusiveRight:l.inclusiveLeft)&&(c=Ar(t,c,-i,c&&c.line==e.line?o:null)),c&&c.line==e.line&&(u=F(c,n))&&(i<0?u<0:u>0))return Er(t,c,e,i,r)}var h=l.find(i<0?-1:1);return(i<0?l.inclusiveLeft:l.inclusiveRight)&&(h=Ar(t,h,i,h.line==e.line?o:null)),h?Er(t,h,e,i,r):null}}return e}function Mr(t,e,n,i,r){var o=i||1,s=Er(t,e,n,o,r)||!r&&Er(t,e,n,o,!0)||Er(t,e,n,-o,r)||!r&&Er(t,e,n,-o,!0);return s||(t.cantEdit=!0,I(t.first,0))}function Ar(t,e,n,i){return n<0&&0==e.ch?e.line>t.first?$(t,I(e.line-1)):null:n>0&&e.ch==(i||M(t,e.line)).text.length?e.line=0;--r)_r(t,{from:i[r].from,to:i[r].to,text:r?[""]:e.text,origin:e.origin});else _r(t,e)}}function _r(t,e){if(1!=e.text.length||""!=e.text[0]||0!=F(e.from,e.to)){var n=Wi(t,e);or(t,e,n,t.cm?t.cm.curOp.id:NaN),Ir(t,e,n,Q(t,e));var i=[];Ji(t,function(t,n){n||-1!=d(i,t.history)||(Vr(t.history,e),i.push(t.history)),Ir(t,e,null,Q(t,e))})}}function Nr(t,e,n){var i=t.cm&&t.cm.state.suppressEdits;if(!i||n){for(var r,o=t.history,s=t.sel,a="undo"==e?o.done:o.undone,l="undo"==e?o.undone:o.done,c=0;c=0;--f){var p=function(n){var i=r.changes[n];if(i.origin=e,h&&!Pr(t,i,!1))return a.length=0,{};u.push(nr(t,i));var o=n?Wi(t,i):g(a);Ir(t,i,o,dr(t,i)),!n&&t.cm&&t.cm.scrollIntoView({from:i.from,to:$i(i)});var s=[];Ji(t,function(t,e){e||-1!=d(s,t.history)||(Vr(t.history,i),s.push(t.history)),Ir(t,i,null,dr(t,i))})}(f);if(p)return p.v}}}}function Dr(t,e){if(0!=e&&(t.first+=e,t.sel=new Oa(v(t.sel.ranges,function(t){return new Pa(I(t.anchor.line+e,t.anchor.ch),I(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){yi(t.cm,t.first,t.first-e,e);for(var n=t.cm.display,i=n.viewFrom;it.lastLine())){if(e.from.lineo&&(e={from:e.from,to:I(o,M(t,o).text.length),text:[e.text[0]],origin:e.origin}),e.removed=A(t,e.from,e.to),n||(n=Wi(t,e)),t.cm?Fr(t.cm,e,i):Xi(t,e,i),Cr(t,n,Us)}}function Fr(t,e,n){var i=t.doc,r=t.display,o=e.from,s=e.to,a=!1,l=o.line;t.options.lineWrapping||(l=L(dt(M(i,o.line))),i.iter(l,s.line+1,function(t){if(t==r.maxLine)return a=!0,!0})),i.sel.contains(e.from,e.to)>-1&&Ot(t),Xi(i,e,n,Sn(t)),t.options.lineWrapping||(i.iter(l,o.line+e.text.length,function(t){var e=xt(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,a=!1)}),a&&(t.curOp.updateMaxLine=!0)),oe(i,o.line),Si(t,400);var c=e.text.length-(s.line-o.line)-1;e.full?yi(t):o.line!=s.line||1!=e.text.length||Yi(t.doc,e)?yi(t,o.line,s.line+1,c):bi(t,o.line,"text");var u=Pt(t,"changes"),h=Pt(t,"change");if(h||u){var d={from:o,to:s,text:e.text,removed:e.removed,origin:e.origin};h&&we(t,"change",t,d),u&&(t.curOp.changeObjs||(t.curOp.changeObjs=[])).push(d)}t.display.selForContextMenu=null}function Rr(t,e,n,i,r){if(i||(i=n),F(i,n)<0){var o;o=[i,n],n=o[0],i=o[1]}"string"==typeof e&&(e=t.splitLines(e)),Lr(t,{from:n,to:i,text:e,origin:r})}function zr(t,e,n,i){n0||0==a&&!1!==s.clearWhenEmpty)return s;if(s.replacedWith&&(s.collapsed=!0,s.widgetNode=r("span",[s.replacedWith],"CodeMirror-widget"),i.handleMouseEvents||s.widgetNode.setAttribute("cm-ignore-events","true"),i.insertLeft&&(s.widgetNode.insertLeft=!0)),s.collapsed){if(ht(t,e.line,e,n,s)||e.line!=n.line&&ht(t,n.line,e,n,s))throw new Error("Inserting collapsed marker partially overlapping an existing one");q()}s.addToHistory&&or(t,{from:e,to:n,origin:"markText"},t.sel,NaN);var l,c=e.line,h=t.cm;if(t.iter(c,n.line+1,function(t){h&&s.collapsed&&!h.options.lineWrapping&&dt(t)==h.display.maxLine&&(l=!0),s.collapsed&&c!=e.line&&P(t,0),X(t,new K(s,c==e.line?e.ch:null,c==n.line?n.ch:null)),++c}),s.collapsed&&t.iter(e.line,n.line+1,function(e){mt(t,e)&&P(e,0)}),s.clearOnEnter&&na(s,"beforeCursorEnter",function(){return s.clear()}),s.readOnly&&(U(),(t.history.done.length||t.history.undone.length)&&t.clearHistory()),s.collapsed&&(s.id=++_a,s.atomic=!0),h){if(l&&(h.curOp.updateMaxLine=!0),s.collapsed)yi(h,e.line,n.line+1);else if(s.className||s.title||s.startStyle||s.endStyle||s.css)for(var d=e.line;d<=n.line;d++)bi(h,d,"text");s.atomic&&Sr(h.doc),we(h,"markerAdded",h,s)}return s}function Kr(t,e,n,i,r){i=u(i),i.shared=!1;var o=[qr(t,e,n,i,r)],s=o[0],a=i.widgetNode;return Ji(t,function(t){a&&(i.widgetNode=a.cloneNode(!0)),o.push(qr(t,$(t,e),$(t,n),i,r));for(var l=0;l-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var l=t.dataTransfer.getData("Text");if(l){var c;if(e.state.draggingText&&!e.state.draggingText.copy&&(c=e.listSelections()),Cr(e.doc,ji(n,n)),c)for(var u=0;u=0;e--)Rr(t.doc,"",i[e].from,i[e].to,"+delete");Gn(t)})}function po(t,e,n){var i=S(t.text,e+n,n);return i<0||i>t.text.length?null:i}function go(t,e,n){var i=po(t,e.ch,n);return null==i?null:new I(e.line,i,n<0?"after":"before")}function vo(t,e,n,i,r){if(t){var o=St(n,e.doc.direction);if(o){var s,a=r<0?g(o):o[0],l=r<0==(1==a.level),c=l?"after":"before";if(a.level>0||"rtl"==e.doc.direction){var u=Ge(e,n);s=r<0?n.text.length-1:0;var h=Ye(e,u,s).top;s=T(function(t){return Ye(e,u,t).top==h},r<0==(1==a.level)?a.from:a.to-1,s),"before"==c&&(s=po(n,s,1))}else s=r<0?a.to:a.from;return new I(i,s,c)}}return new I(i,r<0?n.text.length:0,r<0?"before":"after")}function mo(t,e,n,i){var r=St(e,t.doc.direction);if(!r)return go(e,n,i);n.ch>=e.text.length?(n.ch=e.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=kt(r,n.ch,n.sticky),s=r[o];if("ltr"==t.doc.direction&&s.level%2==0&&(i>0?s.to>n.ch:s.from=s.from&&d>=u.begin)){var f=h?"before":"after";return new I(n.line,d,f)}}var p=function(t,e,i){for(var o=function(t,e){return e?new I(n.line,l(t,1),"before"):new I(n.line,t,"after")};t>=0&&t0==(1!=s.level),c=a?i.begin:l(i.end,-1);if(s.from<=c&&c0?u.end:l(u.begin,-1);return null==v||i>0&&v==e.text.length||!(g=p(i>0?0:r.length-1,i,c(v)))?null:g}function yo(t,e){var n=M(t.doc,e),i=dt(n);return i!=n&&(e=L(i)),vo(!0,t,i,e,1)}function bo(t,e){var n=M(t.doc,e),i=ft(n);return i!=n&&(e=L(i)),vo(!0,t,n,e,-1)}function xo(t,e){var n=yo(t,e.line),i=M(t.doc,n.line),r=St(i,t.doc.direction);if(!r||0==r[0].level){var o=Math.max(0,i.text.search(/\S/)),s=e.line==n.line&&e.ch<=o&&e.ch;return I(n.line,s?0:o,n.sticky)}return n}function wo(t,e,n){if("string"==typeof e&&!(e=Wa[e]))return!1;t.display.input.ensurePolled();var i=t.display.shift,r=!1;try{t.isReadOnly()&&(t.state.suppressEdits=!0),n&&(t.display.shift=!1),r=e(t)!=Ws}finally{t.display.shift=i,t.state.suppressEdits=!1}return r}function Co(t,e,n){for(var i=0;i-1&&(F((r=a.ranges[r]).from(),e)<0||e.xRel>0)&&(F(r.to(),e)>0||e.xRel<0)?Fo(t,i,e,o):zo(t,i,e,o)}function Fo(t,e,n,i){var r=t.display,o=!1,s=gi(t,function(e){ws&&(r.scroller.draggable=!1),t.state.draggingText=!1,Et(r.wrapper.ownerDocument,"mouseup",s),Et(r.wrapper.ownerDocument,"mousemove",a),Et(r.scroller,"dragstart",l),Et(r.scroller,"drop",s),o||(_t(e),i.addNew||gr(t.doc,n,null,null,i.extend),ws||bs&&9==xs?setTimeout(function(){r.wrapper.ownerDocument.body.focus(),r.input.focus()},20):r.input.focus())}),a=function(t){o=o||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},l=function(){return o=!0};ws&&(r.scroller.draggable=!0),t.state.draggingText=s,s.copy=!i.moveOnDrag,r.scroller.dragDrop&&r.scroller.dragDrop(),na(r.wrapper.ownerDocument,"mouseup",s),na(r.wrapper.ownerDocument,"mousemove",a),na(r.scroller,"dragstart",l),na(r.scroller,"drop",s),In(t),setTimeout(function(){return r.input.focus()},20)}function Ro(t,e,n){if("char"==n)return new Pa(e,e);if("word"==n)return t.findWordAt(e);if("line"==n)return new Pa(I(e.line,0),$(t.doc,I(e.line+1,0)));var i=n(t,e);return new Pa(i.from,i.to)}function zo(t,e,n,i){function r(e){if(0!=F(m,e))if(m=e,"rectangle"==i.unit){for(var r=[],o=t.options.tabSize,s=h(M(c,n.line).text,n.ch,o),a=h(M(c,e.line).text,e.ch,o),l=Math.min(s,a),g=Math.max(s,a),v=Math.min(n.line,e.line),y=Math.min(t.lastLine(),Math.max(n.line,e.line));v<=y;v++){var b=M(c,v).text,x=f(b,l,o);l==g?r.push(new Pa(I(v,x),I(v,x))):b.length>x&&r.push(new Pa(I(v,x),I(v,f(b,g,o))))}r.length||r.push(new Pa(n,n)),wr(c,Vi(p.ranges.slice(0,d).concat(r),d),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var w,C=u,k=Ro(t,e,i.unit),S=C.anchor;F(k.anchor,S)>0?(w=k.head,S=V(C.from(),k.anchor)):(w=k.anchor,S=H(C.to(),k.head));var T=p.ranges.slice(0);T[d]=Ho(t,new Pa($(c,S),w)),wr(c,Vi(T,d),qs)}}function o(e){var n=++b,a=En(t,e,!0,"rectangle"==i.unit);if(a)if(0!=F(a,m)){t.curOp.focus=s(),r(a);var u=Vn(l,c);(a.line>=u.to||a.liney.bottom?20:0;h&&setTimeout(gi(t,function(){b==n&&(l.scroller.scrollTop+=h,o(e))}),50)}}function a(e){t.state.selectingText=!1,b=1/0,_t(e),l.input.focus(),Et(l.wrapper.ownerDocument,"mousemove",x),Et(l.wrapper.ownerDocument,"mouseup",w),c.history.lastSelOrigin=null}var l=t.display,c=t.doc;_t(e);var u,d,p=c.sel,g=p.ranges;if(i.addNew&&!i.extend?(d=c.sel.contains(n),u=d>-1?g[d]:new Pa(n,n)):(u=c.sel.primary(),d=c.sel.primIndex),"rectangle"==i.unit)i.addNew||(u=new Pa(n,n)),n=En(t,e,!0,!0),d=-1;else{var v=Ro(t,n,i.unit);u=i.extend?pr(u,v.anchor,v.head,i.extend):v}i.addNew?-1==d?(d=g.length,wr(c,Vi(g.concat([u]),d),{scroll:!1,origin:"*mouse"})):g.length>1&&g[d].empty()&&"char"==i.unit&&!i.extend?(wr(c,Vi(g.slice(0,d).concat(g.slice(d+1)),0),{scroll:!1,origin:"*mouse"}),p=c.sel):mr(c,d,u,qs):(d=0,wr(c,new Oa([u],0),qs),p=c.sel);var m=n,y=l.wrapper.getBoundingClientRect(),b=0,x=gi(t,function(t){0!==t.buttons&&Rt(t)?o(t):a(t)}),w=gi(t,a);t.state.selectingText=w,na(l.wrapper.ownerDocument,"mousemove",x),na(l.wrapper.ownerDocument,"mouseup",w)}function Ho(t,e){var n=e.anchor,i=e.head,r=M(t.doc,n.line);if(0==F(n,i)&&n.sticky==i.sticky)return e;var o=St(r);if(!o)return e;var s=kt(o,n.ch,n.sticky),a=o[s];if(a.from!=n.ch&&a.to!=n.ch)return e;var l=s+(a.from==n.ch==(1!=a.level)?0:1);if(0==l||l==o.length)return e;var c;if(i.line!=n.line)c=(i.line-n.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=kt(o,i.ch,i.sticky),h=u-s||(i.ch-n.ch)*(1==a.level?-1:1);c=u==l-1||u==l?h<0:h>0}var d=o[l+(c?-1:0)],f=c==(1==d.level),p=f?d.from:d.to,g=f?"after":"before";return n.ch==p&&n.sticky==g?e:new Pa(new I(n.line,p,g),i)}function Vo(t,e,n,i){var r,o;if(e.touches)r=e.touches[0].clientX,o=e.touches[0].clientY;else try{r=e.clientX,o=e.clientY}catch(e){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;i&&_t(e);var s=t.display,a=s.lineDiv.getBoundingClientRect();if(o>a.bottom||!Pt(t,n))return Dt(e);o-=a.top-s.viewOffset;for(var l=0;l=r){return Mt(t,n,t,_(t.doc,o),t.options.gutters[l],e),Dt(e)}}}function jo(t,e){return Vo(t,e,"gutterClick",!0)}function $o(t,e){Fe(t.display,e)||Bo(t,e)||At(t,e,"contextmenu")||t.display.input.onContextMenu(e)}function Bo(t,e){return!!Pt(t,"gutterContextMenu")&&Vo(t,e,"gutterContextMenu",!1)}function Wo(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),nn(t)}function Uo(t){Ii(t),yi(t),jn(t)}function qo(t,e,n){if(!e!=!(n&&n!=Xa)){var i=t.display.dragFunctions,r=e?na:Et;r(t.display.scroller,"dragstart",i.start),r(t.display.scroller,"dragenter",i.enter),r(t.display.scroller,"dragover",i.over),r(t.display.scroller,"dragleave",i.leave),r(t.display.scroller,"drop",i.drop)}}function Ko(t){t.options.lineWrapping?(a(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(zs(t.display.wrapper,"CodeMirror-wrap"),wt(t)),Tn(t),yi(t),nn(t),setTimeout(function(){return ii(t)},100)}function Go(t,e){var n=this;if(!(this instanceof Go))return new Go(t,e);this.options=e=e?u(e):{},u(Ja,e,!1),Fi(e);var i=e.value;"string"==typeof i&&(i=new Fa(i,e.mode,null,e.lineSeparator,e.direction)),this.doc=i;var r=new Go.inputStyles[e.inputStyle](this),o=this.display=new E(t,i,r);o.wrapper.CodeMirror=this,Ii(this),Wo(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),oi(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new Vs,keySeq:null,specialChars:null},e.autofocus&&!Ps&&o.input.focus(),bs&&xs<11&&setTimeout(function(){return n.display.input.reset(!0)},20),Yo(this),no(),si(this),this.curOp.forceUpdate=!0,Zi(this,i),e.autofocus&&!Ps||this.hasFocus()?setTimeout(c(Fn,this),20):Rn(this);for(var s in Za)Za.hasOwnProperty(s)&&Za[s](n,e[s],Xa);$n(this),e.finishInit&&e.finishInit(this);for(var a=0;a400}var r=t.display;na(r.scroller,"mousedown",gi(t,_o)),bs&&xs<11?na(r.scroller,"dblclick",gi(t,function(e){if(!At(t,e)){var n=En(t,e);if(n&&!jo(t,e)&&!Fe(t.display,e)){_t(e);var i=t.findWordAt(n);gr(t.doc,i.anchor,i.head)}}})):na(r.scroller,"dblclick",function(e){return At(t,e)||_t(e)}),Rs||na(r.scroller,"contextmenu",function(e){return $o(t,e)});var o,s={end:0};na(r.scroller,"touchstart",function(e){if(!At(t,e)&&!n(e)&&!jo(t,e)){r.input.ensurePolled(),clearTimeout(o);var i=+new Date;r.activeTouch={start:i,moved:!1,prev:i-s.end<=300?s:null},1==e.touches.length&&(r.activeTouch.left=e.touches[0].pageX,r.activeTouch.top=e.touches[0].pageY)}}),na(r.scroller,"touchmove",function(){r.activeTouch&&(r.activeTouch.moved=!0)}),na(r.scroller,"touchend",function(n){var o=r.activeTouch;if(o&&!Fe(r,n)&&null!=o.left&&!o.moved&&new Date-o.start<300){var s,a=t.coordsChar(r.activeTouch,"page");s=!o.prev||i(o,o.prev)?new Pa(a,a):!o.prev.prev||i(o,o.prev.prev)?t.findWordAt(a):new Pa(I(a.line,0),$(t.doc,I(a.line+1,0))),t.setSelection(s.anchor,s.head),t.focus(),_t(n)}e()}),na(r.scroller,"touchcancel",e),na(r.scroller,"scroll",function(){r.scroller.clientHeight&&(Qn(t,r.scroller.scrollTop),ei(t,r.scroller.scrollLeft,!0),Mt(t,"scroll",t))}),na(r.scroller,"mousewheel",function(e){return Hi(t,e)}),na(r.scroller,"DOMMouseScroll",function(e){return Hi(t,e)}),na(r.wrapper,"scroll",function(){return r.wrapper.scrollTop=r.wrapper.scrollLeft=0}),r.dragFunctions={enter:function(e){At(t,e)||It(e)},over:function(e){At(t,e)||(Qr(t,e),It(e))},start:function(e){return Zr(t,e)},drop:gi(t,Jr),leave:function(e){At(t,e)||to(t)}};var a=r.input.getField();na(a,"keyup",function(e){return Oo.call(t,e)}),na(a,"keydown",gi(t,Mo)),na(a,"keypress",gi(t,Po)),na(a,"focus",function(e){return Fn(t,e)}),na(a,"blur",function(e){return Rn(t,e)})}function Xo(t,e,n,i){var r,o=t.doc;null==n&&(n="add"),"smart"==n&&(o.mode.indent?r=Jt(t,e).state:n="prev");var s=t.options.tabSize,a=M(o,e),l=h(a.text,null,s);a.stateAfter&&(a.stateAfter=null);var c,u=a.text.match(/^\s*/)[0];if(i||/\S/.test(a.text)){if("smart"==n&&((c=o.mode.indent(r,a.text.slice(u.length),a.text))==Ws||c>150)){if(!i)return;n="prev"}}else c=0,n="not";"prev"==n?c=e>o.first?h(M(o,e-1).text,null,s):0:"add"==n?c=l+t.options.indentUnit:"subtract"==n?c=l-t.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var d="",f=0;if(t.options.indentWithTabs)for(var g=Math.floor(c/s);g;--g)f+=s,d+="\t";if(f1)if(tl&&tl.text.join("\n")==e){if(i.ranges.length%tl.text.length==0){l=[];for(var c=0;c=0;h--){var d=i.ranges[h],f=d.from(),p=d.to();d.empty()&&(n&&n>0?f=I(f.line,f.ch-n):t.state.overwrite&&!s?p=I(p.line,Math.min(M(o,p.line).text.length,p.ch+g(a).length)):tl&&tl.lineWise&&tl.text.join("\n")==e&&(f=p=I(f.line,0))),u=t.curOp.updateInput;var m={from:f,to:p,text:l?l[h%l.length]:a,origin:r||(s?"paste":t.state.cutIncoming?"cut":"+input")};Lr(t.doc,m),we(t,"inputRead",t,m)}e&&!s&&ts(t,e),Gn(t),t.curOp.updateInput=u,t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=!1}function Qo(t,e){var n=t.clipboardData&&t.clipboardData.getData("Text");if(n)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||pi(e,function(){return Zo(e,n,0,null,"paste")}),!0}function ts(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var n=t.doc.sel,i=n.ranges.length-1;i>=0;i--){var r=n.ranges[i];if(!(r.head.ch>100||i&&n.ranges[i-1].head.line==r.head.line)){var o=t.getModeAt(r.head),s=!1;if(o.electricChars){for(var a=0;a-1){s=Xo(t,r.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(M(t.doc,r.head.line).text.slice(0,r.head.ch))&&(s=Xo(t,r.head.line,"smart"));s&&we(t,"electricInput",t,r.head.line)}}}function es(t){for(var e=[],n=[],i=0;i=t.first+t.size)&&(e=new I(i,e.ch,e.sticky),c=M(t,i))}function s(i){var s;if(null==(s=r?mo(t.cm,c,e,n):go(c,e,n))){if(i||!o())return!1;e=vo(r,t.cm,c,e.line,n)}else e=s;return!0}var a=e,l=n,c=M(t,e.line);if("char"==i)s();else if("column"==i)s(!0);else if("word"==i||"group"==i)for(var u=null,h="group"==i,d=t.cm&&t.cm.getHelper(e,"wordChars"),f=!0;!(n<0)||s(!f);f=!1){var p=c.text.charAt(e.ch)||"\n",g=w(p,d)?"w":h&&"\n"==p?"n":!h||/\s/.test(p)?null:"p";if(!h||f||g||(g="s"),u&&u!=g){n<0&&(n=1,s(),e.sticky="after");break}if(g&&(u=g),n>0&&!s(!f))break}var v=Mr(t,e,a,l,!0);return R(a,v)&&(v.hitSide=!0),v}function os(t,e,n,i){var r,o=t.doc,s=e.left;if("page"==i){var a=Math.min(t.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),l=Math.max(a-.5*xn(t.display),3);r=(n>0?e.bottom:e.top)+n*l}else"line"==i&&(r=n>0?e.bottom+3:e.top-3);for(var c;c=fn(t,s,r),c.outside;){if(n<0?r<=0:r>=o.height){c.hitSide=!0;break}r+=5*n}return c}function ss(t,e){var n=Ke(t,e.line);if(!n||n.hidden)return null;var i=M(t.doc,e.line),r=We(n,i,e.line),o=St(i,t.doc.direction),s="left";if(o){s=kt(o,e.ch)%2?"right":"left"}var a=Xe(r.map,e.ch,s);return a.offset="right"==a.collapse?a.end:a.start,a}function as(t){for(var e=t;e;e=e.parentNode)if(/CodeMirror-gutter-wrapper/.test(e.className))return!0;return!1}function ls(t,e){return e&&(t.bad=!0),t}function cs(t,e,n,i,r){function o(t){return function(e){return e.id==t}}function s(){u&&(c+=h,d&&(c+=h),u=d=!1)}function a(t){t&&(s(),c+=t)}function l(e){if(1==e.nodeType){var n=e.getAttribute("cm-text");if(n)return void a(n);var c,f=e.getAttribute("cm-marker");if(f){var p=t.findMarks(I(i,0),I(r+1,0),o(+f));return void(p.length&&(c=p[0].find(0))&&a(A(t.doc,c.from,c.to).join(h)))}if("false"==e.getAttribute("contenteditable"))return;var g=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;g&&s();for(var v=0;v=15&&(Ss=!1,ws=!0);var Is,Fs=Ls&&(Cs||Ss&&(null==Ds||Ds<12.11)),Rs=gs||bs&&xs>=9,zs=function(e,n){var i=e.className,r=t(n).exec(i);if(r){var o=i.slice(r.index+r[0].length);e.className=i.slice(0,r.index)+(o?r[1]+o:"")}};Is=document.createRange?function(t,e,n,i){var r=document.createRange();return r.setEnd(i||t,n),r.setStart(t,e),r}:function(t,e,n){var i=document.body.createTextRange();try{i.moveToElementText(t.parentNode)}catch(t){return i}return i.collapse(!0),i.moveEnd("character",n),i.moveStart("character",e),i};var Hs=function(t){t.select()};As?Hs=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:bs&&(Hs=function(t){try{t.select()}catch(t){}});var Vs=function(){this.id=null};Vs.prototype.set=function(t,e){clearTimeout(this.id),this.id=setTimeout(e,t)};var js,$s,Bs=30,Ws={toString:function(){return"CodeMirror.Pass"}},Us={scroll:!1},qs={origin:"*mouse"},Ks={origin:"+move"},Gs=[""],Ys=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Xs=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,Js=!1,Zs=!1,Qs=null,ta=function(){function t(t){return t<=247?n.charAt(t):1424<=t&&t<=1524?"R":1536<=t&&t<=1785?i.charAt(t-1536):1774<=t&&t<=2220?"r":8192<=t&&t<=8203?"w":8204==t?"b":"L"}function e(t,e,n){this.level=t,this.from=e,this.to=n}var n="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",i="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111",r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,o=/[stwN]/,s=/[LRr]/,a=/[Lb1n]/,l=/[1n]/;return function(n,i){var c="ltr"==i?"L":"R";if(0==n.length||"ltr"==i&&!r.test(n))return!1;for(var u=n.length,h=[],d=0;d=this.string.length},ha.prototype.sol=function(){return this.pos==this.lineStart},ha.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},ha.prototype.next=function(){if(this.pose},ha.prototype.eatSpace=function(){for(var t=this,e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++t.pos;return this.pos>e},ha.prototype.skipToEnd=function(){this.pos=this.string.length},ha.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},ha.prototype.backUp=function(t){this.pos-=t},ha.prototype.column=function(){return this.lastColumnPos0?null:(i&&!1!==e&&(this.pos+=i[0].length),i)}var r=function(t){return n?t.toLowerCase():t};if(r(this.string.substr(this.pos,t.length))==r(t))return!1!==e&&(this.pos+=t.length),!0},ha.prototype.current=function(){return this.string.slice(this.start,this.pos)},ha.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},ha.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},ha.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var da=function(t,e){this.state=t,this.lookAhead=e},fa=function(t,e,n,i){this.state=e,this.doc=t,this.line=n,this.maxLookAhead=i||0,this.baseTokens=null,this.baseTokenPos=1};fa.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},fa.prototype.baseToken=function(t){var e=this;if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=t;)e.baseTokenPos+=2;var n=this.baseTokens[this.baseTokenPos+1];return{type:n&&n.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},fa.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},fa.fromSaved=function(t,e,n){return e instanceof da?new fa(t,qt(t.mode,e.state),n,e.lookAhead):new fa(t,qt(t.mode,e),n)},fa.prototype.save=function(t){var e=!1!==t?qt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new da(e,this.maxLookAhead):e};var pa=function(t,e,n){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=n},ga=function(t,e,n){this.text=t,it(this,e),this.height=n?n(this):1};ga.prototype.lineNo=function(){return L(this)},Lt(ga);var va,ma={},ya={},ba=null,xa=null,wa={left:0,right:0,top:0,bottom:0},Ca=function(t,e,n){this.cm=n;var r=this.vert=i("div",[i("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),o=this.horiz=i("div",[i("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=o.tabIndex=-1,t(r),t(o),na(r,"scroll",function(){r.clientHeight&&e(r.scrollTop,"vertical")}),na(o,"scroll",function(){o.clientWidth&&e(o.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,bs&&xs<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Ca.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,n=t.scrollHeight>t.clientHeight+1,i=t.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=e?i+"px":"0";var r=t.viewHeight-(e?i:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=n?i+"px":"0",this.horiz.style.left=t.barLeft+"px";var o=t.viewWidth-t.barLeft-(n?i:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?i:0,bottom:e?i:0}},Ca.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Ca.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Ca.prototype.zeroWidthHack=function(){var t=Ls&&!Es?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new Vs,this.disableVert=new Vs},Ca.prototype.enableZeroWidthBar=function(t,e,n){function i(){var r=t.getBoundingClientRect();("vert"==n?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1))!=t?t.style.pointerEvents="none":e.set(1e3,i)}t.style.pointerEvents="auto",e.set(1e3,i)},Ca.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var ka=function(){};ka.prototype.update=function(){return{bottom:0,right:0}},ka.prototype.setScrollLeft=function(){},ka.prototype.setScrollTop=function(){},ka.prototype.clear=function(){};var Sa={native:Ca,null:ka},Ta=0,Ea=function(t,e,n){var i=t.display;this.viewport=e,this.visible=Vn(i,t.doc,e),this.editorIsHidden=!i.wrapper.offsetWidth,this.wrapperHeight=i.wrapper.clientHeight,this.wrapperWidth=i.wrapper.clientWidth,this.oldDisplayWidth=je(t),this.force=n,this.dims=Cn(t),this.events=[]};Ea.prototype.signal=function(t,e){Pt(t,e)&&this.events.push(arguments)},Ea.prototype.finish=function(){for(var t=this,e=0;e=0&&F(t,r.to())<=0)return i}return-1};var Pa=function(t,e){this.anchor=t,this.head=e};Pa.prototype.from=function(){return V(this.anchor,this.head)},Pa.prototype.to=function(){return H(this.anchor,this.head)},Pa.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},$r.prototype={chunkSize:function(){return this.lines.length},removeInner:function(t,e){for(var n=this,i=t,r=t+e;i1||!(this.children[0]instanceof $r))){var l=[];this.collapse(l),this.children=[new $r(l)],this.children[0].parent=this}},collapse:function(t){for(var e=this,n=0;n50){for(var a=o.lines.length%25+25,l=a;l10);t.parent.maybeSpill()}},iterN:function(t,e,n){for(var i=this,r=0;re.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=h,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&yi(e,r,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Sr(e.doc)),e&&we(e,"markerCleared",e,this,r,o),n&&ai(e),this.parent&&this.parent.clear()}},Na.prototype.find=function(t,e){var n=this;null==t&&"bookmark"==this.type&&(t=1);for(var i,r,o=0;o=0;c--)Lr(i,r[c]);l?xr(this,l):this.cm&&Gn(this.cm)}),undo:mi(function(){Nr(this,"undo")}),redo:mi(function(){Nr(this,"redo")}),undoSelection:mi(function(){Nr(this,"undo",!0)}),redoSelection:mi(function(){Nr(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,n=0,i=0;i=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,n){t=$(this,t),e=$(this,e);var i=[],r=t.line;return this.iter(t.line,e.line+1,function(o){var s=o.markedSpans;if(s)for(var a=0;a=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||n&&!n(l.marker)||i.push(l.marker.parent||l.marker)}++r}),i},getAllMarks:function(){var t=[];return this.iter(function(e){var n=e.markedSpans;if(n)for(var i=0;it)return e=t,!0;t-=o,++n}),$(this,I(n,e))},indexFromPos:function(t){t=$(this,t);var e=t.ch;if(t.linee&&(e=t.from),null!=t.to&&t.to0)r=new I(r.line,r.ch+1),t.replaceRange(o.charAt(r.ch-1)+o.charAt(r.ch-2),I(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var s=M(t.doc,r.line-1).text;s&&(r=new I(r.line,1),t.replaceRange(o.charAt(0)+t.doc.lineSeparator()+s.charAt(s.length-1),I(r.line-1,s.length-1),r,"+transpose"))}n.push(new Pa(r,r))}t.setSelections(n)})},newlineAndIndent:function(t){return pi(t,function(){for(var e=t.listSelections(),n=e.length-1;n>=0;n--)t.replaceRange(t.doc.lineSeparator(),e[n].anchor,e[n].head,"+input");e=t.listSelections();for(var i=0;it&&0==F(e,this.pos)&&n==this.button};var Ga,Ya,Xa={toString:function(){return"CodeMirror.Init"}},Ja={},Za={};Go.defaults=Ja,Go.optionHandlers=Za;var Qa=[];Go.defineInitHook=function(t){return Qa.push(t)};var tl=null,el=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new Vs,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};el.prototype.init=function(t){function e(t){if(!At(r,t)){if(r.somethingSelected())Jo({lineWise:!1,text:r.getSelections()}),"cut"==t.type&&r.replaceSelection("",null,"cut");else{if(!r.options.lineWiseCopyCut)return;var e=es(r);Jo({lineWise:!0,text:e.text}),"cut"==t.type&&r.operation(function(){r.setSelections(e.ranges,0,Us),r.replaceSelection("",null,"cut")})}if(t.clipboardData){t.clipboardData.clearData();var n=tl.text.join("\n");if(t.clipboardData.setData("Text",n),t.clipboardData.getData("Text")==n)return void t.preventDefault()}var s=is(),a=s.firstChild;r.display.lineSpace.insertBefore(s,r.display.lineSpace.firstChild),a.value=tl.text.join("\n");var l=document.activeElement;Hs(a),setTimeout(function(){r.display.lineSpace.removeChild(s),l.focus(),l==o&&i.showPrimarySelection()},50)}}var n=this,i=this,r=i.cm,o=i.div=t.lineDiv;ns(o,r.options.spellcheck),na(o,"paste",function(t){At(r,t)||Qo(t,r)||xs<=11&&setTimeout(gi(r,function(){return n.updateFromDOM()}),20)}),na(o,"compositionstart",function(t){n.composing={data:t.data,done:!1}}),na(o,"compositionupdate",function(t){n.composing||(n.composing={data:t.data,done:!1})}),na(o,"compositionend",function(t){n.composing&&(t.data!=n.composing.data&&n.readFromDOMSoon(),n.composing.done=!0)}),na(o,"touchstart",function(){return i.forceCompositionEnd()}),na(o,"input",function(){n.composing||n.readFromDOMSoon()}),na(o,"copy",e),na(o,"cut",e)},el.prototype.prepareSelection=function(){var t=On(this.cm,!1);return t.focus=this.cm.state.focused,t},el.prototype.showSelection=function(t,e){t&&this.cm.display.view.length&&((t.focus||e)&&this.showPrimarySelection(),this.showMultipleSelections(t))},el.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},el.prototype.showPrimarySelection=function(){var t=this.getSelection(),e=this.cm,n=e.doc.sel.primary(),i=n.from(),r=n.to();if(e.display.viewTo==e.display.viewFrom||i.line>=e.display.viewTo||r.line=e.display.viewFrom&&ss(e,i)||{node:a[0].measure.map[2],offset:0},c=r.linet.firstLine()&&(i=I(i.line-1,M(t.doc,i.line-1).length)),r.ch==M(t.doc,r.line).text.length&&r.linee.viewTo-1)return!1;var o,s,a;i.line==e.viewFrom||0==(o=Mn(t,i.line))?(s=L(e.view[0].line),a=e.view[0].node):(s=L(e.view[o].line),a=e.view[o-1].node.nextSibling);var l,c,u=Mn(t,r.line);if(u==e.view.length-1?(l=e.viewTo-1,c=e.lineDiv.lastChild):(l=L(e.view[u+1].line)-1,c=e.view[u+1].node.previousSibling),!a)return!1;for(var h=t.doc.splitLines(cs(t,a,c,s,l)),d=A(t.doc,I(s,0),I(l,M(t.doc,l).text.length));h.length>1&&d.length>1;)if(g(h)==g(d))h.pop(),d.pop(),l--;else{if(h[0]!=d[0])break;h.shift(),d.shift(),s++}for(var f=0,p=0,v=h[0],m=d[0],y=Math.min(v.length,m.length);fi.ch&&b.charCodeAt(b.length-p-1)==x.charCodeAt(x.length-p-1);)f--,p++;h[h.length-1]=b.slice(0,b.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(f).replace(/\u200b+$/,"");var C=I(s,f),k=I(l,d.length?g(d).length-p:0);return h.length>1||h[0]||F(C,k)?(Rr(t.doc,h,C,k,"+input"),!0):void 0},el.prototype.ensurePolled=function(){this.forceCompositionEnd()},el.prototype.reset=function(){this.forceCompositionEnd()},el.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},el.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},el.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||pi(this.cm,function(){return yi(t.cm)})},el.prototype.setUneditable=function(t){t.contentEditable="false"},el.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||gi(this.cm,Zo)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},el.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},el.prototype.onContextMenu=function(){},el.prototype.resetPosition=function(){},el.prototype.needsContentAttribute=!0;var nl=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new Vs,this.hasSelection=!1,this.composing=null};nl.prototype.init=function(t){function e(t){if(!At(r,t)){if(r.somethingSelected())Jo({lineWise:!1,text:r.getSelections()});else{if(!r.options.lineWiseCopyCut)return;var e=es(r);Jo({lineWise:!0,text:e.text}),"cut"==t.type?r.setSelections(e.ranges,null,Us):(i.prevInput="",o.value=e.text.join("\n"),Hs(o))}"cut"==t.type&&(r.state.cutIncoming=!0)}}var n=this,i=this,r=this.cm;this.createField(t);var o=this.textarea;t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),As&&(o.style.width="0px"),na(o,"input",function(){bs&&xs>=9&&n.hasSelection&&(n.hasSelection=null),i.poll()}),na(o,"paste",function(t){At(r,t)||Qo(t,r)||(r.state.pasteIncoming=!0,i.fastPoll())}),na(o,"cut",e),na(o,"copy",e),na(t.scroller,"paste",function(e){Fe(t,e)||At(r,e)||(r.state.pasteIncoming=!0,i.focus())}),na(t.lineSpace,"selectstart",function(e){Fe(t,e)||_t(e)}),na(o,"compositionstart",function(){var t=r.getCursor("from");i.composing&&i.composing.range.clear(),i.composing={start:t,range:r.markText(t,r.getCursor("to"),{className:"CodeMirror-composing"})}}),na(o,"compositionend",function(){i.composing&&(i.poll(),i.composing.range.clear(),i.composing=null)})},nl.prototype.createField=function(t){this.wrapper=is(),this.textarea=this.wrapper.firstChild},nl.prototype.prepareSelection=function(){var t=this.cm,e=t.display,n=t.doc,i=On(t);if(t.options.moveInputWithCursor){var r=un(t,n.sel.primary().head,"div"),o=e.wrapper.getBoundingClientRect(),s=e.lineDiv.getBoundingClientRect();i.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+s.top-o.top)),i.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+s.left-o.left))}return i},nl.prototype.showSelection=function(t){var e=this.cm,i=e.display;n(i.cursorDiv,t.cursors),n(i.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},nl.prototype.reset=function(t){if(!this.contextMenuPending&&!this.composing){var e=this.cm;if(e.somethingSelected()){this.prevInput="";var n=e.getSelection();this.textarea.value=n,e.state.focused&&Hs(this.textarea),bs&&xs>=9&&(this.hasSelection=n)}else t||(this.prevInput=this.textarea.value="",bs&&xs>=9&&(this.hasSelection=null))}},nl.prototype.getField=function(){return this.textarea},nl.prototype.supportsTouch=function(){return!1},nl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!Ps||s()!=this.textarea))try{this.textarea.focus()}catch(t){}},nl.prototype.blur=function(){this.textarea.blur()},nl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},nl.prototype.receivedFocus=function(){this.slowPoll()},nl.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},nl.prototype.fastPoll=function(){function t(){n.poll()||e?(n.pollingFast=!1,n.slowPoll()):(e=!0,n.polling.set(60,t))}var e=!1,n=this;n.pollingFast=!0,n.polling.set(20,t)},nl.prototype.poll=function(){var t=this,e=this.cm,n=this.textarea,i=this.prevInput;if(this.contextMenuPending||!e.state.focused||oa(n)&&!i&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=n.value;if(r==i&&!e.somethingSelected())return!1;if(bs&&xs>=9&&this.hasSelection===r||Ls&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var o=r.charCodeAt(0);if(8203!=o||i||(i="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var s=0,a=Math.min(i.length,r.length);s1e3||r.indexOf("\n")>-1?n.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},nl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},nl.prototype.onKeyPress=function(){bs&&xs>=9&&(this.hasSelection=null),this.fastPoll()},nl.prototype.onContextMenu=function(t){function e(){if(null!=s.selectionStart){var t=r.somethingSelected(),e="​"+(t?s.value:"");s.value="⇚",s.value=e,i.prevInput=t?"":"​",s.selectionStart=1,s.selectionEnd=e.length,o.selForContextMenu=r.doc.sel}}function n(){if(i.contextMenuPending=!1,i.wrapper.style.cssText=u,s.style.cssText=c,bs&&xs<9&&o.scrollbars.setScrollTop(o.scroller.scrollTop=l),null!=s.selectionStart){(!bs||bs&&xs<9)&&e();var t=0,n=function(){o.selForContextMenu==r.doc.sel&&0==s.selectionStart&&s.selectionEnd>0&&"​"==i.prevInput?gi(r,Or)(r):t++<10?o.detectingSelectAll=setTimeout(n,500):(o.selForContextMenu=null,o.input.reset())};o.detectingSelectAll=setTimeout(n,200)}}var i=this,r=i.cm,o=r.display,s=i.textarea,a=En(r,t),l=o.scroller.scrollTop;if(a&&!Ss){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(a)&&gi(r,wr)(r.doc,ji(a),Us);var c=s.style.cssText,u=i.wrapper.style.cssText;i.wrapper.style.cssText="position: absolute";var h=i.wrapper.getBoundingClientRect();s.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(t.clientY-h.top-5)+"px; left: "+(t.clientX-h.left-5)+"px;\n z-index: 1000; background: "+(bs?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var d;if(ws&&(d=window.scrollY),o.input.focus(),ws&&window.scrollTo(null,d),o.input.reset(),r.somethingSelected()||(s.value=i.prevInput=" "),i.contextMenuPending=!0,o.selForContextMenu=r.doc.sel,clearTimeout(o.detectingSelectAll),bs&&xs>=9&&e(),Rs){It(t);var f=function(){Et(window,"mouseup",f),setTimeout(n,20)};na(window,"mouseup",f)}else setTimeout(n,50)}},nl.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t},nl.prototype.setUneditable=function(){},nl.prototype.needsContentAttribute=!1,function(t){function e(e,i,r,o){t.defaults[e]=i,r&&(n[e]=o?function(t,e,n){n!=Xa&&r(t,e,n)}:r)}var n=t.optionHandlers;t.defineOption=e,t.Init=Xa,e("value","",function(t,e){return t.setValue(e)},!0),e("mode",null,function(t,e){t.doc.modeOption=e,Ki(t)},!0),e("indentUnit",2,Ki,!0),e("indentWithTabs",!1),e("smartIndent",!0),e("tabSize",4,function(t){Gi(t),nn(t),yi(t)},!0),e("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var n=[],i=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var o=t.text.indexOf(e,r);if(-1==o)break;r=o+e.length,n.push(I(i,o))}i++});for(var r=n.length-1;r>=0;r--)Rr(t.doc,e,n[r],I(n[r].line,n[r].ch+e.length))}}),e("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(t,e,n){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),n!=Xa&&t.refresh()}),e("specialCharPlaceholder",ue,function(t){return t.refresh()},!0),e("electricChars",!0),e("inputStyle",Ps?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),e("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),e("rtlMoveVisually",!Ns),e("wholeLineUpdateBefore",!0),e("theme","default",function(t){Wo(t),Uo(t)},!0),e("keyMap","default",function(t,e,n){var i=ho(e),r=n!=Xa&&ho(n);r&&r.detach&&r.detach(t,i),i.attach&&i.attach(t,r||null)}),e("extraKeys",null),e("configureMouse",null),e("lineWrapping",!1,Ko,!0),e("gutters",[],function(t){Fi(t.options),Uo(t)},!0),e("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?kn(t.display)+"px":"0",t.refresh()},!0),e("coverGutterNextToScrollbar",!1,function(t){return ii(t)},!0),e("scrollbarStyle","native",function(t){oi(t),ii(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),e("lineNumbers",!1,function(t){Fi(t.options),Uo(t)},!0),e("firstLineNumber",1,Uo,!0),e("lineNumberFormatter",function(t){return t},Uo,!0),e("showCursorWhenSelecting",!1,An,!0),e("resetSelectionOnContextMenu",!0),e("lineWiseCopyCut",!0),e("pasteLinesPerSelection",!0),e("readOnly",!1,function(t,e){"nocursor"==e&&(Rn(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),e("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),e("dragDrop",!0,qo),e("allowDropFileTypes",null),e("cursorBlinkRate",530),e("cursorScrollMargin",0),e("cursorHeight",1,An,!0),e("singleCursorHeightPerLine",!0,An,!0),e("workTime",100),e("workDelay",100),e("flattenSpans",!0,Gi,!0),e("addModeClass",!1,Gi,!0),e("pollInterval",100),e("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),e("historyEventDelay",1250),e("viewportMargin",10,function(t){return t.refresh()},!0),e("maxHighlightLength",1e4,Gi,!0),e("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),e("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),e("autofocus",null),e("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0)}(Go),function(t){var e=t.optionHandlers,n=t.helpers={};t.prototype={constructor:t,focus:function(){window.focus(),this.display.input.focus()},setOption:function(t,n){var i=this.options,r=i[t];i[t]==n&&"mode"!=t||(i[t]=n,e.hasOwnProperty(t)&&gi(this,e[t])(this,n,r),Mt(this,"optionChange",this,t))},getOption:function(t){return this.options[t]},getDoc:function(){return this.doc},addKeyMap:function(t,e){this.state.keyMaps[e?"push":"unshift"](ho(t))},removeKeyMap:function(t){for(var e=this.state.keyMaps,n=0;ni&&(Xo(e,o.head.line,t,!0),i=o.head.line,r==e.doc.sel.primIndex&&Gn(e));else{var s=o.from(),a=o.to(),l=Math.max(i,s.line);i=Math.min(e.lastLine(),a.line-(a.ch?0:1))+1;for(var c=l;c0&&mr(e.doc,r,new Pa(s,u[r].to()),Us)}}}),getTokenAt:function(t,e){return ee(this,t,e)},getLineTokens:function(t,e){return ee(this,I(t),e,!0)},getTokenTypeAt:function(t){t=$(this.doc,t);var e,n=Xt(this,M(this.doc,t.line)),i=0,r=(n.length-1)/2,o=t.ch;if(0==o)e=n[2];else for(;;){var s=i+r>>1;if((s?n[2*s-1]:0)>=o)r=s;else{if(!(n[2*s+1]o&&(t=o,r=!0),i=M(this.doc,t)}else i=t;return an(this,i,{top:0,left:0},e||"page",n||r).top+(r?this.doc.height-bt(i):0)},defaultTextHeight:function(){return xn(this.display)},defaultCharWidth:function(){return wn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,n,i,r){var o=this.display;t=un(this,$(this.doc,t));var s=t.bottom,a=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),o.sizer.appendChild(e),"over"==i)s=t.top;else if("above"==i||"near"==i){var l=Math.max(o.wrapper.clientHeight,this.doc.height),c=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==i||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?s=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(s=t.bottom),a+e.offsetWidth>c&&(a=c-e.offsetWidth)}e.style.top=s+"px",e.style.left=e.style.right="","right"==r?(a=o.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?a=0:"middle"==r&&(a=(o.sizer.clientWidth-e.offsetWidth)/2),e.style.left=a+"px"),n&&Un(this,{left:a,top:s,right:a+e.offsetWidth,bottom:s+e.offsetHeight})},triggerOnKeyDown:vi(Mo),triggerOnKeyPress:vi(Po),triggerOnKeyUp:Oo,triggerOnMouseDown:vi(_o),execCommand:function(t){if(Wa.hasOwnProperty(t))return Wa[t].call(null,this)},triggerElectric:vi(function(t){ts(this,t)}),findPosH:function(t,e,n,i){var r=this,o=1;e<0&&(o=-1,e=-e);for(var s=$(this.doc,t),a=0;a0&&a(n.charAt(i-1));)--i;for(;r.5)&&Tn(this),Mt(this,"refresh",this)}),swapDoc:vi(function(t){var e=this.doc;return e.cm=null,Zi(this,t),nn(this),this.display.input.reset(),Yn(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,we(this,"swapDoc",this,e),e}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Lt(t),t.registerHelper=function(e,i,r){n.hasOwnProperty(e)||(n[e]=t[e]={_global:[]}),n[e][i]=r},t.registerGlobalHelper=function(e,i,r,o){t.registerHelper(e,i,o),n[e]._global.push({pred:r,val:o})}}(Go);var il="iter insert remove copy getEditor constructor".split(" ");for(var rl in Fa.prototype)Fa.prototype.hasOwnProperty(rl)&&d(il,rl)<0&&(Go.prototype[rl]=function(t){return function(){return t.apply(this.doc,arguments)}}(Fa.prototype[rl]));return Lt(Fa),Go.inputStyles={textarea:nl,contenteditable:el},Go.defineMode=function(t){Go.defaults.mode||"null"==t||(Go.defaults.mode=t),jt.apply(this,arguments)},Go.defineMIME=$t,Go.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),Go.defineMIME("text/plain","null"),Go.defineExtension=function(t,e){Go.prototype[t]=e},Go.defineDocExtension=function(t,e){Fa.prototype[t]=e},Go.fromTextArea=ds,function(t){t.off=Et,t.on=na,t.wheelEventPixels=zi,t.Doc=Fa,t.splitLines=ra,t.countColumn=h,t.findColumn=f,t.isWordChar=x,t.Pass=Ws,t.signal=Mt,t.Line=ga,t.changeEnd=$i,t.scrollbarModel=Sa,t.Pos=I,t.cmpPos=F,t.modes=la,t.mimeModes=ca,t.resolveMode=Bt,t.getMode=Wt,t.modeExtensions=ua,t.extendMode=Ut,t.copyState=qt,t.startState=Gt,t.innerMode=Kt,t.commands=Wa,t.keyMap=Ba,t.keyName=uo,t.isModifierKey=lo,t.lookupKey=ao,t.normalizeKeyMap=so,t.StringStream=ha,t.SharedTextMarker=Da,t.TextMarker=Na,t.LineWidget=La,t.e_preventDefault=_t,t.e_stopPropagation=Nt,t.e_stop=It,t.addClass=a,t.contains=o,t.rmClass=zs,t.keyNames=Ha}(Go),Go.version="5.38.0",Go})},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";var i=n(0),r=i.Model.extend({idAttribute:"name",defaults:{name:"",label:"",type:1,active:!0,private:!1,protected:!1},initialize:function(){var t=this.get("name"),e=this.get("label");t?e||this.set("label",t):this.set("name",e),this.set("name",r.escapeName(this.get("name")))},getFullName:function(){var t="";switch(this.get("type")){case 1:t=".";break;case 2:t="#"}return t+this.get("name")}},{TYPE_CLASS:1,TYPE_ID:2,escapeName:function(t){return(""+t).trim().replace(/([^a-z0-9\w-]+)/gi,"-")}});t.exports=r},function(t,e,n){"use strict";var i=n(1),r=n(0),o=r.$;t.exports=r.View.extend({events:{change:"onChange"},attributes:function(){return this.model.get("attributes")},initialize:function(t){var e=this.model,n=(e.get("name"),e.target);this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=n,this.className=this.pfx+"trait",this.labelClass=this.ppfx+"label",this.fieldClass=this.ppfx+"field "+this.ppfx+"field-"+e.get("type"),this.inputhClass=this.ppfx+"input-holder",e.off("change:value",this.onValueChange),this.listenTo(e,"change:value",this.onValueChange),e.view=this,this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().value)},getValueForTarget:function(){return this.model.get("value")},setInputValue:function(t){this.getInputEl().value=t},onValueChange:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.model;this.target,i.get("name");if(n.fromTarget)this.setInputValue(i.get("value"));else{var r=this.getValueForTarget();i.setTargetValue(r,n)}},renderLabel:function(){var t=this.getLabel();this.$el.html('
    '+t+"
    ")},getLabel:function(){var t=this.model,e=t.get("label")||t.get("name");return e.charAt(0).toUpperCase()+e.slice(1).replace(/-/g," ")},getInputEl:function(){if(!this.$input){var t=this.model,e=t.get("placeholder")||t.get("default")||"",n=t.get("type")||"text",i=t.get("min"),r=t.get("max"),s=this.getModelValue(),a=o('');s&&a.prop("value",s),i&&a.prop("min",i),r&&a.prop("max",r),this.$input=a}return this.$input.get(0)},getModelValue:function(){var t=void 0,e=this.model,n=this.target,r=e.get("name");if(e.get("changeProp"))t=n.get(r);else{var o=n.get("attributes");t=e.get("value")||o[r]}return(0,i.isUndefined)(t)?"":t},renderField:function(){if(!this.$input){this.$el.append(this.tmpl);var t=this.getInputEl(),e=this.el.querySelector("."+this.inputhClass);e.insertBefore(t,e.childNodes[0])}},render:function(){return this.renderLabel(),this.renderField(),this.el.className=this.className,this}})},function(t,e,n){"use strict";var i,r;!function(o,s){i=s,void 0!==(r="function"==typeof i?i.call(e,n,e,t):i)&&(t.exports=r)}(0,function(){function t(t,e){return e=e||M,R.test(t)?e.getElementsByClassName(t.slice(1)):H.test(t)?e.getElementsByTagName(t):e.querySelectorAll(t)}function e(t){if(!E){E=M.implementation.createHTMLDocument(null);var e=E.createElement("base");e.href=M.location.href,E.head.appendChild(e)}return E.body.innerHTML=t,E.body.childNodes}function n(t){"loading"!==M.readyState?setTimeout(t):M.addEventListener("DOMContentLoaded",t)}function i(i,r){if(!i)return this;if(i.cash&&i!==A)return i;var o,s=i,a=0;if(I(i))s=F.test(i)?M.getElementById(i.slice(1)):z.test(i)?e(i):t(i,r);else if(D(i))return n(i),this;if(!s)return this;if(s.nodeType||s===A)this[0]=s,this.length=1;else for(o=this.length=s.length;a=0&&s.splice(i,1)):(o(s,function(n){t.removeEventListener(e,n)}),s=[]))}function x(t,e){return"&"+encodeURIComponent(t)+"="+encodeURIComponent(e).replace(/%20/g,"+")}function w(t){var e=[];return o(t.options,function(t){t.selected&&e.push(t.value)}),e.length?e:null}function C(t){var e=t.selectedIndex;return e>=0?t.options[e].value:null}function k(t){var e=t.type;if(!e)return null;switch(e.toLowerCase()){case"select-one":return C(t);case"select-multiple":return w(t);case"radio":case"checkbox":return t.checked?t.value:null;default:return t.value?t.value:null}}function S(t,e,n){if(n){var i=t.childNodes[0];t.insertBefore(e,i)}else t.appendChild(e)}function T(t,e,n){var i=I(e);if(!i&&e.length)return void o(e,function(e){return T(t,e,n)});o(t,i?function(t){return t.insertAdjacentHTML(n?"afterbegin":"beforeend",e)}:function(t,i){return S(t,0===i?e:e.cloneNode(!0),n)})}var E,M=document,A=window,O=Array.prototype,P=O.slice,L=O.filter,_=O.push,N=function(){},D=function(t){return typeof t==typeof N&&t.call},I=function(t){return"string"==typeof t},F=/^#[\w-]*$/,R=/^\.[\w-]*$/,z=/<.+>/,H=/^\w+$/,V=r.fn=r.prototype=i.prototype={cash:!0,length:0,push:_,splice:O.splice,map:O.map,init:i};Object.defineProperty(V,"constructor",{value:r}),r.parseHTML=e,r.noop=N,r.isFunction=D,r.isString=I,r.extend=V.extend=function(t){t=t||{};var e=P.call(arguments),n=e.length,i=1;for(1===e.length&&(t=this,i=0);i1?this.each(function(n){return n.style[t]=e}):A.getComputedStyle(this[0])[t];for(var n in t)this.css(n,t[n]);return this}}),o(["Width","Height"],function(t){var e=t.toLowerCase();V[e]=function(){return this[0].getBoundingClientRect()[e]},V["inner"+t]=function(){return this[0]["client"+t]},V["outer"+t]=function(e){return this[0]["offset"+t]+(e?m(this,"margin"+("Width"===t?"Left":"Top"))+m(this,"margin"+("Width"===t?"Right":"Bottom")):0)}}),V.extend({off:function(t,e){return this.each(function(n){return b(n,t,e)})},on:function(t,e,i,r){var o;if(!I(t)){for(var a in t)this.on(a,e,t[a]);return this}return D(e)&&(i=e,e=null),"ready"===t?(n(i),this):(e&&(o=i,i=function(t){for(var n=t.target;!s(n,e);){if(n===this)return n=!1;n=n.parentNode}n&&o.call(n,t)}),this.each(function(e){var n=i;r&&(n=function(){i.apply(this,arguments),b(e,t,n)}),y(e,t,n)}))},one:function(t,e,n){return this.on(t,e,n,!0)},ready:n,trigger:function(t,e){var n=M.createEvent("HTMLEvents");return n.data=e,n.initEvent(t,!0,!1),this.each(function(t){return t.dispatchEvent(n)})}}),V.extend({serialize:function(){var t="";return o(this[0].elements||this,function(e){if(!e.disabled&&"FIELDSET"!==e.tagName){var n=e.name;switch(e.type.toLowerCase()){case"file":case"reset":case"submit":case"button":break;case"select-multiple":var i=k(e);null!==i&&o(i,function(e){t+=x(n,e)});break;default:var r=k(e);null!==r&&(t+=x(n,r))}}}),t.substr(1)},val:function(t){return void 0===t?k(this[0]):this.each(function(e){return e.value=t})}}),V.extend({after:function(t){return r(t).insertAfter(this),this},append:function(t){return T(this,t),this},appendTo:function(t){return T(r(t),this),this},before:function(t){return r(t).insertBefore(this),this},clone:function(){return r(this.map(function(t){return t.cloneNode(!0)}))},empty:function(){return this.html(""),this},html:function(t){if(void 0===t)return this[0].innerHTML;var e=t.nodeType?t[0].outerHTML:t;return this.each(function(t){return t.innerHTML=e})},insertAfter:function(t){var e=this;return r(t).each(function(t,n){var i=t.parentNode,r=t.nextSibling;e.each(function(t){i.insertBefore(0===n?t:t.cloneNode(!0),r)})}),this},insertBefore:function(t){var e=this;return r(t).each(function(t,n){var i=t.parentNode;e.each(function(e){i.insertBefore(0===n?e:e.cloneNode(!0),t)})}),this},prepend:function(t){return T(this,t,!0),this},prependTo:function(t){return T(r(t),this,!0),this},remove:function(){return this.each(function(t){return t.parentNode.removeChild(t)})},text:function(t){return void 0===t?this[0].textContent:this.each(function(e){return e.textContent=t})}});var U=M.documentElement;return V.extend({position:function(){var t=this[0];return{left:t.offsetLeft,top:t.offsetTop}},offset:function(){var t=this[0].getBoundingClientRect();return{top:t.top+A.pageYOffset-U.clientTop,left:t.left+A.pageXOffset-U.clientLeft}},offsetParent:function(){return r(this[0].offsetParent)}}),V.extend({children:function(t){var e=[];return this.each(function(t){_.apply(e,t.children)}),e=l(e),t?e.filter(function(e){return s(e,t)}):e},closest:function(t){return!t||this.length<1?r():this.is(t)?this.filter(t):this.parent().closest(t)},is:function(t){if(!t)return!1;var e=!1,n=a(t);return this.each(function(i){return!(e=n(i,t))}),e},find:function(e){if(!e||e.nodeType)return r(e&&this.has(e).length?e:null);var n=[];return this.each(function(i){_.apply(n,t(e,i))}),l(n)},has:function(e){var n=I(e)?function(n){return 0!==t(e,n).length}:function(t){return t.contains(e)};return this.filter(n)},next:function(){return r(this[0].nextElementSibling)},not:function(t){if(!t)return this;var e=a(t);return this.filter(function(n){return!e(n,t)})},parent:function(){var t=[];return this.each(function(e){e&&e.parentNode&&t.push(e.parentNode)}),l(t)},parents:function(t){var e,n=[];return this.each(function(i){for(e=i;e&&e.parentNode&&e!==M.body.parentNode;)e=e.parentNode,(!t||t&&s(e,t))&&n.push(e)}),l(n)},prev:function(){return r(this[0].previousElementSibling)},siblings:function(){var t=this.parent().children(),e=this[0];return t.filter(function(t){return t!==e})}}),r})},function(t,e,n){"use strict";var i=n(1),r=n(8);t.exports=n(0).Collection.extend({model:r,getStyleable:function(){return(0,i.filter)(this.models,function(t){return t.get("active")&&!t.get("private")})},getValid:function(){return(0,i.filter)(this.models,function(t){return!t.get("private")})},getFullString:function(t){var e=[];return(t||this).forEach(function(t){return e.push(t.getFullName())}),e.join("").trim()}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return this.set({value:void 0},t),this},setValue:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.parseValue(t);this.set(r,i({},n,{avoidStore:1})),e&&(this.set("value","",n),this.set(r,n))},setValueFromInput:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.setValue(t,e,i({},n,{fromInput:1}))},parseValue:function(t){var e={value:t},n="!important";if((0,r.isString)(t)&&-1!==t.indexOf(n)&&(e.value=t.replace(n,"").trim(),e.important=1),!this.get("functionName"))return e;var i=[],o=""+e.value,s=o.indexOf("(")+1,a=o.lastIndexOf(")");return i.push(s),a>=0&&i.push(a),e.value=String.prototype.substring.apply(o,i),e},getDefaultValue:function(){return this.get("defaults")},getFullValue:function(t){var e=this.get("functionName"),n=(0,r.isUndefined)(t)?this.get("value"):t;return e&&!(0,r.isUndefined)(n)&&(n=e+"("+n+")"),this.get("important")&&(n+=" !important"),n||""}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);n(5),n(15),n(37),n(38),n(39),n(41),n(17),n(35);t.exports=r.default.View.extend({initialize:function(t){this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.target=t.target||{},this.propTarget=t.propTarget||{},this.onChange=t.onChange,this.onInputRender=t.onInputRender||{},this.customValue=t.customValue||{},this.properties=[];var e=this.collection;this.listenTo(e,"add",this.addTo),this.listenTo(e,"reset",this.render)},addTo:function(t){this.add(t)},add:function(t,e){var n=new t.typeView({model:t,name:t.get("name"),id:this.pfx+t.get("property"),target:this.target,propTarget:this.propTarget,onChange:this.onChange,onInputRender:this.onInputRender,config:this.config});"composite"!=t.get("type")&&(n.customValue=this.customValue),n.render();var i=n.el;this.properties.push(n),e?e.appendChild(i):this.el.appendChild(i)},render:function(){var t=this;this.properties=[];var e=document.createDocumentFragment();return this.collection.each(function(n){return t.add(n,e)}),this.$el.append(e),this.$el.attr("class",this.pfx+"properties"),this}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=(n(18),n(5)),s=r.default.$;t.exports=o.extend({templateInput:function(){return""},init:function(){var t=this.model;this.listenTo(t,"change:unit",this.modelValueChanged),this.listenTo(t,"el:change",this.elementUpdated)},setValue:function(t){var e=this.model.parseValue(t);t=""+e.value+e.unit,this.inputInst.setValue(t,{silent:1})},onRender:function(){var t=this.ppfx;if(!this.input){var e=this.model.input;e.ppfx=t,e.render();this.el.querySelector("."+t+"fields").appendChild(e.el),this.$input=e.inputEl,this.unit=e.unitEl,this.$unit=s(this.unit),this.input=this.$input.get(0),this.inputInst=e}}})},function(t,e,n){"use strict";var i=(n(0),n(3));t.exports=i.extend({tagName:"img",events:{dblclick:"openModal",click:"initResize"},initialize:function(t){var e=this.model;i.prototype.initialize.apply(this,arguments),this.listenTo(e,"change:src",this.updateSrc),this.listenTo(e,"dblclick active",this.openModal),this.classEmpty=this.ppfx+"plh-image";var n=this.config;n.modal&&(this.modal=n.modal),n.am&&(this.am=n.am),this.fetchFile()},fetchFile:function(){var t=this.model,e=t.get("file");if(e){this.em.get("AssetManager").FileUploader().uploadFile({dataTransfer:{files:[e]}},function(e){var n=e&&e.data&&e.data[0],i=n&&n.src;i&&t.set({src:i})}),t.set("file","")}},updateSrc:function(){var t=this.model,e=this.classEmpty,n=this.$el,i=t.get("src");t.addAttributes({src:i}),n[i?"removeClass":"addClass"](e)},openModal:function(t){var e=this.opts.config.em,n=e?e.get("Editor"):"";n&&this.model.get("editable")&&n.runCommand("open-assets",{target:this.model,types:["image"],accept:"image/*",onSelect:function(){n.Modal.close(),n.AssetManager.setTarget(null)}})},render:function(){this.updateAttributes(),this.updateClasses();var t=this.$el.attr("class")||"";return this.model.get("src")||this.$el.attr("class",(t+" "+this.classEmpty).trim()),this.$el.attr("onmousedown","return false"),this}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(5),s=r.default.$;t.exports=o.extend({templateInput:function(){var t=this.pfx;return'\n
    \n \n
    \n '},inputValueChanged:function(){if(!this.model.get("detached")){for(var t=arguments.length,e=Array(t),n=0;n'),this.input=this.$input.get(0)),this.props||(this.props=t.get("properties")),!this.$props)){this.props.each(function(e,n){e&&"composite"==e.get("type")&&(this.props.remove(e),console.warn("Nested composite types not yet allowed.")),e.parent=t},this);var i=n(14),r=new i(this.getPropsConfig());this.$props=r.render().$el,this.properties=r.properties,this.$el.find("#"+this.pfx+"input-holder").append(this.$props)}},getPropsConfig:function(t){var e=this,n=this.model,i={config:this.config,collection:this.props,target:this.target,propTarget:this.propTarget,onChange:function(t,e,i){n.set("value",n.getFullValue(),i)},customValue:function(t,n){return e.valueOnIndex(n,t)}};return n.get("detached")&&delete i.onChange,i},valueOnIndex:function(t,e){var n=void 0,i=this.getTargetValue({ignoreDefault:1});if(i){n=i.split(" ")[t]}else n=e&&e.getTargetValue({ignoreCustomValue:1,ignoreDefault:1});return e&&(n=e.model.parseValue(n).value),n}})},function(t,e,n){"use strict";(function(e){var i=n(1),r=n(2),o=n(36),s=n(0);s.$;t.exports=o.extend({events:{"change input":"handleChange","change select":"handleUnitChange","click [data-arrow-up]":"upArrowClick","click [data-arrow-down]":"downArrowClick","mousedown [data-arrows]":"downIncrement"},template:function(){var t=this.ppfx;return'\n \n \n
    \n
    \n
    \n
    \n '},inputClass:function(){var t=this.ppfx;return this.opts.contClass||t+"field "+t+"field-integer"},initialize:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];o.prototype.initialize.apply(this,arguments),(0,i.bindAll)(this,"moveIncrement","upIncrement"),this.doc=document,this.listenTo(this.model,"change:unit",this.handleModelChange)},setValue:function(t,e){var n=e||{},i=this.validateInputValue(t,{deepCheck:1}),r={value:i.value};(i.unit||i.force)&&(r.unit=i.unit),this.model.set(r,n),n.silent&&this.handleModelChange()},handleChange:function(t){t.stopPropagation(),this.setValue(this.getInputEl().value),this.elementUpdated()},handleUnitChange:function(t){t.stopPropagation();var e=this.getUnitEl().value;this.model.set("unit",e),this.elementUpdated()},elementUpdated:function(){this.model.trigger("el:change")},handleModelChange:function(){var t=this.model;this.getInputEl().value=t.get("value");var e=this.getUnitEl();e&&(e.value=t.get("unit")||"")},getUnitEl:function(){if(!this.unitEl){var t=this.model,e=t.get("units")||[];if(e.length){var n=[];e.forEach(function(e){var i=e==t.get("unit")?"selected":"";n.push("")});var i=document.createElement("div");i.innerHTML='",this.unitEl=i.firstChild}}return this.unitEl},upArrowClick:function(){var t=this.model,e=t.get("step"),n=parseInt(t.get("value"),10);n=this.normalizeValue(n+e);var i=this.validateInputValue(n);t.set("value",i.value),this.elementUpdated()},downArrowClick:function(){var t=this.model,e=t.get("step"),n=parseInt(t.get("value"),10),i=this.normalizeValue(n-e),r=this.validateInputValue(i);t.set("value",r.value),this.elementUpdated()},downIncrement:function(t){t.preventDefault(),this.moved=0;var e=this.model.get("value");e=this.normalizeValue(e),this.current={y:t.pageY,val:e},(0,r.on)(this.doc,"mousemove",this.moveIncrement),(0,r.on)(this.doc,"mouseup",this.upIncrement)},moveIncrement:function(t){this.moved=1;var e=this.model,n=e.get("step"),i=this.current,r=this.normalizeValue(i.val+(i.y-t.pageY)*n);return this.prValue=this.validateInputValue(r).value,e.set("value",this.prValue,{avoidStore:1}),!1},upIncrement:function(){var t=this.model,e=t.get("step");if((0,r.off)(this.doc,"mouseup",this.upIncrement),(0,r.off)(this.doc,"mousemove",this.moveIncrement),this.prValue&&this.moved){var n=this.prValue-e;t.set("value",n,{avoidStore:1}).set("value",n+e),this.elementUpdated()}},normalizeValue:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=this.model,i=n.get("step"),r=0;if(isNaN(t))return e;if(t=parseFloat(t),Math.floor(t)!==t){var o=i.toString().split(".")[1];r=o?o.length:0}return r?parseFloat(t.toFixed(r)):t},validateInputValue:function(t,n){var r=0,o=n||{},s=this.model,a=(0,i.isUndefined)(t)?"":t,l=s.get("units")||[],c=s.get("unit")||l.length&&l[0]||"",u=s.get("max"),h=s.get("min");if(o.deepCheck){var d=s.get("fixedValues")||[];if(a){var f=new RegExp("^"+d.join("|"),"g");if(d.length&&f.test(a))a=a.match(f)[0],c="",r=1;else{var p=a+"";a+="",a=parseFloat(a.replace(",",".")),a=isNaN(a)?"":a;var g=p.replace(a,"");e.indexOf(l,g)>=0&&(c=g)}}}return(0,i.isUndefined)(u)||""===u||(a=a>u?u:a),(0,i.isUndefined)(h)||""===h||(a=a1&&void 0!==arguments[1]?arguments[1]:{};if(t){var n=e.ctrlKey||e.metaKey,i=e.shiftKey,r=this.editor,s=r.getConfig("multipleSelection"),a=this.em;if(n&&s)r.selectToggle(t);else if(i&&s){a.clearSelection(r.Canvas.getWindow());var l=t.collection,c=l.indexOf(t),u=(r.getSelectedAll(),void 0),h=void 0;if(r.getSelectedAll().forEach(function(t){var e=t.collection,n=e.indexOf(t);e===l&&(nc&&(h=(0,o.isUndefined)(h)?n:Math.min(h,n)))}),!(0,o.isUndefined)(u))for(;u!==c;)r.selectAdd(l.at(u)),u++;if(!(0,o.isUndefined)(h))for(;h!==c;)r.selectAdd(l.at(h)),h--;r.selectAdd(t)}else r.select(t);this.initResize(t)}},updateBadge:function(t,e){var n=c(t),i=this.canvas,r=i.getConfig(),o=r.customBadgeLabel;this.cacheEl=t;var s=n.data("model");if(s&&s.get("badgable")){var a=this.getBadge(),l=s.getIcon()+s.getName();l=o?o(s):l,a.innerHTML=l;var u=a.style;u.display="block";var h=i.getCanvasView().getPosition();if(h){var d=a?a.offsetHeight:0,f=a?a.offsetWidth:0,p=e.top-d1&&void 0!==arguments[1]?arguments[1]:{},i=n.el,r=n.config,o=n.resizer,a=r.keyHeight,l=r.keyWidth,c=r.currentUnit;v("add",0,n),g=e.get("StyleManager").getModelToStyle(h);var d=getComputedStyle(i),f=g.getStyle(),p=f[l]||d[l],m=f[a]||d[a];o.startDim.w=parseFloat(p),o.startDim.h=parseFloat(m),u=0,c&&(r.unitHeight=(0,s.getUnitFromValue)(m),r.unitWidth=(0,s.getUnitFromValue)(p))},onMove:function(){n.trigger("change:canvasOffset")},onEnd:function(t,e){v("remove",0,e),n.trigger("change:canvasOffset"),u=1},updateTarget:function(t,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(g){var r=i.store,o=i.selectedHandler,s=i.config,a=s.keyHeight,l=s.keyWidth,c=["tc","bc"].indexOf(o)>=0,u=["cl","cr"].indexOf(o)>=0,h=g.getStyle();c||(h[l]=n.w+s.unitWidth),u||(h[a]=n.h+s.unitHeight),g.setStyle(h,{avoidStore:1});e&&e.trigger("update:component:style:"+a+" update:component:style:"+l),r&&g.trigger("change:style",g,h,{})}}},"object"==(void 0===d?"undefined":r(d))&&(p=i({},p,d)),n.runCommand("resize",{el:f,options:p})):n.stopCommand("resize")},updateToolbar:function(t){var e=this.config.em,n=t==e?e.getSelected():t,i=this.canvas.getToolbarEl(),r=i.style;if(!n)return void(r.opacity=0);var o=n.get("toolbar");this.ppfx;if(e.get("Config").showToolbar&&o&&o.length){if(r.opacity="",r.display="",!this.toolbar){i.innerHTML="",this.toolbar=new l(o);var s=new a({collection:this.toolbar,editor:this.editor});i.appendChild(s.render().el)}this.toolbar.reset(o);var c=n.view;c&&this.updateToolbarPos(c.el)}else r.display="none"},updateToolbarPos:function(t,e){var n=this.canvas.getToolbarEl(),i=n.style,r=i.display;i.display="block";var o=this.canvas.getTargetToElementDim(n,t,{elPos:e,event:"toolbarPosUpdate"});if(o){var s=o.left+o.elementWidth-o.targetWidth;i.top=o.top+"px",i.left=(s<0?0:s)+"px",i.display=r}},getCanvasPosition:function(){return this.canvas.getCanvasView().getPosition()},clean:function(){this.selEl&&this.selEl.removeClass(this.hoverClass)},getBadge:function(){return this.canvas.getBadgeEl()},onFrameScroll:function(t){var e=this.cacheEl;if(e){var n=this.getElementPos(e);this.updateBadge(e,n);var i=this.em.getSelected();i&&this.updateToolbarPos(i.view.el)}},updateAttached:function(t){var e=this.em.getSelected();if(e){var n=e.view;this.updateToolbarPos(n.el),this.showFixedElementOffset(n.el)}},getElementPos:function(t,e){return this.canvas.getCanvasView().getElementPos(t)},hideBadge:function(){this.getBadge().style.display="none"},cleanPrevious:function(t){t&&t.set({status:"",state:""})},getContentWindow:function(){return this.frameEl.contentWindow},run:function(t){this.editor=t&&t.get("Editor"),this.enable(),this.onSelect()},stop:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.em;this.stopSelectComponent(),!n.preserveSelected&&i.setSelected(null),this.clean(),this.hideBadge(),this.hideFixedElementOffset(),this.canvas.getToolbarEl().style.display="none",i.off("component:update",this.updateAttached,this),i.off("change:canvasOffset",this.updateAttached,this)}}},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(57),c=a.default.$;t.exports=o.default.extend({},l,{init:function(t){o.default.bindAll(this,"startDraw","draw","endDraw","rollback"),this.config=t||{},this.hType=this.config.newFixedH?"height":"min-height",this.allowDraw=1},enable:function(){for(var t=arguments.length,e=Array(t),n=0;n0;for(o in C)(!C[o]&&n(i.mods,+o)>-1||C[o]&&-1==n(i.mods,+o))&&(a=!1);(0!=i.mods.length||C[16]||C[18]||C[17]||C[91])&&!a||!1===i.method(t,i)&&(t.preventDefault?t.preventDefault():t.returnValue=!1,t.stopPropagation&&t.stopPropagation(),t.cancelBubble&&(t.cancelBubble=!0))}}function s(t){var e,i=t.keyCode,r=n(M,i);if(r>=0&&M.splice(r,1),93!=i&&224!=i||(i=91),i in C){C[i]=!1;for(e in S)S[e]==i&&(l[e]=!1)}}function a(){for(x in C)C[x]=!1;for(x in S)l[x]=!1}function l(t,e,n){var i,r;i=v(t),void 0===n&&(n=e,e="all");for(var o=0;o1&&(r=m(t),t=[t[t.length-1]]),t=t[0],t=E(t),t in w||(w[t]=[]),w[t].push({shortcut:i[o],scope:e,method:n,key:i[o],mods:r})}function c(t,e){var n,r,o,s,a,l=[];for(n=v(t),s=0;s1&&(l=m(r),t=r[r.length-1]),t=E(t),void 0===e&&(e=p()),!w[t])return;for(o=0;o=0&&o0?0:a-1;return arguments.length<3&&(r=n[s?s[l]:l],l+=t),e(n,i,r,s,l,a)}}function o(t){return function(e,n,i){n=S(n,i);for(var r=O(e),o=t>0?0:r-1;o>=0&&o0?s=o>=0?o:Math.max(o+a,s):a=o>=0?Math.min(o+1,a):o+a+1;else if(n&&o&&a)return o=n(i,r),i[o]===r?o:-1;if(r!==r)return o=e(p.call(i,s,a),C.isNaN),o>=0?o+s:-1;for(o=t>0?s:a-1;o>=0&&o=0&&e<=A};C.each=C.forEach=function(t,e,n){e=k(e,n);var i,r;if(P(t))for(i=0,r=t.length;i=0},C.invoke=function(t,e){var n=p.call(arguments,2),i=C.isFunction(e);return C.map(t,function(t){var r=i?e:t[e];return null==r?r:r.apply(t,n)})},C.pluck=function(t,e){return C.map(t,C.property(e))},C.where=function(t,e){return C.filter(t,C.matcher(e))},C.findWhere=function(t,e){return C.find(t,C.matcher(e))},C.max=function(t,e,n){var i,r,o=-1/0,s=-1/0;if(null==e&&null!=t){t=P(t)?t:C.values(t);for(var a=0,l=t.length;ao&&(o=i)}else e=S(e,n),C.each(t,function(t,n,i){((r=e(t,n,i))>s||r===-1/0&&o===-1/0)&&(o=t,s=r)});return o},C.min=function(t,e,n){var i,r,o=1/0,s=1/0;if(null==e&&null!=t){t=P(t)?t:C.values(t);for(var a=0,l=t.length;ai||void 0===n)return 1;if(ne?(s&&(clearTimeout(s),s=null),a=c,o=t.apply(i,r),s||(i=r=null)):s||!1===n.trailing||(s=setTimeout(l,u)),o}},C.debounce=function(t,e,n){var i,r,o,s,a,l=function(){var c=C.now()-s;c=0?i=setTimeout(l,e-c):(i=null,n||(a=t.apply(o,r),i||(o=r=null)))};return function(){o=this,r=arguments,s=C.now();var c=n&&!i;return i||(i=setTimeout(l,e)),c&&(a=t.apply(o,r),o=r=null),a}},C.wrap=function(t,e){return C.partial(e,t)},C.negate=function(t){return function(){return!t.apply(this,arguments)}},C.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,i=t[e].apply(this,arguments);n--;)i=t[n].call(this,i);return i}},C.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},C.before=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},C.once=C.partial(C.before,2);var D=!{toString:null}.propertyIsEnumerable("toString"),I=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];C.keys=function(t){if(!C.isObject(t))return[];if(y)return y(t);var e=[];for(var n in t)C.has(t,n)&&e.push(n);return D&&a(t,e),e},C.allKeys=function(t){if(!C.isObject(t))return[];var e=[];for(var n in t)e.push(n);return D&&a(t,e),e},C.values=function(t){for(var e=C.keys(t),n=e.length,i=Array(n),r=0;r":">",'"':""","'":"'","`":"`"},z=C.invert(R),H=function(t){var e=function(e){return t[e]},n="(?:"+C.keys(t).join("|")+")",i=RegExp(n),r=RegExp(n,"g");return function(t){return t=null==t?"":""+t,i.test(t)?t.replace(r,e):t}};C.escape=H(R),C.unescape=H(z),C.result=function(t,e,n){var i=null==t?void 0:t[e];return void 0===i&&(i=n),C.isFunction(i)?i.call(t):i};var V=0;C.uniqueId=function(t){var e=++V+"";return t?t+e:e},C.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var j=/(.)^/,$={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},B=/\\|'|\r|\n|\u2028|\u2029/g,W=function(t){return"\\"+$[t]};C.template=function(t,e,n){!e&&n&&(e=n),e=C.defaults({},e,C.templateSettings);var i=RegExp([(e.escape||j).source,(e.interpolate||j).source,(e.evaluate||j).source].join("|")+"|$","g"),r=0,o="__p+='";t.replace(i,function(e,n,i,s,a){return o+=t.slice(r,a).replace(B,W),r=a+e.length,n?o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":i?o+="'+\n((__t=("+i+"))==null?'':__t)+\n'":s&&(o+="';\n"+s+"\n__p+='"),e}),o+="';\n",e.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{var s=new Function(e.variable||"obj","_",o)}catch(t){throw t.source=o,t}var a=function(t){return s.call(this,t,C)};return a.source="function("+(e.variable||"obj")+"){\n"+o+"}",a},C.chain=function(t){var e=C(t);return e._chain=!0,e};var U=function(t,e){return t._chain?C(e).chain():e};C.mixin=function(t){C.each(C.functions(t),function(e){var n=C[e]=t[e];C.prototype[e]=function(){var t=[this._wrapped];return f.apply(t,arguments),U(this,n.apply(C,t))}})},C.mixin(C),C.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=u[t];C.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],U(this,n)}}),C.each(["concat","join","slice"],function(t){var e=u[t];C.prototype[t]=function(){return U(this,e.apply(this._wrapped,arguments))}}),C.prototype.value=function(){return this._wrapped},C.prototype.valueOf=C.prototype.toJSON=C.prototype.value,C.prototype.toString=function(){return""+this._wrapped},i=[],void 0!==(r=function(){return C}.apply(e,i))&&(t.exports=r)}).call(this)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(77),r=function(t){return t&&t.__esModule?t:{default:t}}(i);window.Promise=window.Promise||r.default,e.default="function"==typeof fetch?fetch.bind():function(t,e){return new r.default(function(n,i){var o=new XMLHttpRequest;o.open(e.method||"get",t),o.withCredentials="include"==e.credentials;for(var s in e.headers||{})o.setRequestHeader(s,e.headers[s]);o.onload=function(t){return n({status:o.status,statusText:o.statusText,text:function(){return r.default.resolve(o.responseText)}})},o.onerror=i,o.upload&&e.onProgress&&(o.upload.onprogress=e.onProgress),e.body?o.send(e.body):o.send()})}},function(t,e,n){"use strict";t.exports=function(t){var e=t;return{compTypes:"",parseStyle:function(t){for(var e={},n=t.split(";"),i=0,r=n.length;i*\/]/.test(n)?i(null,"select-op"):"."==n&&t.match(/^-?[_a-z][_a-z0-9-]*/i)?i("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(n)?i(null,n):("u"==n||"U"==n)&&t.match(/rl(-prefix)?\(/i)||("d"==n||"D"==n)&&t.match("omain(",!0,!0)||("r"==n||"R"==n)&&t.match("egexp(",!0,!0)?(t.backUp(1),e.tokenize=s,i("property","word")):/[\w\\\-]/.test(n)?(t.eatWhile(/[\w\\\-]/),i("property","word")):i(null,null):/[\d.]/.test(t.peek())?(t.eatWhile(/[\w.%]/),i("number","unit")):t.match(/^-[\w\\\-]+/)?(t.eatWhile(/[\w\\\-]/),t.match(/^\s*:/,!1)?i("variable-2","variable-definition"):i("variable-2","variable")):t.match(/^\w+-/)?i("meta","meta"):void 0}function o(t){return function(e,n){for(var r,o=!1;null!=(r=e.next());){if(r==t&&!o){")"==t&&e.backUp(1);break}o=!o&&"\\"==r}return(r==t||!o&&")"!=t)&&(n.tokenize=null),i("string","string")}}function s(t,e){return t.next(),t.match(/\s*[\"\')]/,!1)?e.tokenize=null:e.tokenize=o(")"),i(null,"(")}function a(t,e,n){this.type=t,this.indent=e,this.prev=n}function l(t,e,n,i){return t.context=new a(n,e.indentation()+(!1===i?0:v),t.context),n}function c(t){return t.context.prev&&(t.context=t.context.prev),t.context.type}function u(t,e,n){return L[n.context.type](t,e,n)}function h(t,e,n,i){for(var r=i||1;r>0;r--)n.context=n.context.prev;return u(t,e,n)}function d(t){var e=t.current().toLowerCase();g=M.hasOwnProperty(e)?"atom":E.hasOwnProperty(e)?"keyword":"variable"}var f=n.inline;n.propertyKeywords||(n=t.resolveMode("text/css"));var p,g,v=e.indentUnit,m=n.tokenHooks,y=n.documentTypes||{},b=n.mediaTypes||{},x=n.mediaFeatures||{},w=n.mediaValueKeywords||{},C=n.propertyKeywords||{},k=n.nonStandardPropertyKeywords||{},S=n.fontProperties||{},T=n.counterDescriptors||{},E=n.colorKeywords||{},M=n.valueKeywords||{},A=n.allowNested,O=n.lineComment,P=!0===n.supportsAtComponent,L={};return L.top=function(t,e,n){if("{"==t)return l(n,e,"block");if("}"==t&&n.context.prev)return c(n);if(P&&/@component/i.test(t))return l(n,e,"atComponentBlock");if(/^@(-moz-)?document$/i.test(t))return l(n,e,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(t))return l(n,e,"atBlock");if(/^@(font-face|counter-style)/i.test(t))return n.stateArg=t,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(t))return"keyframes";if(t&&"@"==t.charAt(0))return l(n,e,"at");if("hash"==t)g="builtin";else if("word"==t)g="tag";else{if("variable-definition"==t)return"maybeprop";if("interpolation"==t)return l(n,e,"interpolation");if(":"==t)return"pseudo";if(A&&"("==t)return l(n,e,"parens")}return n.context.type},L.block=function(t,e,n){if("word"==t){var i=e.current().toLowerCase();return C.hasOwnProperty(i)?(g="property","maybeprop"):k.hasOwnProperty(i)?(g="string-2","maybeprop"):A?(g=e.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(g+=" error","maybeprop")}return"meta"==t?"block":A||"hash"!=t&&"qualifier"!=t?L.top(t,e,n):(g="error","block")},L.maybeprop=function(t,e,n){return":"==t?l(n,e,"prop"):u(t,e,n)},L.prop=function(t,e,n){if(";"==t)return c(n);if("{"==t&&A)return l(n,e,"propBlock");if("}"==t||"{"==t)return h(t,e,n);if("("==t)return l(n,e,"parens");if("hash"!=t||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(e.current())){if("word"==t)d(e);else if("interpolation"==t)return l(n,e,"interpolation")}else g+=" error";return"prop"},L.propBlock=function(t,e,n){return"}"==t?c(n):"word"==t?(g="property","maybeprop"):n.context.type},L.parens=function(t,e,n){return"{"==t||"}"==t?h(t,e,n):")"==t?c(n):"("==t?l(n,e,"parens"):"interpolation"==t?l(n,e,"interpolation"):("word"==t&&d(e),"parens")},L.pseudo=function(t,e,n){return"meta"==t?"pseudo":"word"==t?(g="variable-3",n.context.type):u(t,e,n)},L.documentTypes=function(t,e,n){return"word"==t&&y.hasOwnProperty(e.current())?(g="tag",n.context.type):L.atBlock(t,e,n)},L.atBlock=function(t,e,n){if("("==t)return l(n,e,"atBlock_parens");if("}"==t||";"==t)return h(t,e,n);if("{"==t)return c(n)&&l(n,e,A?"block":"top");if("interpolation"==t)return l(n,e,"interpolation");if("word"==t){var i=e.current().toLowerCase();g="only"==i||"not"==i||"and"==i||"or"==i?"keyword":b.hasOwnProperty(i)?"attribute":x.hasOwnProperty(i)?"property":w.hasOwnProperty(i)?"keyword":C.hasOwnProperty(i)?"property":k.hasOwnProperty(i)?"string-2":M.hasOwnProperty(i)?"atom":E.hasOwnProperty(i)?"keyword":"error"}return n.context.type},L.atComponentBlock=function(t,e,n){return"}"==t?h(t,e,n):"{"==t?c(n)&&l(n,e,A?"block":"top",!1):("word"==t&&(g="error"),n.context.type)},L.atBlock_parens=function(t,e,n){return")"==t?c(n):"{"==t||"}"==t?h(t,e,n,2):L.atBlock(t,e,n)},L.restricted_atBlock_before=function(t,e,n){return"{"==t?l(n,e,"restricted_atBlock"):"word"==t&&"@counter-style"==n.stateArg?(g="variable","restricted_atBlock_before"):u(t,e,n)},L.restricted_atBlock=function(t,e,n){return"}"==t?(n.stateArg=null,c(n)):"word"==t?(g="@font-face"==n.stateArg&&!S.hasOwnProperty(e.current().toLowerCase())||"@counter-style"==n.stateArg&&!T.hasOwnProperty(e.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},L.keyframes=function(t,e,n){return"word"==t?(g="variable","keyframes"):"{"==t?l(n,e,"top"):u(t,e,n)},L.at=function(t,e,n){return";"==t?c(n):"{"==t||"}"==t?h(t,e,n):("word"==t?g="tag":"hash"==t&&(g="builtin"),"at")},L.interpolation=function(t,e,n){return"}"==t?c(n):"{"==t||";"==t?h(t,e,n):("word"==t?g="variable":"variable"!=t&&"("!=t&&")"!=t&&(g="error"),"interpolation")},{startState:function(t){return{tokenize:null,state:f?"block":"top",stateArg:null,context:new a(f?"block":"top",t||0,null)}},token:function(t,e){if(!e.tokenize&&t.eatSpace())return null;var n=(e.tokenize||r)(t,e);return n&&"object"==typeof n&&(p=n[1],n=n[0]),g=n,"comment"!=p&&(e.state=L[e.state](p,t,e)),g},indent:function(t,e){var n=t.context,i=e&&e.charAt(0),r=n.indent;return"prop"!=n.type||"}"!=i&&")"!=i||(n=n.prev),n.prev&&("}"!=i||"block"!=n.type&&"top"!=n.type&&"interpolation"!=n.type&&"restricted_atBlock"!=n.type?(")"!=i||"parens"!=n.type&&"atBlock_parens"!=n.type)&&("{"!=i||"at"!=n.type&&"atBlock"!=n.type)||(r=Math.max(0,n.indent-v)):(n=n.prev,r=n.indent)),r},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:O,fold:"brace"}});var i=["domain","regexp","url","url-prefix"],r=e(i),o=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],s=e(o),a=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],l=e(a),c=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],u=e(c),h=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],d=e(h),f=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],p=e(f),g=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],v=e(g),m=["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"],y=e(m),b=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],x=e(b),w=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],C=e(w),k=i.concat(o).concat(a).concat(c).concat(h).concat(f).concat(b).concat(w);t.registerHelper("hintWords","css",k),t.defineMIME("text/css",{documentTypes:r,mediaTypes:s,mediaFeatures:l,mediaValueKeywords:u,propertyKeywords:d,nonStandardPropertyKeywords:p,fontProperties:v,counterDescriptors:y,colorKeywords:x,valueKeywords:C,tokenHooks:{"/":function(t,e){return!!t.eat("*")&&(e.tokenize=n,n(t,e))}},name:"css"}),t.defineMIME("text/x-scss",{mediaTypes:s,mediaFeatures:l,mediaValueKeywords:u,propertyKeywords:d,nonStandardPropertyKeywords:p,colorKeywords:x,valueKeywords:C,fontProperties:v,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(t,e){return t.eat("/")?(t.skipToEnd(),["comment","comment"]):t.eat("*")?(e.tokenize=n,n(t,e)):["operator","operator"]},":":function(t){return!!t.match(/\s*\{/,!1)&&[null,null]},$:function(t){return t.match(/^[\w-]+/),t.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(t){return!!t.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),t.defineMIME("text/x-less",{mediaTypes:s,mediaFeatures:l,mediaValueKeywords:u,propertyKeywords:d,nonStandardPropertyKeywords:p,colorKeywords:x,valueKeywords:C,fontProperties:v,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(t,e){return t.eat("/")?(t.skipToEnd(),["comment","comment"]):t.eat("*")?(e.tokenize=n,n(t,e)):["operator","operator"]},"@":function(t){return t.eat("{")?[null,"interpolation"]:!t.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)&&(t.eatWhile(/[\w\\\-]/),t.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),t.defineMIME("text/x-gss",{documentTypes:r,mediaTypes:s,mediaFeatures:l,propertyKeywords:d,nonStandardPropertyKeywords:p,fontProperties:v,counterDescriptors:y,colorKeywords:x,valueKeywords:C,supportsAtComponent:!0,tokenHooks:{"/":function(t,e){return!!t.eat("*")&&(e.tokenize=n,n(t,e))}},name:"css",helperType:"gss"})})},function(t,e,n){"use strict";var i=n(0),r=n(30);t.exports=i.Model.extend({defaults:{id:"",content:"",visible:!0,buttons:[],attributes:{}},initialize:function(t){this.btn=this.get("buttons")||[],this.buttons=new r(this.btn),this.set("buttons",this.buttons)}})},function(t,e,n){"use strict";var i=n(0),r=n(112);t.exports=i.Collection.extend({model:r,deactivateAllExceptOne:function(t,e){this.forEach(function(n,i){n!==t&&(n.set("active",!1),e&&n.get("buttons").length&&n.get("buttons").deactivateAllExceptOne(t,e))})},deactivateAll:function(t){var e=t||"";this.forEach(function(t,n){t.get("context")==e&&(t.set("active",!1),t.get("buttons").length&&t.get("buttons").deactivateAll(e))})},disableAllButtons:function(t){var e=t||"";this.forEach(function(t,n){t.get("context")==e&&(t.set("disable",!0),t.get("buttons").length&&t.get("buttons").disableAllButtons(e))})},disableAllButtonsExceptOne:function(t,e){this.forEach(function(n,i){n!==t&&(n.set("disable",!0),e&&n.get("buttons").length&&n.get("buttons").disableAllButtonsExceptOne(t,e))})}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},n=e.model,r=void 0===n?{}:n,s=e.view,a=void 0===s?{}:s,l=this.getType(t);if(l)return new l.view(i({model:new l.model(r),config:o},a))},render:function(){return e.render().el}}}},function(t,e,n){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var n=t.Model,i=t.View;e.default={types:[],initialize:function(t,e){var n=this;this.model=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,r=void 0,o=void 0;if(t&&t.type){var s=n.getBaseType();o=n.getType(t.type),i=o?o.model:s.model,r=o?o.view:s.view}else{var a=n.recognizeType(t);o=a.type,i=o.model,r=o.view,t=a.attributes}var l=new i(t,e);return l.typeView=r,l};var i=this.init&&this.init.bind(this);i&&i()},recognizeType:function(t){for(var e=this.getTypes(),n=0;n0&&void 0!==arguments[0]&&arguments[0];return this.get("properties").each(function(t){return t.clearValue()}),r.prototype.clearValue.apply(this,arguments)},updateValues:function(){var t=this.getFullValue().split(this.get("separator"));this.get("properties").each(function(e,n){var i=t.length;t[n]||t[n%i+(1!=i&&i%2?1:0)]})},getDefaultValue:function(t){var e=this.get("defaults");return e&&!t?e:(e="",this.get("properties").each(function(t,n){return e+=t.getDefaultValue()+" "}),e.trim())},getFullValue:function(){return this.get("detached")?"":this.get("properties").getFullValue()}})},function(t,e,n){"use strict";var i=n(17),r=n(127);t.exports=i.extend({templateInput:function(){var t=this.pfx;this.ppfx;return'\n
    \n \n
    \n
    \n '},init:function(){var t=this.model;this.pfx;t.set("stackIndex",null),this.events["click [data-add-layer]"]="addLayer",this.listenTo(t,"change:stackIndex",this.indexChanged),this.listenTo(t,"updateValue",this.inputValueChanged),this.delegateEvents()},clear:function(t){t&&t.stopPropagation(),this.model.get("layers").reset(),this.model.clearValue(),this.targetUpdated()},targetUpdated:function(){if(this.model.get("detached"))this.checkVisibility();else{for(var t=arguments.length,e=Array(t),n=0;n'},inputClass:function(){return this.ppfx+"field"},holderClass:function(){return this.ppfx+"input-holder"},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.ppfx||"";this.opts=t,this.ppfx=e,this.em=t.target||{},this.listenTo(this.model,"change:value",this.handleModelChange)},elementUpdated:function(){this.model.trigger("el:change")},setValue:function(t){var e=this.model,n=t||e.get("defaults"),i=this.getInputEl();i&&(i.value=n)},handleModelChange:function(t,e,n){this.setValue(e,n)},handleChange:function(t){t.stopPropagation();var e=this.getInputEl().value;this.model.set({value:e},{fromInput:1}),this.elementUpdated()},getInputEl:function(){if(!this.inputEl){var t=this.model.get("defaults")||"";this.inputEl=r('')}return this.inputEl.get(0)},render:function(){var t=this.$el;return t.addClass(this.inputClass()),t.html(this.template()),t.find("."+this.holderClass()).append(this.getInputEl()),this}})},function(t,e,n){"use strict";t.exports=n(5).extend({templateInput:function(){var t=(this.pfx,this.ppfx);return'\n
    \n
    \n '},onRender:function(){var t=this.pfx,e=this.ppfx,n=e+"radio-item-label",i=this.model,r=i.get("property"),o=i.get("list")||i.get("options")||[];if(!this.input&&o&&o.length){var s="";o.forEach(function(i){var o=i.className?i.className+" "+t+"icon "+n:"",a=r+"-"+i.value,l=i.name||i.value,c=i.title?'title="'+i.title+'"':"";s+='\n
    \n \n \n
    \n "});var a=this.el.querySelector("."+e+"field");a.innerHTML='
    '+s+"
    ",this.input=a.firstChild}},getInputValue:function(){var t=this.getCheckedEl();return t?t.value:""},getCheckedEl:function(){var t=this.getInputEl();return t?t.querySelector("input:checked"):""},setValue:function(t){var e=this.model,n=t||e.get("value")||e.getDefaultValue(),i=this.getInputEl(),r=i?i.querySelector('[value="'+n+'"]'):"";if(r)r.checked=!0;else{var o=this.getCheckedEl();o&&(o.checked=!1)}}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(0),o=i(r),s=n(5),a=i(s);o.default.$;t.exports=a.default.extend({templateInput:function(){var t=this.pfx,e=this.ppfx;return'\n
    \n \n
    \n
    \n
    \n
    \n '},initialize:function(){for(var t=arguments.length,e=Array(t),n=0;n"+e+""});var i=this.el.querySelector("#"+t+"input-holder");i.innerHTML="",this.input=i.firstChild}}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{};e=i({},e,{silent:1}),this.inputInst.setValue(t,e)},onRender:function(){if(!this.input){var t=this.ppfx,e=new r({target:this.target,model:this.model,ppfx:t}),n=e.render();this.el.querySelector("."+t+"fields").appendChild(n.el),this.$input=n.inputEl,this.$color=n.colorEl,this.input=this.$input.get(0),this.inputInst=n}}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=Object.assign||function(t){for(var e=1;e\n
    \n
    \n
    \n
    \n
    \n '},inputClass:function(){var t=this.ppfx;return t+"field "+t+"field-color"},holderClass:function(){return this.ppfx+"input-holder"},setValue:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.model,i=n.get("defaults"),r=(0,a.isUndefined)(t)?(0,a.isUndefined)(i)?"":i:t,o=this.getInputEl(),s=this.getColorEl(),l="none"!=r?r:"";o.value=r,s.get(0).style.backgroundColor=l,e.fromTarget&&(s.spectrum("set",l),this.noneColor="none"==r)},getColorEl:function(){if(!this.colorEl){var t=this,e=this.ppfx,n=this.model,i=h('
    '),o=i.get(0).style,s=this.em&&this.em.config?this.em.config.el:"",a=this.em&&this.em.getConfig&&this.em.getConfig("colorPicker")||{},l=function(t){return(1==t.getAlpha()?t.toHexString():t.toRgbString()).replace(/ /g,"")},c=0,u=void 0;this.$el.find("[data-colorp-c]").append(i),i.spectrum(r({containerClassName:e+"one-bg "+e+"two-color",appendTo:s||"body",maxSelectionSize:8,showPalette:!0,showAlpha:!0,chooseText:"Ok",cancelText:"⨯",palette:[]},a,{move:function(t){var e=l(t);o.backgroundColor=e,n.setValueFromInput(e,0)},change:function(e){c=1;var i=l(e);o.backgroundColor=i,n.setValueFromInput(i),t.noneColor=0},show:function(t){c=0,u=l(t)},hide:function(e){!c&&u&&(t.noneColor&&(u=""),o.backgroundColor=u,i.spectrum("set",u),n.setValueFromInput(u,0))}})),this.colorEl=i}return this.colorEl},render:function(){return u.prototype.render.call(this),this.getColorEl(),this}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(5),s=r.default.$;t.exports=o.extend({templateInput:function(){var t=this.pfx;this.ppfx;return'\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n '},init:function(){var t=this.em;this.modal=t.get("Modal"),this.am=t.get("AssetManager"),this.events["click #"+this.pfx+"close"]="removeFile",this.events["click #"+this.pfx+"images"]="openAssetManager",this.delegateEvents()},onRender:function(){if(!this.$input){var t=this.model.getDefaultValue();this.$input=s('')}this.$preview||(this.$preview=this.$el.find("#"+this.pfx+"preview-file")),this.$previewBox||(this.$previewBox=this.$el.find("#"+this.pfx+"preview-box")),this.setValue(this.componentValue,0)},setValue:function(t,e){o.prototype.setValue.apply(this,arguments),this.setPreviewView(t&&t!=this.model.getDefaultValue()),this.setPreview(t)},setPreviewView:function(t){var e=this.$previewBox;e&&e[t?"addClass":"removeClass"](this.pfx+"show")},spreadUrl:function(t){this.model.set("value",t),this.setPreviewView(1)},setPreview:function(t){var e=this.$preview;t=t&&t.indexOf("url(")<0?"url("+t+")":t,e&&e.css("background-image",t)},cleanValue:function(){this.setPreviewView(0),this.model.set({value:""},{silent:!0})},removeFile:function(){this.model.set("value",this.model.getDefaultValue());for(var t=arguments.length,e=Array(t),n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return this.set("options",t),this},addOption:function(t){if(t){var e=this.getOptions();this.setOptions([].concat(i(e),[t]))}return this}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return this.set({value:void 0,unit:void 0},t),this},parseValue:function(t){var e=o.prototype.parseValue.apply(this,arguments),n=this.input.validateInputValue(e.value,{deepCheck:1}),i=n.value,r=n.unit;return e.value=i,e.unit=r,e},getFullValue:function(){var t=this.get("value"),e=this.get("unit");return t=(0,r.isUndefined)(t)?"":t,e=!(0,r.isUndefined)(e)&&t?e:"",t=""+t+e,o.prototype.getFullValue.apply(this,[t])}})},function(t,e,n){"use strict";t.exports=n(45).extend({events:{"click [data-toggle=asset-remove]":"onRemove",click:"onClick",dblclick:"onDblClick"},getPreview:function(){var t=this.pfx;return'\n
    \n
    \n '},getInfo:function(){var t=this.pfx,e=this.model,n=e.get("name"),i=e.get("width"),r=e.get("height"),o=e.get("unitDim"),s=i&&r?i+"x"+r+o:"";return n=n||e.getFilename(),'\n
    '+n+'
    \n
    '+s+"
    \n "},init:function(t){var e=this.pfx;this.className+=" "+e+"asset-image"},onClick:function(){var t=this.config.onClick,e=this.model;this.collection.trigger("deselectAll"),this.$el.addClass(this.pfx+"highlight"),"function"==typeof t?t(e):this.updateTarget(this.collection.target)},onDblClick:function(){var t=this.em,e=this.config.onDblClick,n=this.model;"function"==typeof e?e(n):(this.updateTarget(this.collection.target),t&&t.get("Modal").close());var i=this.collection.onSelect;"function"==typeof i&&i(this.model)},onRemove:function(t){t.stopImmediatePropagation(),this.model.collection.remove(this.model)}})},function(t,e,n){"use strict";(function(e){var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=r.default.View.extend({initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t,this.collection=t.collection;var e=t.config||{};this.config=e,this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.em=e.em,this.className=this.pfx+"asset",this.listenTo(this.model,"destroy remove",this.remove),this.model.view=this;var n=this.init&&this.init.bind(this);n&&n(t)},template:function(){var t=this.pfx;return'\n
    \n '+this.getPreview()+'\n
    \n
    \n '+this.getInfo()+'\n
    \n
    \n ⨯\n
    \n '},updateTarget:function(t){t&&t.set&&(t.set("attributes",e.clone(t.get("attributes"))),t.set("src",this.model.get("src")))},getPreview:function(){return""},getInfo:function(){return""},render:function(){var t=this.el;return t.innerHTML=this.template(this,this.model),t.className=this.className,this}})}).call(e,n(1))},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(26),c=i(l);t.exports=a.default.View.extend({template:o.default.template('\n
    \n
    <%= title %>
    \n multiple/>\n
    \n
    \n '),events:{},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t;var e=t.config||{};this.config=e,this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.target=this.options.globalCollection||{},this.uploadId=this.pfx+"uploadFile",this.disabled=void 0!==e.disableUpload?e.disableUpload:!e.upload&&!e.embedAsBase64,this.events["change #"+this.uploadId]="uploadFile";var n=e.uploadFile;n?this.uploadFile=n.bind(this):e.embedAsBase64&&(this.uploadFile=this.constructor.embedAsBase64),this.delegateEvents()},onUploadStart:function(){var t=this.config.em;t&&t.trigger("asset:upload:start")},onUploadEnd:function(t){var e=this.config.em;e&&e.trigger("asset:upload:end",t)},onUploadError:function(t){var e=this.config.em;console.error(t),this.onUploadEnd(t),e&&e.trigger("asset:upload:error",t)},onUploadResponse:function(t,e){var n=this.config.em,i=this.config,r=this.target,o="string"==typeof t?JSON.parse(t):t;n&&n.trigger("asset:upload:response",o),i.autoAdd&&r&&r.add(o.data,{at:0}),this.onUploadEnd(t),e&&e(o)},uploadFile:function(t,e){for(var n=this,i=t.dataTransfer?t.dataTransfer.files:t.target.files,r=new FormData,o=this.config,s=o.params,a=0;a'+i.dropzoneContent+""),h(),"draggable"in o&&[o,a].forEach(function(t){t.ondragover=d,t.ondragleave=f,t.ondrop=p})},render:function(){return this.$el.html(this.template({title:this.config.uploadText,uploadId:this.uploadId,disabled:this.disabled,pfx:this.pfx})),this.initDrop(),this.$el.attr("class",this.pfx+"file-uploader"),this}},{embedAsBase64:function(t,e){var n=this,i=t.dataTransfer?t.dataTransfer.files:t.target.files,r={data:[]};if(!FileReader)return void this.onUploadError(new Error("Unsupported platform, FileReader is not defined"));var o=[],s=/^(.+)\/(.+)$/,a=!0,l=!1,c=void 0;try{for(var u,h=i[Symbol.iterator]();!(a=(u=h.next()).done);a=!0){var d=u.value;!function(t){var e=new Promise(function(e,n){var i=new FileReader;i.addEventListener("load",function(r){var o=void 0,a=t.name,l=s.exec(t.type);if("image"===(o=l?l[1]:t.type)){var c={src:i.result,name:a,type:o,height:0,width:0},u=new Image;u.addEventListener("error",function(t){n(t)}),u.addEventListener("load",function(){c.height=u.height,c.width=u.width,e(c)}),u.src=c.src}else e(o?{src:i.result,name:a,type:o}:i.result)}),i.addEventListener("error",function(t){n(t)}),i.addEventListener("abort",function(t){n("Aborted")}),i.readAsDataURL(t)});o.push(e)}(d)}}catch(t){l=!0,c=t}finally{try{!a&&h.return&&h.return()}finally{if(l)throw c}}Promise.all(o).then(function(t){r.data=t,n.onUploadResponse(r,e)},function(t){n.onUploadError(t)})}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(48),c=i(l),u=n(11);t.exports=a.default.Model.extend(c.default).extend({defaults:{selectors:{},selectorsAdd:"",style:{},mediaText:"",state:"",stylable:!0,atRuleType:"",singleAtRule:0,important:0},initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.config=t||{};var n=e.em,i=this.config.selectors||[];if(this.em=n,n){var r=n.get("SelectorManager"),o=[];i.forEach(function(t){o.push(r.add(t))}),i=o}this.set("selectors",new u(i))},getAtRule:function(){var t=this.get("atRuleType"),e=this.get("mediaText"),n=t?"@"+t:e?"@media":"";return n+(e&&n?" "+e:"")},selectorsToString:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=[],n=this.get("state"),i=this.get("selectorsAdd"),r=this.get("selectors").getFullString(),o=n?":"+n:"";return r&&e.push(""+r+o),i&&!t.skipAdd&&e.push(i),e.join(", ")},getDeclaration:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e="",n=this.selectorsToString(),i=this.styleToString(t),r=this.get("singleAtRule");return(n||r)&&i&&(e=r?i:n+"{"+i+"}"),e},toCSS:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e="",n=this.getAtRule(),i=this.getDeclaration(t);return i&&(e=i),n&&e&&(e=n+"{"+e+"}"),e},toJSON:function(){for(var t=arguments.length,e=Array(t),n=0;n3&&void 0!==arguments[3]?arguments[3]:{},r=e||"",s=n||"",a=i.selectorsAdd||"",l=i.atRuleType||"";t instanceof Array||t.models||(t=[t]);var c=o.default.map(t.models||t,function(t){return t.get("name")}),u=o.default.map(this.get("selectors").models,function(t){return t.get("name")});if(c.length!==u.length)return!1;for(var h=0;h0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,r.isString)(e)&&(e=l(e));var s=this.getStyle(),a=i({},e);this.set("style",a,n);var c=(0,o.shallowDiff)(s,a);return(0,r.keys)(c).forEach(function(e){var n=t.em;t.trigger("change:style:"+e),n&&(n.trigger("styleable:change",t,e),n.trigger("styleable:change:"+e,t,e))}),a},addStyle:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};"string"==typeof t?t={prop:e}:n=e||{},t=this.extendStyle(t),this.setStyle(t,n)},removeStyle:function(t){var e=this.getStyle();delete e[t],this.setStyle(e)},styleToString:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=[],n=this.getStyle();for(var i in n){var o=t.important,s=(0,r.isArray)(o)?o.indexOf(i)>=0:o,a=n[i]+(s?" !important":"");e.push(i+":"+a+";")}return e.join("")}}},function(t,e,n){"use strict";t.exports=n(0).View.extend({tagName:"style",initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.config=t.config||{};var e=this.model;this.listenTo(e,"change:style change:state change:mediaText",this.render),this.listenTo(e,"destroy remove",this.remove),this.listenTo(e.get("selectors"),"change",this.render)},render:function(){var t=this.model,e=t.get("important");return this.el.innerHTML=this.model.toCSS({important:e}),this}})},function(t,e,n){"use strict";var i=n(0);t.exports=i.View.extend({itemView:"",itemsView:"",itemType:"type",initialize:function(t,e){this.config=e||{}},addTo:function(t){this.add(t)},add:function(t,e){var n=e||null,i=this.itemView,r=t.get(this.itemType);this.itemsView&&this.itemsView[r]&&(i=this.itemsView[r]);var o=new i({model:t,config:this.config},this.config),s=o.render().el;n?n.appendChild(s):this.$el.append(s)},render:function(){var t=document.createDocumentFragment();return this.$el.empty(),this.collection.length&&this.collection.each(function(e){this.add(e,t)},this),this.$el.append(t),this}})},function(t,e,n){"use strict";var i=n(1),r=n(0);t.exports=r.Collection.extend({initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.listenTo(this,"add",this.onAdd),this.config=e.config,this.em=e.em,this.model=function(t,n){var i,r=e.componentTypes;n.em=e.em,n.config=e.config,n.componentTypes=r;for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:{};if("string"==typeof t){var n=this.em.get("CssComposer"),i=this.em.get("Parser").parseHtml(t);if(t=i.html,i.css&&n){var o=e.avoidUpdateStyle;n.addCollection(i.css,{extend:1,avoidUpdateStyle:o})}}return r.Collection.prototype.add.apply(this,[t,e])},onAdd:function(t,e,n){var r=this.em,o=t.getStyle(),s=r&&r.getConfig("avoidInlineStyle");if(!(0,i.isEmpty)(o)&&!s&&r&&r.get&&r.getConfig("forceClass")){var a=t.cid;r.get("CssComposer").setClassRule(a,o);t.setStyle({}),t.addClass(a)}}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(1);t.exports=r.default.View.extend({initialize:function(t){this.opts=t||{},this.config=t.config||{};var e=this.collection;this.listenTo(e,"add",this.addTo),this.listenTo(e,"reset",this.resetChildren),this.listenTo(e,"remove",this.removeChildren)},removeChildren:function(t){var e=this.config.em,n=t.view;if(n){n.remove.apply(n);var i=n.childrenView;i&&i.stopListening(),e&&e.trigger("component:remove",t)}},addTo:function(t){var e=(arguments.length>1&&void 0!==arguments[1]&&arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),n=this.config.em,i=this.collection.indexOf(t);this.addToCollection(t,null,i),n&&!e.temporary&&n.trigger("component:add",t)},addToCollection:function(t,e,i){this.compView||(this.compView=n(3));for(var r=e||null,s=this.compView,a=this.opts.componentTypes,l=t.get("type"),c=0;c0&&void 0!==arguments[0]?arguments[0]:{};return n=r({},s.default,e),n.stylePrefix=e.pStylePrefix,t=n.em,this},getConfig:function(){return n},onLoad:function(){e=new l.default({level:0,config:n,opened:n.opened||{},model:t.get("DomComponents").getWrapper()}),t&&t.on("component:selected",this.componentChanged),this.componentChanged()},postRender:function(){var t=n.appendTo,e=n.root;if(e&&this.setRoot(e),t){((0,c.isElement)(t)?t:document.querySelector(t)).appendChild(this.render())}},setRoot:function(t){return e.setRoot(t),this},getRoot:function(){return e.model},getAll:function(){return e},componentChanged:function(e){if(!(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).fromLayers){var i=t.get("opened"),r=t.getSelected(),o=n.scrollLayers,s=r&&r.collection?r.collection.parent:null;for(var a in i)i[a].set("open",0);for(;s;)s.set("open",1),i[s.cid]=s,s=s.collection?s.collection.parent:null;if(r&&o){var l=r.viewLayer&&r.viewLayer.el;l&&l.scrollIntoView(o)}}},render:function(){return e.render().el}}}},function(t,e,n){"use strict";var i=n(1),r=n(2),o=n(0),s=function(t){return t&&t.__esModule?t:{default:t}}(o),a=n(3),l=s.default.$,c=void 0;t.exports=s.default.View.extend({events:{"mousedown [data-toggle-move]":"startSort","click [data-toggle-visible]":"toggleVisibility","click [data-toggle-select]":"handleSelect","mouseover [data-toggle-select]":"handleHover","click [data-toggle-open]":"toggleOpening","dblclick [data-name]":"handleEdit","focusout [data-name]":"handleEditEnd"},template:function(t){var e=this.pfx,n=this.ppfx,i=this.config.hidable,r=this.countChildren(t),o=r?"":this.clsNoChild,s=this.clsTitle+" "+o,a=this.clsTitleC+" "+n+"one-bg",l=this.clsCaret+" fa fa-chevron-right",c=this.inputNameCls+" "+n+"no-app",u=this.level+1,h=30+10*u+"px",d=t.getName();return"\n "+(i?'':"")+'\n
    \n
    \n
    \n \n '+t.getIcon()+'\n '+d+'\n
    \n
    \n
    \n
    '+(r||"")+'
    \n
    \n \n
    \n
    '},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.opt=t,this.level=t.level,this.config=t.config,this.em=t.config.em,this.ppfx=this.em.get("Config").stylePrefix,this.sorter=t.sorter||"",this.pfx=this.config.stylePrefix;var e=this.pfx,n=this.ppfx,i=this.model,r=i.get("components");i.set("open",!1),this.listenTo(r,"remove add change reset",this.checkChildren),this.listenTo(i,"change:status",this.updateStatus),this.listenTo(i,"change:open",this.updateOpening),this.listenTo(i,"change:style:display",this.updateVisibility),this.className=e+"layer no-select "+n+"two-color",this.inputNameCls=n+"layer-name",this.clsTitleC=e+"layer-title-c",this.clsTitle=e+"layer-title",this.clsCaret=e+"layer-caret",this.clsCount=e+"layer-count",this.clsMove=e+"layer-move",this.clsChildren=e+"layer-children",this.clsNoChild=e+"layer-no-chld",this.$el.data("model",i),this.$el.data("collection",r),i.viewLayer=this},getVisibilityEl:function(){return this.eyeEl||(this.eyeEl=this.$el.children("."+this.pfx+"layer-vis")),this.eyeEl},updateVisibility:function(){var t=this.pfx,e=this.model,n=t+"layer-hidden",i="none"==e.getStyle().display,r=i?"addClass":"removeClass";this.$el[r](n),this.getVisibilityEl()[r]("fa-eye-slash")},toggleVisibility:function(t){t&&t.stopPropagation();var e=this.model,n=e.getStyle();"none"==n.display?delete n.display:n.display="none",e.setStyle(n)},handleEdit:function(t){t&&t.stopPropagation();var e=this.getInputName();e.contentEditable=!0,e.focus()},handleEditEnd:function(t){t&&t.stopPropagation();var e=this.getInputName(),n=e.textContent;e.contentEditable=!1,this.model.set({name:n})},getInputName:function(){return this.inputName||(this.inputName=this.el.querySelector("."+this.inputNameCls)),this.inputName},updateOpening:function(){var t=this.opt.opened||{},e=this.model;e.get("open")?(this.$el.addClass("open"),this.getCaret().addClass("fa-chevron-down"),t[e.cid]=e):(this.$el.removeClass("open"),this.getCaret().removeClass("fa-chevron-down"),delete t[e.cid])},toggleOpening:function(t){t.stopPropagation(),this.model.get("components").length&&this.model.set("open",!this.model.get("open"))},handleSelect:function(t){t.stopPropagation();var e=this.em,n=this.config;if(e){var i=this.model;e.setSelected(i,{fromLayers:1});var r=n.scrollCanvas;r&&e.get("Canvas").scrollTo(i,r)}},handleHover:function(t){t.stopPropagation();var e=this.em,n=this.config,i=this.model;e&&n.showHover&&e.setHovered(i,{fromLayers:1})},startSort:function(t){t.stopPropagation();var e=this.sorter;0===t.button&&e&&e.startSort(t.target)},freeze:function(){this.$el.addClass(this.pfx+"opac50"),this.model.set("open",0)},unfreeze:function(){this.$el.removeClass(this.pfx+"opac50")},updateStatus:function(t){a.prototype.updateStatus.apply(this,[{avoidHover:!this.config.highlightHover}])},isVisible:function(){var t=this.model.get("style"),e=t.display;if(!e||"none"!=e)return 1},checkChildren:function(){var t=this.model,e=this.countChildren(t),n=(this.pfx,this.clsNoChild),i=this.$el.children("."+this.clsTitleC).children("."+this.clsTitle);this.cnt||(this.cnt=this.$el.children("."+this.clsCount)),e?(i.removeClass(n),this.cnt.html(e)):(i.addClass(n),this.cnt.empty(),t.set("open",0))},countChildren:function(t){var e=0;return t.get("components").each(function(t){var n=this.opt.isCountable,i=this.config.hideTextnode;n&&!n(t,i)||e++},this),e},getCaret:function(){if(!this.caret||!this.caret.length){this.pfx;this.caret=this.$el.children("."+this.clsTitleC).find("."+this.clsCaret)}return this.caret},setRoot:function(t){t=(0,i.isString)(t)?this.em.getWrapper().find(t)[0]:t;var e=(0,r.getModel)(t,l);e&&(this.stopListening(),this.model=e,this.initialize(this.opt),this.render())},render:function(){var t=this.model,e=this.pfx,r=this.isVisible(),o=this.$el.empty(),s=this.level+1;(0,i.isUndefined)(c)&&(c=n(182));var a=new c({collection:t.get("components"),config:this.config,sorter:this.sorter,opened:this.opt.opened,parent:t,level:s}).render().$el;return this.config.showWrapper||1!==s?(o.html(this.template(t)),o.find("."+this.clsChildren).append(a)):o.append(a),t.get("draggable")&&this.config.sortable||o.children("."+this.clsMove).remove(),!r&&(this.className+=" "+e+"hide"),o.attr("class",this.className),this.updateOpening(),this.updateStatus(),this.updateVisibility(),this}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=r.default.$;t.exports={startSelectPosition:function(t,e){this.isPointed=!1;var n=this.editorModel.get("Utils");n&&!this.sorter&&(this.sorter=new n.Sorter({container:this.getCanvasBody(),placer:this.canvas.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,direction:"a",document:e,wmargin:1,nested:1,em:this.editorModel,canvasRelative:1})),t&&this.sorter.startSort(t)},getOffsetDim:function(){var t=this.offset(this.canvas.getFrameEl()),e=this.offset(this.canvas.getElement());return{top:t.top-e.top,left:t.left-e.left}},stopSelectPosition:function(){this.posTargetCollection=null,this.posIndex="after"==this.posMethod&&0!==this.cDim.length?this.posIndex+1:this.posIndex,this.sorter&&(this.sorter.moved=0,this.sorter.endMove()),this.cDim&&(this.posIsLastEl=0!==this.cDim.length&&"after"==this.posMethod&&this.posIndex==this.cDim.length,this.posTargetEl=0===this.cDim.length?o(this.outsideElem):!this.posIsLastEl&&this.cDim[this.posIndex]?o(this.cDim[this.posIndex][5]).parent():o(this.outsideElem),this.posTargetModel=this.posTargetEl.data("model"),this.posTargetCollection=this.posTargetEl.data("model-comp"))},enable:function(){this.startSelectPosition()},nearFloat:function(t,e,n){var i=t||0,r=e||"before",o=n.length,s=0!==o&&"after"==r&&i==o;return 0!==o&&(!s&&!n[i][4]||n[i-1]&&!n[i-1][4]||s&&!n[i-1][4])?1:0},run:function(){this.enable()},stop:function(){this.stopSelectPosition(),this.$wrapper.css("cursor",""),this.$wrapper.unbind()}}},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=(i(s),n(23));t.exports=o.default.extend({},a,{init:function(){for(var t=arguments.length,e=Array(t),n=0;n0&&void 0!==arguments[0]?arguments[0]:{},o=i.container;if(!o)throw new Error("'container' is required");i=r({},n,i),i.el=(0,c.isElement)(o)?o:document.querySelector(o);var s=new l.default(i).init();return i.plugins.forEach(function(e){var n=t.get(e);n?n(s,i.pluginsOpts[e]||{}):console.warn("Plugin "+e+" not found")}),s.getModel().loadOnStart(),i.autorender&&s.render(),e.push(s),s}}}()},function(t,e,n){"use strict";var i=n(10),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=function(t){var e=t||{},i=n(62),o=n(63),s=n(229);for(var a in i)a in e||(e[a]=i[a]);e.pStylePrefix=e.stylePrefix;var l=new o(e),c=new s({model:l,config:e});return{$:r.default,editor:l,DomComponents:l.get("DomComponents"),LayerManager:l.get("LayerManager"),CssComposer:l.get("CssComposer"),StorageManager:l.get("StorageManager"),AssetManager:l.get("AssetManager"),BlockManager:l.get("BlockManager"),TraitManager:l.get("TraitManager"),SelectorManager:l.get("SelectorManager"),CodeManager:l.get("CodeManager"),Commands:l.get("Commands"),Keymaps:l.get("Keymaps"),Modal:l.get("Modal"),Panels:l.get("Panels"),StyleManager:l.get("StyleManager"),Canvas:l.get("Canvas"),UndoManager:l.get("UndoManager"),DeviceManager:l.get("DeviceManager"),RichTextEditor:l.get("RichTextEditor"),Utils:l.get("Utils"),Config:l.get("Config"),init:function(){return l.init(this),this},getConfig:function(t){return l.getConfig(t)},getHtml:function(t){return l.getHtml(t)},getCss:function(t){return l.getCss(t)},getJs:function(){return l.getJs()},getComponents:function(){return l.get("DomComponents").getComponents()},setComponents:function(t){return l.setComponents(t),this},addComponents:function(t,e){return this.getComponents().add(t,e)},getStyle:function(){return l.get("CssComposer").getAll()},setStyle:function(t){return l.setStyle(t),this},getSelected:function(){return l.getSelected()},getSelectedAll:function(){return l.getSelectedAll()},getSelectedToStyle:function(){var t=l.getSelected();if(t)return this.StyleManager.getModelToStyle(t)},select:function(t){return l.setSelected(t),this},selectAdd:function(t){return l.addSelected(t),this},selectRemove:function(t){return l.removeSelected(t),this},selectToggle:function(t){return l.toggleSelected(t),this},setDevice:function(t){return l.set("device",t),this},getDevice:function(){return l.get("device")},runCommand:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=void 0,i=l.get("Commands").get(t);return i&&(n=i.callRun(this,e)),n},stopCommand:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=void 0,i=l.get("Commands").get(t);return i&&(n=i.callStop(this,e)),n},store:function(t){return l.store(t)},load:function(t){return l.load(t)},getContainer:function(){return e.el},getDirtyCount:function(){return l.getDirtyCount()},refresh:function(){l.refreshCanvas()},setCustomRte:function(t){this.RichTextEditor.customRte=t},on:function(t,e){return l.on(t,e)},off:function(t,e){return l.off(t,e)},trigger:function(t){return l.trigger.apply(l,arguments)},destroy:function(){return l.destroyAll()},getEl:function(){return c.el},getModel:function(){return l},render:function(){var t=this;return l.on("loaded",function(){t.UndoManager.clear(),l.get("modules").forEach(function(t){t.postRender&&t.postRender(c)})}),c.render(),c.el}}}},function(t,e,n){"use strict";t.exports={stylePrefix:"gjs-",components:"",style:"",fromElement:0,noticeOnUnload:!0,showOffsets:!1,showOffsetsSelected:!1,forceClass:!0,height:"900px",width:"100%",baseCss:"\n * {\n box-sizing: border-box;\n }\n html, body, #wrapper {\n min-height: 100%;\n }\n body {\n margin: 0;\n height: 100%;\n background-color: #fff\n }\n #wrapper {\n overflow: auto;\n overflow-x: hidden;\n }\n\n * ::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.1)\n }\n\n * ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.2)\n }\n\n * ::-webkit-scrollbar {\n width: 10px\n }\n ",protectedCss:"* { box-sizing: border-box; } body {margin: 0;}",canvasCss:"",defaultCommand:"select-comp",showToolbar:1,allowScripts:0,showDevices:1,devicePreviewMode:0,mediaCondition:"max-width",tagVarStart:"{[ ",tagVarEnd:" ]}",keepEmptyTextNodes:0,jsInHtml:!0,nativeDnD:1,multipleSelection:1,exportWrapper:0,wrappesIsBody:1,avoidInlineStyle:0,avoidDefaults:0,clearStyles:0,el:"",undoManager:{},assetManager:{},canvas:{},layers:{},storageManager:{},rte:{},domComponents:{},modal:{},codeManager:{},panels:{},commands:{},cssComposer:{},selectorManager:{},deviceManager:{devices:[{name:"Desktop",width:""},{name:"Tablet",width:"768px",widthMedia:"992px"},{name:"Mobile landscape",width:"568px",widthMedia:"768px"},{name:"Mobile portrait",width:"320px",widthMedia:"480px"}]},styleManager:{sectors:[{name:"General",open:!1,buildProps:["float","display","position","top","right","left","bottom"]},{name:"Dimension",open:!1,buildProps:["width","height","max-width","min-height","margin","padding"]},{name:"Typography",open:!1,buildProps:["font-family","font-size","font-weight","letter-spacing","color","line-height","text-align","text-shadow"],properties:[{property:"text-align",list:[{value:"left",className:"fa fa-align-left"},{value:"center",className:"fa fa-align-center"},{value:"right",className:"fa fa-align-right"},{value:"justify",className:"fa fa-align-justify"}]}]},{name:"Decorations",open:!1,buildProps:["border-radius-c","background-color","border-radius","border","box-shadow","background"]},{name:"Extra",open:!1,buildProps:["transition","perspective","transform"]}]},blockManager:{},traitManager:{},textViewCode:"Code",keepUnusedStyles:0}},function(t,e,n){"use strict";function i(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e0&&void 0!==arguments[0]?arguments[0]:{};this.config=e,this.set("Config",e),this.set("modules",[]),this.set("toLoad",[]),this.set("storables",[]),e.el&&e.fromElement&&(this.config.components=e.el.innerHTML),this.attrsOrig=e.el?[].concat(i(e.el.attributes)).reduce(function(t,e){return t[e.nodeName]=e.nodeValue,t},{}):"",a.forEach(function(e){return t.loadModule(e)}),this.on("change:componentHovered",this.componentHovered,this),this.on("change:changesCount",this.updateChanges,this),[{from:"change:selectedComponent",to:"component:toggled"}].forEach(function(e){var n=e.from,i=e.to;t.listenTo(t,n,function(){for(var e=arguments.length,r=Array(e),o=0;o0&&void 0!==arguments[0]?arguments[0]:null,n=this.get("StorageManager");this.get("toLoad").forEach(function(t){t.onLoad()});var i=function(){t.get("modules").forEach(function(e){return e.postLoad&&e.postLoad(t)}),e&&e()};n&&n.canAutoload()?this.load(i):i()},updateChanges:function(){var t=this.get("StorageManager"),e=this.get("changesCount");this.config.noticeOnUnload&&e?window.onbeforeunload=function(t){return 1}:window.onbeforeunload=null,t.isAutosave()&&e>=t.getStepsBeforeSave()&&this.store()},loadModule:function(t){var e=this.config,n=new t,i=n.name.charAt(0).toLowerCase()+n.name.slice(1),o=e[i]||e[n.name]||{};o.pStylePrefix=e.pStylePrefix||"";var s=this.get("StorageManager");if(n.storageKey&&n.store&&n.load&&s){o.stm=s;var a=this.get("storables");a.push(n),this.set("storables",a)}return o.em=this,n.init(r({},o)),!n.private&&this.set(n.name,n),n.onLoad&&this.get("toLoad").push(n),this.get("modules").push(n),this},init:function(t){this.set("Editor",t)},getEditor:function(){return this.get("Editor")},handleUpdates:function(t,e){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};i.temporary||(u&&clearInterval(u),u=setTimeout(function(){i.avoidStore||n.set("changesCount",n.get("changesCount")+1,i)},0))},componentHovered:function(t,e,n){var i=this.previous("componentHovered");i&&this.trigger("component:unhovered",i,n),e&&this.trigger("component:hovered",e,n)},getSelected:function(){return this.get("selected").last()},getSelectedAll:function(){return this.get("selected").models},setSelected:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(0,o.isArray)(t),r=i?t:[t],a=this.get("selected");i&&this.removeSelected(a.filter(function(t){return!(0,o.contains)(r,t)})),r.forEach(function(t){var r=(0,s.getModel)(t,h);r&&!r.get("selectable")||(!i&&e.removeSelected(a.filter(function(t){return t!==r})),e.addSelected(r,n))})},addSelected:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(0,s.getModel)(t,h);((0,o.isArray)(i)?i:[i]).forEach(function(t){t&&!t.get("selectable")||e.get("selected").push(t,n)})},removeSelected:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.get("selected").remove((0,s.getModel)(t,h),e)},toggleSelected:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(0,s.getModel)(t,h);((0,o.isArray)(i)?i:[i]).forEach(function(t){e.get("selected").contains(t)?e.removeSelected(t,n):e.addSelected(t,n)})},setHovered:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(0,s.getModel)(t,h);n&&!n.get("hoverable")||(e.forceChange&&this.set("componentHovered",""),this.set("componentHovered",n,e))},setComponents:function(t){return this.get("DomComponents").setComponents(t)},getComponents:function(){var t=this.get("DomComponents"),e=this.get("CodeManager");if(t&&e){var n=t.getComponents();return e.getCode(n,"json")}},setStyle:function(t){for(var e=this.get("CssComposer").getAll(),n=0,i=e.length;n"+i+"<\/script>":""},getCss:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.config,n=e.wrappesIsBody,i=t.avoidProtected,r=(0,o.isUndefined)(t.keepUnusedStyles)?e.keepUnusedStyles:t.keepUnusedStyles,s=this.get("CssComposer"),a=this.get("DomComponents").getComponent();return(i?"":e.protectedCss)+this.get("CodeManager").getCode(a,"css",{cssc:s,wrappesIsBody:n,keepUnusedStyles:r})},getJs:function(){var t=this.get("DomComponents").getWrapper();return this.get("CodeManager").getCode(t,"js").trim()},store:function(t){var e=this,n=this.get("StorageManager"),i={};if(n)return this.get("storables").forEach(function(t){var e=t.store(1);for(var n in e)i[n]=e[n]}),n.store(i,function(n){t&&t(n),e.set("changesCount",0),e.trigger("storage:store",i)}),i},load:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.getCacheLoad(1,function(n){t.get("storables").forEach(function(t){return t.load(n)}),e&&e(n)})},getCacheLoad:function(t,e){var n=this,i=t?1:0;if(this.cacheLoad&&!i)return this.cacheLoad;var r=this.get("StorageManager"),o=[];if(!r)return{};this.get("storables").forEach(function(t){var e=t.storageKey;e="function"==typeof e?e():e,(e instanceof Array?e:[e]).forEach(function(t){o.push(t)})}),r.load(o,function(t){n.cacheLoad=t,e&&e(t),setTimeout(function(){return n.trigger("storage:load",t)},0)})},getDeviceModel:function(){var t=this.get("device");return this.get("DeviceManager").get(t)},runDefault:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.get("Commands").get(this.config.defaultCommand);e&&!this.defaultRunning&&(e.stop(this,this,t),e.run(this,this,t),this.defaultRunning=1)},stopDefault:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.get("Commands").get(this.config.defaultCommand);e&&(e.stop(this,this,t),this.defaultRunning=0)},refreshCanvas:function(){this.set("canvasOffset",this.get("Canvas").getOffset())},clearSelection:function(t){(t||window).getSelection().removeAllRanges()},getCurrentMedia:function(){var t=this.config,e=this.getDeviceModel(),n=t.mediaCondition,i=t.devicePreviewMode,r=e&&e.get("widthMedia");return e&&r&&!i?"("+n+": "+r+")":""},getWrapper:function(){return this.get("DomComponents").getWrapper()},getDirtyCount:function(){return this.get("changesCount")},destroyAll:function(){var t=this.attributes,e=t.DomComponents,n=t.CssComposer,i=t.UndoManager,r=t.Panels,o=t.Canvas;e.clear(),n.clear(),i.clear().removeAll(),r.getPanels().reset(),o.getCanvasView().remove(),this.view.remove(),this.stopListening(),h(this.config.el).empty().attr(this.attrsOrig)},setEditing:function(t){return this.set("editing",t),this},isEditing:function(){return!!this.get("editing")},data:function(t,e,n){if(t["_gjs-data"]||(t["_gjs-data"]={}),(0,o.isUndefined)(n))return t["_gjs-data"][e];t["_gjs-data"][e]=n}})},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){"use strict";t.exports=function(){var t=n(66),e=n(67),i=n(68);return{name:"Utils",init:function(){return this},Sorter:t,Resizer:e,Dragger:i}}},function(t,e,n){"use strict";(function(e){var i=Object.assign||function(t){for(var e=1;es+c-10||ra+l-10)return 1},getCurrentPos:function(){var t=this.eventMove;return{x:t.pageX||0,y:t.pageY||0}},getDim:function(t){var e,n,i,r;if(this.canvasRelative&&this.em){var o=this.em.get("Canvas").getElementPos(t),s=window.getComputedStyle(t),a=parseFloat(s.marginTop),l=parseFloat(s.marginBottom),c=parseFloat(s.marginRight),u=parseFloat(s.marginLeft);e=o.top-a,n=o.left-u,i=o.height+a+l,r=o.width+u+c}else{var h=this.offset(t);e=this.relative?t.offsetTop:h.top-(this.wmargin?-1:1)*this.elT,n=this.relative?t.offsetLeft:h.left-(this.wmargin?-1:1)*this.elL,i=t.offsetHeight,r=t.offsetWidth}return[e,n,i,r]},getChildrenDim:function(t){var e=[];if(!t)return e;var n=this.getTargetModel(t);n&&n.view&&!this.ignoreViewChildren&&(t=n.view.getChildrenContainer());for(var i=t.children,r=0,o=i.length;rs||s>a+c-r||l+r>o||o>l+u-r)&&(i=1),!!i},findPosition:function(t,e,n){for(var i={index:0,method:"before"},r=0,o=0,s=0,a=0,l=0,c=0,u=0,h=0,d=0,f=t.length;do||a&&c>=a||r&&s0&&void 0!==arguments[0]?arguments[0]:{};return i(this,t),this.setOptions(e),(0,o.bindAll)(this,"handleKeyDown","handleMouseDown","move","stop"),this}return r(t,[{key:"getConfig",value:function(){return this.opts}},{key:"setOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.opts=(0,o.defaults)(t,a),this.setup()}},{key:"setup",value:function(){var t=this.opts,e=t.prefix||"",n=t.appendTo||document.body,i=this.container;for(i||(i=document.createElement("div"),i.className=e+"resizer-c",n.appendChild(i),this.container=i);i.firstChild;)i.removeChild(i.firstChild);var r={};["tl","tc","tr","cl","cr","bl","bc","br"].forEach(function(e){return r[e]=t[e]?l(e,t):""});for(var o in r){var s=r[o];s&&i.appendChild(s)}this.handlers=r,this.mousePosFetcher=t.mousePosFetcher,this.updateTarget=t.updateTarget,this.posFetcher=t.posFetcher,this.onStart=t.onStart,this.onMove=t.onMove,this.onEnd=t.onEnd}},{key:"toggleFrames",value:function(t){if(this.opts.silentFrames){var e=document.querySelectorAll("iframe");(0,o.each)(e,function(e){return e.style.pointerEvents=t?"none":""})}}},{key:"isHandler",value:function(t){var e=this.handlers;for(var n in e)if(e[n]===t)return!0;return!1}},{key:"getFocusedEl",value:function(){return this.el}},{key:"getDocumentEl",value:function(){return[this.el.ownerDocument,document]}},{key:"getElementPos",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.posFetcher||"";return n?n(t,e):c(t)}},{key:"focus",value:function(t){if(!t||t!==this.el){this.el=t;var e=this.opts,n=this.getElementPos(t,{target:"container"}),i=this.container,r=i.style;e.avoidContainerUpdate||(r.left=n.left+"px",r.top=n.top+"px",r.width=n.width+"px",r.height=n.height+"px",r.display="block"),(0,s.on)(this.getDocumentEl(),"mousedown",this.handleMouseDown)}}},{key:"blur",value:function(){this.container.style.display="none",this.el&&((0,s.off)(this.getDocumentEl(),"mousedown",this.handleMouseDown),this.el=null)}},{key:"start",value:function(t){if(0===t.button){t.preventDefault(),t.stopPropagation();var e=this.el,n=this,i=this.opts||{},r="data-"+i.prefix+"handler",a=this.getElementPos(e,{target:"el"});this.handlerAttr=t.target.getAttribute(r),this.clickedHandler=t.target,this.startDim={t:a.top,l:a.left,w:a.width,h:a.height},this.rectDim={t:a.top,l:a.left,w:a.width,h:a.height},this.startPos={x:t.clientX,y:t.clientY};var l=this.getDocumentEl();(0,s.on)(l,"mousemove",this.move),(0,s.on)(l,"keydown",this.handleKeyDown),(0,s.on)(l,"mouseup",this.stop),(0,o.isFunction)(this.onStart)&&this.onStart(t,{docs:l,config:i,el:e,resizer:n}),this.toggleFrames(1),this.move(t)}}},{key:"move",value:function(t){var e=this.onMove,n=this.mousePosFetcher,i=n?n(t):{x:t.clientX,y:t.clientY};this.currentPos=i,this.delta={x:i.x-this.startPos.x,y:i.y-this.startPos.y},this.keys={shift:t.shiftKey,ctrl:t.ctrlKey,alt:t.altKey},this.rectDim=this.calc(this),this.updateRect(0),e&&e(t),0===t.which&&this.stop(t)}},{key:"stop",value:function(t){var e=this.opts,n=this.getDocumentEl();(0,s.off)(n,"mousemove",this.move),(0,s.off)(n,"keydown",this.handleKeyDown),(0,s.off)(n,"mouseup",this.stop),this.updateRect(1),this.toggleFrames(),(0,o.isFunction)(this.onEnd)&&this.onEnd(t,{docs:n,config:e})}},{key:"updateRect",value:function(t){var e=this.el,n=this,i=this.opts,r=this.rectDim,s=this.container.style,a=this.updateTarget,l=this.getSelectedHandler(),c=i.unitHeight,u=i.unitWidth,h=i.keyWidth,d=i.keyHeight;if((0,o.isFunction)(a))a(e,r,{store:t,selectedHandler:l,resizer:n,config:i});else{var f=e.style;f[h]=r.w+u,f[d]=r.h+c}var p=this.getElementPos(e,{target:"container"});i.avoidContainerUpdate||(s.left=p.left+"px",s.top=p.top+"px",s.width=p.width+"px",s.height=p.height+"px")}},{key:"getSelectedHandler",value:function(){var t=this.handlers;if(this.selectedHandler)for(var e in t)if(t[e]===this.selectedHandler)return e}},{key:"handleKeyDown",value:function(t){27===t.keyCode&&(this.rectDim=this.startDim,this.stop(t))}},{key:"handleMouseDown",value:function(t){var e=t.target;this.isHandler(e)?(this.selectedHandler=e,this.start(t)):e!==this.el&&(this.selectedHandler="",this.blur())}},{key:"calc",value:function(t){var e=void 0,n=this.opts||{},i=n.step,r=this.startDim,o=n.minDim,a=n.maxDim,l=t.delta.x,c=t.delta.y,u=r.w,h=r.h,d={t:0,l:0,w:u,h:h};if(t){var f=t.handlerAttr;~f.indexOf("r")&&(e=(0,s.normalizeFloat)(u+l*i,i),e=Math.max(o,e),a&&(e=Math.min(a,e)),d.w=e),~f.indexOf("b")&&(e=(0,s.normalizeFloat)(h+c*i,i),e=Math.max(o,e),a&&(e=Math.min(a,e)),d.h=e),~f.indexOf("l")&&(e=(0,s.normalizeFloat)(u-l*i,i),e=Math.max(o,e),a&&(e=Math.min(a,e)),d.w=e),~f.indexOf("t")&&(e=(0,s.normalizeFloat)(h-c*i,i),e=Math.max(o,e),a&&(e=Math.min(a,e)),d.h=e);var p=n.ratioDefault?!t.keys.shift:t.keys.shift;if(f.indexOf("c")<0&&p){var g=r.w/r.h;d.w/d.h>g?d.h=Math.round(d.w/g):d.w=Math.round(d.h*g)}return~f.indexOf("l")&&(d.l=r.w-d.w),~f.indexOf("t")&&(d.t=r.h-d.h),d}}}]),t}();t.exports={init:function(t){return new u(t)}}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=r.default.$,s=function(t,e){var n=e||window,i=t.getBoundingClientRect();return{left:i.left+n.pageXOffset,top:i.top+n.pageYOffset,width:i.width,height:i.height}};t.exports={setKey:function(t,e){},getElementRect:function(t){var e=this.opts.posFetcher||"";return e?e(t,{avoidFrameOffset:1}):s(t)},init:function(t){return this.setOptions(t),this.handleMouseDown=this.handleMouseDown.bind(this),this.drag=this.drag.bind(this),this.move=this.move.bind(this),this.stop=this.stop.bind(this),this.setKey("up, right, down, left",this.handleKey),this},setOptions:function(t){this.opts=t||{}},focus:function(t){if(!t||t!==this.el){this.getDocumentEl(t),this.blur(),this.el=t,this.handlers=this.opts.dragHandlers||[t];var e=this.getElementRect(t);this.elRect=e,this.startTop=e.top,this.startLeft=e.left,this.getDocumentEl().on("mousedown",this.handleMouseDown)}},blur:function(){this.getDocumentEl().off("mousedown",this.handleMouseDown),this.el=null},start:function(t){this.startPos=this.getMousePos(t);var e=this.getDocumentEl();e.on("mousemove",this.drag),e.on("mouseup",this.stop);var n=this.opts.onStart;"function"==typeof n&&n(t,{docs:e,el:this.el,start:this.startPos,elRect:this.elRect}),this.drag(t)},stop:function(t){var e=this.getDocumentEl();e.off("mousemove",this.drag),e.off("mouseup",this.stop),this.lockedAxis=null;var n=this.opts.onEnd;"function"==typeof n&&n(t,{docs:e,delta:this.delta,end:{x:this.startLeft+this.delta.x,y:this.startTop+this.delta.y}})},handleMouseDown:function(t){var e=t.target;this.isHandler(e)&&this.start(t)},isHandler:function(t){var e=this.handlers;for(var n in e)if(e[n]===t)return!0;return!1},handleKey:function(t,e){switch(e.shortcut){case"up":this.move(0,-1);break;case"right":this.move(1,0);break;case"down":this.move(0,1);break;case"left":this.move(-1,0)}},getDocumentEl:function(t){var t=t||this.el;if(!this.$doc){var e=[document];t&&e.push(t.ownerDocument),this.$doc=o(e)}return this.$doc},getMousePos:function(t){var e=this.opts.mousePosFetcher;return e?e(t):{x:t.clientX,y:t.clientY}},drag:function(t){var e=this.lockedAxis,n=this.getMousePos(t),i={x:n.x-this.startPos.x,y:n.y-this.startPos.y};if(t.shiftKey){if(!e){var r=i.x,o=i.y,s=Math.abs(r),a=Math.abs(o);o>=s||o<=-s?e="x":(r>a||r<-a)&&(e="y")}}else e=null;"x"===e&&(i.x=this.startPos.x),"y"===e&&(i.y=this.startPos.y),this.lockedAxis=e,this.delta=i,this.move(i.x,i.y);var l=this.opts.onDrag;"function"==typeof l&&l(t,{delta:i,current:{x:this.startLeft+i.x,y:this.startTop+i.y},lockedAxis:e}),0===t.which&&this.stop(t)},move:function(t,e){this.moveX(t),this.moveY(e)},moveX:function(t){var e=this.el,n=(this.opts,this.startLeft+t),i=this.opts.setX;"function"==typeof i?i(n,{el:e,start:this.startLeft,delta:t}):e.style.left=n+"px"},moveY:function(t){var e=this.el,n=(this.opts,this.startTop+t),i=this.opts.setY;"function"==typeof i?i(n,{el:e,start:this.startTop,delta:t}):e.style.top=n+"px"}}},function(t,e,n){"use strict";var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return e=r({},a,n),t=e.em,this.em=t,this},onLoad:function(){var t=e.defaults;for(var n in t){var i=t[n];this.add(n,i.keys,i.handler)}},add:function(t,e,r){var a=this.em,l=a.get("Commands"),c=a.getEditor(),u={id:t,keys:e,handler:r};return n[t]&&this.remove(t),n[t]=u,s(e,function(e,n){r=(0,o.isString)(r)?l.get(r):r,"object"==(void 0===r?"undefined":i(r))?r.run(c):r(c);var s=[t,n.shortcut,e];a.trigger.apply(a,["keymap:emit"].concat(s)),a.trigger.apply(a,["keymap:emit:"+t].concat(s))}),a.trigger("keymap:add",u),u},get:function(t){return n[t]},getAll:function(){return n},remove:function(t){var e=this.em,i=this.get(t);if(i)return delete n[t],s.unbind(i.keys),e&&e.trigger("keymap:remove",i),i}}}},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};n=i({},a,s),t=n.em,this.em=t,e=new o.default({track:!0,register:[]}),e.changeUndoType("change",{condition:!1}),e.changeUndoType("add",{on:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!n.avoidStore)return{object:e,before:void 0,after:t,options:i({},n)}}}),e.changeUndoType("remove",{on:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!n.avoidStore)return{object:e,before:t,after:void 0,options:i({},n)}}});var l={on:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!r&&(r=t.previousAttributes()),!n.avoidStore){var i={object:t,before:r,after:t.toJSON()};return r=null,i}},undo:function(t,e,n,i){t.set(e)},redo:function(t,e,n,i){t.set(n)}};return["style","attributes","content","src"].forEach(function(t){return e.addUndoType("change:"+t,l)}),e.on("undo redo",function(){return t.trigger("component:toggled change:canvasOffset")}),["undo","redo"].forEach(function(n){return e.on(n,function(){return t.trigger(n)})}),this},getConfig:function(){return n},add:function(t){return e.register(t),this},remove:function(t){return e.unregister(t),this},removeAll:function(){return e.unregisterAll(),this},start:function(){return e.startTracking(),this},stop:function(){return e.stopTracking(),this},undo:function(){return t.get("Canvas").isInputFocused()||e.undo(1),this},undoAll:function(){return e.undoAll(),this},redo:function(){return t.get("Canvas").isInputFocused()||e.redo(1),this},redoAll:function(){return e.redoAll(),this},hasUndo:function(){return e.isAvailable("undo")},hasRedo:function(){return e.isAvailable("redo")},getStack:function(){return e.stack},clear:function(){return e.clear(),this},getInstance:function(){return e}}}},function(t,e,n){var i,r,o;/*! +/*! grapesjs - 0.14.25 */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.grapesjs=e():t.grapesjs=e()}(window,function(){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=235)}([function(t,e,n){(function(i){var r,o;!function(s){var a="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i;r=[n(1),n(20),e],void 0===(o=function(t,e,n){a.Backbone=function(t,e,n,i){var r=t.Backbone,o=Array.prototype.slice;e.VERSION="1.3.3",e.$=i,e.noConflict=function(){return t.Backbone=r,this},e.emulateHTTP=!1,e.emulateJSON=!1;var s=function(t,e,i){n.each(e,function(e,r){n[r]&&(t.prototype[r]=function(t,e,i){switch(t){case 1:return function(){return n[e](this[i])};case 2:return function(t){return n[e](this[i],t)};case 3:return function(t,r){return n[e](this[i],a(t,this),r)};case 4:return function(t,r,o){return n[e](this[i],a(t,this),r,o)};default:return function(){var t=o.call(arguments);return t.unshift(this[i]),n[e].apply(n,t)}}}(e,r,i))})},a=function(t,e){return n.isFunction(t)?t:n.isObject(t)&&!e._isModel(t)?l(t):n.isString(t)?function(e){return e.get(t)}:t},l=function(t){var e=n.matches(t);return function(t){return e(t.attributes)}},c=e.Events={},u=/\s+/,h=function(t,e,i,r,o){var s,a=0;if(i&&"object"==typeof i){void 0!==r&&"context"in o&&void 0===o.context&&(o.context=r);for(s=n.keys(i);athis.length&&(r=this.length),r<0&&(r+=this.length+1);var o,s,a=[],l=[],c=[],u=[],h={},d=e.add,f=e.merge,p=e.remove,g=!1,v=this.comparator&&null==r&&!1!==e.sort,m=n.isString(this.comparator)?this.comparator:null;for(s=0;s7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(D,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";return this.location.replace(e+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var i=document.body,r=i.insertBefore(this.iframe,i.firstChild).contentWindow;r.document.open(),r.document.close(),r.location.hash="#"+this.fragment}var o=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState?o("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?o("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};this._usePushState?t("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&t("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),L.started=!1},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe&&(e=this.getHash(this.iframe.contentWindow)),e===this.fragment)return!1;this.iframe&&this.navigate(e),this.loadUrl()},loadUrl:function(t){return!!this.matchRoot()&&(t=this.fragment=this.getFragment(t),n.some(this.handlers,function(e){if(e.route.test(t))return e.callback(t),!0}))},navigate:function(t,e){if(!L.started)return!1;e&&!0!==e||(e={trigger:!!e}),t=this.getFragment(t||"");var n=this.root;""!==t&&"?"!==t.charAt(0)||(n=n.slice(0,-1)||"/");var i=n+t;if(t=this.decodeFragment(t.replace(I,"")),this.fragment!==t){if(this.fragment=t,this._usePushState)this.history[e.replace?"replaceState":"pushState"]({},document.title,i);else{if(!this._wantsHashChange)return this.location.assign(i);if(this._updateHash(this.location,t,e.replace),this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var r=this.iframe.contentWindow;e.replace||(r.document.open(),r.document.close()),this._updateHash(r.location,t,e.replace)}}return e.trigger?this.loadUrl(t):void 0}},_updateHash:function(t,e,n){if(n){var i=t.href.replace(/(javascript:|#).*$/,"");t.replace(i+"#"+e)}else t.hash="#"+e}}),e.history=new L;y.extend=b.extend=M.extend=k.extend=L.extend=function(t,e){var i,r=this;i=t&&n.has(t,"constructor")?t.constructor:function(){return r.apply(this,arguments)};return n.extend(i,r,e),i.prototype=n.create(r.prototype,t),i.prototype.constructor=i,i.__super__=r.prototype,i};var F=function(){throw new Error('A "url" property or function must be specified')},R=function(t,e){var n=e.error;e.error=function(i){n&&n.call(e.context,t,i,e),t.trigger("error",t,i,e)}};return e}(a,n,t,e)}.apply(e,r))||(t.exports=o)}()}).call(this,n(11))},function(t,e,n){(function(t,n){var i;!function(){var r="object"==typeof self&&self.self===self&&self||"object"==typeof t&&t.global===t&&t||this||{},o=r._,s=Array.prototype,a=Object.prototype,l="undefined"!=typeof Symbol?Symbol.prototype:null,c=s.push,u=s.slice,h=a.toString,d=a.hasOwnProperty,f=Array.isArray,p=Object.keys,g=Object.create,v=function(){},m=function(t){return t instanceof m?t:this instanceof m?void(this._wrapped=t):new m(t)};void 0===e||e.nodeType?r._=m:(void 0!==n&&!n.nodeType&&n.exports&&(e=n.exports=m),e._=m),m.VERSION="1.9.1";var y,b=function(t,e,n){if(void 0===e)return t;switch(null==n?3:n){case 1:return function(n){return t.call(e,n)};case 3:return function(n,i,r){return t.call(e,n,i,r)};case 4:return function(n,i,r,o){return t.call(e,n,i,r,o)}}return function(){return t.apply(e,arguments)}},x=function(t,e,n){return m.iteratee!==y?m.iteratee(t,e):null==t?m.identity:m.isFunction(t)?b(t,e,n):m.isObject(t)&&!m.isArray(t)?m.matcher(t):m.property(t)};m.iteratee=y=function(t,e){return x(t,e,1/0)};var w=function(t,e){return e=null==e?t.length-1:+e,function(){for(var n=Math.max(arguments.length-e,0),i=Array(n),r=0;r=0&&e<=E};m.each=m.forEach=function(t,e,n){var i,r;if(e=b(e,n),A(t))for(i=0,r=t.length;i=3;return function(e,n,i,r){var o=!A(e)&&m.keys(e),s=(o||e).length,a=t>0?0:s-1;for(r||(i=e[o?o[a]:a],a+=t);a>=0&&a=0},m.invoke=w(function(t,e,n){var i,r;return m.isFunction(e)?r=e:m.isArray(e)&&(i=e.slice(0,-1),e=e[e.length-1]),m.map(t,function(t){var o=r;if(!o){if(i&&i.length&&(t=T(t,i)),null==t)return;o=t[e]}return null==o?o:o.apply(t,n)})}),m.pluck=function(t,e){return m.map(t,m.property(e))},m.where=function(t,e){return m.filter(t,m.matcher(e))},m.findWhere=function(t,e){return m.find(t,m.matcher(e))},m.max=function(t,e,n){var i,r,o=-1/0,s=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var a=0,l=(t=A(t)?t:m.values(t)).length;ao&&(o=i);else e=x(e,n),m.each(t,function(t,n,i){((r=e(t,n,i))>s||r===-1/0&&o===-1/0)&&(o=t,s=r)});return o},m.min=function(t,e,n){var i,r,o=1/0,s=1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var a=0,l=(t=A(t)?t:m.values(t)).length;ai||void 0===n)return 1;if(n0?0:r-1;o>=0&&o0?s=o>=0?o:Math.max(o+a,s):a=o>=0?Math.min(o+1,a):o+a+1;else if(n&&o&&a)return i[o=n(i,r)]===r?o:-1;if(r!=r)return(o=e(u.call(i,s,a),m.isNaN))>=0?o+s:-1;for(o=t>0?s:a-1;o>=0&&oe?(i&&(clearTimeout(i),i=null),a=c,s=t.apply(r,o),i||(r=o=null)):i||!1===n.trailing||(i=setTimeout(l,u)),s};return c.cancel=function(){clearTimeout(i),a=0,i=r=o=null},c},m.debounce=function(t,e,n){var i,r,o=function(e,n){i=null,n&&(r=t.apply(e,n))},s=w(function(s){if(i&&clearTimeout(i),n){var a=!i;i=setTimeout(o,e),a&&(r=t.apply(this,s))}else i=m.delay(o,e,this,s);return r});return s.cancel=function(){clearTimeout(i),i=null},s},m.wrap=function(t,e){return m.partial(e,t)},m.negate=function(t){return function(){return!t.apply(this,arguments)}},m.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,i=t[e].apply(this,arguments);n--;)i=t[n].call(this,i);return i}},m.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},m.before=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},m.once=m.partial(m.before,2),m.restArguments=w;var F=!{toString:null}.propertyIsEnumerable("toString"),R=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],j=function(t,e){var n=R.length,i=t.constructor,r=m.isFunction(i)&&i.prototype||a,o="constructor";for(S(t,o)&&!m.contains(e,o)&&e.push(o);n--;)(o=R[n])in t&&t[o]!==r[o]&&!m.contains(e,o)&&e.push(o)};m.keys=function(t){if(!m.isObject(t))return[];if(p)return p(t);var e=[];for(var n in t)S(t,n)&&e.push(n);return F&&j(t,e),e},m.allKeys=function(t){if(!m.isObject(t))return[];var e=[];for(var n in t)e.push(n);return F&&j(t,e),e},m.values=function(t){for(var e=m.keys(t),n=e.length,i=Array(n),r=0;r1&&(i=b(i,e[1])),e=m.allKeys(t)):(i=$,e=L(e,!1,!1),t=Object(t));for(var r=0,o=e.length;r1&&(n=e[1])):(e=m.map(L(e,!1,!1),String),i=function(t,n){return!m.contains(e,n)}),m.pick(t,i,n)}),m.defaults=z(m.allKeys,!0),m.create=function(t,e){var n=C(t);return e&&m.extendOwn(n,e),n},m.clone=function(t){return m.isObject(t)?m.isArray(t)?t.slice():m.extend({},t):t},m.tap=function(t,e){return e(t),t},m.isMatch=function(t,e){var n=m.keys(e),i=n.length;if(null==t)return!i;for(var r=Object(t),o=0;o":">",'"':""","'":"'","`":"`"},U=m.invert(W),q=function(t){var e=function(e){return t[e]},n="(?:"+m.keys(t).join("|")+")",i=RegExp(n),r=RegExp(n,"g");return function(t){return t=null==t?"":""+t,i.test(t)?t.replace(r,e):t}};m.escape=q(W),m.unescape=q(U),m.result=function(t,e,n){m.isArray(e)||(e=[e]);var i=e.length;if(!i)return m.isFunction(n)?n.call(t):n;for(var r=0;r/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var Y=/(.)^/,G={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},X=/\\|'|\r|\n|\u2028|\u2029/g,J=function(t){return"\\"+G[t]};m.template=function(t,e,n){!e&&n&&(e=n),e=m.defaults({},e,m.templateSettings);var i,r=RegExp([(e.escape||Y).source,(e.interpolate||Y).source,(e.evaluate||Y).source].join("|")+"|$","g"),o=0,s="__p+='";t.replace(r,function(e,n,i,r,a){return s+=t.slice(o,a).replace(X,J),o=a+e.length,n?s+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":i?s+="'+\n((__t=("+i+"))==null?'':__t)+\n'":r&&(s+="';\n"+r+"\n__p+='"),e}),s+="';\n",e.variable||(s="with(obj||{}){\n"+s+"}\n"),s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n";try{i=new Function(e.variable||"obj","_",s)}catch(t){throw t.source=s,t}var a=function(t){return i.call(this,t,m)},l=e.variable||"obj";return a.source="function("+l+"){\n"+s+"}",a},m.chain=function(t){var e=m(t);return e._chain=!0,e};var Z=function(t,e){return t._chain?m(e).chain():e};m.mixin=function(t){return m.each(m.functions(t),function(e){var n=m[e]=t[e];m.prototype[e]=function(){var t=[this._wrapped];return c.apply(t,arguments),Z(this,n.apply(m,t))}}),m},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=s[t];m.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],Z(this,n)}}),m.each(["concat","join","slice"],function(t){var e=s[t];m.prototype[t]=function(){return Z(this,e.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return String(this._wrapped)},void 0===(i=function(){return m}.apply(e,[]))||(n.exports=i)}()}).call(this,n(11),n(231)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getUnitFromValue=e.normalizeFloat=e.shallowDiff=e.getElement=e.camelCase=e.getModel=e.matches=e.upFirst=e.hasDnd=e.off=e.on=void 0;var i=n(1),r=window.Element.prototype,o=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector,s=function(t){return t[0].toUpperCase()+t.toLowerCase().slice(1)};e.on=function(t,e,n){e=e.split(/\s+/),t=t instanceof Array?t:[t];for(var i=function(i){t.forEach(function(t){return t.addEventListener(e[i],n)})},r=0;r=0?s!==a&&(n[o]=a):n[o]=null}for(var l in e)e.hasOwnProperty(l)&&(0,i.isUndefined)(t[l])&&(n[l]=e[l]);return n},e.normalizeFloat=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=0;if(isNaN(t))return n;if(t=parseFloat(t),Math.floor(t)!==t){var r=e.toString().split(".")[1];i=r?r.length:0}return i?parseFloat(t.toFixed(i)):t},e.getUnitFromValue=function(t){return t.replace(parseFloat(t),"")}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)),r=n(1);var o=n(57);t.exports=i.default.View.extend({className:function(){return this.getClasses()},tagName:function(){return this.model.get("tagName")},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.model,n=t.config||{};this.opts=t,this.config=n,this.em=n.em||"",this.pfx=n.stylePrefix||"",this.ppfx=n.pStylePrefix||"",this.attr=e.get("attributes"),this.classe=this.attr.class||[];var i=this.$el,r=e.get("classes");this.listenTo(e,"change:style",this.updateStyle),this.listenTo(e,"change:attributes",this.updateAttributes),this.listenTo(e,"change:highlightable",this.updateHighlight),this.listenTo(e,"change:status",this.updateStatus),this.listenTo(e,"change:state",this.updateState),this.listenTo(e,"change:script",this.render),this.listenTo(e,"change:content",this.updateContent),this.listenTo(e,"change",this.handleChange),this.listenTo(e,"active",this.onActive),this.listenTo(r,"add remove change",this.updateClasses),i.data("model",e),i.data("collection",e.get("components")),e.view=this,r.length&&this.importClasses(),this.init()},init:function(){},onActive:function(){},handleChange:function(){var t=this.model;for(var e in t.emitUpdate(),t.changed)t.emitUpdate(e)},importClasses:function(){var t=this.config.em.get("SelectorManager");t&&this.model.get("classes").each(function(e){t.add(e.get("name"))})},updateState:function(t){var e="hc-state";this.model.get("state")?this.$el.addClass(e):this.$el.removeClass(e)},updateStatus:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=(this.em,this.el),n=this.model.get("status"),i=this.pfx,r=this.ppfx,o=i+"selected",s=o+"-parent",a=r+"freezed",l=r+"hovered",c=[o,s,a,l];this.$el.removeClass(c.join(" "));var u=e.getAttribute("class")||"",h="";switch(n){case"selected":h=u+" "+o;break;case"selected-parent":h=u+" "+s;break;case"freezed":h=u+" "+a;break;case"freezed-selected":h=u+" "+a+" "+o;break;case"hovered":h=t.avoidHover?"":u+" "+l}(h=h.trim())&&e.setAttribute("class",h)},updateHighlight:function(){var t=this.model.get("highlightable");this.setAttribute("data-highlightable",t?1:"")},updateStyle:function(){var t=this.em,e=this.model;if(t&&t.get("avoidInlineStyle")){this.el.id=e.getId();var n=e.getStyle();!(0,r.isEmpty)(n)&&e.setStyle(n)}else this.setAttribute("style",e.styleToString())},updateClasses:function(){var t=this.model.get("classes").pluck("name").join(" ");this.setAttribute("class",t),this.updateStatus()},setAttribute:function(t,e){var n=this.$el;e?n.attr(t,e):n.removeAttr(t)},getClasses:function(){var t=this.model.get("attributes").class||[];return(t=(0,r.isArray)(t)?t:[t]).length?t.join(" "):null},updateAttributes:function(){var t=this.model,e={"data-gjs-type":t.get("type")||"default"},n=t.get("attributes"),i=t.get("src");for(var r in n)e[r]=n[r];i&&(e.src=i),this.$el.attr(e),this.updateHighlight(),this.updateStyle()},updateContent:function(){this.getChildrenContainer().innerHTML=this.model.get("content")},prevDef:function(t){t.preventDefault()},updateScript:function(){if(this.model.get("script")){var t=this.em;if(t)t.get("Canvas").getCanvasView().updateScript(this)}},getChildrenContainer:function(){var t=this.el;return"function"==typeof this.getChildrenSelector?t=this.el.querySelector(this.getChildrenSelector()):this.getTemplate,t},renderChildren:function(){var t=this.getChildrenContainer(),e=new o({collection:this.model.get("components"),config:this.config,componentTypes:this.opts.componentTypes});e.render(t),this.childrenView=e;for(var n=Array.prototype.slice.call(e.el.childNodes),i=0,r=n.length;i0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=n.em,s=this.parent(),a=s&&s.attributes;if(a&&a.propagate){var l={},c=a.propagate;c.forEach(function(t){return l[t]=s.get(t)}),l.propagate=c,l=i({},l,e),this.set(l)}var u=this.get("propagate");u&&this.set("propagate",(0,r.isArray)(u)?u:[u]),n&&n.config&&n.config.voidElements.indexOf(this.get("tagName"))>=0&&this.set("void",!0),n.em=o,this.opt=n,this.em=o,this.config=n.config||{},this.ccid=g.createId(this),this.set("attributes",this.get("attributes")||{}),this.listenTo(this,"change:script",this.scriptUpdated),this.listenTo(this,"change:traits",this.traitsUpdated),this.listenTo(this,"change:tagName",this.tagUpdated),this.listenTo(this,"change:attributes",this.attrUpdated),this.initClasses(),this.loadTraits(),this.initComponents(),this.initToolbar(),this.set("status",""),["classes","traits"].forEach(function(e){return t.listenTo(t.get(e),"add remove change",function(){return t.emitUpdate(e)})}),this.init()},is:function(t){return!(this.get("type")!=t)},find:function(t){var e=[];return this.view.$el.find(t).each(function(t,n,i){var r=i.eq(n).data("model");r&&e.push(r)}),e},closest:function(t){var e=this.view.$el.closest(t);return e.length&&e.data("model")},tagUpdated:function(){var t=this.collection,e=t.indexOf(this);t.remove(this),t.add(this,{at:e})},replaceWith:function(t){var e=this.collection,n=e.indexOf(this);return e.remove(this),e.add(t,{at:n})},attrUpdated:function(){var t=this,e=i({},this.previous("attributes")),n=i({},this.get("attributes")),s=(0,o.shallowDiff)(e,n);(0,r.keys)(s).forEach(function(e){return t.trigger("change:attributes:"+e)})},setAttributes:function(t){var e=(t=i({},t)).class;e&&this.setClass(e),delete t.class;var n=t.style;n&&this.setStyle(n),delete t.style,this.set("attributes",t)},addAttributes:function(t){var e=i({},this.getAttributes(),t);this.setAttributes(e)},getStyle:function(){var t=this.em;if(t&&t.getConfig("avoidInlineStyle")){var e=this.get("state"),n=t.get("CssComposer").getIdRule(this.getId(),{state:e});if(this.rule=n,n)return n.getStyle()}return s.default.getStyle.call(this)},setStyle:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=this.em;if(a&&a.getConfig("avoidInlineStyle")){e=(0,r.isString)(e)?this.parseStyle(e):e,e=i({},e,this.get("style"));var l=this.get("state"),c=a.get("CssComposer"),u=this.getStyle();this.rule=c.setIdRule(this.getId(),e,i({},n,{state:l}));var h=(0,o.shallowDiff)(u,e);this.set("style",{},{silent:1}),(0,r.keys)(h).forEach(function(e){return t.trigger("change:style:"+e)})}else e=s.default.setStyle.apply(this,arguments);return e},getAttributes:function(){var t=this.em,e=[],n=i({},this.get("attributes")),o=t&&t.get("SelectorManager"),s=this.getId();if(this.get("classes").each(function(t){return e.push(t.get("name"))}),e.length&&(n.class=e.join(" ")),!(0,r.has)(n,"id")){var a=void 0;!function(t){return t&&t.getConfig("avoidInlineStyle")}(t)?(0,r.isEmpty)(this.getStyle())||(a=1):a=o&&o.get(s,o.Selector.TYPE_ID),a&&(n.id=this.getId())}return n},addClass:function(t){var e=this.em.get("SelectorManager").addClass(t);return this.get("classes").add(e)},setClass:function(t){return this.get("classes").reset(),this.addClass(t)},removeClass:function(t){var e=[];t=(0,r.isArray)(t)?t:[t];var n=this.get("classes"),i=c.TYPE_CLASS;return t.forEach(function(t){t.split(" ").forEach(function(t){var r=n.where({name:t,type:i})[0];r&&e.push(n.remove(r))})}),e},initClasses:function(){var t=this.normalizeClasses(this.get("classes")||[]);return this.set("classes",new u(t)),this},initComponents:function(){var t=new l(null,this.opt);return t.parent=this,!this.opt.avoidChildren&&t.reset(this.get("components")),this.set("components",t),this},init:function(){},append:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.components().add(t,e);return(0,r.isArray)(n)?n:[n]},components:function(t){var e=this.get("components");if((0,r.isUndefined)(t))return e;e.reset(),t&&this.append(t)},parent:function(){var t=this.collection;return t&&t.parent},scriptUpdated:function(){this.set("scriptUpdated",1)},traitsUpdated:function(){var t=0,e=i({},this.get("attributes")),n=this.get("traits");n instanceof h?(n.each(function(n){if(t=1,!n.get("changeProp")){var i=n.get("name"),r=n.getInitValue();i&&r&&(e[i]=r)}}),t&&this.set("attributes",e)):this.loadTraits()},initToolbar:function(){if(!this.get("toolbar")){var t=[];this.collection&&t.push({attributes:{class:"fa fa-arrow-up"},command:"select-parent"}),this.get("draggable")&&t.push({attributes:{class:"fa fa-arrows",draggable:!0},command:"tlb-move"}),this.get("copyable")&&t.push({attributes:{class:"fa fa-clone"},command:"tlb-clone"}),this.get("removable")&&t.push({attributes:{class:"fa fa-trash-o"},command:"tlb-delete"}),this.set("toolbar",t)}},loadTraits:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=new h([],this.opt);return n.setTarget(this),(t=t||this.get("traits")).length&&n.add(t),this.set("traits",n,e),this},normalizeClasses:function(t){var e=[],n=this.em;if(n){var i=n.get("SelectorManager");if(i)return t.forEach(function(t){var n="";n="string"==typeof t?t:t.name;var r=i.add(n);e.push(r)}),e}},clone:function(){var t=this.em,e=this.getStyle(),n=i({},this.attributes),o=i({},this.opt);return n.attributes=i({},n.attributes),delete n.attributes.id,n.components=[],n.classes=[],n.traits=[],this.get("components").each(function(t,e){n.components[e]=t.clone()}),this.get("traits").each(function(t,e){n.traits[e]=t.clone()}),this.get("classes").each(function(t,e){n.classes[e]=t.get("name")}),n.status="",n.view="",o.collection=null,t&&t.getConfig("avoidInlineStyle")&&!(0,r.isEmpty)(e)&&(n.style=e),new this.constructor(n,o)},getName:function(){var t=this.get("name")||this.get("custom-name"),e=this.get("tagName");e="div"==e?"box":e;var n=this.get("type")||e;return n=n.charAt(0).toUpperCase()+n.slice(1),t||n},getIcon:function(){var t=this.get("icon");return t?t+" ":""},toHTML:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=[],n=this.get("tagName"),i=this.get("void"),o=t.attributes,s=this.getAttrToHTML();for(var a in o&&((0,r.isFunction)(o)?s=o(this,s)||{}:(0,r.isObject)(o)&&(s=o)),s){var l=s[a],c=(0,r.isString)(l)?l.replace(/"/g,"""):l;(0,r.isUndefined)(c)||((0,r.isBoolean)(c)?c&&e.push(a):e.push(a+'="'+c+'"'))}var u="<"+n+(e.length?" "+e.join(" "):"")+(i?"/":"")+">"+this.get("content");return this.get("components").each(function(e){return u+=e.toHTML(t)}),!i&&(u+=""),u},getAttrToHTML:function(){var t=this.getAttributes();return delete t.style,t},toJSON:function(){for(var t=arguments.length,e=Array(t),n=0;n0&&void 0!==arguments[0]&&arguments[0];var t=this.em,e=this.getId();if(e){var n=g.createId(this);this.setId(n);var i=t&&t.get("CssComposer").getIdRule(e),r=i&&i.get("selectors").at(0);return r&&r.set("name",n),this}}},{isComponent:function(t){return{tagName:t.tagName?t.tagName.toLowerCase():""}},createId:function(t){var e=(++f).toString().length+2,n="i"+(Math.random()+1.1).toString(36).slice(-e);return d[n]=t,n},getList:function(){return d}});t.exports=g},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)),r=n(1),o=n(2);t.exports=i.default.View.extend({template:function(t){return'\n
    \n '+this.templateLabel(t)+'\n
    \n
    \n '+this.templateInput(t)+"\n
    \n "},templateLabel:function(t){var e=this.pfx;return'\n \n '+t.get("name")+'\n \n \n '},templateInput:function(t){return'\n
    \n \n
    \n '},events:function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}({change:"inputValueChanged"},"click [data-clear-style]","clear"),initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,r.bindAll)(this,"targetUpdated"),this.config=t.config||{};var e=this.config.em;this.em=e,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=t.target||{},this.propTarget=t.propTarget||{},this.onChange=t.onChange,this.onInputRender=t.onInputRender||{},this.customValue=t.customValue||{};var n=this.model;this.property=n.get("property"),this.input=null;var i=this.pfx;this.inputHolderId="#"+i+"input-holder",this.sector=n.collection&&n.collection.sector,n.view=this,n.get("value")||n.set("value",n.getDefaultValue()),e&&e.on("update:component:style:"+this.property,this.targetUpdated),this.listenTo(this.propTarget,"update",this.targetUpdated),this.listenTo(n,"destroy remove",this.remove),this.listenTo(n,"change:value",this.modelValueChanged),this.listenTo(n,"targetUpdated",this.targetUpdated),this.listenTo(n,"change:visible",this.updateVisibility),this.listenTo(n,"change:status",this.updateStatus);var o=this.init&&this.init.bind(this);o&&o()},updateStatus:function(){var t=this.model.get("status"),e=this.pfx,n=this.ppfx,i=this.config,r=n+"four-color",o=n+"color-warn",s=this.$el.children("."+e+"label"),a=this.getClearEl().style;switch(s.removeClass(r+" "+o),a.display="none",t){case"updated":s.addClass(r),i.clearProperties&&(a.display="inline");break;case"computed":s.addClass(o)}},clear:function(t){t&&t.stopPropagation(),this.model.clearValue(),this.targetUpdated()},getClearEl:function(){return this.clearEl||(this.clearEl=this.el.querySelector("[data-clear-style]")),this.clearEl},getTarget:function(){return this.getTargetModel()},getTargetModel:function(){return this.propTarget&&this.propTarget.model},getHelperModel:function(){return this.propTarget&&this.propTarget.helper},inputValueChanged:function(t){t&&t.stopPropagation(),this.model.setValue(this.getInputValue(),1,{fromInput:1}),this.elementUpdated()},elementUpdated:function(){this.setStatus("updated")},setStatus:function(t){this.model.set("status",t);var e=this.model.parent;e&&e.set("status",t)},targetUpdated:function(){if(this.checkVisibility()){var t=this.config,e=t.em,n=this.model,i="",r="",o=this.getTargetValue({ignoreDefault:1}),s=n.getDefaultValue(),a=this.getComputedValue();o?(i=o,t.highlightChanged&&(r="updated")):a&&t.showComputed&&a!=s?(i=a,t.highlightComputed&&(r="computed")):(i=s,r=""),n.setValue(i,0,{fromTarget:1}),this.setStatus(r),e&&(e.trigger("styleManager:change",this),e.trigger("styleManager:change:"+n.get("property"),this))}},checkVisibility:function(){var t=1;return this.config.hideNotStylable&&(this.isTargetStylable()&&this.isComponentStylable()?this.show():(this.hide(),t=0),this.sector&&this.sector.trigger("updateVisibility")),t},getTargetValue:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.model,i=this.getTargetModel(),r=this.customValue;if(!i)return t;if((t=i.getStyle()[n.get("property")])||e.ignoreDefault||(t=n.getDefaultValue()),"function"==typeof r&&!e.ignoreCustomValue){var o=r(this,n.collection.indexOf(n));o&&(t=o)}return t},getComputedValue:function(){var t=this.propTarget,e=t.computed||{},n=t.computedDefault||{},i=this.config.avoidComputed||[],r=this.model.get("property"),s=i.indexOf(r)<0,a=e[r],l=n[(0,o.camelCase)(r)];return e&&s&&l!==a&&a},getInputValue:function(){var t=this.getInputEl();return t?t.value:""},modelValueChanged:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.config.em,r=this.model,o=r.getFullValue(),s=this.getTarget(),a=this.onChange;n.fromInput||this.setValue(o),s&&this.isTargetStylable()&&this.isComponentStylable()&&(n.fromTarget||(a&&!n.fromParent?a(s,this,n):this.updateTargetStyle(o,null,n)),i&&(i.trigger("component:update",s),i.trigger("component:styleUpdate",s),i.trigger("component:styleUpdate:"+r.get("property"),s)))},updateTargetStyle:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=e||this.model.get("property"),r=this.getTarget(),o=r.getStyle();t?o[i]=t:delete o[i],r.setStyle(o,n);var s=this.getHelperModel();s&&s.setStyle(o,n)},isTargetStylable:function(t){var e=t||this.getTarget(),n=this.model,i=n.get("property"),o=n.get("toRequire"),s=e.get("unstylable"),a=e.get("stylable-require"),l=e.get("stylable");return(0,r.isArray)(l)&&(l=l.indexOf(i)>=0),(0,r.isArray)(s)&&(l=s.indexOf(i)<0),o&&(l=a&&a.indexOf(i)>=0||!t),l},isComponentStylable:function(){var t=this.em,e=t&&t.getSelected();return!e||this.isTargetStylable(e)},setRawValue:function(t){this.setValue(this.model.parseValue(t))},setValue:function(t){var e=this.model,n=(0,r.isUndefined)(t)?e.getDefaultValue():t,i=this.getInputEl();i&&(i.value=n)},getInputEl:function(){return this.input||(this.input=this.el.querySelector("input")),this.input},updateVisibility:function(){this.el.style.display=this.model.get("visible")?"block":"none"},show:function(){this.model.set("visible",1)},hide:function(){this.model.set("visible",0)},cleanValue:function(){this.setValue("")},render:function(){var t=this.pfx,e=this.model,n=this.el;n.innerHTML=this.template(e),n.className=t+"property "+t+e.get("type"),this.updateStatus();var i=this.onRender&&this.onRender.bind(this);i&&i(),this.setValue(e.get("value"),{targetUpdate:1})}})},function(t,e,n){t.exports=function(){"use strict";var t=navigator.userAgent,e=navigator.platform,n=/gecko\/\d/i.test(t),i=/MSIE \d/.test(t),r=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(t),o=/Edge\/(\d+)/.exec(t),s=i||r||o,a=s&&(i?document.documentMode||6:+(o||r)[1]),l=!o&&/WebKit\//.test(t),c=l&&/Qt\/\d+\.\d+/.test(t),u=!o&&/Chrome\//.test(t),h=/Opera\//.test(t),d=/Apple Computer/.test(navigator.vendor),f=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(t),p=/PhantomJS/.test(t),g=!o&&/AppleWebKit/.test(t)&&/Mobile\/\w+/.test(t),v=/Android/.test(t),m=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(t),y=g||/Mac/.test(e),b=/\bCrOS\b/.test(t),x=/win/i.test(e),w=h&&t.match(/Version\/(\d*\.\d*)/);w&&(w=Number(w[1])),w&&w>=15&&(h=!1,l=!0);var C=y&&(c||h&&(null==w||w<12.11)),k=n||s&&a>=9;function S(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}var T,E=function(t,e){var n=t.className,i=S(e).exec(n);if(i){var r=n.slice(i.index+i[0].length);t.className=n.slice(0,i.index)+(r?i[1]+r:"")}};function M(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function A(t,e){return M(t).appendChild(e)}function O(t,e,n,i){var r=document.createElement(t);if(n&&(r.className=n),i&&(r.style.cssText=i),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var o=0;o=e)return s+(e-o);s+=a-o,s+=n-s%n,o=a+1}}g?I=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:s&&(I=function(t){try{t.select()}catch(t){}});var z=function(){this.id=null};function V(t,e){for(var n=0;n=e)return i+Math.min(s,e-r);if(r+=o-i,i=o+1,(r+=n-r%n)>=e)return i}}var K=[""];function Y(t){for(;K.length<=t;)K.push(G(K)+" ");return K[t]}function G(t){return t[t.length-1]}function X(t,e){for(var n=[],i=0;i"€"&&(t.toUpperCase()!=t.toLowerCase()||Q.test(t))}function et(t,e){return e?!!(e.source.indexOf("\\w")>-1&&tt(t))||e.test(t):tt(t)}function nt(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}var it=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function rt(t){return t.charCodeAt(0)>=768&&it.test(t)}function ot(t,e,n){for(;(n<0?e>0:en?-1:1;;){if(e==n)return e;var r=(e+n)/2,o=i<0?Math.ceil(r):Math.floor(r);if(o==e)return t(o)?e:n;t(o)?n=o:e=o+i}}function at(t,e){if((e-=t.first)<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");for(var n=t;!n.lines;)for(var i=0;;++i){var r=n.children[i],o=r.chunkSize();if(e=t.first&&en?gt(n,at(t,n).text.length):function(t,e){var n=t.ch;return null==n||n>e?gt(t.line,e):n<0?gt(t.line,0):t}(e,at(t,e.line).text.length)}function kt(t,e){for(var n=[],i=0;i=e:o.to>e);(i||(i=[])).push(new Et(s,o.from,l?null:o.to))}}return i}(n,r,s),l=function(t,e,n){var i;if(t)for(var r=0;r=e:o.to>e);if(a||o.from==e&&"bookmark"==s.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(s.inclusiveLeft?o.from<=e:o.from0&&a)for(var x=0;xe)&&(!n||It(n,o.marker)<0)&&(n=o.marker)}return n}function Vt(t,e,n,i,r){var o=at(t,e),s=Tt&&o.markedSpans;if(s)for(var a=0;a=0&&h<=0||u<=0&&h>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?vt(c.to,n)>=0:vt(c.to,n)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?vt(c.from,i)<=0:vt(c.from,i)<0)))return!0}}}function Ht(t){for(var e;e=Rt(t);)t=e.find(-1,!0).line;return t}function $t(t,e){var n=at(t,e),i=Ht(n);return n==i?e:ht(i)}function Bt(t,e){if(e>t.lastLine())return e;var n,i=at(t,e);if(!Wt(t,i))return e;for(;n=jt(i);)i=n.find(1,!0).line;return ht(i)+1}function Wt(t,e){var n=Tt&&e.markedSpans;if(n)for(var i=void 0,r=0;re.maxLineLength&&(e.maxLineLength=n,e.maxLine=t)})}var Gt=null;function Xt(t,e,n){var i;Gt=null;for(var r=0;re)return r;o.to==e&&(o.from!=o.to&&"before"==n?i=r:Gt=r),o.from==e&&(o.from!=o.to&&"before"!=n?i=r:Gt=r)}return null!=i?i:Gt}var Jt=function(){var t="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",e="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function n(n){return n<=247?t.charAt(n):1424<=n&&n<=1524?"R":1536<=n&&n<=1785?e.charAt(n-1536):1774<=n&&n<=2220?"r":8192<=n&&n<=8203?"w":8204==n?"b":"L"}var i=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,o=/[LRr]/,s=/[Lb1n]/,a=/[1n]/;function l(t,e,n){this.level=t,this.from=e,this.to=n}return function(t,e){var c="ltr"==e?"L":"R";if(0==t.length||"ltr"==e&&!i.test(t))return!1;for(var u=t.length,h=[],d=0;d-1&&(i[e]=r.slice(0,o).concat(r.slice(o+1)))}}}function ie(t,e){var n=ee(t,e);if(n.length)for(var i=Array.prototype.slice.call(arguments,2),r=0;r0}function ae(t){t.prototype.on=function(t,e){te(this,t,e)},t.prototype.off=function(t,e){ne(this,t,e)}}function le(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function ce(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function ue(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function he(t){le(t),ce(t)}function de(t){return t.target||t.srcElement}function fe(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),y&&t.ctrlKey&&1==e&&(e=3),e}var pe,ge,ve=function(){if(s&&a<9)return!1;var t=O("div");return"draggable"in t||"dragDrop"in t}();function me(t){if(null==pe){var e=O("span","​");A(t,O("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(pe=e.offsetWidth<=1&&e.offsetHeight>2&&!(s&&a<8))}var n=pe?O("span","​"):O("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function ye(t){if(null!=ge)return ge;var e=A(t,document.createTextNode("AخA")),n=T(e,0,1).getBoundingClientRect(),i=T(e,1,2).getBoundingClientRect();return M(t),!(!n||n.left==n.right)&&(ge=i.right-n.right<3)}var be=3!="\n\nb".split(/\n/).length?function(t){for(var e=0,n=[],i=t.length;e<=i;){var r=t.indexOf("\n",e);-1==r&&(r=t.length);var o=t.slice(e,"\r"==t.charAt(r-1)?r-1:r),s=o.indexOf("\r");-1!=s?(n.push(o.slice(0,s)),e+=s+1):(n.push(o),e=r+1)}return n}:function(t){return t.split(/\r\n?|\n/)},xe=window.getSelection?function(t){try{return t.selectionStart!=t.selectionEnd}catch(t){return!1}}:function(t){var e;try{e=t.ownerDocument.selection.createRange()}catch(t){}return!(!e||e.parentElement()!=t)&&0!=e.compareEndPoints("StartToEnd",e)},we=function(){var t=O("div");return"oncopy"in t||(t.setAttribute("oncopy","return;"),"function"==typeof t.oncopy)}(),Ce=null,ke={},Se={};function Te(t){if("string"==typeof t&&Se.hasOwnProperty(t))t=Se[t];else if(t&&"string"==typeof t.name&&Se.hasOwnProperty(t.name)){var e=Se[t.name];"string"==typeof e&&(e={name:e}),(t=Z(e,t)).name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Te("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Te("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Ee(t,e){e=Te(e);var n=ke[e.name];if(!n)return Ee(t,"text/plain");var i=n(t,e);if(Me.hasOwnProperty(e.name)){var r=Me[e.name];for(var o in r)r.hasOwnProperty(o)&&(i.hasOwnProperty(o)&&(i["_"+o]=i[o]),i[o]=r[o])}if(i.name=e.name,e.helperType&&(i.helperType=e.helperType),e.modeProps)for(var s in e.modeProps)i[s]=e.modeProps[s];return i}var Me={};function Ae(t,e){var n=Me.hasOwnProperty(t)?Me[t]:Me[t]={};R(e,n)}function Oe(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var n={};for(var i in e){var r=e[i];r instanceof Array&&(r=r.concat([])),n[i]=r}return n}function Pe(t,e){for(var n;t.innerMode&&(n=t.innerMode(e))&&n.mode!=t;)e=n.state,t=n.mode;return n||{mode:t,state:e}}function _e(t,e,n){return!t.startState||t.startState(e,n)}var Le=function(t,e,n){this.pos=this.start=0,this.string=t,this.tabSize=e||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};Le.prototype.eol=function(){return this.pos>=this.string.length},Le.prototype.sol=function(){return this.pos==this.lineStart},Le.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Le.prototype.next=function(){if(this.pose},Le.prototype.eatSpace=function(){for(var t=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>t},Le.prototype.skipToEnd=function(){this.pos=this.string.length},Le.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},Le.prototype.backUp=function(t){this.pos-=t},Le.prototype.column=function(){return this.lastColumnPos0?null:(i&&!1!==e&&(this.pos+=i[0].length),i)}var r=function(t){return n?t.toLowerCase():t},o=this.string.substr(this.pos,t.length);if(r(o)==r(t))return!1!==e&&(this.pos+=t.length),!0},Le.prototype.current=function(){return this.string.slice(this.start,this.pos)},Le.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},Le.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},Le.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var Ne=function(t,e){this.state=t,this.lookAhead=e},De=function(t,e,n,i){this.state=e,this.doc=t,this.line=n,this.maxLookAhead=i||0,this.baseTokens=null,this.baseTokenPos=1};function Ie(t,e,n,i){var r=[t.state.modeGen],o={};We(t,e.text,t.doc.mode,n,function(t,e){return r.push(t,e)},o,i);for(var s=n.state,a=function(i){n.baseTokens=r;var a=t.state.overlays[i],l=1,c=0;n.state=!0,We(t,e.text,a.mode,n,function(t,e){for(var n=l;ct&&r.splice(l,1,t,r[l+1],i),l+=2,c=Math.min(t,i)}if(e)if(a.opaque)r.splice(n,l-n,t,"overlay "+e),l=n+2;else for(;nt.options.maxHighlightLength&&Oe(t.doc.mode,i.state),o=Ie(t,e,i);r&&(i.state=r),e.stateAfter=i.save(!r),e.styles=o.styles,o.classes?e.styleClasses=o.classes:e.styleClasses&&(e.styleClasses=null),n===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Re(t,e,n){var i=t.doc,r=t.display;if(!i.mode.startState)return new De(i,!0,e);var o=function(t,e,n){for(var i,r,o=t.doc,s=n?-1:e-(t.doc.mode.innerMode?1e3:100),a=e;a>s;--a){if(a<=o.first)return o.first;var l=at(o,a-1),c=l.stateAfter;if(c&&(!n||a+(c instanceof Ne?c.lookAhead:0)<=o.modeFrontier))return a;var u=j(l.text,null,t.options.tabSize);(null==r||i>u)&&(r=a-1,i=u)}return r}(t,e,n),s=o>i.first&&at(i,o-1).stateAfter,a=s?De.fromSaved(i,s,o):new De(i,_e(i.mode),o);return i.iter(o,e,function(n){je(t,n.text,a);var i=a.line;n.stateAfter=i==e-1||i%5==0||i>=r.viewFrom&&ie.start)return o}throw new Error("Mode "+t.name+" failed to advance stream.")}De.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},De.prototype.baseToken=function(t){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=t;)this.baseTokenPos+=2;var e=this.baseTokens[this.baseTokenPos+1];return{type:e&&e.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},De.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},De.fromSaved=function(t,e,n){return e instanceof Ne?new De(t,Oe(t.mode,e.state),n,e.lookAhead):new De(t,Oe(t.mode,e),n)},De.prototype.save=function(t){var e=!1!==t?Oe(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new Ne(e,this.maxLookAhead):e};var He=function(t,e,n){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=n};function $e(t,e,n,i){var r,o=t.doc,s=o.mode;e=Ct(o,e);var a,l=at(o,e.line),c=Re(t,e.line,n),u=new Le(l.text,t.options.tabSize,c);for(i&&(a=[]);(i||u.post.options.maxHighlightLength?(a=!1,s&&je(t,e,i,h.pos),h.pos=e.length,l=null):l=Be(Ve(n,h,i.state,d),o),d){var f=d[0].name;f&&(l="m-"+(l?f+" "+l:f))}if(!a||u!=l){for(;c1&&!/ /.test(t))return t;for(var n=e,i="",r=0;rc&&h.from<=c);d++);if(h.to>=u)return t(n,i,r,o,s,a,l);t(n,i.slice(0,h.to-c),r,o,null,a,l),o=null,i=i.slice(h.to-c),c=h.to}}}function tn(t,e,n,i){var r=!i&&n.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!i&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",n.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function en(t,e,n){var i=t.markedSpans,r=t.text,o=0;if(i)for(var s,a,l,c,u,h,d,f=r.length,p=0,g=1,v="",m=0;;){if(m==p){l=c=u=h=a="",d=null,m=1/0;for(var y=[],b=void 0,x=0;xp||C.collapsed&&w.to==p&&w.from==p)?(null!=w.to&&w.to!=p&&m>w.to&&(m=w.to,c=""),C.className&&(l+=" "+C.className),C.css&&(a=(a?a+";":"")+C.css),C.startStyle&&w.from==p&&(u+=" "+C.startStyle),C.endStyle&&w.to==m&&(b||(b=[])).push(C.endStyle,w.to),C.title&&!h&&(h=C.title),C.collapsed&&(!d||It(d.marker,C)<0)&&(d=w)):w.from>p&&m>w.from&&(m=w.from)}if(b)for(var k=0;k=f)break;for(var T=Math.min(f,m);;){if(v){var E=p+v.length;if(!d){var M=E>T?v.slice(0,T-p):v;e.addToken(e,M,s?s+l:l,u,p+M.length==m?c:"",h,a)}if(E>=T){v=v.slice(T-p),p=T;break}p=E,u=""}v=r.slice(o,o=n[g++]),s=Ge(n[g++],e.cm.options)}}else for(var A=1;An)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}function On(t,e,n,i){return Ln(t,_n(t,e),n,i)}function Pn(t,e){if(e>=t.display.viewFrom&&e=n.lineN&&e2&&o.push((l.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}(t,e.view,e.rect),e.hasHeights=!0),(o=function(t,e,n,i){var r,o=In(e.map,n,i),l=o.node,c=o.start,u=o.end,h=o.collapse;if(3==l.nodeType){for(var d=0;d<4;d++){for(;c&&rt(e.line.text.charAt(o.coverStart+c));)--c;for(;o.coverStart+u1}(t))return e;var n=screen.logicalXDPI/screen.deviceXDPI,i=screen.logicalYDPI/screen.deviceYDPI;return{left:e.left*n,right:e.right*n,top:e.top*i,bottom:e.bottom*i}}(t.display.measure,r))}else{var f;c>0&&(h=i="right"),r=t.options.lineWrapping&&(f=l.getClientRects()).length>1?f["right"==i?f.length-1:0]:l.getBoundingClientRect()}if(s&&a<9&&!c&&(!r||!r.left&&!r.right)){var p=l.parentNode.getClientRects()[0];r=p?{left:p.left,right:p.left+ei(t.display),top:p.top,bottom:p.bottom}:Dn}for(var g=r.top-e.rect.top,v=r.bottom-e.rect.top,m=(g+v)/2,y=e.view.measure.heights,b=0;be)&&(r=(o=l-a)-1,e>=l&&(s="right")),null!=r){if(i=t[c+2],a==l&&n==(i.insertLeft?"left":"right")&&(s=n),"left"==n&&0==r)for(;c&&t[c-2]==t[c-3]&&t[c-1].insertLeft;)i=t[2+(c-=3)],s="left";if("right"==n&&r==l-a)for(;c=0&&(n=t[r]).left==n.right;r--);return n}function Rn(t){if(t.measure&&(t.measure.cache={},t.measure.heights=null,t.rest))for(var e=0;e=i.text.length?(l=i.text.length,c="before"):l<=0&&(l=0,c="after"),!a)return s("before"==c?l-1:l,"before"==c);function u(t,e,n){var i=a[e],r=1==i.level;return s(n?t-1:t,r!=n)}var h=Xt(a,l,c),d=Gt,f=u(l,h,"before"==c);return null!=d&&(f.other=u(l,d,"before"!=c)),f}function Kn(t,e){var n=0;e=Ct(t.doc,e),t.options.lineWrapping||(n=ei(t.display)*e.ch);var i=at(t.doc,e.line),r=qt(i)+Cn(t.display);return{left:n,right:n,top:r,bottom:r+i.height}}function Yn(t,e,n,i,r){var o=gt(t,e,n);return o.xRel=r,i&&(o.outside=!0),o}function Gn(t,e,n){var i=t.doc;if((n+=t.display.viewOffset)<0)return Yn(i.first,0,null,!0,-1);var r=dt(i,n),o=i.first+i.size-1;if(r>o)return Yn(i.first+i.size-1,at(i,o).text.length,null,!0,1);e<0&&(e=0);for(var s=at(i,r);;){var a=Qn(t,s,r,e,n),l=zt(s,a.ch+(a.xRel>0?1:0));if(!l)return a;var c=l.find(1);if(c.line==r)return c;s=at(i,r=c.line)}}function Xn(t,e,n,i){i-=$n(e);var r=e.text.length,o=st(function(e){return Ln(t,n,e-1).bottom<=i},r,0);return r=st(function(e){return Ln(t,n,e).top>i},o,r),{begin:o,end:r}}function Jn(t,e,n,i){n||(n=_n(t,e));var r=Bn(t,e,Ln(t,n,i),"line").top;return Xn(t,e,n,r)}function Zn(t,e,n,i){return!(t.bottom<=n)&&(t.top>n||(i?t.left:t.right)>e)}function Qn(t,e,n,i,r){r-=qt(e);var o=_n(t,e),s=$n(e),a=0,l=e.text.length,c=!0,u=Zt(e,t.doc.direction);if(u){var h=(t.options.lineWrapping?function(t,e,n,i,r,o,s){var a=Xn(t,e,i,s),l=a.begin,c=a.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,h=null,d=0;d=c||f.to<=l)){var p=1!=f.level,g=Ln(t,i,p?Math.min(c,f.to)-1:Math.max(l,f.from)).right,v=gv)&&(u=f,h=v)}}return u||(u=r[r.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}:function(t,e,n,i,r,o,s){var a=st(function(a){var l=r[a],c=1!=l.level;return Zn(qn(t,gt(n,c?l.to:l.from,c?"before":"after"),"line",e,i),o,s,!0)},0,r.length-1),l=r[a];if(a>0){var c=1!=l.level,u=qn(t,gt(n,c?l.from:l.to,c?"after":"before"),"line",e,i);Zn(u,o,s,!0)&&u.top>s&&(l=r[a-1])}return l})(t,e,n,o,u,i,r);c=1!=h.level,a=c?h.from:h.to-1,l=c?h.to:h.from-1}var d,f,p=null,g=null,v=st(function(e){var n=Ln(t,o,e);return n.top+=s,n.bottom+=s,!!Zn(n,i,r,!1)&&(n.top<=r&&n.left<=i&&(p=e,g=n),!0)},a,l),m=!1;if(g){var y=i-g.left=x.bottom}return v=ot(e.text,v,1),Yn(n,v,f,m,i-d)}function ti(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==Nn){Nn=O("pre");for(var e=0;e<49;++e)Nn.appendChild(document.createTextNode("x")),Nn.appendChild(O("br"));Nn.appendChild(document.createTextNode("x"))}A(t.measure,Nn);var n=Nn.offsetHeight/50;return n>3&&(t.cachedTextHeight=n),M(t.measure),n||1}function ei(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=O("span","xxxxxxxxxx"),n=O("pre",[e]);A(t.measure,n);var i=e.getBoundingClientRect(),r=(i.right-i.left)/10;return r>2&&(t.cachedCharWidth=r),r||10}function ni(t){for(var e=t.display,n={},i={},r=e.gutters.clientLeft,o=e.gutters.firstChild,s=0;o;o=o.nextSibling,++s)n[t.options.gutters[s]]=o.offsetLeft+o.clientLeft+r,i[t.options.gutters[s]]=o.clientWidth;return{fixedPos:ii(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:n,gutterWidth:i,wrapperWidth:e.wrapper.clientWidth}}function ii(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function ri(t){var e=ti(t.display),n=t.options.lineWrapping,i=n&&Math.max(5,t.display.scroller.clientWidth/ei(t.display)-3);return function(r){if(Wt(t.doc,r))return 0;var o=0;if(r.widgets)for(var s=0;s=t.display.viewTo)return null;if((e-=t.display.viewFrom)<0)return null;for(var n=t.display.view,i=0;i=t.display.viewTo||a.to().linee||e==n&&s.to==e)&&(i(Math.max(s.from,e),Math.min(s.to,n),1==s.level?"rtl":"ltr",o),r=!0)}r||i(e,n,"ltr")}(g,n||0,null==i?d:i,function(t,e,r,h){var v="ltr"==r,m=f(t,v?"left":"right"),y=f(e-1,v?"right":"left"),b=null==n&&0==t,x=null==i&&e==d,w=0==h,C=!g||h==g.length-1;if(y.top-m.top<=3){var k=(c?b:x)&&w,S=(c?x:b)&&C,T=k?a:(v?m:y).left,E=S?l:(v?y:m).right;u(T,m.top,E-T,m.bottom)}else{var M,A,O,P;v?(M=c&&b&&w?a:m.left,A=c?l:p(t,r,"before"),O=c?a:p(e,r,"after"),P=c&&x&&C?l:y.right):(M=c?p(t,r,"before"):a,A=!c&&b&&w?l:m.right,O=!c&&x&&C?a:y.left,P=c?p(e,r,"after"):l),u(M,m.top,A-M,m.bottom),m.bottom0?e.blinker=setInterval(function(){return e.cursorDiv.style.visibility=(n=!n)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function pi(t){t.state.focused||(t.display.input.focus(),vi(t))}function gi(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,mi(t))},100)}function vi(t,e){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(ie(t,"focus",t,e),t.state.focused=!0,N(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),l&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),fi(t))}function mi(t,e){t.state.delayingBlurEvent||(t.state.focused&&(ie(t,"blur",t,e),t.state.focused=!1,E(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function yi(t){for(var e=t.display,n=e.lineDiv.offsetTop,i=0;i.005||u<-.005)&&(ut(r.line,o),bi(r.line),r.rest))for(var h=0;h=s&&(o=dt(e,qt(at(e,l))-t.wrapper.clientHeight),s=l)}return{from:o,to:Math.max(s,o+1)}}function wi(t){var e=t.display,n=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var i=ii(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,o=i+"px",s=0;so&&(e.bottom=e.top+o);var a=t.doc.height+kn(n),l=e.topa-i;if(e.topr+o){var u=Math.min(e.top,(c?a:e.bottom)-o);u!=r&&(s.scrollTop=u)}var h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:n.scroller.scrollLeft,d=En(t)-(t.options.fixedGutter?n.gutters.offsetWidth:0),f=e.right-e.left>d;return f&&(e.right=e.left+d),e.left<10?s.scrollLeft=0:e.leftd+h-3&&(s.scrollLeft=e.right+(f?0:10)-d),s}function Si(t,e){null!=e&&(Mi(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function Ti(t){Mi(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function Ei(t,e,n){null==e&&null==n||Mi(t),null!=e&&(t.curOp.scrollLeft=e),null!=n&&(t.curOp.scrollTop=n)}function Mi(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;var n=Kn(t,e.from),i=Kn(t,e.to);Ai(t,n,i,e.margin)}}function Ai(t,e,n,i){var r=ki(t,{left:Math.min(e.left,n.left),top:Math.min(e.top,n.top)-i,right:Math.max(e.right,n.right),bottom:Math.max(e.bottom,n.bottom)+i});Ei(t,r.scrollLeft,r.scrollTop)}function Oi(t,e){Math.abs(t.doc.scrollTop-e)<2||(n||ar(t,{top:e}),Pi(t,e,!0),n&&ar(t),nr(t,100))}function Pi(t,e,n){e=Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e),(t.display.scroller.scrollTop!=e||n)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function _i(t,e,n,i){e=Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth),(n?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!i||(t.doc.scrollLeft=e,wi(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function Li(t){var e=t.display,n=e.gutters.offsetWidth,i=Math.round(t.doc.height+kn(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?n:0,docHeight:i,scrollHeight:i+Tn(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:n}}var Ni=function(t,e,n){this.cm=n;var i=this.vert=O("div",[O("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=O("div",[O("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");i.tabIndex=r.tabIndex=-1,t(i),t(r),te(i,"scroll",function(){i.clientHeight&&e(i.scrollTop,"vertical")}),te(r,"scroll",function(){r.clientWidth&&e(r.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,s&&a<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Ni.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,n=t.scrollHeight>t.clientHeight+1,i=t.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=e?i+"px":"0";var r=t.viewHeight-(e?i:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=n?i+"px":"0",this.horiz.style.left=t.barLeft+"px";var o=t.viewWidth-t.barLeft-(n?i:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?i:0,bottom:e?i:0}},Ni.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Ni.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Ni.prototype.zeroWidthHack=function(){var t=y&&!f?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new z,this.disableVert=new z},Ni.prototype.enableZeroWidthBar=function(t,e,n){t.style.pointerEvents="auto",e.set(1e3,function i(){var r=t.getBoundingClientRect(),o="vert"==n?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1);o!=t?t.style.pointerEvents="none":e.set(1e3,i)})},Ni.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var Di=function(){};function Ii(t,e){e||(e=Li(t));var n=t.display.barWidth,i=t.display.barHeight;Fi(t,e);for(var r=0;r<4&&n!=t.display.barWidth||i!=t.display.barHeight;r++)n!=t.display.barWidth&&t.options.lineWrapping&&yi(t),Fi(t,Li(t)),n=t.display.barWidth,i=t.display.barHeight}function Fi(t,e){var n=t.display,i=n.scrollbars.update(e);n.sizer.style.paddingRight=(n.barWidth=i.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=i.bottom)+"px",n.heightForcer.style.borderBottom=i.bottom+"px solid transparent",i.right&&i.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=i.bottom+"px",n.scrollbarFiller.style.width=i.right+"px"):n.scrollbarFiller.style.display="",i.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=i.bottom+"px",n.gutterFiller.style.width=e.gutterWidth+"px"):n.gutterFiller.style.display=""}Di.prototype.update=function(){return{bottom:0,right:0}},Di.prototype.setScrollLeft=function(){},Di.prototype.setScrollTop=function(){},Di.prototype.clear=function(){};var Ri={native:Ni,null:Di};function ji(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&E(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Ri[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),te(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,n){"horizontal"==n?_i(t,e):Oi(t,e)},t),t.display.scrollbars.addClass&&N(t.display.wrapper,t.display.scrollbars.addClass)}var zi=0;function Vi(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++zi},function(t){on?on.ops.push(t):t.ownsGroup=on={ops:[t],delayedCallbacks:[]}}(t.curOp)}function Hi(t){var e=t.curOp;!function(t,e){var n=t.ownsGroup;if(n)try{!function(t){var e=t.delayedCallbacks,n=0;do{for(;n=n.viewTo)||n.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new rr(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function Bi(t){t.updatedDisplay=t.mustUpdate&&or(t.cm,t.update)}function Wi(t){var e=t.cm,n=e.display;t.updatedDisplay&&yi(e),t.barMeasure=Li(e),n.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=On(e,n.maxLine,n.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+t.adjustWidthTo+Tn(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+t.adjustWidthTo-En(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=n.input.prepareSelection())}function Ui(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLeft1&&(s=!0)),null!=c.scrollLeft&&(_i(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-h)>1&&(s=!0)),!s)break}return r}(e,Ct(i,t.scrollToPos.from),Ct(i,t.scrollToPos.to),t.scrollToPos.margin);!function(t,e){if(!re(t,"scrollCursorIntoView")){var n=t.display,i=n.sizer.getBoundingClientRect(),r=null;if(e.top+i.top<0?r=!0:e.bottom+i.top>(window.innerHeight||document.documentElement.clientHeight)&&(r=!1),null!=r&&!p){var o=O("div","​",null,"position: absolute;\n top: "+(e.top-n.viewOffset-Cn(t.display))+"px;\n height: "+(e.bottom-e.top+Tn(t)+n.barHeight)+"px;\n left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(o),o.scrollIntoView(r),t.display.lineSpace.removeChild(o)}}}(e,r)}var o=t.maybeHiddenMarkers,s=t.maybeUnhiddenMarkers;if(o)for(var a=0;ae)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Tt&&$t(t.doc,e)r.viewFrom?Qi(t):(r.viewFrom+=i,r.viewTo+=i);else if(e<=r.viewFrom&&n>=r.viewTo)Qi(t);else if(e<=r.viewFrom){var o=tr(t,n,n+i,1);o?(r.view=r.view.slice(o.index),r.viewFrom=o.lineN,r.viewTo+=i):Qi(t)}else if(n>=r.viewTo){var s=tr(t,e,e,-1);s?(r.view=r.view.slice(0,s.index),r.viewTo=s.lineN):Qi(t)}else{var a=tr(t,e,e,-1),l=tr(t,n,n+i,1);a&&l?(r.view=r.view.slice(0,a.index).concat(rn(t,a.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=i):Qi(t)}var c=r.externalMeasured;c&&(n=r.lineN&&e=i.viewTo)){var o=i.view[ai(t,e)];if(null!=o.node){var s=o.changes||(o.changes=[]);-1==V(s,n)&&s.push(n)}}}function Qi(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function tr(t,e,n,i){var r,o=ai(t,e),s=t.display.view;if(!Tt||n==t.doc.first+t.doc.size)return{index:o,lineN:n};for(var a=t.display.viewFrom,l=0;l0){if(o==s.length-1)return null;r=a+s[o].size-e,o++}else r=a-e;e+=r,n+=r}for(;$t(t.doc,n)!=n;){if(o==(i<0?0:s.length-1))return null;n+=i*s[o-(i<0?1:0)].size,o+=i}return{index:o,lineN:n}}function er(t){for(var e=t.display.view,n=0,i=0;i=t.display.viewTo)){var n=+new Date+t.options.workTime,i=Re(t,e.highlightFrontier),r=[];e.iter(i.line,Math.min(e.first+e.size,t.display.viewTo+500),function(o){if(i.line>=t.display.viewFrom){var s=o.styles,a=o.text.length>t.options.maxHighlightLength?Oe(e.mode,i.state):null,l=Ie(t,o,i,!0);a&&(i.state=a),o.styles=l.styles;var c=o.styleClasses,u=l.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var h=!s||s.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),d=0;!h&&dn)return nr(t,t.options.workDelay),!0}),e.highlightFrontier=i.line,e.modeFrontier=Math.max(e.modeFrontier,i.line),r.length&&Ki(t,function(){for(var e=0;e=n.viewFrom&&e.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==er(t))return!1;Ci(t)&&(Qi(t),e.dims=ni(t));var r=i.first+i.size,o=Math.max(e.visible.from-t.options.viewportMargin,i.first),s=Math.min(r,e.visible.to+t.options.viewportMargin);n.viewFroms&&n.viewTo-s<20&&(s=Math.min(r,n.viewTo)),Tt&&(o=$t(t.doc,o),s=Bt(t.doc,s));var a=o!=n.viewFrom||s!=n.viewTo||n.lastWrapHeight!=e.wrapperHeight||n.lastWrapWidth!=e.wrapperWidth;!function(t,e,n){var i=t.display;0==i.view.length||e>=i.viewTo||n<=i.viewFrom?(i.view=rn(t,e,n),i.viewFrom=e):(i.viewFrom>e?i.view=rn(t,e,i.viewFrom).concat(i.view):i.viewFromn&&(i.view=i.view.slice(0,ai(t,n)))),i.viewTo=n}(t,o,s),n.viewOffset=qt(at(t.doc,n.viewFrom)),t.display.mover.style.top=n.viewOffset+"px";var c=er(t);if(!a&&0==c&&!e.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var u=function(t){if(t.hasFocus())return null;var e=L();if(!e||!_(t.display.lineDiv,e))return null;var n={activeElt:e};if(window.getSelection){var i=window.getSelection();i.anchorNode&&i.extend&&_(t.display.lineDiv,i.anchorNode)&&(n.anchorNode=i.anchorNode,n.anchorOffset=i.anchorOffset,n.focusNode=i.focusNode,n.focusOffset=i.focusOffset)}return n}(t);return c>4&&(n.lineDiv.style.display="none"),function(t,e,n){var i=t.display,r=t.options.lineNumbers,o=i.lineDiv,s=o.firstChild;function a(e){var n=e.nextSibling;return l&&y&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),n}for(var c=i.view,u=i.viewFrom,h=0;h-1&&(f=!1),cn(t,d,u,n)),f&&(M(d.lineNumber),d.lineNumber.appendChild(document.createTextNode(pt(t.options,u)))),s=d.node.nextSibling}else{var p=vn(t,d,u,n);o.insertBefore(p,s)}u+=d.size}for(;s;)s=a(s)}(t,n.updateLineNumbers,e.dims),c>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,function(t){if(t&&t.activeElt&&t.activeElt!=L()&&(t.activeElt.focus(),t.anchorNode&&_(document.body,t.anchorNode)&&_(document.body,t.focusNode))){var e=window.getSelection(),n=document.createRange();n.setEnd(t.anchorNode,t.anchorOffset),n.collapse(!1),e.removeAllRanges(),e.addRange(n),e.extend(t.focusNode,t.focusOffset)}}(u),M(n.cursorDiv),M(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,a&&(n.lastWrapHeight=e.wrapperHeight,n.lastWrapWidth=e.wrapperWidth,nr(t,400)),n.updateLineNumbers=null,!0}function sr(t,e){for(var n=e.viewport,i=!0;(i&&t.options.lineWrapping&&e.oldDisplayWidth!=En(t)||(n&&null!=n.top&&(n={top:Math.min(t.doc.height+kn(t.display)-Mn(t),n.top)}),e.visible=xi(t.display,t.doc,n),!(e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)))&&or(t,e);i=!1){yi(t);var r=Li(t);li(t),Ii(t,r),cr(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function ar(t,e){var n=new rr(t,e);if(or(t,n)){yi(t),sr(t,n);var i=Li(t);li(t),Ii(t,i),cr(t,i),n.finish()}}function lr(t){var e=t.display.gutters.offsetWidth;t.display.sizer.style.marginLeft=e+"px"}function cr(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+Tn(t)+"px"}function ur(t){var e=t.display.gutters,n=t.options.gutters;M(e);for(var i=0;i-1&&!t.lineNumbers&&(t.gutters=t.gutters.slice(0),t.gutters.splice(e,1))}rr.prototype.signal=function(t,e){se(t,e)&&this.events.push(arguments)},rr.prototype.finish=function(){for(var t=0;ta.clientWidth,u=a.scrollHeight>a.clientHeight;if(r&&c||o&&u){if(o&&y&&l)t:for(var d=e.target,f=s.view;d!=a;d=d.parentNode)for(var p=0;p=0&&vt(t,i.to())<=0)return n}return-1};var yr=function(t,e){this.anchor=t,this.head=e};function br(t,e){var n=t[e];t.sort(function(t,e){return vt(t.from(),e.from())}),e=V(t,n);for(var i=1;i=0){var s=xt(o.from(),r.from()),a=bt(o.to(),r.to()),l=o.empty()?r.from()==r.head:o.from()==o.head;i<=e&&--e,t.splice(--i,2,new yr(l?a:s,l?s:a))}}return new mr(t,e)}function xr(t,e){return new mr([new yr(t,e||t)],0)}function wr(t){return t.text?gt(t.from.line+t.text.length-1,G(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function Cr(t,e){if(vt(t,e.from)<0)return t;if(vt(t,e.to)<=0)return wr(e);var n=t.line+e.text.length-(e.to.line-e.from.line)-1,i=t.ch;return t.line==e.to.line&&(i+=wr(e).ch-e.to.ch),gt(n,i)}function kr(t,e){for(var n=[],i=0;i1&&t.remove(a.line+1,p-1),t.insert(a.line+1,m)}an(t,"change",t,e)}function Or(t,e,n){!function t(i,r,o){if(i.linked)for(var s=0;sa-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(o=function(t,e){return e?(Dr(t.done),G(t.done)):t.done.length&&!G(t.done).ranges?G(t.done):t.done.length>1&&!t.done[t.done.length-2].ranges?(t.done.pop(),G(t.done)):void 0}(r,r.lastOp==i)))s=G(o.changes),0==vt(e.from,e.to)&&0==vt(e.from,s.to)?s.to=wr(e):o.changes.push(Nr(t,e));else{var l=G(r.done);for(l&&l.ranges||Rr(t.sel,r.done),o={changes:[Nr(t,e)],generation:r.generation},r.done.push(o);r.done.length>r.undoDepth;)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(n),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=a,r.lastOp=r.lastSelOp=i,r.lastOrigin=r.lastSelOrigin=e.origin,s||ie(t,"historyAdded")}function Fr(t,e,n,i){var r=t.history,o=i&&i.origin;n==r.lastSelOp||o&&r.lastSelOrigin==o&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==o||function(t,e,n,i){var r=e.charAt(0);return"*"==r||"+"==r&&n.ranges.length==i.ranges.length&&n.somethingSelected()==i.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}(t,o,G(r.done),e))?r.done[r.done.length-1]=e:Rr(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=o,r.lastSelOp=n,i&&!1!==i.clearRedo&&Dr(r.undone)}function Rr(t,e){var n=G(e);n&&n.ranges&&n.equals(t)||e.push(t)}function jr(t,e,n,i){var r=e["spans_"+t.id],o=0;t.iter(Math.max(t.first,n),Math.min(t.first+t.size,i),function(n){n.markedSpans&&((r||(r=e["spans_"+t.id]={}))[o]=n.markedSpans),++o})}function zr(t){if(!t)return null;for(var e,n=0;n-1&&(G(a)[h]=c[h],delete c[h])}}}return i}function $r(t,e,n,i){if(i){var r=t.anchor;if(n){var o=vt(e,r)<0;o!=vt(n,r)<0?(r=e,e=n):o!=vt(e,n)<0&&(e=n)}return new yr(r,e)}return new yr(n||e,e)}function Br(t,e,n,i,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),Yr(t,new mr([$r(t.sel.primary(),e,n,r)],0),i)}function Wr(t,e,n){for(var i=[],r=t.cm&&(t.cm.display.shift||t.extend),o=0;o=e.ch:a.to>e.ch))){if(r&&(ie(l,"beforeCursorEnter"),l.explicitlyCleared)){if(o.markedSpans){--s;continue}break}if(!l.atomic)continue;if(n){var c=l.find(i<0?1:-1),u=void 0;if((i<0?l.inclusiveRight:l.inclusiveLeft)&&(c=eo(t,c,-i,c&&c.line==e.line?o:null)),c&&c.line==e.line&&(u=vt(c,n))&&(i<0?u<0:u>0))return Qr(t,c,e,i,r)}var h=l.find(i<0?-1:1);return(i<0?l.inclusiveLeft:l.inclusiveRight)&&(h=eo(t,h,i,h.line==e.line?o:null)),h?Qr(t,h,e,i,r):null}}return e}function to(t,e,n,i,r){var o=i||1,s=Qr(t,e,n,o,r)||!r&&Qr(t,e,n,o,!0)||Qr(t,e,n,-o,r)||!r&&Qr(t,e,n,-o,!0);return s||(t.cantEdit=!0,gt(t.first,0))}function eo(t,e,n,i){return n<0&&0==e.ch?e.line>t.first?Ct(t,gt(e.line-1)):null:n>0&&e.ch==(i||at(t,e.line)).text.length?e.line0)){var u=[l,1],h=vt(c.from,a.from),d=vt(c.to,a.to);(h<0||!s.inclusiveLeft&&!h)&&u.push({from:c.from,to:a.from}),(d>0||!s.inclusiveRight&&!d)&&u.push({from:a.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}(t,e.from,e.to);if(i)for(var r=i.length-1;r>=0;--r)oo(t,{from:i[r].from,to:i[r].to,text:r?[""]:e.text,origin:e.origin});else oo(t,e)}}function oo(t,e){if(1!=e.text.length||""!=e.text[0]||0!=vt(e.from,e.to)){var n=kr(t,e);Ir(t,e,n,t.cm?t.cm.curOp.id:NaN),lo(t,e,n,Ot(t,e));var i=[];Or(t,function(t,n){n||-1!=V(i,t.history)||(fo(t.history,e),i.push(t.history)),lo(t,e,null,Ot(t,e))})}}function so(t,e,n){var i=t.cm&&t.cm.state.suppressEdits;if(!i||n){for(var r,o=t.history,s=t.sel,a="undo"==e?o.done:o.undone,l="undo"==e?o.undone:o.done,c=0;c=0;--f){var p=d(f);if(p)return p.v}}}}function ao(t,e){if(0!=e&&(t.first+=e,t.sel=new mr(X(t.sel.ranges,function(t){return new yr(gt(t.anchor.line+e,t.anchor.ch),gt(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){Ji(t.cm,t.first,t.first-e,e);for(var n=t.cm.display,i=n.viewFrom;it.lastLine())){if(e.from.lineo&&(e={from:e.from,to:gt(o,at(t,o).text.length),text:[e.text[0]],origin:e.origin}),e.removed=lt(t,e.from,e.to),n||(n=kr(t,e)),t.cm?function(t,e,n){var i=t.doc,r=t.display,o=e.from,s=e.to,a=!1,l=o.line;t.options.lineWrapping||(l=ht(Ht(at(i,o.line))),i.iter(l,s.line+1,function(t){if(t==r.maxLine)return a=!0,!0})),i.sel.contains(e.from,e.to)>-1&&oe(t),Ar(i,e,n,ri(t)),t.options.lineWrapping||(i.iter(l,o.line+e.text.length,function(t){var e=Kt(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,a=!1)}),a&&(t.curOp.updateMaxLine=!0)),function(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontiern;i--){var r=at(t,i).stateAfter;if(r&&(!(r instanceof Ne)||i+r.lookAhead1||!(this.children[0]instanceof go))){var a=[];this.collapse(a),this.children=[new go(a)],this.children[0].parent=this}},collapse:function(t){for(var e=0;e50){for(var s=r.lines.length%25+25,a=s;a10);t.parent.maybeSpill()}},iterN:function(t,e,n){for(var i=0;i0||0==s&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=P("span",[o.replacedWith],"CodeMirror-widget"),i.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),i.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(Vt(t,e.line,e,n,o)||e.line!=n.line&&Vt(t,n.line,e,n,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Tt=!0}o.addToHistory&&Ir(t,{from:e,to:n,origin:"markText"},t.sel,NaN);var a,l=e.line,c=t.cm;if(t.iter(l,n.line+1,function(t){c&&o.collapsed&&!c.options.lineWrapping&&Ht(t)==c.display.maxLine&&(a=!0),o.collapsed&&l!=e.line&&ut(t,0),function(t,e){t.markedSpans=t.markedSpans?t.markedSpans.concat([e]):[e],e.marker.attachLine(t)}(t,new Et(o,l==e.line?e.ch:null,l==n.line?n.ch:null)),++l}),o.collapsed&&t.iter(e.line,n.line+1,function(e){Wt(t,e)&&ut(e,0)}),o.clearOnEnter&&te(o,"beforeCursorEnter",function(){return o.clear()}),o.readOnly&&(St=!0,(t.history.done.length||t.history.undone.length)&&t.clearHistory()),o.collapsed&&(o.id=++bo,o.atomic=!0),c){if(a&&(c.curOp.updateMaxLine=!0),o.collapsed)Ji(c,e.line,n.line+1);else if(o.className||o.title||o.startStyle||o.endStyle||o.css)for(var u=e.line;u<=n.line;u++)Zi(c,u,"text");o.atomic&&Jr(c.doc),an(c,"markerAdded",c,o)}return o}xo.prototype.clear=function(){if(!this.explicitlyCleared){var t=this.doc.cm,e=t&&!t.curOp;if(e&&Vi(t),se(this,"clear")){var n=this.find();n&&an(this,"clear",n.from,n.to)}for(var i=null,r=null,o=0;ot.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=u,t.display.maxLineChanged=!0)}null!=i&&t&&this.collapsed&&Ji(t,i,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Jr(t.doc)),t&&an(t,"markerCleared",t,this,i,r),e&&Hi(t),this.parent&&this.parent.clear()}},xo.prototype.find=function(t,e){var n,i;null==t&&"bookmark"==this.type&&(t=1);for(var r=0;r=0;l--)ro(this,i[l]);a?Kr(this,a):this.cm&&Ti(this.cm)}),undo:Xi(function(){so(this,"undo")}),redo:Xi(function(){so(this,"redo")}),undoSelection:Xi(function(){so(this,"undo",!0)}),redoSelection:Xi(function(){so(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,n=0,i=0;i=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,n){t=Ct(this,t),e=Ct(this,e);var i=[],r=t.line;return this.iter(t.line,e.line+1,function(o){var s=o.markedSpans;if(s)for(var a=0;a=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||n&&!n(l.marker)||i.push(l.marker.parent||l.marker)}++r}),i},getAllMarks:function(){var t=[];return this.iter(function(e){var n=e.markedSpans;if(n)for(var i=0;it)return e=t,!0;t-=o,++n}),Ct(this,gt(n,e))},indexFromPos:function(t){var e=(t=Ct(this,t)).ch;if(t.linee&&(e=t.from),null!=t.to&&t.to-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var u=t.dataTransfer.getData("Text");if(u){var h;if(e.state.draggingText&&!e.state.draggingText.copy&&(h=e.listSelections()),Gr(e.doc,xr(n,n)),h)for(var d=0;d=0;e--)co(t.doc,"",i[e].from,i[e].to,"+delete");Ti(t)})}function Ko(t,e,n){var i=ot(t.text,e+n,n);return i<0||i>t.text.length?null:i}function Yo(t,e,n){var i=Ko(t,e.ch,n);return null==i?null:new gt(e.line,i,n<0?"after":"before")}function Go(t,e,n,i,r){if(t){var o=Zt(n,e.doc.direction);if(o){var s,a=r<0?G(o):o[0],l=r<0==(1==a.level),c=l?"after":"before";if(a.level>0||"rtl"==e.doc.direction){var u=_n(e,n);s=r<0?n.text.length-1:0;var h=Ln(e,u,s).top;s=st(function(t){return Ln(e,u,t).top==h},r<0==(1==a.level)?a.from:a.to-1,s),"before"==c&&(s=Ko(n,s,1))}else s=r<0?a.to:a.from;return new gt(i,s,c)}}return new gt(i,r<0?n.text.length:0,r<0?"before":"after")}jo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},jo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},jo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},jo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},jo.default=y?jo.macDefault:jo.pcDefault;var Xo={selectAll:no,singleSelection:function(t){return t.setSelection(t.getCursor("anchor"),t.getCursor("head"),B)},killLine:function(t){return qo(t,function(e){if(e.empty()){var n=at(t.doc,e.head.line).text.length;return e.head.ch==n&&e.head.line0)r=new gt(r.line,r.ch+1),t.replaceRange(o.charAt(r.ch-1)+o.charAt(r.ch-2),gt(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var s=at(t.doc,r.line-1).text;s&&(r=new gt(r.line,1),t.replaceRange(o.charAt(0)+t.doc.lineSeparator()+s.charAt(s.length-1),gt(r.line-1,s.length-1),r,"+transpose"))}n.push(new yr(r,r))}t.setSelections(n)})},newlineAndIndent:function(t){return Ki(t,function(){for(var e=t.listSelections(),n=e.length-1;n>=0;n--)t.replaceRange(t.doc.lineSeparator(),e[n].anchor,e[n].head,"+input");e=t.listSelections();for(var i=0;i-1&&(vt((r=c.ranges[r]).from(),e)<0||e.xRel>0)&&(vt(r.to(),e)>0||e.xRel<0)?function(t,e,n,i){var r=t.display,o=!1,c=Yi(t,function(e){l&&(r.scroller.draggable=!1),t.state.draggingText=!1,ne(r.wrapper.ownerDocument,"mouseup",c),ne(r.wrapper.ownerDocument,"mousemove",u),ne(r.scroller,"dragstart",h),ne(r.scroller,"drop",c),o||(le(e),i.addNew||Br(t.doc,n,null,null,i.extend),l||s&&9==a?setTimeout(function(){r.wrapper.ownerDocument.body.focus(),r.input.focus()},20):r.input.focus())}),u=function(t){o=o||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},h=function(){return o=!0};l&&(r.scroller.draggable=!0),t.state.draggingText=c,c.copy=!i.moveOnDrag,r.scroller.dragDrop&&r.scroller.dragDrop(),te(r.wrapper.ownerDocument,"mouseup",c),te(r.wrapper.ownerDocument,"mousemove",u),te(r.scroller,"dragstart",h),te(r.scroller,"drop",c),gi(t),setTimeout(function(){return r.input.focus()},20)}(t,i,e,o):function(t,e,n,i){var r=t.display,o=t.doc;le(e);var s,a,l=o.sel,c=l.ranges;if(i.addNew&&!i.extend?(a=o.sel.contains(n),s=a>-1?c[a]:new yr(n,n)):(s=o.sel.primary(),a=o.sel.primIndex),"rectangle"==i.unit)i.addNew||(s=new yr(n,n)),n=si(t,e,!0,!0),a=-1;else{var u=ds(t,n,i.unit);s=i.extend?$r(s,u.anchor,u.head,i.extend):u}i.addNew?-1==a?(a=c.length,Yr(o,br(c.concat([s]),a),{scroll:!1,origin:"*mouse"})):c.length>1&&c[a].empty()&&"char"==i.unit&&!i.extend?(Yr(o,br(c.slice(0,a).concat(c.slice(a+1)),0),{scroll:!1,origin:"*mouse"}),l=o.sel):Ur(o,a,s,W):(a=0,Yr(o,new mr([s],0),W),l=o.sel);var h=n;function d(e){if(0!=vt(h,e))if(h=e,"rectangle"==i.unit){for(var r=[],c=t.options.tabSize,u=j(at(o,n.line).text,n.ch,c),d=j(at(o,e.line).text,e.ch,c),f=Math.min(u,d),p=Math.max(u,d),g=Math.min(n.line,e.line),v=Math.min(t.lastLine(),Math.max(n.line,e.line));g<=v;g++){var m=at(o,g).text,y=q(m,f,c);f==p?r.push(new yr(gt(g,y),gt(g,y))):m.length>y&&r.push(new yr(gt(g,y),gt(g,q(m,p,c))))}r.length||r.push(new yr(n,n)),Yr(o,br(l.ranges.slice(0,a).concat(r),a),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var b,x=s,w=ds(t,e,i.unit),C=x.anchor;vt(w.anchor,C)>0?(b=w.head,C=xt(x.from(),w.anchor)):(b=w.anchor,C=bt(x.to(),w.head));var k=l.ranges.slice(0);k[a]=function(t,e){var n=e.anchor,i=e.head,r=at(t.doc,n.line);if(0==vt(n,i)&&n.sticky==i.sticky)return e;var o=Zt(r);if(!o)return e;var s=Xt(o,n.ch,n.sticky),a=o[s];if(a.from!=n.ch&&a.to!=n.ch)return e;var l,c=s+(a.from==n.ch==(1!=a.level)?0:1);if(0==c||c==o.length)return e;if(i.line!=n.line)l=(i.line-n.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=Xt(o,i.ch,i.sticky),h=u-s||(i.ch-n.ch)*(1==a.level?-1:1);l=u==c-1||u==c?h<0:h>0}var d=o[c+(l?-1:0)],f=l==(1==d.level),p=f?d.from:d.to,g=f?"after":"before";return n.ch==p&&n.sticky==g?e:new yr(new gt(n.line,p,g),i)}(t,new yr(Ct(o,C),b)),Yr(o,br(k,a),W)}}var f=r.wrapper.getBoundingClientRect(),p=0;function g(e){t.state.selectingText=!1,p=1/0,le(e),r.input.focus(),ne(r.wrapper.ownerDocument,"mousemove",v),ne(r.wrapper.ownerDocument,"mouseup",m),o.history.lastSelOrigin=null}var v=Yi(t,function(e){0!==e.buttons&&fe(e)?function e(n){var s=++p,a=si(t,n,!0,"rectangle"==i.unit);if(a)if(0!=vt(a,h)){t.curOp.focus=L(),d(a);var l=xi(r,o);(a.line>=l.to||a.linef.bottom?20:0;c&&setTimeout(Yi(t,function(){p==s&&(r.scroller.scrollTop+=c,e(n))}),50)}}(e):g(e)}),m=Yi(t,g);t.state.selectingText=m,te(r.wrapper.ownerDocument,"mousemove",v),te(r.wrapper.ownerDocument,"mouseup",m)}(t,i,e,o)}(e,i,o,t):de(t)==n.scroller&&le(t):2==r?(i&&Br(e.doc,i),setTimeout(function(){return n.input.focus()},20)):3==r&&(k?gs(e,t):gi(e)))}}function ds(t,e,n){if("char"==n)return new yr(e,e);if("word"==n)return t.findWordAt(e);if("line"==n)return new yr(gt(e.line,0),Ct(t.doc,gt(e.line+1,0)));var i=n(t,e);return new yr(i.from,i.to)}function fs(t,e,n,i){var r,o;if(e.touches)r=e.touches[0].clientX,o=e.touches[0].clientY;else try{r=e.clientX,o=e.clientY}catch(e){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;i&&le(e);var s=t.display,a=s.lineDiv.getBoundingClientRect();if(o>a.bottom||!se(t,n))return ue(e);o-=a.top-s.viewOffset;for(var l=0;l=r){var u=dt(t.doc,o),h=t.options.gutters[l];return ie(t,n,t,u,h,e),ue(e)}}}function ps(t,e){return fs(t,e,"gutterClick",!0)}function gs(t,e){wn(t.display,e)||function(t,e){return!!se(t,"gutterContextMenu")&&fs(t,e,"gutterContextMenu",!1)}(t,e)||re(t,e,"contextmenu")||t.display.input.onContextMenu(e)}function vs(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),zn(t)}us.prototype.compare=function(t,e,n){return this.time+400>t&&0==vt(e,this.pos)&&n==this.button};var ms={toString:function(){return"CodeMirror.Init"}},ys={},bs={};function xs(t){ur(t),Ji(t),wi(t)}function ws(t,e,n){var i=n&&n!=ms;if(!e!=!i){var r=t.display.dragFunctions,o=e?te:ne;o(t.display.scroller,"dragstart",r.start),o(t.display.scroller,"dragenter",r.enter),o(t.display.scroller,"dragover",r.over),o(t.display.scroller,"dragleave",r.leave),o(t.display.scroller,"drop",r.drop)}}function Cs(t){t.options.lineWrapping?(N(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(E(t.display.wrapper,"CodeMirror-wrap"),Yt(t)),oi(t),Ji(t),zn(t),setTimeout(function(){return Ii(t)},100)}function ks(t,e){var i=this;if(!(this instanceof ks))return new ks(t,e);this.options=e=e?R(e):{},R(ys,e,!1),hr(e);var r=e.value;"string"==typeof r&&(r=new Eo(r,e.mode,null,e.lineSeparator,e.direction)),this.doc=r;var o=new ks.inputStyles[e.inputStyle](this),c=this.display=new function(t,e,i){var r=this;this.input=i,r.scrollbarFiller=O("div",null,"CodeMirror-scrollbar-filler"),r.scrollbarFiller.setAttribute("cm-not-content","true"),r.gutterFiller=O("div",null,"CodeMirror-gutter-filler"),r.gutterFiller.setAttribute("cm-not-content","true"),r.lineDiv=P("div",null,"CodeMirror-code"),r.selectionDiv=O("div",null,null,"position: relative; z-index: 1"),r.cursorDiv=O("div",null,"CodeMirror-cursors"),r.measure=O("div",null,"CodeMirror-measure"),r.lineMeasure=O("div",null,"CodeMirror-measure"),r.lineSpace=P("div",[r.measure,r.lineMeasure,r.selectionDiv,r.cursorDiv,r.lineDiv],null,"position: relative; outline: none");var o=P("div",[r.lineSpace],"CodeMirror-lines");r.mover=O("div",[o],null,"position: relative"),r.sizer=O("div",[r.mover],"CodeMirror-sizer"),r.sizerWidth=null,r.heightForcer=O("div",null,null,"position: absolute; height: "+H+"px; width: 1px;"),r.gutters=O("div",null,"CodeMirror-gutters"),r.lineGutter=null,r.scroller=O("div",[r.sizer,r.heightForcer,r.gutters],"CodeMirror-scroll"),r.scroller.setAttribute("tabIndex","-1"),r.wrapper=O("div",[r.scrollbarFiller,r.gutterFiller,r.scroller],"CodeMirror"),s&&a<8&&(r.gutters.style.zIndex=-1,r.scroller.style.paddingRight=0),l||n&&m||(r.scroller.draggable=!0),t&&(t.appendChild?t.appendChild(r.wrapper):t(r.wrapper)),r.viewFrom=r.viewTo=e.first,r.reportedViewFrom=r.reportedViewTo=e.first,r.view=[],r.renderedView=null,r.externalMeasured=null,r.viewOffset=0,r.lastWrapHeight=r.lastWrapWidth=0,r.updateLineNumbers=null,r.nativeBarWidth=r.barHeight=r.barWidth=0,r.scrollbarsClipped=!1,r.lineNumWidth=r.lineNumInnerWidth=r.lineNumChars=null,r.alignWidgets=!1,r.cachedCharWidth=r.cachedTextHeight=r.cachedPaddingH=null,r.maxLine=null,r.maxLineLength=0,r.maxLineChanged=!1,r.wheelDX=r.wheelDY=r.wheelStartX=r.wheelStartY=null,r.shift=!1,r.selForContextMenu=null,r.activeTouch=null,i.init(r)}(t,r,o);for(var u in c.wrapper.CodeMirror=this,ur(this),vs(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),ji(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new z,keySeq:null,specialChars:null},e.autofocus&&!m&&c.input.focus(),s&&a<11&&setTimeout(function(){return i.display.input.reset(!0)},20),function(t){var e=t.display;te(e.scroller,"mousedown",Yi(t,hs)),te(e.scroller,"dblclick",s&&a<11?Yi(t,function(e){if(!re(t,e)){var n=si(t,e);if(n&&!ps(t,e)&&!wn(t.display,e)){le(e);var i=t.findWordAt(n);Br(t.doc,i.anchor,i.head)}}}):function(e){return re(t,e)||le(e)}),k||te(e.scroller,"contextmenu",function(e){return gs(t,e)});var n,i={end:0};function r(){e.activeTouch&&(n=setTimeout(function(){return e.activeTouch=null},1e3),(i=e.activeTouch).end=+new Date)}function o(t,e){if(null==e.left)return!0;var n=e.left-t.left,i=e.top-t.top;return n*n+i*i>400}te(e.scroller,"touchstart",function(r){if(!re(t,r)&&!function(t){if(1!=t.touches.length)return!1;var e=t.touches[0];return e.radiusX<=1&&e.radiusY<=1}(r)&&!ps(t,r)){e.input.ensurePolled(),clearTimeout(n);var o=+new Date;e.activeTouch={start:o,moved:!1,prev:o-i.end<=300?i:null},1==r.touches.length&&(e.activeTouch.left=r.touches[0].pageX,e.activeTouch.top=r.touches[0].pageY)}}),te(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),te(e.scroller,"touchend",function(n){var i=e.activeTouch;if(i&&!wn(e,n)&&null!=i.left&&!i.moved&&new Date-i.start<300){var s,a=t.coordsChar(e.activeTouch,"page");s=!i.prev||o(i,i.prev)?new yr(a,a):!i.prev.prev||o(i,i.prev.prev)?t.findWordAt(a):new yr(gt(a.line,0),Ct(t.doc,gt(a.line+1,0))),t.setSelection(s.anchor,s.head),t.focus(),le(n)}r()}),te(e.scroller,"touchcancel",r),te(e.scroller,"scroll",function(){e.scroller.clientHeight&&(Oi(t,e.scroller.scrollTop),_i(t,e.scroller.scrollLeft,!0),ie(t,"scroll",t))}),te(e.scroller,"mousewheel",function(e){return vr(t,e)}),te(e.scroller,"DOMMouseScroll",function(e){return vr(t,e)}),te(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(e){re(t,e)||he(e)},over:function(e){re(t,e)||(function(t,e){var n=si(t,e);if(n){var i=document.createDocumentFragment();ui(t,n,i),t.display.dragCursor||(t.display.dragCursor=O("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),t.display.lineSpace.insertBefore(t.display.dragCursor,t.display.cursorDiv)),A(t.display.dragCursor,i)}}(t,e),he(e))},start:function(e){return function(t,e){if(s&&(!t.state.draggingText||+new Date-Mo<100))he(e);else if(!re(t,e)&&!wn(t.display,e)&&(e.dataTransfer.setData("Text",t.getSelection()),e.dataTransfer.effectAllowed="copyMove",e.dataTransfer.setDragImage&&!d)){var n=O("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",h&&(n.width=n.height=1,t.display.wrapper.appendChild(n),n._top=n.offsetTop),e.dataTransfer.setDragImage(n,0,0),h&&n.parentNode.removeChild(n)}}(t,e)},drop:Yi(t,Ao),leave:function(e){re(t,e)||Oo(t)}};var l=e.input.getField();te(l,"keyup",function(e){return ss.call(t,e)}),te(l,"keydown",Yi(t,os)),te(l,"keypress",Yi(t,as)),te(l,"focus",function(e){return vi(t,e)}),te(l,"blur",function(e){return mi(t,e)})}(this),Lo(),Vi(this),this.curOp.forceUpdate=!0,Pr(this,r),e.autofocus&&!m||this.hasFocus()?setTimeout(F(vi,this),20):mi(this),bs)bs.hasOwnProperty(u)&&bs[u](i,e[u],ms);Ci(this),e.finishInit&&e.finishInit(this);for(var f=0;f150)){if(!i)return;n="prev"}}else c=0,n="not";"prev"==n?c=e>o.first?j(at(o,e-1).text,null,s):0:"add"==n?c=l+t.options.indentUnit:"subtract"==n?c=l-t.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var h="",d=0;if(t.options.indentWithTabs)for(var f=Math.floor(c/s);f;--f)d+=s,h+="\t";if(d1)if(Es&&Es.text.join("\n")==e){if(i.ranges.length%Es.text.length==0){c=[];for(var u=0;u=0;h--){var d=i.ranges[h],f=d.from(),p=d.to();d.empty()&&(n&&n>0?f=gt(f.line,f.ch-n):t.state.overwrite&&!a?p=gt(p.line,Math.min(at(o,p.line).text.length,p.ch+G(l).length)):Es&&Es.lineWise&&Es.text.join("\n")==e&&(f=p=gt(f.line,0))),s=t.curOp.updateInput;var g={from:f,to:p,text:c?c[h%c.length]:l,origin:r||(a?"paste":t.state.cutIncoming?"cut":"+input")};ro(t.doc,g),an(t,"inputRead",t,g)}e&&!a&&Ps(t,e),Ti(t),t.curOp.updateInput=s,t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=!1}function Os(t,e){var n=t.clipboardData&&t.clipboardData.getData("Text");if(n)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||Ki(e,function(){return As(e,n,0,null,"paste")}),!0}function Ps(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var n=t.doc.sel,i=n.ranges.length-1;i>=0;i--){var r=n.ranges[i];if(!(r.head.ch>100||i&&n.ranges[i-1].head.line==r.head.line)){var o=t.getModeAt(r.head),s=!1;if(o.electricChars){for(var a=0;a-1){s=Ts(t,r.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(at(t.doc,r.head.line).text.slice(0,r.head.ch))&&(s=Ts(t,r.head.line,"smart"));s&&an(t,"electricInput",t,r.head.line)}}}function _s(t){for(var e=[],n=[],i=0;i=e.text.length?(n.ch=e.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=Xt(r,n.ch,n.sticky),s=r[o];if("ltr"==t.doc.direction&&s.level%2==0&&(i>0?s.to>n.ch:s.from=s.from&&d>=u.begin)){var f=h?"before":"after";return new gt(n.line,d,f)}}var p=function(t,e,i){for(var o=function(t,e){return e?new gt(n.line,l(t,1),"before"):new gt(n.line,t,"after")};t>=0&&t0==(1!=s.level),c=a?i.begin:l(i.end,-1);if(s.from<=c&&c0?u.end:l(u.begin,-1);return null==v||i>0&&v==e.text.length||!(g=p(i>0?0:r.length-1,i,c(v)))?null:g}(t.cm,a,e,n):Yo(a,e,n))){if(i||!function(){var i=e.line+n;return!(i=t.first+t.size)&&(e=new gt(i,e.ch,e.sticky),a=at(t,i))}())return!1;e=Go(r,t.cm,a,e.line,n)}else e=o;return!0}if("char"==i)l();else if("column"==i)l(!0);else if("word"==i||"group"==i)for(var c=null,u="group"==i,h=t.cm&&t.cm.getHelper(e,"wordChars"),d=!0;!(n<0)||l(!d);d=!1){var f=a.text.charAt(e.ch)||"\n",p=et(f,h)?"w":u&&"\n"==f?"n":!u||/\s/.test(f)?null:"p";if(!u||d||p||(p="s"),c&&c!=p){n<0&&(n=1,l(),e.sticky="after");break}if(p&&(c=p),n>0&&!l(!d))break}var g=to(t,e,o,s,!0);return mt(o,g)&&(g.hitSide=!0),g}function Is(t,e,n,i){var r,o,s=t.doc,a=e.left;if("page"==i){var l=Math.min(t.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(l-.5*ti(t.display),3);r=(n>0?e.bottom:e.top)+n*c}else"line"==i&&(r=n>0?e.bottom+3:e.top-3);for(;(o=Gn(t,a,r)).outside;){if(n<0?r<=0:r>=s.height){o.hitSide=!0;break}r+=5*n}return o}var Fs=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new z,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Rs(t,e){var n=Pn(t,e.line);if(!n||n.hidden)return null;var i=at(t.doc,e.line),r=An(n,i,e.line),o=Zt(i,t.doc.direction),s="left";if(o){var a=Xt(o,e.ch);s=a%2?"right":"left"}var l=In(r.map,e.ch,s);return l.offset="right"==l.collapse?l.end:l.start,l}function js(t,e){return e&&(t.bad=!0),t}function zs(t,e,n){var i;if(e==t.display.lineDiv){if(!(i=t.display.lineDiv.childNodes[n]))return js(t.clipPos(gt(t.display.viewTo-1)),!0);e=null,n=0}else for(i=e;;i=i.parentNode){if(!i||i==t.display.lineDiv)return null;if(i.parentNode&&i.parentNode==t.display.lineDiv)break}for(var r=0;r=e.display.viewTo||o.line=e.display.viewFrom&&Rs(e,r)||{node:l[0].measure.map[2],offset:0},u=o.linei.firstLine()&&(s=gt(s.line-1,at(i.doc,s.line-1).length)),a.ch==at(i.doc,a.line).text.length&&a.liner.viewTo-1)return!1;s.line==r.viewFrom||0==(t=ai(i,s.line))?(e=ht(r.view[0].line),n=r.view[0].node):(e=ht(r.view[t].line),n=r.view[t-1].node.nextSibling);var l,c,u=ai(i,a.line);if(u==r.view.length-1?(l=r.viewTo-1,c=r.lineDiv.lastChild):(l=ht(r.view[u+1].line)-1,c=r.view[u+1].node.previousSibling),!n)return!1;for(var h=i.doc.splitLines(function(t,e,n,i,r){var o="",s=!1,a=t.doc.lineSeparator(),l=!1;function c(){s&&(o+=a,l&&(o+=a),s=l=!1)}function u(t){t&&(c(),o+=t)}function h(e){if(1==e.nodeType){var n=e.getAttribute("cm-text");if(n)return void u(n);var o,d=e.getAttribute("cm-marker");if(d){var f=t.findMarks(gt(i,0),gt(r+1,0),function(t){return function(e){return e.id==t}}(+d));return void(f.length&&(o=f[0].find(0))&&u(lt(t.doc,o.from,o.to).join(a)))}if("false"==e.getAttribute("contenteditable"))return;var p=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;p&&c();for(var g=0;g1&&d.length>1;)if(G(h)==G(d))h.pop(),d.pop(),l--;else{if(h[0]!=d[0])break;h.shift(),d.shift(),e++}for(var f=0,p=0,g=h[0],v=d[0],m=Math.min(g.length,v.length);fs.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)f--,p++;h[h.length-1]=y.slice(0,y.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(f).replace(/\u200b+$/,"");var w=gt(e,f),C=gt(l,d.length?G(d).length-p:0);return h.length>1||h[0]||vt(w,C)?(co(i.doc,h,w,C,"+input"),!0):void 0},Fs.prototype.ensurePolled=function(){this.forceCompositionEnd()},Fs.prototype.reset=function(){this.forceCompositionEnd()},Fs.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Fs.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},Fs.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||Ki(this.cm,function(){return Ji(t.cm)})},Fs.prototype.setUneditable=function(t){t.contentEditable="false"},Fs.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||Yi(this.cm,As)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},Fs.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},Fs.prototype.onContextMenu=function(){},Fs.prototype.resetPosition=function(){},Fs.prototype.needsContentAttribute=!0;var Hs=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new z,this.hasSelection=!1,this.composing=null};Hs.prototype.init=function(t){var e=this,n=this,i=this.cm;this.createField(t);var r=this.textarea;function o(t){if(!re(i,t)){if(i.somethingSelected())Ms({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var e=_s(i);Ms({lineWise:!0,text:e.text}),"cut"==t.type?i.setSelections(e.ranges,null,B):(n.prevInput="",r.value=e.text.join("\n"),I(r))}"cut"==t.type&&(i.state.cutIncoming=!0)}}t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),g&&(r.style.width="0px"),te(r,"input",function(){s&&a>=9&&e.hasSelection&&(e.hasSelection=null),n.poll()}),te(r,"paste",function(t){re(i,t)||Os(t,i)||(i.state.pasteIncoming=!0,n.fastPoll())}),te(r,"cut",o),te(r,"copy",o),te(t.scroller,"paste",function(e){wn(t,e)||re(i,e)||(i.state.pasteIncoming=!0,n.focus())}),te(t.lineSpace,"selectstart",function(e){wn(t,e)||le(e)}),te(r,"compositionstart",function(){var t=i.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:t,range:i.markText(t,i.getCursor("to"),{className:"CodeMirror-composing"})}}),te(r,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},Hs.prototype.createField=function(t){this.wrapper=Ns(),this.textarea=this.wrapper.firstChild},Hs.prototype.prepareSelection=function(){var t=this.cm,e=t.display,n=t.doc,i=ci(t);if(t.options.moveInputWithCursor){var r=qn(t,n.sel.primary().head,"div"),o=e.wrapper.getBoundingClientRect(),s=e.lineDiv.getBoundingClientRect();i.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+s.top-o.top)),i.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+s.left-o.left))}return i},Hs.prototype.showSelection=function(t){var e=this.cm,n=e.display;A(n.cursorDiv,t.cursors),A(n.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},Hs.prototype.reset=function(t){if(!this.contextMenuPending&&!this.composing){var e=this.cm;if(e.somethingSelected()){this.prevInput="";var n=e.getSelection();this.textarea.value=n,e.state.focused&&I(this.textarea),s&&a>=9&&(this.hasSelection=n)}else t||(this.prevInput=this.textarea.value="",s&&a>=9&&(this.hasSelection=null))}},Hs.prototype.getField=function(){return this.textarea},Hs.prototype.supportsTouch=function(){return!1},Hs.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!m||L()!=this.textarea))try{this.textarea.focus()}catch(t){}},Hs.prototype.blur=function(){this.textarea.blur()},Hs.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Hs.prototype.receivedFocus=function(){this.slowPoll()},Hs.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},Hs.prototype.fastPoll=function(){var t=!1,e=this;e.pollingFast=!0,e.polling.set(20,function n(){var i=e.poll();i||t?(e.pollingFast=!1,e.slowPoll()):(t=!0,e.polling.set(60,n))})},Hs.prototype.poll=function(){var t=this,e=this.cm,n=this.textarea,i=this.prevInput;if(this.contextMenuPending||!e.state.focused||xe(n)&&!i&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=n.value;if(r==i&&!e.somethingSelected())return!1;if(s&&a>=9&&this.hasSelection===r||y&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var o=r.charCodeAt(0);if(8203!=o||i||(i="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var l=0,c=Math.min(i.length,r.length);l1e3||r.indexOf("\n")>-1?n.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},Hs.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Hs.prototype.onKeyPress=function(){s&&a>=9&&(this.hasSelection=null),this.fastPoll()},Hs.prototype.onContextMenu=function(t){var e=this,n=e.cm,i=n.display,r=e.textarea,o=si(n,t),c=i.scroller.scrollTop;if(o&&!h){var u=n.options.resetSelectionOnContextMenu;u&&-1==n.doc.sel.contains(o)&&Yi(n,Yr)(n.doc,xr(o),B);var d=r.style.cssText,f=e.wrapper.style.cssText;e.wrapper.style.cssText="position: absolute";var p,g=e.wrapper.getBoundingClientRect();if(r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(t.clientY-g.top-5)+"px; left: "+(t.clientX-g.left-5)+"px;\n z-index: 1000; background: "+(s?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(p=window.scrollY),i.input.focus(),l&&window.scrollTo(null,p),i.input.reset(),n.somethingSelected()||(r.value=e.prevInput=" "),e.contextMenuPending=!0,i.selForContextMenu=n.doc.sel,clearTimeout(i.detectingSelectAll),s&&a>=9&&m(),k){he(t);var v=function(){ne(window,"mouseup",v),setTimeout(y,20)};te(window,"mouseup",v)}else setTimeout(y,50)}function m(){if(null!=r.selectionStart){var t=n.somethingSelected(),o="​"+(t?r.value:"");r.value="⇚",r.value=o,e.prevInput=t?"":"​",r.selectionStart=1,r.selectionEnd=o.length,i.selForContextMenu=n.doc.sel}}function y(){if(e.contextMenuPending=!1,e.wrapper.style.cssText=f,r.style.cssText=d,s&&a<9&&i.scrollbars.setScrollTop(i.scroller.scrollTop=c),null!=r.selectionStart){(!s||s&&a<9)&&m();var t=0,o=function(){i.selForContextMenu==n.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==e.prevInput?Yi(n,no)(n):t++<10?i.detectingSelectAll=setTimeout(o,500):(i.selForContextMenu=null,i.input.reset())};i.detectingSelectAll=setTimeout(o,200)}}},Hs.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t},Hs.prototype.setUneditable=function(){},Hs.prototype.needsContentAttribute=!1,function(t){var e=t.optionHandlers;function n(n,i,r,o){t.defaults[n]=i,r&&(e[n]=o?function(t,e,n){n!=ms&&r(t,e,n)}:r)}t.defineOption=n,t.Init=ms,n("value","",function(t,e){return t.setValue(e)},!0),n("mode",null,function(t,e){t.doc.modeOption=e,Tr(t)},!0),n("indentUnit",2,Tr,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,function(t){Er(t),zn(t),Ji(t)},!0),n("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var n=[],i=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var o=t.text.indexOf(e,r);if(-1==o)break;r=o+e.length,n.push(gt(i,o))}i++});for(var r=n.length-1;r>=0;r--)co(t.doc,e,n[r],gt(n[r].line,n[r].ch+e.length))}}),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(t,e,n){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),n!=ms&&t.refresh()}),n("specialCharPlaceholder",Je,function(t){return t.refresh()},!0),n("electricChars",!0),n("inputStyle",m?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),n("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),n("rtlMoveVisually",!x),n("wholeLineUpdateBefore",!0),n("theme","default",function(t){vs(t),xs(t)},!0),n("keyMap","default",function(t,e,n){var i=Uo(e),r=n!=ms&&Uo(n);r&&r.detach&&r.detach(t,i),i.attach&&i.attach(t,r||null)}),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,Cs,!0),n("gutters",[],function(t){hr(t.options),xs(t)},!0),n("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?ii(t.display)+"px":"0",t.refresh()},!0),n("coverGutterNextToScrollbar",!1,function(t){return Ii(t)},!0),n("scrollbarStyle","native",function(t){ji(t),Ii(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),n("lineNumbers",!1,function(t){hr(t.options),xs(t)},!0),n("firstLineNumber",1,xs,!0),n("lineNumberFormatter",function(t){return t},xs,!0),n("showCursorWhenSelecting",!1,li,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("readOnly",!1,function(t,e){"nocursor"==e&&(mi(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),n("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),n("dragDrop",!0,ws),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,li,!0),n("singleCursorHeightPerLine",!0,li,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,Er,!0),n("addModeClass",!1,Er,!0),n("pollInterval",100),n("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),n("historyEventDelay",1250),n("viewportMargin",10,function(t){return t.refresh()},!0),n("maxHighlightLength",1e4,Er,!0),n("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),n("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),n("autofocus",null),n("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0)}(ks),function(t){var e=t.optionHandlers,n=t.helpers={};t.prototype={constructor:t,focus:function(){window.focus(),this.display.input.focus()},setOption:function(t,n){var i=this.options,r=i[t];i[t]==n&&"mode"!=t||(i[t]=n,e.hasOwnProperty(t)&&Yi(this,e[t])(this,n,r),ie(this,"optionChange",this,t))},getOption:function(t){return this.options[t]},getDoc:function(){return this.doc},addKeyMap:function(t,e){this.state.keyMaps[e?"push":"unshift"](Uo(t))},removeKeyMap:function(t){for(var e=this.state.keyMaps,n=0;nn&&(Ts(this,r.head.line,t,!0),n=r.head.line,i==this.doc.sel.primIndex&&Ti(this));else{var o=r.from(),s=r.to(),a=Math.max(n,o.line);n=Math.min(this.lastLine(),s.line-(s.ch?0:1))+1;for(var l=a;l0&&Ur(this.doc,i,new yr(o,c[i].to()),B)}}}),getTokenAt:function(t,e){return $e(this,t,e)},getLineTokens:function(t,e){return $e(this,gt(t),e,!0)},getTokenTypeAt:function(t){t=Ct(this.doc,t);var e,n=Fe(this,at(this.doc,t.line)),i=0,r=(n.length-1)/2,o=t.ch;if(0==o)e=n[2];else for(;;){var s=i+r>>1;if((s?n[2*s-1]:0)>=o)r=s;else{if(!(n[2*s+1]o&&(t=o,r=!0),i=at(this.doc,t)}else i=t;return Bn(this,i,{top:0,left:0},e||"page",n||r).top+(r?this.doc.height-qt(i):0)},defaultTextHeight:function(){return ti(this.display)},defaultCharWidth:function(){return ei(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,n,i,r){var o=this.display,s=(t=qn(this,Ct(this.doc,t))).bottom,a=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),o.sizer.appendChild(e),"over"==i)s=t.top;else if("above"==i||"near"==i){var l=Math.max(o.wrapper.clientHeight,this.doc.height),c=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==i||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?s=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(s=t.bottom),a+e.offsetWidth>c&&(a=c-e.offsetWidth)}e.style.top=s+"px",e.style.left=e.style.right="","right"==r?(a=o.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?a=0:"middle"==r&&(a=(o.sizer.clientWidth-e.offsetWidth)/2),e.style.left=a+"px"),n&&function(t,e){var n=ki(t,e);null!=n.scrollTop&&Oi(t,n.scrollTop),null!=n.scrollLeft&&_i(t,n.scrollLeft)}(this,{left:a,top:s,right:a+e.offsetWidth,bottom:s+e.offsetHeight})},triggerOnKeyDown:Gi(os),triggerOnKeyPress:Gi(as),triggerOnKeyUp:ss,triggerOnMouseDown:Gi(hs),execCommand:function(t){if(Xo.hasOwnProperty(t))return Xo[t].call(null,this)},triggerElectric:Gi(function(t){Ps(this,t)}),findPosH:function(t,e,n,i){var r=1;e<0&&(r=-1,e=-e);for(var o=Ct(this.doc,t),s=0;s0&&a(n.charAt(i-1));)--i;for(;r.5)&&oi(this),ie(this,"refresh",this)}),swapDoc:Gi(function(t){var e=this.doc;return e.cm=null,Pr(this,t),zn(this),this.display.input.reset(),Ei(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,an(this,"swapDoc",this,e),e}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},ae(t),t.registerHelper=function(e,i,r){n.hasOwnProperty(e)||(n[e]=t[e]={_global:[]}),n[e][i]=r},t.registerGlobalHelper=function(e,i,r,o){t.registerHelper(e,i,o),n[e]._global.push({pred:r,val:o})}}(ks);var $s="iter insert remove copy getEditor constructor".split(" ");for(var Bs in Eo.prototype)Eo.prototype.hasOwnProperty(Bs)&&V($s,Bs)<0&&(ks.prototype[Bs]=function(t){return function(){return t.apply(this.doc,arguments)}}(Eo.prototype[Bs]));return ae(Eo),ks.inputStyles={textarea:Hs,contenteditable:Fs},ks.defineMode=function(t){ks.defaults.mode||"null"==t||(ks.defaults.mode=t),function(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),ke[t]=e}.apply(this,arguments)},ks.defineMIME=function(t,e){Se[t]=e},ks.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),ks.defineMIME("text/plain","null"),ks.defineExtension=function(t,e){ks.prototype[t]=e},ks.defineDocExtension=function(t,e){Eo.prototype[t]=e},ks.fromTextArea=function(t,e){if((e=e?R(e):{}).value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var n=L();e.autofocus=n==t||null!=t.getAttribute("autofocus")&&n==document.body}function i(){t.value=a.getValue()}var r;if(t.form&&(te(t.form,"submit",i),!e.leaveSubmitMethodAlone)){var o=t.form;r=o.submit;try{var s=o.submit=function(){i(),o.submit=r,o.submit(),o.submit=s}}catch(t){}}e.finishInit=function(e){e.save=i,e.getTextArea=function(){return t},e.toTextArea=function(){e.toTextArea=isNaN,i(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display="",t.form&&(ne(t.form,"submit",i),"function"==typeof t.form.submit&&(t.form.submit=r))}},t.style.display="none";var a=ks(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return a},function(t){t.off=ne,t.on=te,t.wheelEventPixels=gr,t.Doc=Eo,t.splitLines=be,t.countColumn=j,t.findColumn=q,t.isWordChar=tt,t.Pass=$,t.signal=ie,t.Line=Ue,t.changeEnd=wr,t.scrollbarModel=Ri,t.Pos=gt,t.cmpPos=vt,t.modes=ke,t.mimeModes=Se,t.resolveMode=Te,t.getMode=Ee,t.modeExtensions=Me,t.extendMode=Ae,t.copyState=Oe,t.startState=_e,t.innerMode=Pe,t.commands=Xo,t.keyMap=jo,t.keyName=Wo,t.isModifierKey=$o,t.lookupKey=Ho,t.normalizeKeyMap=Vo,t.StringStream=Le,t.SharedTextMarker=Co,t.TextMarker=xo,t.LineWidget=mo,t.e_preventDefault=le,t.e_stopPropagation=ce,t.e_stop=he,t.addClass=N,t.contains=_,t.rmClass=E,t.keyNames=Do}(ks),ks.version="5.39.0",ks}()},function(t,e,n){"use strict";var i=o(n(1)),r=o(n(0));function o(t){return t&&t.__esModule?t:{default:t}}var s=n(13),a=r.default.$;t.exports=i.default.extend({},s,{init:function(t){i.default.bindAll(this,"startDraw","draw","endDraw","rollback"),this.config=t||{},this.hType=this.config.newFixedH?"height":"min-height",this.allowDraw=1},enable:function(){for(var t=arguments.length,e=Array(t),n=0;n1&&void 0!==arguments[1]?arguments[1]:{};if(t){var n=e.ctrlKey||e.metaKey,i=e.shiftKey,r=this.editor,s=r.getConfig("multipleSelection"),a=this.em;if(n&&s)r.selectToggle(t);else if(i&&s){a.clearSelection(r.Canvas.getWindow());var l=t.collection,c=l.indexOf(t),u=(r.getSelectedAll(),void 0),h=void 0;if(r.getSelectedAll().forEach(function(t){var e=t.collection,n=e.indexOf(t);e===l&&(nc&&(h=(0,o.isUndefined)(h)?n:Math.min(h,n)))}),!(0,o.isUndefined)(u))for(;u!==c;)r.selectAdd(l.at(u)),u++;if(!(0,o.isUndefined)(h))for(;h!==c;)r.selectAdd(l.at(h)),h--;r.selectAdd(t)}else r.select(t);this.initResize(t)}},updateBadge:function(t,e){var n=c(t),i=this.canvas,r=i.getConfig().customBadgeLabel;this.cacheEl=t;var o=n.data("model");if(o&&o.get("badgable")){var s=this.getBadge(),a=o.getIcon()+o.getName();a=r?r(o):a,s.innerHTML=a;var l=s.style;l.display="block";var u=i.getCanvasView().getPosition();if(u){var h=s?s.offsetHeight:0,d=s?s.offsetWidth:0,f=e.top-h1&&void 0!==arguments[1]?arguments[1]:{},i=n.el,r=n.config,o=n.resizer,a=r.keyHeight,l=r.keyWidth,h=r.currentUnit;g("add",0,n),p=e.get("StyleManager").getModelToStyle(c);var d=getComputedStyle(i),f=p.getStyle(),v=f[l]||d[l],m=f[a]||d[a];o.startDim.w=parseFloat(v),o.startDim.h=parseFloat(m),u=0,h&&(r.unitHeight=(0,s.getUnitFromValue)(m),r.unitWidth=(0,s.getUnitFromValue)(v))},onMove:function(){n.trigger("change:canvasOffset")},onEnd:function(t,e){g("remove",0,e),n.trigger("change:canvasOffset"),u=1},updateTarget:function(t,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(p){var r=i.store,o=i.selectedHandler,s=i.config,a=s.keyHeight,l=s.keyWidth,c=["tc","bc"].indexOf(o)>=0,u=["cl","cr"].indexOf(o)>=0,h=p.getStyle();c||(h[l]=n.w+s.unitWidth),u||(h[a]=n.h+s.unitHeight),p.setStyle(h,{avoidStore:1});e&&e.trigger("update:component:style:"+a+" update:component:style:"+l),r&&p.trigger("change:style",p,h,{})}}},"object"==(void 0===h?"undefined":r(h))&&(f=i({},f,h)),n.runCommand("resize",{el:d,options:f})):n.stopCommand("resize")},updateToolbar:function(t){var e=this,n=this.config.em,i=t==n?n.getSelected():t,r=this.canvas.getToolbarEl(),o=r.style;if(i){var s=i.get("toolbar");this.ppfx;if(n.get("Config").showToolbar&&s&&s.length){if(o.opacity="",o.display="",!this.toolbar){r.innerHTML="",this.toolbar=new l(s);var c=new a({collection:this.toolbar,editor:this.editor});r.appendChild(c.render().el)}this.toolbar.reset(s);var u=i.view;o.top="-100px",o.left=0,setTimeout(function(){return u&&e.updateToolbarPos(u.el)},0)}else o.display="none"}else o.opacity=0},updateToolbarPos:function(t,e){var n=this.canvas.getToolbarEl(),i=n.style;i.opacity=0;var r=this.canvas.getTargetToElementDim(n,t,{elPos:e,event:"toolbarPosUpdate"});if(r){var o=r.left+r.elementWidth-r.targetWidth;i.top=r.top+"px",i.left=(o<0?0:o)+"px",i.opacity=""}},getCanvasPosition:function(){return this.canvas.getCanvasView().getPosition()},clean:function(){this.selEl&&this.selEl.removeClass(this.hoverClass)},getBadge:function(){return this.canvas.getBadgeEl()},onFrameScroll:function(t){var e=this.cacheEl;if(e){var n=this.getElementPos(e);this.updateBadge(e,n);var i=this.em.getSelected();i&&this.updateToolbarPos(i.view.el)}},updateAttached:function(t){var e=this.em.getSelected();if(e){var n=e.view;this.updateToolbarPos(n.el),this.showFixedElementOffset(n.el)}},getElementPos:function(t,e){return this.canvas.getCanvasView().getElementPos(t)},hideBadge:function(){this.getBadge().style.display="none"},cleanPrevious:function(t){t&&t.set({status:"",state:""})},getContentWindow:function(){return this.frameEl.contentWindow},run:function(t){this.editor=t&&t.get("Editor"),this.enable(),this.onSelect()},stop:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.em;this.stopSelectComponent(),!n.preserveSelected&&i.setSelected(null),this.clean(),this.hideBadge(),this.hideFixedElementOffset(),this.canvas.getToolbarEl().style.display="none",i.off("component:update",this.updateAttached,this),i.off("change:canvasOffset",this.updateAttached,this)}}},function(t,e,n){"use strict";var i=n(1),r=n(0),o=r.$;t.exports=r.View.extend({events:{change:"onChange"},attributes:function(){return this.model.get("attributes")},initialize:function(t){var e=this.model,n=(e.get("name"),e.target);this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=n,this.className=this.pfx+"trait",this.labelClass=this.ppfx+"label",this.fieldClass=this.ppfx+"field "+this.ppfx+"field-"+e.get("type"),this.inputhClass=this.ppfx+"input-holder",e.off("change:value",this.onValueChange),this.listenTo(e,"change:value",this.onValueChange),e.view=this,this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().value)},getValueForTarget:function(){return this.model.get("value")},setInputValue:function(t){this.getInputEl().value=t},onValueChange:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.model;this.target,i.get("name");if(n.fromTarget)this.setInputValue(i.get("value"));else{var r=this.getValueForTarget();i.setTargetValue(r,n)}},renderLabel:function(){var t=this.getLabel();this.$el.html('
    '+t+"
    ")},getLabel:function(){var t=this.model,e=t.get("label")||t.get("name");return e.charAt(0).toUpperCase()+e.slice(1).replace(/-/g," ")},getInputEl:function(){if(!this.$input){var t=this.model,e=t.get("placeholder")||t.get("default")||"",n=t.get("type")||"text",i=t.get("min"),r=t.get("max"),s=this.getModelValue(),a=o('');s&&(t.set({value:s},{silent:!0}),a.prop("value",s)),i&&a.prop("min",i),r&&a.prop("max",r),this.$input=a}return this.$input.get(0)},getModelValue:function(){var t=void 0,e=this.model,n=this.target,r=e.get("name");if(e.get("changeProp"))t=n.get(r);else{var o=n.get("attributes");t=e.get("value")||o[r]}return(0,i.isUndefined)(t)?"":t},renderField:function(){if(!this.$input){this.$el.append(this.tmpl);var t=this.getInputEl(),e=this.el.querySelector("."+this.inputhClass);e.insertBefore(t,e.childNodes[0])}},render:function(){return this.renderLabel(),this.renderField(),this.el.className=this.className,this}})},function(t,e,n){"use strict";var i=n(0).Model.extend({idAttribute:"name",defaults:{name:"",label:"",type:1,active:!0,private:!1,protected:!1},initialize:function(){var t=this.get("name"),e=this.get("label");t?e||this.set("label",t):this.set("name",e),this.set("name",i.escapeName(this.get("name")))},getFullName:function(){var t="";switch(this.get("type")){case 1:t=".";break;case 2:t="#"}return t+this.get("name")}},{TYPE_CLASS:1,TYPE_ID:2,escapeName:function(t){return(""+t).trim().replace(/([^a-z0-9\w-]+)/gi,"-")}});t.exports=i},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";var i=r(n(1));r(n(0));function r(t){return t&&t.__esModule?t:{default:t}}var o=n(7);t.exports=i.default.extend({},o,{init:function(){for(var t=arguments.length,e=Array(t),n=0;n0&&void 0!==arguments[0]?arguments[0]:{};return this.set({value:void 0},t),this},setValue:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.parseValue(t);this.set(r,i({},n,{avoidStore:1})),e&&(this.set("value","",n),this.set(r,n))},setValueFromInput:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.setValue(t,e,i({},n,{fromInput:1}))},parseValue:function(t){var e={value:t},n="!important";if((0,r.isString)(t)&&-1!==t.indexOf(n)&&(e.value=t.replace(n,"").trim(),e.important=1),!this.get("functionName"))return e;var i=[],o=""+e.value,s=o.indexOf("(")+1,a=o.lastIndexOf(")");return i.push(s),a>=0&&i.push(a),e.value=String.prototype.substring.apply(o,i),e},getDefaultValue:function(){return this.get("defaults")},getFullValue:function(t){var e=this.get("functionName"),n=(0,r.isUndefined)(t)?this.get("value"):t;return e&&!(0,r.isUndefined)(n)&&(n=e+"("+n+")"),this.get("important")&&(n+=" !important"),n||""}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e/,f=/^\w+$/;function p(t,n){n=n||e;var i=h.test(t)?n.getElementsByClassName(t.slice(1)):f.test(t)?n.getElementsByTagName(t):n.querySelectorAll(t);return i}function g(n){if(!t){var i=(t=e.implementation.createHTMLDocument(null)).createElement("base");i.href=e.location.href,t.head.appendChild(i)}return t.body.innerHTML=n,t.body.childNodes}function v(t){"loading"!==e.readyState?setTimeout(t):e.addEventListener("DOMContentLoaded",t)}function m(t,i){if(!t)return this;if(t.cash&&t!==n)return t;var r,o=t,s=0;if(c(t))o=u.test(t)?e.getElementById(t.slice(1)):d.test(t)?g(t):p(t,i);else if(l(t))return v(t),this;if(!o)return this;if(o.nodeType||o===n)this[0]=o,this.length=1;else for(r=this.length=o.length;s=0&&o.splice(i,1)):(x(o,function(n){t.removeEventListener(e,n)}),o=[]))}function R(t,e){return"&"+encodeURIComponent(t)+"="+encodeURIComponent(e).replace(/%20/g,"+")}function j(t){var e=t.type;if(!e)return null;switch(e.toLowerCase()){case"select-one":return function(t){var e=t.selectedIndex;return e>=0?t.options[e].value:null}(t);case"select-multiple":return function(t){var e=[];return x(t.options,function(t){t.selected&&e.push(t.value)}),e.length?e:null}(t);case"radio":case"checkbox":return t.checked?t.value:null;default:return t.value?t.value:null}}function z(t,e,n){var i=c(e);i||!e.length?x(t,i?function(t){return t.insertAdjacentHTML(n?"afterbegin":"beforeend",e)}:function(t,i){return function(t,e,n){if(n){var i=t.childNodes[0];t.insertBefore(e,i)}else t.appendChild(e)}(t,0===i?e:e.cloneNode(!0),n)}):x(e,function(e){return z(t,e,n)})}y.prefixedProp=D,y.camelCase=N,b.extend({css:function(t,e){if(c(t))return t=D(t),arguments.length>1?this.each(function(n){return n.style[t]=e}):n.getComputedStyle(this[0])[t];for(var i in t)this.css(i,t[i]);return this}}),x(["Width","Height"],function(t){var e=t.toLowerCase();b[e]=function(){return this[0].getBoundingClientRect()[e]},b["inner"+t]=function(){return this[0]["client"+t]},b["outer"+t]=function(e){return this[0]["offset"+t]+(e?I(this,"margin"+("Width"===t?"Left":"Top"))+I(this,"margin"+("Width"===t?"Right":"Bottom")):0)}}),b.extend({off:function(t,e){return this.each(function(n){return F(n,t,e)})},on:function(t,e,n,i){var r;if(!c(t)){for(var o in t)this.on(o,e,t[o]);return this}return l(e)&&(n=e,e=null),"ready"===t?(v(n),this):(e&&(r=n,n=function(t){for(var n=t.target;!w(n,e);){if(n===this)return n=!1;n=n.parentNode}n&&r.call(n,t)}),this.each(function(e){var r=n;i&&(r=function(){n.apply(this,arguments),F(e,t,r)}),function(t,e,n){var i=M(t,"_cashEvents")||E(t,"_cashEvents",{});i[e]=i[e]||[],i[e].push(n),t.addEventListener(e,n)}(e,t,r)}))},one:function(t,e,n){return this.on(t,e,n,!0)},ready:v,trigger:function(t,n){var i=e.createEvent("HTMLEvents");return i.data=n,i.initEvent(t,!0,!1),this.each(function(t){return t.dispatchEvent(i)})}}),b.extend({serialize:function(){var t="";return x(this[0].elements||this,function(e){if(!e.disabled&&"FIELDSET"!==e.tagName){var n=e.name;switch(e.type.toLowerCase()){case"file":case"reset":case"submit":case"button":break;case"select-multiple":var i=j(e);null!==i&&x(i,function(e){t+=R(n,e)});break;default:var r=j(e);null!==r&&(t+=R(n,r))}}}),t.substr(1)},val:function(t){return void 0===t?j(this[0]):this.each(function(e){return e.value=t})}}),b.extend({after:function(t){return y(t).insertAfter(this),this},append:function(t){return z(this,t),this},appendTo:function(t){return z(y(t),this),this},before:function(t){return y(t).insertBefore(this),this},clone:function(){return y(this.map(function(t){return t.cloneNode(!0)}))},empty:function(){return this.html(""),this},html:function(t){if(void 0===t)return this[0].innerHTML;var e=t.nodeType?t[0].outerHTML:t;return this.each(function(t){return t.innerHTML=e})},insertAfter:function(t){var e=this;return y(t).each(function(t,n){var i=t.parentNode,r=t.nextSibling;e.each(function(t){i.insertBefore(0===n?t:t.cloneNode(!0),r)})}),this},insertBefore:function(t){var e=this;return y(t).each(function(t,n){var i=t.parentNode;e.each(function(e){i.insertBefore(0===n?e:e.cloneNode(!0),t)})}),this},prepend:function(t){return z(this,t,!0),this},prependTo:function(t){return z(y(t),this,!0),this},remove:function(){return this.each(function(t){return t.parentNode.removeChild(t)})},text:function(t){return void 0===t?this[0].textContent:this.each(function(e){return e.textContent=t})}});var V=e.documentElement;return b.extend({position:function(){var t=this[0];return{left:t.offsetLeft,top:t.offsetTop}},offset:function(){var t=this[0].getBoundingClientRect();return{top:t.top+n.pageYOffset-V.clientTop,left:t.left+n.pageXOffset-V.clientLeft}},offsetParent:function(){return y(this[0].offsetParent)}}),b.extend({children:function(t){var e=[];return this.each(function(t){s.apply(e,t.children)}),e=k(e),t?e.filter(function(e){return w(e,t)}):e},closest:function(t){return!t||this.length<1?y():this.is(t)?this.filter(t):this.parent().closest(t)},is:function(t){if(!t)return!1;var e=!1,n=C(t);return this.each(function(i){return!(e=n(i,t))}),e},find:function(t){if(!t||t.nodeType)return y(t&&this.has(t).length?t:null);var e=[];return this.each(function(n){s.apply(e,p(t,n))}),k(e)},has:function(t){var e=c(t)?function(e){return 0!==p(t,e).length}:function(e){return e.contains(t)};return this.filter(e)},next:function(){return y(this[0].nextElementSibling)},not:function(t){if(!t)return this;var e=C(t);return this.filter(function(n){return!e(n,t)})},parent:function(){var t=[];return this.each(function(e){e&&e.parentNode&&t.push(e.parentNode)}),k(t)},parents:function(t){var n,i=[];return this.each(function(r){for(n=r;n&&n.parentNode&&n!==e.body.parentNode;)n=n.parentNode,(!t||t&&w(n,t))&&i.push(n)}),k(i)},prev:function(){return y(this[0].previousElementSibling)},siblings:function(){var t=this.parent().children(),e=this[0];return t.filter(function(t){return t!==e})}}),y})?i.call(e,n,e,t):i)||(t.exports=r)},function(t,e,n){"use strict";t.exports={run:function(t,e,n){var i=n&&n.el||"",r=t.Canvas,o=this.dragger,s=n.options||{},a=r.getCanvasView();return s.prefix=t.getConfig().stylePrefix,s.mousePosFetcher=r.getMouseRelativePos,s.posFetcher=a.getElementPos.bind(a),o||(o=t.Utils.Dragger.init(s),this.dragger=o),o.setOptions(s),o.focus(i),s.event&&o.start(s.event),o},stop:function(){this.canvasResizer&&this.canvasResizer.blur()}}},function(t,e,n){"use strict";t.exports={run:function(t,e,n){var i=n||{},r=i.el||"",o=t.Canvas,s=this.canvasResizer,a=i.options||{},l=o.getCanvasView();return a.ratioDefault=1,a.appendTo=o.getResizerEl(),a.prefix=t.getConfig().stylePrefix,a.posFetcher=l.getElementPos.bind(l),a.mousePosFetcher=o.getMouseRelativePos,s&&!i.forceNew||(this.canvasResizer=t.Utils.Resizer.init(a),s=this.canvasResizer),s.setOptions(a),s.blur(),s.focus(r),s},stop:function(){var t=this.canvasResizer;t&&t.blur()}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(1));t.exports={getPanels:function(t){return this.panels||(this.panels=t.Panels.getPanelsEl()),this.panels},tglPointers:function(t,e){var n=t.Canvas.getBody().querySelectorAll("."+this.ppfx+"no-pointer");i.default.each(n,function(t){t.style.pointerEvents=e?"":"all"})},run:function(t,e){e&&e.set&&e.set("active",!1),t.stopCommand("sw-visibility"),t.getModel().stopDefault();var n=this.getPanels(t),i=t.Canvas.getElement(),r=t.getEl(),o=t.Config.stylePrefix;this.helper||(this.helper=document.createElement("span"),this.helper.className=o+"off-prv fa fa-eye-slash",r.appendChild(this.helper),this.helper.onclick=function(){t.stopCommand("preview")}),this.helper.style.display="inline-block",this.tglPointers(t),n.style.display="none";var s=i.style;s.width="100%",s.height="100%",s.top="0",s.left="0",s.padding="0",s.margin="0",t.trigger("change:canvasOffset")},stop:function(t,e){var n=this.getPanels(t);t.runCommand("sw-visibility"),t.getModel().runDefault(),n.style.display="block",t.Canvas.getElement().setAttribute("style",""),this.helper&&(this.helper.style.display="none"),t.trigger("change:canvasOffset"),this.tglPointers(t,1)}}},function(t,e,n){"use strict";t.exports={isEnabled:function(){var t=document;return t.fullscreenElement||t.webkitFullscreenElement||t.mozFullScreenElement?1:0},enable:function(t){var e="";return t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?(e="webkit",t.webkitRequestFullscreen()):t.mozRequestFullScreen?(e="moz",t.mozRequestFullScreen()):t.msRequestFullscreen?t.msRequestFullscreen():console.warn("Fullscreen not supported"),e},disable:function(){var t=document;t.exitFullscreen?t.exitFullscreen():t.webkitExitFullscreen?t.webkitExitFullscreen():t.mozCancelFullScreen?t.mozCancelFullScreen():t.msExitFullscreen&&t.msExitFullscreen()},fsChanged:function(t,e){document;var n=(t||"")+"fullscreenchange";this.isEnabled()||(this.stop(null,this.sender),document.removeEventListener(n,this.fsChanged))},run:function(t,e){this.sender=e;var n=this.enable(t.getContainer());this.fsChanged=this.fsChanged.bind(this,n),document.addEventListener(n+"fullscreenchange",this.fsChanged),t&&t.trigger("change:canvasOffset")},stop:function(t,e){e&&e.set&&e.set("active",!1),this.disable(),t&&t.trigger("change:canvasOffset")}}},function(t,e,n){"use strict";t.exports={run:function(t){for(var e=t.getSelected(),n=e&&e.parent();n&&!n.get("selectable");)n=n.parent();n&&t.select(n)}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)).default.$;t.exports={getOffsetMethod:function(t){return"get"+(t||"")+"OffsetViewerEl"},run:function(t,e,n){var r=n||{},o=r.state||"",s=t.getConfig();if(s.showOffsets&&(s.showOffsetsSelected||"Fixed"!=o)){var a=t.Canvas,l=r.el||"",c=r.elPos||a.getElementPos(l),u=window.getComputedStyle(l),h=this.ppfx,d=o+"State",f=a[this.getOffsetMethod(o)]();f.style.display="block";var p=this["marginT"+o],g=this["marginB"+o],v=this["marginL"+o],m=this["marginR"+o],y=this["padT"+o],b=this["padB"+o],x=this["padL"+o],w=this["padR"+o];if(!this[d]){var C=o.toLowerCase(),k=C+"margin-v",S=C+"padding-v",T=i('
    ').get(0),E=i('
    ').get(0),M=h+k+"-el"+" "+(h+k),A=h+S+"-el"+" "+(h+S);p=i('
    ').get(0),g=i('
    ').get(0),v=i('
    ').get(0),m=i('
    ').get(0),y=i('
    ').get(0),b=i('
    ').get(0),x=i('
    ').get(0),w=i('
    ').get(0),this["marginT"+o]=p,this["marginB"+o]=g,this["marginL"+o]=v,this["marginR"+o]=m,this["padT"+o]=y,this["padB"+o]=b,this["padL"+o]=x,this["padR"+o]=w,T.appendChild(p),T.appendChild(g),T.appendChild(v),T.appendChild(m),E.appendChild(y),E.appendChild(b),E.appendChild(x),E.appendChild(w),f.appendChild(T),f.appendChild(E),this[d]="1"}var O=u.marginLeft.replace("px",""),P=parseInt(u.marginTop.replace("px","")),_=parseInt(u.marginBottom.replace("px","")),L=p.style,N=g.style,D=v.style,I=m.style,F=y.style,R=b.style,j=x.style,z=w.style,V=parseInt(c.left);L.height=u.marginTop,L.width=u.width,L.top=c.top-u.marginTop.replace("px","")+"px",L.left=V+"px",N.height=u.marginBottom,N.width=u.width,N.top=c.top+c.height+"px",N.left=V+"px";var H=c.height+P+_+"px",$=c.top-P+"px";D.height=H,D.width=u.marginLeft,D.top=$,D.left=V-O+"px",I.height=H,I.width=u.marginRight,I.top=$,I.left=V+c.width+"px";var B=parseInt(u.paddingTop.replace("px",""));F.height=u.paddingTop,F.width=u.width,F.top=c.top+"px",F.left=V+"px";var W=parseInt(u.paddingBottom.replace("px",""));R.height=u.paddingBottom,R.width=u.width,R.top=c.top+c.height-W+"px",R.left=V+"px";var U=c.height-W-B+"px",q=c.top+B+"px";j.height=U,j.width=u.paddingLeft,j.top=q,j.left=c.left+"px";var K=parseInt(u.paddingRight.replace("px",""));z.height=U,z.width=u.paddingRight,z.top=q,z.left=c.left+c.width-K+"px"}},stop:function(t,e,n){var i=(n||{}).state||"",r=this.getOffsetMethod(i);t.Canvas[r]().style.display="none"}}},function(t,e,n){"use strict";t.exports={run:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=t.Modal,r=t.AssetManager,o=r.getConfig(),s=r.getContainer(),a=n.modalTitle||o.modalTitle||"",l=n.types,c=n.accept;if(r.setTarget(n.target),r.onClick(n.onClick),r.onDblClick(n.onDblClick),r.onSelect(n.onSelect),!this.rendered||l){var u=r.getAll();l&&(u=u.filter(function(t){return-1!==l.indexOf(t.get("type"))})),r.render(u),this.rendered=1}if(c){var h=s.querySelector("input#"+o.stylePrefix+"uploadFile");h&&h.setAttribute("accept",c)}i.setTitle(a),i.setContent(s),i.open()}}},function(t,e,n){"use strict";t.exports={run:function(t,e){var n=t.BlockManager,i=t.Panels;if(!this.blocks){n.render();var r="views-container",o=document.createElement("div"),s=i.getPanel(r)||i.addPanel({id:r});o.appendChild(n.getContainer()),s.set("appendContent",o).trigger("change:appendContent"),this.blocks=o}this.blocks.style.display="block"},stop:function(){var t=this.blocks;t&&(t.style.display="none")}}},function(t,e,n){"use strict";var i=n(0).$;t.exports={run:function(t,e){this.sender=e;var n=t.Config.stylePrefix,r=t.TraitManager;if(!this.$cn){var o=r.getTraitsViewer(),s=r.getConfig();this.$cn=i("
    "),this.$cn2=i("
    "),this.$cn.append(this.$cn2),this.$header=i("
    ").append('
    '+s.textNoElement+"
    "),this.$cn.append(this.$header),this.$cn2.append('
    '+s.labelContainer+"
    "),this.$cn2.append(o.render().el);var a=t.Panels;(a.getPanel("views-container")?a.getPanel("views-container"):a.addPanel({id:"views-container"})).set("appendContent",this.$cn.get(0)).trigger("change:appendContent"),this.target=t.getModel(),this.listenTo(this.target,"component:toggled",this.toggleTm)}this.toggleTm()},toggleTm:function(){var t=this.sender;t&&t.get&&!t.get("active")||(1===this.target.getSelectedAll().length?(this.$cn2.show(),this.$header.hide()):(this.$cn2.hide(),this.$header.show()))},stop:function(){this.$cn2&&this.$cn2.hide(),this.$header&&this.$header.hide()}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));n(77);var r=i.default.$;t.exports={run:function(t,e){if(this.sender=e,!this.$cn){var n=t.getConfig(),i=t.Panels;this.$cn=r("
    "),this.$cn2=r("
    "),this.$cn.append(this.$cn2);var o=t.DeviceManager;if(o&&n.showDevices)i.addPanel({id:"devices-c"}).set("appendContent",o.render()).trigger("change:appendContent");var s=t.SelectorManager;s&&this.$cn2.append(s.render([])),this.$cn2.append(t.StyleManager.render());var a=t.StyleManager.getConfig(),l=a.stylePrefix;this.$header=r('
    '+a.textNoElement+"
    "),this.$cn.append(this.$header),i.getPanel("views-container")?this.panel=i.getPanel("views-container"):this.panel=i.addPanel({id:"views-container"}),this.panel.set("appendContent",this.$cn).trigger("change:appendContent"),this.target=t.editor,this.listenTo(this.target,"component:toggled",this.toggleSm)}this.toggleSm()},toggleSm:function(){var t=this.target,e=this.sender;e&&e.get&&!e.get("active")||(1===t.getSelectedAll().length?(this.$cn2.show(),this.$header.hide()):(this.$cn2.hide(),this.$header.show()))},stop:function(){this.$cn2&&this.$cn2.hide(),this.$header&&this.$header.hide()}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));n(54),i.default.$;t.exports={run:function(t){var e=t.LayerManager,n=t.Panels;if(!this.layers){var i="views-container",r=document.createElement("div"),o=n.getPanel(i)||n.addPanel({id:i});r.appendChild(e.render()),o.set("appendContent",r).trigger("change:appendContent"),this.layers=r}this.layers.style.display="block"},stop:function(){var t=this.layers;t&&(t.style.display="none")}}},function(t,e,n){"use strict";t.exports={run:function(t){t.Canvas.getBody().className=this.ppfx+"dashed"},stop:function(t){t.Canvas.getBody().className=""}}},function(t,e,n){"use strict";var i=r(n(1));r(n(0));function r(t){return t&&t.__esModule?t:{default:t}}var o=n(7);t.exports=i.default.extend({},o,{beforeDraw:function(t){t.type="text",t.style||(t.style={}),t.style.padding="10px"},afterDraw:function(t){t&&t.set&&(t.trigger("focus"),this.sender&&this.sender.set("active",!1))}})},function(t,e,n){"use strict";var i=s(n(1)),r=s(n(0)),o=n(2);function s(t){return t&&t.__esModule?t:{default:t}}var a=n(8),l=n(13),c=r.default.$;t.exports=i.default.extend({},l,a,{init:function(t){a.init.apply(this,arguments),i.default.bindAll(this,"initSorter","rollback","onEndMove"),this.opt=t,this.hoverClass=this.ppfx+"highlighter-warning",this.badgeClass=this.ppfx+"badge-warning",this.noSelClass=this.ppfx+"no-select"},enable:function(){for(var t=arguments.length,e=Array(t),n=0;n2&&void 0!==arguments[2]&&arguments[2];e&&e.set&&e.set("active",0);var n=t.getConfig(),r=t.Modal,o=n.stylePrefix;if(this.cm=t.CodeManager||null,!this.$editors){var s=this.buildEditor("htmlmixed","hopscotch","HTML"),a=this.buildEditor("css","hopscotch","CSS");this.htmlEditor=s.el,this.cssEditor=a.el;var l=i('
    ');l.append(s.$el).append(a.$el),this.$editors=l}r.setTitle(n.textViewCode),r.setContent(this.$editors),r.open(),this.htmlEditor.setContent(t.getHtml()),this.cssEditor.setContent(t.getCss())},stop:function(t){var e=t.Modal;e&&e.close()},buildEditor:function(t,e,n){var i=document.createElement("textarea");!this.codeMirror&&(this.codeMirror=this.cm.getViewer("CodeMirror"));var r=this.codeMirror.clone().set({label:n,codeName:t,theme:e,input:i}),o=new this.cm.EditorView({model:r,config:this.cm.getConfig()}).render().$el;return r.init(i),{el:r,$el:o}}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=i.default.$;t.exports=i.default.View.extend({initialize:function(t){this.config=t||{},this.editorModel=this.em=this.config.em||{},this.pfx=this.config.stylePrefix,this.ppfx=this.config.pStylePrefix,this.hoverClass=this.pfx+"hover",this.badgeClass=this.pfx+"badge",this.plhClass=this.pfx+"placeholder",this.freezClass=this.ppfx+"freezed",this.canvas=this.em.get&&this.em.get("Canvas"),this.em.get&&this.setElement(this.getCanvas()),this.canvas&&(this.$canvas=this.$el,this.$wrapper=r(this.getCanvasWrapper()),this.frameEl=this.canvas.getFrameEl(),this.canvasTool=this.getCanvasTools(),this.bodyEl=this.getCanvasBody()),this.init(this.config)},onFrameScroll:function(t){},getCanvas:function(){return this.canvas.getElement()},getCanvasBody:function(){return this.canvas.getBody()},getCanvasWrapper:function(){return this.canvas.getWrapperEl()},getCanvasTools:function(){return this.canvas.getToolsEl()},offset:function(t){var e=t.getBoundingClientRect();return{top:e.top+t.ownerDocument.body.scrollTop,left:e.left+t.ownerDocument.body.scrollLeft}},init:function(t){},callRun:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.id;if(t.trigger("run:"+n+":before",e),!e||!e.abort){var i=e.sender||t,r=this.run(t,i,e);return t.trigger("run:"+n,r,e),r}t.trigger("abort:"+n,e)},callStop:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.id,i=e.sender||t;t.trigger("stop:"+n+":before",e);var r=this.stop(t,i,e);return t.trigger("stop:"+n,r,e),r},run:function(t,e){},stop:function(t,e){}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e\n \n
    \n
    \n
    \n
    \n '},inputClass:function(){var t=this.ppfx;return this.opts.contClass||t+"field "+t+"field-integer"},initialize:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];o.prototype.initialize.apply(this,arguments),(0,i.bindAll)(this,"moveIncrement","upIncrement"),this.doc=document,this.listenTo(this.model,"change:unit",this.handleModelChange)},setValue:function(t,e){var n=e||{},i=this.validateInputValue(t,{deepCheck:1}),r={value:i.value};(i.unit||i.force)&&(r.unit=i.unit),this.model.set(r,n),n.silent&&this.handleModelChange()},handleChange:function(t){t.stopPropagation(),this.setValue(this.getInputEl().value),this.elementUpdated()},handleUnitChange:function(t){t.stopPropagation();var e=this.getUnitEl().value;this.model.set("unit",e),this.elementUpdated()},elementUpdated:function(){this.model.trigger("el:change")},handleModelChange:function(){var t=this.model;this.getInputEl().value=t.get("value");var e=this.getUnitEl();e&&(e.value=t.get("unit")||"")},getUnitEl:function(){if(!this.unitEl){var t=this.model,e=t.get("units")||[];if(e.length){var n=[];e.forEach(function(e){var i=e==t.get("unit")?"selected":"";n.push("")});var i=document.createElement("div");i.innerHTML='",this.unitEl=i.firstChild}}return this.unitEl},upArrowClick:function(){var t=this.model,e=t.get("step"),n=parseInt(t.get("value"),10);n=this.normalizeValue(n+e);var i=this.validateInputValue(n);t.set("value",i.value),this.elementUpdated()},downArrowClick:function(){var t=this.model,e=t.get("step"),n=parseInt(t.get("value"),10),i=this.normalizeValue(n-e),r=this.validateInputValue(i);t.set("value",r.value),this.elementUpdated()},downIncrement:function(t){t.preventDefault(),this.moved=0;var e=this.model.get("value");e=this.normalizeValue(e),this.current={y:t.pageY,val:e},(0,r.on)(this.doc,"mousemove",this.moveIncrement),(0,r.on)(this.doc,"mouseup",this.upIncrement)},moveIncrement:function(t){this.moved=1;var e=this.model,n=e.get("step"),i=this.current,r=this.normalizeValue(i.val+(i.y-t.pageY)*n);return this.prValue=this.validateInputValue(r).value,e.set("value",this.prValue,{avoidStore:1}),!1},upIncrement:function(){var t=this.model,e=t.get("step");if((0,r.off)(this.doc,"mouseup",this.upIncrement),(0,r.off)(this.doc,"mousemove",this.moveIncrement),this.prValue&&this.moved){var n=this.prValue-e;t.set("value",n,{avoidStore:1}).set("value",n+e),this.elementUpdated()}},normalizeValue:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=this.model.get("step"),i=0;if(isNaN(t))return e;if(t=parseFloat(t),Math.floor(t)!==t){var r=n.toString().split(".")[1];i=r?r.length:0}return i?parseFloat(t.toFixed(i)):t},validateInputValue:function(t,n){var r=0,o=n||{},s=this.model,a=(0,i.isUndefined)(t)?"":t,l=s.get("units")||[],c=s.get("unit")||l.length&&l[0]||"",u=s.get("max"),h=s.get("min");if(o.deepCheck){var d=s.get("fixedValues")||[];if(a){var f=new RegExp("^"+d.join("|"),"g");if(d.length&&f.test(a))a=a.match(f)[0],c="",r=1;else{var p=a+"";a+="",a=parseFloat(a.replace(",",".")),a=isNaN(a)?"":a;var g=p.replace(a,"");e.indexOf(l,g)>=0&&(c=g)}}}return(0,i.isUndefined)(u)||""===u||(a=a>u?u:a),(0,i.isUndefined)(h)||""===h||(a=a\n \n
    \n '},inputValueChanged:function(){if(!this.model.get("detached")){for(var t=arguments.length,e=Array(t),n=0;n'),this.input=this.$input.get(0)),this.props||(this.props=t.get("properties")),!this.$props)){this.props.each(function(e,n){e&&"composite"==e.get("type")&&(this.props.remove(e),console.warn("Nested composite types not yet allowed.")),e.parent=t},this);var i=new(n(16))(this.getPropsConfig());this.$props=i.render().$el,this.properties=i.properties,this.$el.find("#"+this.pfx+"input-holder").append(this.$props)}},getPropsConfig:function(t){var e=this,n=this.model,i={config:this.config,collection:this.props,target:this.target,propTarget:this.propTarget,onChange:function(t,e,i){n.set("value",n.getFullValue(),i)},customValue:function(t,n){return e.valueOnIndex(n,t)}};return n.get("detached")&&delete i.onChange,i},valueOnIndex:function(t,e){var n=void 0,i=this.getTargetValue({ignoreDefault:1});i?n=i.split(" ")[t]:n=e&&e.getTargetValue({ignoreCustomValue:1,ignoreDefault:1});return e&&(n=e.model.parseValue(n).value),n}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.Model.extend({defaults:{id:"",label:"",open:!0,attributes:{}}})},function(t,e,n){"use strict";var i=n(1);t.exports={run:function(t){var e=t.getModel(),n=e.get("clipboard"),r=t.getSelected();n&&r&&!e.isEditing()&&(t.getSelectedAll().forEach(function(e){if(e){var r=e.collection,o=r.indexOf(e)+1,s=n.filter(function(t){return t.get("copyable")}),a=void 0;a=(0,i.contains)(n,e)&&e.get("copyable")?r.add(e.clone(),{at:o}):r.add(s.map(function(t){return t.clone()}),{at:o}),(a=(0,i.isArray)(a)?a:[a]).forEach(function(e){return t.trigger("component:clone",e)})}}),r.emitUpdate())}}},function(t,e,n){"use strict";t.exports={run:function(t){var e=t.getModel(),n=[].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e=0?r:t)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";t.exports={run:function(t){if(t.Canvas.hasFocus()&&!t.getModel().isEditing()){var e=[];t.getSelectedAll().forEach(function(t){var n=t.collection,i=n.indexOf(t),r=n.at(i+1);e.push(r||t)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";t.exports={run:function(t){if(t.Canvas.hasFocus()&&!t.getModel().isEditing()){var e=[];t.getSelectedAll().forEach(function(t){var n=t.parent();n&&e.push(n)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";t.exports={run:function(t){if(t.Canvas.hasFocus()&&!t.getModel().isEditing()){var e=[];t.getSelectedAll().forEach(function(t){var n=t.components(),i=n&&n.at(0);i&&e.push(i)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";var i=n(1);t.exports={run:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!t.getModel().isEditing()){var r=n.component||t.getSelectedAll();return r=(0,i.isArray)(r)?[].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e':"")+'\n
    \n
    \n
    \n \n '+t.getIcon()+'\n '+h+'\n
    \n
    \n
    \n
    '+(r||"")+'
    \n
    \n \n
    \n
    '},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.opt=t,this.level=t.level,this.config=t.config,this.em=t.config.em,this.ppfx=this.em.get("Config").stylePrefix,this.sorter=t.sorter||"",this.pfx=this.config.stylePrefix;var e=this.pfx,n=this.ppfx,i=this.model,r=i.get("components");i.set("open",!1),this.listenTo(r,"remove add change reset",this.checkChildren),this.listenTo(i,"change:status",this.updateStatus),this.listenTo(i,"change:open",this.updateOpening),this.listenTo(i,"change:style:display",this.updateVisibility),this.className=e+"layer no-select "+n+"two-color",this.inputNameCls=n+"layer-name",this.clsTitleC=e+"layer-title-c",this.clsTitle=e+"layer-title",this.clsCaret=e+"layer-caret",this.clsCount=e+"layer-count",this.clsMove=e+"layer-move",this.clsChildren=e+"layer-children",this.clsNoChild=e+"layer-no-chld",this.$el.data("model",i),this.$el.data("collection",r),i.viewLayer=this},getVisibilityEl:function(){return this.eyeEl||(this.eyeEl=this.$el.children("."+this.pfx+"layer-vis")),this.eyeEl},updateVisibility:function(){var t=this.pfx+"layer-hidden",e="none"==this.model.getStyle().display?"addClass":"removeClass";this.$el[e](t),this.getVisibilityEl()[e]("fa-eye-slash")},toggleVisibility:function(t){t&&t.stopPropagation();var e=this.model,n=e.getStyle();"none"==n.display?delete n.display:n.display="none",e.setStyle(n)},handleEdit:function(t){t&&t.stopPropagation();var e=this.getInputName();e.contentEditable=!0,e.focus()},handleEditEnd:function(t){t&&t.stopPropagation();var e=this.getInputName(),n=e.textContent;e.contentEditable=!1,this.model.set({name:n})},getInputName:function(){return this.inputName||(this.inputName=this.el.querySelector("."+this.inputNameCls)),this.inputName},updateOpening:function(){var t=this.opt.opened||{},e=this.model;e.get("open")?(this.$el.addClass("open"),this.getCaret().addClass("fa-chevron-down"),t[e.cid]=e):(this.$el.removeClass("open"),this.getCaret().removeClass("fa-chevron-down"),delete t[e.cid])},toggleOpening:function(t){t.stopPropagation(),this.model.get("components").length&&this.model.set("open",!this.model.get("open"))},handleSelect:function(t){t.stopPropagation();var e=this.em,n=this.config;if(e){var i=this.model;e.setSelected(i,{fromLayers:1});var r=n.scrollCanvas;r&&e.get("Canvas").scrollTo(i,r)}},handleHover:function(t){t.stopPropagation();var e=this.em,n=this.config,i=this.model;e&&n.showHover&&e.setHovered(i,{fromLayers:1})},startSort:function(t){t.stopPropagation();var e=this.sorter;0===t.button&&e&&e.startSort(t.target)},freeze:function(){this.$el.addClass(this.pfx+"opac50"),this.model.set("open",0)},unfreeze:function(){this.$el.removeClass(this.pfx+"opac50")},updateStatus:function(t){s.prototype.updateStatus.apply(this,[{avoidHover:!this.config.highlightHover}])},isVisible:function(){var t=this.model.get("style").display;if(!t||"none"!=t)return 1},checkChildren:function(){var t=this.model,e=this.countChildren(t),n=(this.pfx,this.clsNoChild),i=this.$el.children("."+this.clsTitleC).children("."+this.clsTitle);this.cnt||(this.cnt=this.$el.children("."+this.clsCount)),e?(i.removeClass(n),this.cnt.html(e)):(i.addClass(n),this.cnt.empty(),t.set("open",0))},countChildren:function(t){var e=0;return t.get("components").each(function(t){var n=this.opt.isCountable,i=this.config.hideTextnode;n&&!n(t,i)||e++},this),e},getCaret:function(){if(!this.caret||!this.caret.length){this.pfx;this.caret=this.$el.children("."+this.clsTitleC).find("."+this.clsCaret)}return this.caret},setRoot:function(t){t=(0,i.isString)(t)?this.em.getWrapper().find(t)[0]:t;var e=(0,r.getModel)(t,a);e&&(this.stopListening(),this.model=e,this.initialize(this.opt),this.render())},render:function(){var t=this.model,e=this.pfx,r=this.isVisible(),o=this.$el.empty(),s=this.level+1;(0,i.isUndefined)(l)&&(l=n(113));var a=new l({collection:t.get("components"),config:this.config,sorter:this.sorter,opened:this.opt.opened,parent:t,level:s}).render().$el;return this.config.showWrapper||1!==s?(o.html(this.template(t)),o.find("."+this.clsChildren).append(a)):o.append(a),t.get("draggable")&&this.config.sortable||o.children("."+this.clsMove).remove(),!r&&(this.className+=" "+e+"hide"),o.attr("class",this.className),this.updateOpening(),this.updateStatus(),this.updateVisibility(),this}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return(n=i({},r.default,e)).stylePrefix=e.pStylePrefix,t=n.em,this},getConfig:function(){return n},onLoad:function(){e=new o.default({level:0,config:n,opened:n.opened||{},model:t.get("DomComponents").getWrapper()}),t&&t.on("component:selected",this.componentChanged),this.componentChanged()},postRender:function(){var t=n.appendTo,e=n.root;(e&&this.setRoot(e),t)&&((0,s.isElement)(t)?t:document.querySelector(t)).appendChild(this.render())},setRoot:function(t){return e.setRoot(t),this},getRoot:function(){return e.model},getAll:function(){return e},componentChanged:function(e){if(!(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).fromLayers){var i=t.get("opened"),r=t.getSelected(),o=n.scrollLayers,s=r&&r.collection?r.collection.parent:null;for(var a in i)i[a].set("open",0);for(;s;)s.set("open",1),i[s.cid]=s,s=s.collection?s.collection.parent:null;if(r&&o){var l=r.viewLayer&&r.viewLayer.el;l&&l.scrollIntoView(o)}}},render:function(){return e.render().el}}}},function(t,e,n){"use strict";var i=n(2),r=n(3);t.exports=r.extend({events:{dblclick:"enableEditing",input:"onInput"},initialize:function(t){r.prototype.initialize.apply(this,arguments),this.disableEditing=this.disableEditing.bind(this);var e=this.model,n=this.em;this.listenTo(e,"focus active",this.enableEditing),this.listenTo(e,"change:content",this.updateContent),this.rte=n&&n.get("RichTextEditor")},enableEditing:function(t){t&&t.stopPropagation&&t.stopPropagation();var e=this.rte;if(!this.rteEnabled&&this.model.get("editable")){if(e)try{this.activeRte=e.enable(this,this.activeRte)}catch(t){console.error(t)}this.rteEnabled=1,this.toggleEvents(1)}},disableEditing:function(){var t=this.model,e=t.get("editable"),n=this.rte;if(n&&e){try{n.disable(this,this.activeRte)}catch(t){console.error(t)}var i=this.getChildrenContainer().innerHTML,r=t.get("components");if(r.length&&r.reset(),t.set("content",""),n.customRte)t.set("content",i);else{t.trigger("change:content",t),r.add(i),r.each(function(t){return function t(e){e.set({editable:0,highlightable:0,removable:0,draggable:0,copyable:0,toolbar:""}),e.get("components").each(function(e){return t(e)})}(t)}),r.trigger("resetNavigator")}}this.rteEnabled=0,this.toggleEvents()},onInput:function(t){var e=this.em;e&&e.trigger("change:canvasOffset")},disablePropagation:function(t){t.stopPropagation()},toggleEvents:function(t){var e=t?"on":"off",n={on:i.on,off:i.off};this.em.setEditing(t);var r=[this.el.ownerDocument,document];n.off(r,"mousedown",this.disableEditing),n[e](r,"mousedown",this.disableEditing),this.$el.off("mousedown",this.disablePropagation),this.$el[e]("mousedown",this.disablePropagation)}})},function(t,e,n){"use strict";n(0);var i=n(55);t.exports=i.extend({render:function(){for(var t=arguments.length,e=Array(t),n=0;n1&&void 0!==arguments[1]&&arguments[1];var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=this.config.em,i=this.collection.indexOf(t);this.addToCollection(t,null,i),n&&!e.temporary&&n.trigger("component:add",t)},addToCollection:function(t,e,i){this.compView||(this.compView=n(3));for(var o=e||null,s=this.compView,a=this.opts.componentTypes,l=t.get("type"),c=0;c1&&void 0!==arguments[1]?arguments[1]:{};this.listenTo(this,"add",this.onAdd),this.config=e.config,this.em=e.em,this.model=function(t,n){var i,r=e.componentTypes;n.em=e.em,n.config=e.config,n.componentTypes=r;for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:{};if("string"==typeof t){var n=this.em.get("CssComposer"),i=this.em.get("Parser").parseHtml(t);if(t=i.html,i.css&&n){var o=e.avoidUpdateStyle;n.addCollection(i.css,{extend:1,avoidUpdateStyle:o})}}return r.Collection.prototype.add.apply(this,[t,e])},onAdd:function(t,e,n){var r=this.em,o=t.getStyle(),s=r&&r.getConfig("avoidInlineStyle");if(!(0,i.isEmpty)(o)&&!s&&r&&r.get&&r.getConfig("forceClass")){var a=t.cid;r.get("CssComposer").setClassRule(a,o);t.setStyle({}),t.addClass(a)}}})},function(t,e,n){"use strict";var i=n(0);t.exports=i.View.extend({itemView:"",itemsView:"",itemType:"type",initialize:function(t,e){this.config=e||{}},addTo:function(t){this.add(t)},add:function(t,e){var n=e||null,i=this.itemView,r=t.get(this.itemType);this.itemsView&&this.itemsView[r]&&(i=this.itemsView[r]);var o=new i({model:t,config:this.config},this.config).render().el;n?n.appendChild(o):this.$el.append(o)},render:function(){var t=document.createDocumentFragment();return this.$el.empty(),this.collection.length&&this.collection.each(function(e){this.add(e,t)},this),this.$el.append(t),this}})},function(t,e,n){"use strict";t.exports=n(0).View.extend({tagName:"style",initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.config=t.config||{};var e=this.model;this.listenTo(e,"change:style change:state change:mediaText",this.render),this.listenTo(e,"destroy remove",this.remove),this.listenTo(e.get("selectors"),"change",this.render)},render:function(){var t=this.model.get("important");return this.el.innerHTML=this.model.toCSS({important:t}),this}})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,r.isString)(e)&&(e=s(e));var a=this.getStyle(),l=i({},e);this.set("style",l,n);var c=(0,o.shallowDiff)(a,l);return(0,r.keys)(c).forEach(function(e){var n=t.em;t.trigger("change:style:"+e),n&&(n.trigger("styleable:change",t,e),n.trigger("styleable:change:"+e,t,e))}),l},addStyle:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};"string"==typeof t?t={prop:e}:n=e||{},t=this.extendStyle(t),this.setStyle(t,n)},removeStyle:function(t){var e=this.getStyle();delete e[t],this.setStyle(e)},styleToString:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=[],n=this.getStyle();for(var i in n){var o=t.important,s=(0,r.isArray)(o)?o.indexOf(i)>=0:o,a=n[i]+(s?" !important":"");a&&e.push(i+":"+a+";")}return e.join("")}}},function(t,e,n){"use strict";var i=n(1),r=a(i),o=a(n(0)),s=a(n(61));function a(t){return t&&t.__esModule?t:{default:t}}var l=n(19);t.exports=o.default.Model.extend(s.default).extend({defaults:{selectors:{},selectorsAdd:"",style:{},mediaText:"",state:"",stylable:!0,atRuleType:"",singleAtRule:0,important:0},initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.config=t||{};var n=e.em,i=this.config.selectors||[];if(this.em=n,n){var r=n.get("SelectorManager"),o=[];i.forEach(function(t){o.push(r.add(t))}),i=o}this.set("selectors",new l(i))},getAtRule:function(){var t=this.get("atRuleType"),e=this.get("mediaText"),n=t?"@"+t:e?"@media":"";return n+(e&&n?" "+e:"")},selectorsToString:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=[],n=this.get("state"),i=this.get("selectorsAdd"),r=this.get("selectors").getFullString(),o=n?":"+n:"";return r&&e.push(""+r+o),i&&!t.skipAdd&&e.push(i),e.join(", ")},getDeclaration:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e="",n=this.selectorsToString(),i=this.styleToString(t),r=this.get("singleAtRule");return(n||r)&&i&&(e=r?i:n+"{"+i+"}"),e},toCSS:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e="",n=this.getAtRule(),i=this.getDeclaration(t);return i&&(e=i),n&&e&&(e=n+"{"+e+"}"),e},toJSON:function(){for(var t=arguments.length,e=Array(t),n=0;n3&&void 0!==arguments[3]?arguments[3]:{},o=e||"",s=n||"",a=i.selectorsAdd||"",l=i.atRuleType||"";t instanceof Array||t.models||(t=[t]);var c=r.default.map(t.models||t,function(t){return t.get("name")}),u=r.default.map(this.get("selectors").models,function(t){return t.get("name")});if(c.length!==u.length)return!1;for(var h=0;h\n
    <%= title %>
    \n multiple/>\n
    \n \n '),events:{},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t;var e=t.config||{};this.config=e,this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.target=this.options.globalCollection||{},this.uploadId=this.pfx+"uploadFile",this.disabled=void 0!==e.disableUpload?e.disableUpload:!e.upload&&!e.embedAsBase64,this.events["change #"+this.uploadId]="uploadFile";var n=e.uploadFile;n?this.uploadFile=n.bind(this):e.embedAsBase64&&(this.uploadFile=this.constructor.embedAsBase64),this.delegateEvents()},onUploadStart:function(){var t=this.config.em;t&&t.trigger("asset:upload:start")},onUploadEnd:function(t){var e=this.config.em;e&&e.trigger("asset:upload:end",t)},onUploadError:function(t){var e=this.config.em;console.error(t),this.onUploadEnd(t),e&&e.trigger("asset:upload:error",t)},onUploadResponse:function(t,e){var n=this.config.em,i=this.config,r=this.target,o="string"==typeof t?JSON.parse(t):t;n&&n.trigger("asset:upload:response",o),i.autoAdd&&r&&r.add(o.data,{at:0}),this.onUploadEnd(t),e&&e(o)},uploadFile:function(t,e){for(var n=this,i=t.dataTransfer?t.dataTransfer.files:t.target.files,r=new FormData,s=this.config,a=s.params,l=0;l'+i.dropzoneContent+"
    "),h(),"draggable"in o&&[o,a].forEach(function(t){t.ondragover=d,t.ondragleave=f,t.ondrop=p})},render:function(){return this.$el.html(this.template({title:this.config.uploadText,uploadId:this.uploadId,disabled:this.disabled,pfx:this.pfx})),this.initDrop(),this.$el.attr("class",this.pfx+"file-uploader"),this}},{embedAsBase64:function(t,e){var n=this,i=t.dataTransfer?t.dataTransfer.files:t.target.files,r={data:[]};if(FileReader){var o=[],s=/^(.+)\/(.+)$/,a=function(t){var e=new Promise(function(e,n){var i=new FileReader;i.addEventListener("load",function(r){var o=void 0,a=t.name,l=s.exec(t.type);if("image"===(o=l?l[1]:t.type)){var c={src:i.result,name:a,type:o,height:0,width:0},u=new Image;u.addEventListener("error",function(t){n(t)}),u.addEventListener("load",function(){c.height=u.height,c.width=u.width,e(c)}),u.src=c.src}else e(o?{src:i.result,name:a,type:o}:i.result)}),i.addEventListener("error",function(t){n(t)}),i.addEventListener("abort",function(t){n("Aborted")}),i.readAsDataURL(t)});o.push(e)},l=!0,c=!1,u=void 0;try{for(var h,d=i[Symbol.iterator]();!(l=(h=d.next()).done);l=!0){a(h.value)}}catch(t){c=!0,u=t}finally{try{!l&&d.return&&d.return()}finally{if(c)throw u}}Promise.all(o).then(function(t){r.data=t,n.onUploadResponse(r,e)},function(t){n.onUploadError(t)})}else this.onUploadError(new Error("Unsupported platform, FileReader is not defined"))}})},function(t,e,n){"use strict";(function(e){var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.View.extend({initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t,this.collection=t.collection;var e=t.config||{};this.config=e,this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.em=e.em,this.className=this.pfx+"asset",this.listenTo(this.model,"destroy remove",this.remove),this.model.view=this;var n=this.init&&this.init.bind(this);n&&n(t)},template:function(){var t=this.pfx;return'\n
    \n '+this.getPreview()+'\n
    \n
    \n '+this.getInfo()+'\n
    \n
    \n ⨯\n
    \n '},updateTarget:function(t){t&&t.set&&(t.set("attributes",e.clone(t.get("attributes"))),t.set("src",this.model.get("src")))},getPreview:function(){return""},getInfo:function(){return""},render:function(){var t=this.el;return t.innerHTML=this.template(this,this.model),t.className=this.className,this}})}).call(this,n(1))},function(t,e,n){"use strict";var i=n(1);t.exports=n(64).extend({events:{"click [data-toggle=asset-remove]":"onRemove",click:"onClick",dblclick:"onDblClick"},getPreview:function(){var t=this.pfx;return'\n
    \n
    \n '},getInfo:function(){var t=this.pfx,e=this.model,n=e.get("name"),i=e.get("width"),r=e.get("height"),o=e.get("unitDim"),s=i&&r?i+"x"+r+o:"";return'\n
    '+(n=n||e.getFilename())+'
    \n
    '+s+"
    \n "},init:function(t){var e=this.pfx;this.className+=" "+e+"asset-image"},onClick:function(){var t=this.config.onClick,e=this.model;this.collection.trigger("deselectAll"),this.$el.addClass(this.pfx+"highlight"),(0,i.isFunction)(t)?t(e):this.updateTarget(this.collection.target)},onDblClick:function(){var t=this.em,e=this.model,n=this.config.onDblClick;(0,i.isFunction)(n)?n(e):(this.updateTarget(this.collection.target),t&&t.get("Modal").close());var r=this.collection.onSelect;(0,i.isFunction)(r)&&r(e)},onRemove:function(t){t.stopImmediatePropagation(),this.model.collection.remove(this.model)}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return this.set({value:void 0,unit:void 0},t),this},parseValue:function(t){var e=o.prototype.parseValue.apply(this,arguments),n=this.input.validateInputValue(e.value,{deepCheck:1}),i=n.value,r=n.unit;return e.value=i,e.unit=r,e},getFullValue:function(){var t=this.get("value"),e=this.get("unit");return t=""+(t=(0,r.isUndefined)(t)?"":t)+(e=!(0,r.isUndefined)(e)&&t?e:""),o.prototype.getFullValue.apply(this,[t])}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:[];return this.set("options",t),this},addOption:function(t){if(t){var e=this.getOptions();this.setOptions([].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e\n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n '},init:function(){var t=this.em;this.modal=t.get("Modal"),this.am=t.get("AssetManager"),this.events["click #"+this.pfx+"close"]="removeFile",this.events["click #"+this.pfx+"images"]="openAssetManager",this.delegateEvents()},onRender:function(){if(!this.$input){var t=this.model.getDefaultValue();this.$input=o('')}this.$preview||(this.$preview=this.$el.find("#"+this.pfx+"preview-file")),this.$previewBox||(this.$previewBox=this.$el.find("#"+this.pfx+"preview-box")),this.setValue(this.componentValue,0)},setValue:function(t,e){r.prototype.setValue.apply(this,arguments),this.setPreviewView(t&&t!=this.model.getDefaultValue()),this.setPreview(t)},setPreviewView:function(t){var e=this.$previewBox;e&&e[t?"addClass":"removeClass"](this.pfx+"show")},spreadUrl:function(t){this.model.set("value",t),this.setPreviewView(1)},setPreview:function(t){var e=this.$preview;t=t&&t.indexOf("url(")<0?"url("+t+")":t,e&&e.css("background-image",t)},cleanValue:function(){this.setPreviewView(0),this.model.set({value:""},{silent:!0})},removeFile:function(){this.model.set("value",this.model.getDefaultValue());for(var t=arguments.length,e=Array(t),n=0;n\n
    \n
    \n
    \n
    \n
    \n '},inputClass:function(){var t=this.ppfx;return t+"field "+t+"field-color"},holderClass:function(){return this.ppfx+"input-holder"},setValue:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.model.get("defaults"),i=(0,o.isUndefined)(t)?(0,o.isUndefined)(n)?"":n:t,r=this.getInputEl(),s=this.getColorEl(),a="none"!=i?i:"";r.value=i,s.get(0).style.backgroundColor=a,e.fromTarget&&(s.spectrum("set",a),this.noneColor="none"==i)},getColorEl:function(){if(!this.colorEl){var t=this,e=this.ppfx,n=this.model,r=c('
    '),o=r.get(0).style,s=this.em&&this.em.config?this.em.config.el:"",a=this.em&&this.em.getConfig&&this.em.getConfig("colorPicker")||{},l=function(t){return(1==t.getAlpha()?t.toHexString():t.toRgbString()).replace(/ /g,"")},u=0,h=void 0;this.$el.find("[data-colorp-c]").append(r),r.spectrum(i({containerClassName:e+"one-bg "+e+"two-color",appendTo:s||"body",maxSelectionSize:8,showPalette:!0,showAlpha:!0,chooseText:"Ok",cancelText:"⨯",palette:[]},a,{move:function(t){var e=l(t);o.backgroundColor=e,n.setValueFromInput(e,0)},change:function(e){u=1;var i=l(e);o.backgroundColor=i,n.setValueFromInput(i),t.noneColor=0},show:function(t){u=0,h=l(t)},hide:function(e){!u&&h&&(t.noneColor&&(h=""),o.backgroundColor=h,r.spectrum("set",h),n.setValueFromInput(h,0))}})),this.colorEl=r}return this.colorEl},render:function(){return l.prototype.render.call(this),this.getColorEl(),this}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{};e=i({},e,{silent:1}),this.inputInst.setValue(t,e)},onRender:function(){if(!this.input){var t=this.ppfx,e=new r({target:this.target,model:this.model,ppfx:t}).render();this.el.querySelector("."+t+"fields").appendChild(e.el),this.$input=e.inputEl,this.$color=e.colorEl,this.input=this.$input.get(0),this.inputInst=e}}})},function(t,e,n){"use strict";var i=o(n(0)),r=o(n(5));function o(t){return t&&t.__esModule?t:{default:t}}i.default.$;t.exports=r.default.extend({templateInput:function(){var t=this.pfx,e=this.ppfx;return'\n
    \n \n
    \n
    \n
    \n
    \n '},initialize:function(){for(var t=arguments.length,e=Array(t),n=0;n"+e+""});var i=this.el.querySelector("#"+t+"input-holder");i.innerHTML="",this.input=i.firstChild}}})},function(t,e,n){"use strict";t.exports=n(5).extend({templateInput:function(){this.pfx;var t=this.ppfx;return'\n
    \n
    \n '},onRender:function(){var t=this.pfx,e=this.ppfx,n=e+"radio-item-label",i=this.model,r=i.get("property"),o=i.get("list")||i.get("options")||[];if(!this.input&&o&&o.length){var s="";o.forEach(function(i){var o=i.className?i.className+" "+t+"icon "+n:"",a=r+"-"+i.value,l=i.name||i.value,c=i.title?'title="'+i.title+'"':"";s+='\n
    \n \n \n
    \n "});var a=this.el.querySelector("."+e+"field");a.innerHTML='
    '+s+"
    ",this.input=a.firstChild}},getInputValue:function(){var t=this.getCheckedEl();return t?t.value:""},getCheckedEl:function(){var t=this.getInputEl();return t?t.querySelector("input:checked"):""},setValue:function(t){var e=this.model,n=t||e.get("value")||e.getDefaultValue(),i=this.getInputEl(),r=i?i.querySelector('[value="'+n+'"]'):"";if(r)r.checked=!0;else{var o=this.getCheckedEl();o&&(o.checked=!1)}}})},function(t,e,n){"use strict";var i=n(0),r=i.$;t.exports=i.View.extend({events:{change:"handleChange"},template:function(){return''},inputClass:function(){return this.ppfx+"field"},holderClass:function(){return this.ppfx+"input-holder"},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.ppfx||"";this.opts=t,this.ppfx=e,this.em=t.target||{},this.listenTo(this.model,"change:value",this.handleModelChange)},elementUpdated:function(){this.model.trigger("el:change")},setValue:function(t){var e=this.model,n=t||e.get("defaults"),i=this.getInputEl();i&&(i.value=n)},handleModelChange:function(t,e,n){this.setValue(e,n)},handleChange:function(t){t.stopPropagation();var e=this.getInputEl().value;this.model.set({value:e},{fromInput:1}),this.elementUpdated()},getInputEl:function(){if(!this.inputEl){var t=this.model.get("defaults")||"";this.inputEl=r('')}return this.inputEl.get(0)},render:function(){var t=this.$el;return t.addClass(this.inputClass()),t.html(this.template()),t.find("."+this.holderClass()).append(this.getInputEl()),this}})},function(t,e,n){"use strict";var i=n(43),r=n(168);t.exports=i.extend({templateInput:function(){var t=this.pfx;this.ppfx;return'\n
    \n \n
    \n
    \n '},init:function(){var t=this.model;this.pfx;t.set("stackIndex",null),this.events["click [data-add-layer]"]="addLayer",this.listenTo(t,"change:stackIndex",this.indexChanged),this.listenTo(t,"updateValue",this.inputValueChanged),this.delegateEvents()},clear:function(t){t&&t.stopPropagation(),this.model.get("layers").reset(),this.model.clearValue(),this.targetUpdated()},targetUpdated:function(){if(this.model.get("detached"))this.checkVisibility();else{for(var t=arguments.length,e=Array(t),n=0;n0&&void 0!==arguments[0]&&arguments[0];return this.get("properties").each(function(t){return t.clearValue()}),r.prototype.clearValue.apply(this,arguments)},updateValues:function(){var t=this.getFullValue().split(this.get("separator"));this.get("properties").each(function(e,n){var i=t.length;t[n]||t[n%i+(1!=i&&i%2?1:0)]})},getDefaultValue:function(t){var e=this.get("defaults");return e&&!t?e:(e="",this.get("properties").each(function(t,n){return e+=t.getDefaultValue()+" "}),e.trim())},getFullValue:function(){return this.get("detached")?"":this.get("properties").getFullValue()}})},function(t,e,n){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var n=t.Model,i=t.View;e.default={types:[],initialize:function(t,e){var n=this;this.model=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,r=void 0,o=void 0;if(t&&t.type){var s=n.getBaseType();i=(o=n.getType(t.type))?o.model:s.model,r=o?o.view:s.view}else{var a=n.recognizeType(t);i=(o=a.type).model,r=o.view,t=a.attributes}var l=new i(t,e);return l.typeView=r,l};var i=this.init&&this.init.bind(this);i&&i()},recognizeType:function(t){for(var e=this.getTypes(),n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.model,r=void 0===n?{}:n,s=e.view,a=void 0===s?{}:s,l=this.getType(t);if(l)return new l.view(i({model:new l.model(r),config:o},a))},render:function(){return e.render().el}}}},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0;r--)n.context=n.context.prev;return M(t,e,n)}function O(t){var e=t.current().toLowerCase();o=m.hasOwnProperty(e)?"atom":v.hasOwnProperty(e)?"keyword":"variable"}var P={top:function(t,e,n){if("{"==t)return T(n,e,"block");if("}"==t&&n.context.prev)return E(n);if(x&&/@component/i.test(t))return T(n,e,"atComponentBlock");if(/^@(-moz-)?document$/i.test(t))return T(n,e,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(t))return T(n,e,"atBlock");if(/^@(font-face|counter-style)/i.test(t))return n.stateArg=t,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(t))return"keyframes";if(t&&"@"==t.charAt(0))return T(n,e,"at");if("hash"==t)o="builtin";else if("word"==t)o="tag";else{if("variable-definition"==t)return"maybeprop";if("interpolation"==t)return T(n,e,"interpolation");if(":"==t)return"pseudo";if(y&&"("==t)return T(n,e,"parens")}return n.context.type},block:function(t,e,n){if("word"==t){var i=e.current().toLowerCase();return d.hasOwnProperty(i)?(o="property","maybeprop"):f.hasOwnProperty(i)?(o="string-2","maybeprop"):y?(o=e.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(o+=" error","maybeprop")}return"meta"==t?"block":y||"hash"!=t&&"qualifier"!=t?P.top(t,e,n):(o="error","block")},maybeprop:function(t,e,n){return":"==t?T(n,e,"prop"):M(t,e,n)},prop:function(t,e,n){if(";"==t)return E(n);if("{"==t&&y)return T(n,e,"propBlock");if("}"==t||"{"==t)return A(t,e,n);if("("==t)return T(n,e,"parens");if("hash"!=t||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(e.current())){if("word"==t)O(e);else if("interpolation"==t)return T(n,e,"interpolation")}else o+=" error";return"prop"},propBlock:function(t,e,n){return"}"==t?E(n):"word"==t?(o="property","maybeprop"):n.context.type},parens:function(t,e,n){return"{"==t||"}"==t?A(t,e,n):")"==t?E(n):"("==t?T(n,e,"parens"):"interpolation"==t?T(n,e,"interpolation"):("word"==t&&O(e),"parens")},pseudo:function(t,e,n){return"meta"==t?"pseudo":"word"==t?(o="variable-3",n.context.type):M(t,e,n)},documentTypes:function(t,e,n){return"word"==t&&l.hasOwnProperty(e.current())?(o="tag",n.context.type):P.atBlock(t,e,n)},atBlock:function(t,e,n){if("("==t)return T(n,e,"atBlock_parens");if("}"==t||";"==t)return A(t,e,n);if("{"==t)return E(n)&&T(n,e,y?"block":"top");if("interpolation"==t)return T(n,e,"interpolation");if("word"==t){var i=e.current().toLowerCase();o="only"==i||"not"==i||"and"==i||"or"==i?"keyword":c.hasOwnProperty(i)?"attribute":u.hasOwnProperty(i)?"property":h.hasOwnProperty(i)?"keyword":d.hasOwnProperty(i)?"property":f.hasOwnProperty(i)?"string-2":m.hasOwnProperty(i)?"atom":v.hasOwnProperty(i)?"keyword":"error"}return n.context.type},atComponentBlock:function(t,e,n){return"}"==t?A(t,e,n):"{"==t?E(n)&&T(n,e,y?"block":"top",!1):("word"==t&&(o="error"),n.context.type)},atBlock_parens:function(t,e,n){return")"==t?E(n):"{"==t||"}"==t?A(t,e,n,2):P.atBlock(t,e,n)},restricted_atBlock_before:function(t,e,n){return"{"==t?T(n,e,"restricted_atBlock"):"word"==t&&"@counter-style"==n.stateArg?(o="variable","restricted_atBlock_before"):M(t,e,n)},restricted_atBlock:function(t,e,n){return"}"==t?(n.stateArg=null,E(n)):"word"==t?(o="@font-face"==n.stateArg&&!p.hasOwnProperty(e.current().toLowerCase())||"@counter-style"==n.stateArg&&!g.hasOwnProperty(e.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},keyframes:function(t,e,n){return"word"==t?(o="variable","keyframes"):"{"==t?T(n,e,"top"):M(t,e,n)},at:function(t,e,n){return";"==t?E(n):"{"==t||"}"==t?A(t,e,n):("word"==t?o="tag":"hash"==t&&(o="builtin"),"at")},interpolation:function(t,e,n){return"}"==t?E(n):"{"==t||";"==t?A(t,e,n):("word"==t?o="variable":"variable"!=t&&"("!=t&&")"!=t&&(o="error"),"interpolation")}};return{startState:function(t){return{tokenize:null,state:i?"block":"top",stateArg:null,context:new S(i?"block":"top",t||0,null)}},token:function(t,e){if(!e.tokenize&&t.eatSpace())return null;var n=(e.tokenize||function(t,e){var n=t.next();if(a[n]){var i=a[n](t,e);if(!1!==i)return i}return"@"==n?(t.eatWhile(/[\w\\\-]/),w("def",t.current())):"="==n||("~"==n||"|"==n)&&t.eat("=")?w(null,"compare"):'"'==n||"'"==n?(e.tokenize=C(n),e.tokenize(t,e)):"#"==n?(t.eatWhile(/[\w\\\-]/),w("atom","hash")):"!"==n?(t.match(/^\s*\w*/),w("keyword","important")):/\d/.test(n)||"."==n&&t.eat(/\d/)?(t.eatWhile(/[\w.%]/),w("number","unit")):"-"!==n?/[,+>*\/]/.test(n)?w(null,"select-op"):"."==n&&t.match(/^-?[_a-z][_a-z0-9-]*/i)?w("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(n)?w(null,n):("u"==n||"U"==n)&&t.match(/rl(-prefix)?\(/i)||("d"==n||"D"==n)&&t.match("omain(",!0,!0)||("r"==n||"R"==n)&&t.match("egexp(",!0,!0)?(t.backUp(1),e.tokenize=k,w("property","word")):/[\w\\\-]/.test(n)?(t.eatWhile(/[\w\\\-]/),w("property","word")):w(null,null):/[\d.]/.test(t.peek())?(t.eatWhile(/[\w.%]/),w("number","unit")):t.match(/^-[\w\\\-]+/)?(t.eatWhile(/[\w\\\-]/),t.match(/^\s*:/,!1)?w("variable-2","variable-definition"):w("variable-2","variable")):t.match(/^\w+-/)?w("meta","meta"):void 0})(t,e);return n&&"object"==typeof n&&(r=n[1],n=n[0]),o=n,"comment"!=r&&(e.state=P[e.state](r,t,e)),o},indent:function(t,e){var n=t.context,i=e&&e.charAt(0),r=n.indent;return"prop"!=n.type||"}"!=i&&")"!=i||(n=n.prev),n.prev&&("}"!=i||"block"!=n.type&&"top"!=n.type&&"interpolation"!=n.type&&"restricted_atBlock"!=n.type?(")"!=i||"parens"!=n.type&&"atBlock_parens"!=n.type)&&("{"!=i||"at"!=n.type&&"atBlock"!=n.type)||(r=Math.max(0,n.indent-s)):(n=n.prev,r=n.indent)),r},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:b,fold:"brace"}});var n=["domain","regexp","url","url-prefix"],i=e(n),r=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],o=e(r),s=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],a=e(s),l=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],c=e(l),u=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],h=e(u),d=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],f=e(d),p=e(["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]),g=e(["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"]),v=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],m=e(v),y=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],b=e(y),x=n.concat(r).concat(s).concat(l).concat(u).concat(d).concat(v).concat(y);function w(t,e){for(var n,i=!1;null!=(n=t.next());){if(i&&"/"==n){e.tokenize=null;break}i="*"==n}return["comment","comment"]}t.registerHelper("hintWords","css",x),t.defineMIME("text/css",{documentTypes:i,mediaTypes:o,mediaFeatures:a,mediaValueKeywords:c,propertyKeywords:h,nonStandardPropertyKeywords:f,fontProperties:p,counterDescriptors:g,colorKeywords:m,valueKeywords:b,tokenHooks:{"/":function(t,e){return!!t.eat("*")&&(e.tokenize=w,w(t,e))}},name:"css"}),t.defineMIME("text/x-scss",{mediaTypes:o,mediaFeatures:a,mediaValueKeywords:c,propertyKeywords:h,nonStandardPropertyKeywords:f,colorKeywords:m,valueKeywords:b,fontProperties:p,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(t,e){return t.eat("/")?(t.skipToEnd(),["comment","comment"]):t.eat("*")?(e.tokenize=w,w(t,e)):["operator","operator"]},":":function(t){return!!t.match(/\s*\{/,!1)&&[null,null]},$:function(t){return t.match(/^[\w-]+/),t.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(t){return!!t.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),t.defineMIME("text/x-less",{mediaTypes:o,mediaFeatures:a,mediaValueKeywords:c,propertyKeywords:h,nonStandardPropertyKeywords:f,colorKeywords:m,valueKeywords:b,fontProperties:p,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(t,e){return t.eat("/")?(t.skipToEnd(),["comment","comment"]):t.eat("*")?(e.tokenize=w,w(t,e)):["operator","operator"]},"@":function(t){return t.eat("{")?[null,"interpolation"]:!t.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)&&(t.eatWhile(/[\w\\\-]/),t.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),t.defineMIME("text/x-gss",{documentTypes:i,mediaTypes:o,mediaFeatures:a,propertyKeywords:h,nonStandardPropertyKeywords:f,fontProperties:p,counterDescriptors:g,colorKeywords:m,valueKeywords:b,supportsAtComponent:!0,tokenHooks:{"/":function(t,e){return!!t.eat("*")&&(e.tokenize=w,w(t,e))}},name:"css",helperType:"gss"})}(n(6))},function(t,e,n){"use strict";t.exports=function(t){var e=t;return{compTypes:"",parseStyle:function(t){for(var e={},n=t.split(";"),i=0,r=n.length;i=0&&e<=k};function E(t){return function(e,n,i,r){n=y(n,r,4);var o=!T(e)&&m.keys(e),s=(o||e).length,a=t>0?0:s-1;return arguments.length<3&&(i=e[o?o[a]:a],a+=t),function(e,n,i,r,o,s){for(;o>=0&&o=0},m.invoke=function(t,e){var n=c.call(arguments,2),i=m.isFunction(e);return m.map(t,function(t){var r=i?e:t[e];return null==r?r:r.apply(t,n)})},m.pluck=function(t,e){return m.map(t,m.property(e))},m.where=function(t,e){return m.filter(t,m.matcher(e))},m.findWhere=function(t,e){return m.find(t,m.matcher(e))},m.max=function(t,e,n){var i,r,o=-1/0,s=-1/0;if(null==e&&null!=t)for(var a=0,l=(t=T(t)?t:m.values(t)).length;ao&&(o=i);else e=b(e,n),m.each(t,function(t,n,i){((r=e(t,n,i))>s||r===-1/0&&o===-1/0)&&(o=t,s=r)});return o},m.min=function(t,e,n){var i,r,o=1/0,s=1/0;if(null==e&&null!=t)for(var a=0,l=(t=T(t)?t:m.values(t)).length;ai||void 0===n)return 1;if(n0?0:r-1;o>=0&&o0?s=o>=0?o:Math.max(o+a,s):a=o>=0?Math.min(o+1,a):o+a+1;else if(n&&o&&a)return i[o=n(i,r)]===r?o:-1;if(r!=r)return(o=e(c.call(i,s,a),m.isNaN))>=0?o+s:-1;for(o=t>0?s:a-1;o>=0&&oe?(s&&(clearTimeout(s),s=null),a=c,o=t.apply(i,r),s||(i=r=null)):s||!1===n.trailing||(s=setTimeout(l,u)),o}},m.debounce=function(t,e,n){var i,r,o,s,a,l=function(){var c=m.now()-s;c=0?i=setTimeout(l,e-c):(i=null,n||(a=t.apply(o,r),i||(o=r=null)))};return function(){o=this,r=arguments,s=m.now();var c=n&&!i;return i||(i=setTimeout(l,e)),c&&(a=t.apply(o,r),o=r=null),a}},m.wrap=function(t,e){return m.partial(e,t)},m.negate=function(t){return function(){return!t.apply(this,arguments)}},m.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,i=t[e].apply(this,arguments);n--;)i=t[n].call(this,i);return i}},m.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},m.before=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},m.once=m.partial(m.before,2);var L=!{toString:null}.propertyIsEnumerable("toString"),N=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];function D(t,e){var n=N.length,i=t.constructor,r=m.isFunction(i)&&i.prototype||s,o="constructor";for(m.has(t,o)&&!m.contains(e,o)&&e.push(o);n--;)(o=N[n])in t&&t[o]!==r[o]&&!m.contains(e,o)&&e.push(o)}m.keys=function(t){if(!m.isObject(t))return[];if(f)return f(t);var e=[];for(var n in t)m.has(t,n)&&e.push(n);return L&&D(t,e),e},m.allKeys=function(t){if(!m.isObject(t))return[];var e=[];for(var n in t)e.push(n);return L&&D(t,e),e},m.values=function(t){for(var e=m.keys(t),n=e.length,i=Array(n),r=0;r":">",'"':""","'":"'","`":"`"},R=m.invert(F),j=function(t){var e=function(e){return t[e]},n="(?:"+m.keys(t).join("|")+")",i=RegExp(n),r=RegExp(n,"g");return function(t){return t=null==t?"":""+t,i.test(t)?t.replace(r,e):t}};m.escape=j(F),m.unescape=j(R),m.result=function(t,e,n){var i=null==t?void 0:t[e];return void 0===i&&(i=n),m.isFunction(i)?i.call(t):i};var z=0;m.uniqueId=function(t){var e=++z+"";return t?t+e:e},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var V=/(.)^/,H={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},$=/\\|'|\r|\n|\u2028|\u2029/g,B=function(t){return"\\"+H[t]};m.template=function(t,e,n){!e&&n&&(e=n),e=m.defaults({},e,m.templateSettings);var i=RegExp([(e.escape||V).source,(e.interpolate||V).source,(e.evaluate||V).source].join("|")+"|$","g"),r=0,o="__p+='";t.replace(i,function(e,n,i,s,a){return o+=t.slice(r,a).replace($,B),r=a+e.length,n?o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":i?o+="'+\n((__t=("+i+"))==null?'':__t)+\n'":s&&(o+="';\n"+s+"\n__p+='"),e}),o+="';\n",e.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{var s=new Function(e.variable||"obj","_",o)}catch(t){throw t.source=o,t}var a=function(t){return s.call(this,t,m)},l=e.variable||"obj";return a.source="function("+l+"){\n"+o+"}",a},m.chain=function(t){var e=m(t);return e._chain=!0,e};var W=function(t,e){return t._chain?m(e).chain():e};m.mixin=function(t){m.each(m.functions(t),function(e){var n=m[e]=t[e];m.prototype[e]=function(){var t=[this._wrapped];return l.apply(t,arguments),W(this,n.apply(m,t))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=o[t];m.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],W(this,n)}}),m.each(["concat","join","slice"],function(t){var e=o[t];m.prototype[t]=function(){return W(this,e.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},void 0===(i=function(){return m}.apply(e,[]))||(t.exports=i)}).call(this)},function(t,e,n){!function(e){var n,i={},r={16:!1,18:!1,17:!1,91:!1},o="all",s={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,command:91},a={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,home:36,end:35,pageup:33,pagedown:34,",":188,".":190,"/":191,"`":192,"-":189,"=":187,";":186,"'":222,"[":219,"]":221,"\\":220},l=function(t){return a[t]||t.toUpperCase().charCodeAt(0)},c=[];for(n=1;n<20;n++)a["f"+n]=111+n;function u(t,e){for(var n=t.length;n--;)if(t[n]===e)return n;return-1}function h(t,e){if(t.length!=e.length)return!1;for(var n=0;n1&&(o=m(t),t=[t[t.length-1]]),t=t[0],(t=l(t))in i||(i[t]=[]),i[t].push({shortcut:r[s],scope:e,method:n,key:r[s],mods:o})}for(n in s)p[n]=!1;function g(){return o||"all"}function v(t){var e;return""==(e=(t=t.replace(/\s/g,"")).split(","))[e.length-1]&&(e[e.length-2]+=","),e}function m(t){for(var e=t.slice(0,t.length-1),n=0;n0,r)(!r[o]&&u(n.mods,+o)>-1||r[o]&&-1==u(n.mods,+o))&&(l=!1);(0!=n.mods.length||r[16]||r[18]||r[17]||r[91])&&!l||!1===n.method(t,n)&&(t.preventDefault?t.preventDefault():t.returnValue=!1,t.stopPropagation&&t.stopPropagation(),t.cancelBubble&&(t.cancelBubble=!0))}}(t)}),y(document,"keyup",function(t){var e,n=t.keyCode,i=u(c,n);if(i>=0&&c.splice(i,1),93!=n&&224!=n||(n=91),n in r)for(e in r[n]=!1,s)s[e]==n&&(p[e]=!1)}),y(window,"focus",function(){for(n in r)r[n]=!1;for(n in s)p[n]=!1});var b=e.key;e.key=p,e.key.setScope=function(t){o=t||"all"},e.key.getScope=g,e.key.deleteScope=function(t){var e,n,r;for(e in i)for(n=i[e],r=0;r1&&(c=m(r),t=r[r.length-1]),t=l(t),void 0===e&&(e=g()),!i[t])return;for(o=0;o\n \n <%= label %>\n \n
    \n '),events:{},initialize:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.config=t;var e=this.config.pStylePrefix||"";this.pfx=e,this.caretR="fa fa-caret-right",this.caretD="fa fa-caret-down",this.iconClass=e+"caret-icon",this.activeClass=e+"open",this.className=e+"block-category",this.events["click ."+e+"title"]="toggle",this.listenTo(this.model,"change:open",this.updateVisibility),this.delegateEvents()},updateVisibility:function(){this.model.get("open")?this.open():this.close()},open:function(){this.el.className=this.className+" "+this.activeClass,this.getIconEl().className=this.iconClass+" "+this.caretD,this.getBlocksEl().style.display=""},close:function(){this.el.className=this.className,this.getIconEl().className=this.iconClass+" "+this.caretR,this.getBlocksEl().style.display="none"},toggle:function(){var t=this.model;t.set("open",!t.get("open"))},getIconEl:function(){return this.iconEl||(this.iconEl=this.el.querySelector("."+this.iconClass)),this.iconEl},getBlocksEl:function(){return this.blocksEl||(this.blocksEl=this.el.querySelector("."+this.pfx+"blocks-c")),this.blocksEl},append:function(t){this.getBlocksEl().appendChild(t)},render:function(){return this.el.innerHTML=this.template({pfx:this.pfx,label:this.model.get("label")}),this.el.className=this.className,this.$el.css({order:this.model.get("order")}),this.updateVisibility(),this}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)),r=n(1),o=n(2);t.exports=i.default.View.extend({events:{mousedown:"startDrag",dragstart:"handleDragStart",drag:"handleDrag",dragend:"handleDragEnd"},initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.em=e.em,this.config=e,this.endDrag=this.endDrag.bind(this),this.ppfx=e.pStylePrefix||"",this.listenTo(this.model,"destroy remove",this.remove)},startDrag:function(t){var e=this.config;if(0===t.button&&e.getSorter&&!this.el.draggable){e.em.refreshCanvas();var n=e.getSorter();n.setDragHelper(this.el,t),n.setDropContent(this.model.get("content")),n.startSort(this.el),(0,o.on)(document,"mouseup",this.endDrag)}},handleDragStart:function(t){var e=this.em,n=this.model,i=n.get("content"),o=(0,r.isObject)(i),s=o?JSON.stringify(i):i;t.dataTransfer.setData("text",s),e.set("dragContent",i),e.trigger("block:drag:start",n,t)},handleDrag:function(t){this.em.trigger("block:drag",this.model,t)},handleDragEnd:function(){var t=this.em,e=this.model,n=t.get("dragResult");if(n){var i=n.get&&n.get("activeOnRender");(e.get("activate")||i)&&(n.trigger("active"),n.set("activeOnRender",0)),e.get("select")&&t.setSelected(n),e.get("resetId")&&n.onAll(function(t){return t.resetId()})}t.set({dragResult:null,dragContent:null}),t.trigger("block:drag:stop",n,e)},endDrag:function(t){(0,o.off)(document,"mouseup",this.endDrag);var e=this.config.getSorter();e.moved=0,e.endMove()},render:function(){var t=this.el,e=this.ppfx,n=e+"block",i=this.model.get("label");return t.className+=" "+n+" "+e+"one-bg "+e+"four-color-h",t.innerHTML='
    '+i+"
    ",t.title=t.textContent.trim(),(0,o.hasDnd)(this.em)&&t.setAttribute("draggable",!0),this}})},function(t,e,n){"use strict";var i=n(1),r=n(92),o=n(91);t.exports=n(0).View.extend({initialize:function(t,e){(0,i.bindAll)(this,"getSorter","onDrag","onDrop"),this.config=e||{},this.categories=t.categories||"",this.renderedCategories=[];var n=this.config.pStylePrefix||"";this.ppfx=n,this.noCatClass=n+"blocks-no-cat",this.blockContClass=n+"blocks-c",this.catsClass=n+"block-categories";var r=this.collection;this.listenTo(r,"add",this.addTo),this.listenTo(r,"reset",this.render),this.em=this.config.em,this.tac="test-tac",this.grabbingCls=this.ppfx+"grabbing",this.em&&(this.config.getSorter=this.getSorter,this.canvas=this.em.get("Canvas"))},getSorter:function(){if(this.em){if(!this.sorter){var t=this.em.get("Utils"),e=this.canvas;this.sorter=new t.Sorter({container:e.getBody(),placer:e.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,onStart:this.onDrag,onEndMove:this.onDrop,onMove:this.onMove,document:e.getFrameEl().contentDocument,direction:"a",wmargin:1,nested:1,em:this.em,canvasRelative:1})}return this.sorter}},onDrag:function(t){this.em.stopDefault(),this.em.trigger("block:drag:start",t)},onMove:function(t){this.em.trigger("block:drag:move",t)},onDrop:function(t){var e=this.em;e.runDefault(),t&&t.get&&(t.get("activeOnRender")&&(t.trigger("active"),t.set("activeOnRender",0)),e.trigger("block:drag:stop",t))},addTo:function(t){this.add(t)},add:function(t,e){var n=e||null,s=new r({model:t,attributes:t.get("attributes")},this.config).render().el,a=t.get("category");if(a&&this.categories){(0,i.isString)(a)?a={id:a,label:a}:(0,i.isObject)(a)&&!a.id&&(a.id=a.label);var l=this.categories.add(a),c=l.get("id"),u=this.renderedCategories[c],h=this.getCategoriesEl();return t.set("category",l),!u&&h&&(u=new o({model:l},this.config).render(),this.renderedCategories[c]=u,h.appendChild(u.el)),void(u&&u.append(s))}n?n.appendChild(s):this.append(s)},getCategoriesEl:function(){return this.catsEl||(this.catsEl=this.el.querySelector("."+this.catsClass)),this.catsEl},getBlocksEl:function(){return this.blocksEl||(this.blocksEl=this.el.querySelector("."+this.noCatClass+" ."+this.blockContClass)),this.blocksEl},append:function(t){var e=this.getBlocksEl();e&&e.appendChild(t)},render:function(){var t=this,e=this.ppfx,n=document.createDocumentFragment();this.catsEl=null,this.blocksEl=null,this.renderedCategories=[],this.el.innerHTML='\n
    \n
    \n
    \n
    \n ',this.collection.each(function(e){return t.add(e,n)}),this.append(n);var i=this.blockContClass+"s "+e+"one-bg "+e+"two-color";return this.$el.addClass(i),this}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.Collection.extend({model:n(44)})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=n(44);t.exports=i.default.Model.extend({defaults:{activate:0,select:0,resetId:0,label:"",content:"",category:"",attributes:{}},initialize:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];var t=this.get("category");if(t&&"string"==typeof t)new r({id:t,label:t})}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=n(95);t.exports=i.default.Collection.extend({model:r})},function(t,e,n){"use strict";t.exports={appendTo:"",blocks:[]}},function(t,e,n){"use strict";var i=n(1);t.exports=function(){var t,e,r,o={},s=n(97),a=n(96),l=n(94),c=n(93),u=[];return{name:"BlockManager",init:function(n){var i=(o=n||{}).em;for(var h in s)h in o||(o[h]=s[h]);return t=new a([]),e=new a([]),u=new l,r=new c({collection:e,categories:u},o),t.listenTo(t,"add",function(t){e.add(t),i&&i.trigger("block:add",t)}),t.listenTo(t,"remove",function(t){e.remove(t),i&&i.trigger("block:remove",t)}),t.listenTo(t,"reset",function(t){e.reset(t.models)}),this},getConfig:function(){return o},onLoad:function(){var t=this.getAll();!t.length&&t.reset(o.blocks)},postRender:function(){var t=this.getConfig().appendTo;t&&((0,i.isElement)(t)?t:document.querySelector(t)).appendChild(this.render())},add:function(e,n){var i=n||{};return i.id=e,t.add(i)},get:function(e){return t.get(e)},getAll:function(){return t},getAllVisible:function(){return e},remove:function(e){return t.remove(e)},getCategories:function(){return u},getContainer:function(){return r.el},render:function(t){var e=t||this.getAll().models;return r.rendered||(r.render(),r.rendered=1),r.collection.reset(e),this.getContainer()}}}},function(t,e,n){var i={"./CanvasClear":52,"./CanvasClear.js":52,"./CommandAbstract":38,"./CommandAbstract.js":38,"./ComponentDelete":51,"./ComponentDelete.js":51,"./ComponentEnter":50,"./ComponentEnter.js":50,"./ComponentExit":49,"./ComponentExit.js":49,"./ComponentNext":48,"./ComponentNext.js":48,"./ComponentPrev":47,"./ComponentPrev.js":47,"./CopyComponent":46,"./CopyComponent.js":46,"./CreateComponent":7,"./CreateComponent.js":7,"./DeleteComponent":36,"./DeleteComponent.js":36,"./Drag":21,"./Drag.js":21,"./ExportTemplate":37,"./ExportTemplate.js":37,"./Fullscreen":24,"./Fullscreen.js":24,"./ImageComponent":35,"./ImageComponent.js":35,"./InsertCustom":12,"./InsertCustom.js":12,"./MoveComponent":34,"./MoveComponent.js":34,"./OpenAssets":27,"./OpenAssets.js":27,"./OpenBlocks":28,"./OpenBlocks.js":28,"./OpenLayers":31,"./OpenLayers.js":31,"./OpenStyleManager":30,"./OpenStyleManager.js":30,"./OpenTraitManager":29,"./OpenTraitManager.js":29,"./PasteComponent":45,"./PasteComponent.js":45,"./Preview":23,"./Preview.js":23,"./Resize":22,"./Resize.js":22,"./SelectComponent":8,"./SelectComponent.js":8,"./SelectParent":25,"./SelectParent.js":25,"./SelectPosition":13,"./SelectPosition.js":13,"./ShowOffset":26,"./ShowOffset.js":26,"./SwitchVisibility":32,"./SwitchVisibility.js":32,"./TextComponent":33,"./TextComponent.js":33};function r(t){var e=o(t);return n(e)}function o(t){var e=i[t];if(!(e+1)){var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}return e}r.keys=function(){return Object.keys(i)},r.resolve=o,t.exports=r,r.id=99},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{command:"",attributes:{}}})},function(t,e,n){"use strict";var i=n(0),r=n(100);t.exports=i.Collection.extend({model:r})},function(t,e,n){"use strict";var i=n(0);t.exports=i.View.extend({events:function(){return this.model.get("events")||{mousedown:"handleClick"}},attributes:function(){return this.model.get("attributes")},initialize:function(t){this.editor=t.config.editor},handleClick:function(t){t.preventDefault(),t.stopPropagation(),this.execCommand(t)},execCommand:function(t){var e={event:t},n=this.model.get("command"),i=this.editor;"function"==typeof n&&n(i,null,e),"string"==typeof n&&i.runCommand(n,e)},render:function(){var t=this.editor,e=this.$el,n=this.model,i=n.get("id"),r=n.get("label"),o=t.getConfig("stylePrefix");return e.addClass(o+"toolbar-item"),i&&e.addClass(o+"toolbar-item__"+i),r&&e.append(r),this}})},function(t,e,n){"use strict";n(0);var i=n(59),r=n(102);t.exports=i.extend({itemView:r,initialize:function(t){this.config={editor:t.editor||""},this.listenTo(this.collection,"reset",this.render)}})},function(t,e,n){"use strict";t.exports={ESCAPE_KEY:27,stylePrefix:"com-",defaults:[],em:null,firstCentered:!0,newFixedH:!1,minComponentH:50,minComponentW:50}},function(t,e,n){"use strict";var i=n(1);t.exports=function(){var t=void 0,e={},r={},o={},s=n(104),a=n(38);return{CommandAbstract:a,name:"Commands",init:function(i){for(var r in e=i||{},s)r in e||(e[r]=s[r]);t=e.em;var a=e.pStylePrefix;for(var l in a&&(e.stylePrefix=a+e.stylePrefix),e.defaults){var c=e.defaults[l];c.id&&this.add(c.id,c)}var u=n(37);return o["select-comp"]=n(8),o["create-comp"]=n(7),o["delete-comp"]=n(36),o["image-comp"]=n(35),o["move-comp"]=n(34),o["text-comp"]=n(33),o["insert-custom"]=n(12),o["export-template"]=u,o["sw-visibility"]=n(32),o["open-layers"]=n(31),o["open-sm"]=n(30),o["open-tm"]=n(29),o["open-blocks"]=n(28),o["open-assets"]=n(27),o["show-offset"]=n(26),o["select-parent"]=n(25),o.fullscreen=n(24),o.preview=n(23),o.resize=n(22),o.drag=n(21),o["tlb-delete"]={run:function(t){return t.runCommand("core:component-delete")}},o["tlb-clone"]={run:function(t){t.runCommand("core:copy"),t.runCommand("core:paste")}},o["tlb-move"]={run:function(t,e,n){var i=void 0,r=t.getModel(),o=n&&n.event,s=t.getSelected(),a=[].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,r=this.get(e),o=t.get("Editor");return r&&(i=r.callRun(o,n)),i},stop:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,r=this.get(e),o=t.get("Editor");return r&&(i=r.callStop(o,n)),i},loadDefaultCommands:function(){for(var t in o)this.add(t,o[t]);return this},create:function(t){return new(a.extend(t))(e)}}}},function(t,e,n){"use strict";var i=n(1),r="transitionend oTransitionEnd transitionend webkitTransitionEnd";t.exports=n(0).View.extend({tagName:"iframe",attributes:{allowfullscreen:"allowfullscreen"},initialize:function(t){(0,i.bindAll)(this,"udpateOffset"),this.config=t.config||{},this.ppfx=this.config.pStylePrefix||"",this.em=this.config.em,this.listenTo(this.em,"change:device",this.updateDim)},updateDim:function(t){var e=this.em,n=e.getDeviceModel(),i=this.el.style,o=i.width||"",s=i.height||"",a=n?n.get("width"):"",l=n?n.get("height"):"",c=o==a&&s==l;i.width=a,i.height=l,this.udpateOffset(),e.stopDefault({preserveSelected:1}),c?this.udpateOffset():this.$el.on(r,this.udpateOffset)},udpateOffset:function(){var t=this.em,e=t.get("Canvas").getOffset();t.set("canvasOffset",e),t.runDefault({preserveSelected:1}),this.$el.off(r,this.udpateOffset)},getBody:function(){this.$el.contents().find("body")},getWrapper:function(){return this.$el.contents().find("body > div")},render:function(){return this.$el.attr({class:this.ppfx+"frame"}),this}})},function(t,e,n){"use strict";(function(e){var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)),r=n(2);var o=n(106),s=i.default.$;t.exports=i.default.View.extend({initialize:function(t){e.bindAll(this,"renderBody","onFrameScroll","clearOff"),(0,r.on)(window,"scroll resize",this.clearOff),this.config=t.config||{},this.em=this.config.em||{},this.ppfx=this.config.pStylePrefix||"",this.className=this.config.stylePrefix+"canvas",this.listenTo(this.em,"change:canvasOffset",this.clearOff),this.frame=new o({model:this.model.get("frame"),config:this.config})},isElInViewport:function(t){var e=(0,r.getElement)(t).getBoundingClientRect(),n=this.getFrameOffset(1),i=e.top,o=e.left;return i>=0&&o>=0&&i<=n.height&&o<=n.width},onFrameScroll:function(){var t=this.frame.el.contentDocument.body;this.toolsEl.style.top="-"+t.scrollTop+"px",this.toolsEl.style.left="-"+t.scrollLeft+"px",this.em.trigger("canvasScroll")},renderScripts:function(){var t=this.frame,e=this;t.el.onload=function(){!function n(i){if(i.length>0){var r=document.createElement("script");r.type="text/javascript",r.src=i.shift(),r.onerror=r.onload=n.bind(null,i),t.el.contentDocument.head.appendChild(r)}else e.renderBody()}(e.config.scripts.slice(0))}},renderBody:function(){var t=this.model.get("frame").get("wrapper"),e=this.config.em;if(t){var n=this.ppfx,i=s(this.frame.el.contentWindow.document.body),r=e.get("CssComposer"),o=e.get("Config"),a=this.config,l=o.protectedCss,c="";a.styles.forEach(function(t){c+=''});var u="\n "+(e.config.baseCss||"")+"\n\n ."+n+"dashed *[data-highlightable] {\n outline: 1px dashed rgba(170,170,170,0.7);\n outline-offset: -2px;\n }\n\n ."+n+"comp-selected {\n outline: 3px solid #3b97e3 !important;\n outline-offset: -3px;\n }\n\n ."+n+"comp-selected-parent {\n outline: 2px solid #ffca6f !important\n }\n\n ."+n+"no-select {\n user-select: none;\n -webkit-user-select:none;\n -moz-user-select: none;\n }\n\n ."+n+"freezed {\n opacity: 0.5;\n pointer-events: none;\n }\n\n ."+n+"no-pointer {\n pointer-events: none;\n }\n\n ."+n+"plh-image {\n background: #f5f5f5;\n border: none;\n height: 50px;\n width: 50px;\n display: block;\n outline: 3px solid #ffca6f;\n cursor: pointer;\n outline-offset: -2px\n }\n\n ."+n+"grabbing {\n cursor: grabbing;\n cursor: -webkit-grabbing;\n }\n\n "+(o.canvasCss||"")+"\n "+(l||"")+"\n ";c&&i.append(c),i.append(""),i.append(t.render()).append(r.render()),i.append(this.getJsContainer()),e.trigger("loaded"),this.frame.el.contentWindow.onscroll=this.onFrameScroll,this.frame.udpateOffset();var h=document,d=this.frame.el.contentDocument;[{event:"keydown keyup",class:"KeyboardEvent"}].forEach(function(t){return t.event.split(" ").forEach(function(e){d.addEventListener(e,function(e){return h.dispatchEvent(function(t,e){var n=void 0;try{n=new window[e](t.type,t)}catch(t){(n=document.createEvent(e)).initEvent(t.type,!0,!0)}return n.keyCodeVal=t.keyCode,["keyCode","which"].forEach(function(t){Object.defineProperty(n,t,{get:function(){return this.keyCodeVal}})}),n}(e,t.class))})})})}},offset:function(t){var e=t.getBoundingClientRect(),n=t.ownerDocument.body;return{top:e.top+n.scrollTop,left:e.left+n.scrollLeft,width:e.width,height:e.height}},clearOff:function(){this.frmOff=null,this.cvsOff=null},getFrameOffset:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.frmOff&&!t||(this.frmOff=this.offset(this.frame.el)),this.frmOff},getCanvasOffset:function(){return this.cvsOff||(this.cvsOff=this.offset(this.el)),this.cvsOff},getElementPos:function(t,e){var n=e||{},i=this.getFrameOffset(),r=this.getCanvasOffset(),o=this.offset(t),s=n.avoidFrameOffset?0:i.top,a=n.avoidFrameOffset?0:i.left;return{top:o.top+s-r.top,left:o.left+a-r.left,height:t.offsetHeight||t.clientHeight,width:t.offsetWidth||t.clientWidth}},getPosition:function(){var t=this.frame.el.contentDocument;if(t){var e=t.body,n=this.getFrameOffset(),i=this.getCanvasOffset();return{top:n.top+e.scrollTop-i.top,left:n.left+e.scrollLeft-i.left}}},updateScript:function(t){t.scriptContainer||(t.scriptContainer=s("
    "),this.getJsContainer().appendChild(t.scriptContainer.get(0)));var e=t.model,n=e.getId();t.el.id=n,t.scriptContainer.html("");var i=document.createElement("script");i.innerHTML="\n setTimeout(function() {\n var item = document.getElementById('"+n+"');\n if (!item) return;\n (function(){\n "+e.getScriptString()+";\n }.bind(item))()\n }, 1);",setTimeout(function(){return t.scriptContainer.get(0).appendChild(i)},0)},getJsContainer:function(){return this.jsContainer||(this.jsContainer=s('
    ').get(0)),this.jsContainer},render:function(){if(this.wrapper=this.model.get("wrapper"),this.wrapper&&"function"==typeof this.wrapper.render){this.model.get("frame").set("wrapper",this.wrapper),this.$el.append(this.frame.render().el);var t=this.frame;0===this.config.scripts.length?t.el.onload=this.renderBody:this.renderScripts()}var e=this.ppfx;this.$el.append('\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n ');var n=this.el,i=n.querySelector("#"+e+"tools");return this.hlEl=n.querySelector("."+e+"highlighter"),this.badgeEl=n.querySelector("."+e+"badge"),this.placerEl=n.querySelector("."+e+"placeholder"),this.ghostEl=n.querySelector("."+e+"ghost"),this.toolbarEl=n.querySelector("."+e+"toolbar"),this.resizerEl=n.querySelector("."+e+"resizer"),this.offsetEl=n.querySelector("."+e+"offset-v"),this.fixedOffsetEl=n.querySelector("."+e+"offset-fixed-v"),this.toolsEl=i,this.el.className=this.className,this}})}).call(this,n(1))},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.Model.extend({defaults:{wrapper:"",width:"",height:"",attributes:{}}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=n(108);t.exports=i.default.Model.extend({defaults:{frame:"",wrapper:"",rulers:!1},initialize:function(t){var e=this.conf||{};this.set("frame",new r(e.frame))}})},function(t,e,n){"use strict";t.exports={stylePrefix:"cv-",rulers:!1,scripts:[],styles:[],customBadgeLabel:""}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n";this.sorter.setDropContent(o),this.sorter.startSort(),e.trigger("canvas:dragenter",n,o)}}},{key:"handleDragOver",value:function(t){t.preventDefault(),this.em.trigger("canvas:dragover",t)}},{key:"handleDrop",value:function(t){t.preventDefault();var e=t.dataTransfer,n=this.getContentByData(e).content;t.target.style.border="",n?this.sorter.setDropContent(n):this.sorter.moved=0,this.endDrop(0,t)}},{key:"getContentByData",value:function(t){var e=this.em,n=t.types,i=t.files,r=e.get("dragContent"),s=t.getData("text");if(i.length){s=[];for(var a=0;a=0)s=t.getData("text/html").replace(/<\/?meta[^>]*>/g,"");else if((0,o.indexOf)(n,"text/uri-list")>=0)s={type:"link",attributes:{href:s},content:s};else if((0,o.indexOf)(n,"text/json")>=0){var u=t.getData("text/json");u&&(s=JSON.parse(u))}var h={content:s};return e.trigger("canvas:dragdata",t,h),h}}]),t}();e.default=s},function(t,e,n){"use strict";var i=n(2),r=function(t){return t&&t.__esModule?t:{default:t}}(n(111));t.exports=function(){var t,e,o={},s=n(110),a=n(109),l=n(107);return{getCanvasView:function(){return l},name:"Canvas",init:function(e){for(var n in o=e||{},s)n in o||(o[n]=s[n]);var i=o.pStylePrefix;i&&(o.stylePrefix=i+o.stylePrefix),t=new a(e),l=new l({model:t,config:o});var r=o.em.get("DomComponents");return r&&this.setWrapper(r),this.startAutoscroll=this.startAutoscroll.bind(this),this.stopAutoscroll=this.stopAutoscroll.bind(this),this.autoscroll=this.autoscroll.bind(this),this},getConfig:function(){return o},setWrapper:function(e){t.set("wrapper",e)},getElement:function(){return l.el},getFrameEl:function(){return l.frame.el},getDocument:function(){return this.getFrameEl().contentDocument},getWindow:function(){return this.getFrameEl().contentWindow},getBody:function(){return l.frame.el.contentDocument.body},getWrapperEl:function(){return this.getBody().querySelector("#wrapper")},getToolsEl:function(){return l.toolsEl},getHighlighter:function(){return l.hlEl},getBadgeEl:function(){return l.badgeEl},getPlacerEl:function(){return l.placerEl},getGhostEl:function(){return l.ghostEl},getToolbarEl:function(){return l.toolbarEl},getResizerEl:function(){return l.resizerEl},getOffsetViewerEl:function(){return l.offsetEl},getFixedOffsetViewerEl:function(){return l.fixedOffsetEl},render:function(){return l.render().el},getOffset:function(){var t=this.offset(this.getFrameEl()),e=this.offset(this.getElement());return{top:t.top-e.top,left:t.left-e.left}},offset:function(t){return l.offset(t)},setCustomBadgeLabel:function(t){o.customBadgeLabel=t},getElementPos:function(t,e){return l.getElementPos(t,e)},getTargetToElementDim:function(t,e,n){var i=n||{},r=l.getPosition();if(r){var s=i.elPos||l.getElementPos(e),a=n.toRight||0,c=i.targetHeight||t.offsetHeight,u=i.targetWidth||t.offsetWidth,h=i.event||null,d=s.top-c,f=s.left;f+=a?s.width:0;var p=(f=a?f-u:f)s.top+s.height?s.top+s.height:g,left:p,elementTop:s.top,elementLeft:s.left,elementWidth:s.width,elementHeight:s.height,targetWidth:t.offsetWidth,targetHeight:t.offsetHeight,canvasTop:r.top,canvasLeft:r.left};return h&&o.em&&o.em.trigger(h,v),v}},getMouseRelativePos:function(t,e){var n=0,i=0,r=(e||{}).subWinOffset,o=t.target.ownerDocument,s=o.defaultView||o.parentWindow,a=s.frameElement,l=r?s.pageYOffset:0,c=r?s.pageXOffset:0;if(a){var u=a.getBoundingClientRect();n=u.top||0,i=u.left||0}return{y:t.clientY+n-l,x:t.clientX+i-c}},getMouseRelativeCanvas:function(t,e){var n=this.getFrameEl(),i=this.getBody(),r=n.offsetTop||0,o=n.offsetLeft||0,s=i.scrollTop||0,a=i.scrollLeft||0;return{y:t.clientY+r+s,x:t.clientX+o+a}},hasFocus:function(){return this.getDocument().hasFocus()},isInputFocused:function(){return"BODY"!==this.getFrameEl().contentDocument.activeElement.tagName},scrollTo:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(0,i.getElement)(t);this.getCanvasView().isElInViewport(n)&&!e.force||n.scrollIntoView(e)},startAutoscroll:function(){var t=this;this.dragging=1;var n=this.getScrollListeners();e=l.getFrameOffset(1),setTimeout(function(){(0,i.on)(n,"mousemove",t.autoscroll),(0,i.on)(n,"mouseup",t.stopAutoscroll)},0)},autoscroll:function(t){if(t.preventDefault(),this.dragging){var n=this.getFrameEl().contentWindow,i=n.document.body.scrollTop,r=t.clientY,o=e.height-50;r<50&&(i-=50-r),r>o&&(i+=r-o),n.scrollTo(0,i)}},stopAutoscroll:function(){this.dragging=0;var t=this.getScrollListeners();(0,i.off)(t,"mousemove",this.autoscroll),(0,i.off)(t,"mouseup",this.stopAutoscroll)},getScrollListeners:function(){return[this.getFrameEl().contentWindow,this.getElement()]},postRender:function(){(0,i.hasDnd)(o.em)&&(this.droppable=new r.default(o.em))},getFrameWrapperEl:function(){return l.frame.getWrapper()}}}},function(t,e,n){"use strict";var i=n(53);t.exports=n(0).View.extend({initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.opt=t;var e=t.config||{};this.level=t.level,this.config=e,this.preview=t.preview,this.ppfx=e.pStylePrefix||"",this.pfx=e.stylePrefix||"",this.parent=t.parent;var n=this.pfx,i=this.ppfx,r=this.parent,o=this.collection;this.listenTo(o,"add",this.addTo),this.listenTo(o,"reset resetNavigator",this.render),this.listenTo(o,"remove",this.removeChildren),this.className=n+"layers";var s=e.em;if(e.sortable&&!this.opt.sorter){var a=s.get("Utils");this.opt.sorter=new a.Sorter({container:e.sortContainer||this.el,containerSel:"."+this.className,itemSel:"."+n+"layer",ignoreViewChildren:1,onEndMove:function(t,e){var n=e.getSourceModel();s.setSelected(n,{forceChange:1})},avoidSelectOnEnd:1,nested:1,ppfx:i,pfx:n})}this.sorter=this.opt.sorter||"",this.$el.data("collection",o),r&&this.$el.data("model",r)},removeChildren:function(t){var e=t.viewLayer;e&&e.remove.apply(e)},addTo:function(t){var e=this.collection.indexOf(t);this.addToCollection(t,null,e)},addToCollection:function(t,e,n){var r=this.level,o=e||null,s=i;if(this.isCountable(t,this.config.hideTextnode)){var a=new s({level:r,model:t,config:this.config,sorter:this.sorter,isCountable:this.isCountable,opened:this.opt.opened}).render().el;if(o)o.appendChild(a);else if(void 0!==n){var l="before";this.$el.children().length==n&&(n--,l="after"),n<0?this.$el.append(a):this.$el.children().eq(n)[l](a)}else this.$el.append(a);return a}},isCountable:function(t,e){var n=t.get("type"),i=t.get("tagName");return!(("textnode"==n||"br"==i)&&e||!t.get("layerable"))},render:function(){var t=this,e=document.createDocumentFragment(),n=this.el;return n.innerHTML="",this.collection.each(function(n){return t.addToCollection(n,e)}),n.appendChild(e),n.className=this.className,this}})},function(t,e,n){"use strict";t.exports={stylePrefix:"",appendTo:"",sortable:1,hidable:1,hideTextnode:1,root:"",showWrapper:1,showHover:1,scrollCanvas:{behavior:"smooth"},scrollLayers:1,highlightHover:1}},function(t,e,n){"use strict";t.exports=n(0).View.extend({})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return{build:function(e){var n=[];"string"==typeof e&&(e=[e]);for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},n=this.target,o=this.get("name");if(!(0,r.isUndefined)(t))if(this.get("changeProp"))n.set(o,t,e);else{var s=i({},n.get("attributes"));s[o]=t,n.set("attributes",s,e)}},setValueFromInput:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r={value:t};this.set(r,i({},n,{avoidStore:1})),e&&(this.set("value","",n),this.set(r,n))},getInitValue:function(){var t=this.target,e=this.get("name"),n=void 0;if(t){var i=t.get("attributes");n=this.get("changeProp")?t.get(e):i[e]}return n||this.get("value")||this.get("default")}})},function(t,e,n){"use strict";var i=n(1),r=n(0),o=n(140),s=n(139);t.exports=r.Collection.extend({model:o,initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.em=e.em||"",this.listenTo(this,"add",this.handleAdd)},handleAdd:function(t){var e=this.target;e&&(t.target=e)},setTarget:function(t){this.target=t},add:function(t,e){var n=this.em;if((0,i.isString)(t)||(0,i.isArray)(t)){var o=n&&n.get&&n.get("TraitManager"),a=o&&o.getConfig(),l=s(a);(0,i.isString)(t)&&(t=[t]);for(var c=0,u=t.length;c2&&void 0!==arguments[2]?arguments[2]:{},r=t.components(),o=s.get("UndoManager"),a=s.handleUpdates.bind(s),l=this.handleChanges.bind(this),c=this.handleRemoves.bind(this);o&&o.add(t),o&&r&&o.add(r);[[t,"change:style change:content change:attributes change:src",a],[r,"add",l],[r,"remove",c],[t.get("classes"),"add remove",a]].forEach(function(t){s.stopListening(t[0],t[1],t[2]),s.listenTo(t[0],t[1],t[2])}),!i.avoidStore&&a("","",i),r.each(function(t){return n.handleChanges(t,e,i)})},handleRemoves:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};!n.avoidStore&&s.handleUpdates(t,e,n)},load:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e="";if(!t&&o.stm&&(t=o.em.getCacheLoad()),t.components)try{e=JSON.parse(t.components)}catch(t){}else t.html&&(e=t.html);var n=e&&e.constructor===Object;return(e&&e.length||n)&&(this.clear(),this.getComponents().reset(),n?this.getWrapper().set(e).initComponents().initClasses().loadTraits():this.getComponents().add(e)),e},store:function(t){if(o.stm){var e={},n=this.storageKey();if(n.indexOf("html")>=0&&(e.html=o.em.getHtml()),n.indexOf("components")>=0){var i=o.storeWrapper?this.getWrapper():this.getComponents();e.components=JSON.stringify(i)}return t||o.stm.store(e),e}},getComponent:function(){return t},getWrapper:function(){return this.getComponent()},getComponents:function(){return this.getWrapper().get("components")},addComponent:function(t){return this.getComponents().add(t)},render:function(){return e.render().el},clear:function(){return this.getComponents().reset(),this},setComponents:function(t){this.clear().addComponent(t)},addType:function(t,e){var n=this.getType(t);n?(n.model=e.model,n.view=e.view):(e.id=t,d.unshift(e))},getType:function(t){for(var e=d,n=0;n1&&void 0!==arguments[1]?arguments[1]:{};t&&(t.set({status:"selected"}),["component:selected","component:toggled"].forEach(function(i){return e.em.trigger(i,t,n)}))},selectRemove:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t){this.em;t.set({status:"",state:""}),["component:deselected","component:toggled"].forEach(function(i){return e.em.trigger(i,t,n)})}},componentHovered:function(){var t=o.em,e=t.get("componentHovered"),n=t.previous("componentHovered");n&&"hovered"==n.get("status")&&n.set({status:"",state:""}),e&&(0,r.isEmpty)(e.get("status"))&&e.set("status","hovered")}}}},function(t,e,n){"use strict";var i=n(9),r=n(69);t.exports=i.extend({getInputEl:function(){if(!this.$input){var t=this.model,e=this.getModelValue(),n=new r({model:t,target:this.config.em,contClass:this.ppfx+"field-color",ppfx:this.ppfx}).render();this.$input=n.colorEl,n.setValue(e,{fromTarget:1}),this.input=n}return this.$input.get(0)},renderField:function(){this.$input||(this.getInputEl(),this.$el.append(this.input.el))}})},function(t,e,n){"use strict";var i=n(9),r=n(42);t.exports=i.extend({getValueForTarget:function(){var t=this.model,e=t.get("value"),n=t.get("unit");return e?e+n:""},getInputEl:function(){if(!this.$input){var t=this.getModelValue(),e=new r({contClass:this.ppfx+"field-int",model:this.model,ppfx:this.ppfx});this.input=e.render(),this.$input=this.input.inputEl,this.$unit=this.input.unitEl,this.model.set("value",t),this.$input.val(t)}return this.$input.get(0)},renderField:function(){this.$input||(this.$el.append(this.tmpl),this.getInputEl(),this.$el.find("."+this.inputhClass).prepend(this.input.el))}})},function(t,e,n){"use strict";var i=n(9);t.exports=i.extend({initialize:function(t){i.prototype.initialize.apply(this,arguments);var e=this.ppfx+"chk-icon";this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().checked)},getInputEl:function(){var t;this.$input||(t=1);for(var e=arguments.length,n=Array(e),r=0;r
    '},getInputEl:function(){if(!this.$input){var t=this.model,n=t.get("options")||[],i="",this.input=i,this.$input=r(this.input);var o=this.target,s=t.get("name"),a=t.get("value");if(t.get("changeProp"))a=a||o.get(s);else a=o.get("attributes")[s];a&&this.$input.val(a)}return this.$input.get(0)}})}).call(this,n(1))},function(t,e,n){"use strict";var i=n(59),r=n(9),o=n(147),s=n(146),a=n(145),l=n(144);t.exports=i.extend({itemView:r,itemsView:{text:r,number:a,select:o,checkbox:s,color:l},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.config||{};this.config=e,this.em=t.editor,this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.className=this.pfx+"traits";this.listenTo(this.em,"component:toggled",this.updatedCollection),this.updatedCollection()},updatedCollection:function(){var t=this.ppfx,e=this.em.getSelected();this.el.className=this.className+" "+t+"one-bg "+t+"two-color",e&&(this.collection=e.get("traits"),this.render())}})},function(t,e,n){"use strict";t.exports={stylePrefix:"trt-",appendTo:"",labelContainer:"Component settings",labelPlhText:"eg. Text here",labelPlhHref:"eg. https://google.com",optionsTarget:[{value:"",name:"This window"},{value:"_blank",name:"New window"}],textNoElement:"Select an element before using Trait Manager"}},function(t,e,n){"use strict";var i=n(1),r=n(149),o=n(148);t.exports=function(){var t={},e=void 0;return{TraitsView:o,name:"TraitManager",getConfig:function(){return t},init:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=n,(0,i.defaults)(t,r);var s=t.pStylePrefix;return s&&(t.stylePrefix=""+s+t.stylePrefix),e=new o({collection:[],editor:t.em,config:t}),this},postRender:function(){var t=this.getConfig().appendTo;t&&((0,i.isElement)(t)?t:document.querySelector(t)).appendChild(this.render())},getTraitsViewer:function(){return e},addType:function(t,n){var i=e.itemView;e.itemsView[t]=i.extend(n)},getType:function(t){return e.itemsView[t]},render:function(){return e.render().el}}}},function(t,e,n){"use strict";t.exports=n(60).extend({_createElement:function(t){return document.createTextNode("")},render:function(){var t=this.model,e=t.get("important");return this.el.textContent=t.getDeclaration({important:e}),this}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=n(60),o=n(151),s=i.default.$,a=function(t,e){return t+(e?"-"+e.replace("%","pc"):"")};t.exports=i.default.View.extend({initialize:function(t){var e=t.config||{};this.atRules={},this.config=e,this.em=e.em,this.pfx=e.stylePrefix||"",this.className=this.pfx+"rules";var n=this.collection;this.listenTo(n,"add",this.addTo),this.listenTo(n,"reset",this.render)},addTo:function(t){this.addToCollection(t)},addToCollection:function(t,e){if(this.renderStarted){var n=e||null,i=void 0,s=void 0,l={model:t,config:this.config};if("keyframes"===t.get("atRuleType")){var c=t.getAtRule(),u=this.atRules[c];if(!u){var h=document.createElement("style");u=document.createTextNode(""),h.appendChild(document.createTextNode(c+"{")),h.appendChild(u),h.appendChild(document.createTextNode("}")),this.atRules[c]=u,i=h}s=new o(l),u.appendData(s.render().el.textContent)}else i=(s=new r(l)).render().el;var d=this.className,f=t.get("mediaText"),p=a(d),g=p;if(f&&(g=a(d,this.getMediaWidth(f))),i){var v=n||this.el,m=void 0;try{m=v.querySelector("#"+g)}catch(t){}m||(m=v.querySelector("#"+p)),m.appendChild(i)}return i}},getMediaWidth:function(t){return t&&t.replace("("+this.em.getConfig("mediaCondition")+": ","").replace(")","")},render:function(){var t=this;this.renderStarted=1,this.atRules={};var e=this.$el,n=document.createDocumentFragment(),i=this.className;return e.empty(),this.em.get("DeviceManager").getAll().map(function(t){return t.get("widthMedia")}).sort(function(t,e){return(e&&e.replace("px","")||Number.MAX_VALUE)-(t&&t.replace("px","")||Number.MAX_VALUE)}).forEach(function(t){s('
    ').appendTo(n)}),this.collection.each(function(e){return t.addToCollection(e,n)}),e.append(n),e.attr("class",i),this}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=n(62);t.exports=i.default.Collection.extend({initialize:function(t,e){e&&e.em&&(this.editor=e.em),this.model=function(t,n){return!n.em&&e&&e.em&&(n.em=e.em),new r(t,n)}},add:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof t&&(t=this.editor.get("Parser").parseCss(t)),e.em=this.editor,i.default.Collection.prototype.add.apply(this,[t,e])}})},function(t,e,n){"use strict";t.exports={stylePrefix:"css-",staticRules:"",rules:[]}},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},n="change:style",i=o.get("UndoManager");i&&i.add(t);var r=o.handleUpdates.bind(o);o.stopListening(t,n,r),o.listenTo(t,n,r),!e.avoidStore&&r("","",e)},load:function(e){var n=e||"";!n&&s.stm&&(n=s.em.getCacheLoad());var i=n.styles||"";if(n.styles)try{i=JSON.parse(n.styles)}catch(t){}else n.css&&(i=s.em.get("Parser").parseCss(n.css));return(0,r.isArray)(i)?i.length&&t.reset(i):i&&t.reset(i),i},store:function(e){if(s.stm){var n={},i=this.storageKey();return i.indexOf("css")>=0&&(n.css=s.em.getCss()),i.indexOf("styles")>=0&&(n.styles=JSON.stringify(t)),e||s.stm.store(n),n}},add:function(e,n,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=n||"",c=r||"",u=i({},o),h=this.get(e,a,c,u);return h&&h.config&&!h.config.atRuleType?h:(u.state=a,u.mediaText=c,u.selectors="",(h=new l(u,s)).get("selectors").add(e),t.add(h),h)},get:function(e,n,i,r){var o=null;return t.each(function(t){o||t.compare(e,n,i,r)&&(o=t)}),o},getAll:function(){return t},clear:function(){return this.getAll().reset(),this},addCollection:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=t instanceof Array?t:[t],o=0,a=r.length;o1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.state||"",r=n.mediaText||o.getCurrentMedia(),s=o.get("SelectorManager").add({name:t,type:d.TYPE_ID}),a=this.add(s,i,r);return a.setStyle(e,n),a},getIdRule:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.state||"",i=e.mediaText||o.getCurrentMedia(),r=o.get("SelectorManager").get(t,d.TYPE_ID);return r&&this.get(r,n,i)},setClassRule:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.state||"",r=n.mediaText||o.getCurrentMedia(),s=o.get("SelectorManager").add({name:t,type:d.TYPE_CLASS}),a=this.add(s,i,r);return a.setStyle(e,n),a},getClassRule:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.state||"",i=e.mediaText||o.getCurrentMedia(),r=o.get("SelectorManager").get(t,d.TYPE_CLASS);return r&&this.get(r,n,i)},render:function(){return e.render().el}}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));n(64),n(65),n(63);t.exports=i.default.View.extend({events:{submit:"handleSubmit"},template:function(t){var e=t.pfx,n=t.ppfx;return'\n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n '},initialize:function(t){this.options=t,this.config=t.config,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"";var e=this.collection;this.listenTo(e,"reset",this.renderAssets),this.listenTo(e,"add",this.addToAsset),this.listenTo(e,"remove",this.removedAsset),this.listenTo(e,"deselectAll",this.deselectAll)},handleSubmit:function(t){t.preventDefault();var e=this.getAddInput(),n=e.value.trim(),i=this.config.handleAdd;n&&(e.value="",this.getAssetsEl().scrollTop=0,i?i.bind(this)(n):this.options.globalCollection.add(n,{at:0}))},getAssetsEl:function(){return this.el.querySelector("."+this.pfx+"assets")},getAddInput:function(){return this.inputUrl&&this.inputUrl.value||(this.inputUrl=this.el.querySelector("."+this.pfx+"add-asset input")),this.inputUrl},removedAsset:function(t){this.collection.length||this.toggleNoAssets()},addToAsset:function(t){1==this.collection.length&&this.toggleNoAssets(1),this.addAsset(t)},addAsset:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=this.collection,i=this.config,r=new t.typeView({model:t,collection:n,config:i}).render().el;if(e)e.appendChild(r);else{var o=this.getAssetsEl();o&&o.insertBefore(r,o.firstChild)}return r},toggleNoAssets:function(t){var e=this.$el.find("."+this.pfx+"assets");if(t)e.empty();else{var n=this.config.noAssets;n&&e.append(n)}},deselectAll:function(){var t=this.pfx;this.$el.find("."+t+"highlight").removeClass(t+"highlight")},renderAssets:function(){var t=this,e=document.createDocumentFragment(),n=this.$el.find("."+this.pfx+"assets");n.empty(),this.toggleNoAssets(this.collection.length),this.collection.each(function(n){return t.addAsset(n,e)}),n.append(e)},render:function(){var t=this.options.fu.render().el;return this.$el.empty(),this.$el.append(t).append(this.template(this)),this.el.className=this.ppfx+"asset-manager",this.renderAssets(),this.rendered=1,this}})},function(t,e,n){"use strict";t.exports=n(0).Model.extend({idAttribute:"src",defaults:{type:"",src:""},getFilename:function(){return this.get("src").split("/").pop()},getExtension:function(){return this.getFilename().split(".").pop()}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{};return void 0===e.at&&(e.at=0),s.add(t,e)},get:function(t){return s.where({src:t})[0]},getAll:function(){return s},getAllVisible:function(){return a.collection},remove:function(t){var e=this.get(t);return this.getAll().remove(e),this},store:function(e){var n={},i=JSON.stringify(this.getAll().toJSON());return n[this.storageKey]=i,!e&&t.stm&&t.stm.store(n),n},load:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.storageKey,n=t[e]||[];if("string"==typeof n)try{n=JSON.parse(t[e])}catch(t){}return n&&n.length&&this.getAll().reset(n),n},getContainer:function(){return a.el},getAssetsEl:function(){return a.el.querySelector("[data-el=assets]")},render:function(t){var e=t||this.getAll().models;return a.rendered||a.render(),a.collection.reset(e),this.getContainer()},addType:function(t,e){this.getAll().addType(t,e)},getType:function(t){return this.getAll().getType(t)},getTypes:function(){return this.getAll().getTypes()},AssetsView:function(){return a},FileUploader:function(){return l},onLoad:function(){this.getAll().reset(t.assets)},postRender:function(e){t.dropzone&&l.initDropzone(e)},setTarget:function(t){a.collection.target=t},onSelect:function(t){a.collection.onSelect=t},onClick:function(e){t.onClick=e},onDblClick:function(e){t.onDblClick=e}}}},function(t,e,n){"use strict";var i=o(n(1)),r=o(n(0));function o(t){return t&&t.__esModule?t:{default:t}}var s=n(16);t.exports=r.default.View.extend({template:i.default.template('\n
    \n \n <%= label %>\n
    '),events:{"click [data-sector-title]":"toggle"},initialize:function(t){this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.target=t.target||{},this.propTarget=t.propTarget||{},this.caretR="fa-caret-right",this.caretD="fa-caret-down";var e=this.model;this.listenTo(e,"change:open",this.updateOpen),this.listenTo(e,"updateVisibility",this.updateVisibility),this.listenTo(e,"destroy remove",this.remove)},updateVisibility:function(){var t;this.model.get("properties").each(function(e){e.get("visible")&&(t=1)}),this.el.style.display=t?"block":"none"},updateOpen:function(){this.model.get("open")?this.show():this.hide()},show:function(){this.$el.addClass(this.pfx+"open"),this.getPropertiesEl().style.display="",this.$caret.removeClass(this.caretR).addClass(this.caretD)},hide:function(){this.$el.removeClass(this.pfx+"open"),this.getPropertiesEl().style.display="none",this.$caret.removeClass(this.caretD).addClass(this.caretR)},getPropertiesEl:function(){return this.$el.find("."+this.pfx+"properties").get(0)},toggle:function(t){var e=this.model.get("open")?0:1;this.model.set("open",e)},render:function(){return this.$el.html(this.template({pfx:this.pfx,label:this.model.get("name")})),this.$caret=this.$el.find("#"+this.pfx+"caret"),this.renderProperties(),this.$el.attr("class",this.pfx+"sector no-select"),this.updateOpen(),this},renderProperties:function(){var t=this.model.get("properties");if(t){var e=new s({collection:t,target:this.target,propTarget:this.propTarget,config:this.config});this.$el.append(e.render().el)}}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},e=t.config||{};this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.target=t.target||{},this.config=e;var n={};(0,o.extend)(n,r.default.Events);var s=document.body,a=document.createElement("el-"+(new Date).getTime());s.appendChild(a),n.computedDefault=i({},window.getComputedStyle(a)),s.removeChild(a),this.propTarget=n;var l=this.collection;this.listenTo(l,"add",this.addTo),this.listenTo(l,"reset",this.render),this.listenTo(this.target,"component:toggled component:update:classes component:update:state change:device",this.targetUpdated)},addTo:function(t){this.addToCollection(t)},targetUpdated:function(){var t=this.target,e=this.propTarget,n=t.getSelected();if(n){var i=t.get("Config").devicePreviewMode?"":n.get("state"),r=n.getEl();if(e.helper=null,r){var o=i?":"+i:null;e.computed=window.getComputedStyle(r,o)}n=t.get("StyleManager").getModelToStyle(n),i&&function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.get("CssComposer"),r=i.getAll(),o=i.getClassRule("hc-state");o?(r.remove(o),r.add(o)):o=i.setClassRule("hc-state"),o.set("important",1),o.setStyle(n),e.helper=o}(n.getStyle()),e.model=n,e.trigger("update")}},addToCollection:function(t,e){var n=e||null,i=new s({model:t,id:this.pfx+t.get("name").replace(" ","_").toLowerCase(),name:t.get("name"),properties:t.get("properties"),target:this.target,propTarget:this.propTarget,config:this.config}).render().el;return n?n.appendChild(i):this.$el.append(i),i},render:function(){var t=this,e=document.createDocumentFragment(),n=this.$el,i=this.pfx,r=this.ppfx;return n.empty(),this.collection.each(function(n){return t.addToCollection(n,e)}),n.append(e),n.addClass(i+"sectors "+r+"one-bg "+r+"two-color"),this}})},function(t,e,n){"use strict";n(0);t.exports=function(){return{build:function(t){var e=[];"string"==typeof t&&(t=[t]);for(var n=0,i=t.length;n\n \n
    \n '},getSliderEl:function(){return this.slider||(this.slider=this.el.querySelector("input[type=range]")),this.slider},inputValueChanged:function(){var t=this.model,e=t.get("step");this.getInputEl().value=this.getSliderEl().value;var n=this.getInputValue()-e;t.set("value",n,{avoidStore:1}).set("value",n+e),this.elementUpdated()},inputValueChangedSoft:function(){this.getInputEl().value=this.getSliderEl().value,this.model.set("value",this.getInputValue(),{avoidStore:1}),this.elementUpdated()},setValue:function(t){this.getSliderEl().value=t,this.inputInst.setValue(t,{silent:1})},onRender:function(){r.prototype.onRender.apply(this,arguments),this.model.get("showInput")||(this.inputInst.el.style.display="none")}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e\n \n \n
    '+("Layer "+t.get("index"))+'
    \n
    \n \t
    \n
    \n
    \n ⨯\n
    \n
    \n
    \n '},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.model;this.stackModel=t.stackModel||{},this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.sorter=t.sorter||null,this.propsConfig=t.propsConfig||{},this.customPreview=t.onPreview,this.listenTo(e,"destroy remove",this.remove),this.listenTo(e,"change:active",this.updateVisibility),this.listenTo(e.get("properties"),"change",this.updatePreview),e.get("preview")||this.$el.addClass(this.pfx+"no-preview"),e.view=this,e.set({droppable:0,draggable:1}),this.$el.data("model",e)},initSorter:function(t){this.sorter&&this.sorter.startSort(this.el)},remove:function(t){t&&t.stopPropagation&&t.stopPropagation();var e=this.model,n=e.collection,r=this.stackModel;i.default.View.prototype.remove.apply(this,arguments),n.contains(e)&&n.remove(e),r&&r.set&&(r.set({stackIndex:null},{silent:!0}),r.trigger("updateValue"))},onPreview:function(t){var e=t.split(" "),n=[];return this.model.get("properties").each(function(t,i){var r=e[i]||"";if(r&&"integer"==t.get("type")){var o=parseInt(r,10),s=r.replace(o,"");r=(o=(o=(o=isNaN(o)?0:o)>3?3:o)<-3?-3:o)+s}n.push(r)}),n.join(" ")},updatePreview:function(){var t=this.stackModel,e=this.customPreview,n=this.getPreviewEl(),i=this.model.getFullValue(),r=e?e(i):this.onPreview(i);r&&t&&n&&(n.style[t.get("property")]=r)},getPropertiesWrapper:function(){return this.propsWrapEl||(this.propsWrapEl=this.el.querySelector("[data-properties]")),this.propsWrapEl},getPreviewEl:function(){return this.previewEl||(this.previewEl=this.el.querySelector("[data-preview]")),this.previewEl},active:function(){var t=this.model,e=t.collection;e.active(e.indexOf(t))},updateVisibility:function(){var t=this.pfx,e=this.getPropertiesWrapper(),n=this.model.get("active");e.style.display=n?"":"none",this.$el[n?"addClass":"removeClass"](t+"active")},render:function(){var t=n(16),e=this.propsConfig,i=this.pfx+"layer",r=this.model,o=this.el,s=new t({collection:r.get("properties"),config:this.config,target:e.target,customValue:e.customValue,propTarget:e.propTarget,onChange:e.onChange}).render().el;return o.innerHTML=this.template(r),o.className=i,this.getPropertiesWrapper().appendChild(s),this.updateVisibility(),this.updatePreview(),this}})},function(t,e,n){"use strict";var i=n(0),r=n(167);t.exports=i.View.extend({initialize:function(t){this.config=t.config||{},this.stackModel=t.stackModel,this.preview=t.preview,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.propsConfig=t.propsConfig;var e=this.pfx,n=this.ppfx,i=this.collection;this.className=e+"layers "+n+"field",this.listenTo(i,"add",this.addTo),this.listenTo(i,"deselectAll",this.deselectAll),this.listenTo(i,"reset",this.render);var r=this.config.em||"",o=r?r.get("Utils"):"";this.sorter=o?new o.Sorter({container:this.el,ignoreViewChildren:1,containerSel:"."+e+"layers",itemSel:"."+e+"layer",pfx:this.config.pStylePrefix}):"",i.view=this,this.$el.data("model",i),this.$el.data("collection",i)},addTo:function(t){var e=this.collection.indexOf(t);this.addToCollection(t,null,e)},addToCollection:function(t,e,n){var i=e||null,o=this.stackModel,s=this.config,a=this.sorter,l=this.propsConfig;void 0!==this.preview&&t.set("preview",this.preview);var c=new r({model:t,config:s,sorter:a,stackModel:o,propsConfig:l}).render().el;if(i)i.appendChild(c);else if(void 0!==n){var u="before";this.$el.children().length==n&&(n--,u="after"),n<0?this.$el.append(c):this.$el.children().eq(n)[u](c)}else this.$el.append(c);return c},deselectAll:function(){this.$el.find("."+this.pfx+"layer").removeClass(this.pfx+"active")},render:function(){var t=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(e){this.addToCollection(e,t)},this),this.$el.append(t),this.$el.attr("class",this.className),this.sorter&&(this.sorter.plh=null),this}})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e.default=function(t,e){var n={beforeShow:h,move:h,change:h,show:h,hide:h,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",togglePaletteMoreText:"more",togglePaletteLessText:"less",clearText:"Clear Color Selection",noColorSelectedText:"No Color Selected",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,offset:null},r=[],o=!!/msie/i.exec(window.navigator.userAgent),s=function(){function t(t,e){return!!~(""+t).indexOf(e)}var e=document.createElement("div").style;return e.cssText="background-color:rgba(0,0,0,.5)",t(e.backgroundColor,"rgba")||t(e.backgroundColor,"hsla")}(),a=["
    ","
    ","
    ","
    "].join(""),l=function(){var t="";if(o)for(var e=1;e<=6;e++)t+="
    ";return["
    ","
    ","
    ","
    ","","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ",t,"
    ","
    ","
    ","
    ","
    ","","
    ","
    ","
    ","","","
    ","
    ","
    "].join("")}();function c(e,n,i,r){for(var o=[],a=0;a')}else{o.push(t("
    ").append(t('').attr("title",r.noColorSelectedText)).html())}}return"
    "+o.join("")+"
    "}function u(i,u){var h=function(e,i){var r=t.extend({},n,e);return r.callbacks={move:f(r.move,i),change:f(r.change,i),show:f(r.show,i),hide:f(r.hide,i),beforeShow:f(r.beforeShow,i)},r}(u,i),v=h.flat,m=h.showSelectionPalette,y=h.localStorageKey,b=h.theme,x=h.callbacks,w=function(t,e,n){var i;return function(){var r=this,o=arguments;n&&clearTimeout(i),!n&&i||(i=setTimeout(function(){i=null,t.apply(r,o)},e))}}(Vt,10),C=!1,k=!1,T=0,E=0,M=0,A=0,O=0,P=0,_=0,L=0,N=0,D=0,I=1,F=[],R=[],j={},z=h.selectionPalette.slice(0),V=h.maxSelectionSize,H="sp-dragging",$=null,B=i.ownerDocument,W=(B.body,t(i)),U=!1,q=t(l,B).addClass(b),K=q.find(".sp-picker-container"),Y=q.find(".sp-color"),G=q.find(".sp-dragger"),X=q.find(".sp-hue"),J=q.find(".sp-slider"),Z=q.find(".sp-alpha-inner"),Q=q.find(".sp-alpha"),tt=q.find(".sp-alpha-handle"),et=q.find(".sp-input"),nt=q.find(".sp-palette"),it=q.find(".sp-initial"),rt=q.find(".sp-cancel"),ot=q.find(".sp-clear"),st=q.find(".sp-choose"),at=q.find(".sp-palette-toggle"),lt=W.is("input"),ct=lt&&"color"===W.attr("type")&&g(),ut=lt&&!v,ht=ut?t(a).addClass(b).addClass(h.className).addClass(h.replacerClassName):t([]),dt=ut?ht:W,ft=ht.find(".sp-preview-inner"),pt=h.color||lt&&W.val(),gt=!1,vt=h.preferredFormat,mt=!h.showButtons||h.clickoutFiresChange,yt=!pt,bt=h.allowEmpty&&!ct;function xt(){if(h.showPaletteOnly&&(h.showPalette=!0),at.text(h.showPaletteOnly?h.togglePaletteMoreText:h.togglePaletteLessText),h.palette){F=h.palette.slice(0),R=t.isArray(F[0])?F:[F],j={};for(var e=0;e1&&(delete window.localStorage[y],t.each(e,function(t,e){Ct(e)}))}catch(t){}try{z=window.localStorage[y].split(";")}catch(t){}}}function Ct(e){if(m){var n=S(e).toRgbString();if(!j[n]&&-1===t.inArray(n,z))for(z.push(n);z.length>V;)z.shift();if(y&&window.localStorage)try{window.localStorage[y]=z.join(";")}catch(t){}}}function kt(){var e=It(),n=t.map(R,function(t,n){return c(t,e,"sp-palette-row sp-palette-row-"+n,h)});wt(),z&&n.push(c(function(){var t=[];if(h.showPalette)for(var e=0;ed&&d>i?Math.abs(p.left+i-d):0),p.top-=Math.min(p.top,p.top+r>f&&f>r?Math.abs(r+o-0):0),p}(q,dt))),jt(),h.showPalette&&kt(),W.trigger("reflow.spectrum"))}function Ht(){Lt(),U=!0,W.attr("disabled",!0),dt.addClass("sp-disabled")}!function(){if(o&&q.find("*:not(input)").attr("unselectable","on"),xt(),ut&&W.after(ht).hide(),bt||ot.hide(),v)W.after(q).hide();else{var e="parent"===h.appendTo?W.parent():t(h.appendTo);1!==e.length&&(e=t("body")),e.append(q)}function n(e){return e.data&&e.data.ignore?(Dt(t(e.target).closest(".sp-thumb-el").data("color")),Ft()):(Dt(t(e.target).closest(".sp-thumb-el").data("color")),Ft(),zt(!0),h.hideAfterPaletteSelect&&Lt()),!1}wt(),dt.bind("click.spectrum touchstart.spectrum",function(e){U||At(),e.stopPropagation(),t(e.target).is("input")||e.preventDefault()}),(W.is(":disabled")||!0===h.disabled)&&Ht(),q.click(d),et.change(Mt),et.bind("paste",function(){setTimeout(Mt,1)}),et.keydown(function(t){13==t.keyCode&&Mt()}),rt.text(h.cancelText),rt.bind("click.spectrum",function(t){t.stopPropagation(),t.preventDefault(),Nt(),Lt()}),ot.attr("title",h.clearText),ot.bind("click.spectrum",function(t){t.stopPropagation(),t.preventDefault(),yt=!0,Ft(),v&&zt(!0)}),st.text(h.chooseText),st.bind("click.spectrum",function(t){t.stopPropagation(),t.preventDefault(),o&&et.is(":focus")&&et.trigger("change"),et.hasClass("sp-validation-error")||(zt(!0),Lt())}),at.text(h.showPaletteOnly?h.togglePaletteMoreText:h.togglePaletteLessText),at.bind("click.spectrum",function(t){t.stopPropagation(),t.preventDefault(),h.showPaletteOnly=!h.showPaletteOnly,h.showPaletteOnly||v||q.css("left","-="+(K.outerWidth(!0)+5)),xt()}),p(Q,function(t,e,n){I=t/O,yt=!1,n.shiftKey&&(I=Math.round(10*I)/10),Ft()},Tt,Et),p(X,function(t,e){L=parseFloat(e/A),yt=!1,h.showAlpha||(I=1),Ft()},Tt,Et),p(Y,function(t,e,n){if(n.shiftKey){if(!$){var i=N*T,r=E-D*E,o=Math.abs(t-i)>Math.abs(e-r);$=o?"x":"y"}}else $=null;var s=!$||"y"===$;(!$||"x"===$)&&(N=parseFloat(t/T)),s&&(D=parseFloat((E-e)/E)),yt=!1,h.showAlpha||(I=1),Ft()},Tt,Et),pt?(Dt(pt),Rt(),vt=h.preferredFormat||S(pt).format,Ct(pt)):Rt(),v&&Ot();var i=o?"mousedown.spectrum":"click.spectrum touchstart.spectrum";nt.delegate(".sp-thumb-el",i,n),it.delegate(".sp-thumb-el:nth-child(1)",i,{ignore:!0},n)}();var $t={show:Ot,hide:Lt,toggle:At,reflow:Vt,option:function(n,i){return n===e?t.extend({},h):i===e?h[n]:(h[n]=i,"preferredFormat"===n&&(vt=h.preferredFormat),void xt())},enable:function(){U=!1,W.attr("disabled",!1),dt.removeClass("sp-disabled")},disable:Ht,offset:function(t){h.offset=t,Vt()},set:function(t){Dt(t),zt()},get:It,destroy:function(){W.show(),dt.unbind("click.spectrum touchstart.spectrum"),q.remove(),ht.remove(),r[$t.id]=null},container:q};return $t.id=r.push($t)-1,$t}function h(){}function d(t){t.stopPropagation()}function f(t,e){var n=Array.prototype.slice,i=n.call(arguments,2);return function(){return t.apply(e,i.concat(n.call(arguments)))}}function p(e,n,i,r){n=n||function(){},i=i||function(){},r=r||function(){};var s=document,a=!1,l={},c=0,u=0,h="ontouchstart"in window,d={};function f(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}function p(t){if(a){if(o&&s.documentMode<9&&!t.button)return g();var i=t.originalEvent&&t.originalEvent.touches&&t.originalEvent.touches[0],r=i&&i.pageX||t.pageX,d=i&&i.pageY||t.pageY,p=Math.max(0,Math.min(r-l.left,u)),v=Math.max(0,Math.min(d-l.top,c));h&&f(t),n.apply(e,[p,v,t])}}function g(){a&&(t(s).unbind(d),t(s.body).removeClass("sp-dragging"),setTimeout(function(){r.apply(e,arguments)},0)),a=!1}d.selectstart=f,d.dragstart=f,d["touchmove mousemove"]=p,d["touchend mouseup"]=g,t(e).bind("touchstart mousedown",function(n){(n.which?3==n.which:2==n.button)||a||!1!==i.apply(e,arguments)&&(a=!0,c=t(e).height(),u=t(e).width(),l=t(e).offset(),t(s).bind(d),t(s.body).addClass("sp-dragging"),p(n),f(n))})}function g(){return t.fn.spectrum.inputTypeColorSupport()}t.fn.spectrum=function(e,n){if("string"==typeof e){var i=this,o=Array.prototype.slice.call(arguments,1);return this.each(function(){var n=r[t(this).data("spectrum.id")];if(n){var s=n[e];if(!s)throw new Error("Spectrum: no such method: '"+e+"'");"get"==e?i=n.get():"container"==e?i=n.container:"option"==e?i=n.option.apply(n,o):"destroy"==e?(n.destroy(),t(this).removeData("spectrum.id")):s.apply(n,o)}}),i}return this.spectrum("destroy").each(function(){var n=u(this,t.extend({},e,t(this).data()));t(this).data("spectrum.id",n.id)})},t.fn.spectrum.load=!0,t.fn.spectrum.loadOpts={},t.fn.spectrum.draggable=p,t.fn.spectrum.defaults=n,t.fn.spectrum.inputTypeColorSupport=function e(){if(void 0===e._cachedResult){var n=t("")[0];e._cachedResult="color"===n.type&&""!==n.value}return e._cachedResult},t.spectrum={},t.spectrum.localization={},t.spectrum.palettes={},t.fn.spectrum.processNativeColorInputs=function(){var e=t("input[type=color]");e.length&&!g()&&e.spectrum({preferredFormat:"hex6"})};var v=/^[\s,#]+/,m=/\s+$/,y=0,b=Math,x=b.round,w=b.min,C=b.max,k=b.random,S=function t(e,n){if(e=e||"",n=n||{},e instanceof t)return e;if(!(this instanceof t))return new t(e,n);var r=function(t){var e={r:0,g:0,b:0},n=1,r=!1,o=!1;"string"==typeof t&&(t=function(t){t=t.replace(v,"").replace(m,"").toLowerCase();var e,n=!1;if($[t])t=$[t],n=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};if(e=X.rgb.exec(t))return{r:e[1],g:e[2],b:e[3]};if(e=X.rgba.exec(t))return{r:e[1],g:e[2],b:e[3],a:e[4]};if(e=X.hsl.exec(t))return{h:e[1],s:e[2],l:e[3]};if(e=X.hsla.exec(t))return{h:e[1],s:e[2],l:e[3],a:e[4]};if(e=X.hsv.exec(t))return{h:e[1],s:e[2],v:e[3]};if(e=X.hsva.exec(t))return{h:e[1],s:e[2],v:e[3],a:e[4]};if(e=X.hex8.exec(t))return{a:function(t){return K(t)/255}(e[1]),r:K(e[2]),g:K(e[3]),b:K(e[4]),format:n?"name":"hex8"};if(e=X.hex6.exec(t))return{r:K(e[1]),g:K(e[2]),b:K(e[3]),format:n?"name":"hex"};if(e=X.hex3.exec(t))return{r:K(e[1]+""+e[1]),g:K(e[2]+""+e[2]),b:K(e[3]+""+e[3]),format:n?"name":"hex"};return!1}(t));"object"==(void 0===t?"undefined":i(t))&&(t.hasOwnProperty("r")&&t.hasOwnProperty("g")&&t.hasOwnProperty("b")?(e=function(t,e,n){return{r:255*U(t,255),g:255*U(e,255),b:255*U(n,255)}}(t.r,t.g,t.b),r=!0,o="%"===String(t.r).substr(-1)?"prgb":"rgb"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("v")?(t.s=G(t.s),t.v=G(t.v),e=function(t,e,n){t=6*U(t,360),e=U(e,100),n=U(n,100);var i=b.floor(t),r=t-i,o=n*(1-e),s=n*(1-r*e),a=n*(1-(1-r)*e),l=i%6;return{r:255*[n,s,o,o,a,n][l],g:255*[a,n,n,s,o,o][l],b:255*[o,o,a,n,n,s][l]}}(t.h,t.s,t.v),r=!0,o="hsv"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("l")&&(t.s=G(t.s),t.l=G(t.l),e=function(t,e,n){var i,r,o;function s(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}if(t=U(t,360),e=U(e,100),n=U(n,100),0===e)i=r=o=n;else{var a=n<.5?n*(1+e):n+e-n*e,l=2*n-a;i=s(l,a,t+1/3),r=s(l,a,t),o=s(l,a,t-1/3)}return{r:255*i,g:255*r,b:255*o}}(t.h,t.s,t.l),r=!0,o="hsl"),t.hasOwnProperty("a")&&(n=t.a));return n=W(n),{ok:r,format:t.format||o,r:w(255,C(e.r,0)),g:w(255,C(e.g,0)),b:w(255,C(e.b,0)),a:n}}(e);this._originalInput=e,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=x(100*this._a)/100,this._format=n.format||r.format,this._gradientType=n.gradientType,this._r<1&&(this._r=x(this._r)),this._g<1&&(this._g=x(this._g)),this._b<1&&(this._b=x(this._b)),this._ok=r.ok,this._tc_id=y++};function T(t,e,n){t=U(t,255),e=U(e,255),n=U(n,255);var i,r,o=C(t,e,n),s=w(t,e,n),a=(o+s)/2;if(o==s)i=r=0;else{var l=o-s;switch(r=a>.5?l/(2-o-s):l/(o+s),o){case t:i=(e-n)/l+(e>1)+720)%360;--e;)i.h=(i.h+r)%360,o.push(S(i));return o}function H(t,e){e=e||6;for(var n=S(t).toHsv(),i=n.h,r=n.s,o=n.v,s=[],a=1/e;e--;)s.push(S({h:i,s:r,v:o})),o=(o+a)%1;return s}S.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},setAlpha:function(t){return this._a=W(t),this._roundA=x(100*this._a)/100,this},toHsv:function(){var t=E(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=E(this._r,this._g,this._b),e=x(360*t.h),n=x(100*t.s),i=x(100*t.v);return 1==this._a?"hsv("+e+", "+n+"%, "+i+"%)":"hsva("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHsl:function(){var t=T(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=T(this._r,this._g,this._b),e=x(360*t.h),n=x(100*t.s),i=x(100*t.l);return 1==this._a?"hsl("+e+", "+n+"%, "+i+"%)":"hsla("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHex:function(t){return M(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(){return A(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:x(this._r),g:x(this._g),b:x(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+x(this._r)+", "+x(this._g)+", "+x(this._b)+")":"rgba("+x(this._r)+", "+x(this._g)+", "+x(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:x(100*U(this._r,255))+"%",g:x(100*U(this._g,255))+"%",b:x(100*U(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+x(100*U(this._r,255))+"%, "+x(100*U(this._g,255))+"%, "+x(100*U(this._b,255))+"%)":"rgba("+x(100*U(this._r,255))+"%, "+x(100*U(this._g,255))+"%, "+x(100*U(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(B[M(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+A(this._r,this._g,this._b,this._a),n=e,i=this._gradientType?"GradientType = 1, ":"";t&&(n=S(t).toHex8String());return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+e+",endColorstr="+n+")"},toString:function(t){var e=!!t;t=t||this._format;var n=!1,i=this._a<1&&this._a>=0;return e||!i||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"name"!==t?("rgb"===t&&(n=this.toRgbString()),"prgb"===t&&(n=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(n=this.toHexString()),"hex3"===t&&(n=this.toHexString(!0)),"hex8"===t&&(n=this.toHex8String()),"name"===t&&(n=this.toName()),"hsl"===t&&(n=this.toHslString()),"hsv"===t&&(n=this.toHsvString()),n||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},_applyModification:function(t,e){var n=t.apply(null,[this].concat([].slice.call(e)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(L,arguments)},brighten:function(){return this._applyModification(N,arguments)},darken:function(){return this._applyModification(D,arguments)},desaturate:function(){return this._applyModification(O,arguments)},saturate:function(){return this._applyModification(P,arguments)},greyscale:function(){return this._applyModification(_,arguments)},spin:function(){return this._applyModification(I,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(V,arguments)},complement:function(){return this._applyCombination(F,arguments)},monochromatic:function(){return this._applyCombination(H,arguments)},splitcomplement:function(){return this._applyCombination(z,arguments)},triad:function(){return this._applyCombination(R,arguments)},tetrad:function(){return this._applyCombination(j,arguments)}},S.fromRatio=function(t,e){if("object"==(void 0===t?"undefined":i(t))){var n={};for(var r in t)t.hasOwnProperty(r)&&(n[r]="a"===r?t[r]:G(t[r]));t=n}return S(t,e)},S.equals=function(t,e){return!(!t||!e)&&S(t).toRgbString()==S(e).toRgbString()},S.random=function(){return S.fromRatio({r:k(),g:k(),b:k()})},S.mix=function(t,e,n){n=0===n?0:n||50;var i,r=S(t).toRgb(),o=S(e).toRgb(),s=n/100,a=2*s-1,l=o.a-r.a,c=1-(i=((i=a*l==-1?a:(a+l)/(1+a*l))+1)/2),u={r:o.r*i+r.r*c,g:o.g*i+r.g*c,b:o.b*i+r.b*c,a:o.a*s+r.a*(1-s)};return S(u)},S.readability=function(t,e){var n=S(t),i=S(e),r=n.toRgb(),o=i.toRgb(),s=n.getBrightness(),a=i.getBrightness(),l=Math.max(r.r,o.r)-Math.min(r.r,o.r)+Math.max(r.g,o.g)-Math.min(r.g,o.g)+Math.max(r.b,o.b)-Math.min(r.b,o.b);return{brightness:Math.abs(s-a),color:l}},S.isReadable=function(t,e){var n=S.readability(t,e);return n.brightness>125&&n.color>500},S.mostReadable=function(t,e){for(var n=null,i=0,r=!1,o=0;o125&&s.color>500,l=s.brightness/125*3+s.color/500;(a&&!r||a&&r&&l>i||!a&&!r&&l>i)&&(r=a,i=l,n=S(e[o]))}return n};var $=S.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},B=S.hexNames=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[t[n]]=n);return e}($);function W(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function U(t,e){(function(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)})(t)&&(t="100%");var n=function(t){return"string"==typeof t&&-1!=t.indexOf("%")}(t);return t=w(e,C(0,parseFloat(t))),n&&(t=parseInt(t*e,10)/100),b.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function q(t){return w(1,C(0,t))}function K(t){return parseInt(t,16)}function Y(t){return 1==t.length?"0"+t:""+t}function G(t){return t<=1&&(t=100*t+"%"),t}var X=function(){var t="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",e="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?",n="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?";return{rgb:new RegExp("rgb"+e),rgba:new RegExp("rgba"+n),hsl:new RegExp("hsl"+e),hsla:new RegExp("hsla"+n),hsv:new RegExp("hsv"+e),hsva:new RegExp("hsva"+n),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();window.tinycolor=S,t(function(){t.fn.spectrum.load&&t.fn.spectrum.processNativeColorInputs()})}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.Model.extend({defaults:{index:"",value:"",values:{},active:!1,preview:!1,properties:[]},initialize:function(){var t=n(18),e=this.get("properties"),i=this.get("value");if(this.set("properties",e instanceof t?e:new t(e)),!i){var r="",o=this.get("values");for(var s in o)r+=" "+o[s];this.set("value",r.trim())}},getPropertyValue:function(t){var e="";return this.get("properties").each(function(n){n.get("property")==t&&(e=n.getFullValue())}),e},getFullValue:function(){var t=[];return this.get("properties").each(function(e){return t.push(e.getFullValue())}),t.join(" ")}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;eB",attributes:{title:"Bold"},result:function(t){return t.exec("bold")}},italic:{name:"italic",icon:"I",attributes:{title:"Italic"},result:function(t){return t.exec("italic")}},underline:{name:"underline",icon:"U",attributes:{title:"Underline"},result:function(t){return t.exec("underline")}},strikethrough:{name:"strikethrough",icon:"S",attributes:{title:"Strike-through"},result:function(t){return t.exec("strikeThrough")}},link:{icon:'',name:"link",attributes:{style:"font-size:1.4rem;padding:0 4px 2px;",title:"Link"},result:function(t){return t.insertHTML(''+t.selection()+"")}}},l=function(){function t(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var r=n.el;if(r[s])return r[s];r[s]=this,this.setEl(r),this.updateActiveActions=this.updateActiveActions.bind(this);var o=n.actions||[];o.forEach(function(t,e){"string"==typeof t?t=a[t]:a[t.name]&&(t=i({},a[t.name],t)),o[e]=t});var l=o.length?o:Object.keys(a).map(function(t){return a[t]});n.classes=i({actionbar:"actionbar",button:"action",active:"active"},n.classes);var c=n.classes,u=n.actionbar;if(this.actionbar=u,this.settings=n,this.classes=c,this.actions=l,!u){var h=n.actionbarContainer;(u=document.createElement("div")).className=c.actionbar,h.appendChild(u),this.actionbar=u,l.forEach(function(t){return e.addAction(t)})}return n.styleWithCSS&&this.exec("styleWithCSS"),this.syncActions(),this}return r(t,[{key:"setEl",value:function(t){this.el=t,this.doc=t.ownerDocument}},{key:"updateActiveActions",value:function(){var t=this;this.getActions().forEach(function(e){var n=e.btn,i=e.update,r=t.classes.active,o=e.name,s=t.doc;n.className=n.className.replace(r,"").trim(),s.queryCommandSupported(o)&&s.queryCommandState(o)&&(n.className+=" "+r),i&&i(t,e)})}},{key:"enable",value:function(){return this.enabled?this:(this.actionbarEl().style.display="",this.el.contentEditable=!0,(0,o.on)(this.el,"mouseup keyup",this.updateActiveActions),this.syncActions(),this.updateActiveActions(),this.el.focus(),this.enabled=1,this)}},{key:"disable",value:function(){return this.actionbarEl().style.display="none",this.el.contentEditable=!1,(0,o.off)(this.el,"mouseup keyup",this.updateActiveActions),this.enabled=0,this}},{key:"syncActions",value:function(){var t=this;this.getActions().forEach(function(e){var n=e.event||"click";e.btn["on"+n]=function(n){e.result(t,e),t.updateActiveActions()}})}},{key:"addAction",value:function(t){var e=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).sync,n=document.createElement("span"),i=t.icon,r=t.attributes||{};for(var o in n.className=this.classes.button,t.btn=n,r)n.setAttribute(o,r[o]);"string"==typeof i?n.innerHTML=i:n.appendChild(i),this.actionbarEl().appendChild(n),e&&(this.actions.push(t),this.syncActions())}},{key:"getActions",value:function(){return this.actions}},{key:"selection",value:function(){return this.doc.getSelection()}},{key:"exec",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.doc.execCommand(t,!1,e)}},{key:"actionbarEl",value:function(){return this.actionbar}},{key:"insertHTML",value:function(t){var e=this.doc,n=e.getSelection();if(n&&n.rangeCount){var i=e.createElement("div"),r=n.getRangeAt(0);r.deleteContents(),i.innerHTML=t,Array.prototype.slice.call(i.childNodes).forEach(function(t){r.insertNode(t),t}),n.removeAllRanges(),n.addRange(r),this.el.focus()}}}]),t}();e.default=l},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(177)),r=n(2);t.exports=function(){var t={},e=n(176),o=void 0,s=void 0,a=void 0,l=function(){var t=o.style;t.top="-100px",t.left="-100px",t.display="none"};return{customRte:null,name:"RichTextEditor",init:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};for(var i in t=n,e)i in t||(t[i]=e[i]);var s=t.pStylePrefix;return s&&(t.stylePrefix=s+t.stylePrefix),this.pfx=t.stylePrefix,t.actions||[],(o=document.createElement("div")).className=s+"rte-toolbar "+s+"one-bg",a=this.initRte(document.createElement("div")),(0,r.on)(o,"mousedown",function(t){return t.stopPropagation()}),this},postRender:function(t){var e=t.model.get("Canvas");o.style.pointerEvents="all",l(),e.getToolsEl().appendChild(o)},initRte:function(e){var n=this.pfx,r=o,s=this.actionbar,l=this.actions||t.actions,c={actionbar:n+"actionbar",button:n+"action",active:n+"active"},u=new i.default({el:e,classes:c,actions:l,actionbar:s,actionbarContainer:r});return a&&a.setEl(e),u.actionbar&&(this.actionbar=u.actionbar),u.actions&&(this.actions=u.actions),u},add:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.name=t,a.addAction(e,{sync:1})},get:function(t){var e=void 0;return a.getActions().forEach(function(n){n.name==t&&(e=n)}),e},getAll:function(){return a.getActions()},remove:function(t){var e=this.getAll(),n=this.get(t);if(n){var i=n.btn,r=e.indexOf(n);i.parentNode.removeChild(i),e.splice(r,1)}return n},getToolbarEl:function(){return o},udpatePosition:function(){var e=t.em.get("Canvas").getTargetToElementDim(o,s,{event:"rteToolbarPosUpdate"});if(e){t.adjustToolbar&&e.top<=e.canvasTop&&(e.top=e.elementTop+e.elementHeight);var n=o.style;n.top=e.top+"px",n.left=e.left+"px"}},enable:function(e,n){s=e.el;var i=t.em,r=e.getChildrenContainer(),a=this.customRte;if(o.style.display="",n=a?a.enable(r,n):this.initRte(r).enable(),i){setTimeout(this.udpatePosition.bind(this),0);var l="change:canvasOffset canvasScroll";i.off(l,this.udpatePosition,this),i.on(l,this.udpatePosition,this),i.trigger("rte:enable",e,n)}return n},disable:function(e,n){var i=t.em,r=this.customRte,o=e.getChildrenContainer();r?r.disable(o,n):n&&n.disable(),l(),i&&i.trigger("rte:disable",e,n)}}}},function(t,e,n){"use strict";var i=n(0),r=n(78);t.exports=i.View.extend({initialize:function(t){this.opt=t||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"";var e=this.collection;this.listenTo(e,"add",this.addTo),this.listenTo(e,"reset",this.render),this.listenTo(e,"remove",this.onRemove),this.className=this.pfx+"panels"},onRemove:function(t){var e=t.view;e&&e.remove()},addTo:function(t){this.addToCollection(t)},addToCollection:function(t,e){var n=e||null,i=this.config,o=t.get("el"),s=new r({el:o,model:t,config:i}),a=s.render().el,l=t.get("appendTo");if(o);else if(l){document.querySelector(l).appendChild(a)}else n?n.appendChild(a):this.$el.append(a);return s.initResize(),a},render:function(){var t=this,e=this.$el,n=document.createDocumentFragment();return e.empty(),this.collection.each(function(e){return t.addToCollection(e,n)}),e.append(n),e.attr("class",this.className),this}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e\n \t
    <%= label %>
    \n \t
    \n
    '),initialize:function(t){this.config=t.config||{},this.pfx=this.config.stylePrefix},render:function(){var t=this.model.toJSON();return t.pfx=this.pfx,this.$el.html(this.template(t)),this.$el.attr("class",this.pfx+"editor-c"),this.$el.find("#"+this.pfx+"code").append(this.model.get("input")),this}})},function(t,e,n){!function(t){t.extendMode("css",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(t,e){return/^[;{}]$/.test(e)}}),t.extendMode("javascript",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(t,e,n,i){return this.jsonMode?/^[\[,{]$/.test(e)||/^}/.test(n):(";"!=e||!i.lexical||")"!=i.lexical.type)&&/^[;{}]$/.test(e)&&!/^;/.test(n)}});var e=/^(a|abbr|acronym|area|base|bdo|big|br|button|caption|cite|code|col|colgroup|dd|del|dfn|em|frame|hr|iframe|img|input|ins|kbd|label|legend|link|map|object|optgroup|option|param|q|samp|script|select|small|span|strong|sub|sup|textarea|tt|var)$/;t.extendMode("xml",{commentStart:"\x3c!--",commentEnd:"--\x3e",newlineAfterToken:function(t,n,i,r){var o=!1;return"html"==this.configuration&&(o=!!r.context&&e.test(r.context.tagName)),!o&&("tag"==t&&/>$/.test(n)&&r.context||/^-1&&a>-1&&a>s&&(t=t.substr(0,s)+t.substring(s+o.commentStart.length,a)+t.substr(a+o.commentEnd.length)),r.replaceRange(t,n,i)}})}),t.defineExtension("autoIndentRange",function(t,e){var n=this;this.operation(function(){for(var i=t.line;i<=e.line;i++)n.indentLine(i,"smart")})}),t.defineExtension("autoFormatRange",function(e,n){var i=this,r=i.getMode(),o=i.getRange(e,n).split("\n"),s=t.copyState(r,i.getTokenAt(e).state),a=i.getOption("tabSize"),l="",c=0,u=0===e.ch;function h(){l+="\n",u=!0,++c}for(var d=0;d!?|~^@]/,f=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function p(t,e,n){return i=t,r=n,e}function g(t,e){var n=t.next();if('"'==n||"'"==n)return e.tokenize=function(t){return function(e,n){var i,r=!1;if(a&&"@"==e.peek()&&e.match(f))return n.tokenize=g,p("jsonld-keyword","meta");for(;null!=(i=e.next())&&(i!=t||r);)r=!r&&"\\"==i;return r||(n.tokenize=g),p("string","string")}}(n),e.tokenize(t,e);if("."==n&&t.match(/^\d+(?:[eE][+\-]?\d+)?/))return p("number","number");if("."==n&&t.match(".."))return p("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(n))return p(n);if("="==n&&t.eat(">"))return p("=>","operator");if("0"==n&&t.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i))return p("number","number");if(/\d/.test(n))return t.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/),p("number","number");if("/"==n)return t.eat("*")?(e.tokenize=v,v(t,e)):t.eat("/")?(t.skipToEnd(),p("comment","comment")):qt(t,e,1)?(function(t){for(var e,n=!1,i=!1;null!=(e=t.next());){if(!n){if("/"==e&&!i)return;"["==e?i=!0:i&&"]"==e&&(i=!1)}n=!n&&"\\"==e}}(t),t.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),p("regexp","string-2")):(t.eat("="),p("operator","operator",t.current()));if("`"==n)return e.tokenize=m,m(t,e);if("#"==n)return t.skipToEnd(),p("error","error");if(d.test(n))return">"==n&&e.lexical&&">"==e.lexical.type||(t.eat("=")?"!"!=n&&"="!=n||t.eat("="):/[<>*+\-]/.test(n)&&(t.eat(n),">"==n&&t.eat(n))),p("operator","operator",t.current());if(u.test(n)){t.eatWhile(u);var i=t.current();if("."!=e.lastType){if(h.propertyIsEnumerable(i)){var r=h[i];return p(r.type,r.style,i)}if("async"==i&&t.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/,!1))return p("async","keyword",i)}return p("variable","variable",i)}}function v(t,e){for(var n,i=!1;n=t.next();){if("/"==n&&i){e.tokenize=g;break}i="*"==n}return p("comment","comment")}function m(t,e){for(var n,i=!1;null!=(n=t.next());){if(!i&&("`"==n||"$"==n&&t.eat("{"))){e.tokenize=g;break}i=!i&&"\\"==n}return p("quasi","string-2",t.current())}var y="([{}])";function b(t,e){e.fatArrowAt&&(e.fatArrowAt=null);var n=t.string.indexOf("=>",t.start);if(!(n<0)){if(c){var i=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(t.string.slice(t.start,n));i&&(n=i.index)}for(var r=0,o=!1,s=n-1;s>=0;--s){var a=t.string.charAt(s),l=y.indexOf(a);if(l>=0&&l<3){if(!r){++s;break}if(0==--r){"("==a&&(o=!0);break}}else if(l>=3&&l<6)++r;else if(u.test(a))o=!0;else{if(/["'\/]/.test(a))return;if(o&&!r){++s;break}}}o&&!r&&(e.fatArrowAt=s)}}var x={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0};function w(t,e,n,i,r,o){this.indented=t,this.column=e,this.type=n,this.prev=r,this.info=o,null!=i&&(this.align=i)}function C(t,e){for(var n=t.localVars;n;n=n.next)if(n.name==e)return!0;for(var i=t.context;i;i=i.prev)for(var n=i.vars;n;n=n.next)if(n.name==e)return!0}var k={state:null,column:null,marked:null,cc:null};function S(){for(var t=arguments.length-1;t>=0;t--)k.cc.push(arguments[t])}function T(){return S.apply(null,arguments),!0}function E(t,e){for(var n=e;n;n=n.next)if(n.name==t)return!0;return!1}function M(t){var e=k.state;if(k.marked="def",e.context)if("var"==e.lexical.info&&e.context&&e.context.block){var i=function t(e,n){if(n){if(n.block){var i=t(e,n.prev);return i?i==n.prev?n:new O(i,n.vars,!0):null}return E(e,n.vars)?n:new O(n.prev,new P(e,n.vars),!1)}return null}(t,e.context);if(null!=i)return void(e.context=i)}else if(!E(t,e.localVars))return void(e.localVars=new P(t,e.localVars));n.globalVars&&!E(t,e.globalVars)&&(e.globalVars=new P(t,e.globalVars))}function A(t){return"public"==t||"private"==t||"protected"==t||"abstract"==t||"readonly"==t}function O(t,e,n){this.prev=t,this.vars=e,this.block=n}function P(t,e){this.name=t,this.next=e}var _=new P("this",new P("arguments",null));function L(){k.state.context=new O(k.state.context,k.state.localVars,!1),k.state.localVars=_}function N(){k.state.context=new O(k.state.context,k.state.localVars,!0),k.state.localVars=null}function D(){k.state.localVars=k.state.context.vars,k.state.context=k.state.context.prev}function I(t,e){var n=function(){var n=k.state,i=n.indented;if("stat"==n.lexical.type)i=n.lexical.indented;else for(var r=n.lexical;r&&")"==r.type&&r.align;r=r.prev)i=r.indented;n.lexical=new w(i,k.stream.column(),t,null,n.lexical,e)};return n.lex=!0,n}function F(){var t=k.state;t.lexical.prev&&(")"==t.lexical.type&&(t.indented=t.lexical.indented),t.lexical=t.lexical.prev)}function R(t){return function e(n){return n==t?T():";"==t||"}"==n||")"==n||"]"==n?S():T(e)}}function j(t,e){return"var"==t?T(I("vardef",e),yt,R(";"),F):"keyword a"==t?T(I("form"),$,j,F):"keyword b"==t?T(I("form"),j,F):"keyword d"==t?k.stream.match(/^\s*$/,!1)?T():T(I("stat"),W,R(";"),F):"debugger"==t?T(R(";")):"{"==t?T(I("}"),N,st,F,D):";"==t?T():"if"==t?("else"==k.state.lexical.info&&k.state.cc[k.state.cc.length-1]==F&&k.state.cc.pop()(),T(I("form"),$,j,F,kt)):"function"==t?T(Ot):"for"==t?T(I("form"),St,j,F):"class"==t||c&&"interface"==e?(k.marked="keyword",T(I("form"),Lt,F)):"variable"==t?c&&"declare"==e?(k.marked="keyword",T(j)):c&&("module"==e||"enum"==e||"type"==e)&&k.stream.match(/^\s*\w/,!1)?(k.marked="keyword","enum"==e?T(Wt):"type"==e?T(ut,R("operator"),ut,R(";")):T(I("form"),bt,R("{"),I("}"),st,F,F)):c&&"namespace"==e?(k.marked="keyword",T(I("form"),V,st,F)):c&&"abstract"==e?(k.marked="keyword",T(j)):T(I("stat"),Q):"switch"==t?T(I("form"),$,R("{"),I("}","switch"),N,st,F,F,D):"case"==t?T(V,R(":")):"default"==t?T(R(":")):"catch"==t?T(I("form"),L,z,j,F,D):"export"==t?T(I("stat"),Ft,F):"import"==t?T(I("stat"),jt,F):"async"==t?T(j):"@"==e?T(V,j):S(I("stat"),V,R(";"),F)}function z(t){if("("==t)return T(Pt,R(")"))}function V(t,e){return B(t,e,!1)}function H(t,e){return B(t,e,!0)}function $(t){return"("!=t?S():T(I(")"),V,R(")"),F)}function B(t,e,n){if(k.state.fatArrowAt==k.stream.start){var i=n?X:G;if("("==t)return T(L,I(")"),rt(Pt,")"),F,R("=>"),i,D);if("variable"==t)return S(L,bt,R("=>"),i,D)}var r=n?q:U;return x.hasOwnProperty(t)?T(r):"function"==t?T(Ot,r):"class"==t||c&&"interface"==e?(k.marked="keyword",T(I("form"),_t,F)):"keyword c"==t||"async"==t?T(n?H:V):"("==t?T(I(")"),W,R(")"),F,r):"operator"==t||"spread"==t?T(n?H:V):"["==t?T(I("]"),Bt,F,r):"{"==t?ot(et,"}",null,r):"quasi"==t?S(K,r):"new"==t?T(function(t){return function(e){return"."==e?T(t?Z:J):"variable"==e&&c?T(gt,t?q:U):S(t?H:V)}}(n)):"import"==t?T(V):T()}function W(t){return t.match(/[;\}\)\],]/)?S():S(V)}function U(t,e){return","==t?T(V):q(t,e,!1)}function q(t,e,n){var i=0==n?U:q,r=0==n?V:H;return"=>"==t?T(L,n?X:G,D):"operator"==t?/\+\+|--/.test(e)||c&&"!"==e?T(i):c&&"<"==e&&k.stream.match(/^([^>]|<.*?>)*>\s*\(/,!1)?T(I(">"),rt(ut,">"),F,i):"?"==e?T(V,R(":"),r):T(r):"quasi"==t?S(K,i):";"!=t?"("==t?ot(H,")","call",i):"."==t?T(tt,i):"["==t?T(I("]"),W,R("]"),F,i):c&&"as"==e?(k.marked="keyword",T(ut,i)):"regexp"==t?(k.state.lastType=k.marked="operator",k.stream.backUp(k.stream.pos-k.stream.start-1),T(r)):void 0:void 0}function K(t,e){return"quasi"!=t?S():"${"!=e.slice(e.length-2)?T(K):T(V,Y)}function Y(t){if("}"==t)return k.marked="string-2",k.state.tokenize=m,T(K)}function G(t){return b(k.stream,k.state),S("{"==t?j:V)}function X(t){return b(k.stream,k.state),S("{"==t?j:H)}function J(t,e){if("target"==e)return k.marked="keyword",T(U)}function Z(t,e){if("target"==e)return k.marked="keyword",T(q)}function Q(t){return":"==t?T(F,j):S(U,R(";"),F)}function tt(t){if("variable"==t)return k.marked="property",T()}function et(t,e){if("async"==t)return k.marked="property",T(et);if("variable"==t||"keyword"==k.style){return k.marked="property","get"==e||"set"==e?T(nt):(c&&k.state.fatArrowAt==k.stream.start&&(n=k.stream.match(/^\s*:\s*/,!1))&&(k.state.fatArrowAt=k.stream.pos+n[0].length),T(it));var n}else{if("number"==t||"string"==t)return k.marked=a?"property":k.style+" property",T(it);if("jsonld-keyword"==t)return T(it);if(c&&A(e))return k.marked="keyword",T(et);if("["==t)return T(V,at,R("]"),it);if("spread"==t)return T(H,it);if("*"==e)return k.marked="keyword",T(et);if(":"==t)return S(it)}}function nt(t){return"variable"!=t?S(it):(k.marked="property",T(Ot))}function it(t){return":"==t?T(H):"("==t?S(Ot):void 0}function rt(t,e,n){function i(r,o){if(n?n.indexOf(r)>-1:","==r){var s=k.state.lexical;return"call"==s.info&&(s.pos=(s.pos||0)+1),T(function(n,i){return n==e||i==e?S():S(t)},i)}return r==e||o==e?T():T(R(e))}return function(n,r){return n==e||r==e?T():S(t,i)}}function ot(t,e,n){for(var i=3;i"),ut):void 0}function ht(t){if("=>"==t)return T(ut)}function dt(t,e){return"variable"==t||"keyword"==k.style?(k.marked="property",T(dt)):"?"==e?T(dt):":"==t?T(ut):"["==t?T(V,at,R("]"),dt):void 0}function ft(t,e){return"variable"==t&&k.stream.match(/^\s*[?:]/,!1)||"?"==e?T(ft):":"==t?T(ut):S(ut)}function pt(t,e){return"<"==e?T(I(">"),rt(ut,">"),F,pt):"|"==e||"."==t||"&"==e?T(ut):"["==t?T(R("]"),pt):"extends"==e||"implements"==e?(k.marked="keyword",T(ut)):void 0}function gt(t,e){if("<"==e)return T(I(">"),rt(ut,">"),F,pt)}function vt(){return S(ut,mt)}function mt(t,e){if("="==e)return T(ut)}function yt(t,e){return"enum"==e?(k.marked="keyword",T(Wt)):S(bt,at,wt,Ct)}function bt(t,e){return c&&A(e)?(k.marked="keyword",T(bt)):"variable"==t?(M(e),T()):"spread"==t?T(bt):"["==t?ot(bt,"]"):"{"==t?ot(xt,"}"):void 0}function xt(t,e){return"variable"!=t||k.stream.match(/^\s*:/,!1)?("variable"==t&&(k.marked="property"),"spread"==t?T(bt):"}"==t?S():T(R(":"),bt,wt)):(M(e),T(wt))}function wt(t,e){if("="==e)return T(H)}function Ct(t){if(","==t)return T(yt)}function kt(t,e){if("keyword b"==t&&"else"==e)return T(I("form","else"),j,F)}function St(t,e){return"await"==e?T(St):"("==t?T(I(")"),Tt,R(")"),F):void 0}function Tt(t){return"var"==t?T(yt,R(";"),Mt):";"==t?T(Mt):"variable"==t?T(Et):S(V,R(";"),Mt)}function Et(t,e){return"in"==e||"of"==e?(k.marked="keyword",T(V)):T(U,Mt)}function Mt(t,e){return";"==t?T(At):"in"==e||"of"==e?(k.marked="keyword",T(V)):S(V,R(";"),At)}function At(t){")"!=t&&T(V)}function Ot(t,e){return"*"==e?(k.marked="keyword",T(Ot)):"variable"==t?(M(e),T(Ot)):"("==t?T(L,I(")"),rt(Pt,")"),F,lt,j,D):c&&"<"==e?T(I(">"),rt(vt,">"),F,Ot):void 0}function Pt(t,e){return"@"==e&&T(V,Pt),"spread"==t?T(Pt):c&&A(e)?(k.marked="keyword",T(Pt)):S(bt,at,wt)}function _t(t,e){return"variable"==t?Lt(t,e):Nt(t,e)}function Lt(t,e){if("variable"==t)return M(e),T(Nt)}function Nt(t,e){return"<"==e?T(I(">"),rt(vt,">"),F,Nt):"extends"==e||"implements"==e||c&&","==t?("implements"==e&&(k.marked="keyword"),T(c?ut:V,Nt)):"{"==t?T(I("}"),Dt,F):void 0}function Dt(t,e){return"async"==t||"variable"==t&&("static"==e||"get"==e||"set"==e||c&&A(e))&&k.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(k.marked="keyword",T(Dt)):"variable"==t||"keyword"==k.style?(k.marked="property",T(c?It:Ot,Dt)):"["==t?T(V,at,R("]"),c?It:Ot,Dt):"*"==e?(k.marked="keyword",T(Dt)):";"==t?T(Dt):"}"==t?T():"@"==e?T(V,Dt):void 0}function It(t,e){return"?"==e?T(It):":"==t?T(ut,wt):"="==e?T(H):S(Ot)}function Ft(t,e){return"*"==e?(k.marked="keyword",T($t,R(";"))):"default"==e?(k.marked="keyword",T(V,R(";"))):"{"==t?T(rt(Rt,"}"),$t,R(";")):S(j)}function Rt(t,e){return"as"==e?(k.marked="keyword",T(R("variable"))):"variable"==t?S(H,Rt):void 0}function jt(t){return"string"==t?T():"("==t?S(V):S(zt,Vt,$t)}function zt(t,e){return"{"==t?ot(zt,"}"):("variable"==t&&M(e),"*"==e&&(k.marked="keyword"),T(Ht))}function Vt(t){if(","==t)return T(zt,Vt)}function Ht(t,e){if("as"==e)return k.marked="keyword",T(zt)}function $t(t,e){if("from"==e)return k.marked="keyword",T(V)}function Bt(t){return"]"==t?T():S(rt(H,"]"))}function Wt(){return S(I("form"),bt,R("{"),I("}"),rt(Ut,"}"),F,F)}function Ut(){return S(bt,wt)}function qt(t,e,n){return e.tokenize==g&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(e.lastType)||"quasi"==e.lastType&&/\{\s*$/.test(t.string.slice(0,t.pos-(n||0)))}return D.lex=!0,F.lex=!0,{startState:function(t){var e={tokenize:g,lastType:"sof",cc:[],lexical:new w((t||0)-o,0,"block",!1),localVars:n.localVars,context:n.localVars&&new O(null,null,!1),indented:t||0};return n.globalVars&&"object"==typeof n.globalVars&&(e.globalVars=n.globalVars),e},token:function(t,e){if(t.sol()&&(e.lexical.hasOwnProperty("align")||(e.lexical.align=!1),e.indented=t.indentation(),b(t,e)),e.tokenize!=v&&t.eatSpace())return null;var n=e.tokenize(t,e);return"comment"==i?n:(e.lastType="operator"!=i||"++"!=r&&"--"!=r?i:"incdec",function(t,e,n,i,r){var o=t.cc;for(k.state=t,k.stream=r,k.marked=null,k.cc=o,k.style=e,t.lexical.hasOwnProperty("align")||(t.lexical.align=!0);;){var s=o.length?o.pop():l?V:j;if(s(n,i)){for(;o.length&&o[o.length-1].lex;)o.pop()();return k.marked?k.marked:"variable"==n&&C(t,i)?"variable-2":e}}}(e,n,i,r,t))},indent:function(e,i){if(e.tokenize==v)return t.Pass;if(e.tokenize!=g)return 0;var r,a=i&&i.charAt(0),l=e.lexical;if(!/^\s*else\b/.test(i))for(var c=e.cc.length-1;c>=0;--c){var u=e.cc[c];if(u==F)l=l.prev;else if(u!=kt)break}for(;("stat"==l.type||"form"==l.type)&&("}"==a||(r=e.cc[e.cc.length-1])&&(r==U||r==q)&&!/^[,\.=+\-*:?[\(]/.test(i));)l=l.prev;s&&")"==l.type&&"stat"==l.prev.type&&(l=l.prev);var h=l.type,f=a==h;return"vardef"==h?l.indented+("operator"==e.lastType||","==e.lastType?l.info.length+1:0):"form"==h&&"{"==a?l.indented:"form"==h?l.indented+o:"stat"==h?l.indented+(function(t,e){return"operator"==t.lastType||","==t.lastType||d.test(e.charAt(0))||/[,.]/.test(e.charAt(0))}(e,i)?s||o:0):"switch"!=l.info||f||0==n.doubleIndentSwitch?l.align?l.column+(f?0:1):l.indented+(f?0:o):l.indented+(/^(?:case|default)\b/.test(i)?o:2*o)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:l?null:"/*",blockCommentEnd:l?null:"*/",blockCommentContinue:l?null:" * ",lineComment:l?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:l?"json":"javascript",jsonldMode:a,jsonMode:l,expressionAllowed:qt,skipExpression:function(t){var e=t.cc[t.cc.length-1];e!=V&&e!=H||t.cc.pop()}}}),t.registerHelper("wordChars","javascript",/[\w$]/),t.defineMIME("text/javascript","javascript"),t.defineMIME("text/ecmascript","javascript"),t.defineMIME("application/javascript","javascript"),t.defineMIME("application/x-javascript","javascript"),t.defineMIME("application/ecmascript","javascript"),t.defineMIME("application/json",{name:"javascript",json:!0}),t.defineMIME("application/x-json",{name:"javascript",json:!0}),t.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),t.defineMIME("text/typescript",{name:"javascript",typescript:!0}),t.defineMIME("application/typescript",{name:"javascript",typescript:!0})}(n(6))},function(t,e,n){!function(t){"use strict";var e={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};t.defineMode("xml",function(i,r){var o,s,a=i.indentUnit,l={},c=r.htmlMode?e:n;for(var u in c)l[u]=c[u];for(var u in r)l[u]=r[u];function h(t,e){function n(n){return e.tokenize=n,n(t,e)}var i=t.next();return"<"==i?t.eat("!")?t.eat("[")?t.match("CDATA[")?n(f("atom","]]>")):null:t.match("--")?n(f("comment","--\x3e")):t.match("DOCTYPE",!0,!0)?(t.eatWhile(/[\w\._\-]/),n(function t(e){return function(n,i){for(var r;null!=(r=n.next());){if("<"==r)return i.tokenize=t(e+1),i.tokenize(n,i);if(">"==r){if(1==e){i.tokenize=h;break}return i.tokenize=t(e-1),i.tokenize(n,i)}}return"meta"}}(1))):null:t.eat("?")?(t.eatWhile(/[\w\._\-]/),e.tokenize=f("meta","?>"),"meta"):(o=t.eat("/")?"closeTag":"openTag",e.tokenize=d,"tag bracket"):"&"==i?(t.eat("#")?t.eat("x")?t.eatWhile(/[a-fA-F\d]/)&&t.eat(";"):t.eatWhile(/[\d]/)&&t.eat(";"):t.eatWhile(/[\w\.\-:]/)&&t.eat(";"))?"atom":"error":(t.eatWhile(/[^&<]/),null)}function d(t,e){var n=t.next();if(">"==n||"/"==n&&t.eat(">"))return e.tokenize=h,o=">"==n?"endTag":"selfcloseTag","tag bracket";if("="==n)return o="equals",null;if("<"==n){e.tokenize=h,e.state=v,e.tagName=e.tagStart=null;var i=e.tokenize(t,e);return i?i+" tag error":"tag error"}return/[\'\"]/.test(n)?(e.tokenize=function(t){var e=function(e,n){for(;!e.eol();)if(e.next()==t){n.tokenize=d;break}return"string"};return e.isInAttribute=!0,e}(n),e.stringStartCol=t.column(),e.tokenize(t,e)):(t.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function f(t,e){return function(n,i){for(;!n.eol();){if(n.match(e)){i.tokenize=h;break}n.next()}return t}}function p(t){t.context&&(t.context=t.context.prev)}function g(t,e){for(var n;;){if(!t.context)return;if(n=t.context.tagName,!l.contextGrabbers.hasOwnProperty(n)||!l.contextGrabbers[n].hasOwnProperty(e))return;p(t)}}function v(t,e,n){return"openTag"==t?(n.tagStart=e.column(),m):"closeTag"==t?y:v}function m(t,e,n){return"word"==t?(n.tagName=e.current(),s="tag",w):l.allowMissingTagName&&"endTag"==t?(s="tag bracket",w(t,0,n)):(s="error",m)}function y(t,e,n){if("word"==t){var i=e.current();return n.context&&n.context.tagName!=i&&l.implicitlyClosed.hasOwnProperty(n.context.tagName)&&p(n),n.context&&n.context.tagName==i||!1===l.matchClosing?(s="tag",b):(s="tag error",x)}return l.allowMissingTagName&&"endTag"==t?(s="tag bracket",b(t,0,n)):(s="error",x)}function b(t,e,n){return"endTag"!=t?(s="error",b):(p(n),v)}function x(t,e,n){return s="error",b(t,0,n)}function w(t,e,n){if("word"==t)return s="attribute",C;if("endTag"==t||"selfcloseTag"==t){var i=n.tagName,r=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==t||l.autoSelfClosers.hasOwnProperty(i)?g(n,i):(g(n,i),n.context=new function(t,e,n){this.prev=t.context,this.tagName=e,this.indent=t.indented,this.startOfLine=n,(l.doNotIndent.hasOwnProperty(e)||t.context&&t.context.noIndent)&&(this.noIndent=!0)}(n,i,r==n.indented)),v}return s="error",w}function C(t,e,n){return"equals"==t?k:(l.allowMissing||(s="error"),w(t,0,n))}function k(t,e,n){return"string"==t?S:"word"==t&&l.allowUnquoted?(s="string",w):(s="error",w(t,0,n))}function S(t,e,n){return"string"==t?S:w(t,0,n)}return h.isInText=!0,{startState:function(t){var e={tokenize:h,state:v,indented:t||0,tagName:null,tagStart:null,context:null};return null!=t&&(e.baseIndent=t),e},token:function(t,e){if(!e.tagName&&t.sol()&&(e.indented=t.indentation()),t.eatSpace())return null;o=null;var n=e.tokenize(t,e);return(n||o)&&"comment"!=n&&(s=null,e.state=e.state(o||n,t,e),s&&(n="error"==s?n+" error":s)),n},indent:function(e,n,i){var r=e.context;if(e.tokenize.isInAttribute)return e.tagStart==e.indented?e.stringStartCol+1:e.indented+a;if(r&&r.noIndent)return t.Pass;if(e.tokenize!=d&&e.tokenize!=h)return i?i.match(/^(\s*)/)[0].length:0;if(e.tagName)return!1!==l.multilineTagIndentPastTag?e.tagStart+e.tagName.length+2:e.tagStart+a*(l.multilineTagIndentFactor||1);if(l.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:l.htmlMode?"html":"xml",helperType:l.htmlMode?"html":"xml",skipAttribute:function(t){t.state==k&&(t.state=w)}}}),t.defineMIME("text/xml","xml"),t.defineMIME("application/xml","xml"),t.mimeModes.hasOwnProperty("text/html")||t.defineMIME("text/html",{name:"xml",htmlMode:!0})}(n(6))},function(t,e,n){!function(t){"use strict";var e={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]},n={};function i(t,e){var i=t.match(function(t){var e=n[t];return e||(n[t]=new RegExp("\\s+"+t+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"))}(e));return i?/^\s*(.*?)\s*$/.exec(i[2])[1]:""}function r(t,e){return new RegExp((e?"^":"")+"","i")}function o(t,e){for(var n in t)for(var i=e[n]||(e[n]=[]),r=t[n],o=r.length-1;o>=0;o--)i.unshift(r[o])}t.defineMode("htmlmixed",function(n,s){var a=t.getMode(n,{name:"xml",htmlMode:!0,multilineTagIndentFactor:s.multilineTagIndentFactor,multilineTagIndentPastTag:s.multilineTagIndentPastTag}),l={},c=s&&s.tags,u=s&&s.scriptTypes;if(o(e,l),c&&o(c,l),u)for(var h=u.length-1;h>=0;h--)l.script.unshift(["type",u[h].matches,u[h].mode]);function d(e,o){var s,c=a.token(e,o.htmlState),u=/\btag\b/.test(c);if(u&&!/[<>\s\/]/.test(e.current())&&(s=o.htmlState.tagName&&o.htmlState.tagName.toLowerCase())&&l.hasOwnProperty(s))o.inTag=s+" ";else if(o.inTag&&u&&/>$/.test(e.current())){var h=/^([\S]+) (.*)/.exec(o.inTag);o.inTag=null;var f=">"==e.current()&&function(t,e){for(var n=0;n-1?t.backUp(i.length-r):i.match(/<\/?$/)&&(t.backUp(i.length),t.match(e,!1)||t.match(i)),n}(t,v,e.localMode.token(t,e.localState))},o.localMode=p,o.localState=t.startState(p,a.indent(o.htmlState,""))}else o.inTag&&(o.inTag+=e.current(),e.eol()&&(o.inTag+=" "));return c}return{startState:function(){var e=t.startState(a);return{token:d,inTag:null,localMode:null,localState:null,htmlState:e}},copyState:function(e){var n;return e.localState&&(n=t.copyState(e.localMode,e.localState)),{token:e.token,inTag:e.inTag,localMode:e.localMode,localState:n,htmlState:t.copyState(a,e.htmlState)}},token:function(t,e){return e.token(t,e)},indent:function(e,n,i){return!e.localMode||/^\s*<\//.test(n)?a.indent(e.htmlState,n):e.localMode.indent?e.localMode.indent(e.localState,n,i):t.Pass},innerMode:function(t){return{state:t.localState||t.htmlState,mode:t.localMode||a}}}},"xml","javascript","css"),t.defineMIME("text/html","htmlmixed")}(n(6),n(189),n(188),n(81))},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},i="",r=this.em,o=r&&r.getConfig("avoidInlineStyle"),s=t.styleToString(),a=t.get("classes"),l=n.wrappesIsBody,c=t.get("wrapper");if(this.ids.push("#"+t.getId()),a.each(function(t){return e.compCls.push(t.getFullName())}),(!o||c)&&s){var u="#"+t.getId();i=(u=l&&c?"body":u)+"{"+s+"}"}return t.components().each(function(t){return i+=e.buildFromModel(t,n)}),i},build:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.cssc,o=n.em||"";this.em=o,this.compCls=[],this.ids=[];var s=this.buildFromModel(t,n),a=(0,i.isUndefined)(n.clearStyles)&&o?o.getConfig("clearStyles"):n.clearStyles;return r&&function(){var t=r.getAll(),i={},l=[];for(var c in t.each(function(t){var r=t.getAtRule();if(r){var o=i[r];o?o.push(t):i[r]=[t]}else s+=e.buildFromRule(t,l,n)}),i){var u="";i[c].forEach(function(t){return u+=e.buildFromRule(t,l,n)}),u&&(s+=c+"{"+u+"}")}o&&a&&t.remove(l)}(),s},buildFromRule:function(t,e){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r="",o=t.selectorsToString({skipAdd:1}),s=t.get("selectorsAdd"),a=t.get("singleAtRule"),l=void 0;if(t.get("selectors").each(function(t){var e=t.getFullName();(n.compCls.indexOf(e)>=0||n.ids.indexOf(e)>=0||i.keepUnusedStyles)&&(l=1)}),o&&l||s||a){var c=t.getDeclaration();c&&(r+=c)}else e.push(t);return r}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.Model.extend({build:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.get("components");return e.exportWrapper?e.wrappesIsBody?""+this.buildModels(n)+"":t.toHTML():this.buildModels(n)},buildModels:function(t){var e="";return t.each(function(t){e+=t.toHTML()}),e}})},function(t,e,n){"use strict";t.exports={stylePrefix:"cm-",inlineCss:!1}},function(t,e,n){"use strict";var i=n(1);t.exports=function(){var t={},e=n(196),r=n(195),o=n(194),s=n(193),a=n(192),l=n(191),c=n(186),u={},h={},d={},f={};return{getConfig:function(){return t},config:t,EditorView:c,name:"CodeManager",init:function(n){for(var i in t=n||{},e)i in t||(t[i]=e[i]);var c=t.pStylePrefix;return c&&(t.stylePrefix=c+t.stylePrefix),h.html=new r,h.css=new o,h.json=new s,h.js=new a,f.CodeMirror=new l,this.loadDefaultGenerators().loadDefaultViewers(),this},addGenerator:function(t,e){return u[t]=e,this},getGenerator:function(t){return u[t]||null},getGenerators:function(){return u},addViewer:function(t,e){return d[t]=e,this},getViewer:function(t){return d[t]||null},getViewers:function(){return d},createViewer:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=(0,i.isUndefined)(t.type)?"CodeMirror":t.type,n=this.getViewer(e)&&this.getViewer(e).clone(),r=document.createElement("div"),o=document.createElement("textarea");return r.appendChild(o),n.set(t),n.init(o),n.setElement(r),n},updateViewer:function(t,e){t.setContent(e)},getCode:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};i.em=t.em;var r=this.getGenerator(n);return r?r.build(e,i):""},loadDefaultGenerators:function(){for(var t in h)this.addGenerator(t,h[t]);return this},loadDefaultViewers:function(){for(var t in f)this.addViewer(t,f[t]);return this}}}},function(t,e,n){"use strict";t.exports=n(0).View.extend({template:function(t){var e=t.pfx,n=t.ppfx,i=t.content;return'
    \n
    \n
    '+t.title+'
    \n
    \n
    \n
    \n
    '+i+'
    \n
    \n
    \n
    \n '},events:{click:"onClick","click [data-close-modal]":"hide"},initialize:function(t){var e=this.model,n=t.config||{},i=n.stylePrefix||"";this.config=n,this.pfx=i,this.ppfx=n.pStylePrefix||"",this.listenTo(e,"change:open",this.updateOpen),this.listenTo(e,"change:title",this.updateTitle),this.listenTo(e,"change:content",this.updateContent)},onClick:function(t){this.config.backdrop&&t.target===this.el&&this.hide()},getCollector:function(){return this.$collector||(this.$collector=this.$el.find("."+this.pfx+"collector")),this.$collector},getContent:function(){var t=this.pfx;return this.$content||(this.$content=this.$el.find("."+t+"content #"+t+"c")),this.$content},getTitle:function(){return this.$title||(this.$title=this.$el.find("."+this.pfx+"title")),this.$title.get(0)},updateContent:function(){var t=this.getContent(),e=t.children(),n=this.getCollector(),i=this.model.get("content");e.length&&n.append(e),t.empty().append(i)},updateTitle:function(){var t=this.getTitle();t&&(t.innerHTML=this.model.get("title"))},updateOpen:function(){this.el.style.display=this.model.get("open")?"":"none"},hide:function(){this.model.set("open",0)},show:function(){this.model.set("open",1)},render:function(){var t=this.$el,e=this.pfx,n=(this.ppfx,this.model.toJSON());return n.pfx=this.pfx,n.ppfx=this.ppfx,t.html(this.template(n)),t.attr("class",e+"container"),this.updateOpen(),this}})},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{title:"",content:"",open:!1}})},function(t,e,n){"use strict";t.exports={stylePrefix:"mdl-",title:"",content:"",backdrop:!0}},function(t,e,n){"use strict";t.exports=function(){var t,e,i={},r=n(200),o=n(199),s=n(198);return{name:"Modal",init:function(n){for(var a in i=n||{},r)a in i||(i[a]=r[a]);var l=i.pStylePrefix;return l&&(i.stylePrefix=l+i.stylePrefix),t=new o(i),e=new s({model:t,config:i}),this},postRender:function(t){var e=t.model.getConfig().el||t.el;this.render().appendTo(e)},open:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t.title&&this.setTitle(t.title),t.content&&this.setContent(t.content),e.show(),this},close:function(){return e.hide(),this},isOpen:function(){return!!t.get("open")},setTitle:function(e){return t.set("title",e),this},getTitle:function(){return t.get("title")},setContent:function(e){return t.set("content"," "),t.set("content",e),this},getContent:function(){return t.get("content")},getContentEl:function(){return e.getContent().get(0)},getModel:function(){return t},render:function(){return e.render().$el}}}},function(t,e,n){"use strict";var i=n(10);t.exports=n(0).View.extend({template:function(){var t=this.pfx;this.ppfx;return'\n \n '+(this.model.get("label")||"")+'\n \n ⨯\n \n '},events:{"click [data-tag-remove]":"removeTag","click [data-tag-status]":"changeStatus","dblclick [data-tag-name]":"startEditTag","focusout [data-tag-name]":"endEditTag"},initialize:function(t){this.config=t.config||{},this.coll=t.coll||null,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=this.config.em,this.listenTo(this.model,"change:active",this.updateStatus)},getInputEl:function(){return this.inputEl||(this.inputEl=this.el.querySelector("[data-tag-name]")),this.inputEl},startEditTag:function(){var t=this.getInputEl();t.contentEditable=!0,t.focus()},endEditTag:function(){var t=this.model,e=this.getInputEl(),n=e.textContent,r=i.escapeName(n),o=this.target,s=o&&o.get("SelectorManager");e.contentEditable=!1,s&&(s.get(r)?e.innerText=t.get("label"):t.set({name:r,label:n}))},changeStatus:function(){this.model.set("active",!this.model.get("active"))},removeTag:function(t){var e=this,n=this.target,i=this.model,r=this.coll,o=(this.el,n&&n.getSelected());o&&(o.get,o.get("classes").remove(i)),r&&r.remove(i),setTimeout(function(){return e.remove()},0)},updateStatus:function(){var t="fa-check-square-o";this.$chk||(this.$chk=this.$el.find("#"+this.pfx+"checkbox")),this.model.get("active")?(this.$chk.removeClass("fa-square-o").addClass(t),this.$el.removeClass("opac50")):(this.$chk.removeClass(t).addClass("fa-square-o"),this.$el.addClass("opac50"))},render:function(){var t=this.pfx,e=this.ppfx;return this.$el.html(this.template()),this.$el.attr("class",t+"tag "+e+"three-bg"),this.updateStatus(),this}})},function(t,e,n){"use strict";var i=o(n(1)),r=o(n(0));function o(t){return t&&t.__esModule?t:{default:t}}var s=n(202);t.exports=r.default.View.extend({template:i.default.template('\n
    \n
    <%= label %>
    \n
    \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    <%= selectedLabel %>
    \n
    \n
    \n
    '),events:{},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.className=this.pfx+"tags",this.addBtnId=this.pfx+"add-tag",this.newInputId=this.pfx+"new",this.stateInputId=this.pfx+"states",this.stateInputC=this.pfx+"input-c",this.states=this.config.states||[],this.events["click #"+this.addBtnId]="startNewTag",this.events["blur #"+this.newInputId]="endNewTag",this.events["keyup #"+this.newInputId]="onInputKeyUp",this.events["change #"+this.stateInputId]="stateChanged",this.target=this.config.em,this.em=this.target,this.listenTo(this.target,"component:toggled",this.componentChanged),this.listenTo(this.target,"component:update:classes",this.updateSelector),this.listenTo(this.collection,"add",this.addNew),this.listenTo(this.collection,"reset",this.renderClasses),this.listenTo(this.collection,"remove",this.tagRemoved),this.delegateEvents()},tagRemoved:function(t){this.updateStateVis()},getStateOptions:function(){for(var t="",e=0;e'+this.states[e].label+"";return t},addNew:function(t){this.addToClasses(t)},startNewTag:function(t){this.$addBtn.get(0).style.display="none",this.$input.show().focus()},endNewTag:function(t){this.$addBtn.get(0).style.display="",this.$input.hide().val("")},onInputKeyUp:function(t){13===t.keyCode?this.addNewTag(this.$input.val()):27===t.keyCode&&this.endNewTag()},componentChanged:function(t){this.compTarget=this.target.getSelected();var e=this.compTarget,n=[];e&&(this.getStates().val(e.get("state")),n=e.get("classes").getValid()),this.collection.reset(n),this.updateStateVis()},updateStateVis:function(){var t=this.em,e=t&&t.getConfig("avoidInlineStyle");this.collection.length||e?this.getStatesC().css("display","block"):this.getStatesC().css("display","none"),this.updateSelector()},updateSelector:function(){var t=this.target.getSelected();if(this.compTarget=t,t&&t.get){var e=t.get("state"),n=this.collection,i=n.getFullString(n.getStyleable());i=i||"#"+t.getId(),i+=e?":"+e:"";var r=this.el.querySelector("#"+this.pfx+"sel");r&&(r.innerHTML=i)}},stateChanged:function(t){this.compTarget&&(this.compTarget.set("state",this.$states.val()),this.updateSelector())},addNewTag:function(t){var e=this.target,n=this.compTarget;if(t.trim()){if(e){var i=e.get("SelectorManager").add({label:t});if(n){var r=n.get("classes");r.length;r.add(i);r.length;this.collection.add(i),this.updateStateVis()}}this.endNewTag()}},addToClasses:function(t,e){var n=e||null,i=new s({model:t,config:this.config,coll:this.collection}).render().el;return n?n.appendChild(i):this.getClasses().append(i),i},renderClasses:function(){var t=document.createDocumentFragment();return this.collection.each(function(e){this.addToClasses(e,t)},this),this.getClasses()&&this.getClasses().empty().append(t),this},getClasses:function(){return this.$classes||(this.$classes=this.$el.find("#"+this.pfx+"tags-c")),this.$classes},getStates:function(){return this.$states||(this.$states=this.$el.find("#"+this.stateInputId)),this.$states},getStatesC:function(){return this.$statesC||(this.$statesC=this.$el.find("#"+this.stateInputC)),this.$statesC},render:function(){var t=this.ppfx,e=this.config,n=this.$el;return n.html(this.template({selectedLabel:e.selectedLabel,statesLabel:e.statesLabel,label:e.label,pfx:this.pfx,ppfx:this.ppfx})),this.$input=n.find("input#"+this.newInputId),this.$addBtn=n.find("#"+this.addBtnId),this.$classes=n.find("#"+this.pfx+"tags-c"),this.$states=n.find("#"+this.stateInputId),this.$statesC=n.find("#"+this.stateInputC),this.$states.append(this.getStateOptions()),this.renderClasses(),n.attr("class",this.className+" "+t+"one-bg "+t+"two-color"),this}})},function(t,e,n){"use strict";t.exports={stylePrefix:"clm-",appendTo:"",selectors:[],label:"Classes",statesLabel:"- State -",selectedLabel:"Selected",states:[{name:"hover",label:"Hover"},{name:"active",label:"Click"},{name:"nth-of-type(2n)",label:"Even/Odd"}]}},function(t,e,n){"use strict";var i=n(1),r=function(t){return(0,i.isString)(t)&&"#"==t[0]};t.exports=function(t){var e,o,s=t||{},a=n(204),l=n(10),c=n(19),u=n(203);return{Selector:l,Selectors:c,name:"SelectorManager",getConfig:function(){return s},init:function(t){for(var n in s=t||{},a)n in s||(s[n]=a[n]);var i=s.em,r=s.pStylePrefix;return r&&(s.stylePrefix=r+s.stylePrefix),o=new u({collection:new c([],{em:i,config:s}),config:s}),(e=new c(s.selectors)).on("add",function(t){return i.trigger("selector:add",t)}),this},postRender:function(){var t=this.getConfig().appendTo;t&&((0,i.isElement)(t)?t:document.querySelector(t)).appendChild(this.render([]))},add:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,i.isObject)(t)?n=t:n.name=t,r(n.name)&&(n.name=n.name.substr(1),n.type=l.TYPE_ID),n.label&&!n.name&&(n.name=l.escapeName(n.label));var o=n.name,s=o?this.get(o,n.type):e.where(n)[0];return s||e.add(n)},addClass:function(t){var n=[];return(0,i.isString)(t)&&(t=t.trim().split(" ")),t.forEach(function(t){return n.push(e.add({name:t}))}),n},get:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l.TYPE_CLASS;return r(t)&&(t=t.substr(1),n=l.TYPE_ID),e.where({name:t,type:n})[0]},getAll:function(){return e},render:function(t){return t?new u({collection:new c(t),config:s}).render().el:o.render().el}}}},function(t,e,n){"use strict";var i={4:"media",5:"font-face",6:"page",7:"keyframes",11:"counter-style",12:"supports",13:"document",14:"font-feature-values",15:"viewport"},r=(0,n(1).keys)(i),o=["5","6","11","15"];t.exports=function(t){return{parseSelector:function(){for(var t=[],e=[],n=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").split(","),i=0,r=n.length;i=0;if(p)u=1,h=i[c],d=this.parseCondition(l);else if(r.indexOf(c)>=0){var g=this.parseNode(l);d=this.parseCondition(l);for(var v=0,m=g.length;v<%= deviceLabel %>\n
    \n \n \n \n
    \n
    \n
    \n
    \n '),events:{change:"updateDevice"},initialize:function(t){this.config=t.config||{},this.em=this.config.em,this.ppfx=this.config.pStylePrefix||"",this.events["click ."+this.ppfx+"add-trasp"]=this.startAdd,this.listenTo(this.em,"change:device",this.updateSelect),this.delegateEvents()},startAdd:function(){},updateDevice:function(){var t=this.em;if(t){var e=this.devicesEl,n=e?e.val():"";t.set("device",n)}},updateSelect:function(){var t=this.em,e=this.devicesEl;if(t&&t.getDeviceModel&&e){var n=t.getDeviceModel(),i=n?n.get("name"):"";e.val(i)}},getOptions:function(){var t="";return this.collection.each(function(e){var n=e.get("name");t+='"}),t},render:function(){var t=this.ppfx;return this.$el.html(this.template({ppfx:t,deviceLabel:this.config.deviceLabel})),this.devicesEl=this.$el.find("."+t+"devices"),this.devicesEl.append(this.getOptions()),this.el.className=t+"devices-c",this}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));t.exports=i.default.Model.extend({idAttribute:"name",defaults:{name:"",width:"",height:"",widthMedia:null},initialize:function(){null==this.get("widthMedia")&&this.set("widthMedia",this.get("width"))}})},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0));var r=n(210);t.exports=i.default.Collection.extend({model:r})},function(t,e,n){"use strict";t.exports={devices:[],deviceLabel:"Device"}},function(t,e,n){"use strict";t.exports=function(){var t,e,i={},r=n(212),o=n(211),s=n(209);return{name:"DeviceManager",init:function(n){for(var a in i=n||{},r)a in i||(i[a]=r[a]);return t=new o(i.devices),e=new s({collection:t,config:i}),this},add:function(e,n,i){var r=i||{};return r.name=e,r.width=n,t.add(r)},get:function(e){return t.get(e)},getAll:function(){return t},render:function(){return e.render().el}}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=this.constructor;return this.then(function(n){return e.resolve(t()).then(function(){return n})},function(n){return e.resolve(t()).then(function(){return e.reject(n)})})}},function(t,e){var n,i,r=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{i="function"==typeof clearTimeout?clearTimeout:s}catch(t){i=s}}();var l,c=[],u=!1,h=-1;function d(){u&&l&&(u=!1,l.length?c=l.concat(c):h=-1,c.length&&f())}function f(){if(!u){var t=a(d);u=!0;for(var e=c.length;e;){for(l=c,c=[];++h1)for(var n=1;n=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},n(216),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,n(11))},function(t,e,n){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(t){return t&&t.__esModule?t:{default:t}}(n(214));var o=setTimeout;function s(){}function a(t){if(!(this instanceof a))throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],d(t,this)}function l(t,e){for(;3===t._state;)t=t._value;0!==t._state?(t._handled=!0,a._immediateFn(function(){var n=1===t._state?e.onFulfilled:e.onRejected;if(null!==n){var i;try{i=n(t._value)}catch(t){return void u(e.promise,t)}c(e.promise,i)}else(1===t._state?c:u)(e.promise,t._value)})):t._deferreds.push(e)}function c(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"===(void 0===e?"undefined":i(e))||"function"==typeof e)){var n=e.then;if(e instanceof a)return t._state=3,t._value=e,void h(t);if("function"==typeof n)return void d(function(t,e){return function(){t.apply(e,arguments)}}(n,e),t)}t._state=1,t._value=e,h(t)}catch(e){u(t,e)}}function u(t,e){t._state=2,t._value=e,h(t)}function h(t){2===t._state&&0===t._deferreds.length&&a._immediateFn(function(){t._handled||a._unhandledRejectionFn(t._value)});for(var e=0,n=t._deferreds.length;e1&&void 0!==arguments[1]?arguments[1]:{},n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.get("contentTypeJson"),a=this.get("headers")||{},l=this.get("params"),c=e.body||{},u=void 0,h=void 0;for(var d in l)c[d]=l[d];if((0,r.isUndefined)(a["X-Requested-With"])&&(a["X-Requested-With"]="XMLHttpRequest"),(0,r.isUndefined)(a["Content-Type"])&&s&&(a["Content-Type"]="application/json; charset=utf-8"),s)h=JSON.stringify(c);else for(var f in h=new FormData,c)h.append(f,c[f]);"post"===(u={method:e.method||"post",credentials:"include",headers:a}).method&&(u.body=h),this.onStart(),this.fetch(t,u).then(function(t){return 1==(t.status/200|0)?t.text():t.text().then(function(t){return Promise.reject(t)})}).then(function(t){return n.onResponse(t,i)}).catch(function(t){return n.onError(t,o)})}})},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{checkLocal:!0},store:function(t,e){for(var n in this.checkStorageEnvironment(),t)localStorage.setItem(n,t[n]);"function"==typeof e&&e()},load:function(t,e){this.checkStorageEnvironment();for(var n={},i=0,r=t.length;it.maximumStackLength&&(t.shift(),t.pointer--)}}}function h(){}function d(e,n,i,o){if("object"==typeof n)return t.each(n,function(t,n){2===e?d(e,t,i,o):d(e,n,t,i)});switch(e){case 0:r(i,"undo","redo","on")&&t.all(t.pick(i,"undo","redo","on"),t.isFunction)&&(o[n]=i);break;case 1:o[n]&&t.isObject(i)&&(o[n]=t.extend({},o[n],i));break;case 2:delete o[n]}return this}var f=Array.prototype.slice,p=function(){function e(){i++,n=!0,t.defer(function(){n=!1})}var n=!1,i=-1;return function(){return n||e(),i}}();o.prototype={isRegistered:function(e){return e&&e.cid?this.registeredObjects[e.cid]:t.contains(this.registeredObjects,e)},register:function(t){return!this.isRegistered(t)&&(t&&t.cid?(this.registeredObjects[t.cid]=t,this.cidIndexes.push(t.cid)):this.registeredObjects.push(t),!0)},unregister:function(e){if(this.isRegistered(e)){if(e&&e.cid)delete this.registeredObjects[e.cid],this.cidIndexes.splice(t.indexOf(this.cidIndexes,e.cid),1);else{var n=t.indexOf(this.registeredObjects,e);this.registeredObjects.splice(n,1)}return!0}return!1},get:function(){return t.map(this.cidIndexes,function(t){return this.registeredObjects[t]},this).concat(this.registeredObjects)}};var g={add:{undo:function(t,e,n,i){t.remove(n,i)},redo:function(t,e,n,i){i.index&&(i.at=i.index),t.add(n,i)},on:function(e,n,i){return{object:n,before:void 0,after:e,options:t.clone(i)}}},remove:{undo:function(t,e,n,i){"index"in i&&(i.at=i.index),t.add(e,i)},redo:function(t,e,n,i){t.remove(e,i)},on:function(e,n,i){return{object:n,before:e,after:void 0,options:t.clone(i)}}},change:{undo:function(e,n,i,r){t.isEmpty(n)?t.each(t.keys(i),e.unset,e):(e.set(n),r&&r.unsetData&&r.unsetData.before&&r.unsetData.before.length&&t.each(r.unsetData.before,e.unset,e))},redo:function(e,n,i,r){t.isEmpty(i)?t.each(t.keys(n),e.unset,e):(e.set(i),r&&r.unsetData&&r.unsetData.after&&r.unsetData.after.length&&t.each(r.unsetData.after,e.unset,e))},on:function(e,n){var i=e.changedAttributes(),r=t.keys(i),o=t.pick(e.previousAttributes(),r),s=t.keys(o),a=(n||(n={})).unsetData={after:[],before:[]};return r.length!=s.length&&(r.length>s.length?t.each(r,function(t){t in o||a.before.push(t)},this):t.each(s,function(t){t in i||a.after.push(t)})),{object:e,before:o,after:i,options:t.clone(n)}}},reset:{undo:function(t,e,n){t.reset(e)},redo:function(t,e,n){t.reset(n)},on:function(e,n){return{object:e,before:n.previousModels,after:t.clone(e.models)}}}};h.prototype=g;var v=e.Model.extend({defaults:{type:null,object:null,before:null,after:null,magicFusionIndex:null},undo:function(t){a("undo",this.attributes)},redo:function(t){a("redo",this.attributes)}}),m=e.Collection.extend({model:v,pointer:-1,track:!1,isCurrentlyUndoRedoing:!1,maximumStackLength:1/0,setMaxLength:function(t){this.maximumStackLength=t}}),y=e.Model.extend({defaults:{maximumStackLength:1/0,track:!1},initialize:function(e){this.stack=new m,this.objectRegistry=new o,this.undoTypes=new h,this.stack.setMaxLength(this.get("maximumStackLength")),this.on("change:maximumStackLength",function(t,e){this.stack.setMaxLength(e)},this),e&&e.track&&this.startTracking(),e&&e.register&&(t.isArray(e.register)||t.isArguments(e.register)?n(this.register,this,e.register):this.register(e.register))},startTracking:function(){this.set("track",!0),this.stack.track=!0},stopTracking:function(){this.set("track",!1),this.stack.track=!1},isTracking:function(){return this.get("track")},_addToStack:function(t){u(this.stack,t,i(arguments,1),this.undoTypes)},register:function(){s("on",arguments,this._addToStack,this)},unregister:function(){s("off",arguments,this._addToStack,this)},unregisterAll:function(){n(this.unregister,this,this.objectRegistry.get())},undo:function(t){l("undo",this,this.stack,t)},undoAll:function(){l("undo",this,this.stack,!1,!0)},redo:function(t){l("redo",this,this.stack,t)},redoAll:function(){l("redo",this,this.stack,!1,!0)},isAvailable:function(t){var e=this.stack,n=e.length;switch(t){case"undo":return n>0&&e.pointer>-1;case"redo":return n>0&&e.pointer1&&void 0!==arguments[1]?arguments[1]:{},n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.get("contentTypeJson"),a=this.get("headers")||{},l=this.get("params"),c=e.body||{},u=void 0,h=void 0;for(var d in l)c[d]=l[d];if((0,o.isUndefined)(a["X-Requested-With"])&&(a["X-Requested-With"]="XMLHttpRequest"),(0,o.isUndefined)(a["Content-Type"])&&s&&(a["Content-Type"]="application/json; charset=utf-8"),s)h=JSON.stringify(c);else{h=new FormData;for(var f in c)h.append(f,c[f])}u={method:e.method||"post",credentials:"include",headers:a},"post"===u.method&&(u.body=h),this.onStart(),this.fetch(t,u).then(function(t){return 1==(t.status/200|0)?t.text():t.text().then(function(t){return Promise.reject(t)})}).then(function(t){return n.onResponse(t,i)}).catch(function(t){return n.onError(t,r)})}})},function(t,e,n){"use strict";(function(t){function i(){}function r(t,e){return function(){t.apply(e,arguments)}}function o(t){if(!(this instanceof o))throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],h(t,this)}function s(t,e){for(;3===t._state;)t=t._value;if(0===t._state)return void t._deferreds.push(e);t._handled=!0,o._immediateFn(function(){var n=1===t._state?e.onFulfilled:e.onRejected;if(null===n)return void(1===t._state?a:l)(e.promise,t._value);var i;try{i=n(t._value)}catch(t){return void l(e.promise,t)}a(e.promise,i)})}function a(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"===(void 0===e?"undefined":d(e))||"function"==typeof e)){var n=e.then;if(e instanceof o)return t._state=3,t._value=e,void c(t);if("function"==typeof n)return void h(r(n,e),t)}t._state=1,t._value=e,c(t)}catch(e){l(t,e)}}function l(t,e){t._state=2,t._value=e,c(t)}function c(t){2===t._state&&0===t._deferreds.length&&o._immediateFn(function(){t._handled||o._unhandledRejectionFn(t._value)});for(var e=0,n=t._deferreds.length;e=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},n(79),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(e,n(7))},function(t,e,n){(function(t,e){!function(t,n){"use strict";function i(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n1)for(var n=1;n<%= deviceLabel %>\n
    \n \n \n \n
    \n
    \n
    \n
    \n '),events:{change:"updateDevice"},initialize:function(t){this.config=t.config||{},this.em=this.config.em,this.ppfx=this.config.pStylePrefix||"",this.events["click ."+this.ppfx+"add-trasp"]=this.startAdd,this.listenTo(this.em,"change:device",this.updateSelect),this.delegateEvents()},startAdd:function(){},updateDevice:function(){var t=this.em;if(t){var e=this.devicesEl,n=e?e.val():"";t.set("device",n)}},updateSelect:function(){var t=this.em,e=this.devicesEl;if(t&&t.getDeviceModel&&e){var n=t.getDeviceModel(),i=n?n.get("name"):"";e.val(i)}},getOptions:function(){var t="";return this.collection.each(function(e){var n=e.get("name");t+='"}),t},render:function(){var t=this.ppfx;return this.$el.html(this.template({ppfx:t,deviceLabel:this.config.deviceLabel})),this.devicesEl=this.$el.find("."+t+"devices"),this.devicesEl.append(this.getOptions()),this.el.className=t+"devices-c",this}})},function(t,e,n){"use strict";t.exports=function(){var t,e,i={},r=n(88),o=n(89),s=n(27);return{compTypes:"",name:"Parser",init:function(n){i=n||{};for(var a in r)a in i||(i[a]=r[a]);return t=new s(i),e=new o(i),this},parseHtml:function(n){return t.compTypes=this.compTypes,t.parse(n,e)},parseCss:function(t){return e.parse(t)}}}},function(t,e,n){"use strict";t.exports={textTags:["br","b","i","u","a","ul","ol"]}},function(t,e,n){"use strict";var i=n(1),r={4:"media",5:"font-face",6:"page",7:"keyframes",11:"counter-style",12:"supports",13:"document",14:"font-feature-values",15:"viewport"},o=(0,i.keys)(r),s=["5","6","11","15"];t.exports=function(t){return{parseSelector:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=[],n=[],i=t.split(","),r=0,o=i.length;r=0;if(p)u=1,h=r[c],d=this.parseCondition(l);else if(o.indexOf(c)>=0){var g=this.parseNode(l);d=this.parseCondition(l);for(var v=0,m=g.length;v1&&void 0!==arguments[1]?arguments[1]:{};(0,r.isObject)(t)?e=t:e.name=t,o(e.name)&&(e.name=e.name.substr(1),e.type=u.TYPE_ID),e.label&&!e.name&&(e.name=u.escapeName(e.label));var n=e.name,i=n?this.get(n,e.type):s.where(e)[0];return i||s.add(e)}),i(e,"addClass",function(t){var e=[];return(0,r.isString)(t)&&(t=t.trim().split(" ")),t.forEach(function(t){return e.push(s.add({name:t}))}),e}),i(e,"get",function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u.TYPE_CLASS;return o(t)&&(t=t.substr(1),e=u.TYPE_ID),s.where({name:t,type:e})[0]}),i(e,"getAll",function(){return s}),i(e,"render",function(t){if(t){return new d({collection:new h(t),config:l}).render().el}return a.render().el}),e}},function(t,e,n){"use strict";t.exports={stylePrefix:"clm-",appendTo:"",selectors:[],label:"Classes",statesLabel:"- State -",selectedLabel:"Selected",states:[{name:"hover",label:"Hover"},{name:"active",label:"Click"},{name:"nth-of-type(2n)",label:"Even/Odd"}]}},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(93);t.exports=a.default.View.extend({template:o.default.template('\n
    \n
    <%= label %>
    \n
    \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    <%= selectedLabel %>
    \n
    \n
    \n
    '),events:{},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.className=this.pfx+"tags",this.addBtnId=this.pfx+"add-tag",this.newInputId=this.pfx+"new",this.stateInputId=this.pfx+"states",this.stateInputC=this.pfx+"input-c",this.states=this.config.states||[],this.events["click #"+this.addBtnId]="startNewTag",this.events["blur #"+this.newInputId]="endNewTag",this.events["keyup #"+this.newInputId]="onInputKeyUp",this.events["change #"+this.stateInputId]="stateChanged",this.target=this.config.em,this.em=this.target,this.listenTo(this.target,"component:toggled",this.componentChanged),this.listenTo(this.target,"component:update:classes",this.updateSelector),this.listenTo(this.collection,"add",this.addNew),this.listenTo(this.collection,"reset",this.renderClasses),this.listenTo(this.collection,"remove",this.tagRemoved),this.delegateEvents()},tagRemoved:function(t){this.updateStateVis()},getStateOptions:function(){for(var t="",e=0;e'+this.states[e].label+"";return t},addNew:function(t){this.addToClasses(t)},startNewTag:function(t){this.$addBtn.get(0).style.display="none",this.$input.show().focus()},endNewTag:function(t){this.$addBtn.get(0).style.display="",this.$input.hide().val("")},onInputKeyUp:function(t){13===t.keyCode?this.addNewTag(this.$input.val()):27===t.keyCode&&this.endNewTag()},componentChanged:function(t){this.compTarget=this.target.getSelected();var e=this.compTarget,n=[];e&&(this.getStates().val(e.get("state")),n=e.get("classes").getValid()),this.collection.reset(n),this.updateStateVis()},updateStateVis:function(){var t=this.em,e=t&&t.getConfig("avoidInlineStyle");this.collection.length||e?this.getStatesC().css("display","block"):this.getStatesC().css("display","none"),this.updateSelector()},updateSelector:function(){var t=this.target.getSelected();if(this.compTarget=t,t&&t.get){var e=t.get("state"),n=this.collection,i=n.getFullString(n.getStyleable());i=i||"#"+t.getId(),i+=e?":"+e:"";var r=this.el.querySelector("#"+this.pfx+"sel");r&&(r.innerHTML=i)}},stateChanged:function(t){this.compTarget&&(this.compTarget.set("state",this.$states.val()),this.updateSelector())},addNewTag:function(t){var e=this.target,n=this.compTarget;if(t.trim()){if(e){var i=e.get("SelectorManager"),r=i.add({label:t});if(n){var o=n.get("classes");o.length;o.add(r);o.length;this.collection.add(r),this.updateStateVis()}}this.endNewTag()}},addToClasses:function(t,e){var n=e||null,i=new l({model:t,config:this.config,coll:this.collection}),r=i.render().el;return n?n.appendChild(r):this.getClasses().append(r),r},renderClasses:function(){var t=document.createDocumentFragment();return this.collection.each(function(e){this.addToClasses(e,t)},this),this.getClasses()&&this.getClasses().empty().append(t),this},getClasses:function(){return this.$classes||(this.$classes=this.$el.find("#"+this.pfx+"tags-c")),this.$classes},getStates:function(){return this.$states||(this.$states=this.$el.find("#"+this.stateInputId)),this.$states},getStatesC:function(){return this.$statesC||(this.$statesC=this.$el.find("#"+this.stateInputC)),this.$statesC},render:function(){var t=this.ppfx,e=this.config,n=this.$el;return n.html(this.template({selectedLabel:e.selectedLabel,statesLabel:e.statesLabel,label:e.label,pfx:this.pfx,ppfx:this.ppfx})),this.$input=n.find("input#"+this.newInputId),this.$addBtn=n.find("#"+this.addBtnId),this.$classes=n.find("#"+this.pfx+"tags-c"),this.$states=n.find("#"+this.stateInputId),this.$statesC=n.find("#"+this.stateInputC),this.$states.append(this.getStateOptions()),this.renderClasses(),n.attr("class",this.className+" "+t+"one-bg "+t+"two-color"),this}})},function(t,e,n){"use strict";var i=n(8);t.exports=n(0).View.extend({template:function(){var t=this.pfx;this.ppfx;return'\n \n '+(this.model.get("label")||"")+'\n \n ⨯\n \n '},events:{"click [data-tag-remove]":"removeTag","click [data-tag-status]":"changeStatus","dblclick [data-tag-name]":"startEditTag","focusout [data-tag-name]":"endEditTag"},initialize:function(t){this.config=t.config||{},this.coll=t.coll||null,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.target=this.config.em,this.listenTo(this.model,"change:active",this.updateStatus)},getInputEl:function(){return this.inputEl||(this.inputEl=this.el.querySelector("[data-tag-name]")),this.inputEl},startEditTag:function(){var t=this.getInputEl();t.contentEditable=!0,t.focus()},endEditTag:function(){var t=this.model,e=this.getInputEl(),n=e.textContent,r=i.escapeName(n),o=this.target,s=o&&o.get("SelectorManager");e.contentEditable=!1,s&&(s.get(r)?e.innerText=t.get("label"):t.set({name:r,label:n}))},changeStatus:function(){this.model.set("active",!this.model.get("active"))},removeTag:function(t){var e=this,n=this.target,i=this.model,r=this.coll,o=(this.el,n&&n.getSelected());o&&(o.get,o.get("classes").remove(i)),r&&r.remove(i),setTimeout(function(){return e.remove()},0)},updateStatus:function(){var t="fa-check-square-o";this.$chk||(this.$chk=this.$el.find("#"+this.pfx+"checkbox")),this.model.get("active")?(this.$chk.removeClass("fa-square-o").addClass(t),this.$el.removeClass("opac50")):(this.$chk.removeClass(t).addClass("fa-square-o"),this.$el.addClass("opac50"))},render:function(){var t=this.pfx,e=this.ppfx;return this.$el.html(this.template()),this.$el.attr("class",t+"tag "+e+"three-bg"),this.updateStatus(),this}})},function(t,e,n){"use strict";t.exports=function(){var t,e,i={},r=n(95),o=n(96),s=n(97);return{name:"Modal",init:function(n){i=n||{};for(var a in r)a in i||(i[a]=r[a]);var l=i.pStylePrefix;return l&&(i.stylePrefix=l+i.stylePrefix),t=new o(i),e=new s({model:t,config:i}),this},postRender:function(t){var e=t.model.getConfig().el||t.el;this.render().appendTo(e)},open:function(){return e.show(),this},close:function(){return e.hide(),this},isOpen:function(){return!!t.get("open")},setTitle:function(e){return t.set("title",e),this},getTitle:function(){return t.get("title")},setContent:function(e){return t.set("content"," "),t.set("content",e),this},getContent:function(){return t.get("content")},getContentEl:function(){return e.getContent().get(0)},getModel:function(){return t},render:function(){return e.render().$el}}}},function(t,e,n){"use strict";t.exports={stylePrefix:"mdl-",title:"",content:"",backdrop:!0}},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{title:"",content:"",open:!1}})},function(t,e,n){"use strict";t.exports=n(0).View.extend({template:function(t){var e=t.pfx,n=t.ppfx,i=t.content;return'
    \n
    \n
    '+t.title+'
    \n
    \n
    \n
    \n
    '+i+'
    \n
    \n
    \n
    \n
    \n '},events:{},initialize:function(t){var e=this.model,n=t.config||{},i=n.stylePrefix||"",r=n.backdrop;this.config=n,this.pfx=i,this.ppfx=n.pStylePrefix||"",this.listenTo(e,"change:open",this.updateOpen),this.listenTo(e,"change:title",this.updateTitle),this.listenTo(e,"change:content",this.updateContent),this.events["click ."+i+"btn-close"]="hide",r&&(this.events["click ."+i+"backlayer"]="hide"),this.delegateEvents()},getCollector:function(){return this.$collector||(this.$collector=this.$el.find("."+this.pfx+"collector")),this.$collector},getContent:function(){var t=this.pfx;return this.$content||(this.$content=this.$el.find("."+t+"content #"+t+"c")),this.$content},getTitle:function(){return this.$title||(this.$title=this.$el.find("."+this.pfx+"title")),this.$title.get(0)},updateContent:function(){var t=this.getContent(),e=t.children(),n=this.getCollector(),i=this.model.get("content");e.length&&n.append(e),t.empty().append(i)},updateTitle:function(){var t=this.getTitle();t&&(t.innerHTML=this.model.get("title"))},updateOpen:function(){this.el.style.display=this.model.get("open")?"":"none"},hide:function(){this.model.set("open",0)},show:function(){this.model.set("open",1)},render:function(){var t=this.$el,e=this.pfx,n=(this.ppfx,this.model.toJSON());return n.pfx=this.pfx,n.ppfx=this.ppfx,t.html(this.template(n)),t.attr("class",e+"container"),this.updateOpen(),this}})},function(t,e,n){"use strict";t.exports=function(){var t={},e=n(99),i=n(100),r=n(101),o=n(102),s=n(103),a=n(104),l=n(109),c={},u={},h={},d={};return{getConfig:function(){return t},config:t,EditorView:l,name:"CodeManager",init:function(n){t=n||{};for(var l in e)l in t||(t[l]=e[l]);var c=t.pStylePrefix;return c&&(t.stylePrefix=c+t.stylePrefix),u.html=new i,u.css=new r,u.json=new o,u.js=new s,d.CodeMirror=new a,this.loadDefaultGenerators().loadDefaultViewers(),this},addGenerator:function(t,e){return c[t]=e,this},getGenerator:function(t){return c[t]||null},getGenerators:function(){return c},addViewer:function(t,e){return h[t]=e,this},getViewer:function(t){return h[t]||null},getViewers:function(){return h},updateViewer:function(t,e){t.setContent(e)},getCode:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};i.em=t.em;var r=this.getGenerator(n);return r?r.build(e,i):""},loadDefaultGenerators:function(){for(var t in u)this.addGenerator(t,u[t]);return this},loadDefaultViewers:function(){for(var t in d)this.addViewer(t,d[t]);return this}}}},function(t,e,n){"use strict";t.exports={stylePrefix:"cm-",inlineCss:!1}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=r.default.Model.extend({build:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.get("components");return e.exportWrapper?e.wrappesIsBody?""+this.buildModels(n)+"":t.toHTML():this.buildModels(n)},buildModels:function(t){var e="";return t.each(function(t){e+=t.toHTML()}),e}})},function(t,e,n){"use strict";var i=n(1);t.exports=n(0).Model.extend({initialize:function(){this.compCls=[],this.ids=[]},buildFromModel:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i="",r=this.em,o=r&&r.getConfig("avoidInlineStyle"),s=t.styleToString(),a=t.get("classes"),l=n.wrappesIsBody,c=t.get("wrapper");if(this.ids.push("#"+t.getId()),a.each(function(t){return e.compCls.push(t.getFullName())}),(!o||c)&&s){var u="#"+t.getId();u=l&&c?"body":u,i=u+"{"+s+"}"}return t.components().each(function(t){return i+=e.buildFromModel(t,n)}),i},build:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.cssc,o=n.em||"";this.em=o,this.compCls=[],this.ids=[];var s=this.buildFromModel(t,n),a=(0,i.isUndefined)(n.clearStyles)&&o?o.getConfig("clearStyles"):n.clearStyles;return r&&function(){var t=r.getAll(),i={},l=[];t.each(function(t){var r=t.getAtRule();if(r){var o=i[r];return void(o?o.push(t):i[r]=[t])}s+=e.buildFromRule(t,l,n)});for(var c in i){var u="";i[c].forEach(function(t){return u+=e.buildFromRule(t,l,n)}),u&&(s+=c+"{"+u+"}")}o&&a&&t.remove(l)}(),s},buildFromRule:function(t,e){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r="",o=t.selectorsToString({skipAdd:1}),s=t.get("selectorsAdd"),a=t.get("singleAtRule"),l=void 0;if(t.get("selectors").each(function(t){var e=t.getFullName();(n.compCls.indexOf(e)>=0||n.ids.indexOf(e)>=0||i.keepUnusedStyles)&&(l=1)}),o&&l||s||a){var c=t.getDeclaration();c&&(r+=c)}else e.push(t);return r}})},function(t,e,n){"use strict";var i=n(1),r=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(r);t.exports=o.default.Model.extend({build:function(t){var e=t.toJSON();return this.beforeEach(e),(0,i.each)(e,function(t,n){var i=e[n];if(i instanceof o.default.Model)e[n]=this.build(i);else if(i instanceof o.default.Collection){var r=i;e[n]=[],r.length&&r.each(function(t,i){e[n][i]=this.build(t)},this)}},this),e},beforeEach:function(t){delete t.status}})},function(t,e,n){"use strict";var i=n(1),r=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(r);t.exports=o.default.Model.extend({mapModel:function(t){var e="",n=t.get("script"),r=t.get("type"),o=t.get("components"),s=t.getId();if(n){var a=t.get("attributes");a=(0,i.extend)({},a,{id:s}),t.set("attributes",a);var l=t.getScriptString();if(t.get("scriptUpdated"))this.mapJs[r+"-"+s]={ids:[s],code:l};else{var c=this.mapJs[r];c?c.ids.push(s):this.mapJs[r]={ids:[s],code:l}}}return o.each(function(t){e+=this.mapModel(t)},this),e},build:function(t){this.mapJs={},this.mapModel(t);var e="";for(var n in this.mapJs){var i=this.mapJs[n];e+="\n var items = document.querySelectorAll('"+("#"+i.ids.join(", #"))+"');\n for (var i = 0, len = items.length; i < len; i++) {\n (function(){"+i.code+"}.bind(items[i]))();\n }"}return e}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e-1?t.backUp(i.length-r):i.match(/<\/?$/)&&(t.backUp(i.length),t.match(e,!1)||t.match(i)),n}function n(t){var e=l[t];return e||(l[t]=new RegExp("\\s+"+t+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"))}function i(t,e){var i=t.match(n(e));return i?/^\s*(.*?)\s*$/.exec(i[2])[1]:""}function r(t,e){return new RegExp((e?"^":"")+"","i")}function o(t,e){for(var n in t)for(var i=e[n]||(e[n]=[]),r=t[n],o=r.length-1;o>=0;o--)i.unshift(r[o])}function s(t,e){for(var n=0;n\s\/]/.test(i.current())&&(a=o.htmlState.tagName&&o.htmlState.tagName.toLowerCase())&&u.hasOwnProperty(a))o.inTag=a+" ";else if(o.inTag&&d&&/>$/.test(i.current())){var f=/^([\S]+) (.*)/.exec(o.inTag);o.inTag=null;var p=">"==i.current()&&s(u[f[1]],f[2]),g=t.getMode(n,p),v=r(f[1],!0),m=r(f[1],!1);o.token=function(t,n){return t.match(v,!1)?(n.token=l,n.localState=n.localMode=null,null):e(t,m,n.localMode.token(t,n.localState))},o.localMode=g,o.localState=t.startState(g,c.indent(o.htmlState,""))}else o.inTag&&(o.inTag+=i.current(),i.eol()&&(o.inTag+=" "));return h}var c=t.getMode(n,{name:"xml",htmlMode:!0,multilineTagIndentFactor:i.multilineTagIndentFactor,multilineTagIndentPastTag:i.multilineTagIndentPastTag}),u={},h=i&&i.tags,d=i&&i.scriptTypes;if(o(a,u),h&&o(h,u),d)for(var f=d.length-1;f>=0;f--)u.script.unshift(["type",d[f].matches,d[f].mode]);return{startState:function(){return{token:l,inTag:null,localMode:null,localState:null,htmlState:t.startState(c)}},copyState:function(e){var n;return e.localState&&(n=t.copyState(e.localMode,e.localState)),{token:e.token,inTag:e.inTag,localMode:e.localMode,localState:n,htmlState:t.copyState(c,e.htmlState)}},token:function(t,e){return e.token(t,e)},indent:function(e,n,i){return!e.localMode||/^\s*<\//.test(n)?c.indent(e.htmlState,n):e.localMode.indent?e.localMode.indent(e.localState,n,i):t.Pass},innerMode:function(t){return{state:t.localState||t.htmlState,mode:t.localMode||c}}}},"xml","javascript","css"),t.defineMIME("text/html","htmlmixed")})},function(t,e,n){!function(t){t(n(6))}(function(t){"use strict";var e={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};t.defineMode("xml",function(i,r){function o(t,e){function n(n){return e.tokenize=n,n(t,e)}var i=t.next();if("<"==i)return t.eat("!")?t.eat("[")?t.match("CDATA[")?n(l("atom","]]>")):null:t.match("--")?n(l("comment","--\x3e")):t.match("DOCTYPE",!0,!0)?(t.eatWhile(/[\w\._\-]/),n(c(1))):null:t.eat("?")?(t.eatWhile(/[\w\._\-]/),e.tokenize=l("meta","?>"),"meta"):(E=t.eat("/")?"closeTag":"openTag",e.tokenize=s,"tag bracket");if("&"==i){var r;return r=t.eat("#")?t.eat("x")?t.eatWhile(/[a-fA-F\d]/)&&t.eat(";"):t.eatWhile(/[\d]/)&&t.eat(";"):t.eatWhile(/[\w\.\-:]/)&&t.eat(";"),r?"atom":"error"}return t.eatWhile(/[^&<]/),null}function s(t,e){var n=t.next();if(">"==n||"/"==n&&t.eat(">"))return e.tokenize=o,E=">"==n?"endTag":"selfcloseTag","tag bracket";if("="==n)return E="equals",null;if("<"==n){e.tokenize=o,e.state=f,e.tagName=e.tagStart=null;var i=e.tokenize(t,e);return i?i+" tag error":"tag error"}return/[\'\"]/.test(n)?(e.tokenize=a(n),e.stringStartCol=t.column(),e.tokenize(t,e)):(t.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function a(t){var e=function(e,n){for(;!e.eol();)if(e.next()==t){n.tokenize=s;break}return"string"};return e.isInAttribute=!0,e}function l(t,e){return function(n,i){for(;!n.eol();){if(n.match(e)){i.tokenize=o;break}n.next()}return t}}function c(t){return function(e,n){for(var i;null!=(i=e.next());){if("<"==i)return n.tokenize=c(t+1),n.tokenize(e,n);if(">"==i){if(1==t){n.tokenize=o;break}return n.tokenize=c(t-1),n.tokenize(e,n)}}return"meta"}}function u(t,e,n){this.prev=t.context,this.tagName=e,this.indent=t.indented,this.startOfLine=n,(k.doNotIndent.hasOwnProperty(e)||t.context&&t.context.noIndent)&&(this.noIndent=!0)}function h(t){t.context&&(t.context=t.context.prev)}function d(t,e){for(var n;;){if(!t.context)return;if(n=t.context.tagName,!k.contextGrabbers.hasOwnProperty(n)||!k.contextGrabbers[n].hasOwnProperty(e))return;h(t)}}function f(t,e,n){return"openTag"==t?(n.tagStart=e.column(),p):"closeTag"==t?g:f}function p(t,e,n){return"word"==t?(n.tagName=e.current(),M="tag",y):k.allowMissingTagName&&"endTag"==t?(M="tag bracket",y(t,e,n)):(M="error",p)}function g(t,e,n){if("word"==t){var i=e.current();return n.context&&n.context.tagName!=i&&k.implicitlyClosed.hasOwnProperty(n.context.tagName)&&h(n),n.context&&n.context.tagName==i||!1===k.matchClosing?(M="tag",v):(M="tag error",m)}return k.allowMissingTagName&&"endTag"==t?(M="tag bracket",v(t,e,n)):(M="error",m)}function v(t,e,n){return"endTag"!=t?(M="error",v):(h(n),f)}function m(t,e,n){return M="error",v(t,e,n)}function y(t,e,n){if("word"==t)return M="attribute",b;if("endTag"==t||"selfcloseTag"==t){var i=n.tagName,r=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==t||k.autoSelfClosers.hasOwnProperty(i)?d(n,i):(d(n,i),n.context=new u(n,i,r==n.indented)),f}return M="error",y}function b(t,e,n){return"equals"==t?x:(k.allowMissing||(M="error"),y(t,e,n))}function x(t,e,n){return"string"==t?w:"word"==t&&k.allowUnquoted?(M="string",y):(M="error",y(t,e,n))}function w(t,e,n){return"string"==t?w:y(t,e,n)}var C=i.indentUnit,k={},S=r.htmlMode?e:n;for(var T in S)k[T]=S[T];for(var T in r)k[T]=r[T];var E,M;return o.isInText=!0,{startState:function(t){var e={tokenize:o,state:f,indented:t||0,tagName:null,tagStart:null,context:null};return null!=t&&(e.baseIndent=t),e},token:function(t,e){if(!e.tagName&&t.sol()&&(e.indented=t.indentation()),t.eatSpace())return null;E=null;var n=e.tokenize(t,e);return(n||E)&&"comment"!=n&&(M=null,e.state=e.state(E||n,t,e),M&&(n="error"==M?n+" error":M)),n},indent:function(e,n,i){var r=e.context;if(e.tokenize.isInAttribute)return e.tagStart==e.indented?e.stringStartCol+1:e.indented+C;if(r&&r.noIndent)return t.Pass;if(e.tokenize!=s&&e.tokenize!=o)return i?i.match(/^(\s*)/)[0].length:0;if(e.tagName)return!1!==k.multilineTagIndentPastTag?e.tagStart+e.tagName.length+2:e.tagStart+C*(k.multilineTagIndentFactor||1);if(k.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:k.htmlMode?"html":"xml",helperType:k.htmlMode?"html":"xml",skipAttribute:function(t){t.state==x&&(t.state=y)}}}),t.defineMIME("text/xml","xml"),t.defineMIME("application/xml","xml"),t.mimeModes.hasOwnProperty("text/html")||t.defineMIME("text/html",{name:"xml",htmlMode:!0})})},function(t,e,n){!function(t){t(n(6))}(function(t){"use strict";t.defineMode("javascript",function(e,n){function i(t){for(var e,n=!1,i=!1;null!=(e=t.next());){if(!n){if("/"==e&&!i)return;"["==e?i=!0:i&&"]"==e&&(i=!1)}n=!n&&"\\"==e}}function r(t,e,n){return zt=t,Ht=n,e}function o(t,e){var n=t.next();if('"'==n||"'"==n)return e.tokenize=s(n),e.tokenize(t,e);if("."==n&&t.match(/^\d+(?:[eE][+\-]?\d+)?/))return r("number","number");if("."==n&&t.match(".."))return r("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(n))return r(n);if("="==n&&t.eat(">"))return r("=>","operator");if("0"==n&&t.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i))return r("number","number");if(/\d/.test(n))return t.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/),r("number","number");if("/"==n)return t.eat("*")?(e.tokenize=a,a(t,e)):t.eat("/")?(t.skipToEnd(),r("comment","comment")):Rt(t,e,1)?(i(t),t.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),r("regexp","string-2")):(t.eat("="),r("operator","operator",t.current()));if("`"==n)return e.tokenize=l,l(t,e);if("#"==n)return t.skipToEnd(),r("error","error");if(Kt.test(n))return">"==n&&e.lexical&&">"==e.lexical.type||(t.eat("=")?"!"!=n&&"="!=n||t.eat("="):/[<>*+\-]/.test(n)&&(t.eat(n),">"==n&&t.eat(n))),r("operator","operator",t.current());if(Ut.test(n)){t.eatWhile(Ut);var o=t.current();if("."!=e.lastType){if(qt.propertyIsEnumerable(o)){var c=qt[o];return r(c.type,c.style,o)}if("async"==o&&t.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/,!1))return r("async","keyword",o)}return r("variable","variable",o)}}function s(t){return function(e,n){var i,s=!1;if($t&&"@"==e.peek()&&e.match(Gt))return n.tokenize=o,r("jsonld-keyword","meta");for(;null!=(i=e.next())&&(i!=t||s);)s=!s&&"\\"==i;return s||(n.tokenize=o),r("string","string")}}function a(t,e){for(var n,i=!1;n=t.next();){if("/"==n&&i){e.tokenize=o;break}i="*"==n}return r("comment","comment")}function l(t,e){for(var n,i=!1;null!=(n=t.next());){if(!i&&("`"==n||"$"==n&&t.eat("{"))){e.tokenize=o;break}i=!i&&"\\"==n}return r("quasi","string-2",t.current())}function c(t,e){e.fatArrowAt&&(e.fatArrowAt=null);var n=t.string.indexOf("=>",t.start);if(!(n<0)){if(Wt){var i=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(t.string.slice(t.start,n));i&&(n=i.index)}for(var r=0,o=!1,s=n-1;s>=0;--s){var a=t.string.charAt(s),l=Yt.indexOf(a);if(l>=0&&l<3){if(!r){++s;break}if(0==--r){"("==a&&(o=!0);break}}else if(l>=3&&l<6)++r;else if(Ut.test(a))o=!0;else{if(/["'\/]/.test(a))return;if(o&&!r){++s;break}}}o&&!r&&(e.fatArrowAt=s)}}function u(t,e,n,i,r,o){this.indented=t,this.column=e,this.type=n,this.prev=r,this.info=o,null!=i&&(this.align=i)}function h(t,e){for(var n=t.localVars;n;n=n.next)if(n.name==e)return!0;for(var i=t.context;i;i=i.prev)for(var n=i.vars;n;n=n.next)if(n.name==e)return!0}function d(t,e,n,i,r){var o=t.cc;for(Jt.state=t,Jt.stream=r,Jt.marked=null,Jt.cc=o,Jt.style=e,t.lexical.hasOwnProperty("align")||(t.lexical.align=!0);;){if((o.length?o.pop():Bt?O:M)(n,i)){for(;o.length&&o[o.length-1].lex;)o.pop()();return Jt.marked?Jt.marked:"variable"==n&&h(t,i)?"variable-2":e}}}function f(){for(var t=arguments.length-1;t>=0;t--)Jt.cc.push(arguments[t])}function p(){return f.apply(null,arguments),!0}function g(t,e){for(var n=e;n;n=n.next)if(n.name==t)return!0;return!1}function v(t){var e=Jt.state;if(Jt.marked="def",e.context)if("var"==e.lexical.info&&e.context&&e.context.block){var i=m(t,e.context);if(null!=i)return void(e.context=i)}else if(!g(t,e.localVars))return void(e.localVars=new x(t,e.localVars));n.globalVars&&!g(t,e.globalVars)&&(e.globalVars=new x(t,e.globalVars))}function m(t,e){if(e){if(e.block){var n=m(t,e.prev);return n?n==e.prev?e:new b(n,e.vars,!0):null}return g(t,e.vars)?e:new b(e.prev,new x(t,e.vars),!1)}return null}function y(t){return"public"==t||"private"==t||"protected"==t||"abstract"==t||"readonly"==t}function b(t,e,n){this.prev=t,this.vars=e,this.block=n}function x(t,e){this.name=t,this.next=e}function w(){Jt.state.context=new b(Jt.state.context,Jt.state.localVars,!1),Jt.state.localVars=Zt}function C(){Jt.state.context=new b(Jt.state.context,Jt.state.localVars,!0),Jt.state.localVars=null}function k(){Jt.state.localVars=Jt.state.context.vars,Jt.state.context=Jt.state.context.prev}function S(t,e){var n=function(){var n=Jt.state,i=n.indented;if("stat"==n.lexical.type)i=n.lexical.indented;else for(var r=n.lexical;r&&")"==r.type&&r.align;r=r.prev)i=r.indented;n.lexical=new u(i,Jt.stream.column(),t,null,n.lexical,e)};return n.lex=!0,n}function T(){var t=Jt.state;t.lexical.prev&&(")"==t.lexical.type&&(t.indented=t.lexical.indented),t.lexical=t.lexical.prev)}function E(t){function e(n){return n==t?p():";"==t?f():p(e)}return e}function M(t,e){return"var"==t?p(S("vardef",e),lt,E(";"),T):"keyword a"==t?p(S("form"),L,M,T):"keyword b"==t?p(S("form"),M,T):"keyword d"==t?Jt.stream.match(/^\s*$/,!1)?p():p(S("stat"),N,E(";"),T):"debugger"==t?p(E(";")):"{"==t?p(S("}"),C,X,T,k):";"==t?p():"if"==t?("else"==Jt.state.lexical.info&&Jt.state.cc[Jt.state.cc.length-1]==T&&Jt.state.cc.pop()(),p(S("form"),L,M,T,ft)):"function"==t?p(bt):"for"==t?p(S("form"),pt,M,T):"class"==t||Wt&&"interface"==e?(Jt.marked="keyword",p(S("form"),Ct,T)):"variable"==t?Wt&&"declare"==e?(Jt.marked="keyword",p(M)):Wt&&("module"==e||"enum"==e||"type"==e)&&Jt.stream.match(/^\s*\w/,!1)?(Jt.marked="keyword","enum"==e?p(Dt):"type"==e?p(tt,E("operator"),tt,E(";")):p(S("form"),ct,E("{"),S("}"),X,T,T)):Wt&&"namespace"==e?(Jt.marked="keyword",p(S("form"),O,X,T)):Wt&&"abstract"==e?(Jt.marked="keyword",p(M)):p(S("stat"),B):"switch"==t?p(S("form"),L,E("{"),S("}","switch"),C,X,T,T,k):"case"==t?p(O,E(":")):"default"==t?p(E(":")):"catch"==t?p(S("form"),w,A,M,T,k):"export"==t?p(S("stat"),Et,T):"import"==t?p(S("stat"),At,T):"async"==t?p(M):"@"==e?p(O,M):f(S("stat"),O,E(";"),T)}function A(t){if("("==t)return p(xt,E(")"))}function O(t,e){return _(t,e,!1)}function P(t,e){return _(t,e,!0)}function L(t){return"("!=t?f():p(S(")"),O,E(")"),T)}function _(t,e,n){if(Jt.state.fatArrowAt==Jt.stream.start){var i=n?H:z;if("("==t)return p(w,S(")"),G(xt,")"),T,E("=>"),i,k);if("variable"==t)return f(w,ct,E("=>"),i,k)}var r=n?I:D;return Xt.hasOwnProperty(t)?p(r):"function"==t?p(bt,r):"class"==t||Wt&&"interface"==e?(Jt.marked="keyword",p(S("form"),wt,T)):"keyword c"==t||"async"==t?p(n?P:O):"("==t?p(S(")"),N,E(")"),T,r):"operator"==t||"spread"==t?p(n?P:O):"["==t?p(S("]"),Nt,T,r):"{"==t?Y(U,"}",null,r):"quasi"==t?f(F,r):"new"==t?p(V(n)):"import"==t?p(O):p()}function N(t){return t.match(/[;\}\)\],]/)?f():f(O)}function D(t,e){return","==t?p(O):I(t,e,!1)}function I(t,e,n){var i=0==n?D:I,r=0==n?O:P;return"=>"==t?p(w,n?H:z,k):"operator"==t?/\+\+|--/.test(e)||Wt&&"!"==e?p(i):Wt&&"<"==e&&Jt.stream.match(/^([^>]|<.*?>)*>\s*\(/,!1)?p(S(">"),G(tt,">"),T,i):"?"==e?p(O,E(":"),r):p(r):"quasi"==t?f(F,i):";"!=t?"("==t?Y(P,")","call",i):"."==t?p(W,i):"["==t?p(S("]"),N,E("]"),T,i):Wt&&"as"==e?(Jt.marked="keyword",p(tt,i)):"regexp"==t?(Jt.state.lastType=Jt.marked="operator",Jt.stream.backUp(Jt.stream.pos-Jt.stream.start-1),p(r)):void 0:void 0}function F(t,e){return"quasi"!=t?f():"${"!=e.slice(e.length-2)?p(F):p(O,R)}function R(t){if("}"==t)return Jt.marked="string-2",Jt.state.tokenize=l,p(F)}function z(t){return c(Jt.stream,Jt.state),f("{"==t?M:O)}function H(t){return c(Jt.stream,Jt.state),f("{"==t?M:P)}function V(t){return function(e){return"."==e?p(t?$:j):"variable"==e&&Wt?p(ot,t?I:D):f(t?P:O)}}function j(t,e){if("target"==e)return Jt.marked="keyword",p(D)}function $(t,e){if("target"==e)return Jt.marked="keyword",p(I)}function B(t){return":"==t?p(T,M):f(D,E(";"),T)}function W(t){if("variable"==t)return Jt.marked="property",p()}function U(t,e){if("async"==t)return Jt.marked="property",p(U);if("variable"==t||"keyword"==Jt.style){if(Jt.marked="property","get"==e||"set"==e)return p(q);var n;return Wt&&Jt.state.fatArrowAt==Jt.stream.start&&(n=Jt.stream.match(/^\s*:\s*/,!1))&&(Jt.state.fatArrowAt=Jt.stream.pos+n[0].length),p(K)}return"number"==t||"string"==t?(Jt.marked=$t?"property":Jt.style+" property",p(K)):"jsonld-keyword"==t?p(K):Wt&&y(e)?(Jt.marked="keyword",p(U)):"["==t?p(O,J,E("]"),K):"spread"==t?p(P,K):"*"==e?(Jt.marked="keyword",p(U)):":"==t?f(K):void 0}function q(t){return"variable"!=t?f(K):(Jt.marked="property",p(bt))}function K(t){return":"==t?p(P):"("==t?f(bt):void 0}function G(t,e,n){function i(r,o){if(n?n.indexOf(r)>-1:","==r){var s=Jt.state.lexical;return"call"==s.info&&(s.pos=(s.pos||0)+1),p(function(n,i){return n==e||i==e?f():f(t)},i)}return r==e||o==e?p():p(E(e))}return function(n,r){return n==e||r==e?p():f(t,i)}}function Y(t,e,n){for(var i=3;i"),tt):void 0}function et(t){if("=>"==t)return p(tt)}function nt(t,e){return"variable"==t||"keyword"==Jt.style?(Jt.marked="property",p(nt)):"?"==e?p(nt):":"==t?p(tt):"["==t?p(O,J,E("]"),nt):void 0}function it(t,e){return"variable"==t&&Jt.stream.match(/^\s*[?:]/,!1)||"?"==e?p(it):":"==t?p(tt):f(tt)}function rt(t,e){return"<"==e?p(S(">"),G(tt,">"),T,rt):"|"==e||"."==t||"&"==e?p(tt):"["==t?p(E("]"),rt):"extends"==e||"implements"==e?(Jt.marked="keyword",p(tt)):void 0}function ot(t,e){if("<"==e)return p(S(">"),G(tt,">"),T,rt)}function st(){return f(tt,at)}function at(t,e){if("="==e)return p(tt)}function lt(t,e){return"enum"==e?(Jt.marked="keyword",p(Dt)):f(ct,J,ht,dt)}function ct(t,e){return Wt&&y(e)?(Jt.marked="keyword",p(ct)):"variable"==t?(v(e),p()):"spread"==t?p(ct):"["==t?Y(ct,"]"):"{"==t?Y(ut,"}"):void 0}function ut(t,e){return"variable"!=t||Jt.stream.match(/^\s*:/,!1)?("variable"==t&&(Jt.marked="property"),"spread"==t?p(ct):"}"==t?f():p(E(":"),ct,ht)):(v(e),p(ht))}function ht(t,e){if("="==e)return p(P)}function dt(t){if(","==t)return p(lt)}function ft(t,e){if("keyword b"==t&&"else"==e)return p(S("form","else"),M,T)}function pt(t,e){return"await"==e?p(pt):"("==t?p(S(")"),gt,E(")"),T):void 0}function gt(t){return"var"==t?p(lt,E(";"),mt):";"==t?p(mt):"variable"==t?p(vt):f(O,E(";"),mt)}function vt(t,e){return"in"==e||"of"==e?(Jt.marked="keyword",p(O)):p(D,mt)}function mt(t,e){return";"==t?p(yt):"in"==e||"of"==e?(Jt.marked="keyword",p(O)):f(O,E(";"),yt)}function yt(t){")"!=t&&p(O)}function bt(t,e){return"*"==e?(Jt.marked="keyword",p(bt)):"variable"==t?(v(e),p(bt)):"("==t?p(w,S(")"),G(xt,")"),T,Z,M,k):Wt&&"<"==e?p(S(">"),G(st,">"),T,bt):void 0}function xt(t,e){return"@"==e&&p(O,xt),"spread"==t?p(xt):Wt&&y(e)?(Jt.marked="keyword",p(xt)):f(ct,J,ht)}function wt(t,e){return"variable"==t?Ct(t,e):kt(t,e)}function Ct(t,e){if("variable"==t)return v(e),p(kt)}function kt(t,e){return"<"==e?p(S(">"),G(st,">"),T,kt):"extends"==e||"implements"==e||Wt&&","==t?("implements"==e&&(Jt.marked="keyword"),p(Wt?tt:O,kt)):"{"==t?p(S("}"),St,T):void 0}function St(t,e){return"async"==t||"variable"==t&&("static"==e||"get"==e||"set"==e||Wt&&y(e))&&Jt.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(Jt.marked="keyword",p(St)):"variable"==t||"keyword"==Jt.style?(Jt.marked="property",p(Wt?Tt:bt,St)):"["==t?p(O,J,E("]"),Wt?Tt:bt,St):"*"==e?(Jt.marked="keyword",p(St)):";"==t?p(St):"}"==t?p():"@"==e?p(O,St):void 0}function Tt(t,e){return"?"==e?p(Tt):":"==t?p(tt,ht):"="==e?p(P):f(bt)}function Et(t,e){return"*"==e?(Jt.marked="keyword",p(_t,E(";"))):"default"==e?(Jt.marked="keyword",p(O,E(";"))):"{"==t?p(G(Mt,"}"),_t,E(";")):f(M)}function Mt(t,e){return"as"==e?(Jt.marked="keyword",p(E("variable"))):"variable"==t?f(P,Mt):void 0}function At(t){return"string"==t?p():"("==t?f(O):f(Ot,Pt,_t)}function Ot(t,e){return"{"==t?Y(Ot,"}"):("variable"==t&&v(e),"*"==e&&(Jt.marked="keyword"),p(Lt))}function Pt(t){if(","==t)return p(Ot,Pt)}function Lt(t,e){if("as"==e)return Jt.marked="keyword",p(Ot)}function _t(t,e){if("from"==e)return Jt.marked="keyword",p(O)}function Nt(t){return"]"==t?p():f(G(P,"]"))}function Dt(){return f(S("form"),ct,E("{"),S("}"),G(It,"}"),T,T)}function It(){return f(ct,ht)}function Ft(t,e){return"operator"==t.lastType||","==t.lastType||Kt.test(e.charAt(0))||/[,.]/.test(e.charAt(0))}function Rt(t,e,n){return e.tokenize==o&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(e.lastType)||"quasi"==e.lastType&&/\{\s*$/.test(t.string.slice(0,t.pos-(n||0)))}var zt,Ht,Vt=e.indentUnit,jt=n.statementIndent,$t=n.jsonld,Bt=n.json||$t,Wt=n.typescript,Ut=n.wordCharacters||/[\w$\xa1-\uffff]/,qt=function(){function t(t){return{type:t,style:"keyword"}}var e=t("keyword a"),n=t("keyword b"),i=t("keyword c"),r=t("keyword d"),o=t("operator"),s={type:"atom",style:"atom"};return{if:t("if"),while:e,with:e,else:n,do:n,try:n,finally:n,return:r,break:r,continue:r,new:t("new"),delete:i,void:i,throw:i,debugger:t("debugger"),var:t("var"),const:t("var"),let:t("var"),function:t("function"),catch:t("catch"),for:t("for"),switch:t("switch"),case:t("case"),default:t("default"),in:o,typeof:o,instanceof:o,true:s,false:s,null:s,undefined:s,NaN:s,Infinity:s,this:t("this"),class:t("class"),super:t("atom"),yield:i,export:t("export"),import:t("import"),extends:i,await:i}}(),Kt=/[+\-*&%=<>!?|~^@]/,Gt=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/,Yt="([{}])",Xt={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0},Jt={state:null,column:null,marked:null,cc:null},Zt=new x("this",new x("arguments",null));return k.lex=!0,T.lex=!0,{startState:function(t){var e={tokenize:o,lastType:"sof",cc:[],lexical:new u((t||0)-Vt,0,"block",!1),localVars:n.localVars,context:n.localVars&&new b(null,null,!1),indented:t||0};return n.globalVars&&"object"==typeof n.globalVars&&(e.globalVars=n.globalVars),e},token:function(t,e){if(t.sol()&&(e.lexical.hasOwnProperty("align")||(e.lexical.align=!1),e.indented=t.indentation(),c(t,e)),e.tokenize!=a&&t.eatSpace())return null;var n=e.tokenize(t,e);return"comment"==zt?n:(e.lastType="operator"!=zt||"++"!=Ht&&"--"!=Ht?zt:"incdec",d(e,n,zt,Ht,t))},indent:function(e,i){if(e.tokenize==a)return t.Pass;if(e.tokenize!=o)return 0;var r,s=i&&i.charAt(0),l=e.lexical;if(!/^\s*else\b/.test(i))for(var c=e.cc.length-1;c>=0;--c){var u=e.cc[c];if(u==T)l=l.prev;else if(u!=ft)break}for(;("stat"==l.type||"form"==l.type)&&("}"==s||(r=e.cc[e.cc.length-1])&&(r==D||r==I)&&!/^[,\.=+\-*:?[\(]/.test(i));)l=l.prev;jt&&")"==l.type&&"stat"==l.prev.type&&(l=l.prev);var h=l.type,d=s==h;return"vardef"==h?l.indented+("operator"==e.lastType||","==e.lastType?l.info.length+1:0):"form"==h&&"{"==s?l.indented:"form"==h?l.indented+Vt:"stat"==h?l.indented+(Ft(e,i)?jt||Vt:0):"switch"!=l.info||d||0==n.doubleIndentSwitch?l.align?l.column+(d?0:1):l.indented+(d?0:Vt):l.indented+(/^(?:case|default)\b/.test(i)?Vt:2*Vt)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:Bt?null:"/*",blockCommentEnd:Bt?null:"*/",blockCommentContinue:Bt?null:" * ",lineComment:Bt?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:Bt?"json":"javascript",jsonldMode:$t,jsonMode:Bt,expressionAllowed:Rt,skipExpression:function(t){var e=t.cc[t.cc.length-1];e!=O&&e!=P||t.cc.pop()}}}),t.registerHelper("wordChars","javascript",/[\w$]/),t.defineMIME("text/javascript","javascript"),t.defineMIME("text/ecmascript","javascript"),t.defineMIME("application/javascript","javascript"),t.defineMIME("application/x-javascript","javascript"),t.defineMIME("application/ecmascript","javascript"),t.defineMIME("application/json",{name:"javascript",json:!0}),t.defineMIME("application/x-json",{name:"javascript",json:!0}),t.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),t.defineMIME("text/typescript",{name:"javascript",typescript:!0}),t.defineMIME("application/typescript",{name:"javascript",typescript:!0})})},function(t,e,n){!function(t){t(n(6))}(function(t){t.extendMode("css",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(t,e){return/^[;{}]$/.test(e)}}),t.extendMode("javascript",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(t,e,n,i){return this.jsonMode?/^[\[,{]$/.test(e)||/^}/.test(n):(";"!=e||!i.lexical||")"!=i.lexical.type)&&(/^[;{}]$/.test(e)&&!/^;/.test(n))}});var e=/^(a|abbr|acronym|area|base|bdo|big|br|button|caption|cite|code|col|colgroup|dd|del|dfn|em|frame|hr|iframe|img|input|ins|kbd|label|legend|link|map|object|optgroup|option|param|q|samp|script|select|small|span|strong|sub|sup|textarea|tt|var)$/;t.extendMode("xml",{commentStart:"\x3c!--",commentEnd:"--\x3e",newlineAfterToken:function(t,n,i,r){var o=!1;return"html"==this.configuration&&(o=!!r.context&&e.test(r.context.tagName)),!o&&("tag"==t&&/>$/.test(n)&&r.context||/^-1&&a>-1&&a>s&&(t=t.substr(0,s)+t.substring(s+o.commentStart.length,a)+t.substr(a+o.commentEnd.length)),r.replaceRange(t,n,i)}})}),t.defineExtension("autoIndentRange",function(t,e){var n=this;this.operation(function(){for(var i=t.line;i<=e.line;i++)n.indentLine(i,"smart")})}),t.defineExtension("autoFormatRange",function(e,n){function i(){c+="\n",h=!0,++u}for(var r=this,o=r.getMode(),s=r.getRange(e,n).split("\n"),a=t.copyState(o,r.getTokenAt(e).state),l=r.getOption("tabSize"),c="",u=0,h=0===e.ch,d=0;d\n \t
    <%= label %>
    \n \t
    \n '),initialize:function(t){this.config=t.config||{},this.pfx=this.config.stylePrefix},render:function(){var t=this.model.toJSON();return t.pfx=this.pfx,this.$el.html(this.template(t)),this.$el.attr("class",this.pfx+"editor-c"),this.$el.find("#"+this.pfx+"code").append(this.model.get("input")),this}})},function(t,e,n){"use strict";t.exports=function(){var t,e,i={},r=n(111),o=n(29),s=n(113),a=(n(31),n(116));return{name:"Panels",init:function(n){i=n||{};for(var o in r)o in i||(i[o]=r[o]);var l=i.pStylePrefix;return l&&(i.stylePrefix=l+i.stylePrefix),t=new s(i.defaults),e=new a({collection:t,config:i}),this},getPanels:function(){return t},getPanelsEl:function(){return e.el},addPanel:function(e){return t.add(e)},removePanel:function(e){return t.remove(e)},getPanel:function(e){var n=t.where({id:e});return n.length?n[0]:null},addButton:function(t,e){var n=this.getPanel(t);return n?n.get("buttons").add(e):null},removeButton:function(t,e){var n=this.getPanel(t);return n&&n.get("buttons").remove(e)},getButton:function(t,e){var n=this.getPanel(t);if(n){var i=n.get("buttons").where({id:e});return i.length?i[0]:null}return null},render:function(){return e.render().el},active:function(){this.getPanels().each(function(t){t.get("buttons").each(function(t){t.get("active")&&t.trigger("updateActive")})})},disableButtons:function(){this.getPanels().each(function(t){t.get("buttons").each(function(t){t.get("disable")&&t.trigger("change:disable")})})},Panel:o}}},function(t,e,n){"use strict";var i="sw-visibility",r="export-template",o="open-layers",s="open-blocks",a="fullscreen",l="preview";t.exports={stylePrefix:"pn-",defaults:[{id:"commands",buttons:[{}]},{id:"options",buttons:[{active:!0,id:i,className:"fa fa-square-o",command:i,context:i,attributes:{title:"View components"}},{id:l,className:"fa fa-eye",command:l,context:l,attributes:{title:"Preview"}},{id:a,className:"fa fa-arrows-alt",command:a,context:a,attributes:{title:"Fullscreen"}},{id:r,className:"fa fa-code",command:r,attributes:{title:"View code"}}]},{id:"views",buttons:[{id:"open-sm",className:"fa fa-paint-brush",command:"open-sm",active:!0,attributes:{title:"Open Style Manager"}},{id:"open-tm",className:"fa fa-cog",command:"open-tm",attributes:{title:"Settings"}},{id:o,className:"fa fa-bars",command:o,attributes:{title:"Open Layer Manager"}},{id:s,className:"fa fa-th-large",command:s,attributes:{title:"Open Blocks"}}]}],em:null,delayBtnsShow:300}},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{id:"",label:"",className:"",command:"",context:"",buttons:[],attributes:{},options:{},active:!1,dragDrop:!1,runDefaultCommand:!0,stopDefaultCommand:!1,disable:!1},initialize:function(t){if(this.get("buttons").length){var e=n(30);this.set("buttons",new e(this.get("buttons")))}}})},function(t,e,n){"use strict";var i=n(0),r=n(29);t.exports=i.Collection.extend({model:r})},function(t,e,n){"use strict";(function(e){var i=n(0),r=n(115);t.exports=i.View.extend({initialize:function(t){this.opt=t||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"",this.parentM=this.opt.parentM||null,this.listenTo(this.collection,"add",this.addTo),this.listenTo(this.collection,"reset remove",this.render),this.className=this.pfx+"buttons"},addTo:function(t){this.addToCollection(t)},addToCollection:function(t,e){var n=e||null,i=r,o=new i({model:t,config:this.config,parentM:this.parentM}),s=o.render().el;return n?n.appendChild(s):this.$el.append(s),s},render:function(){var t=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(e){this.addToCollection(e,t)},this),this.$el.append(t),this.$el.attr("class",e.result(this,"className")),this}})}).call(e,n(1))},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(1);r.default.$;t.exports=r.default.View.extend({tagName:"span",events:{click:"clicked"},initialize:function(t){var e=this.model.get("className");this.config=t.config||{},this.em=this.config.em||{};var n=this.config.stylePrefix||"",i=this.config.pStylePrefix||"";this.pfx=n,this.ppfx=this.config.pStylePrefix||"",this.id=n+this.model.get("id"),this.activeCls=n+"active "+i+"four-color",this.disableCls=n+"active",this.btnsVisCls=n+"visible",this.className=n+"btn"+(e?" "+e:""),this.listenTo(this.model,"change:active updateActive",this.updateActive),this.listenTo(this.model,"checkActive",this.checkActive),this.listenTo(this.model,"change:bntsVis",this.updateBtnsVis),this.listenTo(this.model,"change:attributes",this.updateAttributes),this.listenTo(this.model,"change:className",this.updateClassName),this.listenTo(this.model,"change:disable",this.updateDisable),this.em&&this.em.get&&(this.commands=this.em.get("Commands"))},updateClassName:function(){var t=this.model.get("className");this.$el.attr("class",this.pfx+"btn"+(t?" "+t:""))},updateAttributes:function(){this.$el.attr(this.model.get("attributes"))},updateBtnsVis:function(){this.$buttons&&(this.model.get("bntsVis")?this.$buttons.addClass(this.btnsVisCls):this.$buttons.removeClass(this.btnsVisCls))},updateActive:function(){var t=this.model,e=t.get("context"),n={},i=this.em&&this.em.get?this.em.get("Editor"):null,r=t.get("command");this.commands&&(0,o.isString)(r)?n=this.commands.get(r)||{}:(0,o.isFunction)(r)?n={run:r}:null!==r&&(0,o.isObject)(r)&&(n=r),t.get("active")?(t.collection.deactivateAll(e),t.set("active",!0,{silent:!0}).trigger("checkActive"),n.run&&(n.run(i,t,t.get("options")),i.trigger("run:"+r)),!n.stop&&t.set("active",!1)):(this.$el.removeClass(this.activeCls),t.collection.deactivateAll(e),n.stop&&(n.stop(i,t,t.get("options")),i.trigger("stop:"+r)))},updateDisable:function(){this.model.get("disable")?this.$el.addClass(this.disableCls):this.$el.removeClass(this.disableCls)},checkActive:function(){this.model.get("active")?this.$el.addClass(this.activeCls):this.$el.removeClass(this.activeCls)},clicked:function(t){this.model.get("bntsVis")||this.model.get("disable")||this.toogleActive()},toogleActive:function(){var t=this.model.get("active");this.model.set("active",!t);this.em.get("Commands").get("select-comp");t?this.model.get("runDefaultCommand")&&this.em.runDefault():this.model.get("stopDefaultCommand")&&this.em.stopDefault()},render:function(){var t=this.model.get("label"),e=this.$el;return this.updateAttributes(),e.attr("class",this.className),t&&e.append(t),this}})},function(t,e,n){"use strict";var i=n(0),r=n(31);t.exports=i.View.extend({initialize:function(t){this.opt=t||{},this.config=this.opt.config||{},this.pfx=this.config.stylePrefix||"";var e=this.collection;this.listenTo(e,"add",this.addTo),this.listenTo(e,"reset",this.render),this.listenTo(e,"remove",this.onRemove),this.className=this.pfx+"panels"},onRemove:function(t){var e=t.view;e&&e.remove()},addTo:function(t){this.addToCollection(t)},addToCollection:function(t,e){var n=e||null,i=this.config,o=t.get("el"),s=new r({el:o,model:t,config:i}),a=s.render().el,l=t.get("appendTo");if(o);else if(l){var c=document.querySelector(l);c.appendChild(a)}else n?n.appendChild(a):this.$el.append(a);return s.initResize(),a},render:function(){var t=this,e=this.$el,n=document.createDocumentFragment();return e.empty(),this.collection.each(function(e){return t.addToCollection(e,n)}),e.append(n),e.attr("class",this.className),this}})},function(t,e,n){"use strict";var i=n(118),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(2);t.exports=function(){var t={},e=n(119),i=void 0,s=void 0,a=void 0,l=void 0,c=function(){var t=i.style;t.top="-100px",t.left="-100px",t.display="none"};return{customRte:null,name:"RichTextEditor",init:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=n;for(var r in e)r in t||(t[r]=e[r]);var a=t.pStylePrefix;return a&&(t.stylePrefix=a+t.stylePrefix),this.pfx=t.stylePrefix,s=t.actions||[],i=document.createElement("div"),i.className=a+"rte-toolbar "+a+"one-bg",l=this.initRte(document.createElement("div")),(0,o.on)(i,"mousedown",function(t){return t.stopPropagation()}),this},postRender:function(t){var e=t.model.get("Canvas");i.style.pointerEvents="all",c(),e.getToolsEl().appendChild(i)},initRte:function(e){var n=this.pfx,o=i,s=this.actionbar,a=this.actions||t.actions,c={actionbar:n+"actionbar",button:n+"action",active:n+"active"},u=new r.default({el:e,classes:c,actions:a,actionbar:s,actionbarContainer:o});return l&&l.setEl(e),u.actionbar&&(this.actionbar=u.actionbar),u.actions&&(this.actions=u.actions),u},add:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.name=t,l.addAction(e,{sync:1})},get:function(t){var e=void 0;return l.getActions().forEach(function(n){n.name==t&&(e=n)}),e},getAll:function(){return l.getActions()},remove:function(t){var e=this.getAll(),n=this.get(t);if(n){var i=n.btn,r=e.indexOf(n);i.parentNode.removeChild(i),e.splice(r,1)}return n},getToolbarEl:function(){return i},udpatePosition:function(){var e=t.em.get("Canvas"),n=e.getTargetToElementDim(i,a,{event:"rteToolbarPosUpdate"});if(n){t.adjustToolbar&&n.top<=n.canvasTop&&(n.top=n.elementTop+n.elementHeight);var r=i.style;r.top=n.top+"px",r.left=n.left+"px"}},enable:function(e,n){a=e.el;var r=t.em,o=e.getChildrenContainer(),s=this.customRte;if(i.style.display="",n=s?s.enable(o,n):this.initRte(o).enable(),r){setTimeout(this.udpatePosition.bind(this),0);var l="change:canvasOffset canvasScroll";r.off(l,this.udpatePosition,this),r.on(l,this.udpatePosition,this),r.trigger("rte:enable",e,n)}return n},disable:function(e,n){var i=t.em,r=this.customRte,o=e.getChildrenContainer();r?r.disable(o,n):n&&n.disable(),c(),i&&i.trigger("rte:disable",e,n)}}}},function(t,e,n){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;eB",attributes:{title:"Bold"},result:function(t){return t.exec("bold")}},italic:{name:"italic",icon:"I",attributes:{title:"Italic"},result:function(t){return t.exec("italic")}},underline:{name:"underline",icon:"U",attributes:{title:"Underline"},result:function(t){return t.exec("underline")}},strikethrough:{name:"strikethrough",icon:"S",attributes:{title:"Strike-through"},result:function(t){return t.exec("strikeThrough")}},link:{icon:'',name:"link",attributes:{style:"font-size:1.4rem;padding:0 4px 2px;",title:"Link"},result:function(t){return t.insertHTML(''+t.selection()+"")}}},c=function(){function t(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,t);var o=n.el;if(o[a])return o[a];o[a]=this,this.setEl(o),this.updateActiveActions=this.updateActiveActions.bind(this);var s=n.actions||[];s.forEach(function(t,e){"string"==typeof t?t=l[t]:l[t.name]&&(t=r({},l[t.name],t)),s[e]=t});var c=s.length?s:Object.keys(l).map(function(t){return l[t]});n.classes=r({actionbar:"actionbar",button:"action",active:"active"},n.classes);var u=n.classes,h=n.actionbar;if(this.actionbar=h,this.settings=n,this.classes=u,this.actions=c,!h){var d=n.actionbarContainer;h=document.createElement("div"),h.className=u.actionbar,d.appendChild(h),this.actionbar=h,c.forEach(function(t){return e.addAction(t)})}return n.styleWithCSS&&this.exec("styleWithCSS"),this.syncActions(),this}return o(t,[{key:"setEl",value:function(t){this.el=t,this.doc=t.ownerDocument}},{key:"updateActiveActions",value:function(){var t=this;this.getActions().forEach(function(e){var n=e.btn,i=e.update,r=t.classes.active,o=e.name,s=t.doc;n.className=n.className.replace(r,"").trim(),s.queryCommandSupported(o)&&s.queryCommandState(o)&&(n.className+=" "+r),i&&i(t,e)})}},{key:"enable",value:function(){return this.enabled?this:(this.actionbarEl().style.display="",this.el.contentEditable=!0,(0,s.on)(this.el,"mouseup keyup",this.updateActiveActions),this.syncActions(),this.updateActiveActions(),this.el.focus(),this.enabled=1,this)}},{key:"disable",value:function(){return this.actionbarEl().style.display="none",this.el.contentEditable=!1,(0,s.off)(this.el,"mouseup keyup",this.updateActiveActions),this.enabled=0,this}},{key:"syncActions",value:function(){var t=this;this.getActions().forEach(function(e){var n=e.event||"click";e.btn["on"+n]=function(n){e.result(t,e),t.updateActiveActions()}})}},{key:"addAction",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.sync,i=document.createElement("span"),r=t.icon,o=t.attributes||{};i.className=this.classes.button,t.btn=i;for(var s in o)i.setAttribute(s,o[s]);"string"==typeof r?i.innerHTML=r:i.appendChild(r),this.actionbarEl().appendChild(i),n&&(this.actions.push(t),this.syncActions())}},{key:"getActions",value:function(){return this.actions}},{key:"selection",value:function(){return this.doc.getSelection()}},{key:"exec",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.doc.execCommand(t,!1,e)}},{key:"actionbarEl",value:function(){return this.actionbar}},{key:"insertHTML",value:function(t){var e=void 0,n=this.doc,i=n.getSelection();if(i&&i.rangeCount){var r=n.createElement("div"),o=i.getRangeAt(0);o.deleteContents(),r.innerHTML=t,Array.prototype.slice.call(r.childNodes).forEach(function(t){o.insertNode(t),e=t}),i.removeAllRanges(),i.addRange(o),this.el.focus()}}}]),t}();e.default=c},function(t,e,n){"use strict";t.exports={stylePrefix:"rte-",adjustToolbar:1,actions:["bold","italic","underline","strikethrough","link"]}},function(t,e,n){"use strict";t.exports={stylePrefix:"sm-",sectors:[],appendTo:"",textNoElement:"Select an element before using Style Manager",hideNotStylable:!0,highlightChanged:!0,highlightComputed:!0,showComputed:!0,clearProperties:0,avoidComputed:["width","height"]}},function(t,e,n){"use strict";var i=n(122);t.exports=n(0).Collection.extend({model:i})},function(t,e,n){"use strict";var i=n(1),r=n(0),o=n(12),s=n(131);t.exports=r.Model.extend({defaults:{id:"",name:"",open:!0,buildProps:"",extendBuilded:1,properties:[]},initialize:function(t){var e=t||{},n=[],i=this.buildProperties(e.buildProps);!this.get("id")&&this.set("id",this.get("name")),n=i?this.extendProperties(i):this.get("properties");var r=new o(n);r.sector=this,this.set("properties",r)},extendProperties:function(t,e,n){for(var r=t.length,o=e||this.get("properties"),s=this.get("extendBuilded"),a=[],l=0,c=o.length;l')}else{o.push(t("
    ").append(t('').attr("title",r.noColorSelectedText)).html())}}return"
    "+o.join("")+"
    "}function r(){for(var t=0;t1&&(delete window.localStorage[B],t.each(e,function(t,e){p(e)}))}catch(t){}try{vt=window.localStorage[B].split(";")}catch(t){}}}function p(e){if($){var n=st(e).toRgbString();if(!gt[n]&&-1===t.inArray(n,vt))for(vt.push(n);vt.length>mt;)vt.shift();if(B&&window.localStorage)try{window.localStorage[B]=vt.join(";")}catch(t){}}}function g(){var t=[];if(V.showPalette)for(var e=0;eMath.abs(e-r);bt=o?"x":"y"}}else bt=null;var s=!bt||"x"===bt,a=!bt||"y"===bt;s&&(ut=parseFloat(t/tt)),a&&(ht=parseFloat((et-e)/et)),Yt=!1,V.showAlpha||(dt=1),P()},y,b),Ut?(M(Ut),L(),Kt=V.preferredFormat||st(Ut).format,p(Ut)):L(),j&&C();var i=G?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Nt.delegate(".sp-thumb-el",i,e),Dt.delegate(".sp-thumb-el:nth-child(1)",i,{ignore:!0},e)}();var Jt={show:C,hide:T,toggle:w,reflow:D,option:F,enable:R,disable:z,offset:H,set:function(t){M(t),N()},get:A,destroy:I,container:kt};return Jt.id=K.push(Jt)-1,Jt}function a(e,n){var i=e.outerWidth(),r=e.outerHeight(),o=n.outerHeight(),s=e[0].ownerDocument,a=s.documentElement,l=a.clientWidth,c=a.clientHeight,u=t(s).scrollLeft(),h=t(s).scrollTop(),d=l+u,f=c+h,p=n.offset();return p.top+=o,p.left-=Math.min(p.left,p.left+i>d&&d>i?Math.abs(p.left+i-d):0),p.top-=Math.min(p.top,p.top+r>f&&f>r?Math.abs(r+o-0):0),p}function l(){}function c(t){t.stopPropagation()}function u(t,e){var n=Array.prototype.slice,i=n.call(arguments,2);return function(){return t.apply(e,i.concat(n.call(arguments)))}}function h(e,n,i,r){function o(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}function s(t){if(u){if(G&&c.documentMode<9&&!t.button)return l();var i=t.originalEvent&&t.originalEvent.touches&&t.originalEvent.touches[0],r=i&&i.pageX||t.pageX,s=i&&i.pageY||t.pageY,a=Math.max(0,Math.min(r-h.left,f)),g=Math.max(0,Math.min(s-h.top,d));p&&o(t),n.apply(e,[a,g,t])}}function a(n){(n.which?3==n.which:2==n.button)||u||!1!==i.apply(e,arguments)&&(u=!0,d=t(e).height(),f=t(e).width(),h=t(e).offset(),t(c).bind(g),t(c.body).addClass("sp-dragging"),s(n),o(n))}function l(){u&&(t(c).unbind(g),t(c.body).removeClass("sp-dragging"),setTimeout(function(){r.apply(e,arguments)},0)),u=!1}n=n||function(){},i=i||function(){},r=r||function(){};var c=document,u=!1,h={},d=0,f=0,p="ontouchstart"in window,g={};g.selectstart=o,g.dragstart=o,g["touchmove mousemove"]=s,g["touchend mouseup"]=l,t(e).bind("touchstart mousedown",a)}function d(t,e,n){var i;return function(){var r=this,o=arguments,s=function(){i=null,t.apply(r,o)};n&&clearTimeout(i),!n&&i||(i=setTimeout(s,e))}}function f(){return t.fn.spectrum.inputTypeColorSupport()}function p(t){var e={r:0,g:0,b:0},n=1,r=!1,o=!1;return"string"==typeof t&&(t=U(t)),"object"==(void 0===t?"undefined":i(t))&&(t.hasOwnProperty("r")&&t.hasOwnProperty("g")&&t.hasOwnProperty("b")?(e=g(t.r,t.g,t.b),r=!0,o="%"===String(t.r).substr(-1)?"prgb":"rgb"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("v")?(t.s=$(t.s),t.v=$(t.v),e=b(t.h,t.s,t.v),r=!0,o="hsv"):t.hasOwnProperty("h")&&t.hasOwnProperty("s")&&t.hasOwnProperty("l")&&(t.s=$(t.s),t.l=$(t.l),e=m(t.h,t.s,t.l),r=!0,o="hsl"),t.hasOwnProperty("a")&&(n=t.a)),n=I(n),{ok:r,format:t.format||o,r:it(255,rt(e.r,0)),g:it(255,rt(e.g,0)),b:it(255,rt(e.b,0)),a:n}}function g(t,e,n){return{r:255*F(t,255),g:255*F(e,255),b:255*F(n,255)}}function v(t,e,n){t=F(t,255),e=F(e,255),n=F(n,255);var i,r,o=rt(t,e,n),s=it(t,e,n),a=(o+s)/2;if(o==s)i=r=0;else{var l=o-s;switch(r=a>.5?l/(2-o-s):l/(o+s),o){case t:i=(e-n)/l+(e1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}var r,o,s;if(t=F(t,360),e=F(e,100),n=F(n,100),0===e)r=o=s=n;else{var a=n<.5?n*(1+e):n+e-n*e,l=2*n-a;r=i(l,a,t+1/3),o=i(l,a,t),s=i(l,a,t-1/3)}return{r:255*r,g:255*o,b:255*s}}function y(t,e,n){t=F(t,255),e=F(e,255),n=F(n,255);var i,r,o=rt(t,e,n),s=it(t,e,n),a=o,l=o-s;if(r=0===o?0:l/o,o==s)i=0;else{switch(o){case t:i=(e-n)/l+(e>1)+720)%360;--e;)i.h=(i.h+r)%360,o.push(st(i));return o}function D(t,e){e=e||6;for(var n=st(t).toHsv(),i=n.h,r=n.s,o=n.v,s=[],a=1/e;e--;)s.push(st({h:i,s:r,v:o})),o=(o+a)%1;return s}function I(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function F(t,e){H(t)&&(t="100%");var n=V(t);return t=it(e,rt(0,parseFloat(t))),n&&(t=parseInt(t*e,10)/100),et.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function R(t){return it(1,rt(0,t))}function z(t){return parseInt(t,16)}function H(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)}function V(t){return"string"==typeof t&&-1!=t.indexOf("%")}function j(t){return 1==t.length?"0"+t:""+t}function $(t){return t<=1&&(t=100*t+"%"),t}function B(t){return Math.round(255*parseFloat(t)).toString(16)}function W(t){return z(t)/255}function U(t){t=t.replace(Z,"").replace(Q,"").toLowerCase();var e=!1;if(at[t])t=at[t],e=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};var n;return(n=ct.rgb.exec(t))?{r:n[1],g:n[2],b:n[3]}:(n=ct.rgba.exec(t))?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=ct.hsl.exec(t))?{h:n[1],s:n[2],l:n[3]}:(n=ct.hsla.exec(t))?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=ct.hsv.exec(t))?{h:n[1],s:n[2],v:n[3]}:(n=ct.hsva.exec(t))?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=ct.hex8.exec(t))?{a:W(n[1]),r:z(n[2]),g:z(n[3]),b:z(n[4]),format:e?"name":"hex8"}:(n=ct.hex6.exec(t))?{r:z(n[1]),g:z(n[2]),b:z(n[3]),format:e?"name":"hex"}:!!(n=ct.hex3.exec(t))&&{r:z(n[1]+""+n[1]),g:z(n[2]+""+n[2]),b:z(n[3]+""+n[3]),format:e?"name":"hex"}}var q={beforeShow:l,move:l,change:l,show:l,hide:l,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!1,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",togglePaletteMoreText:"more",togglePaletteLessText:"less",clearText:"Clear Color Selection",noColorSelectedText:"No Color Selected",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,offset:null},K=[],G=!!/msie/i.exec(window.navigator.userAgent),Y=function(){function t(t,e){return!!~(""+t).indexOf(e)}var e=document.createElement("div"),n=e.style;return n.cssText="background-color:rgba(0,0,0,.5)",t(n.backgroundColor,"rgba")||t(n.backgroundColor,"hsla")}(),X=["
    ","
    ","
    ","
    "].join(""),J=function(){var t="";if(G)for(var e=1;e<=6;e++)t+="
    ";return["
    ","
    ","
    ","
    ","","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ",t,"
    ","
    ","
    ","
    ","
    ","","
    ","
    ","
    ","","","
    ","
    ","
    "].join("")}();t.fn.spectrum=function(e,n){if("string"==typeof e){var i=this,r=Array.prototype.slice.call(arguments,1);return this.each(function(){var n=K[t(this).data("spectrum.id")];if(n){var o=n[e];if(!o)throw new Error("Spectrum: no such method: '"+e+"'");"get"==e?i=n.get():"container"==e?i=n.container:"option"==e?i=n.option.apply(n,r):"destroy"==e?(n.destroy(),t(this).removeData("spectrum.id")):o.apply(n,r)}}),i}return this.spectrum("destroy").each(function(){var n=t.extend({},e,t(this).data()),i=s(this,n);t(this).data("spectrum.id",i.id)})},t.fn.spectrum.load=!0,t.fn.spectrum.loadOpts={},t.fn.spectrum.draggable=h,t.fn.spectrum.defaults=q,t.fn.spectrum.inputTypeColorSupport=function e(){if(void 0===e._cachedResult){var n=t("")[0];e._cachedResult="color"===n.type&&""!==n.value}return e._cachedResult},t.spectrum={},t.spectrum.localization={},t.spectrum.palettes={},t.fn.spectrum.processNativeColorInputs=function(){var e=t("input[type=color]");e.length&&!f()&&e.spectrum({preferredFormat:"hex6"})};var Z=/^[\s,#]+/,Q=/\s+$/,tt=0,et=Math,nt=et.round,it=et.min,rt=et.max,ot=et.random,st=function t(e,n){if(e=e||"",n=n||{},e instanceof t)return e;if(!(this instanceof t))return new t(e,n);var i=p(e);this._originalInput=e,this._r=i.r,this._g=i.g,this._b=i.b,this._a=i.a,this._roundA=nt(100*this._a)/100,this._format=n.format||i.format,this._gradientType=n.gradientType,this._r<1&&(this._r=nt(this._r)),this._g<1&&(this._g=nt(this._g)),this._b<1&&(this._b=nt(this._b)),this._ok=i.ok,this._tc_id=tt++};st.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},setAlpha:function(t){return this._a=I(t),this._roundA=nt(100*this._a)/100,this},toHsv:function(){var t=y(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=y(this._r,this._g,this._b),e=nt(360*t.h),n=nt(100*t.s),i=nt(100*t.v);return 1==this._a?"hsv("+e+", "+n+"%, "+i+"%)":"hsva("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHsl:function(){var t=v(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=v(this._r,this._g,this._b),e=nt(360*t.h),n=nt(100*t.s),i=nt(100*t.l);return 1==this._a?"hsl("+e+", "+n+"%, "+i+"%)":"hsla("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHex:function(t){return x(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(){return w(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:nt(this._r),g:nt(this._g),b:nt(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+nt(this._r)+", "+nt(this._g)+", "+nt(this._b)+")":"rgba("+nt(this._r)+", "+nt(this._g)+", "+nt(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:nt(100*F(this._r,255))+"%",g:nt(100*F(this._g,255))+"%",b:nt(100*F(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+nt(100*F(this._r,255))+"%, "+nt(100*F(this._g,255))+"%, "+nt(100*F(this._b,255))+"%)":"rgba("+nt(100*F(this._r,255))+"%, "+nt(100*F(this._g,255))+"%, "+nt(100*F(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(lt[x(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+w(this._r,this._g,this._b,this._a),n=e,i=this._gradientType?"GradientType = 1, ":"";if(t){n=st(t).toHex8String()}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+e+",endColorstr="+n+")"},toString:function(t){var e=!!t;t=t||this._format;var n=!1,i=this._a<1&&this._a>=0;return e||!i||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"name"!==t?("rgb"===t&&(n=this.toRgbString()),"prgb"===t&&(n=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(n=this.toHexString()),"hex3"===t&&(n=this.toHexString(!0)),"hex8"===t&&(n=this.toHex8String()),"name"===t&&(n=this.toName()),"hsl"===t&&(n=this.toHslString()),"hsv"===t&&(n=this.toHsvString()),n||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},_applyModification:function(t,e){var n=t.apply(null,[this].concat([].slice.call(e)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(T,arguments)},brighten:function(){return this._applyModification(E,arguments)},darken:function(){return this._applyModification(M,arguments)},desaturate:function(){return this._applyModification(C,arguments)},saturate:function(){return this._applyModification(k,arguments)},greyscale:function(){return this._applyModification(S,arguments)},spin:function(){return this._applyModification(A,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(N,arguments)},complement:function(){return this._applyCombination(O,arguments)},monochromatic:function(){return this._applyCombination(D,arguments)},splitcomplement:function(){return this._applyCombination(_,arguments)},triad:function(){return this._applyCombination(P,arguments)},tetrad:function(){return this._applyCombination(L,arguments)}},st.fromRatio=function(t,e){if("object"==(void 0===t?"undefined":i(t))){var n={};for(var r in t)t.hasOwnProperty(r)&&(n[r]="a"===r?t[r]:$(t[r]));t=n}return st(t,e)},st.equals=function(t,e){return!(!t||!e)&&st(t).toRgbString()==st(e).toRgbString()},st.random=function(){return st.fromRatio({r:ot(),g:ot(),b:ot()})},st.mix=function(t,e,n){n=0===n?0:n||50;var i,r=st(t).toRgb(),o=st(e).toRgb(),s=n/100,a=2*s-1,l=o.a-r.a;i=a*l==-1?a:(a+l)/(1+a*l),i=(i+1)/2;var c=1-i,u={r:o.r*i+r.r*c,g:o.g*i+r.g*c,b:o.b*i+r.b*c,a:o.a*s+r.a*(1-s)};return st(u)},st.readability=function(t,e){var n=st(t),i=st(e),r=n.toRgb(),o=i.toRgb(),s=n.getBrightness(),a=i.getBrightness(),l=Math.max(r.r,o.r)-Math.min(r.r,o.r)+Math.max(r.g,o.g)-Math.min(r.g,o.g)+Math.max(r.b,o.b)-Math.min(r.b,o.b);return{brightness:Math.abs(s-a),color:l}},st.isReadable=function(t,e){var n=st.readability(t,e);return n.brightness>125&&n.color>500},st.mostReadable=function(t,e){for(var n=null,i=0,r=!1,o=0;o125&&s.color>500,l=s.brightness/125*3+s.color/500;(a&&!r||a&&r&&l>i||!a&&!r&&l>i)&&(r=a,i=l,n=st(e[o]))}return n};var at=st.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},lt=st.hexNames=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[t[n]]=n);return e}(at),ct=function(){var t="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",e="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?",n="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?";return{rgb:new RegExp("rgb"+e),rgba:new RegExp("rgba"+n),hsl:new RegExp("hsl"+e),hsla:new RegExp("hsla"+n),hsv:new RegExp("hsv"+e),hsva:new RegExp("hsva"+n),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();window.tinycolor=st,t(function(){t.fn.spectrum.load&&t.fn.spectrum.processNativeColorInputs()})}},function(t,e,n){"use strict";var i=n(0),r=n(128);t.exports=i.View.extend({initialize:function(t){this.config=t.config||{},this.stackModel=t.stackModel,this.preview=t.preview,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"",this.propsConfig=t.propsConfig;var e=this.pfx,n=this.ppfx,i=this.collection;this.className=e+"layers "+n+"field",this.listenTo(i,"add",this.addTo),this.listenTo(i,"deselectAll",this.deselectAll),this.listenTo(i,"reset",this.render);var r=this.config.em||"",o=r?r.get("Utils"):"";this.sorter=o?new o.Sorter({container:this.el,ignoreViewChildren:1,containerSel:"."+e+"layers",itemSel:"."+e+"layer",pfx:this.config.pStylePrefix}):"",i.view=this,this.$el.data("model",i),this.$el.data("collection",i)},addTo:function(t){var e=this.collection.indexOf(t);this.addToCollection(t,null,e)},addToCollection:function(t,e,n){var i=e||null,o=this.stackModel,s=this.config,a=this.sorter,l=this.propsConfig;void 0!==this.preview&&t.set("preview",this.preview);var c=new r({model:t,config:s,sorter:a,stackModel:o,propsConfig:l}),u=c.render().el;if(i)i.appendChild(u);else if(void 0!==n){var h="before";this.$el.children().length==n&&(n--,h="after"),n<0?this.$el.append(u):this.$el.children().eq(n)[h](u)}else this.$el.append(u);return u},deselectAll:function(){this.$el.find("."+this.pfx+"layer").removeClass(this.pfx+"active")},render:function(){var t=document.createDocumentFragment();return this.$el.empty(),this.collection.each(function(e){this.addToCollection(e,t)},this),this.$el.append(t),this.$el.attr("class",this.className),this.sorter&&(this.sorter.plh=null),this}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=r.default.View.extend({events:{click:"active","click [data-close-layer]":"remove","mousedown [data-move-layer]":"initSorter"},template:function(t){var e=this.pfx;return'\n
    \n \n
    \n
    Layer '+t.get("index")+'
    \n
    \n \t
    \n
    \n
    \n ⨯\n
    \n
    \n
    \n '},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.model;this.stackModel=t.stackModel||{},this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.sorter=t.sorter||null,this.propsConfig=t.propsConfig||{},this.customPreview=t.onPreview,this.listenTo(e,"destroy remove",this.remove),this.listenTo(e,"change:active",this.updateVisibility),this.listenTo(e.get("properties"),"change",this.updatePreview),e.get("preview")||this.$el.addClass(this.pfx+"no-preview"),e.view=this,e.set({droppable:0,draggable:1}),this.$el.data("model",e)},initSorter:function(t){this.sorter&&this.sorter.startSort(this.el)},remove:function(t){t&&t.stopPropagation&&t.stopPropagation();var e=this.model,n=e.collection,i=this.stackModel;r.default.View.prototype.remove.apply(this,arguments),n.contains(e)&&n.remove(e),i&&i.set&&(i.set({stackIndex:null},{silent:!0}),i.trigger("updateValue"))},onPreview:function(t){var e=t.split(" "),n=[];return this.model.get("properties").each(function(t,i){var r=e[i]||"";if(r&&"integer"==t.get("type")){var o=parseInt(r,10),s=r.replace(o,"");o=isNaN(o)?0:o,o=o>3?3:o,o=o<-3?-3:o,r=o+s}n.push(r)}),n.join(" ")},updatePreview:function(){var t=this.stackModel,e=this.customPreview,n=this.getPreviewEl(),i=this.model.getFullValue(),r=e?e(i):this.onPreview(i);r&&t&&n&&(n.style[t.get("property")]=r)},getPropertiesWrapper:function(){return this.propsWrapEl||(this.propsWrapEl=this.el.querySelector("[data-properties]")),this.propsWrapEl},getPreviewEl:function(){return this.previewEl||(this.previewEl=this.el.querySelector("[data-preview]")),this.previewEl},active:function(){var t=this.model,e=t.collection;e.active(e.indexOf(t))},updateVisibility:function(){var t=this.pfx,e=this.getPropertiesWrapper(),n=this.model.get("active");e.style.display=n?"":"none",this.$el[n?"addClass":"removeClass"](t+"active")},render:function(){var t=n(14),e=this.propsConfig,i=this.pfx+"layer",r=this.model,o=this.el,s=new t({collection:r.get("properties"),config:this.config,target:e.target,customValue:e.customValue,propTarget:e.propTarget,onChange:e.onChange}).render().el;return o.innerHTML=this.template(r),o.className=i,this.getPropertiesWrapper().appendChild(s),this.updateVisibility(),this.updatePreview(),this}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e\n \n
    \n '},getSliderEl:function(){return this.slider||(this.slider=this.el.querySelector("input[type=range]")),this.slider},inputValueChanged:function(){var t=this.model,e=t.get("step");this.getInputEl().value=this.getSliderEl().value;var n=this.getInputValue()-e;t.set("value",n,{avoidStore:1}).set("value",n+e),this.elementUpdated()},inputValueChangedSoft:function(){this.getInputEl().value=this.getSliderEl().value,this.model.set("value",this.getInputValue(),{avoidStore:1}),this.elementUpdated()},setValue:function(t){this.getSliderEl().value=t,this.inputInst.setValue(t,{silent:1})},onRender:function(){r.prototype.onRender.apply(this,arguments),this.model.get("showInput")||(this.inputInst.el.style.display="none")}})},function(t,e,n){"use strict";n(0);t.exports=function(){return{build:function(t){var e=[];"string"==typeof t&&(t=[t]);for(var n=0,i=t.length;n0&&void 0!==arguments[0]?arguments[0]:{},e=t.config||{};this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.target=t.target||{},this.config=e;var n={};(0,s.extend)(n,o.default.Events);var r=document.body,a=document.createElement("el-"+(new Date).getTime());r.appendChild(a),n.computedDefault=i({},window.getComputedStyle(a)),r.removeChild(a),this.propTarget=n;var l=this.collection;this.listenTo(l,"add",this.addTo),this.listenTo(l,"reset",this.render),this.listenTo(this.target,"component:toggled component:update:classes component:update:state change:device",this.targetUpdated)},addTo:function(t){this.addToCollection(t)},targetUpdated:function(){var t=this.target,e=this.propTarget,n=t.getSelected();if(n){var i=t.get("Config"),r=i.devicePreviewMode?"":n.get("state"),o=n.getEl();if(e.helper=null,o){var s=r?":"+r:null;e.computed=window.getComputedStyle(o,s)}n=t.get("StyleManager").getModelToStyle(n),r&&function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.get("CssComposer"),r=i.getAll(),o=i.getClassRule("hc-state");o?(r.remove(o),r.add(o)):o=i.setClassRule("hc-state"),o.set("important",1),o.setStyle(n),e.helper=o}(n.getStyle()),e.model=n,e.trigger("update")}},addToCollection:function(t,e){var n=e||null,i=new a({model:t,id:this.pfx+t.get("name").replace(" ","_").toLowerCase(),name:t.get("name"),properties:t.get("properties"),target:this.target,propTarget:this.propTarget,config:this.config}),r=i.render().el;return n?n.appendChild(r):this.$el.append(r),r},render:function(){var t=this,e=document.createDocumentFragment(),n=this.$el,i=this.pfx,r=this.ppfx;return n.empty(),this.collection.each(function(n){return t.addToCollection(n,e)}),n.append(e),n.addClass(i+"sectors "+r+"one-bg "+r+"two-color"),this}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(14);t.exports=a.default.View.extend({template:o.default.template('\n
    \n \n <%= label %>\n
    '),events:{"click [data-sector-title]":"toggle"},initialize:function(t){this.config=t.config||{},this.pfx=this.config.stylePrefix||"",this.target=t.target||{},this.propTarget=t.propTarget||{},this.caretR="fa-caret-right",this.caretD="fa-caret-down";var e=this.model;this.listenTo(e,"change:open",this.updateOpen),this.listenTo(e,"updateVisibility",this.updateVisibility),this.listenTo(e,"destroy remove",this.remove)},updateVisibility:function(){var t;this.model.get("properties").each(function(e){e.get("visible")&&(t=1)}),this.el.style.display=t?"block":"none"},updateOpen:function(){this.model.get("open")?this.show():this.hide()},show:function(){this.$el.addClass(this.pfx+"open"),this.getPropertiesEl().style.display="",this.$caret.removeClass(this.caretR).addClass(this.caretD)},hide:function(){this.$el.removeClass(this.pfx+"open"),this.getPropertiesEl().style.display="none",this.$caret.removeClass(this.caretD).addClass(this.caretR)},getPropertiesEl:function(){return this.$el.find("."+this.pfx+"properties").get(0)},toggle:function(t){var e=this.model.get("open")?0:1;this.model.set("open",e)},render:function(){return this.$el.html(this.template({pfx:this.pfx,label:this.model.get("name")})),this.$caret=this.$el.find("#"+this.pfx+"caret"),this.renderProperties(),this.$el.attr("class",this.pfx+"sector no-select"),this.updateOpen(),this},renderProperties:function(){var t=this.model.get("properties");if(t){var e=new l({collection:t,target:this.target,propTarget:this.propTarget,config:this.config});this.$el.append(e.render().el)}}})},function(t,e,n){"use strict";t.exports=function(){var t={},e=n(135),i=n(136),r=n(139),o=n(46),s=void 0,a=void 0,l=void 0;return{name:"AssetManager",storageKey:"assets",getConfig:function(){return t},init:function(n){var c=this;t=n||{};for(var u in e)u in t||(t[u]=e[u]);var h=t.pStylePrefix,d=t.em;h&&(t.stylePrefix=h+t.stylePrefix),s=new i([]);var f={collection:new i([]),globalCollection:s,config:t};return l=new o(f),f.fu=l,a=new r(f),s.listenTo(s,"add",function(t){c.getAllVisible().add(t),d&&d.trigger("asset:add",t)}),s.listenTo(s,"remove",function(t){c.getAllVisible().remove(t),d&&d.trigger("asset:remove",t)}),this},add:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return void 0===e.at&&(e.at=0),s.add(t,e)},get:function(t){return s.where({src:t})[0]},getAll:function(){return s},getAllVisible:function(){return a.collection},remove:function(t){var e=this.get(t);return this.getAll().remove(e),this},store:function(e){var n={},i=JSON.stringify(this.getAll().toJSON());return n[this.storageKey]=i,!e&&t.stm&&t.stm.store(n),n},load:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.storageKey,n=t[e]||[];if("string"==typeof n)try{n=JSON.parse(t[e])}catch(t){}return n&&n.length&&this.getAll().reset(n),n},getContainer:function(){return a.el},getAssetsEl:function(){return a.el.querySelector("[data-el=assets]")},render:function(t){var e=t||this.getAll().models;return a.rendered||a.render(),a.collection.reset(e),this.getContainer()},addType:function(t,e){this.getAll().addType(t,e)},getType:function(t){return this.getAll().getType(t)},getTypes:function(){return this.getAll().getTypes()},AssetsView:function(){return a},FileUploader:function(){return l},onLoad:function(){this.getAll().reset(t.assets)},postRender:function(e){t.dropzone&&l.initDropzone(e)},setTarget:function(t){a.collection.target=t},onSelect:function(t){a.collection.onSelect=t},onClick:function(e){t.onClick=e},onDblClick:function(e){t.onDblClick=e}}}},function(t,e,n){"use strict";t.exports={assets:[],noAssets:"",stylePrefix:"am-",upload:0,uploadName:"files",headers:{},params:{},autoAdd:1,uploadText:"Drop files here or click to upload",addBtnText:"Add image",uploadFile:"",handleAdd:"",dropzone:0,openAssetsOnDrop:1,dropzoneContent:"",modalTitle:"Select Image",inputPlaceholder:"http://path/to/the/image.jpg"}},function(t,e,n){"use strict";var i=n(33),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=n(0).Collection.extend(r.default).extend({types:[{id:"image",model:n(137),view:n(44),isType:function(t){return"string"==typeof t?{type:"image",src:t}:t}}]})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e\n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n '},initialize:function(t){this.options=t,this.config=t.config,this.pfx=this.config.stylePrefix||"",this.ppfx=this.config.pStylePrefix||"";var e=this.collection;this.listenTo(e,"reset",this.renderAssets),this.listenTo(e,"add",this.addToAsset),this.listenTo(e,"remove",this.removedAsset),this.listenTo(e,"deselectAll",this.deselectAll)},handleSubmit:function(t){t.preventDefault();var e=this.getAddInput(),n=e.value.trim(),i=this.config.handleAdd;n&&(e.value="",this.getAssetsEl().scrollTop=0,i?i.bind(this)(n):this.options.globalCollection.add(n,{at:0}))},getAssetsEl:function(){return this.el.querySelector("."+this.pfx+"assets")},getAddInput:function(){return this.inputUrl&&this.inputUrl.value||(this.inputUrl=this.el.querySelector("."+this.pfx+"add-asset input")),this.inputUrl},removedAsset:function(t){this.collection.length||this.toggleNoAssets()},addToAsset:function(t){1==this.collection.length&&this.toggleNoAssets(1),this.addAsset(t)},addAsset:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=e,i=this.collection,r=this.config,o=new t.typeView({model:t,collection:i,config:r}).render().el;if(n)n.appendChild(o);else{var s=this.getAssetsEl();s&&s.insertBefore(o,s.firstChild)}return o},toggleNoAssets:function(t){var e=this.$el.find("."+this.pfx+"assets");if(t)e.empty();else{var n=this.config.noAssets;n&&e.append(n)}},deselectAll:function(){var t=this.pfx;this.$el.find("."+t+"highlight").removeClass(t+"highlight")},renderAssets:function(){var t=this,e=document.createDocumentFragment(),n=this.$el.find("."+this.pfx+"assets");n.empty(),this.toggleNoAssets(this.collection.length),this.collection.each(function(n){return t.addAsset(n,e)}),n.append(e)},render:function(){var t=this.options.fu.render().el;return this.$el.empty(),this.$el.append(t).append(this.template(this)),this.el.className=this.ppfx+"asset-manager",this.renderAssets(),this.rendered=1,this}})},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},n="change:style",i=o.get("UndoManager");i&&i.add(t);var r=o.handleUpdates.bind(o);o.stopListening(t,n,r),o.listenTo(t,n,r),!e.avoidStore&&r("","",e)},load:function(e){var n=e||"";!n&&s.stm&&(n=s.em.getCacheLoad());var i=n.styles||"";if(n.styles)try{i=JSON.parse(n.styles)}catch(t){}else n.css&&(i=s.em.get("Parser").parseCss(n.css));return(0,r.isArray)(i)?i.length&&t.reset(i):i&&t.reset(i),i},store:function(e){if(s.stm){var n={},i=this.storageKey();return i.indexOf("css")>=0&&(n.css=s.em.getCss()),i.indexOf("styles")>=0&&(n.styles=JSON.stringify(t)),e||s.stm.store(n),n}},add:function(e,n,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=n||"",c=r||"",u=i({},o),h=this.get(e,a,c,u);return h&&h.config&&!h.config.atRuleType?h:(u.state=a,u.mediaText=c,u.selectors="",h=new l(u,s),h.get("selectors").add(e),t.add(h),h)},get:function(e,n,i,r){var o=null;return t.each(function(t){o||t.compare(e,n,i,r)&&(o=t)}),o},getAll:function(){return t},clear:function(){return this.getAll().reset(),this},addCollection:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=t instanceof Array?t:[t],o=0,a=r.length;o1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.state||"",r=n.mediaText||o.getCurrentMedia(),s=o.get("SelectorManager"),a=s.add({name:t,type:d.TYPE_ID}),l=this.add(a,i,r);return l.setStyle(e,n),l},getIdRule:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.state||"",i=e.mediaText||o.getCurrentMedia(),r=o.get("SelectorManager").get(t,d.TYPE_ID);return r&&this.get(r,n,i)},setClassRule:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.state||"",r=n.mediaText||o.getCurrentMedia(),s=o.get("SelectorManager"),a=s.add({name:t,type:d.TYPE_CLASS}),l=this.add(a,i,r);return l.setStyle(e,n),l},getClassRule:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.state||"",i=e.mediaText||o.getCurrentMedia(),r=o.get("SelectorManager").get(t,d.TYPE_CLASS);return r&&this.get(r,n,i)},render:function(){return e.render().el}}}},function(t,e,n){"use strict";t.exports={stylePrefix:"css-",staticRules:"",rules:[]}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(47);t.exports=r.default.Collection.extend({initialize:function(t,e){e&&e.em&&(this.editor=e.em),this.model=function(t,n){return!n.em&&e&&e.em&&(n.em=e.em),new o(t,n)}},add:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof t&&(t=this.editor.get("Parser").parseCss(t)),e.em=this.editor,r.default.Collection.prototype.add.apply(this,[t,e])}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(49),s=n(144),a=r.default.$,l=function(t,e){return t+(e?"-"+e.replace("%","pc"):"")};t.exports=r.default.View.extend({initialize:function(t){var e=t.config||{};this.atRules={},this.config=e,this.em=e.em,this.pfx=e.stylePrefix||"",this.className=this.pfx+"rules";var n=this.collection;this.listenTo(n,"add",this.addTo),this.listenTo(n,"reset",this.render)},addTo:function(t){this.addToCollection(t)},addToCollection:function(t,e){if(this.renderStarted){var n=e||null,i=this.config,r=void 0,a=void 0,c={model:t,config:i};if("keyframes"===t.get("atRuleType")){var u=t.getAtRule(),h=this.atRules[u];if(!h){var d=document.createElement("style");h=document.createTextNode(""),d.appendChild(document.createTextNode(u+"{")),d.appendChild(h),d.appendChild(document.createTextNode("}")),this.atRules[u]=h,r=d}a=new s(c),h.appendData(a.render().el.textContent)}else a=new o(c),r=a.render().el;var f=this.className,p=t.get("mediaText"),g=l(f),v=g;if(p&&(v=l(f,this.getMediaWidth(p))),r){var m=n||this.el,y=void 0;try{y=m.querySelector("#"+v)}catch(t){}y||(y=m.querySelector("#"+g)),y.appendChild(r)}return r}},getMediaWidth:function(t){return t&&t.replace("("+this.em.getConfig("mediaCondition")+": ","").replace(")","")},render:function(){var t=this;this.renderStarted=1,this.atRules={};var e=this.$el,n=document.createDocumentFragment(),i=this.className;return e.empty(),this.em.get("DeviceManager").getAll().map(function(t){return t.get("widthMedia")}).sort(function(t,e){return(e&&e.replace("px","")||Number.MAX_VALUE)-(t&&t.replace("px","")||Number.MAX_VALUE)}).forEach(function(t){a('
    ').appendTo(n)}),this.collection.each(function(e){return t.addToCollection(e,n)}),e.append(n),e.attr("class",i),this}})},function(t,e,n){"use strict";t.exports=n(49).extend({_createElement:function(t){return document.createTextNode("")},render:function(){var t=this.model,e=t.get("important");return this.el.textContent=t.getDeclaration({important:e}),this}})},function(t,e,n){"use strict";var i=n(1),r=n(146),o=n(147);t.exports=function(){var t={},e=void 0;return{TraitsView:o,name:"TraitManager",getConfig:function(){return t},init:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=n,(0,i.defaults)(t,r);var s=t.pStylePrefix;return s&&(t.stylePrefix=""+s+t.stylePrefix),e=new o({collection:[],editor:t.em,config:t}),this},postRender:function(){var t=this.getConfig().appendTo;if(t){((0,i.isElement)(t)?t:document.querySelector(t)).appendChild(this.render())}},getTraitsViewer:function(){return e},addType:function(t,n){var i=e.itemView;e.itemsView[t]=i.extend(n)},getType:function(t){return e.itemsView[t]},render:function(){return e.render().el}}}},function(t,e,n){"use strict";t.exports={stylePrefix:"trt-",appendTo:"",labelContainer:"Component settings",labelPlhText:"eg. Text here",labelPlhHref:"eg. https://google.com",optionsTarget:[{value:"",name:"This window"},{value:"_blank",name:"New window"}],textNoElement:"Select an element before using Trait Manager"}},function(t,e,n){"use strict";var i=n(50),r=n(9),o=n(148),s=n(149),a=n(150),l=n(151);t.exports=i.extend({itemView:r,itemsView:{text:r,number:a,select:o,checkbox:s,color:l},initialize:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.config||{};this.config=e,this.em=t.editor,this.pfx=e.stylePrefix||"",this.ppfx=e.pStylePrefix||"",this.className=this.pfx+"traits";this.listenTo(this.em,"component:toggled",this.updatedCollection),this.updatedCollection()},updatedCollection:function(){var t=this.ppfx,e=this.em.getSelected();this.el.className=this.className+" "+t+"one-bg "+t+"two-color",e&&(this.collection=e.get("traits"),this.render())}})},function(t,e,n){"use strict";(function(e){var i=n(9),r=n(0).$;t.exports=i.extend({initialize:function(t){i.prototype.initialize.apply(this,arguments);var e=this.ppfx;this.tmpl='
    '},getInputEl:function(){if(!this.$input){var t=this.model,n=t.get("options")||[],i="",this.input=i,this.$input=r(this.input);var o=this.target,s=t.get("name"),a=t.get("value");if(t.get("changeProp"))a=a||o.get(s);else{a=o.get("attributes")[s]}a&&this.$input.val(a)}return this.$input.get(0)}})}).call(e,n(1))},function(t,e,n){"use strict";var i=n(9);t.exports=i.extend({initialize:function(t){i.prototype.initialize.apply(this,arguments);var e=this.ppfx+"chk-icon";this.tmpl='
    '},onChange:function(){this.model.set("value",this.getInputEl().checked)},getInputEl:function(){var t;this.$input||(t=1);for(var e=arguments.length,n=Array(e),r=0;r2&&void 0!==arguments[2]?arguments[2]:{},r=t.components(),o=s.get("UndoManager"),a=s.handleUpdates.bind(s),l=this.handleChanges.bind(this),c=this.handleRemoves.bind(this);o&&o.add(t),o&&r&&o.add(r);[[t,"change:style change:content change:attributes change:src",a],[r,"add",l],[r,"remove",c],[t.get("classes"),"add remove",a]].forEach(function(t){s.stopListening(t[0],t[1],t[2]),s.listenTo(t[0],t[1],t[2])}),!i.avoidStore&&a("","",i),r.each(function(t){return n.handleChanges(t,e,i)})},handleRemoves:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};!n.avoidStore&&s.handleUpdates(t,e,n)},load:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e="";if(!t&&o.stm&&(t=o.em.getCacheLoad()),t.components)try{e=JSON.parse(t.components)}catch(t){}else t.html&&(e=t.html);var n=e&&e.constructor===Object;return(e&&e.length||n)&&(this.clear(),this.getComponents().reset(),n?this.getWrapper().set(e).initComponents().initClasses().loadTraits():this.getComponents().add(e)),e},store:function(t){if(o.stm){var e={},n=this.storageKey();if(n.indexOf("html")>=0&&(e.html=o.em.getHtml()),n.indexOf("components")>=0){var i=o.storeWrapper?this.getWrapper():this.getComponents();e.components=JSON.stringify(i)}return t||o.stm.store(e),e}},getComponent:function(){return t},getWrapper:function(){return this.getComponent()},getComponents:function(){return this.getWrapper().get("components")},addComponent:function(t){return this.getComponents().add(t)},render:function(){return e.render().el},clear:function(){return this.getComponents().reset(),this},setComponents:function(t){this.clear().addComponent(t)},addType:function(t,e){var n=this.getType(t);n?(n.model=e.model,n.view=e.view):(e.id=t,d.unshift(e))},getType:function(t){for(var e=d,n=0;n1&&void 0!==arguments[1]?arguments[1]:{};t&&(t.set({status:"selected"}),["component:selected","component:toggled"].forEach(function(i){return e.em.trigger(i,t,n)}))},selectRemove:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t){this.em;t.set({status:"",state:""}),["component:deselected","component:toggled"].forEach(function(i){return e.em.trigger(i,t,n)})}},componentHovered:function(){var t=o.em,e=t.get("componentHovered"),n=t.previous("componentHovered");n&&"hovered"==n.get("status")&&n.set({status:"",state:""}),e&&(0,r.isEmpty)(e.get("status"))&&e.set("status","hovered")}}}},function(t,e,n){"use strict";t.exports={stylePrefix:"comp-",wrapperId:"wrapper",wrapperName:"Body",wrapper:{removable:!1,copyable:!1,draggable:!1,components:[],traits:[],stylable:["background","background-color","background-image","background-repeat","background-attachment","background-position","background-size"]},components:[],imageCompClass:"fa fa-picture-o",oAssetsOnCreate:!0,storeWrapper:0,voidElements:["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"]}},function(t,e,n){"use strict";var i=n(1),r=n(0),o=n(155),s=n(156);t.exports=r.Collection.extend({model:o,initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.em=e.em||"",this.listenTo(this,"add",this.handleAdd)},handleAdd:function(t){var e=this.target;e&&(t.target=e)},setTarget:function(t){this.target=t},add:function(t,e){var n=this.em;if((0,i.isString)(t)||(0,i.isArray)(t)){var o=n&&n.get&&n.get("TraitManager"),a=o&&o.getConfig(),l=s(a);(0,i.isString)(t)&&(t=[t]);for(var c=0,u=t.length;c1&&void 0!==arguments[1]?arguments[1]:{},n=this.target,o=this.get("name");if(!(0,r.isUndefined)(t))if(this.get("changeProp"))n.set(o,t,e);else{var s=i({},n.get("attributes"));s[o]=t,n.set("attributes",s,e)}},setValueFromInput:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r={value:t};this.set(r,i({},n,{avoidStore:1})),e&&(this.set("value","",n),this.set(r,n))},getInitValue:function(){var t=this.target,e=this.get("name"),n=void 0;if(t){var i=t.get("attributes");n=this.get("changeProp")?t.get(e):i[e]}return n||this.get("value")||this.get("default")}})},function(t,e,n){"use strict";t.exports=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{build:function(e){var n=[];"string"==typeof e&&(e=[e]);for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this.opt=t;var e=t.config||{};this.level=t.level,this.config=e,this.preview=t.preview,this.ppfx=e.pStylePrefix||"",this.pfx=e.stylePrefix||"",this.parent=t.parent;var n=this.pfx,i=this.ppfx,r=this.parent,o=this.collection;this.listenTo(o,"add",this.addTo),this.listenTo(o,"reset resetNavigator",this.render),this.listenTo(o,"remove",this.removeChildren),this.className=n+"layers";var s=e.em;if(e.sortable&&!this.opt.sorter){var a=s.get("Utils");this.opt.sorter=new a.Sorter({container:e.sortContainer||this.el,containerSel:"."+this.className,itemSel:"."+n+"layer",ignoreViewChildren:1,onEndMove:function(t,e){var n=e.getSourceModel();s.setSelected(n,{forceChange:1})},avoidSelectOnEnd:1,nested:1,ppfx:i,pfx:n})}this.sorter=this.opt.sorter||"",this.$el.data("collection",o),r&&this.$el.data("model",r)},removeChildren:function(t){var e=t.viewLayer;e&&e.remove.apply(e)},addTo:function(t){var e=this.collection.indexOf(t);this.addToCollection(t,null,e)},addToCollection:function(t,e,n){var r=this.level,o=e||null,s=i;if(this.isCountable(t,this.config.hideTextnode)){var a=new s({level:r,model:t,config:this.config,sorter:this.sorter,isCountable:this.isCountable,opened:this.opt.opened}),l=a.render().el;if(o)o.appendChild(l);else if(void 0!==n){var c="before";this.$el.children().length==n&&(n--,c="after"),n<0?this.$el.append(l):this.$el.children().eq(n)[c](l)}else this.$el.append(l);return l}},isCountable:function(t,e){var n=t.get("type"),i=t.get("tagName");return!(("textnode"==n||"br"==i)&&e||!t.get("layerable"))},render:function(){var t=this,e=document.createDocumentFragment(),n=this.el;return n.innerHTML="",this.collection.each(function(n){return t.addToCollection(n,e)}),n.appendChild(e),n.className=this.className,this}})},function(t,e,n){"use strict";var i=n(2),r=n(184),o=function(t){return t&&t.__esModule?t:{default:t}}(r);t.exports=function(){var t,e,r={},s=n(185),a=n(186),l=n(188);return{getCanvasView:function(){return l},name:"Canvas",init:function(e){r=e||{};for(var n in s)n in r||(r[n]=s[n]);var i=r.pStylePrefix;i&&(r.stylePrefix=i+r.stylePrefix),t=new a(e),l=new l({model:t,config:r});var o=r.em.get("DomComponents");return o&&this.setWrapper(o),this.startAutoscroll=this.startAutoscroll.bind(this),this.stopAutoscroll=this.stopAutoscroll.bind(this),this.autoscroll=this.autoscroll.bind(this),this},getConfig:function(){return r},setWrapper:function(e){t.set("wrapper",e)},getElement:function(){return l.el},getFrameEl:function(){return l.frame.el},getDocument:function(){return this.getFrameEl().contentDocument},getWindow:function(){return this.getFrameEl().contentWindow},getBody:function(){return l.frame.el.contentDocument.body},getWrapperEl:function(){return this.getBody().querySelector("#wrapper")},getToolsEl:function(){return l.toolsEl},getHighlighter:function(){return l.hlEl},getBadgeEl:function(){return l.badgeEl},getPlacerEl:function(){return l.placerEl},getGhostEl:function(){return l.ghostEl},getToolbarEl:function(){return l.toolbarEl},getResizerEl:function(){return l.resizerEl},getOffsetViewerEl:function(){return l.offsetEl},getFixedOffsetViewerEl:function(){return l.fixedOffsetEl},render:function(){return l.render().el},getOffset:function(){var t=this.offset(this.getFrameEl()),e=this.offset(this.getElement());return{top:t.top-e.top,left:t.left-e.left}},offset:function(t){return l.offset(t)},setCustomBadgeLabel:function(t){r.customBadgeLabel=t},getElementPos:function(t,e){return l.getElementPos(t,e)},getTargetToElementDim:function(t,e,n){var i=n||{},o=l.getPosition();if(o){var s=i.elPos||l.getElementPos(e),a=n.toRight||0,c=i.targetHeight||t.offsetHeight,u=i.targetWidth||t.offsetWidth,h=i.event||null,d=s.top-c,f=s.left;f+=a?s.width:0,f=a?f-u:f;var p=fs.top+s.height?s.top+s.height:g;var v={top:g,left:p,elementTop:s.top,elementLeft:s.left,elementWidth:s.width,elementHeight:s.height,targetWidth:t.offsetWidth,targetHeight:t.offsetHeight,canvasTop:o.top,canvasLeft:o.left};return h&&r.em&&r.em.trigger(h,v),v}},getMouseRelativePos:function(t,e){var n=e||{},i=0,r=0,o=n.subWinOffset,s=t.target.ownerDocument,a=s.defaultView||s.parentWindow,l=a.frameElement,c=o?a.pageYOffset:0,u=o?a.pageXOffset:0;if(l){var h=l.getBoundingClientRect();i=h.top||0,r=h.left||0}return{y:t.clientY+i-c,x:t.clientX+r-u}},getMouseRelativeCanvas:function(t,e){var n=this.getFrameEl(),i=this.getBody(),r=n.offsetTop||0,o=n.offsetLeft||0,s=i.scrollTop||0,a=i.scrollLeft||0;return{y:t.clientY+r+s,x:t.clientX+o+a}},hasFocus:function(){return this.getDocument().hasFocus()},isInputFocused:function(){return"BODY"!==this.getFrameEl().contentDocument.activeElement.tagName},scrollTo:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(0,i.getElement)(t);this.getCanvasView().isElInViewport(n)&&!e.force||n.scrollIntoView(e)},startAutoscroll:function(){var t=this;this.dragging=1;var n=this.getScrollListeners();e=l.getFrameOffset(1),setTimeout(function(){(0,i.on)(n,"mousemove",t.autoscroll),(0,i.on)(n,"mouseup",t.stopAutoscroll)},0)},autoscroll:function(t){if(t.preventDefault(),this.dragging){var n=this.getFrameEl().contentWindow,i=n.document.body.scrollTop,r=i,o=t.clientY,s=e.height-50;o<50&&(r-=50-o),o>s&&(r+=o-s),n.scrollTo(0,r)}},stopAutoscroll:function(){this.dragging=0;var t=this.getScrollListeners();(0,i.off)(t,"mousemove",this.autoscroll),(0,i.off)(t,"mouseup",this.stopAutoscroll)},getScrollListeners:function(){return[this.getFrameEl().contentWindow,this.getElement()]},postRender:function(){(0,i.hasDnd)(r.em)&&(this.droppable=new o.default(r.em))},getFrameWrapperEl:function(){return l.frame.getWrapper()}}}},function(t,e,n){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n";this.sorter.setDropContent(o),this.sorter.startSort(),e.trigger("canvas:dragenter",n,o)}}},{key:"handleDragOver",value:function(t){t.preventDefault(),this.em.trigger("canvas:dragover",t)}},{key:"handleDrop",value:function(t){t.preventDefault();var e=t.dataTransfer,n=this.getContentByData(e).content;t.target.style.border="",n?this.sorter.setDropContent(n):this.sorter.moved=0,this.endDrop(0,t)}},{key:"getContentByData",value:function(t){var e=this.em,n=t.types,i=t.files,r=e.get("dragContent"),o=t.getData("text");if(i.length){o=[];for(var a=0;a=0)o=t.getData("text/html").replace(/<\/?meta[^>]*>/g,"");else if((0,s.indexOf)(n,"text/uri-list")>=0)o={type:"link",attributes:{href:o},content:o};else if((0,s.indexOf)(n,"text/json")>=0){var u=t.getData("text/json");u&&(o=JSON.parse(u))}var h={content:o};return e.trigger("canvas:dragdata",t,h),h}}]),t}();e.default=a},function(t,e,n){"use strict";t.exports={stylePrefix:"cv-",rulers:!1,scripts:[],styles:[],customBadgeLabel:""}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(187);t.exports=r.default.Model.extend({defaults:{frame:"",wrapper:"",rulers:!1},initialize:function(t){var e=this.conf||{};this.set("frame",new o(e.frame))}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=r.default.Model.extend({defaults:{wrapper:"",width:"",height:"",attributes:{}}})},function(t,e,n){"use strict";(function(e){var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(2),s=n(189),a=r.default.$;t.exports=r.default.View.extend({initialize:function(t){e.bindAll(this,"renderBody","onFrameScroll","clearOff"),(0,o.on)(window,"scroll resize",this.clearOff),this.config=t.config||{},this.em=this.config.em||{},this.ppfx=this.config.pStylePrefix||"",this.className=this.config.stylePrefix+"canvas",this.listenTo(this.em,"change:canvasOffset",this.clearOff),this.frame=new s({model:this.model.get("frame"),config:this.config})},isElInViewport:function(t){var e=(0,o.getElement)(t).getBoundingClientRect(),n=this.getFrameOffset(1),i=e.top,r=e.left;return i>=0&&r>=0&&i<=n.height&&r<=n.width},onFrameScroll:function(){var t=this.frame.el.contentDocument.body;this.toolsEl.style.top="-"+t.scrollTop+"px",this.toolsEl.style.left="-"+t.scrollLeft+"px",this.em.trigger("canvasScroll")},renderScripts:function(){var t=this.frame,e=this;t.el.onload=function(){function n(i){if(i.length>0){var r=document.createElement("script");r.type="text/javascript",r.src=i.shift(),r.onerror=r.onload=n.bind(null,i),t.el.contentDocument.head.appendChild(r)}else e.renderBody()}var i=e.config.scripts.slice(0);n(i)}},renderBody:function(){var t=this.model.get("frame").get("wrapper"),e=this.config.em;if(t){var n=this.ppfx,i=a(this.frame.el.contentWindow.document.body),r=e.get("CssComposer"),o=e.get("Config"),s=this.config,l=o.protectedCss,c="";s.styles.forEach(function(t){c+=''});var u="\n "+(e.config.baseCss||"")+"\n\n ."+n+"dashed *[data-highlightable] {\n outline: 1px dashed rgba(170,170,170,0.7);\n outline-offset: -2px;\n }\n\n ."+n+"comp-selected {\n outline: 3px solid #3b97e3 !important;\n outline-offset: -3px;\n }\n\n ."+n+"comp-selected-parent {\n outline: 2px solid #ffca6f !important\n }\n\n ."+n+"no-select {\n user-select: none;\n -webkit-user-select:none;\n -moz-user-select: none;\n }\n\n ."+n+"freezed {\n opacity: 0.5;\n pointer-events: none;\n }\n\n ."+n+"no-pointer {\n pointer-events: none;\n }\n\n ."+n+"plh-image {\n background: #f5f5f5;\n border: none;\n height: 50px;\n width: 50px;\n display: block;\n outline: 3px solid #ffca6f;\n cursor: pointer;\n outline-offset: -2px\n }\n\n ."+n+"grabbing {\n cursor: grabbing;\n cursor: -webkit-grabbing;\n }\n\n "+(o.canvasCss||"")+"\n "+(l||"")+"\n ";c&&i.append(c),i.append(""),i.append(t.render()).append(r.render()),i.append(this.getJsContainer()),e.trigger("loaded"),this.frame.el.contentWindow.onscroll=this.onFrameScroll,this.frame.udpateOffset();var h=document,d=this.frame.el.contentDocument,f=function(t,e){var n=void 0;try{n=new window[e](t.type,t)}catch(t){n=document.createEvent(e),n.initEvent(t.type,!0,!0)}return n.keyCodeVal=t.keyCode,["keyCode","which"].forEach(function(t){Object.defineProperty(n,t,{get:function(){return this.keyCodeVal}})}),n};[{event:"keydown keyup",class:"KeyboardEvent"}].forEach(function(t){return t.event.split(" ").forEach(function(e){d.addEventListener(e,function(e){return h.dispatchEvent(f(e,t.class))})})})}},offset:function(t){var e=t.getBoundingClientRect(),n=t.ownerDocument.body;return{top:e.top+n.scrollTop,left:e.left+n.scrollLeft,width:e.width,height:e.height}},clearOff:function(){this.frmOff=null,this.cvsOff=null},getFrameOffset:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.frmOff&&!t||(this.frmOff=this.offset(this.frame.el)),this.frmOff},getCanvasOffset:function(){return this.cvsOff||(this.cvsOff=this.offset(this.el)),this.cvsOff},getElementPos:function(t,e){var n=e||{},i=this.getFrameOffset(),r=this.getCanvasOffset(),o=this.offset(t),s=n.avoidFrameOffset?0:i.top,a=n.avoidFrameOffset?0:i.left;return{top:o.top+s-r.top,left:o.left+a-r.left,height:t.offsetHeight||t.clientHeight,width:t.offsetWidth||t.clientWidth}},getPosition:function(){var t=this.frame.el.contentDocument;if(t){var e=t.body,n=this.getFrameOffset(),i=this.getCanvasOffset();return{top:n.top+e.scrollTop-i.top,left:n.left+e.scrollLeft-i.left}}},updateScript:function(t){t.scriptContainer||(t.scriptContainer=a("
    "),this.getJsContainer().appendChild(t.scriptContainer.get(0)));var e=t.model,n=e.getId();t.el.id=n,t.scriptContainer.html("");var i=document.createElement("script");i.innerHTML="\n setTimeout(function() {\n var item = document.getElementById('"+n+"');\n if (!item) return;\n (function(){\n "+e.getScriptString()+";\n }.bind(item))()\n }, 1);",setTimeout(function(){return t.scriptContainer.get(0).appendChild(i)},0)},getJsContainer:function(){return this.jsContainer||(this.jsContainer=a('
    ').get(0)),this.jsContainer},render:function(){if(this.wrapper=this.model.get("wrapper"),this.wrapper&&"function"==typeof this.wrapper.render){this.model.get("frame").set("wrapper",this.wrapper),this.$el.append(this.frame.render().el);var t=this.frame;0===this.config.scripts.length?t.el.onload=this.renderBody:this.renderScripts()}var e=this.ppfx;this.$el.append('\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n ');var n=this.el,i=n.querySelector("#"+e+"tools");return this.hlEl=n.querySelector("."+e+"highlighter"),this.badgeEl=n.querySelector("."+e+"badge"),this.placerEl=n.querySelector("."+e+"placeholder"),this.ghostEl=n.querySelector("."+e+"ghost"),this.toolbarEl=n.querySelector("."+e+"toolbar"),this.resizerEl=n.querySelector("."+e+"resizer"),this.offsetEl=n.querySelector("."+e+"offset-v"),this.fixedOffsetEl=n.querySelector("."+e+"offset-fixed-v"),this.toolsEl=i,this.el.className=this.className,this}})}).call(e,n(1))},function(t,e,n){"use strict";var i=n(1),r="transitionend oTransitionEnd transitionend webkitTransitionEnd";t.exports=n(0).View.extend({tagName:"iframe",attributes:{allowfullscreen:"allowfullscreen"},initialize:function(t){(0,i.bindAll)(this,"udpateOffset"),this.config=t.config||{},this.ppfx=this.config.pStylePrefix||"",this.em=this.config.em,this.listenTo(this.em,"change:device",this.updateDim)},updateDim:function(t){var e=this.em,n=e.getDeviceModel(),i=this.el.style,o=i.width||"",s=i.height||"",a=n?n.get("width"):"",l=n?n.get("height"):"",c=o==a&&s==l;i.width=a,i.height=l,this.udpateOffset(),e.stopDefault({preserveSelected:1}),c?this.udpateOffset():this.$el.on(r,this.udpateOffset)},udpateOffset:function(){var t=this.em,e=t.get("Canvas").getOffset();t.set("canvasOffset",e),t.runDefault({preserveSelected:1}),this.$el.off(r,this.udpateOffset)},getBody:function(){this.$el.contents().find("body")},getWrapper:function(){return this.$el.contents().find("body > div")},render:function(){return this.$el.attr({class:this.ppfx+"frame"}),this}})},function(t,e,n){"use strict";function i(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e2&&void 0!==arguments[2]?arguments[2]:{},o=n.component||t.getSelectedAll();return o=(0,r.isArray)(o)?[].concat(i(o)):[o],t.select(null),o.forEach(function(t){if(!t||!t.get("removable"))return void console.warn("The element is not removable",t);if(t){var e=t.collection;e&&e.remove(t)}}),o},e.em&&(e.model=e.em.get("Canvas")),this.loadDefaultCommands(),this},add:c,get:function(t){var n=o[t];return"function"==typeof n&&(n=new n(e),o[t]=n),n},has:function(t){return!!o[t]},loadDefaultCommands:function(){for(var t in s)this.add(t,s[t]);return this}}}},function(t,e,n){"use strict";t.exports={ESCAPE_KEY:27,stylePrefix:"com-",defaults:[],em:null,firstCentered:!0,newFixedH:!1,minComponentH:50,minComponentW:50}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=r.default.$;t.exports=r.default.View.extend({initialize:function(t){this.config=t||{},this.editorModel=this.em=this.config.em||{},this.pfx=this.config.stylePrefix,this.ppfx=this.config.pStylePrefix,this.hoverClass=this.pfx+"hover",this.badgeClass=this.pfx+"badge",this.plhClass=this.pfx+"placeholder",this.freezClass=this.ppfx+"freezed",this.canvas=this.em.get&&this.em.get("Canvas"),this.em.get&&this.setElement(this.getCanvas()),this.canvas&&(this.$canvas=this.$el,this.$wrapper=o(this.getCanvasWrapper()),this.frameEl=this.canvas.getFrameEl(),this.canvasTool=this.getCanvasTools(),this.bodyEl=this.getCanvasBody()),this.init(this.config)},onFrameScroll:function(t){},getCanvas:function(){return this.canvas.getElement()},getCanvasBody:function(){return this.canvas.getBody()},getCanvasWrapper:function(){return this.canvas.getWrapperEl()},getCanvasTools:function(){return this.canvas.getToolsEl()},offset:function(t){var e=t.getBoundingClientRect();return{top:e.top+t.ownerDocument.body.scrollTop,left:e.left+t.ownerDocument.body.scrollLeft}},init:function(t){},callRun:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.id;if(t.trigger("run:"+n+":before",e),e&&e.abort)return void t.trigger("abort:"+n,e);var i=this.run(t,t,e);return t.trigger("run:"+n,i,e),i},callStop:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.id;t.trigger("stop:"+n+":before",e);var i=this.stop(t,t,e);return t.trigger("stop:"+n,i,e),i},run:function(t,e){},stop:function(t,e){}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=r.default.$;t.exports={run:function(t,e){arguments.length>2&&void 0!==arguments[2]&&arguments[2];e&&e.set&&e.set("active",0);var n=t.getConfig(),i=t.Modal,r=n.stylePrefix;if(this.cm=t.CodeManager||null,!this.$editors){var s=this.buildEditor("htmlmixed","hopscotch","HTML"),a=this.buildEditor("css","hopscotch","CSS");this.htmlEditor=s.el,this.cssEditor=a.el;var l=o('
    ');l.append(s.$el).append(a.$el),this.$editors=l}i.setTitle(n.textViewCode),i.setContent(this.$editors),i.open(),this.htmlEditor.setContent(t.getHtml()),this.cssEditor.setContent(t.getCss())},stop:function(t){var e=t.Modal;e&&e.close()},buildEditor:function(t,e,n){var i=document.createElement("textarea");!this.codeMirror&&(this.codeMirror=this.cm.getViewer("CodeMirror"));var r=this.codeMirror.clone().set({label:n,codeName:t,theme:e,input:i}),o=new this.cm.EditorView({model:r,config:this.cm.getConfig()}).render().$el;return r.init(i),{el:r,$el:o}}}},function(t,e,n){"use strict";var i=(n(0),n(50)),r=n(195);t.exports=i.extend({itemView:r,initialize:function(t){this.config={editor:t.editor||""},this.listenTo(this.collection,"reset",this.render)}})},function(t,e,n){"use strict";var i=n(0);t.exports=i.View.extend({events:function(){return this.model.get("events")||{mousedown:"handleClick"}},attributes:function(){return this.model.get("attributes")},initialize:function(t){this.editor=t.config.editor},handleClick:function(t){t.preventDefault(),t.stopPropagation(),this.execCommand(t)},execCommand:function(t){var e={event:t},n=this.model.get("command"),i=this.editor;"function"==typeof n&&n(i,null,e),"string"==typeof n&&i.runCommand(n,e)},render:function(){var t=this.editor.getConfig();return this.el.className+=" "+t.stylePrefix+"toolbar-item",this}})},function(t,e,n){"use strict";var i=n(0),r=n(197);t.exports=i.Collection.extend({model:r})},function(t,e,n){"use strict";var i=n(0);t.exports=i.Model.extend({defaults:{command:"",attributes:{}}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(22),c=a.default.$;t.exports=o.default.extend({},l,{init:function(t){o.default.bindAll(this,"startDelete","stopDelete","onDelete"),this.hoverClass=this.pfx+"hover-delete",this.badgeClass=this.pfx+"badge-red"},enable:function(){this.$el.find("*").mouseover(this.startDelete).mouseout(this.stopDelete).click(this.onDelete)},startDelete:function(t){t.stopPropagation();var e=c(t.target);e.data("model").get("removable")&&(e.addClass(this.hoverClass),this.attachBadge(e.get(0)))},stopDelete:function(t){t.stopPropagation(),c(t.target).removeClass(this.hoverClass),this.badge&&this.badge.css({left:-1e3,top:-1e3})},onDelete:function(t){t.stopPropagation();var e=c(t.target);e.data("model").get("removable")&&(e.data("model").destroy(),this.removeBadge(),this.clean())},updateBadgeLabel:function(t){this.badge.html("Remove "+t.getName())}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=(i(s),n(58));t.exports=o.default.extend({},a,{beforeInsert:function(t){t.type="image",t.style={},t.attributes={},t.attributes.onmousedown="return false",this.config.firstCentered&&this.getCanvasWrapper()==this.sorter.target&&(t.style.margin="0 auto")},afterInsert:function(t){t.trigger("dblclick"),this.sender&&this.sender.set("active",!1)}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s),l=n(2),c=n(22),u=n(57),h=a.default.$;t.exports=o.default.extend({},u,c,{init:function(t){c.init.apply(this,arguments),o.default.bindAll(this,"initSorter","rollback","onEndMove"),this.opt=t,this.hoverClass=this.ppfx+"highlighter-warning",this.badgeClass=this.ppfx+"badge-warning",this.noSelClass=this.ppfx+"no-select"},enable:function(){for(var t=arguments.length,e=Array(t),n=0;n
    "),this.$cn2=o("
    "),this.$cn.append(this.$cn2);var r=t.DeviceManager;if(r&&n.showDevices){i.addPanel({id:"devices-c"}).set("appendContent",r.render()).trigger("change:appendContent")}var s=t.SelectorManager;s&&this.$cn2.append(s.render([])),this.$cn2.append(t.StyleManager.render());var a=t.StyleManager.getConfig(),l=a.stylePrefix;this.$header=o('
    '+a.textNoElement+"
    "),this.$cn.append(this.$header),i.getPanel("views-container")?this.panel=i.getPanel("views-container"):this.panel=i.addPanel({id:"views-container"}),this.panel.set("appendContent",this.$cn).trigger("change:appendContent"),this.target=t.editor,this.listenTo(this.target,"component:toggled",this.toggleSm)}this.toggleSm()},toggleSm:function(){var t=this.target,e=this.sender;e&&e.get&&!e.get("active")||(1===t.getSelectedAll().length?(this.$cn2.show(),this.$header.hide()):(this.$cn2.hide(),this.$header.show()))},stop:function(){this.$cn2&&this.$cn2.hide(),this.$header&&this.$header.hide()}}},function(t,e,n){"use strict";var i=n(0).$;t.exports={run:function(t,e){this.sender=e;var n,r=t.Config,o=r.stylePrefix,s=t.TraitManager;if(!this.$cn){var a=s.getTraitsViewer(),l=s.getConfig();this.$cn=i("
    "),this.$cn2=i("
    "),this.$cn.append(this.$cn2),this.$header=i("
    ").append('
    '+l.textNoElement+"
    "),this.$cn.append(this.$header),this.$cn2.append('
    '+l.labelContainer+"
    "),this.$cn2.append(a.render().el);var c=t.Panels;n=c.getPanel("views-container")?c.getPanel("views-container"):c.addPanel({id:"views-container"}),n.set("appendContent",this.$cn.get(0)).trigger("change:appendContent"),this.target=t.getModel(),this.listenTo(this.target,"component:toggled",this.toggleTm)}this.toggleTm()},toggleTm:function(){var t=this.sender;t&&t.get&&!t.get("active")||(1===this.target.getSelectedAll().length?(this.$cn2.show(),this.$header.hide()):(this.$cn2.hide(),this.$header.show()))},stop:function(){this.$cn2&&this.$cn2.hide(),this.$header&&this.$header.hide()}}},function(t,e,n){"use strict";t.exports={run:function(t,e){var n=t.BlockManager,i=t.Panels;if(!this.blocks){n.render();var r="views-container",o=document.createElement("div"),s=i.getPanel(r)||i.addPanel({id:r});o.appendChild(n.getContainer()),s.set("appendContent",o).trigger("change:appendContent"),this.blocks=o}this.blocks.style.display="block"},stop:function(){var t=this.blocks;t&&(t.style.display="none")}}},function(t,e,n){"use strict";t.exports={run:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=t.Modal,r=t.AssetManager,o=r.getConfig(),s=r.getContainer(),a=n.modalTitle||o.modalTitle||"",l=n.types,c=n.accept;if(r.setTarget(n.target),r.onClick(n.onClick),r.onDblClick(n.onDblClick),r.onSelect(n.onSelect),!this.rendered||l){var u=r.getAll();l&&(u=u.filter(function(t){return-1!==l.indexOf(t.get("type"))})),r.render(u),this.rendered=1}if(c){var h=s.querySelector("input#"+o.stylePrefix+"uploadFile");h&&h.setAttribute("accept",c)}i.setTitle(a),i.setContent(s),i.open()}}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=r.default.$;t.exports={getOffsetMethod:function(t){return"get"+(t||"")+"OffsetViewerEl"},run:function(t,e,n){var i=n||{},r=i.state||"",s=t.getConfig();if(s.showOffsets&&(s.showOffsetsSelected||"Fixed"!=r)){var a=t.Canvas,l=i.el||"",c=i.elPos||a.getElementPos(l),u=window.getComputedStyle(l),h=this.ppfx,d=r+"State",f=this.getOffsetMethod(r),p=a[f]();p.style.display="block";var g=this["marginT"+r],v=this["marginB"+r],m=this["marginL"+r],y=this["marginR"+r],b=this["padT"+r],x=this["padB"+r],w=this["padL"+r],C=this["padR"+r];if(!this[d]){var k=r.toLowerCase(),S=k+"margin-v",T=k+"padding-v",E=o('
    ').get(0),M=o('
    ').get(0),A=h+S+"-el",O=h+T+"-el",P=A+" "+(h+S),L=O+" "+(h+T);g=o('
    ').get(0),v=o('
    ').get(0),m=o('
    ').get(0),y=o('
    ').get(0),b=o('
    ').get(0),x=o('
    ').get(0),w=o('
    ').get(0),C=o('
    ').get(0),this["marginT"+r]=g,this["marginB"+r]=v,this["marginL"+r]=m,this["marginR"+r]=y,this["padT"+r]=b,this["padB"+r]=x,this["padL"+r]=w,this["padR"+r]=C,E.appendChild(g),E.appendChild(v),E.appendChild(m),E.appendChild(y),M.appendChild(b),M.appendChild(x),M.appendChild(w),M.appendChild(C),p.appendChild(E),p.appendChild(M),this[d]="1"}var _=u.marginLeft.replace("px",""),N=parseInt(u.marginTop.replace("px","")),D=parseInt(u.marginBottom.replace("px","")),I=g.style,F=v.style,R=m.style,z=y.style,H=b.style,V=x.style,j=w.style,$=C.style,B=parseInt(c.left);I.height=u.marginTop,I.width=u.width,I.top=c.top-u.marginTop.replace("px","")+"px",I.left=B+"px",F.height=u.marginBottom,F.width=u.width,F.top=c.top+c.height+"px",F.left=B+"px";var W=c.height+N+D+"px",U=c.top-N+"px";R.height=W,R.width=u.marginLeft,R.top=U,R.left=B-_+"px",z.height=W,z.width=u.marginRight,z.top=U,z.left=B+c.width+"px";var q=parseInt(u.paddingTop.replace("px",""));H.height=u.paddingTop,H.width=u.width,H.top=c.top+"px",H.left=B+"px";var K=parseInt(u.paddingBottom.replace("px",""));V.height=u.paddingBottom,V.width=u.width,V.top=c.top+c.height-K+"px",V.left=B+"px";var G=c.height-K-q+"px",Y=c.top+q+"px";j.height=G,j.width=u.paddingLeft,j.top=Y,j.left=c.left+"px";var X=parseInt(u.paddingRight.replace("px",""));$.height=G,$.width=u.paddingRight,$.top=Y,$.left=c.left+c.width-X+"px"}},stop:function(t,e,n){var i=n||{},r=i.state||"",o=this.getOffsetMethod(r);t.Canvas[o]().style.display="none"}}},function(t,e,n){"use strict";t.exports={run:function(t){for(var e=t.getSelected(),n=e&&e.parent();n&&!n.get("selectable");)n=n.parent();n&&t.select(n)}}},function(t,e,n){"use strict";t.exports={isEnabled:function(){var t=document;return t.fullscreenElement||t.webkitFullscreenElement||t.mozFullScreenElement?1:0},enable:function(t){var e="";return t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?(e="webkit",t.webkitRequestFullscreen()):t.mozRequestFullScreen?(e="moz",t.mozRequestFullScreen()):t.msRequestFullscreen?t.msRequestFullscreen():console.warn("Fullscreen not supported"),e},disable:function(){var t=document;t.exitFullscreen?t.exitFullscreen():t.webkitExitFullscreen?t.webkitExitFullscreen():t.mozCancelFullScreen?t.mozCancelFullScreen():t.msExitFullscreen&&t.msExitFullscreen()},fsChanged:function(t,e){var n=(document,(t||"")+"fullscreenchange");this.isEnabled()||(this.stop(null,this.sender),document.removeEventListener(n,this.fsChanged))},run:function(t,e){this.sender=e;var n=this.enable(t.getContainer());this.fsChanged=this.fsChanged.bind(this,n),document.addEventListener(n+"fullscreenchange",this.fsChanged),t&&t.trigger("change:canvasOffset")},stop:function(t,e){e&&e.set&&e.set("active",!1),this.disable(),t&&t.trigger("change:canvasOffset")}}},function(t,e,n){"use strict";var i=n(1),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports={getPanels:function(t){return this.panels||(this.panels=t.Panels.getPanelsEl()),this.panels},tglPointers:function(t,e){var n=t.Canvas.getBody().querySelectorAll("."+this.ppfx+"no-pointer");r.default.each(n,function(t){t.style.pointerEvents=e?"":"all"})},run:function(t,e){e&&e.set&&e.set("active",!1),t.stopCommand("sw-visibility"),t.getModel().stopDefault();var n=this.getPanels(t),i=t.Canvas.getElement(),r=t.getEl(),o=t.Config.stylePrefix;this.helper||(this.helper=document.createElement("span"),this.helper.className=o+"off-prv fa fa-eye-slash",r.appendChild(this.helper),this.helper.onclick=function(){t.stopCommand("preview")}),this.helper.style.display="inline-block",this.tglPointers(t),n.style.display="none";var s=i.style;s.width="100%",s.height="100%",s.top="0",s.left="0",s.padding="0",s.margin="0",t.trigger("change:canvasOffset")},stop:function(t,e){var n=this.getPanels(t);t.runCommand("sw-visibility"),t.getModel().runDefault(),n.style.display="block",t.Canvas.getElement().setAttribute("style",""),this.helper&&(this.helper.style.display="none"),t.trigger("change:canvasOffset"),this.tglPointers(t,1)}}},function(t,e,n){"use strict";t.exports={run:function(t,e,n){var i=n||{},r=i.el||"",o=t.Canvas,s=this.canvasResizer,a=i.options||{},l=o.getCanvasView();return a.ratioDefault=1,a.appendTo=o.getResizerEl(),a.prefix=t.getConfig().stylePrefix,a.posFetcher=l.getElementPos.bind(l),a.mousePosFetcher=o.getMouseRelativePos,s&&!i.forceNew||(this.canvasResizer=t.Utils.Resizer.init(a),s=this.canvasResizer),s.setOptions(a),s.blur(),s.focus(r),s},stop:function(){var t=this.canvasResizer;t&&t.blur()}}},function(t,e,n){"use strict";t.exports={run:function(t,e,n){var i=n&&n.el||"",r=t.Canvas,o=this.dragger,s=n.options||{},a=r.getCanvasView();return s.prefix=t.getConfig().stylePrefix,s.mousePosFetcher=r.getMouseRelativePos,s.posFetcher=a.getElementPos.bind(a),o||(o=t.Utils.Dragger.init(s),this.dragger=o),o.setOptions(s),o.focus(i),s.event&&o.start(s.event),o},stop:function(){this.canvasResizer&&this.canvasResizer.blur()}}},function(t,e,n){"use strict";function i(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e=0?r:t)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";t.exports={run:function(t){if(t.Canvas.hasFocus()&&!t.getModel().isEditing()){var e=[];t.getSelectedAll().forEach(function(t){var n=t.components(),i=n&&n.at(0);i&&e.push(i)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";t.exports={run:function(t){if(t.Canvas.hasFocus()&&!t.getModel().isEditing()){var e=[];t.getSelectedAll().forEach(function(t){var n=t.parent();n&&e.push(n)}),e.length&&t.select(e)}}}},function(t,e,n){"use strict";var i=n(1);t.exports=function(){var t,e,r,o={},s=n(221),a=n(222),l=n(224),c=n(225),u=[];return{name:"BlockManager",init:function(n){o=n||{};var i=o.em;for(var h in s)h in o||(o[h]=s[h]);return t=new a([]),e=new a([]),u=new l,r=new c({collection:e,categories:u},o),t.listenTo(t,"add",function(t){e.add(t),i&&i.trigger("block:add",t)}),t.listenTo(t,"remove",function(t){e.remove(t),i&&i.trigger("block:remove",t)}),t.listenTo(t,"reset",function(t){e.reset(t.models)}),this},getConfig:function(){return o},onLoad:function(){var t=this.getAll();!t.length&&t.reset(o.blocks)},postRender:function(){var t=this.getConfig().appendTo;if(t){((0,i.isElement)(t)?t:document.querySelector(t)).appendChild(this.render())}},add:function(e,n){var i=n||{};return i.id=e,t.add(i)},get:function(e){return t.get(e)},getAll:function(){return t},getAllVisible:function(){return e},remove:function(e){return t.remove(e)},getCategories:function(){return u},getContainer:function(){return r.el},render:function(t){var e=t||this.getAll().models;return r.rendered||(r.render(),r.rendered=1),r.collection.reset(e),this.getContainer()}}}},function(t,e,n){"use strict";t.exports={appendTo:"",blocks:[]}},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(223);t.exports=r.default.Collection.extend({model:o})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(59);t.exports=r.default.Model.extend({defaults:{activate:0,select:0,resetId:0,label:"",content:"",category:"",attributes:{}},initialize:function(){var t=(arguments.length>0&&void 0!==arguments[0]&&arguments[0],this.get("category"));if(t&&"string"==typeof t){new o({id:t,label:t})}}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);t.exports=r.default.Collection.extend({model:n(59)})},function(t,e,n){"use strict";var i=n(1),r=n(226),o=n(227);t.exports=n(0).View.extend({initialize:function(t,e){(0,i.bindAll)(this,"getSorter","onDrag","onDrop"),this.config=e||{},this.categories=t.categories||"",this.renderedCategories=[];var n=this.config.pStylePrefix||"";this.ppfx=n,this.noCatClass=n+"blocks-no-cat",this.blockContClass=n+"blocks-c",this.catsClass=n+"block-categories";var r=this.collection;this.listenTo(r,"add",this.addTo),this.listenTo(r,"reset",this.render),this.em=this.config.em,this.tac="test-tac",this.grabbingCls=this.ppfx+"grabbing",this.em&&(this.config.getSorter=this.getSorter,this.canvas=this.em.get("Canvas"))},getSorter:function(){if(this.em){if(!this.sorter){var t=this.em.get("Utils"),e=this.canvas;this.sorter=new t.Sorter({container:e.getBody(),placer:e.getPlacerEl(),containerSel:"*",itemSel:"*",pfx:this.ppfx,onStart:this.onDrag,onEndMove:this.onDrop,onMove:this.onMove,document:e.getFrameEl().contentDocument,direction:"a",wmargin:1,nested:1,em:this.em,canvasRelative:1})}return this.sorter}},onDrag:function(t){this.em.stopDefault(),this.em.trigger("block:drag:start",t)},onMove:function(t){this.em.trigger("block:drag:move",t)},onDrop:function(t){var e=this.em;e.runDefault(),t&&t.get&&(t.get("activeOnRender")&&(t.trigger("active"),t.set("activeOnRender",0)),e.trigger("block:drag:stop",t))},addTo:function(t){this.add(t)},add:function(t,e){var n=e||null,s=new r({model:t,attributes:t.get("attributes")},this.config),a=s.render().el,l=t.get("category");if(l&&this.categories){(0,i.isString)(l)?l={id:l,label:l}:(0,i.isObject)(l)&&!l.id&&(l.id=l.label);var c=this.categories.add(l),u=c.get("id"),h=this.renderedCategories[u],d=this.getCategoriesEl();return t.set("category",c),!h&&d&&(h=new o({model:c},this.config).render(),this.renderedCategories[u]=h,d.appendChild(h.el)),void(h&&h.append(a))}n?n.appendChild(a):this.append(a)},getCategoriesEl:function(){return this.catsEl||(this.catsEl=this.el.querySelector("."+this.catsClass)),this.catsEl},getBlocksEl:function(){return this.blocksEl||(this.blocksEl=this.el.querySelector("."+this.noCatClass+" ."+this.blockContClass)),this.blocksEl},append:function(t){var e=this.getBlocksEl();e&&e.appendChild(t)},render:function(){var t=this,e=this.ppfx,n=document.createDocumentFragment();this.catsEl=null,this.blocksEl=null,this.renderedCategories=[],this.el.innerHTML='\n
    \n
    \n
    \n
    \n ',this.collection.each(function(e){return t.add(e,n)}),this.append(n);var i=this.blockContClass+"s "+e+"one-bg "+e+"two-color";return this.$el.addClass(i),this}})},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=n(1),s=n(2);t.exports=r.default.View.extend({events:{mousedown:"startDrag",dragstart:"handleDragStart",drag:"handleDrag",dragend:"handleDragEnd"},initialize:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.em=e.em,this.config=e,this.endDrag=this.endDrag.bind(this),this.ppfx=e.pStylePrefix||"",this.listenTo(this.model,"destroy remove",this.remove)},startDrag:function(t){var e=this.config;if(0===t.button&&e.getSorter&&!this.el.draggable){e.em.refreshCanvas();var n=e.getSorter();n.setDragHelper(this.el,t),n.setDropContent(this.model.get("content")),n.startSort(this.el),(0,s.on)(document,"mouseup",this.endDrag)}},handleDragStart:function(t){var e=this.em,n=this.model,i=n.get("content"),r=(0,o.isObject)(i),s=r?JSON.stringify(i):i;t.dataTransfer.setData("text",s),e.set("dragContent",i),e.trigger("block:drag:start",n,t)},handleDrag:function(t){this.em.trigger("block:drag",this.model,t)},handleDragEnd:function(){var t=this.em,e=this.model,n=t.get("dragResult");if(n){var i=n.get&&n.get("activeOnRender");(e.get("activate")||i)&&(n.trigger("active"),n.set("activeOnRender",0)),e.get("select")&&t.setSelected(n),e.get("resetId")&&n.onAll(function(t){return t.resetId()})}t.set({dragResult:null,dragContent:null}),t.trigger("block:drag:stop",n,e)},endDrag:function(t){(0,s.off)(document,"mouseup",this.endDrag);var e=this.config.getSorter();e.moved=0,e.endMove()},render:function(){var t=this.el,e=this.ppfx,n=e+"block",i=this.model.get("label");return t.className+=" "+n+" "+e+"one-bg "+e+"four-color-h",t.innerHTML='
    '+i+"
    ",t.title=t.textContent.trim(),(0,s.hasDnd)(this.em)&&t.setAttribute("draggable",!0),this}})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(1),o=i(r),s=n(0),a=i(s);t.exports=a.default.View.extend({template:o.default.template('\n
    \n \n <%= label %>\n
    \n
    \n '),events:{},initialize:function(){var t=(arguments.length>0&&void 0!==arguments[0]&&arguments[0],arguments.length>1&&void 0!==arguments[1]?arguments[1]:{});this.config=t;var e=this.config.pStylePrefix||"";this.pfx=e,this.caretR="fa fa-caret-right",this.caretD="fa fa-caret-down",this.iconClass=e+"caret-icon",this.activeClass=e+"open",this.className=e+"block-category",this.events["click ."+e+"title"]="toggle",this.listenTo(this.model,"change:open",this.updateVisibility),this.delegateEvents()},updateVisibility:function(){this.model.get("open")?this.open():this.close()},open:function(){this.el.className=this.className+" "+this.activeClass,this.getIconEl().className=this.iconClass+" "+this.caretD,this.getBlocksEl().style.display=""},close:function(){this.el.className=this.className,this.getIconEl().className=this.iconClass+" "+this.caretR,this.getBlocksEl().style.display="none"},toggle:function(){var t=this.model;t.set("open",!t.get("open"))},getIconEl:function(){return this.iconEl||(this.iconEl=this.el.querySelector("."+this.iconClass)),this.iconEl},getBlocksEl:function(){return this.blocksEl||(this.blocksEl=this.el.querySelector("."+this.pfx+"blocks-c")),this.blocksEl},append:function(t){this.getBlocksEl().appendChild(t)},render:function(){return this.el.innerHTML=this.template({pfx:this.pfx,label:this.model.get("label")}),this.el.className=this.className,this.$el.css({order:this.model.get("order")}),this.updateVisibility(),this}})},function(t,e,n){"use strict";var i=n(1);t.exports=function(t){var e=t.$,n=t.Backbone;if(n){var r=n.View.prototype,o={};r.eventNsMap=o,r.delegate=function(t,e,n){var i=".delegateEvents"+this.cid;this.$el.on(t,e,n);var r=o[i];return r||(r=[],o[i]=r),r.push({eventName:t,selector:e,listener:n}),this},r.undelegateEvents=function(){var t=this,e=".delegateEvents"+this.cid;if(this.$el){var n=o[e];n&&n.forEach(function(e){var n=e.eventName;e.selector,e.listener;t.$el.off(n)})}return this},r.undelegate=function(t,e,n){var i=this,r=".delegateEvents"+this.cid,s=o[r];return s&&s.forEach(function(n){var r=n.eventName,o=n.selector;n.listener;r==t&&o==e&&i.$el.off(r)}),this}}if(e&&"jQuery"!==e.prototype.constructor.name){var s=e.fn,a=e.prototype.on,l=e.prototype.off,c=e.prototype.trigger,u=e.prototype.offset,h=function(t){return t.split(/[,\s]+/g)},d=function(t){return t.split(".")};s.on=function(t,e,n,i){var r=this;if("string"==typeof t){var o=h(t);if(1==o.length){t=o[0];var s=d(t);if(0!==t.indexOf(".")&&(t=s[0]),s=s.slice(1),s.length){this.data("_cashNs");this.data("_cashNs",s)}return a.call(this,t,e,n,i)}return o.forEach(function(t){return r.on(t,e,n,i)}),this}return a.call(this,t,e,n,i)},s.off=function(t,e){var n=this;if("string"==typeof t){var i=h(t);if(1==i.length){t=i[0];var r=d(t);return 0!==t.indexOf(".")&&(t=r[0]),r=r.slice(1),r.length,l.call(this,t,e)}return i.forEach(function(t){return n.off(t,e)}),this}return l.call(this,t,e)},s.trigger=function(t,n){var i=this;if(t instanceof e.Event)return this.trigger(t.type,n);if("string"==typeof t){var r=h(t);if(1==r.length){t=r[0];var o=d(t);return 0!==t.indexOf(".")&&(t=o[0]),o=o.slice(1),o.length,c.call(this,t,n)}return r.forEach(function(t){return i.trigger(t,n)}),this}return c.call(this,t,n)},s.hide=function(){return this.css("display","none")},s.show=function(){return this.css("display","block")},s.focus=function(){var t=this.get(0);return t&&t.focus(),this},s.removeClass=function(t){if(!arguments.length)return this.attr("class","");var e=(0,i.isString)(t)&&t.match(/\S+/g);return e?this.each(function(t){(0,i.each)(e,function(e){if(t.classList)t.classList.remove(e);else{var n=t.className,r=t.className.baseVal;(0,i.isUndefined)(r)?t.className=n.replace(e,""):n.baseVal=r.replace(e,"")}})}):this},s.remove=function(){return this.each(function(t){return t.parentNode&&t.parentNode.removeChild(t)})},s.bind=function(t,e){return this.on(t,e)},s.unbind=function(t,e){if((0,i.isObject)(t)){for(var n in t)t.hasOwnProperty(n)&&this.off(n,t[n]);return this}return this.off(t,e)},s.click=function(t){return t?this.on("click",t):this.trigger("click")},s.change=function(t){return t?this.on("change",t):this.trigger("change")},s.keydown=function(t){return t?this.on("keydown",t):this.trigger("keydown")},s.delegate=function(t,e,n,i){return i||(i=n),this.on(e,t,function(t){t.data=n,i(t)})},s.scrollLeft=function(){var t=this.get(0);t=9==t.nodeType?t.defaultView:t;var e=t instanceof Window?t:null;return e?e.pageXOffset:t.scrollLeft||0},s.scrollTop=function(){var t=this.get(0);t=9==t.nodeType?t.defaultView:t;var e=t instanceof Window?t:null;return e?e.pageYOffset:t.scrollTop||0},s.offset=function(t){var e=void 0,n=void 0;return t&&(e=t.top,n=t.left),void 0!==e&&this.css("top",e+"px"),void 0!==n&&this.css("left",n+"px"),u.call(this)},e.map=function(t,e){for(var n=[],i=0;it.maximumStackLength&&(t.shift(),t.pointer--)}}}a.prototype={isRegistered:function(e){return e&&e.cid?this.registeredObjects[e.cid]:t.contains(this.registeredObjects,e)},register:function(t){return!this.isRegistered(t)&&(t&&t.cid?(this.registeredObjects[t.cid]=t,this.cidIndexes.push(t.cid)):this.registeredObjects.push(t),!0)},unregister:function(e){if(this.isRegistered(e)){if(e&&e.cid)delete this.registeredObjects[e.cid],this.cidIndexes.splice(t.indexOf(this.cidIndexes,e.cid),1);else{var n=t.indexOf(this.registeredObjects,e);this.registeredObjects.splice(n,1)}return!0}return!1},get:function(){return t.map(this.cidIndexes,function(t){return this.registeredObjects[t]},this).concat(this.registeredObjects)}};var d={add:{undo:function(t,e,n,i){t.remove(n,i)},redo:function(t,e,n,i){i.index&&(i.at=i.index),t.add(n,i)},on:function(e,n,i){return{object:n,before:void 0,after:e,options:t.clone(i)}}},remove:{undo:function(t,e,n,i){"index"in i&&(i.at=i.index),t.add(e,i)},redo:function(t,e,n,i){t.remove(e,i)},on:function(e,n,i){return{object:n,before:e,after:void 0,options:t.clone(i)}}},change:{undo:function(e,n,i,r){t.isEmpty(n)?t.each(t.keys(i),e.unset,e):(e.set(n),r&&r.unsetData&&r.unsetData.before&&r.unsetData.before.length&&t.each(r.unsetData.before,e.unset,e))},redo:function(e,n,i,r){t.isEmpty(i)?t.each(t.keys(n),e.unset,e):(e.set(i),r&&r.unsetData&&r.unsetData.after&&r.unsetData.after.length&&t.each(r.unsetData.after,e.unset,e))},on:function(e,n){var i=e.changedAttributes(),r=t.keys(i),o=t.pick(e.previousAttributes(),r),s=t.keys(o),a=(n||(n={})).unsetData={after:[],before:[]};return r.length!=s.length&&(r.length>s.length?t.each(r,function(t){t in o||a.before.push(t)},this):t.each(s,function(t){t in i||a.after.push(t)})),{object:e,before:o,after:i,options:t.clone(n)}}},reset:{undo:function(t,e,n){t.reset(e)},redo:function(t,e,n){t.reset(n)},on:function(e,n){return{object:e,before:n.previousModels,after:t.clone(e.models)}}}};function f(){}function p(e,n,i,r){if("object"==typeof n)return t.each(n,function(t,n){2===e?p(e,t,i,r):p(e,n,t,i)});switch(e){case 0:o(i,"undo","redo","on")&&t.all(t.pick(i,"undo","redo","on"),t.isFunction)&&(r[n]=i);break;case 1:r[n]&&t.isObject(i)&&(r[n]=t.extend({},r[n],i));break;case 2:delete r[n]}return this}f.prototype=d;var g=e.Model.extend({defaults:{type:null,object:null,before:null,after:null,magicFusionIndex:null},undo:function(t){c("undo",this.attributes)},redo:function(t){c("redo",this.attributes)}}),v=e.Collection.extend({model:g,pointer:-1,track:!1,isCurrentlyUndoRedoing:!1,maximumStackLength:1/0,setMaxLength:function(t){this.maximumStackLength=t}}),m=e.Model.extend({defaults:{maximumStackLength:1/0,track:!1},initialize:function(e){this.stack=new v,this.objectRegistry=new a,this.undoTypes=new f,this.stack.setMaxLength(this.get("maximumStackLength")),this.on("change:maximumStackLength",function(t,e){this.stack.setMaxLength(e)},this),e&&e.track&&this.startTracking(),e&&e.register&&(t.isArray(e.register)||t.isArguments(e.register)?i(this.register,this,e.register):this.register(e.register))},startTracking:function(){this.set("track",!0),this.stack.track=!0},stopTracking:function(){this.set("track",!1),this.stack.track=!1},isTracking:function(){return this.get("track")},_addToStack:function(t){h(this.stack,t,r(arguments,1),this.undoTypes)},register:function(){l("on",arguments,this._addToStack,this)},unregister:function(){l("off",arguments,this._addToStack,this)},unregisterAll:function(){i(this.unregister,this,this.objectRegistry.get())},undo:function(t){u("undo",this,this.stack,t)},undoAll:function(){u("undo",this,this.stack,!1,!0)},redo:function(t){u("redo",this,this.stack,t)},redoAll:function(){u("redo",this,this.stack,!1,!0)},isAvailable:function(t){var e=this.stack,n=e.length;switch(t){case"undo":return n>0&&e.pointer>-1;case"redo":return n>0&&e.pointer0&&void 0!==arguments[0]?arguments[0]:{};n=i({},a,s),t=n.em,this.em=t,(e=new r.default({track:!0,register:[]})).changeUndoType("change",{condition:!1}),e.changeUndoType("add",{on:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!n.avoidStore)return{object:e,before:void 0,after:t,options:i({},n)}}}),e.changeUndoType("remove",{on:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!n.avoidStore)return{object:e,before:t,after:void 0,options:i({},n)}}});var l={on:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!o&&(o=t.previousAttributes()),!n.avoidStore){var i={object:t,before:o,after:t.toJSON()};return o=null,i}},undo:function(t,e,n,i){t.set(e)},redo:function(t,e,n,i){t.set(n)}};return["style","attributes","content","src"].forEach(function(t){return e.addUndoType("change:"+t,l)}),e.on("undo redo",function(){return t.trigger("component:toggled change:canvasOffset")}),["undo","redo"].forEach(function(n){return e.on(n,function(){return t.trigger(n)})}),this},getConfig:function(){return n},add:function(t){return e.register(t),this},remove:function(t){return e.unregister(t),this},removeAll:function(){return e.unregisterAll(),this},start:function(){return e.startTracking(),this},stop:function(){return e.stopTracking(),this},undo:function(){return t.get("Canvas").isInputFocused()||e.undo(1),this},undoAll:function(){return e.undoAll(),this},redo:function(){return t.get("Canvas").isInputFocused()||e.redo(1),this},redoAll:function(){return e.redoAll(),this},hasUndo:function(){return e.isAvailable("undo")},hasRedo:function(){return e.isAvailable("redo")},getStack:function(){return e.stack},clear:function(){return e.clear(),this},getInstance:function(){return e}}}},function(t,e,n){"use strict";var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return e=r({},a,n),t=e.em,this.em=t,this},onLoad:function(){var t=e.defaults;for(var n in t){var i=t[n];this.add(n,i.keys,i.handler)}},add:function(t,e,r){var a=this.em,l=a.get("Commands"),c=a.getEditor(),u={id:t,keys:e,handler:r};return n[t]&&this.remove(t),n[t]=u,s(e,function(e,n){"object"==(void 0===(r=(0,o.isString)(r)?l.get(r):r)?"undefined":i(r))?r.run(c):r(c);var s=[t,n.shortcut,e];a.trigger.apply(a,["keymap:emit"].concat(s)),a.trigger.apply(a,["keymap:emit:"+t].concat(s))}),a.trigger("keymap:add",u),u},get:function(t){return n[t]},getAll:function(){return n},remove:function(t){var e=this.em,i=this.get(t);if(i)return delete n[t],s.unbind(i.keys),e&&e.trigger("keymap:remove",i),i}}}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(0)).default.$;t.exports={setKey:function(t,e){},getElementRect:function(t){var e=this.opts.posFetcher||"";return e?e(t,{avoidFrameOffset:1}):function(t,e){var n=e||window,i=t.getBoundingClientRect();return{left:i.left+n.pageXOffset,top:i.top+n.pageYOffset,width:i.width,height:i.height}}(t)},init:function(t){return this.setOptions(t),this.handleMouseDown=this.handleMouseDown.bind(this),this.drag=this.drag.bind(this),this.move=this.move.bind(this),this.stop=this.stop.bind(this),this.setKey("up, right, down, left",this.handleKey),this},setOptions:function(t){this.opts=t||{}},focus:function(t){if(!t||t!==this.el){this.getDocumentEl(t),this.blur(),this.el=t,this.handlers=this.opts.dragHandlers||[t];var e=this.getElementRect(t);this.elRect=e,this.startTop=e.top,this.startLeft=e.left,this.getDocumentEl().on("mousedown",this.handleMouseDown)}},blur:function(){this.getDocumentEl().off("mousedown",this.handleMouseDown),this.el=null},start:function(t){this.startPos=this.getMousePos(t);var e=this.getDocumentEl();e.on("mousemove",this.drag),e.on("mouseup",this.stop);var n=this.opts.onStart;"function"==typeof n&&n(t,{docs:e,el:this.el,start:this.startPos,elRect:this.elRect}),this.drag(t)},stop:function(t){var e=this.getDocumentEl();e.off("mousemove",this.drag),e.off("mouseup",this.stop),this.lockedAxis=null;var n=this.opts.onEnd;"function"==typeof n&&n(t,{docs:e,delta:this.delta,end:{x:this.startLeft+this.delta.x,y:this.startTop+this.delta.y}})},handleMouseDown:function(t){var e=t.target;this.isHandler(e)&&this.start(t)},isHandler:function(t){var e=this.handlers;for(var n in e)if(e[n]===t)return!0;return!1},handleKey:function(t,e){switch(e.shortcut){case"up":this.move(0,-1);break;case"right":this.move(1,0);break;case"down":this.move(0,1);break;case"left":this.move(-1,0)}},getDocumentEl:function(t){t=t||this.el;if(!this.$doc){var e=[document];t&&e.push(t.ownerDocument),this.$doc=i(e)}return this.$doc},getMousePos:function(t){var e=this.opts.mousePosFetcher;return e?e(t):{x:t.clientX,y:t.clientY}},drag:function(t){var e=this.lockedAxis,n=this.getMousePos(t),i={x:n.x-this.startPos.x,y:n.y-this.startPos.y};if(t.shiftKey){if(!e){var r=i.x,o=i.y,s=Math.abs(r),a=Math.abs(o);o>=s||o<=-s?e="x":(r>a||r<-a)&&(e="y")}}else e=null;"x"===e&&(i.x=this.startPos.x),"y"===e&&(i.y=this.startPos.y),this.lockedAxis=e,this.delta=i,this.move(i.x,i.y);var l=this.opts.onDrag;"function"==typeof l&&l(t,{delta:i,current:{x:this.startLeft+i.x,y:this.startTop+i.y},lockedAxis:e}),0===t.which&&this.stop(t)},move:function(t,e){this.moveX(t),this.moveY(e)},moveX:function(t){var e=this.el,n=(this.opts,this.startLeft+t),i=this.opts.setX;"function"==typeof i?i(n,{el:e,start:this.startLeft,delta:t}):e.style.left=n+"px"},moveY:function(t){var e=this.el,n=(this.opts,this.startTop+t),i=this.opts.setY;"function"==typeof i?i(n,{el:e,start:this.startTop,delta:t}):e.style.top=n+"px"}}},function(t,e,n){"use strict";var i=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.setOptions(e),(0,r.bindAll)(this,"handleKeyDown","handleMouseDown","move","stop"),this}return i(t,[{key:"getConfig",value:function(){return this.opts}},{key:"setOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.opts=(0,r.defaults)(t,s),this.setup()}},{key:"setup",value:function(){var t=this.opts,e=t.prefix||"",n=t.appendTo||document.body,i=this.container;for(i||((i=document.createElement("div")).className=e+"resizer-c",n.appendChild(i),this.container=i);i.firstChild;)i.removeChild(i.firstChild);var r={};for(var o in["tl","tc","tr","cl","cr","bl","bc","br"].forEach(function(e){return r[e]=t[e]?function(t,e){var n=e.prefix||"",i=document.createElement("i");return i.className=n+"resizer-h "+n+"resizer-h-"+t,i.setAttribute("data-"+n+"handler",t),i}(e,t):""}),r){var s=r[o];s&&i.appendChild(s)}this.handlers=r,this.mousePosFetcher=t.mousePosFetcher,this.updateTarget=t.updateTarget,this.posFetcher=t.posFetcher,this.onStart=t.onStart,this.onMove=t.onMove,this.onEnd=t.onEnd}},{key:"toggleFrames",value:function(t){if(this.opts.silentFrames){var e=document.querySelectorAll("iframe");(0,r.each)(e,function(e){return e.style.pointerEvents=t?"none":""})}}},{key:"isHandler",value:function(t){var e=this.handlers;for(var n in e)if(e[n]===t)return!0;return!1}},{key:"getFocusedEl",value:function(){return this.el}},{key:"getDocumentEl",value:function(){return[this.el.ownerDocument,document]}},{key:"getElementPos",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.posFetcher||"";return n?n(t,e):function(t,e){var n=e||window,i=t.getBoundingClientRect();return{left:i.left+n.pageXOffset,top:i.top+n.pageYOffset,width:i.width,height:i.height}}(t)}},{key:"focus",value:function(t){if(!t||t!==this.el){this.el=t;var e=this.opts,n=this.getElementPos(t,{target:"container"}),i=this.container.style;e.avoidContainerUpdate||(i.left=n.left+"px",i.top=n.top+"px",i.width=n.width+"px",i.height=n.height+"px",i.display="block"),(0,o.on)(this.getDocumentEl(),"mousedown",this.handleMouseDown)}}},{key:"blur",value:function(){this.container.style.display="none",this.el&&((0,o.off)(this.getDocumentEl(),"mousedown",this.handleMouseDown),this.el=null)}},{key:"start",value:function(t){if(0===t.button){t.preventDefault(),t.stopPropagation();var e=this.el,n=this.opts||{},i="data-"+n.prefix+"handler",s=this.getElementPos(e,{target:"el"});this.handlerAttr=t.target.getAttribute(i),this.clickedHandler=t.target,this.startDim={t:s.top,l:s.left,w:s.width,h:s.height},this.rectDim={t:s.top,l:s.left,w:s.width,h:s.height},this.startPos={x:t.clientX,y:t.clientY};var a=this.getDocumentEl();(0,o.on)(a,"mousemove",this.move),(0,o.on)(a,"keydown",this.handleKeyDown),(0,o.on)(a,"mouseup",this.stop),(0,r.isFunction)(this.onStart)&&this.onStart(t,{docs:a,config:n,el:e,resizer:this}),this.toggleFrames(1),this.move(t)}}},{key:"move",value:function(t){var e=this.onMove,n=this.mousePosFetcher,i=n?n(t):{x:t.clientX,y:t.clientY};this.currentPos=i,this.delta={x:i.x-this.startPos.x,y:i.y-this.startPos.y},this.keys={shift:t.shiftKey,ctrl:t.ctrlKey,alt:t.altKey},this.rectDim=this.calc(this),this.updateRect(0),e&&e(t),0===t.which&&this.stop(t)}},{key:"stop",value:function(t){var e=this.opts,n=this.getDocumentEl();(0,o.off)(n,"mousemove",this.move),(0,o.off)(n,"keydown",this.handleKeyDown),(0,o.off)(n,"mouseup",this.stop),this.updateRect(1),this.toggleFrames(),(0,r.isFunction)(this.onEnd)&&this.onEnd(t,{docs:n,config:e})}},{key:"updateRect",value:function(t){var e=this.el,n=this.opts,i=this.rectDim,o=this.container.style,s=this.updateTarget,a=this.getSelectedHandler(),l=n.unitHeight,c=n.unitWidth,u=n.keyWidth,h=n.keyHeight;if((0,r.isFunction)(s))s(e,i,{store:t,selectedHandler:a,resizer:this,config:n});else{var d=e.style;d[u]=i.w+c,d[h]=i.h+l}var f=this.getElementPos(e,{target:"container"});n.avoidContainerUpdate||(o.left=f.left+"px",o.top=f.top+"px",o.width=f.width+"px",o.height=f.height+"px")}},{key:"getSelectedHandler",value:function(){var t=this.handlers;if(this.selectedHandler)for(var e in t)if(t[e]===this.selectedHandler)return e}},{key:"handleKeyDown",value:function(t){27===t.keyCode&&(this.rectDim=this.startDim,this.stop(t))}},{key:"handleMouseDown",value:function(t){var e=t.target;this.isHandler(e)?(this.selectedHandler=e,this.start(t)):e!==this.el&&(this.selectedHandler="",this.blur())}},{key:"calc",value:function(t){var e=void 0,n=this.opts||{},i=n.step,r=this.startDim,s=n.minDim,a=n.maxDim,l=t.delta.x,c=t.delta.y,u=r.w,h=r.h,d={t:0,l:0,w:u,h:h};if(t){var f=t.handlerAttr;~f.indexOf("r")&&(e=(0,o.normalizeFloat)(u+l*i,i),e=Math.max(s,e),a&&(e=Math.min(a,e)),d.w=e),~f.indexOf("b")&&(e=(0,o.normalizeFloat)(h+c*i,i),e=Math.max(s,e),a&&(e=Math.min(a,e)),d.h=e),~f.indexOf("l")&&(e=(0,o.normalizeFloat)(u-l*i,i),e=Math.max(s,e),a&&(e=Math.min(a,e)),d.w=e),~f.indexOf("t")&&(e=(0,o.normalizeFloat)(h-c*i,i),e=Math.max(s,e),a&&(e=Math.min(a,e)),d.h=e);var p=n.ratioDefault?!t.keys.shift:t.keys.shift;if(f.indexOf("c")<0&&p){var g=r.w/r.h;d.w/d.h>g?d.h=Math.round(d.w/g):d.w=Math.round(d.h*g)}return~f.indexOf("l")&&(d.l=r.w-d.w),~f.indexOf("t")&&(d.t=r.h-d.h),d}}}]),t}();t.exports={init:function(t){return new a(t)}}},function(t,e,n){"use strict";(function(e){var i=Object.assign||function(t){for(var e=1;es+c-10||ra+l-10)return 1},getCurrentPos:function(){var t=this.eventMove;return{x:t.pageX||0,y:t.pageY||0}},getDim:function(t){var e,n,i,r;if(this.canvasRelative&&this.em){var o=this.em.get("Canvas").getElementPos(t),s=window.getComputedStyle(t),a=parseFloat(s.marginTop),l=parseFloat(s.marginBottom),c=parseFloat(s.marginRight),u=parseFloat(s.marginLeft);e=o.top-a,n=o.left-u,i=o.height+a+l,r=o.width+u+c}else{var h=this.offset(t);e=this.relative?t.offsetTop:h.top-(this.wmargin?-1:1)*this.elT,n=this.relative?t.offsetLeft:h.left-(this.wmargin?-1:1)*this.elL,i=t.offsetHeight,r=t.offsetWidth}return[e,n,i,r]},getChildrenDim:function(t){var e=[];if(!t)return e;var n=this.getTargetModel(t);n&&n.view&&!this.ignoreViewChildren&&(t=n.view.getChildrenContainer());for(var i=t.children,r=0,o=i.length;rs||s>a+c-r||l+r>o||o>l+u-r)&&(i=1),!!i},findPosition:function(t,e,n){for(var i={index:0,method:"before"},r=0,o=0,s=0,a=0,l=0,c=0,u=0,h=0,d=0,f=t.length;do||a&&c>=a||r&&s0&&void 0!==arguments[0]?arguments[0]:{};this.config=e,this.set("Config",e),this.set("modules",[]),this.set("toLoad",[]),this.set("storables",[]);var n=e.el;n&&e.fromElement&&(this.config.components=n.innerHTML),this.attrsOrig=n?(0,r.toArray)(n.attributes).reduce(function(t,e){return t[e.nodeName]=e.nodeValue,t},{}):"",s.forEach(function(e){return t.loadModule(e)}),this.on("change:componentHovered",this.componentHovered,this),this.on("change:changesCount",this.updateChanges,this),[{from:"change:selectedComponent",to:"component:toggled"}].forEach(function(e){var n=e.from,i=e.to;t.listenTo(t,n,function(){for(var e=arguments.length,r=Array(e),o=0;o0&&void 0!==arguments[0]?arguments[0]:null,n=this.get("StorageManager");this.get("toLoad").forEach(function(t){t.onLoad()});var i=function(){t.get("modules").forEach(function(e){return e.postLoad&&e.postLoad(t)}),e&&e()};n&&n.canAutoload()?this.load(i):i()},updateChanges:function(){var t=this.get("StorageManager"),e=this.get("changesCount");this.config.noticeOnUnload&&e?window.onbeforeunload=function(t){return 1}:window.onbeforeunload=null,t.isAutosave()&&e>=t.getStepsBeforeSave()&&this.store()},loadModule:function(t){var e=this.config,n=new t,r=e[n.name.charAt(0).toLowerCase()+n.name.slice(1)]||e[n.name]||{};r.pStylePrefix=e.pStylePrefix||"";var o=this.get("StorageManager");if(n.storageKey&&n.store&&n.load&&o){r.stm=o;var s=this.get("storables");s.push(n),this.set("storables",s)}return r.em=this,n.init(i({},r)),!n.private&&this.set(n.name,n),n.onLoad&&this.get("toLoad").push(n),this.get("modules").push(n),this},init:function(t){this.set("Editor",t)},getEditor:function(){return this.get("Editor")},handleUpdates:function(t,e){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};i.temporary||(c&&clearInterval(c),c=setTimeout(function(){i.avoidStore||n.set("changesCount",n.get("changesCount")+1,i)},0))},componentHovered:function(t,e,n){var i=this.previous("componentHovered");i&&this.trigger("component:unhovered",i,n),e&&this.trigger("component:hovered",e,n)},getSelected:function(){return this.get("selected").last()},getSelectedAll:function(){return this.get("selected").models},setSelected:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(0,r.isArray)(t),s=i?t:[t],a=this.get("selected");i&&this.removeSelected(a.filter(function(t){return!(0,r.contains)(s,t)})),s.forEach(function(t){var r=(0,o.getModel)(t,u);r&&!r.get("selectable")||(!i&&e.removeSelected(a.filter(function(t){return t!==r})),e.addSelected(r,n))})},addSelected:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(0,o.getModel)(t,u);((0,r.isArray)(i)?i:[i]).forEach(function(t){if(!t||t.get("selectable")){var i=e.get("selected");n.forceChange&&i.remove(t,n),i.push(t,n)}})},removeSelected:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.get("selected").remove((0,o.getModel)(t,u),e)},toggleSelected:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(0,o.getModel)(t,u);((0,r.isArray)(i)?i:[i]).forEach(function(t){e.get("selected").contains(t)?e.removeSelected(t,n):e.addSelected(t,n)})},setHovered:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(0,o.getModel)(t,u);n&&!n.get("hoverable")||(e.forceChange&&this.set("componentHovered",""),this.set("componentHovered",n,e))},setComponents:function(t){return this.get("DomComponents").setComponents(t)},getComponents:function(){var t=this.get("DomComponents"),e=this.get("CodeManager");if(t&&e){var n=t.getComponents();return e.getCode(n,"json")}},setStyle:function(t){for(var e=this.get("CssComposer").getAll(),n=0,i=e.length;n"+i+"<\/script>":""},getCss:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.config,n=e.wrappesIsBody,i=t.avoidProtected,o=(0,r.isUndefined)(t.keepUnusedStyles)?e.keepUnusedStyles:t.keepUnusedStyles,s=this.get("CssComposer"),a=this.get("DomComponents").getComponent();return(i?"":e.protectedCss)+this.get("CodeManager").getCode(a,"css",{cssc:s,wrappesIsBody:n,keepUnusedStyles:o})},getJs:function(){var t=this.get("DomComponents").getWrapper();return this.get("CodeManager").getCode(t,"js").trim()},store:function(t){var e=this,n=this.get("StorageManager"),i={};if(n)return this.get("storables").forEach(function(t){var e=t.store(1);for(var n in e)i[n]=e[n]}),n.store(i,function(n){t&&t(n),e.set("changesCount",0),e.trigger("storage:store",i)}),i},load:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.getCacheLoad(1,function(n){t.get("storables").forEach(function(t){return t.load(n)}),e&&e(n)})},getCacheLoad:function(t,e){var n=this,i=t?1:0;if(this.cacheLoad&&!i)return this.cacheLoad;var r=this.get("StorageManager"),o=[];if(!r)return{};this.get("storables").forEach(function(t){var e=t.storageKey;((e="function"==typeof e?e():e)instanceof Array?e:[e]).forEach(function(t){o.push(t)})}),r.load(o,function(t){n.cacheLoad=t,e&&e(t),setTimeout(function(){return n.trigger("storage:load",t)},0)})},getDeviceModel:function(){var t=this.get("device");return this.get("DeviceManager").get(t)},runDefault:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.get("Commands").get(this.config.defaultCommand);e&&!this.defaultRunning&&(e.stop(this,this,t),e.run(this,this,t),this.defaultRunning=1)},stopDefault:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.get("Commands").get(this.config.defaultCommand);e&&(e.stop(this,this,t),this.defaultRunning=0)},refreshCanvas:function(){this.set("canvasOffset",this.get("Canvas").getOffset())},clearSelection:function(t){(t||window).getSelection().removeAllRanges()},getCurrentMedia:function(){var t=this.config,e=this.getDeviceModel(),n=t.mediaCondition,i=t.devicePreviewMode,r=e&&e.get("widthMedia");return e&&r&&!i?"("+n+": "+r+")":""},getWrapper:function(){return this.get("DomComponents").getWrapper()},getDirtyCount:function(){return this.get("changesCount")},destroyAll:function(){var t=this.attributes,e=t.DomComponents,n=t.CssComposer,i=t.UndoManager,r=t.Panels,o=t.Canvas;e.clear(),n.clear(),i.clear().removeAll(),r.getPanels().reset(),o.getCanvasView().remove(),this.view.remove(),this.stopListening(),u(this.config.el).empty().attr(this.attrsOrig)},setEditing:function(t){return this.set("editing",t),this},isEditing:function(){return!!this.get("editing")},data:function(t,e,n){if(t["_gjs-data"]||(t["_gjs-data"]={}),(0,r.isUndefined)(n))return t["_gjs-data"][e];t["_gjs-data"][e]=n}})},function(t,e,n){"use strict";t.exports={stylePrefix:"gjs-",components:"",style:"",fromElement:0,noticeOnUnload:!0,showOffsets:!1,showOffsetsSelected:!1,forceClass:!0,height:"900px",width:"100%",baseCss:"\n * {\n box-sizing: border-box;\n }\n html, body, #wrapper {\n min-height: 100%;\n }\n body {\n margin: 0;\n height: 100%;\n background-color: #fff\n }\n #wrapper {\n overflow: auto;\n overflow-x: hidden;\n }\n\n * ::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.1)\n }\n\n * ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.2)\n }\n\n * ::-webkit-scrollbar {\n width: 10px\n }\n ",protectedCss:"* { box-sizing: border-box; } body {margin: 0;}",canvasCss:"",defaultCommand:"select-comp",showToolbar:1,allowScripts:0,showDevices:1,devicePreviewMode:0,mediaCondition:"max-width",tagVarStart:"{[ ",tagVarEnd:" ]}",keepEmptyTextNodes:0,jsInHtml:!0,nativeDnD:1,multipleSelection:1,exportWrapper:0,wrappesIsBody:1,avoidInlineStyle:0,avoidDefaults:0,clearStyles:0,el:"",undoManager:{},assetManager:{},canvas:{},layers:{},storageManager:{},rte:{},domComponents:{},modal:{},codeManager:{},panels:{},commands:{},cssComposer:{},selectorManager:{},deviceManager:{devices:[{name:"Desktop",width:""},{name:"Tablet",width:"768px",widthMedia:"992px"},{name:"Mobile landscape",width:"568px",widthMedia:"768px"},{name:"Mobile portrait",width:"320px",widthMedia:"480px"}]},styleManager:{sectors:[{name:"General",open:!1,buildProps:["float","display","position","top","right","left","bottom"]},{name:"Dimension",open:!1,buildProps:["width","height","max-width","min-height","margin","padding"]},{name:"Typography",open:!1,buildProps:["font-family","font-size","font-weight","letter-spacing","color","line-height","text-align","text-shadow"],properties:[{property:"text-align",list:[{value:"left",className:"fa fa-align-left"},{value:"center",className:"fa fa-align-center"},{value:"right",className:"fa fa-align-right"},{value:"justify",className:"fa fa-align-justify"}]}]},{name:"Decorations",open:!1,buildProps:["border-radius-c","background-color","border-radius","border","box-shadow","background"]},{name:"Extra",open:!1,buildProps:["transition","perspective","transform"]}]},blockManager:{},traitManager:{},textViewCode:"Code",keepUnusedStyles:0}},function(t,e,n){"use strict";var i=function(t){return t&&t.__esModule?t:{default:t}}(n(20));t.exports=function(t){var e=t||{},r=n(233),o=n(232),s=n(89);for(var a in r)a in e||(e[a]=r[a]);e.pStylePrefix=e.stylePrefix;var l=new o(e),c=new s({model:l,config:e});return{$:i.default,editor:l,DomComponents:l.get("DomComponents"),LayerManager:l.get("LayerManager"),CssComposer:l.get("CssComposer"),StorageManager:l.get("StorageManager"),AssetManager:l.get("AssetManager"),BlockManager:l.get("BlockManager"),TraitManager:l.get("TraitManager"),SelectorManager:l.get("SelectorManager"),CodeManager:l.get("CodeManager"),Commands:l.get("Commands"),Keymaps:l.get("Keymaps"),Modal:l.get("Modal"),Panels:l.get("Panels"),StyleManager:l.get("StyleManager"),Canvas:l.get("Canvas"),UndoManager:l.get("UndoManager"),DeviceManager:l.get("DeviceManager"),RichTextEditor:l.get("RichTextEditor"),Utils:l.get("Utils"),Config:l.get("Config"),init:function(){return l.init(this),this},getConfig:function(t){return l.getConfig(t)},getHtml:function(t){return l.getHtml(t)},getCss:function(t){return l.getCss(t)},getJs:function(){return l.getJs()},getComponents:function(){return l.get("DomComponents").getComponents()},setComponents:function(t){return l.setComponents(t),this},addComponents:function(t,e){return this.getComponents().add(t,e)},getStyle:function(){return l.get("CssComposer").getAll()},setStyle:function(t){return l.setStyle(t),this},getSelected:function(){return l.getSelected()},getSelectedAll:function(){return l.getSelectedAll()},getSelectedToStyle:function(){var t=l.getSelected();if(t)return this.StyleManager.getModelToStyle(t)},select:function(t){return l.setSelected(t),this},selectAdd:function(t){return l.addSelected(t),this},selectRemove:function(t){return l.removeSelected(t),this},selectToggle:function(t){return l.toggleSelected(t),this},setDevice:function(t){return l.set("device",t),this},getDevice:function(){return l.get("device")},runCommand:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=void 0,i=l.get("Commands").get(t);return i&&(n=i.callRun(this,e)),n},stopCommand:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=void 0,i=l.get("Commands").get(t);return i&&(n=i.callStop(this,e)),n},store:function(t){return l.store(t)},load:function(t){return l.load(t)},getContainer:function(){return e.el},getDirtyCount:function(){return l.getDirtyCount()},refresh:function(){l.refreshCanvas()},setCustomRte:function(t){this.RichTextEditor.customRte=t},on:function(t,e){return l.on(t,e)},off:function(t,e){return l.off(t,e)},trigger:function(t){return l.trigger.apply(l,arguments)},destroy:function(){return l.destroyAll()},getEl:function(){return c.el},getModel:function(){return l},render:function(){var t=this;return l.on("loaded",function(){t.UndoManager.clear(),l.get("modules").forEach(function(t){t.postRender&&t.postRender(c)})}),c.render(),c.el}}}},function(t,e,n){"use strict";var i=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},a=r.container;if(!a)throw new Error("'container' is required");(r=i({},n,r)).el=(0,s.isElement)(a)?a:document.querySelector(a);var l=new o.default(r).init();return r.plugins.forEach(function(e){var n=t.get(e);n?n(l,r.pluginsOpts[e]||{}):console.warn("Plugin "+e+" not found")}),l.getModel().loadOnStart(),r.autorender&&l.render(),e.push(l),l}}}()}])}); +//# sourceMappingURL=grapes.min.js.map \ No newline at end of file diff --git a/views/grapejs/editor.hbs b/views/grapejs/editor.hbs index 25c0cbca..6fa12ac9 100644 --- a/views/grapejs/editor.hbs +++ b/views/grapejs/editor.hbs @@ -131,6 +131,9 @@ assets: [], upload: '/editorapi/upload?type={{type}}&id={{resource.id}}&editor={{editor.name}}', uploadText: 'Drop images here or click to upload', + headers: { + 'X-CSRF-TOKEN': '{{csrfToken}}', + }, }, styleManager: { clearProperties: true, @@ -347,7 +350,6 @@ // TODO: Show a spinner getPreparedHtml(function(html) { sender.set('active', 0); - var modalContent = md.getContentEl(); var mdlDialog = document.querySelector('.gjs-mdl-dialog'); testContentEl.value = html; mdlDialog.className += ' ' + mdlClass; diff --git a/views/grapejs/layout-editor.hbs b/views/grapejs/layout-editor.hbs index d2545db8..592ab1e4 100644 --- a/views/grapejs/layout-editor.hbs +++ b/views/grapejs/layout-editor.hbs @@ -4,13 +4,13 @@ GrapesJS Newsletter Editor - + - + From 4f65a295fbe407113f030f88e1fa799f87e10126 Mon Sep 17 00:00:00 2001 From: Adrian Woeltche Date: Tue, 31 Jul 2018 15:30:52 +0200 Subject: [PATCH 446/483] fixed sending test mail --- views/grapejs/editor.hbs | 84 +++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 39 deletions(-) diff --git a/views/grapejs/editor.hbs b/views/grapejs/editor.hbs index 6fa12ac9..b9377ea7 100644 --- a/views/grapejs/editor.hbs +++ b/views/grapejs/editor.hbs @@ -56,7 +56,7 @@
    From a26c75e26c3aeef5e4f87dc4f38488e4b966258d Mon Sep 17 00:00:00 2001 From: Raphael Hittich Date: Wed, 1 Aug 2018 11:09:16 +0200 Subject: [PATCH 448/483] Fix linter error --- lib/tools.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/tools.js b/lib/tools.js index ea113acc..1530e572 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -211,8 +211,8 @@ function formatMessage(serviceUrl, campaign, list, subscription, message, filter return false; }; - let tagReplace = message => { - return message.replace(/\[([a-z0-9_]+)(?:\/([^\]]+))?\]/ig, (match, identifier, fallback) => { + let tagReplace = message => + message.replace(/\[([a-z0-9_]+)(?:\/([^\]]+))?\]/ig, (match, identifier, fallback) => { identifier = identifier.toUpperCase(); let value = getTagValue(identifier); if (value === false) { @@ -221,7 +221,7 @@ function formatMessage(serviceUrl, campaign, list, subscription, message, filter value = (value || fallback || '').trim(); return filter(value); }); - }; + ; return tagReplace(tagReplace(message)); } From 0f20c5f6f7503b5208e047424ab70890fc4588ab Mon Sep 17 00:00:00 2001 From: Raphael Hittich Date: Wed, 1 Aug 2018 11:12:44 +0200 Subject: [PATCH 449/483] Fix another linter error --- lib/tools.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/tools.js b/lib/tools.js index 1530e572..b0d16822 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -221,7 +221,6 @@ function formatMessage(serviceUrl, campaign, list, subscription, message, filter value = (value || fallback || '').trim(); return filter(value); }); - ; return tagReplace(tagReplace(message)); } From 3217af5720fda3e00cb8e2de93d2368c30640316 Mon Sep 17 00:00:00 2001 From: Adrian Woeltche Date: Thu, 2 Aug 2018 16:46:06 +0200 Subject: [PATCH 450/483] dirty fix for making test button better working --- views/grapejs/editor.hbs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/views/grapejs/editor.hbs b/views/grapejs/editor.hbs index b9377ea7..c4786c77 100644 --- a/views/grapejs/editor.hbs +++ b/views/grapejs/editor.hbs @@ -357,14 +357,19 @@ md.setTitle('Test your Newsletter'); var modalContent = $('
    ').append(testContainer).html(); - md.setContent(modalContent); + for(var i=0; i<100; i++) { + try { + md.setContent(modalContent); + break; + } catch(err) {} + } - testContainer = $(".gjs-mdl-dialog #test-form"); + testContainerCopy = $(".gjs-mdl-dialog #test-form"); - var statusFormElC = document.querySelector('.form-status'); - var statusFormEl = document.querySelector('.form-status i'); + var statusFormElC = document.querySelector('.gjs-mdl-dialog .form-status'); + var statusFormEl = document.querySelector('.gjs-mdl-dialog .form-status i'); - var ajaxTest = ajaxable(testContainer, { headers: { 'X-CSRF-TOKEN': '{{csrfToken}}' } }) + var ajaxTest = ajaxable(testContainerCopy, { headers: { 'X-CSRF-TOKEN': '{{csrfToken}}' } }) .onStart(function() { statusFormEl.className = 'fa fa-refresh anim-spin'; statusFormElC.style.opacity = '1'; @@ -391,11 +396,11 @@ }; if (isValidEmail(localStorage.getItem('testemail'))) { - $('#test-form input[name=email]').val(localStorage.getItem('testemail')); + $('.gjs-mdl-dialog #test-form input[name=email]').val(localStorage.getItem('testemail')); } - $('#test-form').on('submit', function() { - var email = $('#test-form input[name=email]').val(); + $('.gjs-mdl-dialog #test-form').on('submit', function() { + var email = $('.gjs-mdl-dialog #test-form input[name=email]').val(); isValidEmail(email) && localStorage.setItem('testemail', email); }); From 396c8f597e1e6384498f72d58120c23c64fe4276 Mon Sep 17 00:00:00 2001 From: Adrian Woeltche Date: Thu, 2 Aug 2018 16:48:46 +0200 Subject: [PATCH 451/483] another hack --- views/grapejs/editor.hbs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/views/grapejs/editor.hbs b/views/grapejs/editor.hbs index c4786c77..22107bab 100644 --- a/views/grapejs/editor.hbs +++ b/views/grapejs/editor.hbs @@ -435,7 +435,12 @@ mdlDialog.className += ' gjs-mdl-dialog-lg'; mergeTagReferenceContainer.style.display = 'block'; md.setTitle('Merge tag reference'); - md.setContent(mergeTagReferenceContainer); + for(var i=0; i<100; i++) { + try { + md.setContent(mergeTagReferenceContainer); + break; + } catch(err) {} + } md.open(); md.getModel().once('change:open', function() { mdlDialog.className = mdlDialog.className.replace('gjs-mdl-dialog-lg', ''); From 102c46c3fbd86c36020a29afb1de514f2789ad3f Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Sun, 5 Aug 2018 17:08:24 +0530 Subject: [PATCH 452/483] Bumped version in meta.json. Otherwise the sql updates are not executed. --- meta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta.json b/meta.json index c0a6d3c0..5d511080 100644 --- a/meta.json +++ b/meta.json @@ -1,3 +1,3 @@ { - "schemaVersion": 29 + "schemaVersion": 30 } From 4dd754ff82b07a5a310ec9623d08885732038259 Mon Sep 17 00:00:00 2001 From: Adrian Date: Tue, 7 Aug 2018 08:41:13 +0200 Subject: [PATCH 453/483] add passport-ldapauth to dependencies when "npm install --production" is called, every time, passport-ldapauth is removed from local repository, with adding the dependency to package.json, the behavior is as expected (see production.yml config for ldap config) --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 51e18bf3..20f988c6 100644 --- a/package.json +++ b/package.json @@ -106,6 +106,7 @@ "openpgp": "^2.5.11", "passport": "^0.4.0", "passport-local": "^1.0.0", + "passport-ldapauth": "^2.0.0", "premailer-api": "^1.0.4", "redfour": "^1.0.2", "redis": "^2.8.0", From af8c3202ddde3cf548916f41e9c71ec6a047fe7f Mon Sep 17 00:00:00 2001 From: Sylvain Amrani Date: Sat, 11 Aug 2018 19:32:49 +0200 Subject: [PATCH 454/483] add french translation --- languages/fr_FR.mo | Bin 0 -> 92661 bytes languages/fr_FR.po | 4796 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 4796 insertions(+) create mode 100644 languages/fr_FR.mo create mode 100644 languages/fr_FR.po diff --git a/languages/fr_FR.mo b/languages/fr_FR.mo new file mode 100644 index 0000000000000000000000000000000000000000..8ffb09823fae405404eb2ad7bce0b5f6fa958170 GIT binary patch literal 92661 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 HarVCfZ}Mi= literal 0 HcmV?d00001 diff --git a/languages/fr_FR.po b/languages/fr_FR.po new file mode 100644 index 00000000..41649cd1 --- /dev/null +++ b/languages/fr_FR.po @@ -0,0 +1,4796 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Language-Team: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2018-08-11 13:55+0200\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2018-08-09 16:59+0200\n" +"X-Generator: Poedit 1.8.7.1\n" +"Last-Translator: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: fr_FR\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-SearchPath-0: .\n" + +#: views/archive/layout.hbs:1 views/layout.hbs:1 +msgid "Self hosted email newsletter app" +msgstr "Solution de Newsletter auto-hébergée" + +#: views/blacklist.hbs:1 views/campaigns/blacklisted.hbs:1 +#: views/campaigns/bounced.hbs:1 views/campaigns/campaigns.hbs:1 +#: views/campaigns/clicked.hbs:1 views/campaigns/complained.hbs:1 +#: views/campaigns/create-rss.hbs:1 views/campaigns/create-triggered.hbs:1 +#: views/campaigns/create.hbs:1 views/campaigns/delivered.hbs:1 +#: views/campaigns/edit-rss.hbs:1 views/campaigns/edit-triggered.hbs:1 +#: views/campaigns/edit.hbs:1 views/campaigns/opened.hbs:1 +#: views/campaigns/unsubscribed.hbs:1 views/campaigns/upload-attachment.hbs:1 +#: views/campaigns/view.hbs:1 views/lists/create.hbs:1 views/lists/edit.hbs:1 +#: views/lists/fields/create.hbs:1 views/lists/fields/edit.hbs:1 +#: views/lists/fields/fields.hbs:1 views/lists/forms/create.hbs:1 +#: views/lists/forms/edit.hbs:1 views/lists/forms/forms.hbs:1 +#: views/lists/lists.hbs:1 views/lists/segments/create.hbs:1 +#: views/lists/segments/edit.hbs:1 views/lists/segments/rule-configure.hbs:1 +#: views/lists/segments/rule-create.hbs:1 views/lists/segments/rule-edit.hbs:1 +#: views/lists/segments/segments.hbs:1 views/lists/segments/view.hbs:1 +#: views/lists/subscription/add.hbs:1 views/lists/subscription/edit.hbs:1 +#: views/lists/subscription/import-failed.hbs:1 +#: views/lists/subscription/import-preview.hbs:1 +#: views/lists/subscription/import.hbs:1 views/lists/view.hbs:1 +#: views/report-templates/create.hbs:1 views/report-templates/edit.hbs:1 +#: views/report-templates/report-templates.hbs:1 +#: views/reports/create-select-template.hbs:1 views/reports/create.hbs:1 +#: views/reports/edit.hbs:1 views/reports/output.hbs:1 +#: views/reports/reports.hbs:1 views/reports/view.hbs:1 views/settings.hbs:1 +#: views/templates/create.hbs:1 views/templates/edit.hbs:1 +#: views/templates/templates.hbs:1 views/triggers/create-select.hbs:1 +#: views/triggers/create.hbs:1 views/triggers/edit.hbs:1 +#: views/triggers/triggered.hbs:1 views/triggers/triggers.hbs:1 +#: views/users/account.hbs:1 views/users/api.hbs:1 views/users/forgot.hbs:1 +#: views/users/login.hbs:1 views/users/reset.hbs:1 app.js:169 +msgid "Home" +msgstr "Accueil" + +#: views/blacklist.hbs:2 views/blacklist.hbs:3 views/layout.hbs:7 +#: views/lists/subscription/edit.hbs:15 +msgid "Blacklist" +msgstr "Liste noire" + +#: views/blacklist.hbs:4 views/users/api.hbs:76 +msgid "Add email to blacklist" +msgstr "Ajouter à la liste noire" + +#: views/blacklist.hbs:5 +msgid "Add" +msgstr "Ajouter" + +#: views/blacklist.hbs:6 +msgid "Email" +msgstr "Email" + +#: views/campaigns/blacklisted.hbs:2 views/campaigns/bounced.hbs:2 +#: views/campaigns/campaigns.hbs:2 views/campaigns/campaigns.hbs:7 +#: views/campaigns/clicked.hbs:2 views/campaigns/complained.hbs:2 +#: views/campaigns/create-rss.hbs:2 views/campaigns/create-triggered.hbs:2 +#: views/campaigns/create.hbs:2 views/campaigns/delivered.hbs:2 +#: views/campaigns/edit-rss.hbs:2 views/campaigns/edit-triggered.hbs:2 +#: views/campaigns/edit.hbs:2 views/campaigns/opened.hbs:2 +#: views/campaigns/unsubscribed.hbs:2 views/campaigns/upload-attachment.hbs:2 +#: views/campaigns/view.hbs:2 lib/tools.js:133 routes/campaigns.js:35 +msgid "Campaigns" +msgstr "Campagnes" + +#: views/campaigns/blacklisted.hbs:3 views/campaigns/blacklisted.hbs:4 +msgid "Blacklisted info" +msgstr "Information de liste noire" + +#: views/campaigns/blacklisted.hbs:5 views/campaigns/bounced.hbs:5 +#: views/campaigns/clicked.hbs:5 views/campaigns/complained.hbs:5 +#: views/campaigns/delivered.hbs:5 views/campaigns/edit-rss.hbs:5 +#: views/campaigns/edit-triggered.hbs:5 views/campaigns/edit.hbs:5 +#: views/campaigns/opened.hbs:5 views/campaigns/unsubscribed.hbs:5 +#: views/campaigns/upload-attachment.hbs:6 +msgid "View campaign" +msgstr "Voir la campagne" + +#: views/campaigns/blacklisted.hbs:6 +msgid "Subscribers who blacklisted by global blacklist:" +msgstr "Listes des abonnés faisant partie de la liste noire globale :" + +#: views/campaigns/blacklisted.hbs:7 views/campaigns/bounced.hbs:7 +#: views/campaigns/clicked.hbs:15 views/campaigns/complained.hbs:7 +#: views/campaigns/delivered.hbs:7 views/campaigns/opened.hbs:9 +#: views/campaigns/unsubscribed.hbs:7 +#: views/lists/subscription/import-failed.hbs:8 views/lists/view.hbs:19 +#: views/triggers/triggered.hbs:6 +msgid "Address" +msgstr "Adresse" + +#: views/campaigns/blacklisted.hbs:8 views/campaigns/bounced.hbs:8 +#: views/campaigns/clicked.hbs:16 views/campaigns/complained.hbs:8 +#: views/campaigns/delivered.hbs:8 views/campaigns/opened.hbs:10 +#: views/campaigns/unsubscribed.hbs:8 views/lists/subscription/add.hbs:6 +#: views/lists/subscription/edit.hbs:7 +#: views/lists/subscription/import-preview.hbs:7 views/lists/view.hbs:20 +#: views/subscription/partials/subscription-custom-fields.hbs:3 +#: views/triggers/triggered.hbs:7 +msgid "First Name" +msgstr "Prénom" + +#: views/campaigns/blacklisted.hbs:9 views/campaigns/bounced.hbs:9 +#: views/campaigns/clicked.hbs:17 views/campaigns/complained.hbs:9 +#: views/campaigns/delivered.hbs:9 views/campaigns/opened.hbs:11 +#: views/campaigns/unsubscribed.hbs:9 views/lists/subscription/add.hbs:7 +#: views/lists/subscription/edit.hbs:8 +#: views/lists/subscription/import-preview.hbs:8 views/lists/view.hbs:21 +#: views/subscription/partials/subscription-custom-fields.hbs:4 +#: views/triggers/triggered.hbs:8 +msgid "Last Name" +msgstr "Nom" + +#: views/campaigns/blacklisted.hbs:10 +msgid "Reason" +msgstr "Raison" + +#: views/campaigns/blacklisted.hbs:11 +msgid "Time" +msgstr "Heure" + +#: views/campaigns/bounced.hbs:3 views/campaigns/bounced.hbs:4 +msgid "Bounced info" +msgstr "Informations sur les rejets" + +#: views/campaigns/bounced.hbs:6 +msgid "Subscribers who bounced and were unsubscribed:" +msgstr "Abonnés en erreur qui ont été désinscrits :" + +#: views/campaigns/bounced.hbs:10 views/campaigns/complained.hbs:10 +#: views/campaigns/delivered.hbs:10 views/campaigns/unsubscribed.hbs:10 +msgid "SMTP response" +msgstr "Réponse SMTP" + +#: views/campaigns/bounced.hbs:11 +msgid "Bounce time" +msgstr "Heure du rejet" + +#: views/campaigns/campaigns.hbs:3 views/campaigns/create-triggered.hbs:26 +#: views/campaigns/create.hbs:3 views/campaigns/create.hbs:4 +#: views/campaigns/create.hbs:30 +msgid "Create Campaign" +msgstr "Créer une campagne" + +#: views/campaigns/campaigns.hbs:4 +msgid "Regular Campaign" +msgstr "Campagne ordinaire" + +#: views/campaigns/campaigns.hbs:5 +msgid "RSS Campaign" +msgstr "Campagne RSS" + +#: views/campaigns/campaigns.hbs:6 +msgid "Triggered Campaign" +msgstr "Campagne pilotée par déclencheurs" + +#: views/campaigns/campaigns.hbs:8 views/campaigns/create-rss.hbs:6 +#: views/campaigns/create-triggered.hbs:5 views/campaigns/create.hbs:5 +#: views/campaigns/edit-rss.hbs:8 views/campaigns/edit-triggered.hbs:9 +#: views/campaigns/edit.hbs:10 views/campaigns/view.hbs:73 +#: views/lists/create.hbs:5 views/lists/edit.hbs:6 +#: views/lists/fields/fields.hbs:6 views/lists/forms/forms.hbs:6 +#: views/lists/lists.hbs:5 views/lists/segments/segments.hbs:6 +#: views/report-templates/partials/report-template-fields.hbs:1 +#: views/report-templates/report-templates.hbs:10 +#: views/reports/partials/report-fields.hbs:1 +#: views/reports/partials/report-fields.hbs:5 +#: views/reports/partials/report-fields.hbs:9 views/reports/reports.hbs:6 +#: views/templates/templates.hbs:5 views/triggers/triggers.hbs:5 +msgid "Name" +msgstr "Nom" + +#: views/campaigns/campaigns.hbs:9 views/campaigns/create-rss.hbs:8 +#: views/campaigns/create-triggered.hbs:7 views/campaigns/create.hbs:7 +#: views/campaigns/edit-rss.hbs:10 views/campaigns/edit-triggered.hbs:11 +#: views/campaigns/edit.hbs:12 views/campaigns/view.hbs:74 +#: views/lists/create.hbs:7 views/lists/edit.hbs:10 +#: views/lists/forms/edit.hbs:9 views/lists/forms/forms.hbs:7 +#: views/lists/lists.hbs:8 views/mosaico/editor.hbs:3 +#: views/partials/merge-tag-reference.hbs:4 +#: views/report-templates/partials/report-template-fields.hbs:3 +#: views/report-templates/report-templates.hbs:11 +#: views/reports/partials/report-fields.hbs:3 +#: views/reports/partials/report-fields.hbs:6 views/reports/reports.hbs:8 +#: views/templates/create.hbs:9 views/templates/edit.hbs:8 +#: views/templates/templates.hbs:6 views/triggers/create.hbs:7 +#: views/triggers/edit.hbs:8 views/triggers/triggers.hbs:7 +msgid "Description" +msgstr "Description" + +#: views/campaigns/campaigns.hbs:10 views/campaigns/view.hbs:75 +#: views/lists/view.hbs:22 views/lists/view.hbs:30 +#: views/triggers/triggers.hbs:6 +msgid "Status" +msgstr "Statut" + +#: views/campaigns/campaigns.hbs:11 views/campaigns/view.hbs:76 +#: views/lists/view.hbs:23 views/lists/view.hbs:24 +#: views/report-templates/report-templates.hbs:12 +#: views/reports/partials/report-fields.hbs:7 views/reports/reports.hbs:9 +msgid "Created" +msgstr "Créé" + +#: views/campaigns/clicked.hbs:3 views/campaigns/clicked.hbs:4 +msgid "Link info" +msgstr "Information sur les liens" + +#: views/campaigns/clicked.hbs:6 views/campaigns/view.hbs:63 +msgid "URL" +msgstr "URL" + +#: views/campaigns/clicked.hbs:7 views/campaigns/view.hbs:64 +msgid "Clicks" +msgstr "Clics" + +#: views/campaigns/clicked.hbs:8 views/campaigns/view.hbs:65 +msgid "% of clicks" +msgstr "% de clics" + +#: views/campaigns/clicked.hbs:9 views/campaigns/view.hbs:66 +msgid "% of messages" +msgstr "% de messages" + +#: views/campaigns/clicked.hbs:10 views/campaigns/view.hbs:69 +msgid "Aggregated clicks" +msgstr "Clics agrégés" + +#: views/campaigns/clicked.hbs:11 +msgid "Subscribers who clicked on a link:" +msgstr "Abonnés ayant cliqué sur un lien :" + +#: views/campaigns/clicked.hbs:12 +msgid "Subscribers who clicked on this link:" +msgstr "Abonnés ayant cliqué sur ce lien :" + +#: views/campaigns/clicked.hbs:13 views/campaigns/opened.hbs:7 +msgid "Stats by country" +msgstr "Stats par pays" + +#: views/campaigns/clicked.hbs:14 views/campaigns/opened.hbs:8 +msgid "Stats by device type" +msgstr "Statits par type d'équipement" + +#: views/campaigns/clicked.hbs:18 +msgid "First click time" +msgstr "Heure du premier clic" + +#: views/campaigns/clicked.hbs:19 +msgid "Click count" +msgstr "Nombre de clics" + +#: views/campaigns/complained.hbs:3 views/campaigns/complained.hbs:4 +msgid "Complained info" +msgstr "Information de plainte" + +#: views/campaigns/complained.hbs:6 +msgid "Subscribers who complained and were unsubscribed:" +msgstr "Abonnés s'étant plaint et ayant été désinscrits :" + +#: views/campaigns/complained.hbs:11 +msgid "Complain time" +msgstr "Heure de la plainte" + +#: views/campaigns/create-rss.hbs:3 views/campaigns/create-rss.hbs:4 +#: views/campaigns/create-rss.hbs:21 +msgid "Create RSS Campaign" +msgstr "Créer une campagne RSS" + +#: views/campaigns/create-rss.hbs:5 views/campaigns/edit-rss.hbs:6 +msgid "" +"RSS campaign sets up a tracker against selected RSS feed address. Whenever a " +"new entry is found from this feed it is sent to selected list as an email " +"message." +msgstr "" +"Une campagne RSS met en place un traqueur de flux RSS. Dès qu'une nouvelle " +"entrée est trouvée dans le flux, elle est envoyée à la liste sous forme mail." + +#: views/campaigns/create-rss.hbs:7 views/campaigns/create-triggered.hbs:6 +#: views/campaigns/create.hbs:6 views/campaigns/edit-rss.hbs:9 +#: views/campaigns/edit-triggered.hbs:10 views/campaigns/edit.hbs:11 +msgid "Campaign Name" +msgstr "Nom de la campagne" + +#: views/campaigns/create-rss.hbs:9 views/campaigns/create-triggered.hbs:8 +#: views/campaigns/create.hbs:8 views/campaigns/edit-rss.hbs:11 +#: views/campaigns/edit-triggered.hbs:12 views/campaigns/edit.hbs:13 +#: views/lists/create.hbs:8 views/lists/edit.hbs:11 +#: views/report-templates/partials/report-template-fields.hbs:4 +#: views/reports/partials/report-fields.hbs:4 views/templates/create.hbs:11 +#: views/templates/edit.hbs:10 views/triggers/create.hbs:9 +#: views/triggers/edit.hbs:10 +msgid "HTML is allowed" +msgstr "Le HTML est autorisé" + +#: views/campaigns/create-rss.hbs:10 views/campaigns/create-triggered.hbs:9 +#: views/campaigns/create.hbs:9 views/campaigns/edit-rss.hbs:12 +#: views/campaigns/edit-triggered.hbs:13 views/campaigns/edit.hbs:14 +#: views/campaigns/view.hbs:6 views/triggers/create-select.hbs:6 +#: views/triggers/create.hbs:10 views/triggers/edit.hbs:12 +#: views/triggers/triggers.hbs:8 +msgid "List" +msgstr "Liste" + +#: views/campaigns/create-rss.hbs:11 views/campaigns/create-triggered.hbs:10 +#: views/campaigns/create-triggered.hbs:14 views/campaigns/create.hbs:10 +#: views/campaigns/create.hbs:14 views/campaigns/edit-rss.hbs:13 +#: views/campaigns/edit-triggered.hbs:14 views/campaigns/edit.hbs:15 +#: views/lists/fields/create.hbs:27 views/lists/fields/edit.hbs:28 +#: views/lists/segments/create.hbs:9 views/lists/segments/edit.hbs:10 +#: views/lists/segments/rule-create.hbs:7 views/lists/subscription/add.hbs:10 +#: views/lists/subscription/add.hbs:12 views/lists/subscription/edit.hbs:11 +#: views/lists/subscription/import-preview.hbs:5 +#: views/reports/partials/report-select-template.hbs:2 +#: views/subscription/partials/subscription-custom-fields.hbs:9 +#: views/templates/create.hbs:8 views/triggers/create-select.hbs:7 +#: views/triggers/create.hbs:17 views/triggers/create.hbs:20 +#: views/triggers/create.hbs:22 views/triggers/create.hbs:26 +#: views/triggers/edit.hbs:19 views/triggers/edit.hbs:22 +#: views/triggers/edit.hbs:24 views/triggers/edit.hbs:28 +msgid "Select" +msgstr "Sélectionner" + +#: views/campaigns/create-rss.hbs:12 views/campaigns/create-triggered.hbs:11 +#: views/campaigns/create.hbs:11 views/campaigns/edit-rss.hbs:14 +#: views/campaigns/edit-triggered.hbs:15 views/campaigns/edit.hbs:16 +#: views/triggers/create-select.hbs:8 views/triggers/create.hbs:11 +#: views/triggers/edit.hbs:13 +msgid "subscribers" +msgstr "abonnés" + +#: views/campaigns/create-rss.hbs:13 views/campaigns/edit-rss.hbs:15 +msgid "RSS Feed Url" +msgstr "URL du flux RSS" + +#: views/campaigns/create-rss.hbs:14 views/campaigns/edit-rss.hbs:16 +msgid "" +"New entries from this RSS URL are sent out to list subscribers as email " +"messages" +msgstr "" +"Les nouvelles entrées de ce flux RSS seront envoyées aux abonnés sous forme " +"de messages mail" + +#: views/campaigns/create-rss.hbs:15 views/campaigns/create-triggered.hbs:18 +#: views/campaigns/create.hbs:18 views/campaigns/edit-rss.hbs:18 +#: views/campaigns/edit-triggered.hbs:16 views/campaigns/edit.hbs:17 +#: views/campaigns/view.hbs:12 +msgid "Email \"from name\"" +msgstr "Nom de l'émetteur du message" + +#: views/campaigns/create-rss.hbs:16 views/campaigns/create-triggered.hbs:19 +#: views/campaigns/create.hbs:19 views/campaigns/edit-rss.hbs:19 +#: views/campaigns/edit-triggered.hbs:17 views/campaigns/edit.hbs:18 +#: views/settings.hbs:25 +msgid "This is the name your emails will come from" +msgstr "Il s'agit du nom d'émetteur utilisés pour les messages de la liste" + +#: views/campaigns/create-rss.hbs:17 views/campaigns/create-triggered.hbs:20 +#: views/campaigns/create.hbs:20 views/campaigns/edit-rss.hbs:20 +#: views/campaigns/edit-triggered.hbs:18 views/campaigns/edit.hbs:19 +#: views/campaigns/view.hbs:13 +msgid "Email \"from\" address" +msgstr "Adresse de l'émetteur du message" + +#: views/campaigns/create-rss.hbs:18 views/campaigns/create-triggered.hbs:21 +#: views/campaigns/edit-rss.hbs:21 views/campaigns/edit-triggered.hbs:19 +#: views/settings.hbs:27 +msgid "This is the address people will send replies to" +msgstr "L'adresse à laquelle les utilisateurs enverront leurs réponses" + +#: views/campaigns/create-rss.hbs:19 views/campaigns/create-triggered.hbs:24 +#: views/campaigns/create.hbs:28 views/campaigns/edit-rss.hbs:22 +#: views/campaigns/edit-triggered.hbs:22 views/campaigns/edit.hbs:27 +msgid "Disable opened tracking" +msgstr "Désactiver le suivi des ouvertures" + +#: views/campaigns/create-rss.hbs:20 views/campaigns/create-triggered.hbs:25 +#: views/campaigns/create.hbs:29 views/campaigns/edit-rss.hbs:23 +#: views/campaigns/edit-triggered.hbs:23 views/campaigns/edit.hbs:28 +msgid "Disable clicked tracking" +msgstr "Désactiver le suivi des clics" + +#: views/campaigns/create-triggered.hbs:3 +#: views/campaigns/create-triggered.hbs:4 +msgid "Create Triggered Campaign" +msgstr "Créer une campagne programmée" + +#: views/campaigns/create-triggered.hbs:12 views/campaigns/create.hbs:12 +#: views/campaigns/edit-triggered.hbs:7 views/campaigns/edit.hbs:7 +#: views/lists/fields/create.hbs:31 views/lists/fields/edit.hbs:33 +#: views/reports/reports.hbs:7 views/templates/create.hbs:13 +msgid "Template" +msgstr "Modèle" + +#: views/campaigns/create-triggered.hbs:13 views/campaigns/create.hbs:13 +msgid "Select a template:" +msgstr "Sélectionnez un modèle :" + +#: views/campaigns/create-triggered.hbs:15 views/campaigns/create.hbs:15 +msgid "Selecting a template creates a campaign specific copy from it" +msgstr "Modèle de base pour la création de la campagne" + +#: views/campaigns/create-triggered.hbs:16 views/campaigns/create.hbs:16 +msgid "Or alternatively use an URL as the message content source:" +msgstr "" +"Ou bien utiliser à la place une URL pour récupérer le contenu du message :" + +#: views/campaigns/create-triggered.hbs:17 views/campaigns/create.hbs:17 +#: views/campaigns/edit-triggered.hbs:26 views/campaigns/edit.hbs:31 +msgid "" +"If a message is sent then this URL will be POSTed to using Merge Tags as " +"POST body. Use this if you want to generate the HTML message yourself" +msgstr "" +"Lorsqu'un message est envoyé, cette URL sera POSTée avec les champs de " +"publipostage dans le corps de la requête. Utilisez cette fonctionnalité si " +"vous voulez générer le message HTML par vous-même" + +#: views/campaigns/create-triggered.hbs:22 views/campaigns/create.hbs:24 +#: views/campaigns/edit-triggered.hbs:20 views/campaigns/edit.hbs:23 +#: views/campaigns/view.hbs:15 +msgid "Email \"subject line\"" +msgstr "Objet du message" + +#: views/campaigns/create-triggered.hbs:23 views/campaigns/create.hbs:25 +#: views/campaigns/edit-triggered.hbs:21 views/campaigns/edit.hbs:24 +#: views/settings.hbs:29 +msgid "Keep it relevant and non-spammy" +msgstr "Adéquat et non raccoleur" + +#: views/campaigns/create.hbs:21 views/campaigns/edit.hbs:20 +msgid "" +"This is the address people will send replies to unless reply-to address is " +"set" +msgstr "" +"L'adresse à laquelle les utilisateurs enverront leurs réponses, sauf si " +"autre adresse Reply-to a été précisée" + +#: views/campaigns/create.hbs:22 views/campaigns/edit.hbs:21 +#: views/campaigns/view.hbs:14 +msgid "Email \"reply-to\" address" +msgstr "Adresse de réponse Reply-to du message" + +#: views/campaigns/create.hbs:23 views/campaigns/edit.hbs:22 +msgid "If set, this is the address people will send replies to" +msgstr "" +"Si renseignée, les utilisateurs enverront leurs réponses à cette adresse" + +#: views/campaigns/create.hbs:26 views/campaigns/edit.hbs:25 +msgid "Custom unsubscribe (URL)" +msgstr "Désabonnement personnalisé (URL)" + +#: views/campaigns/create.hbs:27 views/campaigns/edit.hbs:26 +msgid "Set a custom unsubscribe url" +msgstr "Renseignez une URL de désabonnement personnalisée" + +#: views/campaigns/delivered.hbs:3 views/campaigns/delivered.hbs:4 +msgid "Delivered info" +msgstr "Information de remise" + +#: views/campaigns/delivered.hbs:6 +msgid "Subscribers who received the message and did not bounce/unsubscribe:" +msgstr "" +"Abonnés ayant reçu le message sans erreur, et ne s'étant pas désinscrit :" + +#: views/campaigns/delivered.hbs:11 +msgid "Delivery time" +msgstr "Heure de remise" + +#: views/campaigns/edit-rss.hbs:3 views/campaigns/edit-rss.hbs:4 +msgid "Edit RSS Campaign" +msgstr "Modifier la campagne RSS" + +#: views/campaigns/edit-rss.hbs:7 views/campaigns/edit-triggered.hbs:8 +#: views/campaigns/edit.hbs:9 views/settings.hbs:4 views/users/account.hbs:6 +msgid "General Settings" +msgstr "Paramètres généraux" + +#: views/campaigns/edit-rss.hbs:17 +msgid "" +"Use special merge tag [RSS_ENTRY] to mark the position for the RSS post " +"content. Additionally you can use any valid merge tag as well." +msgstr "" +"Utiliser le champ de publipostage spécial [RSS_ENTRY] pour désigner " +"l'emplacement où sera inséré le contenu venant du RSS. Vous pouvez utiliser " +"par ailleurs tout autre champ disponible." + +#: views/campaigns/edit-rss.hbs:24 views/campaigns/edit-triggered.hbs:27 +#: views/campaigns/edit.hbs:37 +msgid "Delete Campaign" +msgstr "Supprimer la campagne" + +#: views/campaigns/edit-rss.hbs:25 views/campaigns/edit-triggered.hbs:28 +#: views/campaigns/edit.hbs:38 views/lists/edit.hbs:22 +#: views/lists/fields/edit.hbs:39 views/lists/forms/edit.hbs:33 +#: views/lists/forms/forms.hbs:12 views/lists/segments/edit.hbs:14 +#: views/lists/segments/rule-edit.hbs:41 views/lists/subscription/edit.hbs:18 +#: views/reports/edit.hbs:6 views/settings.hbs:102 views/templates/edit.hbs:13 +#: views/triggers/edit.hbs:30 views/users/account.hbs:18 +msgid "Update" +msgstr "Enregistrer" + +#: views/campaigns/edit-triggered.hbs:3 views/campaigns/edit-triggered.hbs:4 +msgid "Edit Triggered Campaign" +msgstr "Modifier la campagne programmée" + +#: views/campaigns/edit-triggered.hbs:6 views/campaigns/edit.hbs:6 +#: routes/forms.js:143 +msgid "General" +msgstr "Général" + +#: views/campaigns/edit-triggered.hbs:24 views/campaigns/edit.hbs:29 +msgid "Template Settings" +msgstr "Paramètres du modèle" + +#: views/campaigns/edit-triggered.hbs:25 views/campaigns/edit.hbs:30 +msgid "Template URL" +msgstr "URL du modèle" + +#: views/campaigns/edit.hbs:3 views/campaigns/edit.hbs:4 +#: views/campaigns/upload-attachment.hbs:3 +#: views/campaigns/upload-attachment.hbs:5 views/campaigns/view.hbs:3 +msgid "Edit Campaign" +msgstr "Modifier la campagne" + +#: views/campaigns/edit.hbs:8 views/campaigns/edit.hbs:32 +msgid "Attachments" +msgstr "Pièces jointes" + +#: views/campaigns/edit.hbs:33 +msgid "File" +msgstr "Fichier" + +#: views/campaigns/edit.hbs:34 +msgid "Size" +msgstr "Taille" + +#: views/campaigns/edit.hbs:35 views/campaigns/view.hbs:68 +#: views/lists/fields/fields.hbs:12 views/lists/forms/forms.hbs:9 +#: views/lists/view.hbs:33 +msgid "No data available in table" +msgstr "Aucune donnée dans cette table" + +#: views/campaigns/edit.hbs:36 views/campaigns/upload-attachment.hbs:4 +msgid "Add Attachment" +msgstr "Ajouter une pièce jointe" + +#: views/campaigns/opened.hbs:3 views/campaigns/opened.hbs:4 +msgid "Opened info" +msgstr "Informations d'ouverture" + +#: views/campaigns/opened.hbs:6 +msgid "Subscribers who opened this message:" +msgstr "Abonnés ayant ouvert ce message :" + +#: views/campaigns/opened.hbs:12 +msgid "First open" +msgstr "Première ouverture" + +#: views/campaigns/opened.hbs:13 +msgid "Opened count" +msgstr "Nombre d'ouverture" + +#: views/campaigns/unsubscribed.hbs:3 views/campaigns/unsubscribed.hbs:4 +msgid "Unsubscribed info" +msgstr "Informations de désabonnement" + +#: views/campaigns/unsubscribed.hbs:6 +msgid "Subscribers who unsubscribed:" +msgstr "Abonnés s'étant désinscrits" + +#: views/campaigns/unsubscribed.hbs:11 views/campaigns/view.hbs:28 +#: views/lists/subscription/import.hbs:13 routes/lists.js:206 +msgid "Unsubscribed" +msgstr "Désabonnés" + +#: views/campaigns/upload-attachment.hbs:7 +msgid "Upload" +msgstr "Télécharger" + +#: views/campaigns/view.hbs:4 +msgid "Overview" +msgstr "Aperçu" + +#: views/campaigns/view.hbs:5 +msgid "Links" +msgstr "Liens" + +#: views/campaigns/view.hbs:7 +msgid "Feed URL" +msgstr "URL du flux" + +#: views/campaigns/view.hbs:8 +msgid "Last check" +msgstr "Dernière vérification" + +#: views/campaigns/view.hbs:9 +msgid "Not yet checked" +msgstr "Pas encore vérifié" + +#: views/campaigns/view.hbs:10 +msgid "activate campaign to start checking feed for new messages" +msgstr "" +"Activer la campagne pour commencer à surveiller l'arrivée de nouveaux " +"messages dans le flux" + +#: views/campaigns/view.hbs:11 +msgid "RSS status" +msgstr "Statut RSS" + +#: views/campaigns/view.hbs:16 +msgid "Preview campaign as" +msgstr "Prévisualiser la campagne comme" + +#: views/campaigns/view.hbs:17 +msgid "Add new test user" +msgstr "Ajouter un nouvel utilisateur de test" + +#: views/campaigns/view.hbs:18 +msgid "No test users yet, create one here" +msgstr "Aucun utilisateur de test, créez-en un ici" + +#: views/campaigns/view.hbs:19 +msgid "Go" +msgstr "Lancer" + +#: views/campaigns/view.hbs:20 lib/models/triggers.js:28 +msgid "Delivered" +msgstr "Remis" + +#: views/campaigns/view.hbs:21 +msgid "List subscribers who received this message" +msgstr "Abonnés ayant reçu ce message" + +#: views/campaigns/view.hbs:22 +msgid "Blacklisted" +msgstr "Mis en liste noire" + +#: views/campaigns/view.hbs:23 +msgid "List subscribers who blacklisted by global blacklist" +msgstr "Listes des abonnés faisant partie de la liste noire globale" + +#: views/campaigns/view.hbs:24 routes/lists.js:206 +msgid "Bounced" +msgstr "Erreurs de distribution" + +#: views/campaigns/view.hbs:25 +msgid "List subscribers who bounced" +msgstr "Abonnés en erreur" + +#: views/campaigns/view.hbs:26 +msgid "Complaints" +msgstr "Plaintes" + +#: views/campaigns/view.hbs:27 +msgid "List subscribers who complained for this message" +msgstr "Abonnés s'étant plaint après ce message" + +#: views/campaigns/view.hbs:29 +msgid "List subscribers who unsubscribed after this message" +msgstr "Abonnés s'étant désinscrits après ce message" + +#: views/campaigns/view.hbs:30 +msgid "Opened" +msgstr "Ouvert" + +#: views/campaigns/view.hbs:31 +msgid "List subscribers who opened this message" +msgstr "Abonnés ayant ouvert ce message" + +#: views/campaigns/view.hbs:32 +msgid "Clicked" +msgstr "Cliqué" + +#: views/campaigns/view.hbs:33 views/campaigns/view.hbs:70 +msgid "List subscribers who clicked on a link" +msgstr "Abonnés ayant cliqué sur un lien" + +#: views/campaigns/view.hbs:34 +msgid "" +"Are you sure? This action would start sending messages to the selected list" +msgstr "" +"Êtes-vous sûr ? Cette action va débuter l'envoi de messages à la liste " +"sélectionnée" + +#: views/campaigns/view.hbs:35 +msgid "Delay sending" +msgstr "Envoi programmé" + +#: views/campaigns/view.hbs:36 +msgid "hours" +msgstr "heures" + +#: views/campaigns/view.hbs:37 +msgid "minutes" +msgstr "minutes" + +#: views/campaigns/view.hbs:38 +msgid "Send to subscribers:" +msgstr "Envoyer aux abonnés" + +#: views/campaigns/view.hbs:39 +msgid "Are you sure? This action would reset scheduling" +msgstr "Êtes-vous sûr ? Cette action va réinitialiser les tâches programmées" + +#: views/campaigns/view.hbs:40 +msgid "Cancel" +msgstr "Annuler" + +#: views/campaigns/view.hbs:41 +msgid "Sending scheduled" +msgstr "Envoi programmé" + +#: views/campaigns/view.hbs:42 views/campaigns/view.hbs:54 +msgid "Pause" +msgstr "Pause" + +#: views/campaigns/view.hbs:43 routes/campaigns.js:254 +msgid "Sending" +msgstr "Envoi" + +#: views/campaigns/view.hbs:44 views/campaigns/view.hbs:48 +msgid "" +"Are you sure? This action would resume sending messages to the selected list" +msgstr "" +"Êtes-vous sûr ? Cette action va suspendre l'envoi de messages à la liste " +"sélectionnée" + +#: views/campaigns/view.hbs:45 views/campaigns/view.hbs:49 +msgid "Are you sure? This action would reset all stats about current progress" +msgstr "" +"Êtes-vous sûr ? Cette action va supprimer toutes les statistiques sur les " +"tâches en cours" + +#: views/campaigns/view.hbs:46 +msgid "Resume" +msgstr "Reprendre" + +#: views/campaigns/view.hbs:47 views/campaigns/view.hbs:51 +msgid "Reset" +msgstr "Réinitialiser" + +#: views/campaigns/view.hbs:50 +msgid "Continue" +msgstr "Continuer" + +#: views/campaigns/view.hbs:52 +msgid "" +"All messages sent! Hit \"Continue\" if you you want to send this campaign to " +"new subscribers" +msgstr "" +"Tous les messages ont été envoyés ! Choisissez \"Continuer\" si vous voulez " +"envoyer cette campagne aux nouveaux abonnés" + +#: views/campaigns/view.hbs:53 +msgid "" +"Are you sure? This action would pause sending new entries in RSS feed as " +"email messages to the selected list" +msgstr "" +"Êtes-vous sûr ? Cette action va suspendre l'envoi de mail depuis un flux RSS " +"pour cette liste" + +#: views/campaigns/view.hbs:55 views/campaigns/view.hbs:59 +msgid "Campaign status:" +msgstr "État de la campagne :" + +#: views/campaigns/view.hbs:56 +msgid "ACTIVE" +msgstr "ACTIF" + +#: views/campaigns/view.hbs:57 +msgid "" +"Are you sure? This action would start sending new entries in RSS feed as " +"email messages to the selected list" +msgstr "" +"Êtes-vous sûr ? Cette action va débuter l'envoi de messages depuis les " +"nouvelles entrées du flux RSS à la liste sélectionnée" + +#: views/campaigns/view.hbs:58 +msgid "Activate" +msgstr "Activer" + +#: views/campaigns/view.hbs:60 +msgid "INACTIVE" +msgstr "INACTIVE" + +#: views/campaigns/view.hbs:61 +msgid "" +"This is a triggered campaign. Messages are only sent to subscribers that hit " +"some trigger that invokes this campaign" +msgstr "" +"Il s'agit d'une campagne programmée. Les messages ne sont envoyés qu'aux " +"abonnés dont un événement active un déclencheur." + +#: views/campaigns/view.hbs:62 +msgid "see more" +msgstr "voir plus" + +#: views/campaigns/view.hbs:67 +msgid "List subscribers who clicked this link" +msgstr "Abonnés ayant cliqué ce lien" + +#: views/campaigns/view.hbs:71 +msgid "" +"Clicks are counted as unique subscribers that clicked on a specific link or " +"on any link (in aggregated view)" +msgstr "" +"Les clics représentent le nombre d'abonnés uniques qui ont cliqué sur un " +"lien spécifique, ou sur n'importe quel lien en vue aggrégée." + +#: views/campaigns/view.hbs:72 +msgid "" +"If a new entry is found from campaign feed a new subcampaign is created of " +"that entry and it will be listed here" +msgstr "" +"Lorsqu'une nouvelle entrée est trouvée dans un flux RSS, une nouvelle " +"campagne est créée à partir de cette entrée et sera listée ici" + +#: views/emails/password-reset-html.hbs:1 +#: views/emails/password-reset-text.hbs:1 +msgid "Change your password" +msgstr "Changez votre mot de passe" + +#: views/emails/password-reset-html.hbs:2 +#: views/emails/password-reset-text.hbs:2 +msgid "We have received a password change request for your Mailtrain account:" +msgstr "" +"Nous avons reçu une demande de changement de mot de passe pour votre compte " +"Mailtrain :" + +#: views/emails/password-reset-html.hbs:3 +#: views/emails/password-reset-text.hbs:3 +msgid "Reset password" +msgstr "Réinitialiser le mot de passe" + +#: views/emails/password-reset-html.hbs:4 +#: views/emails/password-reset-text.hbs:4 +msgid "" +"If you did not ask to change your password, then you can ignore this email " +"and your password will not be changed." +msgstr "" +"Si vous n'avez pas demandé le changement de votre mot de passe, vous pouvez " +"ignorer ce message et votre mot de passe restera inchangé." + +#: views/emails/rss-html.hbs:1 views/emails/stationery-html.hbs:3 +#: views/emails/stationery-text.hbs:3 +msgid "Preferences" +msgstr "Préférences" + +#: views/emails/rss-html.hbs:2 views/emails/stationery-html.hbs:4 +#: views/emails/stationery-text.hbs:4 views/lists/forms/edit.hbs:20 +#: views/lists/subscription/edit.hbs:16 +#: views/subscription/partials/subscription-unsubscribe-form.hbs:2 +#: views/subscription/web-manage.mjml.hbs:3 +#: views/subscription/web-unsubscribe.mjml.hbs:1 +#: views/subscription/web-unsubscribe.mjml.hbs:2 routes/forms.js:223 +#: routes/lists.js:288 +msgid "Unsubscribe" +msgstr "Se désabonner" + +#: views/emails/rss-html.hbs:3 views/emails/stationery-html.hbs:5 +#: views/emails/stationery-text.hbs:5 +msgid "View this email in your browser" +msgstr "Consulter dans votre navigateur" + +#: views/emails/stationery-html.hbs:1 views/emails/stationery-text.hbs:1 +msgid "Hey [FIRST_NAME/Customer]," +msgstr "Bonjour [FIRST_NAME/Customer]," + +#: views/emails/stationery-html.hbs:2 views/emails/stationery-text.hbs:2 +msgid "Cheers," +msgstr "Cordialement," + +#: views/index.hbs:1 +msgid "List Management" +msgstr "Gestion de listes" + +#: views/index.hbs:2 +msgid "" +"Mailtrain allows you to easily manage even very large lists. Million " +"subscribers? Not a problem. You can add subscribers manually, through the " +"API or import from a CSV file. All lists come with support for custom fields " +"and merge tags as well." +msgstr "" +"Mailtrain vous permet de gérer facilement vos listes, même très grandes. Des " +"millions d'abonnés ? Aucun problème. Vous pouvez ajouter des abonnés " +"manuellement, via l'API ou en les important depuis un fichier CSV. Toutes " +"les listes disposent de champs de publipostage personnalisables." + +#: views/index.hbs:3 views/index.hbs:7 views/index.hbs:10 views/index.hbs:13 +#: views/index.hbs:16 views/index.hbs:19 views/index.hbs:22 views/index.hbs:25 +#: views/index.hbs:28 +msgid "Show more" +msgstr "Voir plus" + +#: views/index.hbs:4 views/lists/fields/create.hbs:3 +#: views/lists/fields/edit.hbs:3 views/lists/fields/fields.hbs:3 +#: views/lists/fields/fields.hbs:5 views/lists/view.hbs:6 +msgid "Custom Fields" +msgstr "Champs personnalisés" + +#: views/index.hbs:5 +msgid "" +"Text fields, numbers, drop downs or checkboxes, Mailtrain has them all. " +"Every custom field can be included in the generated newsletters through " +"merge tags." +msgstr "" +"Champs texte, nombres, menus déroulants ou cases à cocher, Mailtrain dispose " +"de tout. N'importe quel champ personnalisé peut être inclus dans la " +"newsletter grâce à des étiquettes de fusionnement." + +#: views/index.hbs:6 +msgid "Mailtrain also supports custom forms." +msgstr "Mailtrain permet également de personnaliser les formulaires." + +#: views/index.hbs:8 +msgid "List Segmentation" +msgstr "Segmentation de liste" + +#: views/index.hbs:9 +msgid "" +"Send messages only to list subscribers that match predefined segmentation " +"rules. No need to create separate lists with small differences." +msgstr "" +"Envoyer des messages aux abonnés correspondant à des règles de segmentation " +"prédéfinies. Nul besoin de créer plusieurs listes présentant peu de " +"différences." + +#: views/index.hbs:11 +msgid "RSS Campaigns" +msgstr "Campagnes RSS" + +#: views/index.hbs:12 +msgid "" +"Setup Mailtrain to track RSS feeds and if a new entry is detected in a feed " +"then Mailtrain auto-generates a new campaign using entry data as message " +"contents and sends it to selected subscribers." +msgstr "" +"Configurer Mailtrain pour surveiller des flux RSS, et, dès qu'une nouvelle " +"entrée est détectée dans un flux, auto-générer une nouvelle campagne en " +"utilisant les donnée de la nouvelle entrée comme contenu du message, et " +"l'envoyer aux abonnés sélectionnés" + +#: views/index.hbs:14 +msgid "GPG Encryption" +msgstr "Chiffrement GPG" + +#: views/index.hbs:15 +msgid "" +"If a list has a custom field for a GPG Public Key set then subscribers can " +"upload their GPG public key to receive encrypted messages from the list." +msgstr "" +"Si une liste est paramétrée avec un champ personnalisé pour les clés " +"publiques GPG, alors les utilisateurs pourront télécharger la leur pour " +"recevoir les messages sous forme chiffrée." + +#: views/index.hbs:17 +msgid "Click Stats" +msgstr "Statistiques de clics" + +#: views/index.hbs:18 +msgid "" +"After a campaign is sent, check individual click statistics for every link " +"included in the message." +msgstr "" +"Après l'envoi d'une campagne, consultez les statistiques individuelles de " +"clics pour chaque lien inclus dans le message." + +#: views/index.hbs:20 +msgid "Template Editors" +msgstr "Éditeur de modèle" + +#: views/index.hbs:21 +msgid "" +"Mailtrain ships with GrapeJS and Mosaico built in, two advanced template " +"editors. Mailtrain also offers a code editor if you prefer to handcraft the " +"HTML yourself." +msgstr "" +"Mailtrain inclut GrapeJS et Mosaico, deux éditeurs de templates avancés. " +"Mailtrain offre également un éditeur de code si vous préférer créer le HTML " +"par vous-même." + +#: views/index.hbs:23 +msgid "Send via Any Provider" +msgstr "Envoyer via Any Provider" + +#: views/index.hbs:24 +msgid "" +"You can use any provider that supports SMTP protocol to send out your " +"newsletters. Bounce and complaints handling via webhooks is supported for " +"SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA." +msgstr "" +"Vous pouvez utiliser n'importe quel fournisseur supportant le protocole SMTP " +"pour envoyer votre newletter. Le traitement des rejets et retours via appels " +"web est supporté avec SES, SparkPost, SendGrid et Mailgun, ainsi qu'avec " +"Postfix et ZoneMTA." + +#: views/index.hbs:26 lib/tools.js:137 +msgid "Automation" +msgstr "Automatisation" + +#: views/index.hbs:27 +msgid "" +"Define automation triggers to send specific messages when a user activates " +"the trigger." +msgstr "" +"Définissez des triggers pour envoyer des messages spécifiques lorsqu'une " +"action utilisateur active le déclencheur." + +#: views/layout.hbs:2 +msgid "Toggle navigation" +msgstr "Basculer la navigation" + +#: views/layout.hbs:3 +msgid "Wiki" +msgstr "Wiki" + +#: views/layout.hbs:4 +msgid "Blog" +msgstr "Blog" + +#: views/layout.hbs:5 views/users/account.hbs:2 views/users/account.hbs:3 +msgid "Account" +msgstr "Compte" + +#: views/layout.hbs:6 views/settings.hbs:2 views/settings.hbs:3 +msgid "Settings" +msgstr "Configuration" + +#: views/layout.hbs:8 views/users/api.hbs:2 views/users/api.hbs:3 +msgid "API" +msgstr "API" + +#: views/layout.hbs:9 +msgid "Log out" +msgstr "Déconnexion" + +#: views/layout.hbs:10 views/users/forgot.hbs:2 views/users/login.hbs:2 +#: views/users/login.hbs:3 views/users/login.hbs:9 views/users/reset.hbs:2 +msgid "Sign in" +msgstr "Se connecter" + +#: views/layout.hbs:11 +msgid "Self Hosted Newsletter App Built on Top of Nodemailer" +msgstr "Solution de Newsletter auto-hébergée construite autour de Nodemailer" + +#: views/layout.hbs:12 views/layout.hbs:14 +msgid "Source on GitHub" +msgstr "Source sur GitHub" + +#: views/layout.hbs:13 +msgid "Subscribe to Our Newsletter" +msgstr "S'abonner à notre lettre d'information" + +#: views/lists/create.hbs:2 views/lists/edit.hbs:2 +#: views/lists/fields/create.hbs:2 views/lists/fields/edit.hbs:2 +#: views/lists/fields/fields.hbs:2 views/lists/forms/create.hbs:2 +#: views/lists/forms/edit.hbs:2 views/lists/forms/forms.hbs:2 +#: views/lists/lists.hbs:2 views/lists/lists.hbs:4 +#: views/lists/segments/create.hbs:2 views/lists/segments/edit.hbs:2 +#: views/lists/segments/rule-configure.hbs:2 +#: views/lists/segments/rule-create.hbs:2 views/lists/segments/rule-edit.hbs:2 +#: views/lists/segments/segments.hbs:2 views/lists/segments/view.hbs:2 +#: views/lists/subscription/add.hbs:2 views/lists/subscription/edit.hbs:2 +#: views/lists/subscription/import-failed.hbs:2 +#: views/lists/subscription/import-preview.hbs:2 +#: views/lists/subscription/import.hbs:2 views/lists/view.hbs:2 +#: lib/tools.js:125 routes/lists.js:59 +msgid "Lists" +msgstr "Listes" + +#: views/lists/create.hbs:3 views/lists/create.hbs:4 views/lists/create.hbs:13 +#: views/lists/lists.hbs:3 +msgid "Create List" +msgstr "Créer une liste" + +#: views/lists/create.hbs:6 views/lists/edit.hbs:7 +msgid "List Name" +msgstr "Nom de la liste" + +#: views/lists/create.hbs:9 views/lists/edit.hbs:15 +#: views/triggers/create.hbs:15 views/triggers/edit.hbs:17 +msgid "Subscription" +msgstr "Abonnement" + +#: views/lists/create.hbs:10 views/lists/edit.hbs:16 +msgid "Allow public users to subscribe themselves" +msgstr "Permettre à tous les utilisateurs de s'abonner par eux-mêmes" + +#: views/lists/create.hbs:11 views/lists/edit.hbs:17 +msgid "Unsubscription" +msgstr "Désabonnement" + +#: views/lists/create.hbs:12 views/lists/edit.hbs:18 +msgid "Select how an unsuscription request by subscriber is handled." +msgstr "" +"Choisissez comment une demande de désabonnement doit être prise en compte." + +#: views/lists/edit.hbs:3 views/lists/edit.hbs:4 views/lists/view.hbs:8 +msgid "Edit List" +msgstr "Éditer la liste" + +#: views/lists/edit.hbs:5 +msgid "View List" +msgstr "Voir la liste" + +#: views/lists/edit.hbs:8 +msgid "List ID" +msgstr "Identifiant de liste" + +#: views/lists/edit.hbs:9 +msgid "This is the list ID displayed to the subscribers" +msgstr "Il s'agit de l'identifiant de liste présenté aux utilisateurs" + +#: views/lists/edit.hbs:12 +msgid "Custom Form" +msgstr "Formulaire personnalisé" + +#: views/lists/edit.hbs:13 views/lists/forms/forms.hbs:11 +msgid "Default Mailtrain Form" +msgstr "Formulaire de Mailtrain par défaut" + +#: views/lists/edit.hbs:14 +msgid "" +"The custom form used for this list. You can create a form here." +msgstr "" +"Le formulaire personnalisé utilisé pour cette liste. Vous pouvez créé un " +"formulaire ici." + +#: views/lists/edit.hbs:19 +msgid "Unsubscribe Header" +msgstr "Entête de désabonnement" + +#: views/lists/edit.hbs:20 +msgid "Do not send List-Unsubscribe headers" +msgstr "Ne pas envoyer les entêtes List-Unsubscribe" + +#: views/lists/edit.hbs:21 +msgid "Delete List" +msgstr "Supprimer la liste" + +#: views/lists/fields/create.hbs:4 +msgid "Create Field" +msgstr "Créer un champ" + +#: views/lists/fields/create.hbs:5 views/lists/fields/fields.hbs:4 +msgid "Create Custom Field" +msgstr "Créer un champ personnalisé" + +#: views/lists/fields/create.hbs:6 views/lists/fields/create.hbs:7 +#: views/lists/fields/edit.hbs:7 views/lists/fields/edit.hbs:8 +msgid "Field Name" +msgstr "Nom du champ" + +#: views/lists/fields/create.hbs:8 views/lists/fields/edit.hbs:9 +msgid "Field Type" +msgstr "Type de champ" + +#: views/lists/fields/create.hbs:9 views/lists/fields/edit.hbs:10 +#: lib/models/fields.js:17 +msgid "Text" +msgstr "Texte" + +#: views/lists/fields/create.hbs:10 views/lists/fields/edit.hbs:11 +#: lib/models/fields.js:21 +msgid "Number" +msgstr "Nombre" + +#: views/lists/fields/create.hbs:11 views/lists/fields/edit.hbs:12 +#: lib/models/fields.js:18 +msgid "Website" +msgstr "Site web" + +#: views/lists/fields/create.hbs:12 views/lists/fields/edit.hbs:13 +#: lib/models/fields.js:20 +msgid "GPG Public Key" +msgstr "Clé publique GPG" + +#: views/lists/fields/create.hbs:13 views/lists/fields/edit.hbs:14 +#: lib/models/fields.js:19 +msgid "Multi-line text" +msgstr "Texte multi-lignes" + +#: views/lists/fields/create.hbs:14 views/lists/fields/edit.hbs:15 +msgid "JSON" +msgstr "JSON" + +#: views/lists/fields/create.hbs:15 views/lists/fields/edit.hbs:16 +msgid "Date" +msgstr "Date" + +#: views/lists/fields/create.hbs:16 views/lists/fields/edit.hbs:17 +msgid "Date (MM/DD/YYYY)" +msgstr "Date (MM/JJ/AAAA)" + +#: views/lists/fields/create.hbs:17 views/lists/fields/edit.hbs:18 +#: lib/models/fields.js:26 +msgid "Date (DD/MM/YYYY)" +msgstr "Date (JJ/MM/AAAA)" + +#: views/lists/fields/create.hbs:18 views/lists/fields/edit.hbs:19 +msgid "Birthday" +msgstr "Date de naissance" + +#: views/lists/fields/create.hbs:19 views/lists/fields/edit.hbs:20 +#: lib/models/fields.js:27 +msgid "Birthday (MM/DD)" +msgstr "Date de naissance (MM/JJ)" + +#: views/lists/fields/create.hbs:20 views/lists/fields/edit.hbs:21 +#: lib/models/fields.js:28 +msgid "Birthday (DD/MM)" +msgstr "Date de naissance (JJ/MM)" + +#: views/lists/fields/create.hbs:21 views/lists/fields/edit.hbs:22 +msgid "Grouped" +msgstr "Groupé" + +#: views/lists/fields/create.hbs:22 views/lists/fields/edit.hbs:23 +msgid "Drop Downs" +msgstr "Menus déroulants" + +#: views/lists/fields/create.hbs:23 views/lists/fields/edit.hbs:24 +#: lib/models/fields.js:22 +msgid "Radio Buttons" +msgstr "Boutons radio" + +#: views/lists/fields/create.hbs:24 views/lists/fields/edit.hbs:25 +#: lib/models/fields.js:23 +msgid "Checkboxes" +msgstr "Cases à cocher" + +#: views/lists/fields/create.hbs:25 views/lists/fields/edit.hbs:26 +msgid "Option for a group value" +msgstr "Option pour un groupe de valeurs" + +#: views/lists/fields/create.hbs:26 views/lists/fields/edit.hbs:27 +msgid "Group" +msgstr "Groupe" + +#: views/lists/fields/create.hbs:28 views/lists/fields/edit.hbs:29 +msgid "Required for group options" +msgstr "Options de groupe requis" + +#: views/lists/fields/create.hbs:29 views/lists/fields/create.hbs:30 +#: views/lists/fields/edit.hbs:35 views/lists/fields/edit.hbs:36 +#: views/lists/fields/fields.hbs:9 +msgid "Default merge tag value" +msgstr "Valeur par défaut pour ce champ de publipostage" + +#: views/lists/fields/create.hbs:32 views/lists/fields/edit.hbs:34 +msgid "" +"For group elements like checkboxes you can control the appearance of the " +"merge tag with an optional template. The template uses handlebars syntax and " +"you can find all values from {{values}} array, for example " +"{{#each values}} {{this}} {{/each}}. If template is not defined " +"then multiple values are joined with commas. You can also use this template " +"to render JSON values (if the JSON is an array then the array is exposed as " +"values, otherwise you can access the JSON keys directly)." +msgstr "" +"Pour les éléments groupés comme les cases à cocher, vous pouvez contrôler " +"l'apparence du champ de publipostage avec une template optionnelle. La " +"template utilise la syntaxe Handlebars et vous trouvez les valeurs dans le " +"tableau {{values}}, par exemple {{#each values}} {{this}} " +"{{/each}}. Si aucune template n'est définie, alors les valeurs sont " +"concaténnées avec des virgules. Vous pouvez également utiliser la template " +"pour présenter des valeurs JSON (si le JSON est un tableau, alors le tableau " +"est accessible dans values, sinon vous accédez aux clés JSON " +"directement)." + +#: views/lists/fields/create.hbs:33 views/lists/fields/edit.hbs:37 +msgid "Visible" +msgstr "Visible" + +#: views/lists/fields/create.hbs:34 +msgid "Add Field" +msgstr "Ajouter un champ" + +#: views/lists/fields/edit.hbs:4 +msgid "Edit Field" +msgstr "Modifier le champ" + +#: views/lists/fields/edit.hbs:5 +msgid "Edit Custom Field" +msgstr "Modifier le champ personnalisé" + +#: views/lists/fields/edit.hbs:6 +msgid "Back to fields" +msgstr "Retour aux champs" + +#: views/lists/fields/edit.hbs:30 views/lists/fields/fields.hbs:8 +#: views/mosaico/editor.hbs:2 views/partials/merge-tag-reference.hbs:3 +msgid "Merge tag" +msgstr "Champ de publipostage" + +#: views/lists/fields/edit.hbs:31 +msgid "Merge Tag" +msgstr "Champ de publipostage" + +#: views/lists/fields/edit.hbs:32 +msgid "Put this tag in your content:" +msgstr "Utilisez ce mot-clé dans votre contenu :" + +#: views/lists/fields/edit.hbs:38 +msgid "Delete Field" +msgstr "Supprimer le champ" + +#: views/lists/fields/fields.hbs:7 views/lists/view.hbs:26 +#: views/report-templates/partials/report-template-fields.hbs:5 +msgid "Type" +msgstr "Type" + +#: views/lists/fields/fields.hbs:10 views/lists/fields/fields.hbs:11 +#: views/lists/forms/edit.hbs:26 views/lists/forms/forms.hbs:8 +#: views/lists/segments/segments.hbs:8 views/lists/segments/view.hbs:12 +#: views/triggers/triggers.hbs:14 routes/campaigns.js:277 +#: routes/campaigns.js:569 routes/campaigns.js:658 routes/campaigns.js:707 +#: routes/lists.js:170 routes/lists.js:257 routes/report-templates.js:51 +#: routes/templates.js:183 routes/triggers.js:345 +msgid "Edit" +msgstr "Modifier" + +#: views/lists/forms/create.hbs:3 views/lists/forms/edit.hbs:3 +#: views/lists/forms/forms.hbs:3 views/lists/forms/forms.hbs:5 +#: views/lists/view.hbs:5 +msgid "Custom Forms" +msgstr "Formulaires personnalisés" + +#: views/lists/forms/create.hbs:4 +msgid "Create Form" +msgstr "Créer un formulaire" + +#: views/lists/forms/create.hbs:5 views/lists/forms/forms.hbs:4 +msgid "Create Custom Form" +msgstr "Créer un formulaire personnalisé" + +#: views/lists/forms/create.hbs:6 views/lists/forms/create.hbs:7 +#: views/lists/forms/edit.hbs:7 views/lists/forms/edit.hbs:8 +msgid "Form Name" +msgstr "Nom du formulaire" + +#: views/lists/forms/create.hbs:8 +msgid "Add Form" +msgstr "Ajouter un formulaire" + +#: views/lists/forms/edit.hbs:4 +msgid "Edit Form" +msgstr "Modifier le formulaire" + +#: views/lists/forms/edit.hbs:5 +msgid "Edit Custom Form" +msgstr "Modifier le formulaire personnalisé" + +#: views/lists/forms/edit.hbs:6 +msgid "Back to forms" +msgstr "Retour aux formulaires" + +#: views/lists/forms/edit.hbs:10 +msgid "Optional comments about this form" +msgstr "Commentaire optionnel sur ce formulaire" + +#: views/lists/forms/edit.hbs:11 +msgid "Form Preview" +msgstr "Prévisualisation du formulaire" + +#: views/lists/forms/edit.hbs:12 +msgid "" +"Note: These links are solely for a quick preview. If you submit a preview " +"form you'll get redirected to the list's default form." +msgstr "" +"NB : Ces liens sont fournis uniquement pour un avoir aperçu rapide. Si vous " +"utilisez ces formulaires vous serez redirigés vers les formulaires par " +"défaut." + +#: views/lists/forms/edit.hbs:13 views/lists/subscription/add.hbs:16 +#: views/subscription/mail-unsubscription-confirmed-html.mjml.hbs:4 +#: views/subscription/mail-unsubscription-confirmed-text.hbs:4 +#: routes/forms.js:157 routes/lists.js:288 +msgid "Subscribe" +msgstr "Abonnement" + +#: views/lists/forms/edit.hbs:14 +msgid "Confirm Subscription Notice" +msgstr "Confirmation d'abonnement" + +#: views/lists/forms/edit.hbs:15 +msgid "Confirm Unsubscription Notice" +msgstr "Confirmation de désabonnement" + +#: views/lists/forms/edit.hbs:16 +msgid "Subscribed Notice" +msgstr "Confirmation d'abonnement" + +#: views/lists/forms/edit.hbs:17 +msgid "Updated Notice" +msgstr "Notification enregistrée" + +#: views/lists/forms/edit.hbs:18 +msgid "Unsubscribed Notice" +msgstr "Mention de désabonnement" + +#: views/lists/forms/edit.hbs:19 +msgid "Manual Unsubscribe Notice" +msgstr "Information de désabonnement manuel" + +#: views/lists/forms/edit.hbs:21 routes/forms.js:205 +msgid "Manage" +msgstr "Gérer" + +#: views/lists/forms/edit.hbs:22 +msgid "Manage Address" +msgstr "Gestion des adresses" + +#: views/lists/forms/edit.hbs:23 +msgid "Create a test user for additional options" +msgstr "Créer un utilisateur test pour les options additionnelles" + +#: views/lists/forms/edit.hbs:24 views/report-templates/create.hbs:3 +#: views/report-templates/edit.hbs:3 +#: views/report-templates/report-templates.hbs:3 views/templates/create.hbs:2 +#: views/templates/edit.hbs:2 views/templates/templates.hbs:2 +#: views/templates/templates.hbs:4 lib/tools.js:129 routes/templates.js:27 +msgid "Templates" +msgstr "Modèles" + +#: views/lists/forms/edit.hbs:25 +msgid "Fields" +msgstr "Champs" + +#: views/lists/forms/edit.hbs:27 +msgid "Form Fields" +msgstr "Champs de formulaire" + +#: views/lists/forms/edit.hbs:28 +msgid "Fields hidden on subscription page:" +msgstr "Champs masqués sur la page d'abonnement :" + +#: views/lists/forms/edit.hbs:29 +msgid "Fields shown on subscription page:" +msgstr "Champs affichés sur la page d'abonnement :" + +#: views/lists/forms/edit.hbs:30 +msgid "Fields hidden on preferences page:" +msgstr "Champs masqués sur la page de préférences :" + +#: views/lists/forms/edit.hbs:31 +msgid "Fields shown on preferences page:" +msgstr "Champs affichés sur la page de préférences :" + +#: views/lists/forms/edit.hbs:32 +msgid "Delete Form" +msgstr "Supprimer le formulaire" + +#: views/lists/forms/forms.hbs:10 +msgid "The default form for this list is:" +msgstr "Le formulaire par défaut pour cette liste est :" + +#: views/lists/lists.hbs:6 +msgid "ID" +msgstr "ID" + +#: views/lists/lists.hbs:7 views/reports/partials/report-fields.hbs:10 +msgid "Subscribers" +msgstr "Abonnés" + +#: views/lists/segments/create.hbs:3 views/lists/segments/edit.hbs:3 +#: views/lists/segments/rule-configure.hbs:3 +#: views/lists/segments/rule-create.hbs:3 views/lists/segments/rule-edit.hbs:3 +#: views/lists/segments/segments.hbs:3 views/lists/segments/segments.hbs:5 +#: views/lists/segments/view.hbs:3 views/lists/view.hbs:7 +#: views/lists/view.hbs:14 +msgid "Segments" +msgstr "Segments" + +#: views/lists/segments/create.hbs:4 views/lists/segments/create.hbs:5 +#: views/lists/segments/rule-configure.hbs:4 +#: views/lists/segments/rule-create.hbs:4 views/lists/segments/rule-edit.hbs:4 +#: views/lists/segments/segments.hbs:4 +msgid "Create Segment" +msgstr "Créer un segment" + +#: views/lists/segments/create.hbs:6 views/lists/segments/create.hbs:7 +#: views/lists/segments/edit.hbs:7 views/lists/segments/edit.hbs:8 +msgid "Segment Name" +msgstr "Nom du segment" + +#: views/lists/segments/create.hbs:8 views/lists/segments/edit.hbs:9 +msgid "Rule match" +msgstr "Correspondance des règles" + +#: views/lists/segments/create.hbs:10 views/lists/segments/edit.hbs:11 +msgid "All rules must match" +msgstr "Toutes les règles doivent correspondre" + +#: views/lists/segments/create.hbs:11 views/lists/segments/edit.hbs:12 +msgid "Any rule can match" +msgstr "Au moins une des règles doit correspondre" + +#: views/lists/segments/create.hbs:12 +msgid "Add Segment" +msgstr "Ajouter un segment" + +#: views/lists/segments/edit.hbs:4 views/lists/segments/edit.hbs:5 +#: views/lists/segments/view.hbs:6 views/lists/view.hbs:12 +msgid "Edit Segment" +msgstr "Modifier le segment" + +#: views/lists/segments/edit.hbs:6 +msgid "Back to segments" +msgstr "Retour aux segments" + +#: views/lists/segments/edit.hbs:13 +msgid "Delete Segment" +msgstr "Supprimer le segment" + +#: views/lists/segments/rule-configure.hbs:5 +#: views/lists/segments/rule-create.hbs:5 views/lists/segments/rule-edit.hbs:5 +#: views/lists/segments/view.hbs:4 +msgid "Create Rule" +msgstr "Créer une règle" + +#: views/lists/segments/rule-configure.hbs:6 +#: views/lists/segments/rule-create.hbs:6 views/lists/segments/rule-edit.hbs:6 +#: views/lists/segments/view.hbs:10 +msgid "Rule" +msgstr "Règle" + +#: views/lists/segments/rule-configure.hbs:7 +#: views/lists/segments/rule-edit.hbs:7 +msgid "Condition" +msgstr "Condition" + +#: views/lists/segments/rule-configure.hbs:8 +#: views/lists/segments/rule-edit.hbs:8 +msgid "Equals" +msgstr "vaut" + +#: views/lists/segments/rule-configure.hbs:9 +#: views/lists/segments/rule-edit.hbs:9 +msgid "Not squals" +msgstr "Différent" + +#: views/lists/segments/rule-configure.hbs:10 +#: views/lists/segments/rule-configure.hbs:11 +#: views/lists/segments/rule-configure.hbs:13 +#: views/lists/segments/rule-configure.hbs:16 +#: views/lists/segments/rule-configure.hbs:28 +#: views/lists/segments/rule-configure.hbs:33 +#: views/lists/segments/rule-edit.hbs:10 views/lists/segments/rule-edit.hbs:11 +#: views/lists/segments/rule-edit.hbs:13 views/lists/segments/rule-edit.hbs:18 +#: views/lists/segments/rule-edit.hbs:32 views/lists/segments/rule-edit.hbs:37 +#: views/lists/segments/view.hbs:11 +msgid "Value" +msgstr "Valeur" + +#: views/lists/segments/rule-configure.hbs:12 +#: views/lists/segments/rule-edit.hbs:12 +msgid "" +"Use % for wildcard character, e.g. \"%test\" to match all values that end " +"with \"test\"" +msgstr "" +"Utiliser % comme caractère joker, par ex. \"%test\" correspond à toutes les " +"valeurs qui finissent par \"test\"" + +#: views/lists/segments/rule-configure.hbs:14 +#: views/lists/segments/rule-configure.hbs:17 +#: views/lists/segments/rule-configure.hbs:29 +#: views/lists/segments/rule-edit.hbs:14 views/lists/segments/rule-edit.hbs:19 +#: views/lists/segments/rule-edit.hbs:33 +msgid "Use exact match" +msgstr "Correspondance exacte" + +#: views/lists/segments/rule-configure.hbs:15 +#: views/lists/segments/rule-configure.hbs:18 +#: views/lists/segments/rule-configure.hbs:30 +#: views/lists/segments/rule-edit.hbs:15 views/lists/segments/rule-edit.hbs:20 +#: views/lists/segments/rule-edit.hbs:34 +msgid "Use range match" +msgstr "Correspondance par plage" + +#: views/lists/segments/rule-configure.hbs:19 +#: views/lists/segments/rule-edit.hbs:23 +msgid "Use relative range match" +msgstr "Correspondance par plages relatives" + +#: views/lists/segments/rule-configure.hbs:20 +#: views/lists/segments/rule-configure.hbs:31 +#: views/lists/segments/rule-edit.hbs:16 views/lists/segments/rule-edit.hbs:21 +#: views/lists/segments/rule-edit.hbs:24 views/lists/segments/rule-edit.hbs:35 +msgid "From" +msgstr "De" + +#: views/lists/segments/rule-configure.hbs:21 +#: views/lists/segments/rule-configure.hbs:25 +#: views/lists/segments/rule-edit.hbs:25 views/lists/segments/rule-edit.hbs:29 +msgid "days" +msgstr "jours" + +#: views/lists/segments/rule-configure.hbs:22 +#: views/lists/segments/rule-configure.hbs:26 +#: views/lists/segments/rule-edit.hbs:26 views/lists/segments/rule-edit.hbs:30 +msgid "before today" +msgstr "avant aujourd'hui" + +#: views/lists/segments/rule-configure.hbs:23 +#: views/lists/segments/rule-configure.hbs:27 +#: views/lists/segments/rule-edit.hbs:27 views/lists/segments/rule-edit.hbs:31 +msgid "after today" +msgstr "après aujourd'hui" + +#: views/lists/segments/rule-configure.hbs:24 +#: views/lists/segments/rule-configure.hbs:32 +#: views/lists/segments/rule-edit.hbs:17 views/lists/segments/rule-edit.hbs:22 +#: views/lists/segments/rule-edit.hbs:28 views/lists/segments/rule-edit.hbs:36 +msgid "to" +msgstr "à" + +#: views/lists/segments/rule-configure.hbs:34 +#: views/lists/segments/rule-edit.hbs:38 lib/models/segments.js:156 +#: lib/models/segments.js:419 +msgid "Selected" +msgstr "Sélectionné" + +#: views/lists/segments/rule-configure.hbs:35 +#: views/lists/segments/rule-edit.hbs:39 lib/models/segments.js:156 +#: lib/models/segments.js:419 +msgid "Not selected" +msgstr "Non sélectionné" + +#: views/lists/segments/rule-configure.hbs:36 +msgid "Add Rule" +msgstr "Ajouter une règle" + +#: views/lists/segments/rule-create.hbs:8 +#: views/lists/subscription/import.hbs:18 +#: views/reports/create-select-template.hbs:5 +#: views/triggers/create-select.hbs:9 +msgid "Next" +msgstr "Suivant" + +#: views/lists/segments/rule-edit.hbs:40 +msgid "Delete Rule" +msgstr "Supprimer la règle" + +#: views/lists/segments/segments.hbs:7 +msgid "Match" +msgstr "Correspondance" + +#: views/lists/segments/view.hbs:5 views/lists/view.hbs:13 +msgid "Segment" +msgstr "Segment" + +#: views/lists/segments/view.hbs:7 +msgid "Match rules" +msgstr "Règles de correspondance" + +#: views/lists/segments/view.hbs:8 +msgid "Matching subscribers" +msgstr "Abonnés en correspondance" + +#: views/lists/segments/view.hbs:9 +msgid "show" +msgstr "voir" + +#: views/lists/subscription/add.hbs:3 views/lists/subscription/add.hbs:4 +msgid "Add subscriber" +msgstr "Ajouter un abonné" + +#: views/lists/subscription/add.hbs:5 +#: views/subscription/partials/subscription-custom-fields.hbs:1 +#: views/users/account.hbs:7 +msgid "Email Address" +msgstr "Adresse mail" + +#: views/lists/subscription/add.hbs:8 views/lists/subscription/edit.hbs:9 +#: views/settings.hbs:85 views/settings.hbs:100 +#: views/subscription/partials/subscription-custom-fields.hbs:6 +msgid "Begins with" +msgstr "qui commence par" + +#: views/lists/subscription/add.hbs:9 views/lists/subscription/edit.hbs:10 +msgid "" +"Insert a GPG public key that will be used to encrypt messages sent this " +"subscriber" +msgstr "" +"Insérez une clé publique GPG pour chiffrer les messages envoyés à cet abonné" + +#: views/lists/subscription/add.hbs:11 views/lists/subscription/edit.hbs:12 +#: views/lists/subscription/import-preview.hbs:9 +msgid "Timezone" +msgstr "Fuseau horaire" + +#: views/lists/subscription/add.hbs:13 views/lists/subscription/edit.hbs:13 +msgid "Test user?" +msgstr "Utilisateur pour tests ?" + +#: views/lists/subscription/add.hbs:14 views/lists/subscription/edit.hbs:14 +msgid "" +"If checked then this subscription can be used for previewing campaign " +"messages" +msgstr "" +"Si activé, cet abonnement peut être utilisé pour prévisualiser les message " +"des campagnes" + +#: views/lists/subscription/add.hbs:15 +msgid "" +"This person will not receive a confirmation email so make sure that you have " +"permission to email them." +msgstr "" +"Cette personne ne recevra pas de mail de confirmation, aussi assurez-vous " +"que vous avez le droit de lui envoyer des messages." + +#: views/lists/subscription/edit.hbs:3 views/lists/subscription/edit.hbs:4 +msgid "Edit subscriber" +msgstr "Modifier l'abonné" + +#: views/lists/subscription/edit.hbs:5 +#: views/lists/subscription/import-failed.hbs:5 +msgid "Back to list" +msgstr "Retour à la liste" + +#: views/lists/subscription/edit.hbs:6 +#: views/lists/subscription/import-preview.hbs:6 +#: views/subscription/partials/subscription-unsubscribe-form.hbs:1 +#: lib/helpers.js:42 lib/models/segments.js:11 +msgid "Email address" +msgstr "Adresse mail" + +#: views/lists/subscription/edit.hbs:17 +msgid "Delete Subscription" +msgstr "Supprimer l'abonnement" + +#: views/lists/subscription/import-failed.hbs:3 +msgid "Import status" +msgstr "Statut de l'import" + +#: views/lists/subscription/import-failed.hbs:4 +msgid "Failed addresses" +msgstr "Adresses en erreur" + +#: views/lists/subscription/import-failed.hbs:6 +msgid "" +"Role-based addresses like postmaster@example.com are blocked when importing. " +"Subscribers with role-based email addresses can join your list using the " +"subscription form" +msgstr "" +"Les adresse administratives comme postmaster@example.com sont supprimées " +"lors des imports. Les utilisateurs disposant d'adresses administrativves " +"doivent utiliser le formulaire d'abonnement" + +#: views/lists/subscription/import-failed.hbs:7 +msgid "see here" +msgstr "voir ici" + +#: views/lists/subscription/import-failed.hbs:9 +msgid "Fail reason" +msgstr "Raison de l'échec" + +#: views/lists/subscription/import-preview.hbs:3 +#: views/lists/subscription/import-preview.hbs:4 +#: views/lists/subscription/import.hbs:3 views/lists/subscription/import.hbs:4 +msgid "Import subscribers" +msgstr "Importer des abonnés" + +#: views/lists/subscription/import-preview.hbs:10 views/users/api.hbs:21 +#: views/users/api.hbs:36 views/users/api.hbs:44 views/users/api.hbs:52 +#: views/users/api.hbs:64 views/users/api.hbs:75 views/users/api.hbs:83 +#: views/users/api.hbs:91 views/users/api.hbs:96 views/users/api.hbs:101 +#: views/users/api.hbs:106 +msgid "Example" +msgstr "Exemple" + +#: views/lists/subscription/import-preview.hbs:11 +msgid "Start import" +msgstr "Lancer l'importation" + +#: views/lists/subscription/import.hbs:5 +msgid "CSV File" +msgstr "Fichier CSV" + +#: views/lists/subscription/import.hbs:6 +msgid "The first line must contain column headings" +msgstr "La première ligne doit contenir les entêtes de colonnes" + +#: views/lists/subscription/import.hbs:7 +msgid "CSV delimiter" +msgstr "Délimiteur CSV" + +#: views/lists/subscription/import.hbs:8 +msgid "Categorize the imported subscribers as" +msgstr "Catégoriser les abonnés importés comme" + +#: views/lists/subscription/import.hbs:9 routes/lists.js:206 +msgid "Subscribed" +msgstr "Abonné" + +#: views/lists/subscription/import.hbs:10 +msgid "Regular subscriber addresses" +msgstr "Abonnés ordinaires" + +#: views/lists/subscription/import.hbs:11 +msgid "Subscribed (Force)" +msgstr "Abonné (forcé)" + +#: views/lists/subscription/import.hbs:12 +msgid "Regular subscriber addresses, resubscribe users that have unsubscribed" +msgstr "" +"Abonnés ordinaires, et réabonner les utilisateurs qui s'étaient désabonnés" + +#: views/lists/subscription/import.hbs:14 +msgid "Suppressed emails that will be unsubscribed from your list" +msgstr "Désabonnements. Les adresses seront désabonnées de la liste" + +#: views/lists/subscription/import.hbs:15 +msgid "Check imported emails" +msgstr "Vérifier les adresses mail importées" + +#: views/lists/subscription/import.hbs:16 views/triggers/triggers.hbs:12 +msgid "Enabled" +msgstr "Activé" + +#: views/lists/subscription/import.hbs:17 views/triggers/triggers.hbs:13 +msgid "Disabled" +msgstr "Désactivé" + +#: views/lists/view.hbs:3 +msgid "Subscription Form" +msgstr "Formulaire d'abonnement" + +#: views/lists/view.hbs:4 +msgid "List Actions" +msgstr "Actions sur la liste" + +#: views/lists/view.hbs:9 views/triggers/create-select.hbs:3 +#: views/triggers/create-select.hbs:4 views/triggers/create.hbs:3 +#: views/triggers/create.hbs:4 views/triggers/create.hbs:27 +#: views/triggers/triggers.hbs:3 +msgid "Create Trigger" +msgstr "Créer un déclencheur" + +#: views/lists/view.hbs:10 +msgid "Add Subscriber" +msgstr "Ajouter un abonné" + +#: views/lists/view.hbs:11 +msgid "Import Subscribers" +msgstr "Importer des abonnés" + +#: views/lists/view.hbs:15 +msgid "Create New Segment" +msgstr "Créer un nouveau segment" + +#: views/lists/view.hbs:16 +msgid "Filter" +msgstr "Filtre" + +#: views/lists/view.hbs:17 +msgid "Subscriptions" +msgstr "Abonnements" + +#: views/lists/view.hbs:18 +msgid "Imports" +msgstr "Imports" + +#: views/lists/view.hbs:25 routes/campaigns.js:256 routes/lists.js:300 +msgid "Finished" +msgstr "Terminé" + +#: views/lists/view.hbs:27 +msgid "Added" +msgstr "Ajouté" + +#: views/lists/view.hbs:28 +msgid "Updated" +msgstr "Mis à jour" + +#: views/lists/view.hbs:29 +msgid "Failed" +msgstr "Echec" + +#: views/lists/view.hbs:31 +msgid "" +"Are you sure? This action should only be called to resolve stalled imports" +msgstr "" +"Êtes-vous sûr ? Cette action ne doit être appelée que pour interrompre les " +"imports bloqués" + +#: views/lists/view.hbs:32 +msgid "Restart" +msgstr "Redémarrer" + +#: views/mosaico/editor.hbs:1 views/partials/merge-tag-reference.hbs:1 +msgid "Merge tag reference" +msgstr "Lexique des champs de publipostage" + +#: views/mosaico/editor.hbs:4 +msgid "MOSAICO Responsive Email Designer" +msgstr "Editeur de mail responsive MOSAICO" + +#: views/mosaico/editor.hbs:5 +msgid "Sucessfully saved" +msgstr "Enregistré" + +#: views/mosaico/editor.hbs:6 +msgid "An error occured while saving the document" +msgstr "Une erreur est survenue lors de l\\'enregistrement du document" + +#: views/mosaico/editor.hbs:7 +msgid "Unsaved changes will be lost. Close now?" +msgstr "" +"Les éventuelles modifications non sauvegardées seront perdues. Fermer " +"maintenant ?" + +#: views/mosaico/editor.hbs:8 views/mosaico/editor.hbs:9 +msgid "Tags" +msgstr "Champs de publipostage" + +#: views/partials/codeeditor.hbs:1 views/partials/grapejs.hbs:1 +#: views/partials/mosaico.hbs:1 views/partials/summernote.hbs:1 +msgid "Template content (HTML)" +msgstr "Contenu du modèle (HTML)" + +#: views/partials/editor-navbar.hbs:1 +msgid "SAVE" +msgstr "ENREGISTRER" + +#: views/partials/editor-navbar.hbs:2 +msgid "SAVING" +msgstr "ENREGISTRE" + +#: views/partials/editor-navbar.hbs:3 +msgid "CLOSE" +msgstr "FERMER" + +#: views/partials/grapejs.hbs:2 +msgid "Open GrapeJS" +msgstr "Ouvrir GrapeJS" + +#: views/partials/html-preview.hbs:1 +msgid "Toggle HTML preview" +msgstr "Basculer la prévisualisation HTML" + +#: views/partials/html-to-text.hbs:1 +msgid "" +"To extract the text from HTML click here." +msgstr "" +"Pour extraire le texte du HTML, cliquez ici." + +#: views/partials/html-to-text.hbs:2 +msgid "" +"Please note that your existing plaintext in the field above will be " +"overwritten. This feature uses the Premailer API, a third party " +"service. Their Terms of Service and Privacy Policy apply." +msgstr "" +"Notez bien que le texte présent dans le champ ci-dessus sera remplacé. Cette " +"fonctionnalité utilisePremailer API, un service tiers. Merci de " +"vérifier leurs Conditions générales d'utilisation et de vie privée, qui " +"s'appliquent en ce cas." + +#: views/partials/html-to-text.hbs:3 +msgid "An error occurred while talking to the server" +msgstr "Une erreur est intervenue lors du dialogue avec le serveur" + +#: views/partials/merge-tag-reference.hbs:2 +msgid "" +"Merge tags are tags that are replaced before sending out the message. The " +"format of the merge tag is the following: [TAG_NAME] or " +"[TAG_NAME/fallback] where fallback is an optional " +"text value used when TAG_NAME is empty." +msgstr "" +"Les champs de publipostage sont des champs qui sont remplacés avant l'envoi " +"du message. Le format du champ de publipostage est le suivant : " +"[ETIQUETTE] ou [ETIQUETTE/defaut]defaut est une valeur textuelle optionnelle utilisée lorsque ETIQUETTE est vide." + +#: views/partials/modal-carousel.hbs:1 +msgid "{{title}}" +msgstr "{{title}}" + +#: views/partials/mosaico.hbs:2 +msgid "Open Mosaico" +msgstr "Ouvrir Mosaico" + +#: views/partials/plaintext.hbs:1 +msgid "Template content (plaintext)" +msgstr "Contenu du modèle (Texte)" + +#: views/report-templates/create.hbs:2 views/report-templates/edit.hbs:2 +#: views/report-templates/report-templates.hbs:2 +#: views/reports/create-select-template.hbs:2 views/reports/create.hbs:2 +#: views/reports/edit.hbs:2 views/reports/output.hbs:2 +#: views/reports/reports.hbs:2 views/reports/reports.hbs:5 +#: views/reports/view.hbs:2 lib/tools.js:144 routes/reports.js:31 +msgid "Reports" +msgstr "Rapports" + +#: views/report-templates/create.hbs:4 views/report-templates/create.hbs:6 +#: views/report-templates/report-templates.hbs:4 views/templates/create.hbs:3 +#: views/templates/create.hbs:4 views/templates/create.hbs:12 +#: views/templates/templates.hbs:3 +msgid "Create Template" +msgstr "Créer un modèle" + +#: views/report-templates/create.hbs:5 routes/report-templates.js:231 +msgid "Create Report Template" +msgstr "Créer un modèle de rapport" + +#: views/report-templates/edit.hbs:4 views/templates/edit.hbs:3 +#: views/templates/edit.hbs:4 +msgid "Edit Template" +msgstr "Modifier le modèle" + +#: views/report-templates/edit.hbs:5 routes/report-templates.js:262 +msgid "Edit Report Template" +msgstr "Modifier le modèle de rapport" + +#: views/report-templates/edit.hbs:6 views/templates/edit.hbs:12 +msgid "Delete Template" +msgstr "Supprimer le modèle" + +#: views/report-templates/edit.hbs:7 +msgid "Update and Stay" +msgstr "Mettre à jour et poursuivre" + +#: views/report-templates/edit.hbs:8 +msgid "Update and Leave" +msgstr "Mettre à jour et quitter" + +#: views/report-templates/partials/report-template-fields.hbs:2 +msgid "Template Name" +msgstr "Nom du modèle" + +#: views/report-templates/partials/report-template-fields.hbs:6 +msgid "User selectable fields" +msgstr "Champs utilisateur utilisables" + +#: views/report-templates/partials/report-template-fields.hbs:7 +msgid "Data processing code" +msgstr "Code de traitement des données" + +#: views/report-templates/partials/report-template-fields.hbs:8 +msgid "Rendering template" +msgstr "Modèle de rendu" + +#: views/report-templates/report-templates.hbs:5 +msgid "Blank" +msgstr "Vide" + +#: views/report-templates/report-templates.hbs:6 +msgid "All Subscribers" +msgstr "Tous les abonnés" + +#: views/report-templates/report-templates.hbs:7 +msgid "Grouped Subscribers" +msgstr "Abonnements groupés" + +#: views/report-templates/report-templates.hbs:8 +msgid "Export List as CSV" +msgstr "Exporter la liste au format CSV" + +#: views/report-templates/report-templates.hbs:9 views/reports/reports.hbs:4 +#: routes/report-templates.js:29 +msgid "Report Templates" +msgstr "Modèles de rapport" + +#: views/reports/create-select-template.hbs:3 +#: views/reports/create-select-template.hbs:4 views/reports/create.hbs:3 +#: views/reports/create.hbs:4 views/reports/create.hbs:5 +#: views/reports/reports.hbs:3 routes/reports.js:81 +msgid "Create Report" +msgstr "Créer un rapport" + +#: views/reports/edit.hbs:3 views/reports/edit.hbs:4 routes/reports.js:151 +msgid "Edit Report" +msgstr "Modifier le rapport" + +#: views/reports/edit.hbs:5 +msgid "Delete Report" +msgstr "Supprimer le rapport" + +#: views/reports/partials/report-fields.hbs:2 +msgid "Report Name" +msgstr "Nom du rapport" + +#: views/reports/partials/report-fields.hbs:8 +#: views/reports/partials/report-fields.hbs:11 +msgid "" +"Select a campaign in the table above by clicking on the respective row " +"number." +msgstr "" +"Sélectionnez une campagne dans la table ci-dessus en cliquant sur son numéro " +"de ligne." + +#: views/reports/partials/report-select-template.hbs:1 +msgid "Report Template" +msgstr "Modèle de rapport" + +#: views/settings.hbs:5 +msgid "Service Address (URL)" +msgstr "Adresse du service (URL)" + +#: views/settings.hbs:6 +msgid "Enter the URL this service can be reached from" +msgstr "Entrez l'URL à laquelle ce service peut être joint" + +#: views/settings.hbs:7 +msgid "Admin Email" +msgstr "Email de l'administrateur" + +#: views/settings.hbs:8 +msgid "" +"Enter the email address that will be used as \"from\" for system messages" +msgstr "Entrez l'adresse mail d'émission des messages système" + +#: views/settings.hbs:9 +msgid "Disable WYSIWYG editor" +msgstr "Désactiver l'éditeur WYSIWYG" + +#: views/settings.hbs:10 +msgid "If checked then message editor displays HTML code without the preview" +msgstr "" +"Si activé, l'editeur HTML affiche le code HTML sans la prévisualisation" + +#: views/settings.hbs:11 +msgid "Disable subscription confirmation messages" +msgstr "Désactiver les messages de confirmation d'abonnement" + +#: views/settings.hbs:12 +msgid "" +"If checked then do not send a confirmation message that states the " +"subscriber is now subscribed or unsubscribed. This does not disable double " +"opt-in messages." +msgstr "" +"Si activé, aucun message de confirmation suivant lequel un utilisateur a été " +"abonné ou désabonné ne sera envoyé. Cela ne désactive pas les messages de " +"confirmation d'abonnement." + +#: views/settings.hbs:13 +msgid "Tracking ID" +msgstr "Identifiant de suivi" + +#: views/settings.hbs:14 +msgid "Enter Google Analytics tracking code" +msgstr "Entrez le code de suivi Google Analytics" + +#: views/settings.hbs:15 +msgid "Frontpage shout out" +msgstr "Annonce de la page d'accueil" + +#: views/settings.hbs:16 +msgid "HTML code shown in the front page header section" +msgstr "Code HTML présent sur l'entête de la page d'accueil" + +#: views/settings.hbs:17 +msgid "X-Mailer header" +msgstr "Entête X-Mailer" + +#: views/settings.hbs:18 +msgid "Set a custom X-Mailer header value or leave empty to disable it" +msgstr "" +"Renseignez un entête X-Mailer personnalisé, et laissez vide pour désactiver" + +#: views/settings.hbs:19 +msgid "Campaign defaults" +msgstr "Paramètres par défaut de la campagne" + +#: views/settings.hbs:20 +msgid "Sender name" +msgstr "Nom de l'émetteur" + +#: views/settings.hbs:21 +msgid "Sender name, eg. My Awesome Company Ltd." +msgstr "Nom de l'émetteur, par ex. My Awesome Company Ltd." + +#: views/settings.hbs:22 +msgid "Default address" +msgstr "Adresse mail par défaut" + +#: views/settings.hbs:23 +msgid "" +"Contact address to provide, eg. 1234 Main Street, Anywhere, MA 01234, USA" +msgstr "" +"Adresse de contact à fournir, par ex. 1234 Main Street, Anywhere, MA 01234, " +"USA" + +#: views/settings.hbs:24 +msgid "Default \"from name\"" +msgstr "Nom d'émetteur par défaut" + +#: views/settings.hbs:26 +msgid "Default \"from\" email" +msgstr "Adresse mail d'émetteur par défaut" + +#: views/settings.hbs:28 +msgid "Default \"subject line\"" +msgstr "Objet du mail par défaut" + +#: views/settings.hbs:30 +msgid "Default homepage (URL)" +msgstr "Page d'accueil par défaut (URL)" + +#: views/settings.hbs:31 +msgid "URL to redirect the subscribed users to, eg. http://example.com/" +msgstr "URL où rediriger les utilisateurs abonnés, par ex. http://example.com/" + +#: views/settings.hbs:32 +msgid "Default custom unsubscribe (URL))" +msgstr "URL de désabonnement personnalisable par défaut" + +#: views/settings.hbs:33 +msgid "Custom unsubscribe URL, eg. http://example.com/unsubscribe/[EMAIL]" +msgstr "" +"URL personnalisée de désabonnement, par ex. http://example.com/unsubscribe/" +"[EMAIL]" + +#: views/settings.hbs:34 +msgid "Set a custom unsubscribe url." +msgstr "Renseignez une URL de désabonnement personnalisée." + +#: views/settings.hbs:35 +msgid "Mailer Settings" +msgstr "Paramètres mailer" + +#: views/settings.hbs:36 +msgid "These settings are required to send out e-mail messages" +msgstr "Ces paramètres sont obligatoires pour envoyer des messages" + +#: views/settings.hbs:37 +msgid "SMTP" +msgstr "SMTP" + +#: views/settings.hbs:38 +msgid "AWS SES" +msgstr "AWS SES" + +#: views/settings.hbs:39 +msgid "Use SMTP for sending mail" +msgstr "Utiliser SMTP pour envoyer les mails" + +#: views/settings.hbs:40 +msgid "Hostname" +msgstr "Nom de machine" + +#: views/settings.hbs:41 +msgid "Port" +msgstr "Port" + +#: views/settings.hbs:42 +msgid "Port, eg. 465. Autodetected if left blank" +msgstr "Port, par ex. 465. Autodétecté si vide" + +#: views/settings.hbs:43 +msgid "Encryption" +msgstr "Chiffrement" + +#: views/settings.hbs:44 +msgid "Disable SMTP authentication" +msgstr "Désactiver l'authentification SMTP" + +#: views/settings.hbs:45 views/users/forgot.hbs:9 views/users/login.hbs:4 +#: views/users/login.hbs:5 +msgid "Username" +msgstr "Utilisateur" + +#: views/settings.hbs:46 +msgid "Username, eg. myaccount@example.com" +msgstr "Nom d'utilisateur, par ex. myaccount@example.com" + +#: views/settings.hbs:47 views/settings.hbs:48 views/users/login.hbs:6 +#: views/users/login.hbs:7 +msgid "Password" +msgstr "Mot de passe" + +#: views/settings.hbs:49 +msgid "Use SES API for sending mail" +msgstr "Utiliser l'API SES pour envoyer les mails" + +#: views/settings.hbs:50 +msgid "Access Key" +msgstr "Clé d'accès" + +#: views/settings.hbs:51 +msgid "AWS Access Key Id" +msgstr "ID de la clé d'accès AWS" + +#: views/settings.hbs:52 +msgid "Secret Key" +msgstr "Clé secrète" + +#: views/settings.hbs:53 +msgid "AWS Secret Access Key" +msgstr "Secret de la clé d'accès AWS" + +#: views/settings.hbs:54 +msgid "Region" +msgstr "Région" + +#: views/settings.hbs:55 +msgid "Checking" +msgstr "Vérification" + +#: views/settings.hbs:56 +msgid "Check Mailer config" +msgstr "Vérifier la configuration du serveur mail" + +#: views/settings.hbs:57 +msgid "Advanced Mailer settings" +msgstr "Paramètres avancés du serveur mail" + +#: views/settings.hbs:58 +msgid "Log SMTP transactions" +msgstr "Log des transactions SMTP" + +#: views/settings.hbs:59 +msgid "Allow self-signed certificates" +msgstr "Autoriser les certificats autosignés" + +#: views/settings.hbs:60 +msgid "Max connections" +msgstr "Nombre maximum de connections" + +#: views/settings.hbs:61 +msgid "The count of max connections, eg. 10" +msgstr "Le nombre maximum de connexions, par ex. 10" + +#: views/settings.hbs:62 +msgid "" +"The count of maximum simultaneous connections to make against the SMTP " +"server (defaults to 5). This limit is per sending process." +msgstr "" +"Le nombre maximum de connexions simultannées vers le serveur SMTP (par " +"défaut 5). Cette limite s'entend par process d'envoi" + +#: views/settings.hbs:63 +msgid "Max messages" +msgstr "Nombre maximum de messages" + +#: views/settings.hbs:64 +msgid "The count of max messages, eg. 100" +msgstr "Le nombre maximum de messages, par ex. 100" + +#: views/settings.hbs:65 +msgid "" +"The number of messages to send through a single connection before the " +"connection is closed and reopened (defaults to 100)" +msgstr "" +"Le nombre de messages à envoyer au travers d'une connexion unique avant " +"qu'elle ne soit fermée puis réouverte (par défaut 100)" + +#: views/settings.hbs:66 +msgid "Throttling" +msgstr "Restrictions" + +#: views/settings.hbs:67 +msgid "Messages per hour eg. 1000" +msgstr "Messages par heure ex: 1000" + +#: views/settings.hbs:68 +msgid "" +"Maximum number of messages to send in an hour. Leave empty or zero for no " +"throttling. If your provider uses a different speed limit (messages/minute " +"or messages/second) then convert this limit into messages/hour (1m/s => " +"3600m/h). This limit is per sending process." +msgstr "" +"Nombre maximum de messages envoyés par heure. Laissez vide pour ne pas " +"restreindre. Si votre fournisseur utilise une unité différente (messages/" +"minute ou messages/seconde) convertissez cette limite en messages/heure (1 m/" +"s => 3600 m/h). Cette limite se comprend par process d'émission." + +#: views/settings.hbs:69 +msgid "VERP bounce handling" +msgstr "Traitement VERP des rejets" + +#: views/settings.hbs:70 +msgid "" +"Mailtrain is able to use VERP based routing to detect bounces. In this case " +"the message is sent to the recipient using a custom VERP address as the " +"return path of the message. If the message is not accepted a bounce email is " +"sent to this special VERP address and thus a bounce is detected." +msgstr "" +"Mailtrain peut utiliser un routage VERP de façon à détecter les adresses en " +"erreur. Pour cela le message est envoyé avec un adresse de retour VERP " +"spécifique. Si le message est rejeté, un message de rejet est renvoyé à " +"cette adresse VERP, permettant de détecter l'adresse en erreur." + +#: views/settings.hbs:71 +msgid "" +"To get VERP working you need to set up a DNS MX record that points to your " +"Mailtrain hostname. You must also ensure that Mailtrain VERP interface is " +"available from port 25 of your server (port 25 usually requires root user " +"privileges). This way if anyone tries to send email to someuser@verp-" +"hostname then the email should end up to this server." +msgstr "" +"Pour que le VERP fonctionne, vous devez renseigner un enregistrement DNS MX " +"qui pointe vers le nom de domaine de votre Mailtrain. Vérifiez également que " +"l'interface VERP est disponible sur le port 25 de votre serveur (le port 25 " +"nécessite habituellement les privilèges root). Si quelqu'un envoie un mail à " +"someuser@verp-hostname, le mail doit atteindre ce serveur." + +#: views/settings.hbs:72 +msgid "" +"VERP usually only works if you are using your own SMTP server. Regular relay " +"services (SES, SparkPost, Gmail etc.) tend to remove the VERP address from " +"the message." +msgstr "" +"Le VERP ne fonctionne habituellement que si vous utilisez votre propre " +"serveur SMTP. Les services de relai ordinaires (SES, SparkPost, Gmail, etc.) " +"tendent à supprimer les adresses VERP des messages." + +#: views/settings.hbs:73 +msgid "Use VERP to catch bounces" +msgstr "Utiliser le VERP pour récupérer les rejets" + +#: views/settings.hbs:74 +msgid "Server hostname" +msgstr "Nom de machine du serveur" + +#: views/settings.hbs:75 +msgid "The VERP server hostname, eg. bounces.example.com" +msgstr "Le nom du serveur VERP, par ex. bouces.example.com" + +#: views/settings.hbs:76 +msgid "" +"VERP bounce handling server hostname. This hostname is used in the SMTP " +"envelope FROM address and the MX DNS records should point to this server" +msgstr "" +"Nom du serveur de traitement VERP. Ce nom d'hôte est habituellement utilisée " +"dans l'entête SMTP FROM d'enveloppe, et est pointé par l'enregistrement DNS " +"MX." + +#: views/settings.hbs:77 +msgid "" +"VERP bounce handling server is not enabled. Modify your server configuration " +"file and restart server to enable it" +msgstr "" +"Le serveur de traitement VERP n'est pas activé. Modifier le fichier de " +"configuration et redémarrer le serveur pour l'activer" + +#: views/settings.hbs:78 +msgid "GPG Signing" +msgstr "Signature GPG" + +#: views/settings.hbs:79 +msgid "" +"Only messages that are encrypted can be signed. Subsribers who have not set " +"up a GPG public key in their profile receive normal email messages. Users " +"with GPG key set receive encrypted messages and if you have signing key also " +"set, the messages are signed with this key." +msgstr "" +"Seuls les messages chiffrés peuvent être signés. Les abonnés qui n'ont pas " +"fourni dans leur profil de clé publique GPG reçoivent normalement les mails. " +"Les utilisateurs qui ont fourni leur clé GPG recevront les mails sous forme " +"chiffrée, et si vous avez fourni une clé de signature, les messages seront " +"en plus signés avec cette clé." + +#: views/settings.hbs:80 +msgid "" +"Do not use sensitive keys here. The private key and passphrase are not " +"encrypted in the database." +msgstr "" +"Ne pas utiliser de clé sensible ici. La clé privée et la phrase de " +"déchiffrement ne sont pas chiffrées dans la base de données." + +#: views/settings.hbs:81 +msgid "Private Key Passphrase" +msgstr "Phrase de déchiffrement de la clé privée" + +#: views/settings.hbs:82 +msgid "Passphrase for the key if set" +msgstr "Phrase de déchiffrement de la clé si fournie" + +#: views/settings.hbs:83 +msgid "Only fill this if your private key is encrypted with a passphrase" +msgstr "" +"Renseignez uniquement si votre clé privée est protégée par un mot de passe" + +#: views/settings.hbs:84 +msgid "GPG Private Key" +msgstr "Clé privée GPG" + +#: views/settings.hbs:86 +msgid "" +"This value is optional. If you do not provide a private key GPG encrypted " +"messages are sent without signing." +msgstr "" +"Cette valeur est optionnelle. Si vous ne fournissez pas de clé privé GPG, " +"les messages chiffrés sont envoyés sans signature." + +#: views/settings.hbs:87 +msgid "DKIM Signing by ZoneMTA" +msgstr "Signature DKIM par ZoneMTA" + +#: views/settings.hbs:88 +msgid "" +"If you are using ZoneMTA then Mailtrain can provide a DKIM key for signing " +"all outgoing messages. Other services usually provide their own means to " +"DKIM sign your messages" +msgstr "" +"Si vous utilisez ZoneMTA, Mailtrain peut fournir une clé DKIM pour signer " +"les messages sortants. Les autres services fournissent habituellement leurs " +"propres moyens pour signer vos messages avec DKIM" + +#: views/settings.hbs:89 +msgid "" +"Do not use sensitive keys here. The private key is not encrypted in the " +"database." +msgstr "" +"Ne pas utiliser de clé sensible ici. La clé privée n'est pas chiffrée dans " +"la base de données." + +#: views/settings.hbs:90 +msgid "ZoneMTA DKIM API Key" +msgstr "Clé de l'API DKIM ZoneMTA" + +#: views/settings.hbs:91 +msgid "Some secret value" +msgstr "Valeur secrète" + +#: views/settings.hbs:92 +msgid "" +"Secret value known to ZoneMTA for requesting DKIM key information. If this " +"value was generated by the Mailtrain installation script then you can keep " +"it as it is" +msgstr "" +"Valeur secrète connue de ZoneMTA pour les requêtes d'informations de clés " +"DKIM. Si cette valeur a été générée lors de l'installation Mailtrain, elle " +"peut être conservée." + +#: views/settings.hbs:93 +msgid "DKIM domain" +msgstr "Domaine DKIM" + +#: views/settings.hbs:94 +msgid "Domain name for the DKIM key" +msgstr "Nom de domaine pour la clé DKIM" + +#: views/settings.hbs:95 +msgid "Leave blank to use the sender email address domain" +msgstr "Laissez vide pour utiliser le domaine de l'adresse mail de l'émetteur" + +#: views/settings.hbs:96 views/settings.hbs:97 +msgid "DKIM key selector" +msgstr "Sélecteur de clé DKIM" + +#: views/settings.hbs:98 +msgid "Signing is disabled without a valid selector value" +msgstr "L'abonnement est désactivé en l'absence de valeur de sélection valide" + +#: views/settings.hbs:99 +msgid "DKIM Private Key" +msgstr "Clé privée DKIM" + +#: views/settings.hbs:101 +msgid "" +"This value is optional. If you do not provide a private key then messages " +"are not signed." +msgstr "" +"Cette valeur est optionnelle. Si vous ne fournissez pas de clé privée, les " +"messages ne seront pas signés." + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:1 +#: views/subscription/mail-already-subscribed-text.hbs:1 +#: lib/models/subscriptions.js:174 lib/models/subscriptions.js:895 +msgid "Email address already registered" +msgstr "Adresse mail déjà enregistrée" + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:2 +#: views/subscription/mail-already-subscribed-text.hbs:2 +msgid "" +"We have received a subscription request. Your email address is however " +"already registered." +msgstr "" +"Nous avons reçu une demande d'abonnement. Cependant votre adresse mail est " +"déjà enregistrée." + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:3 +#: views/subscription/mail-already-subscribed-text.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. Your existing " +"subscription won't be affected." +msgstr "" +"Si vous avez reçu ce message par erreur, vous pouvez simplement le " +"supprimer. Votre abonnement ne sera pas modifié." + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:4 +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:3 +msgid "If you want to modify your subscription then you can " +msgstr "Si vous voulez modifier votre abonnement vous pouvez" + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:5 +#: views/subscription/mail-already-subscribed-text.hbs:5 +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:4 +#: views/subscription/mail-subscription-confirmed-text.hbs:4 +msgid "manage your preferences" +msgstr "gestion de vos préférences" + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:6 +#: views/subscription/mail-already-subscribed-text.hbs:6 +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:5 +#: views/subscription/mail-subscription-confirmed-text.hbs:5 +#: views/users/login.hbs:10 +msgid "or" +msgstr "ou" + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:7 +#: views/subscription/mail-already-subscribed-text.hbs:7 +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:6 +#: views/subscription/mail-subscription-confirmed-text.hbs:6 +msgid "unsubscribe here" +msgstr "désabonnement ici" + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:8 +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:7 +#: views/subscription/web-confirm-subscription-notice.mjml.hbs:3 +#: views/subscription/web-confirm-unsubscription-notice.mjml.hbs:3 +#: views/subscription/web-manual-unsubscribe-notice.mjml.hbs:4 +#: views/subscription/web-subscribed-notice.mjml.hbs:4 +#: views/subscription/web-unsubscribed-notice.mjml.hbs:3 +#: views/subscription/web-updated-notice.mjml.hbs:3 +msgid "Return to our website" +msgstr "Retour à notre site web" + +#: views/subscription/mail-already-subscribed-html.mjml.hbs:9 +#: views/subscription/mail-already-subscribed-text.hbs:8 +#: views/subscription/mail-confirm-address-change-html.mjml.hbs:4 +#: views/subscription/mail-confirm-address-change-text.hbs:4 +#: views/subscription/mail-confirm-subscription-html.mjml.hbs:4 +#: views/subscription/mail-confirm-subscription-text.hbs:4 +#: views/subscription/mail-confirm-unsubscription-html.mjml.hbs:4 +#: views/subscription/mail-confirm-unsubscription-text.hbs:4 +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:8 +#: views/subscription/mail-subscription-confirmed-text.hbs:7 +#: views/subscription/mail-unsubscription-confirmed-html.mjml.hbs:5 +#: views/subscription/mail-unsubscription-confirmed-text.hbs:5 +msgid "For questions about this list, please contact:" +msgstr "Pour les questions à ce sujet, contactez :" + +#: views/subscription/mail-already-subscribed-text.hbs:4 +#: views/subscription/mail-subscription-confirmed-text.hbs:3 +msgid "If you want to modify your subscription then you can:" +msgstr "Si vous voulez modifier votre abonnement vous pouvez :" + +#: views/subscription/mail-confirm-address-change-html.mjml.hbs:1 +#: views/subscription/mail-confirm-address-change-text.hbs:1 +msgid "Please Confirm Subscription Address Change" +msgstr "Merci de confirmer votre changement d'adresse mail" + +#: views/subscription/mail-confirm-address-change-html.mjml.hbs:2 +#: views/subscription/mail-confirm-address-change-text.hbs:2 +msgid "Yes, subscribe this email address to the list" +msgstr "Oui, abonner cette adresse mail à cette liste" + +#: views/subscription/mail-confirm-address-change-html.mjml.hbs:3 +#: views/subscription/mail-confirm-subscription-html.mjml.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"subscribed if you don't click the confirmation link above." +msgstr "" +"Si vous avez reçu ce message par erreur, vous pouvez simplement le " +"supprimer. Vous ne serez pas abonné tant que vous ne cliquez pas le lien ci-" +"dessus." + +#: views/subscription/mail-confirm-address-change-text.hbs:3 +#: views/subscription/mail-confirm-subscription-text.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"subscribed unless you click the confirmation link above." +msgstr "" +"Si vous avez reçu ce message par erreur, vous pouvez simplement le " +"supprimer. Vous ne serez pas abonné tant que vous ne cliquez pas le lien ci-" +"dessus." + +#: views/subscription/mail-confirm-subscription-html.mjml.hbs:1 +#: views/subscription/mail-confirm-subscription-text.hbs:1 +#: views/subscription/mail-confirm-unsubscription-text.hbs:1 +#: routes/subscription.js:432 +msgid "Please Confirm Subscription" +msgstr "Merci de confirmer votre abonnement" + +#: views/subscription/mail-confirm-subscription-html.mjml.hbs:2 +#: views/subscription/mail-confirm-subscription-text.hbs:2 +msgid "Yes, subscribe me to this list" +msgstr "Oui, je m'abonne à cette liste" + +#: views/subscription/mail-confirm-unsubscription-html.mjml.hbs:1 +msgid "Please Confirm Unsubscription" +msgstr "Merci de confirmer votre désabonnement" + +#: views/subscription/mail-confirm-unsubscription-html.mjml.hbs:2 +#: views/subscription/mail-confirm-unsubscription-text.hbs:2 +msgid "Yes, unsubscribe me from this list" +msgstr "Oui, je me désabonne de cette liste" + +#: views/subscription/mail-confirm-unsubscription-html.mjml.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"unsubscribed if you don't click the confirmation link above." +msgstr "" +"Si vous avez reçu ce message par erreur, vous pouvez simplement le " +"supprimer. Vous ne serez pas désabonné tant que vous ne cliquez pas le lien " +"ci-dessus." + +#: views/subscription/mail-confirm-unsubscription-text.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"unsubscribed unless you click the confirmation link above." +msgstr "" +"Si vous avez reçu ce message par erreur, vous pouvez simplement le " +"supprimer. Vous ne serez pas abonné tant que vous ne cliquez pas le lien ci-" +"dessus." + +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:1 +#: views/subscription/mail-subscription-confirmed-text.hbs:1 +#: views/subscription/web-subscribed-notice.mjml.hbs:1 +msgid "Subscription Confirmed" +msgstr "Abonnement confirmé" + +#: views/subscription/mail-subscription-confirmed-html.mjml.hbs:2 +msgid "Your subscription to our list has been confirmed" +msgstr "Votre abonnement à la liste a été confirmé" + +#: views/subscription/mail-subscription-confirmed-text.hbs:2 +#: views/subscription/web-subscribed-notice.mjml.hbs:2 +msgid "Your subscription to our list has been confirmed." +msgstr "Votre abonnement à la liste a été confirmé." + +#: views/subscription/mail-unsubscription-confirmed-html.mjml.hbs:1 +#: views/subscription/mail-unsubscription-confirmed-text.hbs:1 +msgid "You Are Now Unsubscribed" +msgstr "Vous n'êtes désormais plus abonné" + +#: views/subscription/mail-unsubscription-confirmed-html.mjml.hbs:2 +msgid "We have removed your email address from our list" +msgstr "Nous avons retiré votre adresse mail de notre liste" + +#: views/subscription/mail-unsubscription-confirmed-html.mjml.hbs:3 +#: views/subscription/mail-unsubscription-confirmed-text.hbs:3 +msgid "If you unsubscribed by mistake, you can re-subscribe at:" +msgstr "" +"Si vous vous êtes désabonné par erreur, vous pouvez à nouveau vous abonner " +"ici :" + +#: views/subscription/mail-unsubscription-confirmed-text.hbs:2 +msgid "We have removed your email address from our list." +msgstr "Nous avons retiré votre adresse mail de notre liste." + +#: views/subscription/partials/subscription-custom-fields.hbs:2 +msgid "want to change it?" +msgstr "Vous voulez le changer ?" + +#: views/subscription/partials/subscription-custom-fields.hbs:5 +msgid "Download signature verification key" +msgstr "Télécharger la clé de vérification de signature" + +#: views/subscription/partials/subscription-custom-fields.hbs:7 +msgid "" +"Insert your GPG public key here to encrypt messages sent to your address" +msgstr "" +"Insérez ici votre clé publique GPG pour chiffrer les messages envoyés à " +"votre adresse" + +#: views/subscription/partials/subscription-custom-fields.hbs:8 +msgid "optional" +msgstr "optionnel" + +#: views/subscription/partials/subscription-flash-messages.hbs:1 +#: views/subscription/partials/subscription-flash-messages.hbs:3 +msgid "Warning!" +msgstr "Attention !" + +#: views/subscription/partials/subscription-flash-messages.hbs:2 +msgid "If JavaScript was not enabled then no confirmation message was sent" +msgstr "" +"Si javascript n'était pas activé, aucun message de confirmation n'a été " +"envoyé" + +#: views/subscription/partials/subscription-flash-messages.hbs:4 +msgid "JavaScript must be enabled in order for this form to work" +msgstr "JavaScript doit être activé pour utiliser ce formulaire" + +#: views/subscription/partials/subscription-manage-address-form.hbs:1 +msgid "Existing Email Address" +msgstr "Adresse mail existante" + +#: views/subscription/partials/subscription-manage-address-form.hbs:2 +msgid "New Email Address" +msgstr "Nouvelle adresse mail" + +#: views/subscription/partials/subscription-manage-address-form.hbs:3 +msgid "Your new email address" +msgstr "Votre nouvelle adresse mail" + +#: views/subscription/partials/subscription-manage-address-form.hbs:4 +msgid "" +"You will receive a confirmation request to your new email address that you " +"need to accept before your email is actually changed" +msgstr "" +"Vous allez recevoir une demande de confirmation à votre nouvelle adresse " +"mail, que vous devrez acceptez pour que votre nouvelle adresse soit prise en " +"compte" + +#: views/subscription/partials/subscription-manage-address-form.hbs:5 +#: views/subscription/web-manage-address.mjml.hbs:2 +msgid "Update Email Address" +msgstr "Mettre à jour l'adresse mail" + +#: views/subscription/partials/subscription-manage-form.hbs:1 +#: views/subscription/web-manage.mjml.hbs:2 +msgid "Update Profile" +msgstr "Mettre à jour le profil" + +#: views/subscription/partials/subscription-subscribe-form.hbs:1 +#: views/subscription/web-subscribe.mjml.hbs:2 +#: views/subscription/widget-subscribe.hbs:1 +msgid "Subscribe to list" +msgstr "S'abonner à la liste" + +#: views/subscription/web-confirm-subscription-notice.mjml.hbs:1 +#: views/subscription/web-confirm-unsubscription-notice.mjml.hbs:1 +#: views/subscription/widget-subscribe.hbs:4 +msgid "Almost Finished" +msgstr "Presque terminé" + +#: views/subscription/web-confirm-subscription-notice.mjml.hbs:2 +#: views/subscription/widget-subscribe.hbs:5 +msgid "" +"We need to confirm your email address. To complete the subscription process, " +"please click the link in the email we just sent you." +msgstr "" +"Nous devons confirmer votre adresse mail. Pour terminer la procédure " +"d'abonnement, merci de cliquer sur le lien présent dans le mail que nous " +"venons de vous envoyer." + +#: views/subscription/web-confirm-unsubscription-notice.mjml.hbs:2 +msgid "" +"We need to confirm your email address. To complete the unsubscription " +"process, please click the link in the email we just sent you." +msgstr "" +"Nous devons confirmer votre adresse mail. Pour terminer la procédure de " +"désabonnement, merci de cliquer sur le lien présent dans le mail que nous " +"venons de vous envoyer." + +#: views/subscription/web-manage-address.mjml.hbs:1 +msgid "Update Your Email Address" +msgstr "Mettre à jour votre adresse mail" + +#: views/subscription/web-manage.mjml.hbs:1 +msgid "Update Your Preferences" +msgstr "Mettre à jour vos préférence" + +#: views/subscription/web-manual-unsubscribe-notice.mjml.hbs:1 +msgid "Online Unsubscription Is Not Possible" +msgstr "Le désabonnement en ligne n'est pas autorisé" + +#: views/subscription/web-manual-unsubscribe-notice.mjml.hbs:2 +msgid "Please contact us at" +msgstr "Merci de nous contacter à" + +#: views/subscription/web-manual-unsubscribe-notice.mjml.hbs:3 +msgid "to get removed from the list" +msgstr "pour être retiré de la liste" + +#: views/subscription/web-subscribe.mjml.hbs:1 +msgid "Subscribe to List" +msgstr "S'abonner à la liste" + +#: views/subscription/web-subscribed-notice.mjml.hbs:3 +msgid "Thank you for subscribing!" +msgstr "Merci de votre abonnement !" + +#: views/subscription/web-unsubscribed-notice.mjml.hbs:1 +msgid "Unsubscribe Successful" +msgstr "Désabonnement pris en compte" + +#: views/subscription/web-unsubscribed-notice.mjml.hbs:2 +msgid "You have been removed from:" +msgstr "Vous avez été retiré de :" + +#: views/subscription/web-updated-notice.mjml.hbs:1 +msgid "Profile Updated" +msgstr "Profil mis à jour" + +#: views/subscription/web-updated-notice.mjml.hbs:2 +msgid "Your profile information has been updated." +msgstr "Vos informations de profil ont été enregistrées" + +#: views/subscription/widget-subscribe.hbs:2 +msgid "Sending ..." +msgstr "Envoi ..." + +#: views/subscription/widget-subscribe.hbs:3 +msgid "It looks like you are already subscribed to this list." +msgstr "Il semble que vous soyez déjà abonné à cette liste." + +#: views/templates/create.hbs:5 views/templates/edit.hbs:6 +msgid "Template name" +msgstr "Nom du modèle" + +#: views/templates/create.hbs:6 views/templates/edit.hbs:7 +msgid "Name for this template, eg. Newsletter" +msgstr "Nom de ce modèle, par ex. Newsletter" + +#: views/templates/create.hbs:7 +msgid "HTML Editor" +msgstr "Éditeur HTML" + +#: views/templates/create.hbs:10 views/templates/edit.hbs:9 +msgid "Optional comments about this template" +msgstr "Commentaire optionnel sur ce modèle" + +#: views/templates/edit.hbs:5 +msgid "Back to templates" +msgstr "Retour aux modèles" + +#: views/templates/edit.hbs:11 +msgid "Duplicate" +msgstr "Dupliquer" + +#: views/triggers/create-select.hbs:2 views/triggers/create.hbs:2 +#: views/triggers/edit.hbs:2 views/triggers/triggered.hbs:2 +#: views/triggers/triggers.hbs:2 views/triggers/triggers.hbs:4 +msgid "Automation Triggers" +msgstr "Déclencheurs des automatismes" + +#: views/triggers/create-select.hbs:5 +msgid "Select a list for the trigger" +msgstr "Sélectionnez une liste pour le déclencheur" + +#: views/triggers/create.hbs:5 views/triggers/edit.hbs:6 +msgid "Trigger name" +msgstr "Nom du déclencheur" + +#: views/triggers/create.hbs:6 views/triggers/edit.hbs:7 +msgid "Name for this trigger, eg. Inactive subscribers" +msgstr "Nom de ce déclencheur, par ex. Abonnés inactifs" + +#: views/triggers/create.hbs:8 views/triggers/edit.hbs:9 +msgid "Optional comments about this trigger" +msgstr "Commentaire optionnel sur ce déclencheur" + +#: views/triggers/create.hbs:12 views/triggers/edit.hbs:14 +msgid "Trigger rule" +msgstr "Règle du déclencheur" + +#: views/triggers/create.hbs:13 views/triggers/edit.hbs:15 +msgid "Trigger fires" +msgstr "Déclencheur lancé" + +#: views/triggers/create.hbs:14 views/triggers/edit.hbs:16 +msgid "days after:" +msgstr "jours suivants :" + +#: views/triggers/create.hbs:16 views/triggers/create.hbs:21 +#: views/triggers/edit.hbs:18 views/triggers/edit.hbs:23 +msgid "Event" +msgstr "Évènement" + +#: views/triggers/create.hbs:18 views/triggers/create.hbs:19 +#: views/triggers/create.hbs:25 views/triggers/edit.hbs:20 +#: views/triggers/edit.hbs:21 views/triggers/edit.hbs:27 +msgid "Campaign" +msgstr "Campagne" + +#: views/triggers/create.hbs:23 views/triggers/edit.hbs:25 +msgid "Trigger action" +msgstr "Action du déclencheur" + +#: views/triggers/create.hbs:24 views/triggers/edit.hbs:26 +msgid "Send campaign" +msgstr "Envoyer la campagne" + +#: views/triggers/edit.hbs:3 views/triggers/edit.hbs:4 +msgid "Edit Trigger" +msgstr "Modifier le déclencheur" + +#: views/triggers/edit.hbs:5 +msgid "Back to triggers" +msgstr "Retour aux déclencheurs" + +#: views/triggers/edit.hbs:11 +msgid "Trigger is enabled" +msgstr "Le déclencheur est activé" + +#: views/triggers/edit.hbs:29 +msgid "Delete Trigger" +msgstr "Supprimer le déclencheur" + +#: views/triggers/triggered.hbs:3 +msgid "Triggered" +msgstr "Déclenché" + +#: views/triggers/triggered.hbs:4 +msgid "Triggered subscribers" +msgstr "Abonnés déclenchés" + +#: views/triggers/triggered.hbs:5 +msgid "Subscribers who caused this trigger to fire" +msgstr "Abonnés ayant activé ce déclencheur" + +#: views/triggers/triggered.hbs:9 +msgid "Triggered time" +msgstr "Heure du déclenchement" + +#: views/triggers/triggers.hbs:9 +msgid "Trigger" +msgstr "Déclencheur" + +#: views/triggers/triggers.hbs:10 +msgid "Target Campaign" +msgstr "Campagne cible" + +#: views/triggers/triggers.hbs:11 +msgid "Triggered count" +msgstr "Nombre de déclencheurs" + +#: views/users/account.hbs:4 +msgid "This account is managed through LDAP." +msgstr "Ce compte est géré par le LDAP." + +#: views/users/account.hbs:5 +msgid "Associated Email Address" +msgstr "Adresse mail associée" + +#: views/users/account.hbs:8 +msgid "Your e-mail address" +msgstr "Votre adresse mail" + +#: views/users/account.hbs:9 +msgid "" +"This address is used for account recovery in case you lose your password" +msgstr "Cette adresse vous permet de réinitialiser un mot de passe perdu" + +#: views/users/account.hbs:10 +msgid "Password change" +msgstr "Changement du mot de passe" + +#: views/users/account.hbs:11 +msgid "" +"You only need to fill out this form if you want to change your current " +"password" +msgstr "" +"Vous avez uniquement ce formulaire à remplir pour changer votre mot de passe" + +#: views/users/account.hbs:12 views/users/account.hbs:13 +msgid "Current Password" +msgstr "Mot de passe actuel" + +#: views/users/account.hbs:14 views/users/account.hbs:15 +#: views/users/reset.hbs:6 views/users/reset.hbs:7 +msgid "New Password" +msgstr "Nouveau mot de passe" + +#: views/users/account.hbs:16 views/users/reset.hbs:8 +msgid "Confirm Password" +msgstr "Confirmation du mot de passe" + +#: views/users/account.hbs:17 views/users/reset.hbs:9 +msgid "Confirm New Password" +msgstr "Confirmez le nouveau mot de passe" + +#: views/users/api.hbs:4 +msgid "Are you sure? Resetting would invalidate the currently existing token." +msgstr "Êtes-vous sûr ? La réinitialisation invaliderait les jetons existants." + +#: views/users/api.hbs:5 +msgid "Are you sure?" +msgstr "Êtes-vous sûr ?" + +#: views/users/api.hbs:6 +msgid "Reset Access Token" +msgstr "Réinitialiser le token d'accès" + +#: views/users/api.hbs:7 +msgid "Generate Access Token" +msgstr "Générer un token d'accès" + +#: views/users/api.hbs:8 +msgid "Personal access token:" +msgstr "Token d'accès privé :" + +#: views/users/api.hbs:9 +msgid "Access token not yet generated" +msgstr "Le jeton d'accès n'est pas encore généré" + +#: views/users/api.hbs:10 +msgid "Notes about the API" +msgstr "Notes à propos de l'API" + +#: views/users/api.hbs:11 +msgid "" +"API response is a JSON structure with error and data properties. If the response error has a value set then " +"the request failed." +msgstr "" +"La réponse de l'API est un document JSON avec les propriétés error et data. Si la propriété error est " +"renseignée, alors la requête a échoué." + +#: views/users/api.hbs:12 +msgid "" +"You need to define proper Content-Type when making a request. " +"You can either use application/x-www-form-urlencoded for normal " +"form data or application/json for a JSON payload. Using " +"multipart/form-data is not supported." +msgstr "" +"Vous devez définir le bon Content-Type lors de vos requêtes. " +"Vous pouvez utiliser soit application/x-www-form-urlencoded " +"pour des données de formulaire, ou application/json pour une " +"requête JSON. Vous ne pouvez pas utiliser multipart/form-data." + +#: views/users/api.hbs:13 +msgid "Get list of subscriptions" +msgstr "Obtenir la liste des abonnés" + +#: views/users/api.hbs:14 +msgid "" +"Retrieve a list of subscriptions to the list referenced by :listId. All " +"fields of the subscribers will be returned. Note that custom fields will " +"have generated names." +msgstr "" +"Récupérer l'ensemble des abonnements à la liste référencée :listId. Tous les " +"champs des abonnés seront renvoyés. Notez que les champs personnalisés " +"auront des noms générés automatiquement." + +#: views/users/api.hbs:15 views/users/api.hbs:24 views/users/api.hbs:26 +#: views/users/api.hbs:39 views/users/api.hbs:41 views/users/api.hbs:47 +#: views/users/api.hbs:49 views/users/api.hbs:55 views/users/api.hbs:57 +#: views/users/api.hbs:67 views/users/api.hbs:78 views/users/api.hbs:80 +#: views/users/api.hbs:86 views/users/api.hbs:88 views/users/api.hbs:94 +#: views/users/api.hbs:99 views/users/api.hbs:104 +msgid "arguments" +msgstr "arguments" + +#: views/users/api.hbs:16 views/users/api.hbs:25 views/users/api.hbs:40 +#: views/users/api.hbs:48 views/users/api.hbs:56 views/users/api.hbs:68 +#: views/users/api.hbs:79 views/users/api.hbs:87 views/users/api.hbs:95 +#: views/users/api.hbs:100 views/users/api.hbs:105 +msgid "your personal access token" +msgstr "votre token d'accès personnel" + +#: views/users/api.hbs:17 views/users/api.hbs:69 +msgid "Start position" +msgstr "Position de démarrage" + +#: views/users/api.hbs:18 views/users/api.hbs:70 +msgid "optional, default 0" +msgstr "optionnel, par défaut 0" + +#: views/users/api.hbs:19 +msgid "limit subscription count in response" +msgstr "nombre maximal d'abonnements retournés" + +#: views/users/api.hbs:20 views/users/api.hbs:72 +msgid "optional, default 10000" +msgstr "optionnel, par défaut 10000" + +#: views/users/api.hbs:22 +msgid "Add subscription" +msgstr "Ajouter un abonnement" + +#: views/users/api.hbs:23 +msgid "" +"This API call either inserts a new subscription or updates existing. Fields " +"not included are left as is, so if you update only LAST_NAME value, then " +"FIRST_NAME is kept untouched for an existing subscription." +msgstr "" +"Ce service de l'API insère ou met à jour un abonnement. Les champs non " +"fournis sont laissés tels quels. Ainsi, pour un abonnement existant, si vous " +"ne mettez à jour que la valeur de LAST_NAME, FIRST_NAME ne sera pas modifié." + +#: views/users/api.hbs:27 views/users/api.hbs:42 views/users/api.hbs:50 +msgid "subscriber's email address" +msgstr "adresse mail de l'abonné" + +#: views/users/api.hbs:28 views/users/api.hbs:43 views/users/api.hbs:51 +#: views/users/api.hbs:59 views/users/api.hbs:82 views/users/api.hbs:90 +msgid "required" +msgstr "obligatoire" + +#: views/users/api.hbs:29 +msgid "subscriber's first name" +msgstr "prénom de l'abonné" + +#: views/users/api.hbs:30 +msgid "subscriber's last name" +msgstr "nom de l'abonné" + +#: views/users/api.hbs:31 +msgid "" +"subscriber's timezone (eg. \"Europe/Tallinn\", \"PST\" or \"UTC\"). If not " +"set defaults to \"UTC\"" +msgstr "" +"Fuseau horaire de l'abonné (par ex. \"Europe/Paris\", \"CEST\" ou \"UTC\"). " +"Par défaut \"UTC\"" + +#: views/users/api.hbs:32 +msgid "" +"custom field value. Use yes/no for option group values (checkboxes, radios, " +"drop downs)" +msgstr "" +"valeur du champ personnalisé. Utiliser yes/no pour des valeurs d'options " +"groupées (cases à cocher, choix sur listes, menus déroulants)" + +#: views/users/api.hbs:33 +msgid "Additional POST arguments" +msgstr "Arguments POST additionnels" + +#: views/users/api.hbs:34 +msgid "" +"set to \"yes\" if you want to make sure the email is marked as subscribed " +"even if it was previously marked as unsubscribed. If the email was already " +"unsubscribed/blocked then subscription status is not changed" +msgstr "" +"choisir \"oui\" si vous voulez être sur que l'adresse mail soit marquée " +"comme abonnée, même si elle était précédemment marquée désabonnée. Si " +"l'adresse mail était déjà désabonnée/bloquée, alors le statut d'abonnement " +"n'est pas changé" + +#: views/users/api.hbs:35 +msgid "" +"set to \"yes\" if you want to send confirmation email to the subscriber " +"before actually marking as subscribed" +msgstr "" +"choisir \"oui\" si vous voulez envoyer un mail de confirmation aux nouveaux " +"abonnés avant de marquer leur abonnement comme actif" + +#: views/users/api.hbs:37 +msgid "Remove subscription" +msgstr "Retirer l'abonnement" + +#: views/users/api.hbs:38 +msgid "This API call marks a subscription as unsubscribed" +msgstr "Ce service de l'API marque un abonnement comme désabonné" + +#: views/users/api.hbs:45 +msgid "Delete subscription" +msgstr "Supprimer l'abonnement" + +#: views/users/api.hbs:46 +msgid "This API call deletes a subscription" +msgstr "Ce service de l'API supprime un abonnement" + +#: views/users/api.hbs:53 +msgid "Add new custom field" +msgstr "Ajouter un champ personnalisé" + +#: views/users/api.hbs:54 +msgid "This API call creates a new custom field for a list." +msgstr "Ce service de l'API crée un nouveau champ personnalisé pour une liste." + +#: views/users/api.hbs:58 +msgid "field name" +msgstr "nom du champ" + +#: views/users/api.hbs:60 +msgid "one of the following types:" +msgstr "Un des types suivants :" + +#: views/users/api.hbs:61 +msgid "" +"If the type is 'option' then you also need to specify the parent element ID" +msgstr "" +"Si le type est 'option', vous devez également spécifier l'ID de l'élément " +"parent" + +#: views/users/api.hbs:62 +msgid "" +"Template for the group element. If not set, then values of the elements are " +"joined with commas" +msgstr "" +"Modèle pour le groupe d'éléments. Si vide, les valeurs seront concatennées " +"avec des virgules" + +#: views/users/api.hbs:63 +msgid "" +"if not visible then the subscriber can not view or modify this value at the " +"profile page" +msgstr "" +"Si masqué, l'abonné ne peut pas voir ni modifier la valeur depuis sa page de " +"profil" + +#: views/users/api.hbs:65 +msgid "Get list of blacklisted emails" +msgstr "Obtenir les adresses mail en liste noire" + +#: views/users/api.hbs:66 +msgid "This API call get list of blacklisted emails." +msgstr "Ce service de l'API renvoie la liste des mails dans la liste noire." + +#: views/users/api.hbs:71 +msgid "limit emails count in response" +msgstr "nombre maximal d'adresses mail retournées" + +#: views/users/api.hbs:73 +msgid "filter by part of email" +msgstr "Filtre sur partie d'adresse mail" + +#: views/users/api.hbs:74 +msgid "optional, default ''" +msgstr "optionnel, par défaut ''" + +#: views/users/api.hbs:77 +msgid "This API call either add emails to blacklist" +msgstr "Ce service de l'API ajoute des mails à la liste noire" + +#: views/users/api.hbs:81 views/users/api.hbs:89 +msgid "email address" +msgstr "adresse mail" + +#: views/users/api.hbs:84 +msgid "Delete email from blacklist" +msgstr "Supprimer le mail de la liste noire" + +#: views/users/api.hbs:85 +msgid "This API call either delete emails from blacklist" +msgstr "Ce service de l'API supprime des mails de la liste noire" + +#: views/users/api.hbs:92 +msgid "Get the lists a user has subscribed to" +msgstr "Obtenir la liste des listes auxquelles un utilisateur est abonné" + +#: views/users/api.hbs:93 +msgid "Retrieve the lists that the user with :email has subscribed to. " +msgstr "Récupérer les listes auxquelles l'utilisateur :email est abonné. " + +#: views/users/api.hbs:97 +msgid "Get all lists" +msgstr "Obtenir toutes les listes" + +#: views/users/api.hbs:98 +msgid "Retrieve every list. " +msgstr "Récupérer toutes les listes. " + +#: views/users/api.hbs:102 +msgid "Get list by id" +msgstr "Obtenir une liste via son id" + +#: views/users/api.hbs:103 +msgid "Retrieve the list with :id " +msgstr "Récupérer la liste avec :id " + +#: views/users/forgot.hbs:3 views/users/reset.hbs:3 +msgid "Password Reset" +msgstr "Réinitialisation du mot de passe" + +#: views/users/forgot.hbs:4 +msgid "Reset your password?" +msgstr "Réinitialiser votre mot de passe ?" + +#: views/users/forgot.hbs:5 +msgid "Accounts are managed through LDAP." +msgstr "Les comptes sont gérés par le LDAP." + +#: views/users/forgot.hbs:6 views/users/reset.hbs:10 +msgid "Reset Password" +msgstr "Réinitialiser le mot de passe" + +#: views/users/forgot.hbs:7 +msgid "" +"Please provide the username or email address that you used when you signed " +"up for your Mailtrain account." +msgstr "" +"Merci de fournir le nom d'utilisateur et l'adresse mail que vous avez " +"fournis lors de votre inscription au service." + +#: views/users/forgot.hbs:8 +msgid "We will send you an email that will allow you to reset your password." +msgstr "" +"Nous allons vous envoyer un mail qui vous permettra de réinitialiser votre " +"mot de passe." + +#: views/users/forgot.hbs:10 +msgid "Username or email address" +msgstr "Nom d'utilisateur ou adresse mail" + +#: views/users/forgot.hbs:11 +msgid "Send verification email" +msgstr "Envoyer un mail de vérification" + +#: views/users/login.hbs:8 +msgid "Remember me" +msgstr "Se souvenir de moi" + +#: views/users/login.hbs:11 views/users/login.hbs:12 +msgid "Forgot password?" +msgstr "Mot de passe oublié ?" + +#: views/users/reset.hbs:4 +msgid "Choose your new password" +msgstr "Choisissez votre nouveau mot de passe" + +#: views/users/reset.hbs:5 +msgid "Please enter a new password." +msgstr "Merci de saisir un nouveau mot de passe." + +#: lib/editor-helpers.js:17 routes/templates.js:95 +msgid "Could not find template with specified ID" +msgstr "Ne peut trouver de modèle avec cet identifiant" + +#: lib/editor-helpers.js:33 routes/archive.js:145 routes/campaigns.js:132 +#: routes/campaigns.js:285 routes/campaigns.js:380 routes/campaigns.js:428 +#: routes/campaigns.js:468 routes/campaigns.js:845 routes/campaigns.js:868 +#: routes/campaigns.js:887 routes/campaigns.js:909 routes/triggers.js:172 +msgid "Could not find campaign with specified ID" +msgstr "Ne peut trouver de campagne avec cet identifiant" + +#: lib/editor-helpers.js:47 routes/editorapi.js:320 +msgid "Invalid resource type" +msgstr "Type de ressource invalide" + +#: lib/feed.js:31 +msgid "Bad status code %s" +msgstr "Code de statut d'erreur %s" + +#: lib/helpers.js:33 +msgid "URL that points to the unsubscribe page" +msgstr "URL vers la page de désabonnement" + +#: lib/helpers.js:36 +msgid "URL that points to the preferences page of the subscriber" +msgstr "URL vers la page de préférences de l'abonné" + +#: lib/helpers.js:39 +msgid "URL to preview the message in a browser" +msgstr "URL de visualisation du message dans le navigateur" + +#: lib/helpers.js:45 lib/models/segments.js:31 +msgid "First name" +msgstr "Prénom" + +#: lib/helpers.js:48 lib/models/segments.js:35 +msgid "Last name" +msgstr "Nom" + +#: lib/helpers.js:51 +msgid "Full name (first and last name combined)" +msgstr "Nom complet (Prénom et nom combinés)" + +#: lib/helpers.js:54 +msgid "Unique ID that identifies the recipient" +msgstr "Identifiant unique qui identifie le destinataire" + +#: lib/helpers.js:57 +msgid "Unique ID that identifies the list used for this campaign" +msgstr "Identifiant unique qui identifie la liste utilisée pour cette campagne" + +#: lib/helpers.js:60 +msgid "Unique ID that identifies current campaign" +msgstr "Identifiant unique qui identifie cette campagne" + +#: lib/helpers.js:68 lib/helpers.js:80 +msgid "content from an RSS entry" +msgstr "Contenu d'une entrée RSS" + +#: lib/helpers.js:71 +msgid "RSS entry title" +msgstr "Titre de l'entrée RSS" + +#: lib/helpers.js:74 +msgid "RSS entry date" +msgstr "Date de l'entrée RSS" + +#: lib/helpers.js:77 +msgid "RSS entry link" +msgstr "Lien de l'entrée RSS" + +#: lib/helpers.js:83 +msgid "RSS entry summary" +msgstr "Résumé de l'entrée RSS" + +#: lib/helpers.js:86 +msgid "RSS entry image URL" +msgstr "URL de l'image de l'entrée RSS" + +#: lib/mailer.js:245 +msgid "Invalid mail transport" +msgstr "Transport mail invalide" + +#: lib/models/campaigns.js:105 lib/models/campaigns.js:132 +#: lib/models/campaigns.js:205 lib/models/campaigns.js:328 +#: lib/models/campaigns.js:590 lib/models/campaigns.js:723 +msgid "Missing Campaign ID" +msgstr "Identifiant de campagne manquant" + +#: lib/models/campaigns.js:241 +msgid "Emtpy or too large attahcment" +msgstr "Pièce jointe vide ou trop grande" + +#: lib/models/campaigns.js:408 lib/models/campaigns.js:600 +msgid "Campaign Name must be set" +msgstr "Le nom de la campagne est obligatoire" + +#: lib/models/campaigns.js:412 +msgid "RSS URL must be set and needs to be a valid URL" +msgstr "L'URL du flux RSS doit être renseignée et valide" + +#: lib/models/campaigns.js:568 +msgid "Selected template not found" +msgstr "Modèle inconnu" + +#: lib/models/campaigns.js:924 +msgid "Invalid or missing message ID" +msgstr "Message ID invalide ou manquant" + +#: lib/models/campaigns.js:1065 +msgid "Unrecognized message status" +msgstr "Message de statut non reconnu" + +#: lib/models/confirmations.js:27 +msgid "Could not store confirmation data" +msgstr "Les confirmation n'a pas pu être enregistrée" + +#: lib/models/fields.js:24 +msgid "Drop Down" +msgstr "Menu déroulant" + +#: lib/models/fields.js:25 +msgid "Date (MM/DD/YYY)" +msgstr "Date (MM/JJ/YYY)" + +#: lib/models/fields.js:29 +msgid "JSON value for custom rendering" +msgstr "Valeur JSON pour un affichage personnalisé" + +#: lib/models/fields.js:30 +msgid "Option" +msgstr "Option" + +#: lib/models/fields.js:53 lib/models/fields.js:98 lib/models/fields.js:123 +#: lib/models/forms.js:46 lib/models/lists.js:115 lib/models/lists.js:150 +#: lib/models/lists.js:265 lib/models/segments.js:43 lib/models/segments.js:176 +#: lib/models/subscriptions.js:79 lib/models/subscriptions.js:390 +#: lib/models/subscriptions.js:566 lib/models/subscriptions.js:657 +#: lib/models/subscriptions.js:710 lib/models/subscriptions.js:773 +#: lib/models/subscriptions.js:816 +msgid "Missing List ID" +msgstr "Identifiant de liste manquant" + +#: lib/models/fields.js:129 +msgid "Option field requires a group to be selected" +msgstr "Les champs Option nécessitent le choix d'un groupe" + +#: lib/models/fields.js:149 lib/models/fields.js:199 +msgid "Missing Field ID" +msgstr "Identifiant de champ manquant" + +#: lib/models/fields.js:153 lib/models/segments.js:185 +#: lib/models/segments.js:225 +msgid "Field Name must be set" +msgstr "Le nom du champ est obligatoire" + +#: lib/models/fields.js:216 +msgid "Custom field not found" +msgstr "Champ personnalisé introuvable" + +#: lib/models/fields.js:289 +msgid "Unknown column type %s" +msgstr "Type de colonne \"%s\" inconnu" + +#: lib/models/fields.js:293 +msgid "Missing column name" +msgstr "Nom de colonne manquant" + +#: lib/models/fields.js:297 +msgid "Missing list ID" +msgstr "Identifiant de liste manquant" + +#: lib/models/fields.js:305 +msgid "Provided List ID not found" +msgstr "Identifiant de la liste inconnu" + +#: lib/models/forms.js:70 lib/models/forms.js:113 lib/models/forms.js:201 +#: lib/models/forms.js:291 +msgid "Missing Form ID" +msgstr "Identifiant de fomulaire manquant" + +#: lib/models/forms.js:121 lib/models/forms.js:205 +msgid "Form Name must be set" +msgstr "Le nom du formulaire est obligatoire" + +#: lib/models/forms.js:307 +msgid "Custom form not found" +msgstr "Formulaire personnalisé introuvable" + +#: lib/models/links.js:337 routes/campaigns.js:534 routes/campaigns.js:582 +#: routes/campaigns.js:622 routes/campaigns.js:672 services/sender.js:305 +msgid "Campaign not found" +msgstr "Campagne introuvable" + +#: lib/models/links.js:345 routes/lists.js:181 services/sender.js:312 +msgid "List not found" +msgstr "Liste non trouvée" + +#: lib/models/links.js:353 +msgid "Subscription not found" +msgstr "Abonnement non trouvé" + +#: lib/models/lists.js:167 lib/models/lists.js:211 +msgid "List Name must be set" +msgstr "Le nom de la liste est obligatoire" + +#: lib/models/lists.js:294 +msgid "Missing List CID" +msgstr "Identifiant CID de liste manquant" + +#: lib/models/report-templates.js:26 lib/models/report-templates.js:70 +#: lib/models/report-templates.js:142 +msgid "Missing report template ID" +msgstr "Identifiant de modèle de rapport manquant" + +#: lib/models/report-templates.js:77 +msgid "Report template name must be set" +msgstr "Le nom du modèle de rapport est obligatoire" + +#: lib/models/reports.js:40 lib/models/reports.js:110 lib/models/reports.js:188 +msgid "Missing report ID" +msgstr "Identifiant de rapport manquant" + +#: lib/models/reports.js:116 +msgid "Report name must be set" +msgstr "Nom de rapport obligatoire" + +#: lib/models/segments.js:15 +msgid "Signup country" +msgstr "Pays d'inscription" + +#: lib/models/segments.js:19 lib/models/triggers.js:14 +msgid "Sign up date" +msgstr "Date d'inscription" + +#: lib/models/segments.js:23 lib/models/triggers.js:18 +msgid "Latest open" +msgstr "Dernière ouverture" + +#: lib/models/segments.js:27 lib/models/triggers.js:22 +msgid "Latest click" +msgstr "Dernier clic" + +#: lib/models/segments.js:69 lib/models/segments.js:216 +#: lib/models/segments.js:256 lib/models/segments.js:278 +msgid "Missing Segment ID" +msgstr "Identifiant de segment manquant" + +#: lib/models/segments.js:85 lib/models/segments.js:551 +#: lib/models/segments.js:661 +msgid "Segment not found" +msgstr "Segment introuvable" + +#: lib/models/segments.js:146 lib/models/segments.js:147 +#: lib/models/segments.js:409 lib/models/segments.js:410 +msgid "%s days after today" +msgstr "%s jours à partir d'aujourd'hui" + +#: lib/models/segments.js:146 lib/models/segments.js:147 +#: lib/models/segments.js:409 lib/models/segments.js:410 +msgid "%s days before today" +msgstr "%s days avant aujourd'hui" + +#: lib/models/segments.js:148 lib/models/segments.js:411 +msgid "today" +msgstr "aujourd'hui" + +#: lib/models/segments.js:189 lib/models/segments.js:229 +msgid "Invalid segment rule type" +msgstr "Règle de segmentation invalide" + +#: lib/models/segments.js:289 lib/models/segments.js:455 routes/segments.js:266 +#: routes/segments.js:300 routes/segments.js:370 routes/segments.js:381 +msgid "Selected segment not found" +msgstr "Segment inconnu" + +#: lib/models/segments.js:294 lib/models/segments.js:460 routes/segments.js:272 +#: routes/segments.js:306 routes/segments.js:387 +msgid "Invalid rule type" +msgstr "Type de règle invalide" + +#: lib/models/segments.js:359 lib/models/segments.js:435 +#: lib/models/segments.js:526 +msgid "Missing Rule ID" +msgstr "Identifiant de règle manquant" + +#: lib/models/segments.js:375 +msgid "Specified rule not found" +msgstr "La ègle demandée est introuvable" + +#: lib/models/segments.js:386 +msgid "Specified segment not found" +msgstr "Le segment spécifié est introuvable" + +#: lib/models/segments.js:446 +msgid "Selected rule not found" +msgstr "Règle inconnue" + +#: lib/models/subscriptions.js:257 lib/models/subscriptions.js:287 +#: lib/models/subscriptions.js:394 +msgid "Missing Subscription ID" +msgstr "Identifiant d'abonnement manquant" + +#: lib/models/subscriptions.js:315 +msgid "Missing Subscription email address" +msgstr "Adresse mail d'abonnement manquante" + +#: lib/models/subscriptions.js:570 lib/models/subscriptions.js:820 +msgid "Missing subscription ID" +msgstr "Identifiant d'abonnement manquant" + +#: lib/models/subscriptions.js:661 lib/models/subscriptions.js:714 +#: lib/models/subscriptions.js:750 +msgid "Missing Import ID" +msgstr "Identifiant d'import manquant" + +#: lib/models/subscriptions.js:842 +msgid "Unknown subscription ID" +msgstr "ID d'abonnement inconnu" + +#: lib/models/subscriptions.js:847 routes/subscription.js:639 +msgid "Nothing seems to be changed" +msgstr "Rien ne semble avoir été modifié" + +#: lib/models/subscriptions.js:913 routes/subscription.js:473 +#: routes/subscription.js:545 routes/subscription.js:581 +#: routes/subscription.js:697 routes/subscription.js:772 +msgid "Subscription not found in this list" +msgstr "Abonnement introuvable dans cette liste" + +#: lib/models/templates.js:26 lib/models/templates.js:102 +#: lib/models/templates.js:157 +msgid "Missing Template ID" +msgstr "Identifiant de modèle manquant" + +#: lib/models/templates.js:55 lib/models/templates.js:106 +msgid "Template Name must be set" +msgstr "Le nom du modèle est obligatoire" + +#: lib/models/templates.js:147 +msgid "Template does not exist" +msgstr "Le modèle n'existe pas" + +#: lib/models/triggers.js:31 +msgid "Has Opened" +msgstr "A ouvert" + +#: lib/models/triggers.js:34 +msgid "Has Clicked" +msgstr "A cliqué" + +#: lib/models/triggers.js:37 +msgid "Not Opened" +msgstr "Non ouvert" + +#: lib/models/triggers.js:40 +msgid "Not Clicked" +msgstr "Non cliqué" + +#: lib/models/triggers.js:221 lib/models/triggers.js:258 +msgid "Missing or invalid list ID" +msgstr "Identifiant de liste manquant ou invalide" + +#: lib/models/triggers.js:225 lib/models/triggers.js:310 +msgid "Days in the past are not allowed" +msgstr "Jours dans le passé interdits" + +#: lib/models/triggers.js:229 lib/models/triggers.js:250 +#: lib/models/triggers.js:314 lib/models/triggers.js:335 +msgid "Missing or invalid trigger rule" +msgstr "Règle de déclenchement manquante ou invalide" + +#: lib/models/triggers.js:236 lib/models/triggers.js:321 +msgid "Invalid subscription configuration" +msgstr "Configuration d'abonnement invalide" + +#: lib/models/triggers.js:243 lib/models/triggers.js:328 +msgid "Invalid campaign configuration" +msgstr "Configuration incorrecte de la campagne" + +#: lib/models/triggers.js:246 lib/models/triggers.js:331 +msgid "A campaing can not be a target for itself" +msgstr "Une campagne ne peut pas être envoyée à elle-même" + +#: lib/models/triggers.js:279 +msgid "Could not store trigger row" +msgstr "Le déclencheur n'a pas pu être enregistré" + +#: lib/models/triggers.js:296 +msgid "Missing or invalid Trigger ID" +msgstr "Identifiant de déclencheur manquant ou invalide" + +#: lib/models/triggers.js:363 +msgid "Missing Trigger ID" +msgstr "Identifiant de déclencheur manquant" + +#: lib/models/users.js:103 +msgid "Could not store user row" +msgstr "L'utilisateur n'a pas pu être enregistré" + +#: lib/models/users.js:173 +msgid "Email Address must be set" +msgstr "L'adresse mail est obligatoire" + +#: lib/models/users.js:184 +msgid "Failed to check user data" +msgstr "Échec à la vérification des données utilisateur" + +#: lib/models/users.js:195 +msgid "" +"Can't change email as another user with the same email address already exists" +msgstr "" +"Ne peut changer l'adresse mail, car un autre utilisateur avec la même " +"adresse existe déjà" + +#: lib/models/users.js:212 +msgid "Incorrect current password" +msgstr "Mot de passe actuel incorrect" + +#: lib/models/users.js:216 +msgid "New password not set" +msgstr "Nouveau mot de passe non enregistré" + +#: lib/models/users.js:220 +msgid "Passwords do not match" +msgstr "Les mots de passe ne correspondent pas" + +#: lib/models/users.js:258 +msgid "User ID not set" +msgstr "Identifiant utilisateur non fourni" + +#: lib/models/users.js:286 +msgid "Username must be set" +msgstr "Nom d'utilisateur obligatoire" + +#: lib/models/users.js:323 +msgid "Mailer password change request" +msgstr "Demande de changement de mot de passe" + +#: lib/models/users.js:347 lib/models/users.js:367 +msgid "Missing username or reset token" +msgstr "Token de réinitialisation ou nom d'utilisateur manquant" + +#: lib/models/users.js:371 +msgid "Invalid new password" +msgstr "Nouveau mot de passe invalide" + +#: lib/passport.js:50 +msgid "%s logged out" +msgstr "%s déconnecté" + +#: lib/passport.js:65 +msgid "Failed to authenticate user" +msgstr "Échec à l'authentification de l'utilisateur" + +#: lib/passport.js:81 +msgid "Logged in as %s" +msgstr "Connecté comme %s" + +#: lib/passport.js:191 +msgid "Incorrect username or password" +msgstr "Nom d'utilisateur ou mot de passe incorrect" + +#: lib/subscription-mail-helpers.js:28 +msgid "%s: Subscription Confirmed" +msgstr "%s: Abonnement confirmé" + +#: lib/subscription-mail-helpers.js:39 +msgid "%s: Email Address Already Registered" +msgstr "%s: Adresse mail déjà enregistrée" + +#: lib/subscription-mail-helpers.js:49 +msgid "%s: Please Confirm Email Change in Subscription" +msgstr "%s: Merci de confirmer le changement de mail de l'abonnement" + +#: lib/subscription-mail-helpers.js:59 +msgid "%s: Please Confirm Subscription" +msgstr "%: Merci de confirmer l'abonnement" + +#: lib/subscription-mail-helpers.js:69 +msgid "%s: Please Confirm Unsubscription" +msgstr "%: Merci de confirmer le désabonnement" + +#: lib/subscription-mail-helpers.js:76 +msgid "%s: Unsubscription Confirmed" +msgstr "%s: Désabonnement confirmé" + +#: lib/tools.js:154 +msgid "Blocked email address \"%s\"" +msgstr "Adresse mail bloquée \"%s\"" + +#: lib/tools.js:163 +msgid "Invalid email address \"%s\"." +msgstr "Adresse mail \"%s\" invalide." + +#: lib/tools.js:166 +msgid "MX record not found for domain" +msgstr "Enregistrement MX introuvable pour le domaine" + +#: lib/tools.js:169 +msgid "Address domain not found" +msgstr "Le nom de domaine de l'adresse est inconnu" + +#: lib/tools.js:172 +msgid "Address domain name is required" +msgstr "Le nom de domaine de l'adresse est requis" + +#: routes/archive.js:31 routes/archive.js:43 routes/archive.js:55 app.js:230 +msgid "Not Found" +msgstr "Non trouvé" + +#: routes/archive.js:121 services/sender.js:454 +msgid "Received status code %s from %s" +msgstr "Le code de status %s a été reçu de %s" + +#: routes/archive.js:153 routes/campaigns.js:895 +msgid "Attachment not found" +msgstr "Pièce jointe introuvable" + +#: routes/blacklist.js:13 routes/campaigns.js:26 routes/editorapi.js:32 +#: routes/fields.js:13 routes/forms.js:16 routes/grapejs.js:15 +#: routes/lists.js:50 routes/mosaico.js:14 routes/report-templates.js:20 +#: routes/reports.js:22 routes/segments.js:13 routes/settings.js:23 +#: routes/templates.js:18 routes/triggers.js:19 routes/users.js:75 +#: routes/users.js:120 +msgid "Need to be logged in to access restricted content" +msgstr "Vous devez être connecté pour accéder à cet espace" + +#: routes/campaigns.js:118 +msgid "Could not create campaign" +msgstr "La campagne n'a pas pu être créée" + +#: routes/campaigns.js:121 +msgid "Campaign “%s” created" +msgstr "Campagne \"%s\" créée" + +#: routes/campaigns.js:210 +msgid "Campaign settings updated" +msgstr "Les paramètres de la campagne ont été mis à jour" + +#: routes/campaigns.js:212 +msgid "Campaign settings not updated" +msgstr "Les paramètres de la campagne n'ont pas pu être mis à jour" + +#: routes/campaigns.js:228 routes/campaigns.js:745 +msgid "Campaign deleted" +msgstr "Campagne supprimée" + +#: routes/campaigns.js:230 routes/campaigns.js:747 +msgid "Could not delete specified campaign" +msgstr "La campagne n'a pas pu être supprimée" + +#: routes/campaigns.js:249 +msgid "Idling" +msgstr "Inactif" + +#: routes/campaigns.js:252 +msgid "Scheduled" +msgstr "Programmé" + +#: routes/campaigns.js:258 +msgid "Paused" +msgstr "En pause" + +#: routes/campaigns.js:260 +msgid "Inactive" +msgstr "Inactif" + +#: routes/campaigns.js:262 +msgid "Active" +msgstr "Actif" + +#: routes/campaigns.js:264 +msgid "Other" +msgstr "Autre" + +#: routes/campaigns.js:422 +msgid "Unknown status selector" +msgstr "Sélecteur de statut inconnu" + +#: routes/campaigns.js:763 +msgid "Scheduled sending" +msgstr "Envoi programmé" + +#: routes/campaigns.js:765 +msgid "Could not schedule sending" +msgstr "L'envoi n'a pas pu être programmé" + +#: routes/campaigns.js:777 +msgid "Sending resumed" +msgstr "Envoi relancé" + +#: routes/campaigns.js:779 +msgid "Could not resume sending" +msgstr "L'envoi n'a pas pu être relancé" + +#: routes/campaigns.js:791 +msgid "Sending reset" +msgstr "Envoi réinitialisé" + +#: routes/campaigns.js:793 +msgid "Could not reset sending" +msgstr "L'envoi n'a pas pu être réinitialisé" + +#: routes/campaigns.js:805 routes/campaigns.js:833 +msgid "Sending paused" +msgstr "Envoi mis en pause" + +#: routes/campaigns.js:807 routes/campaigns.js:835 +msgid "Could not pause sending" +msgstr "L'envoi n'a pas pu être interrompu" + +#: routes/campaigns.js:819 +msgid "Sending activated" +msgstr "Envoi activé" + +#: routes/campaigns.js:821 +msgid "Could not activate sending" +msgstr "Ne peut activer l'envoi" + +#: routes/campaigns.js:856 +msgid "Attachment uploaded" +msgstr "Pièce jointe téléchargée" + +#: routes/campaigns.js:858 +msgid "Could not store attachment" +msgstr "La pièce jointe n'a pas pu être enregistrée" + +#: routes/campaigns.js:875 +msgid "Attachment deleted" +msgstr "Pièce jointe supprimée" + +#: routes/campaigns.js:877 +msgid "Could not delete attachment" +msgstr "La pièce jointe n'a pas pu être supprimée" + +#: routes/editorapi.js:38 +msgid "Invalid editor name" +msgstr "Nom d'éditeur invalide" + +#: routes/editorapi.js:146 +msgid "Method not supported" +msgstr "Méthode non supportée" + +#: routes/editorapi.js:381 +msgid "Invalid resource type or ID" +msgstr "Type ou ID de ressource invalide" + +#: routes/fields.js:28 routes/fields.js:64 routes/fields.js:118 +#: routes/forms.js:31 routes/forms.js:63 routes/forms.js:94 +#: routes/segments.js:28 routes/segments.js:59 routes/segments.js:102 +#: routes/segments.js:151 routes/segments.js:223 routes/segments.js:255 +#: routes/segments.js:289 routes/segments.js:336 routes/segments.js:359 +msgid "Selected list ID not found" +msgstr "Identifiant de liste inconnu" + +#: routes/fields.js:102 +msgid "Could not create custom field" +msgstr "Le champ personnalisé n'a pas pu être créé" + +#: routes/fields.js:129 +msgid "Selected field not found" +msgstr "Champ inconnu" + +#: routes/fields.js:165 +msgid "Field settings updated" +msgstr "Les paramètres du champ ont été enregistrés" + +#: routes/fields.js:167 +msgid "Field settings not updated" +msgstr "Les paramètres du champ n'ont pas pu être mis à jour" + +#: routes/fields.js:183 +msgid "Custom field deleted" +msgstr "Champ personnalisé supprimé" + +#: routes/fields.js:185 +msgid "Could not delete specified field" +msgstr "Le champ n'a pas pu être supprimé" + +#: routes/forms.js:78 +msgid "Could not create custom form" +msgstr "Le formulaire n'a pas pu être créé" + +#: routes/forms.js:105 +msgid "Selected form not found" +msgstr "Formulaire inconnu" + +#: routes/forms.js:136 +msgid "The plaintext version for this email" +msgstr "Version texte de ce mail" + +#: routes/forms.js:137 +msgid "Custom forms use MJML for formatting" +msgstr "Les formulaires personnalisés utilisent le formatage MJML" + +#: routes/forms.js:138 +msgid "See the MJML documentation here" +msgstr "Voir ici la documentation MJML" + +#: routes/forms.js:146 +msgid "Layout" +msgstr "Format" + +#: routes/forms.js:152 +msgid "Form Input Style" +msgstr "Style des zones Input de formulaire" + +#: routes/forms.js:154 +msgid "" +"This CSS stylesheet defines the appearance of form input elements and alerts" +msgstr "" +"Cette feuille de style CSS définit l'apparence des zones de saisie et des " +"alertes du formulaire" + +#: routes/forms.js:160 +msgid "Web - Subscribe" +msgstr "Web - Abonnement" + +#: routes/forms.js:165 +msgid "Web - Confirm Subscription Notice" +msgstr "Web - Information de confirmation d'abonnement" + +#: routes/forms.js:170 +msgid "Mail - Confirm Subscription (MJML)" +msgstr "Mail - Confirmation d'abonnement (MJML)" + +#: routes/forms.js:175 +msgid "Mail - Confirm Subscription (Text)" +msgstr "Mail - Confirmation d'abonnement (Texte)" + +#: routes/forms.js:180 +msgid "Mail - Already Subscribed (MJML)" +msgstr "Mail - Déjà abonné (MJML)" + +#: routes/forms.js:185 +msgid "Mail - Already Subscribed (Text)" +msgstr "Mail - Déjà abonné (Texte)" + +#: routes/forms.js:190 +msgid "Web - Subscribed Notice" +msgstr "Web - Information d'abonné" + +#: routes/forms.js:195 +msgid "Mail - Subscription Confirmed (MJML)" +msgstr "Mail - Abonnement confirmé (MJML)" + +#: routes/forms.js:200 +msgid "Mail - Subscription Confirmed (Text)" +msgstr "Mail - Abonnement confirmé (Texte)" + +#: routes/forms.js:208 +msgid "Web - Manage Preferences" +msgstr "Web - Gesteion des préférences" + +#: routes/forms.js:213 +msgid "Web - Manage Address" +msgstr "Web - Gestion de l'adresse" + +#: routes/forms.js:218 +msgid "Web - Updated Notice" +msgstr "Web - Information enregistrée" + +#: routes/forms.js:226 +msgid "Web - Unsubscribe" +msgstr "Web - Désabonnement" + +#: routes/forms.js:231 +msgid "Web - Confirm Unsubscription Notice" +msgstr "Web - Information de confirmation de désabonnement" + +#: routes/forms.js:236 +msgid "Mail - Confirm Unsubscription (MJML)" +msgstr "Mail - Confirmation de désabonnement (MJML)" + +#: routes/forms.js:241 +msgid "Mail - Confirm Unsubscription (Text)" +msgstr "Mail - Confirmation de désabonnement (Texte)" + +#: routes/forms.js:246 +msgid "Mail - Confirm Address Change (MJML)" +msgstr "Mail - Confirmation de changement d'adresse (MJML)" + +#: routes/forms.js:251 +msgid "Mail - Confirm Address Change (Text)" +msgstr "Mail - Confirmation de changement d'adresse (Texte)" + +#: routes/forms.js:256 +msgid "Web - Unsubscribed Notice" +msgstr "Web - Information de confirmation de désabonnement" + +#: routes/forms.js:261 +msgid "Mail - Unsubscription Confirmed (MJML)" +msgstr "Mail - Désbonnement confirmé (MJML)" + +#: routes/forms.js:266 +msgid "Mail - Unsubscription Confirmed (Text)" +msgstr "Mail - Désbonnement confirmé (Texte)" + +#: routes/forms.js:271 +msgid "Web - Manual Unsubscribe Notice" +msgstr "Web - Information de désabonnement manuel" + +#: routes/forms.js:309 +msgid "Form settings updated" +msgstr "Les paramètres du formulaire ont été enregistrés" + +#: routes/forms.js:311 +msgid "Form settings not updated" +msgstr "Les paramètres du formulaire n'ont pas pu être modifiés" + +#: routes/forms.js:327 +msgid "Custom form deleted" +msgstr "Formulaire personnalisé supprimé" + +#: routes/forms.js:329 +msgid "Could not delete specified form" +msgstr "Le formulaire n'a pas pu être supprimé" + +#: routes/index.js:11 +msgid "Self Hosted Newsletter App" +msgstr "Solution de Newsletter auto-hébergée" + +#: routes/links.js:39 +msgid "Oops, we couldn't find a link for the URL you clicked" +msgstr "Oups, nous n'avons pas trouvé le lien sur lequel vous avez cliqué" + +#: routes/lists.js:82 +msgid "Could not create list" +msgstr "La liste n'a pas pu être créée" + +#: routes/lists.js:85 +msgid "List created" +msgstr "Liste créée" + +#: routes/lists.js:93 routes/lists.js:271 routes/lists.js:336 +#: routes/lists.js:375 routes/lists.js:444 routes/lists.js:469 +#: routes/lists.js:514 routes/lists.js:536 routes/lists.js:565 +#: routes/lists.js:657 routes/lists.js:714 routes/lists.js:741 +msgid "Could not find list with specified ID" +msgstr "Ne peut trouver la liste avec cet identifiant" + +#: routes/lists.js:122 +msgid "List settings updated" +msgstr "Les paramètres de la liste ont été mis à jour" + +#: routes/lists.js:124 +msgid "List settings not updated" +msgstr "Les paramètres de la liste n'ont pu être registrés" + +#: routes/lists.js:142 +msgid "List deleted" +msgstr "Liste supprimée" + +#: routes/lists.js:144 +msgid "Could not delete specified list" +msgstr "La liste n'a pas pu être supprimée" + +#: routes/lists.js:206 +msgid "Unknown" +msgstr "Inconnu" + +#: routes/lists.js:206 +msgid "Complained" +msgstr "Plainte" + +#: routes/lists.js:237 +msgid "Invalid key" +msgstr "Clé invalide" + +#: routes/lists.js:239 +msgid "Expired key" +msgstr "Clé expirée" + +#: routes/lists.js:241 +msgid "Revoked key" +msgstr "Clé révoquée" + +#: routes/lists.js:288 +msgid "Force Subscribe" +msgstr "Forcer l'abonnement" + +#: routes/lists.js:291 +msgid "Initializing" +msgstr "Initialisation" + +#: routes/lists.js:294 +msgid "Initialized" +msgstr "Initialisé" + +#: routes/lists.js:297 +msgid "Importing" +msgstr "Import en cours" + +#: routes/lists.js:303 +msgid "Errored" +msgstr "En erreur" + +#: routes/lists.js:381 routes/lists.js:450 routes/lists.js:475 +msgid "Could not find subscriber with specified ID" +msgstr "Ne peut trouver d'abonné avec cet identifiant" + +#: routes/lists.js:427 +msgid "Could not add subscription" +msgstr "L'abonnement n'a pas pu être ajouté" + +#: routes/lists.js:432 +msgid "%s was successfully added to your list" +msgstr "%s a été ajouté à votre liste" + +#: routes/lists.js:434 +msgid "%s was not added to your list" +msgstr "%s n'a pas été ajouté à votre liste" + +#: routes/lists.js:456 +msgid "Could not unsubscribe user" +msgstr "L'utilisateur n'a pas pu être désabonné" + +#: routes/lists.js:459 +msgid "%s was successfully unsubscribed from your list" +msgstr "%s a été désabonné de votre liste" + +#: routes/lists.js:479 +msgid "%s was successfully removed from your list" +msgstr "%s a été retiré de votre liste" + +#: routes/lists.js:491 +msgid "Another subscriber with email address %s already exists" +msgstr "Un autre abonné avec l'adresse mail %s existe déjà" + +#: routes/lists.js:498 +msgid "Subscription settings updated" +msgstr "Les paramètres de l'abonnement ont été enregitrés" + +#: routes/lists.js:500 +msgid "Subscription settings not updated" +msgstr "Les paramètres de l'abonnement n'ont pas pu être mis à jour" + +#: routes/lists.js:542 routes/lists.js:663 routes/lists.js:699 +#: routes/lists.js:727 routes/lists.js:747 +msgid "Could not find import data with specified ID" +msgstr "Ne peut trouver l'import de données avec cet identifiant" + +#: routes/lists.js:573 +msgid "Could not process CSV" +msgstr "Le CSV n'a pas pu être traité" + +#: routes/lists.js:589 +msgid "Could not create importer" +msgstr "L'import n'a pas pu être créé" + +#: routes/lists.js:643 +msgid "Empty file" +msgstr "Fichier vide" + +#: routes/lists.js:646 +msgid "Too few rows" +msgstr "Trop peu de lignes" + +#: routes/lists.js:703 +msgid "Import started" +msgstr "Import démarré" + +#: routes/lists.js:731 +msgid "Import restarted" +msgstr "Import relancé" + +#: routes/lists.js:797 +msgid "One-step (i.e. no email with confirmation link)" +msgstr "En une étape (pas d'envoi de mail avec lien de confirmation)" + +#: routes/lists.js:803 +msgid "" +"One-step with unsubscription form (i.e. no email with confirmation link)" +msgstr "" +"En une étape avec formulaire de désabonnement (pas d'envoi de mail avec lien " +"de confirmation)" + +#: routes/lists.js:809 +msgid "Two-step (i.e. an email with confirmation link will be sent)" +msgstr "En deux étapes (envoi d'un mail avec avec lien de confirmation)" + +#: routes/lists.js:815 +msgid "" +"Two-step with unsubscription form (i.e. an email with confirmation link will " +"be sent)" +msgstr "" +"En deux étapes avec formulaire de désabonnement (envoi d'un mail avec avec " +"lien de confirmation)" + +#: routes/lists.js:821 +msgid "" +"Manual (i.e. unsubscription has to be performed by the list administrator)" +msgstr "" +"Manuel (le désabonnement doit être fait par l'administrateur de la liste)" + +#: routes/report-templates.js:246 +msgid "Could not create report template" +msgstr "Le modèle de rapport n'a pas pu être créé" + +#: routes/report-templates.js:249 +msgid "Report template “%s” created" +msgstr "Modèle de rapport \"%s\" créé" + +#: routes/report-templates.js:257 +msgid "Could not find report template with specified ID" +msgstr "Ne peut trouver le modèle de rapport avec cet identifiant" + +#: routes/report-templates.js:280 +msgid "Report template updated" +msgstr "Modèle de rapport enregistré" + +#: routes/report-templates.js:282 +msgid "Report template not updated" +msgstr "Le modèle de rapport n'a pas pu être enregistré" + +#: routes/report-templates.js:298 +msgid "Report template deleted" +msgstr "Modèle de rapport supprimé" + +#: routes/report-templates.js:300 +msgid "Could not delete specified report template" +msgstr "Le modèle de rapport n'a pas pu être supprimé" + +#: routes/reports.js:124 routes/reports.js:130 +msgid "Could not create report" +msgstr "Le rapport n'a pas pu être créé" + +#: routes/reports.js:135 +msgid "Report “%s” created" +msgstr "Rapport \"%s\" créé" + +#: routes/reports.js:146 routes/reports.js:224 routes/reports.js:239 +#: routes/reports.js:265 routes/reports.js:275 +msgid "Could not find report with specified ID" +msgstr "Ne peut trouver le rapport avec cet identifiant" + +#: routes/reports.js:188 routes/reports.js:194 +msgid "Could not update report" +msgstr "Le rapport n'a pas pu être mis à jour" + +#: routes/reports.js:197 +msgid "Report updated" +msgstr "Rapport enregistré" + +#: routes/reports.js:199 +msgid "Report not updated" +msgstr "Le rapport n'a pas pu être enregistré" + +#: routes/reports.js:212 +msgid "Report deleted" +msgstr "Rapport supprimé" + +#: routes/reports.js:214 +msgid "Could not delete specified report" +msgstr "Le rapport n'a pas pu être supprimé" + +#: routes/reports.js:230 +msgid "Could not find report template" +msgstr "Le modèle de rapport associé n'a pas pu être trouvé" + +#: routes/reports.js:260 +msgid "Unknown type of template" +msgstr "Type de modèle inconnu" + +#: routes/segments.js:86 +msgid "Could not create segment" +msgstr "Le segment n'a pas pu être créé" + +#: routes/segments.js:89 +msgid "Segment created" +msgstr "Segment créé" + +#: routes/segments.js:113 +msgid "Selected segment ID not found" +msgstr "Identifiant de segment inconnu" + +#: routes/segments.js:188 +msgid "Segment settings updated" +msgstr "Configuration du segment enregistrée" + +#: routes/segments.js:190 +msgid "Segment settings not updated" +msgstr "Configuration du segment non enregistrée" + +#: routes/segments.js:206 +msgid "Segment deleted" +msgstr "Segment supprimé" + +#: routes/segments.js:208 +msgid "Could not delete specified segment" +msgstr "Le segment n'a pas pu être supprimé" + +#: routes/segments.js:342 +msgid "Could not create rule" +msgstr "La règle n'a pas pu être créée" + +#: routes/segments.js:345 +msgid "Rule created" +msgstr "Règle créée" + +#: routes/segments.js:410 +msgid "Rule settings updated" +msgstr "Paramètres de la règle enregistrés" + +#: routes/segments.js:412 +msgid "Rule settings not updated" +msgstr "Paramètres de la règle non mis à jour" + +#: routes/segments.js:428 +msgid "Rule deleted" +msgstr "Règle supprimée" + +#: routes/segments.js:430 +msgid "Could not delete specified rule" +msgstr "La règle n'a pas pu être supprimée" + +#: routes/settings.js:39 +msgid "Use TLS" +msgstr "Utiliser TLS" + +#: routes/settings.js:40 +msgid "usually selected for port 465" +msgstr "Utilisé habituellement pour le port 465" + +#: routes/settings.js:44 +msgid "Use STARTTLS" +msgstr "Utiliser STARTTLS" + +#: routes/settings.js:45 +msgid "usually selected for port 587 and 25" +msgstr "Utilisé habituellement pour les ports 587 et 25" + +#: routes/settings.js:49 +msgid "Do not use encryption" +msgstr "Ne pas utiliser le chiffrement" + +#: routes/settings.js:115 +msgid "Settings updated" +msgstr "Configuration mise à jour" + +#: routes/settings.js:173 +msgid "Invalid mail transport type" +msgstr "Type de transport mail invalide" + +#: routes/settings.js:184 +msgid "Invalid Access Key" +msgstr "Clé d'accès invalide" + +#: routes/settings.js:187 +msgid "Invalid AWS credentials" +msgstr "Credentials AWS invalides" + +#: routes/settings.js:190 +msgid "Connection refused, check hostname and port." +msgstr "Connexion refusée, vérifiez l'adresse du serveur et le port." + +#: routes/settings.js:195 +msgid "" +"Did not receive greeting message from server. This might happen when " +"connecting to a TLS port without using TLS." +msgstr "" +"N'a pas reçu le message de présentation du serveur. Cela peut survenir lors " +"d'une connexion à port TLS sans utiliser TLS" + +#: routes/settings.js:197 +msgid "Did not receive greeting message from server." +msgstr "N'a pas reçu le message de présentation du serveur." + +#: routes/settings.js:200 +msgid "" +"Connection timed out. Check your firewall settings, destination port is " +"probably blocked." +msgstr "" +"Connexion expirée. Vérifiez vos règles de firewall, le port de destination " +"est certainement bloqué." + +#: routes/settings.js:205 +msgid "Authentication not accepted, server expects STARTTLS to be used." +msgstr "" +"La tentative d'authentification est rejetée. Le serveur impose l'utilisation " +"de STARTTLS." + +#: routes/settings.js:207 +msgid "Authentication failed, check username and password." +msgstr "" +"Échec de l'authentification, vérifiez le nom d'utilisateur et le mot de " +"passe." + +#: routes/settings.js:217 +msgid "Failed Mailer verification." +msgstr "Echec à la vérification du serveur mail." + +#: routes/settings.js:217 +msgid "Server responded with: \"%s\"" +msgstr "Le serveur a répondu : \"%s\"" + +#: routes/settings.js:221 +msgid "Mailer settings verified, ready to send some mail!" +msgstr "Paramètres mailer vérifiés, prêt à envoyer du mail !" + +#: routes/subscription.js:33 +msgid "Not allowed by CORS" +msgstr "Interdit par CORS" + +#: routes/subscription.js:61 routes/subscription.js:176 +#: routes/subscription.js:286 routes/subscription.js:382 +#: routes/subscription.js:459 routes/subscription.js:535 +#: routes/subscription.js:566 routes/subscription.js:626 +#: routes/subscription.js:682 routes/subscription.js:760 +#: routes/subscription.js:897 +msgid "Selected list not found" +msgstr "Liste inconnue" + +#: routes/subscription.js:93 +msgid "Could not save subscription" +msgstr "L'abonnement n'a pas pu être enregistré" + +#: routes/subscription.js:118 +msgid "Subscriber info corrupted or missing" +msgstr "Information sur l'abonné manquante ou corrompue" + +#: routes/subscription.js:136 +msgid "Email address changed" +msgstr "Adresse mail changée" + +#: routes/subscription.js:179 routes/subscription.js:385 +msgid "The list does not allow public subscriptions." +msgstr "La liste ne permet pas les abonnements libres." + +#: routes/subscription.js:355 routes/subscription.js:357 +msgid "Email address not set" +msgstr "L'adresse mail n'est pas précisée" + +#: routes/subscription.js:653 +msgid "" +"An email with further instructions has been sent to the provided address" +msgstr "Un mail avec des instructions a été envoyé à l'adresse fournie" + +#: routes/subscription.js:861 routes/subscription.js:877 +msgid "Public key is not set" +msgstr "La clé publlique n'est pas renseignée" + +#: routes/templates.js:84 +msgid "Could not create template" +msgstr "Le modèle n'a pas pu être créé" + +#: routes/templates.js:87 +msgid "Template created" +msgstr "Modèle créé" + +#: routes/templates.js:126 +msgid "Template settings updated" +msgstr "Paramètres du modèle enregistrés" + +#: routes/templates.js:128 +msgid "Template settings not updated" +msgstr "Les paramètres du modèle n'ont pas pu être mis à jour" + +#: routes/templates.js:144 +msgid "Template duplicated" +msgstr "Modèle dupliqué" + +#: routes/templates.js:146 +msgid "Could not duplicate specified template" +msgstr "Le modèle n'a pas pu être dupliqué" + +#: routes/templates.js:157 +msgid "Template deleted" +msgstr "Modèle supprimé" + +#: routes/templates.js:159 +msgid "Could not delete specified template" +msgstr "Le modèle n'a pas pu être supprimé" + +#: routes/triggers.js:64 routes/triggers.js:88 routes/triggers.js:180 +msgid "Could not find selected list" +msgstr "La liste sélectionnée n'a pas pu être trouvée" + +#: routes/triggers.js:94 routes/triggers.js:100 routes/triggers.js:186 +msgid "Error while finding selected segment" +msgstr "Erreur à la recherche du segment sélectionné" + +#: routes/triggers.js:157 +msgid "Could not create trigger" +msgstr "Le déclencheur n'a pas pu être créé" + +#: routes/triggers.js:164 +msgid "Trigger “%s” created" +msgstr "Déclencheur \"%s\" créé" + +#: routes/triggers.js:197 +msgid "Error while finding selected segment subscribers" +msgstr "Erreur lors de la recherche des abonnés du segment" + +#: routes/triggers.js:262 +msgid "Trigger settings updated" +msgstr "Paramètres du déclencheur enregistrés" + +#: routes/triggers.js:264 +msgid "Trigger settings not updated" +msgstr "Les paramètres du déclencheur n'ont pas pu être enregistrés" + +#: routes/triggers.js:276 +msgid "Trigger deleted" +msgstr "Déclencheur supprimé" + +#: routes/triggers.js:278 +msgid "Could not delete specified trigger" +msgstr "Le déclencheur n'a pas pu être supprimé" + +#: routes/triggers.js:290 +msgid "Could not find trigger with specified ID" +msgstr "Ne peut trouver de déclencheur avec cet identifiant" + +#: routes/triggers.js:303 +msgid "Trigger not found" +msgstr "Déclencheur inconnu" + +#: routes/users.js:32 +msgid "" +"An email with password reset instructions has been sent to your email " +"address, if it exists on our system." +msgstr "" +"Un mail avec les instructions de réinitialisation du mot de passe à été " +"envoyée à votre adresse, si elle est enregistrée dans notre système." + +#: routes/users.js:46 routes/users.js:64 +msgid "Unknown or expired reset token" +msgstr "Token de réinitialisation inconnu ou expiré" + +#: routes/users.js:66 +msgid "Your password has been changed successfully" +msgstr "Votre mot de passe a bien été changé" + +#: routes/users.js:87 +msgid "User data not found" +msgstr "Données utilisateurs non trouvées" + +#: routes/users.js:110 +msgid "Access token updated" +msgstr "Le jeton d'accès a été mis à jour" + +#: routes/users.js:112 +msgid "Access token not updated" +msgstr "Le jeton d'accès n'a pas été mis à jour" + +#: routes/users.js:139 +msgid "Account information updated" +msgstr "Les informations sur le compte ont été mises à jour" + +#: routes/users.js:141 +msgid "Account information not updated" +msgstr "Les informations sur le compte n'ont pas été mises à jour" + +#: services/feedcheck.js:51 +msgid "Feed error: %s" +msgstr "Erreur du flux : %s" + +#: services/feedcheck.js:54 +msgid "Found %s new campaign messages from feed" +msgstr "%s nouveau(x) message(s) ont été trouvés dans le flux RSS" + +#: services/feedcheck.js:56 +msgid "Found nothing new from the feed" +msgstr "Aucun nouvel élément dans le flux RSS" + +#: services/feedcheck.js:146 +msgid "RSS entry %s" +msgstr "Entrée RSS %s" + +#: services/importer.js:249 +msgid "Could not access import file" +msgstr "Ne peut ouvrir le fichier d'import" + +#: services/triggers.js:51 +msgid "Unknown trigger type %s" +msgstr "Type de déclencheur %s inconnu" From 5db5bb73c402bf6681f52548c835dca8123a4ee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Kov=C3=A1cs?= Date: Fri, 7 Sep 2018 16:54:29 +0200 Subject: [PATCH 455/483] hungarian trans continued --- languages/hu_HU.mo | Bin 0 -> 21551 bytes languages/hu_HU.po | 156 +++++++++++++++++++++++---------------------- 2 files changed, 80 insertions(+), 76 deletions(-) create mode 100644 languages/hu_HU.mo diff --git a/languages/hu_HU.mo b/languages/hu_HU.mo new file mode 100644 index 0000000000000000000000000000000000000000..6c923343f0e907305b2ed3b283b9177114f9198c GIT binary patch literal 21551 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 literal 0 HcmV?d00001 diff --git a/languages/hu_HU.po b/languages/hu_HU.po index ebed60bd..891192a4 100644 --- a/languages/hu_HU.po +++ b/languages/hu_HU.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "Language-Team: \n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2018-07-29 03:02+0200\n" +"PO-Revision-Date: 2018-09-07 16:53+0200\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -531,35 +531,35 @@ msgstr "Méret" #: views/lists/fields/fields.hbs:12 views/lists/forms/forms.hbs:9 #: views/lists/view.hbs:33 msgid "No data available in table" -msgstr "" +msgstr "Nincs adat a táblázatban." #: views/campaigns/edit.hbs:34 views/campaigns/upload-attachment.hbs:4 msgid "Add Attachment" -msgstr "" +msgstr "Csatolmány hozzáadása" #: views/campaigns/opened.hbs:3 views/campaigns/opened.hbs:4 msgid "Opened info" -msgstr "" +msgstr "Megnyitásokról információ" #: views/campaigns/opened.hbs:6 msgid "Subscribers who opened this message:" -msgstr "" +msgstr "Feliratkozók, akik megnyitották ezt az üzenetet:" #: views/campaigns/opened.hbs:12 msgid "First open" -msgstr "" +msgstr "Első megnyitás" #: views/campaigns/opened.hbs:13 msgid "Opened count" -msgstr "" +msgstr "Megnyitások száma" #: views/campaigns/unsubscribed.hbs:3 views/campaigns/unsubscribed.hbs:4 msgid "Unsubscribed info" -msgstr "" +msgstr "Leiratkozásokról információ:" #: views/campaigns/unsubscribed.hbs:6 msgid "Subscribers who unsubscribed:" -msgstr "" +msgstr "Feliratkozók, akik leiratkoztak:" #: views/campaigns/unsubscribed.hbs:11 views/campaigns/view.hbs:28 #: views/lists/subscription/import.hbs:13 routes/lists.js:206 @@ -572,11 +572,11 @@ msgstr "Feltöltés" #: views/campaigns/view.hbs:4 msgid "Overview" -msgstr "" +msgstr "Áttekintés" #: views/campaigns/view.hbs:5 msgid "Links" -msgstr "" +msgstr "Linkek" #: views/campaigns/view.hbs:7 msgid "Feed URL" @@ -596,19 +596,19 @@ msgstr "" #: views/campaigns/view.hbs:11 msgid "RSS status" -msgstr "" +msgstr "RSS státusz" #: views/campaigns/view.hbs:16 msgid "Preview campaign as" -msgstr "" +msgstr "Kampány előnezete, mint" #: views/campaigns/view.hbs:17 msgid "Add new test user" -msgstr "" +msgstr "Teszt felhasználó hozzáadása" #: views/campaigns/view.hbs:18 msgid "No test users yet, create one here" -msgstr "" +msgstr "Nincs még teszt felhasználó, hozzon létre egyet itt" #: views/campaigns/view.hbs:19 msgid "Go" @@ -616,19 +616,21 @@ msgstr "" #: views/campaigns/view.hbs:20 lib/models/triggers.js:26 msgid "Delivered" -msgstr "" +msgstr "Készbesítve" #: views/campaigns/view.hbs:21 msgid "List subscribers who received this message" -msgstr "" +msgstr "Azon felhasználók listázása, akik megkapták ezt az üzenetet" #: views/campaigns/view.hbs:22 msgid "Blacklisted" -msgstr "" +msgstr "Feketelistán szereplők" #: views/campaigns/view.hbs:23 msgid "List subscribers who blacklisted by global blacklist" msgstr "" +"Azon felhasználók listázása, akik feketelistára kerültek, mert a globális " +"feketelistán szerepeltek" #: views/campaigns/view.hbs:24 routes/lists.js:206 msgid "Bounced" @@ -897,7 +899,7 @@ msgstr "" #: views/index.hbs:14 msgid "GPG Encryption" -msgstr "" +msgstr "GPG titkosítás" #: views/index.hbs:15 msgid "" @@ -990,7 +992,7 @@ msgstr "Forráskód a GitHub-on" #: views/layout.hbs:13 msgid "Subscribe to Our Newsletter" -msgstr "" +msgstr "Feliratkozás hírlevelünkre" #: views/lists/create.hbs:2 views/lists/edit.hbs:2 #: views/lists/fields/create.hbs:2 views/lists/fields/edit.hbs:2 @@ -1083,16 +1085,16 @@ msgstr "Mező létrehozása" #: views/lists/fields/create.hbs:5 views/lists/fields/fields.hbs:4 msgid "Create Custom Field" -msgstr "" +msgstr "Egyedi mező létrehozása" #: views/lists/fields/create.hbs:6 views/lists/fields/create.hbs:7 #: views/lists/fields/edit.hbs:7 views/lists/fields/edit.hbs:8 msgid "Field Name" -msgstr "" +msgstr "Mező neve" #: views/lists/fields/create.hbs:8 views/lists/fields/edit.hbs:9 msgid "Field Type" -msgstr "" +msgstr "Mező típusa" #: views/lists/fields/create.hbs:9 views/lists/fields/edit.hbs:10 #: lib/models/fields.js:17 @@ -1355,7 +1357,7 @@ msgstr "Mezők" #: views/lists/forms/edit.hbs:27 msgid "Form Fields" -msgstr "" +msgstr "Űrlap mezők" #: views/lists/forms/edit.hbs:28 msgid "Fields hidden on subscription page:" @@ -1375,7 +1377,7 @@ msgstr "" #: views/lists/forms/edit.hbs:32 msgid "Delete Form" -msgstr "" +msgstr "Űrlap törlése" #: views/lists/forms/forms.hbs:10 msgid "The default form for this list is:" @@ -1592,11 +1594,13 @@ msgid "" "Insert a GPG public key that will be used to encrypt messages sent this " "subscriber" msgstr "" +"Adjon meg egy GPG publikus kulcsot, amivel az üzenetek titkosítva lesznek " +"küldéskor" #: views/lists/subscription/add.hbs:11 views/lists/subscription/edit.hbs:12 #: views/lists/subscription/import-preview.hbs:9 msgid "Timezone" -msgstr "" +msgstr "Időzóna" #: views/lists/subscription/add.hbs:13 views/lists/subscription/edit.hbs:13 msgid "Test user?" @@ -1616,31 +1620,31 @@ msgstr "" #: views/lists/subscription/edit.hbs:3 views/lists/subscription/edit.hbs:4 msgid "Edit subscriber" -msgstr "" +msgstr "Feliratkozó szerkesztése" #: views/lists/subscription/edit.hbs:5 #: views/lists/subscription/import-failed.hbs:5 msgid "Back to list" -msgstr "" +msgstr "Vissza a listához" #: views/lists/subscription/edit.hbs:6 #: views/lists/subscription/import-preview.hbs:6 #: views/subscription/partials/subscription-unsubscribe-form.hbs:1 #: lib/helpers.js:42 lib/models/segments.js:11 msgid "Email address" -msgstr "" +msgstr "Email cím" #: views/lists/subscription/edit.hbs:17 msgid "Delete Subscription" -msgstr "" +msgstr "Feliratkozás törlése" #: views/lists/subscription/import-failed.hbs:3 msgid "Import status" -msgstr "" +msgstr "Importálás státusza" #: views/lists/subscription/import-failed.hbs:4 msgid "Failed addresses" -msgstr "" +msgstr "Hibás címek" #: views/lists/subscription/import-failed.hbs:6 msgid "" @@ -1655,13 +1659,13 @@ msgstr "" #: views/lists/subscription/import-failed.hbs:9 msgid "Fail reason" -msgstr "" +msgstr "Hiba oka" #: views/lists/subscription/import-preview.hbs:3 #: views/lists/subscription/import-preview.hbs:4 #: views/lists/subscription/import.hbs:3 views/lists/subscription/import.hbs:4 msgid "Import subscribers" -msgstr "" +msgstr "Feliratkozók imprtálása" #: views/lists/subscription/import-preview.hbs:10 views/users/api.hbs:21 #: views/users/api.hbs:36 views/users/api.hbs:44 views/users/api.hbs:52 @@ -1669,23 +1673,23 @@ msgstr "" #: views/users/api.hbs:91 views/users/api.hbs:96 views/users/api.hbs:101 #: views/users/api.hbs:106 msgid "Example" -msgstr "" +msgstr "Példa" #: views/lists/subscription/import-preview.hbs:11 msgid "Start import" -msgstr "" +msgstr "Importálás megkezdése" #: views/lists/subscription/import.hbs:5 msgid "CSV File" -msgstr "" +msgstr "CSV file" #: views/lists/subscription/import.hbs:6 msgid "The first line must contain column headings" -msgstr "" +msgstr "Az első sor fejlécet kell, hogy tartalmazzon" #: views/lists/subscription/import.hbs:7 msgid "CSV delimiter" -msgstr "" +msgstr "CSV elválasztó" #: views/lists/subscription/import.hbs:8 msgid "Categorize the imported subscribers as" @@ -1752,7 +1756,7 @@ msgstr "" #: views/lists/view.hbs:16 msgid "Filter" -msgstr "" +msgstr "Szűrő" #: views/lists/view.hbs:17 msgid "Subscriptions" @@ -1764,15 +1768,15 @@ msgstr "" #: views/lists/view.hbs:25 routes/campaigns.js:255 routes/lists.js:300 msgid "Finished" -msgstr "" +msgstr "Befejezve" #: views/lists/view.hbs:27 msgid "Added" -msgstr "" +msgstr "Hozzáadva" #: views/lists/view.hbs:28 msgid "Updated" -msgstr "" +msgstr "Frissítve" #: views/lists/view.hbs:29 msgid "Failed" @@ -1785,7 +1789,7 @@ msgstr "" #: views/lists/view.hbs:32 msgid "Restart" -msgstr "" +msgstr "Újrakezdés" #: views/mosaico/editor.hbs:1 views/partials/merge-tag-reference.hbs:1 msgid "Merge tag reference" @@ -1834,7 +1838,7 @@ msgstr "GrapeJS megnyitása" #: views/partials/html-preview.hbs:1 msgid "Toggle HTML preview" -msgstr "" +msgstr "HTML előnézet átváltása" #: views/partials/html-to-text.hbs:1 msgid "" @@ -1892,20 +1896,20 @@ msgstr "Sablon létrehozása" #: views/report-templates/create.hbs:5 routes/report-templates.js:231 msgid "Create Report Template" -msgstr "" +msgstr "Jelentés sablon létrehozása" #: views/report-templates/edit.hbs:4 views/templates/edit.hbs:3 #: views/templates/edit.hbs:4 msgid "Edit Template" -msgstr "" +msgstr "Sablon szerkesztése" #: views/report-templates/edit.hbs:5 routes/report-templates.js:262 msgid "Edit Report Template" -msgstr "" +msgstr "Jelentés sablon szerkesztése" #: views/report-templates/edit.hbs:6 views/templates/edit.hbs:12 msgid "Delete Template" -msgstr "" +msgstr "Sablon törlése" #: views/report-templates/edit.hbs:7 msgid "Update and Stay" @@ -1917,7 +1921,7 @@ msgstr "" #: views/report-templates/partials/report-template-fields.hbs:2 msgid "Template Name" -msgstr "" +msgstr "Sablon neve" #: views/report-templates/partials/report-template-fields.hbs:6 msgid "User selectable fields" @@ -1945,31 +1949,31 @@ msgstr "" #: views/report-templates/report-templates.hbs:8 msgid "Export List as CSV" -msgstr "" +msgstr "Lista exportálása CSV-be" #: views/report-templates/report-templates.hbs:9 views/reports/reports.hbs:4 #: routes/report-templates.js:29 msgid "Report Templates" -msgstr "" +msgstr "Jelentés sablonok" #: views/reports/create-select-template.hbs:3 #: views/reports/create-select-template.hbs:4 views/reports/create.hbs:3 #: views/reports/create.hbs:4 views/reports/create.hbs:5 #: views/reports/reports.hbs:3 routes/reports.js:81 msgid "Create Report" -msgstr "" +msgstr "Jelentés létrehozása" #: views/reports/edit.hbs:3 views/reports/edit.hbs:4 routes/reports.js:151 msgid "Edit Report" -msgstr "" +msgstr "Jelentés szerkesztése" #: views/reports/edit.hbs:5 msgid "Delete Report" -msgstr "" +msgstr "Jelentés törlése" #: views/reports/partials/report-fields.hbs:2 msgid "Report Name" -msgstr "" +msgstr "Jelentés neve" #: views/reports/partials/report-fields.hbs:8 #: views/reports/partials/report-fields.hbs:11 @@ -1980,19 +1984,19 @@ msgstr "" #: views/reports/partials/report-select-template.hbs:1 msgid "Report Template" -msgstr "" +msgstr "Jelentés sablon" #: views/settings.hbs:5 msgid "Service Address (URL)" -msgstr "" +msgstr "Szolgáltatás címe (URL)" #: views/settings.hbs:6 msgid "Enter the URL this service can be reached from" -msgstr "" +msgstr "Adja meg az URL-t, amiről ez a szolgáltatás elérhető" #: views/settings.hbs:7 msgid "Admin Email" -msgstr "" +msgstr "Admin email" #: views/settings.hbs:8 msgid "" @@ -2020,11 +2024,11 @@ msgstr "" #: views/settings.hbs:13 msgid "Tracking ID" -msgstr "" +msgstr "Követő ID" #: views/settings.hbs:14 msgid "Enter Google Analytics tracking code" -msgstr "" +msgstr "Google Analytics követőkód megadása" #: views/settings.hbs:15 msgid "Frontpage shout out" @@ -2040,11 +2044,11 @@ msgstr "" #: views/settings.hbs:18 msgid "Sender name" -msgstr "" +msgstr "Küldő neve" #: views/settings.hbs:19 msgid "Sender name, eg. My Awesome Company Ltd." -msgstr "" +msgstr "Küldő neve, pl.: Éncégem Kft." #: views/settings.hbs:20 msgid "Default address" @@ -2085,15 +2089,15 @@ msgstr "" #: views/settings.hbs:32 msgid "SMTP" -msgstr "" +msgstr "SMTP" #: views/settings.hbs:33 msgid "AWS SES" -msgstr "" +msgstr "AWS SES" #: views/settings.hbs:34 msgid "Use SMTP for sending mail" -msgstr "" +msgstr "SMTP használata levélküldéshez" #: views/settings.hbs:35 msgid "Hostname" @@ -2101,7 +2105,7 @@ msgstr "" #: views/settings.hbs:36 msgid "Port" -msgstr "" +msgstr "Port" #: views/settings.hbs:37 msgid "Port, eg. 465. Autodetected if left blank" @@ -2122,7 +2126,7 @@ msgstr "Felhasználónév" #: views/settings.hbs:41 msgid "Username, eg. myaccount@example.com" -msgstr "" +msgstr "Felhasználónév, pl.: myaccount@example.com" #: views/settings.hbs:42 views/settings.hbs:43 views/users/login.hbs:6 #: views/users/login.hbs:7 @@ -2131,7 +2135,7 @@ msgstr "Jelszó" #: views/settings.hbs:44 msgid "Use SES API for sending mail" -msgstr "" +msgstr "SES API használata levélküldéshez" #: views/settings.hbs:45 msgid "Access Key" @@ -2151,7 +2155,7 @@ msgstr "" #: views/settings.hbs:49 msgid "Region" -msgstr "" +msgstr "Régió" #: views/settings.hbs:50 msgid "Checking" @@ -2167,7 +2171,7 @@ msgstr "" #: views/settings.hbs:53 msgid "Log SMTP transactions" -msgstr "" +msgstr "SMTP tranzakciók naplózása" #: views/settings.hbs:54 msgid "Allow self-signed certificates" @@ -2271,7 +2275,7 @@ msgstr "" #: views/settings.hbs:73 msgid "GPG Signing" -msgstr "" +msgstr "GPG aláírás" #: views/settings.hbs:74 msgid "" @@ -2301,7 +2305,7 @@ msgstr "" #: views/settings.hbs:79 msgid "GPG Private Key" -msgstr "" +msgstr "GPG privát kulcs" #: views/settings.hbs:81 msgid "" @@ -2754,13 +2758,13 @@ msgstr "" #: views/triggers/create.hbs:16 views/triggers/create.hbs:21 #: views/triggers/edit.hbs:18 views/triggers/edit.hbs:23 msgid "Event" -msgstr "" +msgstr "Esemény" #: views/triggers/create.hbs:18 views/triggers/create.hbs:19 #: views/triggers/create.hbs:25 views/triggers/edit.hbs:20 #: views/triggers/edit.hbs:21 views/triggers/edit.hbs:27 msgid "Campaign" -msgstr "" +msgstr "Kampány" #: views/triggers/create.hbs:23 views/triggers/edit.hbs:25 msgid "Trigger action" From f89ba5a5dd5c58df31c05644550d83bb02cfca43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Dura-Kov=C3=A1cs?= Date: Sat, 8 Sep 2018 15:52:46 +0200 Subject: [PATCH 456/483] ignore more config files --- .gitignore | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 2437b541..dbd42224 100644 --- a/.gitignore +++ b/.gitignore @@ -5,9 +5,9 @@ node_modules npm-debug.log package-lock.json .DS_Store -config/development.* -config/production.* -config/test.* +config/development* +config/production* +config/test* workers/reports/config/development.* workers/reports/config/production.* workers/reports/config/test.* From 6bdf074c01727408cb2dd6f01df124326deb1eee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Kov=C3=A1cs?= Date: Mon, 10 Sep 2018 16:02:57 +0200 Subject: [PATCH 457/483] translate more strings --- languages/hu_HU.mo | Bin 21551 -> 25289 bytes languages/hu_HU.po | 108 +++++++++++++++++++++++---------------------- 2 files changed, 55 insertions(+), 53 deletions(-) diff --git a/languages/hu_HU.mo b/languages/hu_HU.mo index 6c923343f0e907305b2ed3b283b9177114f9198c..524af8aaa86b40e76e9bd9eacddb96882db346e8 100644 GIT binary patch delta 10340 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%0AEpzi41S2ZVb6=ai4Ve#)bnr_=3{s6Z}};tCV&Gt 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
    mAr~&puZQ2p2 zflfy~*Y;4*gSVnG@c}9m2Tl7a)B}D*A1p@=;4joB^J(X#vMTDj7*kI}b(Dw7Ko3+u zgHZj9MJ=)C2?~J}Y}5@aP$Pd6b%Phx(MPByIgEN8FPQUH+B+YjDAar23e{nER0ji5 z1AEFi5A~KT!vMYiZ&0XBgBK(45Gs{FU=;dxa5jw_HIT-r>#|WP>}J}>8KX-kghx=BIf)@y zjvAP6XXkf57+X>g!^+qRmEk_<#z#&2V)W<%uTap)HyS@g-B5FQ))h;b1J2drlT5t@Y7^$5-s|2t1Seo9o`bf0OcSL^|;Y@i37_xXt-m7)C@A7ifP+`5#C@ z$0ni%v6a|HOeP*8l8G4efJKy-5oZV;^=bDt=f0u-HKF}7l9)%_CSD?r5jw6D(L@}v zlX#B)D~=7u0~pE!Kf?r~FR_*wL1<(BLVQU?m`*b(>%VUE(M$9q))0q?SBSgMUrM=v z(4mbyoOp}ygmZHch4sX}ME#e9kxfJdHYDaH#k@fxq_?%ZU`C5jS_jD6E2akAIuOQ#g!BGJ}{yxgOyVcP28Ibs}9jc7_dN{k|c2_3~mUGA%1 zQR6=-aIYy(MVp8u8W1srN1xH&L<^z|kw@G;{-)4`hs6`Al-m>kAWDgbL=n-JI7#dy z?j9f9E&QJkntFh-O!n2j^N}MA8GAEL7HgS#E zPIM$H5uX!(5~qm-?rn#4iQ1H3)cRL59rvd(gmO*%iO>;6JYG@a2gh8e>Os?X1ruo> zj~^4OiF=PXsJv?$nqw>x%=Lq@DiNpkkEh@!77#kd5Iu+^*KC+Qvst>gR%W8h?w)nb9*~{nU6?)2KPWBRou1Vqv#Hm= zWj&Xjp5wNA=QOuVbLQK#a&0>!Z=QWTFU}6g?`)6AUuQ3Dy~*xgkl=l$AjM@LYtzl{ z)^?PAxowE|OxsYG{b##(?62D=`s`oi_3sej^5zz<_O)+y&aek{S#3A(`i}SSt}R^l z<_KqGY_Vpg|c52V3ygPgD_OTcDZfalbJ<_LSjJ-Q2+@9Sh*&E)s Vzso!4p)i+yvtO<^um3at{{?%s8here." msgstr "" +"Egyedi űrlap ehhez a listához. Itt " +"hozhat létre új űrlapot." #: views/lists/edit.hbs:19 msgid "Unsubscribe Header" -msgstr "" +msgstr "Leiratkozás fejléc" #: views/lists/edit.hbs:20 msgid "Do not send List-Unsubscribe headers" -msgstr "" +msgstr "Leiratkozás fejléc küldésének letiltása" #: views/lists/edit.hbs:21 msgid "Delete List" @@ -1176,7 +1178,7 @@ msgstr "" #: views/lists/fields/create.hbs:26 views/lists/fields/edit.hbs:27 msgid "Group" -msgstr "" +msgstr "Csoport" #: views/lists/fields/create.hbs:28 views/lists/fields/edit.hbs:29 msgid "Required for group options" @@ -1445,13 +1447,13 @@ msgstr "" #: views/lists/segments/rule-create.hbs:5 views/lists/segments/rule-edit.hbs:5 #: views/lists/segments/view.hbs:4 msgid "Create Rule" -msgstr "" +msgstr "Szabály létrehozása" #: views/lists/segments/rule-configure.hbs:6 #: views/lists/segments/rule-create.hbs:6 views/lists/segments/rule-edit.hbs:6 #: views/lists/segments/view.hbs:10 msgid "Rule" -msgstr "" +msgstr "Szabály" #: views/lists/segments/rule-configure.hbs:7 #: views/lists/segments/rule-configure.hbs:8 @@ -1464,7 +1466,7 @@ msgstr "" #: views/lists/segments/rule-edit.hbs:29 views/lists/segments/rule-edit.hbs:34 #: views/lists/segments/view.hbs:11 msgid "Value" -msgstr "" +msgstr "Érték" #: views/lists/segments/rule-configure.hbs:9 #: views/lists/segments/rule-edit.hbs:9 @@ -1479,7 +1481,7 @@ msgstr "" #: views/lists/segments/rule-edit.hbs:11 views/lists/segments/rule-edit.hbs:16 #: views/lists/segments/rule-edit.hbs:30 msgid "Use exact match" -msgstr "" +msgstr "Pontos találat használata" #: views/lists/segments/rule-configure.hbs:12 #: views/lists/segments/rule-configure.hbs:15 @@ -1487,12 +1489,12 @@ msgstr "" #: views/lists/segments/rule-edit.hbs:12 views/lists/segments/rule-edit.hbs:17 #: views/lists/segments/rule-edit.hbs:31 msgid "Use range match" -msgstr "" +msgstr "Tartomány találat használata" #: views/lists/segments/rule-configure.hbs:16 #: views/lists/segments/rule-edit.hbs:20 msgid "Use relative range match" -msgstr "" +msgstr "Relatív tartomány találat használata" #: views/lists/segments/rule-configure.hbs:17 #: views/lists/segments/rule-configure.hbs:28 @@ -1729,11 +1731,11 @@ msgstr "" #: views/lists/view.hbs:3 msgid "Subscription Form" -msgstr "" +msgstr "Feliratkozós űrlap" #: views/lists/view.hbs:4 msgid "List Actions" -msgstr "" +msgstr "Lista műveletek" #: views/lists/view.hbs:9 views/triggers/create-select.hbs:3 #: views/triggers/create-select.hbs:4 views/triggers/create.hbs:3 @@ -1744,11 +1746,11 @@ msgstr "" #: views/lists/view.hbs:10 msgid "Add Subscriber" -msgstr "" +msgstr "Feliratkozó hozzáadása" #: views/lists/view.hbs:11 msgid "Import Subscribers" -msgstr "" +msgstr "Feliratkozók importálása" #: views/lists/view.hbs:15 msgid "Create New Segment" @@ -1756,7 +1758,7 @@ msgstr "" #: views/lists/view.hbs:16 msgid "Filter" -msgstr "Szűrő" +msgstr "Szűrés" #: views/lists/view.hbs:17 msgid "Subscriptions" @@ -1941,7 +1943,7 @@ msgstr "" #: views/report-templates/report-templates.hbs:6 msgid "All Subscribers" -msgstr "" +msgstr "Összes feliratkozó" #: views/report-templates/report-templates.hbs:7 msgid "Grouped Subscribers" @@ -2113,11 +2115,11 @@ msgstr "" #: views/settings.hbs:38 msgid "Encryption" -msgstr "" +msgstr "Titkosítás" #: views/settings.hbs:39 msgid "Disable SMTP authentication" -msgstr "" +msgstr "SMTP azonosítás letiltása" #: views/settings.hbs:40 views/users/forgot.hbs:9 views/users/login.hbs:4 #: views/users/login.hbs:5 @@ -3609,59 +3611,59 @@ msgstr "" #: lib/models/users.js:371 msgid "Invalid new password" -msgstr "" +msgstr "Érvénytelen új jelszó" #: lib/passport.js:49 msgid "%s logged out" -msgstr "" +msgstr "%s kijelentkezett" #: lib/passport.js:64 msgid "Failed to authenticate user" -msgstr "" +msgstr "Felhasználó azonosítása nem sikerült" #: lib/passport.js:80 msgid "Logged in as %s" -msgstr "" +msgstr "Bejelenetezve, mint %s" #: lib/passport.js:180 msgid "Incorrect username or password" -msgstr "" +msgstr "Helytelen felhasználónév vagy jelszó" #: lib/subscription-mail-helpers.js:28 msgid "%s: Subscription Confirmed" -msgstr "" +msgstr "%s: Feliratkozás megerősítve" #: lib/subscription-mail-helpers.js:39 msgid "%s: Email Address Already Registered" -msgstr "" +msgstr "%s: Emailcím már regisztrálva van" #: lib/subscription-mail-helpers.js:49 msgid "%s: Please Confirm Email Change in Subscription" -msgstr "" +msgstr "%s: Kérjük erősítse meg email címének megváltoztatását" #: lib/subscription-mail-helpers.js:59 msgid "%s: Please Confirm Subscription" -msgstr "" +msgstr "%s: Kérjük erősítse meg a feliratkozást" #: lib/subscription-mail-helpers.js:69 msgid "%s: Please Confirm Unsubscription" -msgstr "" +msgstr "%s: Kérjük erősítse meg a leiratkozást" #: lib/subscription-mail-helpers.js:76 msgid "%s: Unsubscription Confirmed" -msgstr "" +msgstr "%s: Leiratkozás megerősítve" #: lib/tools.js:154 msgid "Blocked email address \"%s\"" -msgstr "" +msgstr "Blokkolt email cím \"%s\"" #: lib/tools.js:163 msgid "Invalid email address \"%s\"." -msgstr "" +msgstr "Érvénytelen email cím \"%s\"" #: lib/tools.js:166 msgid "MX record not found for domain" -msgstr "" +msgstr "MX rekord nem található a domain-hez" #: lib/tools.js:169 msgid "Address domain not found" @@ -3673,7 +3675,7 @@ msgstr "" #: routes/archive.js:31 routes/archive.js:43 routes/archive.js:55 app.js:230 msgid "Not Found" -msgstr "" +msgstr "Nem található" #: routes/archive.js:121 services/sender.js:454 msgid "Received status code %s from %s" @@ -3681,7 +3683,7 @@ msgstr "" #: routes/archive.js:153 routes/campaigns.js:894 msgid "Attachment not found" -msgstr "" +msgstr "Csatolmány nem található" #: routes/blacklist.js:13 routes/campaigns.js:26 routes/editorapi.js:32 #: routes/fields.js:13 routes/forms.js:16 routes/grapejs.js:15 @@ -3710,11 +3712,11 @@ msgstr "" #: routes/campaigns.js:227 routes/campaigns.js:744 msgid "Campaign deleted" -msgstr "" +msgstr "Kampány törölve" #: routes/campaigns.js:229 routes/campaigns.js:746 msgid "Could not delete specified campaign" -msgstr "" +msgstr "Kampány törlése nem sikerült" #: routes/campaigns.js:248 msgid "Idling" @@ -3722,7 +3724,7 @@ msgstr "" #: routes/campaigns.js:251 msgid "Scheduled" -msgstr "" +msgstr "Időzítve" #: routes/campaigns.js:257 msgid "Paused" @@ -3730,11 +3732,11 @@ msgstr "" #: routes/campaigns.js:259 msgid "Inactive" -msgstr "" +msgstr "Inaktív" #: routes/campaigns.js:261 msgid "Active" -msgstr "" +msgstr "Aktív" #: routes/campaigns.js:263 msgid "Other" @@ -4361,11 +4363,11 @@ msgstr "" #: routes/subscription.js:682 routes/subscription.js:760 #: routes/subscription.js:897 msgid "Selected list not found" -msgstr "" +msgstr "Lista nem található" #: routes/subscription.js:93 msgid "Could not save subscription" -msgstr "" +msgstr "Feliratkozás mentése nem sikerült" #: routes/subscription.js:118 msgid "Subscriber info corrupted or missing" @@ -4394,7 +4396,7 @@ msgstr "Publikus kulcs nincs megadva." #: routes/templates.js:84 msgid "Could not create template" -msgstr "" +msgstr "Sablon létrehozása nem sikerült" #: routes/templates.js:87 msgid "Template created" @@ -4402,7 +4404,7 @@ msgstr "Sablon létrehozva." #: routes/templates.js:126 msgid "Template settings updated" -msgstr "" +msgstr "Sablon beállításai frissítve" #: routes/templates.js:128 msgid "Template settings not updated" @@ -4512,7 +4514,7 @@ msgstr "RSS bejegyzés %s" #: services/importer.js:249 msgid "Could not access import file" -msgstr "" +msgstr "Import file nem érhető el" #: services/triggers.js:51 msgid "Unknown trigger type %s" From ce10388f4f41c8c531df2a7007fa3da318150b93 Mon Sep 17 00:00:00 2001 From: Ganesh Krishnan Date: Thu, 18 Oct 2018 18:49:01 -0400 Subject: [PATCH 458/483] path of conf files these conf files have moved from inside of docs to setup folder. --- docs/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 39db88e8..c9f5d4ea 100644 --- a/docs/README.md +++ b/docs/README.md @@ -221,11 +221,11 @@ Mailtrain uses [node-config](https://github.com/lorenwest/node-config) for confi ### Running Behind Nginx Proxy -Edit [mailtrain.nginx](setup/mailtrain-nginx.conf) (update `server_name` directive) and copy it to `/etc/nginx/sites-enabled` +Edit [mailtrain.nginx](../setup/mailtrain-nginx.conf) (update `server_name` directive) and copy it to `/etc/nginx/sites-enabled` ### Running as an Upstart Service in Ubuntu 14.04 -Edit [mailtrain.conf](setup/mailtrain.conf) (update application folder) and copy it to `/etc/init` +Edit [mailtrain.conf](../setup/mailtrain.conf) (update application folder) and copy it to `/etc/init` ## Subscription Widget From 5394ada6ad0fb911fff918486f1ba83dc1d53306 Mon Sep 17 00:00:00 2001 From: Marcin Date: Mon, 22 Oct 2018 14:14:31 +0200 Subject: [PATCH 459/483] Polish translation --- pl_PL.mo | Bin 0 -> 71888 bytes pl_PL.po | 3737 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 3737 insertions(+) create mode 100644 pl_PL.mo create mode 100644 pl_PL.po diff --git a/pl_PL.mo b/pl_PL.mo new file mode 100644 index 0000000000000000000000000000000000000000..7a58bc3f768113d4d50f16bf253e895acaa7e8cb GIT binary patch literal 71888 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�*r}1s2 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 && n%10<=4 && (n%100<12 " +"|| n%100>14) ? 1 : 2);\n" +"Last-Translator: \n" +"Language: pl_PL\n" + +#: views/archive/layout.hbs:1 views/layout.hbs:1 +#: views/subscription/layout.hbs:1 routes/index.js:11 +msgid "Self hosted email newsletter app" +msgstr "Samodzielnie hostowana aplikacja e-mail newsletter" + +#: views/campaigns/bounced.hbs:1 views/campaigns/campaigns.hbs:1 +#: views/campaigns/clicked.hbs:1 views/campaigns/complained.hbs:1 +#: views/campaigns/create-rss.hbs:1 views/campaigns/create-triggered.hbs:1 +#: views/campaigns/create.hbs:1 views/campaigns/delivered.hbs:1 +#: views/campaigns/edit-rss.hbs:1 views/campaigns/edit-triggered.hbs:1 +#: views/campaigns/edit.hbs:1 views/campaigns/opened.hbs:1 +#: views/campaigns/unsubscribed.hbs:1 views/campaigns/upload-attachment.hbs:1 +#: views/campaigns/view.hbs:1 views/lists/create.hbs:1 views/lists/edit.hbs:1 +#: views/lists/fields/create.hbs:1 views/lists/fields/edit.hbs:1 +#: views/lists/fields/fields.hbs:1 views/lists/lists.hbs:1 +#: views/lists/segments/create.hbs:1 views/lists/segments/edit.hbs:1 +#: views/lists/segments/rule-configure.hbs:1 +#: views/lists/segments/rule-create.hbs:1 views/lists/segments/rule-edit.hbs:1 +#: views/lists/segments/segments.hbs:1 views/lists/segments/view.hbs:1 +#: views/lists/subscription/add.hbs:1 views/lists/subscription/edit.hbs:1 +#: views/lists/subscription/import-failed.hbs:1 +#: views/lists/subscription/import-preview.hbs:1 +#: views/lists/subscription/import.hbs:1 views/lists/view.hbs:1 +#: views/settings.hbs:1 views/templates/create.hbs:1 +#: views/templates/edit.hbs:1 views/templates/templates.hbs:1 +#: views/triggers/create-select.hbs:1 views/triggers/create.hbs:1 +#: views/triggers/edit.hbs:1 views/triggers/triggered.hbs:1 +#: views/triggers/triggers.hbs:1 views/users/account.hbs:1 +#: views/users/api.hbs:1 views/users/forgot.hbs:1 views/users/login.hbs:1 +#: views/users/reset.hbs:1 app.js:169 +msgid "Home" +msgstr "Strona główna" + +#: views/campaigns/bounced.hbs:2 views/campaigns/campaigns.hbs:2 +#: views/campaigns/campaigns.hbs:7 views/campaigns/clicked.hbs:2 +#: views/campaigns/complained.hbs:2 views/campaigns/create-rss.hbs:2 +#: views/campaigns/create-triggered.hbs:2 views/campaigns/create.hbs:2 +#: views/campaigns/delivered.hbs:2 views/campaigns/edit-rss.hbs:2 +#: views/campaigns/edit-triggered.hbs:2 views/campaigns/edit.hbs:2 +#: views/campaigns/opened.hbs:2 views/campaigns/unsubscribed.hbs:2 +#: views/campaigns/upload-attachment.hbs:2 views/campaigns/view.hbs:2 +#: lib/tools.js:119 routes/campaigns.js:35 +msgid "Campaigns" +msgstr "Kampanie" + +#: views/campaigns/bounced.hbs:3 views/campaigns/bounced.hbs:4 +msgid "Bounced info" +msgstr "Informacje o odrzuconych/odbiciach" + +#: views/campaigns/bounced.hbs:5 views/campaigns/clicked.hbs:5 +#: views/campaigns/complained.hbs:5 views/campaigns/delivered.hbs:5 +#: views/campaigns/edit-rss.hbs:5 views/campaigns/edit-triggered.hbs:5 +#: views/campaigns/edit.hbs:5 views/campaigns/opened.hbs:5 +#: views/campaigns/unsubscribed.hbs:5 views/campaigns/upload-attachment.hbs:6 +msgid "View campaign" +msgstr "Zobacz kampanię" + +#: views/campaigns/bounced.hbs:6 +msgid "Subscribers who bounced and were unsubscribed:" +msgstr "Subskrybenci, którzy odbili wiadomość i zrezygnowali z subskrypcji:" + +#: views/campaigns/bounced.hbs:7 views/campaigns/clicked.hbs:13 +#: views/campaigns/complained.hbs:7 views/campaigns/delivered.hbs:7 +#: views/campaigns/opened.hbs:7 views/campaigns/unsubscribed.hbs:7 +#: views/lists/subscription/import-failed.hbs:9 views/lists/view.hbs:18 +#: views/triggers/triggered.hbs:6 +msgid "Address" +msgstr "Adres" + +#: views/campaigns/bounced.hbs:8 views/campaigns/clicked.hbs:14 +#: views/campaigns/complained.hbs:8 views/campaigns/delivered.hbs:8 +#: views/campaigns/opened.hbs:8 views/campaigns/unsubscribed.hbs:8 +#: views/lists/subscription/add.hbs:6 views/lists/subscription/edit.hbs:7 +#: views/lists/subscription/import-preview.hbs:7 views/lists/view.hbs:19 +#: views/subscription/manage.hbs:4 views/subscription/subscribe.hbs:4 +#: views/triggers/triggered.hbs:7 +msgid "First Name" +msgstr "Imię" + +#: views/campaigns/bounced.hbs:9 views/campaigns/clicked.hbs:15 +#: views/campaigns/complained.hbs:9 views/campaigns/delivered.hbs:9 +#: views/campaigns/opened.hbs:9 views/campaigns/unsubscribed.hbs:9 +#: views/lists/subscription/add.hbs:7 views/lists/subscription/edit.hbs:8 +#: views/lists/subscription/import-preview.hbs:8 views/lists/view.hbs:20 +#: views/subscription/manage.hbs:5 views/subscription/subscribe.hbs:5 +#: views/triggers/triggered.hbs:8 +msgid "Last Name" +msgstr "Nazwisko" + +#: views/campaigns/bounced.hbs:10 views/campaigns/complained.hbs:10 +#: views/campaigns/delivered.hbs:10 views/campaigns/unsubscribed.hbs:10 +msgid "SMTP response" +msgstr "Odpowiedź SMTP" + +#: views/campaigns/bounced.hbs:11 +msgid "Bounce time" +msgstr "Czas odbicia" + +#: views/campaigns/campaigns.hbs:3 views/campaigns/create-triggered.hbs:24 +#: views/campaigns/create.hbs:3 views/campaigns/create.hbs:4 +#: views/campaigns/create.hbs:27 +msgid "Create Campaign" +msgstr "Utwórz Kampanię" + +#: views/campaigns/campaigns.hbs:4 +msgid "Regular Campaign" +msgstr "Zwykła kampania" + +#: views/campaigns/campaigns.hbs:5 +msgid "RSS Campaign" +msgstr "Kampania RSS" + +#: views/campaigns/campaigns.hbs:6 +msgid "Triggered Campaign" +msgstr "Wywołana kampania" + +#: views/campaigns/campaigns.hbs:8 views/campaigns/create-rss.hbs:6 +#: views/campaigns/create-triggered.hbs:5 views/campaigns/create.hbs:5 +#: views/campaigns/edit-rss.hbs:8 views/campaigns/edit-triggered.hbs:9 +#: views/campaigns/edit.hbs:10 views/campaigns/view.hbs:71 +#: views/lists/create.hbs:5 views/lists/edit.hbs:6 +#: views/lists/fields/fields.hbs:6 views/lists/lists.hbs:5 +#: views/lists/segments/segments.hbs:6 views/templates/templates.hbs:5 +#: views/triggers/triggers.hbs:5 +msgid "Name" +msgstr "Nazwa" + +#: views/campaigns/campaigns.hbs:9 views/campaigns/create-rss.hbs:8 +#: views/campaigns/create-triggered.hbs:7 views/campaigns/create.hbs:7 +#: views/campaigns/edit-rss.hbs:10 views/campaigns/edit-triggered.hbs:11 +#: views/campaigns/edit.hbs:12 views/campaigns/view.hbs:72 +#: views/lists/create.hbs:7 views/lists/edit.hbs:10 views/lists/lists.hbs:8 +#: views/partials/merge-tag-reference.hbs:4 views/templates/create.hbs:9 +#: views/templates/edit.hbs:8 views/templates/templates.hbs:6 +#: views/triggers/create.hbs:7 views/triggers/edit.hbs:8 +#: views/triggers/triggers.hbs:7 +msgid "Description" +msgstr "Opis" + +#: views/campaigns/campaigns.hbs:10 views/campaigns/view.hbs:73 +#: views/lists/view.hbs:21 views/lists/view.hbs:29 +#: views/triggers/triggers.hbs:6 +msgid "Status" +msgstr "Status" + +#: views/campaigns/campaigns.hbs:11 views/campaigns/view.hbs:74 +#: views/lists/view.hbs:22 views/lists/view.hbs:23 +msgid "Created" +msgstr "Utworzono" + +#: views/campaigns/clicked.hbs:3 views/campaigns/clicked.hbs:4 +msgid "Link info" +msgstr "Informacje o linkach" + +#: views/campaigns/clicked.hbs:6 views/campaigns/view.hbs:61 +msgid "URL" +msgstr "URL" + +#: views/campaigns/clicked.hbs:7 views/campaigns/view.hbs:62 +msgid "Clicks" +msgstr "Kliknięcia" + +#: views/campaigns/clicked.hbs:8 views/campaigns/view.hbs:63 +msgid "% of clicks" +msgstr "% kliknięć" + +#: views/campaigns/clicked.hbs:9 views/campaigns/view.hbs:64 +msgid "% of messages" +msgstr "% wiadomości" + +#: views/campaigns/clicked.hbs:10 views/campaigns/view.hbs:67 +msgid "Aggregated clicks" +msgstr "Zagregowane kliknięcia" + +#: views/campaigns/clicked.hbs:11 +msgid "Subscribers who clicked on a link:" +msgstr "Subskrybenci, którzy kliknęli link:" + +#: views/campaigns/clicked.hbs:12 +msgid "Subscribers who clicked on this link:" +msgstr "Subskrybenci, którzy kliknęli ten link:" + +#: views/campaigns/clicked.hbs:16 +msgid "First click time" +msgstr "Czas pierwszego kliknięcia" + +#: views/campaigns/clicked.hbs:17 +msgid "Click count" +msgstr "Liczba kliknięć" + +#: views/campaigns/complained.hbs:3 views/campaigns/complained.hbs:4 +msgid "Complained info" +msgstr "Informacje o skargach" + +#: views/campaigns/complained.hbs:6 +msgid "Subscribers who complained and were unsubscribed:" +msgstr "Subskrybenci, którzy złożyli skargę i wypisali się:" + +#: views/campaigns/complained.hbs:11 +msgid "Complain time" +msgstr "Czas skargi" + +#: views/campaigns/create-rss.hbs:3 views/campaigns/create-rss.hbs:4 +#: views/campaigns/create-rss.hbs:20 +msgid "Create RSS Campaign" +msgstr "Utwórz kampanię RSS" + +#: views/campaigns/create-rss.hbs:5 views/campaigns/edit-rss.hbs:6 +msgid "" +"RSS campaign sets up a tracker against selected RSS feed address. Whenever a " +"new entry is found from this feed it is sent to selected list as an email " +"message." +msgstr "" +"Kampania RSS ustawia moduł śledzący na wybrany adres RSS. Za każdym razem, " +"gdy nowy wpis zostanie znaleziony z tego kanału, zostanie wysłany na wybraną " +"listę jako wiadomość e-mail." + +#: views/campaigns/create-rss.hbs:7 views/campaigns/create-triggered.hbs:6 +#: views/campaigns/create.hbs:6 views/campaigns/edit-rss.hbs:9 +#: views/campaigns/edit-triggered.hbs:10 views/campaigns/edit.hbs:11 +msgid "Campaign Name" +msgstr "Nazwa kampanii" + +#: views/campaigns/create-rss.hbs:9 views/campaigns/create-triggered.hbs:8 +#: views/campaigns/create.hbs:8 views/campaigns/edit-rss.hbs:11 +#: views/campaigns/edit-triggered.hbs:12 views/campaigns/edit.hbs:13 +#: views/lists/create.hbs:8 views/lists/edit.hbs:11 +#: views/templates/create.hbs:11 views/templates/edit.hbs:10 +#: views/triggers/create.hbs:9 views/triggers/edit.hbs:10 +msgid "HTML is allowed" +msgstr "HTML dozwolony" + +#: views/campaigns/create-rss.hbs:10 views/campaigns/create-triggered.hbs:9 +#: views/campaigns/create.hbs:9 views/campaigns/edit-rss.hbs:12 +#: views/campaigns/edit-triggered.hbs:13 views/campaigns/edit.hbs:14 +#: views/campaigns/view.hbs:6 views/triggers/create-select.hbs:6 +#: views/triggers/create.hbs:10 views/triggers/edit.hbs:12 +#: views/triggers/triggers.hbs:8 +msgid "List" +msgstr "Lista" + +#: views/campaigns/create-rss.hbs:11 views/campaigns/create-triggered.hbs:10 +#: views/campaigns/create-triggered.hbs:13 views/campaigns/create.hbs:10 +#: views/campaigns/create.hbs:14 views/campaigns/edit-rss.hbs:13 +#: views/campaigns/edit-triggered.hbs:14 views/campaigns/edit.hbs:15 +#: views/lists/fields/create.hbs:27 views/lists/fields/edit.hbs:28 +#: views/lists/segments/create.hbs:9 views/lists/segments/edit.hbs:10 +#: views/lists/segments/rule-create.hbs:7 views/lists/subscription/add.hbs:10 +#: views/lists/subscription/add.hbs:12 views/lists/subscription/edit.hbs:11 +#: views/lists/subscription/import-preview.hbs:5 +#: views/subscription/manage.hbs:10 views/subscription/subscribe.hbs:10 +#: views/templates/create.hbs:8 views/triggers/create-select.hbs:7 +#: views/triggers/create.hbs:17 views/triggers/create.hbs:20 +#: views/triggers/create.hbs:22 views/triggers/create.hbs:26 +#: views/triggers/edit.hbs:19 views/triggers/edit.hbs:22 +#: views/triggers/edit.hbs:24 views/triggers/edit.hbs:28 +msgid "Select" +msgstr "Wybierz" + +#: views/campaigns/create-rss.hbs:12 views/campaigns/create-triggered.hbs:11 +#: views/campaigns/create.hbs:11 views/campaigns/edit-rss.hbs:14 +#: views/campaigns/edit-triggered.hbs:15 views/campaigns/edit.hbs:16 +#: views/triggers/create-select.hbs:8 views/triggers/create.hbs:11 +#: views/triggers/edit.hbs:13 +msgid "subscribers" +msgstr "subskrybenci" + +#: views/campaigns/create-rss.hbs:13 views/campaigns/edit-rss.hbs:15 +msgid "RSS Feed Url" +msgstr "Adres URL kanału RSS" + +#: views/campaigns/create-rss.hbs:14 views/campaigns/edit-rss.hbs:16 +msgid "" +"New entries from this RSS URL are sent out to list subscribers as email " +"messages" +msgstr "" +"Nowe wpisy z tego adresu RSS są wysyłane do listy subskrybentów, jak " +"wiadomości e-mail" + +#: views/campaigns/create-rss.hbs:15 views/campaigns/create-triggered.hbs:17 +#: views/campaigns/create.hbs:18 views/campaigns/edit-rss.hbs:18 +#: views/campaigns/edit-triggered.hbs:16 views/campaigns/edit.hbs:17 +#: views/campaigns/view.hbs:12 +msgid "Email \"from name\"" +msgstr "E-mail nazwa \"from\"" + +#: views/campaigns/create-rss.hbs:16 views/campaigns/create-triggered.hbs:18 +#: views/campaigns/create.hbs:19 views/campaigns/edit-rss.hbs:19 +#: views/campaigns/edit.hbs:18 views/settings.hbs:23 +msgid "This is the name your emails will come from" +msgstr "This is the name your emails will come from" + +#: views/campaigns/create-rss.hbs:17 views/campaigns/create-triggered.hbs:19 +#: views/campaigns/create.hbs:20 views/campaigns/edit-rss.hbs:20 +#: views/campaigns/edit-triggered.hbs:18 views/campaigns/edit.hbs:19 +#: views/campaigns/view.hbs:13 +msgid "Email \"from\" address" +msgstr "E-mail adres \"from\"" + +#: views/campaigns/create-rss.hbs:18 views/campaigns/create-triggered.hbs:20 +#: views/campaigns/edit-rss.hbs:21 views/campaigns/edit-triggered.hbs:19 +#: views/settings.hbs:25 +msgid "This is the address people will send replies to" +msgstr "To jest adres na który ludzie będą wysyłać odpowiedzi" + +#: views/campaigns/create-rss.hbs:19 views/campaigns/create-triggered.hbs:23 +#: views/campaigns/create.hbs:26 views/campaigns/edit-rss.hbs:22 +#: views/campaigns/edit-triggered.hbs:22 views/campaigns/edit.hbs:25 +msgid "Disable clicked/opened tracking" +msgstr "Wyłącz kliknięte/otwarte śledzenie" + +#: views/campaigns/create-triggered.hbs:3 +#: views/campaigns/create-triggered.hbs:4 +msgid "Create Triggered Campaign" +msgstr "Utwórz uruchamianą kampanię" + +#: views/campaigns/create-triggered.hbs:12 views/campaigns/create.hbs:12 +#: views/campaigns/edit-triggered.hbs:7 views/campaigns/edit.hbs:7 +#: views/lists/fields/create.hbs:31 views/lists/fields/edit.hbs:33 +#: views/templates/create.hbs:13 +msgid "Template" +msgstr "Szablon" + +#: views/campaigns/create-triggered.hbs:14 views/campaigns/create.hbs:15 +msgid "Selecting a template creates a campaign specific copy from it" +msgstr "Wybranie szablonu powoduje utworzenie z niego kopii dla kampanii" + +#: views/campaigns/create-triggered.hbs:15 views/campaigns/create.hbs:16 +msgid "Or alternatively use an URL as the message content source:" +msgstr "Lub alternatywnie użyj adresu URL jako źródło treści wiadomości:" + +#: views/campaigns/create-triggered.hbs:16 views/campaigns/create.hbs:17 +#: views/campaigns/edit-triggered.hbs:25 views/campaigns/edit.hbs:28 +msgid "" +"If a message is sent then this URL will be POSTed to using Merge Tags as " +"POST body. Use this if you want to generate the HTML message yourself" +msgstr "" +"Jeśli wiadomość zostanie wysłana, ten adres URL zostanie wysłany POST do " +"używania merge tagów jako treść POST. Użyj tej opcji, jeśli chcesz " +"samodzielnie wygenerować wiadomość HTML" + +#: views/campaigns/create-triggered.hbs:21 views/campaigns/create.hbs:24 +#: views/campaigns/edit-triggered.hbs:20 views/campaigns/edit.hbs:23 +#: views/campaigns/view.hbs:15 +msgid "Email \"subject line\"" +msgstr "E-mail temat \"from\"" + +#: views/campaigns/create-triggered.hbs:22 views/campaigns/create.hbs:25 +#: views/campaigns/edit-triggered.hbs:21 views/campaigns/edit.hbs:24 +#: views/settings.hbs:27 +msgid "Keep it relevant and non-spammy" +msgstr "Zachowaj to, co istotne i nie spamuj" + +#: views/campaigns/create.hbs:13 +msgid "Select a template:" +msgstr "Wybierz szablon:" + +#: views/campaigns/create.hbs:21 views/campaigns/edit.hbs:20 +msgid "" +"This is the address people will send replies to unless reply-to address is " +"set" +msgstr "" +"To jest adres, na który ludzie będą wysyłać odpowiedzi, chyba że ustawiono " +"adres zwrotny" + +#: views/campaigns/create.hbs:22 views/campaigns/edit.hbs:21 +#: views/campaigns/view.hbs:14 +msgid "Email \"reply-to\" address" +msgstr "Email \"Odpowiedz do\"" + +#: views/campaigns/create.hbs:23 views/campaigns/edit.hbs:22 +msgid "If set, this is the address people will send replies to" +msgstr "" +"Jeśli jest ustawiony, jest to adres, na który ludzie będą wysyłać odpowiedzi" + +#: views/campaigns/delivered.hbs:3 views/campaigns/delivered.hbs:4 +msgid "Delivered info" +msgstr "Informacje o dostarczonych" + +#: views/campaigns/delivered.hbs:6 +msgid "Subscribers who received the message and did not bounce/unsubscribe:" +msgstr "" +"Subskrybenci, którzy otrzymali wiadomość i nie odrzucili/nie anulowali " +"subskrypcji:" + +#: views/campaigns/delivered.hbs:11 +msgid "Delivery time" +msgstr "Czas dostarczenia" + +#: views/campaigns/edit-rss.hbs:3 views/campaigns/edit-rss.hbs:4 +msgid "Edit RSS Campaign" +msgstr "Edytuj kampanię RSS" + +#: views/campaigns/edit-rss.hbs:7 views/campaigns/edit-triggered.hbs:8 +#: views/campaigns/edit.hbs:9 views/settings.hbs:4 views/users/account.hbs:6 +msgid "General Settings" +msgstr "Ustawienia główne" + +#: views/campaigns/edit-rss.hbs:17 +msgid "" +"Use special merge tag [RSS_ENTRY] to mark the position for the RSS post " +"content. Additionally you can use any valid merge tag as well." +msgstr "" +"Użyj specjalnego merge tagu [RSS_ENTRY], aby oznaczyć pozycję treści " +"wiadomości RSS. Dodatkowo mżesz użyć dowolnego innego merge tagu." + +#: views/campaigns/edit-rss.hbs:23 views/campaigns/edit-triggered.hbs:26 +#: views/campaigns/edit.hbs:34 +msgid "Delete Campaign" +msgstr "Usuń kampanię" + +#: views/campaigns/edit-rss.hbs:24 views/campaigns/edit-triggered.hbs:27 +#: views/campaigns/edit.hbs:35 views/lists/edit.hbs:13 +#: views/lists/fields/edit.hbs:39 views/lists/segments/edit.hbs:14 +#: views/lists/segments/rule-edit.hbs:38 views/lists/subscription/edit.hbs:17 +#: views/settings.hbs:99 views/templates/edit.hbs:12 +#: views/triggers/edit.hbs:30 views/users/account.hbs:18 +msgid "Update" +msgstr "Zaktualizuj" + +#: views/campaigns/edit-triggered.hbs:3 views/campaigns/edit-triggered.hbs:4 +msgid "Edit Triggered Campaign" +msgstr "Edytuj kampanię uruchamianą" + +#: views/campaigns/edit-triggered.hbs:6 views/campaigns/edit.hbs:6 +msgid "General" +msgstr "Główne" + +#: views/campaigns/edit-triggered.hbs:17 +msgid "his is the name your emails will come from" +msgstr "Nazwa, z której będą wysyłane wszystkie e-maile." + +#: views/campaigns/edit-triggered.hbs:23 views/campaigns/edit.hbs:26 +msgid "Template Settings" +msgstr "Ustawienia szablonu" + +#: views/campaigns/edit-triggered.hbs:24 views/campaigns/edit.hbs:27 +msgid "Template URL" +msgstr "Adres URL szablonu" + +#: views/campaigns/edit.hbs:3 views/campaigns/edit.hbs:4 +#: views/campaigns/upload-attachment.hbs:3 +#: views/campaigns/upload-attachment.hbs:5 views/campaigns/view.hbs:3 +msgid "Edit Campaign" +msgstr "Edytuj kampanie" + +#: views/campaigns/edit.hbs:8 views/campaigns/edit.hbs:29 +msgid "Attachments" +msgstr "Załączniki" + +#: views/campaigns/edit.hbs:30 +msgid "File" +msgstr "Plik" + +#: views/campaigns/edit.hbs:31 +msgid "Size" +msgstr "Rozmiar" + +#: views/campaigns/edit.hbs:32 views/campaigns/view.hbs:66 +#: views/lists/fields/fields.hbs:12 views/lists/view.hbs:32 +msgid "No data available in table" +msgstr "Brak danych w tabeli" + +#: views/campaigns/edit.hbs:33 views/campaigns/upload-attachment.hbs:4 +msgid "Add Attachment" +msgstr "Dodaj załącznik" + +#: views/campaigns/opened.hbs:3 views/campaigns/opened.hbs:4 +msgid "Opened info" +msgstr "Informacje o otwarciach" + +#: views/campaigns/opened.hbs:6 +msgid "Subscribers who opened this message:" +msgstr "Subskrybenci, którzy otworzyli tę wiadomość:" + +#: views/campaigns/opened.hbs:10 +msgid "First open" +msgstr "Pierwsze otwarcie" + +#: views/campaigns/opened.hbs:11 +msgid "Opened count" +msgstr "Liczba otwarć" + +#: views/campaigns/unsubscribed.hbs:3 views/campaigns/unsubscribed.hbs:4 +msgid "Unsubscribed info" +msgstr "Informacje o anulowaniach subskrypcji" + +#: views/campaigns/unsubscribed.hbs:6 +msgid "Subscribers who unsubscribed:" +msgstr "Subskrybenci, którzy anulowali subskrypcję:" + +#: views/campaigns/unsubscribed.hbs:11 views/campaigns/view.hbs:26 +#: views/lists/subscription/import.hbs:10 routes/lists.js:171 +msgid "Unsubscribed" +msgstr "Anulowano subskrypcję" + +#: views/campaigns/upload-attachment.hbs:7 +msgid "Upload" +msgstr "Prześlij" + +#: views/campaigns/view.hbs:4 +msgid "Overview" +msgstr "Przegląd" + +#: views/campaigns/view.hbs:5 +msgid "Links" +msgstr "Linków" + +#: views/campaigns/view.hbs:7 +msgid "Feed URL" +msgstr "Url czytnika" + +#: views/campaigns/view.hbs:8 +msgid "Last check" +msgstr "Ostatnie sprawdzenie" + +#: views/campaigns/view.hbs:9 +msgid "Not yet checked" +msgstr "Jeszcze nie sprawdzone" + +#: views/campaigns/view.hbs:10 +msgid "activate campaign to start checking feed for new messages" +msgstr "" +"aktywuj kampanię, aby rozpocząć sprawdzanie kanału dla nowych wiadomości" + +#: views/campaigns/view.hbs:11 +msgid "RSS status" +msgstr "Status RSS" + +#: views/campaigns/view.hbs:16 +msgid "Preview campaign as" +msgstr "Podgląd kampanii jako" + +#: views/campaigns/view.hbs:17 +msgid "Add new test user" +msgstr "Dodaj użytkownika testowego" + +#: views/campaigns/view.hbs:18 +msgid "No test users yet, create one here" +msgstr "Brak użytkowników testowych, utwórz je tutaj" + +#: views/campaigns/view.hbs:19 +msgid "Go" +msgstr "Dalej" + +#: views/campaigns/view.hbs:20 lib/models/triggers.js:25 +msgid "Delivered" +msgstr "Dostarczone" + +#: views/campaigns/view.hbs:21 +msgid "List subscribers who received this message" +msgstr "Lista subskrybentów, którzy otrzymali tę wiadomość" + +#: views/campaigns/view.hbs:22 routes/lists.js:171 +msgid "Bounced" +msgstr "Odbite" + +#: views/campaigns/view.hbs:23 +msgid "List subscribers who bounced" +msgstr "Lista użytkowników którzy odbili" + +#: views/campaigns/view.hbs:24 +msgid "Complaints" +msgstr "Skargi" + +#: views/campaigns/view.hbs:25 +msgid "List subscribers who complained for this message" +msgstr "Lista subskrybentów, którzy złożyli skargę na tę wiadomość" + +#: views/campaigns/view.hbs:27 +msgid "List subscribers who unsubscribed after this message" +msgstr "Lista subskrybentów, którzy anulowali subskrypcję po tej wiadomości" + +#: views/campaigns/view.hbs:28 +msgid "Opened" +msgstr "Otwarto" + +#: views/campaigns/view.hbs:29 +msgid "List subscribers who opened this message" +msgstr "Lista subskrybentów, którzy otworzyli tę wiadomość" + +#: views/campaigns/view.hbs:30 +msgid "Clicked" +msgstr "Kliknięto" + +#: views/campaigns/view.hbs:31 views/campaigns/view.hbs:68 +msgid "List subscribers who clicked on a link" +msgstr "Lista subskrybentów, którzy kliknęli w link" + +#: views/campaigns/view.hbs:32 +msgid "" +"Are you sure? This action would start sending messages to the selected list" +msgstr "" +"Jesteś pewny? Ta czynność rozpocznie wysyłanie wiadomości do wybranej listy" + +#: views/campaigns/view.hbs:33 +msgid "Delay sending" +msgstr "Opóźnienie wysyłania" + +#: views/campaigns/view.hbs:34 +msgid "hours" +msgstr "godziny" + +#: views/campaigns/view.hbs:35 +msgid "minutes" +msgstr "minuty" + +#: views/campaigns/view.hbs:36 +msgid "Send to subscribers:" +msgstr "Wyślij do subskrybentów:" + +#: views/campaigns/view.hbs:37 +msgid "Are you sure? This action would reset scheduling" +msgstr "Jesteś pewny? Ta czynność zresetuje harmonogram" + +#: views/campaigns/view.hbs:38 +msgid "Cancel" +msgstr "Anuluj" + +#: views/campaigns/view.hbs:39 +msgid "Sending scheduled" +msgstr "Wysyłanie harmonogramu" + +#: views/campaigns/view.hbs:40 views/campaigns/view.hbs:52 +msgid "Pause" +msgstr "Pauza" + +#: views/campaigns/view.hbs:41 routes/campaigns.js:264 +msgid "Sending" +msgstr "Wysyłanie" + +#: views/campaigns/view.hbs:42 views/campaigns/view.hbs:46 +msgid "" +"Are you sure? This action would resume sending messages to the selected list" +msgstr "" +"Jesteś pewny? Ta czynność wznowi wysyłanie wiadomości do wybranej listy" + +#: views/campaigns/view.hbs:43 views/campaigns/view.hbs:47 +msgid "Are you sure? This action would reset all stats about current progress" +msgstr "" +"Jesteś pewny? Ta czynność zresetuje wszystkie statystyki dotyczące bieżącego " +"postępu" + +#: views/campaigns/view.hbs:44 +msgid "Resume" +msgstr "Wznów" + +#: views/campaigns/view.hbs:45 views/campaigns/view.hbs:49 +msgid "Reset" +msgstr "Resetuj" + +#: views/campaigns/view.hbs:48 +msgid "Continue" +msgstr "Kontynuuj" + +#: views/campaigns/view.hbs:50 +msgid "" +"All messages sent! Hit \"Continue\" if you you want to send this campaign to " +"new subscribers" +msgstr "" +"Wszystkie wiadomości wysłane! Kliknij \"Kontynuuj\", jeśli chcesz wysłać tę " +"kampanię do nowych subskrybentów" + +#: views/campaigns/view.hbs:51 +msgid "" +"Are you sure? This action would pause sending new entries in RSS feed as " +"email messages to the selected list" +msgstr "" +"Jesteś pewny? Ta czynność wstrzyma wysyłanie wiadomości o nowych wpisach w " +"kanale RSS do wybranej listy" + +#: views/campaigns/view.hbs:53 views/campaigns/view.hbs:57 +msgid "Campaign status:" +msgstr "Status kampanii:" + +#: views/campaigns/view.hbs:54 +msgid "ACTIVE" +msgstr "AKTYWNE" + +#: views/campaigns/view.hbs:55 +msgid "" +"Are you sure? This action would start sending new entries in RSS feed as " +"email messages to the selected list" +msgstr "" +"Jesteś pewny? Ta czynność rozpocznie wysyłanie wiadomości o nowych wpisach w " +"kanale RSS do wybranej listy" + +#: views/campaigns/view.hbs:56 +msgid "Activate" +msgstr "Aktywuj" + +#: views/campaigns/view.hbs:58 +msgid "INACTIVE" +msgstr "NIEAKTYWNE" + +#: views/campaigns/view.hbs:59 +msgid "" +"This is a triggered campaign. Messages are only sent to subscribers that hit " +"some trigger that invokes this campaign" +msgstr "" +"To jest kampania wyzwalana. Wiadomości są wysyłane tylko do subskrybentów, " +"którzy natrafili na jakiś wyzwalacz, który wywołuje tę kampanię" + +#: views/campaigns/view.hbs:60 +msgid "see more" +msgstr "zobacz więcej" + +#: views/campaigns/view.hbs:65 +msgid "List subscribers who clicked this link" +msgstr "Lista subskrybentów, którzy kliknęli link" + +#: views/campaigns/view.hbs:69 +msgid "" +"Clicks are counted as unique subscribers that clicked on a specific link or " +"on any link (in aggregated view)" +msgstr "" +"Kliknięcia są liczone jako unikalni subskrybenci, którzy kliknęli określony " +"link lub dowolny link (w widoku zbiorczym)" + +#: views/campaigns/view.hbs:70 +msgid "" +"If a new entry is found from campaign feed a new subcampaign is created of " +"that entry and it will be listed here" +msgstr "" +"Jeśli zostanie znaleziony nowy wpis z kanału kampanii, zostanie utworzona " +"nowa kampania podrzędna dla tego wpisu i zostanie ona tutaj wymieniona" + +#: views/emails/confirm-html.hbs:1 views/emails/confirm-html.hbs:2 +#: views/emails/confirm-text.hbs:1 +msgid "Please Confirm Subscription" +msgstr "Proszę potwierdź subskrypcję" + +#: views/emails/confirm-html.hbs:3 views/emails/confirm-text.hbs:2 +msgid "Yes, subscribe me to this list" +msgstr "Tak, zapisz mnie na listę" + +#: views/emails/confirm-html.hbs:4 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"subscribed if you don't click the confirmation link above." +msgstr "" +"Jeśli przez pomyłkę otrzymałeś tego e-maila, po prostu go usuń. Nie będziesz " +"subskrybowany, jeśli nie klikniesz w link potwierdzający." + +#: views/emails/confirm-html.hbs:5 views/emails/confirm-text.hbs:4 +#: views/emails/subscription-confirmed-html.hbs:7 +#: views/emails/subscription-confirmed-text.hbs:7 +#: views/emails/unsubscribe-confirmed-html.hbs:5 +#: views/emails/unsubscribe-confirmed-text.hbs:5 +msgid "For questions about this list, please contact:" +msgstr "W przypadku pytań dotyczących tej listy, prosimy o kontakt:" + +#: views/emails/confirm-text.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"subscribed unless you click the confirmation link above." +msgstr "" +"Jeśli przez pomyłkę otrzymałeś tego e-maila, po prostu go usuń. Nie będziesz " +"subskrybowany, chyba że klikniesz link powyżej." + +#: views/emails/password-reset-html.hbs:1 +#: views/emails/password-reset-html.hbs:2 +#: views/emails/password-reset-text.hbs:1 +msgid "Change your password" +msgstr "Zmień hasło" + +#: views/emails/password-reset-html.hbs:3 +#: views/emails/password-reset-text.hbs:2 +msgid "We have received a password change request for your Mailtrain account:" +msgstr "Otrzymaliśmy prośbę o zmianę hasła dla Twojego konta Mailtrain:" + +#: views/emails/password-reset-html.hbs:4 +#: views/emails/password-reset-text.hbs:3 +msgid "Reset password" +msgstr "Zresetuj hasło" + +#: views/emails/password-reset-html.hbs:5 +#: views/emails/password-reset-text.hbs:4 +msgid "" +"If you did not ask to change your password, then you can ignore this email " +"and your password will not be changed." +msgstr "" +"Jeśli nie poprosiłeś o zmianę hasła, możesz zignorować ten e-mail, a Twoje " +"hasło nie zostanie zmienione." + +#: views/emails/rss-html.hbs:1 views/emails/stationery-html.hbs:3 +#: views/emails/stationery-text.hbs:3 +msgid "Preferences" +msgstr "Preferencje" + +#: views/emails/rss-html.hbs:2 views/emails/stationery-html.hbs:4 +#: views/emails/stationery-text.hbs:4 views/lists/subscription/edit.hbs:15 +#: views/subscription/manage.hbs:12 views/subscription/unsubscribe.hbs:1 +#: views/subscription/unsubscribe.hbs:4 routes/lists.js:253 +msgid "Unsubscribe" +msgstr "Anuluj subskrypcję" + +#: views/emails/rss-html.hbs:3 views/emails/stationery-html.hbs:5 +#: views/emails/stationery-text.hbs:5 +msgid "View this email in your browser" +msgstr "Zobacz ten email w Twojej przeglądarce" + +#: views/emails/stationery-html.hbs:1 views/emails/stationery-text.hbs:1 +msgid "Hey [FIRST_NAME/Customer]," +msgstr "Cześć [FIRST_NAME/Customer]," + +#: views/emails/stationery-html.hbs:2 views/emails/stationery-text.hbs:2 +msgid "Cheers," +msgstr "Pozdrowienia," + +#: views/emails/subscription-confirmed-html.hbs:1 +#: views/emails/subscription-confirmed-text.hbs:1 +#: views/subscription/subscribed.hbs:1 +msgid "Subscription Confirmed" +msgstr "Subskrypcja została potwierdzona" + +#: views/emails/subscription-confirmed-html.hbs:2 +#: views/emails/subscription-confirmed-text.hbs:2 +#: views/subscription/subscribed.hbs:2 +msgid "Your subscription to our list has been confirmed." +msgstr "Twoja subskrypcja naszej listy została potwierdzona." + +#: views/emails/subscription-confirmed-html.hbs:3 +#: views/emails/subscription-confirmed-text.hbs:3 +msgid "If you want to modify your subscription then you can:" +msgstr "Jeśli chcesz zmodyfikować swoją subskrypcję, możesz:" + +#: views/emails/subscription-confirmed-html.hbs:4 +#: views/emails/subscription-confirmed-text.hbs:4 +#: views/subscription/subscribed.hbs:6 +msgid "manage your preferences" +msgstr "zarządzaj swoimi preferencjami" + +#: views/emails/subscription-confirmed-html.hbs:5 +#: views/emails/subscription-confirmed-text.hbs:5 +#: views/subscription/subscribed.hbs:5 views/users/login.hbs:10 +msgid "or" +msgstr "lub" + +#: views/emails/subscription-confirmed-html.hbs:6 +#: views/emails/subscription-confirmed-text.hbs:6 +msgid "unsubscribe here" +msgstr "anuluj subskrypcję tutaj" + +#: views/emails/unsubscribe-confirmed-html.hbs:1 +#: views/emails/unsubscribe-confirmed-text.hbs:1 +msgid "You are now unsubscribed" +msgstr "Anulowałeś subskrypcję" + +#: views/emails/unsubscribe-confirmed-html.hbs:2 +#: views/emails/unsubscribe-confirmed-text.hbs:2 +msgid "We have removed your email address from our list." +msgstr "Usunęliśmy Twój adres e-mail z naszej listy." + +#: views/emails/unsubscribe-confirmed-html.hbs:3 +#: views/emails/unsubscribe-confirmed-text.hbs:3 +msgid "If you unsubscribed by mistake, you can re-subscribe at:" +msgstr "" +"Jeśli anulujesz subskrypcję przez pomyłkę, możesz ponownie zasubskrybować na:" + +#: views/emails/unsubscribe-confirmed-html.hbs:4 +#: views/emails/unsubscribe-confirmed-text.hbs:4 +#: views/lists/subscription/add.hbs:16 routes/lists.js:253 +msgid "Subscribe" +msgstr "Subskrybuj" + +#: views/index.hbs:1 +msgid "Official Mailtrain Partners" +msgstr "Oficjalni partnerzy Mailtrain" + +#: views/index.hbs:2 +msgid "Free, open source mail server solution" +msgstr "Darmowe, o otwartym kodzie źródłowym rozwiązanie serwera poczty" + +#: views/index.hbs:3 +msgid "" +"A reliable SMTP server, easy integration, and 12,000 messages a month free" +msgstr "" +"Niezawodny serwer SMTP, łatwa integracja i 12 000 wiadomości miesięcznie za " +"darmo" + +#: views/index.hbs:4 +msgid "List management" +msgstr "Zarządzanie listamie" + +#: views/index.hbs:5 +msgid "" +"Mailtrain allows you to easily manage even very large lists. Million " +"subscribers? Not a problem. You can add subscribers manually, through the " +"API or import from a CSV file. All lists come with support for custom fields " +"and merge tags as well." +msgstr "" +"Mailtrain pozwala w łatwy sposób zarządzać nawet bardzo dużymi listami. " +"Milion subskrybentów? Żaden problem. Możesz dodawać subskrybentów ręcznie, " +"za pośrednictwem interfejsu API lub importować z pliku CSV. Wszystkie listy " +"zawierają również obsługę pól niestandardowych i znaczników scalających." + +#: views/index.hbs:6 +msgid "Custom fields" +msgstr "Pola niestandardowe" + +#: views/index.hbs:7 +msgid "" +"Text fields, numbers, drop downs or checkboxes, Mailtrain has them all. " +"Every custom field can be included in the generated newsletters through " +"merge tags." +msgstr "" +"Pola tekstowe, cyfry, listy rozwijane lub pola wyboru, Mailtrain ma je " +"wszystkie. Każde niestandardowe pole może być zawarte w wygenerowanych " +"newsletterach za pomocą merge tagów." + +#: views/index.hbs:8 +msgid "List segmentation" +msgstr "Segmentacja listy" + +#: views/index.hbs:9 +msgid "" +"Send messages only to list subscribers that match predefined segmentation " +"rules. No need to create separate lists with small differences." +msgstr "" +"Wysyłaj wiadomości tylko dla subskrybentów, którzy pasują do " +"predefiniowanych reguł segmentacji. Nie trzeba tworzyć oddzielnych list z " +"małymi różnicami." + +#: views/index.hbs:10 +msgid "Donate to author" +msgstr "Przekaż darowiznę autorowi" + +#: views/index.hbs:11 +msgid "" +"If you really like Mailtrain or your business benefits from it financially " +"then I would really appreciate a small donation to keep the Mailtrain " +"development engines running. You can either use Bitcoin or PayPal for " +"donations. My Bitcoin wallet is 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM" +msgstr "" +"Jeśli naprawdę lubisz Mailtrain lub Twoja firma czerpie z teg korzyści " +"finansowe będę naprawdę wdzięczny za niewielką darowiznę, aby utrzymać " +"rozwój Mailtrain. Możesz użyć Bitcoin lub PayPal do darowizn. Mój portfel " +"Bitcoin to 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM" + +#: views/index.hbs:12 +msgid "or donate using PayPal" +msgstr "lub przekaż darowiznę za pomocą PayPal" + +#: views/index.hbs:13 +msgid "RSS Campaigns" +msgstr "Kampanie RSS" + +#: views/index.hbs:14 +msgid "" +"Setup Mailtrain to track RSS feeds and if a new entry is detected in a feed " +"then Mailtrain auto-generates a new campaign using entry data as message " +"contents and sends it to selected subscribers." +msgstr "" +"Przygotuj Mailtrain do śledzenia kanałów RSS i jeśli wykryty zostanie nowy " +"wpis w kanale, Mailtrain automatycznie generuje nową kampanię, wykorzystując " +"dane wejściowe jako treść wiadomości i wysyła je do wybranych subskrybentów." + +#: views/index.hbs:15 +msgid "GPG Encryption" +msgstr "Szyfrowanie GPG" + +#: views/index.hbs:16 +msgid "" +"If a list has a custom field for a GPG Public Key set then subscribers can " +"upload their GPG public key to receive encrypted messages from the list." +msgstr "" +"Jeśli lista ma niestandardowe pole dla zestawu kluczy publicznych GPG, " +"subskrybenci mogą przesłać swój klucz publiczny GPG, aby otrzymywać " +"zaszyfrowane wiadomości z listy." + +#: views/index.hbs:17 +msgid "Click stats" +msgstr "Statystyki kliknięć" + +#: views/index.hbs:18 +msgid "" +"After a campaign is sent, check individual click statistics for every link " +"included in the message." +msgstr "" +"Po wysłaniu kampanii sprawdź statystyki poszczególnych kliknięć dla każdego " +"linku zawartego w wiadomości." + +#: views/index.hbs:19 +msgid "Open source" +msgstr "Open source" + +#: views/index.hbs:20 +msgid "Mailtrain is available under GPLv3 license and completely open source." +msgstr "Mailtrain jest dostępny na licencji GPLv3 i całkowicie open source." + +#: views/index.hbs:21 +msgid "Send via any provider" +msgstr "Wyślij przez dowolnego dostawcę" + +#: views/index.hbs:22 +msgid "" +"Mailtrain recommends SendPulse even though you " +"can use any provider that supports SMTP protocol to send out your " +"newsletters. Bounce and complaints handling via webhooks is supported for " +"SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA." +msgstr "" +"Mailtrain recommends SendPulse even though you " +"can use any provider that supports SMTP protocol to send out your " +"newsletters. Bounce and complaints handling via webhooks is supported for " +"SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA." +"Odbieranie i obsługa skarg za pośrednictwem webhooków jest obsługiwane dla " +"SES, SparkPost, SendGrid i Mailgun, także dla Postfix i ZoneMTA." + +#: views/index.hbs:23 +msgid "Trigger based automation" +msgstr "Automatyzacja oparta na wyzwalaczach" + +#: views/index.hbs:24 +msgid "" +"Define automation triggers to send specific messages when a user activates " +"the trigger." +msgstr "" +"Zdefiniuj wyzwalacze automatyzacji, aby wysłać określone komunikaty, gdy " +"użytkownik aktywuje wyzwalacz." + +#: views/layout.hbs:2 +msgid "Toggle navigation" +msgstr "Przełącz nawigację" + +#: views/layout.hbs:3 +msgid "Wiki" +msgstr "Wiki" + +#: views/layout.hbs:4 +msgid "Blog" +msgstr "Blog" + +#: views/layout.hbs:5 views/users/account.hbs:2 views/users/account.hbs:3 +msgid "Account" +msgstr "Konto" + +#: views/layout.hbs:6 views/settings.hbs:2 views/settings.hbs:3 +msgid "Settings" +msgstr "Ustawienia" + +#: views/layout.hbs:7 views/users/api.hbs:2 views/users/api.hbs:3 +msgid "API" +msgstr "API" + +#: views/layout.hbs:8 +msgid "Log out" +msgstr "Wyloguj" + +#: views/layout.hbs:9 views/users/forgot.hbs:2 views/users/login.hbs:2 +#: views/users/login.hbs:3 views/users/login.hbs:9 views/users/reset.hbs:2 +msgid "Sign in" +msgstr "Zaloguj się" + +#: views/layout.hbs:10 +msgid "Self hosted newsletter app built on top of Nodemailer" +msgstr "" +"Samodzielnie hostowana aplikacja e-mail newsletter zbudowana na bazie " +"Nodemailera" + +#: views/layout.hbs:11 views/layout.hbs:13 +msgid "Source on GitHub" +msgstr "Źródło na GitHub" + +#: views/layout.hbs:12 +msgid "Subscribe to our newsletter" +msgstr "Zapisz się do naszego newslettera" + +#: views/lists/create.hbs:2 views/lists/edit.hbs:2 +#: views/lists/fields/create.hbs:2 views/lists/fields/edit.hbs:2 +#: views/lists/fields/fields.hbs:2 views/lists/lists.hbs:2 +#: views/lists/lists.hbs:4 views/lists/segments/create.hbs:2 +#: views/lists/segments/edit.hbs:2 views/lists/segments/rule-configure.hbs:2 +#: views/lists/segments/rule-create.hbs:2 views/lists/segments/rule-edit.hbs:2 +#: views/lists/segments/segments.hbs:2 views/lists/segments/view.hbs:2 +#: views/lists/subscription/add.hbs:2 views/lists/subscription/edit.hbs:2 +#: views/lists/subscription/import-failed.hbs:2 +#: views/lists/subscription/import-preview.hbs:2 +#: views/lists/subscription/import.hbs:2 views/lists/view.hbs:2 +#: lib/tools.js:111 +msgid "Lists" +msgstr "Listy" + +#: views/lists/create.hbs:3 views/lists/create.hbs:4 views/lists/create.hbs:9 +#: views/lists/lists.hbs:3 +msgid "Create List" +msgstr "Utwórz listę" + +#: views/lists/create.hbs:6 views/lists/edit.hbs:7 +msgid "List Name" +msgstr "Nazwa listy" + +#: views/lists/edit.hbs:3 views/lists/edit.hbs:4 views/lists/view.hbs:7 +msgid "Edit List" +msgstr "Edytuj listę" + +#: views/lists/edit.hbs:5 +msgid "View List" +msgstr "Wyświetl listę" + +#: views/lists/edit.hbs:8 +msgid "List ID" +msgstr "ID listy" + +#: views/lists/edit.hbs:9 +msgid "This is the list ID displayed to the subscribers" +msgstr "To jest ID listy wyświetlany dla subskrybentów" + +#: views/lists/edit.hbs:12 +msgid "Delete List" +msgstr "Usuń listę" + +#: views/lists/fields/create.hbs:3 views/lists/fields/edit.hbs:3 +#: views/lists/fields/fields.hbs:3 views/lists/fields/fields.hbs:5 +#: views/lists/view.hbs:5 +msgid "Custom Fields" +msgstr "Pola niestandardowe" + +#: views/lists/fields/create.hbs:4 +msgid "Create Field" +msgstr "Utwórz pole" + +#: views/lists/fields/create.hbs:5 views/lists/fields/fields.hbs:4 +msgid "Create Custom Field" +msgstr "Utwórz pole niestandardowe" + +#: views/lists/fields/create.hbs:6 views/lists/fields/create.hbs:7 +#: views/lists/fields/edit.hbs:7 views/lists/fields/edit.hbs:8 +msgid "Field Name" +msgstr "Nazwa pola" + +#: views/lists/fields/create.hbs:8 views/lists/fields/edit.hbs:9 +msgid "Field Type" +msgstr "Typ pola" + +#: views/lists/fields/create.hbs:9 views/lists/fields/edit.hbs:10 +#: lib/models/fields.js:17 +msgid "Text" +msgstr "Tekst" + +#: views/lists/fields/create.hbs:10 views/lists/fields/edit.hbs:11 +#: lib/models/fields.js:21 +msgid "Number" +msgstr "Numer" + +#: views/lists/fields/create.hbs:11 views/lists/fields/edit.hbs:12 +#: lib/models/fields.js:18 +msgid "Website" +msgstr "Strona www" + +#: views/lists/fields/create.hbs:12 views/lists/fields/edit.hbs:13 +#: lib/models/fields.js:20 +msgid "GPG Public Key" +msgstr "Klucz publiczny GPG" + +#: views/lists/fields/create.hbs:13 views/lists/fields/edit.hbs:14 +#: lib/models/fields.js:19 +msgid "Multi-line text" +msgstr "Tekst wielowierszowy" + +#: views/lists/fields/create.hbs:14 views/lists/fields/edit.hbs:15 +msgid "JSON" +msgstr "JSON" + +#: views/lists/fields/create.hbs:15 views/lists/fields/edit.hbs:16 +msgid "Date" +msgstr "Data" + +#: views/lists/fields/create.hbs:16 views/lists/fields/edit.hbs:17 +msgid "Date (MM/DD/YYYY)" +msgstr "Data (MM/DD/YYYY)" + +#: views/lists/fields/create.hbs:17 views/lists/fields/edit.hbs:18 +#: lib/models/fields.js:26 +msgid "Date (DD/MM/YYYY)" +msgstr "Data (DD/MM/YYYY)" + +#: views/lists/fields/create.hbs:18 views/lists/fields/edit.hbs:19 +msgid "Birthday" +msgstr "Urodziny" + +#: views/lists/fields/create.hbs:19 views/lists/fields/edit.hbs:20 +#: lib/models/fields.js:27 +msgid "Birthday (MM/DD)" +msgstr "Urodziny (MM/DD)" + +#: views/lists/fields/create.hbs:20 views/lists/fields/edit.hbs:21 +#: lib/models/fields.js:28 +msgid "Birthday (DD/MM)" +msgstr "Urodziny (DD/MM)" + +#: views/lists/fields/create.hbs:21 views/lists/fields/edit.hbs:22 +msgid "Grouped" +msgstr "Grouped." + +#: views/lists/fields/create.hbs:22 views/lists/fields/edit.hbs:23 +msgid "Drop Downs" +msgstr "Listy rozwijane" + +#: views/lists/fields/create.hbs:23 views/lists/fields/edit.hbs:24 +#: lib/models/fields.js:22 +msgid "Radio Buttons" +msgstr "Radio Buttons" + +#: views/lists/fields/create.hbs:24 views/lists/fields/edit.hbs:25 +#: lib/models/fields.js:23 +msgid "Checkboxes" +msgstr "Checkboxes" + +#: views/lists/fields/create.hbs:25 views/lists/fields/edit.hbs:26 +msgid "Option for a group value" +msgstr "Opcja dla wartości grupy" + +#: views/lists/fields/create.hbs:26 views/lists/fields/edit.hbs:27 +msgid "Group" +msgstr "Grupa" + +#: views/lists/fields/create.hbs:28 views/lists/fields/edit.hbs:29 +msgid "Required for group options" +msgstr "Wymagane w przypadku opcji grupowych" + +#: views/lists/fields/create.hbs:29 views/lists/fields/create.hbs:30 +#: views/lists/fields/edit.hbs:35 views/lists/fields/edit.hbs:36 +#: views/lists/fields/fields.hbs:9 +msgid "Default merge tag value" +msgstr "Domyślna wartość merge tag" + +#: views/lists/fields/create.hbs:32 views/lists/fields/edit.hbs:34 +msgid "" +"For group elements like checkboxes you can control the appearance of the " +"merge tag with an optional template. The template uses handlebars syntax and " +"you can find all values from {{values}} array, for example " +"{{#each values}} {{this}} {{/each}}. If template is not defined " +"then multiple values are joined with commas. You can also use this template " +"to render JSON values (if the JSON is an array then the array is exposed as " +"values, otherwise you can access the JSON keys directly)." +msgstr "" +"W przypadku elementów grupy, takich jak checkboxy, można kontrolować wygląd " +"merge tagów za pomocą opcjonalnego szablonu. Szablon używa składni " +"handlebars i możesz znaleźć wszystkie wartości z tablicy {{values}}, na przykład {{#each values}} {{this}} {{/each}} . Jeśli " +"szablon nie jest zdefiniowany, wiele wartości jest łączonych przecinkami. " +"Możesz również użyć tego szablonu do renderowania wartości JSON (jeśli JSON " +"jest tablicą, wtedy tablica jest wyświetlana jako values, w " +"przeciwnym razie możesz uzyskać bezpośredni dostęp do kluczy JSON)." + +#: views/lists/fields/create.hbs:33 views/lists/fields/edit.hbs:37 +msgid "Visible" +msgstr "Widoczny" + +#: views/lists/fields/create.hbs:34 +msgid "Add Field" +msgstr "Dodaj pole" + +#: views/lists/fields/edit.hbs:4 +msgid "Edit Field" +msgstr "Edytuj pole" + +#: views/lists/fields/edit.hbs:5 +msgid "Edit Custom Field" +msgstr "Edytuj pole niestandardowe" + +#: views/lists/fields/edit.hbs:6 +msgid "Back to fields" +msgstr "Powrót do pól" + +#: views/lists/fields/edit.hbs:30 views/lists/fields/fields.hbs:8 +#: views/partials/merge-tag-reference.hbs:3 +msgid "Merge tag" +msgstr "Merge tag" + +#: views/lists/fields/edit.hbs:31 +msgid "Merge Tag" +msgstr "Merge Tag" + +#: views/lists/fields/edit.hbs:32 +msgid "Put this tag in your content:" +msgstr "Umieść ten tag w swojej treści:" + +#: views/lists/fields/edit.hbs:38 +msgid "Delete Field" +msgstr "Usuń pole" + +#: views/lists/fields/fields.hbs:7 views/lists/view.hbs:25 +msgid "Type" +msgstr "Typ" + +#: views/lists/fields/fields.hbs:10 views/lists/fields/fields.hbs:11 +#: views/lists/lists.hbs:9 views/lists/segments/segments.hbs:8 +#: views/lists/segments/view.hbs:12 views/templates/templates.hbs:7 +#: views/triggers/triggers.hbs:14 routes/campaigns.js:287 +#: routes/campaigns.js:576 routes/campaigns.js:626 routes/lists.js:222 +#: routes/triggers.js:297 +msgid "Edit" +msgstr "Edytuj" + +#: views/lists/lists.hbs:6 +msgid "ID" +msgstr "ID" + +#: views/lists/lists.hbs:7 +msgid "Subscribers" +msgstr "Subskrybenci" + +#: views/lists/segments/create.hbs:3 views/lists/segments/edit.hbs:3 +#: views/lists/segments/rule-configure.hbs:3 +#: views/lists/segments/rule-create.hbs:3 views/lists/segments/rule-edit.hbs:3 +#: views/lists/segments/segments.hbs:3 views/lists/segments/segments.hbs:5 +#: views/lists/segments/view.hbs:3 views/lists/view.hbs:6 +#: views/lists/view.hbs:13 +msgid "Segments" +msgstr "Segmenty" + +#: views/lists/segments/create.hbs:4 views/lists/segments/create.hbs:5 +#: views/lists/segments/rule-configure.hbs:4 +#: views/lists/segments/rule-create.hbs:4 views/lists/segments/rule-edit.hbs:4 +#: views/lists/segments/segments.hbs:4 +msgid "Create Segment" +msgstr "Utwórz segment" + +#: views/lists/segments/create.hbs:6 views/lists/segments/create.hbs:7 +#: views/lists/segments/edit.hbs:7 views/lists/segments/edit.hbs:8 +msgid "Segment Name" +msgstr "Nazwa segmentu" + +#: views/lists/segments/create.hbs:8 views/lists/segments/edit.hbs:9 +msgid "Rule match" +msgstr "Dopasowanie reguł" + +#: views/lists/segments/create.hbs:10 views/lists/segments/edit.hbs:11 +msgid "All rules must match" +msgstr "Wszystkie reguły muszą się zgadzać" + +#: views/lists/segments/create.hbs:11 views/lists/segments/edit.hbs:12 +msgid "Any rule can match" +msgstr "Każda reguła może się zgadzać" + +#: views/lists/segments/create.hbs:12 +msgid "Add Segment" +msgstr "Dodaj segment" + +#: views/lists/segments/edit.hbs:4 views/lists/segments/edit.hbs:5 +#: views/lists/segments/view.hbs:6 views/lists/view.hbs:11 +msgid "Edit Segment" +msgstr "Edytuj segment" + +#: views/lists/segments/edit.hbs:6 +msgid "Back to segments" +msgstr "Powrót do segmentów" + +#: views/lists/segments/edit.hbs:13 +msgid "Delete Segment" +msgstr "Usuń segment" + +#: views/lists/segments/rule-configure.hbs:5 +#: views/lists/segments/rule-create.hbs:5 views/lists/segments/rule-edit.hbs:5 +#: views/lists/segments/view.hbs:4 +msgid "Create Rule" +msgstr "Utwórz regułę" + +#: views/lists/segments/rule-configure.hbs:6 +#: views/lists/segments/rule-create.hbs:6 views/lists/segments/rule-edit.hbs:6 +#: views/lists/segments/view.hbs:10 +msgid "Rule" +msgstr "Reguła" + +#: views/lists/segments/rule-configure.hbs:7 +#: views/lists/segments/rule-configure.hbs:8 +#: views/lists/segments/rule-configure.hbs:10 +#: views/lists/segments/rule-configure.hbs:13 +#: views/lists/segments/rule-configure.hbs:25 +#: views/lists/segments/rule-configure.hbs:30 +#: views/lists/segments/rule-edit.hbs:7 views/lists/segments/rule-edit.hbs:8 +#: views/lists/segments/rule-edit.hbs:10 views/lists/segments/rule-edit.hbs:15 +#: views/lists/segments/rule-edit.hbs:29 views/lists/segments/rule-edit.hbs:34 +#: views/lists/segments/view.hbs:11 +msgid "Value" +msgstr "Wartość" + +#: views/lists/segments/rule-configure.hbs:9 +#: views/lists/segments/rule-edit.hbs:9 +msgid "" +"Use % for wildcard character, e.g. \"%test\" to match all values that end " +"with \"test\"" +msgstr "" +"Użyj % dla znaku wieloznacznego, np. \"%test\", aby dopasować wszystkie " +"wartości, które kończą się na \"test\"" + +#: views/lists/segments/rule-configure.hbs:11 +#: views/lists/segments/rule-configure.hbs:14 +#: views/lists/segments/rule-configure.hbs:26 +#: views/lists/segments/rule-edit.hbs:11 views/lists/segments/rule-edit.hbs:16 +#: views/lists/segments/rule-edit.hbs:30 +msgid "Use exact match" +msgstr "Użyj ścisłego dopasowania" + +#: views/lists/segments/rule-configure.hbs:12 +#: views/lists/segments/rule-configure.hbs:15 +#: views/lists/segments/rule-configure.hbs:27 +#: views/lists/segments/rule-edit.hbs:12 views/lists/segments/rule-edit.hbs:17 +#: views/lists/segments/rule-edit.hbs:31 +msgid "Use range match" +msgstr "Użyj dopasowania zakresu" + +#: views/lists/segments/rule-configure.hbs:16 +#: views/lists/segments/rule-edit.hbs:20 +msgid "Use relative range match" +msgstr "Użyj względnego dopasowania zakresu" + +#: views/lists/segments/rule-configure.hbs:17 +#: views/lists/segments/rule-configure.hbs:28 +#: views/lists/segments/rule-edit.hbs:13 views/lists/segments/rule-edit.hbs:18 +#: views/lists/segments/rule-edit.hbs:21 views/lists/segments/rule-edit.hbs:32 +msgid "From" +msgstr "Od" + +#: views/lists/segments/rule-configure.hbs:18 +#: views/lists/segments/rule-configure.hbs:22 +#: views/lists/segments/rule-edit.hbs:22 views/lists/segments/rule-edit.hbs:26 +msgid "days" +msgstr "dni" + +#: views/lists/segments/rule-configure.hbs:19 +#: views/lists/segments/rule-configure.hbs:23 +#: views/lists/segments/rule-edit.hbs:23 views/lists/segments/rule-edit.hbs:27 +msgid "before today" +msgstr "przed dzisiaj" + +#: views/lists/segments/rule-configure.hbs:20 +#: views/lists/segments/rule-configure.hbs:24 +#: views/lists/segments/rule-edit.hbs:24 views/lists/segments/rule-edit.hbs:28 +msgid "after today" +msgstr "po dzisiaj" + +#: views/lists/segments/rule-configure.hbs:21 +#: views/lists/segments/rule-configure.hbs:29 +#: views/lists/segments/rule-edit.hbs:14 views/lists/segments/rule-edit.hbs:19 +#: views/lists/segments/rule-edit.hbs:25 views/lists/segments/rule-edit.hbs:33 +msgid "to" +msgstr "do" + +#: views/lists/segments/rule-configure.hbs:31 +#: views/lists/segments/rule-edit.hbs:35 lib/models/segments.js:156 +#: lib/models/segments.js:418 +msgid "Selected" +msgstr "Wybrano" + +#: views/lists/segments/rule-configure.hbs:32 +#: views/lists/segments/rule-edit.hbs:36 lib/models/segments.js:156 +#: lib/models/segments.js:418 +msgid "Not selected" +msgstr "Nie wybrano" + +#: views/lists/segments/rule-configure.hbs:33 +msgid "Add Rule" +msgstr "Dodaj regułę" + +#: views/lists/segments/rule-create.hbs:8 +#: views/lists/subscription/import.hbs:12 views/triggers/create-select.hbs:9 +msgid "Next" +msgstr "Dalej" + +#: views/lists/segments/rule-edit.hbs:37 +msgid "Delete Rule" +msgstr "Usuń regułę" + +#: views/lists/segments/segments.hbs:7 +msgid "Match" +msgstr "Dopasowanie" + +#: views/lists/segments/view.hbs:5 views/lists/view.hbs:12 +msgid "Segment" +msgstr "Segment" + +#: views/lists/segments/view.hbs:7 +msgid "Match rules" +msgstr "Reguły dopasowania" + +#: views/lists/segments/view.hbs:8 +msgid "Matching subscribers" +msgstr "Dopasowani subskrybenci" + +#: views/lists/segments/view.hbs:9 +msgid "show" +msgstr "pokaż" + +#: views/lists/subscription/add.hbs:3 views/lists/subscription/add.hbs:4 +msgid "Add subscriber" +msgstr "Dodaj subskrybenta" + +#: views/lists/subscription/add.hbs:5 views/subscription/manage.hbs:2 +#: views/subscription/subscribe.hbs:3 views/users/account.hbs:7 +msgid "Email Address" +msgstr "Adres e-mail" + +#: views/lists/subscription/add.hbs:8 views/lists/subscription/edit.hbs:9 +#: views/settings.hbs:82 views/settings.hbs:97 views/subscription/manage.hbs:7 +#: views/subscription/subscribe.hbs:7 +msgid "Begins with" +msgstr "Zaczyna się" + +#: views/lists/subscription/add.hbs:9 views/lists/subscription/edit.hbs:10 +msgid "" +"Insert a GPG public key that will be used to encrypt messages sent this " +"subscriber" +msgstr "" +"Wstaw klucz publiczny GPG, który będzie używany do szyfrowania wiadomości " +"wysłanych przez tego subskrybenta" + +#: views/lists/subscription/add.hbs:11 views/lists/subscription/edit.hbs:12 +#: views/lists/subscription/import-preview.hbs:9 +msgid "Timezone" +msgstr "Strefa czasowa" + +#: views/lists/subscription/add.hbs:13 views/lists/subscription/edit.hbs:13 +msgid "Test user?" +msgstr "Użytkownik testowy?" + +#: views/lists/subscription/add.hbs:14 views/lists/subscription/edit.hbs:14 +msgid "" +"If checked then this subscription can be used for previewing campaign " +"messages" +msgstr "" +"Jeśli ta opcja jest zaznaczona, można użyć tej subskrypcji do przeglądania " +"wiadomości kampanii" + +#: views/lists/subscription/add.hbs:15 +msgid "" +"This person will not receive a confirmation email so make sure that you have " +"permission to email them." +msgstr "" +"Ta osoba nie otrzyma e-maila z potwierdzeniem, więc upewnij się, że masz " +"uprawnienia do e-maila." + +#: views/lists/subscription/edit.hbs:3 views/lists/subscription/edit.hbs:4 +msgid "Edit subscriber" +msgstr "Edytuj subskrybenta" + +#: views/lists/subscription/edit.hbs:5 +#: views/lists/subscription/import-failed.hbs:5 +msgid "Back to list" +msgstr "Powrót do listy" + +#: views/lists/subscription/edit.hbs:6 +#: views/lists/subscription/import-preview.hbs:6 +#: views/subscription/unsubscribe.hbs:3 lib/helpers.js:26 +#: lib/models/segments.js:11 +msgid "Email address" +msgstr "Adres e-mail" + +#: views/lists/subscription/edit.hbs:16 +msgid "Delete Subscription" +msgstr "Usuń subskrypcję" + +#: views/lists/subscription/import-failed.hbs:3 +msgid "Import status" +msgstr "Status importu" + +#: views/lists/subscription/import-failed.hbs:4 +msgid "Failed addresses" +msgstr "Nieudane adresy" + +#: views/lists/subscription/import-failed.hbs:6 +msgid "see here" +msgstr "zobacz tutaj" + +#: views/lists/subscription/import-failed.hbs:10 +msgid "Fail reason" +msgstr "Przyczyna niepowodzenia" + +#: views/lists/subscription/import-preview.hbs:3 +#: views/lists/subscription/import-preview.hbs:4 +#: views/lists/subscription/import.hbs:3 views/lists/subscription/import.hbs:4 +msgid "Import subscribers" +msgstr "Zaimportuj subskrybentów" + +#: views/lists/subscription/import-preview.hbs:10 views/users/api.hbs:27 +#: views/users/api.hbs:35 views/users/api.hbs:43 views/users/api.hbs:55 +msgid "Example" +msgstr "Przykład" + +#: views/lists/subscription/import-preview.hbs:11 +msgid "Start import" +msgstr "Rozpocznij importowanie" + +#: views/lists/subscription/import.hbs:5 +msgid "CSV File" +msgstr "Plik CSV" + +#: views/lists/subscription/import.hbs:6 +msgid "CSV delimiter" +msgstr "Separator CSV" + +#: views/lists/subscription/import.hbs:7 +msgid "Categorize the imported subscribers as" +msgstr "Skategoryzuj importowanych subskrybentów jako" + +#: views/lists/subscription/import.hbs:8 routes/lists.js:171 +msgid "Subscribed" +msgstr "Subskrybuje" + +#: views/lists/subscription/import.hbs:9 +msgid "Regular subscriber addresses" +msgstr "Regularne adresy subskrybentów" + +#: views/lists/subscription/import.hbs:11 +msgid "Suppressed emails that will be unsubscribed from your list" +msgstr "Pomijane e-maile, które zostaną wypisane z listy" + +#: views/lists/view.hbs:3 +msgid "Subscription Form" +msgstr "Formularz subskrypcji" + +#: views/lists/view.hbs:4 +msgid "List Actions" +msgstr "Lista akcji" + +#: views/lists/view.hbs:8 views/triggers/create-select.hbs:3 +#: views/triggers/create-select.hbs:4 views/triggers/create.hbs:3 +#: views/triggers/create.hbs:4 views/triggers/create.hbs:27 +#: views/triggers/triggers.hbs:3 +msgid "Create Trigger" +msgstr "Utwórz wyzwalacz" + +#: views/lists/view.hbs:9 +msgid "Add Subscriber" +msgstr "Dodaj subskrybenta" + +#: views/lists/view.hbs:10 +msgid "Import Subscribers" +msgstr "Importuj subskrybentów" + +#: views/lists/view.hbs:14 +msgid "Create New Segment" +msgstr "Utwórz nowy segment" + +#: views/lists/view.hbs:15 +msgid "Filter" +msgstr "Filtr" + +#: views/lists/view.hbs:16 +msgid "Subscriptions" +msgstr "Subskrypcje" + +#: views/lists/view.hbs:17 +msgid "Imports" +msgstr "Import" + +#: views/lists/view.hbs:24 routes/campaigns.js:266 routes/lists.js:265 +msgid "Finished" +msgstr "Skończone" + +#: views/lists/view.hbs:26 +msgid "Added" +msgstr "Dodany" + +#: views/lists/view.hbs:27 +msgid "Updated" +msgstr "Zaktualizowano" + +#: views/lists/view.hbs:28 +msgid "Failed" +msgstr "Nie powiodło się" + +#: views/lists/view.hbs:30 +msgid "" +"Are you sure? This action should only be called to resolve stalled imports" +msgstr "" +"Jesteś pewny? Ta czynność powinna byś wywołana tylko w celu rozwiązania " +"impasu importu." + +#: views/lists/view.hbs:31 +msgid "Restart" +msgstr "Uruchom ponownie" + +#: views/partials/codeeditor.hbs:1 views/partials/summernote.hbs:1 +msgid "Template content (HTML)" +msgstr "Zawartość szablonu (HTML)" + +#: views/partials/html-preview.hbs:1 +msgid "Toggle HTML preview" +msgstr "Przełącz podgląd HTML" + +#: views/partials/merge-tag-reference.hbs:1 +msgid "Merge tag reference" +msgstr "Odniesienie merge tag" + +#: views/partials/merge-tag-reference.hbs:2 +msgid "" +"Merge tags are tags that are replaced before sending out the message. The " +"format of the merge tag is the following: [TAG_NAME] or " +"[TAG_NAME/fallback] where fallback is an optional " +"text value used when TAG_NAME is empty." +msgstr "" +"Merge tagi są tagami, które są zastępowane przed wysłaniem wiadomości. " +"Format merge tagu jest następujący: [TAG_NAME] lub " +"[TAG_NAME/fallback] gdzie fallback jest opcjonalną " +"wartością tekstową używaną, gdy TAG_NAME jest pusty." + +#: views/partials/plaintext.hbs:1 +msgid "Template content (plaintext)" +msgstr "Treść szablonu (zwykły tekst)" + +#: views/settings.hbs:5 +msgid "Service Address (URL)" +msgstr "Adres usługi (URL)" + +#: views/settings.hbs:6 +msgid "Enter the URL this service can be reached from" +msgstr "Wprowadź adres URL, z którego można uzyskać tę usługę" + +#: views/settings.hbs:7 +msgid "Admin Email" +msgstr "E-mail Administratora" + +#: views/settings.hbs:8 +msgid "" +"Enter the email address that will be used as \"from\" for system messages" +msgstr "" +"Wprowadź adres e-mail, który będzie używany jako \"from \" dla wiadomości " +"systemowych" + +#: views/settings.hbs:9 +msgid "Disable WYSIWYG editor" +msgstr "Wyłącz edytor WYSIWYG" + +#: views/settings.hbs:10 +msgid "If checked then message editor displays HTML code without the preview" +msgstr "Jeśli zaznaczone, edytor wiadomości wyświetla kod HTML bez podglądu" + +#: views/settings.hbs:11 +msgid "Disable subscription confirmation messages" +msgstr "Wyłącz wiadomości potwierdzające subskrypcję" + +#: views/settings.hbs:12 +msgid "" +"If checked then do not send a confirmation message that states the " +"subscriber is now subscribed or unsubscribed. This does not disable double " +"opt-in messages." +msgstr "" +"Jeśli jest zaznaczone, nie wysyłaj wiadomości potwierdzającej, że " +"subskrybent jest teraz subskrybowany lub nie subskrybowany. Nie wyłącza to " +"podwójnych wiadomości opt-in." + +#: views/settings.hbs:13 +msgid "Tracking ID" +msgstr "Identyfikator śledzenia" + +#: views/settings.hbs:14 +msgid "Enter Google Analytics tracking code" +msgstr "Wpisz kod śledzenia Google Analytics" + +#: views/settings.hbs:15 +msgid "Frontpage shout out" +msgstr "" + +#: views/settings.hbs:16 +msgid "HTML code shown in the front page header section" +msgstr "Kod HTML wyświetlany w sekcji nagłówka na pierwszej stronie" + +#: views/settings.hbs:17 +msgid "Campaign defaults" +msgstr "Domyślne ustawienia kampanii" + +#: views/settings.hbs:18 +msgid "Sender name" +msgstr "Nazwa nadawcy" + +#: views/settings.hbs:19 +msgid "Sender name, eg. My Awesome Company Ltd." +msgstr "Nazwa nadawcy, np. My Awesome Company Ltd." + +#: views/settings.hbs:20 +msgid "Default address" +msgstr "Domyślny adres" + +#: views/settings.hbs:21 +msgid "" +"Contact address to provide, eg. 1234 Main Street, Anywhere, MA 01234, USA" +msgstr "" +"Adres kontaktowy do dostarczenia, np. 1234 Main Street, Anywhere, MA 01234, " +"USA" + +#: views/settings.hbs:22 +msgid "Default \"from name\"" +msgstr "Domyślna nazwa \"from\"" + +#: views/settings.hbs:24 +msgid "Default \"from\" email" +msgstr "Domyślny e-mail \"from\"" + +#: views/settings.hbs:26 +msgid "Default \"subject line\"" +msgstr "Domyślny temat \"from\"" + +#: views/settings.hbs:28 +msgid "Default homepage (URL)" +msgstr "Domyślna strona główna (URL)" + +#: views/settings.hbs:29 +msgid "URL to redirect the subscribed users to, eg. http://example.com/" +msgstr "Adres URL do przekierowania subskrybentów do, np. http://example.com/" + +#: views/settings.hbs:30 +msgid "Mailer Settings" +msgstr "Ustawienia Mailera" + +#: views/settings.hbs:31 +msgid "These settings are required to send out e-mail messages" +msgstr "Te ustawienia są wymagane do wysyłania wiadomości e-mail" + +#: views/settings.hbs:32 +msgid "SMTP" +msgstr "SMTP" + +#: views/settings.hbs:33 +msgid "AWS SES" +msgstr "AWS SES" + +#: views/settings.hbs:34 +msgid "Use SMTP for sending mail" +msgstr "Użyj SMTP do wysyłania poczty" + +#: views/settings.hbs:35 +msgid "Hostname" +msgstr "Nazwa hosta" + +#: views/settings.hbs:36 +msgid "Port" +msgstr "Port" + +#: views/settings.hbs:37 +msgid "Port, eg. 465. Autodetected if left blank" +msgstr "Port, np. 465. Autodetekcja, jeśli pozostanie pusta" + +#: views/settings.hbs:38 +msgid "Encryption" +msgstr "Szyfrowanie" + +#: views/settings.hbs:39 +msgid "Disable SMTP authentication" +msgstr "Wyłącz uwierzytelnianie SMTP" + +#: views/settings.hbs:40 views/users/forgot.hbs:9 views/users/login.hbs:4 +#: views/users/login.hbs:5 +msgid "Username" +msgstr "Nazwa użytkownika" + +#: views/settings.hbs:41 +msgid "Username, eg. myaccount@example.com" +msgstr "Nazwa użytkownika, np. myaccount@example.com" + +#: views/settings.hbs:42 views/settings.hbs:43 views/users/login.hbs:6 +#: views/users/login.hbs:7 +msgid "Password" +msgstr "Hasło" + +#: views/settings.hbs:44 +msgid "Use SES API for sending mail" +msgstr "Użyj interfejsu API SES do wysyłania poczty" + +#: views/settings.hbs:45 +msgid "Access Key" +msgstr "Access Key" + +#: views/settings.hbs:46 +msgid "AWS Access Key Id" +msgstr "AWS Access Key Id" + +#: views/settings.hbs:47 +msgid "Secret Key" +msgstr "Secret Key" + +#: views/settings.hbs:48 +msgid "AWS Secret Access Key" +msgstr "AWS Secret Access Key" + +#: views/settings.hbs:49 +msgid "Region" +msgstr "Region" + +#: views/settings.hbs:50 +msgid "Checking" +msgstr "Sprawdzanie" + +#: views/settings.hbs:51 +msgid "Check Mailer config" +msgstr "Sprawdź konfigurację Mailera" + +#: views/settings.hbs:52 +msgid "Don't have an SMTP account yet? Create a free SendPulse account" +msgstr "Nie masz jeszcze konta SMTP? Utwórz darmowe konto SendPulse" + +#: views/settings.hbs:53 +msgid "here" +msgstr "tutaj" + +#: views/settings.hbs:54 +msgid "Advanced Mailer settings" +msgstr "Zaawansowane ustawienia Mailera" + +#: views/settings.hbs:55 +msgid "Log SMTP transactions" +msgstr "Loguj transakcje SMTP" + +#: views/settings.hbs:56 +msgid "Allow self-signed certificates" +msgstr "Zezwalaj na certyfikaty z podpisem własnym" + +#: views/settings.hbs:57 +msgid "Max connections" +msgstr "Maks. połączeń" + +#: views/settings.hbs:58 +msgid "The count of max connections, eg. 10" +msgstr "Liczba maksymalnych połączeń, np. 10" + +#: views/settings.hbs:59 +msgid "" +"The count of maximum simultaneous connections to make against the SMTP " +"server (defaults to 5). This limit is per sending process." +msgstr "" +"Liczba maksymalnych równoczesnych połączeń z serwerem SMTP (domyślnie 5). " +"Ten limit dotyczy procesu wysyłania." + +#: views/settings.hbs:60 +msgid "Max messages" +msgstr "Maks. wiadomości" + +#: views/settings.hbs:61 +msgid "The count of max messages, eg. 100" +msgstr "Liczba maksymalnych wiadomości, np. 100" + +#: views/settings.hbs:62 +msgid "" +"he number of messages to send through a single connection before the " +"connection is closed and reopened (defaults to 100)" +msgstr "" +"Liczba wiadomości do wysłania za pośrednictwem jednego połączenia, zanim " +"połączenie zostanie zamknięty i ponownie otwarty (domyślnie 100)" + +#: views/settings.hbs:63 +msgid "Throttling" +msgstr "Dławienie (Throttling)" + +#: views/settings.hbs:64 +msgid "Messages per hour eg. 1000" +msgstr "Wiadomości na godzinę, np. 1000" + +#: views/settings.hbs:65 +msgid "" +"Maximum number of messages to send in an hour. Leave empty or zero for no " +"throttling. If your provider uses a different speed limit (messages/minute " +"or messages/second) then convert this limit into messages/hour (1m/s => " +"3600m/h). This limit is per sending process." +msgstr "" +"Maksymalna liczba wiadomości do wysłania w ciągu godziny. Pozostaw puste lub " +"zero dla barku dławienia. Jeśli Twój dostawca wykorzystuje inny limit " +"prędkości (wiadomości/minutę lub wiadomości/sekundę), zamień ten limit na " +"wiadomości/godzinę (1m/s => 3600m/h). Ten limit dotyczy procesu wysyłania." + +#: views/settings.hbs:66 +msgid "VERP bounce handling" +msgstr "Obsługa odbijania VERP" + +#: views/settings.hbs:67 +msgid "" +"Mailtrain is able to use VERP based routing to detect bounces. In this case " +"the message is sent to the recipient using a custom VERP address as the " +"return path of the message. If the message is not accepted a bounce email is " +"sent to this special VERP address and thus a bounce is detected." +msgstr "" +"Mailtrain może wykorzystywać routing oparty na VERP do wykrywania odbić. W " +"takim przypadku wiadomość zostanie wysłana do adresata przy użyciu " +"niestandardowego adresu VERP jako ścieżki powrotnej wiadomości. Jeśli " +"wiadomość nie zostanie przyjęta, wiadomość odrzucona wiadomość zostanie " +"wysłana na specjalny adres VERP, a tym samym wykryte zostanie odrzucenie." + +#: views/settings.hbs:68 +msgid "" +"To get VERP working you need to set up a DNS MX record that points to your " +"Mailtrain hostname. You must also ensure that Mailtrain VERP interface is " +"available from port 25 of your server (port 25 usually requires root user " +"privileges). This way if anyone tries to send email to someuser@verp-" +"hostname then the email should end up to this server." +msgstr "" +"Aby uruchomić działanie VERP, musisz skonfigurować rekord MX DNS, który " +"wskazuje twoją nazwę hosta Mailtrain. Musisz także upewnić się, że interfejs " +"Mailtrain VERP jest dostępny z portu 25 serwera (port 25 zwykle wymaga " +"uprawnień użytkownika root). W ten sposób, jeśli ktoś spróbuje wysłać " +"wiadomość e-mail do someuser@verp-hostname, wówczas wiadomość e-mail powinna " +"dotrzeć do tego serwera." + +#: views/settings.hbs:69 +msgid "" +"VERP usually only works if you are using your own SMTP server. Regular relay " +"services (SES, SparkPost, Gmail etc.) tend to remove the VERP address from " +"the message." +msgstr "" +"VERP zwykle działa tylko wtedy, gdy używasz własnego serwera SMTP. Regularne " +"usługi przekazywania (SES, SparkPost, Gmail itp.) Mają tendencję do usuwania " +"adresu VERP z wiadomości." + +#: views/settings.hbs:70 +msgid "Use VERP to catch bounces" +msgstr "Użyj VERP do wykrycia odbicia" + +#: views/settings.hbs:71 +msgid "Server hostname" +msgstr "Nazwa hosta serwera" + +#: views/settings.hbs:72 +msgid "The VERP server hostname, eg. bounces.example.com" +msgstr "Nazwa hosta serwera VERP, np. bounces.example.com" + +#: views/settings.hbs:73 +msgid "" +"VERP bounce handling server hostname. This hostname is used in the SMTP " +"envelope FROM address and the MX DNS records should point to this server" +msgstr "" +"Nazwa hosta serwera obsługi odrzutów VERP. Ta nazwa hosta jest używana w " +"SMTP jako \"od\", a rekordy MX DNS powinny wskazywać na ten serwer" + +#: views/settings.hbs:74 +msgid "" +"VERP bounce handling server is not enabled. Modify your server configuration " +"file and restart server to enable it" +msgstr "" +"Serwer obsługi odrzutów VERP nie jest włączony. Zmodyfikuj plik " +"konfiguracyjny serwera i zrestartuj serwer, aby go włączyć." + +#: views/settings.hbs:75 +msgid "GPG Signing" +msgstr "Podpis GPG" + +#: views/settings.hbs:76 +msgid "" +"Only messages that are encrypted can be signed. Subsribers who have not set " +"up a GPG public key in their profile receive normal email messages. Users " +"with GPG key set receive encrypted messages and if you have signing key also " +"set, the messages are signed with this key." +msgstr "" +"Tylko wiadomości, które są zaszyfrowane, mogą być podpisane. Subskrybenci, " +"którzy nie ustawili klucza publicznego GPG w swoim profilu, otrzymują zwykłe " +"wiadomości e-mail. Użytkownicy z zestawem kluczy GPG otrzymują zaszyfrowane " +"wiadomości i jeśli masz ustawiony również klucz podpisu, wiadomości są " +"podpisywane tym kluczem." + +#: views/settings.hbs:77 +msgid "" +"Do not use sensitive keys here. The private key and passphrase are not " +"encrypted in the database." +msgstr "" +"Nie używaj tutaj wrażliwych kluczy. Klucz prywatny i hasło nie są szyfrowane " +"w bazie danych." + +#: views/settings.hbs:78 +msgid "Private Key Passphrase" +msgstr "Hasło klucza prywatnego" + +#: views/settings.hbs:79 +msgid "Passphrase for the key if set" +msgstr "Hasło dla klucza, jeśli jest ustawione" + +#: views/settings.hbs:80 +msgid "Only fill this if your private key is encrypted with a passphrase" +msgstr "Wypełnij to tylko, jeśli Twój klucz prywatny jest zaszyfrowany hasłem" + +#: views/settings.hbs:81 +msgid "GPG Private Key" +msgstr "Klucz prywatny GPG" + +#: views/settings.hbs:83 +msgid "" +"This value is optional. If you do not provide a private key GPG encrypted " +"messages are sent without signing." +msgstr "" +"Ta wartość jest opcjonalna. Jeśli nie podasz klucza prywatnego GPG, " +"zaszyfrowane wiadomości są wysyłane bez podpisu." + +#: views/settings.hbs:84 +msgid "DKIM Signing by ZoneMTA" +msgstr "Podpisywanie DKIM przez ZoneMTA" + +#: views/settings.hbs:85 +msgid "" +"If you are using ZoneMTA then Mailtrain can provide a DKIM key for signing " +"all outgoing messages. Other services usually provide their own means to " +"DKIM sign your messages" +msgstr "" +"Jeśli używasz ZoneMTA, Mailtrain może dostarczyć klucz DKIM do podpisania " +"wszystkich wychodzących wiadomości. Inne usługi zwykle zapewniają własne " +"środki do podpisywania wiadomości przez DKIM" + +#: views/settings.hbs:86 +msgid "" +"Do not use sensitive keys here. The private key is not encrypted in the " +"database." +msgstr "" +"Nie używaj tutaj wrażliwych kluczy. Klucz prywatny nie jest zaszyfrowany w " +"bazie danych." + +#: views/settings.hbs:87 +msgid "ZoneMTA DKIM API Key" +msgstr "Klucz API ZoneMTA DKIM" + +#: views/settings.hbs:88 +msgid "Some secret value" +msgstr "Tajna wartość" + +#: views/settings.hbs:89 +msgid "" +"Secret value known to ZoneMTA for requesting DKIM key information. If this " +"value was generated by the Mailtrain installation script then you can keep " +"it as it is" +msgstr "" +"Tajna wartość znana ZoneMTA dla żądań klucza DKIM. Jeśli ta wartość została " +"wygenerowana przez skrypt instalacyjny Mailtrain, możesz zachować ją w " +"niezmienionym stanie" + +#: views/settings.hbs:90 +msgid "DKIM domain" +msgstr "Domena DKIM" + +#: views/settings.hbs:91 +msgid "Domain name for the DKIM key" +msgstr "Nazwa domeny dla klucza DKIM" + +#: views/settings.hbs:92 +msgid "Leave blank to use the sender email address domain" +msgstr "Pozostaw puste, aby użyć domeny adresu e-mail nadawcy" + +#: views/settings.hbs:93 views/settings.hbs:94 +msgid "DKIM key selector" +msgstr "Selektor klucza DKIM" + +#: views/settings.hbs:95 +msgid "Signing is disabled without a valid selector value" +msgstr "Podpisywanie jest wyłączone bez prawidłowej wartości selektora" + +#: views/settings.hbs:96 +msgid "DKIM Private Key" +msgstr "Klucz prywatny DKIM" + +#: views/settings.hbs:98 +msgid "" +"This value is optional. If you do not provide a private key then messages " +"are not signed." +msgstr "" +"Ta wartość jest opcjonalna. Jeśli nie dostarczysz klucza prywatnego, " +"wiadomości nie będą podpisane." + +#: views/subscription/confirm-notice.hbs:1 views/subscription/subscribe.hbs:1 +msgid "Warning!" +msgstr "Ostrzeżenie!" + +#: views/subscription/confirm-notice.hbs:2 +msgid "If JavaScript was not enabled then no confirmation message was sent" +msgstr "Jeśli JavaScript nie był włączony, nie wysłano żadnego potwierdzenia" + +#: views/subscription/confirm-notice.hbs:3 +msgid "Almost finished." +msgstr "Prawie gotowe." + +#: views/subscription/confirm-notice.hbs:4 +msgid "" +"We need to confirm your email address. To complete the subscription process, " +"please click the link in the email we just sent you." +msgstr "" +"Musimy potwierdzić swój adres e-mail. Aby zakończyć proces subskrypcji, " +"kliknij link w wiadomości e-mail, którą właśnie wysłaliśmy." + +#: views/subscription/confirm-notice.hbs:5 +#: views/subscription/unsubscribe-notice.hbs:3 +#: views/subscription/updated-notice.hbs:3 +msgid "return to our website" +msgstr "powrót do strony" + +#: views/subscription/manage-address.hbs:1 +msgid "Update your Email Address" +msgstr "Zaktualizuj swój adres e-mail" + +#: views/subscription/manage-address.hbs:2 +msgid "Existing Email Address" +msgstr "Istniejący adres e-mail" + +#: views/subscription/manage-address.hbs:3 +msgid "New Email Address" +msgstr "Nowy adres e-mail" + +#: views/subscription/manage-address.hbs:4 +msgid "Your new email address" +msgstr "Twój nowy adres e-mail" + +#: views/subscription/manage-address.hbs:5 +msgid "" +"You will receive a confirmation request to your new email address that you " +"need to accept before your email is actually changed" +msgstr "" +"Otrzymasz prośbę o potwierdzenie na nowy adres e-mail, który musisz " +"zaakceptować przed faktyczną zmianą adresu e-mail" + +#: views/subscription/manage-address.hbs:6 +msgid "Update Email Address" +msgstr "Zaktualizuj adres e-mail" + +#: views/subscription/manage.hbs:1 +msgid "Update your preferences" +msgstr "Zaktualizuj swoje preferencje" + +#: views/subscription/manage.hbs:3 +msgid "want to change it?" +msgstr "chcesz to zmienić?" + +#: views/subscription/manage.hbs:6 views/subscription/subscribe.hbs:6 +msgid "Download signature verification key" +msgstr "Pobierz klucz weryfikacji podpisu" + +#: views/subscription/manage.hbs:8 views/subscription/subscribe.hbs:8 +msgid "" +"Insert your GPG public key here to encrypt messages sent to your address" +msgstr "" +"Wstaw tutaj swój publiczny klucz GPG, aby zaszyfrować wiadomości wysłane na " +"Twój adres" + +#: views/subscription/manage.hbs:9 views/subscription/subscribe.hbs:9 +msgid "optional" +msgstr "opcjonalny" + +#: views/subscription/manage.hbs:11 +msgid "Update Profile" +msgstr "Zaktualizuj profil" + +#: views/subscription/subscribe.hbs:2 +msgid "JavaScript must be enabled in order for the subscription form to work" +msgstr "" +"Aby formularz subskrypcji działał, musi być włączona obsługa JavaScript" + +#: views/subscription/subscribe.hbs:11 +msgid "Subscribe to list" +msgstr "Zapisz się do listy" + +#: views/subscription/subscribed.hbs:3 +msgid "Thank you for subscribing!" +msgstr "Dziękujemy za subskrypcję!" + +#: views/subscription/subscribed.hbs:4 +msgid "continue to our website" +msgstr "przejdź na naszą stronę internetową" + +#: views/subscription/unsubscribe-notice.hbs:1 +msgid "Unsubscribe Successful" +msgstr "Anulowanie subskrypcji przebiegło pomyślnie" + +#: views/subscription/unsubscribe-notice.hbs:2 +msgid "You have been removed from:" +msgstr "Zostałeś usunięty z:" + +#: views/subscription/unsubscribe.hbs:2 +msgid "Enter your email address to unsubscribe from:" +msgstr "Wpisz swój adres e-mail, aby zrezygnować z subskrypcji:" + +#: views/subscription/updated-notice.hbs:1 +msgid "Profile Updated" +msgstr "Profil zaktualizowany" + +#: views/subscription/updated-notice.hbs:2 +msgid "Your profile information has been updated." +msgstr "Twoje informacje profilowe zostały zaktualizowane." + +#: views/templates/create.hbs:2 views/templates/edit.hbs:2 +#: views/templates/templates.hbs:2 views/templates/templates.hbs:4 +#: lib/tools.js:115 +msgid "Templates" +msgstr "Szablony" + +#: views/templates/create.hbs:3 views/templates/create.hbs:4 +#: views/templates/create.hbs:12 views/templates/templates.hbs:3 +msgid "Create Template" +msgstr "Utwórz szablon" + +#: views/templates/create.hbs:5 views/templates/edit.hbs:6 +msgid "Template name" +msgstr "Nazwa szablonu" + +#: views/templates/create.hbs:6 views/templates/edit.hbs:7 +msgid "Name for this template, eg. Newsletter" +msgstr "Nazwa tego szablonu, np. Newsletter" + +#: views/templates/create.hbs:7 +msgid "HTML Editor" +msgstr "Edytor HTML" + +#: views/templates/create.hbs:10 views/templates/edit.hbs:9 +msgid "Optional comments about this template" +msgstr "Opcjonalne komentarze na temat tego szablonu" + +#: views/templates/edit.hbs:3 views/templates/edit.hbs:4 +msgid "Edit Template" +msgstr "Edytuj szablon" + +#: views/templates/edit.hbs:5 +msgid "Back to templates" +msgstr "Powrót do szablonów" + +#: views/templates/edit.hbs:11 +msgid "Delete Template" +msgstr "Usuń Szablon" + +#: views/triggers/create-select.hbs:2 views/triggers/create.hbs:2 +#: views/triggers/edit.hbs:2 views/triggers/triggered.hbs:2 +#: views/triggers/triggers.hbs:2 views/triggers/triggers.hbs:4 +msgid "Automation Triggers" +msgstr "Automatyczne wyzwalacze" + +#: views/triggers/create-select.hbs:5 +msgid "Select a list for the trigger" +msgstr "Wybierz listę dla wyzwalacza" + +#: views/triggers/create.hbs:5 views/triggers/edit.hbs:6 +msgid "Trigger name" +msgstr "Nazwa wyzwalacza" + +#: views/triggers/create.hbs:6 views/triggers/edit.hbs:7 +msgid "Name for this trigger, eg. Inactive subscribers" +msgstr "Nazwa tego wyzwalacza, np. Nieaktywni subskrybenci" + +#: views/triggers/create.hbs:8 views/triggers/edit.hbs:9 +msgid "Optional comments about this trigger" +msgstr "Opcjonalne komentarze na temat tego wyzwalacza" + +#: views/triggers/create.hbs:12 views/triggers/edit.hbs:14 +msgid "Trigger rule" +msgstr "Reguła wyzwalacza" + +#: views/triggers/create.hbs:13 views/triggers/edit.hbs:15 +msgid "Trigger fires" +msgstr "Aktywacja wyzwalacza" + +#: views/triggers/create.hbs:14 views/triggers/edit.hbs:16 +msgid "days after:" +msgstr "dni po:" + +#: views/triggers/create.hbs:15 views/triggers/edit.hbs:17 +msgid "Subscription" +msgstr "Subskrypcja" + +#: views/triggers/create.hbs:16 views/triggers/create.hbs:21 +#: views/triggers/edit.hbs:18 views/triggers/edit.hbs:23 +msgid "Event" +msgstr "Zdarzenie" + +#: views/triggers/create.hbs:18 views/triggers/create.hbs:19 +#: views/triggers/create.hbs:25 views/triggers/edit.hbs:20 +#: views/triggers/edit.hbs:21 views/triggers/edit.hbs:27 +msgid "Campaign" +msgstr "Kampania" + +#: views/triggers/create.hbs:23 views/triggers/edit.hbs:25 +msgid "Trigger action" +msgstr "Czynność wyzwalacza" + +#: views/triggers/create.hbs:24 views/triggers/edit.hbs:26 +msgid "Send campaign" +msgstr "Wyślij kampanię" + +#: views/triggers/edit.hbs:3 views/triggers/edit.hbs:4 +msgid "Edit Trigger" +msgstr "Edycja wyzwalacza" + +#: views/triggers/edit.hbs:5 +msgid "Back to triggers" +msgstr "Powrót do wyzwalaczy" + +#: views/triggers/edit.hbs:11 +msgid "Trigger is enabled" +msgstr "Wyzwalacz jest włączony" + +#: views/triggers/edit.hbs:29 +msgid "Delete Trigger" +msgstr "Usuń wyzwalacz" + +#: views/triggers/triggered.hbs:3 +msgid "Triggered" +msgstr "Wywołany" + +#: views/triggers/triggered.hbs:4 +msgid "Triggered subscribers" +msgstr "Wywołani subskrybenci" + +#: views/triggers/triggered.hbs:5 +msgid "Subscribers who caused this trigger to fire" +msgstr "Subskrybenci, którzy spowodowali uruchomienie tego wyzwalacza" + +#: views/triggers/triggered.hbs:9 +msgid "Triggered time" +msgstr "Czas wywołanych" + +#: views/triggers/triggers.hbs:9 +msgid "Trigger" +msgstr "Wyzwalacz" + +#: views/triggers/triggers.hbs:10 +msgid "Target Campaign" +msgstr "Cel kampanii" + +#: views/triggers/triggers.hbs:11 +msgid "Triggered count" +msgstr "Liczba wyzwoleń" + +#: views/triggers/triggers.hbs:12 +msgid "Enabled" +msgstr "Włączone" + +#: views/triggers/triggers.hbs:13 +msgid "Disabled" +msgstr "Wyłączone" + +#: views/users/account.hbs:4 +msgid "This account is managed through LDAP." +msgstr "To konto jest zarządzane przez LDAP." + +#: views/users/account.hbs:5 +msgid "Associated Email Address" +msgstr "Powiązany adres e-mail" + +#: views/users/account.hbs:8 +msgid "Your e-mail address" +msgstr "Twój adres e-mail" + +#: views/users/account.hbs:9 +msgid "" +"This address is used for account recovery in case you lose your password" +msgstr "Ten adres służy do odzyskiwania konta na wypadek utraty hasła" + +#: views/users/account.hbs:10 +msgid "Password change" +msgstr "Zmiana hasła" + +#: views/users/account.hbs:11 +msgid "" +"You only need to fill out this form if you want to change your current " +"password" +msgstr "Wypełnij ten formularz, jeśli chcesz zmienić swoje obecne hasło" + +#: views/users/account.hbs:12 views/users/account.hbs:13 +msgid "Current Password" +msgstr "Aktualne hasło" + +#: views/users/account.hbs:14 views/users/account.hbs:15 +#: views/users/reset.hbs:6 views/users/reset.hbs:7 +msgid "New Password" +msgstr "Nowe hasło" + +#: views/users/account.hbs:16 +msgid "Confirm Password" +msgstr "Powtórz hasło" + +#: views/users/account.hbs:17 views/users/reset.hbs:8 +msgid "Confirm New Password" +msgstr "Potwierdź nowe hasło" + +#: views/users/api.hbs:4 +msgid "Are you sure? Resetting would invalidate the currently existing token." +msgstr "Jesteś pewny? Zresetowanie unieważni istniejący token." + +#: views/users/api.hbs:5 +msgid "Are you sure?" +msgstr "Jesteś pewny?" + +#: views/users/api.hbs:6 +msgid "Reset Access Token" +msgstr "Zresetuj Access Token" + +#: views/users/api.hbs:7 +msgid "Generate Access Token" +msgstr "Wygeneruj Access Token" + +#: views/users/api.hbs:8 +msgid "Personal access token:" +msgstr "Osobisty Access Token:" + +#: views/users/api.hbs:9 +msgid "Access token not yet generated" +msgstr "Access token nie został jeszcze wygenerowany" + +#: views/users/api.hbs:10 +msgid "Notes about the API" +msgstr "Uwagi na temat interfejsu API" + +#: views/users/api.hbs:11 +msgid "" +"API response is a JSON structure with error and data properties. If the response error has a value set then " +"the request failed." +msgstr "" +"Odpowiedź API to struktura JSON z właściwościami error i " +"data. Jeśli odpowiedź error ma ustawioną " +"wartość, to żądanie nie powiodło się." + +#: views/users/api.hbs:12 +msgid "" +"You need to define proper Content-Type when making a request. " +"You can either use application/x-www-form-urlencoded for normal " +"form data or application/json for a JSON payload. Using " +"multipart/form-data is not supported." +msgstr "" +"Musisz zdefiniować właściwy Content-Type podczas wysyłania " +"zapytania. Możesz użyć application/x-www-form-urlencoded dla " +"normalnych danych formularza lub application/json dla JSON " +"payload. Używanie multipart/form-data nie jest obsługiwane." + +#: views/users/api.hbs:13 +msgid "Add subscription" +msgstr "Dodaj subskrypcję" + +#: views/users/api.hbs:14 +msgid "" +"This API call either inserts a new subscription or updates existing. Fields " +"not included are left as is, so if you update only LAST_NAME value, then " +"FIRST_NAME is kept untouched for an existing subscription." +msgstr "" +"To wywołanie API wprowadza nową subskrypcję lub aktualizacje istniejące. " +"Pola nieuwzględnione pozostają bez zmian, więc jeśli zaktualizujesz tylko " +"wartość LAST_NAME, to FIRST_NAME pozostanie nietknięte dla istniejącej " +"subskrypcji." + +#: views/users/api.hbs:15 views/users/api.hbs:17 views/users/api.hbs:30 +#: views/users/api.hbs:32 views/users/api.hbs:38 views/users/api.hbs:40 +#: views/users/api.hbs:46 views/users/api.hbs:48 +msgid "arguments" +msgstr "argumenty" + +#: views/users/api.hbs:16 views/users/api.hbs:31 views/users/api.hbs:39 +#: views/users/api.hbs:47 +msgid "your personal access token" +msgstr "twój osobisty token dostępu" + +#: views/users/api.hbs:18 views/users/api.hbs:33 views/users/api.hbs:41 +msgid "subscriber's email address" +msgstr "subscriber's email addressadres e-mail subskrybenta" + +#: views/users/api.hbs:19 views/users/api.hbs:34 views/users/api.hbs:42 +#: views/users/api.hbs:50 +msgid "required" +msgstr "wymagany" + +#: views/users/api.hbs:20 +msgid "subscriber's first name" +msgstr "imię subskrybenta" + +#: views/users/api.hbs:21 +msgid "subscriber's last name" +msgstr "nazwisko subskrybenta" + +#: views/users/api.hbs:22 +msgid "" +"subscriber's timezone (eg. \"Europe/Tallinn\", \"PST\" or \"UTC\"). If not " +"set defaults to \"UTC\"" +msgstr "" +"strefa czasowa subskrybenta (np. \"Europa/Tallinn\", \"PST\" lub \"UTC\"). " +"Jeśli nie jest ustawiony domyślnie „UTC”" + +#: views/users/api.hbs:23 +msgid "" +"custom field value. Use yes/no for option group values (checkboxes, radios, " +"drop downs)" +msgstr "" +"niestandardowa wartość pola. Użyj wartości tak/nie dla wartości grup opcji " +"(checkbox, radio, lista rozwijana)" + +#: views/users/api.hbs:24 +msgid "Additional POST arguments" +msgstr "Dodatkowe argumenty POST" + +#: views/users/api.hbs:25 +msgid "" +"set to \"yes\" if you want to make sure the email is marked as subscribed " +"even if it was previously marked as unsubscribed. If the email was already " +"unsubscribed/blocked then subscription status is not changed" +msgstr "" +"ustawić na \"tak \", jeśli chcesz się upewnić, że wiadomość e-mail została " +"oznaczona jako zasubskrybowana, nawet jeśli została wcześniej oznaczona jako " +"niesubskrybowana. Jeśli e-mail został już wypisany/zablokowane, status " +"subskrypcji nie zostanie zmieniony" + +#: views/users/api.hbs:26 +msgid "" +"set to \"yes\" if you want to send confirmation email to the subscriber " +"before actually marking as subscribed" +msgstr "" +"ustaw na \"tak\", jeśli chcesz wysłać wiadomość e-mail z potwierdzeniem do " +"subskrybenta, zanim faktycznie zostaniesz oznaczony jako zasubskrybowany" + +#: views/users/api.hbs:28 +msgid "Remove subscription" +msgstr "Usuń subskrypcję" + +#: views/users/api.hbs:29 +msgid "This API call marks a subscription as unsubscribed" +msgstr "To wywołanie API oznacza subskrypcję jako niesubskrybowaną" + +#: views/users/api.hbs:36 +msgid "Delete subscription" +msgstr "Usuń subskrypcję" + +#: views/users/api.hbs:37 +msgid "This API call deletes a subscription" +msgstr "To wywołanie API usuwa subskrypcję" + +#: views/users/api.hbs:44 +msgid "Add new custom field" +msgstr "Dodaj nowe niestandardowe pole" + +#: views/users/api.hbs:45 +msgid "This API call creates a new custom field for a list." +msgstr "To wywołanie API tworzy nowe niestandardowe pole dla listy." + +#: views/users/api.hbs:49 +msgid "field name" +msgstr "nazwa pola" + +#: views/users/api.hbs:51 +msgid "one of the following types:" +msgstr "jeden z następujących typów:" + +#: views/users/api.hbs:52 +msgid "" +"If the type is 'option' then you also need to specify the parent element ID" +msgstr "Jeśli typ to \"option\", musisz również podać ID elementu nadrzędnego" + +#: views/users/api.hbs:53 +msgid "" +"Template for the group element. If not set, then values of the elements are " +"joined with commas" +msgstr "" +"Szablon dla elementu grupy. Jeśli nie jest ustawione, wartości elementów są " +"połączone przecinkami" + +#: views/users/api.hbs:54 +msgid "" +"if not visible then the subscriber can not view or modify this value at the " +"profile page" +msgstr "" +"jeśli niewidoczny, subskrybent nie może wyświetlić ani zmodyfikować tej " +"wartości na stronie profilu" + +#: views/users/forgot.hbs:3 views/users/reset.hbs:3 +msgid "Password Reset" +msgstr "Resetowanie hasła" + +#: views/users/forgot.hbs:4 +msgid "Reset your password?" +msgstr "Nie pamiętasz hasła?" + +#: views/users/forgot.hbs:5 +msgid "Accounts are managed through LDAP." +msgstr "Konta są zarządzane przez LDAP." + +#: views/users/forgot.hbs:6 views/users/reset.hbs:10 +msgid "Reset Password" +msgstr "Resetuj hasło" + +#: views/users/forgot.hbs:7 +msgid "" +"Please provide the username or email address that you used when you signed " +"up for your Mailtrain account." +msgstr "" +"Podaj nazwę użytkownika lub adres e-mail użyty podczas rejestracji konta " +"Mailtrain." + +#: views/users/forgot.hbs:8 +msgid "We will send you an email that will allow you to reset your password." +msgstr "Wyślemy Ci wiadomość e-mail, która pozwoli Ci zresetować hasło." + +#: views/users/forgot.hbs:10 +msgid "Username or email address" +msgstr "Nazwa użytkownika lub adres e-mail" + +#: views/users/forgot.hbs:11 +msgid "Send verification email" +msgstr "Wyślij email weryfikacyjny" + +#: views/users/login.hbs:8 +msgid "Remember me" +msgstr "Zapamiętaj mnie" + +#: views/users/login.hbs:11 views/users/login.hbs:12 +msgid "Forgot password?" +msgstr "Zapomniałeś hasła?" + +#: views/users/reset.hbs:4 +msgid "Choose your new password" +msgstr "Wybierz nowe hasło" + +#: views/users/reset.hbs:5 +msgid "Please enter a new password." +msgstr "Wprowadź nowe hasło." + +#: lib/feed.js:31 +msgid "Bad status code %s" +msgstr "Nieprawidłowy kod statusu %s" + +#: lib/helpers.js:17 +msgid "URL that points to the unsubscribe page" +msgstr "Adres URL wskazujący stronę rezygnacji z subskrypcji" + +#: lib/helpers.js:20 +msgid "URL that points to the preferences page of the subscriber" +msgstr "Adres URL wskazujący stronę preferencji subskrybenta" + +#: lib/helpers.js:23 +msgid "URL to preview the message in a browser" +msgstr "URL, aby wyświetlić podgląd wiadomości w przeglądarce" + +#: lib/helpers.js:29 lib/models/segments.js:31 +msgid "First name" +msgstr "Imię" + +#: lib/helpers.js:32 lib/models/segments.js:35 +msgid "Last name" +msgstr "Nazwisko" + +#: lib/helpers.js:35 +msgid "Full name (first and last name combined)" +msgstr "Imię i nazwisko" + +#: lib/helpers.js:38 +msgid "Unique ID that identifies the recipient" +msgstr "Unikalny identyfikator identyfikujący odbiorcę" + +#: lib/helpers.js:41 +msgid "Unique ID that identifies the list used for this campaign" +msgstr "Unikalny identyfikator identyfikujący listę użytą w tej kampanii" + +#: lib/helpers.js:44 +msgid "Unique ID that identifies current campaign" +msgstr "Unikalny identyfikator identyfikujący bieżącą kampanię" + +#: lib/mailer.js:215 +msgid "Invalid mail transport" +msgstr "Nieprawidłowy transport poczty" + +#: lib/models/campaigns.js:271 lib/models/campaigns.js:298 +#: lib/models/campaigns.js:371 lib/models/campaigns.js:494 +#: lib/models/campaigns.js:752 lib/models/campaigns.js:881 +msgid "Missing Campaign ID" +msgstr "Brakujący identyfikator kampanii" + +#: lib/models/campaigns.js:407 +msgid "Emtpy or too large attahcment" +msgstr "Pusty lub zbyt duży załącznik" + +#: lib/models/campaigns.js:573 lib/models/campaigns.js:761 +msgid "Campaign Name must be set" +msgstr "Nazwa kampanii musi być ustawiona" + +#: lib/models/campaigns.js:577 +msgid "RSS URL must be set and needs to be a valid URL" +msgstr "" +"Adres URL kanału RSS musi być ustawiony i musi być prawidłowym adresem URL" + +#: lib/models/campaigns.js:730 +msgid "Selected template not found" +msgstr "Nie znaleziono wybranego szablonu" + +#: lib/models/campaigns.js:1082 +msgid "Invalid or missing message ID" +msgstr "Nieprawidłowy lub brakujący ID wiadomości" + +#: lib/models/fields.js:24 +msgid "Drop Down" +msgstr "Lista rozwijana" + +#: lib/models/fields.js:25 +msgid "Date (MM/DD/YYY)" +msgstr "Data (MM/DD/YYYY)" + +#: lib/models/fields.js:29 +msgid "JSON value for custom rendering" +msgstr "Wartość JSON dla renderowania niestandardowego" + +#: lib/models/fields.js:30 +msgid "Option" +msgstr "Opcja" + +#: lib/models/fields.js:53 lib/models/fields.js:98 lib/models/fields.js:123 +#: lib/models/lists.js:81 lib/models/lists.js:175 lib/models/lists.js:212 +#: lib/models/segments.js:43 lib/models/segments.js:176 +#: lib/models/subscriptions.js:88 lib/models/subscriptions.js:640 +#: lib/models/subscriptions.js:703 lib/models/subscriptions.js:889 +#: lib/models/subscriptions.js:992 lib/models/subscriptions.js:1046 +#: lib/models/subscriptions.js:1109 lib/models/subscriptions.js:1152 +msgid "Missing List ID" +msgstr "Brakujący ID listy" + +#: lib/models/fields.js:129 +msgid "Option field requires a group to be selected" +msgstr "Pole opcji wymaga wyboru grupy" + +#: lib/models/fields.js:149 lib/models/fields.js:199 +msgid "Missing Field ID" +msgstr "Brakujący ID pola" + +#: lib/models/fields.js:153 lib/models/segments.js:185 +#: lib/models/segments.js:225 +msgid "Field Name must be set" +msgstr "Nazwa pola musi być ustawiona" + +#: lib/models/fields.js:216 +msgid "Custom field not found" +msgstr "Nie znaleziono pola niestandardowego" + +#: lib/models/fields.js:289 +msgid "Unknown column type %s" +msgstr "Nieznany typ kolumny %s" + +#: lib/models/fields.js:293 +msgid "Missing column name" +msgstr "Brakująca nazwa kolumny" + +#: lib/models/fields.js:297 +msgid "Missing list ID" +msgstr "Brakujący ID listy" + +#: lib/models/fields.js:305 +msgid "Provided List ID not found" +msgstr "Nie znaleziono ID listy dostarczonych" + +#: lib/models/links.js:328 routes/campaigns.js:541 routes/campaigns.js:590 +#: services/sender.js:304 +msgid "Campaign not found" +msgstr "Nie znaleziono kampanii" + +#: lib/models/links.js:336 routes/lists.js:146 services/sender.js:311 +msgid "List not found" +msgstr "Nie znaleziono listy" + +#: lib/models/links.js:344 +msgid "Subscription not found" +msgstr "Nie znaleziono subskrypcji" + +#: lib/models/lists.js:117 lib/models/lists.js:179 +msgid "List Name must be set" +msgstr "Nazwa listy musi być ustawiona" + +#: lib/models/lists.js:241 +msgid "Missing List CID" +msgstr "Brakujący CID listy" + +#: lib/models/segments.js:15 +msgid "Signup country" +msgstr "Kraj rejestracji" + +#: lib/models/segments.js:19 lib/models/triggers.js:11 +msgid "Sign up date" +msgstr "Data rejestracji" + +#: lib/models/segments.js:23 lib/models/triggers.js:15 +msgid "Latest open" +msgstr "Ostatnie otwarcie" + +#: lib/models/segments.js:27 lib/models/triggers.js:19 +msgid "Latest click" +msgstr "Ostatnie kliknięcie" + +#: lib/models/segments.js:69 lib/models/segments.js:216 +#: lib/models/segments.js:256 lib/models/segments.js:278 +msgid "Missing Segment ID" +msgstr "Brakujący ID segmentu" + +#: lib/models/segments.js:85 lib/models/segments.js:549 +#: lib/models/segments.js:658 +msgid "Segment not found" +msgstr "Nie znaleziono segmentu" + +#: lib/models/segments.js:146 lib/models/segments.js:147 +#: lib/models/segments.js:408 lib/models/segments.js:409 +msgid "%s days after today" +msgstr "%s dni po dzisiejszym dniu" + +#: lib/models/segments.js:146 lib/models/segments.js:147 +#: lib/models/segments.js:408 lib/models/segments.js:409 +msgid "%s days before today" +msgstr "%s dni przed dzisiejszym dniem" + +#: lib/models/segments.js:148 lib/models/segments.js:410 +msgid "today" +msgstr "dziś" + +#: lib/models/segments.js:189 lib/models/segments.js:229 +msgid "Invalid segment rule type" +msgstr "Nieprawidłowy typ reguły segmentu" + +#: lib/models/segments.js:289 lib/models/segments.js:454 +#: routes/segments.js:266 routes/segments.js:300 routes/segments.js:370 +#: routes/segments.js:381 +msgid "Selected segment not found" +msgstr "Nie znaleziono wybranego segmentu" + +#: lib/models/segments.js:294 lib/models/segments.js:459 +#: routes/segments.js:272 routes/segments.js:306 routes/segments.js:387 +msgid "Invalid rule type" +msgstr "Nieprawidłowy typ reguły" + +#: lib/models/segments.js:358 lib/models/segments.js:434 +#: lib/models/segments.js:524 +msgid "Missing Rule ID" +msgstr "Brakujący ID reguły" + +#: lib/models/segments.js:374 +msgid "Specified rule not found" +msgstr "Nie znaleziono określonej reguły" + +#: lib/models/segments.js:385 +msgid "Specified segment not found" +msgstr "Nie znaleziono określonego segmentu" + +#: lib/models/segments.js:445 +msgid "Selected rule not found" +msgstr "Nie znaleziono wybranej reguły" + +#: lib/models/subscriptions.js:233 +msgid "%s: Please Confirm Subscription" +msgstr "%s: Potwierdź subskrypcję" + +#: lib/models/subscriptions.js:324 +msgid "Could not save subscription" +msgstr "Nie można zapisać subskrypcji" + +#: lib/models/subscriptions.js:507 lib/models/subscriptions.js:537 +msgid "Missing Subscription ID" +msgstr "Brakujący ID subskrypcji" + +#: lib/models/subscriptions.js:565 +msgid "Missing Subscription email address" +msgstr "Brak adresu e-mail subskrypcji" + +#: lib/models/subscriptions.js:644 lib/models/subscriptions.js:893 +#: lib/models/subscriptions.js:1156 +msgid "Missing subscription ID" +msgstr "Brakujący ID subskrypcji" + +#: lib/models/subscriptions.js:707 +msgid "Missing email address" +msgstr "Brakujący adres e-mail" + +#: lib/models/subscriptions.js:996 lib/models/subscriptions.js:1050 +#: lib/models/subscriptions.js:1086 +msgid "Missing Import ID" +msgstr "Brakujący ID importu" + +#: lib/models/subscriptions.js:1178 +msgid "Unknown subscription ID" +msgstr "Nieznany ID subskrypcji" + +#: lib/models/subscriptions.js:1183 +msgid "Nothing seems to be changed" +msgstr "Wydaje się, że nic nie zostało zmienione" + +#: lib/models/subscriptions.js:1197 +msgid "This address is already registered by someone else" +msgstr "Ten adres jest już zarejestrowany przez inną osobę" + +#: lib/models/templates.js:51 lib/models/templates.js:122 +#: lib/models/templates.js:163 +msgid "Missing Template ID" +msgstr "Brakujący ID szablonu" + +#: lib/models/templates.js:80 lib/models/templates.js:126 +msgid "Template Name must be set" +msgstr "Nazwa szablonu musi być ustawiona" + +#: lib/models/triggers.js:28 +msgid "Has Opened" +msgstr "Otwarte" + +#: lib/models/triggers.js:31 +msgid "Has Clicked" +msgstr "Kliknięte" + +#: lib/models/triggers.js:34 +msgid "Not Opened" +msgstr "Nie otwarte" + +#: lib/models/triggers.js:37 +msgid "Not Clicked" +msgstr "Nie kliknięte" + +#: lib/models/triggers.js:174 lib/models/triggers.js:211 +msgid "Missing or invalid list ID" +msgstr "Brakujący lub nieprawidłowy ID listy" + +#: lib/models/triggers.js:178 lib/models/triggers.js:263 +msgid "Days in the past are not allowed" +msgstr "Dni w przeszłości są niedozwolone" + +#: lib/models/triggers.js:182 lib/models/triggers.js:203 +#: lib/models/triggers.js:267 lib/models/triggers.js:288 +msgid "Missing or invalid trigger rule" +msgstr "Brakująca lub nieprawidłowa reguła wyzwalacza" + +#: lib/models/triggers.js:189 lib/models/triggers.js:274 +msgid "Invalid subscription configuration" +msgstr "ieprawidłowa konfiguracja subskrypcji" + +#: lib/models/triggers.js:196 lib/models/triggers.js:281 +msgid "Invalid campaign configuration" +msgstr "Nieprawidłowa konfiguracja kampanii" + +#: lib/models/triggers.js:199 lib/models/triggers.js:284 +msgid "A campaing can not be a target for itself" +msgstr "Kampania nie może być celem samym w sobie" + +#: lib/models/triggers.js:232 +msgid "Could not store trigger row" +msgstr "Nie można zapisać wiersza wyzwalacza" + +#: lib/models/triggers.js:249 +msgid "Missing or invalid Trigger ID" +msgstr "Brakujący lub nieprawidłowy ID wyzwalacza" + +#: lib/models/triggers.js:316 +msgid "Missing Trigger ID" +msgstr "Brakujący ID wyzwalacza" + +#: lib/models/users.js:103 +msgid "Could not store user row" +msgstr "Nie można zapisać wiersza użytkownika" + +#: lib/models/users.js:173 +msgid "Email Address must be set" +msgstr "Adres e-mail musi być ustawiony" + +#: lib/models/users.js:184 +msgid "Failed to check user data" +msgstr "Nie można sprawdzić danych użytkownika" + +#: lib/models/users.js:195 +msgid "" +"Can't change email as another user with the same email address already exists" +msgstr "" +"Nie można zmienić adresu e-mail, ponieważ inny użytkownik o tym samym " +"adresie e-mail już istnieje" + +#: lib/models/users.js:212 +msgid "Incorrect current password" +msgstr "Nieprawidłowe aktualne hasło" + +#: lib/models/users.js:216 +msgid "New password not set" +msgstr "Nowe hasło nie zostało ustawione" + +#: lib/models/users.js:220 +msgid "Passwords do not match" +msgstr "Hasła nie pasują do siebie" + +#: lib/models/users.js:258 +msgid "User ID not set" +msgstr "Nie ustawiono ID użytkownika" + +#: lib/models/users.js:286 +msgid "Username must be set" +msgstr "Nazwa użytkownika musi być ustawiona" + +#: lib/models/users.js:323 +msgid "Mailer password change request" +msgstr "Żądanie zmiany hasła Mailera" + +#: lib/models/users.js:347 lib/models/users.js:367 +msgid "Missing username or reset token" +msgstr "Brakująca nazwa użytkownika lub token reset" + +#: lib/models/users.js:371 +msgid "Invalid new password" +msgstr "Nieprawidłowe nowe hasło" + +#: lib/passport.js:38 +msgid "%s logged out" +msgstr "%s Wylogowany" + +#: lib/passport.js:51 +msgid "Failed to authenticate user" +msgstr "Nie udało się uwierzytelnić użytkownika" + +#: lib/passport.js:67 +msgid "Logged in as %s" +msgstr "Zalogowano jako %s" + +#: lib/passport.js:125 +msgid "Incorrect username or password" +msgstr "Nieprawidłowa nazwa użytkownika lub hasło" + +#: lib/tools.js:123 +msgid "Automation" +msgstr "Automatyzacja" + +#: lib/tools.js:133 +msgid "Blocked email address \"%s\"" +msgstr "Zablokowany adres e-mail \"%s\"" + +#: lib/tools.js:142 +msgid "Invalid email address \"%s\"." +msgstr "Nieprawidłowy adres e-mail \"%s\"." + +#: lib/tools.js:145 +msgid "MX record not found for domain" +msgstr "Nie znaleziono rekordu MX dla domeny" + +#: lib/tools.js:148 +msgid "Address domain not found" +msgstr "Nie znaleziono domeny" + +#: lib/tools.js:151 +msgid "Address domain name is required" +msgstr "Nazwa domeny adresu jest wymagana" + +#: routes/archive.js:31 routes/archive.js:43 routes/archive.js:55 app.js:211 +msgid "Not Found" +msgstr "Nie znaleziono" + +#: routes/archive.js:110 services/sender.js:447 +msgid "Received status code %s from %s" +msgstr "Otrzymano kod statusu %s z %s" + +#: routes/archive.js:134 routes/campaigns.js:131 routes/campaigns.js:295 +#: routes/campaigns.js:390 routes/campaigns.js:435 routes/campaigns.js:475 +#: routes/campaigns.js:739 routes/campaigns.js:762 routes/campaigns.js:781 +#: routes/campaigns.js:803 routes/triggers.js:146 +msgid "Could not find campaign with specified ID" +msgstr "Nie można znaleźć kampanii z określonym ID" + +#: routes/archive.js:142 routes/campaigns.js:789 +msgid "Attachment not found" +msgstr "Załącznik nie znaleziony" + +#: routes/campaigns.js:26 routes/fields.js:13 routes/lists.js:49 +#: routes/segments.js:13 routes/settings.js:23 routes/templates.js:17 +#: routes/triggers.js:18 routes/users.js:75 routes/users.js:120 +msgid "Need to be logged in to access restricted content" +msgstr "Musisz być zalogowany, aby uzyskać dostęp do zastrzeżonych treści" + +#: routes/campaigns.js:117 +msgid "Could not create campaign" +msgstr "Nie można utworzyć kampanii" + +#: routes/campaigns.js:120 +msgid "Campaign “%s” created" +msgstr "Kampania “%s” utworzona" + +#: routes/campaigns.js:204 +msgid "content from an RSS entry" +msgstr "treść z wpisu RSS" + +#: routes/campaigns.js:220 +msgid "Campaign settings updated" +msgstr "Zaktualizowano ustawienia kampanii" + +#: routes/campaigns.js:222 +msgid "Campaign settings not updated" +msgstr "Ustawienia kampanii nie zostały zaktualizowane" + +#: routes/campaigns.js:238 routes/campaigns.js:639 +msgid "Campaign deleted" +msgstr "Kampania usunięta" + +#: routes/campaigns.js:240 routes/campaigns.js:641 +msgid "Could not delete specified campaign" +msgstr "Nie można usunąć określonej kampanii" + +#: routes/campaigns.js:259 +msgid "Idling" +msgstr "Bezczynność" + +#: routes/campaigns.js:262 +msgid "Scheduled" +msgstr "Planowane" + +#: routes/campaigns.js:268 +msgid "Paused" +msgstr "Wstrzymane" + +#: routes/campaigns.js:270 +msgid "Inactive" +msgstr "Nieaktywny" + +#: routes/campaigns.js:272 +msgid "Active" +msgstr "Aktywny" + +#: routes/campaigns.js:274 +msgid "Other" +msgstr "Inny" + +#: routes/campaigns.js:429 +msgid "Unknown status selector" +msgstr "Nieznany status selektora" + +#: routes/campaigns.js:657 +msgid "Scheduled sending" +msgstr "Wysyłanie zaplanowanych" + +#: routes/campaigns.js:659 +msgid "Could not schedule sending" +msgstr "Nie można zaplanować wysyłania" + +#: routes/campaigns.js:671 +msgid "Sending resumed" +msgstr "Wysyłanie zostało wznowione" + +#: routes/campaigns.js:673 +msgid "Could not resume sending" +msgstr "Nie można wznowić wysyłania" + +#: routes/campaigns.js:685 +msgid "Sending reset" +msgstr "Wysyłam reset" + +#: routes/campaigns.js:687 +msgid "Could not reset sending" +msgstr "Nie można zresetować wysyłania" + +#: routes/campaigns.js:699 routes/campaigns.js:727 +msgid "Sending paused" +msgstr "Wysyłanie wstrzymane" + +#: routes/campaigns.js:701 routes/campaigns.js:729 +msgid "Could not pause sending" +msgstr "Nie można wstrzymać wysyłania" + +#: routes/campaigns.js:713 +msgid "Sending activated" +msgstr "Wysyłanie aktywowane" + +#: routes/campaigns.js:715 +msgid "Could not activate sending" +msgstr "Nie można aktywować wysyłania" + +#: routes/campaigns.js:750 +msgid "Attachment uploaded" +msgstr "Przesłano załącznik" + +#: routes/campaigns.js:752 +msgid "Could not store attachment" +msgstr "Nie można zapisać załącznika" + +#: routes/campaigns.js:769 +msgid "Attachment deleted" +msgstr "Załącznik usunięty" + +#: routes/campaigns.js:771 +msgid "Could not delete attachment" +msgstr "Nie można usunąć załącznika" + +#: routes/fields.js:28 routes/fields.js:64 routes/fields.js:118 +#: routes/segments.js:28 routes/segments.js:59 routes/segments.js:102 +#: routes/segments.js:151 routes/segments.js:223 routes/segments.js:255 +#: routes/segments.js:289 routes/segments.js:336 routes/segments.js:359 +msgid "Selected list ID not found" +msgstr "Nie znaleziono wybranego ID listy" + +#: routes/fields.js:102 +msgid "Could not create custom field" +msgstr "Nie można utworzyć pola niestandardowego" + +#: routes/fields.js:129 +msgid "Selected field not found" +msgstr "Nie znaleziono wybranego pola" + +#: routes/fields.js:165 +msgid "Field settings updated" +msgstr "Zaktualizowano ustawienia pola" + +#: routes/fields.js:167 +msgid "Field settings not updated" +msgstr "Ustawienia pola nie zostały zaktualizowane" + +#: routes/fields.js:183 +msgid "Custom field deleted" +msgstr "Pole niestandardowe usunięte" + +#: routes/fields.js:185 +msgid "Could not delete specified field" +msgstr "Nie można usunąć określonego pola" + +#: routes/links.js:40 +msgid "Oops, we couldn't find a link for the URL you clicked" +msgstr "Ups, nie mogliśmy znaleźć linku dla URL który kliknąłeś" + +#: routes/lists.js:90 +msgid "Could not create list" +msgstr "Nie można utworzyć listy" + +#: routes/lists.js:93 +msgid "List created" +msgstr "Utworzono listę" + +#: routes/lists.js:101 routes/lists.js:236 routes/lists.js:301 +#: routes/lists.js:340 routes/lists.js:409 routes/lists.js:434 +#: routes/lists.js:479 routes/lists.js:501 routes/lists.js:530 +#: routes/lists.js:609 routes/lists.js:666 routes/lists.js:693 +msgid "Could not find list with specified ID" +msgstr "Nie można znaleźć listy o określonym ID" + +#: routes/lists.js:115 +msgid "List settings updated" +msgstr "Zaktualizowano ustawienia listy" + +#: routes/lists.js:117 +msgid "List settings not updated" +msgstr "Nie zaktualizowano ustawień listy" + +#: routes/lists.js:133 +msgid "List deleted" +msgstr "Lista usunięta" + +#: routes/lists.js:135 +msgid "Could not delete specified list" +msgstr "Nie można usunąć określonej listy" + +#: routes/lists.js:171 +msgid "Unknown" +msgstr "Nieznany" + +#: routes/lists.js:171 +msgid "Complained" +msgstr "Skarżący" + +#: routes/lists.js:202 +msgid "Invalid key" +msgstr "Klucz niewłaściwy" + +#: routes/lists.js:204 +msgid "Expired key" +msgstr "Klucz wygasł" + +#: routes/lists.js:206 +msgid "Revoked key" +msgstr "Klucz odwołany" + +#: routes/lists.js:256 +msgid "Initializing" +msgstr "Inicjowanie" + +#: routes/lists.js:259 +msgid "Initialized" +msgstr "Zainicjowano" + +#: routes/lists.js:262 +msgid "Importing" +msgstr "Importowanie" + +#: routes/lists.js:268 +msgid "Errored" +msgstr "Błędne" + +#: routes/lists.js:346 routes/lists.js:415 routes/lists.js:440 +msgid "Could not find subscriber with specified ID" +msgstr "Nie można znaleźć subskrybenta o podanym ID" + +#: routes/lists.js:392 +msgid "Could not add subscription" +msgstr "Nie można dodać subskrypcji" + +#: routes/lists.js:397 +msgid "%s was successfully added to your list" +msgstr "%s został pomyślnie dodany do twojej listy" + +#: routes/lists.js:399 +msgid "%s was not added to your list" +msgstr "%s nie został dodany do Twojej listy" + +#: routes/lists.js:421 +msgid "Could not unsubscribe user" +msgstr "Nie można anulować subskrypcji użytkownika" + +#: routes/lists.js:424 +msgid "%s was successfully unsubscribed from your list" +msgstr "%s został pomyślnie wypisany z listy" + +#: routes/lists.js:444 +msgid "%s was successfully removed from your list" +msgstr "%s został pomyślnie usunięty z Twojej listy" + +#: routes/lists.js:456 +msgid "Another subscriber with email address %s already exists" +msgstr "Inny subskrybent z adresem e-mail %s już istnieje" + +#: routes/lists.js:463 +msgid "Subscription settings updated" +msgstr "Zaktualizowano ustawienia subskrypcji" + +#: routes/lists.js:465 +msgid "Subscription settings not updated" +msgstr "Ustawienia subskrypcji nie zostały zaktualizowane" + +#: routes/lists.js:507 routes/lists.js:615 routes/lists.js:651 +#: routes/lists.js:679 routes/lists.js:699 +msgid "Could not find import data with specified ID" +msgstr "Nie można znaleźć danych importu o podanym ID" + +#: routes/lists.js:538 +msgid "Could not process CSV" +msgstr "Nie można przetworzyć pliku CSV" + +#: routes/lists.js:547 +msgid "Could not create importer" +msgstr "Nie można utworzyć importera" + +#: routes/lists.js:598 +msgid "Empty file" +msgstr "Pusty plik" + +#: routes/lists.js:655 +msgid "Import started" +msgstr "Rozpoczęto importowanie" + +#: routes/lists.js:683 +msgid "Import restarted" +msgstr "Import został zrestartowany" + +#: routes/segments.js:86 +msgid "Could not create segment" +msgstr "Nie można utworzyć segmentu" + +#: routes/segments.js:89 +msgid "Segment created" +msgstr "Utworzono segment" + +#: routes/segments.js:113 +msgid "Selected segment ID not found" +msgstr "Nie znaleziono ID wybranego segmentu" + +#: routes/segments.js:188 +msgid "Segment settings updated" +msgstr "Zaktualizowane ustawienia segmentów" + +#: routes/segments.js:190 +msgid "Segment settings not updated" +msgstr "Ustawienia segmentu nie zostały zaktualizowane" + +#: routes/segments.js:206 +msgid "Segment deleted" +msgstr "Segment usunięty" + +#: routes/segments.js:208 +msgid "Could not delete specified segment" +msgstr "Nie można usunąć określonego segmentu" + +#: routes/segments.js:342 +msgid "Could not create rule" +msgstr "Nie można utworzyć reguły" + +#: routes/segments.js:345 +msgid "Rule created" +msgstr "Dodano regułę" + +#: routes/segments.js:410 +msgid "Rule settings updated" +msgstr "Zaktualizowano ustawienia reguły" + +#: routes/segments.js:412 +msgid "Rule settings not updated" +msgstr "Nie zaktualizowano ustawień reguły" + +#: routes/segments.js:428 +msgid "Rule deleted" +msgstr "Usunięto regułę" + +#: routes/segments.js:430 +msgid "Could not delete specified rule" +msgstr "Nie można usunąć określonej reguły" + +#: routes/settings.js:39 +msgid "Use TLS" +msgstr "Użyj TLS" + +#: routes/settings.js:40 +msgid "usually selected for port 465" +msgstr "zazwyczaj wybierany port 465" + +#: routes/settings.js:44 +msgid "Use STARTTLS" +msgstr "Użyj STARTTLS" + +#: routes/settings.js:45 +msgid "usually selected for port 587 and 25" +msgstr "zazwyczaj wybierany port 587 i 25" + +#: routes/settings.js:49 +msgid "Do not use encryption" +msgstr "Nie używaj szyfrowania" + +#: routes/settings.js:115 +msgid "Settings updated" +msgstr "Zaktualizowano ustawienia" + +#: routes/settings.js:173 +msgid "Invalid mail transport type" +msgstr "Nieprawidłowy typ transportu poczty" + +#: routes/settings.js:184 +msgid "Invalid Access Key" +msgstr "Nieprawidłowy klucz dostępu" + +#: routes/settings.js:187 +msgid "Invalid AWS credentials" +msgstr "Nieprawidłowe dane uwierzytelniające AWS" + +#: routes/settings.js:190 +msgid "Connection refused, check hostname and port." +msgstr "Połączenie odrzucone, sprawdź nazwę hosta i port." + +#: routes/settings.js:195 +msgid "" +"Did not receive greeting message from server. This might happen when " +"connecting to a TLS port without using TLS." +msgstr "" +"Nie otrzymano wiadomości powitalnej z serwera. Może się to zdarzyć podczas " +"łączenia się z portem TLS bez korzystania z TLS." + +#: routes/settings.js:197 +msgid "Did not receive greeting message from server." +msgstr "Nie otrzymano wiadomości powitalnej z serwera." + +#: routes/settings.js:200 +msgid "" +"Connection timed out. Check your firewall settings, destination port is " +"probably blocked." +msgstr "" +"Przekroczono limit czasu połączenia. Sprawdź ustawienia zapory, port " +"docelowy jest prawdopodobnie zablokowany." + +#: routes/settings.js:205 +msgid "Authentication not accepted, server expects STARTTLS to be used." +msgstr "" +"Uwierzytelnianie nie jest akceptowane, serwer oczekuje, że zostanie użyty " +"STARTTLS." + +#: routes/settings.js:207 +msgid "Authentication failed, check username and password." +msgstr "Uwierzytelnianie nie powiodło się, sprawdź nazwę użytkownika i hasło." + +#: routes/settings.js:217 +msgid "Failed Mailer verification." +msgstr "Weryfikacja Mailera nie powiodła się." + +#: routes/settings.js:217 +msgid "Server responded with: \"%s\"" +msgstr "Odpowiedź serwera: \"%s\"" + +#: routes/settings.js:221 +msgid "Mailer settings verified, ready to send some mail!" +msgstr "Ustawienia Mailera zweryfikowane, gotowe do wysłania wiadomości!" + +#: routes/subscription.js:22 +msgid "Selected subscription not found" +msgstr "Nie znaleziono wybranej subskrypcji" + +#: routes/subscription.js:32 routes/subscription.js:103 +#: routes/subscription.js:141 routes/subscription.js:166 +#: routes/subscription.js:191 routes/subscription.js:232 +#: routes/subscription.js:270 routes/subscription.js:317 +#: routes/subscription.js:339 routes/subscription.js:368 +#: routes/subscription.js:392 routes/subscription.js:424 +msgid "Selected list not found" +msgstr "Nie znaleziono wybranej listy" + +#: routes/subscription.js:78 routes/subscription.js:472 +msgid "%s: Subscription Confirmed" +msgstr "%s: Potwierdzono subskrypcję" + +#: routes/subscription.js:217 +msgid "Email address not set" +msgstr "Adres e-mail nie jest ustawiony" + +#: routes/subscription.js:255 +msgid "Could not store confirmation data" +msgstr "Nie można zapisać danych potwierdzających" + +#: routes/subscription.js:284 routes/subscription.js:349 +#: routes/subscription.js:402 +msgid "Subscription not found from this list" +msgstr "Nie znaleziono subskrypcji z tej listy" + +#: routes/subscription.js:383 +msgid "Email address updated, check your mailbox for verification instructions" +msgstr "" +"Adres e-mail zaktualizowany, sprawdź skrzynkę pocztową, aby uzyskać " +"instrukcje dotyczące weryfikacji" + +#: routes/subscription.js:499 routes/subscription.js:515 +msgid "Public key is not set" +msgstr "Klucz publiczny nie jest ustawiony" + +#: routes/templates.js:98 +msgid "Could not create template" +msgstr "Nie można utworzyć szablonu" + +#: routes/templates.js:101 +msgid "Template created" +msgstr "Szablon utworzony" + +#: routes/templates.js:109 +msgid "Could not find template with specified ID" +msgstr "Nie można znaleźć szablonu z określonym ID" + +#: routes/templates.js:140 +msgid "Template settings updated" +msgstr "Zaktualizowano ustawienia szablonu" + +#: routes/templates.js:142 +msgid "Template settings not updated" +msgstr "Ustawienia szablonów nie zostały zaktualizowane" + +#: routes/templates.js:158 +msgid "Template deleted" +msgstr "Szablon usunięty" + +#: routes/templates.js:160 +msgid "Could not delete specified template" +msgstr "Nie można usunąć określonego szablonu" + +#: routes/triggers.js:62 routes/triggers.js:79 routes/triggers.js:154 +msgid "Could not find selected list" +msgstr "Nie można znaleźć wybranej listy" + +#: routes/triggers.js:131 +msgid "Could not create trigger" +msgstr "Nie można utworzyć wyzwalacza" + +#: routes/triggers.js:138 +msgid "Trigger “%s” created" +msgstr "Wyzwalacz “%s” został utworzony" + +#: routes/triggers.js:214 +msgid "Trigger settings updated" +msgstr "Zaktualizowano ustawienia wyzwalacza" + +#: routes/triggers.js:216 +msgid "Trigger settings not updated" +msgstr "Ustawienia wyzwalacza nie zostały zaktualizowane" + +#: routes/triggers.js:228 +msgid "Trigger deleted" +msgstr "Wyzwalacz został usunięty" + +#: routes/triggers.js:230 +msgid "Could not delete specified trigger" +msgstr "Nie można usunąć określonego wyzwalacza" + +#: routes/triggers.js:242 +msgid "Could not find trigger with specified ID" +msgstr "Nie można znaleźć wyzwalacza z określonym ID" + +#: routes/triggers.js:255 +msgid "Trigger not found" +msgstr "Wyzwalacz nie został znaleziony" + +#: routes/users.js:32 +msgid "" +"An email with password reset instructions has been sent to your email " +"address, if it exists on our system." +msgstr "" +"E-mail z instrukcjami resetowania hasła został wysłany na Twój adres e-mail, " +"jeśli istnieje w naszym systemie." + +#: routes/users.js:46 routes/users.js:64 +msgid "Unknown or expired reset token" +msgstr "Token resetowania nieznany lub wygasł" + +#: routes/users.js:66 +msgid "Your password has been changed successfully" +msgstr "Twoje hasło zostało zmienione" + +#: routes/users.js:87 +msgid "User data not found" +msgstr "Nie znaleziono danych użytkownika" + +#: routes/users.js:110 +msgid "Access token updated" +msgstr "Zaktualizowano token dostępu" + +#: routes/users.js:112 +msgid "Access token not updated" +msgstr "Nie zaktualizowano tokenu dostępu" + +#: routes/users.js:139 +msgid "Account information updated" +msgstr "Informacje o koncie zostały zaktualizowane" + +#: routes/users.js:141 +msgid "Account information not updated" +msgstr "Informacje o koncie nie zostały zaktualizowane" + +#: services/feedcheck.js:51 +msgid "Feed error: %s" +msgstr "RSS błąd: %s" + +#: services/feedcheck.js:54 +msgid "Found %s new campaign messages from feed" +msgstr "Znaleziono %s nowych wiadomości kampanii z kanału" + +#: services/feedcheck.js:56 +msgid "Found nothing new from the feed" +msgstr "Nie znaleziono nic nowego w kanale" + +#: services/feedcheck.js:143 +msgid "RSS entry %s" +msgstr "Wpis RSS %s" + +#: services/importer.js:243 +msgid "Could not access import file" +msgstr "Nie można uzyskać dostępu do pliku importu" + +#: services/triggers.js:51 +msgid "Unknown trigger type %s" +msgstr "Nieznany typ wyzwalacza %s" From dd696d49ac8ee8a38fe70e1c93430c411c4d12d7 Mon Sep 17 00:00:00 2001 From: Andreas Teuber Date: Tue, 23 Oct 2018 15:51:54 +0200 Subject: [PATCH 460/483] Added API call to change the email address of an existing list subscriber --- routes/api.js | 107 ++++++++++++++++++++++++++++++++++++++++++++ views/users/api.hbs | 30 ++++++++++++- 2 files changed, 136 insertions(+), 1 deletion(-) diff --git a/routes/api.js b/routes/api.js index 1e4fb70d..1f13ba1f 100644 --- a/routes/api.js +++ b/routes/api.js @@ -524,4 +524,111 @@ router.get('/blacklist/get', (req, res) => { }); }); +router.post('/changeemail/:listId', (req, res) => { + let input = {}; + Object.keys(req.body).forEach(key => { + input[(key || '').toString().trim().toUpperCase()] = (req.body[key] || '').toString().trim(); + }); + if (!(input.EMAILOLD) || (input.EMAILOLD === '')) { + res.status(500); + return res.json({ + error: 'EMAILOLD argument is required', + data: [] + }); + } + if (!(input.EMAILNEW) || (input.EMAILNEW === '')) { + res.status(500); + return res.json({ + error: 'EMAILNEW argument is required', + data: [] + }); + } + lists.getByCid(req.params.listId, (err, list) => { + if (err) { + log.error('API', err); + res.status(500); + return res.json({ + error: err.message || err, + data: [] + }); + } + if (!list) { + res.status(404); + return res.json({ + error: 'Selected listId not found', + data: [] + }); + } + blacklist.isblacklisted(input.EMAILNEW, (err, blacklisted) =>{ + if (err) { + res.status(500); + return res.json({ + error: err.message || err, + data: [] + }); + } + if (blacklisted) { + res.status(500); + return res.json({ + error: 'New email is blacklisted', + data: [] + }); + } + + subscriptions.getByEmail(list.id, input.EMAILOLD, (err, subscription) => { + if (err) { + res.status(500); + return res.json({ + error: err.message || err, + data: [] + }); + } + + if (!subscription) { + res.status(404); + return res.json({ + error: 'Subscription with given old email not found', + data: [] + }); + } + + subscriptions.updateAddressCheck(list, subscription.cid, input.EMAILNEW, null, (err, old, valid) => { + if (err) { + res.status(500); + return res.json({ + error: err.message || err, + data: [] + }); + } + + if (!valid) { + res.status(500); + return res.json({ + error: 'New email not valid', + data: [] + }); + } + + subscriptions.updateAddress(list.id, subscription.id, input.EMAILNEW, (err) => { + if (err) { + res.status(500); + return res.json({ + error: err.message || err, + data: [] + }); + } + res.status(200); + res.json({ + data: { + id: subscription.id, + changedemail: true + } + }); + }); + }); + }); + }); + }); +}); + module.exports = router; diff --git a/views/users/api.hbs b/views/users/api.hbs index db51df39..bd025a80 100644 --- a/views/users/api.hbs +++ b/views/users/api.hbs @@ -333,4 +333,32 @@ {{#translate}}Example{{/translate}}

    -
    curl -XGET '{{serviceUrl}}api/list/1?access_token={{accessToken}}'
    \ No newline at end of file +
    curl -XGET '{{serviceUrl}}api/list/1?access_token={{accessToken}}'
    + +

    POST /api/changeemail/:listId – {{#translate}}Change email of existing list subscriber{{/translate}}

    + +

    + {{#translate}}This API call changes the email address of an existing list subscriber.{{/translate}} +

    + +

    + GET {{#translate}}arguments{{/translate}} +

    +
      +
    • access_token – {{#translate}}your personal access token{{/translate}} +
    + +

    + POST {{#translate}}arguments{{/translate}} +

    +
      +
    • EMAILOLD – {{#translate}}subscriber's old email address{{/translate}} ({{#translate}}required{{/translate}}) +
    • EMAILNEW – {{#translate}}subscriber's new email address{{/translate}} ({{#translate}}required{{/translate}}) +
    + +

    + {{#translate}}Example{{/translate}} +

    + +
    curl -XPOST {{serviceUrl}}api/changeemail/B16uVTdW?access_token={{accessToken}} \
    +--data 'EMAILOLD=test@example.com&EMAILNEW=foo@bar.com'
    From d5ce6a5d33da229f793f04621515b894052484d4 Mon Sep 17 00:00:00 2001 From: Andreas Teuber Date: Tue, 23 Oct 2018 17:01:08 +0200 Subject: [PATCH 461/483] Fix Travis --- lib/models/segments.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/models/segments.js b/lib/models/segments.js index 209f12e7..a2e891f9 100644 --- a/lib/models/segments.js +++ b/lib/models/segments.js @@ -574,11 +574,12 @@ module.exports.getQuery = (id, prefix, callback) => { segment.rules.forEach(rule => { switch (rule.columnType.type) { - case 'string': + case 'string': { let condition = rule.value.negate ? 'NOT LIKE' : 'LIKE'; query.push(prefix + '`' + rule.columnType.column + '` ' + condition + ' ?'); values.push(rule.value.value); break; + } case 'boolean': query.push(prefix + '`' + rule.columnType.column + '` = ?'); values.push(rule.value.value); From cdaf4b0b16663b81fecb051fc6a7bf290acc11ec Mon Sep 17 00:00:00 2001 From: Andreas Teuber Date: Mon, 29 Oct 2018 20:42:49 +0100 Subject: [PATCH 462/483] Added description to custom fields --- lib/models/fields.js | 18 +++++++++++++----- meta.json | 2 +- routes/api.js | 1 + setup/sql/upgrade-00034.sql | 11 +++++++++++ views/lists/fields/create.hbs | 7 +++++++ views/lists/fields/edit.hbs | 7 +++++++ .../partials/subscription-custom-fields.hbs | 3 +++ 7 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 setup/sql/upgrade-00034.sql diff --git a/lib/models/fields.js b/lib/models/fields.js index a35c1c16..1b3dbe2b 100644 --- a/lib/models/fields.js +++ b/lib/models/fields.js @@ -9,7 +9,7 @@ let Handlebars = require('handlebars'); let _ = require('../translate')._; let util = require('util'); -let allowedKeys = ['name', 'key', 'default_value', 'group', 'group_template', 'visible']; +let allowedKeys = ['name', 'description', 'key', 'default_value', 'group', 'group_template', 'visible']; let allowedTypes; module.exports.grouped = ['radio', 'checkbox', 'dropdown']; @@ -133,10 +133,11 @@ module.exports.create = (listId, field, callback) => { field.group = null; } + field.description = (field.description || '').toString().trim() || null; field.defaultValue = (field.defaultValue || '').toString().trim() || null; field.groupTemplate = (field.groupTemplate || '').toString().trim() || null; - addCustomField(listId, field.name, field.defaultValue, field.type, field.group, field.groupTemplate, field.visible, callback); + addCustomField(listId, field.name, field.description, field.defaultValue, field.type, field.group, field.groupTemplate, field.visible, callback); }; module.exports.update = (id, updates, callback) => { @@ -157,6 +158,7 @@ module.exports.update = (id, updates, callback) => { updates.key = slugify(updates.key, '_').toUpperCase(); } + updates.description = (updates.description || '').toString().trim() || null; updates.defaultValue = (updates.defaultValue || '').toString().trim() || null; updates.groupTemplate = (updates.groupTemplate || '').toString().trim() || null; @@ -277,7 +279,7 @@ module.exports.delete = (fieldId, callback) => { }); }; -function addCustomField(listId, name, defaultValue, type, group, groupTemplate, visible, callback) { +function addCustomField(listId, name, description, defaultValue, type, group, groupTemplate, visible, callback) { type = (type || '').toString().trim().toLowerCase(); group = Number(group) || null; listId = Number(listId) || 0; @@ -314,8 +316,8 @@ function addCustomField(listId, name, defaultValue, type, group, groupTemplate, column = ('custom_' + slugify(name, '_') + '_' + shortid.generate()).toLowerCase().replace(/[^a-z0-9_]/g, ''); } - let query = 'INSERT INTO custom_fields (`list`, `name`, `key`,`default_value`, `type`, `group`, `group_template`, `column`, `visible`) VALUES(?,?,?,?,?,?,?,?,?)'; - connection.query(query, [listId, name, key, defaultValue, type, group, groupTemplate, column, visible ? 1 : 0], (err, result) => { + let query = 'INSERT INTO custom_fields (`list`, `name`, `description`, `key`,`default_value`, `type`, `group`, `group_template`, `column`, `visible`) VALUES(?,?,?,?,?,?,?,?,?,?)'; + connection.query(query, [listId, name, description, key, defaultValue, type, group, groupTemplate, column, visible ? 1 : 0], (err, result) => { if (err) { connection.release(); @@ -409,6 +411,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { id: field.id, type: field.type, name: field.name, + description: field.description, column: field.column, value: (valueList[field.column] || '').toString().trim(), visible: !!field.visible, @@ -439,6 +442,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { id: field.id, type: field.type, name: field.name, + description: field.description, column: field.column, value: (valueList[field.column] || '').toString().trim(), visible: !!field.visible, @@ -455,6 +459,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { id: field.id, type: field.type, name: field.name, + description: field.description, column: field.column, value: Number(valueList[field.column]) || 0, visible: !!field.visible, @@ -474,6 +479,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { id: field.id, type: field.type, name: field.name, + description: field.description, visible: !!field.visible, key: 'group-g' + field.id, mergeTag: field.key, @@ -495,6 +501,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { return { type: subField.type, name: subField.name, + description: subField.description, column: subField.column, value: valueList[subField.column] ? 1 : 0, visible: !!subField.visible, @@ -572,6 +579,7 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => { id: field.id, type: field.type, name: field.name, + description: field.description, column: field.column, value: useDate ? value : formatted, visible: !!field.visible, diff --git a/meta.json b/meta.json index 5d18c61b..f48d12cd 100644 --- a/meta.json +++ b/meta.json @@ -1,3 +1,3 @@ { - "schemaVersion": 33 + "schemaVersion": 34 } diff --git a/routes/api.js b/routes/api.js index 1e4fb70d..431f7636 100644 --- a/routes/api.js +++ b/routes/api.js @@ -419,6 +419,7 @@ router.post('/field/:listId', (req, res) => { let field = { name: (input.NAME || '').toString().trim(), + description: (input.DESCRIPTION || '').toString().trim(), defaultValue: (input.DEFAULT || '').toString().trim() || null, type: (input.TYPE || '').toString().toLowerCase().trim(), group: Number(input.GROUP) || null, diff --git a/setup/sql/upgrade-00034.sql b/setup/sql/upgrade-00034.sql new file mode 100644 index 00000000..64941105 --- /dev/null +++ b/setup/sql/upgrade-00034.sql @@ -0,0 +1,11 @@ +# Header section +# Define incrementing schema version number +SET @schema_version = '34'; + +# Add template field for group elements +ALTER TABLE `custom_fields` ADD COLUMN `description` text AFTER `name`; + +# Footer section +LOCK TABLES `settings` WRITE; +INSERT INTO `settings` (`key`, `value`) VALUES('db_schema_version', @schema_version) ON DUPLICATE KEY UPDATE `value`=@schema_version; +UNLOCK TABLES; diff --git a/views/lists/fields/create.hbs b/views/lists/fields/create.hbs index dddeab85..8ebadd69 100644 --- a/views/lists/fields/create.hbs +++ b/views/lists/fields/create.hbs @@ -19,6 +19,13 @@
    +
    + +
    + +
    +
    +
    diff --git a/views/lists/fields/edit.hbs b/views/lists/fields/edit.hbs index c59b3484..f9135111 100644 --- a/views/lists/fields/edit.hbs +++ b/views/lists/fields/edit.hbs @@ -26,6 +26,13 @@
    +
    + +
    + +
    +
    +
    diff --git a/views/subscription/partials/subscription-custom-fields.hbs b/views/subscription/partials/subscription-custom-fields.hbs index 99ac99c4..f63a1b80 100644 --- a/views/subscription/partials/subscription-custom-fields.hbs +++ b/views/subscription/partials/subscription-custom-fields.hbs @@ -134,9 +134,12 @@ {{#each options}} +

    + {{description}} +

    {{/each}}
    {{/if}} From d3ad3e5d688234db5ac333b364b5354f64dce88b Mon Sep 17 00:00:00 2001 From: Andreas Teuber Date: Tue, 23 Oct 2018 17:01:08 +0200 Subject: [PATCH 463/483] Fix Travis --- lib/models/segments.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/models/segments.js b/lib/models/segments.js index 209f12e7..a2e891f9 100644 --- a/lib/models/segments.js +++ b/lib/models/segments.js @@ -574,11 +574,12 @@ module.exports.getQuery = (id, prefix, callback) => { segment.rules.forEach(rule => { switch (rule.columnType.type) { - case 'string': + case 'string': { let condition = rule.value.negate ? 'NOT LIKE' : 'LIKE'; query.push(prefix + '`' + rule.columnType.column + '` ' + condition + ' ?'); values.push(rule.value.value); break; + } case 'boolean': query.push(prefix + '`' + rule.columnType.column + '` = ?'); values.push(rule.value.value); From 5b241862407b5c4ffc7c8c1c9ac0a02bad6bf160 Mon Sep 17 00:00:00 2001 From: Andreas Teuber Date: Wed, 31 Oct 2018 16:37:52 +0100 Subject: [PATCH 464/483] Adapted API description --- views/users/api.hbs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/views/users/api.hbs b/views/users/api.hbs index db51df39..a48479ca 100644 --- a/views/users/api.hbs +++ b/views/users/api.hbs @@ -181,6 +181,7 @@

    • NAME – {{#translate}}field name{{/translate}} ({{#translate}}required{{/translate}})
    • +
    • DESCRIPTION – {{#translate}}field description{{/translate}}
    • TYPE – {{#translate}}one of the following types:{{/translate}}
        {{#each allowedTypes}} @@ -333,4 +334,4 @@ {{#translate}}Example{{/translate}}

        -
        curl -XGET '{{serviceUrl}}api/list/1?access_token={{accessToken}}'
        \ No newline at end of file +
        curl -XGET '{{serviceUrl}}api/list/1?access_token={{accessToken}}'
        From a49a9b2637cf3e1688b4e0725687ba76127f7b3b Mon Sep 17 00:00:00 2001 From: Arno Date: Thu, 29 Nov 2018 17:28:33 +0100 Subject: [PATCH 465/483] update french translation and a typo in views/lists/segments/rule-edit.hbs --- languages/fr_FR.po | 50 +++++++++++++++--------------- views/lists/segments/rule-edit.hbs | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/languages/fr_FR.po b/languages/fr_FR.po index 41649cd1..0b493f3b 100644 --- a/languages/fr_FR.po +++ b/languages/fr_FR.po @@ -254,11 +254,11 @@ msgstr "Abonnés ayant cliqué sur ce lien :" #: views/campaigns/clicked.hbs:13 views/campaigns/opened.hbs:7 msgid "Stats by country" -msgstr "Stats par pays" +msgstr "Statistiques par pays" #: views/campaigns/clicked.hbs:14 views/campaigns/opened.hbs:8 msgid "Stats by device type" -msgstr "Statits par type d'équipement" +msgstr "Statistiques par type d'équipement" #: views/campaigns/clicked.hbs:18 msgid "First click time" @@ -371,7 +371,7 @@ msgstr "Nom de l'émetteur du message" #: views/campaigns/edit-triggered.hbs:17 views/campaigns/edit.hbs:18 #: views/settings.hbs:25 msgid "This is the name your emails will come from" -msgstr "Il s'agit du nom d'émetteur utilisés pour les messages de la liste" +msgstr "Il s'agit du nom d'émetteur utilisé pour les messages de la liste" #: views/campaigns/create-rss.hbs:17 views/campaigns/create-triggered.hbs:20 #: views/campaigns/create.hbs:20 views/campaigns/edit-rss.hbs:20 @@ -450,7 +450,7 @@ msgid "" "This is the address people will send replies to unless reply-to address is " "set" msgstr "" -"L'adresse à laquelle les utilisateurs enverront leurs réponses, sauf si " +"L'adresse à laquelle les utilisateurs enverront leurs réponses, sauf si une " "autre adresse Reply-to a été précisée" #: views/campaigns/create.hbs:22 views/campaigns/edit.hbs:21 @@ -994,7 +994,7 @@ msgid "" "HTML yourself." msgstr "" "Mailtrain inclut GrapeJS et Mosaico, deux éditeurs de templates avancés. " -"Mailtrain offre également un éditeur de code si vous préférer créer le HTML " +"Mailtrain offre également un éditeur de code si vous préférez créer le HTML " "par vous-même." #: views/index.hbs:23 @@ -1142,7 +1142,7 @@ msgid "" "The custom form used for this list. You can create a form here." msgstr "" -"Le formulaire personnalisé utilisé pour cette liste. Vous pouvez créé un " +"Le formulaire personnalisé utilisé pour cette liste. Vous pouvez créer un " "formulaire ici." #: views/lists/edit.hbs:19 @@ -1415,11 +1415,11 @@ msgstr "Notification enregistrée" #: views/lists/forms/edit.hbs:18 msgid "Unsubscribed Notice" -msgstr "Mention de désabonnement" +msgstr "Notification de désabonnement" #: views/lists/forms/edit.hbs:19 msgid "Manual Unsubscribe Notice" -msgstr "Information de désabonnement manuel" +msgstr "Notification de désabonnement manuel" #: views/lists/forms/edit.hbs:21 routes/forms.js:205 msgid "Manage" @@ -1555,7 +1555,7 @@ msgstr "vaut" #: views/lists/segments/rule-configure.hbs:9 #: views/lists/segments/rule-edit.hbs:9 -msgid "Not squals" +msgid "Not equals" msgstr "Différent" #: views/lists/segments/rule-configure.hbs:10 @@ -2750,7 +2750,7 @@ msgstr "Votre abonnement à la liste a été confirmé." #: views/subscription/mail-unsubscription-confirmed-html.mjml.hbs:1 #: views/subscription/mail-unsubscription-confirmed-text.hbs:1 msgid "You Are Now Unsubscribed" -msgstr "Vous n'êtes désormais plus abonné" +msgstr "Vous êtes désormais désabonné" #: views/subscription/mail-unsubscription-confirmed-html.mjml.hbs:2 msgid "We have removed your email address from our list" @@ -2769,7 +2769,7 @@ msgstr "Nous avons retiré votre adresse mail de notre liste." #: views/subscription/partials/subscription-custom-fields.hbs:2 msgid "want to change it?" -msgstr "Vous voulez le changer ?" +msgstr "Voulez-vous le changer ?" #: views/subscription/partials/subscription-custom-fields.hbs:5 msgid "Download signature verification key" @@ -2869,7 +2869,7 @@ msgstr "Mettre à jour votre adresse mail" #: views/subscription/web-manage.mjml.hbs:1 msgid "Update Your Preferences" -msgstr "Mettre à jour vos préférence" +msgstr "Mettre à jour vos préférences" #: views/subscription/web-manual-unsubscribe-notice.mjml.hbs:1 msgid "Online Unsubscription Is Not Possible" @@ -3091,15 +3091,15 @@ msgstr "Êtes-vous sûr ?" #: views/users/api.hbs:6 msgid "Reset Access Token" -msgstr "Réinitialiser le token d'accès" +msgstr "Réinitialiser le jeton d'accès" #: views/users/api.hbs:7 msgid "Generate Access Token" -msgstr "Générer un token d'accès" +msgstr "Générer un jeton d'accès" #: views/users/api.hbs:8 msgid "Personal access token:" -msgstr "Token d'accès privé :" +msgstr "Jeton d'accès privé :" #: views/users/api.hbs:9 msgid "Access token not yet generated" @@ -3383,7 +3383,7 @@ msgid "" "Please provide the username or email address that you used when you signed " "up for your Mailtrain account." msgstr "" -"Merci de fournir le nom d'utilisateur et l'adresse mail que vous avez " +"Merci d'entrer le nom d'utilisateur et l'adresse mail que vous avez " "fournis lors de votre inscription au service." #: views/users/forgot.hbs:8 @@ -3425,7 +3425,7 @@ msgstr "Ne peut trouver de modèle avec cet identifiant" #: routes/campaigns.js:468 routes/campaigns.js:845 routes/campaigns.js:868 #: routes/campaigns.js:887 routes/campaigns.js:909 routes/triggers.js:172 msgid "Could not find campaign with specified ID" -msgstr "Ne peut trouver de campagne avec cet identifiant" +msgstr "Aucune campagne ne correspond à cet identifiant" #: lib/editor-helpers.js:47 routes/editorapi.js:320 msgid "Invalid resource type" @@ -3461,15 +3461,15 @@ msgstr "Nom complet (Prénom et nom combinés)" #: lib/helpers.js:54 msgid "Unique ID that identifies the recipient" -msgstr "Identifiant unique qui identifie le destinataire" +msgstr "Identifiant unique du destinataire" #: lib/helpers.js:57 msgid "Unique ID that identifies the list used for this campaign" -msgstr "Identifiant unique qui identifie la liste utilisée pour cette campagne" +msgstr "Identifiant unique de la liste utilisée pour cette campagne" #: lib/helpers.js:60 msgid "Unique ID that identifies current campaign" -msgstr "Identifiant unique qui identifie cette campagne" +msgstr "Identifiant unique de cette campagne" #: lib/helpers.js:68 lib/helpers.js:80 msgid "content from an RSS entry" @@ -3929,7 +3929,7 @@ msgstr "Non trouvé" #: routes/archive.js:121 services/sender.js:454 msgid "Received status code %s from %s" -msgstr "Le code de status %s a été reçu de %s" +msgstr "Le code de statut %s a été reçu de %s" #: routes/archive.js:153 routes/campaigns.js:895 msgid "Attachment not found" @@ -4034,7 +4034,7 @@ msgstr "Envoi activé" #: routes/campaigns.js:821 msgid "Could not activate sending" -msgstr "Ne peut activer l'envoi" +msgstr "Impossible d'activer l'envoi" #: routes/campaigns.js:856 msgid "Attachment uploaded" @@ -4169,7 +4169,7 @@ msgstr "Mail - Abonnement confirmé (Texte)" #: routes/forms.js:208 msgid "Web - Manage Preferences" -msgstr "Web - Gesteion des préférences" +msgstr "Web - Gestion des préférences" #: routes/forms.js:213 msgid "Web - Manage Address" @@ -4264,7 +4264,7 @@ msgstr "Les paramètres de la liste ont été mis à jour" #: routes/lists.js:124 msgid "List settings not updated" -msgstr "Les paramètres de la liste n'ont pu être registrés" +msgstr "Les paramètres de la liste n'ont pu être enregistrés" #: routes/lists.js:142 msgid "List deleted" @@ -4657,7 +4657,7 @@ msgstr "Un mail avec des instructions a été envoyé à l'adresse fournie" #: routes/subscription.js:861 routes/subscription.js:877 msgid "Public key is not set" -msgstr "La clé publlique n'est pas renseignée" +msgstr "La clé publique n'est pas renseignée" #: routes/templates.js:84 msgid "Could not create template" diff --git a/views/lists/segments/rule-edit.hbs b/views/lists/segments/rule-edit.hbs index 9c78c044..fd6281f1 100644 --- a/views/lists/segments/rule-edit.hbs +++ b/views/lists/segments/rule-edit.hbs @@ -36,7 +36,7 @@ {{#translate}}Equals{{/translate}}
    From ebd7b1fffb92826f68b634c46dcc136c1aa20c61 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Tue, 25 Dec 2018 20:49:18 +0100 Subject: [PATCH 466/483] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8d8ed08e..f4778371 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +## Mailtrain v2 beta is available. Check it out here https://github.com/Mailtrain-org/mailtrain/tree/development + # Mailtrain [Mailtrain](http://mailtrain.org) is a self hosted newsletter application built on Node.js (v7+) and MySQL (v5.5+ or MariaDB). From f2ed0e8ce292e4651fb1db4d0ebbf1917e22a135 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Tue, 25 Dec 2018 21:08:24 +0100 Subject: [PATCH 467/483] Update README.md --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 39db88e8..77f77d3c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,4 @@ -# Mailtrain +# Mailtrain (v1) [Mailtrain](http://mailtrain.org) is a self hosted newsletter application built on Node.js (v7+) and MySQL (v5.5+ or MariaDB). From 2b11a319b48a32a64a3d4c517ce2146047b60503 Mon Sep 17 00:00:00 2001 From: Andreas Teuber Date: Thu, 7 Mar 2019 19:15:28 +0100 Subject: [PATCH 468/483] Added possibility to duplicate a campaign --- lib/models/campaigns.js | 11 +++++++++++ routes/campaigns.js | 13 +++++++++++++ views/campaigns/edit.hbs | 6 ++++++ 3 files changed, 30 insertions(+) diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index e9b178ea..f2410763 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -365,6 +365,17 @@ module.exports.getLinks = (id, linkId, callback) => { }); }; +module.exports.duplicate = (id, callback) => module.exports.get(id, true, (err, campaign) => { + if (err) { + return callback(err); + } + if (!campaign) { + return callback(new Error(_('Campaign does not exist'))); + } + campaign.name = campaign.name + ' Copy'; + return module.exports.create(campaign, false, callback); +}); + module.exports.create = (campaign, opts, callback) => { campaign = tools.convertKeys(campaign); diff --git a/routes/campaigns.js b/routes/campaigns.js index d9c3cd49..2a65733f 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -126,6 +126,19 @@ router.post('/create', passport.parseForm, passport.csrfProtection, (req, res) = }); }); +router.post('/duplicate', passport.parseForm, passport.csrfProtection, (req, res) => { + campaigns.duplicate(req.body.id, (err, duplicated) => { + if (err) { + req.flash('danger', err && err.message || err); + } else if (duplicated) { + req.flash('success', _('Campaign duplicated')); + } else { + req.flash('info', _('Could not duplicate specified campaign')); + } + return res.redirect('/campaigns/edit/' + duplicated); + }); +}); + router.get('/edit/:id', passport.csrfProtection, (req, res, next) => { campaigns.get(req.params.id, false, (err, campaign) => { if (err || !campaign) { diff --git a/views/campaigns/edit.hbs b/views/campaigns/edit.hbs index 759672f1..b4256318 100644 --- a/views/campaigns/edit.hbs +++ b/views/campaigns/edit.hbs @@ -17,6 +17,11 @@ +
    + + +
    + {{#each attachments}}
    @@ -240,6 +245,7 @@
    +
    From 4a446a99f0390509a1e86f6fe2a2a6de0dbbd88b Mon Sep 17 00:00:00 2001 From: Andreas Teuber Date: Tue, 23 Oct 2018 17:01:08 +0200 Subject: [PATCH 469/483] Fix Travis --- lib/models/segments.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/models/segments.js b/lib/models/segments.js index 209f12e7..a2e891f9 100644 --- a/lib/models/segments.js +++ b/lib/models/segments.js @@ -574,11 +574,12 @@ module.exports.getQuery = (id, prefix, callback) => { segment.rules.forEach(rule => { switch (rule.columnType.type) { - case 'string': + case 'string': { let condition = rule.value.negate ? 'NOT LIKE' : 'LIKE'; query.push(prefix + '`' + rule.columnType.column + '` ' + condition + ' ?'); values.push(rule.value.value); break; + } case 'boolean': query.push(prefix + '`' + rule.columnType.column + '` = ?'); values.push(rule.value.value); From e2a9cc9429590c00d34df2a23410acdda62be558 Mon Sep 17 00:00:00 2001 From: Felix Wolfsteller Date: Tue, 19 Mar 2019 09:47:58 +0100 Subject: [PATCH 470/483] Update README The sentences are a bit long, but it prevents default installations to have issues with image uploads (#374). --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f4778371..aed0e107 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Depending on how you have configured your system and Docker you may need to prep * Start: `docker-compose start` * Open [http://localhost:3000/](http://localhost:3000/) (change the host name `localhost` to the name of the host where you are deploying the system). * Authenticate as user `admin` with password `test` -* Navigate to [http://localhost:3000/settings](http://localhost:3000/settings) and update service configuration. +* Navigate to [http://localhost:3000/settings](http://localhost:3000/settings) and update service configuration, especially replace the value in `Service Address (URL)` from `localhost` to the actual IP or domain if installed on a server, otherwise e.g. image upload will not work. * Navigate to [http://localhost:3000/users/account](http://localhost:3000/users/account) and update user information and password. ## Quick Start - Manual Install (any OS that supports Node.js) @@ -49,7 +49,7 @@ Depending on how you have configured your system and Docker you may need to prep 4. Run the server `NODE_ENV=production npm start` 5. Open [http://localhost:3000/](http://localhost:3000/) 6. Authenticate as `admin`:`test` - 7. Navigate to [http://localhost:3000/settings](http://localhost:3000/settings) and update service configuration + 7. Navigate to [http://localhost:3000/settings](http://localhost:3000/settings) and update service configuration, especially replace the value in `Service Address (URL)` from `localhost` to the actual IP or domain if installed on a server, otherwise e.g. image upload will not work. 8. Navigate to [http://localhost:3000/users/account](http://localhost:3000/users/account) and update user information and password ## Read The Docs From cda2beb5f55ecb8273e4db7acf298c637176cd27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20Paszkiewicz?= Date: Tue, 2 Apr 2019 11:15:58 +0200 Subject: [PATCH 471/483] - moved PL language files to proper place --- languages/pl_PL.mo | Bin 0 -> 71888 bytes languages/pl_PL.po | 3737 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 3737 insertions(+) create mode 100644 languages/pl_PL.mo create mode 100644 languages/pl_PL.po diff --git a/languages/pl_PL.mo b/languages/pl_PL.mo new file mode 100644 index 0000000000000000000000000000000000000000..7a58bc3f768113d4d50f16bf253e895acaa7e8cb GIT binary patch literal 71888 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�*r}1s2 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 && n%10<=4 && (n%100<12 " +"|| n%100>14) ? 1 : 2);\n" +"Last-Translator: \n" +"Language: pl_PL\n" + +#: views/archive/layout.hbs:1 views/layout.hbs:1 +#: views/subscription/layout.hbs:1 routes/index.js:11 +msgid "Self hosted email newsletter app" +msgstr "Samodzielnie hostowana aplikacja e-mail newsletter" + +#: views/campaigns/bounced.hbs:1 views/campaigns/campaigns.hbs:1 +#: views/campaigns/clicked.hbs:1 views/campaigns/complained.hbs:1 +#: views/campaigns/create-rss.hbs:1 views/campaigns/create-triggered.hbs:1 +#: views/campaigns/create.hbs:1 views/campaigns/delivered.hbs:1 +#: views/campaigns/edit-rss.hbs:1 views/campaigns/edit-triggered.hbs:1 +#: views/campaigns/edit.hbs:1 views/campaigns/opened.hbs:1 +#: views/campaigns/unsubscribed.hbs:1 views/campaigns/upload-attachment.hbs:1 +#: views/campaigns/view.hbs:1 views/lists/create.hbs:1 views/lists/edit.hbs:1 +#: views/lists/fields/create.hbs:1 views/lists/fields/edit.hbs:1 +#: views/lists/fields/fields.hbs:1 views/lists/lists.hbs:1 +#: views/lists/segments/create.hbs:1 views/lists/segments/edit.hbs:1 +#: views/lists/segments/rule-configure.hbs:1 +#: views/lists/segments/rule-create.hbs:1 views/lists/segments/rule-edit.hbs:1 +#: views/lists/segments/segments.hbs:1 views/lists/segments/view.hbs:1 +#: views/lists/subscription/add.hbs:1 views/lists/subscription/edit.hbs:1 +#: views/lists/subscription/import-failed.hbs:1 +#: views/lists/subscription/import-preview.hbs:1 +#: views/lists/subscription/import.hbs:1 views/lists/view.hbs:1 +#: views/settings.hbs:1 views/templates/create.hbs:1 +#: views/templates/edit.hbs:1 views/templates/templates.hbs:1 +#: views/triggers/create-select.hbs:1 views/triggers/create.hbs:1 +#: views/triggers/edit.hbs:1 views/triggers/triggered.hbs:1 +#: views/triggers/triggers.hbs:1 views/users/account.hbs:1 +#: views/users/api.hbs:1 views/users/forgot.hbs:1 views/users/login.hbs:1 +#: views/users/reset.hbs:1 app.js:169 +msgid "Home" +msgstr "Strona główna" + +#: views/campaigns/bounced.hbs:2 views/campaigns/campaigns.hbs:2 +#: views/campaigns/campaigns.hbs:7 views/campaigns/clicked.hbs:2 +#: views/campaigns/complained.hbs:2 views/campaigns/create-rss.hbs:2 +#: views/campaigns/create-triggered.hbs:2 views/campaigns/create.hbs:2 +#: views/campaigns/delivered.hbs:2 views/campaigns/edit-rss.hbs:2 +#: views/campaigns/edit-triggered.hbs:2 views/campaigns/edit.hbs:2 +#: views/campaigns/opened.hbs:2 views/campaigns/unsubscribed.hbs:2 +#: views/campaigns/upload-attachment.hbs:2 views/campaigns/view.hbs:2 +#: lib/tools.js:119 routes/campaigns.js:35 +msgid "Campaigns" +msgstr "Kampanie" + +#: views/campaigns/bounced.hbs:3 views/campaigns/bounced.hbs:4 +msgid "Bounced info" +msgstr "Informacje o odrzuconych/odbiciach" + +#: views/campaigns/bounced.hbs:5 views/campaigns/clicked.hbs:5 +#: views/campaigns/complained.hbs:5 views/campaigns/delivered.hbs:5 +#: views/campaigns/edit-rss.hbs:5 views/campaigns/edit-triggered.hbs:5 +#: views/campaigns/edit.hbs:5 views/campaigns/opened.hbs:5 +#: views/campaigns/unsubscribed.hbs:5 views/campaigns/upload-attachment.hbs:6 +msgid "View campaign" +msgstr "Zobacz kampanię" + +#: views/campaigns/bounced.hbs:6 +msgid "Subscribers who bounced and were unsubscribed:" +msgstr "Subskrybenci, którzy odbili wiadomość i zrezygnowali z subskrypcji:" + +#: views/campaigns/bounced.hbs:7 views/campaigns/clicked.hbs:13 +#: views/campaigns/complained.hbs:7 views/campaigns/delivered.hbs:7 +#: views/campaigns/opened.hbs:7 views/campaigns/unsubscribed.hbs:7 +#: views/lists/subscription/import-failed.hbs:9 views/lists/view.hbs:18 +#: views/triggers/triggered.hbs:6 +msgid "Address" +msgstr "Adres" + +#: views/campaigns/bounced.hbs:8 views/campaigns/clicked.hbs:14 +#: views/campaigns/complained.hbs:8 views/campaigns/delivered.hbs:8 +#: views/campaigns/opened.hbs:8 views/campaigns/unsubscribed.hbs:8 +#: views/lists/subscription/add.hbs:6 views/lists/subscription/edit.hbs:7 +#: views/lists/subscription/import-preview.hbs:7 views/lists/view.hbs:19 +#: views/subscription/manage.hbs:4 views/subscription/subscribe.hbs:4 +#: views/triggers/triggered.hbs:7 +msgid "First Name" +msgstr "Imię" + +#: views/campaigns/bounced.hbs:9 views/campaigns/clicked.hbs:15 +#: views/campaigns/complained.hbs:9 views/campaigns/delivered.hbs:9 +#: views/campaigns/opened.hbs:9 views/campaigns/unsubscribed.hbs:9 +#: views/lists/subscription/add.hbs:7 views/lists/subscription/edit.hbs:8 +#: views/lists/subscription/import-preview.hbs:8 views/lists/view.hbs:20 +#: views/subscription/manage.hbs:5 views/subscription/subscribe.hbs:5 +#: views/triggers/triggered.hbs:8 +msgid "Last Name" +msgstr "Nazwisko" + +#: views/campaigns/bounced.hbs:10 views/campaigns/complained.hbs:10 +#: views/campaigns/delivered.hbs:10 views/campaigns/unsubscribed.hbs:10 +msgid "SMTP response" +msgstr "Odpowiedź SMTP" + +#: views/campaigns/bounced.hbs:11 +msgid "Bounce time" +msgstr "Czas odbicia" + +#: views/campaigns/campaigns.hbs:3 views/campaigns/create-triggered.hbs:24 +#: views/campaigns/create.hbs:3 views/campaigns/create.hbs:4 +#: views/campaigns/create.hbs:27 +msgid "Create Campaign" +msgstr "Utwórz Kampanię" + +#: views/campaigns/campaigns.hbs:4 +msgid "Regular Campaign" +msgstr "Zwykła kampania" + +#: views/campaigns/campaigns.hbs:5 +msgid "RSS Campaign" +msgstr "Kampania RSS" + +#: views/campaigns/campaigns.hbs:6 +msgid "Triggered Campaign" +msgstr "Wywołana kampania" + +#: views/campaigns/campaigns.hbs:8 views/campaigns/create-rss.hbs:6 +#: views/campaigns/create-triggered.hbs:5 views/campaigns/create.hbs:5 +#: views/campaigns/edit-rss.hbs:8 views/campaigns/edit-triggered.hbs:9 +#: views/campaigns/edit.hbs:10 views/campaigns/view.hbs:71 +#: views/lists/create.hbs:5 views/lists/edit.hbs:6 +#: views/lists/fields/fields.hbs:6 views/lists/lists.hbs:5 +#: views/lists/segments/segments.hbs:6 views/templates/templates.hbs:5 +#: views/triggers/triggers.hbs:5 +msgid "Name" +msgstr "Nazwa" + +#: views/campaigns/campaigns.hbs:9 views/campaigns/create-rss.hbs:8 +#: views/campaigns/create-triggered.hbs:7 views/campaigns/create.hbs:7 +#: views/campaigns/edit-rss.hbs:10 views/campaigns/edit-triggered.hbs:11 +#: views/campaigns/edit.hbs:12 views/campaigns/view.hbs:72 +#: views/lists/create.hbs:7 views/lists/edit.hbs:10 views/lists/lists.hbs:8 +#: views/partials/merge-tag-reference.hbs:4 views/templates/create.hbs:9 +#: views/templates/edit.hbs:8 views/templates/templates.hbs:6 +#: views/triggers/create.hbs:7 views/triggers/edit.hbs:8 +#: views/triggers/triggers.hbs:7 +msgid "Description" +msgstr "Opis" + +#: views/campaigns/campaigns.hbs:10 views/campaigns/view.hbs:73 +#: views/lists/view.hbs:21 views/lists/view.hbs:29 +#: views/triggers/triggers.hbs:6 +msgid "Status" +msgstr "Status" + +#: views/campaigns/campaigns.hbs:11 views/campaigns/view.hbs:74 +#: views/lists/view.hbs:22 views/lists/view.hbs:23 +msgid "Created" +msgstr "Utworzono" + +#: views/campaigns/clicked.hbs:3 views/campaigns/clicked.hbs:4 +msgid "Link info" +msgstr "Informacje o linkach" + +#: views/campaigns/clicked.hbs:6 views/campaigns/view.hbs:61 +msgid "URL" +msgstr "URL" + +#: views/campaigns/clicked.hbs:7 views/campaigns/view.hbs:62 +msgid "Clicks" +msgstr "Kliknięcia" + +#: views/campaigns/clicked.hbs:8 views/campaigns/view.hbs:63 +msgid "% of clicks" +msgstr "% kliknięć" + +#: views/campaigns/clicked.hbs:9 views/campaigns/view.hbs:64 +msgid "% of messages" +msgstr "% wiadomości" + +#: views/campaigns/clicked.hbs:10 views/campaigns/view.hbs:67 +msgid "Aggregated clicks" +msgstr "Zagregowane kliknięcia" + +#: views/campaigns/clicked.hbs:11 +msgid "Subscribers who clicked on a link:" +msgstr "Subskrybenci, którzy kliknęli link:" + +#: views/campaigns/clicked.hbs:12 +msgid "Subscribers who clicked on this link:" +msgstr "Subskrybenci, którzy kliknęli ten link:" + +#: views/campaigns/clicked.hbs:16 +msgid "First click time" +msgstr "Czas pierwszego kliknięcia" + +#: views/campaigns/clicked.hbs:17 +msgid "Click count" +msgstr "Liczba kliknięć" + +#: views/campaigns/complained.hbs:3 views/campaigns/complained.hbs:4 +msgid "Complained info" +msgstr "Informacje o skargach" + +#: views/campaigns/complained.hbs:6 +msgid "Subscribers who complained and were unsubscribed:" +msgstr "Subskrybenci, którzy złożyli skargę i wypisali się:" + +#: views/campaigns/complained.hbs:11 +msgid "Complain time" +msgstr "Czas skargi" + +#: views/campaigns/create-rss.hbs:3 views/campaigns/create-rss.hbs:4 +#: views/campaigns/create-rss.hbs:20 +msgid "Create RSS Campaign" +msgstr "Utwórz kampanię RSS" + +#: views/campaigns/create-rss.hbs:5 views/campaigns/edit-rss.hbs:6 +msgid "" +"RSS campaign sets up a tracker against selected RSS feed address. Whenever a " +"new entry is found from this feed it is sent to selected list as an email " +"message." +msgstr "" +"Kampania RSS ustawia moduł śledzący na wybrany adres RSS. Za każdym razem, " +"gdy nowy wpis zostanie znaleziony z tego kanału, zostanie wysłany na wybraną " +"listę jako wiadomość e-mail." + +#: views/campaigns/create-rss.hbs:7 views/campaigns/create-triggered.hbs:6 +#: views/campaigns/create.hbs:6 views/campaigns/edit-rss.hbs:9 +#: views/campaigns/edit-triggered.hbs:10 views/campaigns/edit.hbs:11 +msgid "Campaign Name" +msgstr "Nazwa kampanii" + +#: views/campaigns/create-rss.hbs:9 views/campaigns/create-triggered.hbs:8 +#: views/campaigns/create.hbs:8 views/campaigns/edit-rss.hbs:11 +#: views/campaigns/edit-triggered.hbs:12 views/campaigns/edit.hbs:13 +#: views/lists/create.hbs:8 views/lists/edit.hbs:11 +#: views/templates/create.hbs:11 views/templates/edit.hbs:10 +#: views/triggers/create.hbs:9 views/triggers/edit.hbs:10 +msgid "HTML is allowed" +msgstr "HTML dozwolony" + +#: views/campaigns/create-rss.hbs:10 views/campaigns/create-triggered.hbs:9 +#: views/campaigns/create.hbs:9 views/campaigns/edit-rss.hbs:12 +#: views/campaigns/edit-triggered.hbs:13 views/campaigns/edit.hbs:14 +#: views/campaigns/view.hbs:6 views/triggers/create-select.hbs:6 +#: views/triggers/create.hbs:10 views/triggers/edit.hbs:12 +#: views/triggers/triggers.hbs:8 +msgid "List" +msgstr "Lista" + +#: views/campaigns/create-rss.hbs:11 views/campaigns/create-triggered.hbs:10 +#: views/campaigns/create-triggered.hbs:13 views/campaigns/create.hbs:10 +#: views/campaigns/create.hbs:14 views/campaigns/edit-rss.hbs:13 +#: views/campaigns/edit-triggered.hbs:14 views/campaigns/edit.hbs:15 +#: views/lists/fields/create.hbs:27 views/lists/fields/edit.hbs:28 +#: views/lists/segments/create.hbs:9 views/lists/segments/edit.hbs:10 +#: views/lists/segments/rule-create.hbs:7 views/lists/subscription/add.hbs:10 +#: views/lists/subscription/add.hbs:12 views/lists/subscription/edit.hbs:11 +#: views/lists/subscription/import-preview.hbs:5 +#: views/subscription/manage.hbs:10 views/subscription/subscribe.hbs:10 +#: views/templates/create.hbs:8 views/triggers/create-select.hbs:7 +#: views/triggers/create.hbs:17 views/triggers/create.hbs:20 +#: views/triggers/create.hbs:22 views/triggers/create.hbs:26 +#: views/triggers/edit.hbs:19 views/triggers/edit.hbs:22 +#: views/triggers/edit.hbs:24 views/triggers/edit.hbs:28 +msgid "Select" +msgstr "Wybierz" + +#: views/campaigns/create-rss.hbs:12 views/campaigns/create-triggered.hbs:11 +#: views/campaigns/create.hbs:11 views/campaigns/edit-rss.hbs:14 +#: views/campaigns/edit-triggered.hbs:15 views/campaigns/edit.hbs:16 +#: views/triggers/create-select.hbs:8 views/triggers/create.hbs:11 +#: views/triggers/edit.hbs:13 +msgid "subscribers" +msgstr "subskrybenci" + +#: views/campaigns/create-rss.hbs:13 views/campaigns/edit-rss.hbs:15 +msgid "RSS Feed Url" +msgstr "Adres URL kanału RSS" + +#: views/campaigns/create-rss.hbs:14 views/campaigns/edit-rss.hbs:16 +msgid "" +"New entries from this RSS URL are sent out to list subscribers as email " +"messages" +msgstr "" +"Nowe wpisy z tego adresu RSS są wysyłane do listy subskrybentów, jak " +"wiadomości e-mail" + +#: views/campaigns/create-rss.hbs:15 views/campaigns/create-triggered.hbs:17 +#: views/campaigns/create.hbs:18 views/campaigns/edit-rss.hbs:18 +#: views/campaigns/edit-triggered.hbs:16 views/campaigns/edit.hbs:17 +#: views/campaigns/view.hbs:12 +msgid "Email \"from name\"" +msgstr "E-mail nazwa \"from\"" + +#: views/campaigns/create-rss.hbs:16 views/campaigns/create-triggered.hbs:18 +#: views/campaigns/create.hbs:19 views/campaigns/edit-rss.hbs:19 +#: views/campaigns/edit.hbs:18 views/settings.hbs:23 +msgid "This is the name your emails will come from" +msgstr "This is the name your emails will come from" + +#: views/campaigns/create-rss.hbs:17 views/campaigns/create-triggered.hbs:19 +#: views/campaigns/create.hbs:20 views/campaigns/edit-rss.hbs:20 +#: views/campaigns/edit-triggered.hbs:18 views/campaigns/edit.hbs:19 +#: views/campaigns/view.hbs:13 +msgid "Email \"from\" address" +msgstr "E-mail adres \"from\"" + +#: views/campaigns/create-rss.hbs:18 views/campaigns/create-triggered.hbs:20 +#: views/campaigns/edit-rss.hbs:21 views/campaigns/edit-triggered.hbs:19 +#: views/settings.hbs:25 +msgid "This is the address people will send replies to" +msgstr "To jest adres na który ludzie będą wysyłać odpowiedzi" + +#: views/campaigns/create-rss.hbs:19 views/campaigns/create-triggered.hbs:23 +#: views/campaigns/create.hbs:26 views/campaigns/edit-rss.hbs:22 +#: views/campaigns/edit-triggered.hbs:22 views/campaigns/edit.hbs:25 +msgid "Disable clicked/opened tracking" +msgstr "Wyłącz kliknięte/otwarte śledzenie" + +#: views/campaigns/create-triggered.hbs:3 +#: views/campaigns/create-triggered.hbs:4 +msgid "Create Triggered Campaign" +msgstr "Utwórz uruchamianą kampanię" + +#: views/campaigns/create-triggered.hbs:12 views/campaigns/create.hbs:12 +#: views/campaigns/edit-triggered.hbs:7 views/campaigns/edit.hbs:7 +#: views/lists/fields/create.hbs:31 views/lists/fields/edit.hbs:33 +#: views/templates/create.hbs:13 +msgid "Template" +msgstr "Szablon" + +#: views/campaigns/create-triggered.hbs:14 views/campaigns/create.hbs:15 +msgid "Selecting a template creates a campaign specific copy from it" +msgstr "Wybranie szablonu powoduje utworzenie z niego kopii dla kampanii" + +#: views/campaigns/create-triggered.hbs:15 views/campaigns/create.hbs:16 +msgid "Or alternatively use an URL as the message content source:" +msgstr "Lub alternatywnie użyj adresu URL jako źródło treści wiadomości:" + +#: views/campaigns/create-triggered.hbs:16 views/campaigns/create.hbs:17 +#: views/campaigns/edit-triggered.hbs:25 views/campaigns/edit.hbs:28 +msgid "" +"If a message is sent then this URL will be POSTed to using Merge Tags as " +"POST body. Use this if you want to generate the HTML message yourself" +msgstr "" +"Jeśli wiadomość zostanie wysłana, ten adres URL zostanie wysłany POST do " +"używania merge tagów jako treść POST. Użyj tej opcji, jeśli chcesz " +"samodzielnie wygenerować wiadomość HTML" + +#: views/campaigns/create-triggered.hbs:21 views/campaigns/create.hbs:24 +#: views/campaigns/edit-triggered.hbs:20 views/campaigns/edit.hbs:23 +#: views/campaigns/view.hbs:15 +msgid "Email \"subject line\"" +msgstr "E-mail temat \"from\"" + +#: views/campaigns/create-triggered.hbs:22 views/campaigns/create.hbs:25 +#: views/campaigns/edit-triggered.hbs:21 views/campaigns/edit.hbs:24 +#: views/settings.hbs:27 +msgid "Keep it relevant and non-spammy" +msgstr "Zachowaj to, co istotne i nie spamuj" + +#: views/campaigns/create.hbs:13 +msgid "Select a template:" +msgstr "Wybierz szablon:" + +#: views/campaigns/create.hbs:21 views/campaigns/edit.hbs:20 +msgid "" +"This is the address people will send replies to unless reply-to address is " +"set" +msgstr "" +"To jest adres, na który ludzie będą wysyłać odpowiedzi, chyba że ustawiono " +"adres zwrotny" + +#: views/campaigns/create.hbs:22 views/campaigns/edit.hbs:21 +#: views/campaigns/view.hbs:14 +msgid "Email \"reply-to\" address" +msgstr "Email \"Odpowiedz do\"" + +#: views/campaigns/create.hbs:23 views/campaigns/edit.hbs:22 +msgid "If set, this is the address people will send replies to" +msgstr "" +"Jeśli jest ustawiony, jest to adres, na który ludzie będą wysyłać odpowiedzi" + +#: views/campaigns/delivered.hbs:3 views/campaigns/delivered.hbs:4 +msgid "Delivered info" +msgstr "Informacje o dostarczonych" + +#: views/campaigns/delivered.hbs:6 +msgid "Subscribers who received the message and did not bounce/unsubscribe:" +msgstr "" +"Subskrybenci, którzy otrzymali wiadomość i nie odrzucili/nie anulowali " +"subskrypcji:" + +#: views/campaigns/delivered.hbs:11 +msgid "Delivery time" +msgstr "Czas dostarczenia" + +#: views/campaigns/edit-rss.hbs:3 views/campaigns/edit-rss.hbs:4 +msgid "Edit RSS Campaign" +msgstr "Edytuj kampanię RSS" + +#: views/campaigns/edit-rss.hbs:7 views/campaigns/edit-triggered.hbs:8 +#: views/campaigns/edit.hbs:9 views/settings.hbs:4 views/users/account.hbs:6 +msgid "General Settings" +msgstr "Ustawienia główne" + +#: views/campaigns/edit-rss.hbs:17 +msgid "" +"Use special merge tag [RSS_ENTRY] to mark the position for the RSS post " +"content. Additionally you can use any valid merge tag as well." +msgstr "" +"Użyj specjalnego merge tagu [RSS_ENTRY], aby oznaczyć pozycję treści " +"wiadomości RSS. Dodatkowo mżesz użyć dowolnego innego merge tagu." + +#: views/campaigns/edit-rss.hbs:23 views/campaigns/edit-triggered.hbs:26 +#: views/campaigns/edit.hbs:34 +msgid "Delete Campaign" +msgstr "Usuń kampanię" + +#: views/campaigns/edit-rss.hbs:24 views/campaigns/edit-triggered.hbs:27 +#: views/campaigns/edit.hbs:35 views/lists/edit.hbs:13 +#: views/lists/fields/edit.hbs:39 views/lists/segments/edit.hbs:14 +#: views/lists/segments/rule-edit.hbs:38 views/lists/subscription/edit.hbs:17 +#: views/settings.hbs:99 views/templates/edit.hbs:12 +#: views/triggers/edit.hbs:30 views/users/account.hbs:18 +msgid "Update" +msgstr "Zaktualizuj" + +#: views/campaigns/edit-triggered.hbs:3 views/campaigns/edit-triggered.hbs:4 +msgid "Edit Triggered Campaign" +msgstr "Edytuj kampanię uruchamianą" + +#: views/campaigns/edit-triggered.hbs:6 views/campaigns/edit.hbs:6 +msgid "General" +msgstr "Główne" + +#: views/campaigns/edit-triggered.hbs:17 +msgid "his is the name your emails will come from" +msgstr "Nazwa, z której będą wysyłane wszystkie e-maile." + +#: views/campaigns/edit-triggered.hbs:23 views/campaigns/edit.hbs:26 +msgid "Template Settings" +msgstr "Ustawienia szablonu" + +#: views/campaigns/edit-triggered.hbs:24 views/campaigns/edit.hbs:27 +msgid "Template URL" +msgstr "Adres URL szablonu" + +#: views/campaigns/edit.hbs:3 views/campaigns/edit.hbs:4 +#: views/campaigns/upload-attachment.hbs:3 +#: views/campaigns/upload-attachment.hbs:5 views/campaigns/view.hbs:3 +msgid "Edit Campaign" +msgstr "Edytuj kampanie" + +#: views/campaigns/edit.hbs:8 views/campaigns/edit.hbs:29 +msgid "Attachments" +msgstr "Załączniki" + +#: views/campaigns/edit.hbs:30 +msgid "File" +msgstr "Plik" + +#: views/campaigns/edit.hbs:31 +msgid "Size" +msgstr "Rozmiar" + +#: views/campaigns/edit.hbs:32 views/campaigns/view.hbs:66 +#: views/lists/fields/fields.hbs:12 views/lists/view.hbs:32 +msgid "No data available in table" +msgstr "Brak danych w tabeli" + +#: views/campaigns/edit.hbs:33 views/campaigns/upload-attachment.hbs:4 +msgid "Add Attachment" +msgstr "Dodaj załącznik" + +#: views/campaigns/opened.hbs:3 views/campaigns/opened.hbs:4 +msgid "Opened info" +msgstr "Informacje o otwarciach" + +#: views/campaigns/opened.hbs:6 +msgid "Subscribers who opened this message:" +msgstr "Subskrybenci, którzy otworzyli tę wiadomość:" + +#: views/campaigns/opened.hbs:10 +msgid "First open" +msgstr "Pierwsze otwarcie" + +#: views/campaigns/opened.hbs:11 +msgid "Opened count" +msgstr "Liczba otwarć" + +#: views/campaigns/unsubscribed.hbs:3 views/campaigns/unsubscribed.hbs:4 +msgid "Unsubscribed info" +msgstr "Informacje o anulowaniach subskrypcji" + +#: views/campaigns/unsubscribed.hbs:6 +msgid "Subscribers who unsubscribed:" +msgstr "Subskrybenci, którzy anulowali subskrypcję:" + +#: views/campaigns/unsubscribed.hbs:11 views/campaigns/view.hbs:26 +#: views/lists/subscription/import.hbs:10 routes/lists.js:171 +msgid "Unsubscribed" +msgstr "Anulowano subskrypcję" + +#: views/campaigns/upload-attachment.hbs:7 +msgid "Upload" +msgstr "Prześlij" + +#: views/campaigns/view.hbs:4 +msgid "Overview" +msgstr "Przegląd" + +#: views/campaigns/view.hbs:5 +msgid "Links" +msgstr "Linków" + +#: views/campaigns/view.hbs:7 +msgid "Feed URL" +msgstr "Url czytnika" + +#: views/campaigns/view.hbs:8 +msgid "Last check" +msgstr "Ostatnie sprawdzenie" + +#: views/campaigns/view.hbs:9 +msgid "Not yet checked" +msgstr "Jeszcze nie sprawdzone" + +#: views/campaigns/view.hbs:10 +msgid "activate campaign to start checking feed for new messages" +msgstr "" +"aktywuj kampanię, aby rozpocząć sprawdzanie kanału dla nowych wiadomości" + +#: views/campaigns/view.hbs:11 +msgid "RSS status" +msgstr "Status RSS" + +#: views/campaigns/view.hbs:16 +msgid "Preview campaign as" +msgstr "Podgląd kampanii jako" + +#: views/campaigns/view.hbs:17 +msgid "Add new test user" +msgstr "Dodaj użytkownika testowego" + +#: views/campaigns/view.hbs:18 +msgid "No test users yet, create one here" +msgstr "Brak użytkowników testowych, utwórz je tutaj" + +#: views/campaigns/view.hbs:19 +msgid "Go" +msgstr "Dalej" + +#: views/campaigns/view.hbs:20 lib/models/triggers.js:25 +msgid "Delivered" +msgstr "Dostarczone" + +#: views/campaigns/view.hbs:21 +msgid "List subscribers who received this message" +msgstr "Lista subskrybentów, którzy otrzymali tę wiadomość" + +#: views/campaigns/view.hbs:22 routes/lists.js:171 +msgid "Bounced" +msgstr "Odbite" + +#: views/campaigns/view.hbs:23 +msgid "List subscribers who bounced" +msgstr "Lista użytkowników którzy odbili" + +#: views/campaigns/view.hbs:24 +msgid "Complaints" +msgstr "Skargi" + +#: views/campaigns/view.hbs:25 +msgid "List subscribers who complained for this message" +msgstr "Lista subskrybentów, którzy złożyli skargę na tę wiadomość" + +#: views/campaigns/view.hbs:27 +msgid "List subscribers who unsubscribed after this message" +msgstr "Lista subskrybentów, którzy anulowali subskrypcję po tej wiadomości" + +#: views/campaigns/view.hbs:28 +msgid "Opened" +msgstr "Otwarto" + +#: views/campaigns/view.hbs:29 +msgid "List subscribers who opened this message" +msgstr "Lista subskrybentów, którzy otworzyli tę wiadomość" + +#: views/campaigns/view.hbs:30 +msgid "Clicked" +msgstr "Kliknięto" + +#: views/campaigns/view.hbs:31 views/campaigns/view.hbs:68 +msgid "List subscribers who clicked on a link" +msgstr "Lista subskrybentów, którzy kliknęli w link" + +#: views/campaigns/view.hbs:32 +msgid "" +"Are you sure? This action would start sending messages to the selected list" +msgstr "" +"Jesteś pewny? Ta czynność rozpocznie wysyłanie wiadomości do wybranej listy" + +#: views/campaigns/view.hbs:33 +msgid "Delay sending" +msgstr "Opóźnienie wysyłania" + +#: views/campaigns/view.hbs:34 +msgid "hours" +msgstr "godziny" + +#: views/campaigns/view.hbs:35 +msgid "minutes" +msgstr "minuty" + +#: views/campaigns/view.hbs:36 +msgid "Send to subscribers:" +msgstr "Wyślij do subskrybentów:" + +#: views/campaigns/view.hbs:37 +msgid "Are you sure? This action would reset scheduling" +msgstr "Jesteś pewny? Ta czynność zresetuje harmonogram" + +#: views/campaigns/view.hbs:38 +msgid "Cancel" +msgstr "Anuluj" + +#: views/campaigns/view.hbs:39 +msgid "Sending scheduled" +msgstr "Wysyłanie harmonogramu" + +#: views/campaigns/view.hbs:40 views/campaigns/view.hbs:52 +msgid "Pause" +msgstr "Pauza" + +#: views/campaigns/view.hbs:41 routes/campaigns.js:264 +msgid "Sending" +msgstr "Wysyłanie" + +#: views/campaigns/view.hbs:42 views/campaigns/view.hbs:46 +msgid "" +"Are you sure? This action would resume sending messages to the selected list" +msgstr "" +"Jesteś pewny? Ta czynność wznowi wysyłanie wiadomości do wybranej listy" + +#: views/campaigns/view.hbs:43 views/campaigns/view.hbs:47 +msgid "Are you sure? This action would reset all stats about current progress" +msgstr "" +"Jesteś pewny? Ta czynność zresetuje wszystkie statystyki dotyczące bieżącego " +"postępu" + +#: views/campaigns/view.hbs:44 +msgid "Resume" +msgstr "Wznów" + +#: views/campaigns/view.hbs:45 views/campaigns/view.hbs:49 +msgid "Reset" +msgstr "Resetuj" + +#: views/campaigns/view.hbs:48 +msgid "Continue" +msgstr "Kontynuuj" + +#: views/campaigns/view.hbs:50 +msgid "" +"All messages sent! Hit \"Continue\" if you you want to send this campaign to " +"new subscribers" +msgstr "" +"Wszystkie wiadomości wysłane! Kliknij \"Kontynuuj\", jeśli chcesz wysłać tę " +"kampanię do nowych subskrybentów" + +#: views/campaigns/view.hbs:51 +msgid "" +"Are you sure? This action would pause sending new entries in RSS feed as " +"email messages to the selected list" +msgstr "" +"Jesteś pewny? Ta czynność wstrzyma wysyłanie wiadomości o nowych wpisach w " +"kanale RSS do wybranej listy" + +#: views/campaigns/view.hbs:53 views/campaigns/view.hbs:57 +msgid "Campaign status:" +msgstr "Status kampanii:" + +#: views/campaigns/view.hbs:54 +msgid "ACTIVE" +msgstr "AKTYWNE" + +#: views/campaigns/view.hbs:55 +msgid "" +"Are you sure? This action would start sending new entries in RSS feed as " +"email messages to the selected list" +msgstr "" +"Jesteś pewny? Ta czynność rozpocznie wysyłanie wiadomości o nowych wpisach w " +"kanale RSS do wybranej listy" + +#: views/campaigns/view.hbs:56 +msgid "Activate" +msgstr "Aktywuj" + +#: views/campaigns/view.hbs:58 +msgid "INACTIVE" +msgstr "NIEAKTYWNE" + +#: views/campaigns/view.hbs:59 +msgid "" +"This is a triggered campaign. Messages are only sent to subscribers that hit " +"some trigger that invokes this campaign" +msgstr "" +"To jest kampania wyzwalana. Wiadomości są wysyłane tylko do subskrybentów, " +"którzy natrafili na jakiś wyzwalacz, który wywołuje tę kampanię" + +#: views/campaigns/view.hbs:60 +msgid "see more" +msgstr "zobacz więcej" + +#: views/campaigns/view.hbs:65 +msgid "List subscribers who clicked this link" +msgstr "Lista subskrybentów, którzy kliknęli link" + +#: views/campaigns/view.hbs:69 +msgid "" +"Clicks are counted as unique subscribers that clicked on a specific link or " +"on any link (in aggregated view)" +msgstr "" +"Kliknięcia są liczone jako unikalni subskrybenci, którzy kliknęli określony " +"link lub dowolny link (w widoku zbiorczym)" + +#: views/campaigns/view.hbs:70 +msgid "" +"If a new entry is found from campaign feed a new subcampaign is created of " +"that entry and it will be listed here" +msgstr "" +"Jeśli zostanie znaleziony nowy wpis z kanału kampanii, zostanie utworzona " +"nowa kampania podrzędna dla tego wpisu i zostanie ona tutaj wymieniona" + +#: views/emails/confirm-html.hbs:1 views/emails/confirm-html.hbs:2 +#: views/emails/confirm-text.hbs:1 +msgid "Please Confirm Subscription" +msgstr "Proszę potwierdź subskrypcję" + +#: views/emails/confirm-html.hbs:3 views/emails/confirm-text.hbs:2 +msgid "Yes, subscribe me to this list" +msgstr "Tak, zapisz mnie na listę" + +#: views/emails/confirm-html.hbs:4 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"subscribed if you don't click the confirmation link above." +msgstr "" +"Jeśli przez pomyłkę otrzymałeś tego e-maila, po prostu go usuń. Nie będziesz " +"subskrybowany, jeśli nie klikniesz w link potwierdzający." + +#: views/emails/confirm-html.hbs:5 views/emails/confirm-text.hbs:4 +#: views/emails/subscription-confirmed-html.hbs:7 +#: views/emails/subscription-confirmed-text.hbs:7 +#: views/emails/unsubscribe-confirmed-html.hbs:5 +#: views/emails/unsubscribe-confirmed-text.hbs:5 +msgid "For questions about this list, please contact:" +msgstr "W przypadku pytań dotyczących tej listy, prosimy o kontakt:" + +#: views/emails/confirm-text.hbs:3 +msgid "" +"If you received this email by mistake, simply delete it. You won't be " +"subscribed unless you click the confirmation link above." +msgstr "" +"Jeśli przez pomyłkę otrzymałeś tego e-maila, po prostu go usuń. Nie będziesz " +"subskrybowany, chyba że klikniesz link powyżej." + +#: views/emails/password-reset-html.hbs:1 +#: views/emails/password-reset-html.hbs:2 +#: views/emails/password-reset-text.hbs:1 +msgid "Change your password" +msgstr "Zmień hasło" + +#: views/emails/password-reset-html.hbs:3 +#: views/emails/password-reset-text.hbs:2 +msgid "We have received a password change request for your Mailtrain account:" +msgstr "Otrzymaliśmy prośbę o zmianę hasła dla Twojego konta Mailtrain:" + +#: views/emails/password-reset-html.hbs:4 +#: views/emails/password-reset-text.hbs:3 +msgid "Reset password" +msgstr "Zresetuj hasło" + +#: views/emails/password-reset-html.hbs:5 +#: views/emails/password-reset-text.hbs:4 +msgid "" +"If you did not ask to change your password, then you can ignore this email " +"and your password will not be changed." +msgstr "" +"Jeśli nie poprosiłeś o zmianę hasła, możesz zignorować ten e-mail, a Twoje " +"hasło nie zostanie zmienione." + +#: views/emails/rss-html.hbs:1 views/emails/stationery-html.hbs:3 +#: views/emails/stationery-text.hbs:3 +msgid "Preferences" +msgstr "Preferencje" + +#: views/emails/rss-html.hbs:2 views/emails/stationery-html.hbs:4 +#: views/emails/stationery-text.hbs:4 views/lists/subscription/edit.hbs:15 +#: views/subscription/manage.hbs:12 views/subscription/unsubscribe.hbs:1 +#: views/subscription/unsubscribe.hbs:4 routes/lists.js:253 +msgid "Unsubscribe" +msgstr "Anuluj subskrypcję" + +#: views/emails/rss-html.hbs:3 views/emails/stationery-html.hbs:5 +#: views/emails/stationery-text.hbs:5 +msgid "View this email in your browser" +msgstr "Zobacz ten email w Twojej przeglądarce" + +#: views/emails/stationery-html.hbs:1 views/emails/stationery-text.hbs:1 +msgid "Hey [FIRST_NAME/Customer]," +msgstr "Cześć [FIRST_NAME/Customer]," + +#: views/emails/stationery-html.hbs:2 views/emails/stationery-text.hbs:2 +msgid "Cheers," +msgstr "Pozdrowienia," + +#: views/emails/subscription-confirmed-html.hbs:1 +#: views/emails/subscription-confirmed-text.hbs:1 +#: views/subscription/subscribed.hbs:1 +msgid "Subscription Confirmed" +msgstr "Subskrypcja została potwierdzona" + +#: views/emails/subscription-confirmed-html.hbs:2 +#: views/emails/subscription-confirmed-text.hbs:2 +#: views/subscription/subscribed.hbs:2 +msgid "Your subscription to our list has been confirmed." +msgstr "Twoja subskrypcja naszej listy została potwierdzona." + +#: views/emails/subscription-confirmed-html.hbs:3 +#: views/emails/subscription-confirmed-text.hbs:3 +msgid "If you want to modify your subscription then you can:" +msgstr "Jeśli chcesz zmodyfikować swoją subskrypcję, możesz:" + +#: views/emails/subscription-confirmed-html.hbs:4 +#: views/emails/subscription-confirmed-text.hbs:4 +#: views/subscription/subscribed.hbs:6 +msgid "manage your preferences" +msgstr "zarządzaj swoimi preferencjami" + +#: views/emails/subscription-confirmed-html.hbs:5 +#: views/emails/subscription-confirmed-text.hbs:5 +#: views/subscription/subscribed.hbs:5 views/users/login.hbs:10 +msgid "or" +msgstr "lub" + +#: views/emails/subscription-confirmed-html.hbs:6 +#: views/emails/subscription-confirmed-text.hbs:6 +msgid "unsubscribe here" +msgstr "anuluj subskrypcję tutaj" + +#: views/emails/unsubscribe-confirmed-html.hbs:1 +#: views/emails/unsubscribe-confirmed-text.hbs:1 +msgid "You are now unsubscribed" +msgstr "Anulowałeś subskrypcję" + +#: views/emails/unsubscribe-confirmed-html.hbs:2 +#: views/emails/unsubscribe-confirmed-text.hbs:2 +msgid "We have removed your email address from our list." +msgstr "Usunęliśmy Twój adres e-mail z naszej listy." + +#: views/emails/unsubscribe-confirmed-html.hbs:3 +#: views/emails/unsubscribe-confirmed-text.hbs:3 +msgid "If you unsubscribed by mistake, you can re-subscribe at:" +msgstr "" +"Jeśli anulujesz subskrypcję przez pomyłkę, możesz ponownie zasubskrybować na:" + +#: views/emails/unsubscribe-confirmed-html.hbs:4 +#: views/emails/unsubscribe-confirmed-text.hbs:4 +#: views/lists/subscription/add.hbs:16 routes/lists.js:253 +msgid "Subscribe" +msgstr "Subskrybuj" + +#: views/index.hbs:1 +msgid "Official Mailtrain Partners" +msgstr "Oficjalni partnerzy Mailtrain" + +#: views/index.hbs:2 +msgid "Free, open source mail server solution" +msgstr "Darmowe, o otwartym kodzie źródłowym rozwiązanie serwera poczty" + +#: views/index.hbs:3 +msgid "" +"A reliable SMTP server, easy integration, and 12,000 messages a month free" +msgstr "" +"Niezawodny serwer SMTP, łatwa integracja i 12 000 wiadomości miesięcznie za " +"darmo" + +#: views/index.hbs:4 +msgid "List management" +msgstr "Zarządzanie listamie" + +#: views/index.hbs:5 +msgid "" +"Mailtrain allows you to easily manage even very large lists. Million " +"subscribers? Not a problem. You can add subscribers manually, through the " +"API or import from a CSV file. All lists come with support for custom fields " +"and merge tags as well." +msgstr "" +"Mailtrain pozwala w łatwy sposób zarządzać nawet bardzo dużymi listami. " +"Milion subskrybentów? Żaden problem. Możesz dodawać subskrybentów ręcznie, " +"za pośrednictwem interfejsu API lub importować z pliku CSV. Wszystkie listy " +"zawierają również obsługę pól niestandardowych i znaczników scalających." + +#: views/index.hbs:6 +msgid "Custom fields" +msgstr "Pola niestandardowe" + +#: views/index.hbs:7 +msgid "" +"Text fields, numbers, drop downs or checkboxes, Mailtrain has them all. " +"Every custom field can be included in the generated newsletters through " +"merge tags." +msgstr "" +"Pola tekstowe, cyfry, listy rozwijane lub pola wyboru, Mailtrain ma je " +"wszystkie. Każde niestandardowe pole może być zawarte w wygenerowanych " +"newsletterach za pomocą merge tagów." + +#: views/index.hbs:8 +msgid "List segmentation" +msgstr "Segmentacja listy" + +#: views/index.hbs:9 +msgid "" +"Send messages only to list subscribers that match predefined segmentation " +"rules. No need to create separate lists with small differences." +msgstr "" +"Wysyłaj wiadomości tylko dla subskrybentów, którzy pasują do " +"predefiniowanych reguł segmentacji. Nie trzeba tworzyć oddzielnych list z " +"małymi różnicami." + +#: views/index.hbs:10 +msgid "Donate to author" +msgstr "Przekaż darowiznę autorowi" + +#: views/index.hbs:11 +msgid "" +"If you really like Mailtrain or your business benefits from it financially " +"then I would really appreciate a small donation to keep the Mailtrain " +"development engines running. You can either use Bitcoin or PayPal for " +"donations. My Bitcoin wallet is 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM" +msgstr "" +"Jeśli naprawdę lubisz Mailtrain lub Twoja firma czerpie z teg korzyści " +"finansowe będę naprawdę wdzięczny za niewielką darowiznę, aby utrzymać " +"rozwój Mailtrain. Możesz użyć Bitcoin lub PayPal do darowizn. Mój portfel " +"Bitcoin to 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM" + +#: views/index.hbs:12 +msgid "or donate using PayPal" +msgstr "lub przekaż darowiznę za pomocą PayPal" + +#: views/index.hbs:13 +msgid "RSS Campaigns" +msgstr "Kampanie RSS" + +#: views/index.hbs:14 +msgid "" +"Setup Mailtrain to track RSS feeds and if a new entry is detected in a feed " +"then Mailtrain auto-generates a new campaign using entry data as message " +"contents and sends it to selected subscribers." +msgstr "" +"Przygotuj Mailtrain do śledzenia kanałów RSS i jeśli wykryty zostanie nowy " +"wpis w kanale, Mailtrain automatycznie generuje nową kampanię, wykorzystując " +"dane wejściowe jako treść wiadomości i wysyła je do wybranych subskrybentów." + +#: views/index.hbs:15 +msgid "GPG Encryption" +msgstr "Szyfrowanie GPG" + +#: views/index.hbs:16 +msgid "" +"If a list has a custom field for a GPG Public Key set then subscribers can " +"upload their GPG public key to receive encrypted messages from the list." +msgstr "" +"Jeśli lista ma niestandardowe pole dla zestawu kluczy publicznych GPG, " +"subskrybenci mogą przesłać swój klucz publiczny GPG, aby otrzymywać " +"zaszyfrowane wiadomości z listy." + +#: views/index.hbs:17 +msgid "Click stats" +msgstr "Statystyki kliknięć" + +#: views/index.hbs:18 +msgid "" +"After a campaign is sent, check individual click statistics for every link " +"included in the message." +msgstr "" +"Po wysłaniu kampanii sprawdź statystyki poszczególnych kliknięć dla każdego " +"linku zawartego w wiadomości." + +#: views/index.hbs:19 +msgid "Open source" +msgstr "Open source" + +#: views/index.hbs:20 +msgid "Mailtrain is available under GPLv3 license and completely open source." +msgstr "Mailtrain jest dostępny na licencji GPLv3 i całkowicie open source." + +#: views/index.hbs:21 +msgid "Send via any provider" +msgstr "Wyślij przez dowolnego dostawcę" + +#: views/index.hbs:22 +msgid "" +"Mailtrain recommends SendPulse even though you " +"can use any provider that supports SMTP protocol to send out your " +"newsletters. Bounce and complaints handling via webhooks is supported for " +"SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA." +msgstr "" +"Mailtrain recommends SendPulse even though you " +"can use any provider that supports SMTP protocol to send out your " +"newsletters. Bounce and complaints handling via webhooks is supported for " +"SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA." +"Odbieranie i obsługa skarg za pośrednictwem webhooków jest obsługiwane dla " +"SES, SparkPost, SendGrid i Mailgun, także dla Postfix i ZoneMTA." + +#: views/index.hbs:23 +msgid "Trigger based automation" +msgstr "Automatyzacja oparta na wyzwalaczach" + +#: views/index.hbs:24 +msgid "" +"Define automation triggers to send specific messages when a user activates " +"the trigger." +msgstr "" +"Zdefiniuj wyzwalacze automatyzacji, aby wysłać określone komunikaty, gdy " +"użytkownik aktywuje wyzwalacz." + +#: views/layout.hbs:2 +msgid "Toggle navigation" +msgstr "Przełącz nawigację" + +#: views/layout.hbs:3 +msgid "Wiki" +msgstr "Wiki" + +#: views/layout.hbs:4 +msgid "Blog" +msgstr "Blog" + +#: views/layout.hbs:5 views/users/account.hbs:2 views/users/account.hbs:3 +msgid "Account" +msgstr "Konto" + +#: views/layout.hbs:6 views/settings.hbs:2 views/settings.hbs:3 +msgid "Settings" +msgstr "Ustawienia" + +#: views/layout.hbs:7 views/users/api.hbs:2 views/users/api.hbs:3 +msgid "API" +msgstr "API" + +#: views/layout.hbs:8 +msgid "Log out" +msgstr "Wyloguj" + +#: views/layout.hbs:9 views/users/forgot.hbs:2 views/users/login.hbs:2 +#: views/users/login.hbs:3 views/users/login.hbs:9 views/users/reset.hbs:2 +msgid "Sign in" +msgstr "Zaloguj się" + +#: views/layout.hbs:10 +msgid "Self hosted newsletter app built on top of Nodemailer" +msgstr "" +"Samodzielnie hostowana aplikacja e-mail newsletter zbudowana na bazie " +"Nodemailera" + +#: views/layout.hbs:11 views/layout.hbs:13 +msgid "Source on GitHub" +msgstr "Źródło na GitHub" + +#: views/layout.hbs:12 +msgid "Subscribe to our newsletter" +msgstr "Zapisz się do naszego newslettera" + +#: views/lists/create.hbs:2 views/lists/edit.hbs:2 +#: views/lists/fields/create.hbs:2 views/lists/fields/edit.hbs:2 +#: views/lists/fields/fields.hbs:2 views/lists/lists.hbs:2 +#: views/lists/lists.hbs:4 views/lists/segments/create.hbs:2 +#: views/lists/segments/edit.hbs:2 views/lists/segments/rule-configure.hbs:2 +#: views/lists/segments/rule-create.hbs:2 views/lists/segments/rule-edit.hbs:2 +#: views/lists/segments/segments.hbs:2 views/lists/segments/view.hbs:2 +#: views/lists/subscription/add.hbs:2 views/lists/subscription/edit.hbs:2 +#: views/lists/subscription/import-failed.hbs:2 +#: views/lists/subscription/import-preview.hbs:2 +#: views/lists/subscription/import.hbs:2 views/lists/view.hbs:2 +#: lib/tools.js:111 +msgid "Lists" +msgstr "Listy" + +#: views/lists/create.hbs:3 views/lists/create.hbs:4 views/lists/create.hbs:9 +#: views/lists/lists.hbs:3 +msgid "Create List" +msgstr "Utwórz listę" + +#: views/lists/create.hbs:6 views/lists/edit.hbs:7 +msgid "List Name" +msgstr "Nazwa listy" + +#: views/lists/edit.hbs:3 views/lists/edit.hbs:4 views/lists/view.hbs:7 +msgid "Edit List" +msgstr "Edytuj listę" + +#: views/lists/edit.hbs:5 +msgid "View List" +msgstr "Wyświetl listę" + +#: views/lists/edit.hbs:8 +msgid "List ID" +msgstr "ID listy" + +#: views/lists/edit.hbs:9 +msgid "This is the list ID displayed to the subscribers" +msgstr "To jest ID listy wyświetlany dla subskrybentów" + +#: views/lists/edit.hbs:12 +msgid "Delete List" +msgstr "Usuń listę" + +#: views/lists/fields/create.hbs:3 views/lists/fields/edit.hbs:3 +#: views/lists/fields/fields.hbs:3 views/lists/fields/fields.hbs:5 +#: views/lists/view.hbs:5 +msgid "Custom Fields" +msgstr "Pola niestandardowe" + +#: views/lists/fields/create.hbs:4 +msgid "Create Field" +msgstr "Utwórz pole" + +#: views/lists/fields/create.hbs:5 views/lists/fields/fields.hbs:4 +msgid "Create Custom Field" +msgstr "Utwórz pole niestandardowe" + +#: views/lists/fields/create.hbs:6 views/lists/fields/create.hbs:7 +#: views/lists/fields/edit.hbs:7 views/lists/fields/edit.hbs:8 +msgid "Field Name" +msgstr "Nazwa pola" + +#: views/lists/fields/create.hbs:8 views/lists/fields/edit.hbs:9 +msgid "Field Type" +msgstr "Typ pola" + +#: views/lists/fields/create.hbs:9 views/lists/fields/edit.hbs:10 +#: lib/models/fields.js:17 +msgid "Text" +msgstr "Tekst" + +#: views/lists/fields/create.hbs:10 views/lists/fields/edit.hbs:11 +#: lib/models/fields.js:21 +msgid "Number" +msgstr "Numer" + +#: views/lists/fields/create.hbs:11 views/lists/fields/edit.hbs:12 +#: lib/models/fields.js:18 +msgid "Website" +msgstr "Strona www" + +#: views/lists/fields/create.hbs:12 views/lists/fields/edit.hbs:13 +#: lib/models/fields.js:20 +msgid "GPG Public Key" +msgstr "Klucz publiczny GPG" + +#: views/lists/fields/create.hbs:13 views/lists/fields/edit.hbs:14 +#: lib/models/fields.js:19 +msgid "Multi-line text" +msgstr "Tekst wielowierszowy" + +#: views/lists/fields/create.hbs:14 views/lists/fields/edit.hbs:15 +msgid "JSON" +msgstr "JSON" + +#: views/lists/fields/create.hbs:15 views/lists/fields/edit.hbs:16 +msgid "Date" +msgstr "Data" + +#: views/lists/fields/create.hbs:16 views/lists/fields/edit.hbs:17 +msgid "Date (MM/DD/YYYY)" +msgstr "Data (MM/DD/YYYY)" + +#: views/lists/fields/create.hbs:17 views/lists/fields/edit.hbs:18 +#: lib/models/fields.js:26 +msgid "Date (DD/MM/YYYY)" +msgstr "Data (DD/MM/YYYY)" + +#: views/lists/fields/create.hbs:18 views/lists/fields/edit.hbs:19 +msgid "Birthday" +msgstr "Urodziny" + +#: views/lists/fields/create.hbs:19 views/lists/fields/edit.hbs:20 +#: lib/models/fields.js:27 +msgid "Birthday (MM/DD)" +msgstr "Urodziny (MM/DD)" + +#: views/lists/fields/create.hbs:20 views/lists/fields/edit.hbs:21 +#: lib/models/fields.js:28 +msgid "Birthday (DD/MM)" +msgstr "Urodziny (DD/MM)" + +#: views/lists/fields/create.hbs:21 views/lists/fields/edit.hbs:22 +msgid "Grouped" +msgstr "Grouped." + +#: views/lists/fields/create.hbs:22 views/lists/fields/edit.hbs:23 +msgid "Drop Downs" +msgstr "Listy rozwijane" + +#: views/lists/fields/create.hbs:23 views/lists/fields/edit.hbs:24 +#: lib/models/fields.js:22 +msgid "Radio Buttons" +msgstr "Radio Buttons" + +#: views/lists/fields/create.hbs:24 views/lists/fields/edit.hbs:25 +#: lib/models/fields.js:23 +msgid "Checkboxes" +msgstr "Checkboxes" + +#: views/lists/fields/create.hbs:25 views/lists/fields/edit.hbs:26 +msgid "Option for a group value" +msgstr "Opcja dla wartości grupy" + +#: views/lists/fields/create.hbs:26 views/lists/fields/edit.hbs:27 +msgid "Group" +msgstr "Grupa" + +#: views/lists/fields/create.hbs:28 views/lists/fields/edit.hbs:29 +msgid "Required for group options" +msgstr "Wymagane w przypadku opcji grupowych" + +#: views/lists/fields/create.hbs:29 views/lists/fields/create.hbs:30 +#: views/lists/fields/edit.hbs:35 views/lists/fields/edit.hbs:36 +#: views/lists/fields/fields.hbs:9 +msgid "Default merge tag value" +msgstr "Domyślna wartość merge tag" + +#: views/lists/fields/create.hbs:32 views/lists/fields/edit.hbs:34 +msgid "" +"For group elements like checkboxes you can control the appearance of the " +"merge tag with an optional template. The template uses handlebars syntax and " +"you can find all values from {{values}} array, for example " +"{{#each values}} {{this}} {{/each}}. If template is not defined " +"then multiple values are joined with commas. You can also use this template " +"to render JSON values (if the JSON is an array then the array is exposed as " +"values, otherwise you can access the JSON keys directly)." +msgstr "" +"W przypadku elementów grupy, takich jak checkboxy, można kontrolować wygląd " +"merge tagów za pomocą opcjonalnego szablonu. Szablon używa składni " +"handlebars i możesz znaleźć wszystkie wartości z tablicy {{values}}, na przykład {{#each values}} {{this}} {{/each}} . Jeśli " +"szablon nie jest zdefiniowany, wiele wartości jest łączonych przecinkami. " +"Możesz również użyć tego szablonu do renderowania wartości JSON (jeśli JSON " +"jest tablicą, wtedy tablica jest wyświetlana jako values, w " +"przeciwnym razie możesz uzyskać bezpośredni dostęp do kluczy JSON)." + +#: views/lists/fields/create.hbs:33 views/lists/fields/edit.hbs:37 +msgid "Visible" +msgstr "Widoczny" + +#: views/lists/fields/create.hbs:34 +msgid "Add Field" +msgstr "Dodaj pole" + +#: views/lists/fields/edit.hbs:4 +msgid "Edit Field" +msgstr "Edytuj pole" + +#: views/lists/fields/edit.hbs:5 +msgid "Edit Custom Field" +msgstr "Edytuj pole niestandardowe" + +#: views/lists/fields/edit.hbs:6 +msgid "Back to fields" +msgstr "Powrót do pól" + +#: views/lists/fields/edit.hbs:30 views/lists/fields/fields.hbs:8 +#: views/partials/merge-tag-reference.hbs:3 +msgid "Merge tag" +msgstr "Merge tag" + +#: views/lists/fields/edit.hbs:31 +msgid "Merge Tag" +msgstr "Merge Tag" + +#: views/lists/fields/edit.hbs:32 +msgid "Put this tag in your content:" +msgstr "Umieść ten tag w swojej treści:" + +#: views/lists/fields/edit.hbs:38 +msgid "Delete Field" +msgstr "Usuń pole" + +#: views/lists/fields/fields.hbs:7 views/lists/view.hbs:25 +msgid "Type" +msgstr "Typ" + +#: views/lists/fields/fields.hbs:10 views/lists/fields/fields.hbs:11 +#: views/lists/lists.hbs:9 views/lists/segments/segments.hbs:8 +#: views/lists/segments/view.hbs:12 views/templates/templates.hbs:7 +#: views/triggers/triggers.hbs:14 routes/campaigns.js:287 +#: routes/campaigns.js:576 routes/campaigns.js:626 routes/lists.js:222 +#: routes/triggers.js:297 +msgid "Edit" +msgstr "Edytuj" + +#: views/lists/lists.hbs:6 +msgid "ID" +msgstr "ID" + +#: views/lists/lists.hbs:7 +msgid "Subscribers" +msgstr "Subskrybenci" + +#: views/lists/segments/create.hbs:3 views/lists/segments/edit.hbs:3 +#: views/lists/segments/rule-configure.hbs:3 +#: views/lists/segments/rule-create.hbs:3 views/lists/segments/rule-edit.hbs:3 +#: views/lists/segments/segments.hbs:3 views/lists/segments/segments.hbs:5 +#: views/lists/segments/view.hbs:3 views/lists/view.hbs:6 +#: views/lists/view.hbs:13 +msgid "Segments" +msgstr "Segmenty" + +#: views/lists/segments/create.hbs:4 views/lists/segments/create.hbs:5 +#: views/lists/segments/rule-configure.hbs:4 +#: views/lists/segments/rule-create.hbs:4 views/lists/segments/rule-edit.hbs:4 +#: views/lists/segments/segments.hbs:4 +msgid "Create Segment" +msgstr "Utwórz segment" + +#: views/lists/segments/create.hbs:6 views/lists/segments/create.hbs:7 +#: views/lists/segments/edit.hbs:7 views/lists/segments/edit.hbs:8 +msgid "Segment Name" +msgstr "Nazwa segmentu" + +#: views/lists/segments/create.hbs:8 views/lists/segments/edit.hbs:9 +msgid "Rule match" +msgstr "Dopasowanie reguł" + +#: views/lists/segments/create.hbs:10 views/lists/segments/edit.hbs:11 +msgid "All rules must match" +msgstr "Wszystkie reguły muszą się zgadzać" + +#: views/lists/segments/create.hbs:11 views/lists/segments/edit.hbs:12 +msgid "Any rule can match" +msgstr "Każda reguła może się zgadzać" + +#: views/lists/segments/create.hbs:12 +msgid "Add Segment" +msgstr "Dodaj segment" + +#: views/lists/segments/edit.hbs:4 views/lists/segments/edit.hbs:5 +#: views/lists/segments/view.hbs:6 views/lists/view.hbs:11 +msgid "Edit Segment" +msgstr "Edytuj segment" + +#: views/lists/segments/edit.hbs:6 +msgid "Back to segments" +msgstr "Powrót do segmentów" + +#: views/lists/segments/edit.hbs:13 +msgid "Delete Segment" +msgstr "Usuń segment" + +#: views/lists/segments/rule-configure.hbs:5 +#: views/lists/segments/rule-create.hbs:5 views/lists/segments/rule-edit.hbs:5 +#: views/lists/segments/view.hbs:4 +msgid "Create Rule" +msgstr "Utwórz regułę" + +#: views/lists/segments/rule-configure.hbs:6 +#: views/lists/segments/rule-create.hbs:6 views/lists/segments/rule-edit.hbs:6 +#: views/lists/segments/view.hbs:10 +msgid "Rule" +msgstr "Reguła" + +#: views/lists/segments/rule-configure.hbs:7 +#: views/lists/segments/rule-configure.hbs:8 +#: views/lists/segments/rule-configure.hbs:10 +#: views/lists/segments/rule-configure.hbs:13 +#: views/lists/segments/rule-configure.hbs:25 +#: views/lists/segments/rule-configure.hbs:30 +#: views/lists/segments/rule-edit.hbs:7 views/lists/segments/rule-edit.hbs:8 +#: views/lists/segments/rule-edit.hbs:10 views/lists/segments/rule-edit.hbs:15 +#: views/lists/segments/rule-edit.hbs:29 views/lists/segments/rule-edit.hbs:34 +#: views/lists/segments/view.hbs:11 +msgid "Value" +msgstr "Wartość" + +#: views/lists/segments/rule-configure.hbs:9 +#: views/lists/segments/rule-edit.hbs:9 +msgid "" +"Use % for wildcard character, e.g. \"%test\" to match all values that end " +"with \"test\"" +msgstr "" +"Użyj % dla znaku wieloznacznego, np. \"%test\", aby dopasować wszystkie " +"wartości, które kończą się na \"test\"" + +#: views/lists/segments/rule-configure.hbs:11 +#: views/lists/segments/rule-configure.hbs:14 +#: views/lists/segments/rule-configure.hbs:26 +#: views/lists/segments/rule-edit.hbs:11 views/lists/segments/rule-edit.hbs:16 +#: views/lists/segments/rule-edit.hbs:30 +msgid "Use exact match" +msgstr "Użyj ścisłego dopasowania" + +#: views/lists/segments/rule-configure.hbs:12 +#: views/lists/segments/rule-configure.hbs:15 +#: views/lists/segments/rule-configure.hbs:27 +#: views/lists/segments/rule-edit.hbs:12 views/lists/segments/rule-edit.hbs:17 +#: views/lists/segments/rule-edit.hbs:31 +msgid "Use range match" +msgstr "Użyj dopasowania zakresu" + +#: views/lists/segments/rule-configure.hbs:16 +#: views/lists/segments/rule-edit.hbs:20 +msgid "Use relative range match" +msgstr "Użyj względnego dopasowania zakresu" + +#: views/lists/segments/rule-configure.hbs:17 +#: views/lists/segments/rule-configure.hbs:28 +#: views/lists/segments/rule-edit.hbs:13 views/lists/segments/rule-edit.hbs:18 +#: views/lists/segments/rule-edit.hbs:21 views/lists/segments/rule-edit.hbs:32 +msgid "From" +msgstr "Od" + +#: views/lists/segments/rule-configure.hbs:18 +#: views/lists/segments/rule-configure.hbs:22 +#: views/lists/segments/rule-edit.hbs:22 views/lists/segments/rule-edit.hbs:26 +msgid "days" +msgstr "dni" + +#: views/lists/segments/rule-configure.hbs:19 +#: views/lists/segments/rule-configure.hbs:23 +#: views/lists/segments/rule-edit.hbs:23 views/lists/segments/rule-edit.hbs:27 +msgid "before today" +msgstr "przed dzisiaj" + +#: views/lists/segments/rule-configure.hbs:20 +#: views/lists/segments/rule-configure.hbs:24 +#: views/lists/segments/rule-edit.hbs:24 views/lists/segments/rule-edit.hbs:28 +msgid "after today" +msgstr "po dzisiaj" + +#: views/lists/segments/rule-configure.hbs:21 +#: views/lists/segments/rule-configure.hbs:29 +#: views/lists/segments/rule-edit.hbs:14 views/lists/segments/rule-edit.hbs:19 +#: views/lists/segments/rule-edit.hbs:25 views/lists/segments/rule-edit.hbs:33 +msgid "to" +msgstr "do" + +#: views/lists/segments/rule-configure.hbs:31 +#: views/lists/segments/rule-edit.hbs:35 lib/models/segments.js:156 +#: lib/models/segments.js:418 +msgid "Selected" +msgstr "Wybrano" + +#: views/lists/segments/rule-configure.hbs:32 +#: views/lists/segments/rule-edit.hbs:36 lib/models/segments.js:156 +#: lib/models/segments.js:418 +msgid "Not selected" +msgstr "Nie wybrano" + +#: views/lists/segments/rule-configure.hbs:33 +msgid "Add Rule" +msgstr "Dodaj regułę" + +#: views/lists/segments/rule-create.hbs:8 +#: views/lists/subscription/import.hbs:12 views/triggers/create-select.hbs:9 +msgid "Next" +msgstr "Dalej" + +#: views/lists/segments/rule-edit.hbs:37 +msgid "Delete Rule" +msgstr "Usuń regułę" + +#: views/lists/segments/segments.hbs:7 +msgid "Match" +msgstr "Dopasowanie" + +#: views/lists/segments/view.hbs:5 views/lists/view.hbs:12 +msgid "Segment" +msgstr "Segment" + +#: views/lists/segments/view.hbs:7 +msgid "Match rules" +msgstr "Reguły dopasowania" + +#: views/lists/segments/view.hbs:8 +msgid "Matching subscribers" +msgstr "Dopasowani subskrybenci" + +#: views/lists/segments/view.hbs:9 +msgid "show" +msgstr "pokaż" + +#: views/lists/subscription/add.hbs:3 views/lists/subscription/add.hbs:4 +msgid "Add subscriber" +msgstr "Dodaj subskrybenta" + +#: views/lists/subscription/add.hbs:5 views/subscription/manage.hbs:2 +#: views/subscription/subscribe.hbs:3 views/users/account.hbs:7 +msgid "Email Address" +msgstr "Adres e-mail" + +#: views/lists/subscription/add.hbs:8 views/lists/subscription/edit.hbs:9 +#: views/settings.hbs:82 views/settings.hbs:97 views/subscription/manage.hbs:7 +#: views/subscription/subscribe.hbs:7 +msgid "Begins with" +msgstr "Zaczyna się" + +#: views/lists/subscription/add.hbs:9 views/lists/subscription/edit.hbs:10 +msgid "" +"Insert a GPG public key that will be used to encrypt messages sent this " +"subscriber" +msgstr "" +"Wstaw klucz publiczny GPG, który będzie używany do szyfrowania wiadomości " +"wysłanych przez tego subskrybenta" + +#: views/lists/subscription/add.hbs:11 views/lists/subscription/edit.hbs:12 +#: views/lists/subscription/import-preview.hbs:9 +msgid "Timezone" +msgstr "Strefa czasowa" + +#: views/lists/subscription/add.hbs:13 views/lists/subscription/edit.hbs:13 +msgid "Test user?" +msgstr "Użytkownik testowy?" + +#: views/lists/subscription/add.hbs:14 views/lists/subscription/edit.hbs:14 +msgid "" +"If checked then this subscription can be used for previewing campaign " +"messages" +msgstr "" +"Jeśli ta opcja jest zaznaczona, można użyć tej subskrypcji do przeglądania " +"wiadomości kampanii" + +#: views/lists/subscription/add.hbs:15 +msgid "" +"This person will not receive a confirmation email so make sure that you have " +"permission to email them." +msgstr "" +"Ta osoba nie otrzyma e-maila z potwierdzeniem, więc upewnij się, że masz " +"uprawnienia do e-maila." + +#: views/lists/subscription/edit.hbs:3 views/lists/subscription/edit.hbs:4 +msgid "Edit subscriber" +msgstr "Edytuj subskrybenta" + +#: views/lists/subscription/edit.hbs:5 +#: views/lists/subscription/import-failed.hbs:5 +msgid "Back to list" +msgstr "Powrót do listy" + +#: views/lists/subscription/edit.hbs:6 +#: views/lists/subscription/import-preview.hbs:6 +#: views/subscription/unsubscribe.hbs:3 lib/helpers.js:26 +#: lib/models/segments.js:11 +msgid "Email address" +msgstr "Adres e-mail" + +#: views/lists/subscription/edit.hbs:16 +msgid "Delete Subscription" +msgstr "Usuń subskrypcję" + +#: views/lists/subscription/import-failed.hbs:3 +msgid "Import status" +msgstr "Status importu" + +#: views/lists/subscription/import-failed.hbs:4 +msgid "Failed addresses" +msgstr "Nieudane adresy" + +#: views/lists/subscription/import-failed.hbs:6 +msgid "see here" +msgstr "zobacz tutaj" + +#: views/lists/subscription/import-failed.hbs:10 +msgid "Fail reason" +msgstr "Przyczyna niepowodzenia" + +#: views/lists/subscription/import-preview.hbs:3 +#: views/lists/subscription/import-preview.hbs:4 +#: views/lists/subscription/import.hbs:3 views/lists/subscription/import.hbs:4 +msgid "Import subscribers" +msgstr "Zaimportuj subskrybentów" + +#: views/lists/subscription/import-preview.hbs:10 views/users/api.hbs:27 +#: views/users/api.hbs:35 views/users/api.hbs:43 views/users/api.hbs:55 +msgid "Example" +msgstr "Przykład" + +#: views/lists/subscription/import-preview.hbs:11 +msgid "Start import" +msgstr "Rozpocznij importowanie" + +#: views/lists/subscription/import.hbs:5 +msgid "CSV File" +msgstr "Plik CSV" + +#: views/lists/subscription/import.hbs:6 +msgid "CSV delimiter" +msgstr "Separator CSV" + +#: views/lists/subscription/import.hbs:7 +msgid "Categorize the imported subscribers as" +msgstr "Skategoryzuj importowanych subskrybentów jako" + +#: views/lists/subscription/import.hbs:8 routes/lists.js:171 +msgid "Subscribed" +msgstr "Subskrybuje" + +#: views/lists/subscription/import.hbs:9 +msgid "Regular subscriber addresses" +msgstr "Regularne adresy subskrybentów" + +#: views/lists/subscription/import.hbs:11 +msgid "Suppressed emails that will be unsubscribed from your list" +msgstr "Pomijane e-maile, które zostaną wypisane z listy" + +#: views/lists/view.hbs:3 +msgid "Subscription Form" +msgstr "Formularz subskrypcji" + +#: views/lists/view.hbs:4 +msgid "List Actions" +msgstr "Lista akcji" + +#: views/lists/view.hbs:8 views/triggers/create-select.hbs:3 +#: views/triggers/create-select.hbs:4 views/triggers/create.hbs:3 +#: views/triggers/create.hbs:4 views/triggers/create.hbs:27 +#: views/triggers/triggers.hbs:3 +msgid "Create Trigger" +msgstr "Utwórz wyzwalacz" + +#: views/lists/view.hbs:9 +msgid "Add Subscriber" +msgstr "Dodaj subskrybenta" + +#: views/lists/view.hbs:10 +msgid "Import Subscribers" +msgstr "Importuj subskrybentów" + +#: views/lists/view.hbs:14 +msgid "Create New Segment" +msgstr "Utwórz nowy segment" + +#: views/lists/view.hbs:15 +msgid "Filter" +msgstr "Filtr" + +#: views/lists/view.hbs:16 +msgid "Subscriptions" +msgstr "Subskrypcje" + +#: views/lists/view.hbs:17 +msgid "Imports" +msgstr "Import" + +#: views/lists/view.hbs:24 routes/campaigns.js:266 routes/lists.js:265 +msgid "Finished" +msgstr "Skończone" + +#: views/lists/view.hbs:26 +msgid "Added" +msgstr "Dodany" + +#: views/lists/view.hbs:27 +msgid "Updated" +msgstr "Zaktualizowano" + +#: views/lists/view.hbs:28 +msgid "Failed" +msgstr "Nie powiodło się" + +#: views/lists/view.hbs:30 +msgid "" +"Are you sure? This action should only be called to resolve stalled imports" +msgstr "" +"Jesteś pewny? Ta czynność powinna byś wywołana tylko w celu rozwiązania " +"impasu importu." + +#: views/lists/view.hbs:31 +msgid "Restart" +msgstr "Uruchom ponownie" + +#: views/partials/codeeditor.hbs:1 views/partials/summernote.hbs:1 +msgid "Template content (HTML)" +msgstr "Zawartość szablonu (HTML)" + +#: views/partials/html-preview.hbs:1 +msgid "Toggle HTML preview" +msgstr "Przełącz podgląd HTML" + +#: views/partials/merge-tag-reference.hbs:1 +msgid "Merge tag reference" +msgstr "Odniesienie merge tag" + +#: views/partials/merge-tag-reference.hbs:2 +msgid "" +"Merge tags are tags that are replaced before sending out the message. The " +"format of the merge tag is the following: [TAG_NAME] or " +"[TAG_NAME/fallback] where fallback is an optional " +"text value used when TAG_NAME is empty." +msgstr "" +"Merge tagi są tagami, które są zastępowane przed wysłaniem wiadomości. " +"Format merge tagu jest następujący: [TAG_NAME] lub " +"[TAG_NAME/fallback] gdzie fallback jest opcjonalną " +"wartością tekstową używaną, gdy TAG_NAME jest pusty." + +#: views/partials/plaintext.hbs:1 +msgid "Template content (plaintext)" +msgstr "Treść szablonu (zwykły tekst)" + +#: views/settings.hbs:5 +msgid "Service Address (URL)" +msgstr "Adres usługi (URL)" + +#: views/settings.hbs:6 +msgid "Enter the URL this service can be reached from" +msgstr "Wprowadź adres URL, z którego można uzyskać tę usługę" + +#: views/settings.hbs:7 +msgid "Admin Email" +msgstr "E-mail Administratora" + +#: views/settings.hbs:8 +msgid "" +"Enter the email address that will be used as \"from\" for system messages" +msgstr "" +"Wprowadź adres e-mail, który będzie używany jako \"from \" dla wiadomości " +"systemowych" + +#: views/settings.hbs:9 +msgid "Disable WYSIWYG editor" +msgstr "Wyłącz edytor WYSIWYG" + +#: views/settings.hbs:10 +msgid "If checked then message editor displays HTML code without the preview" +msgstr "Jeśli zaznaczone, edytor wiadomości wyświetla kod HTML bez podglądu" + +#: views/settings.hbs:11 +msgid "Disable subscription confirmation messages" +msgstr "Wyłącz wiadomości potwierdzające subskrypcję" + +#: views/settings.hbs:12 +msgid "" +"If checked then do not send a confirmation message that states the " +"subscriber is now subscribed or unsubscribed. This does not disable double " +"opt-in messages." +msgstr "" +"Jeśli jest zaznaczone, nie wysyłaj wiadomości potwierdzającej, że " +"subskrybent jest teraz subskrybowany lub nie subskrybowany. Nie wyłącza to " +"podwójnych wiadomości opt-in." + +#: views/settings.hbs:13 +msgid "Tracking ID" +msgstr "Identyfikator śledzenia" + +#: views/settings.hbs:14 +msgid "Enter Google Analytics tracking code" +msgstr "Wpisz kod śledzenia Google Analytics" + +#: views/settings.hbs:15 +msgid "Frontpage shout out" +msgstr "" + +#: views/settings.hbs:16 +msgid "HTML code shown in the front page header section" +msgstr "Kod HTML wyświetlany w sekcji nagłówka na pierwszej stronie" + +#: views/settings.hbs:17 +msgid "Campaign defaults" +msgstr "Domyślne ustawienia kampanii" + +#: views/settings.hbs:18 +msgid "Sender name" +msgstr "Nazwa nadawcy" + +#: views/settings.hbs:19 +msgid "Sender name, eg. My Awesome Company Ltd." +msgstr "Nazwa nadawcy, np. My Awesome Company Ltd." + +#: views/settings.hbs:20 +msgid "Default address" +msgstr "Domyślny adres" + +#: views/settings.hbs:21 +msgid "" +"Contact address to provide, eg. 1234 Main Street, Anywhere, MA 01234, USA" +msgstr "" +"Adres kontaktowy do dostarczenia, np. 1234 Main Street, Anywhere, MA 01234, " +"USA" + +#: views/settings.hbs:22 +msgid "Default \"from name\"" +msgstr "Domyślna nazwa \"from\"" + +#: views/settings.hbs:24 +msgid "Default \"from\" email" +msgstr "Domyślny e-mail \"from\"" + +#: views/settings.hbs:26 +msgid "Default \"subject line\"" +msgstr "Domyślny temat \"from\"" + +#: views/settings.hbs:28 +msgid "Default homepage (URL)" +msgstr "Domyślna strona główna (URL)" + +#: views/settings.hbs:29 +msgid "URL to redirect the subscribed users to, eg. http://example.com/" +msgstr "Adres URL do przekierowania subskrybentów do, np. http://example.com/" + +#: views/settings.hbs:30 +msgid "Mailer Settings" +msgstr "Ustawienia Mailera" + +#: views/settings.hbs:31 +msgid "These settings are required to send out e-mail messages" +msgstr "Te ustawienia są wymagane do wysyłania wiadomości e-mail" + +#: views/settings.hbs:32 +msgid "SMTP" +msgstr "SMTP" + +#: views/settings.hbs:33 +msgid "AWS SES" +msgstr "AWS SES" + +#: views/settings.hbs:34 +msgid "Use SMTP for sending mail" +msgstr "Użyj SMTP do wysyłania poczty" + +#: views/settings.hbs:35 +msgid "Hostname" +msgstr "Nazwa hosta" + +#: views/settings.hbs:36 +msgid "Port" +msgstr "Port" + +#: views/settings.hbs:37 +msgid "Port, eg. 465. Autodetected if left blank" +msgstr "Port, np. 465. Autodetekcja, jeśli pozostanie pusta" + +#: views/settings.hbs:38 +msgid "Encryption" +msgstr "Szyfrowanie" + +#: views/settings.hbs:39 +msgid "Disable SMTP authentication" +msgstr "Wyłącz uwierzytelnianie SMTP" + +#: views/settings.hbs:40 views/users/forgot.hbs:9 views/users/login.hbs:4 +#: views/users/login.hbs:5 +msgid "Username" +msgstr "Nazwa użytkownika" + +#: views/settings.hbs:41 +msgid "Username, eg. myaccount@example.com" +msgstr "Nazwa użytkownika, np. myaccount@example.com" + +#: views/settings.hbs:42 views/settings.hbs:43 views/users/login.hbs:6 +#: views/users/login.hbs:7 +msgid "Password" +msgstr "Hasło" + +#: views/settings.hbs:44 +msgid "Use SES API for sending mail" +msgstr "Użyj interfejsu API SES do wysyłania poczty" + +#: views/settings.hbs:45 +msgid "Access Key" +msgstr "Access Key" + +#: views/settings.hbs:46 +msgid "AWS Access Key Id" +msgstr "AWS Access Key Id" + +#: views/settings.hbs:47 +msgid "Secret Key" +msgstr "Secret Key" + +#: views/settings.hbs:48 +msgid "AWS Secret Access Key" +msgstr "AWS Secret Access Key" + +#: views/settings.hbs:49 +msgid "Region" +msgstr "Region" + +#: views/settings.hbs:50 +msgid "Checking" +msgstr "Sprawdzanie" + +#: views/settings.hbs:51 +msgid "Check Mailer config" +msgstr "Sprawdź konfigurację Mailera" + +#: views/settings.hbs:52 +msgid "Don't have an SMTP account yet? Create a free SendPulse account" +msgstr "Nie masz jeszcze konta SMTP? Utwórz darmowe konto SendPulse" + +#: views/settings.hbs:53 +msgid "here" +msgstr "tutaj" + +#: views/settings.hbs:54 +msgid "Advanced Mailer settings" +msgstr "Zaawansowane ustawienia Mailera" + +#: views/settings.hbs:55 +msgid "Log SMTP transactions" +msgstr "Loguj transakcje SMTP" + +#: views/settings.hbs:56 +msgid "Allow self-signed certificates" +msgstr "Zezwalaj na certyfikaty z podpisem własnym" + +#: views/settings.hbs:57 +msgid "Max connections" +msgstr "Maks. połączeń" + +#: views/settings.hbs:58 +msgid "The count of max connections, eg. 10" +msgstr "Liczba maksymalnych połączeń, np. 10" + +#: views/settings.hbs:59 +msgid "" +"The count of maximum simultaneous connections to make against the SMTP " +"server (defaults to 5). This limit is per sending process." +msgstr "" +"Liczba maksymalnych równoczesnych połączeń z serwerem SMTP (domyślnie 5). " +"Ten limit dotyczy procesu wysyłania." + +#: views/settings.hbs:60 +msgid "Max messages" +msgstr "Maks. wiadomości" + +#: views/settings.hbs:61 +msgid "The count of max messages, eg. 100" +msgstr "Liczba maksymalnych wiadomości, np. 100" + +#: views/settings.hbs:62 +msgid "" +"he number of messages to send through a single connection before the " +"connection is closed and reopened (defaults to 100)" +msgstr "" +"Liczba wiadomości do wysłania za pośrednictwem jednego połączenia, zanim " +"połączenie zostanie zamknięty i ponownie otwarty (domyślnie 100)" + +#: views/settings.hbs:63 +msgid "Throttling" +msgstr "Dławienie (Throttling)" + +#: views/settings.hbs:64 +msgid "Messages per hour eg. 1000" +msgstr "Wiadomości na godzinę, np. 1000" + +#: views/settings.hbs:65 +msgid "" +"Maximum number of messages to send in an hour. Leave empty or zero for no " +"throttling. If your provider uses a different speed limit (messages/minute " +"or messages/second) then convert this limit into messages/hour (1m/s => " +"3600m/h). This limit is per sending process." +msgstr "" +"Maksymalna liczba wiadomości do wysłania w ciągu godziny. Pozostaw puste lub " +"zero dla barku dławienia. Jeśli Twój dostawca wykorzystuje inny limit " +"prędkości (wiadomości/minutę lub wiadomości/sekundę), zamień ten limit na " +"wiadomości/godzinę (1m/s => 3600m/h). Ten limit dotyczy procesu wysyłania." + +#: views/settings.hbs:66 +msgid "VERP bounce handling" +msgstr "Obsługa odbijania VERP" + +#: views/settings.hbs:67 +msgid "" +"Mailtrain is able to use VERP based routing to detect bounces. In this case " +"the message is sent to the recipient using a custom VERP address as the " +"return path of the message. If the message is not accepted a bounce email is " +"sent to this special VERP address and thus a bounce is detected." +msgstr "" +"Mailtrain może wykorzystywać routing oparty na VERP do wykrywania odbić. W " +"takim przypadku wiadomość zostanie wysłana do adresata przy użyciu " +"niestandardowego adresu VERP jako ścieżki powrotnej wiadomości. Jeśli " +"wiadomość nie zostanie przyjęta, wiadomość odrzucona wiadomość zostanie " +"wysłana na specjalny adres VERP, a tym samym wykryte zostanie odrzucenie." + +#: views/settings.hbs:68 +msgid "" +"To get VERP working you need to set up a DNS MX record that points to your " +"Mailtrain hostname. You must also ensure that Mailtrain VERP interface is " +"available from port 25 of your server (port 25 usually requires root user " +"privileges). This way if anyone tries to send email to someuser@verp-" +"hostname then the email should end up to this server." +msgstr "" +"Aby uruchomić działanie VERP, musisz skonfigurować rekord MX DNS, który " +"wskazuje twoją nazwę hosta Mailtrain. Musisz także upewnić się, że interfejs " +"Mailtrain VERP jest dostępny z portu 25 serwera (port 25 zwykle wymaga " +"uprawnień użytkownika root). W ten sposób, jeśli ktoś spróbuje wysłać " +"wiadomość e-mail do someuser@verp-hostname, wówczas wiadomość e-mail powinna " +"dotrzeć do tego serwera." + +#: views/settings.hbs:69 +msgid "" +"VERP usually only works if you are using your own SMTP server. Regular relay " +"services (SES, SparkPost, Gmail etc.) tend to remove the VERP address from " +"the message." +msgstr "" +"VERP zwykle działa tylko wtedy, gdy używasz własnego serwera SMTP. Regularne " +"usługi przekazywania (SES, SparkPost, Gmail itp.) Mają tendencję do usuwania " +"adresu VERP z wiadomości." + +#: views/settings.hbs:70 +msgid "Use VERP to catch bounces" +msgstr "Użyj VERP do wykrycia odbicia" + +#: views/settings.hbs:71 +msgid "Server hostname" +msgstr "Nazwa hosta serwera" + +#: views/settings.hbs:72 +msgid "The VERP server hostname, eg. bounces.example.com" +msgstr "Nazwa hosta serwera VERP, np. bounces.example.com" + +#: views/settings.hbs:73 +msgid "" +"VERP bounce handling server hostname. This hostname is used in the SMTP " +"envelope FROM address and the MX DNS records should point to this server" +msgstr "" +"Nazwa hosta serwera obsługi odrzutów VERP. Ta nazwa hosta jest używana w " +"SMTP jako \"od\", a rekordy MX DNS powinny wskazywać na ten serwer" + +#: views/settings.hbs:74 +msgid "" +"VERP bounce handling server is not enabled. Modify your server configuration " +"file and restart server to enable it" +msgstr "" +"Serwer obsługi odrzutów VERP nie jest włączony. Zmodyfikuj plik " +"konfiguracyjny serwera i zrestartuj serwer, aby go włączyć." + +#: views/settings.hbs:75 +msgid "GPG Signing" +msgstr "Podpis GPG" + +#: views/settings.hbs:76 +msgid "" +"Only messages that are encrypted can be signed. Subsribers who have not set " +"up a GPG public key in their profile receive normal email messages. Users " +"with GPG key set receive encrypted messages and if you have signing key also " +"set, the messages are signed with this key." +msgstr "" +"Tylko wiadomości, które są zaszyfrowane, mogą być podpisane. Subskrybenci, " +"którzy nie ustawili klucza publicznego GPG w swoim profilu, otrzymują zwykłe " +"wiadomości e-mail. Użytkownicy z zestawem kluczy GPG otrzymują zaszyfrowane " +"wiadomości i jeśli masz ustawiony również klucz podpisu, wiadomości są " +"podpisywane tym kluczem." + +#: views/settings.hbs:77 +msgid "" +"Do not use sensitive keys here. The private key and passphrase are not " +"encrypted in the database." +msgstr "" +"Nie używaj tutaj wrażliwych kluczy. Klucz prywatny i hasło nie są szyfrowane " +"w bazie danych." + +#: views/settings.hbs:78 +msgid "Private Key Passphrase" +msgstr "Hasło klucza prywatnego" + +#: views/settings.hbs:79 +msgid "Passphrase for the key if set" +msgstr "Hasło dla klucza, jeśli jest ustawione" + +#: views/settings.hbs:80 +msgid "Only fill this if your private key is encrypted with a passphrase" +msgstr "Wypełnij to tylko, jeśli Twój klucz prywatny jest zaszyfrowany hasłem" + +#: views/settings.hbs:81 +msgid "GPG Private Key" +msgstr "Klucz prywatny GPG" + +#: views/settings.hbs:83 +msgid "" +"This value is optional. If you do not provide a private key GPG encrypted " +"messages are sent without signing." +msgstr "" +"Ta wartość jest opcjonalna. Jeśli nie podasz klucza prywatnego GPG, " +"zaszyfrowane wiadomości są wysyłane bez podpisu." + +#: views/settings.hbs:84 +msgid "DKIM Signing by ZoneMTA" +msgstr "Podpisywanie DKIM przez ZoneMTA" + +#: views/settings.hbs:85 +msgid "" +"If you are using ZoneMTA then Mailtrain can provide a DKIM key for signing " +"all outgoing messages. Other services usually provide their own means to " +"DKIM sign your messages" +msgstr "" +"Jeśli używasz ZoneMTA, Mailtrain może dostarczyć klucz DKIM do podpisania " +"wszystkich wychodzących wiadomości. Inne usługi zwykle zapewniają własne " +"środki do podpisywania wiadomości przez DKIM" + +#: views/settings.hbs:86 +msgid "" +"Do not use sensitive keys here. The private key is not encrypted in the " +"database." +msgstr "" +"Nie używaj tutaj wrażliwych kluczy. Klucz prywatny nie jest zaszyfrowany w " +"bazie danych." + +#: views/settings.hbs:87 +msgid "ZoneMTA DKIM API Key" +msgstr "Klucz API ZoneMTA DKIM" + +#: views/settings.hbs:88 +msgid "Some secret value" +msgstr "Tajna wartość" + +#: views/settings.hbs:89 +msgid "" +"Secret value known to ZoneMTA for requesting DKIM key information. If this " +"value was generated by the Mailtrain installation script then you can keep " +"it as it is" +msgstr "" +"Tajna wartość znana ZoneMTA dla żądań klucza DKIM. Jeśli ta wartość została " +"wygenerowana przez skrypt instalacyjny Mailtrain, możesz zachować ją w " +"niezmienionym stanie" + +#: views/settings.hbs:90 +msgid "DKIM domain" +msgstr "Domena DKIM" + +#: views/settings.hbs:91 +msgid "Domain name for the DKIM key" +msgstr "Nazwa domeny dla klucza DKIM" + +#: views/settings.hbs:92 +msgid "Leave blank to use the sender email address domain" +msgstr "Pozostaw puste, aby użyć domeny adresu e-mail nadawcy" + +#: views/settings.hbs:93 views/settings.hbs:94 +msgid "DKIM key selector" +msgstr "Selektor klucza DKIM" + +#: views/settings.hbs:95 +msgid "Signing is disabled without a valid selector value" +msgstr "Podpisywanie jest wyłączone bez prawidłowej wartości selektora" + +#: views/settings.hbs:96 +msgid "DKIM Private Key" +msgstr "Klucz prywatny DKIM" + +#: views/settings.hbs:98 +msgid "" +"This value is optional. If you do not provide a private key then messages " +"are not signed." +msgstr "" +"Ta wartość jest opcjonalna. Jeśli nie dostarczysz klucza prywatnego, " +"wiadomości nie będą podpisane." + +#: views/subscription/confirm-notice.hbs:1 views/subscription/subscribe.hbs:1 +msgid "Warning!" +msgstr "Ostrzeżenie!" + +#: views/subscription/confirm-notice.hbs:2 +msgid "If JavaScript was not enabled then no confirmation message was sent" +msgstr "Jeśli JavaScript nie był włączony, nie wysłano żadnego potwierdzenia" + +#: views/subscription/confirm-notice.hbs:3 +msgid "Almost finished." +msgstr "Prawie gotowe." + +#: views/subscription/confirm-notice.hbs:4 +msgid "" +"We need to confirm your email address. To complete the subscription process, " +"please click the link in the email we just sent you." +msgstr "" +"Musimy potwierdzić swój adres e-mail. Aby zakończyć proces subskrypcji, " +"kliknij link w wiadomości e-mail, którą właśnie wysłaliśmy." + +#: views/subscription/confirm-notice.hbs:5 +#: views/subscription/unsubscribe-notice.hbs:3 +#: views/subscription/updated-notice.hbs:3 +msgid "return to our website" +msgstr "powrót do strony" + +#: views/subscription/manage-address.hbs:1 +msgid "Update your Email Address" +msgstr "Zaktualizuj swój adres e-mail" + +#: views/subscription/manage-address.hbs:2 +msgid "Existing Email Address" +msgstr "Istniejący adres e-mail" + +#: views/subscription/manage-address.hbs:3 +msgid "New Email Address" +msgstr "Nowy adres e-mail" + +#: views/subscription/manage-address.hbs:4 +msgid "Your new email address" +msgstr "Twój nowy adres e-mail" + +#: views/subscription/manage-address.hbs:5 +msgid "" +"You will receive a confirmation request to your new email address that you " +"need to accept before your email is actually changed" +msgstr "" +"Otrzymasz prośbę o potwierdzenie na nowy adres e-mail, który musisz " +"zaakceptować przed faktyczną zmianą adresu e-mail" + +#: views/subscription/manage-address.hbs:6 +msgid "Update Email Address" +msgstr "Zaktualizuj adres e-mail" + +#: views/subscription/manage.hbs:1 +msgid "Update your preferences" +msgstr "Zaktualizuj swoje preferencje" + +#: views/subscription/manage.hbs:3 +msgid "want to change it?" +msgstr "chcesz to zmienić?" + +#: views/subscription/manage.hbs:6 views/subscription/subscribe.hbs:6 +msgid "Download signature verification key" +msgstr "Pobierz klucz weryfikacji podpisu" + +#: views/subscription/manage.hbs:8 views/subscription/subscribe.hbs:8 +msgid "" +"Insert your GPG public key here to encrypt messages sent to your address" +msgstr "" +"Wstaw tutaj swój publiczny klucz GPG, aby zaszyfrować wiadomości wysłane na " +"Twój adres" + +#: views/subscription/manage.hbs:9 views/subscription/subscribe.hbs:9 +msgid "optional" +msgstr "opcjonalny" + +#: views/subscription/manage.hbs:11 +msgid "Update Profile" +msgstr "Zaktualizuj profil" + +#: views/subscription/subscribe.hbs:2 +msgid "JavaScript must be enabled in order for the subscription form to work" +msgstr "" +"Aby formularz subskrypcji działał, musi być włączona obsługa JavaScript" + +#: views/subscription/subscribe.hbs:11 +msgid "Subscribe to list" +msgstr "Zapisz się do listy" + +#: views/subscription/subscribed.hbs:3 +msgid "Thank you for subscribing!" +msgstr "Dziękujemy za subskrypcję!" + +#: views/subscription/subscribed.hbs:4 +msgid "continue to our website" +msgstr "przejdź na naszą stronę internetową" + +#: views/subscription/unsubscribe-notice.hbs:1 +msgid "Unsubscribe Successful" +msgstr "Anulowanie subskrypcji przebiegło pomyślnie" + +#: views/subscription/unsubscribe-notice.hbs:2 +msgid "You have been removed from:" +msgstr "Zostałeś usunięty z:" + +#: views/subscription/unsubscribe.hbs:2 +msgid "Enter your email address to unsubscribe from:" +msgstr "Wpisz swój adres e-mail, aby zrezygnować z subskrypcji:" + +#: views/subscription/updated-notice.hbs:1 +msgid "Profile Updated" +msgstr "Profil zaktualizowany" + +#: views/subscription/updated-notice.hbs:2 +msgid "Your profile information has been updated." +msgstr "Twoje informacje profilowe zostały zaktualizowane." + +#: views/templates/create.hbs:2 views/templates/edit.hbs:2 +#: views/templates/templates.hbs:2 views/templates/templates.hbs:4 +#: lib/tools.js:115 +msgid "Templates" +msgstr "Szablony" + +#: views/templates/create.hbs:3 views/templates/create.hbs:4 +#: views/templates/create.hbs:12 views/templates/templates.hbs:3 +msgid "Create Template" +msgstr "Utwórz szablon" + +#: views/templates/create.hbs:5 views/templates/edit.hbs:6 +msgid "Template name" +msgstr "Nazwa szablonu" + +#: views/templates/create.hbs:6 views/templates/edit.hbs:7 +msgid "Name for this template, eg. Newsletter" +msgstr "Nazwa tego szablonu, np. Newsletter" + +#: views/templates/create.hbs:7 +msgid "HTML Editor" +msgstr "Edytor HTML" + +#: views/templates/create.hbs:10 views/templates/edit.hbs:9 +msgid "Optional comments about this template" +msgstr "Opcjonalne komentarze na temat tego szablonu" + +#: views/templates/edit.hbs:3 views/templates/edit.hbs:4 +msgid "Edit Template" +msgstr "Edytuj szablon" + +#: views/templates/edit.hbs:5 +msgid "Back to templates" +msgstr "Powrót do szablonów" + +#: views/templates/edit.hbs:11 +msgid "Delete Template" +msgstr "Usuń Szablon" + +#: views/triggers/create-select.hbs:2 views/triggers/create.hbs:2 +#: views/triggers/edit.hbs:2 views/triggers/triggered.hbs:2 +#: views/triggers/triggers.hbs:2 views/triggers/triggers.hbs:4 +msgid "Automation Triggers" +msgstr "Automatyczne wyzwalacze" + +#: views/triggers/create-select.hbs:5 +msgid "Select a list for the trigger" +msgstr "Wybierz listę dla wyzwalacza" + +#: views/triggers/create.hbs:5 views/triggers/edit.hbs:6 +msgid "Trigger name" +msgstr "Nazwa wyzwalacza" + +#: views/triggers/create.hbs:6 views/triggers/edit.hbs:7 +msgid "Name for this trigger, eg. Inactive subscribers" +msgstr "Nazwa tego wyzwalacza, np. Nieaktywni subskrybenci" + +#: views/triggers/create.hbs:8 views/triggers/edit.hbs:9 +msgid "Optional comments about this trigger" +msgstr "Opcjonalne komentarze na temat tego wyzwalacza" + +#: views/triggers/create.hbs:12 views/triggers/edit.hbs:14 +msgid "Trigger rule" +msgstr "Reguła wyzwalacza" + +#: views/triggers/create.hbs:13 views/triggers/edit.hbs:15 +msgid "Trigger fires" +msgstr "Aktywacja wyzwalacza" + +#: views/triggers/create.hbs:14 views/triggers/edit.hbs:16 +msgid "days after:" +msgstr "dni po:" + +#: views/triggers/create.hbs:15 views/triggers/edit.hbs:17 +msgid "Subscription" +msgstr "Subskrypcja" + +#: views/triggers/create.hbs:16 views/triggers/create.hbs:21 +#: views/triggers/edit.hbs:18 views/triggers/edit.hbs:23 +msgid "Event" +msgstr "Zdarzenie" + +#: views/triggers/create.hbs:18 views/triggers/create.hbs:19 +#: views/triggers/create.hbs:25 views/triggers/edit.hbs:20 +#: views/triggers/edit.hbs:21 views/triggers/edit.hbs:27 +msgid "Campaign" +msgstr "Kampania" + +#: views/triggers/create.hbs:23 views/triggers/edit.hbs:25 +msgid "Trigger action" +msgstr "Czynność wyzwalacza" + +#: views/triggers/create.hbs:24 views/triggers/edit.hbs:26 +msgid "Send campaign" +msgstr "Wyślij kampanię" + +#: views/triggers/edit.hbs:3 views/triggers/edit.hbs:4 +msgid "Edit Trigger" +msgstr "Edycja wyzwalacza" + +#: views/triggers/edit.hbs:5 +msgid "Back to triggers" +msgstr "Powrót do wyzwalaczy" + +#: views/triggers/edit.hbs:11 +msgid "Trigger is enabled" +msgstr "Wyzwalacz jest włączony" + +#: views/triggers/edit.hbs:29 +msgid "Delete Trigger" +msgstr "Usuń wyzwalacz" + +#: views/triggers/triggered.hbs:3 +msgid "Triggered" +msgstr "Wywołany" + +#: views/triggers/triggered.hbs:4 +msgid "Triggered subscribers" +msgstr "Wywołani subskrybenci" + +#: views/triggers/triggered.hbs:5 +msgid "Subscribers who caused this trigger to fire" +msgstr "Subskrybenci, którzy spowodowali uruchomienie tego wyzwalacza" + +#: views/triggers/triggered.hbs:9 +msgid "Triggered time" +msgstr "Czas wywołanych" + +#: views/triggers/triggers.hbs:9 +msgid "Trigger" +msgstr "Wyzwalacz" + +#: views/triggers/triggers.hbs:10 +msgid "Target Campaign" +msgstr "Cel kampanii" + +#: views/triggers/triggers.hbs:11 +msgid "Triggered count" +msgstr "Liczba wyzwoleń" + +#: views/triggers/triggers.hbs:12 +msgid "Enabled" +msgstr "Włączone" + +#: views/triggers/triggers.hbs:13 +msgid "Disabled" +msgstr "Wyłączone" + +#: views/users/account.hbs:4 +msgid "This account is managed through LDAP." +msgstr "To konto jest zarządzane przez LDAP." + +#: views/users/account.hbs:5 +msgid "Associated Email Address" +msgstr "Powiązany adres e-mail" + +#: views/users/account.hbs:8 +msgid "Your e-mail address" +msgstr "Twój adres e-mail" + +#: views/users/account.hbs:9 +msgid "" +"This address is used for account recovery in case you lose your password" +msgstr "Ten adres służy do odzyskiwania konta na wypadek utraty hasła" + +#: views/users/account.hbs:10 +msgid "Password change" +msgstr "Zmiana hasła" + +#: views/users/account.hbs:11 +msgid "" +"You only need to fill out this form if you want to change your current " +"password" +msgstr "Wypełnij ten formularz, jeśli chcesz zmienić swoje obecne hasło" + +#: views/users/account.hbs:12 views/users/account.hbs:13 +msgid "Current Password" +msgstr "Aktualne hasło" + +#: views/users/account.hbs:14 views/users/account.hbs:15 +#: views/users/reset.hbs:6 views/users/reset.hbs:7 +msgid "New Password" +msgstr "Nowe hasło" + +#: views/users/account.hbs:16 +msgid "Confirm Password" +msgstr "Powtórz hasło" + +#: views/users/account.hbs:17 views/users/reset.hbs:8 +msgid "Confirm New Password" +msgstr "Potwierdź nowe hasło" + +#: views/users/api.hbs:4 +msgid "Are you sure? Resetting would invalidate the currently existing token." +msgstr "Jesteś pewny? Zresetowanie unieważni istniejący token." + +#: views/users/api.hbs:5 +msgid "Are you sure?" +msgstr "Jesteś pewny?" + +#: views/users/api.hbs:6 +msgid "Reset Access Token" +msgstr "Zresetuj Access Token" + +#: views/users/api.hbs:7 +msgid "Generate Access Token" +msgstr "Wygeneruj Access Token" + +#: views/users/api.hbs:8 +msgid "Personal access token:" +msgstr "Osobisty Access Token:" + +#: views/users/api.hbs:9 +msgid "Access token not yet generated" +msgstr "Access token nie został jeszcze wygenerowany" + +#: views/users/api.hbs:10 +msgid "Notes about the API" +msgstr "Uwagi na temat interfejsu API" + +#: views/users/api.hbs:11 +msgid "" +"API response is a JSON structure with error and data properties. If the response error has a value set then " +"the request failed." +msgstr "" +"Odpowiedź API to struktura JSON z właściwościami error i " +"data. Jeśli odpowiedź error ma ustawioną " +"wartość, to żądanie nie powiodło się." + +#: views/users/api.hbs:12 +msgid "" +"You need to define proper Content-Type when making a request. " +"You can either use application/x-www-form-urlencoded for normal " +"form data or application/json for a JSON payload. Using " +"multipart/form-data is not supported." +msgstr "" +"Musisz zdefiniować właściwy Content-Type podczas wysyłania " +"zapytania. Możesz użyć application/x-www-form-urlencoded dla " +"normalnych danych formularza lub application/json dla JSON " +"payload. Używanie multipart/form-data nie jest obsługiwane." + +#: views/users/api.hbs:13 +msgid "Add subscription" +msgstr "Dodaj subskrypcję" + +#: views/users/api.hbs:14 +msgid "" +"This API call either inserts a new subscription or updates existing. Fields " +"not included are left as is, so if you update only LAST_NAME value, then " +"FIRST_NAME is kept untouched for an existing subscription." +msgstr "" +"To wywołanie API wprowadza nową subskrypcję lub aktualizacje istniejące. " +"Pola nieuwzględnione pozostają bez zmian, więc jeśli zaktualizujesz tylko " +"wartość LAST_NAME, to FIRST_NAME pozostanie nietknięte dla istniejącej " +"subskrypcji." + +#: views/users/api.hbs:15 views/users/api.hbs:17 views/users/api.hbs:30 +#: views/users/api.hbs:32 views/users/api.hbs:38 views/users/api.hbs:40 +#: views/users/api.hbs:46 views/users/api.hbs:48 +msgid "arguments" +msgstr "argumenty" + +#: views/users/api.hbs:16 views/users/api.hbs:31 views/users/api.hbs:39 +#: views/users/api.hbs:47 +msgid "your personal access token" +msgstr "twój osobisty token dostępu" + +#: views/users/api.hbs:18 views/users/api.hbs:33 views/users/api.hbs:41 +msgid "subscriber's email address" +msgstr "subscriber's email addressadres e-mail subskrybenta" + +#: views/users/api.hbs:19 views/users/api.hbs:34 views/users/api.hbs:42 +#: views/users/api.hbs:50 +msgid "required" +msgstr "wymagany" + +#: views/users/api.hbs:20 +msgid "subscriber's first name" +msgstr "imię subskrybenta" + +#: views/users/api.hbs:21 +msgid "subscriber's last name" +msgstr "nazwisko subskrybenta" + +#: views/users/api.hbs:22 +msgid "" +"subscriber's timezone (eg. \"Europe/Tallinn\", \"PST\" or \"UTC\"). If not " +"set defaults to \"UTC\"" +msgstr "" +"strefa czasowa subskrybenta (np. \"Europa/Tallinn\", \"PST\" lub \"UTC\"). " +"Jeśli nie jest ustawiony domyślnie „UTC”" + +#: views/users/api.hbs:23 +msgid "" +"custom field value. Use yes/no for option group values (checkboxes, radios, " +"drop downs)" +msgstr "" +"niestandardowa wartość pola. Użyj wartości tak/nie dla wartości grup opcji " +"(checkbox, radio, lista rozwijana)" + +#: views/users/api.hbs:24 +msgid "Additional POST arguments" +msgstr "Dodatkowe argumenty POST" + +#: views/users/api.hbs:25 +msgid "" +"set to \"yes\" if you want to make sure the email is marked as subscribed " +"even if it was previously marked as unsubscribed. If the email was already " +"unsubscribed/blocked then subscription status is not changed" +msgstr "" +"ustawić na \"tak \", jeśli chcesz się upewnić, że wiadomość e-mail została " +"oznaczona jako zasubskrybowana, nawet jeśli została wcześniej oznaczona jako " +"niesubskrybowana. Jeśli e-mail został już wypisany/zablokowane, status " +"subskrypcji nie zostanie zmieniony" + +#: views/users/api.hbs:26 +msgid "" +"set to \"yes\" if you want to send confirmation email to the subscriber " +"before actually marking as subscribed" +msgstr "" +"ustaw na \"tak\", jeśli chcesz wysłać wiadomość e-mail z potwierdzeniem do " +"subskrybenta, zanim faktycznie zostaniesz oznaczony jako zasubskrybowany" + +#: views/users/api.hbs:28 +msgid "Remove subscription" +msgstr "Usuń subskrypcję" + +#: views/users/api.hbs:29 +msgid "This API call marks a subscription as unsubscribed" +msgstr "To wywołanie API oznacza subskrypcję jako niesubskrybowaną" + +#: views/users/api.hbs:36 +msgid "Delete subscription" +msgstr "Usuń subskrypcję" + +#: views/users/api.hbs:37 +msgid "This API call deletes a subscription" +msgstr "To wywołanie API usuwa subskrypcję" + +#: views/users/api.hbs:44 +msgid "Add new custom field" +msgstr "Dodaj nowe niestandardowe pole" + +#: views/users/api.hbs:45 +msgid "This API call creates a new custom field for a list." +msgstr "To wywołanie API tworzy nowe niestandardowe pole dla listy." + +#: views/users/api.hbs:49 +msgid "field name" +msgstr "nazwa pola" + +#: views/users/api.hbs:51 +msgid "one of the following types:" +msgstr "jeden z następujących typów:" + +#: views/users/api.hbs:52 +msgid "" +"If the type is 'option' then you also need to specify the parent element ID" +msgstr "Jeśli typ to \"option\", musisz również podać ID elementu nadrzędnego" + +#: views/users/api.hbs:53 +msgid "" +"Template for the group element. If not set, then values of the elements are " +"joined with commas" +msgstr "" +"Szablon dla elementu grupy. Jeśli nie jest ustawione, wartości elementów są " +"połączone przecinkami" + +#: views/users/api.hbs:54 +msgid "" +"if not visible then the subscriber can not view or modify this value at the " +"profile page" +msgstr "" +"jeśli niewidoczny, subskrybent nie może wyświetlić ani zmodyfikować tej " +"wartości na stronie profilu" + +#: views/users/forgot.hbs:3 views/users/reset.hbs:3 +msgid "Password Reset" +msgstr "Resetowanie hasła" + +#: views/users/forgot.hbs:4 +msgid "Reset your password?" +msgstr "Nie pamiętasz hasła?" + +#: views/users/forgot.hbs:5 +msgid "Accounts are managed through LDAP." +msgstr "Konta są zarządzane przez LDAP." + +#: views/users/forgot.hbs:6 views/users/reset.hbs:10 +msgid "Reset Password" +msgstr "Resetuj hasło" + +#: views/users/forgot.hbs:7 +msgid "" +"Please provide the username or email address that you used when you signed " +"up for your Mailtrain account." +msgstr "" +"Podaj nazwę użytkownika lub adres e-mail użyty podczas rejestracji konta " +"Mailtrain." + +#: views/users/forgot.hbs:8 +msgid "We will send you an email that will allow you to reset your password." +msgstr "Wyślemy Ci wiadomość e-mail, która pozwoli Ci zresetować hasło." + +#: views/users/forgot.hbs:10 +msgid "Username or email address" +msgstr "Nazwa użytkownika lub adres e-mail" + +#: views/users/forgot.hbs:11 +msgid "Send verification email" +msgstr "Wyślij email weryfikacyjny" + +#: views/users/login.hbs:8 +msgid "Remember me" +msgstr "Zapamiętaj mnie" + +#: views/users/login.hbs:11 views/users/login.hbs:12 +msgid "Forgot password?" +msgstr "Zapomniałeś hasła?" + +#: views/users/reset.hbs:4 +msgid "Choose your new password" +msgstr "Wybierz nowe hasło" + +#: views/users/reset.hbs:5 +msgid "Please enter a new password." +msgstr "Wprowadź nowe hasło." + +#: lib/feed.js:31 +msgid "Bad status code %s" +msgstr "Nieprawidłowy kod statusu %s" + +#: lib/helpers.js:17 +msgid "URL that points to the unsubscribe page" +msgstr "Adres URL wskazujący stronę rezygnacji z subskrypcji" + +#: lib/helpers.js:20 +msgid "URL that points to the preferences page of the subscriber" +msgstr "Adres URL wskazujący stronę preferencji subskrybenta" + +#: lib/helpers.js:23 +msgid "URL to preview the message in a browser" +msgstr "URL, aby wyświetlić podgląd wiadomości w przeglądarce" + +#: lib/helpers.js:29 lib/models/segments.js:31 +msgid "First name" +msgstr "Imię" + +#: lib/helpers.js:32 lib/models/segments.js:35 +msgid "Last name" +msgstr "Nazwisko" + +#: lib/helpers.js:35 +msgid "Full name (first and last name combined)" +msgstr "Imię i nazwisko" + +#: lib/helpers.js:38 +msgid "Unique ID that identifies the recipient" +msgstr "Unikalny identyfikator identyfikujący odbiorcę" + +#: lib/helpers.js:41 +msgid "Unique ID that identifies the list used for this campaign" +msgstr "Unikalny identyfikator identyfikujący listę użytą w tej kampanii" + +#: lib/helpers.js:44 +msgid "Unique ID that identifies current campaign" +msgstr "Unikalny identyfikator identyfikujący bieżącą kampanię" + +#: lib/mailer.js:215 +msgid "Invalid mail transport" +msgstr "Nieprawidłowy transport poczty" + +#: lib/models/campaigns.js:271 lib/models/campaigns.js:298 +#: lib/models/campaigns.js:371 lib/models/campaigns.js:494 +#: lib/models/campaigns.js:752 lib/models/campaigns.js:881 +msgid "Missing Campaign ID" +msgstr "Brakujący identyfikator kampanii" + +#: lib/models/campaigns.js:407 +msgid "Emtpy or too large attahcment" +msgstr "Pusty lub zbyt duży załącznik" + +#: lib/models/campaigns.js:573 lib/models/campaigns.js:761 +msgid "Campaign Name must be set" +msgstr "Nazwa kampanii musi być ustawiona" + +#: lib/models/campaigns.js:577 +msgid "RSS URL must be set and needs to be a valid URL" +msgstr "" +"Adres URL kanału RSS musi być ustawiony i musi być prawidłowym adresem URL" + +#: lib/models/campaigns.js:730 +msgid "Selected template not found" +msgstr "Nie znaleziono wybranego szablonu" + +#: lib/models/campaigns.js:1082 +msgid "Invalid or missing message ID" +msgstr "Nieprawidłowy lub brakujący ID wiadomości" + +#: lib/models/fields.js:24 +msgid "Drop Down" +msgstr "Lista rozwijana" + +#: lib/models/fields.js:25 +msgid "Date (MM/DD/YYY)" +msgstr "Data (MM/DD/YYYY)" + +#: lib/models/fields.js:29 +msgid "JSON value for custom rendering" +msgstr "Wartość JSON dla renderowania niestandardowego" + +#: lib/models/fields.js:30 +msgid "Option" +msgstr "Opcja" + +#: lib/models/fields.js:53 lib/models/fields.js:98 lib/models/fields.js:123 +#: lib/models/lists.js:81 lib/models/lists.js:175 lib/models/lists.js:212 +#: lib/models/segments.js:43 lib/models/segments.js:176 +#: lib/models/subscriptions.js:88 lib/models/subscriptions.js:640 +#: lib/models/subscriptions.js:703 lib/models/subscriptions.js:889 +#: lib/models/subscriptions.js:992 lib/models/subscriptions.js:1046 +#: lib/models/subscriptions.js:1109 lib/models/subscriptions.js:1152 +msgid "Missing List ID" +msgstr "Brakujący ID listy" + +#: lib/models/fields.js:129 +msgid "Option field requires a group to be selected" +msgstr "Pole opcji wymaga wyboru grupy" + +#: lib/models/fields.js:149 lib/models/fields.js:199 +msgid "Missing Field ID" +msgstr "Brakujący ID pola" + +#: lib/models/fields.js:153 lib/models/segments.js:185 +#: lib/models/segments.js:225 +msgid "Field Name must be set" +msgstr "Nazwa pola musi być ustawiona" + +#: lib/models/fields.js:216 +msgid "Custom field not found" +msgstr "Nie znaleziono pola niestandardowego" + +#: lib/models/fields.js:289 +msgid "Unknown column type %s" +msgstr "Nieznany typ kolumny %s" + +#: lib/models/fields.js:293 +msgid "Missing column name" +msgstr "Brakująca nazwa kolumny" + +#: lib/models/fields.js:297 +msgid "Missing list ID" +msgstr "Brakujący ID listy" + +#: lib/models/fields.js:305 +msgid "Provided List ID not found" +msgstr "Nie znaleziono ID listy dostarczonych" + +#: lib/models/links.js:328 routes/campaigns.js:541 routes/campaigns.js:590 +#: services/sender.js:304 +msgid "Campaign not found" +msgstr "Nie znaleziono kampanii" + +#: lib/models/links.js:336 routes/lists.js:146 services/sender.js:311 +msgid "List not found" +msgstr "Nie znaleziono listy" + +#: lib/models/links.js:344 +msgid "Subscription not found" +msgstr "Nie znaleziono subskrypcji" + +#: lib/models/lists.js:117 lib/models/lists.js:179 +msgid "List Name must be set" +msgstr "Nazwa listy musi być ustawiona" + +#: lib/models/lists.js:241 +msgid "Missing List CID" +msgstr "Brakujący CID listy" + +#: lib/models/segments.js:15 +msgid "Signup country" +msgstr "Kraj rejestracji" + +#: lib/models/segments.js:19 lib/models/triggers.js:11 +msgid "Sign up date" +msgstr "Data rejestracji" + +#: lib/models/segments.js:23 lib/models/triggers.js:15 +msgid "Latest open" +msgstr "Ostatnie otwarcie" + +#: lib/models/segments.js:27 lib/models/triggers.js:19 +msgid "Latest click" +msgstr "Ostatnie kliknięcie" + +#: lib/models/segments.js:69 lib/models/segments.js:216 +#: lib/models/segments.js:256 lib/models/segments.js:278 +msgid "Missing Segment ID" +msgstr "Brakujący ID segmentu" + +#: lib/models/segments.js:85 lib/models/segments.js:549 +#: lib/models/segments.js:658 +msgid "Segment not found" +msgstr "Nie znaleziono segmentu" + +#: lib/models/segments.js:146 lib/models/segments.js:147 +#: lib/models/segments.js:408 lib/models/segments.js:409 +msgid "%s days after today" +msgstr "%s dni po dzisiejszym dniu" + +#: lib/models/segments.js:146 lib/models/segments.js:147 +#: lib/models/segments.js:408 lib/models/segments.js:409 +msgid "%s days before today" +msgstr "%s dni przed dzisiejszym dniem" + +#: lib/models/segments.js:148 lib/models/segments.js:410 +msgid "today" +msgstr "dziś" + +#: lib/models/segments.js:189 lib/models/segments.js:229 +msgid "Invalid segment rule type" +msgstr "Nieprawidłowy typ reguły segmentu" + +#: lib/models/segments.js:289 lib/models/segments.js:454 +#: routes/segments.js:266 routes/segments.js:300 routes/segments.js:370 +#: routes/segments.js:381 +msgid "Selected segment not found" +msgstr "Nie znaleziono wybranego segmentu" + +#: lib/models/segments.js:294 lib/models/segments.js:459 +#: routes/segments.js:272 routes/segments.js:306 routes/segments.js:387 +msgid "Invalid rule type" +msgstr "Nieprawidłowy typ reguły" + +#: lib/models/segments.js:358 lib/models/segments.js:434 +#: lib/models/segments.js:524 +msgid "Missing Rule ID" +msgstr "Brakujący ID reguły" + +#: lib/models/segments.js:374 +msgid "Specified rule not found" +msgstr "Nie znaleziono określonej reguły" + +#: lib/models/segments.js:385 +msgid "Specified segment not found" +msgstr "Nie znaleziono określonego segmentu" + +#: lib/models/segments.js:445 +msgid "Selected rule not found" +msgstr "Nie znaleziono wybranej reguły" + +#: lib/models/subscriptions.js:233 +msgid "%s: Please Confirm Subscription" +msgstr "%s: Potwierdź subskrypcję" + +#: lib/models/subscriptions.js:324 +msgid "Could not save subscription" +msgstr "Nie można zapisać subskrypcji" + +#: lib/models/subscriptions.js:507 lib/models/subscriptions.js:537 +msgid "Missing Subscription ID" +msgstr "Brakujący ID subskrypcji" + +#: lib/models/subscriptions.js:565 +msgid "Missing Subscription email address" +msgstr "Brak adresu e-mail subskrypcji" + +#: lib/models/subscriptions.js:644 lib/models/subscriptions.js:893 +#: lib/models/subscriptions.js:1156 +msgid "Missing subscription ID" +msgstr "Brakujący ID subskrypcji" + +#: lib/models/subscriptions.js:707 +msgid "Missing email address" +msgstr "Brakujący adres e-mail" + +#: lib/models/subscriptions.js:996 lib/models/subscriptions.js:1050 +#: lib/models/subscriptions.js:1086 +msgid "Missing Import ID" +msgstr "Brakujący ID importu" + +#: lib/models/subscriptions.js:1178 +msgid "Unknown subscription ID" +msgstr "Nieznany ID subskrypcji" + +#: lib/models/subscriptions.js:1183 +msgid "Nothing seems to be changed" +msgstr "Wydaje się, że nic nie zostało zmienione" + +#: lib/models/subscriptions.js:1197 +msgid "This address is already registered by someone else" +msgstr "Ten adres jest już zarejestrowany przez inną osobę" + +#: lib/models/templates.js:51 lib/models/templates.js:122 +#: lib/models/templates.js:163 +msgid "Missing Template ID" +msgstr "Brakujący ID szablonu" + +#: lib/models/templates.js:80 lib/models/templates.js:126 +msgid "Template Name must be set" +msgstr "Nazwa szablonu musi być ustawiona" + +#: lib/models/triggers.js:28 +msgid "Has Opened" +msgstr "Otwarte" + +#: lib/models/triggers.js:31 +msgid "Has Clicked" +msgstr "Kliknięte" + +#: lib/models/triggers.js:34 +msgid "Not Opened" +msgstr "Nie otwarte" + +#: lib/models/triggers.js:37 +msgid "Not Clicked" +msgstr "Nie kliknięte" + +#: lib/models/triggers.js:174 lib/models/triggers.js:211 +msgid "Missing or invalid list ID" +msgstr "Brakujący lub nieprawidłowy ID listy" + +#: lib/models/triggers.js:178 lib/models/triggers.js:263 +msgid "Days in the past are not allowed" +msgstr "Dni w przeszłości są niedozwolone" + +#: lib/models/triggers.js:182 lib/models/triggers.js:203 +#: lib/models/triggers.js:267 lib/models/triggers.js:288 +msgid "Missing or invalid trigger rule" +msgstr "Brakująca lub nieprawidłowa reguła wyzwalacza" + +#: lib/models/triggers.js:189 lib/models/triggers.js:274 +msgid "Invalid subscription configuration" +msgstr "ieprawidłowa konfiguracja subskrypcji" + +#: lib/models/triggers.js:196 lib/models/triggers.js:281 +msgid "Invalid campaign configuration" +msgstr "Nieprawidłowa konfiguracja kampanii" + +#: lib/models/triggers.js:199 lib/models/triggers.js:284 +msgid "A campaing can not be a target for itself" +msgstr "Kampania nie może być celem samym w sobie" + +#: lib/models/triggers.js:232 +msgid "Could not store trigger row" +msgstr "Nie można zapisać wiersza wyzwalacza" + +#: lib/models/triggers.js:249 +msgid "Missing or invalid Trigger ID" +msgstr "Brakujący lub nieprawidłowy ID wyzwalacza" + +#: lib/models/triggers.js:316 +msgid "Missing Trigger ID" +msgstr "Brakujący ID wyzwalacza" + +#: lib/models/users.js:103 +msgid "Could not store user row" +msgstr "Nie można zapisać wiersza użytkownika" + +#: lib/models/users.js:173 +msgid "Email Address must be set" +msgstr "Adres e-mail musi być ustawiony" + +#: lib/models/users.js:184 +msgid "Failed to check user data" +msgstr "Nie można sprawdzić danych użytkownika" + +#: lib/models/users.js:195 +msgid "" +"Can't change email as another user with the same email address already exists" +msgstr "" +"Nie można zmienić adresu e-mail, ponieważ inny użytkownik o tym samym " +"adresie e-mail już istnieje" + +#: lib/models/users.js:212 +msgid "Incorrect current password" +msgstr "Nieprawidłowe aktualne hasło" + +#: lib/models/users.js:216 +msgid "New password not set" +msgstr "Nowe hasło nie zostało ustawione" + +#: lib/models/users.js:220 +msgid "Passwords do not match" +msgstr "Hasła nie pasują do siebie" + +#: lib/models/users.js:258 +msgid "User ID not set" +msgstr "Nie ustawiono ID użytkownika" + +#: lib/models/users.js:286 +msgid "Username must be set" +msgstr "Nazwa użytkownika musi być ustawiona" + +#: lib/models/users.js:323 +msgid "Mailer password change request" +msgstr "Żądanie zmiany hasła Mailera" + +#: lib/models/users.js:347 lib/models/users.js:367 +msgid "Missing username or reset token" +msgstr "Brakująca nazwa użytkownika lub token reset" + +#: lib/models/users.js:371 +msgid "Invalid new password" +msgstr "Nieprawidłowe nowe hasło" + +#: lib/passport.js:38 +msgid "%s logged out" +msgstr "%s Wylogowany" + +#: lib/passport.js:51 +msgid "Failed to authenticate user" +msgstr "Nie udało się uwierzytelnić użytkownika" + +#: lib/passport.js:67 +msgid "Logged in as %s" +msgstr "Zalogowano jako %s" + +#: lib/passport.js:125 +msgid "Incorrect username or password" +msgstr "Nieprawidłowa nazwa użytkownika lub hasło" + +#: lib/tools.js:123 +msgid "Automation" +msgstr "Automatyzacja" + +#: lib/tools.js:133 +msgid "Blocked email address \"%s\"" +msgstr "Zablokowany adres e-mail \"%s\"" + +#: lib/tools.js:142 +msgid "Invalid email address \"%s\"." +msgstr "Nieprawidłowy adres e-mail \"%s\"." + +#: lib/tools.js:145 +msgid "MX record not found for domain" +msgstr "Nie znaleziono rekordu MX dla domeny" + +#: lib/tools.js:148 +msgid "Address domain not found" +msgstr "Nie znaleziono domeny" + +#: lib/tools.js:151 +msgid "Address domain name is required" +msgstr "Nazwa domeny adresu jest wymagana" + +#: routes/archive.js:31 routes/archive.js:43 routes/archive.js:55 app.js:211 +msgid "Not Found" +msgstr "Nie znaleziono" + +#: routes/archive.js:110 services/sender.js:447 +msgid "Received status code %s from %s" +msgstr "Otrzymano kod statusu %s z %s" + +#: routes/archive.js:134 routes/campaigns.js:131 routes/campaigns.js:295 +#: routes/campaigns.js:390 routes/campaigns.js:435 routes/campaigns.js:475 +#: routes/campaigns.js:739 routes/campaigns.js:762 routes/campaigns.js:781 +#: routes/campaigns.js:803 routes/triggers.js:146 +msgid "Could not find campaign with specified ID" +msgstr "Nie można znaleźć kampanii z określonym ID" + +#: routes/archive.js:142 routes/campaigns.js:789 +msgid "Attachment not found" +msgstr "Załącznik nie znaleziony" + +#: routes/campaigns.js:26 routes/fields.js:13 routes/lists.js:49 +#: routes/segments.js:13 routes/settings.js:23 routes/templates.js:17 +#: routes/triggers.js:18 routes/users.js:75 routes/users.js:120 +msgid "Need to be logged in to access restricted content" +msgstr "Musisz być zalogowany, aby uzyskać dostęp do zastrzeżonych treści" + +#: routes/campaigns.js:117 +msgid "Could not create campaign" +msgstr "Nie można utworzyć kampanii" + +#: routes/campaigns.js:120 +msgid "Campaign “%s” created" +msgstr "Kampania “%s” utworzona" + +#: routes/campaigns.js:204 +msgid "content from an RSS entry" +msgstr "treść z wpisu RSS" + +#: routes/campaigns.js:220 +msgid "Campaign settings updated" +msgstr "Zaktualizowano ustawienia kampanii" + +#: routes/campaigns.js:222 +msgid "Campaign settings not updated" +msgstr "Ustawienia kampanii nie zostały zaktualizowane" + +#: routes/campaigns.js:238 routes/campaigns.js:639 +msgid "Campaign deleted" +msgstr "Kampania usunięta" + +#: routes/campaigns.js:240 routes/campaigns.js:641 +msgid "Could not delete specified campaign" +msgstr "Nie można usunąć określonej kampanii" + +#: routes/campaigns.js:259 +msgid "Idling" +msgstr "Bezczynność" + +#: routes/campaigns.js:262 +msgid "Scheduled" +msgstr "Planowane" + +#: routes/campaigns.js:268 +msgid "Paused" +msgstr "Wstrzymane" + +#: routes/campaigns.js:270 +msgid "Inactive" +msgstr "Nieaktywny" + +#: routes/campaigns.js:272 +msgid "Active" +msgstr "Aktywny" + +#: routes/campaigns.js:274 +msgid "Other" +msgstr "Inny" + +#: routes/campaigns.js:429 +msgid "Unknown status selector" +msgstr "Nieznany status selektora" + +#: routes/campaigns.js:657 +msgid "Scheduled sending" +msgstr "Wysyłanie zaplanowanych" + +#: routes/campaigns.js:659 +msgid "Could not schedule sending" +msgstr "Nie można zaplanować wysyłania" + +#: routes/campaigns.js:671 +msgid "Sending resumed" +msgstr "Wysyłanie zostało wznowione" + +#: routes/campaigns.js:673 +msgid "Could not resume sending" +msgstr "Nie można wznowić wysyłania" + +#: routes/campaigns.js:685 +msgid "Sending reset" +msgstr "Wysyłam reset" + +#: routes/campaigns.js:687 +msgid "Could not reset sending" +msgstr "Nie można zresetować wysyłania" + +#: routes/campaigns.js:699 routes/campaigns.js:727 +msgid "Sending paused" +msgstr "Wysyłanie wstrzymane" + +#: routes/campaigns.js:701 routes/campaigns.js:729 +msgid "Could not pause sending" +msgstr "Nie można wstrzymać wysyłania" + +#: routes/campaigns.js:713 +msgid "Sending activated" +msgstr "Wysyłanie aktywowane" + +#: routes/campaigns.js:715 +msgid "Could not activate sending" +msgstr "Nie można aktywować wysyłania" + +#: routes/campaigns.js:750 +msgid "Attachment uploaded" +msgstr "Przesłano załącznik" + +#: routes/campaigns.js:752 +msgid "Could not store attachment" +msgstr "Nie można zapisać załącznika" + +#: routes/campaigns.js:769 +msgid "Attachment deleted" +msgstr "Załącznik usunięty" + +#: routes/campaigns.js:771 +msgid "Could not delete attachment" +msgstr "Nie można usunąć załącznika" + +#: routes/fields.js:28 routes/fields.js:64 routes/fields.js:118 +#: routes/segments.js:28 routes/segments.js:59 routes/segments.js:102 +#: routes/segments.js:151 routes/segments.js:223 routes/segments.js:255 +#: routes/segments.js:289 routes/segments.js:336 routes/segments.js:359 +msgid "Selected list ID not found" +msgstr "Nie znaleziono wybranego ID listy" + +#: routes/fields.js:102 +msgid "Could not create custom field" +msgstr "Nie można utworzyć pola niestandardowego" + +#: routes/fields.js:129 +msgid "Selected field not found" +msgstr "Nie znaleziono wybranego pola" + +#: routes/fields.js:165 +msgid "Field settings updated" +msgstr "Zaktualizowano ustawienia pola" + +#: routes/fields.js:167 +msgid "Field settings not updated" +msgstr "Ustawienia pola nie zostały zaktualizowane" + +#: routes/fields.js:183 +msgid "Custom field deleted" +msgstr "Pole niestandardowe usunięte" + +#: routes/fields.js:185 +msgid "Could not delete specified field" +msgstr "Nie można usunąć określonego pola" + +#: routes/links.js:40 +msgid "Oops, we couldn't find a link for the URL you clicked" +msgstr "Ups, nie mogliśmy znaleźć linku dla URL który kliknąłeś" + +#: routes/lists.js:90 +msgid "Could not create list" +msgstr "Nie można utworzyć listy" + +#: routes/lists.js:93 +msgid "List created" +msgstr "Utworzono listę" + +#: routes/lists.js:101 routes/lists.js:236 routes/lists.js:301 +#: routes/lists.js:340 routes/lists.js:409 routes/lists.js:434 +#: routes/lists.js:479 routes/lists.js:501 routes/lists.js:530 +#: routes/lists.js:609 routes/lists.js:666 routes/lists.js:693 +msgid "Could not find list with specified ID" +msgstr "Nie można znaleźć listy o określonym ID" + +#: routes/lists.js:115 +msgid "List settings updated" +msgstr "Zaktualizowano ustawienia listy" + +#: routes/lists.js:117 +msgid "List settings not updated" +msgstr "Nie zaktualizowano ustawień listy" + +#: routes/lists.js:133 +msgid "List deleted" +msgstr "Lista usunięta" + +#: routes/lists.js:135 +msgid "Could not delete specified list" +msgstr "Nie można usunąć określonej listy" + +#: routes/lists.js:171 +msgid "Unknown" +msgstr "Nieznany" + +#: routes/lists.js:171 +msgid "Complained" +msgstr "Skarżący" + +#: routes/lists.js:202 +msgid "Invalid key" +msgstr "Klucz niewłaściwy" + +#: routes/lists.js:204 +msgid "Expired key" +msgstr "Klucz wygasł" + +#: routes/lists.js:206 +msgid "Revoked key" +msgstr "Klucz odwołany" + +#: routes/lists.js:256 +msgid "Initializing" +msgstr "Inicjowanie" + +#: routes/lists.js:259 +msgid "Initialized" +msgstr "Zainicjowano" + +#: routes/lists.js:262 +msgid "Importing" +msgstr "Importowanie" + +#: routes/lists.js:268 +msgid "Errored" +msgstr "Błędne" + +#: routes/lists.js:346 routes/lists.js:415 routes/lists.js:440 +msgid "Could not find subscriber with specified ID" +msgstr "Nie można znaleźć subskrybenta o podanym ID" + +#: routes/lists.js:392 +msgid "Could not add subscription" +msgstr "Nie można dodać subskrypcji" + +#: routes/lists.js:397 +msgid "%s was successfully added to your list" +msgstr "%s został pomyślnie dodany do twojej listy" + +#: routes/lists.js:399 +msgid "%s was not added to your list" +msgstr "%s nie został dodany do Twojej listy" + +#: routes/lists.js:421 +msgid "Could not unsubscribe user" +msgstr "Nie można anulować subskrypcji użytkownika" + +#: routes/lists.js:424 +msgid "%s was successfully unsubscribed from your list" +msgstr "%s został pomyślnie wypisany z listy" + +#: routes/lists.js:444 +msgid "%s was successfully removed from your list" +msgstr "%s został pomyślnie usunięty z Twojej listy" + +#: routes/lists.js:456 +msgid "Another subscriber with email address %s already exists" +msgstr "Inny subskrybent z adresem e-mail %s już istnieje" + +#: routes/lists.js:463 +msgid "Subscription settings updated" +msgstr "Zaktualizowano ustawienia subskrypcji" + +#: routes/lists.js:465 +msgid "Subscription settings not updated" +msgstr "Ustawienia subskrypcji nie zostały zaktualizowane" + +#: routes/lists.js:507 routes/lists.js:615 routes/lists.js:651 +#: routes/lists.js:679 routes/lists.js:699 +msgid "Could not find import data with specified ID" +msgstr "Nie można znaleźć danych importu o podanym ID" + +#: routes/lists.js:538 +msgid "Could not process CSV" +msgstr "Nie można przetworzyć pliku CSV" + +#: routes/lists.js:547 +msgid "Could not create importer" +msgstr "Nie można utworzyć importera" + +#: routes/lists.js:598 +msgid "Empty file" +msgstr "Pusty plik" + +#: routes/lists.js:655 +msgid "Import started" +msgstr "Rozpoczęto importowanie" + +#: routes/lists.js:683 +msgid "Import restarted" +msgstr "Import został zrestartowany" + +#: routes/segments.js:86 +msgid "Could not create segment" +msgstr "Nie można utworzyć segmentu" + +#: routes/segments.js:89 +msgid "Segment created" +msgstr "Utworzono segment" + +#: routes/segments.js:113 +msgid "Selected segment ID not found" +msgstr "Nie znaleziono ID wybranego segmentu" + +#: routes/segments.js:188 +msgid "Segment settings updated" +msgstr "Zaktualizowane ustawienia segmentów" + +#: routes/segments.js:190 +msgid "Segment settings not updated" +msgstr "Ustawienia segmentu nie zostały zaktualizowane" + +#: routes/segments.js:206 +msgid "Segment deleted" +msgstr "Segment usunięty" + +#: routes/segments.js:208 +msgid "Could not delete specified segment" +msgstr "Nie można usunąć określonego segmentu" + +#: routes/segments.js:342 +msgid "Could not create rule" +msgstr "Nie można utworzyć reguły" + +#: routes/segments.js:345 +msgid "Rule created" +msgstr "Dodano regułę" + +#: routes/segments.js:410 +msgid "Rule settings updated" +msgstr "Zaktualizowano ustawienia reguły" + +#: routes/segments.js:412 +msgid "Rule settings not updated" +msgstr "Nie zaktualizowano ustawień reguły" + +#: routes/segments.js:428 +msgid "Rule deleted" +msgstr "Usunięto regułę" + +#: routes/segments.js:430 +msgid "Could not delete specified rule" +msgstr "Nie można usunąć określonej reguły" + +#: routes/settings.js:39 +msgid "Use TLS" +msgstr "Użyj TLS" + +#: routes/settings.js:40 +msgid "usually selected for port 465" +msgstr "zazwyczaj wybierany port 465" + +#: routes/settings.js:44 +msgid "Use STARTTLS" +msgstr "Użyj STARTTLS" + +#: routes/settings.js:45 +msgid "usually selected for port 587 and 25" +msgstr "zazwyczaj wybierany port 587 i 25" + +#: routes/settings.js:49 +msgid "Do not use encryption" +msgstr "Nie używaj szyfrowania" + +#: routes/settings.js:115 +msgid "Settings updated" +msgstr "Zaktualizowano ustawienia" + +#: routes/settings.js:173 +msgid "Invalid mail transport type" +msgstr "Nieprawidłowy typ transportu poczty" + +#: routes/settings.js:184 +msgid "Invalid Access Key" +msgstr "Nieprawidłowy klucz dostępu" + +#: routes/settings.js:187 +msgid "Invalid AWS credentials" +msgstr "Nieprawidłowe dane uwierzytelniające AWS" + +#: routes/settings.js:190 +msgid "Connection refused, check hostname and port." +msgstr "Połączenie odrzucone, sprawdź nazwę hosta i port." + +#: routes/settings.js:195 +msgid "" +"Did not receive greeting message from server. This might happen when " +"connecting to a TLS port without using TLS." +msgstr "" +"Nie otrzymano wiadomości powitalnej z serwera. Może się to zdarzyć podczas " +"łączenia się z portem TLS bez korzystania z TLS." + +#: routes/settings.js:197 +msgid "Did not receive greeting message from server." +msgstr "Nie otrzymano wiadomości powitalnej z serwera." + +#: routes/settings.js:200 +msgid "" +"Connection timed out. Check your firewall settings, destination port is " +"probably blocked." +msgstr "" +"Przekroczono limit czasu połączenia. Sprawdź ustawienia zapory, port " +"docelowy jest prawdopodobnie zablokowany." + +#: routes/settings.js:205 +msgid "Authentication not accepted, server expects STARTTLS to be used." +msgstr "" +"Uwierzytelnianie nie jest akceptowane, serwer oczekuje, że zostanie użyty " +"STARTTLS." + +#: routes/settings.js:207 +msgid "Authentication failed, check username and password." +msgstr "Uwierzytelnianie nie powiodło się, sprawdź nazwę użytkownika i hasło." + +#: routes/settings.js:217 +msgid "Failed Mailer verification." +msgstr "Weryfikacja Mailera nie powiodła się." + +#: routes/settings.js:217 +msgid "Server responded with: \"%s\"" +msgstr "Odpowiedź serwera: \"%s\"" + +#: routes/settings.js:221 +msgid "Mailer settings verified, ready to send some mail!" +msgstr "Ustawienia Mailera zweryfikowane, gotowe do wysłania wiadomości!" + +#: routes/subscription.js:22 +msgid "Selected subscription not found" +msgstr "Nie znaleziono wybranej subskrypcji" + +#: routes/subscription.js:32 routes/subscription.js:103 +#: routes/subscription.js:141 routes/subscription.js:166 +#: routes/subscription.js:191 routes/subscription.js:232 +#: routes/subscription.js:270 routes/subscription.js:317 +#: routes/subscription.js:339 routes/subscription.js:368 +#: routes/subscription.js:392 routes/subscription.js:424 +msgid "Selected list not found" +msgstr "Nie znaleziono wybranej listy" + +#: routes/subscription.js:78 routes/subscription.js:472 +msgid "%s: Subscription Confirmed" +msgstr "%s: Potwierdzono subskrypcję" + +#: routes/subscription.js:217 +msgid "Email address not set" +msgstr "Adres e-mail nie jest ustawiony" + +#: routes/subscription.js:255 +msgid "Could not store confirmation data" +msgstr "Nie można zapisać danych potwierdzających" + +#: routes/subscription.js:284 routes/subscription.js:349 +#: routes/subscription.js:402 +msgid "Subscription not found from this list" +msgstr "Nie znaleziono subskrypcji z tej listy" + +#: routes/subscription.js:383 +msgid "Email address updated, check your mailbox for verification instructions" +msgstr "" +"Adres e-mail zaktualizowany, sprawdź skrzynkę pocztową, aby uzyskać " +"instrukcje dotyczące weryfikacji" + +#: routes/subscription.js:499 routes/subscription.js:515 +msgid "Public key is not set" +msgstr "Klucz publiczny nie jest ustawiony" + +#: routes/templates.js:98 +msgid "Could not create template" +msgstr "Nie można utworzyć szablonu" + +#: routes/templates.js:101 +msgid "Template created" +msgstr "Szablon utworzony" + +#: routes/templates.js:109 +msgid "Could not find template with specified ID" +msgstr "Nie można znaleźć szablonu z określonym ID" + +#: routes/templates.js:140 +msgid "Template settings updated" +msgstr "Zaktualizowano ustawienia szablonu" + +#: routes/templates.js:142 +msgid "Template settings not updated" +msgstr "Ustawienia szablonów nie zostały zaktualizowane" + +#: routes/templates.js:158 +msgid "Template deleted" +msgstr "Szablon usunięty" + +#: routes/templates.js:160 +msgid "Could not delete specified template" +msgstr "Nie można usunąć określonego szablonu" + +#: routes/triggers.js:62 routes/triggers.js:79 routes/triggers.js:154 +msgid "Could not find selected list" +msgstr "Nie można znaleźć wybranej listy" + +#: routes/triggers.js:131 +msgid "Could not create trigger" +msgstr "Nie można utworzyć wyzwalacza" + +#: routes/triggers.js:138 +msgid "Trigger “%s” created" +msgstr "Wyzwalacz “%s” został utworzony" + +#: routes/triggers.js:214 +msgid "Trigger settings updated" +msgstr "Zaktualizowano ustawienia wyzwalacza" + +#: routes/triggers.js:216 +msgid "Trigger settings not updated" +msgstr "Ustawienia wyzwalacza nie zostały zaktualizowane" + +#: routes/triggers.js:228 +msgid "Trigger deleted" +msgstr "Wyzwalacz został usunięty" + +#: routes/triggers.js:230 +msgid "Could not delete specified trigger" +msgstr "Nie można usunąć określonego wyzwalacza" + +#: routes/triggers.js:242 +msgid "Could not find trigger with specified ID" +msgstr "Nie można znaleźć wyzwalacza z określonym ID" + +#: routes/triggers.js:255 +msgid "Trigger not found" +msgstr "Wyzwalacz nie został znaleziony" + +#: routes/users.js:32 +msgid "" +"An email with password reset instructions has been sent to your email " +"address, if it exists on our system." +msgstr "" +"E-mail z instrukcjami resetowania hasła został wysłany na Twój adres e-mail, " +"jeśli istnieje w naszym systemie." + +#: routes/users.js:46 routes/users.js:64 +msgid "Unknown or expired reset token" +msgstr "Token resetowania nieznany lub wygasł" + +#: routes/users.js:66 +msgid "Your password has been changed successfully" +msgstr "Twoje hasło zostało zmienione" + +#: routes/users.js:87 +msgid "User data not found" +msgstr "Nie znaleziono danych użytkownika" + +#: routes/users.js:110 +msgid "Access token updated" +msgstr "Zaktualizowano token dostępu" + +#: routes/users.js:112 +msgid "Access token not updated" +msgstr "Nie zaktualizowano tokenu dostępu" + +#: routes/users.js:139 +msgid "Account information updated" +msgstr "Informacje o koncie zostały zaktualizowane" + +#: routes/users.js:141 +msgid "Account information not updated" +msgstr "Informacje o koncie nie zostały zaktualizowane" + +#: services/feedcheck.js:51 +msgid "Feed error: %s" +msgstr "RSS błąd: %s" + +#: services/feedcheck.js:54 +msgid "Found %s new campaign messages from feed" +msgstr "Znaleziono %s nowych wiadomości kampanii z kanału" + +#: services/feedcheck.js:56 +msgid "Found nothing new from the feed" +msgstr "Nie znaleziono nic nowego w kanale" + +#: services/feedcheck.js:143 +msgid "RSS entry %s" +msgstr "Wpis RSS %s" + +#: services/importer.js:243 +msgid "Could not access import file" +msgstr "Nie można uzyskać dostępu do pliku importu" + +#: services/triggers.js:51 +msgid "Unknown trigger type %s" +msgstr "Nieznany typ wyzwalacza %s" From 5eb7976a75fd28350027b00e8fc0ed6af3a50aec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20Paszkiewicz?= Date: Tue, 2 Apr 2019 20:25:29 +0200 Subject: [PATCH 472/483] removed moved Polish translation files --- pl_PL.mo | Bin 71888 -> 0 bytes pl_PL.po | 3737 ------------------------------------------------------ 2 files changed, 3737 deletions(-) delete mode 100644 pl_PL.mo delete mode 100644 pl_PL.po diff --git a/pl_PL.mo b/pl_PL.mo deleted file mode 100644 index 7a58bc3f768113d4d50f16bf253e895acaa7e8cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71888 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�*r}1s2 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 && n%10<=4 && (n%100<12 " -"|| n%100>14) ? 1 : 2);\n" -"Last-Translator: \n" -"Language: pl_PL\n" - -#: views/archive/layout.hbs:1 views/layout.hbs:1 -#: views/subscription/layout.hbs:1 routes/index.js:11 -msgid "Self hosted email newsletter app" -msgstr "Samodzielnie hostowana aplikacja e-mail newsletter" - -#: views/campaigns/bounced.hbs:1 views/campaigns/campaigns.hbs:1 -#: views/campaigns/clicked.hbs:1 views/campaigns/complained.hbs:1 -#: views/campaigns/create-rss.hbs:1 views/campaigns/create-triggered.hbs:1 -#: views/campaigns/create.hbs:1 views/campaigns/delivered.hbs:1 -#: views/campaigns/edit-rss.hbs:1 views/campaigns/edit-triggered.hbs:1 -#: views/campaigns/edit.hbs:1 views/campaigns/opened.hbs:1 -#: views/campaigns/unsubscribed.hbs:1 views/campaigns/upload-attachment.hbs:1 -#: views/campaigns/view.hbs:1 views/lists/create.hbs:1 views/lists/edit.hbs:1 -#: views/lists/fields/create.hbs:1 views/lists/fields/edit.hbs:1 -#: views/lists/fields/fields.hbs:1 views/lists/lists.hbs:1 -#: views/lists/segments/create.hbs:1 views/lists/segments/edit.hbs:1 -#: views/lists/segments/rule-configure.hbs:1 -#: views/lists/segments/rule-create.hbs:1 views/lists/segments/rule-edit.hbs:1 -#: views/lists/segments/segments.hbs:1 views/lists/segments/view.hbs:1 -#: views/lists/subscription/add.hbs:1 views/lists/subscription/edit.hbs:1 -#: views/lists/subscription/import-failed.hbs:1 -#: views/lists/subscription/import-preview.hbs:1 -#: views/lists/subscription/import.hbs:1 views/lists/view.hbs:1 -#: views/settings.hbs:1 views/templates/create.hbs:1 -#: views/templates/edit.hbs:1 views/templates/templates.hbs:1 -#: views/triggers/create-select.hbs:1 views/triggers/create.hbs:1 -#: views/triggers/edit.hbs:1 views/triggers/triggered.hbs:1 -#: views/triggers/triggers.hbs:1 views/users/account.hbs:1 -#: views/users/api.hbs:1 views/users/forgot.hbs:1 views/users/login.hbs:1 -#: views/users/reset.hbs:1 app.js:169 -msgid "Home" -msgstr "Strona główna" - -#: views/campaigns/bounced.hbs:2 views/campaigns/campaigns.hbs:2 -#: views/campaigns/campaigns.hbs:7 views/campaigns/clicked.hbs:2 -#: views/campaigns/complained.hbs:2 views/campaigns/create-rss.hbs:2 -#: views/campaigns/create-triggered.hbs:2 views/campaigns/create.hbs:2 -#: views/campaigns/delivered.hbs:2 views/campaigns/edit-rss.hbs:2 -#: views/campaigns/edit-triggered.hbs:2 views/campaigns/edit.hbs:2 -#: views/campaigns/opened.hbs:2 views/campaigns/unsubscribed.hbs:2 -#: views/campaigns/upload-attachment.hbs:2 views/campaigns/view.hbs:2 -#: lib/tools.js:119 routes/campaigns.js:35 -msgid "Campaigns" -msgstr "Kampanie" - -#: views/campaigns/bounced.hbs:3 views/campaigns/bounced.hbs:4 -msgid "Bounced info" -msgstr "Informacje o odrzuconych/odbiciach" - -#: views/campaigns/bounced.hbs:5 views/campaigns/clicked.hbs:5 -#: views/campaigns/complained.hbs:5 views/campaigns/delivered.hbs:5 -#: views/campaigns/edit-rss.hbs:5 views/campaigns/edit-triggered.hbs:5 -#: views/campaigns/edit.hbs:5 views/campaigns/opened.hbs:5 -#: views/campaigns/unsubscribed.hbs:5 views/campaigns/upload-attachment.hbs:6 -msgid "View campaign" -msgstr "Zobacz kampanię" - -#: views/campaigns/bounced.hbs:6 -msgid "Subscribers who bounced and were unsubscribed:" -msgstr "Subskrybenci, którzy odbili wiadomość i zrezygnowali z subskrypcji:" - -#: views/campaigns/bounced.hbs:7 views/campaigns/clicked.hbs:13 -#: views/campaigns/complained.hbs:7 views/campaigns/delivered.hbs:7 -#: views/campaigns/opened.hbs:7 views/campaigns/unsubscribed.hbs:7 -#: views/lists/subscription/import-failed.hbs:9 views/lists/view.hbs:18 -#: views/triggers/triggered.hbs:6 -msgid "Address" -msgstr "Adres" - -#: views/campaigns/bounced.hbs:8 views/campaigns/clicked.hbs:14 -#: views/campaigns/complained.hbs:8 views/campaigns/delivered.hbs:8 -#: views/campaigns/opened.hbs:8 views/campaigns/unsubscribed.hbs:8 -#: views/lists/subscription/add.hbs:6 views/lists/subscription/edit.hbs:7 -#: views/lists/subscription/import-preview.hbs:7 views/lists/view.hbs:19 -#: views/subscription/manage.hbs:4 views/subscription/subscribe.hbs:4 -#: views/triggers/triggered.hbs:7 -msgid "First Name" -msgstr "Imię" - -#: views/campaigns/bounced.hbs:9 views/campaigns/clicked.hbs:15 -#: views/campaigns/complained.hbs:9 views/campaigns/delivered.hbs:9 -#: views/campaigns/opened.hbs:9 views/campaigns/unsubscribed.hbs:9 -#: views/lists/subscription/add.hbs:7 views/lists/subscription/edit.hbs:8 -#: views/lists/subscription/import-preview.hbs:8 views/lists/view.hbs:20 -#: views/subscription/manage.hbs:5 views/subscription/subscribe.hbs:5 -#: views/triggers/triggered.hbs:8 -msgid "Last Name" -msgstr "Nazwisko" - -#: views/campaigns/bounced.hbs:10 views/campaigns/complained.hbs:10 -#: views/campaigns/delivered.hbs:10 views/campaigns/unsubscribed.hbs:10 -msgid "SMTP response" -msgstr "Odpowiedź SMTP" - -#: views/campaigns/bounced.hbs:11 -msgid "Bounce time" -msgstr "Czas odbicia" - -#: views/campaigns/campaigns.hbs:3 views/campaigns/create-triggered.hbs:24 -#: views/campaigns/create.hbs:3 views/campaigns/create.hbs:4 -#: views/campaigns/create.hbs:27 -msgid "Create Campaign" -msgstr "Utwórz Kampanię" - -#: views/campaigns/campaigns.hbs:4 -msgid "Regular Campaign" -msgstr "Zwykła kampania" - -#: views/campaigns/campaigns.hbs:5 -msgid "RSS Campaign" -msgstr "Kampania RSS" - -#: views/campaigns/campaigns.hbs:6 -msgid "Triggered Campaign" -msgstr "Wywołana kampania" - -#: views/campaigns/campaigns.hbs:8 views/campaigns/create-rss.hbs:6 -#: views/campaigns/create-triggered.hbs:5 views/campaigns/create.hbs:5 -#: views/campaigns/edit-rss.hbs:8 views/campaigns/edit-triggered.hbs:9 -#: views/campaigns/edit.hbs:10 views/campaigns/view.hbs:71 -#: views/lists/create.hbs:5 views/lists/edit.hbs:6 -#: views/lists/fields/fields.hbs:6 views/lists/lists.hbs:5 -#: views/lists/segments/segments.hbs:6 views/templates/templates.hbs:5 -#: views/triggers/triggers.hbs:5 -msgid "Name" -msgstr "Nazwa" - -#: views/campaigns/campaigns.hbs:9 views/campaigns/create-rss.hbs:8 -#: views/campaigns/create-triggered.hbs:7 views/campaigns/create.hbs:7 -#: views/campaigns/edit-rss.hbs:10 views/campaigns/edit-triggered.hbs:11 -#: views/campaigns/edit.hbs:12 views/campaigns/view.hbs:72 -#: views/lists/create.hbs:7 views/lists/edit.hbs:10 views/lists/lists.hbs:8 -#: views/partials/merge-tag-reference.hbs:4 views/templates/create.hbs:9 -#: views/templates/edit.hbs:8 views/templates/templates.hbs:6 -#: views/triggers/create.hbs:7 views/triggers/edit.hbs:8 -#: views/triggers/triggers.hbs:7 -msgid "Description" -msgstr "Opis" - -#: views/campaigns/campaigns.hbs:10 views/campaigns/view.hbs:73 -#: views/lists/view.hbs:21 views/lists/view.hbs:29 -#: views/triggers/triggers.hbs:6 -msgid "Status" -msgstr "Status" - -#: views/campaigns/campaigns.hbs:11 views/campaigns/view.hbs:74 -#: views/lists/view.hbs:22 views/lists/view.hbs:23 -msgid "Created" -msgstr "Utworzono" - -#: views/campaigns/clicked.hbs:3 views/campaigns/clicked.hbs:4 -msgid "Link info" -msgstr "Informacje o linkach" - -#: views/campaigns/clicked.hbs:6 views/campaigns/view.hbs:61 -msgid "URL" -msgstr "URL" - -#: views/campaigns/clicked.hbs:7 views/campaigns/view.hbs:62 -msgid "Clicks" -msgstr "Kliknięcia" - -#: views/campaigns/clicked.hbs:8 views/campaigns/view.hbs:63 -msgid "% of clicks" -msgstr "% kliknięć" - -#: views/campaigns/clicked.hbs:9 views/campaigns/view.hbs:64 -msgid "% of messages" -msgstr "% wiadomości" - -#: views/campaigns/clicked.hbs:10 views/campaigns/view.hbs:67 -msgid "Aggregated clicks" -msgstr "Zagregowane kliknięcia" - -#: views/campaigns/clicked.hbs:11 -msgid "Subscribers who clicked on a link:" -msgstr "Subskrybenci, którzy kliknęli link:" - -#: views/campaigns/clicked.hbs:12 -msgid "Subscribers who clicked on this link:" -msgstr "Subskrybenci, którzy kliknęli ten link:" - -#: views/campaigns/clicked.hbs:16 -msgid "First click time" -msgstr "Czas pierwszego kliknięcia" - -#: views/campaigns/clicked.hbs:17 -msgid "Click count" -msgstr "Liczba kliknięć" - -#: views/campaigns/complained.hbs:3 views/campaigns/complained.hbs:4 -msgid "Complained info" -msgstr "Informacje o skargach" - -#: views/campaigns/complained.hbs:6 -msgid "Subscribers who complained and were unsubscribed:" -msgstr "Subskrybenci, którzy złożyli skargę i wypisali się:" - -#: views/campaigns/complained.hbs:11 -msgid "Complain time" -msgstr "Czas skargi" - -#: views/campaigns/create-rss.hbs:3 views/campaigns/create-rss.hbs:4 -#: views/campaigns/create-rss.hbs:20 -msgid "Create RSS Campaign" -msgstr "Utwórz kampanię RSS" - -#: views/campaigns/create-rss.hbs:5 views/campaigns/edit-rss.hbs:6 -msgid "" -"RSS campaign sets up a tracker against selected RSS feed address. Whenever a " -"new entry is found from this feed it is sent to selected list as an email " -"message." -msgstr "" -"Kampania RSS ustawia moduł śledzący na wybrany adres RSS. Za każdym razem, " -"gdy nowy wpis zostanie znaleziony z tego kanału, zostanie wysłany na wybraną " -"listę jako wiadomość e-mail." - -#: views/campaigns/create-rss.hbs:7 views/campaigns/create-triggered.hbs:6 -#: views/campaigns/create.hbs:6 views/campaigns/edit-rss.hbs:9 -#: views/campaigns/edit-triggered.hbs:10 views/campaigns/edit.hbs:11 -msgid "Campaign Name" -msgstr "Nazwa kampanii" - -#: views/campaigns/create-rss.hbs:9 views/campaigns/create-triggered.hbs:8 -#: views/campaigns/create.hbs:8 views/campaigns/edit-rss.hbs:11 -#: views/campaigns/edit-triggered.hbs:12 views/campaigns/edit.hbs:13 -#: views/lists/create.hbs:8 views/lists/edit.hbs:11 -#: views/templates/create.hbs:11 views/templates/edit.hbs:10 -#: views/triggers/create.hbs:9 views/triggers/edit.hbs:10 -msgid "HTML is allowed" -msgstr "HTML dozwolony" - -#: views/campaigns/create-rss.hbs:10 views/campaigns/create-triggered.hbs:9 -#: views/campaigns/create.hbs:9 views/campaigns/edit-rss.hbs:12 -#: views/campaigns/edit-triggered.hbs:13 views/campaigns/edit.hbs:14 -#: views/campaigns/view.hbs:6 views/triggers/create-select.hbs:6 -#: views/triggers/create.hbs:10 views/triggers/edit.hbs:12 -#: views/triggers/triggers.hbs:8 -msgid "List" -msgstr "Lista" - -#: views/campaigns/create-rss.hbs:11 views/campaigns/create-triggered.hbs:10 -#: views/campaigns/create-triggered.hbs:13 views/campaigns/create.hbs:10 -#: views/campaigns/create.hbs:14 views/campaigns/edit-rss.hbs:13 -#: views/campaigns/edit-triggered.hbs:14 views/campaigns/edit.hbs:15 -#: views/lists/fields/create.hbs:27 views/lists/fields/edit.hbs:28 -#: views/lists/segments/create.hbs:9 views/lists/segments/edit.hbs:10 -#: views/lists/segments/rule-create.hbs:7 views/lists/subscription/add.hbs:10 -#: views/lists/subscription/add.hbs:12 views/lists/subscription/edit.hbs:11 -#: views/lists/subscription/import-preview.hbs:5 -#: views/subscription/manage.hbs:10 views/subscription/subscribe.hbs:10 -#: views/templates/create.hbs:8 views/triggers/create-select.hbs:7 -#: views/triggers/create.hbs:17 views/triggers/create.hbs:20 -#: views/triggers/create.hbs:22 views/triggers/create.hbs:26 -#: views/triggers/edit.hbs:19 views/triggers/edit.hbs:22 -#: views/triggers/edit.hbs:24 views/triggers/edit.hbs:28 -msgid "Select" -msgstr "Wybierz" - -#: views/campaigns/create-rss.hbs:12 views/campaigns/create-triggered.hbs:11 -#: views/campaigns/create.hbs:11 views/campaigns/edit-rss.hbs:14 -#: views/campaigns/edit-triggered.hbs:15 views/campaigns/edit.hbs:16 -#: views/triggers/create-select.hbs:8 views/triggers/create.hbs:11 -#: views/triggers/edit.hbs:13 -msgid "subscribers" -msgstr "subskrybenci" - -#: views/campaigns/create-rss.hbs:13 views/campaigns/edit-rss.hbs:15 -msgid "RSS Feed Url" -msgstr "Adres URL kanału RSS" - -#: views/campaigns/create-rss.hbs:14 views/campaigns/edit-rss.hbs:16 -msgid "" -"New entries from this RSS URL are sent out to list subscribers as email " -"messages" -msgstr "" -"Nowe wpisy z tego adresu RSS są wysyłane do listy subskrybentów, jak " -"wiadomości e-mail" - -#: views/campaigns/create-rss.hbs:15 views/campaigns/create-triggered.hbs:17 -#: views/campaigns/create.hbs:18 views/campaigns/edit-rss.hbs:18 -#: views/campaigns/edit-triggered.hbs:16 views/campaigns/edit.hbs:17 -#: views/campaigns/view.hbs:12 -msgid "Email \"from name\"" -msgstr "E-mail nazwa \"from\"" - -#: views/campaigns/create-rss.hbs:16 views/campaigns/create-triggered.hbs:18 -#: views/campaigns/create.hbs:19 views/campaigns/edit-rss.hbs:19 -#: views/campaigns/edit.hbs:18 views/settings.hbs:23 -msgid "This is the name your emails will come from" -msgstr "This is the name your emails will come from" - -#: views/campaigns/create-rss.hbs:17 views/campaigns/create-triggered.hbs:19 -#: views/campaigns/create.hbs:20 views/campaigns/edit-rss.hbs:20 -#: views/campaigns/edit-triggered.hbs:18 views/campaigns/edit.hbs:19 -#: views/campaigns/view.hbs:13 -msgid "Email \"from\" address" -msgstr "E-mail adres \"from\"" - -#: views/campaigns/create-rss.hbs:18 views/campaigns/create-triggered.hbs:20 -#: views/campaigns/edit-rss.hbs:21 views/campaigns/edit-triggered.hbs:19 -#: views/settings.hbs:25 -msgid "This is the address people will send replies to" -msgstr "To jest adres na który ludzie będą wysyłać odpowiedzi" - -#: views/campaigns/create-rss.hbs:19 views/campaigns/create-triggered.hbs:23 -#: views/campaigns/create.hbs:26 views/campaigns/edit-rss.hbs:22 -#: views/campaigns/edit-triggered.hbs:22 views/campaigns/edit.hbs:25 -msgid "Disable clicked/opened tracking" -msgstr "Wyłącz kliknięte/otwarte śledzenie" - -#: views/campaigns/create-triggered.hbs:3 -#: views/campaigns/create-triggered.hbs:4 -msgid "Create Triggered Campaign" -msgstr "Utwórz uruchamianą kampanię" - -#: views/campaigns/create-triggered.hbs:12 views/campaigns/create.hbs:12 -#: views/campaigns/edit-triggered.hbs:7 views/campaigns/edit.hbs:7 -#: views/lists/fields/create.hbs:31 views/lists/fields/edit.hbs:33 -#: views/templates/create.hbs:13 -msgid "Template" -msgstr "Szablon" - -#: views/campaigns/create-triggered.hbs:14 views/campaigns/create.hbs:15 -msgid "Selecting a template creates a campaign specific copy from it" -msgstr "Wybranie szablonu powoduje utworzenie z niego kopii dla kampanii" - -#: views/campaigns/create-triggered.hbs:15 views/campaigns/create.hbs:16 -msgid "Or alternatively use an URL as the message content source:" -msgstr "Lub alternatywnie użyj adresu URL jako źródło treści wiadomości:" - -#: views/campaigns/create-triggered.hbs:16 views/campaigns/create.hbs:17 -#: views/campaigns/edit-triggered.hbs:25 views/campaigns/edit.hbs:28 -msgid "" -"If a message is sent then this URL will be POSTed to using Merge Tags as " -"POST body. Use this if you want to generate the HTML message yourself" -msgstr "" -"Jeśli wiadomość zostanie wysłana, ten adres URL zostanie wysłany POST do " -"używania merge tagów jako treść POST. Użyj tej opcji, jeśli chcesz " -"samodzielnie wygenerować wiadomość HTML" - -#: views/campaigns/create-triggered.hbs:21 views/campaigns/create.hbs:24 -#: views/campaigns/edit-triggered.hbs:20 views/campaigns/edit.hbs:23 -#: views/campaigns/view.hbs:15 -msgid "Email \"subject line\"" -msgstr "E-mail temat \"from\"" - -#: views/campaigns/create-triggered.hbs:22 views/campaigns/create.hbs:25 -#: views/campaigns/edit-triggered.hbs:21 views/campaigns/edit.hbs:24 -#: views/settings.hbs:27 -msgid "Keep it relevant and non-spammy" -msgstr "Zachowaj to, co istotne i nie spamuj" - -#: views/campaigns/create.hbs:13 -msgid "Select a template:" -msgstr "Wybierz szablon:" - -#: views/campaigns/create.hbs:21 views/campaigns/edit.hbs:20 -msgid "" -"This is the address people will send replies to unless reply-to address is " -"set" -msgstr "" -"To jest adres, na który ludzie będą wysyłać odpowiedzi, chyba że ustawiono " -"adres zwrotny" - -#: views/campaigns/create.hbs:22 views/campaigns/edit.hbs:21 -#: views/campaigns/view.hbs:14 -msgid "Email \"reply-to\" address" -msgstr "Email \"Odpowiedz do\"" - -#: views/campaigns/create.hbs:23 views/campaigns/edit.hbs:22 -msgid "If set, this is the address people will send replies to" -msgstr "" -"Jeśli jest ustawiony, jest to adres, na który ludzie będą wysyłać odpowiedzi" - -#: views/campaigns/delivered.hbs:3 views/campaigns/delivered.hbs:4 -msgid "Delivered info" -msgstr "Informacje o dostarczonych" - -#: views/campaigns/delivered.hbs:6 -msgid "Subscribers who received the message and did not bounce/unsubscribe:" -msgstr "" -"Subskrybenci, którzy otrzymali wiadomość i nie odrzucili/nie anulowali " -"subskrypcji:" - -#: views/campaigns/delivered.hbs:11 -msgid "Delivery time" -msgstr "Czas dostarczenia" - -#: views/campaigns/edit-rss.hbs:3 views/campaigns/edit-rss.hbs:4 -msgid "Edit RSS Campaign" -msgstr "Edytuj kampanię RSS" - -#: views/campaigns/edit-rss.hbs:7 views/campaigns/edit-triggered.hbs:8 -#: views/campaigns/edit.hbs:9 views/settings.hbs:4 views/users/account.hbs:6 -msgid "General Settings" -msgstr "Ustawienia główne" - -#: views/campaigns/edit-rss.hbs:17 -msgid "" -"Use special merge tag [RSS_ENTRY] to mark the position for the RSS post " -"content. Additionally you can use any valid merge tag as well." -msgstr "" -"Użyj specjalnego merge tagu [RSS_ENTRY], aby oznaczyć pozycję treści " -"wiadomości RSS. Dodatkowo mżesz użyć dowolnego innego merge tagu." - -#: views/campaigns/edit-rss.hbs:23 views/campaigns/edit-triggered.hbs:26 -#: views/campaigns/edit.hbs:34 -msgid "Delete Campaign" -msgstr "Usuń kampanię" - -#: views/campaigns/edit-rss.hbs:24 views/campaigns/edit-triggered.hbs:27 -#: views/campaigns/edit.hbs:35 views/lists/edit.hbs:13 -#: views/lists/fields/edit.hbs:39 views/lists/segments/edit.hbs:14 -#: views/lists/segments/rule-edit.hbs:38 views/lists/subscription/edit.hbs:17 -#: views/settings.hbs:99 views/templates/edit.hbs:12 -#: views/triggers/edit.hbs:30 views/users/account.hbs:18 -msgid "Update" -msgstr "Zaktualizuj" - -#: views/campaigns/edit-triggered.hbs:3 views/campaigns/edit-triggered.hbs:4 -msgid "Edit Triggered Campaign" -msgstr "Edytuj kampanię uruchamianą" - -#: views/campaigns/edit-triggered.hbs:6 views/campaigns/edit.hbs:6 -msgid "General" -msgstr "Główne" - -#: views/campaigns/edit-triggered.hbs:17 -msgid "his is the name your emails will come from" -msgstr "Nazwa, z której będą wysyłane wszystkie e-maile." - -#: views/campaigns/edit-triggered.hbs:23 views/campaigns/edit.hbs:26 -msgid "Template Settings" -msgstr "Ustawienia szablonu" - -#: views/campaigns/edit-triggered.hbs:24 views/campaigns/edit.hbs:27 -msgid "Template URL" -msgstr "Adres URL szablonu" - -#: views/campaigns/edit.hbs:3 views/campaigns/edit.hbs:4 -#: views/campaigns/upload-attachment.hbs:3 -#: views/campaigns/upload-attachment.hbs:5 views/campaigns/view.hbs:3 -msgid "Edit Campaign" -msgstr "Edytuj kampanie" - -#: views/campaigns/edit.hbs:8 views/campaigns/edit.hbs:29 -msgid "Attachments" -msgstr "Załączniki" - -#: views/campaigns/edit.hbs:30 -msgid "File" -msgstr "Plik" - -#: views/campaigns/edit.hbs:31 -msgid "Size" -msgstr "Rozmiar" - -#: views/campaigns/edit.hbs:32 views/campaigns/view.hbs:66 -#: views/lists/fields/fields.hbs:12 views/lists/view.hbs:32 -msgid "No data available in table" -msgstr "Brak danych w tabeli" - -#: views/campaigns/edit.hbs:33 views/campaigns/upload-attachment.hbs:4 -msgid "Add Attachment" -msgstr "Dodaj załącznik" - -#: views/campaigns/opened.hbs:3 views/campaigns/opened.hbs:4 -msgid "Opened info" -msgstr "Informacje o otwarciach" - -#: views/campaigns/opened.hbs:6 -msgid "Subscribers who opened this message:" -msgstr "Subskrybenci, którzy otworzyli tę wiadomość:" - -#: views/campaigns/opened.hbs:10 -msgid "First open" -msgstr "Pierwsze otwarcie" - -#: views/campaigns/opened.hbs:11 -msgid "Opened count" -msgstr "Liczba otwarć" - -#: views/campaigns/unsubscribed.hbs:3 views/campaigns/unsubscribed.hbs:4 -msgid "Unsubscribed info" -msgstr "Informacje o anulowaniach subskrypcji" - -#: views/campaigns/unsubscribed.hbs:6 -msgid "Subscribers who unsubscribed:" -msgstr "Subskrybenci, którzy anulowali subskrypcję:" - -#: views/campaigns/unsubscribed.hbs:11 views/campaigns/view.hbs:26 -#: views/lists/subscription/import.hbs:10 routes/lists.js:171 -msgid "Unsubscribed" -msgstr "Anulowano subskrypcję" - -#: views/campaigns/upload-attachment.hbs:7 -msgid "Upload" -msgstr "Prześlij" - -#: views/campaigns/view.hbs:4 -msgid "Overview" -msgstr "Przegląd" - -#: views/campaigns/view.hbs:5 -msgid "Links" -msgstr "Linków" - -#: views/campaigns/view.hbs:7 -msgid "Feed URL" -msgstr "Url czytnika" - -#: views/campaigns/view.hbs:8 -msgid "Last check" -msgstr "Ostatnie sprawdzenie" - -#: views/campaigns/view.hbs:9 -msgid "Not yet checked" -msgstr "Jeszcze nie sprawdzone" - -#: views/campaigns/view.hbs:10 -msgid "activate campaign to start checking feed for new messages" -msgstr "" -"aktywuj kampanię, aby rozpocząć sprawdzanie kanału dla nowych wiadomości" - -#: views/campaigns/view.hbs:11 -msgid "RSS status" -msgstr "Status RSS" - -#: views/campaigns/view.hbs:16 -msgid "Preview campaign as" -msgstr "Podgląd kampanii jako" - -#: views/campaigns/view.hbs:17 -msgid "Add new test user" -msgstr "Dodaj użytkownika testowego" - -#: views/campaigns/view.hbs:18 -msgid "No test users yet, create one here" -msgstr "Brak użytkowników testowych, utwórz je tutaj" - -#: views/campaigns/view.hbs:19 -msgid "Go" -msgstr "Dalej" - -#: views/campaigns/view.hbs:20 lib/models/triggers.js:25 -msgid "Delivered" -msgstr "Dostarczone" - -#: views/campaigns/view.hbs:21 -msgid "List subscribers who received this message" -msgstr "Lista subskrybentów, którzy otrzymali tę wiadomość" - -#: views/campaigns/view.hbs:22 routes/lists.js:171 -msgid "Bounced" -msgstr "Odbite" - -#: views/campaigns/view.hbs:23 -msgid "List subscribers who bounced" -msgstr "Lista użytkowników którzy odbili" - -#: views/campaigns/view.hbs:24 -msgid "Complaints" -msgstr "Skargi" - -#: views/campaigns/view.hbs:25 -msgid "List subscribers who complained for this message" -msgstr "Lista subskrybentów, którzy złożyli skargę na tę wiadomość" - -#: views/campaigns/view.hbs:27 -msgid "List subscribers who unsubscribed after this message" -msgstr "Lista subskrybentów, którzy anulowali subskrypcję po tej wiadomości" - -#: views/campaigns/view.hbs:28 -msgid "Opened" -msgstr "Otwarto" - -#: views/campaigns/view.hbs:29 -msgid "List subscribers who opened this message" -msgstr "Lista subskrybentów, którzy otworzyli tę wiadomość" - -#: views/campaigns/view.hbs:30 -msgid "Clicked" -msgstr "Kliknięto" - -#: views/campaigns/view.hbs:31 views/campaigns/view.hbs:68 -msgid "List subscribers who clicked on a link" -msgstr "Lista subskrybentów, którzy kliknęli w link" - -#: views/campaigns/view.hbs:32 -msgid "" -"Are you sure? This action would start sending messages to the selected list" -msgstr "" -"Jesteś pewny? Ta czynność rozpocznie wysyłanie wiadomości do wybranej listy" - -#: views/campaigns/view.hbs:33 -msgid "Delay sending" -msgstr "Opóźnienie wysyłania" - -#: views/campaigns/view.hbs:34 -msgid "hours" -msgstr "godziny" - -#: views/campaigns/view.hbs:35 -msgid "minutes" -msgstr "minuty" - -#: views/campaigns/view.hbs:36 -msgid "Send to subscribers:" -msgstr "Wyślij do subskrybentów:" - -#: views/campaigns/view.hbs:37 -msgid "Are you sure? This action would reset scheduling" -msgstr "Jesteś pewny? Ta czynność zresetuje harmonogram" - -#: views/campaigns/view.hbs:38 -msgid "Cancel" -msgstr "Anuluj" - -#: views/campaigns/view.hbs:39 -msgid "Sending scheduled" -msgstr "Wysyłanie harmonogramu" - -#: views/campaigns/view.hbs:40 views/campaigns/view.hbs:52 -msgid "Pause" -msgstr "Pauza" - -#: views/campaigns/view.hbs:41 routes/campaigns.js:264 -msgid "Sending" -msgstr "Wysyłanie" - -#: views/campaigns/view.hbs:42 views/campaigns/view.hbs:46 -msgid "" -"Are you sure? This action would resume sending messages to the selected list" -msgstr "" -"Jesteś pewny? Ta czynność wznowi wysyłanie wiadomości do wybranej listy" - -#: views/campaigns/view.hbs:43 views/campaigns/view.hbs:47 -msgid "Are you sure? This action would reset all stats about current progress" -msgstr "" -"Jesteś pewny? Ta czynność zresetuje wszystkie statystyki dotyczące bieżącego " -"postępu" - -#: views/campaigns/view.hbs:44 -msgid "Resume" -msgstr "Wznów" - -#: views/campaigns/view.hbs:45 views/campaigns/view.hbs:49 -msgid "Reset" -msgstr "Resetuj" - -#: views/campaigns/view.hbs:48 -msgid "Continue" -msgstr "Kontynuuj" - -#: views/campaigns/view.hbs:50 -msgid "" -"All messages sent! Hit \"Continue\" if you you want to send this campaign to " -"new subscribers" -msgstr "" -"Wszystkie wiadomości wysłane! Kliknij \"Kontynuuj\", jeśli chcesz wysłać tę " -"kampanię do nowych subskrybentów" - -#: views/campaigns/view.hbs:51 -msgid "" -"Are you sure? This action would pause sending new entries in RSS feed as " -"email messages to the selected list" -msgstr "" -"Jesteś pewny? Ta czynność wstrzyma wysyłanie wiadomości o nowych wpisach w " -"kanale RSS do wybranej listy" - -#: views/campaigns/view.hbs:53 views/campaigns/view.hbs:57 -msgid "Campaign status:" -msgstr "Status kampanii:" - -#: views/campaigns/view.hbs:54 -msgid "ACTIVE" -msgstr "AKTYWNE" - -#: views/campaigns/view.hbs:55 -msgid "" -"Are you sure? This action would start sending new entries in RSS feed as " -"email messages to the selected list" -msgstr "" -"Jesteś pewny? Ta czynność rozpocznie wysyłanie wiadomości o nowych wpisach w " -"kanale RSS do wybranej listy" - -#: views/campaigns/view.hbs:56 -msgid "Activate" -msgstr "Aktywuj" - -#: views/campaigns/view.hbs:58 -msgid "INACTIVE" -msgstr "NIEAKTYWNE" - -#: views/campaigns/view.hbs:59 -msgid "" -"This is a triggered campaign. Messages are only sent to subscribers that hit " -"some trigger that invokes this campaign" -msgstr "" -"To jest kampania wyzwalana. Wiadomości są wysyłane tylko do subskrybentów, " -"którzy natrafili na jakiś wyzwalacz, który wywołuje tę kampanię" - -#: views/campaigns/view.hbs:60 -msgid "see more" -msgstr "zobacz więcej" - -#: views/campaigns/view.hbs:65 -msgid "List subscribers who clicked this link" -msgstr "Lista subskrybentów, którzy kliknęli link" - -#: views/campaigns/view.hbs:69 -msgid "" -"Clicks are counted as unique subscribers that clicked on a specific link or " -"on any link (in aggregated view)" -msgstr "" -"Kliknięcia są liczone jako unikalni subskrybenci, którzy kliknęli określony " -"link lub dowolny link (w widoku zbiorczym)" - -#: views/campaigns/view.hbs:70 -msgid "" -"If a new entry is found from campaign feed a new subcampaign is created of " -"that entry and it will be listed here" -msgstr "" -"Jeśli zostanie znaleziony nowy wpis z kanału kampanii, zostanie utworzona " -"nowa kampania podrzędna dla tego wpisu i zostanie ona tutaj wymieniona" - -#: views/emails/confirm-html.hbs:1 views/emails/confirm-html.hbs:2 -#: views/emails/confirm-text.hbs:1 -msgid "Please Confirm Subscription" -msgstr "Proszę potwierdź subskrypcję" - -#: views/emails/confirm-html.hbs:3 views/emails/confirm-text.hbs:2 -msgid "Yes, subscribe me to this list" -msgstr "Tak, zapisz mnie na listę" - -#: views/emails/confirm-html.hbs:4 -msgid "" -"If you received this email by mistake, simply delete it. You won't be " -"subscribed if you don't click the confirmation link above." -msgstr "" -"Jeśli przez pomyłkę otrzymałeś tego e-maila, po prostu go usuń. Nie będziesz " -"subskrybowany, jeśli nie klikniesz w link potwierdzający." - -#: views/emails/confirm-html.hbs:5 views/emails/confirm-text.hbs:4 -#: views/emails/subscription-confirmed-html.hbs:7 -#: views/emails/subscription-confirmed-text.hbs:7 -#: views/emails/unsubscribe-confirmed-html.hbs:5 -#: views/emails/unsubscribe-confirmed-text.hbs:5 -msgid "For questions about this list, please contact:" -msgstr "W przypadku pytań dotyczących tej listy, prosimy o kontakt:" - -#: views/emails/confirm-text.hbs:3 -msgid "" -"If you received this email by mistake, simply delete it. You won't be " -"subscribed unless you click the confirmation link above." -msgstr "" -"Jeśli przez pomyłkę otrzymałeś tego e-maila, po prostu go usuń. Nie będziesz " -"subskrybowany, chyba że klikniesz link powyżej." - -#: views/emails/password-reset-html.hbs:1 -#: views/emails/password-reset-html.hbs:2 -#: views/emails/password-reset-text.hbs:1 -msgid "Change your password" -msgstr "Zmień hasło" - -#: views/emails/password-reset-html.hbs:3 -#: views/emails/password-reset-text.hbs:2 -msgid "We have received a password change request for your Mailtrain account:" -msgstr "Otrzymaliśmy prośbę o zmianę hasła dla Twojego konta Mailtrain:" - -#: views/emails/password-reset-html.hbs:4 -#: views/emails/password-reset-text.hbs:3 -msgid "Reset password" -msgstr "Zresetuj hasło" - -#: views/emails/password-reset-html.hbs:5 -#: views/emails/password-reset-text.hbs:4 -msgid "" -"If you did not ask to change your password, then you can ignore this email " -"and your password will not be changed." -msgstr "" -"Jeśli nie poprosiłeś o zmianę hasła, możesz zignorować ten e-mail, a Twoje " -"hasło nie zostanie zmienione." - -#: views/emails/rss-html.hbs:1 views/emails/stationery-html.hbs:3 -#: views/emails/stationery-text.hbs:3 -msgid "Preferences" -msgstr "Preferencje" - -#: views/emails/rss-html.hbs:2 views/emails/stationery-html.hbs:4 -#: views/emails/stationery-text.hbs:4 views/lists/subscription/edit.hbs:15 -#: views/subscription/manage.hbs:12 views/subscription/unsubscribe.hbs:1 -#: views/subscription/unsubscribe.hbs:4 routes/lists.js:253 -msgid "Unsubscribe" -msgstr "Anuluj subskrypcję" - -#: views/emails/rss-html.hbs:3 views/emails/stationery-html.hbs:5 -#: views/emails/stationery-text.hbs:5 -msgid "View this email in your browser" -msgstr "Zobacz ten email w Twojej przeglądarce" - -#: views/emails/stationery-html.hbs:1 views/emails/stationery-text.hbs:1 -msgid "Hey [FIRST_NAME/Customer]," -msgstr "Cześć [FIRST_NAME/Customer]," - -#: views/emails/stationery-html.hbs:2 views/emails/stationery-text.hbs:2 -msgid "Cheers," -msgstr "Pozdrowienia," - -#: views/emails/subscription-confirmed-html.hbs:1 -#: views/emails/subscription-confirmed-text.hbs:1 -#: views/subscription/subscribed.hbs:1 -msgid "Subscription Confirmed" -msgstr "Subskrypcja została potwierdzona" - -#: views/emails/subscription-confirmed-html.hbs:2 -#: views/emails/subscription-confirmed-text.hbs:2 -#: views/subscription/subscribed.hbs:2 -msgid "Your subscription to our list has been confirmed." -msgstr "Twoja subskrypcja naszej listy została potwierdzona." - -#: views/emails/subscription-confirmed-html.hbs:3 -#: views/emails/subscription-confirmed-text.hbs:3 -msgid "If you want to modify your subscription then you can:" -msgstr "Jeśli chcesz zmodyfikować swoją subskrypcję, możesz:" - -#: views/emails/subscription-confirmed-html.hbs:4 -#: views/emails/subscription-confirmed-text.hbs:4 -#: views/subscription/subscribed.hbs:6 -msgid "manage your preferences" -msgstr "zarządzaj swoimi preferencjami" - -#: views/emails/subscription-confirmed-html.hbs:5 -#: views/emails/subscription-confirmed-text.hbs:5 -#: views/subscription/subscribed.hbs:5 views/users/login.hbs:10 -msgid "or" -msgstr "lub" - -#: views/emails/subscription-confirmed-html.hbs:6 -#: views/emails/subscription-confirmed-text.hbs:6 -msgid "unsubscribe here" -msgstr "anuluj subskrypcję tutaj" - -#: views/emails/unsubscribe-confirmed-html.hbs:1 -#: views/emails/unsubscribe-confirmed-text.hbs:1 -msgid "You are now unsubscribed" -msgstr "Anulowałeś subskrypcję" - -#: views/emails/unsubscribe-confirmed-html.hbs:2 -#: views/emails/unsubscribe-confirmed-text.hbs:2 -msgid "We have removed your email address from our list." -msgstr "Usunęliśmy Twój adres e-mail z naszej listy." - -#: views/emails/unsubscribe-confirmed-html.hbs:3 -#: views/emails/unsubscribe-confirmed-text.hbs:3 -msgid "If you unsubscribed by mistake, you can re-subscribe at:" -msgstr "" -"Jeśli anulujesz subskrypcję przez pomyłkę, możesz ponownie zasubskrybować na:" - -#: views/emails/unsubscribe-confirmed-html.hbs:4 -#: views/emails/unsubscribe-confirmed-text.hbs:4 -#: views/lists/subscription/add.hbs:16 routes/lists.js:253 -msgid "Subscribe" -msgstr "Subskrybuj" - -#: views/index.hbs:1 -msgid "Official Mailtrain Partners" -msgstr "Oficjalni partnerzy Mailtrain" - -#: views/index.hbs:2 -msgid "Free, open source mail server solution" -msgstr "Darmowe, o otwartym kodzie źródłowym rozwiązanie serwera poczty" - -#: views/index.hbs:3 -msgid "" -"A reliable SMTP server, easy integration, and 12,000 messages a month free" -msgstr "" -"Niezawodny serwer SMTP, łatwa integracja i 12 000 wiadomości miesięcznie za " -"darmo" - -#: views/index.hbs:4 -msgid "List management" -msgstr "Zarządzanie listamie" - -#: views/index.hbs:5 -msgid "" -"Mailtrain allows you to easily manage even very large lists. Million " -"subscribers? Not a problem. You can add subscribers manually, through the " -"API or import from a CSV file. All lists come with support for custom fields " -"and merge tags as well." -msgstr "" -"Mailtrain pozwala w łatwy sposób zarządzać nawet bardzo dużymi listami. " -"Milion subskrybentów? Żaden problem. Możesz dodawać subskrybentów ręcznie, " -"za pośrednictwem interfejsu API lub importować z pliku CSV. Wszystkie listy " -"zawierają również obsługę pól niestandardowych i znaczników scalających." - -#: views/index.hbs:6 -msgid "Custom fields" -msgstr "Pola niestandardowe" - -#: views/index.hbs:7 -msgid "" -"Text fields, numbers, drop downs or checkboxes, Mailtrain has them all. " -"Every custom field can be included in the generated newsletters through " -"merge tags." -msgstr "" -"Pola tekstowe, cyfry, listy rozwijane lub pola wyboru, Mailtrain ma je " -"wszystkie. Każde niestandardowe pole może być zawarte w wygenerowanych " -"newsletterach za pomocą merge tagów." - -#: views/index.hbs:8 -msgid "List segmentation" -msgstr "Segmentacja listy" - -#: views/index.hbs:9 -msgid "" -"Send messages only to list subscribers that match predefined segmentation " -"rules. No need to create separate lists with small differences." -msgstr "" -"Wysyłaj wiadomości tylko dla subskrybentów, którzy pasują do " -"predefiniowanych reguł segmentacji. Nie trzeba tworzyć oddzielnych list z " -"małymi różnicami." - -#: views/index.hbs:10 -msgid "Donate to author" -msgstr "Przekaż darowiznę autorowi" - -#: views/index.hbs:11 -msgid "" -"If you really like Mailtrain or your business benefits from it financially " -"then I would really appreciate a small donation to keep the Mailtrain " -"development engines running. You can either use Bitcoin or PayPal for " -"donations. My Bitcoin wallet is 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM" -msgstr "" -"Jeśli naprawdę lubisz Mailtrain lub Twoja firma czerpie z teg korzyści " -"finansowe będę naprawdę wdzięczny za niewielką darowiznę, aby utrzymać " -"rozwój Mailtrain. Możesz użyć Bitcoin lub PayPal do darowizn. Mój portfel " -"Bitcoin to 15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM" - -#: views/index.hbs:12 -msgid "or donate using PayPal" -msgstr "lub przekaż darowiznę za pomocą PayPal" - -#: views/index.hbs:13 -msgid "RSS Campaigns" -msgstr "Kampanie RSS" - -#: views/index.hbs:14 -msgid "" -"Setup Mailtrain to track RSS feeds and if a new entry is detected in a feed " -"then Mailtrain auto-generates a new campaign using entry data as message " -"contents and sends it to selected subscribers." -msgstr "" -"Przygotuj Mailtrain do śledzenia kanałów RSS i jeśli wykryty zostanie nowy " -"wpis w kanale, Mailtrain automatycznie generuje nową kampanię, wykorzystując " -"dane wejściowe jako treść wiadomości i wysyła je do wybranych subskrybentów." - -#: views/index.hbs:15 -msgid "GPG Encryption" -msgstr "Szyfrowanie GPG" - -#: views/index.hbs:16 -msgid "" -"If a list has a custom field for a GPG Public Key set then subscribers can " -"upload their GPG public key to receive encrypted messages from the list." -msgstr "" -"Jeśli lista ma niestandardowe pole dla zestawu kluczy publicznych GPG, " -"subskrybenci mogą przesłać swój klucz publiczny GPG, aby otrzymywać " -"zaszyfrowane wiadomości z listy." - -#: views/index.hbs:17 -msgid "Click stats" -msgstr "Statystyki kliknięć" - -#: views/index.hbs:18 -msgid "" -"After a campaign is sent, check individual click statistics for every link " -"included in the message." -msgstr "" -"Po wysłaniu kampanii sprawdź statystyki poszczególnych kliknięć dla każdego " -"linku zawartego w wiadomości." - -#: views/index.hbs:19 -msgid "Open source" -msgstr "Open source" - -#: views/index.hbs:20 -msgid "Mailtrain is available under GPLv3 license and completely open source." -msgstr "Mailtrain jest dostępny na licencji GPLv3 i całkowicie open source." - -#: views/index.hbs:21 -msgid "Send via any provider" -msgstr "Wyślij przez dowolnego dostawcę" - -#: views/index.hbs:22 -msgid "" -"Mailtrain recommends SendPulse even though you " -"can use any provider that supports SMTP protocol to send out your " -"newsletters. Bounce and complaints handling via webhooks is supported for " -"SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA." -msgstr "" -"Mailtrain recommends SendPulse even though you " -"can use any provider that supports SMTP protocol to send out your " -"newsletters. Bounce and complaints handling via webhooks is supported for " -"SES, SparkPost, SendGrid and Mailgun, also for Postfix and ZoneMTA." -"Odbieranie i obsługa skarg za pośrednictwem webhooków jest obsługiwane dla " -"SES, SparkPost, SendGrid i Mailgun, także dla Postfix i ZoneMTA." - -#: views/index.hbs:23 -msgid "Trigger based automation" -msgstr "Automatyzacja oparta na wyzwalaczach" - -#: views/index.hbs:24 -msgid "" -"Define automation triggers to send specific messages when a user activates " -"the trigger." -msgstr "" -"Zdefiniuj wyzwalacze automatyzacji, aby wysłać określone komunikaty, gdy " -"użytkownik aktywuje wyzwalacz." - -#: views/layout.hbs:2 -msgid "Toggle navigation" -msgstr "Przełącz nawigację" - -#: views/layout.hbs:3 -msgid "Wiki" -msgstr "Wiki" - -#: views/layout.hbs:4 -msgid "Blog" -msgstr "Blog" - -#: views/layout.hbs:5 views/users/account.hbs:2 views/users/account.hbs:3 -msgid "Account" -msgstr "Konto" - -#: views/layout.hbs:6 views/settings.hbs:2 views/settings.hbs:3 -msgid "Settings" -msgstr "Ustawienia" - -#: views/layout.hbs:7 views/users/api.hbs:2 views/users/api.hbs:3 -msgid "API" -msgstr "API" - -#: views/layout.hbs:8 -msgid "Log out" -msgstr "Wyloguj" - -#: views/layout.hbs:9 views/users/forgot.hbs:2 views/users/login.hbs:2 -#: views/users/login.hbs:3 views/users/login.hbs:9 views/users/reset.hbs:2 -msgid "Sign in" -msgstr "Zaloguj się" - -#: views/layout.hbs:10 -msgid "Self hosted newsletter app built on top of Nodemailer" -msgstr "" -"Samodzielnie hostowana aplikacja e-mail newsletter zbudowana na bazie " -"Nodemailera" - -#: views/layout.hbs:11 views/layout.hbs:13 -msgid "Source on GitHub" -msgstr "Źródło na GitHub" - -#: views/layout.hbs:12 -msgid "Subscribe to our newsletter" -msgstr "Zapisz się do naszego newslettera" - -#: views/lists/create.hbs:2 views/lists/edit.hbs:2 -#: views/lists/fields/create.hbs:2 views/lists/fields/edit.hbs:2 -#: views/lists/fields/fields.hbs:2 views/lists/lists.hbs:2 -#: views/lists/lists.hbs:4 views/lists/segments/create.hbs:2 -#: views/lists/segments/edit.hbs:2 views/lists/segments/rule-configure.hbs:2 -#: views/lists/segments/rule-create.hbs:2 views/lists/segments/rule-edit.hbs:2 -#: views/lists/segments/segments.hbs:2 views/lists/segments/view.hbs:2 -#: views/lists/subscription/add.hbs:2 views/lists/subscription/edit.hbs:2 -#: views/lists/subscription/import-failed.hbs:2 -#: views/lists/subscription/import-preview.hbs:2 -#: views/lists/subscription/import.hbs:2 views/lists/view.hbs:2 -#: lib/tools.js:111 -msgid "Lists" -msgstr "Listy" - -#: views/lists/create.hbs:3 views/lists/create.hbs:4 views/lists/create.hbs:9 -#: views/lists/lists.hbs:3 -msgid "Create List" -msgstr "Utwórz listę" - -#: views/lists/create.hbs:6 views/lists/edit.hbs:7 -msgid "List Name" -msgstr "Nazwa listy" - -#: views/lists/edit.hbs:3 views/lists/edit.hbs:4 views/lists/view.hbs:7 -msgid "Edit List" -msgstr "Edytuj listę" - -#: views/lists/edit.hbs:5 -msgid "View List" -msgstr "Wyświetl listę" - -#: views/lists/edit.hbs:8 -msgid "List ID" -msgstr "ID listy" - -#: views/lists/edit.hbs:9 -msgid "This is the list ID displayed to the subscribers" -msgstr "To jest ID listy wyświetlany dla subskrybentów" - -#: views/lists/edit.hbs:12 -msgid "Delete List" -msgstr "Usuń listę" - -#: views/lists/fields/create.hbs:3 views/lists/fields/edit.hbs:3 -#: views/lists/fields/fields.hbs:3 views/lists/fields/fields.hbs:5 -#: views/lists/view.hbs:5 -msgid "Custom Fields" -msgstr "Pola niestandardowe" - -#: views/lists/fields/create.hbs:4 -msgid "Create Field" -msgstr "Utwórz pole" - -#: views/lists/fields/create.hbs:5 views/lists/fields/fields.hbs:4 -msgid "Create Custom Field" -msgstr "Utwórz pole niestandardowe" - -#: views/lists/fields/create.hbs:6 views/lists/fields/create.hbs:7 -#: views/lists/fields/edit.hbs:7 views/lists/fields/edit.hbs:8 -msgid "Field Name" -msgstr "Nazwa pola" - -#: views/lists/fields/create.hbs:8 views/lists/fields/edit.hbs:9 -msgid "Field Type" -msgstr "Typ pola" - -#: views/lists/fields/create.hbs:9 views/lists/fields/edit.hbs:10 -#: lib/models/fields.js:17 -msgid "Text" -msgstr "Tekst" - -#: views/lists/fields/create.hbs:10 views/lists/fields/edit.hbs:11 -#: lib/models/fields.js:21 -msgid "Number" -msgstr "Numer" - -#: views/lists/fields/create.hbs:11 views/lists/fields/edit.hbs:12 -#: lib/models/fields.js:18 -msgid "Website" -msgstr "Strona www" - -#: views/lists/fields/create.hbs:12 views/lists/fields/edit.hbs:13 -#: lib/models/fields.js:20 -msgid "GPG Public Key" -msgstr "Klucz publiczny GPG" - -#: views/lists/fields/create.hbs:13 views/lists/fields/edit.hbs:14 -#: lib/models/fields.js:19 -msgid "Multi-line text" -msgstr "Tekst wielowierszowy" - -#: views/lists/fields/create.hbs:14 views/lists/fields/edit.hbs:15 -msgid "JSON" -msgstr "JSON" - -#: views/lists/fields/create.hbs:15 views/lists/fields/edit.hbs:16 -msgid "Date" -msgstr "Data" - -#: views/lists/fields/create.hbs:16 views/lists/fields/edit.hbs:17 -msgid "Date (MM/DD/YYYY)" -msgstr "Data (MM/DD/YYYY)" - -#: views/lists/fields/create.hbs:17 views/lists/fields/edit.hbs:18 -#: lib/models/fields.js:26 -msgid "Date (DD/MM/YYYY)" -msgstr "Data (DD/MM/YYYY)" - -#: views/lists/fields/create.hbs:18 views/lists/fields/edit.hbs:19 -msgid "Birthday" -msgstr "Urodziny" - -#: views/lists/fields/create.hbs:19 views/lists/fields/edit.hbs:20 -#: lib/models/fields.js:27 -msgid "Birthday (MM/DD)" -msgstr "Urodziny (MM/DD)" - -#: views/lists/fields/create.hbs:20 views/lists/fields/edit.hbs:21 -#: lib/models/fields.js:28 -msgid "Birthday (DD/MM)" -msgstr "Urodziny (DD/MM)" - -#: views/lists/fields/create.hbs:21 views/lists/fields/edit.hbs:22 -msgid "Grouped" -msgstr "Grouped." - -#: views/lists/fields/create.hbs:22 views/lists/fields/edit.hbs:23 -msgid "Drop Downs" -msgstr "Listy rozwijane" - -#: views/lists/fields/create.hbs:23 views/lists/fields/edit.hbs:24 -#: lib/models/fields.js:22 -msgid "Radio Buttons" -msgstr "Radio Buttons" - -#: views/lists/fields/create.hbs:24 views/lists/fields/edit.hbs:25 -#: lib/models/fields.js:23 -msgid "Checkboxes" -msgstr "Checkboxes" - -#: views/lists/fields/create.hbs:25 views/lists/fields/edit.hbs:26 -msgid "Option for a group value" -msgstr "Opcja dla wartości grupy" - -#: views/lists/fields/create.hbs:26 views/lists/fields/edit.hbs:27 -msgid "Group" -msgstr "Grupa" - -#: views/lists/fields/create.hbs:28 views/lists/fields/edit.hbs:29 -msgid "Required for group options" -msgstr "Wymagane w przypadku opcji grupowych" - -#: views/lists/fields/create.hbs:29 views/lists/fields/create.hbs:30 -#: views/lists/fields/edit.hbs:35 views/lists/fields/edit.hbs:36 -#: views/lists/fields/fields.hbs:9 -msgid "Default merge tag value" -msgstr "Domyślna wartość merge tag" - -#: views/lists/fields/create.hbs:32 views/lists/fields/edit.hbs:34 -msgid "" -"For group elements like checkboxes you can control the appearance of the " -"merge tag with an optional template. The template uses handlebars syntax and " -"you can find all values from {{values}} array, for example " -"{{#each values}} {{this}} {{/each}}. If template is not defined " -"then multiple values are joined with commas. You can also use this template " -"to render JSON values (if the JSON is an array then the array is exposed as " -"values, otherwise you can access the JSON keys directly)." -msgstr "" -"W przypadku elementów grupy, takich jak checkboxy, można kontrolować wygląd " -"merge tagów za pomocą opcjonalnego szablonu. Szablon używa składni " -"handlebars i możesz znaleźć wszystkie wartości z tablicy {{values}}, na przykład {{#each values}} {{this}} {{/each}} . Jeśli " -"szablon nie jest zdefiniowany, wiele wartości jest łączonych przecinkami. " -"Możesz również użyć tego szablonu do renderowania wartości JSON (jeśli JSON " -"jest tablicą, wtedy tablica jest wyświetlana jako values, w " -"przeciwnym razie możesz uzyskać bezpośredni dostęp do kluczy JSON)." - -#: views/lists/fields/create.hbs:33 views/lists/fields/edit.hbs:37 -msgid "Visible" -msgstr "Widoczny" - -#: views/lists/fields/create.hbs:34 -msgid "Add Field" -msgstr "Dodaj pole" - -#: views/lists/fields/edit.hbs:4 -msgid "Edit Field" -msgstr "Edytuj pole" - -#: views/lists/fields/edit.hbs:5 -msgid "Edit Custom Field" -msgstr "Edytuj pole niestandardowe" - -#: views/lists/fields/edit.hbs:6 -msgid "Back to fields" -msgstr "Powrót do pól" - -#: views/lists/fields/edit.hbs:30 views/lists/fields/fields.hbs:8 -#: views/partials/merge-tag-reference.hbs:3 -msgid "Merge tag" -msgstr "Merge tag" - -#: views/lists/fields/edit.hbs:31 -msgid "Merge Tag" -msgstr "Merge Tag" - -#: views/lists/fields/edit.hbs:32 -msgid "Put this tag in your content:" -msgstr "Umieść ten tag w swojej treści:" - -#: views/lists/fields/edit.hbs:38 -msgid "Delete Field" -msgstr "Usuń pole" - -#: views/lists/fields/fields.hbs:7 views/lists/view.hbs:25 -msgid "Type" -msgstr "Typ" - -#: views/lists/fields/fields.hbs:10 views/lists/fields/fields.hbs:11 -#: views/lists/lists.hbs:9 views/lists/segments/segments.hbs:8 -#: views/lists/segments/view.hbs:12 views/templates/templates.hbs:7 -#: views/triggers/triggers.hbs:14 routes/campaigns.js:287 -#: routes/campaigns.js:576 routes/campaigns.js:626 routes/lists.js:222 -#: routes/triggers.js:297 -msgid "Edit" -msgstr "Edytuj" - -#: views/lists/lists.hbs:6 -msgid "ID" -msgstr "ID" - -#: views/lists/lists.hbs:7 -msgid "Subscribers" -msgstr "Subskrybenci" - -#: views/lists/segments/create.hbs:3 views/lists/segments/edit.hbs:3 -#: views/lists/segments/rule-configure.hbs:3 -#: views/lists/segments/rule-create.hbs:3 views/lists/segments/rule-edit.hbs:3 -#: views/lists/segments/segments.hbs:3 views/lists/segments/segments.hbs:5 -#: views/lists/segments/view.hbs:3 views/lists/view.hbs:6 -#: views/lists/view.hbs:13 -msgid "Segments" -msgstr "Segmenty" - -#: views/lists/segments/create.hbs:4 views/lists/segments/create.hbs:5 -#: views/lists/segments/rule-configure.hbs:4 -#: views/lists/segments/rule-create.hbs:4 views/lists/segments/rule-edit.hbs:4 -#: views/lists/segments/segments.hbs:4 -msgid "Create Segment" -msgstr "Utwórz segment" - -#: views/lists/segments/create.hbs:6 views/lists/segments/create.hbs:7 -#: views/lists/segments/edit.hbs:7 views/lists/segments/edit.hbs:8 -msgid "Segment Name" -msgstr "Nazwa segmentu" - -#: views/lists/segments/create.hbs:8 views/lists/segments/edit.hbs:9 -msgid "Rule match" -msgstr "Dopasowanie reguł" - -#: views/lists/segments/create.hbs:10 views/lists/segments/edit.hbs:11 -msgid "All rules must match" -msgstr "Wszystkie reguły muszą się zgadzać" - -#: views/lists/segments/create.hbs:11 views/lists/segments/edit.hbs:12 -msgid "Any rule can match" -msgstr "Każda reguła może się zgadzać" - -#: views/lists/segments/create.hbs:12 -msgid "Add Segment" -msgstr "Dodaj segment" - -#: views/lists/segments/edit.hbs:4 views/lists/segments/edit.hbs:5 -#: views/lists/segments/view.hbs:6 views/lists/view.hbs:11 -msgid "Edit Segment" -msgstr "Edytuj segment" - -#: views/lists/segments/edit.hbs:6 -msgid "Back to segments" -msgstr "Powrót do segmentów" - -#: views/lists/segments/edit.hbs:13 -msgid "Delete Segment" -msgstr "Usuń segment" - -#: views/lists/segments/rule-configure.hbs:5 -#: views/lists/segments/rule-create.hbs:5 views/lists/segments/rule-edit.hbs:5 -#: views/lists/segments/view.hbs:4 -msgid "Create Rule" -msgstr "Utwórz regułę" - -#: views/lists/segments/rule-configure.hbs:6 -#: views/lists/segments/rule-create.hbs:6 views/lists/segments/rule-edit.hbs:6 -#: views/lists/segments/view.hbs:10 -msgid "Rule" -msgstr "Reguła" - -#: views/lists/segments/rule-configure.hbs:7 -#: views/lists/segments/rule-configure.hbs:8 -#: views/lists/segments/rule-configure.hbs:10 -#: views/lists/segments/rule-configure.hbs:13 -#: views/lists/segments/rule-configure.hbs:25 -#: views/lists/segments/rule-configure.hbs:30 -#: views/lists/segments/rule-edit.hbs:7 views/lists/segments/rule-edit.hbs:8 -#: views/lists/segments/rule-edit.hbs:10 views/lists/segments/rule-edit.hbs:15 -#: views/lists/segments/rule-edit.hbs:29 views/lists/segments/rule-edit.hbs:34 -#: views/lists/segments/view.hbs:11 -msgid "Value" -msgstr "Wartość" - -#: views/lists/segments/rule-configure.hbs:9 -#: views/lists/segments/rule-edit.hbs:9 -msgid "" -"Use % for wildcard character, e.g. \"%test\" to match all values that end " -"with \"test\"" -msgstr "" -"Użyj % dla znaku wieloznacznego, np. \"%test\", aby dopasować wszystkie " -"wartości, które kończą się na \"test\"" - -#: views/lists/segments/rule-configure.hbs:11 -#: views/lists/segments/rule-configure.hbs:14 -#: views/lists/segments/rule-configure.hbs:26 -#: views/lists/segments/rule-edit.hbs:11 views/lists/segments/rule-edit.hbs:16 -#: views/lists/segments/rule-edit.hbs:30 -msgid "Use exact match" -msgstr "Użyj ścisłego dopasowania" - -#: views/lists/segments/rule-configure.hbs:12 -#: views/lists/segments/rule-configure.hbs:15 -#: views/lists/segments/rule-configure.hbs:27 -#: views/lists/segments/rule-edit.hbs:12 views/lists/segments/rule-edit.hbs:17 -#: views/lists/segments/rule-edit.hbs:31 -msgid "Use range match" -msgstr "Użyj dopasowania zakresu" - -#: views/lists/segments/rule-configure.hbs:16 -#: views/lists/segments/rule-edit.hbs:20 -msgid "Use relative range match" -msgstr "Użyj względnego dopasowania zakresu" - -#: views/lists/segments/rule-configure.hbs:17 -#: views/lists/segments/rule-configure.hbs:28 -#: views/lists/segments/rule-edit.hbs:13 views/lists/segments/rule-edit.hbs:18 -#: views/lists/segments/rule-edit.hbs:21 views/lists/segments/rule-edit.hbs:32 -msgid "From" -msgstr "Od" - -#: views/lists/segments/rule-configure.hbs:18 -#: views/lists/segments/rule-configure.hbs:22 -#: views/lists/segments/rule-edit.hbs:22 views/lists/segments/rule-edit.hbs:26 -msgid "days" -msgstr "dni" - -#: views/lists/segments/rule-configure.hbs:19 -#: views/lists/segments/rule-configure.hbs:23 -#: views/lists/segments/rule-edit.hbs:23 views/lists/segments/rule-edit.hbs:27 -msgid "before today" -msgstr "przed dzisiaj" - -#: views/lists/segments/rule-configure.hbs:20 -#: views/lists/segments/rule-configure.hbs:24 -#: views/lists/segments/rule-edit.hbs:24 views/lists/segments/rule-edit.hbs:28 -msgid "after today" -msgstr "po dzisiaj" - -#: views/lists/segments/rule-configure.hbs:21 -#: views/lists/segments/rule-configure.hbs:29 -#: views/lists/segments/rule-edit.hbs:14 views/lists/segments/rule-edit.hbs:19 -#: views/lists/segments/rule-edit.hbs:25 views/lists/segments/rule-edit.hbs:33 -msgid "to" -msgstr "do" - -#: views/lists/segments/rule-configure.hbs:31 -#: views/lists/segments/rule-edit.hbs:35 lib/models/segments.js:156 -#: lib/models/segments.js:418 -msgid "Selected" -msgstr "Wybrano" - -#: views/lists/segments/rule-configure.hbs:32 -#: views/lists/segments/rule-edit.hbs:36 lib/models/segments.js:156 -#: lib/models/segments.js:418 -msgid "Not selected" -msgstr "Nie wybrano" - -#: views/lists/segments/rule-configure.hbs:33 -msgid "Add Rule" -msgstr "Dodaj regułę" - -#: views/lists/segments/rule-create.hbs:8 -#: views/lists/subscription/import.hbs:12 views/triggers/create-select.hbs:9 -msgid "Next" -msgstr "Dalej" - -#: views/lists/segments/rule-edit.hbs:37 -msgid "Delete Rule" -msgstr "Usuń regułę" - -#: views/lists/segments/segments.hbs:7 -msgid "Match" -msgstr "Dopasowanie" - -#: views/lists/segments/view.hbs:5 views/lists/view.hbs:12 -msgid "Segment" -msgstr "Segment" - -#: views/lists/segments/view.hbs:7 -msgid "Match rules" -msgstr "Reguły dopasowania" - -#: views/lists/segments/view.hbs:8 -msgid "Matching subscribers" -msgstr "Dopasowani subskrybenci" - -#: views/lists/segments/view.hbs:9 -msgid "show" -msgstr "pokaż" - -#: views/lists/subscription/add.hbs:3 views/lists/subscription/add.hbs:4 -msgid "Add subscriber" -msgstr "Dodaj subskrybenta" - -#: views/lists/subscription/add.hbs:5 views/subscription/manage.hbs:2 -#: views/subscription/subscribe.hbs:3 views/users/account.hbs:7 -msgid "Email Address" -msgstr "Adres e-mail" - -#: views/lists/subscription/add.hbs:8 views/lists/subscription/edit.hbs:9 -#: views/settings.hbs:82 views/settings.hbs:97 views/subscription/manage.hbs:7 -#: views/subscription/subscribe.hbs:7 -msgid "Begins with" -msgstr "Zaczyna się" - -#: views/lists/subscription/add.hbs:9 views/lists/subscription/edit.hbs:10 -msgid "" -"Insert a GPG public key that will be used to encrypt messages sent this " -"subscriber" -msgstr "" -"Wstaw klucz publiczny GPG, który będzie używany do szyfrowania wiadomości " -"wysłanych przez tego subskrybenta" - -#: views/lists/subscription/add.hbs:11 views/lists/subscription/edit.hbs:12 -#: views/lists/subscription/import-preview.hbs:9 -msgid "Timezone" -msgstr "Strefa czasowa" - -#: views/lists/subscription/add.hbs:13 views/lists/subscription/edit.hbs:13 -msgid "Test user?" -msgstr "Użytkownik testowy?" - -#: views/lists/subscription/add.hbs:14 views/lists/subscription/edit.hbs:14 -msgid "" -"If checked then this subscription can be used for previewing campaign " -"messages" -msgstr "" -"Jeśli ta opcja jest zaznaczona, można użyć tej subskrypcji do przeglądania " -"wiadomości kampanii" - -#: views/lists/subscription/add.hbs:15 -msgid "" -"This person will not receive a confirmation email so make sure that you have " -"permission to email them." -msgstr "" -"Ta osoba nie otrzyma e-maila z potwierdzeniem, więc upewnij się, że masz " -"uprawnienia do e-maila." - -#: views/lists/subscription/edit.hbs:3 views/lists/subscription/edit.hbs:4 -msgid "Edit subscriber" -msgstr "Edytuj subskrybenta" - -#: views/lists/subscription/edit.hbs:5 -#: views/lists/subscription/import-failed.hbs:5 -msgid "Back to list" -msgstr "Powrót do listy" - -#: views/lists/subscription/edit.hbs:6 -#: views/lists/subscription/import-preview.hbs:6 -#: views/subscription/unsubscribe.hbs:3 lib/helpers.js:26 -#: lib/models/segments.js:11 -msgid "Email address" -msgstr "Adres e-mail" - -#: views/lists/subscription/edit.hbs:16 -msgid "Delete Subscription" -msgstr "Usuń subskrypcję" - -#: views/lists/subscription/import-failed.hbs:3 -msgid "Import status" -msgstr "Status importu" - -#: views/lists/subscription/import-failed.hbs:4 -msgid "Failed addresses" -msgstr "Nieudane adresy" - -#: views/lists/subscription/import-failed.hbs:6 -msgid "see here" -msgstr "zobacz tutaj" - -#: views/lists/subscription/import-failed.hbs:10 -msgid "Fail reason" -msgstr "Przyczyna niepowodzenia" - -#: views/lists/subscription/import-preview.hbs:3 -#: views/lists/subscription/import-preview.hbs:4 -#: views/lists/subscription/import.hbs:3 views/lists/subscription/import.hbs:4 -msgid "Import subscribers" -msgstr "Zaimportuj subskrybentów" - -#: views/lists/subscription/import-preview.hbs:10 views/users/api.hbs:27 -#: views/users/api.hbs:35 views/users/api.hbs:43 views/users/api.hbs:55 -msgid "Example" -msgstr "Przykład" - -#: views/lists/subscription/import-preview.hbs:11 -msgid "Start import" -msgstr "Rozpocznij importowanie" - -#: views/lists/subscription/import.hbs:5 -msgid "CSV File" -msgstr "Plik CSV" - -#: views/lists/subscription/import.hbs:6 -msgid "CSV delimiter" -msgstr "Separator CSV" - -#: views/lists/subscription/import.hbs:7 -msgid "Categorize the imported subscribers as" -msgstr "Skategoryzuj importowanych subskrybentów jako" - -#: views/lists/subscription/import.hbs:8 routes/lists.js:171 -msgid "Subscribed" -msgstr "Subskrybuje" - -#: views/lists/subscription/import.hbs:9 -msgid "Regular subscriber addresses" -msgstr "Regularne adresy subskrybentów" - -#: views/lists/subscription/import.hbs:11 -msgid "Suppressed emails that will be unsubscribed from your list" -msgstr "Pomijane e-maile, które zostaną wypisane z listy" - -#: views/lists/view.hbs:3 -msgid "Subscription Form" -msgstr "Formularz subskrypcji" - -#: views/lists/view.hbs:4 -msgid "List Actions" -msgstr "Lista akcji" - -#: views/lists/view.hbs:8 views/triggers/create-select.hbs:3 -#: views/triggers/create-select.hbs:4 views/triggers/create.hbs:3 -#: views/triggers/create.hbs:4 views/triggers/create.hbs:27 -#: views/triggers/triggers.hbs:3 -msgid "Create Trigger" -msgstr "Utwórz wyzwalacz" - -#: views/lists/view.hbs:9 -msgid "Add Subscriber" -msgstr "Dodaj subskrybenta" - -#: views/lists/view.hbs:10 -msgid "Import Subscribers" -msgstr "Importuj subskrybentów" - -#: views/lists/view.hbs:14 -msgid "Create New Segment" -msgstr "Utwórz nowy segment" - -#: views/lists/view.hbs:15 -msgid "Filter" -msgstr "Filtr" - -#: views/lists/view.hbs:16 -msgid "Subscriptions" -msgstr "Subskrypcje" - -#: views/lists/view.hbs:17 -msgid "Imports" -msgstr "Import" - -#: views/lists/view.hbs:24 routes/campaigns.js:266 routes/lists.js:265 -msgid "Finished" -msgstr "Skończone" - -#: views/lists/view.hbs:26 -msgid "Added" -msgstr "Dodany" - -#: views/lists/view.hbs:27 -msgid "Updated" -msgstr "Zaktualizowano" - -#: views/lists/view.hbs:28 -msgid "Failed" -msgstr "Nie powiodło się" - -#: views/lists/view.hbs:30 -msgid "" -"Are you sure? This action should only be called to resolve stalled imports" -msgstr "" -"Jesteś pewny? Ta czynność powinna byś wywołana tylko w celu rozwiązania " -"impasu importu." - -#: views/lists/view.hbs:31 -msgid "Restart" -msgstr "Uruchom ponownie" - -#: views/partials/codeeditor.hbs:1 views/partials/summernote.hbs:1 -msgid "Template content (HTML)" -msgstr "Zawartość szablonu (HTML)" - -#: views/partials/html-preview.hbs:1 -msgid "Toggle HTML preview" -msgstr "Przełącz podgląd HTML" - -#: views/partials/merge-tag-reference.hbs:1 -msgid "Merge tag reference" -msgstr "Odniesienie merge tag" - -#: views/partials/merge-tag-reference.hbs:2 -msgid "" -"Merge tags are tags that are replaced before sending out the message. The " -"format of the merge tag is the following: [TAG_NAME] or " -"[TAG_NAME/fallback] where fallback is an optional " -"text value used when TAG_NAME is empty." -msgstr "" -"Merge tagi są tagami, które są zastępowane przed wysłaniem wiadomości. " -"Format merge tagu jest następujący: [TAG_NAME] lub " -"[TAG_NAME/fallback] gdzie fallback jest opcjonalną " -"wartością tekstową używaną, gdy TAG_NAME jest pusty." - -#: views/partials/plaintext.hbs:1 -msgid "Template content (plaintext)" -msgstr "Treść szablonu (zwykły tekst)" - -#: views/settings.hbs:5 -msgid "Service Address (URL)" -msgstr "Adres usługi (URL)" - -#: views/settings.hbs:6 -msgid "Enter the URL this service can be reached from" -msgstr "Wprowadź adres URL, z którego można uzyskać tę usługę" - -#: views/settings.hbs:7 -msgid "Admin Email" -msgstr "E-mail Administratora" - -#: views/settings.hbs:8 -msgid "" -"Enter the email address that will be used as \"from\" for system messages" -msgstr "" -"Wprowadź adres e-mail, który będzie używany jako \"from \" dla wiadomości " -"systemowych" - -#: views/settings.hbs:9 -msgid "Disable WYSIWYG editor" -msgstr "Wyłącz edytor WYSIWYG" - -#: views/settings.hbs:10 -msgid "If checked then message editor displays HTML code without the preview" -msgstr "Jeśli zaznaczone, edytor wiadomości wyświetla kod HTML bez podglądu" - -#: views/settings.hbs:11 -msgid "Disable subscription confirmation messages" -msgstr "Wyłącz wiadomości potwierdzające subskrypcję" - -#: views/settings.hbs:12 -msgid "" -"If checked then do not send a confirmation message that states the " -"subscriber is now subscribed or unsubscribed. This does not disable double " -"opt-in messages." -msgstr "" -"Jeśli jest zaznaczone, nie wysyłaj wiadomości potwierdzającej, że " -"subskrybent jest teraz subskrybowany lub nie subskrybowany. Nie wyłącza to " -"podwójnych wiadomości opt-in." - -#: views/settings.hbs:13 -msgid "Tracking ID" -msgstr "Identyfikator śledzenia" - -#: views/settings.hbs:14 -msgid "Enter Google Analytics tracking code" -msgstr "Wpisz kod śledzenia Google Analytics" - -#: views/settings.hbs:15 -msgid "Frontpage shout out" -msgstr "" - -#: views/settings.hbs:16 -msgid "HTML code shown in the front page header section" -msgstr "Kod HTML wyświetlany w sekcji nagłówka na pierwszej stronie" - -#: views/settings.hbs:17 -msgid "Campaign defaults" -msgstr "Domyślne ustawienia kampanii" - -#: views/settings.hbs:18 -msgid "Sender name" -msgstr "Nazwa nadawcy" - -#: views/settings.hbs:19 -msgid "Sender name, eg. My Awesome Company Ltd." -msgstr "Nazwa nadawcy, np. My Awesome Company Ltd." - -#: views/settings.hbs:20 -msgid "Default address" -msgstr "Domyślny adres" - -#: views/settings.hbs:21 -msgid "" -"Contact address to provide, eg. 1234 Main Street, Anywhere, MA 01234, USA" -msgstr "" -"Adres kontaktowy do dostarczenia, np. 1234 Main Street, Anywhere, MA 01234, " -"USA" - -#: views/settings.hbs:22 -msgid "Default \"from name\"" -msgstr "Domyślna nazwa \"from\"" - -#: views/settings.hbs:24 -msgid "Default \"from\" email" -msgstr "Domyślny e-mail \"from\"" - -#: views/settings.hbs:26 -msgid "Default \"subject line\"" -msgstr "Domyślny temat \"from\"" - -#: views/settings.hbs:28 -msgid "Default homepage (URL)" -msgstr "Domyślna strona główna (URL)" - -#: views/settings.hbs:29 -msgid "URL to redirect the subscribed users to, eg. http://example.com/" -msgstr "Adres URL do przekierowania subskrybentów do, np. http://example.com/" - -#: views/settings.hbs:30 -msgid "Mailer Settings" -msgstr "Ustawienia Mailera" - -#: views/settings.hbs:31 -msgid "These settings are required to send out e-mail messages" -msgstr "Te ustawienia są wymagane do wysyłania wiadomości e-mail" - -#: views/settings.hbs:32 -msgid "SMTP" -msgstr "SMTP" - -#: views/settings.hbs:33 -msgid "AWS SES" -msgstr "AWS SES" - -#: views/settings.hbs:34 -msgid "Use SMTP for sending mail" -msgstr "Użyj SMTP do wysyłania poczty" - -#: views/settings.hbs:35 -msgid "Hostname" -msgstr "Nazwa hosta" - -#: views/settings.hbs:36 -msgid "Port" -msgstr "Port" - -#: views/settings.hbs:37 -msgid "Port, eg. 465. Autodetected if left blank" -msgstr "Port, np. 465. Autodetekcja, jeśli pozostanie pusta" - -#: views/settings.hbs:38 -msgid "Encryption" -msgstr "Szyfrowanie" - -#: views/settings.hbs:39 -msgid "Disable SMTP authentication" -msgstr "Wyłącz uwierzytelnianie SMTP" - -#: views/settings.hbs:40 views/users/forgot.hbs:9 views/users/login.hbs:4 -#: views/users/login.hbs:5 -msgid "Username" -msgstr "Nazwa użytkownika" - -#: views/settings.hbs:41 -msgid "Username, eg. myaccount@example.com" -msgstr "Nazwa użytkownika, np. myaccount@example.com" - -#: views/settings.hbs:42 views/settings.hbs:43 views/users/login.hbs:6 -#: views/users/login.hbs:7 -msgid "Password" -msgstr "Hasło" - -#: views/settings.hbs:44 -msgid "Use SES API for sending mail" -msgstr "Użyj interfejsu API SES do wysyłania poczty" - -#: views/settings.hbs:45 -msgid "Access Key" -msgstr "Access Key" - -#: views/settings.hbs:46 -msgid "AWS Access Key Id" -msgstr "AWS Access Key Id" - -#: views/settings.hbs:47 -msgid "Secret Key" -msgstr "Secret Key" - -#: views/settings.hbs:48 -msgid "AWS Secret Access Key" -msgstr "AWS Secret Access Key" - -#: views/settings.hbs:49 -msgid "Region" -msgstr "Region" - -#: views/settings.hbs:50 -msgid "Checking" -msgstr "Sprawdzanie" - -#: views/settings.hbs:51 -msgid "Check Mailer config" -msgstr "Sprawdź konfigurację Mailera" - -#: views/settings.hbs:52 -msgid "Don't have an SMTP account yet? Create a free SendPulse account" -msgstr "Nie masz jeszcze konta SMTP? Utwórz darmowe konto SendPulse" - -#: views/settings.hbs:53 -msgid "here" -msgstr "tutaj" - -#: views/settings.hbs:54 -msgid "Advanced Mailer settings" -msgstr "Zaawansowane ustawienia Mailera" - -#: views/settings.hbs:55 -msgid "Log SMTP transactions" -msgstr "Loguj transakcje SMTP" - -#: views/settings.hbs:56 -msgid "Allow self-signed certificates" -msgstr "Zezwalaj na certyfikaty z podpisem własnym" - -#: views/settings.hbs:57 -msgid "Max connections" -msgstr "Maks. połączeń" - -#: views/settings.hbs:58 -msgid "The count of max connections, eg. 10" -msgstr "Liczba maksymalnych połączeń, np. 10" - -#: views/settings.hbs:59 -msgid "" -"The count of maximum simultaneous connections to make against the SMTP " -"server (defaults to 5). This limit is per sending process." -msgstr "" -"Liczba maksymalnych równoczesnych połączeń z serwerem SMTP (domyślnie 5). " -"Ten limit dotyczy procesu wysyłania." - -#: views/settings.hbs:60 -msgid "Max messages" -msgstr "Maks. wiadomości" - -#: views/settings.hbs:61 -msgid "The count of max messages, eg. 100" -msgstr "Liczba maksymalnych wiadomości, np. 100" - -#: views/settings.hbs:62 -msgid "" -"he number of messages to send through a single connection before the " -"connection is closed and reopened (defaults to 100)" -msgstr "" -"Liczba wiadomości do wysłania za pośrednictwem jednego połączenia, zanim " -"połączenie zostanie zamknięty i ponownie otwarty (domyślnie 100)" - -#: views/settings.hbs:63 -msgid "Throttling" -msgstr "Dławienie (Throttling)" - -#: views/settings.hbs:64 -msgid "Messages per hour eg. 1000" -msgstr "Wiadomości na godzinę, np. 1000" - -#: views/settings.hbs:65 -msgid "" -"Maximum number of messages to send in an hour. Leave empty or zero for no " -"throttling. If your provider uses a different speed limit (messages/minute " -"or messages/second) then convert this limit into messages/hour (1m/s => " -"3600m/h). This limit is per sending process." -msgstr "" -"Maksymalna liczba wiadomości do wysłania w ciągu godziny. Pozostaw puste lub " -"zero dla barku dławienia. Jeśli Twój dostawca wykorzystuje inny limit " -"prędkości (wiadomości/minutę lub wiadomości/sekundę), zamień ten limit na " -"wiadomości/godzinę (1m/s => 3600m/h). Ten limit dotyczy procesu wysyłania." - -#: views/settings.hbs:66 -msgid "VERP bounce handling" -msgstr "Obsługa odbijania VERP" - -#: views/settings.hbs:67 -msgid "" -"Mailtrain is able to use VERP based routing to detect bounces. In this case " -"the message is sent to the recipient using a custom VERP address as the " -"return path of the message. If the message is not accepted a bounce email is " -"sent to this special VERP address and thus a bounce is detected." -msgstr "" -"Mailtrain może wykorzystywać routing oparty na VERP do wykrywania odbić. W " -"takim przypadku wiadomość zostanie wysłana do adresata przy użyciu " -"niestandardowego adresu VERP jako ścieżki powrotnej wiadomości. Jeśli " -"wiadomość nie zostanie przyjęta, wiadomość odrzucona wiadomość zostanie " -"wysłana na specjalny adres VERP, a tym samym wykryte zostanie odrzucenie." - -#: views/settings.hbs:68 -msgid "" -"To get VERP working you need to set up a DNS MX record that points to your " -"Mailtrain hostname. You must also ensure that Mailtrain VERP interface is " -"available from port 25 of your server (port 25 usually requires root user " -"privileges). This way if anyone tries to send email to someuser@verp-" -"hostname then the email should end up to this server." -msgstr "" -"Aby uruchomić działanie VERP, musisz skonfigurować rekord MX DNS, który " -"wskazuje twoją nazwę hosta Mailtrain. Musisz także upewnić się, że interfejs " -"Mailtrain VERP jest dostępny z portu 25 serwera (port 25 zwykle wymaga " -"uprawnień użytkownika root). W ten sposób, jeśli ktoś spróbuje wysłać " -"wiadomość e-mail do someuser@verp-hostname, wówczas wiadomość e-mail powinna " -"dotrzeć do tego serwera." - -#: views/settings.hbs:69 -msgid "" -"VERP usually only works if you are using your own SMTP server. Regular relay " -"services (SES, SparkPost, Gmail etc.) tend to remove the VERP address from " -"the message." -msgstr "" -"VERP zwykle działa tylko wtedy, gdy używasz własnego serwera SMTP. Regularne " -"usługi przekazywania (SES, SparkPost, Gmail itp.) Mają tendencję do usuwania " -"adresu VERP z wiadomości." - -#: views/settings.hbs:70 -msgid "Use VERP to catch bounces" -msgstr "Użyj VERP do wykrycia odbicia" - -#: views/settings.hbs:71 -msgid "Server hostname" -msgstr "Nazwa hosta serwera" - -#: views/settings.hbs:72 -msgid "The VERP server hostname, eg. bounces.example.com" -msgstr "Nazwa hosta serwera VERP, np. bounces.example.com" - -#: views/settings.hbs:73 -msgid "" -"VERP bounce handling server hostname. This hostname is used in the SMTP " -"envelope FROM address and the MX DNS records should point to this server" -msgstr "" -"Nazwa hosta serwera obsługi odrzutów VERP. Ta nazwa hosta jest używana w " -"SMTP jako \"od\", a rekordy MX DNS powinny wskazywać na ten serwer" - -#: views/settings.hbs:74 -msgid "" -"VERP bounce handling server is not enabled. Modify your server configuration " -"file and restart server to enable it" -msgstr "" -"Serwer obsługi odrzutów VERP nie jest włączony. Zmodyfikuj plik " -"konfiguracyjny serwera i zrestartuj serwer, aby go włączyć." - -#: views/settings.hbs:75 -msgid "GPG Signing" -msgstr "Podpis GPG" - -#: views/settings.hbs:76 -msgid "" -"Only messages that are encrypted can be signed. Subsribers who have not set " -"up a GPG public key in their profile receive normal email messages. Users " -"with GPG key set receive encrypted messages and if you have signing key also " -"set, the messages are signed with this key." -msgstr "" -"Tylko wiadomości, które są zaszyfrowane, mogą być podpisane. Subskrybenci, " -"którzy nie ustawili klucza publicznego GPG w swoim profilu, otrzymują zwykłe " -"wiadomości e-mail. Użytkownicy z zestawem kluczy GPG otrzymują zaszyfrowane " -"wiadomości i jeśli masz ustawiony również klucz podpisu, wiadomości są " -"podpisywane tym kluczem." - -#: views/settings.hbs:77 -msgid "" -"Do not use sensitive keys here. The private key and passphrase are not " -"encrypted in the database." -msgstr "" -"Nie używaj tutaj wrażliwych kluczy. Klucz prywatny i hasło nie są szyfrowane " -"w bazie danych." - -#: views/settings.hbs:78 -msgid "Private Key Passphrase" -msgstr "Hasło klucza prywatnego" - -#: views/settings.hbs:79 -msgid "Passphrase for the key if set" -msgstr "Hasło dla klucza, jeśli jest ustawione" - -#: views/settings.hbs:80 -msgid "Only fill this if your private key is encrypted with a passphrase" -msgstr "Wypełnij to tylko, jeśli Twój klucz prywatny jest zaszyfrowany hasłem" - -#: views/settings.hbs:81 -msgid "GPG Private Key" -msgstr "Klucz prywatny GPG" - -#: views/settings.hbs:83 -msgid "" -"This value is optional. If you do not provide a private key GPG encrypted " -"messages are sent without signing." -msgstr "" -"Ta wartość jest opcjonalna. Jeśli nie podasz klucza prywatnego GPG, " -"zaszyfrowane wiadomości są wysyłane bez podpisu." - -#: views/settings.hbs:84 -msgid "DKIM Signing by ZoneMTA" -msgstr "Podpisywanie DKIM przez ZoneMTA" - -#: views/settings.hbs:85 -msgid "" -"If you are using ZoneMTA then Mailtrain can provide a DKIM key for signing " -"all outgoing messages. Other services usually provide their own means to " -"DKIM sign your messages" -msgstr "" -"Jeśli używasz ZoneMTA, Mailtrain może dostarczyć klucz DKIM do podpisania " -"wszystkich wychodzących wiadomości. Inne usługi zwykle zapewniają własne " -"środki do podpisywania wiadomości przez DKIM" - -#: views/settings.hbs:86 -msgid "" -"Do not use sensitive keys here. The private key is not encrypted in the " -"database." -msgstr "" -"Nie używaj tutaj wrażliwych kluczy. Klucz prywatny nie jest zaszyfrowany w " -"bazie danych." - -#: views/settings.hbs:87 -msgid "ZoneMTA DKIM API Key" -msgstr "Klucz API ZoneMTA DKIM" - -#: views/settings.hbs:88 -msgid "Some secret value" -msgstr "Tajna wartość" - -#: views/settings.hbs:89 -msgid "" -"Secret value known to ZoneMTA for requesting DKIM key information. If this " -"value was generated by the Mailtrain installation script then you can keep " -"it as it is" -msgstr "" -"Tajna wartość znana ZoneMTA dla żądań klucza DKIM. Jeśli ta wartość została " -"wygenerowana przez skrypt instalacyjny Mailtrain, możesz zachować ją w " -"niezmienionym stanie" - -#: views/settings.hbs:90 -msgid "DKIM domain" -msgstr "Domena DKIM" - -#: views/settings.hbs:91 -msgid "Domain name for the DKIM key" -msgstr "Nazwa domeny dla klucza DKIM" - -#: views/settings.hbs:92 -msgid "Leave blank to use the sender email address domain" -msgstr "Pozostaw puste, aby użyć domeny adresu e-mail nadawcy" - -#: views/settings.hbs:93 views/settings.hbs:94 -msgid "DKIM key selector" -msgstr "Selektor klucza DKIM" - -#: views/settings.hbs:95 -msgid "Signing is disabled without a valid selector value" -msgstr "Podpisywanie jest wyłączone bez prawidłowej wartości selektora" - -#: views/settings.hbs:96 -msgid "DKIM Private Key" -msgstr "Klucz prywatny DKIM" - -#: views/settings.hbs:98 -msgid "" -"This value is optional. If you do not provide a private key then messages " -"are not signed." -msgstr "" -"Ta wartość jest opcjonalna. Jeśli nie dostarczysz klucza prywatnego, " -"wiadomości nie będą podpisane." - -#: views/subscription/confirm-notice.hbs:1 views/subscription/subscribe.hbs:1 -msgid "Warning!" -msgstr "Ostrzeżenie!" - -#: views/subscription/confirm-notice.hbs:2 -msgid "If JavaScript was not enabled then no confirmation message was sent" -msgstr "Jeśli JavaScript nie był włączony, nie wysłano żadnego potwierdzenia" - -#: views/subscription/confirm-notice.hbs:3 -msgid "Almost finished." -msgstr "Prawie gotowe." - -#: views/subscription/confirm-notice.hbs:4 -msgid "" -"We need to confirm your email address. To complete the subscription process, " -"please click the link in the email we just sent you." -msgstr "" -"Musimy potwierdzić swój adres e-mail. Aby zakończyć proces subskrypcji, " -"kliknij link w wiadomości e-mail, którą właśnie wysłaliśmy." - -#: views/subscription/confirm-notice.hbs:5 -#: views/subscription/unsubscribe-notice.hbs:3 -#: views/subscription/updated-notice.hbs:3 -msgid "return to our website" -msgstr "powrót do strony" - -#: views/subscription/manage-address.hbs:1 -msgid "Update your Email Address" -msgstr "Zaktualizuj swój adres e-mail" - -#: views/subscription/manage-address.hbs:2 -msgid "Existing Email Address" -msgstr "Istniejący adres e-mail" - -#: views/subscription/manage-address.hbs:3 -msgid "New Email Address" -msgstr "Nowy adres e-mail" - -#: views/subscription/manage-address.hbs:4 -msgid "Your new email address" -msgstr "Twój nowy adres e-mail" - -#: views/subscription/manage-address.hbs:5 -msgid "" -"You will receive a confirmation request to your new email address that you " -"need to accept before your email is actually changed" -msgstr "" -"Otrzymasz prośbę o potwierdzenie na nowy adres e-mail, który musisz " -"zaakceptować przed faktyczną zmianą adresu e-mail" - -#: views/subscription/manage-address.hbs:6 -msgid "Update Email Address" -msgstr "Zaktualizuj adres e-mail" - -#: views/subscription/manage.hbs:1 -msgid "Update your preferences" -msgstr "Zaktualizuj swoje preferencje" - -#: views/subscription/manage.hbs:3 -msgid "want to change it?" -msgstr "chcesz to zmienić?" - -#: views/subscription/manage.hbs:6 views/subscription/subscribe.hbs:6 -msgid "Download signature verification key" -msgstr "Pobierz klucz weryfikacji podpisu" - -#: views/subscription/manage.hbs:8 views/subscription/subscribe.hbs:8 -msgid "" -"Insert your GPG public key here to encrypt messages sent to your address" -msgstr "" -"Wstaw tutaj swój publiczny klucz GPG, aby zaszyfrować wiadomości wysłane na " -"Twój adres" - -#: views/subscription/manage.hbs:9 views/subscription/subscribe.hbs:9 -msgid "optional" -msgstr "opcjonalny" - -#: views/subscription/manage.hbs:11 -msgid "Update Profile" -msgstr "Zaktualizuj profil" - -#: views/subscription/subscribe.hbs:2 -msgid "JavaScript must be enabled in order for the subscription form to work" -msgstr "" -"Aby formularz subskrypcji działał, musi być włączona obsługa JavaScript" - -#: views/subscription/subscribe.hbs:11 -msgid "Subscribe to list" -msgstr "Zapisz się do listy" - -#: views/subscription/subscribed.hbs:3 -msgid "Thank you for subscribing!" -msgstr "Dziękujemy za subskrypcję!" - -#: views/subscription/subscribed.hbs:4 -msgid "continue to our website" -msgstr "przejdź na naszą stronę internetową" - -#: views/subscription/unsubscribe-notice.hbs:1 -msgid "Unsubscribe Successful" -msgstr "Anulowanie subskrypcji przebiegło pomyślnie" - -#: views/subscription/unsubscribe-notice.hbs:2 -msgid "You have been removed from:" -msgstr "Zostałeś usunięty z:" - -#: views/subscription/unsubscribe.hbs:2 -msgid "Enter your email address to unsubscribe from:" -msgstr "Wpisz swój adres e-mail, aby zrezygnować z subskrypcji:" - -#: views/subscription/updated-notice.hbs:1 -msgid "Profile Updated" -msgstr "Profil zaktualizowany" - -#: views/subscription/updated-notice.hbs:2 -msgid "Your profile information has been updated." -msgstr "Twoje informacje profilowe zostały zaktualizowane." - -#: views/templates/create.hbs:2 views/templates/edit.hbs:2 -#: views/templates/templates.hbs:2 views/templates/templates.hbs:4 -#: lib/tools.js:115 -msgid "Templates" -msgstr "Szablony" - -#: views/templates/create.hbs:3 views/templates/create.hbs:4 -#: views/templates/create.hbs:12 views/templates/templates.hbs:3 -msgid "Create Template" -msgstr "Utwórz szablon" - -#: views/templates/create.hbs:5 views/templates/edit.hbs:6 -msgid "Template name" -msgstr "Nazwa szablonu" - -#: views/templates/create.hbs:6 views/templates/edit.hbs:7 -msgid "Name for this template, eg. Newsletter" -msgstr "Nazwa tego szablonu, np. Newsletter" - -#: views/templates/create.hbs:7 -msgid "HTML Editor" -msgstr "Edytor HTML" - -#: views/templates/create.hbs:10 views/templates/edit.hbs:9 -msgid "Optional comments about this template" -msgstr "Opcjonalne komentarze na temat tego szablonu" - -#: views/templates/edit.hbs:3 views/templates/edit.hbs:4 -msgid "Edit Template" -msgstr "Edytuj szablon" - -#: views/templates/edit.hbs:5 -msgid "Back to templates" -msgstr "Powrót do szablonów" - -#: views/templates/edit.hbs:11 -msgid "Delete Template" -msgstr "Usuń Szablon" - -#: views/triggers/create-select.hbs:2 views/triggers/create.hbs:2 -#: views/triggers/edit.hbs:2 views/triggers/triggered.hbs:2 -#: views/triggers/triggers.hbs:2 views/triggers/triggers.hbs:4 -msgid "Automation Triggers" -msgstr "Automatyczne wyzwalacze" - -#: views/triggers/create-select.hbs:5 -msgid "Select a list for the trigger" -msgstr "Wybierz listę dla wyzwalacza" - -#: views/triggers/create.hbs:5 views/triggers/edit.hbs:6 -msgid "Trigger name" -msgstr "Nazwa wyzwalacza" - -#: views/triggers/create.hbs:6 views/triggers/edit.hbs:7 -msgid "Name for this trigger, eg. Inactive subscribers" -msgstr "Nazwa tego wyzwalacza, np. Nieaktywni subskrybenci" - -#: views/triggers/create.hbs:8 views/triggers/edit.hbs:9 -msgid "Optional comments about this trigger" -msgstr "Opcjonalne komentarze na temat tego wyzwalacza" - -#: views/triggers/create.hbs:12 views/triggers/edit.hbs:14 -msgid "Trigger rule" -msgstr "Reguła wyzwalacza" - -#: views/triggers/create.hbs:13 views/triggers/edit.hbs:15 -msgid "Trigger fires" -msgstr "Aktywacja wyzwalacza" - -#: views/triggers/create.hbs:14 views/triggers/edit.hbs:16 -msgid "days after:" -msgstr "dni po:" - -#: views/triggers/create.hbs:15 views/triggers/edit.hbs:17 -msgid "Subscription" -msgstr "Subskrypcja" - -#: views/triggers/create.hbs:16 views/triggers/create.hbs:21 -#: views/triggers/edit.hbs:18 views/triggers/edit.hbs:23 -msgid "Event" -msgstr "Zdarzenie" - -#: views/triggers/create.hbs:18 views/triggers/create.hbs:19 -#: views/triggers/create.hbs:25 views/triggers/edit.hbs:20 -#: views/triggers/edit.hbs:21 views/triggers/edit.hbs:27 -msgid "Campaign" -msgstr "Kampania" - -#: views/triggers/create.hbs:23 views/triggers/edit.hbs:25 -msgid "Trigger action" -msgstr "Czynność wyzwalacza" - -#: views/triggers/create.hbs:24 views/triggers/edit.hbs:26 -msgid "Send campaign" -msgstr "Wyślij kampanię" - -#: views/triggers/edit.hbs:3 views/triggers/edit.hbs:4 -msgid "Edit Trigger" -msgstr "Edycja wyzwalacza" - -#: views/triggers/edit.hbs:5 -msgid "Back to triggers" -msgstr "Powrót do wyzwalaczy" - -#: views/triggers/edit.hbs:11 -msgid "Trigger is enabled" -msgstr "Wyzwalacz jest włączony" - -#: views/triggers/edit.hbs:29 -msgid "Delete Trigger" -msgstr "Usuń wyzwalacz" - -#: views/triggers/triggered.hbs:3 -msgid "Triggered" -msgstr "Wywołany" - -#: views/triggers/triggered.hbs:4 -msgid "Triggered subscribers" -msgstr "Wywołani subskrybenci" - -#: views/triggers/triggered.hbs:5 -msgid "Subscribers who caused this trigger to fire" -msgstr "Subskrybenci, którzy spowodowali uruchomienie tego wyzwalacza" - -#: views/triggers/triggered.hbs:9 -msgid "Triggered time" -msgstr "Czas wywołanych" - -#: views/triggers/triggers.hbs:9 -msgid "Trigger" -msgstr "Wyzwalacz" - -#: views/triggers/triggers.hbs:10 -msgid "Target Campaign" -msgstr "Cel kampanii" - -#: views/triggers/triggers.hbs:11 -msgid "Triggered count" -msgstr "Liczba wyzwoleń" - -#: views/triggers/triggers.hbs:12 -msgid "Enabled" -msgstr "Włączone" - -#: views/triggers/triggers.hbs:13 -msgid "Disabled" -msgstr "Wyłączone" - -#: views/users/account.hbs:4 -msgid "This account is managed through LDAP." -msgstr "To konto jest zarządzane przez LDAP." - -#: views/users/account.hbs:5 -msgid "Associated Email Address" -msgstr "Powiązany adres e-mail" - -#: views/users/account.hbs:8 -msgid "Your e-mail address" -msgstr "Twój adres e-mail" - -#: views/users/account.hbs:9 -msgid "" -"This address is used for account recovery in case you lose your password" -msgstr "Ten adres służy do odzyskiwania konta na wypadek utraty hasła" - -#: views/users/account.hbs:10 -msgid "Password change" -msgstr "Zmiana hasła" - -#: views/users/account.hbs:11 -msgid "" -"You only need to fill out this form if you want to change your current " -"password" -msgstr "Wypełnij ten formularz, jeśli chcesz zmienić swoje obecne hasło" - -#: views/users/account.hbs:12 views/users/account.hbs:13 -msgid "Current Password" -msgstr "Aktualne hasło" - -#: views/users/account.hbs:14 views/users/account.hbs:15 -#: views/users/reset.hbs:6 views/users/reset.hbs:7 -msgid "New Password" -msgstr "Nowe hasło" - -#: views/users/account.hbs:16 -msgid "Confirm Password" -msgstr "Powtórz hasło" - -#: views/users/account.hbs:17 views/users/reset.hbs:8 -msgid "Confirm New Password" -msgstr "Potwierdź nowe hasło" - -#: views/users/api.hbs:4 -msgid "Are you sure? Resetting would invalidate the currently existing token." -msgstr "Jesteś pewny? Zresetowanie unieważni istniejący token." - -#: views/users/api.hbs:5 -msgid "Are you sure?" -msgstr "Jesteś pewny?" - -#: views/users/api.hbs:6 -msgid "Reset Access Token" -msgstr "Zresetuj Access Token" - -#: views/users/api.hbs:7 -msgid "Generate Access Token" -msgstr "Wygeneruj Access Token" - -#: views/users/api.hbs:8 -msgid "Personal access token:" -msgstr "Osobisty Access Token:" - -#: views/users/api.hbs:9 -msgid "Access token not yet generated" -msgstr "Access token nie został jeszcze wygenerowany" - -#: views/users/api.hbs:10 -msgid "Notes about the API" -msgstr "Uwagi na temat interfejsu API" - -#: views/users/api.hbs:11 -msgid "" -"API response is a JSON structure with error and data properties. If the response error has a value set then " -"the request failed." -msgstr "" -"Odpowiedź API to struktura JSON z właściwościami error i " -"data. Jeśli odpowiedź error ma ustawioną " -"wartość, to żądanie nie powiodło się." - -#: views/users/api.hbs:12 -msgid "" -"You need to define proper Content-Type when making a request. " -"You can either use application/x-www-form-urlencoded for normal " -"form data or application/json for a JSON payload. Using " -"multipart/form-data is not supported." -msgstr "" -"Musisz zdefiniować właściwy Content-Type podczas wysyłania " -"zapytania. Możesz użyć application/x-www-form-urlencoded dla " -"normalnych danych formularza lub application/json dla JSON " -"payload. Używanie multipart/form-data nie jest obsługiwane." - -#: views/users/api.hbs:13 -msgid "Add subscription" -msgstr "Dodaj subskrypcję" - -#: views/users/api.hbs:14 -msgid "" -"This API call either inserts a new subscription or updates existing. Fields " -"not included are left as is, so if you update only LAST_NAME value, then " -"FIRST_NAME is kept untouched for an existing subscription." -msgstr "" -"To wywołanie API wprowadza nową subskrypcję lub aktualizacje istniejące. " -"Pola nieuwzględnione pozostają bez zmian, więc jeśli zaktualizujesz tylko " -"wartość LAST_NAME, to FIRST_NAME pozostanie nietknięte dla istniejącej " -"subskrypcji." - -#: views/users/api.hbs:15 views/users/api.hbs:17 views/users/api.hbs:30 -#: views/users/api.hbs:32 views/users/api.hbs:38 views/users/api.hbs:40 -#: views/users/api.hbs:46 views/users/api.hbs:48 -msgid "arguments" -msgstr "argumenty" - -#: views/users/api.hbs:16 views/users/api.hbs:31 views/users/api.hbs:39 -#: views/users/api.hbs:47 -msgid "your personal access token" -msgstr "twój osobisty token dostępu" - -#: views/users/api.hbs:18 views/users/api.hbs:33 views/users/api.hbs:41 -msgid "subscriber's email address" -msgstr "subscriber's email addressadres e-mail subskrybenta" - -#: views/users/api.hbs:19 views/users/api.hbs:34 views/users/api.hbs:42 -#: views/users/api.hbs:50 -msgid "required" -msgstr "wymagany" - -#: views/users/api.hbs:20 -msgid "subscriber's first name" -msgstr "imię subskrybenta" - -#: views/users/api.hbs:21 -msgid "subscriber's last name" -msgstr "nazwisko subskrybenta" - -#: views/users/api.hbs:22 -msgid "" -"subscriber's timezone (eg. \"Europe/Tallinn\", \"PST\" or \"UTC\"). If not " -"set defaults to \"UTC\"" -msgstr "" -"strefa czasowa subskrybenta (np. \"Europa/Tallinn\", \"PST\" lub \"UTC\"). " -"Jeśli nie jest ustawiony domyślnie „UTC”" - -#: views/users/api.hbs:23 -msgid "" -"custom field value. Use yes/no for option group values (checkboxes, radios, " -"drop downs)" -msgstr "" -"niestandardowa wartość pola. Użyj wartości tak/nie dla wartości grup opcji " -"(checkbox, radio, lista rozwijana)" - -#: views/users/api.hbs:24 -msgid "Additional POST arguments" -msgstr "Dodatkowe argumenty POST" - -#: views/users/api.hbs:25 -msgid "" -"set to \"yes\" if you want to make sure the email is marked as subscribed " -"even if it was previously marked as unsubscribed. If the email was already " -"unsubscribed/blocked then subscription status is not changed" -msgstr "" -"ustawić na \"tak \", jeśli chcesz się upewnić, że wiadomość e-mail została " -"oznaczona jako zasubskrybowana, nawet jeśli została wcześniej oznaczona jako " -"niesubskrybowana. Jeśli e-mail został już wypisany/zablokowane, status " -"subskrypcji nie zostanie zmieniony" - -#: views/users/api.hbs:26 -msgid "" -"set to \"yes\" if you want to send confirmation email to the subscriber " -"before actually marking as subscribed" -msgstr "" -"ustaw na \"tak\", jeśli chcesz wysłać wiadomość e-mail z potwierdzeniem do " -"subskrybenta, zanim faktycznie zostaniesz oznaczony jako zasubskrybowany" - -#: views/users/api.hbs:28 -msgid "Remove subscription" -msgstr "Usuń subskrypcję" - -#: views/users/api.hbs:29 -msgid "This API call marks a subscription as unsubscribed" -msgstr "To wywołanie API oznacza subskrypcję jako niesubskrybowaną" - -#: views/users/api.hbs:36 -msgid "Delete subscription" -msgstr "Usuń subskrypcję" - -#: views/users/api.hbs:37 -msgid "This API call deletes a subscription" -msgstr "To wywołanie API usuwa subskrypcję" - -#: views/users/api.hbs:44 -msgid "Add new custom field" -msgstr "Dodaj nowe niestandardowe pole" - -#: views/users/api.hbs:45 -msgid "This API call creates a new custom field for a list." -msgstr "To wywołanie API tworzy nowe niestandardowe pole dla listy." - -#: views/users/api.hbs:49 -msgid "field name" -msgstr "nazwa pola" - -#: views/users/api.hbs:51 -msgid "one of the following types:" -msgstr "jeden z następujących typów:" - -#: views/users/api.hbs:52 -msgid "" -"If the type is 'option' then you also need to specify the parent element ID" -msgstr "Jeśli typ to \"option\", musisz również podać ID elementu nadrzędnego" - -#: views/users/api.hbs:53 -msgid "" -"Template for the group element. If not set, then values of the elements are " -"joined with commas" -msgstr "" -"Szablon dla elementu grupy. Jeśli nie jest ustawione, wartości elementów są " -"połączone przecinkami" - -#: views/users/api.hbs:54 -msgid "" -"if not visible then the subscriber can not view or modify this value at the " -"profile page" -msgstr "" -"jeśli niewidoczny, subskrybent nie może wyświetlić ani zmodyfikować tej " -"wartości na stronie profilu" - -#: views/users/forgot.hbs:3 views/users/reset.hbs:3 -msgid "Password Reset" -msgstr "Resetowanie hasła" - -#: views/users/forgot.hbs:4 -msgid "Reset your password?" -msgstr "Nie pamiętasz hasła?" - -#: views/users/forgot.hbs:5 -msgid "Accounts are managed through LDAP." -msgstr "Konta są zarządzane przez LDAP." - -#: views/users/forgot.hbs:6 views/users/reset.hbs:10 -msgid "Reset Password" -msgstr "Resetuj hasło" - -#: views/users/forgot.hbs:7 -msgid "" -"Please provide the username or email address that you used when you signed " -"up for your Mailtrain account." -msgstr "" -"Podaj nazwę użytkownika lub adres e-mail użyty podczas rejestracji konta " -"Mailtrain." - -#: views/users/forgot.hbs:8 -msgid "We will send you an email that will allow you to reset your password." -msgstr "Wyślemy Ci wiadomość e-mail, która pozwoli Ci zresetować hasło." - -#: views/users/forgot.hbs:10 -msgid "Username or email address" -msgstr "Nazwa użytkownika lub adres e-mail" - -#: views/users/forgot.hbs:11 -msgid "Send verification email" -msgstr "Wyślij email weryfikacyjny" - -#: views/users/login.hbs:8 -msgid "Remember me" -msgstr "Zapamiętaj mnie" - -#: views/users/login.hbs:11 views/users/login.hbs:12 -msgid "Forgot password?" -msgstr "Zapomniałeś hasła?" - -#: views/users/reset.hbs:4 -msgid "Choose your new password" -msgstr "Wybierz nowe hasło" - -#: views/users/reset.hbs:5 -msgid "Please enter a new password." -msgstr "Wprowadź nowe hasło." - -#: lib/feed.js:31 -msgid "Bad status code %s" -msgstr "Nieprawidłowy kod statusu %s" - -#: lib/helpers.js:17 -msgid "URL that points to the unsubscribe page" -msgstr "Adres URL wskazujący stronę rezygnacji z subskrypcji" - -#: lib/helpers.js:20 -msgid "URL that points to the preferences page of the subscriber" -msgstr "Adres URL wskazujący stronę preferencji subskrybenta" - -#: lib/helpers.js:23 -msgid "URL to preview the message in a browser" -msgstr "URL, aby wyświetlić podgląd wiadomości w przeglądarce" - -#: lib/helpers.js:29 lib/models/segments.js:31 -msgid "First name" -msgstr "Imię" - -#: lib/helpers.js:32 lib/models/segments.js:35 -msgid "Last name" -msgstr "Nazwisko" - -#: lib/helpers.js:35 -msgid "Full name (first and last name combined)" -msgstr "Imię i nazwisko" - -#: lib/helpers.js:38 -msgid "Unique ID that identifies the recipient" -msgstr "Unikalny identyfikator identyfikujący odbiorcę" - -#: lib/helpers.js:41 -msgid "Unique ID that identifies the list used for this campaign" -msgstr "Unikalny identyfikator identyfikujący listę użytą w tej kampanii" - -#: lib/helpers.js:44 -msgid "Unique ID that identifies current campaign" -msgstr "Unikalny identyfikator identyfikujący bieżącą kampanię" - -#: lib/mailer.js:215 -msgid "Invalid mail transport" -msgstr "Nieprawidłowy transport poczty" - -#: lib/models/campaigns.js:271 lib/models/campaigns.js:298 -#: lib/models/campaigns.js:371 lib/models/campaigns.js:494 -#: lib/models/campaigns.js:752 lib/models/campaigns.js:881 -msgid "Missing Campaign ID" -msgstr "Brakujący identyfikator kampanii" - -#: lib/models/campaigns.js:407 -msgid "Emtpy or too large attahcment" -msgstr "Pusty lub zbyt duży załącznik" - -#: lib/models/campaigns.js:573 lib/models/campaigns.js:761 -msgid "Campaign Name must be set" -msgstr "Nazwa kampanii musi być ustawiona" - -#: lib/models/campaigns.js:577 -msgid "RSS URL must be set and needs to be a valid URL" -msgstr "" -"Adres URL kanału RSS musi być ustawiony i musi być prawidłowym adresem URL" - -#: lib/models/campaigns.js:730 -msgid "Selected template not found" -msgstr "Nie znaleziono wybranego szablonu" - -#: lib/models/campaigns.js:1082 -msgid "Invalid or missing message ID" -msgstr "Nieprawidłowy lub brakujący ID wiadomości" - -#: lib/models/fields.js:24 -msgid "Drop Down" -msgstr "Lista rozwijana" - -#: lib/models/fields.js:25 -msgid "Date (MM/DD/YYY)" -msgstr "Data (MM/DD/YYYY)" - -#: lib/models/fields.js:29 -msgid "JSON value for custom rendering" -msgstr "Wartość JSON dla renderowania niestandardowego" - -#: lib/models/fields.js:30 -msgid "Option" -msgstr "Opcja" - -#: lib/models/fields.js:53 lib/models/fields.js:98 lib/models/fields.js:123 -#: lib/models/lists.js:81 lib/models/lists.js:175 lib/models/lists.js:212 -#: lib/models/segments.js:43 lib/models/segments.js:176 -#: lib/models/subscriptions.js:88 lib/models/subscriptions.js:640 -#: lib/models/subscriptions.js:703 lib/models/subscriptions.js:889 -#: lib/models/subscriptions.js:992 lib/models/subscriptions.js:1046 -#: lib/models/subscriptions.js:1109 lib/models/subscriptions.js:1152 -msgid "Missing List ID" -msgstr "Brakujący ID listy" - -#: lib/models/fields.js:129 -msgid "Option field requires a group to be selected" -msgstr "Pole opcji wymaga wyboru grupy" - -#: lib/models/fields.js:149 lib/models/fields.js:199 -msgid "Missing Field ID" -msgstr "Brakujący ID pola" - -#: lib/models/fields.js:153 lib/models/segments.js:185 -#: lib/models/segments.js:225 -msgid "Field Name must be set" -msgstr "Nazwa pola musi być ustawiona" - -#: lib/models/fields.js:216 -msgid "Custom field not found" -msgstr "Nie znaleziono pola niestandardowego" - -#: lib/models/fields.js:289 -msgid "Unknown column type %s" -msgstr "Nieznany typ kolumny %s" - -#: lib/models/fields.js:293 -msgid "Missing column name" -msgstr "Brakująca nazwa kolumny" - -#: lib/models/fields.js:297 -msgid "Missing list ID" -msgstr "Brakujący ID listy" - -#: lib/models/fields.js:305 -msgid "Provided List ID not found" -msgstr "Nie znaleziono ID listy dostarczonych" - -#: lib/models/links.js:328 routes/campaigns.js:541 routes/campaigns.js:590 -#: services/sender.js:304 -msgid "Campaign not found" -msgstr "Nie znaleziono kampanii" - -#: lib/models/links.js:336 routes/lists.js:146 services/sender.js:311 -msgid "List not found" -msgstr "Nie znaleziono listy" - -#: lib/models/links.js:344 -msgid "Subscription not found" -msgstr "Nie znaleziono subskrypcji" - -#: lib/models/lists.js:117 lib/models/lists.js:179 -msgid "List Name must be set" -msgstr "Nazwa listy musi być ustawiona" - -#: lib/models/lists.js:241 -msgid "Missing List CID" -msgstr "Brakujący CID listy" - -#: lib/models/segments.js:15 -msgid "Signup country" -msgstr "Kraj rejestracji" - -#: lib/models/segments.js:19 lib/models/triggers.js:11 -msgid "Sign up date" -msgstr "Data rejestracji" - -#: lib/models/segments.js:23 lib/models/triggers.js:15 -msgid "Latest open" -msgstr "Ostatnie otwarcie" - -#: lib/models/segments.js:27 lib/models/triggers.js:19 -msgid "Latest click" -msgstr "Ostatnie kliknięcie" - -#: lib/models/segments.js:69 lib/models/segments.js:216 -#: lib/models/segments.js:256 lib/models/segments.js:278 -msgid "Missing Segment ID" -msgstr "Brakujący ID segmentu" - -#: lib/models/segments.js:85 lib/models/segments.js:549 -#: lib/models/segments.js:658 -msgid "Segment not found" -msgstr "Nie znaleziono segmentu" - -#: lib/models/segments.js:146 lib/models/segments.js:147 -#: lib/models/segments.js:408 lib/models/segments.js:409 -msgid "%s days after today" -msgstr "%s dni po dzisiejszym dniu" - -#: lib/models/segments.js:146 lib/models/segments.js:147 -#: lib/models/segments.js:408 lib/models/segments.js:409 -msgid "%s days before today" -msgstr "%s dni przed dzisiejszym dniem" - -#: lib/models/segments.js:148 lib/models/segments.js:410 -msgid "today" -msgstr "dziś" - -#: lib/models/segments.js:189 lib/models/segments.js:229 -msgid "Invalid segment rule type" -msgstr "Nieprawidłowy typ reguły segmentu" - -#: lib/models/segments.js:289 lib/models/segments.js:454 -#: routes/segments.js:266 routes/segments.js:300 routes/segments.js:370 -#: routes/segments.js:381 -msgid "Selected segment not found" -msgstr "Nie znaleziono wybranego segmentu" - -#: lib/models/segments.js:294 lib/models/segments.js:459 -#: routes/segments.js:272 routes/segments.js:306 routes/segments.js:387 -msgid "Invalid rule type" -msgstr "Nieprawidłowy typ reguły" - -#: lib/models/segments.js:358 lib/models/segments.js:434 -#: lib/models/segments.js:524 -msgid "Missing Rule ID" -msgstr "Brakujący ID reguły" - -#: lib/models/segments.js:374 -msgid "Specified rule not found" -msgstr "Nie znaleziono określonej reguły" - -#: lib/models/segments.js:385 -msgid "Specified segment not found" -msgstr "Nie znaleziono określonego segmentu" - -#: lib/models/segments.js:445 -msgid "Selected rule not found" -msgstr "Nie znaleziono wybranej reguły" - -#: lib/models/subscriptions.js:233 -msgid "%s: Please Confirm Subscription" -msgstr "%s: Potwierdź subskrypcję" - -#: lib/models/subscriptions.js:324 -msgid "Could not save subscription" -msgstr "Nie można zapisać subskrypcji" - -#: lib/models/subscriptions.js:507 lib/models/subscriptions.js:537 -msgid "Missing Subscription ID" -msgstr "Brakujący ID subskrypcji" - -#: lib/models/subscriptions.js:565 -msgid "Missing Subscription email address" -msgstr "Brak adresu e-mail subskrypcji" - -#: lib/models/subscriptions.js:644 lib/models/subscriptions.js:893 -#: lib/models/subscriptions.js:1156 -msgid "Missing subscription ID" -msgstr "Brakujący ID subskrypcji" - -#: lib/models/subscriptions.js:707 -msgid "Missing email address" -msgstr "Brakujący adres e-mail" - -#: lib/models/subscriptions.js:996 lib/models/subscriptions.js:1050 -#: lib/models/subscriptions.js:1086 -msgid "Missing Import ID" -msgstr "Brakujący ID importu" - -#: lib/models/subscriptions.js:1178 -msgid "Unknown subscription ID" -msgstr "Nieznany ID subskrypcji" - -#: lib/models/subscriptions.js:1183 -msgid "Nothing seems to be changed" -msgstr "Wydaje się, że nic nie zostało zmienione" - -#: lib/models/subscriptions.js:1197 -msgid "This address is already registered by someone else" -msgstr "Ten adres jest już zarejestrowany przez inną osobę" - -#: lib/models/templates.js:51 lib/models/templates.js:122 -#: lib/models/templates.js:163 -msgid "Missing Template ID" -msgstr "Brakujący ID szablonu" - -#: lib/models/templates.js:80 lib/models/templates.js:126 -msgid "Template Name must be set" -msgstr "Nazwa szablonu musi być ustawiona" - -#: lib/models/triggers.js:28 -msgid "Has Opened" -msgstr "Otwarte" - -#: lib/models/triggers.js:31 -msgid "Has Clicked" -msgstr "Kliknięte" - -#: lib/models/triggers.js:34 -msgid "Not Opened" -msgstr "Nie otwarte" - -#: lib/models/triggers.js:37 -msgid "Not Clicked" -msgstr "Nie kliknięte" - -#: lib/models/triggers.js:174 lib/models/triggers.js:211 -msgid "Missing or invalid list ID" -msgstr "Brakujący lub nieprawidłowy ID listy" - -#: lib/models/triggers.js:178 lib/models/triggers.js:263 -msgid "Days in the past are not allowed" -msgstr "Dni w przeszłości są niedozwolone" - -#: lib/models/triggers.js:182 lib/models/triggers.js:203 -#: lib/models/triggers.js:267 lib/models/triggers.js:288 -msgid "Missing or invalid trigger rule" -msgstr "Brakująca lub nieprawidłowa reguła wyzwalacza" - -#: lib/models/triggers.js:189 lib/models/triggers.js:274 -msgid "Invalid subscription configuration" -msgstr "ieprawidłowa konfiguracja subskrypcji" - -#: lib/models/triggers.js:196 lib/models/triggers.js:281 -msgid "Invalid campaign configuration" -msgstr "Nieprawidłowa konfiguracja kampanii" - -#: lib/models/triggers.js:199 lib/models/triggers.js:284 -msgid "A campaing can not be a target for itself" -msgstr "Kampania nie może być celem samym w sobie" - -#: lib/models/triggers.js:232 -msgid "Could not store trigger row" -msgstr "Nie można zapisać wiersza wyzwalacza" - -#: lib/models/triggers.js:249 -msgid "Missing or invalid Trigger ID" -msgstr "Brakujący lub nieprawidłowy ID wyzwalacza" - -#: lib/models/triggers.js:316 -msgid "Missing Trigger ID" -msgstr "Brakujący ID wyzwalacza" - -#: lib/models/users.js:103 -msgid "Could not store user row" -msgstr "Nie można zapisać wiersza użytkownika" - -#: lib/models/users.js:173 -msgid "Email Address must be set" -msgstr "Adres e-mail musi być ustawiony" - -#: lib/models/users.js:184 -msgid "Failed to check user data" -msgstr "Nie można sprawdzić danych użytkownika" - -#: lib/models/users.js:195 -msgid "" -"Can't change email as another user with the same email address already exists" -msgstr "" -"Nie można zmienić adresu e-mail, ponieważ inny użytkownik o tym samym " -"adresie e-mail już istnieje" - -#: lib/models/users.js:212 -msgid "Incorrect current password" -msgstr "Nieprawidłowe aktualne hasło" - -#: lib/models/users.js:216 -msgid "New password not set" -msgstr "Nowe hasło nie zostało ustawione" - -#: lib/models/users.js:220 -msgid "Passwords do not match" -msgstr "Hasła nie pasują do siebie" - -#: lib/models/users.js:258 -msgid "User ID not set" -msgstr "Nie ustawiono ID użytkownika" - -#: lib/models/users.js:286 -msgid "Username must be set" -msgstr "Nazwa użytkownika musi być ustawiona" - -#: lib/models/users.js:323 -msgid "Mailer password change request" -msgstr "Żądanie zmiany hasła Mailera" - -#: lib/models/users.js:347 lib/models/users.js:367 -msgid "Missing username or reset token" -msgstr "Brakująca nazwa użytkownika lub token reset" - -#: lib/models/users.js:371 -msgid "Invalid new password" -msgstr "Nieprawidłowe nowe hasło" - -#: lib/passport.js:38 -msgid "%s logged out" -msgstr "%s Wylogowany" - -#: lib/passport.js:51 -msgid "Failed to authenticate user" -msgstr "Nie udało się uwierzytelnić użytkownika" - -#: lib/passport.js:67 -msgid "Logged in as %s" -msgstr "Zalogowano jako %s" - -#: lib/passport.js:125 -msgid "Incorrect username or password" -msgstr "Nieprawidłowa nazwa użytkownika lub hasło" - -#: lib/tools.js:123 -msgid "Automation" -msgstr "Automatyzacja" - -#: lib/tools.js:133 -msgid "Blocked email address \"%s\"" -msgstr "Zablokowany adres e-mail \"%s\"" - -#: lib/tools.js:142 -msgid "Invalid email address \"%s\"." -msgstr "Nieprawidłowy adres e-mail \"%s\"." - -#: lib/tools.js:145 -msgid "MX record not found for domain" -msgstr "Nie znaleziono rekordu MX dla domeny" - -#: lib/tools.js:148 -msgid "Address domain not found" -msgstr "Nie znaleziono domeny" - -#: lib/tools.js:151 -msgid "Address domain name is required" -msgstr "Nazwa domeny adresu jest wymagana" - -#: routes/archive.js:31 routes/archive.js:43 routes/archive.js:55 app.js:211 -msgid "Not Found" -msgstr "Nie znaleziono" - -#: routes/archive.js:110 services/sender.js:447 -msgid "Received status code %s from %s" -msgstr "Otrzymano kod statusu %s z %s" - -#: routes/archive.js:134 routes/campaigns.js:131 routes/campaigns.js:295 -#: routes/campaigns.js:390 routes/campaigns.js:435 routes/campaigns.js:475 -#: routes/campaigns.js:739 routes/campaigns.js:762 routes/campaigns.js:781 -#: routes/campaigns.js:803 routes/triggers.js:146 -msgid "Could not find campaign with specified ID" -msgstr "Nie można znaleźć kampanii z określonym ID" - -#: routes/archive.js:142 routes/campaigns.js:789 -msgid "Attachment not found" -msgstr "Załącznik nie znaleziony" - -#: routes/campaigns.js:26 routes/fields.js:13 routes/lists.js:49 -#: routes/segments.js:13 routes/settings.js:23 routes/templates.js:17 -#: routes/triggers.js:18 routes/users.js:75 routes/users.js:120 -msgid "Need to be logged in to access restricted content" -msgstr "Musisz być zalogowany, aby uzyskać dostęp do zastrzeżonych treści" - -#: routes/campaigns.js:117 -msgid "Could not create campaign" -msgstr "Nie można utworzyć kampanii" - -#: routes/campaigns.js:120 -msgid "Campaign “%s” created" -msgstr "Kampania “%s” utworzona" - -#: routes/campaigns.js:204 -msgid "content from an RSS entry" -msgstr "treść z wpisu RSS" - -#: routes/campaigns.js:220 -msgid "Campaign settings updated" -msgstr "Zaktualizowano ustawienia kampanii" - -#: routes/campaigns.js:222 -msgid "Campaign settings not updated" -msgstr "Ustawienia kampanii nie zostały zaktualizowane" - -#: routes/campaigns.js:238 routes/campaigns.js:639 -msgid "Campaign deleted" -msgstr "Kampania usunięta" - -#: routes/campaigns.js:240 routes/campaigns.js:641 -msgid "Could not delete specified campaign" -msgstr "Nie można usunąć określonej kampanii" - -#: routes/campaigns.js:259 -msgid "Idling" -msgstr "Bezczynność" - -#: routes/campaigns.js:262 -msgid "Scheduled" -msgstr "Planowane" - -#: routes/campaigns.js:268 -msgid "Paused" -msgstr "Wstrzymane" - -#: routes/campaigns.js:270 -msgid "Inactive" -msgstr "Nieaktywny" - -#: routes/campaigns.js:272 -msgid "Active" -msgstr "Aktywny" - -#: routes/campaigns.js:274 -msgid "Other" -msgstr "Inny" - -#: routes/campaigns.js:429 -msgid "Unknown status selector" -msgstr "Nieznany status selektora" - -#: routes/campaigns.js:657 -msgid "Scheduled sending" -msgstr "Wysyłanie zaplanowanych" - -#: routes/campaigns.js:659 -msgid "Could not schedule sending" -msgstr "Nie można zaplanować wysyłania" - -#: routes/campaigns.js:671 -msgid "Sending resumed" -msgstr "Wysyłanie zostało wznowione" - -#: routes/campaigns.js:673 -msgid "Could not resume sending" -msgstr "Nie można wznowić wysyłania" - -#: routes/campaigns.js:685 -msgid "Sending reset" -msgstr "Wysyłam reset" - -#: routes/campaigns.js:687 -msgid "Could not reset sending" -msgstr "Nie można zresetować wysyłania" - -#: routes/campaigns.js:699 routes/campaigns.js:727 -msgid "Sending paused" -msgstr "Wysyłanie wstrzymane" - -#: routes/campaigns.js:701 routes/campaigns.js:729 -msgid "Could not pause sending" -msgstr "Nie można wstrzymać wysyłania" - -#: routes/campaigns.js:713 -msgid "Sending activated" -msgstr "Wysyłanie aktywowane" - -#: routes/campaigns.js:715 -msgid "Could not activate sending" -msgstr "Nie można aktywować wysyłania" - -#: routes/campaigns.js:750 -msgid "Attachment uploaded" -msgstr "Przesłano załącznik" - -#: routes/campaigns.js:752 -msgid "Could not store attachment" -msgstr "Nie można zapisać załącznika" - -#: routes/campaigns.js:769 -msgid "Attachment deleted" -msgstr "Załącznik usunięty" - -#: routes/campaigns.js:771 -msgid "Could not delete attachment" -msgstr "Nie można usunąć załącznika" - -#: routes/fields.js:28 routes/fields.js:64 routes/fields.js:118 -#: routes/segments.js:28 routes/segments.js:59 routes/segments.js:102 -#: routes/segments.js:151 routes/segments.js:223 routes/segments.js:255 -#: routes/segments.js:289 routes/segments.js:336 routes/segments.js:359 -msgid "Selected list ID not found" -msgstr "Nie znaleziono wybranego ID listy" - -#: routes/fields.js:102 -msgid "Could not create custom field" -msgstr "Nie można utworzyć pola niestandardowego" - -#: routes/fields.js:129 -msgid "Selected field not found" -msgstr "Nie znaleziono wybranego pola" - -#: routes/fields.js:165 -msgid "Field settings updated" -msgstr "Zaktualizowano ustawienia pola" - -#: routes/fields.js:167 -msgid "Field settings not updated" -msgstr "Ustawienia pola nie zostały zaktualizowane" - -#: routes/fields.js:183 -msgid "Custom field deleted" -msgstr "Pole niestandardowe usunięte" - -#: routes/fields.js:185 -msgid "Could not delete specified field" -msgstr "Nie można usunąć określonego pola" - -#: routes/links.js:40 -msgid "Oops, we couldn't find a link for the URL you clicked" -msgstr "Ups, nie mogliśmy znaleźć linku dla URL który kliknąłeś" - -#: routes/lists.js:90 -msgid "Could not create list" -msgstr "Nie można utworzyć listy" - -#: routes/lists.js:93 -msgid "List created" -msgstr "Utworzono listę" - -#: routes/lists.js:101 routes/lists.js:236 routes/lists.js:301 -#: routes/lists.js:340 routes/lists.js:409 routes/lists.js:434 -#: routes/lists.js:479 routes/lists.js:501 routes/lists.js:530 -#: routes/lists.js:609 routes/lists.js:666 routes/lists.js:693 -msgid "Could not find list with specified ID" -msgstr "Nie można znaleźć listy o określonym ID" - -#: routes/lists.js:115 -msgid "List settings updated" -msgstr "Zaktualizowano ustawienia listy" - -#: routes/lists.js:117 -msgid "List settings not updated" -msgstr "Nie zaktualizowano ustawień listy" - -#: routes/lists.js:133 -msgid "List deleted" -msgstr "Lista usunięta" - -#: routes/lists.js:135 -msgid "Could not delete specified list" -msgstr "Nie można usunąć określonej listy" - -#: routes/lists.js:171 -msgid "Unknown" -msgstr "Nieznany" - -#: routes/lists.js:171 -msgid "Complained" -msgstr "Skarżący" - -#: routes/lists.js:202 -msgid "Invalid key" -msgstr "Klucz niewłaściwy" - -#: routes/lists.js:204 -msgid "Expired key" -msgstr "Klucz wygasł" - -#: routes/lists.js:206 -msgid "Revoked key" -msgstr "Klucz odwołany" - -#: routes/lists.js:256 -msgid "Initializing" -msgstr "Inicjowanie" - -#: routes/lists.js:259 -msgid "Initialized" -msgstr "Zainicjowano" - -#: routes/lists.js:262 -msgid "Importing" -msgstr "Importowanie" - -#: routes/lists.js:268 -msgid "Errored" -msgstr "Błędne" - -#: routes/lists.js:346 routes/lists.js:415 routes/lists.js:440 -msgid "Could not find subscriber with specified ID" -msgstr "Nie można znaleźć subskrybenta o podanym ID" - -#: routes/lists.js:392 -msgid "Could not add subscription" -msgstr "Nie można dodać subskrypcji" - -#: routes/lists.js:397 -msgid "%s was successfully added to your list" -msgstr "%s został pomyślnie dodany do twojej listy" - -#: routes/lists.js:399 -msgid "%s was not added to your list" -msgstr "%s nie został dodany do Twojej listy" - -#: routes/lists.js:421 -msgid "Could not unsubscribe user" -msgstr "Nie można anulować subskrypcji użytkownika" - -#: routes/lists.js:424 -msgid "%s was successfully unsubscribed from your list" -msgstr "%s został pomyślnie wypisany z listy" - -#: routes/lists.js:444 -msgid "%s was successfully removed from your list" -msgstr "%s został pomyślnie usunięty z Twojej listy" - -#: routes/lists.js:456 -msgid "Another subscriber with email address %s already exists" -msgstr "Inny subskrybent z adresem e-mail %s już istnieje" - -#: routes/lists.js:463 -msgid "Subscription settings updated" -msgstr "Zaktualizowano ustawienia subskrypcji" - -#: routes/lists.js:465 -msgid "Subscription settings not updated" -msgstr "Ustawienia subskrypcji nie zostały zaktualizowane" - -#: routes/lists.js:507 routes/lists.js:615 routes/lists.js:651 -#: routes/lists.js:679 routes/lists.js:699 -msgid "Could not find import data with specified ID" -msgstr "Nie można znaleźć danych importu o podanym ID" - -#: routes/lists.js:538 -msgid "Could not process CSV" -msgstr "Nie można przetworzyć pliku CSV" - -#: routes/lists.js:547 -msgid "Could not create importer" -msgstr "Nie można utworzyć importera" - -#: routes/lists.js:598 -msgid "Empty file" -msgstr "Pusty plik" - -#: routes/lists.js:655 -msgid "Import started" -msgstr "Rozpoczęto importowanie" - -#: routes/lists.js:683 -msgid "Import restarted" -msgstr "Import został zrestartowany" - -#: routes/segments.js:86 -msgid "Could not create segment" -msgstr "Nie można utworzyć segmentu" - -#: routes/segments.js:89 -msgid "Segment created" -msgstr "Utworzono segment" - -#: routes/segments.js:113 -msgid "Selected segment ID not found" -msgstr "Nie znaleziono ID wybranego segmentu" - -#: routes/segments.js:188 -msgid "Segment settings updated" -msgstr "Zaktualizowane ustawienia segmentów" - -#: routes/segments.js:190 -msgid "Segment settings not updated" -msgstr "Ustawienia segmentu nie zostały zaktualizowane" - -#: routes/segments.js:206 -msgid "Segment deleted" -msgstr "Segment usunięty" - -#: routes/segments.js:208 -msgid "Could not delete specified segment" -msgstr "Nie można usunąć określonego segmentu" - -#: routes/segments.js:342 -msgid "Could not create rule" -msgstr "Nie można utworzyć reguły" - -#: routes/segments.js:345 -msgid "Rule created" -msgstr "Dodano regułę" - -#: routes/segments.js:410 -msgid "Rule settings updated" -msgstr "Zaktualizowano ustawienia reguły" - -#: routes/segments.js:412 -msgid "Rule settings not updated" -msgstr "Nie zaktualizowano ustawień reguły" - -#: routes/segments.js:428 -msgid "Rule deleted" -msgstr "Usunięto regułę" - -#: routes/segments.js:430 -msgid "Could not delete specified rule" -msgstr "Nie można usunąć określonej reguły" - -#: routes/settings.js:39 -msgid "Use TLS" -msgstr "Użyj TLS" - -#: routes/settings.js:40 -msgid "usually selected for port 465" -msgstr "zazwyczaj wybierany port 465" - -#: routes/settings.js:44 -msgid "Use STARTTLS" -msgstr "Użyj STARTTLS" - -#: routes/settings.js:45 -msgid "usually selected for port 587 and 25" -msgstr "zazwyczaj wybierany port 587 i 25" - -#: routes/settings.js:49 -msgid "Do not use encryption" -msgstr "Nie używaj szyfrowania" - -#: routes/settings.js:115 -msgid "Settings updated" -msgstr "Zaktualizowano ustawienia" - -#: routes/settings.js:173 -msgid "Invalid mail transport type" -msgstr "Nieprawidłowy typ transportu poczty" - -#: routes/settings.js:184 -msgid "Invalid Access Key" -msgstr "Nieprawidłowy klucz dostępu" - -#: routes/settings.js:187 -msgid "Invalid AWS credentials" -msgstr "Nieprawidłowe dane uwierzytelniające AWS" - -#: routes/settings.js:190 -msgid "Connection refused, check hostname and port." -msgstr "Połączenie odrzucone, sprawdź nazwę hosta i port." - -#: routes/settings.js:195 -msgid "" -"Did not receive greeting message from server. This might happen when " -"connecting to a TLS port without using TLS." -msgstr "" -"Nie otrzymano wiadomości powitalnej z serwera. Może się to zdarzyć podczas " -"łączenia się z portem TLS bez korzystania z TLS." - -#: routes/settings.js:197 -msgid "Did not receive greeting message from server." -msgstr "Nie otrzymano wiadomości powitalnej z serwera." - -#: routes/settings.js:200 -msgid "" -"Connection timed out. Check your firewall settings, destination port is " -"probably blocked." -msgstr "" -"Przekroczono limit czasu połączenia. Sprawdź ustawienia zapory, port " -"docelowy jest prawdopodobnie zablokowany." - -#: routes/settings.js:205 -msgid "Authentication not accepted, server expects STARTTLS to be used." -msgstr "" -"Uwierzytelnianie nie jest akceptowane, serwer oczekuje, że zostanie użyty " -"STARTTLS." - -#: routes/settings.js:207 -msgid "Authentication failed, check username and password." -msgstr "Uwierzytelnianie nie powiodło się, sprawdź nazwę użytkownika i hasło." - -#: routes/settings.js:217 -msgid "Failed Mailer verification." -msgstr "Weryfikacja Mailera nie powiodła się." - -#: routes/settings.js:217 -msgid "Server responded with: \"%s\"" -msgstr "Odpowiedź serwera: \"%s\"" - -#: routes/settings.js:221 -msgid "Mailer settings verified, ready to send some mail!" -msgstr "Ustawienia Mailera zweryfikowane, gotowe do wysłania wiadomości!" - -#: routes/subscription.js:22 -msgid "Selected subscription not found" -msgstr "Nie znaleziono wybranej subskrypcji" - -#: routes/subscription.js:32 routes/subscription.js:103 -#: routes/subscription.js:141 routes/subscription.js:166 -#: routes/subscription.js:191 routes/subscription.js:232 -#: routes/subscription.js:270 routes/subscription.js:317 -#: routes/subscription.js:339 routes/subscription.js:368 -#: routes/subscription.js:392 routes/subscription.js:424 -msgid "Selected list not found" -msgstr "Nie znaleziono wybranej listy" - -#: routes/subscription.js:78 routes/subscription.js:472 -msgid "%s: Subscription Confirmed" -msgstr "%s: Potwierdzono subskrypcję" - -#: routes/subscription.js:217 -msgid "Email address not set" -msgstr "Adres e-mail nie jest ustawiony" - -#: routes/subscription.js:255 -msgid "Could not store confirmation data" -msgstr "Nie można zapisać danych potwierdzających" - -#: routes/subscription.js:284 routes/subscription.js:349 -#: routes/subscription.js:402 -msgid "Subscription not found from this list" -msgstr "Nie znaleziono subskrypcji z tej listy" - -#: routes/subscription.js:383 -msgid "Email address updated, check your mailbox for verification instructions" -msgstr "" -"Adres e-mail zaktualizowany, sprawdź skrzynkę pocztową, aby uzyskać " -"instrukcje dotyczące weryfikacji" - -#: routes/subscription.js:499 routes/subscription.js:515 -msgid "Public key is not set" -msgstr "Klucz publiczny nie jest ustawiony" - -#: routes/templates.js:98 -msgid "Could not create template" -msgstr "Nie można utworzyć szablonu" - -#: routes/templates.js:101 -msgid "Template created" -msgstr "Szablon utworzony" - -#: routes/templates.js:109 -msgid "Could not find template with specified ID" -msgstr "Nie można znaleźć szablonu z określonym ID" - -#: routes/templates.js:140 -msgid "Template settings updated" -msgstr "Zaktualizowano ustawienia szablonu" - -#: routes/templates.js:142 -msgid "Template settings not updated" -msgstr "Ustawienia szablonów nie zostały zaktualizowane" - -#: routes/templates.js:158 -msgid "Template deleted" -msgstr "Szablon usunięty" - -#: routes/templates.js:160 -msgid "Could not delete specified template" -msgstr "Nie można usunąć określonego szablonu" - -#: routes/triggers.js:62 routes/triggers.js:79 routes/triggers.js:154 -msgid "Could not find selected list" -msgstr "Nie można znaleźć wybranej listy" - -#: routes/triggers.js:131 -msgid "Could not create trigger" -msgstr "Nie można utworzyć wyzwalacza" - -#: routes/triggers.js:138 -msgid "Trigger “%s” created" -msgstr "Wyzwalacz “%s” został utworzony" - -#: routes/triggers.js:214 -msgid "Trigger settings updated" -msgstr "Zaktualizowano ustawienia wyzwalacza" - -#: routes/triggers.js:216 -msgid "Trigger settings not updated" -msgstr "Ustawienia wyzwalacza nie zostały zaktualizowane" - -#: routes/triggers.js:228 -msgid "Trigger deleted" -msgstr "Wyzwalacz został usunięty" - -#: routes/triggers.js:230 -msgid "Could not delete specified trigger" -msgstr "Nie można usunąć określonego wyzwalacza" - -#: routes/triggers.js:242 -msgid "Could not find trigger with specified ID" -msgstr "Nie można znaleźć wyzwalacza z określonym ID" - -#: routes/triggers.js:255 -msgid "Trigger not found" -msgstr "Wyzwalacz nie został znaleziony" - -#: routes/users.js:32 -msgid "" -"An email with password reset instructions has been sent to your email " -"address, if it exists on our system." -msgstr "" -"E-mail z instrukcjami resetowania hasła został wysłany na Twój adres e-mail, " -"jeśli istnieje w naszym systemie." - -#: routes/users.js:46 routes/users.js:64 -msgid "Unknown or expired reset token" -msgstr "Token resetowania nieznany lub wygasł" - -#: routes/users.js:66 -msgid "Your password has been changed successfully" -msgstr "Twoje hasło zostało zmienione" - -#: routes/users.js:87 -msgid "User data not found" -msgstr "Nie znaleziono danych użytkownika" - -#: routes/users.js:110 -msgid "Access token updated" -msgstr "Zaktualizowano token dostępu" - -#: routes/users.js:112 -msgid "Access token not updated" -msgstr "Nie zaktualizowano tokenu dostępu" - -#: routes/users.js:139 -msgid "Account information updated" -msgstr "Informacje o koncie zostały zaktualizowane" - -#: routes/users.js:141 -msgid "Account information not updated" -msgstr "Informacje o koncie nie zostały zaktualizowane" - -#: services/feedcheck.js:51 -msgid "Feed error: %s" -msgstr "RSS błąd: %s" - -#: services/feedcheck.js:54 -msgid "Found %s new campaign messages from feed" -msgstr "Znaleziono %s nowych wiadomości kampanii z kanału" - -#: services/feedcheck.js:56 -msgid "Found nothing new from the feed" -msgstr "Nie znaleziono nic nowego w kanale" - -#: services/feedcheck.js:143 -msgid "RSS entry %s" -msgstr "Wpis RSS %s" - -#: services/importer.js:243 -msgid "Could not access import file" -msgstr "Nie można uzyskać dostępu do pliku importu" - -#: services/triggers.js:51 -msgid "Unknown trigger type %s" -msgstr "Nieznany typ wyzwalacza %s" From 4d25685d6901c5c1e00ecb463308e640634d4a10 Mon Sep 17 00:00:00 2001 From: Kuba Orlik Date: Thu, 9 May 2019 13:25:25 +0200 Subject: [PATCH 473/483] Add a Polish translation for 'It looks like you are already subscribed to this list.' Because it looked out of place when it was displayed on the subscription widget --- languages/pl_PL.po | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/languages/pl_PL.po b/languages/pl_PL.po index 98f2bfa4..f74dd6a7 100644 --- a/languages/pl_PL.po +++ b/languages/pl_PL.po @@ -3735,3 +3735,7 @@ msgstr "Nie można uzyskać dostępu do pliku importu" #: services/triggers.js:51 msgid "Unknown trigger type %s" msgstr "Nieznany typ wyzwalacza %s" + +#: views/subscription/widget-subscribe.hbs:3 +msgid "It looks like you are already subscribed to this list." +msgstr "Wygląda na to, że już jesteś zapisany/a." \ No newline at end of file From c9383cb6da75fa5f03234261cda26a014ad41848 Mon Sep 17 00:00:00 2001 From: Kuba Orlik Date: Thu, 9 May 2019 14:06:00 +0200 Subject: [PATCH 474/483] Update the translation in the missing .mo file, as well Without that the new translation does not show up --- languages/pl_PL.mo | Bin 71888 -> 72004 bytes languages/pl_PL.po | 32 +++++++++++++++----------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/languages/pl_PL.mo b/languages/pl_PL.mo index 7a58bc3f768113d4d50f16bf253e895acaa7e8cb..87fc07e4638201123afa7892bce870edf815b0f2 100644 GIT binary patch delta 15826 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 a+hg%4|AdlBCChBOw|Hsdro9)&*7!gFS+G<9 diff --git a/languages/pl_PL.po b/languages/pl_PL.po index f74dd6a7..4e164b2f 100644 --- a/languages/pl_PL.po +++ b/languages/pl_PL.po @@ -3,12 +3,12 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-07 21:44+0200\n" -"PO-Revision-Date: 2018-10-22 12:32+0100\n" +"PO-Revision-Date: 2019-05-09 14:02+0200\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.7.4\n" +"X-Generator: Poedit 2.2.1\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 " "|| n%100>14) ? 1 : 2);\n" "Last-Translator: \n" @@ -37,13 +37,12 @@ msgstr "Samodzielnie hostowana aplikacja e-mail newsletter" #: views/lists/subscription/import-failed.hbs:1 #: views/lists/subscription/import-preview.hbs:1 #: views/lists/subscription/import.hbs:1 views/lists/view.hbs:1 -#: views/settings.hbs:1 views/templates/create.hbs:1 -#: views/templates/edit.hbs:1 views/templates/templates.hbs:1 -#: views/triggers/create-select.hbs:1 views/triggers/create.hbs:1 -#: views/triggers/edit.hbs:1 views/triggers/triggered.hbs:1 -#: views/triggers/triggers.hbs:1 views/users/account.hbs:1 -#: views/users/api.hbs:1 views/users/forgot.hbs:1 views/users/login.hbs:1 -#: views/users/reset.hbs:1 app.js:169 +#: views/settings.hbs:1 views/templates/create.hbs:1 views/templates/edit.hbs:1 +#: views/templates/templates.hbs:1 views/triggers/create-select.hbs:1 +#: views/triggers/create.hbs:1 views/triggers/edit.hbs:1 +#: views/triggers/triggered.hbs:1 views/triggers/triggers.hbs:1 +#: views/users/account.hbs:1 views/users/api.hbs:1 views/users/forgot.hbs:1 +#: views/users/login.hbs:1 views/users/reset.hbs:1 app.js:169 msgid "Home" msgstr "Strona główna" @@ -429,8 +428,8 @@ msgstr "Usuń kampanię" #: views/campaigns/edit.hbs:35 views/lists/edit.hbs:13 #: views/lists/fields/edit.hbs:39 views/lists/segments/edit.hbs:14 #: views/lists/segments/rule-edit.hbs:38 views/lists/subscription/edit.hbs:17 -#: views/settings.hbs:99 views/templates/edit.hbs:12 -#: views/triggers/edit.hbs:30 views/users/account.hbs:18 +#: views/settings.hbs:99 views/templates/edit.hbs:12 views/triggers/edit.hbs:30 +#: views/users/account.hbs:18 msgid "Update" msgstr "Zaktualizuj" @@ -2911,14 +2910,13 @@ msgstr "dziś" msgid "Invalid segment rule type" msgstr "Nieprawidłowy typ reguły segmentu" -#: lib/models/segments.js:289 lib/models/segments.js:454 -#: routes/segments.js:266 routes/segments.js:300 routes/segments.js:370 -#: routes/segments.js:381 +#: lib/models/segments.js:289 lib/models/segments.js:454 routes/segments.js:266 +#: routes/segments.js:300 routes/segments.js:370 routes/segments.js:381 msgid "Selected segment not found" msgstr "Nie znaleziono wybranego segmentu" -#: lib/models/segments.js:294 lib/models/segments.js:459 -#: routes/segments.js:272 routes/segments.js:306 routes/segments.js:387 +#: lib/models/segments.js:294 lib/models/segments.js:459 routes/segments.js:272 +#: routes/segments.js:306 routes/segments.js:387 msgid "Invalid rule type" msgstr "Nieprawidłowy typ reguły" @@ -3738,4 +3736,4 @@ msgstr "Nieznany typ wyzwalacza %s" #: views/subscription/widget-subscribe.hbs:3 msgid "It looks like you are already subscribed to this list." -msgstr "Wygląda na to, że już jesteś zapisany/a." \ No newline at end of file +msgstr "Wygląda na to, że już jesteś zapisany/a." From 0db686d63ccabff34026854052a528a81027a75e Mon Sep 17 00:00:00 2001 From: Softion <46265672+softionsrl@users.noreply.github.com> Date: Wed, 12 Jun 2019 17:38:45 +0200 Subject: [PATCH 475/483] Standardization of error handling Probably not the best way, but this should make the code more readable as a lot of it is just outputting error messages. This allows for centralized error messages translation. --- routes/api.js | 403 ++++++++++++++------------------------------------ 1 file changed, 109 insertions(+), 294 deletions(-) diff --git a/routes/api.js b/routes/api.js index 4240b731..eb1a8d4c 100644 --- a/routes/api.js +++ b/routes/api.js @@ -12,29 +12,27 @@ let log = require('npmlog'); let router = new express.Router(); let mailHelpers = require('../lib/subscription-mail-helpers'); +const handleErrorResponse = (res, log, err, code = 500, message = false) => { + if (typeof err != 'undefined') + log.error('API', err); + res.status(code); + return res.json({ + error: message || err.message || err, + data: [] + }); +} + router.all('/*', (req, res, next) => { if (!req.query.access_token) { - res.status(403); - return res.json({ - error: 'Missing access_token', - data: [] - }); + return handleErrorResponse(res, log, false, 403, 'Missing access_token'); } users.findByAccessToken(req.query.access_token, (err, user) => { if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } if (!user) { - res.status(403); - return res.json({ - error: 'Invalid or expired access_token', - data: [] - }); + return handleErrorResponse(res, log, false, 403, 'Invalid or expired access_token'); } next(); }); @@ -48,35 +46,17 @@ router.post('/subscribe/:listId', (req, res) => { }); lists.getByCid(req.params.listId, (err, list) => { if (err) { - log.error('API', err); - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, false, 403, 'Invalid or expired access_token'); } if (!list) { - res.status(404); - return res.json({ - error: 'Selected listId not found', - data: [] - }); + return handleErrorResponse(res, log, false, 404, 'Selected listId not found'); } if (!input.EMAIL) { - res.status(400); - return res.json({ - error: 'Missing EMAIL', - data: [] - }); + return handleErrorResponse(res, log, false, 400, 'Missing EMAIL'); } tools.validateEmail(input.EMAIL, false, err => { if (err) { - log.error('API', err); - res.status(400); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err, 400); } let subscription = { @@ -132,22 +112,12 @@ router.post('/subscribe/:listId', (req, res) => { confirmations.addConfirmation(list.id, 'subscribe', req.ip, data, (err, confirmCid) => { if (err) { - log.error('API', err); - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } mailHelpers.sendConfirmSubscription(list, input.EMAIL, confirmCid, subscription, (err) => { if (err) { - log.error('API', err); - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } res.status(200); @@ -161,12 +131,7 @@ router.post('/subscribe/:listId', (req, res) => { } else { subscriptions.insert(list.id, meta, subscription, (err, response) => { if (err) { - log.error('API', err); - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } res.status(200); res.json({ @@ -188,51 +153,26 @@ router.post('/unsubscribe/:listId', (req, res) => { }); lists.getByCid(req.params.listId, (err, list) => { if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } if (!list) { - res.status(404); - return res.json({ - error: 'Selected listId not found', - data: [] - }); + return handleErrorResponse(res, log, false, 404, 'Selected listId not found'); } if (!input.EMAIL) { - res.status(400); - return res.json({ - error: 'Missing EMAIL', - data: [] - }); + return handleErrorResponse(res, log, false, 400, 'Missing EMAIL'); } subscriptions.getByEmail(list.id, input.EMAIL, (err, subscription) => { if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } - if (!subscription) { - res.status(404); - return res.json({ - error: 'Subscription with given email not found', - data: [] - }); + return handleErrorResponse(res, log, false, 404, 'Subscription with given email not found'); } subscriptions.changeStatus(list.id, subscription.id, false, subscriptions.Status.UNSUBSCRIBED, (err, found) => { if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } res.status(200); res.json({ @@ -253,55 +193,27 @@ router.post('/delete/:listId', (req, res) => { }); lists.getByCid(req.params.listId, (err, list) => { if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } if (!list) { - res.status(404); - return res.json({ - error: 'Selected listId not found', - data: [] - }); + return handleErrorResponse(res, log, false, 404, 'Selected listId not found'); } if (!input.EMAIL) { - res.status(400); - return res.json({ - error: 'Missing EMAIL', - data: [] - }); + return handleErrorResponse(res, log, false, 400, 'Missing EMAIL'); } subscriptions.getByEmail(list.id, input.EMAIL, (err, subscription) => { if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } if (!subscription) { - res.status(404); - return res.json({ - error: 'Subscription not found', - data: [] - }); + return handleErrorResponse(res, log, false, 404, 'Subscription not found'); } subscriptions.delete(list.id, subscription.cid, (err, subscription) => { if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } if (!subscription) { - res.status(404); - return res.json({ - error: 'Subscription not found', - data: [] - }); + return handleErrorResponse(res, log, false, 404, 'Subscription not found'); } res.status(200); res.json({ @@ -320,42 +232,30 @@ router.get('/subscriptions/:listId', (req, res) => { let limit = parseInt(req.query.limit || 10000, 10); lists.getByCid(req.params.listId, (err, list) => { - if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] + if (err) { + return handleErrorResponse(res, log, err); + } + subscriptions.list(list.id, start, limit, (err, rows, total) => { + if (err) { + return handleErrorResponse(res, log, err); + } + res.status(200); + res.json({ + data: { + total: total, + start: start, + limit: limit, + subscriptions: rows + } }); - } - subscriptions.list(list.id, start, limit, (err, rows, total) => { - if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); - } - res.status(200); - res.json({ - data: { - total: total, - start: start, - limit: limit, - subscriptions: rows - } - }); - }); + }); }); }); router.get('/lists', (req, res) => { lists.quicklist((err, lists) => { if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } res.status(200); res.json({ @@ -367,10 +267,7 @@ router.get('/lists', (req, res) => { router.get('/list/:id', (req, res) => { lists.get(req.params.id, (err, list) => { if (err) { - res.status(500); - return res.json({ - error: err.message || err, - }); + return handleErrorResponse(res, log, err); } res.status(200); res.json({ @@ -382,11 +279,7 @@ router.get('/list/:id', (req, res) => { router.get('/lists/:email', (req, res) => { lists.getListsWithEmail(req.params.email, (err, lists) => { if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } res.status(200); res.json({ @@ -402,19 +295,10 @@ router.post('/field/:listId', (req, res) => { }); lists.getByCid(req.params.listId, (err, list) => { if (err) { - log.error('API', err); - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } if (!list) { - res.status(404); - return res.json({ - error: 'Selected listId not found', - data: [] - }); + return handleErrorResponse(res, log, false, 404, 'Selected listId not found'); } let field = { @@ -429,11 +313,7 @@ router.post('/field/:listId', (req, res) => { fields.create(list.id, field, (err, id, tag) => { if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } res.status(200); res.json({ @@ -452,24 +332,16 @@ router.post('/blacklist/add', (req, res) => { input[(key || '').toString().trim().toUpperCase()] = (req.body[key] || '').toString().trim(); }); if (!(input.EMAIL) || (input.EMAIL === '')) { - res.status(500); - return res.json({ - error: 'EMAIL argument are required', - data: [] - }); + return handleErrorResponse(res, log, err); } blacklist.add(input.EMAIL, (err) =>{ - if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); - } - res.status(200); - res.json({ - data: [] - }); + if (err) { + return handleErrorResponse(res, log, err); + } + res.status(200); + res.json({ + data: [] + }); }); }); @@ -479,19 +351,11 @@ router.post('/blacklist/delete', (req, res) => { input[(key || '').toString().trim().toUpperCase()] = (req.body[key] || '').toString().trim(); }); if (!(input.EMAIL) || (input.EMAIL === '')) { - res.status(500); - return res.json({ - error: 'EMAIL argument are required', - data: [] - }); + return handleErrorResponse(res, log, false, 500, 'EMAIL argument are required'); } blacklist.delete(input.EMAIL, (err) =>{ if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } res.status(200); res.json({ @@ -507,11 +371,7 @@ router.get('/blacklist/get', (req, res) => { blacklist.get(start, limit, search, (err, data, total) => { if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } res.status(200); res.json({ @@ -531,103 +391,58 @@ router.post('/changeemail/:listId', (req, res) => { input[(key || '').toString().trim().toUpperCase()] = (req.body[key] || '').toString().trim(); }); if (!(input.EMAILOLD) || (input.EMAILOLD === '')) { - res.status(500); - return res.json({ - error: 'EMAILOLD argument is required', - data: [] - }); + return handleErrorResponse(res, log, false, 500, 'EMAILOLD argument is required'); } if (!(input.EMAILNEW) || (input.EMAILNEW === '')) { - res.status(500); - return res.json({ - error: 'EMAILNEW argument is required', - data: [] - }); + return handleErrorResponse(res, log, false, 500, 'EMAILNEW argument is required'); } lists.getByCid(req.params.listId, (err, list) => { if (err) { - log.error('API', err); - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); + return handleErrorResponse(res, log, err); } if (!list) { - res.status(404); - return res.json({ - error: 'Selected listId not found', - data: [] - }); + return handleErrorResponse(res, log, false, 404, 'Selected listId not found'); } - blacklist.isblacklisted(input.EMAILNEW, (err, blacklisted) =>{ - if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); - } - if (blacklisted) { - res.status(500); - return res.json({ - error: 'New email is blacklisted', - data: [] + blacklist.isblacklisted(input.EMAILNEW, (err, blacklisted) => { + if (err) { + return handleErrorResponse(res, log, err); + } + if (blacklisted) { + return handleErrorResponse(res, log, false, 500, 'New email is blacklisted'); + } + + subscriptions.getByEmail(list.id, input.EMAILOLD, (err, subscription) => { + if (err) { + return handleErrorResponse(res, log, err); + } + + if (!subscription) { + return handleErrorResponse(res, log, false, 404, 'Subscription with given old email not found'); + } + + subscriptions.updateAddressCheck(list, subscription.cid, input.EMAILNEW, null, (err, old, valid) => { + if (err) { + return handleErrorResponse(res, log, err); + } + + if (!valid) { + return handleErrorResponse(res, log, false, 500, 'New email not valid'); + } + + subscriptions.updateAddress(list.id, subscription.id, input.EMAILNEW, (err) => { + if (err) { + return handleErrorResponse(res, log, err); + } + res.status(200); + res.json({ + data: { + id: subscription.id, + changedemail: true + } + }); + }); + }); }); - } - - subscriptions.getByEmail(list.id, input.EMAILOLD, (err, subscription) => { - if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); - } - - if (!subscription) { - res.status(404); - return res.json({ - error: 'Subscription with given old email not found', - data: [] - }); - } - - subscriptions.updateAddressCheck(list, subscription.cid, input.EMAILNEW, null, (err, old, valid) => { - if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); - } - - if (!valid) { - res.status(500); - return res.json({ - error: 'New email not valid', - data: [] - }); - } - - subscriptions.updateAddress(list.id, subscription.id, input.EMAILNEW, (err) => { - if (err) { - res.status(500); - return res.json({ - error: err.message || err, - data: [] - }); - } - res.status(200); - res.json({ - data: { - id: subscription.id, - changedemail: true - } - }); - }); - }); - }); }); }); }); From cce887361bb1f5d78439f66a4f50566a54098322 Mon Sep 17 00:00:00 2001 From: dkorts1 <51726256+dkorts1@users.noreply.github.com> Date: Fri, 14 Jun 2019 01:04:34 +0300 Subject: [PATCH 476/483] Update README.md minor changes, grammar, and typos --- docs/README.md | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/docs/README.md b/docs/README.md index 9b80bdec..355d4d78 100644 --- a/docs/README.md +++ b/docs/README.md @@ -42,7 +42,7 @@ Check out [ZoneMTA](https://github.com/zone-eu/zone-mta) as an alternative self ## Cons - * Beta-grade software. Might or might not work as expected. There are several users with list sizes between 100k and 1M and Mailtrain seems to work for them but YMMV + * Beta-grade software. Might or might not work as expected. * Almost no documentation (there are some guides in the [Wiki](https://github.com/Mailtrain-org/mailtrain/wiki)) ## Requirements @@ -76,13 +76,13 @@ Install script installs and sets up the following: * **logrotate** to rotate Mailtrain log files * **upstart** or **systemd** init script to automatically start and manage Mailtrain process -After the install script has finished and you see a success message then you should have a Mailtrain instance running at http://yourdomain.com +After the install script has finished and you have received "successfully installed" message, you should have a Mailtrain instance running at http://yourdomain.com #### Next steps after installation ##### 1. Change admin password -Navigate to http://yourdomain.com where yourdomain.com is the address of your server. Click on the Sign In link in the right top corner of the page. Authenticate with the following credentials: +Navigate to http://yourdomain.com where yourdomain.com is the address of your server. Click on the **Sign In** link in the right top corner of the page. Authenticate with the following credentials: * Username: **admin** * Password: **test** @@ -91,7 +91,7 @@ Once authenticated, click on your username in the right top corner of the page a ##### 2. Update page configuration -If signed in navigate to http://yourdomain.com/settings and check that all email addresses and domain names are correct. Mailtrain default installation comes bundled with [ZoneMTA](https://github.com/zone-eu/zone-mta), so you should be able to send out messages right away. ZoneMTA even handles a lot of bounces (not all kind of bounces though) automatically so you do not have to change anything in the SMTP settings to get going. +If signed in, navigate to http://yourdomain.com/settings and check that all email addresses and domain names are correct. Mailtrain default installation comes bundled with [ZoneMTA](https://github.com/zone-eu/zone-mta), so you should be able to send out messages right away. ZoneMTA even handles a lot of bounces (not all kind of bounces though) automatically so you do not have to change anything in the SMTP settings to get going. ##### 3. Set up SPF @@ -103,9 +103,9 @@ If you are using the bundled ZoneMTA then you can provide a DKIM key to sign all ##### 5. Set up VERP -The bundled ZoneMTA can already handle a large amount of bounces if you use it to deliver messages but not all - namely such bounces that happen *after* the recipient MX accepts the message for local delivery. This might happen for example when a user exists, so the MX accepts the message but the quota for that user is checked only when actually storing the message to users' mailbox. Then a bounce message is generated and sent to the original sender which in your case is the mail address you are sending your list messages from. You can catch these messages and mark such recipients manually as bounced but alternatively you can set up a VERP based bounce handler that does this automatically. In this case the sender on the message envelope would not be your actual address but a rewritten bounce address that points to your Mailtrain installation. +The bundled ZoneMTA can already handle a large amount of bounces if you use it to deliver messages but not all: namely, such bounces that happen *after* the recipient MX accepts the message for local delivery. This might happen for example when a user exists, so the MX accepts the message but the quota for that user is checked only when actually storing the message to users' mailbox. Then a bounce message is generated and sent to the original sender which in your case is the mail address you are sending your list messages from. You can catch these messages and mark such recipients manually as bounced but alternatively you can set up a VERP based bounce handler that does this automatically. In this case the sender on the message envelope would not be your actual address but a rewritten bounce address that points to your Mailtrain installation. -To set it up you need to create an additonal DNS MX entry for a bounce domain, eg "bounces.example.com" if you are sending from "example.com". This entry should point to your Mailtrain server IP address. Next you should enable the VERP handling in Mailtrain Settings page. +To set it up you need to create an additonal DNS MX entry for a bounce domain, eg "bounces.example.com",if you are sending from "example.com". This entry should point to your Mailtrain server IP address. Next you should enable the VERP handling in Mailtrain Settings page. > As ZoneMTA uses envelope sender as the default for DKIM addresses, then if using VERP you need to set up DKIM to your bounce domain instead of sender domain and also store the DKIM key as "bouncedomain.selector.pem" in the ZoneMTA key folder. @@ -123,7 +123,7 @@ With proper SPF, DKIM and PTR records (DMARC wouldn't hurt either) I got perfect DKIM, DMARK, SPF and PTR are DNS records which spam filters use to figure out if e-mails were really sent by you (and not by a spammer who tries to conceal his identity to be able to continue send bulks of e-mails people never subscribed for). Assuming that you use zone-mta and your e-mails are to originate from a Mailtrain installation at `mailtrain.example.com` and optionally from `mail.example.net`, to practically set all these records up you will need to: -1. generate genrate a private and public DKIM key +**1.generate a private and public DKIM key** ```sh mkdir /opt/dkim-keys @@ -133,7 +133,7 @@ openssl genrsa -out mailtrain.example.com.key 2048 # private key mailtrain.examp openssl rsa -in mailtrain.example.com.key -out mailtrain.example.com.pub -pubout -outform PEM # public key mailtrain.example.com.pub ``` -2. add 3 new txt records for the mailtrain.example.com that will most likely similar to the example below: +**2.add the three new txt records for the mailtrain.example.com that will most likely look similar to the example below** ``` default._domainkey.mailtrain.example.com TXT "k=rsa; p=[public key in one line];" @@ -151,10 +151,10 @@ The above steps will have the following effect: - all messages sent by Mailtrain / Zone-mta will be signed by the DKIM Private Key (the signature becomes a part of the e-mail) - when a spamfilter encounters this signature, it will look for the ****._domainkey.**** TXT record, and use the public key stored there to verify that the signature is valid -- additionally, the spamfilter will look for a TXT SPF record and will look a if the e-mail was sent from the IP address of mailtrain.example.com or mail.example.net. If the sender IP or domain is different, it will discard the e-mail as spam. +- additionally, the spamfilter will look for a TXT SPF record and will look if the e-mail was sent from the IP address of mailtrain.example.com or mail.example.net. If the sender IP or domain is different, it will discard the e-mail as spam. - furthermore, the spamfilter looks for the DMARC record, which tells it what to do with mails that aren't signed with DKIM or which don't have a valid signature. The example above will tell the spamfilter to reject such a mail as well. -3. You are now almost set. To further confirm that you have full control over your network, the last step is to set up a PTR record, which will give the right answer for a reverse DNS lookup (answer to "what domain name is bound to IP address xxx.xxx.xxx.xxx). If you run your own DNS, you probably know it will look similar to this: +You are now almost set. To further confirm that you have full control over your network, the last step is to set up a PTR record, which will give the right answer for a reverse DNS lookup (answer to "what domain name is bound to IP address xxx.xxx.xxx.xxx). If you run your own DNS, you probably know it will look similar to this: ``` 10.27/1.110.220.in-addr.arpa. 1800 PTR mailtrain.example.com. @@ -172,7 +172,7 @@ If you run Mailtrain on a VPS, you will have to find the PTR configuration somew #### Install: * Download Mailtrain files using git: `git clone git://github.com/Mailtrain-org/mailtrain.git` (or download [zipped repo](https://github.com/Mailtrain-org/mailtrain/archive/master.zip)) and open Mailtrain folder `cd mailtrain` -* **Note**: depending on how you have configured your system and Docker you may need to prepend the commands below with `sudo`. +* **Note**: depending on how you have configured your system and Docker, you may need to prepend the commands below with `sudo`. * Copy the file `docker-compose.override.yml.tmpl` to `docker-compose.override.yml` and modify it if you need to. * Bring up the stack with: `docker-compose up -d`, by default it will use the included `docker-compose.yml` file and override some configurations taken from the `docker-compose.override.yml` file. * If you want to use only / copy the `docker-compose.yml` file (for example, if you were deploying with Rancher), you may need to first run `docker-compose build` to make sure your system has a Docker image `mailtrain:latest`. @@ -197,7 +197,7 @@ If you run Mailtrain on a VPS, you will have to find the PTR configuration somew ## Upgrade - * Replace old files with new ones by running in the Mailtrain folder `git pull origin master` if you used Git to set Mailtrain up or just download [new files](https://github.com/Mailtrain-org/mailtrain/archive/master.zip) and replace old ones with these + * Replace old files with new ones by running in the Mailtrain folder ` if you used Git to set Mailtrain up or just download [new files](https://github.com/Mailtrain-org/mailtrain/archive/master.zip) and replace old ones with these * Run `npm install --production` in the Mailtrain folder ## Using Environment Variables @@ -273,7 +273,7 @@ If using VERP with iRedMail, see [this post](http://www.iredmail.org/forum/post4 ## Testing -There is a built in /dev/null server in Mailtrain that you can use to load test your installation. Check the `[testserver]` section in the configuration file for details. By default the test server is disabled. The server uses only cleartext connections, so select "Do not use encryption" in the encryption settings when setting up the server data in Mailtrain. +There is a built in /dev/null server in Mailtrain that you can use to load-test your installation. Check the `[testserver]` section in the configuration file for details. By default, the test server is disabled. The server uses only cleartext connections, so select: "Do not use encryption" in the encryption settings when setting up the server data in Mailtrain. Additionally you can generate CSV import files with fake subscriber data: @@ -285,7 +285,7 @@ This command generates a CSV file with 100 000 subscriber accounts ## Translations -Mailtrain is currently not translated but it supports translations. To add translations you first need to add translation support for the translatable strings. To test if strings are translatable or not, use a fake language with code "zz" +Mailtrain is currently not translated but it supports translations. To add translations you first need to add translation support for the translatable strings. To test if strings are translatable or not, use a fake language with the code "zz". ```toml language="zz" @@ -327,10 +327,11 @@ Enclose translatable strings to `{{#translate}}` tags * To create the translation catalog run `grunt` from command line. This fetches all translatable strings from JavaScript and Handlebars files and merges these into the translation catalog located at */languages/mailtrain.pot* -* To add a new language use this catalog file as source. Once you want to update your translation file from the updated catalog, then select "Catalogue" -> "Update from POT file..." in POEdit and select mailtrain.pot. This would merge all new translations from the POT file to your PO file. +* To add a new language use this catalog file as a source. Once you want to update your translation file from the updated catalog, select "Catalogue" -> "Update from POT file..." in POEdit and select mailtrain.pot. This will merge all the new translations from the POT file to your PO file. + *If you have saved the PO file in [./languages](./languages) then POEdit should auto generate required MO file whenever you hit save for the PO file. -* Once you have a correct MO file in the languages folder, then edit Mailtrain config and set ["language" option](https://github.com/Mailtrain-org/mailtrain/blob/ba8bd1212335cb9bd7ba094beb7b5400f35cae6c/config/default.toml#L30-L31) to your language name. If the value is "et" then Mailtrain loads translations from ./languages/et.mo +* Once you have a correct MO file in the languages folder, edit Mailtrain config and set ["language" option](https://github.com/Mailtrain-org/mailtrain/blob/ba8bd1212335cb9bd7ba094beb7b5400f35cae6c/config/default.toml#L30-L31) to your language name. If the value is "et" then Mailtrain loads translations from ./languages/et.mo > **NB!** For now translation settings are global, so if you have set a translation in config then this applies to all users. An user can't select another translation than the default even if there is a translation file. This is because current Mailtrain code does not provide request context to functions and the functions generating strings do not know which language to use. From d685c8e61f11283cfbfd0ca3dbac4df8f249eda4 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Sat, 15 Jun 2019 14:34:59 +0200 Subject: [PATCH 477/483] Update README.md --- docs/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 355d4d78..33bcb767 100644 --- a/docs/README.md +++ b/docs/README.md @@ -42,7 +42,7 @@ Check out [ZoneMTA](https://github.com/zone-eu/zone-mta) as an alternative self ## Cons - * Beta-grade software. Might or might not work as expected. + * Beta-grade software. Several users reported success with lists of various sizes (from 100k to 1M) however there is no absolute guarantee it will always work as expected. * Almost no documentation (there are some guides in the [Wiki](https://github.com/Mailtrain-org/mailtrain/wiki)) ## Requirements @@ -197,7 +197,7 @@ If you run Mailtrain on a VPS, you will have to find the PTR configuration somew ## Upgrade - * Replace old files with new ones by running in the Mailtrain folder ` if you used Git to set Mailtrain up or just download [new files](https://github.com/Mailtrain-org/mailtrain/archive/master.zip) and replace old ones with these + * Replace old files with new ones by running in the Mailtrain folder `git pull origin master` if you used Git to set Mailtrain up or just download [new files](https://github.com/Mailtrain-org/mailtrain/archive/master.zip) and replace old ones with these * Run `npm install --production` in the Mailtrain folder ## Using Environment Variables From cf6c0e6849856235ac31df61d6b0f62b55b5ef3f Mon Sep 17 00:00:00 2001 From: ezzra Date: Fri, 28 Jun 2019 11:44:58 +0200 Subject: [PATCH 478/483] modify german language files --- languages/de_DE.mo | Bin 84676 -> 84915 bytes languages/de_DE.po | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/languages/de_DE.mo b/languages/de_DE.mo index 3f1d6bd0ef28158a8a62132ee5e7f02c7786792b..502a6f44db15e95304df711d94943fcced2e7d61 100644 GIT binary patch delta 19521 zcmZwO37pMU{QvRqoiVnt41*cQm}?k}ec#8v%~&U7i<;qLEElubxk(XG>4xkHg-B)l z$(Ce^!jQ5@mK2f57W%*5_naQT{*TA+`*?gk&*z-;J>Ro^zxU2eeLXj1_Kp*Z*_a>CV*$K@;rJMfV1W*f6OCoC95%;_I2fy; zAIsui8(+s5$MHFl9UZ4M1@*B6_Qv9vh3e2-7?0~P34g$xSh|zr&}XLteu$N^5T3wX zcomD{@0b^ZJ3CG!7Qj+i9*b~)rws{R&W3y2sSdVIWzm1P$ zf8rachC3%aPC-n;-Z%=iMBk#8gMSGCN0+ZQ_*dZt4w24di5Z=3fopB11iNJ#RKuG1Lev zVlAwT&2R|j#g8!@x1g5b5a!3zm=Ax!FuaF_FrvMBV2as-w4U{M2VNa`rT9UIf+S zs;Ch(L-jZr^>__H?TuG#`C=QdM|JoB@_;zmsLdMF%RG+dP&3>SHFK$`r^7dzgr;;B zs)zGYBX}PpaW!gWd#vBt^3$jrTtcn=b=1hZv*XlWf7IUc+ITXm12a%dwiFql&sk5R zG8wy&Hk=!nh^_mW4!wnX54?vZaI^Io7FT`L%!IsP>Xkv|H$#oEH%8z{bmQwbe+@?J z`QJ@K7n}-YIL@CKMI73fw;7g4H?~JThQqA0P%o}^SP_rd{70zwM)7{;`o^gEC5*?Z zr~$9XIPUM9AyEpQ7tLc6gXIakU`ZT{m2fVqfjw9OZ=gn2oQyZF{=J9)Sftw z#qc7k{sYt=2u@}Gb%VmGCLHP+`@Psg0Ze$?78M9th58y`S*{4(aor|8or$~nyRtSIURZX4G_y*OIf z{Jy9gWMV8%z%sZLOXF8I{|ag;a}783^Pz4Sj(M>ps$=DcGylq{Zwp#to*>8RgjLD! zIl@$&j-kZw*?1-9A>NFd`rVihPohTnv(0~k6^ILuG@G{(mLu+i>fkFQnSVV#)5%c9 zMW`A18VlkH8(&6s;7``43>?_;;oj`K3MALBTa@mqXF@mQ7%k6<0lHO`oTfzJli%uGYgi85lz7|)MnagE1bYW#J90Hx+a=kABA;^o1m5`3uACR zHo%28{vI{bd#I&-X5&1Q%z(l%RL{Sggx0b$*2G$<3kRY$(@4~fMx%E51k~nw9kq$x zM%8~GHGs9Kj(>@&f86>LYDsRQ2J|=jbU{%TxHeY8lK2wpF_~mtiQ2V?QBTPetcd#d zqU*Y#I{F%_y*E%DT#oAC8r1t?8kd6tiKY`FPm3lGph&nVwq|E1l7=SR0BVw zX38~%PfDzfaae&JTH3`9$2P4u~BLONE%1y}>WK{fO@YKHQ^!Bk@j)C>+qUH>ww1FxZ$`h5(=y_iSO|4|Zo z$vBM~*%efS4^bTnnMEU56jeSCqi`+e#Qiq@4x1DIiUnATO0&(2so|TZy^+>QsOx41 zV%C2SiBK|@+Jd!MnfNo*=l=yPjSnymi@#+yYg5zIdT|m|U6*Yhd zsJ-;e#--jhyFU&!fV!v-c72!i4=3>=8HF*!7ED9+^c@Vt4^UIL5%n~Dg{ptX#=oPR zIApGwv2v(-El~NrQP)qf`7<#W@dtC6e@(?&GPHL4Pz@hOU2wtrI~E~+g1WHKJTubb zSd`d}8c|*R2wR|b|8J<7x@~=enz20d%`3QwkAxbiin^c`Y6=r=+yynY-I2$|>5qEs zhNBwN^~-T4Hpj~EnGSkUHy(|e$*ER9>iQL^rSNSg5lP}WYS-RCb>JR$!oN{_BWZz| znZc-f6EG5A#Ry!2n#s*JK4!g+y53o6%1fd4MgwGX^ZlPh0vTDh!bYq^d<5N?W09GG zIOL_})Iu%APSlN$qh|0o)Dk$0&4*Mz)Kb+!1wHRj4KU0(Ij(s0I(Cu0L<%N2om#y3EW#F|1A;i&e2J`YMrl zg@oSCpP=4w*;oS~U|EcRpN)x~FdF@+4t|Eka2KirCvE%-s-0(82FtQTOJh6K^+Qmb z`t{|^zb>3dMnhbUdI~P1mgG8W${(U;!1aN-urL-UcB8Iui0V)W)Sl>tC2xyv26f#XtcS&XADWC#c$AC`)TU|4TciVy#yH%I%KsJHVae6}7=|9KhG(!7 z=3QgfxEE?^XW~HIg2OO+t@$n6Ow>SqS4iX_aT{~vJ?w=~rHil2ADa)6&(@i#-iM)- z|A@KpGHR3FKrPv0)D-7kZ{8P?n2)#;YN_hmI0;!IpVNbcc7LXIHs&Gz5cMkl6xHxv z)MI!8b;Dm#9e;?y_!JwU>l5?avqskb*o^!)up)kos`nsJ&idEbU`EmlwVPA06plr0 zruo(l)&r;x|AZCrA!C;f*Nrv)Q4L#YUCcwiDOWY@nj7A{@+icI2j+HZny)( z@OvzXS5Z^_7Z$*$sD|==#xsoJsNFsY)y}J^4lG4o_p#02h-&XU>v{BPB)^lGhB-es z6=tJ)z63QRpP}}~K~&GPQ8&7VWzgAZ^2_4egbi>M9zq@jr|~B9>3RvZw7+0}yt9e* zk0J378R}`wW^<$R*oL?|R>v_|16QLSvokmqU)W-Ps=bIsh|6s?HbM=o3u?q^7=h!k z5Y9oBuh`1^>%tvmr~}!kO?4Wz2QHwVjepum^sK>gY36{ooyD zN(-X$qcH?yF#;=~2G|U>ljN;2UT&db*c3uJWBqjI22#rX>NEE zOAy~dwUcj`nSrv{o466Gqw`She}Ht*=d2PKzXRjBKBpw{{*YU(dx70kEC*f1cAHkgE7vGcG2?m#`)_pv_4d}XG- zC#oaq7>~2DCT_(S@i)|zC+#&aq%OFDxErb?IleYaPz;L_m%_Z<->FR^2AiTAUqr3- z%cwP5i0aS>7>kEd9lnKmvB*Ai;~3Nw$DwXm12wZPQET1J=BJ^Sd;T(U?rBq z?@;+SQB&&LZ>BmD7001E))>oTE7a1Zp_XJiYC!MeMBId0k{Soh4JP2%3Bk?*0X6}fY z$w<_aR6$LBQ)^eBO$@RXCZN`EHs-|zsHt0N-HLgL525OPkLu_}%z<}MGkV{~MR-ae&rOR>5)Qd;O zjZp2sgqb+R#y?>dJ^#Ow(3C}Fn=gsgu`=;<80aAuB%X=t&_dJ**Vz06n4kDZRL8Gk zPP~Ql@Gn&RvyPjNtU|T70YmlD-c3T!^`zDn%}6@!}8qU=|`dxPD4H4pQEPkr1h~i<_DAC3N__v zSOed+@qR2%d;FJK*v zK5a(c6&n*z$Ex@>*2TN10aQF=Zqymo{y0=eR@(U6Gt7S(G9Hjo4x`SR=ez~7Ih^sR zy|CJP64jxgb7m7(#VF$DsO$Tp_Qcu84>1C_U@<&`VR-c%^B+m#zO7jByxF}m z)*9B9Sb}=pu@R0$ZMJn-7&oKZIfy0klJyyCNuw^9=e`N5-gBr94fT=G5==$)Xg%si zyHL;fX)J_SQ5QVG5G?qUxp7fcc?BCcM9o-7EP~@P8s9=)zaBMX`%p9EyJQRQpn9I? zqInaRLp8kE`U&bW`_jfoP*Z&o)zEDl|AQJxflFq@F{rqfwH1~o?vCMl{>PBebN&XZ z;yl!iK0>{zHlt?fD;$P5QG2G>&t@c(uqg2Y)F#}3nz;+;#@{dtLob_G{S?%UT*G8N z|2eLhkv@-lYzCu7HV3uF@1r`n2I;Z03Dv+s8(%}sz+)Tdy=n$h3N_``P&3&Ui(@a; zp2?8h-h*7Pq_LwT>6dSy`^u8%R;*2aTSOFA0+pdU3e zx3M(-jlMi2qJJ?rD37Ix8(=f+i9K-vHpD+sGg0NbnVI_5=BSY-p_VWe)xiwZQqD$o za1oZpwWz1y=ym45I*IFK=mk;ySJQAS)RcBab+9k0!9kb{r(hh;K#h0<=ES2|0e?Wf zC;q{5Sm`&jhn~X_;)$sGul&aRD=~u%HT*W}#_!p9HEOLs#o9sq5Gsiu-ZWER<#$uR zIcjN=Q6nCRn#oMm()lqSSD`lVQLKn}eKw=iEz{!`7)*f|^&Uvanm8MEgD+7XJc$MH zs`Vb`CJw%BrZykyO&5o1uQ6(%%`gwPMLjjXWD?pGgRneipw@5^>hW8L`EeU+GabMj zcm;LCUy+G%{zT2-U#J^B#ZH*x556H|SNs}7@9K#uK;}M?cW>%+7vjUeOs?mv{qeCa$4o@F{A5g&%2P ztbZ92s!#(p6YWqV>1KTaHSz(dwVQ&PkyTg_H{xjAizBe%WAhlVMYX#h^|+n4@js|d zTkLPH=l)Jz5+$$=svre*!zrjGS&GGRKdPaNsI?1vVqQd%sE*aerq~;`L<_MpF2ff1 zEmp^ZPtDRbL!U;HXft}C;+Ie(^P<*rGB(H8P@Crf>M_c;{)no7-j@H4+Vu~x0OomS z1{8@}f;y=Dq-V^(F6?Cs(y$!yWOU;yOu+r98OZUE`Cd>8>k)UrhWIL0!`;{jZ(A!l zuD}2Wp|1C$Htp-E4$g6WuE6K>3NrM3?nh1eAJ#~hD=@XqtOGDs4Ol-$jpzt!X)a@J z3}L56yXYL&BJLUNat0C4!luOca=4rf;@Z9tSKzT&ozoSV+TpoO&&Hspcm`@yzJ=kq z$d+$F?czPym4=R^mZltkrIgiCFRq4IhVqW6fsM-R3hc23sB+&n5?b?bQB!gTwInxD zH+W*>{GqPEnnk1XE2BD;fH9bix_*=`pK9ZGQ8V-*s@?6V&3YJ_NuP6@gx0(;f6`Kg z1{jHns2ilBdOjL;gQck5{VD2QzZvz0ynwB+P=0gW^QcWW1iRxnR7Z}YHuV*(!2O*Y zB(!OY@K-}!(8c;9szYAXb37TJd7gViOF~x zb$z99SK#BjCTa;1(5J^Cg@i^p1a;#ns9o+yZNe?6dOJ`J@58cq3F~6cBBmn=$dl@L za0(76YL@C6Rw2HDdeIdxX6{$Jn9CQqaeFdUkcztTB-GTsk9sV3qCSj%L2cH1HV%q# z1%5?S5I-Tm9csoNU|!4_Y3dh34I~EL7>AmXHjzC4+RYuw(8&6s9*gm)HJ*)Xa5?HR z{M5!fP)l|gb^TdXhi{@@GM%k!ce-(4#Gc1ic zOPCQ92jVqu!Tn9B%38)Tqz*E=*+hKKHhpIOYwUkqkj`^H7Nodn8 zLyhb+)Kncr&A=b1krggwW+Dm)633&a@NLu#ZbuE^DC)Yi)~Bce#l)EW*49B-Skz&c+snVLHrOa zqLv~Xb=^5s`&Y3l-bbHC5Lec&A*v$@s8?lY)CdNk8>gZ=vJ!Q}ji~GQpgNL`daQmy z-S`%2AdgT>5*BCb)kMueyEvYIReX+&CfFC%v&C2q52L=p{EbzxLOE0Kd8|%67gKRR zx-q`Ixp5MzL)}q(V<_se^r5~tEWlcrUEXIlQAh=|2dbksQFn~M6x4^xIMlA+g&O%@ z)Nam3&Dd$1e*-mRk5D6zj5oWz8Y*s#TB5F~rSSSlr~#>l=b%Qm4D}{FhFZJ3sHuN~ z>PTosSKwQ37^U-hUrzzr{P?z zK%9*{fzD&p?vJeI3j6^g8TGWRLFH%T5X@WM75H0H7V1Ol2~NNgHO!LELtVEYXXyFA zMPfD?V{5tsU!QZTA%>G{7)LTlsHHA@hI8hIRQMmnK3&nVPpeFL?2^H7`XBh=Hf9rZLE!(hB< zy@H9v*D)Sz)-xa1FJPjc|EVMz;CI*obJaIf)eZHSyo&0;o2Uj>qn`ic7>Tz~n<`fW z)8SZbM%)@TuxY40vII3ln^7~e2YpJMAfe5774<207j=WMh9<6ziW99KREMUZ-sOu> zGqD=g;T<>#_oFsj)kfwO+#B`j`ZDT%{zg3idN(g8Lu+!tdLH!{-Nn^dxUuQLc2oy{ zL~X8ns16iPFmVjJi4#yu*bg-W({U*-#W^Z(;&S%k(I!0q+GKN^njS4gt?g>m2)Cg& z-wEqE>_&VQYh%M^X6Z)Y3gR`m2|G4-1^zdjpcdw{ql~VH)xzI?M0{;-jrx&O2DSwOOLwsCp+*GvvET zq6&$kZCrt0CbvYr8naNldJXo$U8vn(qODouIBPZ3k~F|fd>%EUhf(#9p$2x==KqFz zJZ~dQ=yM*}jH2z#NTX4Ep&Y6MjZr;LMm0PHwdNyG4NpXErZ@0DF2K3?cB1*FQ!dHu zjmoIKkc67C6dbDOe;f(*^eP779~gpnQJd@$>WvlA-n?R)qMimXYLm`H?fNyy%m)q+ ziGq3w{O71a978PwPjxTKJ1LDC4`sHTsX=-z7T?bJ@l=ksd&L0QHxn+g`7x z9}p{S&Odr74pG4QDd~R?7S35f8z(tibFLsRt$G~$h#TY4AZDUB!Cg)rA-2Lj(k*RT z`8{p9(t6}|d`W|CY@Lnv#%a`RN!d#_K1+J)f3DSaH;LC!zKQf(L2QaLG}6?c&@dwP zlC4^wqWh$;VixBMqS!B|+ zO`ZLyBNsgzPx=by3d&ua6G?BttDOHHjcvNS&3Gw@W+S*blk+i!2Pyc-R(hU1ZPEGm zCeg$?^rq-Vol?Y?ZQUuP_xaB^ib?5eYo&74Fw#vpJ8~B1{Ddp3tBL;{wa9NqD?>Q- z&bfgfV-@nhw5{_3b{2AWBfpTpZ{sq_^C|g(^DMbVIrnht$Rux6cBl=t#aY8v6IOb&0Bz-QtJO2$$0kXT1U&RzD(YozZ`S4TSD;;c?xes~NV=ZS-C zc`Nc?A^#QJOKCOo{rD>OGS!`dq~n9^oOhx!-#DBlWa^VfM>rP`!^-%Ty-97#+i*T2 z|1M`&@-GtC<$Q;92kPo@6YGfak7`yaq&iVU|MF(xzG9^M+dA)4zZ&UcHXe*4xJDoP zuiLyX*n?}zkXMH^U-6yYr1O!t5O))2a<1n5_n1uCzsH&Xq{*uo$S-I!T{QSB=|`L$ zY2Xy+9((0ff8XXYzL%&GVw;{otsvqv)VRR8nDcweZgGZ^R-=FL&j*~Toae|d!}&X> zj(&Jfl{hkJN8f!K1tLCFDSLymi?;4e%Ae{t+tWx4_q$qzM{lLLg1!7_Tu;^4DAn;l z{u(X9TR$e}7EuDZ*QoJ7Ww>jsKdWW6gbd;*_L_dw$-{Y(YgUr?BF@HTwypfuw$$lM{$Bs3mf^k` zM9)(aiE)_CRXScI9z)#RUR9pFM&y0Vm6rlF%s(#^PqB5rz-43)!|mj|@omh>S%A|= z89x^Wj^Bwn3OJ!8_`x7>1pBA73h(owq@f<>-dZEI~YuU z6zS!p`(QgfKwcBhV#N12>-g`qib#Ay>Ss!Iw4zkUA?rZObX>NUBEKPen{wARsw zcsS)>_>)_gi7rWv=H$LXZY6T36X(GH;q339(>kJ1b8;F`!-L((9qQlKIwoWQ(P;nq z)=}}pNEP91P1zFawdVYl^sAgPwE7+K=cFt8OScJ+zD>Jw914^oL{>JI0 z^m&{{jY5>=<~*v)IrzrxyhzzH&YPrl^u(i_&8SzN{2w{XlD0#oxDWM097OahzXMy3v+Q!Q0d*?4Q#%CSfO07fNGM zKiPzl9!>f=(x)(mo9ZY^I*ar%$|u{r)BfMvM#a~lqyjlnoZ*yCBTgk<8g~${<9wC) zAAgN@Q6X)~t?5s07ZF#Uynl~&)cKop1f}cAd<|<;zSuvzUBvK7q}q}5fOGnPu4<&( zobg<#ACAV8){#h^N+#)aB5$3|FM)BC&7nTOhY1{qaSr(lZJk(up~NU(Z)(-!e4aYp za0KVS$7*U`x3!h`H|d;|PqcZD$*XDW*P->}|EZgs^is-;Qho~cqn(bIi3?D-1nCW2 z9?0BpFZ_Y%Q_^*C8|OOCr?#vl7jEamB>(xuGSLS}`RuKyl5TI)T;NRfM<1S=3Hw5N=I`=IB`6F%BdqS@vQ&!c^h$(jlZ!y^4d09VnfbO zT=xn#!&&$q=f6in5c?vF3*RC02DwrGDec4KZjh6UoOIiC71Cok>r!K&&3m|UTl=v! z{kN8u^8Yls*v9IU>$c6+d_cMhWe}j^8+Y-=-YFY3T#}Z4Uhsu;$^W z0Y@KxL9Y1maPY=cM`H6=AD@-6cjfqDY5fO#GTd!E!v?rL=^2@xVZ%ILr$wMKPx=7Q zz%*}~Cq0uY8}pp&;Y#eSt1``H?p7(89`8Ud^`!rwm$Vs?K0Iq!%Kug9UNQ1~P!V?z z+IA1zyCdD*(UU&NQ>9zVppCwtCc0eijZZG_3UX!mw_hGq;J-J`aQoX_Da&~;%H1ht zxF^1C8&_m~kh<4?I)val!3 zJ20jHV0YRe?}&8f$m89({$5D#`~%ZHX>RqU>&TSh{vA*5=jxEgyn5aK&!5hmzo4uu zVPm6buLkEJXY~A?F4x4)Z8ZKs_iW9fd$)MKln0jR|CnrdmUn=eFgFvH;T{xNu1xnB zt(bS~tRUCAg3-xYT1zvzBgIR3^sj$x>g^yqW2HR}S*b|0vcqAeTGC z!|ZyuhL&-a2rf5p#IQlkAyaGCg!&bRGTZLh)Dc#3a)rp>A-z6HJ$DODH&DWNuB|0-v7+x{KfIEN+El9qD?e{rav;A+F)`Pc?DXjBV~6ID%D7 Wr#ij<-+gE{pc>g)zNu?T=>G!;cb9hn delta 19375 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 Date: Fri, 28 Jun 2019 18:56:41 +0200 Subject: [PATCH 479/483] add more translations to german, modify some others --- languages/de_DE.mo | Bin 84915 -> 86640 bytes languages/de_DE.po | 185 ++++++++++++++++++++++++++++++--------------- 2 files changed, 123 insertions(+), 62 deletions(-) diff --git a/languages/de_DE.mo b/languages/de_DE.mo index 502a6f44db15e95304df711d94943fcced2e7d61..419808d4254c4b14f87f7b8b92a9ad222f5010c6 100644 GIT binary patch delta 21410 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 E3-X0(t^fc4 delta 19754 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 diff --git a/languages/de_DE.po b/languages/de_DE.po index c143d28d..b5f10985 100644 --- a/languages/de_DE.po +++ b/languages/de_DE.po @@ -58,7 +58,7 @@ msgstr "Blacklist" #: views/blacklist.hbs:4 views/users/api.hbs:55 msgid "Add email to blacklist" -msgstr "E-Mail zur Blacklist hinzufügen" +msgstr "E-Mail Adresse zur Blacklist hinzufügen" #: views/blacklist.hbs:5 msgid "Add" @@ -151,7 +151,7 @@ msgstr "SMTP Antwort" #: views/campaigns/bounced.hbs:11 msgid "Bounce time" -msgstr "Bouncen Zeitpunkt" +msgstr "Bounce Zeitpunkt" #: views/campaigns/campaigns.hbs:3 views/campaigns/create-triggered.hbs:25 #: views/campaigns/create.hbs:3 views/campaigns/create.hbs:4 @@ -289,8 +289,8 @@ msgid "" "new entry is found from this feed it is sent to selected list as an email " "message." msgstr "" -"RSS-Kampagne setzt einen Tracker gegen den gewählten RSS-Feed. Wenn ein " -"neuer Eintrag aus diesem Feed gefunden wird, wird er als E-Mail an die " +"Eine RSS-Kampagne setzt einen Tracker auf den gewählten RSS-Feed. Wenn ein " +"neuer Eintrag in diesem Feed gefunden wird, wird er als E-Mail an die " "ausgewählte Liste gesendet." #: views/campaigns/create-rss.hbs:7 views/campaigns/create-triggered.hbs:6 @@ -363,21 +363,21 @@ msgstr "" #: views/campaigns/edit-triggered.hbs:16 views/campaigns/edit.hbs:17 #: views/campaigns/view.hbs:12 msgid "Email \"from name\"" -msgstr "E-Mail \"von\" Name" +msgstr "E-Mail \"von Name\"" #: views/campaigns/create-rss.hbs:16 views/campaigns/create-triggered.hbs:19 #: views/campaigns/create.hbs:19 views/campaigns/edit-rss.hbs:19 #: views/campaigns/edit-triggered.hbs:17 views/campaigns/edit.hbs:18 #: views/settings.hbs:23 msgid "This is the name your emails will come from" -msgstr "Dies ist Absendernamen Ihrer E-Mails" +msgstr "Dies ist der Absendername Ihrer E-Mails" #: views/campaigns/create-rss.hbs:17 views/campaigns/create-triggered.hbs:20 #: views/campaigns/create.hbs:20 views/campaigns/edit-rss.hbs:20 #: views/campaigns/edit-triggered.hbs:18 views/campaigns/edit.hbs:19 #: views/campaigns/view.hbs:13 msgid "Email \"from\" address" -msgstr "E-Mail \"von\" Adresse" +msgstr "E-Mail \"von Adresse\"" #: views/campaigns/create-rss.hbs:18 views/campaigns/create-triggered.hbs:21 #: views/campaigns/edit-rss.hbs:21 views/campaigns/edit-triggered.hbs:19 @@ -386,10 +386,16 @@ msgid "This is the address people will send replies to" msgstr "Dies ist die Reply-To Adresse" #: views/campaigns/create-rss.hbs:19 views/campaigns/create-triggered.hbs:24 -#: views/campaigns/create.hbs:26 views/campaigns/edit-rss.hbs:22 -#: views/campaigns/edit-triggered.hbs:22 views/campaigns/edit.hbs:25 -msgid "Disable clicked/opened tracking" -msgstr "Tracking deaktivieren" +#: views/campaigns/create.hbs:28 views/campaigns/edit-rss.hbs:22 +#: views/campaigns/edit-triggered.hbs:22 views/campaigns/edit.hbs:27 +msgid "Disable opened tracking" +msgstr "Deaktiviere das Tracking beim Öffnen der E-Mail (Zählpixel)" + +#: views/campaigns/create-rss.hbs:20 views/campaigns/create-triggered.hbs:25 +#: views/campaigns/create.hbs:29 views/campaigns/edit-rss.hbs:23 +#: views/campaigns/edit-triggered.hbs:23 views/campaigns/edit.hbs:28 +msgid "Disable clicked tracking" +msgstr "Deaktiviere das Tracking beim Klicken von Links" #: views/campaigns/create-triggered.hbs:3 #: views/campaigns/create-triggered.hbs:4 @@ -410,12 +416,12 @@ msgstr "Vorlage auswählen:" #: views/campaigns/create-triggered.hbs:15 views/campaigns/create.hbs:15 msgid "Selecting a template creates a campaign specific copy from it" msgstr "" -"Wenn Sie eine Vorlage auswählen, wird eine kampagenspezifische Kopie erstellt" +"Wenn Sie eine Vorlage auswählen, wird eine Kopie nur für diese Kampagne erstellt" #: views/campaigns/create-triggered.hbs:16 views/campaigns/create.hbs:16 msgid "Or alternatively use an URL as the message content source:" msgstr "" -"Oder alternativ können Sie eine URL als E-Mail-Inhalts-Quelle verwenden:" +"Oder alternativ können Sie eine URL als Quelle für den E-Mail Inhalt verwenden:" #: views/campaigns/create-triggered.hbs:17 views/campaigns/create.hbs:17 #: views/campaigns/edit-triggered.hbs:25 views/campaigns/edit.hbs:28 @@ -431,13 +437,13 @@ msgstr "" #: views/campaigns/edit-triggered.hbs:20 views/campaigns/edit.hbs:23 #: views/campaigns/view.hbs:15 msgid "Email \"subject line\"" -msgstr "E-Mail-Betreffzeile" +msgstr "E-Mail Betreffzeile" #: views/campaigns/create-triggered.hbs:23 views/campaigns/create.hbs:25 #: views/campaigns/edit-triggered.hbs:21 views/campaigns/edit.hbs:24 #: views/settings.hbs:27 msgid "Keep it relevant and non-spammy" -msgstr "Halten Sie den Inhalt relevant und non-spammy" +msgstr "Halten Sie den Inhalt relevant und frei von Spam" #: views/campaigns/create.hbs:21 views/campaigns/edit.hbs:20 msgid "" @@ -445,7 +451,7 @@ msgid "" "set" msgstr "" "Dies ist die Adresse, an welche Antworten gesendet werden, ausser die " -"Kampagnenspezifische reply-to Adresse ist definiert" +"Kampagnenspezifische \"reply-to\" Adresse ist definiert" #: views/campaigns/create.hbs:22 views/campaigns/edit.hbs:21 #: views/campaigns/view.hbs:14 @@ -458,15 +464,23 @@ msgstr "" "Falls gesetzt, ist dies die Adresse an welche E-Mail-Antworten gesendet " "werden" +#: views/campaigns/create.hbs:26 views/campaigns/edit.hbs:25 +msgid "Custom unsubscribe (URL)" +msgstr "Benutzerdefiniertes Deabonnement (URL)" + +#: views/campaigns/create.hbs:27 views/campaigns/edit.hbs:26 +msgid "Set a custom unsubscribe url" +msgstr "Geben Sie eine eigene URL an, die den Abonnenten zum Abmelden angezeigt wird" + #: views/campaigns/delivered.hbs:3 views/campaigns/delivered.hbs:4 msgid "Delivered info" -msgstr "Zustellungs-Info" +msgstr "Zustellungs Info" #: views/campaigns/delivered.hbs:6 msgid "Subscribers who received the message and did not bounce/unsubscribe:" msgstr "" -"Abonnenten, welche die Nachricht erhalten haben und nicht bounced oder " -"abbestellen:" +"Abonnenten, welche die Nachricht erfolgreich erhalten (kein \"bounce\") und " +"nicht deabonniert haben:" #: views/campaigns/delivered.hbs:11 msgid "Delivery time" @@ -516,7 +530,7 @@ msgstr "Generell" #: views/campaigns/edit-triggered.hbs:23 views/campaigns/edit.hbs:26 msgid "Template Settings" -msgstr "Vorlagen-Einstellungen" +msgstr "Vorlagen Einstellungen" #: views/campaigns/edit-triggered.hbs:24 views/campaigns/edit.hbs:27 msgid "Template URL" @@ -568,7 +582,7 @@ msgstr "Anzahl Öffnungen" #: views/campaigns/unsubscribed.hbs:3 views/campaigns/unsubscribed.hbs:4 msgid "Unsubscribed info" -msgstr "Abmeldungs-Info" +msgstr "Deabonnement Info" #: views/campaigns/unsubscribed.hbs:6 msgid "Subscribers who unsubscribed:" @@ -577,7 +591,7 @@ msgstr "Abonnenten welche deabonnierten:" #: views/campaigns/unsubscribed.hbs:11 views/campaigns/view.hbs:28 #: views/lists/subscription/import.hbs:10 routes/lists.js:202 msgid "Unsubscribed" -msgstr "Abbestellt" +msgstr "Deabonniert" #: views/campaigns/upload-attachment.hbs:7 msgid "Upload" @@ -619,7 +633,7 @@ msgstr "Kampagnen Vorschau als" #: views/campaigns/view.hbs:17 msgid "Add new test user" -msgstr "Neuen Test-User hinzufügen" +msgstr "Neuen Testbenutzer hinzufügen" #: views/campaigns/view.hbs:18 msgid "No test users yet, create one here" @@ -643,7 +657,7 @@ msgstr "Blacklisted" #: views/campaigns/view.hbs:23 msgid "List subscribers who blacklisted by global blacklist" -msgstr "" +msgstr "Abonnenten, die von der globalen Blacklist aufgelistet wurden" #: views/campaigns/view.hbs:24 routes/lists.js:202 msgid "Bounced" @@ -685,7 +699,7 @@ msgstr "Abonnenten, die auf einen Link geklickt haben" msgid "" "Are you sure? This action would start sending messages to the selected list" msgstr "" -"Sind Sie sicher? Diese Aktion würde mit dem Senden von Nachrichten an die " +"Sind Sie sicher? Diese Aktion wird mit dem Senden von Nachrichten an die " "ausgewählte Liste beginnen" #: views/campaigns/view.hbs:35 @@ -706,7 +720,7 @@ msgstr "An Abonnenten senden:" #: views/campaigns/view.hbs:39 msgid "Are you sure? This action would reset scheduling" -msgstr "Sind Sie sicher? Diese Aktion würde die Terminierung zurücksetzen" +msgstr "Sind Sie sicher? Diese Aktion wird die Terminierung zurücksetzen" #: views/campaigns/view.hbs:40 msgid "Cancel" @@ -728,7 +742,7 @@ msgstr "Am senden" msgid "" "Are you sure? This action would resume sending messages to the selected list" msgstr "" -"Sind Sie sicher? Diese Aktion würde das Senden von E-Mails an die " +"Sind Sie sicher? Diese Aktion wird das Senden von E-Mails an die " "ausgewählte Liste fortsetzen" #: views/campaigns/view.hbs:45 views/campaigns/view.hbs:49 @@ -762,7 +776,7 @@ msgid "" "Are you sure? This action would pause sending new entries in RSS feed as " "email messages to the selected list" msgstr "" -"Sind Sie sicher? Diese Aktion würde das Senden neuer Einträge des RSS-Feed " +"Sind Sie sicher? Diese Aktion wird das Senden neuer Einträge des RSS-Feed " "als E-Mail-Nachrichten an die ausgewählte Liste pausieren" #: views/campaigns/view.hbs:55 views/campaigns/view.hbs:59 @@ -830,7 +844,7 @@ msgstr "Ändern Sie Ihr Passwort" #: views/emails/password-reset-text.hbs:2 msgid "We have received a password change request for your Mailtrain account:" msgstr "" -"Wir haben eine Passwortänderungsanforderung für Ihr Mailtrain-Konto erhalten:" +"Wir haben eine Anforderung zur Passwortänderungs für Ihr Mailtrain-Konto erhalten:" #: views/emails/password-reset-html.hbs:3 #: views/emails/password-reset-text.hbs:3 @@ -843,8 +857,8 @@ msgid "" "If you did not ask to change your password, then you can ignore this email " "and your password will not be changed." msgstr "" -"Wenn Sie nicht angefordert haben, Ihr Passwort zu ändern, können Sie diese E-" -"Mail ignorieren und Ihr Passwort wird nicht geändert." +"Wenn Sie Ihr Passwort nicht ändern wollen, können Sie diese E-" +"Mail einfach ignorieren." #: views/emails/rss-html.hbs:1 views/emails/stationery-html.hbs:3 #: views/emails/stationery-text.hbs:3 @@ -864,7 +878,7 @@ msgstr "Newsletter abbestellen" #: views/emails/rss-html.hbs:3 views/emails/stationery-html.hbs:5 #: views/emails/stationery-text.hbs:5 msgid "View this email in your browser" -msgstr "E-Mail in Browser ansehen" +msgstr "E-Mail im Browser ansehen" #: views/emails/stationery-html.hbs:1 views/emails/stationery-text.hbs:1 msgid "Hey [FIRST_NAME/Customer]," @@ -885,10 +899,10 @@ msgid "" "API or import from a CSV file. All lists come with support for custom fields " "and merge tags as well." msgstr "" -"Mailtrain ermöglicht es Ihnen, auch sehr große Listen zu verwalten. Million " +"Mailtrain ermöglicht es Ihnen, auch sehr große Listen zu verwalten. Millionen von " "Abonnenten? Kein Problem. Sie können Abonnenten manuell über die API " -"hinzufügen oder aus einer CSV-Datei importieren. Alle Listen kommen mit " -"Unterstützung für benutzerdefinierte Felder und Merge-Tags." +"hinzufügen oder aus einer CSV-Datei importieren. Für alle Listen können " +"zusätzliche Datenfelder und Merge Tags genutzt werden." #: views/index.hbs:3 views/index.hbs:7 views/index.hbs:10 views/index.hbs:13 #: views/index.hbs:16 views/index.hbs:19 views/index.hbs:22 views/index.hbs:25 @@ -900,7 +914,7 @@ msgstr "Zeige mehr" #: views/lists/fields/edit.hbs:3 views/lists/fields/fields.hbs:3 #: views/lists/fields/fields.hbs:5 views/lists/view.hbs:6 msgid "Custom Fields" -msgstr "Zusätzliche Felder" +msgstr "Zusätzliche Datenfelder" #: views/index.hbs:5 msgid "" @@ -908,8 +922,8 @@ msgid "" "Every custom field can be included in the generated newsletters through " "merge tags." msgstr "" -"Textfelder, Nummern, Dropdowns oder Checkboxen, Mailtrain hat sie alle. " -"Jedes benutzerdefinierte Feld kann in den generierten Newslettern mittels " +"Textfelder, Nummern, Dropdowns oder Checkboxen, Mailtrain bietet all das. " +"Jedes zusätzliche Feld kann in den generierten Newslettern über " "Merge-Tags eingebunden werden." #: views/index.hbs:6 @@ -918,7 +932,7 @@ msgstr "Mailtrain bietet auch benutzerdefinierte Formulare." #: views/index.hbs:8 msgid "List Segmentation" -msgstr "Segmentierung" +msgstr "Listen Segmentierung" #: views/index.hbs:9 msgid "" @@ -939,13 +953,13 @@ msgid "" "then Mailtrain auto-generates a new campaign using entry data as message " "contents and sends it to selected subscribers." msgstr "" -"Mailtrain kann RSS-Feeds verfolgen, und wenn ein neuer Eintrag in einem Feed " -"erkannt wird, sendet Mailtrain automatisch eine neue Kampagne mit dem RSS-" -"Beitrag als Nachrichteninhalt an die ausgewählte Liste." +"Mailtrain kann RSS-Feeds verfolgen und bei neuen Einträgen automatisch " +"eine neue Kampagne mit dem RSS-Beitrag als Nachrichteninhalt an die " +"ausgewählte Liste senden." #: views/index.hbs:14 msgid "GPG Encryption" -msgstr "GPG-Verschlüsselung" +msgstr "GPG Verschlüsselung" #: views/index.hbs:15 msgid "" @@ -954,7 +968,7 @@ msgid "" msgstr "" "Wenn für eine Liste ein benutzerdefiniertes Feld für den GPG-Public-Key " "vorhanden ist, können Abonnenten ihren GPG-Public-Key hochladen, um " -"verschlüsselte E-Mails der Liste zu empfangen." +"alle E-Mails verschlüsselt zu erhalten." #: views/index.hbs:17 msgid "Click Stats" @@ -984,7 +998,7 @@ msgstr "" #: views/index.hbs:23 msgid "Send via Any Provider" -msgstr "Sende mit" +msgstr "Sende mit beliebigen Anbietern" #: views/index.hbs:24 msgid "" @@ -1015,7 +1029,7 @@ msgstr "" #: views/index.hbs:29 msgid "Donate to Author" -msgstr "Dem Autor Spenden" +msgstr "Dem Autor spenden" #: views/index.hbs:30 msgid "Mailtrain is available under GPLv3 license and completely open source." @@ -1127,6 +1141,15 @@ msgstr "Name der Liste" msgid "Allow public users to subscribe themselves" msgstr "Allen erlauben, diese Liste selbst zu abonnieren" +#: views/lists/create.hbs:11 views/lists/edit.hbs:17 +msgid "Unsubscription" +msgstr "Deabonnement" + +#: views/lists/create.hbs:12 views/lists/edit.hbs:18 +msgid "Select how an unsuscription request by subscriber is handled." +msgstr "" +"Wählen Sie, welche Schritte zum Abmelden von der Liste notwendig sein sollen." + #: views/lists/edit.hbs:3 views/lists/edit.hbs:4 views/lists/view.hbs:8 msgid "Edit List" msgstr "Liste bearbeiten" @@ -1145,7 +1168,7 @@ msgstr "Diese Listen ID wird den Abonnenten dargestellt" #: views/lists/edit.hbs:12 msgid "Custom Form" -msgstr "Formular" +msgstr "Benutzerdefiniertes Formular" #: views/lists/edit.hbs:13 views/lists/forms/forms.hbs:11 msgid "Default Mailtrain Form" @@ -1153,11 +1176,18 @@ msgstr "Standard Mailtrain Formular" #: views/lists/edit.hbs:14 msgid "" -"The custom form used for this list. You can create a form here." +"The custom form used for this list. You can create a form here." msgstr "" -"Das Standard-Formular dieser Liste. Wenn Sie ein Formular erstellt möchten, " -"klicken Sie hier." +"Das Standard-Formular dieser Liste. Wenn Sie ein benutzerdefiniertes Formular " +"erstellen möchten, klicken Sie hier." + +#: views/lists/edit.hbs:19 +msgid "Unsubscribe Header" +msgstr "Deabonnement Header" + +#: views/lists/edit.hbs:20 +msgid "Do not send List-Unsubscribe headers" +msgstr "Sende keine Header zum Abmelden von der Liste" #: views/lists/edit.hbs:16 msgid "Delete List" @@ -1169,7 +1199,7 @@ msgstr "Feld erstellen" #: views/lists/fields/create.hbs:5 views/lists/fields/fields.hbs:4 msgid "Create Custom Field" -msgstr "Feld erstellen" +msgstr "zusäzliches Feld erstellen" #: views/lists/fields/create.hbs:6 views/lists/fields/create.hbs:7 #: views/lists/fields/edit.hbs:7 views/lists/fields/edit.hbs:8 @@ -1247,7 +1277,7 @@ msgstr "Dropdown" #: views/lists/fields/create.hbs:23 views/lists/fields/edit.hbs:24 #: lib/models/fields.js:22 msgid "Radio Buttons" -msgstr "Radio Knöpfe" +msgstr "Radio Buttons" #: views/lists/fields/create.hbs:24 views/lists/fields/edit.hbs:25 #: lib/models/fields.js:23 @@ -1270,7 +1300,7 @@ msgstr "Erforderlich für Gruppenoptionen" #: views/lists/fields/edit.hbs:35 views/lists/fields/edit.hbs:36 #: views/lists/fields/fields.hbs:9 msgid "Default merge tag value" -msgstr "Standard-Merge-Tag-Wert" +msgstr "Standard Wert für Merge-Tag" #: views/lists/fields/create.hbs:32 views/lists/fields/edit.hbs:34 msgid "" @@ -1305,7 +1335,7 @@ msgstr "Feld bearbeiten" #: views/lists/fields/edit.hbs:5 msgid "Edit Custom Field" -msgstr "Feld bearbeiten" +msgstr "Zusätzliches Feld bearbeiten" #: views/lists/fields/edit.hbs:6 msgid "Back to fields" @@ -1347,7 +1377,7 @@ msgstr "Bearbeiten" #: views/lists/forms/forms.hbs:3 views/lists/forms/forms.hbs:5 #: views/lists/view.hbs:5 msgid "Custom Forms" -msgstr "Formulare" +msgstr "Benutzerdefinierte Formulare" #: views/lists/forms/create.hbs:4 msgid "Create Form" @@ -1355,7 +1385,7 @@ msgstr "Formular erstellen" #: views/lists/forms/create.hbs:5 views/lists/forms/forms.hbs:4 msgid "Create Custom Form" -msgstr "Formular erstellen" +msgstr "Benutzerdefiniertes Formular erstellen" #: views/lists/forms/create.hbs:6 views/lists/forms/create.hbs:7 #: views/lists/forms/edit.hbs:7 views/lists/forms/edit.hbs:8 @@ -1807,7 +1837,7 @@ msgstr "Deaktiviert" #: views/lists/view.hbs:3 msgid "Subscription Form" -msgstr "Abonnement-Formular" +msgstr "Abonnement Formular" #: views/lists/view.hbs:4 msgid "List Actions" @@ -1838,7 +1868,7 @@ msgstr "Filter" #: views/lists/view.hbs:17 msgid "Subscriptions" -msgstr "Abonnemente" +msgstr "Abonnements" #: views/lists/view.hbs:18 msgid "Imports" @@ -2107,7 +2137,7 @@ msgstr "Wenn markiert zeigt der Editor HTML-Code ohne Vorschau an" #: views/settings.hbs:11 msgid "Disable subscription confirmation messages" -msgstr "Abonnement-Bestätigungsmeldungen deaktivieren" +msgstr "Bestätigungsmeldungen für Abonnements deaktivieren" #: views/settings.hbs:12 msgid "" @@ -2785,6 +2815,10 @@ msgstr "Optionale Kommentare zu dieser Vorlage" msgid "Back to templates" msgstr "Zurück zu Vorlagen" +#: views/templates/edit.hbs:11 +msgid "Duplicate" +msgstr "Duplizieren" + #: views/triggers/create-select.hbs:2 views/triggers/create.hbs:2 #: views/triggers/edit.hbs:2 views/triggers/triggered.hbs:2 #: views/triggers/triggers.hbs:2 views/triggers/triggers.hbs:4 @@ -3072,7 +3106,7 @@ msgstr "" #: views/users/api.hbs:28 msgid "Remove subscription" -msgstr "Abonement entfernen" +msgstr "Abonnement entfernen" #: views/users/api.hbs:29 msgid "This API call marks a subscription as unsubscribed" @@ -3493,7 +3527,7 @@ msgstr "Abonnement-ID fehlt" #: lib/models/subscriptions.js:499 msgid "Missing Subscription email address" -msgstr "Abonnement-E-Mail-Adresse fehlt" +msgstr "Abonnement E-Mail Adresse fehlt" #: lib/models/subscriptions.js:578 lib/models/subscriptions.js:827 #: lib/models/subscriptions.js:1090 @@ -4108,6 +4142,33 @@ msgstr "Import gestartet" msgid "Import restarted" msgstr "Import neu gestartet" +#: routes/lists.js:797 +msgid "One-step (i.e. no email with confirmation link)" +msgstr "Ein Schritt ohne Formular (direkt nach dem Klicken auf den Link erfolgt die Abmeldung)" + +#: routes/lists.js:803 +msgid "" +"One-step with unsubscription form (i.e. no email with confirmation link)" +msgstr "" +"Ein Schritt mit Formular (nach dem Klick wird ein Formular mit der E-Mail Adresse angezeigt)" + +#: routes/lists.js:809 +msgid "Two-step (i.e. an email with confirmation link will be sent)" +msgstr "Zwei Schritte ohne Formular (direkt nach dem Klick auf den Link wird eine E-Mail mit Bestätigungslink versendet)" + +#: routes/lists.js:815 +msgid "" +"Two-step with unsubscription form (i.e. an email with confirmation link will " +"be sent)" +msgstr "" +"Zwei Schritte mit Formular (nach dem Klick wird ein Formular mit der E-Mail Adresse " "angezeigt, dann wird eine E-Mail mit Bestätigungslink versendet)" + +#: routes/lists.js:821 +msgid "" +"Manual (i.e. unsubscription has to be performed by the list administrator)" +msgstr "" +"Manuell (die Abmeldung muss durch den Listen Admin vorgenommen werden)" + #: routes/report-templates.js:246 msgid "Could not create report template" msgstr "Report-Vorlage konnte nicht erstellt werden" From 0a0eb0db4f018b44f677c25941b2bf784ebae1eb Mon Sep 17 00:00:00 2001 From: Andreas Teuber Date: Tue, 16 Jul 2019 17:46:06 +0200 Subject: [PATCH 480/483] Bugfix: include list segment when saving in Mosaico --- views/mosaico/editor.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/mosaico/editor.hbs b/views/mosaico/editor.hbs index 12c9f4f9..ccea891a 100644 --- a/views/mosaico/editor.hbs +++ b/views/mosaico/editor.hbs @@ -111,7 +111,7 @@ $.post('/editorapi/update?type={{type}}&editor={{resource.editorName}}', { id: {{resource.id}}, name: '{{resource.name}}', - {{#if resource.list}} list: {{resource.list}}, {{/if}} + {{#if resource.list}} list: {{resource.list}}+':'+{{resource.segment}}, {{/if}} html: html, editorData: JSON.stringify({ template: '{{resource.editorData.template}}', From b7f94b40d6d7d1a4d0b28e3084ce60d1a47c5401 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Mon, 13 Jul 2020 10:00:25 +0300 Subject: [PATCH 481/483] Use proper escaping for variable column names --- lib/models/campaigns.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index f2410763..9bdc4710 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -60,10 +60,10 @@ module.exports.statsClickedSubscribersByColumn = (campaign, linkId, request, col return callback(err); } - let query_template = 'SELECT %s AS data, COUNT(*) AS cnt FROM `subscription__%d` JOIN `campaign_tracker__%d` ON `campaign_tracker__%d`.`list`=%d AND `campaign_tracker__%d`.`subscriber`=`subscription__%d`.`id` AND `campaign_tracker__%d`.`link`=%d GROUP BY `%s` ORDER BY COUNT(`%s`) DESC, `%s`'; + let query_template = 'SELECT ?? AS data, COUNT(*) AS cnt FROM `subscription__%d` JOIN `campaign_tracker__%d` ON `campaign_tracker__%d`.`list`=%d AND `campaign_tracker__%d`.`subscriber`=`subscription__%d`.`id` AND `campaign_tracker__%d`.`link`=%d GROUP BY ?? ORDER BY COUNT(??) DESC, ??'; let query = util.format(query_template, column, campaign.list, campaign.id, campaign.id, campaign.list, campaign.id, campaign.list, campaign.id, linkId, column, column, column); - connection.query(query, (err, rows) => { + connection.query(query, [column, column, column, column], (err, rows) => { connection.release(); if (err) { return callback(err); From be55f2ca528b306b7ea22fb7bf7527747cd95d52 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Mon, 13 Jul 2020 12:50:34 +0300 Subject: [PATCH 482/483] remove extra variables from format call --- lib/models/campaigns.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index 9bdc4710..2db3a8d8 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -61,7 +61,7 @@ module.exports.statsClickedSubscribersByColumn = (campaign, linkId, request, col } let query_template = 'SELECT ?? AS data, COUNT(*) AS cnt FROM `subscription__%d` JOIN `campaign_tracker__%d` ON `campaign_tracker__%d`.`list`=%d AND `campaign_tracker__%d`.`subscriber`=`subscription__%d`.`id` AND `campaign_tracker__%d`.`link`=%d GROUP BY ?? ORDER BY COUNT(??) DESC, ??'; - let query = util.format(query_template, column, campaign.list, campaign.id, campaign.id, campaign.list, campaign.id, campaign.list, campaign.id, linkId, column, column, column); + let query = util.format(query_template, campaign.list, campaign.id, campaign.id, campaign.list, campaign.id, campaign.list, campaign.id, linkId); connection.query(query, [column, column, column, column], (err, rows) => { connection.release(); From d563928b0b3c2310156c0749c959717f8642ddcc Mon Sep 17 00:00:00 2001 From: dark Date: Thu, 17 Sep 2020 08:47:16 +0000 Subject: [PATCH 483/483] Update 'Dockerfile' --- Dockerfile | 54 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index d49ffbeb..fcbd6fd0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,47 @@ -FROM node:8.6 +# Mutistaged Node.js Build +FROM node:10-alpine as builder -# First install dependencies -COPY ./package.json ./app/ -WORKDIR /app/ -ENV NODE_ENV production -RUN npm install --no-progress --production && npm install --no-progress passport-ldapjs passport-ldapauth -# Later, copy the app files. That improves development speed as buiding the Docker image will not have +# Install system dependencies +RUN set -ex; \ + apk add --update --no-cache \ + make gcc g++ git python + +# Copy package.json dependencies +COPY server/package.json /app/server/package.json +COPY server/package-lock.json /app/server/package-lock.json +COPY client/package.json /app/client/package.json +COPY client/package-lock.json /app/client/package-lock.json +COPY shared/package.json /app/shared/package.json +COPY shared/package-lock.json /app/shared/package-lock.json +COPY zone-mta/package.json /app/zone-mta/package.json +COPY zone-mta/package-lock.json /app/zone-mta/package-lock.json + +# Install dependencies in each directory +RUN cd /app/client && npm install +RUN cd /app/shared && npm install --production +RUN cd /app/server && npm install --production +RUN cd /app/zone-mta && npm install --production + +# Later, copy the app files. That improves development speed as buiding the Docker image will not have # to download and install all the NPM dependencies every time there's a change in the source code COPY . /app -EXPOSE 3000 -ENTRYPOINT ["bash", "/app/docker-entrypoint.sh"] -CMD ["node", "index.js"] + +RUN set -ex; \ + cd /app/client && \ + npm run build && \ + rm -rf node_modules + +# Final Image +FROM node:10-alpine + +WORKDIR /app/ + +# Install system dependencies +RUN set -ex; \ + apk add --update --no-cache \ + pwgen netcat-openbsd bash imagemagick + +COPY --from=builder /app/ /app/ + +EXPOSE 3000 3003 3004 +ENTRYPOINT ["bash", "/app/docker-entrypoint.sh"] \ No newline at end of file